/ Hex Artifact Content
Login

Artifact 5446de0a90c15d713bbdb5827cf57ec30d1c3497097f39ec2c2e874dcca34ca3:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66  ******.** This f
0180: 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 63 6f 64  ile contains cod
0190: 65 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  e to implement t
01a0: 68 65 20 22 73 71 6c 69 74 65 22 20 63 6f 6d 6d  he "sqlite" comm
01b0: 61 6e 64 20 6c 69 6e 65 0a 2a 2a 20 75 74 69 6c  and line.** util
01c0: 69 74 79 20 66 6f 72 20 61 63 63 65 73 73 69 6e  ity for accessin
01d0: 67 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  g SQLite databas
01e0: 65 73 2e 0a 2a 2f 0a 23 69 66 20 28 64 65 66 69  es..*/.#if (defi
01f0: 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64  ned(_WIN32) || d
0200: 65 66 69 6e 65 64 28 57 49 4e 33 32 29 29 20 26  efined(WIN32)) &
0210: 26 20 21 64 65 66 69 6e 65 64 28 5f 43 52 54 5f  & !defined(_CRT_
0220: 53 45 43 55 52 45 5f 4e 4f 5f 57 41 52 4e 49 4e  SECURE_NO_WARNIN
0230: 47 53 29 0a 2f 2a 20 54 68 69 73 20 6e 65 65 64  GS)./* This need
0240: 73 20 74 6f 20 63 6f 6d 65 20 62 65 66 6f 72 65  s to come before
0250: 20 61 6e 79 20 69 6e 63 6c 75 64 65 73 20 66 6f   any includes fo
0260: 72 20 4d 53 56 43 20 63 6f 6d 70 69 6c 65 72 20  r MSVC compiler 
0270: 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 43 52 54 5f  */.#define _CRT_
0280: 53 45 43 55 52 45 5f 4e 4f 5f 57 41 52 4e 49 4e  SECURE_NO_WARNIN
0290: 47 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  GS.#endif../*.**
02a0: 20 57 61 72 6e 69 6e 67 20 70 72 61 67 6d 61 73   Warning pragmas
02b0: 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 6d 73 76   copied from msv
02c0: 63 2e 68 20 69 6e 20 74 68 65 20 63 6f 72 65 2e  c.h in the core.
02d0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
02e0: 5f 4d 53 43 5f 56 45 52 29 0a 23 70 72 61 67 6d  _MSC_VER).#pragm
02f0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0300: 65 20 3a 20 34 30 35 34 29 0a 23 70 72 61 67 6d  e : 4054).#pragm
0310: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0320: 65 20 3a 20 34 30 35 35 29 0a 23 70 72 61 67 6d  e : 4055).#pragm
0330: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0340: 65 20 3a 20 34 31 30 30 29 0a 23 70 72 61 67 6d  e : 4100).#pragm
0350: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0360: 65 20 3a 20 34 31 32 37 29 0a 23 70 72 61 67 6d  e : 4127).#pragm
0370: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0380: 65 20 3a 20 34 31 33 30 29 0a 23 70 72 61 67 6d  e : 4130).#pragm
0390: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
03a0: 65 20 3a 20 34 31 35 32 29 0a 23 70 72 61 67 6d  e : 4152).#pragm
03b0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
03c0: 65 20 3a 20 34 31 38 39 29 0a 23 70 72 61 67 6d  e : 4189).#pragm
03d0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
03e0: 65 20 3a 20 34 32 30 36 29 0a 23 70 72 61 67 6d  e : 4206).#pragm
03f0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0400: 65 20 3a 20 34 32 31 30 29 0a 23 70 72 61 67 6d  e : 4210).#pragm
0410: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0420: 65 20 3a 20 34 32 33 32 29 0a 23 70 72 61 67 6d  e : 4232).#pragm
0430: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0440: 65 20 3a 20 34 32 34 34 29 0a 23 70 72 61 67 6d  e : 4244).#pragm
0450: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0460: 65 20 3a 20 34 33 30 35 29 0a 23 70 72 61 67 6d  e : 4305).#pragm
0470: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0480: 65 20 3a 20 34 33 30 36 29 0a 23 70 72 61 67 6d  e : 4306).#pragm
0490: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
04a0: 65 20 3a 20 34 37 30 32 29 0a 23 70 72 61 67 6d  e : 4702).#pragm
04b0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
04c0: 65 20 3a 20 34 37 30 36 29 0a 23 65 6e 64 69 66  e : 4706).#endif
04d0: 20 2f 2a 20 64 65 66 69 6e 65 64 28 5f 4d 53 43   /* defined(_MSC
04e0: 5f 56 45 52 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  _VER) */../*.** 
04f0: 4e 6f 20 73 75 70 70 6f 72 74 20 66 6f 72 20 6c  No support for l
0500: 6f 61 64 61 62 6c 65 20 65 78 74 65 6e 73 69 6f  oadable extensio
0510: 6e 73 20 69 6e 20 56 78 57 6f 72 6b 73 2e 0a 2a  ns in VxWorks..*
0520: 2f 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 5f  /.#if (defined(_
0530: 5f 52 54 50 5f 5f 29 20 7c 7c 20 64 65 66 69 6e  _RTP__) || defin
0540: 65 64 28 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 29  ed(_WRS_KERNEL))
0550: 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54   && !SQLITE_OMIT
0560: 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
0570: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
0580: 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
0590: 49 4f 4e 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ION 1.#endif../*
05a0: 0a 2a 2a 20 45 6e 61 62 6c 65 20 6c 61 72 67 65  .** Enable large
05b0: 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 20 66 6f  -file support fo
05c0: 72 20 66 6f 70 65 6e 28 29 20 61 6e 64 20 66 72  r fopen() and fr
05d0: 69 65 6e 64 73 20 6f 6e 20 75 6e 69 78 2e 0a 2a  iends on unix..*
05e0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
05f0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a 23 20 64  _DISABLE_LFS.# d
0600: 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f 46 49 4c  efine _LARGE_FIL
0610: 45 20 20 20 20 20 20 20 31 0a 23 20 69 66 6e 64  E       1.# ifnd
0620: 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ef _FILE_OFFSET_
0630: 42 49 54 53 0a 23 20 20 20 64 65 66 69 6e 65 20  BITS.#   define 
0640: 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54  _FILE_OFFSET_BIT
0650: 53 20 36 34 0a 23 20 65 6e 64 69 66 0a 23 20 64  S 64.# endif.# d
0660: 65 66 69 6e 65 20 5f 4c 41 52 47 45 46 49 4c 45  efine _LARGEFILE
0670: 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e 64 69 66  _SOURCE 1.#endif
0680: 0a 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c  ..#include <stdl
0690: 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ib.h>.#include <
06a0: 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75  string.h>.#inclu
06b0: 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e  de <stdio.h>.#in
06c0: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
06d0: 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74  .#include "sqlit
06e0: 65 33 2e 68 22 0a 23 69 66 20 53 51 4c 49 54 45  e3.h".#if SQLITE
06f0: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
0700: 54 49 4f 4e 0a 23 20 69 6e 63 6c 75 64 65 20 22  TION.# include "
0710: 73 71 6c 69 74 65 33 75 73 65 72 61 75 74 68 2e  sqlite3userauth.
0720: 68 22 0a 23 65 6e 64 69 66 0a 23 69 6e 63 6c 75  h".#endif.#inclu
0730: 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 69 6e  de <ctype.h>.#in
0740: 63 6c 75 64 65 20 3c 73 74 64 61 72 67 2e 68 3e  clude <stdarg.h>
0750: 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  ..#if !defined(_
0760: 57 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e  WIN32) && !defin
0770: 65 64 28 57 49 4e 33 32 29 0a 23 20 69 6e 63 6c  ed(WIN32).# incl
0780: 75 64 65 20 3c 73 69 67 6e 61 6c 2e 68 3e 0a 23  ude <signal.h>.#
0790: 20 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 52   if !defined(__R
07a0: 54 50 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65  TP__) && !define
07b0: 64 28 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 0a 23  d(_WRS_KERNEL).#
07c0: 20 20 69 6e 63 6c 75 64 65 20 3c 70 77 64 2e 68    include <pwd.h
07d0: 3e 0a 23 20 65 6e 64 69 66 0a 23 20 69 6e 63 6c  >.# endif.# incl
07e0: 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e 0a 23  ude <unistd.h>.#
07f0: 20 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 79   include <sys/ty
0800: 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 23  pes.h>.#endif..#
0810: 69 66 20 48 41 56 45 5f 52 45 41 44 4c 49 4e 45  if HAVE_READLINE
0820: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 72 65 61 64  .# include <read
0830: 6c 69 6e 65 2f 72 65 61 64 6c 69 6e 65 2e 68 3e  line/readline.h>
0840: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 72 65 61 64  .# include <read
0850: 6c 69 6e 65 2f 68 69 73 74 6f 72 79 2e 68 3e 0a  line/history.h>.
0860: 23 65 6e 64 69 66 0a 0a 23 69 66 20 48 41 56 45  #endif..#if HAVE
0870: 5f 45 44 49 54 4c 49 4e 45 0a 23 20 69 6e 63 6c  _EDITLINE.# incl
0880: 75 64 65 20 3c 65 64 69 74 6c 69 6e 65 2f 72 65  ude <editline/re
0890: 61 64 6c 69 6e 65 2e 68 3e 0a 23 65 6e 64 69 66  adline.h>.#endif
08a0: 0a 0a 23 69 66 20 48 41 56 45 5f 45 44 49 54 4c  ..#if HAVE_EDITL
08b0: 49 4e 45 20 7c 7c 20 48 41 56 45 5f 52 45 41 44  INE || HAVE_READ
08c0: 4c 49 4e 45 0a 0a 23 20 64 65 66 69 6e 65 20 73  LINE..# define s
08d0: 68 65 6c 6c 5f 61 64 64 5f 68 69 73 74 6f 72 79  hell_add_history
08e0: 28 58 29 20 61 64 64 5f 68 69 73 74 6f 72 79 28  (X) add_history(
08f0: 58 29 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c  X).# define shel
0900: 6c 5f 72 65 61 64 5f 68 69 73 74 6f 72 79 28 58  l_read_history(X
0910: 29 20 72 65 61 64 5f 68 69 73 74 6f 72 79 28 58  ) read_history(X
0920: 29 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c 6c  ).# define shell
0930: 5f 77 72 69 74 65 5f 68 69 73 74 6f 72 79 28 58  _write_history(X
0940: 29 20 77 72 69 74 65 5f 68 69 73 74 6f 72 79 28  ) write_history(
0950: 58 29 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c  X).# define shel
0960: 6c 5f 73 74 69 66 6c 65 5f 68 69 73 74 6f 72 79  l_stifle_history
0970: 28 58 29 20 73 74 69 66 6c 65 5f 68 69 73 74 6f  (X) stifle_histo
0980: 72 79 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  ry(X).# define s
0990: 68 65 6c 6c 5f 72 65 61 64 6c 69 6e 65 28 58 29  hell_readline(X)
09a0: 20 72 65 61 64 6c 69 6e 65 28 58 29 0a 0a 23 65   readline(X)..#e
09b0: 6c 69 66 20 48 41 56 45 5f 4c 49 4e 45 4e 4f 49  lif HAVE_LINENOI
09c0: 53 45 0a 0a 23 20 69 6e 63 6c 75 64 65 20 22 6c  SE..# include "l
09d0: 69 6e 65 6e 6f 69 73 65 2e 68 22 0a 23 20 64 65  inenoise.h".# de
09e0: 66 69 6e 65 20 73 68 65 6c 6c 5f 61 64 64 5f 68  fine shell_add_h
09f0: 69 73 74 6f 72 79 28 58 29 20 6c 69 6e 65 6e 6f  istory(X) lineno
0a00: 69 73 65 48 69 73 74 6f 72 79 41 64 64 28 58 29  iseHistoryAdd(X)
0a10: 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f  .# define shell_
0a20: 72 65 61 64 5f 68 69 73 74 6f 72 79 28 58 29 20  read_history(X) 
0a30: 6c 69 6e 65 6e 6f 69 73 65 48 69 73 74 6f 72 79  linenoiseHistory
0a40: 4c 6f 61 64 28 58 29 0a 23 20 64 65 66 69 6e 65  Load(X).# define
0a50: 20 73 68 65 6c 6c 5f 77 72 69 74 65 5f 68 69 73   shell_write_his
0a60: 74 6f 72 79 28 58 29 20 6c 69 6e 65 6e 6f 69 73  tory(X) linenois
0a70: 65 48 69 73 74 6f 72 79 53 61 76 65 28 58 29 0a  eHistorySave(X).
0a80: 23 20 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f 73  # define shell_s
0a90: 74 69 66 6c 65 5f 68 69 73 74 6f 72 79 28 58 29  tifle_history(X)
0aa0: 20 6c 69 6e 65 6e 6f 69 73 65 48 69 73 74 6f 72   linenoiseHistor
0ab0: 79 53 65 74 4d 61 78 4c 65 6e 28 58 29 0a 23 20  ySetMaxLen(X).# 
0ac0: 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f 72 65 61  define shell_rea
0ad0: 64 6c 69 6e 65 28 58 29 20 6c 69 6e 65 6e 6f 69  dline(X) linenoi
0ae0: 73 65 28 58 29 0a 0a 23 65 6c 73 65 0a 0a 23 20  se(X)..#else..# 
0af0: 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f 72 65 61  define shell_rea
0b00: 64 5f 68 69 73 74 6f 72 79 28 58 29 0a 23 20 64  d_history(X).# d
0b10: 65 66 69 6e 65 20 73 68 65 6c 6c 5f 77 72 69 74  efine shell_writ
0b20: 65 5f 68 69 73 74 6f 72 79 28 58 29 0a 23 20 64  e_history(X).# d
0b30: 65 66 69 6e 65 20 73 68 65 6c 6c 5f 73 74 69 66  efine shell_stif
0b40: 6c 65 5f 68 69 73 74 6f 72 79 28 58 29 0a 0a 23  le_history(X)..#
0b50: 20 64 65 66 69 6e 65 20 53 48 45 4c 4c 5f 55 53   define SHELL_US
0b60: 45 5f 4c 4f 43 41 4c 5f 47 45 54 4c 49 4e 45 20  E_LOCAL_GETLINE 
0b70: 31 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 20 64  1.#endif...#if d
0b80: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c  efined(_WIN32) |
0b90: 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29  | defined(WIN32)
0ba0: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 69 6f 2e 68  .# include <io.h
0bb0: 3e 0a 23 20 69 6e 63 6c 75 64 65 20 3c 66 63 6e  >.# include <fcn
0bc0: 74 6c 2e 68 3e 0a 23 20 64 65 66 69 6e 65 20 69  tl.h>.# define i
0bd0: 73 61 74 74 79 28 68 29 20 5f 69 73 61 74 74 79  satty(h) _isatty
0be0: 28 68 29 0a 23 20 69 66 6e 64 65 66 20 61 63 63  (h).# ifndef acc
0bf0: 65 73 73 0a 23 20 20 64 65 66 69 6e 65 20 61 63  ess.#  define ac
0c00: 63 65 73 73 28 66 2c 6d 29 20 5f 61 63 63 65 73  cess(f,m) _acces
0c10: 73 28 28 66 29 2c 28 6d 29 29 0a 23 20 65 6e 64  s((f),(m)).# end
0c20: 69 66 0a 23 20 75 6e 64 65 66 20 70 6f 70 65 6e  if.# undef popen
0c30: 0a 23 20 64 65 66 69 6e 65 20 70 6f 70 65 6e 20  .# define popen 
0c40: 5f 70 6f 70 65 6e 0a 23 20 75 6e 64 65 66 20 70  _popen.# undef p
0c50: 63 6c 6f 73 65 0a 23 20 64 65 66 69 6e 65 20 70  close.# define p
0c60: 63 6c 6f 73 65 20 5f 70 63 6c 6f 73 65 0a 23 65  close _pclose.#e
0c70: 6c 73 65 0a 20 2f 2a 20 4d 61 6b 65 20 73 75 72  lse. /* Make sur
0c80: 65 20 69 73 61 74 74 79 28 29 20 68 61 73 20 61  e isatty() has a
0c90: 20 70 72 6f 74 6f 74 79 70 65 2e 20 2a 2f 0a 20   prototype. */. 
0ca0: 65 78 74 65 72 6e 20 69 6e 74 20 69 73 61 74 74  extern int isatt
0cb0: 79 28 69 6e 74 29 3b 0a 0a 23 20 69 66 20 21 64  y(int);..# if !d
0cc0: 65 66 69 6e 65 64 28 5f 5f 52 54 50 5f 5f 29 20  efined(__RTP__) 
0cd0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57 52 53  && !defined(_WRS
0ce0: 5f 4b 45 52 4e 45 4c 29 0a 20 20 2f 2a 20 70 6f  _KERNEL).  /* po
0cf0: 70 65 6e 20 61 6e 64 20 70 63 6c 6f 73 65 20 61  pen and pclose a
0d00: 72 65 20 6e 6f 74 20 43 38 39 20 66 75 6e 63 74  re not C89 funct
0d10: 69 6f 6e 73 20 61 6e 64 20 73 6f 20 61 72 65 0a  ions and so are.
0d20: 20 20 2a 2a 20 73 6f 6d 65 74 69 6d 65 73 20 6f    ** sometimes o
0d30: 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
0d40: 3c 73 74 64 69 6f 2e 68 3e 20 68 65 61 64 65 72  <stdio.h> header
0d50: 20 2a 2f 0a 20 20 20 65 78 74 65 72 6e 20 46 49   */.   extern FI
0d60: 4c 45 20 2a 70 6f 70 65 6e 28 63 6f 6e 73 74 20  LE *popen(const 
0d70: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
0d80: 2a 29 3b 0a 20 20 20 65 78 74 65 72 6e 20 69 6e  *);.   extern in
0d90: 74 20 70 63 6c 6f 73 65 28 46 49 4c 45 2a 29 3b  t pclose(FILE*);
0da0: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
0db0: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 4f  e SQLITE_OMIT_PO
0dc0: 50 45 4e 20 31 0a 23 20 65 6e 64 69 66 0a 23 65  PEN 1.# endif.#e
0dd0: 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
0de0: 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 2f 2a  d(_WIN32_WCE)./*
0df0: 20 57 69 6e 64 6f 77 73 20 43 45 20 28 61 72 6d   Windows CE (arm
0e00: 2d 77 69 6e 63 65 2d 6d 69 6e 67 77 33 32 63 65  -wince-mingw32ce
0e10: 2d 67 63 63 29 20 64 6f 65 73 20 6e 6f 74 20 70  -gcc) does not p
0e20: 72 6f 76 69 64 65 20 69 73 61 74 74 79 28 29 0a  rovide isatty().
0e30: 20 2a 20 74 68 75 73 20 77 65 20 61 6c 77 61 79   * thus we alway
0e40: 73 20 61 73 73 75 6d 65 20 74 68 61 74 20 77 65  s assume that we
0e50: 20 68 61 76 65 20 61 20 63 6f 6e 73 6f 6c 65 2e   have a console.
0e60: 20 54 68 61 74 20 63 61 6e 20 62 65 0a 20 2a 20   That can be. * 
0e70: 6f 76 65 72 72 69 64 64 65 6e 20 77 69 74 68 20  overridden with 
0e80: 74 68 65 20 2d 62 61 74 63 68 20 63 6f 6d 6d 61  the -batch comma
0e90: 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a  nd line option..
0ea0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 61 74   */.#define isat
0eb0: 74 79 28 78 29 20 31 0a 23 65 6e 64 69 66 0a 0a  ty(x) 1.#endif..
0ec0: 2f 2a 20 63 74 79 70 65 20 6d 61 63 72 6f 73 20  /* ctype macros 
0ed0: 74 68 61 74 20 77 6f 72 6b 20 77 69 74 68 20 73  that work with s
0ee0: 69 67 6e 65 64 20 63 68 61 72 61 63 74 65 72 73  igned characters
0ef0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 53 70   */.#define IsSp
0f00: 61 63 65 28 58 29 20 20 69 73 73 70 61 63 65 28  ace(X)  isspace(
0f10: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 58  (unsigned char)X
0f20: 29 0a 23 64 65 66 69 6e 65 20 49 73 44 69 67 69  ).#define IsDigi
0f30: 74 28 58 29 20 20 69 73 64 69 67 69 74 28 28 75  t(X)  isdigit((u
0f40: 6e 73 69 67 6e 65 64 20 63 68 61 72 29 58 29 0a  nsigned char)X).
0f50: 23 64 65 66 69 6e 65 20 54 6f 4c 6f 77 65 72 28  #define ToLower(
0f60: 58 29 20 20 28 63 68 61 72 29 74 6f 6c 6f 77 65  X)  (char)tolowe
0f70: 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
0f80: 29 58 29 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  )X)..#if defined
0f90: 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69  (_WIN32) || defi
0fa0: 6e 65 64 28 57 49 4e 33 32 29 0a 23 69 6e 63 6c  ned(WIN32).#incl
0fb0: 75 64 65 20 3c 77 69 6e 64 6f 77 73 2e 68 3e 0a  ude <windows.h>.
0fc0: 0a 2f 2a 20 73 74 72 69 6e 67 20 63 6f 6e 76 65  ./* string conve
0fd0: 72 73 69 6f 6e 20 72 6f 75 74 69 6e 65 73 20 6f  rsion routines o
0fe0: 6e 6c 79 20 6e 65 65 64 65 64 20 6f 6e 20 57 69  nly needed on Wi
0ff0: 6e 33 32 20 2a 2f 0a 65 78 74 65 72 6e 20 63 68  n32 */.extern ch
1000: 61 72 20 2a 73 71 6c 69 74 65 33 5f 77 69 6e 33  ar *sqlite3_win3
1010: 32 5f 75 6e 69 63 6f 64 65 5f 74 6f 5f 75 74 66  2_unicode_to_utf
1020: 38 28 4c 50 43 57 53 54 52 29 3b 0a 65 78 74 65  8(LPCWSTR);.exte
1030: 72 6e 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  rn char *sqlite3
1040: 5f 77 69 6e 33 32 5f 6d 62 63 73 5f 74 6f 5f 75  _win32_mbcs_to_u
1050: 74 66 38 5f 76 32 28 63 6f 6e 73 74 20 63 68 61  tf8_v2(const cha
1060: 72 20 2a 2c 20 69 6e 74 29 3b 0a 65 78 74 65 72  r *, int);.exter
1070: 6e 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  n char *sqlite3_
1080: 77 69 6e 33 32 5f 75 74 66 38 5f 74 6f 5f 6d 62  win32_utf8_to_mb
1090: 63 73 5f 76 32 28 63 6f 6e 73 74 20 63 68 61 72  cs_v2(const char
10a0: 20 2a 2c 20 69 6e 74 29 3b 0a 65 78 74 65 72 6e   *, int);.extern
10b0: 20 4c 50 57 53 54 52 20 73 71 6c 69 74 65 33 5f   LPWSTR sqlite3_
10c0: 77 69 6e 33 32 5f 75 74 66 38 5f 74 6f 5f 75 6e  win32_utf8_to_un
10d0: 69 63 6f 64 65 28 63 6f 6e 73 74 20 63 68 61 72  icode(const char
10e0: 20 2a 7a 54 65 78 74 29 3b 0a 23 65 6e 64 69 66   *zText);.#endif
10f0: 0a 0a 2f 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c  ../* On Windows,
1100: 20 77 65 20 6e 6f 72 6d 61 6c 6c 79 20 72 75 6e   we normally run
1110: 20 77 69 74 68 20 6f 75 74 70 75 74 20 6d 6f 64   with output mod
1120: 65 20 6f 66 20 54 45 58 54 20 73 6f 20 74 68 61  e of TEXT so tha
1130: 74 20 5c 6e 20 63 68 61 72 61 63 74 65 72 73 0a  t \n characters.
1140: 2a 2a 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ** are automatic
1150: 61 6c 6c 79 20 74 72 61 6e 73 6c 61 74 65 64 20  ally translated 
1160: 69 6e 74 6f 20 5c 72 5c 6e 2e 20 20 48 6f 77 65  into \r\n.  Howe
1170: 76 65 72 2c 20 74 68 69 73 20 62 65 68 61 76 69  ver, this behavi
1180: 6f 72 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62  or needs.** to b
1190: 65 20 64 69 73 61 62 6c 65 64 20 69 6e 20 73 6f  e disabled in so
11a0: 6d 65 20 63 61 73 65 73 20 28 65 78 3a 20 77 68  me cases (ex: wh
11b0: 65 6e 20 67 65 6e 65 72 61 74 69 6e 67 20 43 53  en generating CS
11c0: 56 20 6f 75 74 70 75 74 20 61 6e 64 20 77 68 65  V output and whe
11d0: 6e 0a 2a 2a 20 72 65 6e 64 65 72 69 6e 67 20 71  n.** rendering q
11e0: 75 6f 74 65 64 20 73 74 72 69 6e 67 73 20 74 68  uoted strings th
11f0: 61 74 20 63 6f 6e 74 61 69 6e 20 5c 6e 20 63 68  at contain \n ch
1200: 61 72 61 63 74 65 72 73 29 2e 20 20 54 68 65 20  aracters).  The 
1210: 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 72 6f 75  following.** rou
1220: 74 69 6e 65 73 20 74 61 6b 65 20 63 61 72 65 20  tines take care 
1230: 6f 66 20 74 68 61 74 2e 0a 2a 2f 0a 23 69 66 20  of that..*/.#if 
1240: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
1250: 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  || defined(WIN32
1260: 29 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 65  ).static void se
1270: 74 42 69 6e 61 72 79 4d 6f 64 65 28 46 49 4c 45  tBinaryMode(FILE
1280: 20 2a 66 69 6c 65 2c 20 69 6e 74 20 69 73 4f 75   *file, int isOu
1290: 74 70 75 74 29 7b 0a 20 20 69 66 28 20 69 73 4f  tput){.  if( isO
12a0: 75 74 70 75 74 20 29 20 66 66 6c 75 73 68 28 66  utput ) fflush(f
12b0: 69 6c 65 29 3b 0a 20 20 5f 73 65 74 6d 6f 64 65  ile);.  _setmode
12c0: 28 5f 66 69 6c 65 6e 6f 28 66 69 6c 65 29 2c 20  (_fileno(file), 
12d0: 5f 4f 5f 42 49 4e 41 52 59 29 3b 0a 7d 0a 73 74  _O_BINARY);.}.st
12e0: 61 74 69 63 20 76 6f 69 64 20 73 65 74 54 65 78  atic void setTex
12f0: 74 4d 6f 64 65 28 46 49 4c 45 20 2a 66 69 6c 65  tMode(FILE *file
1300: 2c 20 69 6e 74 20 69 73 4f 75 74 70 75 74 29 7b  , int isOutput){
1310: 0a 20 20 69 66 28 20 69 73 4f 75 74 70 75 74 20  .  if( isOutput 
1320: 29 20 66 66 6c 75 73 68 28 66 69 6c 65 29 3b 0a  ) fflush(file);.
1330: 20 20 5f 73 65 74 6d 6f 64 65 28 5f 66 69 6c 65    _setmode(_file
1340: 6e 6f 28 66 69 6c 65 29 2c 20 5f 4f 5f 54 45 58  no(file), _O_TEX
1350: 54 29 3b 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65  T);.}.#else.# de
1360: 66 69 6e 65 20 73 65 74 42 69 6e 61 72 79 4d 6f  fine setBinaryMo
1370: 64 65 28 58 2c 59 29 0a 23 20 64 65 66 69 6e 65  de(X,Y).# define
1380: 20 73 65 74 54 65 78 74 4d 6f 64 65 28 58 2c 59   setTextMode(X,Y
1390: 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 54 72  ).#endif.../* Tr
13a0: 75 65 20 69 66 20 74 68 65 20 74 69 6d 65 72 20  ue if the timer 
13b0: 69 73 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 73 74  is enabled */.st
13c0: 61 74 69 63 20 69 6e 74 20 65 6e 61 62 6c 65 54  atic int enableT
13d0: 69 6d 65 72 20 3d 20 30 3b 0a 0a 2f 2a 20 52 65  imer = 0;../* Re
13e0: 74 75 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74  turn the current
13f0: 20 77 61 6c 6c 2d 63 6c 6f 63 6b 20 74 69 6d 65   wall-clock time
1400: 20 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c 69 74   */.static sqlit
1410: 65 33 5f 69 6e 74 36 34 20 74 69 6d 65 4f 66 44  e3_int64 timeOfD
1420: 61 79 28 76 6f 69 64 29 7b 0a 20 20 73 74 61 74  ay(void){.  stat
1430: 69 63 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ic sqlite3_vfs *
1440: 63 6c 6f 63 6b 56 66 73 20 3d 20 30 3b 0a 20 20  clockVfs = 0;.  
1450: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 74 3b  sqlite3_int64 t;
1460: 0a 20 20 69 66 28 20 63 6c 6f 63 6b 56 66 73 3d  .  if( clockVfs=
1470: 3d 30 20 29 20 63 6c 6f 63 6b 56 66 73 20 3d 20  =0 ) clockVfs = 
1480: 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64  sqlite3_vfs_find
1490: 28 30 29 3b 0a 20 20 69 66 28 20 63 6c 6f 63 6b  (0);.  if( clock
14a0: 56 66 73 2d 3e 69 56 65 72 73 69 6f 6e 3e 3d 32  Vfs->iVersion>=2
14b0: 20 26 26 20 63 6c 6f 63 6b 56 66 73 2d 3e 78 43   && clockVfs->xC
14c0: 75 72 72 65 6e 74 54 69 6d 65 49 6e 74 36 34 21  urrentTimeInt64!
14d0: 3d 30 20 29 7b 0a 20 20 20 20 63 6c 6f 63 6b 56  =0 ){.    clockV
14e0: 66 73 2d 3e 78 43 75 72 72 65 6e 74 54 69 6d 65  fs->xCurrentTime
14f0: 49 6e 74 36 34 28 63 6c 6f 63 6b 56 66 73 2c 20  Int64(clockVfs, 
1500: 26 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  &t);.  }else{.  
1510: 20 20 64 6f 75 62 6c 65 20 72 3b 0a 20 20 20 20    double r;.    
1520: 63 6c 6f 63 6b 56 66 73 2d 3e 78 43 75 72 72 65  clockVfs->xCurre
1530: 6e 74 54 69 6d 65 28 63 6c 6f 63 6b 56 66 73 2c  ntTime(clockVfs,
1540: 20 26 72 29 3b 0a 20 20 20 20 74 20 3d 20 28 73   &r);.    t = (s
1550: 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 28 72 2a  qlite3_int64)(r*
1560: 38 36 34 30 30 30 30 30 2e 30 29 3b 0a 20 20 7d  86400000.0);.  }
1570: 0a 20 20 72 65 74 75 72 6e 20 74 3b 0a 7d 0a 0a  .  return t;.}..
1580: 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49  #if !defined(_WI
1590: 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65 64  N32) && !defined
15a0: 28 57 49 4e 33 32 29 20 26 26 20 21 64 65 66 69  (WIN32) && !defi
15b0: 6e 65 64 28 5f 5f 6d 69 6e 75 78 29 0a 23 69 6e  ned(__minux).#in
15c0: 63 6c 75 64 65 20 3c 73 79 73 2f 74 69 6d 65 2e  clude <sys/time.
15d0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73  h>.#include <sys
15e0: 2f 72 65 73 6f 75 72 63 65 2e 68 3e 0a 0a 2f 2a  /resource.h>../*
15f0: 20 56 78 57 6f 72 6b 73 20 64 6f 65 73 20 6e 6f   VxWorks does no
1600: 74 20 73 75 70 70 6f 72 74 20 67 65 74 72 75 73  t support getrus
1610: 61 67 65 28 29 20 61 73 20 66 61 72 20 61 73 20  age() as far as 
1620: 77 65 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65  we can determine
1630: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1640: 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 20 7c 7c 20  _WRS_KERNEL) || 
1650: 64 65 66 69 6e 65 64 28 5f 5f 52 54 50 5f 5f 29  defined(__RTP__)
1660: 0a 73 74 72 75 63 74 20 72 75 73 61 67 65 20 7b  .struct rusage {
1670: 0a 20 20 73 74 72 75 63 74 20 74 69 6d 65 76 61  .  struct timeva
1680: 6c 20 72 75 5f 75 74 69 6d 65 3b 20 2f 2a 20 75  l ru_utime; /* u
1690: 73 65 72 20 43 50 55 20 74 69 6d 65 20 75 73 65  ser CPU time use
16a0: 64 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 74 69  d */.  struct ti
16b0: 6d 65 76 61 6c 20 72 75 5f 73 74 69 6d 65 3b 20  meval ru_stime; 
16c0: 2f 2a 20 73 79 73 74 65 6d 20 43 50 55 20 74 69  /* system CPU ti
16d0: 6d 65 20 75 73 65 64 20 2a 2f 0a 7d 3b 0a 23 64  me used */.};.#d
16e0: 65 66 69 6e 65 20 67 65 74 72 75 73 61 67 65 28  efine getrusage(
16f0: 41 2c 42 29 20 6d 65 6d 73 65 74 28 42 2c 30 2c  A,B) memset(B,0,
1700: 73 69 7a 65 6f 66 28 2a 42 29 29 0a 23 65 6e 64  sizeof(*B)).#end
1710: 69 66 0a 0a 2f 2a 20 53 61 76 65 64 20 72 65 73  if../* Saved res
1720: 6f 75 72 63 65 20 69 6e 66 6f 72 6d 61 74 69 6f  ource informatio
1730: 6e 20 66 6f 72 20 74 68 65 20 62 65 67 69 6e 6e  n for the beginn
1740: 69 6e 67 20 6f 66 20 61 6e 20 6f 70 65 72 61 74  ing of an operat
1750: 69 6f 6e 20 2a 2f 0a 73 74 61 74 69 63 20 73 74  ion */.static st
1760: 72 75 63 74 20 72 75 73 61 67 65 20 73 42 65 67  ruct rusage sBeg
1770: 69 6e 3b 20 20 2f 2a 20 43 50 55 20 74 69 6d 65  in;  /* CPU time
1780: 20 61 74 20 73 74 61 72 74 20 2a 2f 0a 73 74 61   at start */.sta
1790: 74 69 63 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  tic sqlite3_int6
17a0: 34 20 69 42 65 67 69 6e 3b 20 20 2f 2a 20 57 61  4 iBegin;  /* Wa
17b0: 6c 6c 2d 63 6c 6f 63 6b 20 74 69 6d 65 20 61 74  ll-clock time at
17c0: 20 73 74 61 72 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   start */../*.**
17d0: 20 42 65 67 69 6e 20 74 69 6d 69 6e 67 20 61 6e   Begin timing an
17e0: 20 6f 70 65 72 61 74 69 6f 6e 0a 2a 2f 0a 73 74   operation.*/.st
17f0: 61 74 69 63 20 76 6f 69 64 20 62 65 67 69 6e 54  atic void beginT
1800: 69 6d 65 72 28 76 6f 69 64 29 7b 0a 20 20 69 66  imer(void){.  if
1810: 28 20 65 6e 61 62 6c 65 54 69 6d 65 72 20 29 7b  ( enableTimer ){
1820: 0a 20 20 20 20 67 65 74 72 75 73 61 67 65 28 52  .    getrusage(R
1830: 55 53 41 47 45 5f 53 45 4c 46 2c 20 26 73 42 65  USAGE_SELF, &sBe
1840: 67 69 6e 29 3b 0a 20 20 20 20 69 42 65 67 69 6e  gin);.    iBegin
1850: 20 3d 20 74 69 6d 65 4f 66 44 61 79 28 29 3b 0a   = timeOfDay();.
1860: 20 20 7d 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e    }.}../* Return
1870: 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
1880: 6f 66 20 74 77 6f 20 74 69 6d 65 5f 73 74 72 75  of two time_stru
1890: 63 74 73 20 69 6e 20 73 65 63 6f 6e 64 73 20 2a  cts in seconds *
18a0: 2f 0a 73 74 61 74 69 63 20 64 6f 75 62 6c 65 20  /.static double 
18b0: 74 69 6d 65 44 69 66 66 28 73 74 72 75 63 74 20  timeDiff(struct 
18c0: 74 69 6d 65 76 61 6c 20 2a 70 53 74 61 72 74 2c  timeval *pStart,
18d0: 20 73 74 72 75 63 74 20 74 69 6d 65 76 61 6c 20   struct timeval 
18e0: 2a 70 45 6e 64 29 7b 0a 20 20 72 65 74 75 72 6e  *pEnd){.  return
18f0: 20 28 70 45 6e 64 2d 3e 74 76 5f 75 73 65 63 20   (pEnd->tv_usec 
1900: 2d 20 70 53 74 61 72 74 2d 3e 74 76 5f 75 73 65  - pStart->tv_use
1910: 63 29 2a 30 2e 30 30 30 30 30 31 20 2b 0a 20 20  c)*0.000001 +.  
1920: 20 20 20 20 20 20 20 28 64 6f 75 62 6c 65 29 28         (double)(
1930: 70 45 6e 64 2d 3e 74 76 5f 73 65 63 20 2d 20 70  pEnd->tv_sec - p
1940: 53 74 61 72 74 2d 3e 74 76 5f 73 65 63 29 3b 0a  Start->tv_sec);.
1950: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  }../*.** Print t
1960: 68 65 20 74 69 6d 69 6e 67 20 72 65 73 75 6c 74  he timing result
1970: 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  s..*/.static voi
1980: 64 20 65 6e 64 54 69 6d 65 72 28 76 6f 69 64 29  d endTimer(void)
1990: 7b 0a 20 20 69 66 28 20 65 6e 61 62 6c 65 54 69  {.  if( enableTi
19a0: 6d 65 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  mer ){.    sqlit
19b0: 65 33 5f 69 6e 74 36 34 20 69 45 6e 64 20 3d 20  e3_int64 iEnd = 
19c0: 74 69 6d 65 4f 66 44 61 79 28 29 3b 0a 20 20 20  timeOfDay();.   
19d0: 20 73 74 72 75 63 74 20 72 75 73 61 67 65 20 73   struct rusage s
19e0: 45 6e 64 3b 0a 20 20 20 20 67 65 74 72 75 73 61  End;.    getrusa
19f0: 67 65 28 52 55 53 41 47 45 5f 53 45 4c 46 2c 20  ge(RUSAGE_SELF, 
1a00: 26 73 45 6e 64 29 3b 0a 20 20 20 20 70 72 69 6e  &sEnd);.    prin
1a10: 74 66 28 22 52 75 6e 20 54 69 6d 65 3a 20 72 65  tf("Run Time: re
1a20: 61 6c 20 25 2e 33 66 20 75 73 65 72 20 25 66 20  al %.3f user %f 
1a30: 73 79 73 20 25 66 5c 6e 22 2c 0a 20 20 20 20 20  sys %f\n",.     
1a40: 20 20 28 69 45 6e 64 20 2d 20 69 42 65 67 69 6e    (iEnd - iBegin
1a50: 29 2a 30 2e 30 30 31 2c 0a 20 20 20 20 20 20 20  )*0.001,.       
1a60: 74 69 6d 65 44 69 66 66 28 26 73 42 65 67 69 6e  timeDiff(&sBegin
1a70: 2e 72 75 5f 75 74 69 6d 65 2c 20 26 73 45 6e 64  .ru_utime, &sEnd
1a80: 2e 72 75 5f 75 74 69 6d 65 29 2c 0a 20 20 20 20  .ru_utime),.    
1a90: 20 20 20 74 69 6d 65 44 69 66 66 28 26 73 42 65     timeDiff(&sBe
1aa0: 67 69 6e 2e 72 75 5f 73 74 69 6d 65 2c 20 26 73  gin.ru_stime, &s
1ab0: 45 6e 64 2e 72 75 5f 73 74 69 6d 65 29 29 3b 0a  End.ru_stime));.
1ac0: 20 20 7d 0a 7d 0a 0a 23 64 65 66 69 6e 65 20 42    }.}..#define B
1ad0: 45 47 49 4e 5f 54 49 4d 45 52 20 62 65 67 69 6e  EGIN_TIMER begin
1ae0: 54 69 6d 65 72 28 29 0a 23 64 65 66 69 6e 65 20  Timer().#define 
1af0: 45 4e 44 5f 54 49 4d 45 52 20 65 6e 64 54 69 6d  END_TIMER endTim
1b00: 65 72 28 29 0a 23 64 65 66 69 6e 65 20 48 41 53  er().#define HAS
1b10: 5f 54 49 4d 45 52 20 31 0a 0a 23 65 6c 69 66 20  _TIMER 1..#elif 
1b20: 28 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29  (defined(_WIN32)
1b30: 20 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33   || defined(WIN3
1b40: 32 29 29 0a 0a 2f 2a 20 53 61 76 65 64 20 72 65  2))../* Saved re
1b50: 73 6f 75 72 63 65 20 69 6e 66 6f 72 6d 61 74 69  source informati
1b60: 6f 6e 20 66 6f 72 20 74 68 65 20 62 65 67 69 6e  on for the begin
1b70: 6e 69 6e 67 20 6f 66 20 61 6e 20 6f 70 65 72 61  ning of an opera
1b80: 74 69 6f 6e 20 2a 2f 0a 73 74 61 74 69 63 20 48  tion */.static H
1b90: 41 4e 44 4c 45 20 68 50 72 6f 63 65 73 73 3b 0a  ANDLE hProcess;.
1ba0: 73 74 61 74 69 63 20 46 49 4c 45 54 49 4d 45 20  static FILETIME 
1bb0: 66 74 4b 65 72 6e 65 6c 42 65 67 69 6e 3b 0a 73  ftKernelBegin;.s
1bc0: 74 61 74 69 63 20 46 49 4c 45 54 49 4d 45 20 66  tatic FILETIME f
1bd0: 74 55 73 65 72 42 65 67 69 6e 3b 0a 73 74 61 74  tUserBegin;.stat
1be0: 69 63 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  ic sqlite3_int64
1bf0: 20 66 74 57 61 6c 6c 42 65 67 69 6e 3b 0a 74 79   ftWallBegin;.ty
1c00: 70 65 64 65 66 20 42 4f 4f 4c 20 28 57 49 4e 41  pedef BOOL (WINA
1c10: 50 49 20 2a 47 45 54 50 52 4f 43 54 49 4d 45 53  PI *GETPROCTIMES
1c20: 29 28 48 41 4e 44 4c 45 2c 20 4c 50 46 49 4c 45  )(HANDLE, LPFILE
1c30: 54 49 4d 45 2c 20 4c 50 46 49 4c 45 54 49 4d 45  TIME, LPFILETIME
1c40: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c60: 20 20 20 20 20 20 4c 50 46 49 4c 45 54 49 4d 45        LPFILETIME
1c70: 2c 20 4c 50 46 49 4c 45 54 49 4d 45 29 3b 0a 73  , LPFILETIME);.s
1c80: 74 61 74 69 63 20 47 45 54 50 52 4f 43 54 49 4d  tatic GETPROCTIM
1c90: 45 53 20 67 65 74 50 72 6f 63 65 73 73 54 69 6d  ES getProcessTim
1ca0: 65 73 41 64 64 72 20 3d 20 4e 55 4c 4c 3b 0a 0a  esAddr = NULL;..
1cb0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
1cc0: 65 65 20 69 66 20 77 65 20 68 61 76 65 20 74 69  ee if we have ti
1cd0: 6d 65 72 20 73 75 70 70 6f 72 74 2e 20 20 52 65  mer support.  Re
1ce0: 74 75 72 6e 20 31 20 69 66 20 6e 65 63 65 73 73  turn 1 if necess
1cf0: 61 72 79 0a 2a 2a 20 73 75 70 70 6f 72 74 20 66  ary.** support f
1d00: 6f 75 6e 64 20 28 6f 72 20 66 6f 75 6e 64 20 70  ound (or found p
1d10: 72 65 76 69 6f 75 73 6c 79 29 2e 0a 2a 2f 0a 73  reviously)..*/.s
1d20: 74 61 74 69 63 20 69 6e 74 20 68 61 73 54 69 6d  tatic int hasTim
1d30: 65 72 28 76 6f 69 64 29 7b 0a 20 20 69 66 28 20  er(void){.  if( 
1d40: 67 65 74 50 72 6f 63 65 73 73 54 69 6d 65 73 41  getProcessTimesA
1d50: 64 64 72 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ddr ){.    retur
1d60: 6e 20 31 3b 0a 20 20 7d 20 65 6c 73 65 20 7b 0a  n 1;.  } else {.
1d70: 20 20 20 20 2f 2a 20 47 65 74 50 72 6f 63 65 73      /* GetProces
1d80: 73 54 69 6d 65 73 28 29 20 69 73 6e 27 74 20 73  sTimes() isn't s
1d90: 75 70 70 6f 72 74 65 64 20 69 6e 20 57 49 4e 39  upported in WIN9
1da0: 35 20 61 6e 64 20 73 6f 6d 65 20 6f 74 68 65 72  5 and some other
1db0: 20 57 69 6e 64 6f 77 73 0a 20 20 20 20 2a 2a 20   Windows.    ** 
1dc0: 76 65 72 73 69 6f 6e 73 2e 20 53 65 65 20 69 66  versions. See if
1dd0: 20 74 68 65 20 76 65 72 73 69 6f 6e 20 77 65 20   the version we 
1de0: 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 68  are running on h
1df0: 61 73 20 69 74 2c 20 61 6e 64 20 69 66 20 69 74  as it, and if it
1e00: 0a 20 20 20 20 2a 2a 20 64 6f 65 73 2c 20 73 61  .    ** does, sa
1e10: 76 65 20 6f 66 66 20 61 20 70 6f 69 6e 74 65 72  ve off a pointer
1e20: 20 74 6f 20 69 74 20 61 6e 64 20 74 68 65 20 63   to it and the c
1e30: 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 68  urrent process h
1e40: 61 6e 64 6c 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  andle..    */.  
1e50: 20 20 68 50 72 6f 63 65 73 73 20 3d 20 47 65 74    hProcess = Get
1e60: 43 75 72 72 65 6e 74 50 72 6f 63 65 73 73 28 29  CurrentProcess()
1e70: 3b 0a 20 20 20 20 69 66 28 20 68 50 72 6f 63 65  ;.    if( hProce
1e80: 73 73 20 29 7b 0a 20 20 20 20 20 20 48 49 4e 53  ss ){.      HINS
1e90: 54 41 4e 43 45 20 68 69 6e 73 74 4c 69 62 20 3d  TANCE hinstLib =
1ea0: 20 4c 6f 61 64 4c 69 62 72 61 72 79 28 54 45 58   LoadLibrary(TEX
1eb0: 54 28 22 4b 65 72 6e 65 6c 33 32 2e 64 6c 6c 22  T("Kernel32.dll"
1ec0: 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 4e 55  ));.      if( NU
1ed0: 4c 4c 20 21 3d 20 68 69 6e 73 74 4c 69 62 20 29  LL != hinstLib )
1ee0: 7b 0a 20 20 20 20 20 20 20 20 67 65 74 50 72 6f  {.        getPro
1ef0: 63 65 73 73 54 69 6d 65 73 41 64 64 72 20 3d 0a  cessTimesAddr =.
1f00: 20 20 20 20 20 20 20 20 20 20 20 20 28 47 45 54              (GET
1f10: 50 52 4f 43 54 49 4d 45 53 29 20 47 65 74 50 72  PROCTIMES) GetPr
1f20: 6f 63 41 64 64 72 65 73 73 28 68 69 6e 73 74 4c  ocAddress(hinstL
1f30: 69 62 2c 20 22 47 65 74 50 72 6f 63 65 73 73 54  ib, "GetProcessT
1f40: 69 6d 65 73 22 29 3b 0a 20 20 20 20 20 20 20 20  imes");.        
1f50: 69 66 28 20 4e 55 4c 4c 20 21 3d 20 67 65 74 50  if( NULL != getP
1f60: 72 6f 63 65 73 73 54 69 6d 65 73 41 64 64 72 20  rocessTimesAddr 
1f70: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ){.          ret
1f80: 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  urn 1;.        }
1f90: 0a 20 20 20 20 20 20 20 20 46 72 65 65 4c 69 62  .        FreeLib
1fa0: 72 61 72 79 28 68 69 6e 73 74 4c 69 62 29 3b 0a  rary(hinstLib);.
1fb0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1fc0: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
1fd0: 0a 2f 2a 0a 2a 2a 20 42 65 67 69 6e 20 74 69 6d  ./*.** Begin tim
1fe0: 69 6e 67 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e  ing an operation
1ff0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
2000: 62 65 67 69 6e 54 69 6d 65 72 28 76 6f 69 64 29  beginTimer(void)
2010: 7b 0a 20 20 69 66 28 20 65 6e 61 62 6c 65 54 69  {.  if( enableTi
2020: 6d 65 72 20 26 26 20 67 65 74 50 72 6f 63 65 73  mer && getProces
2030: 73 54 69 6d 65 73 41 64 64 72 20 29 7b 0a 20 20  sTimesAddr ){.  
2040: 20 20 46 49 4c 45 54 49 4d 45 20 66 74 43 72 65    FILETIME ftCre
2050: 61 74 69 6f 6e 2c 20 66 74 45 78 69 74 3b 0a 20  ation, ftExit;. 
2060: 20 20 20 67 65 74 50 72 6f 63 65 73 73 54 69 6d     getProcessTim
2070: 65 73 41 64 64 72 28 68 50 72 6f 63 65 73 73 2c  esAddr(hProcess,
2080: 26 66 74 43 72 65 61 74 69 6f 6e 2c 26 66 74 45  &ftCreation,&ftE
2090: 78 69 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  xit,.           
20a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 26 66 74               &ft
20b0: 4b 65 72 6e 65 6c 42 65 67 69 6e 2c 26 66 74 55  KernelBegin,&ftU
20c0: 73 65 72 42 65 67 69 6e 29 3b 0a 20 20 20 20 66  serBegin);.    f
20d0: 74 57 61 6c 6c 42 65 67 69 6e 20 3d 20 74 69 6d  tWallBegin = tim
20e0: 65 4f 66 44 61 79 28 29 3b 0a 20 20 7d 0a 7d 0a  eOfDay();.  }.}.
20f0: 0a 2f 2a 20 52 65 74 75 72 6e 20 74 68 65 20 64  ./* Return the d
2100: 69 66 66 65 72 65 6e 63 65 20 6f 66 20 74 77 6f  ifference of two
2110: 20 46 49 4c 45 54 49 4d 45 20 73 74 72 75 63 74   FILETIME struct
2120: 73 20 69 6e 20 73 65 63 6f 6e 64 73 20 2a 2f 0a  s in seconds */.
2130: 73 74 61 74 69 63 20 64 6f 75 62 6c 65 20 74 69  static double ti
2140: 6d 65 44 69 66 66 28 46 49 4c 45 54 49 4d 45 20  meDiff(FILETIME 
2150: 2a 70 53 74 61 72 74 2c 20 46 49 4c 45 54 49 4d  *pStart, FILETIM
2160: 45 20 2a 70 45 6e 64 29 7b 0a 20 20 73 71 6c 69  E *pEnd){.  sqli
2170: 74 65 5f 69 6e 74 36 34 20 69 36 34 53 74 61 72  te_int64 i64Star
2180: 74 20 3d 20 2a 28 28 73 71 6c 69 74 65 5f 69 6e  t = *((sqlite_in
2190: 74 36 34 20 2a 29 20 70 53 74 61 72 74 29 3b 0a  t64 *) pStart);.
21a0: 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69    sqlite_int64 i
21b0: 36 34 45 6e 64 20 3d 20 2a 28 28 73 71 6c 69 74  64End = *((sqlit
21c0: 65 5f 69 6e 74 36 34 20 2a 29 20 70 45 6e 64 29  e_int64 *) pEnd)
21d0: 3b 0a 20 20 72 65 74 75 72 6e 20 28 64 6f 75 62  ;.  return (doub
21e0: 6c 65 29 20 28 28 69 36 34 45 6e 64 20 2d 20 69  le) ((i64End - i
21f0: 36 34 53 74 61 72 74 29 20 2f 20 31 30 30 30 30  64Start) / 10000
2200: 30 30 30 2e 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  000.0);.}../*.**
2210: 20 50 72 69 6e 74 20 74 68 65 20 74 69 6d 69 6e   Print the timin
2220: 67 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 73 74  g results..*/.st
2230: 61 74 69 63 20 76 6f 69 64 20 65 6e 64 54 69 6d  atic void endTim
2240: 65 72 28 76 6f 69 64 29 7b 0a 20 20 69 66 28 20  er(void){.  if( 
2250: 65 6e 61 62 6c 65 54 69 6d 65 72 20 26 26 20 67  enableTimer && g
2260: 65 74 50 72 6f 63 65 73 73 54 69 6d 65 73 41 64  etProcessTimesAd
2270: 64 72 29 7b 0a 20 20 20 20 46 49 4c 45 54 49 4d  dr){.    FILETIM
2280: 45 20 66 74 43 72 65 61 74 69 6f 6e 2c 20 66 74  E ftCreation, ft
2290: 45 78 69 74 2c 20 66 74 4b 65 72 6e 65 6c 45 6e  Exit, ftKernelEn
22a0: 64 2c 20 66 74 55 73 65 72 45 6e 64 3b 0a 20 20  d, ftUserEnd;.  
22b0: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
22c0: 66 74 57 61 6c 6c 45 6e 64 20 3d 20 74 69 6d 65  ftWallEnd = time
22d0: 4f 66 44 61 79 28 29 3b 0a 20 20 20 20 67 65 74  OfDay();.    get
22e0: 50 72 6f 63 65 73 73 54 69 6d 65 73 41 64 64 72  ProcessTimesAddr
22f0: 28 68 50 72 6f 63 65 73 73 2c 26 66 74 43 72 65  (hProcess,&ftCre
2300: 61 74 69 6f 6e 2c 26 66 74 45 78 69 74 2c 26 66  ation,&ftExit,&f
2310: 74 4b 65 72 6e 65 6c 45 6e 64 2c 26 66 74 55 73  tKernelEnd,&ftUs
2320: 65 72 45 6e 64 29 3b 0a 20 20 20 20 70 72 69 6e  erEnd);.    prin
2330: 74 66 28 22 52 75 6e 20 54 69 6d 65 3a 20 72 65  tf("Run Time: re
2340: 61 6c 20 25 2e 33 66 20 75 73 65 72 20 25 66 20  al %.3f user %f 
2350: 73 79 73 20 25 66 5c 6e 22 2c 0a 20 20 20 20 20  sys %f\n",.     
2360: 20 20 28 66 74 57 61 6c 6c 45 6e 64 20 2d 20 66    (ftWallEnd - f
2370: 74 57 61 6c 6c 42 65 67 69 6e 29 2a 30 2e 30 30  tWallBegin)*0.00
2380: 31 2c 0a 20 20 20 20 20 20 20 74 69 6d 65 44 69  1,.       timeDi
2390: 66 66 28 26 66 74 55 73 65 72 42 65 67 69 6e 2c  ff(&ftUserBegin,
23a0: 20 26 66 74 55 73 65 72 45 6e 64 29 2c 0a 20 20   &ftUserEnd),.  
23b0: 20 20 20 20 20 74 69 6d 65 44 69 66 66 28 26 66       timeDiff(&f
23c0: 74 4b 65 72 6e 65 6c 42 65 67 69 6e 2c 20 26 66  tKernelBegin, &f
23d0: 74 4b 65 72 6e 65 6c 45 6e 64 29 29 3b 0a 20 20  tKernelEnd));.  
23e0: 7d 0a 7d 0a 0a 23 64 65 66 69 6e 65 20 42 45 47  }.}..#define BEG
23f0: 49 4e 5f 54 49 4d 45 52 20 62 65 67 69 6e 54 69  IN_TIMER beginTi
2400: 6d 65 72 28 29 0a 23 64 65 66 69 6e 65 20 45 4e  mer().#define EN
2410: 44 5f 54 49 4d 45 52 20 65 6e 64 54 69 6d 65 72  D_TIMER endTimer
2420: 28 29 0a 23 64 65 66 69 6e 65 20 48 41 53 5f 54  ().#define HAS_T
2430: 49 4d 45 52 20 68 61 73 54 69 6d 65 72 28 29 0a  IMER hasTimer().
2440: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 42  .#else.#define B
2450: 45 47 49 4e 5f 54 49 4d 45 52 0a 23 64 65 66 69  EGIN_TIMER.#defi
2460: 6e 65 20 45 4e 44 5f 54 49 4d 45 52 0a 23 64 65  ne END_TIMER.#de
2470: 66 69 6e 65 20 48 41 53 5f 54 49 4d 45 52 20 30  fine HAS_TIMER 0
2480: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55  .#endif../*.** U
2490: 73 65 64 20 74 6f 20 70 72 65 76 65 6e 74 20 77  sed to prevent w
24a0: 61 72 6e 69 6e 67 73 20 61 62 6f 75 74 20 75 6e  arnings about un
24b0: 75 73 65 64 20 70 61 72 61 6d 65 74 65 72 73 0a  used parameters.
24c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
24d0: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
24e0: 76 6f 69 64 29 28 78 29 0a 0a 2f 2a 0a 2a 2a 20  void)(x)../*.** 
24f0: 49 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  If the following
2500: 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
2510: 65 6e 20 63 6f 6d 6d 61 6e 64 20 65 78 65 63 75  en command execu
2520: 74 69 6f 6e 20 73 74 6f 70 73 0a 2a 2a 20 61 74  tion stops.** at
2530: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 77 65 20   an error if we 
2540: 61 72 65 20 6e 6f 74 20 69 6e 74 65 72 61 63 74  are not interact
2550: 69 76 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ive..*/.static i
2560: 6e 74 20 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72  nt bail_on_error
2570: 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 72   = 0;../*.** Thr
2580: 65 61 74 20 73 74 64 69 6e 20 61 73 20 61 6e 20  eat stdin as an 
2590: 69 6e 74 65 72 61 63 74 69 76 65 20 69 6e 70 75  interactive inpu
25a0: 74 20 69 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  t if the followi
25b0: 6e 67 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 69  ng variable.** i
25c0: 73 20 74 72 75 65 2e 20 20 4f 74 68 65 72 77 69  s true.  Otherwi
25d0: 73 65 2c 20 61 73 73 75 6d 65 20 73 74 64 69 6e  se, assume stdin
25e0: 20 69 73 20 63 6f 6e 6e 65 63 74 65 64 20 74 6f   is connected to
25f0: 20 61 20 66 69 6c 65 20 6f 72 20 70 69 70 65 2e   a file or pipe.
2600: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
2610: 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74  tdin_is_interact
2620: 69 76 65 20 3d 20 31 3b 0a 0a 2f 2a 0a 2a 2a 20  ive = 1;../*.** 
2630: 4f 6e 20 57 69 6e 64 6f 77 73 20 73 79 73 74 65  On Windows syste
2640: 6d 73 20 77 65 20 68 61 76 65 20 74 6f 20 6b 6e  ms we have to kn
2650: 6f 77 20 69 66 20 73 74 61 6e 64 61 72 64 20 6f  ow if standard o
2660: 75 74 70 75 74 20 69 73 20 61 20 63 6f 6e 73 6f  utput is a conso
2670: 6c 65 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74  le.** in order t
2680: 6f 20 74 72 61 6e 73 6c 61 74 65 20 55 54 46 2d  o translate UTF-
2690: 38 20 69 6e 74 6f 20 4d 42 43 53 2e 20 20 54 68  8 into MBCS.  Th
26a0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69  e following vari
26b0: 61 62 6c 65 20 69 73 0a 2a 2a 20 74 72 75 65 20  able is.** true 
26c0: 69 66 20 74 72 61 6e 73 6c 61 74 69 6f 6e 20 69  if translation i
26d0: 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73  s required..*/.s
26e0: 74 61 74 69 63 20 69 6e 74 20 73 74 64 6f 75 74  tatic int stdout
26f0: 5f 69 73 5f 63 6f 6e 73 6f 6c 65 20 3d 20 31 3b  _is_console = 1;
2700: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
2710: 6f 77 69 6e 67 20 69 73 20 74 68 65 20 6f 70 65  owing is the ope
2720: 6e 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  n SQLite databas
2730: 65 2e 20 20 57 65 20 6d 61 6b 65 20 61 20 70 6f  e.  We make a po
2740: 69 6e 74 65 72 0a 2a 2a 20 74 6f 20 74 68 69 73  inter.** to this
2750: 20 64 61 74 61 62 61 73 65 20 61 20 73 74 61 74   database a stat
2760: 69 63 20 76 61 72 69 61 62 6c 65 20 73 6f 20 74  ic variable so t
2770: 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 61 63  hat it can be ac
2780: 63 65 73 73 65 64 0a 2a 2a 20 62 79 20 74 68 65  cessed.** by the
2790: 20 53 49 47 49 4e 54 20 68 61 6e 64 6c 65 72 20   SIGINT handler 
27a0: 74 6f 20 69 6e 74 65 72 72 75 70 74 20 64 61 74  to interrupt dat
27b0: 61 62 61 73 65 20 70 72 6f 63 65 73 73 69 6e 67  abase processing
27c0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c 69  ..*/.static sqli
27d0: 74 65 33 20 2a 67 6c 6f 62 61 6c 44 62 20 3d 20  te3 *globalDb = 
27e0: 30 3b 0a 0a 2f 2a 0a 2a 2a 20 54 72 75 65 20 69  0;../*.** True i
27f0: 66 20 61 6e 20 69 6e 74 65 72 72 75 70 74 20 28  f an interrupt (
2800: 43 6f 6e 74 72 6f 6c 2d 43 29 20 68 61 73 20 62  Control-C) has b
2810: 65 65 6e 20 72 65 63 65 69 76 65 64 2e 0a 2a 2f  een received..*/
2820: 0a 73 74 61 74 69 63 20 76 6f 6c 61 74 69 6c 65  .static volatile
2830: 20 69 6e 74 20 73 65 65 6e 49 6e 74 65 72 72 75   int seenInterru
2840: 70 74 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 54  pt = 0;../*.** T
2850: 68 69 73 20 69 73 20 74 68 65 20 6e 61 6d 65 20  his is the name 
2860: 6f 66 20 6f 75 72 20 70 72 6f 67 72 61 6d 2e 20  of our program. 
2870: 49 74 20 69 73 20 73 65 74 20 69 6e 20 6d 61 69  It is set in mai
2880: 6e 28 29 2c 20 75 73 65 64 0a 2a 2a 20 69 6e 20  n(), used.** in 
2890: 61 20 6e 75 6d 62 65 72 20 6f 66 20 6f 74 68 65  a number of othe
28a0: 72 20 70 6c 61 63 65 73 2c 20 6d 6f 73 74 6c 79  r places, mostly
28b0: 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
28c0: 67 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63  ges..*/.static c
28d0: 68 61 72 20 2a 41 72 67 76 30 3b 0a 0a 2f 2a 0a  har *Argv0;../*.
28e0: 2a 2a 20 50 72 6f 6d 70 74 20 73 74 72 69 6e 67  ** Prompt string
28f0: 73 2e 20 49 6e 69 74 69 61 6c 69 7a 65 64 20 69  s. Initialized i
2900: 6e 20 6d 61 69 6e 2e 20 53 65 74 74 61 62 6c 65  n main. Settable
2910: 20 77 69 74 68 0a 2a 2a 20 20 20 2e 70 72 6f 6d   with.**   .prom
2920: 70 74 20 6d 61 69 6e 20 63 6f 6e 74 69 6e 75 65  pt main continue
2930: 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20  .*/.static char 
2940: 6d 61 69 6e 50 72 6f 6d 70 74 5b 32 30 5d 3b 20  mainPrompt[20]; 
2950: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 6c 69 6e      /* First lin
2960: 65 20 70 72 6f 6d 70 74 2e 20 64 65 66 61 75 6c  e prompt. defaul
2970: 74 3a 20 22 73 71 6c 69 74 65 3e 20 22 2a 2f 0a  t: "sqlite> "*/.
2980: 73 74 61 74 69 63 20 63 68 61 72 20 63 6f 6e 74  static char cont
2990: 69 6e 75 65 50 72 6f 6d 70 74 5b 32 30 5d 3b 20  inuePrompt[20]; 
29a0: 2f 2a 20 43 6f 6e 74 69 6e 75 61 74 69 6f 6e 20  /* Continuation 
29b0: 70 72 6f 6d 70 74 2e 20 64 65 66 61 75 6c 74 3a  prompt. default:
29c0: 20 22 20 20 20 2e 2e 2e 3e 20 22 20 2a 2f 0a 0a   "   ...> " */..
29d0: 2f 2a 0a 2a 2a 20 52 65 6e 64 65 72 20 6f 75 74  /*.** Render out
29e0: 70 75 74 20 6c 69 6b 65 20 66 70 72 69 6e 74 66  put like fprintf
29f0: 28 29 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20  ().  Except, if 
2a00: 74 68 65 20 6f 75 74 70 75 74 20 69 73 20 67 6f  the output is go
2a10: 69 6e 67 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f  ing to the.** co
2a20: 6e 73 6f 6c 65 20 61 6e 64 20 69 66 20 74 68 69  nsole and if thi
2a30: 73 20 69 73 20 72 75 6e 6e 69 6e 67 20 6f 6e 20  s is running on 
2a40: 61 20 57 69 6e 64 6f 77 73 20 6d 61 63 68 69 6e  a Windows machin
2a50: 65 2c 20 74 72 61 6e 73 6c 61 74 65 20 74 68 65  e, translate the
2a60: 0a 2a 2a 20 6f 75 74 70 75 74 20 66 72 6f 6d 20  .** output from 
2a70: 55 54 46 2d 38 20 69 6e 74 6f 20 4d 42 43 53 2e  UTF-8 into MBCS.
2a80: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
2a90: 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e  _WIN32) || defin
2aa0: 65 64 28 57 49 4e 33 32 29 0a 76 6f 69 64 20 75  ed(WIN32).void u
2ab0: 74 66 38 5f 70 72 69 6e 74 66 28 46 49 4c 45 20  tf8_printf(FILE 
2ac0: 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  *out, const char
2ad0: 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b   *zFormat, ...){
2ae0: 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20  .  va_list ap;. 
2af0: 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46   va_start(ap, zF
2b00: 6f 72 6d 61 74 29 3b 0a 20 20 69 66 28 20 73 74  ormat);.  if( st
2b10: 64 6f 75 74 5f 69 73 5f 63 6f 6e 73 6f 6c 65 20  dout_is_console 
2b20: 26 26 20 28 6f 75 74 3d 3d 73 74 64 6f 75 74 20  && (out==stdout 
2b30: 7c 7c 20 6f 75 74 3d 3d 73 74 64 65 72 72 29 20  || out==stderr) 
2b40: 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 31 20  ){.    char *z1 
2b50: 3d 20 73 71 6c 69 74 65 33 5f 76 6d 70 72 69 6e  = sqlite3_vmprin
2b60: 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b  tf(zFormat, ap);
2b70: 0a 20 20 20 20 63 68 61 72 20 2a 7a 32 20 3d 20  .    char *z2 = 
2b80: 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75 74  sqlite3_win32_ut
2b90: 66 38 5f 74 6f 5f 6d 62 63 73 5f 76 32 28 7a 31  f8_to_mbcs_v2(z1
2ba0: 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
2bb0: 33 5f 66 72 65 65 28 7a 31 29 3b 0a 20 20 20 20  3_free(z1);.    
2bc0: 66 70 75 74 73 28 7a 32 2c 20 6f 75 74 29 3b 0a  fputs(z2, out);.
2bd0: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
2be0: 28 7a 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  (z2);.  }else{. 
2bf0: 20 20 20 76 66 70 72 69 6e 74 66 28 6f 75 74 2c     vfprintf(out,
2c00: 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20   zFormat, ap);. 
2c10: 20 7d 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b   }.  va_end(ap);
2c20: 0a 7d 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65  .}.#elif !define
2c30: 64 28 75 74 66 38 5f 70 72 69 6e 74 66 29 0a 23  d(utf8_printf).#
2c40: 20 64 65 66 69 6e 65 20 75 74 66 38 5f 70 72 69   define utf8_pri
2c50: 6e 74 66 20 66 70 72 69 6e 74 66 0a 23 65 6e 64  ntf fprintf.#end
2c60: 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 6e 64 65 72  if../*.** Render
2c70: 20 6f 75 74 70 75 74 20 6c 69 6b 65 20 66 70 72   output like fpr
2c80: 69 6e 74 66 28 29 2e 20 20 54 68 69 73 20 73 68  intf().  This sh
2c90: 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64  ould not be used
2ca0: 20 6f 6e 20 61 6e 79 74 68 69 6e 67 20 74 68 61   on anything tha
2cb0: 74 0a 2a 2a 20 69 6e 63 6c 75 64 65 73 20 73 74  t.** includes st
2cc0: 72 69 6e 67 20 66 6f 72 6d 61 74 74 69 6e 67 20  ring formatting 
2cd0: 28 65 2e 67 2e 20 22 25 73 22 29 2e 0a 2a 2f 0a  (e.g. "%s")..*/.
2ce0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 72 61 77  #if !defined(raw
2cf0: 5f 70 72 69 6e 74 66 29 0a 23 20 64 65 66 69 6e  _printf).# defin
2d00: 65 20 72 61 77 5f 70 72 69 6e 74 66 20 66 70 72  e raw_printf fpr
2d10: 69 6e 74 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  intf.#endif../*.
2d20: 2a 2a 20 57 72 69 74 65 20 49 2f 4f 20 74 72 61  ** Write I/O tra
2d30: 63 65 73 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  ces to the follo
2d40: 77 69 6e 67 20 73 74 72 65 61 6d 2e 0a 2a 2f 0a  wing stream..*/.
2d50: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2d60: 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 73 74 61  ABLE_IOTRACE.sta
2d70: 74 69 63 20 46 49 4c 45 20 2a 69 6f 74 72 61 63  tic FILE *iotrac
2d80: 65 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  e = 0;.#endif../
2d90: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
2da0: 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 70 72 69  e works like pri
2db0: 6e 74 66 20 69 6e 20 74 68 61 74 20 69 74 73 20  ntf in that its 
2dc0: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69  first argument i
2dd0: 73 20 61 0a 2a 2a 20 66 6f 72 6d 61 74 20 73 74  s a.** format st
2de0: 72 69 6e 67 20 61 6e 64 20 73 75 62 73 65 71 75  ring and subsequ
2df0: 65 6e 74 20 61 72 67 75 6d 65 6e 74 73 20 61 72  ent arguments ar
2e00: 65 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 73  e values to be s
2e10: 75 62 73 74 69 74 75 74 65 64 0a 2a 2a 20 69 6e  ubstituted.** in
2e20: 20 70 6c 61 63 65 20 6f 66 20 25 20 66 69 65 6c   place of % fiel
2e30: 64 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20  ds.  The result 
2e40: 6f 66 20 66 6f 72 6d 61 74 74 69 6e 67 20 74 68  of formatting th
2e50: 69 73 20 73 74 72 69 6e 67 0a 2a 2a 20 69 73 20  is string.** is 
2e60: 77 72 69 74 74 65 6e 20 74 6f 20 69 6f 74 72 61  written to iotra
2e70: 63 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ce..*/.#ifdef SQ
2e80: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52  LITE_ENABLE_IOTR
2e90: 41 43 45 0a 73 74 61 74 69 63 20 76 6f 69 64 20  ACE.static void 
2ea0: 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 69 6f 74  SQLITE_CDECL iot
2eb0: 72 61 63 65 50 72 69 6e 74 66 28 63 6f 6e 73 74  racePrintf(const
2ec0: 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20   char *zFormat, 
2ed0: 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20  ...){.  va_list 
2ee0: 61 70 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20  ap;.  char *z;. 
2ef0: 20 69 66 28 20 69 6f 74 72 61 63 65 3d 3d 30 20   if( iotrace==0 
2f00: 29 20 72 65 74 75 72 6e 3b 0a 20 20 76 61 5f 73  ) return;.  va_s
2f10: 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74  tart(ap, zFormat
2f20: 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
2f30: 5f 76 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d 61  _vmprintf(zForma
2f40: 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64  t, ap);.  va_end
2f50: 28 61 70 29 3b 0a 20 20 75 74 66 38 5f 70 72 69  (ap);.  utf8_pri
2f60: 6e 74 66 28 69 6f 74 72 61 63 65 2c 20 22 25 73  ntf(iotrace, "%s
2f70: 22 2c 20 7a 29 3b 0a 20 20 73 71 6c 69 74 65 33  ", z);.  sqlite3
2f80: 5f 66 72 65 65 28 7a 29 3b 0a 7d 0a 23 65 6e 64  _free(z);.}.#end
2f90: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74  if../*.** Output
2fa0: 20 73 74 72 69 6e 67 20 7a 55 74 66 20 74 6f 20   string zUtf to 
2fb0: 73 74 72 65 61 6d 20 70 4f 75 74 20 61 73 20 77  stream pOut as w
2fc0: 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 49 66   characters.  If
2fd0: 20 77 20 69 73 20 6e 65 67 61 74 69 76 65 2c 0a   w is negative,.
2fe0: 2a 2a 20 74 68 65 6e 20 72 69 67 68 74 2d 6a 75  ** then right-ju
2ff0: 73 74 69 66 79 20 74 68 65 20 74 65 78 74 2e 20  stify the text. 
3000: 20 57 20 69 73 20 74 68 65 20 77 69 64 74 68 20   W is the width 
3010: 69 6e 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  in UTF-8 charact
3020: 65 72 73 2c 20 6e 6f 74 0a 2a 2a 20 69 6e 20 62  ers, not.** in b
3030: 79 74 65 73 2e 20 20 54 68 69 73 20 69 73 20 64  ytes.  This is d
3040: 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68  ifferent from th
3050: 65 20 25 2a 2e 2a 73 20 73 70 65 63 69 66 69 63  e %*.*s specific
3060: 61 74 69 6f 6e 20 69 6e 20 70 72 69 6e 74 66 0a  ation in printf.
3070: 2a 2a 20 73 69 6e 63 65 20 77 69 74 68 20 25 2a  ** since with %*
3080: 2e 2a 73 20 74 68 65 20 77 69 64 74 68 20 69 73  .*s the width is
3090: 20 6d 65 61 73 75 72 65 64 20 69 6e 20 62 79 74   measured in byt
30a0: 65 73 2c 20 6e 6f 74 20 63 68 61 72 61 63 74 65  es, not characte
30b0: 72 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  rs..*/.static vo
30c0: 69 64 20 75 74 66 38 5f 77 69 64 74 68 5f 70 72  id utf8_width_pr
30d0: 69 6e 74 28 46 49 4c 45 20 2a 70 4f 75 74 2c 20  int(FILE *pOut, 
30e0: 69 6e 74 20 77 2c 20 63 6f 6e 73 74 20 63 68 61  int w, const cha
30f0: 72 20 2a 7a 55 74 66 29 7b 0a 20 20 69 6e 74 20  r *zUtf){.  int 
3100: 69 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e  i;.  int n;.  in
3110: 74 20 61 77 20 3d 20 77 3c 30 20 3f 20 2d 77 20  t aw = w<0 ? -w 
3120: 3a 20 77 3b 0a 20 20 63 68 61 72 20 7a 42 75 66  : w;.  char zBuf
3130: 5b 31 30 30 30 5d 3b 0a 20 20 69 66 28 20 61 77  [1000];.  if( aw
3140: 3e 28 69 6e 74 29 73 69 7a 65 6f 66 28 7a 42 75  >(int)sizeof(zBu
3150: 66 29 2f 33 20 29 20 61 77 20 3d 20 28 69 6e 74  f)/3 ) aw = (int
3160: 29 73 69 7a 65 6f 66 28 7a 42 75 66 29 2f 33 3b  )sizeof(zBuf)/3;
3170: 0a 20 20 66 6f 72 28 69 3d 6e 3d 30 3b 20 7a 55  .  for(i=n=0; zU
3180: 74 66 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20  tf[i]; i++){.   
3190: 20 69 66 28 20 28 7a 55 74 66 5b 69 5d 26 30 78   if( (zUtf[i]&0x
31a0: 63 30 29 21 3d 30 78 38 30 20 29 7b 0a 20 20 20  c0)!=0x80 ){.   
31b0: 20 20 20 6e 2b 2b 3b 0a 20 20 20 20 20 20 69 66     n++;.      if
31c0: 28 20 6e 3d 3d 61 77 20 29 7b 0a 20 20 20 20 20  ( n==aw ){.     
31d0: 20 20 20 64 6f 7b 20 69 2b 2b 3b 20 7d 77 68 69     do{ i++; }whi
31e0: 6c 65 28 20 28 7a 55 74 66 5b 69 5d 26 30 78 63  le( (zUtf[i]&0xc
31f0: 30 29 3d 3d 30 78 38 30 20 29 3b 0a 20 20 20 20  0)==0x80 );.    
3200: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
3210: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69   }.    }.  }.  i
3220: 66 28 20 6e 3e 3d 61 77 20 29 7b 0a 20 20 20 20  f( n>=aw ){.    
3230: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 4f 75 74  utf8_printf(pOut
3240: 2c 20 22 25 2e 2a 73 22 2c 20 69 2c 20 7a 55 74  , "%.*s", i, zUt
3250: 66 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  f);.  }else if( 
3260: 77 3c 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f  w<0 ){.    utf8_
3270: 70 72 69 6e 74 66 28 70 4f 75 74 2c 20 22 25 2a  printf(pOut, "%*
3280: 73 25 73 22 2c 20 61 77 2d 6e 2c 20 22 22 2c 20  s%s", aw-n, "", 
3290: 7a 55 74 66 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  zUtf);.  }else{.
32a0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
32b0: 70 4f 75 74 2c 20 22 25 73 25 2a 73 22 2c 20 7a  pOut, "%s%*s", z
32c0: 55 74 66 2c 20 61 77 2d 6e 2c 20 22 22 29 3b 0a  Utf, aw-n, "");.
32d0: 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 44 65    }.}.../*.** De
32e0: 74 65 72 6d 69 6e 65 73 20 69 66 20 61 20 73 74  termines if a st
32f0: 72 69 6e 67 20 69 73 20 61 20 6e 75 6d 62 65 72  ring is a number
3300: 20 6f 66 20 6e 6f 74 2e 0a 2a 2f 0a 73 74 61 74   of not..*/.stat
3310: 69 63 20 69 6e 74 20 69 73 4e 75 6d 62 65 72 28  ic int isNumber(
3320: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
3330: 6e 74 20 2a 72 65 61 6c 6e 75 6d 29 7b 0a 20 20  nt *realnum){.  
3340: 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 7c 7c 20 2a  if( *z=='-' || *
3350: 7a 3d 3d 27 2b 27 20 29 20 7a 2b 2b 3b 0a 20 20  z=='+' ) z++;.  
3360: 69 66 28 20 21 49 73 44 69 67 69 74 28 2a 7a 29  if( !IsDigit(*z)
3370: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30   ){.    return 0
3380: 3b 0a 20 20 7d 0a 20 20 7a 2b 2b 3b 0a 20 20 69  ;.  }.  z++;.  i
3390: 66 28 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72 65  f( realnum ) *re
33a0: 61 6c 6e 75 6d 20 3d 20 30 3b 0a 20 20 77 68 69  alnum = 0;.  whi
33b0: 6c 65 28 20 49 73 44 69 67 69 74 28 2a 7a 29 20  le( IsDigit(*z) 
33c0: 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 69 66 28 20  ){ z++; }.  if( 
33d0: 2a 7a 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 7a  *z=='.' ){.    z
33e0: 2b 2b 3b 0a 20 20 20 20 69 66 28 20 21 49 73 44  ++;.    if( !IsD
33f0: 69 67 69 74 28 2a 7a 29 20 29 20 72 65 74 75 72  igit(*z) ) retur
3400: 6e 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  n 0;.    while( 
3410: 49 73 44 69 67 69 74 28 2a 7a 29 20 29 7b 20 7a  IsDigit(*z) ){ z
3420: 2b 2b 3b 20 7d 0a 20 20 20 20 69 66 28 20 72 65  ++; }.    if( re
3430: 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d  alnum ) *realnum
3440: 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 1;.  }.  if( 
3450: 2a 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d 3d 27  *z=='e' || *z=='
3460: 45 27 20 29 7b 0a 20 20 20 20 7a 2b 2b 3b 0a 20  E' ){.    z++;. 
3470: 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20 7c     if( *z=='+' |
3480: 7c 20 2a 7a 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b  | *z=='-' ) z++;
3490: 0a 20 20 20 20 69 66 28 20 21 49 73 44 69 67 69  .    if( !IsDigi
34a0: 74 28 2a 7a 29 20 29 20 72 65 74 75 72 6e 20 30  t(*z) ) return 0
34b0: 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 49 73 44  ;.    while( IsD
34c0: 69 67 69 74 28 2a 7a 29 20 29 7b 20 7a 2b 2b 3b  igit(*z) ){ z++;
34d0: 20 7d 0a 20 20 20 20 69 66 28 20 72 65 61 6c 6e   }.    if( realn
34e0: 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20  um ) *realnum = 
34f0: 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  1;.  }.  return 
3500: 2a 7a 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  *z==0;.}../*.** 
3510: 43 6f 6d 70 75 74 65 20 61 20 73 74 72 69 6e 67  Compute a string
3520: 20 6c 65 6e 67 74 68 20 74 68 61 74 20 69 73 20   length that is 
3530: 6c 69 6d 69 74 65 64 20 74 6f 20 77 68 61 74 20  limited to what 
3540: 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e  can be stored in
3550: 0a 2a 2a 20 6c 6f 77 65 72 20 33 30 20 62 69 74  .** lower 30 bit
3560: 73 20 6f 66 20 61 20 33 32 2d 62 69 74 20 73 69  s of a 32-bit si
3570: 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  gned integer..*/
3580: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 74 72 6c  .static int strl
3590: 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 20  en30(const char 
35a0: 2a 7a 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  *z){.  const cha
35b0: 72 20 2a 7a 32 20 3d 20 7a 3b 0a 20 20 77 68 69  r *z2 = z;.  whi
35c0: 6c 65 28 20 2a 7a 32 20 29 7b 20 7a 32 2b 2b 3b  le( *z2 ){ z2++;
35d0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 78 33 66   }.  return 0x3f
35e0: 66 66 66 66 66 66 20 26 20 28 69 6e 74 29 28 7a  ffffff & (int)(z
35f0: 32 20 2d 20 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  2 - z);.}../*.**
3600: 20 52 65 74 75 72 6e 20 74 68 65 20 6c 65 6e 67   Return the leng
3610: 74 68 20 6f 66 20 61 20 73 74 72 69 6e 67 20 69  th of a string i
3620: 6e 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 4d  n characters.  M
3630: 75 6c 74 69 62 79 74 65 20 55 54 46 38 20 63 68  ultibyte UTF8 ch
3640: 61 72 61 63 74 65 72 73 0a 2a 2a 20 63 6f 75 6e  aracters.** coun
3650: 74 20 61 73 20 61 20 73 69 6e 67 6c 65 20 63 68  t as a single ch
3660: 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 73 74 61 74  aracter..*/.stat
3670: 69 63 20 69 6e 74 20 73 74 72 6c 65 6e 43 68 61  ic int strlenCha
3680: 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29  r(const char *z)
3690: 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20  {.  int n = 0;. 
36a0: 20 77 68 69 6c 65 28 20 2a 7a 20 29 7b 0a 20 20   while( *z ){.  
36b0: 20 20 69 66 28 20 28 30 78 63 30 26 2a 28 7a 2b    if( (0xc0&*(z+
36c0: 2b 29 29 21 3d 30 78 38 30 20 29 20 6e 2b 2b 3b  +))!=0x80 ) n++;
36d0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 6e 3b  .  }.  return n;
36e0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72  .}../*.** This r
36f0: 6f 75 74 69 6e 65 20 72 65 61 64 73 20 61 20 6c  outine reads a l
3700: 69 6e 65 20 6f 66 20 74 65 78 74 20 66 72 6f 6d  ine of text from
3710: 20 46 49 4c 45 20 69 6e 2c 20 73 74 6f 72 65 73   FILE in, stores
3720: 0a 2a 2a 20 74 68 65 20 74 65 78 74 20 69 6e 20  .** the text in 
3730: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
3740: 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 61 6e  from malloc() an
3750: 64 20 72 65 74 75 72 6e 73 20 61 20 70 6f 69 6e  d returns a poin
3760: 74 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 65  ter.** to the te
3770: 78 74 2e 20 20 4e 55 4c 4c 20 69 73 20 72 65 74  xt.  NULL is ret
3780: 75 72 6e 65 64 20 61 74 20 65 6e 64 20 6f 66 20  urned at end of 
3790: 66 69 6c 65 2c 20 6f 72 20 69 66 20 6d 61 6c 6c  file, or if mall
37a0: 6f 63 28 29 0a 2a 2a 20 66 61 69 6c 73 2e 0a 2a  oc().** fails..*
37b0: 2a 0a 2a 2a 20 49 66 20 7a 4c 69 6e 65 20 69 73  *.** If zLine is
37c0: 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69   not NULL then i
37d0: 74 20 69 73 20 61 20 6d 61 6c 6c 6f 63 65 64 20  t is a malloced 
37e0: 62 75 66 66 65 72 20 72 65 74 75 72 6e 65 64 20  buffer returned 
37f0: 66 72 6f 6d 0a 2a 2a 20 61 20 70 72 65 76 69 6f  from.** a previo
3800: 75 73 20 63 61 6c 6c 20 74 6f 20 74 68 69 73 20  us call to this 
3810: 72 6f 75 74 69 6e 65 20 74 68 61 74 20 6d 61 79  routine that may
3820: 20 62 65 20 72 65 75 73 65 64 2e 0a 2a 2f 0a 73   be reused..*/.s
3830: 74 61 74 69 63 20 63 68 61 72 20 2a 6c 6f 63 61  tatic char *loca
3840: 6c 5f 67 65 74 6c 69 6e 65 28 63 68 61 72 20 2a  l_getline(char *
3850: 7a 4c 69 6e 65 2c 20 46 49 4c 45 20 2a 69 6e 29  zLine, FILE *in)
3860: 7b 0a 20 20 69 6e 74 20 6e 4c 69 6e 65 20 3d 20  {.  int nLine = 
3870: 7a 4c 69 6e 65 3d 3d 30 20 3f 20 30 20 3a 20 31  zLine==0 ? 0 : 1
3880: 30 30 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b  00;.  int n = 0;
3890: 0a 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a  ..  while( 1 ){.
38a0: 20 20 20 20 69 66 28 20 6e 2b 31 30 30 3e 6e 4c      if( n+100>nL
38b0: 69 6e 65 20 29 7b 0a 20 20 20 20 20 20 6e 4c 69  ine ){.      nLi
38c0: 6e 65 20 3d 20 6e 4c 69 6e 65 2a 32 20 2b 20 31  ne = nLine*2 + 1
38d0: 30 30 3b 0a 20 20 20 20 20 20 7a 4c 69 6e 65 20  00;.      zLine 
38e0: 3d 20 72 65 61 6c 6c 6f 63 28 7a 4c 69 6e 65 2c  = realloc(zLine,
38f0: 20 6e 4c 69 6e 65 29 3b 0a 20 20 20 20 20 20 69   nLine);.      i
3900: 66 28 20 7a 4c 69 6e 65 3d 3d 30 20 29 20 72 65  f( zLine==0 ) re
3910: 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 20  turn 0;.    }.  
3920: 20 20 69 66 28 20 66 67 65 74 73 28 26 7a 4c 69    if( fgets(&zLi
3930: 6e 65 5b 6e 5d 2c 20 6e 4c 69 6e 65 20 2d 20 6e  ne[n], nLine - n
3940: 2c 20 69 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  , in)==0 ){.    
3950: 20 20 69 66 28 20 6e 3d 3d 30 20 29 7b 0a 20 20    if( n==0 ){.  
3960: 20 20 20 20 20 20 66 72 65 65 28 7a 4c 69 6e 65        free(zLine
3970: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
3980: 6e 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  n 0;.      }.   
3990: 20 20 20 7a 4c 69 6e 65 5b 6e 5d 20 3d 20 30 3b     zLine[n] = 0;
39a0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
39b0: 20 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 7a    }.    while( z
39c0: 4c 69 6e 65 5b 6e 5d 20 29 20 6e 2b 2b 3b 0a 20  Line[n] ) n++;. 
39d0: 20 20 20 69 66 28 20 6e 3e 30 20 26 26 20 7a 4c     if( n>0 && zL
39e0: 69 6e 65 5b 6e 2d 31 5d 3d 3d 27 5c 6e 27 20 29  ine[n-1]=='\n' )
39f0: 7b 0a 20 20 20 20 20 20 6e 2d 2d 3b 0a 20 20 20  {.      n--;.   
3a00: 20 20 20 69 66 28 20 6e 3e 30 20 26 26 20 7a 4c     if( n>0 && zL
3a10: 69 6e 65 5b 6e 2d 31 5d 3d 3d 27 5c 72 27 20 29  ine[n-1]=='\r' )
3a20: 20 6e 2d 2d 3b 0a 20 20 20 20 20 20 7a 4c 69 6e   n--;.      zLin
3a30: 65 5b 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  e[n] = 0;.      
3a40: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
3a50: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57 49  .#if defined(_WI
3a60: 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  N32) || defined(
3a70: 57 49 4e 33 32 29 0a 20 20 2f 2a 20 46 6f 72 20  WIN32).  /* For 
3a80: 69 6e 74 65 72 61 63 74 69 76 65 20 69 6e 70 75  interactive inpu
3a90: 74 20 6f 6e 20 57 69 6e 64 6f 77 73 20 73 79 73  t on Windows sys
3aa0: 74 65 6d 73 2c 20 74 72 61 6e 73 6c 61 74 65 20  tems, translate 
3ab0: 74 68 65 0a 20 20 2a 2a 20 6d 75 6c 74 69 2d 62  the.  ** multi-b
3ac0: 79 74 65 20 63 68 61 72 61 63 74 65 72 73 65 74  yte characterset
3ad0: 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 74 6f   characters into
3ae0: 20 55 54 46 2d 38 2e 20 2a 2f 0a 20 20 69 66 28   UTF-8. */.  if(
3af0: 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61   stdin_is_intera
3b00: 63 74 69 76 65 20 26 26 20 69 6e 3d 3d 73 74 64  ctive && in==std
3b10: 69 6e 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a  in ){.    char *
3b20: 7a 54 72 61 6e 73 20 3d 20 73 71 6c 69 74 65 33  zTrans = sqlite3
3b30: 5f 77 69 6e 33 32 5f 6d 62 63 73 5f 74 6f 5f 75  _win32_mbcs_to_u
3b40: 74 66 38 5f 76 32 28 7a 4c 69 6e 65 2c 20 30 29  tf8_v2(zLine, 0)
3b50: 3b 0a 20 20 20 20 69 66 28 20 7a 54 72 61 6e 73  ;.    if( zTrans
3b60: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 54   ){.      int nT
3b70: 72 61 6e 73 20 3d 20 73 74 72 6c 65 6e 33 30 28  rans = strlen30(
3b80: 7a 54 72 61 6e 73 29 2b 31 3b 0a 20 20 20 20 20  zTrans)+1;.     
3b90: 20 69 66 28 20 6e 54 72 61 6e 73 3e 6e 4c 69 6e   if( nTrans>nLin
3ba0: 65 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 4c 69  e ){.        zLi
3bb0: 6e 65 20 3d 20 72 65 61 6c 6c 6f 63 28 7a 4c 69  ne = realloc(zLi
3bc0: 6e 65 2c 20 6e 54 72 61 6e 73 29 3b 0a 20 20 20  ne, nTrans);.   
3bd0: 20 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 3d 3d       if( zLine==
3be0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
3bf0: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 54 72 61  qlite3_free(zTra
3c00: 6e 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72  ns);.          r
3c10: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 20  eturn 0;.       
3c20: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
3c30: 20 6d 65 6d 63 70 79 28 7a 4c 69 6e 65 2c 20 7a   memcpy(zLine, z
3c40: 54 72 61 6e 73 2c 20 6e 54 72 61 6e 73 29 3b 0a  Trans, nTrans);.
3c50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
3c60: 65 65 28 7a 54 72 61 6e 73 29 3b 0a 20 20 20 20  ee(zTrans);.    
3c70: 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  }.  }.#endif /* 
3c80: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
3c90: 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  || defined(WIN32
3ca0: 29 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 7a 4c  ) */.  return zL
3cb0: 69 6e 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  ine;.}../*.** Re
3cc0: 74 72 69 65 76 65 20 61 20 73 69 6e 67 6c 65 20  trieve a single 
3cd0: 6c 69 6e 65 20 6f 66 20 69 6e 70 75 74 20 74 65  line of input te
3ce0: 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 69 6e 3d  xt..**.** If in=
3cf0: 3d 30 20 74 68 65 6e 20 72 65 61 64 20 66 72 6f  =0 then read fro
3d00: 6d 20 73 74 61 6e 64 61 72 64 20 69 6e 70 75 74  m standard input
3d10: 20 61 6e 64 20 70 72 6f 6d 70 74 20 62 65 66 6f   and prompt befo
3d20: 72 65 20 65 61 63 68 20 6c 69 6e 65 2e 0a 2a 2a  re each line..**
3d30: 20 49 66 20 69 73 43 6f 6e 74 69 6e 75 61 74 69   If isContinuati
3d40: 6f 6e 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  on is true, then
3d50: 20 61 20 63 6f 6e 74 69 6e 75 61 74 69 6f 6e 20   a continuation 
3d60: 70 72 6f 6d 70 74 20 69 73 20 61 70 70 72 6f 70  prompt is approp
3d70: 72 69 61 74 65 2e 0a 2a 2a 20 49 66 20 69 73 43  riate..** If isC
3d80: 6f 6e 74 69 6e 75 61 74 69 6f 6e 20 69 73 20 7a  ontinuation is z
3d90: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6d 61  ero, then the ma
3da0: 69 6e 20 70 72 6f 6d 70 74 20 73 68 6f 75 6c 64  in prompt should
3db0: 20 62 65 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20   be used..**.** 
3dc0: 49 66 20 7a 50 72 69 6f 72 20 69 73 20 6e 6f 74  If zPrior is not
3dd0: 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20 69 73   NULL then it is
3de0: 20 61 20 62 75 66 66 65 72 20 66 72 6f 6d 20 61   a buffer from a
3df0: 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f 20 74   prior call to t
3e00: 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 74  his.** routine t
3e10: 68 61 74 20 63 61 6e 20 62 65 20 72 65 75 73 65  hat can be reuse
3e20: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 73  d..**.** The res
3e30: 75 6c 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ult is stored in
3e40: 20 73 70 61 63 65 20 6f 62 74 61 69 6e 65 64 20   space obtained 
3e50: 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 61 6e  from malloc() an
3e60: 64 20 6d 75 73 74 20 65 69 74 68 65 72 0a 2a 2a  d must either.**
3e70: 20 62 65 20 66 72 65 65 64 20 62 79 20 74 68 65   be freed by the
3e80: 20 63 61 6c 6c 65 72 20 6f 72 20 65 6c 73 65 20   caller or else 
3e90: 70 61 73 73 65 64 20 62 61 63 6b 20 69 6e 74 6f  passed back into
3ea0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 76 69   this routine vi
3eb0: 61 20 74 68 65 0a 2a 2a 20 7a 50 72 69 6f 72 20  a the.** zPrior 
3ec0: 61 72 67 75 6d 65 6e 74 20 66 6f 72 20 72 65 75  argument for reu
3ed0: 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68  se..*/.static ch
3ee0: 61 72 20 2a 6f 6e 65 5f 69 6e 70 75 74 5f 6c 69  ar *one_input_li
3ef0: 6e 65 28 46 49 4c 45 20 2a 69 6e 2c 20 63 68 61  ne(FILE *in, cha
3f00: 72 20 2a 7a 50 72 69 6f 72 2c 20 69 6e 74 20 69  r *zPrior, int i
3f10: 73 43 6f 6e 74 69 6e 75 61 74 69 6f 6e 29 7b 0a  sContinuation){.
3f20: 20 20 63 68 61 72 20 2a 7a 50 72 6f 6d 70 74 3b    char *zPrompt;
3f30: 0a 20 20 63 68 61 72 20 2a 7a 52 65 73 75 6c 74  .  char *zResult
3f40: 3b 0a 20 20 69 66 28 20 69 6e 21 3d 30 20 29 7b  ;.  if( in!=0 ){
3f50: 0a 20 20 20 20 7a 52 65 73 75 6c 74 20 3d 20 6c  .    zResult = l
3f60: 6f 63 61 6c 5f 67 65 74 6c 69 6e 65 28 7a 50 72  ocal_getline(zPr
3f70: 69 6f 72 2c 20 69 6e 29 3b 0a 20 20 7d 65 6c 73  ior, in);.  }els
3f80: 65 7b 0a 20 20 20 20 7a 50 72 6f 6d 70 74 20 3d  e{.    zPrompt =
3f90: 20 69 73 43 6f 6e 74 69 6e 75 61 74 69 6f 6e 20   isContinuation 
3fa0: 3f 20 63 6f 6e 74 69 6e 75 65 50 72 6f 6d 70 74  ? continuePrompt
3fb0: 20 3a 20 6d 61 69 6e 50 72 6f 6d 70 74 3b 0a 23   : mainPrompt;.#
3fc0: 69 66 20 53 48 45 4c 4c 5f 55 53 45 5f 4c 4f 43  if SHELL_USE_LOC
3fd0: 41 4c 5f 47 45 54 4c 49 4e 45 0a 20 20 20 20 70  AL_GETLINE.    p
3fe0: 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 50 72 6f  rintf("%s", zPro
3ff0: 6d 70 74 29 3b 0a 20 20 20 20 66 66 6c 75 73 68  mpt);.    fflush
4000: 28 73 74 64 6f 75 74 29 3b 0a 20 20 20 20 7a 52  (stdout);.    zR
4010: 65 73 75 6c 74 20 3d 20 6c 6f 63 61 6c 5f 67 65  esult = local_ge
4020: 74 6c 69 6e 65 28 7a 50 72 69 6f 72 2c 20 73 74  tline(zPrior, st
4030: 64 69 6e 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20  din);.#else.    
4040: 66 72 65 65 28 7a 50 72 69 6f 72 29 3b 0a 20 20  free(zPrior);.  
4050: 20 20 7a 52 65 73 75 6c 74 20 3d 20 73 68 65 6c    zResult = shel
4060: 6c 5f 72 65 61 64 6c 69 6e 65 28 7a 50 72 6f 6d  l_readline(zProm
4070: 70 74 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 65  pt);.    if( zRe
4080: 73 75 6c 74 20 26 26 20 2a 7a 52 65 73 75 6c 74  sult && *zResult
4090: 20 29 20 73 68 65 6c 6c 5f 61 64 64 5f 68 69 73   ) shell_add_his
40a0: 74 6f 72 79 28 7a 52 65 73 75 6c 74 29 3b 0a 23  tory(zResult);.#
40b0: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 72 65 74 75  endif.  }.  retu
40c0: 72 6e 20 7a 52 65 73 75 6c 74 3b 0a 7d 0a 2f 2a  rn zResult;.}./*
40d0: 0a 2a 2a 20 41 20 76 61 72 69 61 62 6c 65 20 6c  .** A variable l
40e0: 65 6e 67 74 68 20 73 74 72 69 6e 67 20 74 6f 20  ength string to 
40f0: 77 68 69 63 68 20 6f 6e 65 20 63 61 6e 20 61 70  which one can ap
4100: 70 65 6e 64 20 74 65 78 74 2e 0a 2a 2f 0a 74 79  pend text..*/.ty
4110: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 68 65  pedef struct She
4120: 6c 6c 54 65 78 74 20 53 68 65 6c 6c 54 65 78 74  llText ShellText
4130: 3b 0a 73 74 72 75 63 74 20 53 68 65 6c 6c 54 65  ;.struct ShellTe
4140: 78 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  xt {.  char *z;.
4150: 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 6e    int n;.  int n
4160: 41 6c 6c 6f 63 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  Alloc;.};../*.**
4170: 20 49 6e 69 74 69 61 6c 69 7a 65 20 61 6e 64 20   Initialize and 
4180: 64 65 73 74 72 6f 79 20 61 20 53 68 65 6c 6c 54  destroy a ShellT
4190: 65 78 74 20 6f 62 6a 65 63 74 0a 2a 2f 0a 73 74  ext object.*/.st
41a0: 61 74 69 63 20 76 6f 69 64 20 69 6e 69 74 54 65  atic void initTe
41b0: 78 74 28 53 68 65 6c 6c 54 65 78 74 20 2a 70 29  xt(ShellText *p)
41c0: 7b 0a 20 20 6d 65 6d 73 65 74 28 70 2c 20 30 2c  {.  memset(p, 0,
41d0: 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a 7d 0a   sizeof(*p));.}.
41e0: 73 74 61 74 69 63 20 76 6f 69 64 20 66 72 65 65  static void free
41f0: 54 65 78 74 28 53 68 65 6c 6c 54 65 78 74 20 2a  Text(ShellText *
4200: 70 29 7b 0a 20 20 66 72 65 65 28 70 2d 3e 7a 29  p){.  free(p->z)
4210: 3b 0a 20 20 69 6e 69 74 54 65 78 74 28 70 29 3b  ;.  initText(p);
4220: 0a 7d 0a 0a 2f 2a 20 7a 49 6e 20 69 73 20 65 69  .}../* zIn is ei
4230: 74 68 65 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ther a pointer t
4240: 6f 20 61 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61  o a NULL-termina
4250: 74 65 64 20 73 74 72 69 6e 67 20 69 6e 20 6d 65  ted string in me
4260: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 0a 2a 2a  mory obtained.**
4270: 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2c 20   from malloc(), 
4280: 6f 72 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65  or a NULL pointe
4290: 72 2e 20 54 68 65 20 73 74 72 69 6e 67 20 70 6f  r. The string po
42a0: 69 6e 74 65 64 20 74 6f 20 62 79 20 7a 41 70 70  inted to by zApp
42b0: 65 6e 64 20 69 73 0a 2a 2a 20 61 64 64 65 64 20  end is.** added 
42c0: 74 6f 20 7a 49 6e 2c 20 61 6e 64 20 74 68 65 20  to zIn, and the 
42d0: 72 65 73 75 6c 74 20 72 65 74 75 72 6e 65 64 20  result returned 
42e0: 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e  in memory obtain
42f0: 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ed from malloc()
4300: 2e 0a 2a 2a 20 7a 49 6e 2c 20 69 66 20 69 74 20  ..** zIn, if it 
4310: 77 61 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 73  was not NULL, is
4320: 20 66 72 65 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66   freed..**.** If
4330: 20 74 68 65 20 74 68 69 72 64 20 61 72 67 75 6d   the third argum
4340: 65 6e 74 2c 20 71 75 6f 74 65 2c 20 69 73 20 6e  ent, quote, is n
4350: 6f 74 20 27 5c 30 27 2c 20 74 68 65 6e 20 69 74  ot '\0', then it
4360: 20 69 73 20 75 73 65 64 20 61 73 20 61 0a 2a 2a   is used as a.**
4370: 20 71 75 6f 74 65 20 63 68 61 72 61 63 74 65 72   quote character
4380: 20 66 6f 72 20 7a 41 70 70 65 6e 64 2e 0a 2a 2f   for zAppend..*/
4390: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70  .static void app
43a0: 65 6e 64 54 65 78 74 28 53 68 65 6c 6c 54 65 78  endText(ShellTex
43b0: 74 20 2a 70 2c 20 63 68 61 72 20 63 6f 6e 73 74  t *p, char const
43c0: 20 2a 7a 41 70 70 65 6e 64 2c 20 63 68 61 72 20   *zAppend, char 
43d0: 71 75 6f 74 65 29 7b 0a 20 20 69 6e 74 20 6c 65  quote){.  int le
43e0: 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  n;.  int i;.  in
43f0: 74 20 6e 41 70 70 65 6e 64 20 3d 20 73 74 72 6c  t nAppend = strl
4400: 65 6e 33 30 28 7a 41 70 70 65 6e 64 29 3b 0a 0a  en30(zAppend);..
4410: 20 20 6c 65 6e 20 3d 20 6e 41 70 70 65 6e 64 2b    len = nAppend+
4420: 70 2d 3e 6e 2b 31 3b 0a 20 20 69 66 28 20 71 75  p->n+1;.  if( qu
4430: 6f 74 65 20 29 7b 0a 20 20 20 20 6c 65 6e 20 2b  ote ){.    len +
4440: 3d 20 32 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  = 2;.    for(i=0
4450: 3b 20 69 3c 6e 41 70 70 65 6e 64 3b 20 69 2b 2b  ; i<nAppend; i++
4460: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 41 70  ){.      if( zAp
4470: 70 65 6e 64 5b 69 5d 3d 3d 71 75 6f 74 65 20 29  pend[i]==quote )
4480: 20 6c 65 6e 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20   len++;.    }.  
4490: 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 2b 6c 65  }..  if( p->n+le
44a0: 6e 3e 3d 70 2d 3e 6e 41 6c 6c 6f 63 20 29 7b 0a  n>=p->nAlloc ){.
44b0: 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20      p->nAlloc = 
44c0: 70 2d 3e 6e 41 6c 6c 6f 63 2a 32 20 2b 20 6c 65  p->nAlloc*2 + le
44d0: 6e 20 2b 20 32 30 3b 0a 20 20 20 20 70 2d 3e 7a  n + 20;.    p->z
44e0: 20 3d 20 72 65 61 6c 6c 6f 63 28 70 2d 3e 7a 2c   = realloc(p->z,
44f0: 20 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20 20   p->nAlloc);.   
4500: 20 69 66 28 20 70 2d 3e 7a 3d 3d 30 20 29 7b 0a   if( p->z==0 ){.
4510: 20 20 20 20 20 20 6d 65 6d 73 65 74 28 70 2c 20        memset(p, 
4520: 30 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a  0, sizeof(*p));.
4530: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20        return;.  
4540: 20 20 7d 0a 20 20 7d 0a 0a 20 20 69 66 28 20 71    }.  }..  if( q
4550: 75 6f 74 65 20 29 7b 0a 20 20 20 20 63 68 61 72  uote ){.    char
4560: 20 2a 7a 43 73 72 20 3d 20 70 2d 3e 7a 2b 70 2d   *zCsr = p->z+p-
4570: 3e 6e 3b 0a 20 20 20 20 2a 7a 43 73 72 2b 2b 20  >n;.    *zCsr++ 
4580: 3d 20 71 75 6f 74 65 3b 0a 20 20 20 20 66 6f 72  = quote;.    for
4590: 28 69 3d 30 3b 20 69 3c 6e 41 70 70 65 6e 64 3b  (i=0; i<nAppend;
45a0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 2a 7a 43   i++){.      *zC
45b0: 73 72 2b 2b 20 3d 20 7a 41 70 70 65 6e 64 5b 69  sr++ = zAppend[i
45c0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 41 70  ];.      if( zAp
45d0: 70 65 6e 64 5b 69 5d 3d 3d 71 75 6f 74 65 20 29  pend[i]==quote )
45e0: 20 2a 7a 43 73 72 2b 2b 20 3d 20 71 75 6f 74 65   *zCsr++ = quote
45f0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73  ;.    }.    *zCs
4600: 72 2b 2b 20 3d 20 71 75 6f 74 65 3b 0a 20 20 20  r++ = quote;.   
4610: 20 70 2d 3e 6e 20 3d 20 28 69 6e 74 29 28 7a 43   p->n = (int)(zC
4620: 73 72 20 2d 20 70 2d 3e 7a 29 3b 0a 20 20 20 20  sr - p->z);.    
4630: 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20  *zCsr = '\0';.  
4640: 7d 65 6c 73 65 7b 0a 20 20 20 20 6d 65 6d 63 70  }else{.    memcp
4650: 79 28 70 2d 3e 7a 2b 70 2d 3e 6e 2c 20 7a 41 70  y(p->z+p->n, zAp
4660: 70 65 6e 64 2c 20 6e 41 70 70 65 6e 64 29 3b 0a  pend, nAppend);.
4670: 20 20 20 20 70 2d 3e 6e 20 2b 3d 20 6e 41 70 70      p->n += nApp
4680: 65 6e 64 3b 0a 20 20 20 20 70 2d 3e 7a 5b 70 2d  end;.    p->z[p-
4690: 3e 6e 5d 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 0a  >n] = '\0';.  }.
46a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74  }../*.** Attempt
46b0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
46c0: 20 69 64 65 6e 74 69 66 69 65 72 20 7a 4e 61 6d   identifier zNam
46d0: 65 20 6e 65 65 64 73 20 74 6f 20 62 65 20 71 75  e needs to be qu
46e0: 6f 74 65 64 2c 20 65 69 74 68 65 72 0a 2a 2a 20  oted, either.** 
46f0: 62 65 63 61 75 73 65 20 69 74 20 63 6f 6e 74 61  because it conta
4700: 69 6e 73 20 6e 6f 6e 2d 61 6c 70 68 61 6e 75 6d  ins non-alphanum
4710: 65 72 69 63 20 63 68 61 72 61 63 74 65 72 73 2c  eric characters,
4720: 20 6f 72 20 62 65 63 61 75 73 65 20 69 74 20 69   or because it i
4730: 73 20 61 6e 0a 2a 2a 20 53 51 4c 69 74 65 20 6b  s an.** SQLite k
4740: 65 79 77 6f 72 64 2e 20 20 42 65 20 63 6f 6e 73  eyword.  Be cons
4750: 65 72 76 61 74 69 76 65 20 69 6e 20 74 68 69 73  ervative in this
4760: 20 65 73 74 69 6d 61 74 65 3a 20 20 57 68 65 6e   estimate:  When
4770: 20 69 6e 20 64 6f 75 62 74 20 61 73 73 75 6d 65   in doubt assume
4780: 0a 2a 2a 20 74 68 61 74 20 71 75 6f 74 69 6e 67  .** that quoting
4790: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a   is required..**
47a0: 0a 2a 2a 20 52 65 74 75 72 6e 20 27 22 27 20 69  .** Return '"' i
47b0: 66 20 71 75 6f 74 69 6e 67 20 69 73 20 72 65 71  f quoting is req
47c0: 75 69 72 65 64 2e 20 20 52 65 74 75 72 6e 20 30  uired.  Return 0
47d0: 20 69 66 20 6e 6f 20 71 75 6f 74 69 6e 67 20 69   if no quoting i
47e0: 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73  s required..*/.s
47f0: 74 61 74 69 63 20 63 68 61 72 20 71 75 6f 74 65  tatic char quote
4800: 43 68 61 72 28 63 6f 6e 73 74 20 63 68 61 72 20  Char(const char 
4810: 2a 7a 4e 61 6d 65 29 7b 0a 20 20 2f 2a 20 41 6c  *zName){.  /* Al
4820: 6c 20 53 51 4c 69 74 65 20 6b 65 79 77 6f 72 64  l SQLite keyword
4830: 73 2c 20 69 6e 20 61 6c 70 68 61 62 65 74 69 63  s, in alphabetic
4840: 61 6c 20 6f 72 64 65 72 20 2a 2f 0a 20 20 73 74  al order */.  st
4850: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
4860: 2a 61 7a 4b 65 79 77 6f 72 64 73 5b 5d 20 3d 20  *azKeywords[] = 
4870: 7b 0a 20 20 20 20 22 41 42 4f 52 54 22 2c 20 22  {.    "ABORT", "
4880: 41 43 54 49 4f 4e 22 2c 20 22 41 44 44 22 2c 20  ACTION", "ADD", 
4890: 22 41 46 54 45 52 22 2c 20 22 41 4c 4c 22 2c 20  "AFTER", "ALL", 
48a0: 22 41 4c 54 45 52 22 2c 20 22 41 4e 41 4c 59 5a  "ALTER", "ANALYZ
48b0: 45 22 2c 20 22 41 4e 44 22 2c 20 22 41 53 22 2c  E", "AND", "AS",
48c0: 0a 20 20 20 20 22 41 53 43 22 2c 20 22 41 54 54  .    "ASC", "ATT
48d0: 41 43 48 22 2c 20 22 41 55 54 4f 49 4e 43 52 45  ACH", "AUTOINCRE
48e0: 4d 45 4e 54 22 2c 20 22 42 45 46 4f 52 45 22 2c  MENT", "BEFORE",
48f0: 20 22 42 45 47 49 4e 22 2c 20 22 42 45 54 57 45   "BEGIN", "BETWE
4900: 45 4e 22 2c 20 22 42 59 22 2c 0a 20 20 20 20 22  EN", "BY",.    "
4910: 43 41 53 43 41 44 45 22 2c 20 22 43 41 53 45 22  CASCADE", "CASE"
4920: 2c 20 22 43 41 53 54 22 2c 20 22 43 48 45 43 4b  , "CAST", "CHECK
4930: 22 2c 20 22 43 4f 4c 4c 41 54 45 22 2c 20 22 43  ", "COLLATE", "C
4940: 4f 4c 55 4d 4e 22 2c 20 22 43 4f 4d 4d 49 54 22  OLUMN", "COMMIT"
4950: 2c 0a 20 20 20 20 22 43 4f 4e 46 4c 49 43 54 22  ,.    "CONFLICT"
4960: 2c 20 22 43 4f 4e 53 54 52 41 49 4e 54 22 2c 20  , "CONSTRAINT", 
4970: 22 43 52 45 41 54 45 22 2c 20 22 43 52 4f 53 53  "CREATE", "CROSS
4980: 22 2c 20 22 43 55 52 52 45 4e 54 5f 44 41 54 45  ", "CURRENT_DATE
4990: 22 2c 0a 20 20 20 20 22 43 55 52 52 45 4e 54 5f  ",.    "CURRENT_
49a0: 54 49 4d 45 22 2c 20 22 43 55 52 52 45 4e 54 5f  TIME", "CURRENT_
49b0: 54 49 4d 45 53 54 41 4d 50 22 2c 20 22 44 41 54  TIMESTAMP", "DAT
49c0: 41 42 41 53 45 22 2c 20 22 44 45 46 41 55 4c 54  ABASE", "DEFAULT
49d0: 22 2c 20 22 44 45 46 45 52 52 41 42 4c 45 22 2c  ", "DEFERRABLE",
49e0: 0a 20 20 20 20 22 44 45 46 45 52 52 45 44 22 2c  .    "DEFERRED",
49f0: 20 22 44 45 4c 45 54 45 22 2c 20 22 44 45 53 43   "DELETE", "DESC
4a00: 22 2c 20 22 44 45 54 41 43 48 22 2c 20 22 44 49  ", "DETACH", "DI
4a10: 53 54 49 4e 43 54 22 2c 20 22 44 52 4f 50 22 2c  STINCT", "DROP",
4a20: 20 22 45 41 43 48 22 2c 0a 20 20 20 20 22 45 4c   "EACH",.    "EL
4a30: 53 45 22 2c 20 22 45 4e 44 22 2c 20 22 45 53 43  SE", "END", "ESC
4a40: 41 50 45 22 2c 20 22 45 58 43 45 50 54 22 2c 20  APE", "EXCEPT", 
4a50: 22 45 58 43 4c 55 53 49 56 45 22 2c 20 22 45 58  "EXCLUSIVE", "EX
4a60: 49 53 54 53 22 2c 20 22 45 58 50 4c 41 49 4e 22  ISTS", "EXPLAIN"
4a70: 2c 0a 20 20 20 20 22 46 41 49 4c 22 2c 20 22 46  ,.    "FAIL", "F
4a80: 4f 52 22 2c 20 22 46 4f 52 45 49 47 4e 22 2c 20  OR", "FOREIGN", 
4a90: 22 46 52 4f 4d 22 2c 20 22 46 55 4c 4c 22 2c 20  "FROM", "FULL", 
4aa0: 22 47 4c 4f 42 22 2c 20 22 47 52 4f 55 50 22 2c  "GLOB", "GROUP",
4ab0: 20 22 48 41 56 49 4e 47 22 2c 20 22 49 46 22 2c   "HAVING", "IF",
4ac0: 0a 20 20 20 20 22 49 47 4e 4f 52 45 22 2c 20 22  .    "IGNORE", "
4ad0: 49 4d 4d 45 44 49 41 54 45 22 2c 20 22 49 4e 22  IMMEDIATE", "IN"
4ae0: 2c 20 22 49 4e 44 45 58 22 2c 20 22 49 4e 44 45  , "INDEX", "INDE
4af0: 58 45 44 22 2c 20 22 49 4e 49 54 49 41 4c 4c 59  XED", "INITIALLY
4b00: 22 2c 20 22 49 4e 4e 45 52 22 2c 0a 20 20 20 20  ", "INNER",.    
4b10: 22 49 4e 53 45 52 54 22 2c 20 22 49 4e 53 54 45  "INSERT", "INSTE
4b20: 41 44 22 2c 20 22 49 4e 54 45 52 53 45 43 54 22  AD", "INTERSECT"
4b30: 2c 20 22 49 4e 54 4f 22 2c 20 22 49 53 22 2c 20  , "INTO", "IS", 
4b40: 22 49 53 4e 55 4c 4c 22 2c 20 22 4a 4f 49 4e 22  "ISNULL", "JOIN"
4b50: 2c 20 22 4b 45 59 22 2c 0a 20 20 20 20 22 4c 45  , "KEY",.    "LE
4b60: 46 54 22 2c 20 22 4c 49 4b 45 22 2c 20 22 4c 49  FT", "LIKE", "LI
4b70: 4d 49 54 22 2c 20 22 4d 41 54 43 48 22 2c 20 22  MIT", "MATCH", "
4b80: 4e 41 54 55 52 41 4c 22 2c 20 22 4e 4f 22 2c 20  NATURAL", "NO", 
4b90: 22 4e 4f 54 22 2c 20 22 4e 4f 54 4e 55 4c 4c 22  "NOT", "NOTNULL"
4ba0: 2c 0a 20 20 20 20 22 4e 55 4c 4c 22 2c 20 22 4f  ,.    "NULL", "O
4bb0: 46 22 2c 20 22 4f 46 46 53 45 54 22 2c 20 22 4f  F", "OFFSET", "O
4bc0: 4e 22 2c 20 22 4f 52 22 2c 20 22 4f 52 44 45 52  N", "OR", "ORDER
4bd0: 22 2c 20 22 4f 55 54 45 52 22 2c 20 22 50 4c 41  ", "OUTER", "PLA
4be0: 4e 22 2c 20 22 50 52 41 47 4d 41 22 2c 0a 20 20  N", "PRAGMA",.  
4bf0: 20 20 22 50 52 49 4d 41 52 59 22 2c 20 22 51 55    "PRIMARY", "QU
4c00: 45 52 59 22 2c 20 22 52 41 49 53 45 22 2c 20 22  ERY", "RAISE", "
4c10: 52 45 43 55 52 53 49 56 45 22 2c 20 22 52 45 46  RECURSIVE", "REF
4c20: 45 52 45 4e 43 45 53 22 2c 20 22 52 45 47 45 58  ERENCES", "REGEX
4c30: 50 22 2c 0a 20 20 20 20 22 52 45 49 4e 44 45 58  P",.    "REINDEX
4c40: 22 2c 20 22 52 45 4c 45 41 53 45 22 2c 20 22 52  ", "RELEASE", "R
4c50: 45 4e 41 4d 45 22 2c 20 22 52 45 50 4c 41 43 45  ENAME", "REPLACE
4c60: 22 2c 20 22 52 45 53 54 52 49 43 54 22 2c 20 22  ", "RESTRICT", "
4c70: 52 49 47 48 54 22 2c 0a 20 20 20 20 22 52 4f 4c  RIGHT",.    "ROL
4c80: 4c 42 41 43 4b 22 2c 20 22 52 4f 57 22 2c 20 22  LBACK", "ROW", "
4c90: 53 41 56 45 50 4f 49 4e 54 22 2c 20 22 53 45 4c  SAVEPOINT", "SEL
4ca0: 45 43 54 22 2c 20 22 53 45 54 22 2c 20 22 54 41  ECT", "SET", "TA
4cb0: 42 4c 45 22 2c 20 22 54 45 4d 50 22 2c 0a 20 20  BLE", "TEMP",.  
4cc0: 20 20 22 54 45 4d 50 4f 52 41 52 59 22 2c 20 22    "TEMPORARY", "
4cd0: 54 48 45 4e 22 2c 20 22 54 4f 22 2c 20 22 54 52  THEN", "TO", "TR
4ce0: 41 4e 53 41 43 54 49 4f 4e 22 2c 20 22 54 52 49  ANSACTION", "TRI
4cf0: 47 47 45 52 22 2c 20 22 55 4e 49 4f 4e 22 2c 20  GGER", "UNION", 
4d00: 22 55 4e 49 51 55 45 22 2c 0a 20 20 20 20 22 55  "UNIQUE",.    "U
4d10: 50 44 41 54 45 22 2c 20 22 55 53 49 4e 47 22 2c  PDATE", "USING",
4d20: 20 22 56 41 43 55 55 4d 22 2c 20 22 56 41 4c 55   "VACUUM", "VALU
4d30: 45 53 22 2c 20 22 56 49 45 57 22 2c 20 22 56 49  ES", "VIEW", "VI
4d40: 52 54 55 41 4c 22 2c 20 22 57 48 45 4e 22 2c 20  RTUAL", "WHEN", 
4d50: 22 57 48 45 52 45 22 2c 0a 20 20 20 20 22 57 49  "WHERE",.    "WI
4d60: 54 48 22 2c 20 22 57 49 54 48 4f 55 54 22 2c 0a  TH", "WITHOUT",.
4d70: 20 20 7d 3b 0a 20 20 69 6e 74 20 69 2c 20 6c 77    };.  int i, lw
4d80: 72 2c 20 75 70 72 2c 20 6d 69 64 2c 20 63 3b 0a  r, upr, mid, c;.
4d90: 20 20 69 66 28 20 21 69 73 61 6c 70 68 61 28 28    if( !isalpha((
4da0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 7a 4e  unsigned char)zN
4db0: 61 6d 65 5b 30 5d 29 20 26 26 20 7a 4e 61 6d 65  ame[0]) && zName
4dc0: 5b 30 5d 21 3d 27 5f 27 20 29 20 72 65 74 75 72  [0]!='_' ) retur
4dd0: 6e 20 27 22 27 3b 0a 20 20 66 6f 72 28 69 3d 30  n '"';.  for(i=0
4de0: 3b 20 7a 4e 61 6d 65 5b 69 5d 3b 20 69 2b 2b 29  ; zName[i]; i++)
4df0: 7b 0a 20 20 20 20 69 66 28 20 21 69 73 61 6c 6e  {.    if( !isaln
4e00: 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
4e10: 72 29 7a 4e 61 6d 65 5b 69 5d 29 20 26 26 20 7a  r)zName[i]) && z
4e20: 4e 61 6d 65 5b 69 5d 21 3d 27 5f 27 20 29 20 72  Name[i]!='_' ) r
4e30: 65 74 75 72 6e 20 27 22 27 3b 0a 20 20 7d 0a 20  eturn '"';.  }. 
4e40: 20 6c 77 72 20 3d 20 30 3b 0a 20 20 75 70 72 20   lwr = 0;.  upr 
4e50: 3d 20 73 69 7a 65 6f 66 28 61 7a 4b 65 79 77 6f  = sizeof(azKeywo
4e60: 72 64 73 29 2f 73 69 7a 65 6f 66 28 61 7a 4b 65  rds)/sizeof(azKe
4e70: 79 77 6f 72 64 73 5b 30 5d 29 20 2d 20 31 3b 0a  ywords[0]) - 1;.
4e80: 20 20 77 68 69 6c 65 28 20 6c 77 72 3c 3d 75 70    while( lwr<=up
4e90: 72 20 29 7b 0a 20 20 20 20 6d 69 64 20 3d 20 28  r ){.    mid = (
4ea0: 6c 77 72 2b 75 70 72 29 2f 32 3b 0a 20 20 20 20  lwr+upr)/2;.    
4eb0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 72 69  c = sqlite3_stri
4ec0: 63 6d 70 28 61 7a 4b 65 79 77 6f 72 64 73 5b 6d  cmp(azKeywords[m
4ed0: 69 64 5d 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  id], zName);.   
4ee0: 20 69 66 28 20 63 3d 3d 30 20 29 20 72 65 74 75   if( c==0 ) retu
4ef0: 72 6e 20 27 22 27 3b 0a 20 20 20 20 69 66 28 20  rn '"';.    if( 
4f00: 63 3c 30 20 29 7b 0a 20 20 20 20 20 20 6c 77 72  c<0 ){.      lwr
4f10: 20 3d 20 6d 69 64 2b 31 3b 0a 20 20 20 20 7d 65   = mid+1;.    }e
4f20: 6c 73 65 7b 0a 20 20 20 20 20 20 75 70 72 20 3d  lse{.      upr =
4f30: 20 6d 69 64 2d 31 3b 0a 20 20 20 20 7d 0a 20 20   mid-1;.    }.  
4f40: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
4f50: 0a 2f 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e 63 74  ./*.** SQL funct
4f60: 69 6f 6e 3a 20 20 73 68 65 6c 6c 5f 61 64 64 5f  ion:  shell_add_
4f70: 73 63 68 65 6d 61 28 53 2c 58 29 0a 2a 2a 0a 2a  schema(S,X).**.*
4f80: 2a 20 41 64 64 20 74 68 65 20 73 63 68 65 6d 61  * Add the schema
4f90: 20 6e 61 6d 65 20 58 20 74 6f 20 74 68 65 20 43   name X to the C
4fa0: 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  REATE statement 
4fb0: 69 6e 20 53 20 61 6e 64 20 72 65 74 75 72 6e 20  in S and return 
4fc0: 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 20 45  the result..** E
4fd0: 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  xamples:.**.**  
4fe0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
4ff0: 31 28 78 29 20 20 20 2d 3e 20 20 20 43 52 45 41  1(x)   ->   CREA
5000: 54 45 20 54 41 42 4c 45 20 78 79 7a 2e 74 31 28  TE TABLE xyz.t1(
5010: 78 29 3b 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 20 77  x);.**.** Also w
5020: 6f 72 6b 73 20 6f 6e 0a 2a 2a 0a 2a 2a 20 20 20  orks on.**.**   
5030: 20 43 52 45 41 54 45 20 49 4e 44 45 58 0a 2a 2a   CREATE INDEX.**
5040: 20 20 20 20 43 52 45 41 54 45 20 55 4e 49 51 55      CREATE UNIQU
5050: 45 20 49 4e 44 45 58 0a 2a 2a 20 20 20 20 43 52  E INDEX.**    CR
5060: 45 41 54 45 20 56 49 45 57 0a 2a 2a 20 20 20 20  EATE VIEW.**    
5070: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 0a 2a  CREATE TRIGGER.*
5080: 2a 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54  *    CREATE VIRT
5090: 55 41 4c 20 54 41 42 4c 45 0a 2a 2a 0a 2a 2a 20  UAL TABLE.**.** 
50a0: 54 68 69 73 20 55 44 46 20 69 73 20 75 73 65 64  This UDF is used
50b0: 20 62 79 20 74 68 65 20 2e 73 63 68 65 6d 61 20   by the .schema 
50c0: 63 6f 6d 6d 61 6e 64 20 74 6f 20 69 6e 73 65 72  command to inser
50d0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 6e 61 6d  t the schema nam
50e0: 65 20 6f 66 0a 2a 2a 20 61 74 74 61 63 68 65 64  e of.** attached
50f0: 20 64 61 74 61 62 61 73 65 73 20 69 6e 74 6f 20   databases into 
5100: 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 74 68  the middle of th
5110: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  e sqlite_master.
5120: 73 71 6c 20 66 69 65 6c 64 2e 0a 2a 2f 0a 73 74  sql field..*/.st
5130: 61 74 69 63 20 76 6f 69 64 20 73 68 65 6c 6c 41  atic void shellA
5140: 64 64 53 63 68 65 6d 61 4e 61 6d 65 28 0a 20 20  ddSchemaName(.  
5150: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
5160: 2a 70 43 74 78 2c 0a 20 20 69 6e 74 20 6e 56 61  *pCtx,.  int nVa
5170: 6c 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  l,.  sqlite3_val
5180: 75 65 20 2a 2a 61 70 56 61 6c 0a 29 7b 0a 20 20  ue **apVal.){.  
5190: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
51a0: 72 20 2a 61 50 72 65 66 69 78 5b 5d 20 3d 20 7b  r *aPrefix[] = {
51b0: 0a 20 20 20 20 20 22 54 41 42 4c 45 22 2c 0a 20  .     "TABLE",. 
51c0: 20 20 20 20 22 49 4e 44 45 58 22 2c 0a 20 20 20      "INDEX",.   
51d0: 20 20 22 55 4e 49 51 55 45 20 49 4e 44 45 58 22    "UNIQUE INDEX"
51e0: 2c 0a 20 20 20 20 20 22 56 49 45 57 22 2c 0a 20  ,.     "VIEW",. 
51f0: 20 20 20 20 22 54 52 49 47 47 45 52 22 2c 0a 20      "TRIGGER",. 
5200: 20 20 20 20 22 56 49 52 54 55 41 4c 20 54 41 42      "VIRTUAL TAB
5210: 4c 45 22 0a 20 20 7d 3b 0a 20 20 69 6e 74 20 69  LE".  };.  int i
5220: 20 3d 20 30 3b 0a 20 20 63 6f 6e 73 74 20 63 68   = 0;.  const ch
5230: 61 72 20 2a 7a 49 6e 20 3d 20 28 63 6f 6e 73 74  ar *zIn = (const
5240: 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76   char*)sqlite3_v
5250: 61 6c 75 65 5f 74 65 78 74 28 61 70 56 61 6c 5b  alue_text(apVal[
5260: 30 5d 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  0]);.  const cha
5270: 72 20 2a 7a 53 63 68 65 6d 61 20 3d 20 28 63 6f  r *zSchema = (co
5280: 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
5290: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 70 56  3_value_text(apV
52a0: 61 6c 5b 31 5d 29 3b 0a 20 20 61 73 73 65 72 74  al[1]);.  assert
52b0: 28 20 6e 56 61 6c 3d 3d 32 20 29 3b 0a 20 20 69  ( nVal==2 );.  i
52c0: 66 28 20 7a 49 6e 21 3d 30 20 26 26 20 73 74 72  f( zIn!=0 && str
52d0: 6e 63 6d 70 28 7a 49 6e 2c 20 22 43 52 45 41 54  ncmp(zIn, "CREAT
52e0: 45 20 22 2c 20 37 29 3d 3d 30 20 29 7b 0a 20 20  E ", 7)==0 ){.  
52f0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 28 69 6e    for(i=0; i<(in
5300: 74 29 28 73 69 7a 65 6f 66 28 61 50 72 65 66 69  t)(sizeof(aPrefi
5310: 78 29 2f 73 69 7a 65 6f 66 28 61 50 72 65 66 69  x)/sizeof(aPrefi
5320: 78 5b 30 5d 29 29 3b 20 69 2b 2b 29 7b 0a 20 20  x[0])); i++){.  
5330: 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c      int n = strl
5340: 65 6e 33 30 28 61 50 72 65 66 69 78 5b 69 5d 29  en30(aPrefix[i])
5350: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 6e  ;.      if( strn
5360: 63 6d 70 28 7a 49 6e 2b 37 2c 20 61 50 72 65 66  cmp(zIn+7, aPref
5370: 69 78 5b 69 5d 2c 20 6e 29 3d 3d 30 20 26 26 20  ix[i], n)==0 && 
5380: 7a 49 6e 5b 6e 2b 37 5d 3d 3d 27 20 27 20 29 7b  zIn[n+7]==' ' ){
5390: 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 63 51  .        char cQ
53a0: 75 6f 74 65 20 3d 20 71 75 6f 74 65 43 68 61 72  uote = quoteChar
53b0: 28 7a 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20  (zSchema);.     
53c0: 20 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20     char *z;.    
53d0: 20 20 20 20 69 66 28 20 63 51 75 6f 74 65 20 29      if( cQuote )
53e0: 7b 0a 20 20 20 20 20 20 20 20 20 7a 20 3d 20 73  {.         z = s
53f0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
5400: 25 2e 2a 73 20 5c 22 25 77 5c 22 2e 25 73 22 2c  %.*s \"%w\".%s",
5410: 20 6e 2b 37 2c 20 7a 49 6e 2c 20 7a 53 63 68 65   n+7, zIn, zSche
5420: 6d 61 2c 20 7a 49 6e 2b 6e 2b 38 29 3b 0a 20 20  ma, zIn+n+8);.  
5430: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
5440: 20 20 20 20 20 20 20 7a 20 3d 20 73 71 6c 69 74         z = sqlit
5450: 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 2e 2a 73  e3_mprintf("%.*s
5460: 20 25 73 2e 25 73 22 2c 20 6e 2b 37 2c 20 7a 49   %s.%s", n+7, zI
5470: 6e 2c 20 7a 53 63 68 65 6d 61 2c 20 7a 49 6e 2b  n, zSchema, zIn+
5480: 6e 2b 38 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  n+8);.        }.
5490: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
54a0: 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78  result_text(pCtx
54b0: 2c 20 7a 2c 20 2d 31 2c 20 73 71 6c 69 74 65 33  , z, -1, sqlite3
54c0: 5f 66 72 65 65 29 3b 0a 20 20 20 20 20 20 20 20  _free);.        
54d0: 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a  return;.      }.
54e0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
54f0: 74 65 33 5f 72 65 73 75 6c 74 5f 76 61 6c 75 65  te3_result_value
5500: 28 70 43 74 78 2c 20 61 70 56 61 6c 5b 30 5d 29  (pCtx, apVal[0])
5510: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73  ;.}../*.** The s
5520: 6f 75 72 63 65 20 63 6f 64 65 20 66 6f 72 20 73  ource code for s
5530: 65 76 65 72 61 6c 20 72 75 6e 2d 74 69 6d 65 20  everal run-time 
5540: 6c 6f 61 64 61 62 6c 65 20 65 78 74 65 6e 73 69  loadable extensi
5550: 6f 6e 73 20 69 73 20 69 6e 73 65 72 74 65 64 0a  ons is inserted.
5560: 2a 2a 20 62 65 6c 6f 77 20 62 79 20 74 68 65 20  ** below by the 
5570: 2e 2e 2f 74 6f 6f 6c 2f 6d 6b 73 68 65 6c 6c 63  ../tool/mkshellc
5580: 2e 74 63 6c 20 73 63 72 69 70 74 2e 20 20 42 65  .tcl script.  Be
5590: 66 6f 72 65 20 70 72 6f 63 65 73 73 69 6e 67 20  fore processing 
55a0: 74 68 61 74 20 69 6e 63 6c 75 64 65 64 0a 2a 2a  that included.**
55b0: 20 63 6f 64 65 2c 20 77 65 20 6e 65 65 64 20 74   code, we need t
55c0: 6f 20 6f 76 65 72 72 69 64 65 20 73 6f 6d 65 20  o override some 
55d0: 6d 61 63 72 6f 73 20 74 6f 20 6d 61 6b 65 20 74  macros to make t
55e0: 68 65 20 69 6e 63 6c 75 64 65 64 20 70 72 6f 67  he included prog
55f0: 72 61 6d 20 63 6f 64 65 0a 2a 2a 20 77 6f 72 6b  ram code.** work
5600: 20 68 65 72 65 20 69 6e 20 74 68 65 20 6d 69 64   here in the mid
5610: 64 6c 65 20 6f 66 20 74 68 69 73 20 72 65 67 75  dle of this regu
5620: 6c 61 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  lar program..*/.
5630: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
5640: 58 54 45 4e 53 49 4f 4e 5f 49 4e 49 54 31 0a 23  XTENSION_INIT1.#
5650: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 58  define SQLITE_EX
5660: 54 45 4e 53 49 4f 4e 5f 49 4e 49 54 32 28 58 29  TENSION_INIT2(X)
5670: 20 28 76 6f 69 64 29 28 58 29 0a 0a 49 4e 43 4c   (void)(X)..INCL
5680: 55 44 45 20 2e 2e 2f 65 78 74 2f 6d 69 73 63 2f  UDE ../ext/misc/
5690: 73 68 61 74 68 72 65 65 2e 63 0a 49 4e 43 4c 55  shathree.c.INCLU
56a0: 44 45 20 2e 2e 2f 65 78 74 2f 6d 69 73 63 2f 66  DE ../ext/misc/f
56b0: 69 6c 65 69 6f 2e 63 0a 49 4e 43 4c 55 44 45 20  ileio.c.INCLUDE 
56c0: 2e 2e 2f 65 78 74 2f 6d 69 73 63 2f 63 6f 6d 70  ../ext/misc/comp
56d0: 6c 65 74 69 6f 6e 2e 63 0a 0a 23 69 66 20 64 65  letion.c..#if de
56e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
56f0: 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 2f 2a 0a  BLE_SESSION)./*.
5700: 2a 2a 20 53 74 61 74 65 20 69 6e 66 6f 72 6d 61  ** State informa
5710: 74 69 6f 6e 20 66 6f 72 20 61 20 73 69 6e 67 6c  tion for a singl
5720: 65 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e 0a 2a  e open session.*
5730: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
5740: 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20 4f 70 65   OpenSession Ope
5750: 6e 53 65 73 73 69 6f 6e 3b 0a 73 74 72 75 63 74  nSession;.struct
5760: 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20 7b 0a 20   OpenSession {. 
5770: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
5780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 79 6d            /* Sym
5790: 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74  bolic name for t
57a0: 68 69 73 20 73 65 73 73 69 6f 6e 20 2a 2f 0a 20  his session */. 
57b0: 20 69 6e 74 20 6e 46 69 6c 74 65 72 3b 20 20 20   int nFilter;   
57c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
57d0: 62 65 72 20 6f 66 20 78 46 69 6c 74 65 72 20 72  ber of xFilter r
57e0: 65 6a 65 63 74 69 6f 6e 20 47 4c 4f 42 20 70 61  ejection GLOB pa
57f0: 74 74 65 72 6e 73 20 2a 2f 0a 20 20 63 68 61 72  tterns */.  char
5800: 20 2a 2a 61 7a 46 69 6c 74 65 72 3b 20 20 20 20   **azFilter;    
5810: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
5820: 20 78 46 69 6c 74 65 72 20 72 65 6a 65 63 74 69   xFilter rejecti
5830: 6f 6e 20 47 4c 4f 42 20 70 61 74 74 65 72 6e 73  on GLOB patterns
5840: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 65   */.  sqlite3_se
5850: 73 73 69 6f 6e 20 2a 70 3b 20 20 20 20 20 20 2f  ssion *p;      /
5860: 2a 20 54 68 65 20 6f 70 65 6e 20 73 65 73 73 69  * The open sessi
5870: 6f 6e 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 0a  on */.};.#endif.
5880: 0a 2f 2a 0a 2a 2a 20 53 68 65 6c 6c 20 6f 75 74  ./*.** Shell out
5890: 70 75 74 20 6d 6f 64 65 20 69 6e 66 6f 72 6d 61  put mode informa
58a0: 74 69 6f 6e 20 66 72 6f 6d 20 62 65 66 6f 72 65  tion from before
58b0: 20 22 2e 65 78 70 6c 61 69 6e 20 6f 6e 22 2c 0a   ".explain on",.
58c0: 2a 2a 20 73 61 76 65 64 20 73 6f 20 74 68 61 74  ** saved so that
58d0: 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f   it can be resto
58e0: 72 65 64 20 62 79 20 22 2e 65 78 70 6c 61 69 6e  red by ".explain
58f0: 20 6f 66 66 22 0a 2a 2f 0a 74 79 70 65 64 65 66   off".*/.typedef
5900: 20 73 74 72 75 63 74 20 53 61 76 65 64 4d 6f 64   struct SavedMod
5910: 65 49 6e 66 6f 20 53 61 76 65 64 4d 6f 64 65 49  eInfo SavedModeI
5920: 6e 66 6f 3b 0a 73 74 72 75 63 74 20 53 61 76 65  nfo;.struct Save
5930: 64 4d 6f 64 65 49 6e 66 6f 20 7b 0a 20 20 69 6e  dModeInfo {.  in
5940: 74 20 76 61 6c 69 64 3b 20 20 20 20 20 20 20 20  t valid;        
5950: 20 20 2f 2a 20 49 73 20 74 68 65 72 65 20 6c 65    /* Is there le
5960: 67 69 74 20 64 61 74 61 20 69 6e 20 68 65 72 65  git data in here
5970: 3f 20 2a 2f 0a 20 20 69 6e 74 20 6d 6f 64 65 3b  ? */.  int mode;
5980: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
5990: 64 65 20 70 72 69 6f 72 20 74 6f 20 22 2e 65 78  de prior to ".ex
59a0: 70 6c 61 69 6e 20 6f 6e 22 20 2a 2f 0a 20 20 69  plain on" */.  i
59b0: 6e 74 20 73 68 6f 77 48 65 61 64 65 72 3b 20 20  nt showHeader;  
59c0: 20 20 20 2f 2a 20 54 68 65 20 22 2e 68 65 61 64     /* The ".head
59d0: 65 72 22 20 73 65 74 74 69 6e 67 20 70 72 69 6f  er" setting prio
59e0: 72 20 74 6f 20 22 2e 65 78 70 6c 61 69 6e 20 6f  r to ".explain o
59f0: 6e 22 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6c 57  n" */.  int colW
5a00: 69 64 74 68 5b 31 30 30 5d 3b 20 20 2f 2a 20 43  idth[100];  /* C
5a10: 6f 6c 75 6d 6e 20 77 69 64 74 68 73 20 70 72 69  olumn widths pri
5a20: 6f 72 20 74 6f 20 22 2e 65 78 70 6c 61 69 6e 20  or to ".explain 
5a30: 6f 6e 22 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  on" */.};../*.**
5a40: 20 53 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69   State informati
5a50: 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 64 61 74  on about the dat
5a60: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
5a70: 20 69 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e   is contained in
5a80: 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
5a90: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
5aa0: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 74   structure..*/.t
5ab0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 68  ypedef struct Sh
5ac0: 65 6c 6c 53 74 61 74 65 20 53 68 65 6c 6c 53 74  ellState ShellSt
5ad0: 61 74 65 3b 0a 73 74 72 75 63 74 20 53 68 65 6c  ate;.struct Shel
5ae0: 6c 53 74 61 74 65 20 7b 0a 20 20 73 71 6c 69 74  lState {.  sqlit
5af0: 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
5b00: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
5b10: 65 20 2a 2f 0a 20 20 69 6e 74 20 61 75 74 6f 45  e */.  int autoE
5b20: 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 2f 2a  xplain;       /*
5b30: 20 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 74   Automatically t
5b40: 75 72 6e 20 6f 6e 20 2e 65 78 70 6c 61 69 6e 20  urn on .explain 
5b50: 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 61 75  mode */.  int au
5b60: 74 6f 45 51 50 3b 20 20 20 20 20 20 20 20 20 20  toEQP;          
5b70: 20 2f 2a 20 52 75 6e 20 45 58 50 4c 41 49 4e 20   /* Run EXPLAIN 
5b80: 51 55 45 52 59 20 50 4c 41 4e 20 70 72 69 6f 72  QUERY PLAN prior
5b90: 20 74 6f 20 73 65 61 63 68 20 53 51 4c 20 73 74   to seach SQL st
5ba0: 6d 74 20 2a 2f 0a 20 20 69 6e 74 20 73 74 61 74  mt */.  int stat
5bb0: 73 4f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  sOn;           /
5bc0: 2a 20 54 72 75 65 20 74 6f 20 64 69 73 70 6c 61  * True to displa
5bd0: 79 20 6d 65 6d 6f 72 79 20 73 74 61 74 73 20 62  y memory stats b
5be0: 65 66 6f 72 65 20 65 61 63 68 20 66 69 6e 61 6c  efore each final
5bf0: 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 73 63 61  ize */.  int sca
5c00: 6e 73 74 61 74 73 4f 6e 3b 20 20 20 20 20 20 20  nstatsOn;       
5c10: 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 70 6c  /* True to displ
5c20: 61 79 20 73 63 61 6e 20 73 74 61 74 73 20 62 65  ay scan stats be
5c30: 66 6f 72 65 20 65 61 63 68 20 66 69 6e 61 6c 69  fore each finali
5c40: 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 75 74 43  ze */.  int outC
5c50: 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 2f  ount;          /
5c60: 2a 20 52 65 76 65 72 74 20 74 6f 20 73 74 64 6f  * Revert to stdo
5c70: 75 74 20 77 68 65 6e 20 72 65 61 63 68 69 6e 67  ut when reaching
5c80: 20 7a 65 72 6f 20 2a 2f 0a 20 20 69 6e 74 20 63   zero */.  int c
5c90: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
5ca0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
5cb0: 65 63 6f 72 64 73 20 64 69 73 70 6c 61 79 65 64  ecords displayed
5cc0: 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 46 49 4c   so far */.  FIL
5cd0: 45 20 2a 6f 75 74 3b 20 20 20 20 20 20 20 20 20  E *out;         
5ce0: 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73      /* Write res
5cf0: 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 20 20 46  ults here */.  F
5d00: 49 4c 45 20 2a 74 72 61 63 65 4f 75 74 3b 20 20  ILE *traceOut;  
5d10: 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20        /* Output 
5d20: 66 6f 72 20 73 71 6c 69 74 65 33 5f 74 72 61 63  for sqlite3_trac
5d30: 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  e() */.  int nEr
5d40: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
5d50: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
5d60: 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
5d70: 74 20 6d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  t mode;         
5d80: 20 20 20 20 20 2f 2a 20 41 6e 20 6f 75 74 70 75       /* An outpu
5d90: 74 20 6d 6f 64 65 20 73 65 74 74 69 6e 67 20 2a  t mode setting *
5da0: 2f 0a 20 20 69 6e 74 20 63 4d 6f 64 65 3b 20 20  /.  int cMode;  
5db0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 65             /* te
5dc0: 6d 70 6f 72 61 72 79 20 6f 75 74 70 75 74 20 6d  mporary output m
5dd0: 6f 64 65 20 66 6f 72 20 74 68 65 20 63 75 72 72  ode for the curr
5de0: 65 6e 74 20 71 75 65 72 79 20 2a 2f 0a 20 20 69  ent query */.  i
5df0: 6e 74 20 6e 6f 72 6d 61 6c 4d 6f 64 65 3b 20 20  nt normalMode;  
5e00: 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20        /* Output 
5e10: 6d 6f 64 65 20 62 65 66 6f 72 65 20 22 2e 65 78  mode before ".ex
5e20: 70 6c 61 69 6e 20 6f 6e 22 20 2a 2f 0a 20 20 69  plain on" */.  i
5e30: 6e 74 20 77 72 69 74 61 62 6c 65 53 63 68 65 6d  nt writableSchem
5e40: 61 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  a;    /* True if
5e50: 20 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65   PRAGMA writable
5e60: 5f 73 63 68 65 6d 61 3d 4f 4e 20 2a 2f 0a 20 20  _schema=ON */.  
5e70: 69 6e 74 20 73 68 6f 77 48 65 61 64 65 72 3b 20  int showHeader; 
5e80: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
5e90: 6f 20 73 68 6f 77 20 63 6f 6c 75 6d 6e 20 6e 61  o show column na
5ea0: 6d 65 73 20 69 6e 20 4c 69 73 74 20 6f 72 20 43  mes in List or C
5eb0: 6f 6c 75 6d 6e 20 6d 6f 64 65 20 2a 2f 0a 20 20  olumn mode */.  
5ec0: 69 6e 74 20 6e 43 68 65 63 6b 3b 20 20 20 20 20  int nCheck;     
5ed0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
5ee0: 20 6f 66 20 22 2e 63 68 65 63 6b 22 20 63 6f 6d   of ".check" com
5ef0: 6d 61 6e 64 73 20 72 75 6e 20 2a 2f 0a 20 20 75  mands run */.  u
5f00: 6e 73 69 67 6e 65 64 20 73 68 65 6c 6c 46 6c 67  nsigned shellFlg
5f10: 73 3b 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73  s;    /* Various
5f20: 20 66 6c 61 67 73 20 2a 2f 0a 20 20 63 68 61 72   flags */.  char
5f30: 20 2a 7a 44 65 73 74 54 61 62 6c 65 3b 20 20 20   *zDestTable;   
5f40: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 65     /* Name of de
5f50: 73 74 69 6e 61 74 69 6f 6e 20 74 61 62 6c 65 20  stination table 
5f60: 77 68 65 6e 20 4d 4f 44 45 5f 49 6e 73 65 72 74  when MODE_Insert
5f70: 20 2a 2f 0a 20 20 63 68 61 72 20 7a 54 65 73 74   */.  char zTest
5f80: 63 61 73 65 5b 33 30 5d 3b 20 20 20 20 2f 2a 20  case[30];    /* 
5f90: 4e 61 6d 65 20 6f 66 20 63 75 72 72 65 6e 74 20  Name of current 
5fa0: 74 65 73 74 20 63 61 73 65 20 2a 2f 0a 20 20 63  test case */.  c
5fb0: 68 61 72 20 63 6f 6c 53 65 70 61 72 61 74 6f 72  har colSeparator
5fc0: 5b 32 30 5d 3b 20 2f 2a 20 43 6f 6c 75 6d 6e 20  [20]; /* Column 
5fd0: 73 65 70 61 72 61 74 6f 72 20 63 68 61 72 61 63  separator charac
5fe0: 74 65 72 20 66 6f 72 20 73 65 76 65 72 61 6c 20  ter for several 
5ff0: 6d 6f 64 65 73 20 2a 2f 0a 20 20 63 68 61 72 20  modes */.  char 
6000: 72 6f 77 53 65 70 61 72 61 74 6f 72 5b 32 30 5d  rowSeparator[20]
6010: 3b 20 2f 2a 20 52 6f 77 20 73 65 70 61 72 61 74  ; /* Row separat
6020: 6f 72 20 63 68 61 72 61 63 74 65 72 20 66 6f 72  or character for
6030: 20 4d 4f 44 45 5f 41 73 63 69 69 20 2a 2f 0a 20   MODE_Ascii */. 
6040: 20 69 6e 74 20 63 6f 6c 57 69 64 74 68 5b 31 30   int colWidth[10
6050: 30 5d 3b 20 20 20 20 20 2f 2a 20 52 65 71 75 65  0];     /* Reque
6060: 73 74 65 64 20 77 69 64 74 68 20 6f 66 20 65 61  sted width of ea
6070: 63 68 20 63 6f 6c 75 6d 6e 20 77 68 65 6e 20 69  ch column when i
6080: 6e 20 63 6f 6c 75 6d 6e 20 6d 6f 64 65 2a 2f 0a  n column mode*/.
6090: 20 20 69 6e 74 20 61 63 74 75 61 6c 57 69 64 74    int actualWidt
60a0: 68 5b 31 30 30 5d 3b 20 20 2f 2a 20 41 63 74 75  h[100];  /* Actu
60b0: 61 6c 20 77 69 64 74 68 20 6f 66 20 65 61 63 68  al width of each
60c0: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
60d0: 72 20 6e 75 6c 6c 56 61 6c 75 65 5b 32 30 5d 3b  r nullValue[20];
60e0: 20 20 20 20 2f 2a 20 54 68 65 20 74 65 78 74 20      /* The text 
60f0: 74 6f 20 70 72 69 6e 74 20 77 68 65 6e 20 61 20  to print when a 
6100: 4e 55 4c 4c 20 63 6f 6d 65 73 20 62 61 63 6b 20  NULL comes back 
6110: 66 72 6f 6d 0a 20 20 20 20 20 20 20 20 20 20 20  from.           
6120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
6130: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f   the database */
6140: 0a 20 20 63 68 61 72 20 6f 75 74 66 69 6c 65 5b  .  char outfile[
6150: 46 49 4c 45 4e 41 4d 45 5f 4d 41 58 5d 3b 20 2f  FILENAME_MAX]; /
6160: 2a 20 46 69 6c 65 6e 61 6d 65 20 66 6f 72 20 2a  * Filename for *
6170: 6f 75 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  out */.  const c
6180: 68 61 72 20 2a 7a 44 62 46 69 6c 65 6e 61 6d 65  har *zDbFilename
6190: 3b 20 20 20 20 2f 2a 20 6e 61 6d 65 20 6f 66 20  ;    /* name of 
61a0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
61b0: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 46 72  e */.  char *zFr
61c0: 65 65 4f 6e 43 6c 6f 73 65 3b 20 20 20 20 20 20  eeOnClose;      
61d0: 20 20 20 2f 2a 20 46 69 6c 65 6e 61 6d 65 20 74     /* Filename t
61e0: 6f 20 66 72 65 65 20 77 68 65 6e 20 63 6c 6f 73  o free when clos
61f0: 69 6e 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ing */.  const c
6200: 68 61 72 20 2a 7a 56 66 73 3b 20 20 20 20 20 20  har *zVfs;      
6210: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
6220: 56 46 53 20 74 6f 20 75 73 65 20 2a 2f 0a 20 20  VFS to use */.  
6230: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
6240: 74 6d 74 3b 20 20 20 2f 2a 20 43 75 72 72 65 6e  tmt;   /* Curren
6250: 74 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 61  t statement if a
6260: 6e 79 2e 20 2a 2f 0a 20 20 46 49 4c 45 20 2a 70  ny. */.  FILE *p
6270: 4c 6f 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Log;            
6280: 2f 2a 20 57 72 69 74 65 20 6c 6f 67 20 6f 75 74  /* Write log out
6290: 70 75 74 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e  put here */.  in
62a0: 74 20 2a 61 69 49 6e 64 65 6e 74 3b 20 20 20 20  t *aiIndent;    
62b0: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
62c0: 20 69 6e 64 65 6e 74 73 20 75 73 65 64 20 69 6e   indents used in
62d0: 20 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20 2a 2f   MODE_Explain */
62e0: 0a 20 20 69 6e 74 20 6e 49 6e 64 65 6e 74 3b 20  .  int nIndent; 
62f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
6300: 65 20 6f 66 20 61 72 72 61 79 20 61 69 49 6e 64  e of array aiInd
6310: 65 6e 74 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69  ent[] */.  int i
6320: 49 6e 64 65 6e 74 3b 20 20 20 20 20 20 20 20 20  Indent;         
6330: 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 75    /* Index of cu
6340: 72 72 65 6e 74 20 6f 70 20 69 6e 20 61 69 49 6e  rrent op in aiIn
6350: 64 65 6e 74 5b 5d 20 2a 2f 0a 23 69 66 20 64 65  dent[] */.#if de
6360: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
6370: 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 20 20 69  BLE_SESSION).  i
6380: 6e 74 20 6e 53 65 73 73 69 6f 6e 3b 20 20 20 20  nt nSession;    
6390: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
63a0: 65 72 20 6f 66 20 61 63 74 69 76 65 20 73 65 73  er of active ses
63b0: 73 69 6f 6e 73 20 2a 2f 0a 20 20 4f 70 65 6e 53  sions */.  OpenS
63c0: 65 73 73 69 6f 6e 20 61 53 65 73 73 69 6f 6e 5b  ession aSession[
63d0: 34 5d 3b 20 20 2f 2a 20 41 72 72 61 79 20 6f 66  4];  /* Array of
63e0: 20 73 65 73 73 69 6f 6e 73 2e 20 20 5b 30 5d 20   sessions.  [0] 
63f0: 69 73 20 69 6e 20 66 6f 63 75 73 2e 20 2a 2f 0a  is in focus. */.
6400: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
6410: 20 54 68 65 73 65 20 61 72 65 20 74 68 65 20 61   These are the a
6420: 6c 6c 6f 77 65 64 20 73 68 65 6c 6c 46 6c 67 73  llowed shellFlgs
6430: 20 76 61 6c 75 65 73 0a 2a 2f 0a 23 64 65 66 69   values.*/.#defi
6440: 6e 65 20 53 48 46 4c 47 5f 50 61 67 65 63 61 63  ne SHFLG_Pagecac
6450: 68 65 20 20 20 20 20 20 30 78 30 30 30 30 30 30  he      0x000000
6460: 30 31 20 2f 2a 20 54 68 65 20 2d 2d 70 61 67 65  01 /* The --page
6470: 63 61 63 68 65 20 6f 70 74 69 6f 6e 20 69 73 20  cache option is 
6480: 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
6490: 53 48 46 4c 47 5f 4c 6f 6f 6b 61 73 69 64 65 20  SHFLG_Lookaside 
64a0: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 32 20       0x00000002 
64b0: 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d  /* Lookaside mem
64c0: 6f 72 79 20 69 73 20 75 73 65 64 20 2a 2f 0a 23  ory is used */.#
64d0: 64 65 66 69 6e 65 20 53 48 46 4c 47 5f 42 61 63  define SHFLG_Bac
64e0: 6b 73 6c 61 73 68 20 20 20 20 20 20 30 78 30 30  kslash      0x00
64f0: 30 30 30 30 30 34 20 2f 2a 20 54 68 65 20 2d 2d  000004 /* The --
6500: 62 61 63 6b 73 6c 61 73 68 20 6f 70 74 69 6f 6e  backslash option
6510: 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66   is used */.#def
6520: 69 6e 65 20 53 48 46 4c 47 5f 50 72 65 73 65 72  ine SHFLG_Preser
6530: 76 65 52 6f 77 69 64 20 20 30 78 30 30 30 30 30  veRowid  0x00000
6540: 30 30 38 20 2f 2a 20 2e 64 75 6d 70 20 70 72 65  008 /* .dump pre
6550: 73 65 72 76 65 73 20 72 6f 77 69 64 20 76 61 6c  serves rowid val
6560: 75 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ues */.#define S
6570: 48 46 4c 47 5f 4e 65 77 6c 69 6e 65 73 20 20 20  HFLG_Newlines   
6580: 20 20 20 20 30 78 30 30 30 30 30 30 31 30 20 2f      0x00000010 /
6590: 2a 20 2e 64 75 6d 70 20 2d 2d 6e 65 77 6c 69 6e  * .dump --newlin
65a0: 65 20 66 6c 61 67 20 2a 2f 0a 23 64 65 66 69 6e  e flag */.#defin
65b0: 65 20 53 48 46 4c 47 5f 43 6f 75 6e 74 43 68 61  e SHFLG_CountCha
65c0: 6e 67 65 73 20 20 20 30 78 30 30 30 30 30 30 32  nges   0x0000002
65d0: 30 20 2f 2a 20 2e 63 68 61 6e 67 65 73 20 73 65  0 /* .changes se
65e0: 74 74 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  tting */.#define
65f0: 20 53 48 46 4c 47 5f 45 63 68 6f 20 20 20 20 20   SHFLG_Echo     
6600: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 34 30        0x00000040
6610: 20 2f 2a 20 2e 65 63 68 6f 20 6f 72 20 2d 2d 65   /* .echo or --e
6620: 63 68 6f 20 73 65 74 74 69 6e 67 20 2a 2f 0a 0a  cho setting */..
6630: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72  /*.** Macros for
6640: 20 74 65 73 74 69 6e 67 20 61 6e 64 20 73 65 74   testing and set
6650: 74 69 6e 67 20 73 68 65 6c 6c 46 6c 67 73 0a 2a  ting shellFlgs.*
6660: 2f 0a 23 64 65 66 69 6e 65 20 53 68 65 6c 6c 48  /.#define ShellH
6670: 61 73 46 6c 61 67 28 50 2c 58 29 20 20 20 20 28  asFlag(P,X)    (
6680: 28 28 50 29 2d 3e 73 68 65 6c 6c 46 6c 67 73 20  ((P)->shellFlgs 
6690: 26 20 28 58 29 29 21 3d 30 29 0a 23 64 65 66 69  & (X))!=0).#defi
66a0: 6e 65 20 53 68 65 6c 6c 53 65 74 46 6c 61 67 28  ne ShellSetFlag(
66b0: 50 2c 58 29 20 20 20 20 28 28 50 29 2d 3e 73 68  P,X)    ((P)->sh
66c0: 65 6c 6c 46 6c 67 73 7c 3d 28 58 29 29 0a 23 64  ellFlgs|=(X)).#d
66d0: 65 66 69 6e 65 20 53 68 65 6c 6c 43 6c 65 61 72  efine ShellClear
66e0: 46 6c 61 67 28 50 2c 58 29 20 20 28 28 50 29 2d  Flag(P,X)  ((P)-
66f0: 3e 73 68 65 6c 6c 46 6c 67 73 26 3d 28 7e 28 58  >shellFlgs&=(~(X
6700: 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  )))../*.** These
6710: 20 61 72 65 20 74 68 65 20 61 6c 6c 6f 77 65 64   are the allowed
6720: 20 6d 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69   modes..*/.#defi
6730: 6e 65 20 4d 4f 44 45 5f 4c 69 6e 65 20 20 20 20  ne MODE_Line    
6740: 20 30 20 20 2f 2a 20 4f 6e 65 20 63 6f 6c 75 6d   0  /* One colum
6750: 6e 20 70 65 72 20 6c 69 6e 65 2e 20 20 42 6c 61  n per line.  Bla
6760: 6e 6b 20 6c 69 6e 65 20 62 65 74 77 65 65 6e 20  nk line between 
6770: 72 65 63 6f 72 64 73 20 2a 2f 0a 23 64 65 66 69  records */.#defi
6780: 6e 65 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 20 20  ne MODE_Column  
6790: 20 31 20 20 2f 2a 20 4f 6e 65 20 72 65 63 6f 72   1  /* One recor
67a0: 64 20 70 65 72 20 6c 69 6e 65 20 69 6e 20 6e 65  d per line in ne
67b0: 61 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64  at columns */.#d
67c0: 65 66 69 6e 65 20 4d 4f 44 45 5f 4c 69 73 74 20  efine MODE_List 
67d0: 20 20 20 20 32 20 20 2f 2a 20 4f 6e 65 20 72 65      2  /* One re
67e0: 63 6f 72 64 20 70 65 72 20 6c 69 6e 65 20 77 69  cord per line wi
67f0: 74 68 20 61 20 73 65 70 61 72 61 74 6f 72 20 2a  th a separator *
6800: 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 53  /.#define MODE_S
6810: 65 6d 69 20 20 20 20 20 33 20 20 2f 2a 20 53 61  emi     3  /* Sa
6820: 6d 65 20 61 73 20 4d 4f 44 45 5f 4c 69 73 74 20  me as MODE_List 
6830: 62 75 74 20 61 70 70 65 6e 64 20 22 3b 22 20 74  but append ";" t
6840: 6f 20 65 61 63 68 20 6c 69 6e 65 20 2a 2f 0a 23  o each line */.#
6850: 64 65 66 69 6e 65 20 4d 4f 44 45 5f 48 74 6d 6c  define MODE_Html
6860: 20 20 20 20 20 34 20 20 2f 2a 20 47 65 6e 65 72       4  /* Gener
6870: 61 74 65 20 61 6e 20 58 48 54 4d 4c 20 74 61 62  ate an XHTML tab
6880: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f  le */.#define MO
6890: 44 45 5f 49 6e 73 65 72 74 20 20 20 35 20 20 2f  DE_Insert   5  /
68a0: 2a 20 47 65 6e 65 72 61 74 65 20 53 51 4c 20 22  * Generate SQL "
68b0: 69 6e 73 65 72 74 22 20 73 74 61 74 65 6d 65 6e  insert" statemen
68c0: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f  ts */.#define MO
68d0: 44 45 5f 51 75 6f 74 65 20 20 20 20 36 20 20 2f  DE_Quote    6  /
68e0: 2a 20 51 75 6f 74 65 20 76 61 6c 75 65 73 20 61  * Quote values a
68f0: 73 20 66 6f 72 20 53 51 4c 20 2a 2f 0a 23 64 65  s for SQL */.#de
6900: 66 69 6e 65 20 4d 4f 44 45 5f 54 63 6c 20 20 20  fine MODE_Tcl   
6910: 20 20 20 37 20 20 2f 2a 20 47 65 6e 65 72 61 74     7  /* Generat
6920: 65 20 41 4e 53 49 2d 43 20 6f 72 20 54 43 4c 20  e ANSI-C or TCL 
6930: 71 75 6f 74 65 64 20 65 6c 65 6d 65 6e 74 73 20  quoted elements 
6940: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f  */.#define MODE_
6950: 43 73 76 20 20 20 20 20 20 38 20 20 2f 2a 20 51  Csv      8  /* Q
6960: 75 6f 74 65 20 73 74 72 69 6e 67 73 2c 20 6e 75  uote strings, nu
6970: 6d 62 65 72 73 20 61 72 65 20 70 6c 61 69 6e 20  mbers are plain 
6980: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f  */.#define MODE_
6990: 45 78 70 6c 61 69 6e 20 20 39 20 20 2f 2a 20 4c  Explain  9  /* L
69a0: 69 6b 65 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 2c  ike MODE_Column,
69b0: 20 62 75 74 20 64 6f 20 6e 6f 74 20 74 72 75 6e   but do not trun
69c0: 63 61 74 65 20 64 61 74 61 20 2a 2f 0a 23 64 65  cate data */.#de
69d0: 66 69 6e 65 20 4d 4f 44 45 5f 41 73 63 69 69 20  fine MODE_Ascii 
69e0: 20 20 31 30 20 20 2f 2a 20 55 73 65 20 41 53 43    10  /* Use ASC
69f0: 49 49 20 75 6e 69 74 20 61 6e 64 20 72 65 63 6f  II unit and reco
6a00: 72 64 20 73 65 70 61 72 61 74 6f 72 73 20 28 30  rd separators (0
6a10: 78 31 46 2f 30 78 31 45 29 20 2a 2f 0a 23 64 65  x1F/0x1E) */.#de
6a20: 66 69 6e 65 20 4d 4f 44 45 5f 50 72 65 74 74 79  fine MODE_Pretty
6a30: 20 20 31 31 20 20 2f 2a 20 50 72 65 74 74 79 2d    11  /* Pretty-
6a40: 70 72 69 6e 74 20 73 63 68 65 6d 61 73 20 2a 2f  print schemas */
6a50: 0a 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63  ..static const c
6a60: 68 61 72 20 2a 6d 6f 64 65 44 65 73 63 72 5b 5d  har *modeDescr[]
6a70: 20 3d 20 7b 0a 20 20 22 6c 69 6e 65 22 2c 0a 20   = {.  "line",. 
6a80: 20 22 63 6f 6c 75 6d 6e 22 2c 0a 20 20 22 6c 69   "column",.  "li
6a90: 73 74 22 2c 0a 20 20 22 73 65 6d 69 22 2c 0a 20  st",.  "semi",. 
6aa0: 20 22 68 74 6d 6c 22 2c 0a 20 20 22 69 6e 73 65   "html",.  "inse
6ab0: 72 74 22 2c 0a 20 20 22 71 75 6f 74 65 22 2c 0a  rt",.  "quote",.
6ac0: 20 20 22 74 63 6c 22 2c 0a 20 20 22 63 73 76 22    "tcl",.  "csv"
6ad0: 2c 0a 20 20 22 65 78 70 6c 61 69 6e 22 2c 0a 20  ,.  "explain",. 
6ae0: 20 22 61 73 63 69 69 22 2c 0a 20 20 22 70 72 65   "ascii",.  "pre
6af0: 74 74 79 70 72 69 6e 74 22 2c 0a 7d 3b 0a 0a 2f  ttyprint",.};../
6b00: 2a 0a 2a 2a 20 54 68 65 73 65 20 61 72 65 20 74  *.** These are t
6b10: 68 65 20 63 6f 6c 75 6d 6e 2f 72 6f 77 2f 6c 69  he column/row/li
6b20: 6e 65 20 73 65 70 61 72 61 74 6f 72 73 20 75 73  ne separators us
6b30: 65 64 20 62 79 20 74 68 65 20 76 61 72 69 6f 75  ed by the variou
6b40: 73 0a 2a 2a 20 69 6d 70 6f 72 74 2f 65 78 70 6f  s.** import/expo
6b50: 72 74 20 6d 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65  rt modes..*/.#de
6b60: 66 69 6e 65 20 53 45 50 5f 43 6f 6c 75 6d 6e 20  fine SEP_Column 
6b70: 20 20 20 22 7c 22 0a 23 64 65 66 69 6e 65 20 53     "|".#define S
6b80: 45 50 5f 52 6f 77 20 20 20 20 20 20 20 22 5c 6e  EP_Row       "\n
6b90: 22 0a 23 64 65 66 69 6e 65 20 53 45 50 5f 54 61  ".#define SEP_Ta
6ba0: 62 20 20 20 20 20 20 20 22 5c 74 22 0a 23 64 65  b       "\t".#de
6bb0: 66 69 6e 65 20 53 45 50 5f 53 70 61 63 65 20 20  fine SEP_Space  
6bc0: 20 20 20 22 20 22 0a 23 64 65 66 69 6e 65 20 53     " ".#define S
6bd0: 45 50 5f 43 6f 6d 6d 61 20 20 20 20 20 22 2c 22  EP_Comma     ","
6be0: 0a 23 64 65 66 69 6e 65 20 53 45 50 5f 43 72 4c  .#define SEP_CrL
6bf0: 66 20 20 20 20 20 20 22 5c 72 5c 6e 22 0a 23 64  f      "\r\n".#d
6c00: 65 66 69 6e 65 20 53 45 50 5f 55 6e 69 74 20 20  efine SEP_Unit  
6c10: 20 20 20 20 22 5c 78 31 46 22 0a 23 64 65 66 69      "\x1F".#defi
6c20: 6e 65 20 53 45 50 5f 52 65 63 6f 72 64 20 20 20  ne SEP_Record   
6c30: 20 22 5c 78 31 45 22 0a 0a 2f 2a 0a 2a 2a 20 4e   "\x1E"../*.** N
6c40: 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
6c50: 73 20 69 6e 20 61 6e 20 61 72 72 61 79 0a 2a 2f  s in an array.*/
6c60: 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69  .#define ArraySi
6c70: 7a 65 28 58 29 20 20 28 69 6e 74 29 28 73 69 7a  ze(X)  (int)(siz
6c80: 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b  eof(X)/sizeof(X[
6c90: 30 5d 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 61  0]))../*.** A ca
6ca0: 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65 20 73  llback for the s
6cb0: 71 6c 69 74 65 33 5f 6c 6f 67 28 29 20 69 6e 74  qlite3_log() int
6cc0: 65 72 66 61 63 65 2e 0a 2a 2f 0a 73 74 61 74 69  erface..*/.stati
6cd0: 63 20 76 6f 69 64 20 73 68 65 6c 6c 4c 6f 67 28  c void shellLog(
6ce0: 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20  void *pArg, int 
6cf0: 69 45 72 72 43 6f 64 65 2c 20 63 6f 6e 73 74 20  iErrCode, const 
6d00: 63 68 61 72 20 2a 7a 4d 73 67 29 7b 0a 20 20 53  char *zMsg){.  S
6d10: 68 65 6c 6c 53 74 61 74 65 20 2a 70 20 3d 20 28  hellState *p = (
6d20: 53 68 65 6c 6c 53 74 61 74 65 2a 29 70 41 72 67  ShellState*)pArg
6d30: 3b 0a 20 20 69 66 28 20 70 2d 3e 70 4c 6f 67 3d  ;.  if( p->pLog=
6d40: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 75  =0 ) return;.  u
6d50: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 70 4c  tf8_printf(p->pL
6d60: 6f 67 2c 20 22 28 25 64 29 20 25 73 5c 6e 22 2c  og, "(%d) %s\n",
6d70: 20 69 45 72 72 43 6f 64 65 2c 20 7a 4d 73 67 29   iErrCode, zMsg)
6d80: 3b 0a 20 20 66 66 6c 75 73 68 28 70 2d 3e 70 4c  ;.  fflush(p->pL
6d90: 6f 67 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75  og);.}../*.** Ou
6da0: 74 70 75 74 20 74 68 65 20 67 69 76 65 6e 20 73  tput the given s
6db0: 74 72 69 6e 67 20 61 73 20 61 20 68 65 78 2d 65  tring as a hex-e
6dc0: 6e 63 6f 64 65 64 20 62 6c 6f 62 20 28 65 67 2e  ncoded blob (eg.
6dd0: 20 58 27 31 32 33 34 27 20 29 0a 2a 2f 0a 73 74   X'1234' ).*/.st
6de0: 61 74 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74  atic void output
6df0: 5f 68 65 78 5f 62 6c 6f 62 28 46 49 4c 45 20 2a  _hex_blob(FILE *
6e00: 6f 75 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  out, const void 
6e10: 2a 70 42 6c 6f 62 2c 20 69 6e 74 20 6e 42 6c 6f  *pBlob, int nBlo
6e20: 62 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63  b){.  int i;.  c
6e30: 68 61 72 20 2a 7a 42 6c 6f 62 20 3d 20 28 63 68  har *zBlob = (ch
6e40: 61 72 20 2a 29 70 42 6c 6f 62 3b 0a 20 20 72 61  ar *)pBlob;.  ra
6e50: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 58 27  w_printf(out,"X'
6e60: 22 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  ");.  for(i=0; i
6e70: 3c 6e 42 6c 6f 62 3b 20 69 2b 2b 29 7b 20 72 61  <nBlob; i++){ ra
6e80: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 25 30  w_printf(out,"%0
6e90: 32 78 22 2c 7a 42 6c 6f 62 5b 69 5d 26 30 78 66  2x",zBlob[i]&0xf
6ea0: 66 29 3b 20 7d 0a 20 20 72 61 77 5f 70 72 69 6e  f); }.  raw_prin
6eb0: 74 66 28 6f 75 74 2c 22 27 22 29 3b 0a 7d 0a 0a  tf(out,"'");.}..
6ec0: 2f 2a 0a 2a 2a 20 46 69 6e 64 20 61 20 73 74 72  /*.** Find a str
6ed0: 69 6e 67 20 74 68 61 74 20 69 73 20 6e 6f 74 20  ing that is not 
6ee0: 66 6f 75 6e 64 20 61 6e 79 77 68 65 72 65 20 69  found anywhere i
6ef0: 6e 20 7a 5b 5d 2e 20 20 52 65 74 75 72 6e 20 61  n z[].  Return a
6f00: 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 74 6f 20 74   pointer.** to t
6f10: 68 61 74 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a  hat string..**.*
6f20: 2a 20 54 72 79 20 74 6f 20 75 73 65 20 7a 41 20  * Try to use zA 
6f30: 61 6e 64 20 7a 42 20 66 69 72 73 74 2e 20 20 49  and zB first.  I
6f40: 66 20 62 6f 74 68 20 6f 66 20 74 68 6f 73 65 20  f both of those 
6f50: 61 72 65 20 61 6c 72 65 61 64 79 20 66 6f 75 6e  are already foun
6f60: 64 20 69 6e 20 7a 5b 5d 0a 2a 2a 20 74 68 65 6e  d in z[].** then
6f70: 20 6d 61 6b 65 20 75 70 20 73 6f 6d 65 20 73 74   make up some st
6f80: 72 69 6e 67 20 61 6e 64 20 73 74 6f 72 65 20 69  ring and store i
6f90: 74 20 69 6e 20 74 68 65 20 62 75 66 66 65 72 20  t in the buffer 
6fa0: 7a 42 75 66 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  zBuf..*/.static 
6fb0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 75 6e 75 73  const char *unus
6fc0: 65 64 5f 73 74 72 69 6e 67 28 0a 20 20 63 6f 6e  ed_string(.  con
6fd0: 73 74 20 63 68 61 72 20 2a 7a 2c 20 20 20 20 20  st char *z,     
6fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
6ff0: 2a 20 52 65 73 75 6c 74 20 6d 75 73 74 20 6e 6f  * Result must no
7000: 74 20 61 70 70 65 61 72 20 61 6e 79 77 68 65 72  t appear anywher
7010: 65 20 69 6e 20 7a 20 2a 2f 0a 20 20 63 6f 6e 73  e in z */.  cons
7020: 74 20 63 68 61 72 20 2a 7a 41 2c 20 63 6f 6e 73  t char *zA, cons
7030: 74 20 63 68 61 72 20 2a 7a 42 2c 20 20 20 2f 2a  t char *zB,   /*
7040: 20 54 72 79 20 74 68 65 73 65 20 66 69 72 73 74   Try these first
7050: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 75 66   */.  char *zBuf
7060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7070: 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
7080: 20 74 6f 20 73 74 6f 72 65 20 61 20 67 65 6e 65   to store a gene
7090: 72 61 74 65 64 20 73 74 72 69 6e 67 20 2a 2f 0a  rated string */.
70a0: 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 20  ){.  unsigned i 
70b0: 3d 20 30 3b 0a 20 20 69 66 28 20 73 74 72 73 74  = 0;.  if( strst
70c0: 72 28 7a 2c 20 7a 41 29 3d 3d 30 20 29 20 72 65  r(z, zA)==0 ) re
70d0: 74 75 72 6e 20 7a 41 3b 0a 20 20 69 66 28 20 73  turn zA;.  if( s
70e0: 74 72 73 74 72 28 7a 2c 20 7a 42 29 3d 3d 30 20  trstr(z, zB)==0 
70f0: 29 20 72 65 74 75 72 6e 20 7a 42 3b 0a 20 20 64  ) return zB;.  d
7100: 6f 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  o{.    sqlite3_s
7110: 6e 70 72 69 6e 74 66 28 32 30 2c 7a 42 75 66 2c  nprintf(20,zBuf,
7120: 22 28 25 73 25 75 29 22 2c 20 7a 41 2c 20 69 2b  "(%s%u)", zA, i+
7130: 2b 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20 73 74  +);.  }while( st
7140: 72 73 74 72 28 7a 2c 7a 42 75 66 29 21 3d 30 20  rstr(z,zBuf)!=0 
7150: 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 42 75 66  );.  return zBuf
7160: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75  ;.}../*.** Outpu
7170: 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69  t the given stri
7180: 6e 67 20 61 73 20 61 20 71 75 6f 74 65 64 20 73  ng as a quoted s
7190: 74 72 69 6e 67 20 75 73 69 6e 67 20 53 51 4c 20  tring using SQL 
71a0: 71 75 6f 74 69 6e 67 20 63 6f 6e 76 65 6e 74 69  quoting conventi
71b0: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ons..**.** See a
71c0: 6c 73 6f 3a 20 6f 75 74 70 75 74 5f 71 75 6f 74  lso: output_quot
71d0: 65 64 5f 65 73 63 61 70 65 64 5f 73 74 72 69 6e  ed_escaped_strin
71e0: 67 28 29 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  g().*/.static vo
71f0: 69 64 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64  id output_quoted
7200: 5f 73 74 72 69 6e 67 28 46 49 4c 45 20 2a 6f 75  _string(FILE *ou
7210: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  t, const char *z
7220: 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68  ){.  int i;.  ch
7230: 61 72 20 63 3b 0a 20 20 73 65 74 42 69 6e 61 72  ar c;.  setBinar
7240: 79 4d 6f 64 65 28 6f 75 74 2c 20 31 29 3b 0a 20  yMode(out, 1);. 
7250: 20 66 6f 72 28 69 3d 30 3b 20 28 63 20 3d 20 7a   for(i=0; (c = z
7260: 5b 69 5d 29 21 3d 30 20 26 26 20 63 21 3d 27 5c  [i])!=0 && c!='\
7270: 27 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 69 66 28  ''; i++){}.  if(
7280: 20 63 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74 66   c==0 ){.    utf
7290: 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 27 25  8_printf(out,"'%
72a0: 73 27 22 2c 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b  s'",z);.  }else{
72b0: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
72c0: 6f 75 74 2c 20 22 27 22 29 3b 0a 20 20 20 20 77  out, "'");.    w
72d0: 68 69 6c 65 28 20 2a 7a 20 29 7b 0a 20 20 20 20  hile( *z ){.    
72e0: 20 20 66 6f 72 28 69 3d 30 3b 20 28 63 20 3d 20    for(i=0; (c = 
72f0: 7a 5b 69 5d 29 21 3d 30 20 26 26 20 63 21 3d 27  z[i])!=0 && c!='
7300: 5c 27 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20  \''; i++){}.    
7310: 20 20 69 66 28 20 63 3d 3d 27 5c 27 27 20 29 20    if( c=='\'' ) 
7320: 69 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 69  i++;.      if( i
7330: 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38   ){.        utf8
7340: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 2e  _printf(out, "%.
7350: 2a 73 22 2c 20 69 2c 20 7a 29 3b 0a 20 20 20 20  *s", i, z);.    
7360: 20 20 20 20 7a 20 2b 3d 20 69 3b 0a 20 20 20 20      z += i;.    
7370: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63 3d    }.      if( c=
7380: 3d 27 5c 27 27 20 29 7b 0a 20 20 20 20 20 20 20  ='\'' ){.       
7390: 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c   raw_printf(out,
73a0: 20 22 27 22 29 3b 0a 20 20 20 20 20 20 20 20 63   "'");.        c
73b0: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 7d  ontinue;.      }
73c0: 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20  .      if( c==0 
73d0: 29 7b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  ){.        break
73e0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
73f0: 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  z++;.    }.    r
7400: 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
7410: 27 22 29 3b 0a 20 20 7d 0a 20 20 73 65 74 54 65  '");.  }.  setTe
7420: 78 74 4d 6f 64 65 28 6f 75 74 2c 20 31 29 3b 0a  xtMode(out, 1);.
7430: 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20  }../*.** Output 
7440: 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67  the given string
7450: 20 61 73 20 61 20 71 75 6f 74 65 64 20 73 74 72   as a quoted str
7460: 69 6e 67 20 75 73 69 6e 67 20 53 51 4c 20 71 75  ing using SQL qu
7470: 6f 74 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e  oting convention
7480: 73 2e 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c  s..** Additional
7490: 6c 6c 79 20 2c 20 65 73 63 61 70 65 20 74 68 65  lly , escape the
74a0: 20 22 5c 6e 22 20 61 6e 64 20 22 5c 72 22 20 63   "\n" and "\r" c
74b0: 68 61 72 61 63 74 65 72 73 20 73 6f 20 74 68 61  haracters so tha
74c0: 74 20 74 68 65 79 20 64 6f 20 6e 6f 74 0a 2a 2a  t they do not.**
74d0: 20 67 65 74 20 63 6f 72 72 75 70 74 65 64 20 62   get corrupted b
74e0: 79 20 65 6e 64 2d 6f 66 2d 6c 69 6e 65 20 74 72  y end-of-line tr
74f0: 61 6e 73 6c 61 74 69 6f 6e 20 66 61 63 69 6c 69  anslation facili
7500: 74 69 65 73 20 69 6e 20 73 6f 6d 65 20 6f 70 65  ties in some ope
7510: 72 61 74 69 6e 67 0a 2a 2a 20 73 79 73 74 65 6d  rating.** system
7520: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73  s..**.** This is
7530: 20 6c 69 6b 65 20 6f 75 74 70 75 74 5f 71 75 6f   like output_quo
7540: 74 65 64 5f 73 74 72 69 6e 67 28 29 20 62 75 74  ted_string() but
7550: 20 77 69 74 68 20 74 68 65 20 61 64 64 69 74 69   with the additi
7560: 6f 6e 20 6f 66 20 74 68 65 20 5c 72 5c 6e 0a 2a  on of the \r\n.*
7570: 2a 20 65 73 63 61 70 65 20 6d 65 63 68 61 6e 69  * escape mechani
7580: 73 6d 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  sm..*/.static vo
7590: 69 64 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64  id output_quoted
75a0: 5f 65 73 63 61 70 65 64 5f 73 74 72 69 6e 67 28  _escaped_string(
75b0: 46 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74  FILE *out, const
75c0: 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74   char *z){.  int
75d0: 20 69 3b 0a 20 20 63 68 61 72 20 63 3b 0a 20 20   i;.  char c;.  
75e0: 73 65 74 42 69 6e 61 72 79 4d 6f 64 65 28 6f 75  setBinaryMode(ou
75f0: 74 2c 20 31 29 3b 0a 20 20 66 6f 72 28 69 3d 30  t, 1);.  for(i=0
7600: 3b 20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 20  ; (c = z[i])!=0 
7610: 26 26 20 63 21 3d 27 5c 27 27 20 26 26 20 63 21  && c!='\'' && c!
7620: 3d 27 5c 6e 27 20 26 26 20 63 21 3d 27 5c 72 27  ='\n' && c!='\r'
7630: 3b 20 69 2b 2b 29 7b 7d 0a 20 20 69 66 28 20 63  ; i++){}.  if( c
7640: 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f  ==0 ){.    utf8_
7650: 70 72 69 6e 74 66 28 6f 75 74 2c 22 27 25 73 27  printf(out,"'%s'
7660: 22 2c 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ",z);.  }else{. 
7670: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
7680: 4e 4c 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73  NL = 0;.    cons
7690: 74 20 63 68 61 72 20 2a 7a 43 52 20 3d 20 30 3b  t char *zCR = 0;
76a0: 0a 20 20 20 20 69 6e 74 20 6e 4e 4c 20 3d 20 30  .    int nNL = 0
76b0: 3b 0a 20 20 20 20 69 6e 74 20 6e 43 52 20 3d 20  ;.    int nCR = 
76c0: 30 3b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66  0;.    char zBuf
76d0: 31 5b 32 30 5d 2c 20 7a 42 75 66 32 5b 32 30 5d  1[20], zBuf2[20]
76e0: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a  ;.    for(i=0; z
76f0: 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  [i]; i++){.     
7700: 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 5c 6e 27 20   if( z[i]=='\n' 
7710: 29 20 6e 4e 4c 2b 2b 3b 0a 20 20 20 20 20 20 69  ) nNL++;.      i
7720: 66 28 20 7a 5b 69 5d 3d 3d 27 5c 72 27 20 29 20  f( z[i]=='\r' ) 
7730: 6e 43 52 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  nCR++;.    }.   
7740: 20 69 66 28 20 6e 4e 4c 20 29 7b 0a 20 20 20 20   if( nNL ){.    
7750: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74    raw_printf(out
7760: 2c 20 22 72 65 70 6c 61 63 65 28 22 29 3b 0a 20  , "replace(");. 
7770: 20 20 20 20 20 7a 4e 4c 20 3d 20 75 6e 75 73 65       zNL = unuse
7780: 64 5f 73 74 72 69 6e 67 28 7a 2c 20 22 5c 5c 6e  d_string(z, "\\n
7790: 22 2c 20 22 5c 5c 30 31 32 22 2c 20 7a 42 75 66  ", "\\012", zBuf
77a0: 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  1);.    }.    if
77b0: 28 20 6e 43 52 20 29 7b 0a 20 20 20 20 20 20 72  ( nCR ){.      r
77c0: 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
77d0: 72 65 70 6c 61 63 65 28 22 29 3b 0a 20 20 20 20  replace(");.    
77e0: 20 20 7a 43 52 20 3d 20 75 6e 75 73 65 64 5f 73    zCR = unused_s
77f0: 74 72 69 6e 67 28 7a 2c 20 22 5c 5c 72 22 2c 20  tring(z, "\\r", 
7800: 22 5c 5c 30 31 35 22 2c 20 7a 42 75 66 32 29 3b  "\\015", zBuf2);
7810: 0a 20 20 20 20 7d 0a 20 20 20 20 72 61 77 5f 70  .    }.    raw_p
7820: 72 69 6e 74 66 28 6f 75 74 2c 20 22 27 22 29 3b  rintf(out, "'");
7830: 0a 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 20 29  .    while( *z )
7840: 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  {.      for(i=0;
7850: 20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 20 26   (c = z[i])!=0 &
7860: 26 20 63 21 3d 27 5c 6e 27 20 26 26 20 63 21 3d  & c!='\n' && c!=
7870: 27 5c 72 27 20 26 26 20 63 21 3d 27 5c 27 27 3b  '\r' && c!='\'';
7880: 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 69 66   i++){}.      if
7890: 28 20 63 3d 3d 27 5c 27 27 20 29 20 69 2b 2b 3b  ( c=='\'' ) i++;
78a0: 0a 20 20 20 20 20 20 69 66 28 20 69 20 29 7b 0a  .      if( i ){.
78b0: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
78c0: 6e 74 66 28 6f 75 74 2c 20 22 25 2e 2a 73 22 2c  ntf(out, "%.*s",
78d0: 20 69 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20   i, z);.        
78e0: 7a 20 2b 3d 20 69 3b 0a 20 20 20 20 20 20 7d 0a  z += i;.      }.
78f0: 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 5c 27        if( c=='\'
7900: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  ' ){.        raw
7910: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 27 22  _printf(out, "'"
7920: 29 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 74 69  );.        conti
7930: 6e 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  nue;.      }.   
7940: 20 20 20 69 66 28 20 63 3d 3d 30 20 29 7b 0a 20     if( c==0 ){. 
7950: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
7960: 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 2b 2b 3b      }.      z++;
7970: 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 5c  .      if( c=='\
7980: 6e 27 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  n' ){.        ra
7990: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25  w_printf(out, "%
79a0: 73 22 2c 20 7a 4e 4c 29 3b 0a 20 20 20 20 20 20  s", zNL);.      
79b0: 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20    continue;.    
79c0: 20 20 7d 0a 20 20 20 20 20 20 72 61 77 5f 70 72    }.      raw_pr
79d0: 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20  intf(out, "%s", 
79e0: 7a 43 52 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  zCR);.    }.    
79f0: 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  raw_printf(out, 
7a00: 22 27 22 29 3b 0a 20 20 20 20 69 66 28 20 6e 43  "'");.    if( nC
7a10: 52 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  R ){.      raw_p
7a20: 72 69 6e 74 66 28 6f 75 74 2c 20 22 2c 27 25 73  rintf(out, ",'%s
7a30: 27 2c 63 68 61 72 28 31 33 29 29 22 2c 20 7a 43  ',char(13))", zC
7a40: 52 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  R);.    }.    if
7a50: 28 20 6e 4e 4c 20 29 7b 0a 20 20 20 20 20 20 72  ( nNL ){.      r
7a60: 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
7a70: 2c 27 25 73 27 2c 63 68 61 72 28 31 30 29 29 22  ,'%s',char(10))"
7a80: 2c 20 7a 4e 4c 29 3b 0a 20 20 20 20 7d 0a 20 20  , zNL);.    }.  
7a90: 7d 0a 20 20 73 65 74 54 65 78 74 4d 6f 64 65 28  }.  setTextMode(
7aa0: 6f 75 74 2c 20 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  out, 1);.}../*.*
7ab0: 2a 20 4f 75 74 70 75 74 20 74 68 65 20 67 69 76  * Output the giv
7ac0: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 71  en string as a q
7ad0: 75 6f 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20  uoted according 
7ae0: 74 6f 20 43 20 6f 72 20 54 43 4c 20 71 75 6f 74  to C or TCL quot
7af0: 69 6e 67 20 72 75 6c 65 73 2e 0a 2a 2f 0a 73 74  ing rules..*/.st
7b00: 61 74 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74  atic void output
7b10: 5f 63 5f 73 74 72 69 6e 67 28 46 49 4c 45 20 2a  _c_string(FILE *
7b20: 6f 75 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  out, const char 
7b30: 2a 7a 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20  *z){.  unsigned 
7b40: 69 6e 74 20 63 3b 0a 20 20 66 70 75 74 63 28 27  int c;.  fputc('
7b50: 22 27 2c 20 6f 75 74 29 3b 0a 20 20 77 68 69 6c  "', out);.  whil
7b60: 65 28 20 28 63 20 3d 20 2a 28 7a 2b 2b 29 29 21  e( (c = *(z++))!
7b70: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 63 3d  =0 ){.    if( c=
7b80: 3d 27 5c 5c 27 20 29 7b 0a 20 20 20 20 20 20 66  ='\\' ){.      f
7b90: 70 75 74 63 28 63 2c 20 6f 75 74 29 3b 0a 20 20  putc(c, out);.  
7ba0: 20 20 20 20 66 70 75 74 63 28 63 2c 20 6f 75 74      fputc(c, out
7bb0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
7bc0: 20 63 3d 3d 27 22 27 20 29 7b 0a 20 20 20 20 20   c=='"' ){.     
7bd0: 20 66 70 75 74 63 28 27 5c 5c 27 2c 20 6f 75 74   fputc('\\', out
7be0: 29 3b 0a 20 20 20 20 20 20 66 70 75 74 63 28 27  );.      fputc('
7bf0: 22 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65  "', out);.    }e
7c00: 6c 73 65 20 69 66 28 20 63 3d 3d 27 5c 74 27 20  lse if( c=='\t' 
7c10: 29 7b 0a 20 20 20 20 20 20 66 70 75 74 63 28 27  ){.      fputc('
7c20: 5c 5c 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20  \\', out);.     
7c30: 20 66 70 75 74 63 28 27 74 27 2c 20 6f 75 74 29   fputc('t', out)
7c40: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
7c50: 63 3d 3d 27 5c 6e 27 20 29 7b 0a 20 20 20 20 20  c=='\n' ){.     
7c60: 20 66 70 75 74 63 28 27 5c 5c 27 2c 20 6f 75 74   fputc('\\', out
7c70: 29 3b 0a 20 20 20 20 20 20 66 70 75 74 63 28 27  );.      fputc('
7c80: 6e 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65  n', out);.    }e
7c90: 6c 73 65 20 69 66 28 20 63 3d 3d 27 5c 72 27 20  lse if( c=='\r' 
7ca0: 29 7b 0a 20 20 20 20 20 20 66 70 75 74 63 28 27  ){.      fputc('
7cb0: 5c 5c 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20  \\', out);.     
7cc0: 20 66 70 75 74 63 28 27 72 27 2c 20 6f 75 74 29   fputc('r', out)
7cd0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
7ce0: 21 69 73 70 72 69 6e 74 28 63 26 30 78 66 66 29  !isprint(c&0xff)
7cf0: 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
7d00: 69 6e 74 66 28 6f 75 74 2c 20 22 5c 5c 25 30 33  intf(out, "\\%03
7d10: 6f 22 2c 20 63 26 30 78 66 66 29 3b 0a 20 20 20  o", c&0xff);.   
7d20: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 66 70   }else{.      fp
7d30: 75 74 63 28 63 2c 20 6f 75 74 29 3b 0a 20 20 20  utc(c, out);.   
7d40: 20 7d 0a 20 20 7d 0a 20 20 66 70 75 74 63 28 27   }.  }.  fputc('
7d50: 22 27 2c 20 6f 75 74 29 3b 0a 7d 0a 0a 2f 2a 0a  "', out);.}../*.
7d60: 2a 2a 20 4f 75 74 70 75 74 20 74 68 65 20 67 69  ** Output the gi
7d70: 76 65 6e 20 73 74 72 69 6e 67 20 77 69 74 68 20  ven string with 
7d80: 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
7d90: 61 72 65 20 73 70 65 63 69 61 6c 20 74 6f 0a 2a  are special to.*
7da0: 2a 20 48 54 4d 4c 20 65 73 63 61 70 65 64 2e 0a  * HTML escaped..
7db0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f  */.static void o
7dc0: 75 74 70 75 74 5f 68 74 6d 6c 5f 73 74 72 69 6e  utput_html_strin
7dd0: 67 28 46 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e  g(FILE *out, con
7de0: 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69  st char *z){.  i
7df0: 6e 74 20 69 3b 0a 20 20 69 66 28 20 7a 3d 3d 30  nt i;.  if( z==0
7e00: 20 29 20 7a 20 3d 20 22 22 3b 0a 20 20 77 68 69   ) z = "";.  whi
7e10: 6c 65 28 20 2a 7a 20 29 7b 0a 20 20 20 20 66 6f  le( *z ){.    fo
7e20: 72 28 69 3d 30 3b 20 20 20 7a 5b 69 5d 0a 20 20  r(i=0;   z[i].  
7e30: 20 20 20 20 20 20 20 20 20 20 26 26 20 7a 5b 69            && z[i
7e40: 5d 21 3d 27 3c 27 0a 20 20 20 20 20 20 20 20 20  ]!='<'.         
7e50: 20 20 20 26 26 20 7a 5b 69 5d 21 3d 27 26 27 0a     && z[i]!='&'.
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 7a              && z
7e70: 5b 69 5d 21 3d 27 3e 27 0a 20 20 20 20 20 20 20  [i]!='>'.       
7e80: 20 20 20 20 20 26 26 20 7a 5b 69 5d 21 3d 27 5c       && z[i]!='\
7e90: 22 27 0a 20 20 20 20 20 20 20 20 20 20 20 20 26  "'.            &
7ea0: 26 20 7a 5b 69 5d 21 3d 27 5c 27 27 3b 0a 20 20  & z[i]!='\'';.  
7eb0: 20 20 20 20 20 20 69 2b 2b 29 7b 7d 0a 20 20 20        i++){}.   
7ec0: 20 69 66 28 20 69 3e 30 20 29 7b 0a 20 20 20 20   if( i>0 ){.    
7ed0: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75    utf8_printf(ou
7ee0: 74 2c 22 25 2e 2a 73 22 2c 69 2c 7a 29 3b 0a 20  t,"%.*s",i,z);. 
7ef0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 5b 69     }.    if( z[i
7f00: 5d 3d 3d 27 3c 27 20 29 7b 0a 20 20 20 20 20 20  ]=='<' ){.      
7f10: 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22  raw_printf(out,"
7f20: 26 6c 74 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73  &lt;");.    }els
7f30: 65 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 26 27 20  e if( z[i]=='&' 
7f40: 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
7f50: 6e 74 66 28 6f 75 74 2c 22 26 61 6d 70 3b 22 29  ntf(out,"&amp;")
7f60: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
7f70: 7a 5b 69 5d 3d 3d 27 3e 27 20 29 7b 0a 20 20 20  z[i]=='>' ){.   
7f80: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75     raw_printf(ou
7f90: 74 2c 22 26 67 74 3b 22 29 3b 0a 20 20 20 20 7d  t,"&gt;");.    }
7fa0: 65 6c 73 65 20 69 66 28 20 7a 5b 69 5d 3d 3d 27  else if( z[i]=='
7fb0: 5c 22 27 20 29 7b 0a 20 20 20 20 20 20 72 61 77  \"' ){.      raw
7fc0: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 26 71 75  _printf(out,"&qu
7fd0: 6f 74 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ot;");.    }else
7fe0: 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 5c 27 27 20   if( z[i]=='\'' 
7ff0: 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
8000: 6e 74 66 28 6f 75 74 2c 22 26 23 33 39 3b 22 29  ntf(out,"&#39;")
8010: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
8020: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
8030: 20 20 20 20 7a 20 2b 3d 20 69 20 2b 20 31 3b 0a      z += i + 1;.
8040: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20    }.}../*.** If 
8050: 61 20 66 69 65 6c 64 20 63 6f 6e 74 61 69 6e 73  a field contains
8060: 20 61 6e 79 20 63 68 61 72 61 63 74 65 72 20 69   any character i
8070: 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 31  dentified by a 1
8080: 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   in the followin
8090: 67 0a 2a 2a 20 61 72 72 61 79 2c 20 74 68 65 6e  g.** array, then
80a0: 20 74 68 65 20 73 74 72 69 6e 67 20 6d 75 73 74   the string must
80b0: 20 62 65 20 71 75 6f 74 65 64 20 66 6f 72 20 43   be quoted for C
80c0: 53 56 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f  SV..*/.static co
80d0: 6e 73 74 20 63 68 61 72 20 6e 65 65 64 43 73 76  nst char needCsv
80e0: 51 75 6f 74 65 5b 5d 20 3d 20 7b 0a 20 20 31 2c  Quote[] = {.  1,
80f0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
8100: 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c  1, 1,   1, 1, 1,
8110: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a   1, 1, 1, 1, 1,.
8120: 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    1, 1, 1, 1, 1,
8130: 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31   1, 1, 1,   1, 1
8140: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
8150: 20 31 2c 0a 20 20 31 2c 20 30 2c 20 31 2c 20 30   1,.  1, 0, 1, 0
8160: 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 20 20  , 0, 0, 0, 1,   
8170: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
8180: 2c 20 30 2c 20 30 2c 0a 20 20 30 2c 20 30 2c 20  , 0, 0,.  0, 0, 
8190: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
81a0: 2c 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20  ,   0, 0, 0, 0, 
81b0: 30 2c 20 30 2c 20 30 2c 20 30 2c 0a 20 20 30 2c  0, 0, 0, 0,.  0,
81c0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
81d0: 30 2c 20 30 2c 20 20 20 30 2c 20 30 2c 20 30 2c  0, 0,   0, 0, 0,
81e0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 0a   0, 0, 0, 0, 0,.
81f0: 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c    0, 0, 0, 0, 0,
8200: 20 30 2c 20 30 2c 20 30 2c 20 20 20 30 2c 20 30   0, 0, 0,   0, 0
8210: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
8220: 20 30 2c 0a 20 20 30 2c 20 30 2c 20 30 2c 20 30   0,.  0, 0, 0, 0
8230: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 20 20  , 0, 0, 0, 0,   
8240: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
8250: 2c 20 30 2c 20 30 2c 0a 20 20 30 2c 20 30 2c 20  , 0, 0,.  0, 0, 
8260: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
8270: 2c 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20  ,   0, 0, 0, 0, 
8280: 30 2c 20 30 2c 20 30 2c 20 31 2c 0a 20 20 31 2c  0, 0, 0, 1,.  1,
8290: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
82a0: 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c  1, 1,   1, 1, 1,
82b0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a   1, 1, 1, 1, 1,.
82c0: 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    1, 1, 1, 1, 1,
82d0: 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31   1, 1, 1,   1, 1
82e0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
82f0: 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31   1,.  1, 1, 1, 1
8300: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20  , 1, 1, 1, 1,   
8310: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8320: 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20  , 1, 1,.  1, 1, 
8330: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8340: 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20  ,   1, 1, 1, 1, 
8350: 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20 31 2c  1, 1, 1, 1,.  1,
8360: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
8370: 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c  1, 1,   1, 1, 1,
8380: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a   1, 1, 1, 1, 1,.
8390: 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    1, 1, 1, 1, 1,
83a0: 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31   1, 1, 1,   1, 1
83b0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
83c0: 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31   1,.  1, 1, 1, 1
83d0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20  , 1, 1, 1, 1,   
83e0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
83f0: 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20  , 1, 1,.  1, 1, 
8400: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8410: 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20  ,   1, 1, 1, 1, 
8420: 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 7d 3b 0a 0a  1, 1, 1, 1,.};..
8430: 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 61 20 73  /*.** Output a s
8440: 69 6e 67 6c 65 20 74 65 72 6d 20 6f 66 20 43 53  ingle term of CS
8450: 56 2e 20 20 41 63 74 75 61 6c 6c 79 2c 20 70 2d  V.  Actually, p-
8460: 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 20 69 73  >colSeparator is
8470: 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 74 68 65   used for.** the
8480: 20 73 65 70 61 72 61 74 6f 72 2c 20 77 68 69 63   separator, whic
8490: 68 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74  h may or may not
84a0: 20 62 65 20 61 20 63 6f 6d 6d 61 2e 20 20 70 2d   be a comma.  p-
84b0: 3e 6e 75 6c 6c 56 61 6c 75 65 20 69 73 0a 2a 2a  >nullValue is.**
84c0: 20 74 68 65 20 6e 75 6c 6c 20 76 61 6c 75 65 2e   the null value.
84d0: 20 20 53 74 72 69 6e 67 73 20 61 72 65 20 71 75    Strings are qu
84e0: 6f 74 65 64 20 69 66 20 6e 65 63 65 73 73 61 72  oted if necessar
84f0: 79 2e 20 20 54 68 65 20 73 65 70 61 72 61 74 6f  y.  The separato
8500: 72 0a 2a 2a 20 69 73 20 6f 6e 6c 79 20 69 73 73  r.** is only iss
8510: 75 65 64 20 69 66 20 62 53 65 70 20 69 73 20 74  ued if bSep is t
8520: 72 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  rue..*/.static v
8530: 6f 69 64 20 6f 75 74 70 75 74 5f 63 73 76 28 53  oid output_csv(S
8540: 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f  hellState *p, co
8550: 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
8560: 20 62 53 65 70 29 7b 0a 20 20 46 49 4c 45 20 2a   bSep){.  FILE *
8570: 6f 75 74 20 3d 20 70 2d 3e 6f 75 74 3b 0a 20 20  out = p->out;.  
8580: 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
8590: 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c  utf8_printf(out,
85a0: 22 25 73 22 2c 70 2d 3e 6e 75 6c 6c 56 61 6c 75  "%s",p->nullValu
85b0: 65 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  e);.  }else{.   
85c0: 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20   int i;.    int 
85d0: 6e 53 65 70 20 3d 20 73 74 72 6c 65 6e 33 30 28  nSep = strlen30(
85e0: 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29  p->colSeparator)
85f0: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a  ;.    for(i=0; z
8600: 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  [i]; i++){.     
8610: 20 69 66 28 20 6e 65 65 64 43 73 76 51 75 6f 74   if( needCsvQuot
8620: 65 5b 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  e[((unsigned cha
8630: 72 2a 29 7a 29 5b 69 5d 5d 0a 20 20 20 20 20 20  r*)z)[i]].      
8640: 20 20 20 7c 7c 20 28 7a 5b 69 5d 3d 3d 70 2d 3e     || (z[i]==p->
8650: 63 6f 6c 53 65 70 61 72 61 74 6f 72 5b 30 5d 20  colSeparator[0] 
8660: 26 26 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &&.             
8670: 28 6e 53 65 70 3d 3d 31 20 7c 7c 20 6d 65 6d 63  (nSep==1 || memc
8680: 6d 70 28 7a 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  mp(z, p->colSepa
8690: 72 61 74 6f 72 2c 20 6e 53 65 70 29 3d 3d 30 29  rator, nSep)==0)
86a0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 69 20 3d  ) ){.        i =
86b0: 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   0;.        brea
86c0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
86d0: 0a 20 20 20 20 69 66 28 20 69 3d 3d 30 20 29 7b  .    if( i==0 ){
86e0: 0a 20 20 20 20 20 20 70 75 74 63 28 27 22 27 2c  .      putc('"',
86f0: 20 6f 75 74 29 3b 0a 20 20 20 20 20 20 66 6f 72   out);.      for
8700: 28 69 3d 30 3b 20 7a 5b 69 5d 3b 20 69 2b 2b 29  (i=0; z[i]; i++)
8710: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b  {.        if( z[
8720: 69 5d 3d 3d 27 22 27 20 29 20 70 75 74 63 28 27  i]=='"' ) putc('
8730: 22 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20 20  "', out);.      
8740: 20 20 70 75 74 63 28 7a 5b 69 5d 2c 20 6f 75 74    putc(z[i], out
8750: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
8760: 20 70 75 74 63 28 27 22 27 2c 20 6f 75 74 29 3b   putc('"', out);
8770: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
8780: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75    utf8_printf(ou
8790: 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20  t, "%s", z);.   
87a0: 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 62 53 65   }.  }.  if( bSe
87b0: 70 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72  p ){.    utf8_pr
87c0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
87d0: 22 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  ", p->colSeparat
87e0: 6f 72 29 3b 0a 20 20 7d 0a 7d 0a 0a 23 69 66 64  or);.  }.}..#ifd
87f0: 65 66 20 53 49 47 49 4e 54 0a 2f 2a 0a 2a 2a 20  ef SIGINT./*.** 
8800: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 72 75 6e  This routine run
8810: 73 20 77 68 65 6e 20 74 68 65 20 75 73 65 72 20  s when the user 
8820: 70 72 65 73 73 65 73 20 43 74 72 6c 2d 43 0a 2a  presses Ctrl-C.*
8830: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 69 6e  /.static void in
8840: 74 65 72 72 75 70 74 5f 68 61 6e 64 6c 65 72 28  terrupt_handler(
8850: 69 6e 74 20 4e 6f 74 55 73 65 64 29 7b 0a 20 20  int NotUsed){.  
8860: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8870: 28 4e 6f 74 55 73 65 64 29 3b 0a 20 20 73 65 65  (NotUsed);.  see
8880: 6e 49 6e 74 65 72 72 75 70 74 2b 2b 3b 0a 20 20  nInterrupt++;.  
8890: 69 66 28 20 73 65 65 6e 49 6e 74 65 72 72 75 70  if( seenInterrup
88a0: 74 3e 32 20 29 20 65 78 69 74 28 31 29 3b 0a 20  t>2 ) exit(1);. 
88b0: 20 69 66 28 20 67 6c 6f 62 61 6c 44 62 20 29 20   if( globalDb ) 
88c0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
88d0: 74 28 67 6c 6f 62 61 6c 44 62 29 3b 0a 7d 0a 23  t(globalDb);.}.#
88e0: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
88f0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
8900: 52 49 5a 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 57  RIZATION./*.** W
8910: 68 65 6e 20 74 68 65 20 22 2e 61 75 74 68 20 4f  hen the ".auth O
8920: 4e 22 20 69 73 20 73 65 74 2c 20 74 68 65 20 66  N" is set, the f
8930: 6f 6c 6c 6f 77 69 6e 67 20 61 75 74 68 6f 72 69  ollowing authori
8940: 7a 65 72 20 63 61 6c 6c 62 61 63 6b 20 69 73 0a  zer callback is.
8950: 2a 2a 20 69 6e 76 6f 6b 65 64 2e 20 20 49 74 20  ** invoked.  It 
8960: 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 53  always returns S
8970: 51 4c 49 54 45 5f 4f 4b 2e 0a 2a 2f 0a 73 74 61  QLITE_OK..*/.sta
8980: 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 41 75 74  tic int shellAut
8990: 68 28 0a 20 20 76 6f 69 64 20 2a 70 43 6c 69 65  h(.  void *pClie
89a0: 6e 74 44 61 74 61 2c 0a 20 20 69 6e 74 20 6f 70  ntData,.  int op
89b0: 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ,.  const char *
89c0: 7a 41 31 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61  zA1,.  const cha
89d0: 72 20 2a 7a 41 32 2c 0a 20 20 63 6f 6e 73 74 20  r *zA2,.  const 
89e0: 63 68 61 72 20 2a 7a 41 33 2c 0a 20 20 63 6f 6e  char *zA3,.  con
89f0: 73 74 20 63 68 61 72 20 2a 7a 41 34 0a 29 7b 0a  st char *zA4.){.
8a00: 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 20    ShellState *p 
8a10: 3d 20 28 53 68 65 6c 6c 53 74 61 74 65 2a 29 70  = (ShellState*)p
8a20: 43 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 73 74  ClientData;.  st
8a30: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
8a40: 2a 61 7a 41 63 74 69 6f 6e 5b 5d 20 3d 20 7b 20  *azAction[] = { 
8a50: 30 2c 0a 20 20 20 20 20 22 43 52 45 41 54 45 5f  0,.     "CREATE_
8a60: 49 4e 44 45 58 22 2c 20 20 20 20 20 20 20 20 20  INDEX",         
8a70: 22 43 52 45 41 54 45 5f 54 41 42 4c 45 22 2c 20  "CREATE_TABLE", 
8a80: 20 20 20 20 20 20 20 20 22 43 52 45 41 54 45 5f          "CREATE_
8a90: 54 45 4d 50 5f 49 4e 44 45 58 22 2c 0a 20 20 20  TEMP_INDEX",.   
8aa0: 20 20 22 43 52 45 41 54 45 5f 54 45 4d 50 5f 54    "CREATE_TEMP_T
8ab0: 41 42 4c 45 22 2c 20 20 20 20 22 43 52 45 41 54  ABLE",    "CREAT
8ac0: 45 5f 54 45 4d 50 5f 54 52 49 47 47 45 52 22 2c  E_TEMP_TRIGGER",
8ad0: 20 20 22 43 52 45 41 54 45 5f 54 45 4d 50 5f 56    "CREATE_TEMP_V
8ae0: 49 45 57 22 2c 0a 20 20 20 20 20 22 43 52 45 41  IEW",.     "CREA
8af0: 54 45 5f 54 52 49 47 47 45 52 22 2c 20 20 20 20  TE_TRIGGER",    
8b00: 20 20 20 22 43 52 45 41 54 45 5f 56 49 45 57 22     "CREATE_VIEW"
8b10: 2c 20 20 20 20 20 20 20 20 20 20 22 44 45 4c 45  ,          "DELE
8b20: 54 45 22 2c 0a 20 20 20 20 20 22 44 52 4f 50 5f  TE",.     "DROP_
8b30: 49 4e 44 45 58 22 2c 20 20 20 20 20 20 20 20 20  INDEX",         
8b40: 20 20 22 44 52 4f 50 5f 54 41 42 4c 45 22 2c 20    "DROP_TABLE", 
8b50: 20 20 20 20 20 20 20 20 20 20 22 44 52 4f 50 5f            "DROP_
8b60: 54 45 4d 50 5f 49 4e 44 45 58 22 2c 0a 20 20 20  TEMP_INDEX",.   
8b70: 20 20 22 44 52 4f 50 5f 54 45 4d 50 5f 54 41 42    "DROP_TEMP_TAB
8b80: 4c 45 22 2c 20 20 20 20 20 20 22 44 52 4f 50 5f  LE",      "DROP_
8b90: 54 45 4d 50 5f 54 52 49 47 47 45 52 22 2c 20 20  TEMP_TRIGGER",  
8ba0: 20 20 22 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45    "DROP_TEMP_VIE
8bb0: 57 22 2c 0a 20 20 20 20 20 22 44 52 4f 50 5f 54  W",.     "DROP_T
8bc0: 52 49 47 47 45 52 22 2c 20 20 20 20 20 20 20 20  RIGGER",        
8bd0: 20 22 44 52 4f 50 5f 56 49 45 57 22 2c 20 20 20   "DROP_VIEW",   
8be0: 20 20 20 20 20 20 20 20 20 22 49 4e 53 45 52 54           "INSERT
8bf0: 22 2c 0a 20 20 20 20 20 22 50 52 41 47 4d 41 22  ",.     "PRAGMA"
8c00: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
8c10: 22 52 45 41 44 22 2c 20 20 20 20 20 20 20 20 20  "READ",         
8c20: 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 22          "SELECT"
8c30: 2c 0a 20 20 20 20 20 22 54 52 41 4e 53 41 43 54  ,.     "TRANSACT
8c40: 49 4f 4e 22 2c 20 20 20 20 20 20 20 20 20 20 22  ION",          "
8c50: 55 50 44 41 54 45 22 2c 20 20 20 20 20 20 20 20  UPDATE",        
8c60: 20 20 20 20 20 20 20 22 41 54 54 41 43 48 22 2c         "ATTACH",
8c70: 0a 20 20 20 20 20 22 44 45 54 41 43 48 22 2c 20  .     "DETACH", 
8c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
8c90: 4c 54 45 52 5f 54 41 42 4c 45 22 2c 20 20 20 20  LTER_TABLE",    
8ca0: 20 20 20 20 20 20 22 52 45 49 4e 44 45 58 22 2c        "REINDEX",
8cb0: 0a 20 20 20 20 20 22 41 4e 41 4c 59 5a 45 22 2c  .     "ANALYZE",
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
8cd0: 52 45 41 54 45 5f 56 54 41 42 4c 45 22 2c 20 20  REATE_VTABLE",  
8ce0: 20 20 20 20 20 20 22 44 52 4f 50 5f 56 54 41 42        "DROP_VTAB
8cf0: 4c 45 22 2c 0a 20 20 20 20 20 22 46 55 4e 43 54  LE",.     "FUNCT
8d00: 49 4f 4e 22 2c 20 20 20 20 20 20 20 20 20 20 20  ION",           
8d10: 20 20 22 53 41 56 45 50 4f 49 4e 54 22 2c 20 20    "SAVEPOINT",  
8d20: 20 20 20 20 20 20 20 20 20 20 22 52 45 43 55 52            "RECUR
8d30: 53 49 56 45 22 0a 20 20 7d 3b 0a 20 20 69 6e 74  SIVE".  };.  int
8d40: 20 69 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   i;.  const char
8d50: 20 2a 61 7a 5b 34 5d 3b 0a 20 20 61 7a 5b 30 5d   *az[4];.  az[0]
8d60: 20 3d 20 7a 41 31 3b 0a 20 20 61 7a 5b 31 5d 20   = zA1;.  az[1] 
8d70: 3d 20 7a 41 32 3b 0a 20 20 61 7a 5b 32 5d 20 3d  = zA2;.  az[2] =
8d80: 20 7a 41 33 3b 0a 20 20 61 7a 5b 33 5d 20 3d 20   zA3;.  az[3] = 
8d90: 7a 41 34 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e  zA4;.  utf8_prin
8da0: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 61 75 74 68  tf(p->out, "auth
8db0: 6f 72 69 7a 65 72 3a 20 25 73 22 2c 20 61 7a 41  orizer: %s", azA
8dc0: 63 74 69 6f 6e 5b 6f 70 5d 29 3b 0a 20 20 66 6f  ction[op]);.  fo
8dd0: 72 28 69 3d 30 3b 20 69 3c 34 3b 20 69 2b 2b 29  r(i=0; i<4; i++)
8de0: 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  {.    raw_printf
8df0: 28 70 2d 3e 6f 75 74 2c 20 22 20 22 29 3b 0a 20  (p->out, " ");. 
8e00: 20 20 20 69 66 28 20 61 7a 5b 69 5d 20 29 7b 0a     if( az[i] ){.
8e10: 20 20 20 20 20 20 6f 75 74 70 75 74 5f 63 5f 73        output_c_s
8e20: 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a  tring(p->out, az
8e30: 5b 69 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  [i]);.    }else{
8e40: 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
8e50: 66 28 70 2d 3e 6f 75 74 2c 20 22 4e 55 4c 4c 22  f(p->out, "NULL"
8e60: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  );.    }.  }.  r
8e70: 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
8e80: 2c 20 22 5c 6e 22 29 3b 0a 20 20 72 65 74 75 72  , "\n");.  retur
8e90: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23  n SQLITE_OK;.}.#
8ea0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 69  endif../*.** Pri
8eb0: 6e 74 20 61 20 73 63 68 65 6d 61 20 73 74 61 74  nt a schema stat
8ec0: 65 6d 65 6e 74 2e 20 20 50 61 72 74 20 6f 66 20  ement.  Part of 
8ed0: 4d 4f 44 45 5f 53 65 6d 69 20 61 6e 64 20 4d 4f  MODE_Semi and MO
8ee0: 44 45 5f 50 72 65 74 74 79 20 6f 75 74 70 75 74  DE_Pretty output
8ef0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
8f00: 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 73 6f  tine converts so
8f10: 6d 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  me CREATE TABLE 
8f20: 73 74 61 74 65 6d 65 6e 74 73 20 66 6f 72 20 73  statements for s
8f30: 68 61 64 6f 77 20 74 61 62 6c 65 73 0a 2a 2a 20  hadow tables.** 
8f40: 69 6e 20 46 54 53 33 2f 34 2f 35 20 69 6e 74 6f  in FTS3/4/5 into
8f50: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46   CREATE TABLE IF
8f60: 20 4e 4f 54 20 45 58 49 53 54 53 20 73 74 61 74   NOT EXISTS stat
8f70: 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 73 74 61 74 69  ements..*/.stati
8f80: 63 20 76 6f 69 64 20 70 72 69 6e 74 53 63 68 65  c void printSche
8f90: 6d 61 4c 69 6e 65 28 46 49 4c 45 20 2a 6f 75 74  maLine(FILE *out
8fa0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
8fb0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
8fc0: 69 6c 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74  il){.  if( sqlit
8fd0: 65 33 5f 73 74 72 67 6c 6f 62 28 22 43 52 45 41  e3_strglob("CREA
8fe0: 54 45 20 54 41 42 4c 45 20 5b 27 5c 22 5d 2a 22  TE TABLE ['\"]*"
8ff0: 2c 20 7a 29 3d 3d 30 20 29 7b 0a 20 20 20 20 75  , z)==0 ){.    u
9000: 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  tf8_printf(out, 
9010: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46  "CREATE TABLE IF
9020: 20 4e 4f 54 20 45 58 49 53 54 53 20 25 73 25 73   NOT EXISTS %s%s
9030: 22 2c 20 7a 2b 31 33 2c 20 7a 54 61 69 6c 29 3b  ", z+13, zTail);
9040: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 75 74  .  }else{.    ut
9050: 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  f8_printf(out, "
9060: 25 73 25 73 22 2c 20 7a 2c 20 7a 54 61 69 6c 29  %s%s", z, zTail)
9070: 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76  ;.  }.}.static v
9080: 6f 69 64 20 70 72 69 6e 74 53 63 68 65 6d 61 4c  oid printSchemaL
9090: 69 6e 65 4e 28 46 49 4c 45 20 2a 6f 75 74 2c 20  ineN(FILE *out, 
90a0: 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 2c 20  char *z, int n, 
90b0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69  const char *zTai
90c0: 6c 29 7b 0a 20 20 63 68 61 72 20 63 20 3d 20 7a  l){.  char c = z
90d0: 5b 6e 5d 3b 0a 20 20 7a 5b 6e 5d 20 3d 20 30 3b  [n];.  z[n] = 0;
90e0: 0a 20 20 70 72 69 6e 74 53 63 68 65 6d 61 4c 69  .  printSchemaLi
90f0: 6e 65 28 6f 75 74 2c 20 7a 2c 20 7a 54 61 69 6c  ne(out, z, zTail
9100: 29 3b 0a 20 20 7a 5b 6e 5d 20 3d 20 63 3b 0a 7d  );.  z[n] = c;.}
9110: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ../*.** This is 
9120: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75  the callback rou
9130: 74 69 6e 65 20 74 68 61 74 20 74 68 65 20 73 68  tine that the sh
9140: 65 6c 6c 0a 2a 2a 20 69 6e 76 6f 6b 65 73 20 66  ell.** invokes f
9150: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 61  or each row of a
9160: 20 71 75 65 72 79 20 72 65 73 75 6c 74 2e 0a 2a   query result..*
9170: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 68 65  /.static int she
9180: 6c 6c 5f 63 61 6c 6c 62 61 63 6b 28 0a 20 20 76  ll_callback(.  v
9190: 6f 69 64 20 2a 70 41 72 67 2c 0a 20 20 69 6e 74  oid *pArg,.  int
91a0: 20 6e 41 72 67 2c 20 20 20 20 20 20 20 20 2f 2a   nArg,        /*
91b0: 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   Number of resul
91c0: 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 63  t columns */.  c
91d0: 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20 20 20 20  har **azArg,    
91e0: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
91f0: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 2a 2f  result column */
9200: 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 2c  .  char **azCol,
9210: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61      /* Column na
9220: 6d 65 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 69  mes */.  int *ai
9230: 54 79 70 65 20 20 20 20 20 20 2f 2a 20 43 6f 6c  Type      /* Col
9240: 75 6d 6e 20 74 79 70 65 73 20 2a 2f 0a 29 7b 0a  umn types */.){.
9250: 20 20 69 6e 74 20 69 3b 0a 20 20 53 68 65 6c 6c    int i;.  Shell
9260: 53 74 61 74 65 20 2a 70 20 3d 20 28 53 68 65 6c  State *p = (Shel
9270: 6c 53 74 61 74 65 2a 29 70 41 72 67 3b 0a 0a 20  lState*)pArg;.. 
9280: 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20   if( azArg==0 ) 
9290: 72 65 74 75 72 6e 20 30 3b 0a 20 20 73 77 69 74  return 0;.  swit
92a0: 63 68 28 20 70 2d 3e 63 4d 6f 64 65 20 29 7b 0a  ch( p->cMode ){.
92b0: 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 4c 69      case MODE_Li
92c0: 6e 65 3a 20 7b 0a 20 20 20 20 20 20 69 6e 74 20  ne: {.      int 
92d0: 77 20 3d 20 35 3b 0a 20 20 20 20 20 20 69 66 28  w = 5;.      if(
92e0: 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61   azArg==0 ) brea
92f0: 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  k;.      for(i=0
9300: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
9310: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20          int len 
9320: 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a 43 6f 6c  = strlen30(azCol
9330: 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a  [i] ? azCol[i] :
9340: 20 22 22 29 3b 0a 20 20 20 20 20 20 20 20 69 66   "");.        if
9350: 28 20 6c 65 6e 3e 77 20 29 20 77 20 3d 20 6c 65  ( len>w ) w = le
9360: 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  n;.      }.     
9370: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3e 30 20   if( p->cnt++>0 
9380: 29 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d  ) utf8_printf(p-
9390: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72  >out, "%s", p->r
93a0: 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  owSeparator);.  
93b0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
93c0: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
93d0: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
93e0: 2d 3e 6f 75 74 2c 22 25 2a 73 20 3d 20 25 73 25  ->out,"%*s = %s%
93f0: 73 22 2c 20 77 2c 20 61 7a 43 6f 6c 5b 69 5d 2c  s", w, azCol[i],
9400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9410: 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72   azArg[i] ? azAr
9420: 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61  g[i] : p->nullVa
9430: 6c 75 65 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72  lue, p->rowSepar
9440: 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ator);.      }. 
9450: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
9460: 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f  }.    case MODE_
9470: 45 78 70 6c 61 69 6e 3a 0a 20 20 20 20 63 61 73  Explain:.    cas
9480: 65 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3a 20 7b  e MODE_Column: {
9490: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
94a0: 6e 73 74 20 69 6e 74 20 61 45 78 70 6c 61 69 6e  nst int aExplain
94b0: 57 69 64 74 68 73 5b 5d 20 3d 20 7b 34 2c 20 31  Widths[] = {4, 1
94c0: 33 2c 20 34 2c 20 34 2c 20 34 2c 20 31 33 2c 20  3, 4, 4, 4, 13, 
94d0: 32 2c 20 31 33 7d 3b 0a 20 20 20 20 20 20 63 6f  2, 13};.      co
94e0: 6e 73 74 20 69 6e 74 20 2a 63 6f 6c 57 69 64 74  nst int *colWidt
94f0: 68 3b 0a 20 20 20 20 20 20 69 6e 74 20 73 68 6f  h;.      int sho
9500: 77 48 64 72 3b 0a 20 20 20 20 20 20 63 68 61 72  wHdr;.      char
9510: 20 2a 72 6f 77 53 65 70 3b 0a 20 20 20 20 20 20   *rowSep;.      
9520: 69 66 28 20 70 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f  if( p->cMode==MO
9530: 44 45 5f 43 6f 6c 75 6d 6e 20 29 7b 0a 20 20 20  DE_Column ){.   
9540: 20 20 20 20 20 63 6f 6c 57 69 64 74 68 20 3d 20       colWidth = 
9550: 70 2d 3e 63 6f 6c 57 69 64 74 68 3b 0a 20 20 20  p->colWidth;.   
9560: 20 20 20 20 20 73 68 6f 77 48 64 72 20 3d 20 70       showHdr = p
9570: 2d 3e 73 68 6f 77 48 65 61 64 65 72 3b 0a 20 20  ->showHeader;.  
9580: 20 20 20 20 20 20 72 6f 77 53 65 70 20 3d 20 70        rowSep = p
9590: 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 3b 0a  ->rowSeparator;.
95a0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
95b0: 20 20 20 20 20 63 6f 6c 57 69 64 74 68 20 3d 20       colWidth = 
95c0: 61 45 78 70 6c 61 69 6e 57 69 64 74 68 73 3b 0a  aExplainWidths;.
95d0: 20 20 20 20 20 20 20 20 73 68 6f 77 48 64 72 20          showHdr 
95e0: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 6f 77  = 1;.        row
95f0: 53 65 70 20 3d 20 53 45 50 5f 52 6f 77 3b 0a 20  Sep = SEP_Row;. 
9600: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
9610: 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 29 7b 0a   p->cnt++==0 ){.
9620: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b          for(i=0;
9630: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
9640: 20 20 20 20 20 20 20 20 20 69 6e 74 20 77 2c 20           int w, 
9650: 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  n;.          if(
9660: 20 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e   i<ArraySize(p->
9670: 63 6f 6c 57 69 64 74 68 29 20 29 7b 0a 20 20 20  colWidth) ){.   
9680: 20 20 20 20 20 20 20 20 20 77 20 3d 20 63 6f 6c           w = col
9690: 57 69 64 74 68 5b 69 5d 3b 0a 20 20 20 20 20 20  Width[i];.      
96a0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
96b0: 20 20 20 20 20 20 20 77 20 3d 20 30 3b 0a 20 20         w = 0;.  
96c0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
96d0: 20 20 20 20 69 66 28 20 77 3d 3d 30 20 29 7b 0a      if( w==0 ){.
96e0: 20 20 20 20 20 20 20 20 20 20 20 20 77 20 3d 20              w = 
96f0: 73 74 72 6c 65 6e 43 68 61 72 28 61 7a 43 6f 6c  strlenChar(azCol
9700: 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a  [i] ? azCol[i] :
9710: 20 22 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20   "");.          
9720: 20 20 69 66 28 20 77 3c 31 30 20 29 20 77 20 3d    if( w<10 ) w =
9730: 20 31 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20   10;.           
9740: 20 6e 20 3d 20 73 74 72 6c 65 6e 43 68 61 72 28   n = strlenChar(
9750: 61 7a 41 72 67 20 26 26 20 61 7a 41 72 67 5b 69  azArg && azArg[i
9760: 5d 20 3f 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70  ] ? azArg[i] : p
9770: 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20  ->nullValue);.  
9780: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 77 3c            if( w<
9790: 6e 20 29 20 77 20 3d 20 6e 3b 0a 20 20 20 20 20  n ) w = n;.     
97a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
97b0: 20 69 66 28 20 69 3c 41 72 72 61 79 53 69 7a 65   if( i<ArraySize
97c0: 28 70 2d 3e 61 63 74 75 61 6c 57 69 64 74 68 29  (p->actualWidth)
97d0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
97e0: 70 2d 3e 61 63 74 75 61 6c 57 69 64 74 68 5b 69  p->actualWidth[i
97f0: 5d 20 3d 20 77 3b 0a 20 20 20 20 20 20 20 20 20  ] = w;.         
9800: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28   }.          if(
9810: 20 73 68 6f 77 48 64 72 20 29 7b 0a 20 20 20 20   showHdr ){.    
9820: 20 20 20 20 20 20 20 20 75 74 66 38 5f 77 69 64          utf8_wid
9830: 74 68 5f 70 72 69 6e 74 28 70 2d 3e 6f 75 74 2c  th_print(p->out,
9840: 20 77 2c 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20   w, azCol[i]);. 
9850: 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f             utf8_
9860: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
9870: 25 73 22 2c 20 69 3d 3d 6e 41 72 67 2d 31 20 3f  %s", i==nArg-1 ?
9880: 20 72 6f 77 53 65 70 20 3a 20 22 20 20 22 29 3b   rowSep : "  ");
9890: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
98a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
98b0: 66 28 20 73 68 6f 77 48 64 72 20 29 7b 0a 20 20  f( showHdr ){.  
98c0: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b          for(i=0;
98d0: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
98e0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 77             int w
98f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ;.            if
9900: 28 20 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d  ( i<ArraySize(p-
9910: 3e 61 63 74 75 61 6c 57 69 64 74 68 29 20 29 7b  >actualWidth) ){
9920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9930: 77 20 3d 20 70 2d 3e 61 63 74 75 61 6c 57 69 64  w = p->actualWid
9940: 74 68 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 20  th[i];.         
9950: 20 20 20 20 20 20 69 66 28 20 77 3c 30 20 29 20        if( w<0 ) 
9960: 77 20 3d 20 2d 77 3b 0a 20 20 20 20 20 20 20 20  w = -w;.        
9970: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
9980: 20 20 20 20 20 20 20 20 20 20 77 20 3d 20 31 30            w = 10
9990: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
99a0: 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38              utf8
99b0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
99c0: 25 2d 2a 2e 2a 73 25 73 22 2c 77 2c 77 2c 0a 20  %-*.*s%s",w,w,. 
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99e0: 20 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    "-------------
99f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20  -------------". 
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a30: 20 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    "-------------
9a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 2c 0a  -------------",.
9a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a80: 20 20 20 20 69 3d 3d 6e 41 72 67 2d 31 20 3f 20      i==nArg-1 ? 
9a90: 72 6f 77 53 65 70 20 3a 20 22 20 20 22 29 3b 0a  rowSep : "  ");.
9aa0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
9ab0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
9ac0: 20 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30      if( azArg==0
9ad0: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
9ae0: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
9af0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
9b00: 6e 74 20 77 3b 0a 20 20 20 20 20 20 20 20 69 66  nt w;.        if
9b10: 28 20 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d  ( i<ArraySize(p-
9b20: 3e 61 63 74 75 61 6c 57 69 64 74 68 29 20 29 7b  >actualWidth) ){
9b30: 0a 20 20 20 20 20 20 20 20 20 20 20 77 20 3d 20  .           w = 
9b40: 70 2d 3e 61 63 74 75 61 6c 57 69 64 74 68 5b 69  p->actualWidth[i
9b50: 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  ];.        }else
9b60: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 77 20 3d  {.           w =
9b70: 20 31 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   10;.        }. 
9b80: 20 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 4d         if( p->cM
9b90: 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c 61 69  ode==MODE_Explai
9ba0: 6e 20 26 26 20 61 7a 41 72 67 5b 69 5d 20 26 26  n && azArg[i] &&
9bb0: 20 73 74 72 6c 65 6e 43 68 61 72 28 61 7a 41 72   strlenChar(azAr
9bc0: 67 5b 69 5d 29 3e 77 20 29 7b 0a 20 20 20 20 20  g[i])>w ){.     
9bd0: 20 20 20 20 20 77 20 3d 20 73 74 72 6c 65 6e 43       w = strlenC
9be0: 68 61 72 28 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  har(azArg[i]);. 
9bf0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
9c00: 20 69 66 28 20 69 3d 3d 31 20 26 26 20 70 2d 3e   if( i==1 && p->
9c10: 61 69 49 6e 64 65 6e 74 20 26 26 20 70 2d 3e 70  aiIndent && p->p
9c20: 53 74 6d 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Stmt ){.        
9c30: 20 20 69 66 28 20 70 2d 3e 69 49 6e 64 65 6e 74    if( p->iIndent
9c40: 3c 70 2d 3e 6e 49 6e 64 65 6e 74 20 29 7b 0a 20  <p->nIndent ){. 
9c50: 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f             utf8_
9c60: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
9c70: 25 2a 2e 73 22 2c 20 70 2d 3e 61 69 49 6e 64 65  %*.s", p->aiInde
9c80: 6e 74 5b 70 2d 3e 69 49 6e 64 65 6e 74 5d 2c 20  nt[p->iIndent], 
9c90: 22 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  "");.          }
9ca0: 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 69 49  .          p->iI
9cb0: 6e 64 65 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20  ndent++;.       
9cc0: 20 7d 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f   }.        utf8_
9cd0: 77 69 64 74 68 5f 70 72 69 6e 74 28 70 2d 3e 6f  width_print(p->o
9ce0: 75 74 2c 20 77 2c 20 61 7a 41 72 67 5b 69 5d 20  ut, w, azArg[i] 
9cf0: 3f 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e  ? azArg[i] : p->
9d00: 6e 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20  nullValue);.    
9d10: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
9d20: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 69 3d  p->out, "%s", i=
9d30: 3d 6e 41 72 67 2d 31 20 3f 20 72 6f 77 53 65 70  =nArg-1 ? rowSep
9d40: 20 3a 20 22 20 20 22 29 3b 0a 20 20 20 20 20 20   : "  ");.      
9d50: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
9d60: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
9d70: 44 45 5f 53 65 6d 69 3a 20 7b 20 20 20 2f 2a 20  DE_Semi: {   /* 
9d80: 2e 73 63 68 65 6d 61 20 61 6e 64 20 2e 66 75 6c  .schema and .ful
9d90: 6c 73 63 68 65 6d 61 20 6f 75 74 70 75 74 20 2a  lschema output *
9da0: 2f 0a 20 20 20 20 20 20 70 72 69 6e 74 53 63 68  /.      printSch
9db0: 65 6d 61 4c 69 6e 65 28 70 2d 3e 6f 75 74 2c 20  emaLine(p->out, 
9dc0: 61 7a 41 72 67 5b 30 5d 2c 20 22 3b 5c 6e 22 29  azArg[0], ";\n")
9dd0: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
9de0: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
9df0: 44 45 5f 50 72 65 74 74 79 3a 20 7b 20 20 2f 2a  DE_Pretty: {  /*
9e00: 20 2e 73 63 68 65 6d 61 20 61 6e 64 20 2e 66 75   .schema and .fu
9e10: 6c 6c 73 63 68 65 6d 61 20 77 69 74 68 20 2d 2d  llschema with --
9e20: 69 6e 64 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20  indent */.      
9e30: 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20 20 20 69  char *z;.      i
9e40: 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69 6e 74 20  nt j;.      int 
9e50: 6e 50 61 72 65 6e 20 3d 20 30 3b 0a 20 20 20 20  nParen = 0;.    
9e60: 20 20 63 68 61 72 20 63 45 6e 64 20 3d 20 30 3b    char cEnd = 0;
9e70: 0a 20 20 20 20 20 20 63 68 61 72 20 63 3b 0a 20  .      char c;. 
9e80: 20 20 20 20 20 69 6e 74 20 6e 4c 69 6e 65 20 3d       int nLine =
9e90: 20 30 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   0;.      assert
9ea0: 28 20 6e 41 72 67 3d 3d 31 20 29 3b 0a 20 20 20  ( nArg==1 );.   
9eb0: 20 20 20 69 66 28 20 61 7a 41 72 67 5b 30 5d 3d     if( azArg[0]=
9ec0: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
9ed0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74    if( sqlite3_st
9ee0: 72 6c 69 6b 65 28 22 43 52 45 41 54 45 20 56 49  rlike("CREATE VI
9ef0: 45 57 25 22 2c 20 61 7a 41 72 67 5b 30 5d 2c 20  EW%", azArg[0], 
9f00: 30 29 3d 3d 30 0a 20 20 20 20 20 20 20 7c 7c 20  0)==0.       || 
9f10: 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28  sqlite3_strlike(
9f20: 22 43 52 45 41 54 45 20 54 52 49 47 25 22 2c 20  "CREATE TRIG%", 
9f30: 61 7a 41 72 67 5b 30 5d 2c 20 30 29 3d 3d 30 0a  azArg[0], 0)==0.
9f40: 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20        ){.       
9f50: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
9f60: 6f 75 74 2c 20 22 25 73 3b 5c 6e 22 2c 20 61 7a  out, "%s;\n", az
9f70: 41 72 67 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[0]);.       
9f80: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
9f90: 20 20 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65        z = sqlite
9fa0: 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
9fb0: 61 7a 41 72 67 5b 30 5d 29 3b 0a 20 20 20 20 20  azArg[0]);.     
9fc0: 20 6a 20 3d 20 30 3b 0a 20 20 20 20 20 20 66 6f   j = 0;.      fo
9fd0: 72 28 69 3d 30 3b 20 49 73 53 70 61 63 65 28 7a  r(i=0; IsSpace(z
9fe0: 5b 69 5d 29 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20  [i]); i++){}.   
9ff0: 20 20 20 66 6f 72 28 3b 20 28 63 20 3d 20 7a 5b     for(; (c = z[
a000: 69 5d 29 21 3d 30 3b 20 69 2b 2b 29 7b 0a 20 20  i])!=0; i++){.  
a010: 20 20 20 20 20 20 69 66 28 20 49 73 53 70 61 63        if( IsSpac
a020: 65 28 63 29 20 29 7b 0a 20 20 20 20 20 20 20 20  e(c) ){.        
a030: 20 20 69 66 28 20 7a 5b 6a 2d 31 5d 3d 3d 27 5c    if( z[j-1]=='\
a040: 72 27 20 29 20 7a 5b 6a 2d 31 5d 20 3d 20 27 5c  r' ) z[j-1] = '\
a050: 6e 27 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  n';.          if
a060: 28 20 49 73 53 70 61 63 65 28 7a 5b 6a 2d 31 5d  ( IsSpace(z[j-1]
a070: 29 20 7c 7c 20 7a 5b 6a 2d 31 5d 3d 3d 27 28 27  ) || z[j-1]=='('
a080: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
a090: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28       }else if( (
a0a0: 63 3d 3d 27 28 27 20 7c 7c 20 63 3d 3d 27 29 27  c=='(' || c==')'
a0b0: 29 20 26 26 20 6a 3e 30 20 26 26 20 49 73 53 70  ) && j>0 && IsSp
a0c0: 61 63 65 28 7a 5b 6a 2d 31 5d 29 20 29 7b 0a 20  ace(z[j-1]) ){. 
a0d0: 20 20 20 20 20 20 20 20 20 6a 2d 2d 3b 0a 20 20           j--;.  
a0e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
a0f0: 7a 5b 6a 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20  z[j++] = c;.    
a100: 20 20 7d 0a 20 20 20 20 20 20 77 68 69 6c 65 28    }.      while(
a110: 20 6a 3e 30 20 26 26 20 49 73 53 70 61 63 65 28   j>0 && IsSpace(
a120: 7a 5b 6a 2d 31 5d 29 20 29 7b 20 6a 2d 2d 3b 20  z[j-1]) ){ j--; 
a130: 7d 0a 20 20 20 20 20 20 7a 5b 6a 5d 20 3d 20 30  }.      z[j] = 0
a140: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 6c  ;.      if( strl
a150: 65 6e 33 30 28 7a 29 3e 3d 37 39 20 29 7b 0a 20  en30(z)>=79 ){. 
a160: 20 20 20 20 20 20 20 66 6f 72 28 69 3d 6a 3d 30         for(i=j=0
a170: 3b 20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 3b  ; (c = z[i])!=0;
a180: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
a190: 20 69 66 28 20 63 3d 3d 63 45 6e 64 20 29 7b 0a   if( c==cEnd ){.
a1a0: 20 20 20 20 20 20 20 20 20 20 20 20 63 45 6e 64              cEnd
a1b0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
a1c0: 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 22 27  }else if( c=='"'
a1d0: 20 7c 7c 20 63 3d 3d 27 5c 27 27 20 7c 7c 20 63   || c=='\'' || c
a1e0: 3d 3d 27 60 27 20 29 7b 0a 20 20 20 20 20 20 20  =='`' ){.       
a1f0: 20 20 20 20 20 63 45 6e 64 20 3d 20 63 3b 0a 20       cEnd = c;. 
a200: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69           }else i
a210: 66 28 20 63 3d 3d 27 5b 27 20 29 7b 0a 20 20 20  f( c=='[' ){.   
a220: 20 20 20 20 20 20 20 20 20 63 45 6e 64 20 3d 20           cEnd = 
a230: 27 5d 27 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ']';.          }
a240: 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 28 27 20  else if( c=='(' 
a250: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ){.            n
a260: 50 61 72 65 6e 2b 2b 3b 0a 20 20 20 20 20 20 20  Paren++;.       
a270: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
a280: 27 29 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ')' ){.         
a290: 20 20 20 6e 50 61 72 65 6e 2d 2d 3b 0a 20 20 20     nParen--;.   
a2a0: 20 20 20 20 20 20 20 20 20 69 66 28 20 6e 4c 69           if( nLi
a2b0: 6e 65 3e 30 20 26 26 20 6e 50 61 72 65 6e 3d 3d  ne>0 && nParen==
a2c0: 30 20 26 26 20 6a 3e 30 20 29 7b 0a 20 20 20 20  0 && j>0 ){.    
a2d0: 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 53            printS
a2e0: 63 68 65 6d 61 4c 69 6e 65 4e 28 70 2d 3e 6f 75  chemaLineN(p->ou
a2f0: 74 2c 20 7a 2c 20 6a 2c 20 22 5c 6e 22 29 3b 0a  t, z, j, "\n");.
a300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6a 20                j 
a310: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20  = 0;.           
a320: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20   }.          }. 
a330: 20 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20           z[j++] 
a340: 3d 20 63 3b 0a 20 20 20 20 20 20 20 20 20 20 69  = c;.          i
a350: 66 28 20 6e 50 61 72 65 6e 3d 3d 31 20 26 26 20  f( nParen==1 && 
a360: 28 63 3d 3d 27 28 27 20 7c 7c 20 63 3d 3d 27 2c  (c=='(' || c==',
a370: 27 20 7c 7c 20 63 3d 3d 27 5c 6e 27 29 20 29 7b  ' || c=='\n') ){
a380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
a390: 20 63 3d 3d 27 5c 6e 27 20 29 20 6a 2d 2d 3b 0a   c=='\n' ) j--;.
a3a0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e              prin
a3b0: 74 53 63 68 65 6d 61 4c 69 6e 65 4e 28 70 2d 3e  tSchemaLineN(p->
a3c0: 6f 75 74 2c 20 7a 2c 20 6a 2c 20 22 5c 6e 20 20  out, z, j, "\n  
a3d0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
a3e0: 6a 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  j = 0;.         
a3f0: 20 20 20 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20     nLine++;.    
a400: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 49          while( I
a410: 73 53 70 61 63 65 28 7a 5b 69 2b 31 5d 29 20 29  sSpace(z[i+1]) )
a420: 7b 20 69 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20  { i++; }.       
a430: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
a440: 20 20 20 20 20 20 20 7a 5b 6a 5d 20 3d 20 30 3b         z[j] = 0;
a450: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
a460: 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 70  rintSchemaLine(p
a470: 2d 3e 6f 75 74 2c 20 7a 2c 20 22 3b 5c 6e 22 29  ->out, z, ";\n")
a480: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
a490: 66 72 65 65 28 7a 29 3b 0a 20 20 20 20 20 20 62  free(z);.      b
a4a0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
a4b0: 63 61 73 65 20 4d 4f 44 45 5f 4c 69 73 74 3a 20  case MODE_List: 
a4c0: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63  {.      if( p->c
a4d0: 6e 74 2b 2b 3d 3d 30 20 26 26 20 70 2d 3e 73 68  nt++==0 && p->sh
a4e0: 6f 77 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20  owHeader ){.    
a4f0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
a500: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
a510: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
a520: 28 70 2d 3e 6f 75 74 2c 22 25 73 25 73 22 2c 61  (p->out,"%s%s",a
a530: 7a 43 6f 6c 5b 69 5d 2c 0a 20 20 20 20 20 20 20  zCol[i],.       
a540: 20 20 20 20 20 20 20 20 20 20 20 69 3d 3d 6e 41             i==nA
a550: 72 67 2d 31 20 3f 20 70 2d 3e 72 6f 77 53 65 70  rg-1 ? p->rowSep
a560: 61 72 61 74 6f 72 20 3a 20 70 2d 3e 63 6f 6c 53  arator : p->colS
a570: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
a580: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
a590: 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20     if( azArg==0 
a5a0: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 66  ) break;.      f
a5b0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
a5c0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 68  i++){.        ch
a5d0: 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 5d  ar *z = azArg[i]
a5e0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 3d  ;.        if( z=
a5f0: 3d 30 20 29 20 7a 20 3d 20 70 2d 3e 6e 75 6c 6c  =0 ) z = p->null
a600: 56 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 75  Value;.        u
a610: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
a620: 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20  t, "%s", z);.   
a630: 20 20 20 20 20 69 66 28 20 69 3c 6e 41 72 67 2d       if( i<nArg-
a640: 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  1 ){.          u
a650: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
a660: 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53  t, "%s", p->colS
a670: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
a680: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
a690: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
a6a0: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d  p->out, "%s", p-
a6b0: 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a  >rowSeparator);.
a6c0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
a6d0: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
a6e0: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
a6f0: 44 45 5f 48 74 6d 6c 3a 20 7b 0a 20 20 20 20 20  DE_Html: {.     
a700: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30   if( p->cnt++==0
a710: 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65   && p->showHeade
a720: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  r ){.        raw
a730: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
a740: 3c 54 52 3e 22 29 3b 0a 20 20 20 20 20 20 20 20  <TR>");.        
a750: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
a760: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
a770: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
a780: 75 74 2c 22 3c 54 48 3e 22 29 3b 0a 20 20 20 20  ut,"<TH>");.    
a790: 20 20 20 20 20 20 6f 75 74 70 75 74 5f 68 74 6d        output_htm
a7a0: 6c 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c  l_string(p->out,
a7b0: 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20   azCol[i]);.    
a7c0: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
a7d0: 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 48 3e 5c 6e  (p->out,"</TH>\n
a7e0: 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ");.        }.  
a7f0: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
a800: 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 52 3e 5c 6e  (p->out,"</TR>\n
a810: 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ");.      }.    
a820: 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29    if( azArg==0 )
a830: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 72 61   break;.      ra
a840: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
a850: 22 3c 54 52 3e 22 29 3b 0a 20 20 20 20 20 20 66  "<TR>");.      f
a860: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
a870: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 72 61  i++){.        ra
a880: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
a890: 22 3c 54 44 3e 22 29 3b 0a 20 20 20 20 20 20 20  "<TD>");.       
a8a0: 20 6f 75 74 70 75 74 5f 68 74 6d 6c 5f 73 74 72   output_html_str
a8b0: 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72  ing(p->out, azAr
a8c0: 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69 5d 20  g[i] ? azArg[i] 
a8d0: 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b  : p->nullValue);
a8e0: 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
a8f0: 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 44  ntf(p->out,"</TD
a900: 3e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >\n");.      }. 
a910: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
a920: 70 2d 3e 6f 75 74 2c 22 3c 2f 54 52 3e 5c 6e 22  p->out,"</TR>\n"
a930: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
a940: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d      }.    case M
a950: 4f 44 45 5f 54 63 6c 3a 20 7b 0a 20 20 20 20 20  ODE_Tcl: {.     
a960: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30   if( p->cnt++==0
a970: 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65   && p->showHeade
a980: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72  r ){.        for
a990: 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
a9a0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75  +){.          ou
a9b0: 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d  tput_c_string(p-
a9c0: 3e 6f 75 74 2c 61 7a 43 6f 6c 5b 69 5d 20 3f 20  >out,azCol[i] ? 
a9d0: 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b 0a  azCol[i] : "");.
a9e0: 20 20 20 20 20 20 20 20 20 20 69 66 28 69 3c 6e            if(i<n
a9f0: 41 72 67 2d 31 29 20 75 74 66 38 5f 70 72 69 6e  Arg-1) utf8_prin
aa00: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c  tf(p->out, "%s",
aa10: 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72   p->colSeparator
aa20: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
aa30: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
aa40: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70  (p->out, "%s", p
aa50: 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b  ->rowSeparator);
aa60: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
aa70: 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72  f( azArg==0 ) br
aa80: 65 61 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  eak;.      for(i
aa90: 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
aaa0: 7b 0a 20 20 20 20 20 20 20 20 6f 75 74 70 75 74  {.        output
aab0: 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  _c_string(p->out
aac0: 2c 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41  , azArg[i] ? azA
aad0: 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56  rg[i] : p->nullV
aae0: 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20 69  alue);.        i
aaf0: 66 28 69 3c 6e 41 72 67 2d 31 29 20 75 74 66 38  f(i<nArg-1) utf8
ab00: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
ab10: 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  "%s", p->colSepa
ab20: 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a  rator);.      }.
ab30: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
ab40: 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20  f(p->out, "%s", 
ab50: 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29  p->rowSeparator)
ab60: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
ab70: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
ab80: 44 45 5f 43 73 76 3a 20 7b 0a 20 20 20 20 20 20  DE_Csv: {.      
ab90: 73 65 74 42 69 6e 61 72 79 4d 6f 64 65 28 70 2d  setBinaryMode(p-
aba0: 3e 6f 75 74 2c 20 31 29 3b 0a 20 20 20 20 20 20  >out, 1);.      
abb0: 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20  if( p->cnt++==0 
abc0: 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72  && p->showHeader
abd0: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
abe0: 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
abf0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74  ){.          out
ac00: 70 75 74 5f 63 73 76 28 70 2c 20 61 7a 43 6f 6c  put_csv(p, azCol
ac10: 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a  [i] ? azCol[i] :
ac20: 20 22 22 2c 20 69 3c 6e 41 72 67 2d 31 29 3b 0a   "", i<nArg-1);.
ac30: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ac40: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
ac50: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72  >out, "%s", p->r
ac60: 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  owSeparator);.  
ac70: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
ac80: 6e 41 72 67 3e 30 20 29 7b 0a 20 20 20 20 20 20  nArg>0 ){.      
ac90: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
aca0: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
acb0: 20 20 20 6f 75 74 70 75 74 5f 63 73 76 28 70 2c     output_csv(p,
acc0: 20 61 7a 41 72 67 5b 69 5d 2c 20 69 3c 6e 41 72   azArg[i], i<nAr
acd0: 67 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  g-1);.        }.
ace0: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
acf0: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
ad00: 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  , p->rowSeparato
ad10: 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  r);.      }.    
ad20: 20 20 73 65 74 54 65 78 74 4d 6f 64 65 28 70 2d    setTextMode(p-
ad30: 3e 6f 75 74 2c 20 31 29 3b 0a 20 20 20 20 20 20  >out, 1);.      
ad40: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
ad50: 20 63 61 73 65 20 4d 4f 44 45 5f 49 6e 73 65 72   case MODE_Inser
ad60: 74 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20 61  t: {.      if( a
ad70: 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b  zArg==0 ) break;
ad80: 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
ad90: 74 66 28 70 2d 3e 6f 75 74 2c 22 49 4e 53 45 52  tf(p->out,"INSER
ada0: 54 20 49 4e 54 4f 20 25 73 22 2c 70 2d 3e 7a 44  T INTO %s",p->zD
adb0: 65 73 74 54 61 62 6c 65 29 3b 0a 20 20 20 20 20  estTable);.     
adc0: 20 69 66 28 20 70 2d 3e 73 68 6f 77 48 65 61 64   if( p->showHead
add0: 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  er ){.        ra
ade0: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
adf0: 22 28 22 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  "(");.        fo
ae00: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
ae10: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ++){.          i
ae20: 66 28 20 69 3e 30 20 29 20 72 61 77 5f 70 72 69  f( i>0 ) raw_pri
ae30: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2c 22 29  ntf(p->out, ",")
ae40: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
ae50: 71 75 6f 74 65 43 68 61 72 28 61 7a 43 6f 6c 5b  quoteChar(azCol[
ae60: 69 5d 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  i]) ){.         
ae70: 20 20 20 63 68 61 72 20 2a 7a 20 3d 20 73 71 6c     char *z = sql
ae80: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22  ite3_mprintf("\"
ae90: 25 77 5c 22 22 2c 20 61 7a 43 6f 6c 5b 69 5d 29  %w\"", azCol[i])
aea0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 74  ;.            ut
aeb0: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
aec0: 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20  , "%s", z);.    
aed0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
aee0: 66 72 65 65 28 7a 29 3b 0a 20 20 20 20 20 20 20  free(z);.       
aef0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
af00: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
af10: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 61  (p->out, "%s", a
af20: 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zCol[i]);.      
af30: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
af40: 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
af50: 74 66 28 70 2d 3e 6f 75 74 2c 22 29 22 29 3b 0a  tf(p->out,")");.
af60: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 2d        }.      p-
af70: 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 66 6f  >cnt++;.      fo
af80: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
af90: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  ++){.        raw
afa0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
afb0: 69 3e 30 20 3f 20 22 2c 22 20 3a 20 22 20 56 41  i>0 ? "," : " VA
afc0: 4c 55 45 53 28 22 29 3b 0a 20 20 20 20 20 20 20  LUES(");.       
afd0: 20 69 66 28 20 28 61 7a 41 72 67 5b 69 5d 3d 3d   if( (azArg[i]==
afe0: 30 29 20 7c 7c 20 28 61 69 54 79 70 65 20 26 26  0) || (aiType &&
aff0: 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49   aiType[i]==SQLI
b000: 54 45 5f 4e 55 4c 4c 29 20 29 7b 0a 20 20 20 20  TE_NULL) ){.    
b010: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
b020: 66 28 70 2d 3e 6f 75 74 2c 22 4e 55 4c 4c 22 29  f(p->out,"NULL")
b030: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
b040: 69 66 28 20 61 69 54 79 70 65 20 26 26 20 61 69  if( aiType && ai
b050: 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f  Type[i]==SQLITE_
b060: 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 20 20  TEXT ){.        
b070: 20 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46 6c    if( ShellHasFl
b080: 61 67 28 70 2c 20 53 48 46 4c 47 5f 4e 65 77 6c  ag(p, SHFLG_Newl
b090: 69 6e 65 73 29 20 29 7b 0a 20 20 20 20 20 20 20  ines) ){.       
b0a0: 20 20 20 20 20 6f 75 74 70 75 74 5f 71 75 6f 74       output_quot
b0b0: 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  ed_string(p->out
b0c0: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
b0d0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
b0e0: 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74            output
b0f0: 5f 71 75 6f 74 65 64 5f 65 73 63 61 70 65 64 5f  _quoted_escaped_
b100: 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61  string(p->out, a
b110: 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zArg[i]);.      
b120: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65      }.        }e
b130: 6c 73 65 20 69 66 28 20 61 69 54 79 70 65 20 26  lse if( aiType &
b140: 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c  & aiType[i]==SQL
b150: 49 54 45 5f 49 4e 54 45 47 45 52 20 29 7b 0a 20  ITE_INTEGER ){. 
b160: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
b170: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22  intf(p->out,"%s"
b180: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
b190: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61       }else if( a
b1a0: 69 54 79 70 65 20 26 26 20 61 69 54 79 70 65 5b  iType && aiType[
b1b0: 69 5d 3d 3d 53 51 4c 49 54 45 5f 46 4c 4f 41 54  i]==SQLITE_FLOAT
b1c0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63 68   ){.          ch
b1d0: 61 72 20 7a 5b 35 30 5d 3b 0a 20 20 20 20 20 20  ar z[50];.      
b1e0: 20 20 20 20 64 6f 75 62 6c 65 20 72 20 3d 20 73      double r = s
b1f0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
b200: 75 62 6c 65 28 70 2d 3e 70 53 74 6d 74 2c 20 69  uble(p->pStmt, i
b210: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
b220: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 35 30  ite3_snprintf(50
b230: 2c 7a 2c 22 25 21 2e 32 30 67 22 2c 20 72 29 3b  ,z,"%!.20g", r);
b240: 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
b250: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
b260: 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20  s", z);.        
b270: 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79 70 65  }else if( aiType
b280: 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53   && aiType[i]==S
b290: 51 4c 49 54 45 5f 42 4c 4f 42 20 26 26 20 70 2d  QLITE_BLOB && p-
b2a0: 3e 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 20 20  >pStmt ){.      
b2b0: 20 20 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a      const void *
b2c0: 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f  pBlob = sqlite3_
b2d0: 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 2d 3e 70  column_blob(p->p
b2e0: 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20  Stmt, i);.      
b2f0: 20 20 20 20 69 6e 74 20 6e 42 6c 6f 62 20 3d 20      int nBlob = 
b300: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
b310: 79 74 65 73 28 70 2d 3e 70 53 74 6d 74 2c 20 69  ytes(p->pStmt, i
b320: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74  );.          out
b330: 70 75 74 5f 68 65 78 5f 62 6c 6f 62 28 70 2d 3e  put_hex_blob(p->
b340: 6f 75 74 2c 20 70 42 6c 6f 62 2c 20 6e 42 6c 6f  out, pBlob, nBlo
b350: 62 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  b);.        }els
b360: 65 20 69 66 28 20 69 73 4e 75 6d 62 65 72 28 61  e if( isNumber(a
b370: 7a 41 72 67 5b 69 5d 2c 20 30 29 20 29 7b 0a 20  zArg[i], 0) ){. 
b380: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
b390: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22  intf(p->out,"%s"
b3a0: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
b3b0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 53       }else if( S
b3c0: 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c 20 53  hellHasFlag(p, S
b3d0: 48 46 4c 47 5f 4e 65 77 6c 69 6e 65 73 29 20 29  HFLG_Newlines) )
b3e0: 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74 70  {.          outp
b3f0: 75 74 5f 71 75 6f 74 65 64 5f 73 74 72 69 6e 67  ut_quoted_string
b400: 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69  (p->out, azArg[i
b410: 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ]);.        }els
b420: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74  e{.          out
b430: 70 75 74 5f 71 75 6f 74 65 64 5f 65 73 63 61 70  put_quoted_escap
b440: 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  ed_string(p->out
b450: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
b460: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
b470: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
b480: 70 2d 3e 6f 75 74 2c 22 29 3b 5c 6e 22 29 3b 0a  p->out,");\n");.
b490: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
b4a0: 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45   }.    case MODE
b4b0: 5f 51 75 6f 74 65 3a 20 7b 0a 20 20 20 20 20 20  _Quote: {.      
b4c0: 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 62  if( azArg==0 ) b
b4d0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20  reak;.      if( 
b4e0: 70 2d 3e 63 6e 74 3d 3d 30 20 26 26 20 70 2d 3e  p->cnt==0 && p->
b4f0: 73 68 6f 77 48 65 61 64 65 72 20 29 7b 0a 20 20  showHeader ){.  
b500: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
b510: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
b520: 20 20 20 20 20 20 20 69 66 28 20 69 3e 30 20 29         if( i>0 )
b530: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
b540: 75 74 2c 20 22 2c 22 29 3b 0a 20 20 20 20 20 20  ut, ",");.      
b550: 20 20 20 20 6f 75 74 70 75 74 5f 71 75 6f 74 65      output_quote
b560: 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c  d_string(p->out,
b570: 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20   azCol[i]);.    
b580: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 61      }.        ra
b590: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
b5a0: 22 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20  "\n");.      }. 
b5b0: 20 20 20 20 20 70 2d 3e 63 6e 74 2b 2b 3b 0a 20       p->cnt++;. 
b5c0: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
b5d0: 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
b5e0: 20 20 20 20 69 66 28 20 69 3e 30 20 29 20 72 61      if( i>0 ) ra
b5f0: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
b600: 20 22 2c 22 29 3b 0a 20 20 20 20 20 20 20 20 69   ",");.        i
b610: 66 28 20 28 61 7a 41 72 67 5b 69 5d 3d 3d 30 29  f( (azArg[i]==0)
b620: 20 7c 7c 20 28 61 69 54 79 70 65 20 26 26 20 61   || (aiType && a
b630: 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45  iType[i]==SQLITE
b640: 5f 4e 55 4c 4c 29 20 29 7b 0a 20 20 20 20 20 20  _NULL) ){.      
b650: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
b660: 70 2d 3e 6f 75 74 2c 22 4e 55 4c 4c 22 29 3b 0a  p->out,"NULL");.
b670: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
b680: 28 20 61 69 54 79 70 65 20 26 26 20 61 69 54 79  ( aiType && aiTy
b690: 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 54 45  pe[i]==SQLITE_TE
b6a0: 58 54 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  XT ){.          
b6b0: 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 73 74  output_quoted_st
b6c0: 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41  ring(p->out, azA
b6d0: 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[i]);.        
b6e0: 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79 70 65  }else if( aiType
b6f0: 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53   && aiType[i]==S
b700: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 29 7b  QLITE_INTEGER ){
b710: 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
b720: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
b730: 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  s", azArg[i]);. 
b740: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
b750: 20 61 69 54 79 70 65 20 26 26 20 61 69 54 79 70   aiType && aiTyp
b760: 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 46 4c 4f  e[i]==SQLITE_FLO
b770: 41 54 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  AT ){.          
b780: 63 68 61 72 20 7a 5b 35 30 5d 3b 0a 20 20 20 20  char z[50];.    
b790: 20 20 20 20 20 20 64 6f 75 62 6c 65 20 72 20 3d        double r =
b7a0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
b7b0: 64 6f 75 62 6c 65 28 70 2d 3e 70 53 74 6d 74 2c  double(p->pStmt,
b7c0: 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   i);.          s
b7d0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
b7e0: 35 30 2c 7a 2c 22 25 21 2e 32 30 67 22 2c 20 72  50,z,"%!.20g", r
b7f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77  );.          raw
b800: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
b810: 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20  "%s", z);.      
b820: 20 20 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79    }else if( aiTy
b830: 70 65 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d  pe && aiType[i]=
b840: 3d 53 51 4c 49 54 45 5f 42 4c 4f 42 20 26 26 20  =SQLITE_BLOB && 
b850: 70 2d 3e 70 53 74 6d 74 20 29 7b 0a 20 20 20 20  p->pStmt ){.    
b860: 20 20 20 20 20 20 63 6f 6e 73 74 20 76 6f 69 64        const void
b870: 20 2a 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65   *pBlob = sqlite
b880: 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 2d  3_column_blob(p-
b890: 3e 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20  >pStmt, i);.    
b8a0: 20 20 20 20 20 20 69 6e 74 20 6e 42 6c 6f 62 20        int nBlob 
b8b0: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
b8c0: 5f 62 79 74 65 73 28 70 2d 3e 70 53 74 6d 74 2c  _bytes(p->pStmt,
b8d0: 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f   i);.          o
b8e0: 75 74 70 75 74 5f 68 65 78 5f 62 6c 6f 62 28 70  utput_hex_blob(p
b8f0: 2d 3e 6f 75 74 2c 20 70 42 6c 6f 62 2c 20 6e 42  ->out, pBlob, nB
b900: 6c 6f 62 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  lob);.        }e
b910: 6c 73 65 20 69 66 28 20 69 73 4e 75 6d 62 65 72  lse if( isNumber
b920: 28 61 7a 41 72 67 5b 69 5d 2c 20 30 29 20 29 7b  (azArg[i], 0) ){
b930: 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
b940: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
b950: 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  s", azArg[i]);. 
b960: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
b970: 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f 71          output_q
b980: 75 6f 74 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e  uoted_string(p->
b990: 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a  out, azArg[i]);.
b9a0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
b9b0: 7d 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  }.      raw_prin
b9c0: 74 66 28 70 2d 3e 6f 75 74 2c 22 5c 6e 22 29 3b  tf(p->out,"\n");
b9d0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
b9e0: 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44    }.    case MOD
b9f0: 45 5f 41 73 63 69 69 3a 20 7b 0a 20 20 20 20 20  E_Ascii: {.     
ba00: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30   if( p->cnt++==0
ba10: 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65   && p->showHeade
ba20: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72  r ){.        for
ba30: 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
ba40: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66  +){.          if
ba50: 28 20 69 3e 30 20 29 20 75 74 66 38 5f 70 72 69  ( i>0 ) utf8_pri
ba60: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
ba70: 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  , p->colSeparato
ba80: 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 75 74  r);.          ut
ba90: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
baa0: 2c 22 25 73 22 2c 61 7a 43 6f 6c 5b 69 5d 20 3f  ,"%s",azCol[i] ?
bab0: 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b   azCol[i] : "");
bac0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
bad0: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
bae0: 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e  ->out, "%s", p->
baf0: 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20  rowSeparator);. 
bb00: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
bb10: 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61   azArg==0 ) brea
bb20: 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  k;.      for(i=0
bb30: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
bb40: 20 20 20 20 20 20 20 20 69 66 28 20 69 3e 30 20          if( i>0 
bb50: 29 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d  ) utf8_printf(p-
bb60: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63  >out, "%s", p->c
bb70: 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  olSeparator);.  
bb80: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
bb90: 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22 2c 61 7a  f(p->out,"%s",az
bba0: 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69  Arg[i] ? azArg[i
bbb0: 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65  ] : p->nullValue
bbc0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
bbd0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
bbe0: 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f  out, "%s", p->ro
bbf0: 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20  wSeparator);.   
bc00: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
bc10: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
bc20: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73  }../*.** This is
bc30: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f   the callback ro
bc40: 75 74 69 6e 65 20 74 68 61 74 20 74 68 65 20 53  utine that the S
bc50: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 0a 2a 2a  QLite library.**
bc60: 20 69 6e 76 6f 6b 65 73 20 66 6f 72 20 65 61 63   invokes for eac
bc70: 68 20 72 6f 77 20 6f 66 20 61 20 71 75 65 72 79  h row of a query
bc80: 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74   result..*/.stat
bc90: 69 63 20 69 6e 74 20 63 61 6c 6c 62 61 63 6b 28  ic int callback(
bca0: 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20  void *pArg, int 
bcb0: 6e 41 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 41  nArg, char **azA
bcc0: 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  rg, char **azCol
bcd0: 29 7b 0a 20 20 2f 2a 20 73 69 6e 63 65 20 77 65  ){.  /* since we
bce0: 20 64 6f 6e 27 74 20 68 61 76 65 20 74 79 70 65   don't have type
bcf0: 20 69 6e 66 6f 2c 20 63 61 6c 6c 20 74 68 65 20   info, call the 
bd00: 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 20 77  shell_callback w
bd10: 69 74 68 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65  ith a NULL value
bd20: 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 73 68 65   */.  return she
bd30: 6c 6c 5f 63 61 6c 6c 62 61 63 6b 28 70 41 72 67  ll_callback(pArg
bd40: 2c 20 6e 41 72 67 2c 20 61 7a 41 72 67 2c 20 61  , nArg, azArg, a
bd50: 7a 43 6f 6c 2c 20 4e 55 4c 4c 29 3b 0a 7d 0a 0a  zCol, NULL);.}..
bd60: 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  /*.** This is th
bd70: 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69  e callback routi
bd80: 6e 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ne from sqlite3_
bd90: 65 78 65 63 28 29 20 74 68 61 74 20 61 70 70 65  exec() that appe
bda0: 6e 64 73 20 61 6c 6c 0a 2a 2a 20 6f 75 74 70 75  nds all.** outpu
bdb0: 74 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f  t onto the end o
bdc0: 66 20 61 20 53 68 65 6c 6c 54 65 78 74 20 6f 62  f a ShellText ob
bdd0: 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ject..*/.static 
bde0: 69 6e 74 20 63 61 70 74 75 72 65 4f 75 74 70 75  int captureOutpu
bdf0: 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a  tCallback(void *
be00: 70 41 72 67 2c 20 69 6e 74 20 6e 41 72 67 2c 20  pArg, int nArg, 
be10: 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20 63 68  char **azArg, ch
be20: 61 72 20 2a 2a 61 7a 29 7b 0a 20 20 53 68 65 6c  ar **az){.  Shel
be30: 6c 54 65 78 74 20 2a 70 20 3d 20 28 53 68 65 6c  lText *p = (Shel
be40: 6c 54 65 78 74 2a 29 70 41 72 67 3b 0a 20 20 69  lText*)pArg;.  i
be50: 6e 74 20 69 3b 0a 20 20 55 4e 55 53 45 44 5f 50  nt i;.  UNUSED_P
be60: 41 52 41 4d 45 54 45 52 28 61 7a 29 3b 0a 20 20  ARAMETER(az);.  
be70: 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 72  if( azArg==0 ) r
be80: 65 74 75 72 6e 20 30 3b 0a 20 20 69 66 28 20 70  eturn 0;.  if( p
be90: 2d 3e 6e 20 29 20 61 70 70 65 6e 64 54 65 78 74  ->n ) appendText
bea0: 28 70 2c 20 22 7c 22 2c 20 30 29 3b 0a 20 20 66  (p, "|", 0);.  f
beb0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
bec0: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 20  i++){.    if( i 
bed0: 29 20 61 70 70 65 6e 64 54 65 78 74 28 70 2c 20  ) appendText(p, 
bee0: 22 2c 22 2c 20 30 29 3b 0a 20 20 20 20 69 66 28  ",", 0);.    if(
bef0: 20 61 7a 41 72 67 5b 69 5d 20 29 20 61 70 70 65   azArg[i] ) appe
bf00: 6e 64 54 65 78 74 28 70 2c 20 61 7a 41 72 67 5b  ndText(p, azArg[
bf10: 69 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65  i], 0);.  }.  re
bf20: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
bf30: 20 47 65 6e 65 72 61 74 65 20 61 6e 20 61 70 70   Generate an app
bf40: 72 6f 70 72 69 61 74 65 20 53 45 4c 46 54 45 53  ropriate SELFTES
bf50: 54 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d  T table in the m
bf60: 61 69 6e 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f  ain database..*/
bf70: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 72 65  .static void cre
bf80: 61 74 65 53 65 6c 66 74 65 73 74 54 61 62 6c 65  ateSelftestTable
bf90: 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b  (ShellState *p){
bfa0: 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67  .  char *zErrMsg
bfb0: 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f   = 0;.  sqlite3_
bfc0: 65 78 65 63 28 70 2d 3e 64 62 2c 0a 20 20 20 20  exec(p->db,.    
bfd0: 22 53 41 56 45 50 4f 49 4e 54 20 73 65 6c 66 74  "SAVEPOINT selft
bfe0: 65 73 74 5f 69 6e 69 74 3b 5c 6e 22 0a 20 20 20  est_init;\n".   
bff0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49   "CREATE TABLE I
c000: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 73 65 6c  F NOT EXISTS sel
c010: 66 74 65 73 74 28 5c 6e 22 0a 20 20 20 20 22 20  ftest(\n".    " 
c020: 20 74 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49   tno INTEGER PRI
c030: 4d 41 52 59 20 4b 45 59 2c 5c 6e 22 20 20 20 2f  MARY KEY,\n"   /
c040: 2a 20 54 65 73 74 20 6e 75 6d 62 65 72 20 2a 2f  * Test number */
c050: 0a 20 20 20 20 22 20 20 6f 70 20 54 45 58 54 2c  .    "  op TEXT,
c060: 5c 6e 22 20 20 20 20 20 20 20 20 20 20 20 20 20  \n"             
c070: 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 6f        /* Operato
c080: 72 3a 20 20 6d 65 6d 6f 20 72 75 6e 20 2a 2f 0a  r:  memo run */.
c090: 20 20 20 20 22 20 20 63 6d 64 20 54 45 58 54 2c      "  cmd TEXT,
c0a0: 5c 6e 22 20 20 20 20 20 20 20 20 20 20 20 20 20  \n"             
c0b0: 20 20 20 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20       /* Command 
c0c0: 74 65 78 74 20 2a 2f 0a 20 20 20 20 22 20 20 61  text */.    "  a
c0d0: 6e 73 20 54 45 58 54 5c 6e 22 20 20 20 20 20 20  ns TEXT\n"      
c0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c0f0: 44 65 73 69 72 65 64 20 61 6e 73 77 65 72 20 2a  Desired answer *
c100: 2f 0a 20 20 20 20 22 29 3b 22 0a 20 20 20 20 22  /.    ");".    "
c110: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
c120: 45 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 28  E [_shell$self](
c130: 6f 70 2c 63 6d 64 2c 61 6e 73 29 3b 5c 6e 22 0a  op,cmd,ans);\n".
c140: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
c150: 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 28 72   [_shell$self](r
c160: 6f 77 69 64 2c 6f 70 2c 63 6d 64 29 5c 6e 22 0a  owid,op,cmd)\n".
c170: 20 20 20 20 22 20 20 56 41 4c 55 45 53 28 63 6f      "  VALUES(co
c180: 61 6c 65 73 63 65 28 28 53 45 4c 45 43 54 20 28  alesce((SELECT (
c190: 6d 61 78 28 74 6e 6f 29 2b 31 30 30 29 2f 31 30  max(tno)+100)/10
c1a0: 20 46 52 4f 4d 20 73 65 6c 66 74 65 73 74 29 2c   FROM selftest),
c1b0: 31 30 29 2c 5c 6e 22 0a 20 20 20 20 22 20 20 20  10),\n".    "   
c1c0: 20 20 20 20 20 20 27 6d 65 6d 6f 27 2c 27 54 65        'memo','Te
c1d0: 73 74 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  sts generated by
c1e0: 20 2d 2d 69 6e 69 74 27 29 3b 5c 6e 22 0a 20 20   --init');\n".  
c1f0: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 5b    "INSERT INTO [
c200: 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 5c 6e 22 0a  _shell$self]\n".
c210: 20 20 20 20 22 20 20 53 45 4c 45 43 54 20 27 72      "  SELECT 'r
c220: 75 6e 27 2c 5c 6e 22 0a 20 20 20 20 22 20 20 20  un',\n".    "   
c230: 20 27 53 45 4c 45 43 54 20 68 65 78 28 73 68 61   'SELECT hex(sha
c240: 33 5f 71 75 65 72 79 28 27 27 53 45 4c 45 43 54  3_query(''SELECT
c250: 20 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e   type,name,tbl_n
c260: 61 6d 65 2c 73 71 6c 20 22 0a 20 20 20 20 20 20  ame,sql ".      
c270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c280: 20 20 20 20 20 20 20 20 20 20 20 22 46 52 4f 4d             "FROM
c290: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 4f   sqlite_master O
c2a0: 52 44 45 52 20 42 59 20 32 27 27 2c 32 32 34 29  RDER BY 2'',224)
c2b0: 29 27 2c 5c 6e 22 0a 20 20 20 20 22 20 20 20 20  )',\n".    "    
c2c0: 68 65 78 28 73 68 61 33 5f 71 75 65 72 79 28 27  hex(sha3_query('
c2d0: 53 45 4c 45 43 54 20 74 79 70 65 2c 6e 61 6d 65  SELECT type,name
c2e0: 2c 74 62 6c 5f 6e 61 6d 65 2c 73 71 6c 20 22 0a  ,tbl_name,sql ".
c2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c300: 20 20 20 20 20 20 20 20 20 20 22 46 52 4f 4d 20            "FROM 
c310: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 4f 52  sqlite_master OR
c320: 44 45 52 20 42 59 20 32 27 2c 32 32 34 29 29 3b  DER BY 2',224));
c330: 5c 6e 22 0a 20 20 20 20 22 49 4e 53 45 52 54 20  \n".    "INSERT 
c340: 49 4e 54 4f 20 5b 5f 73 68 65 6c 6c 24 73 65 6c  INTO [_shell$sel
c350: 66 5d 5c 6e 22 0a 20 20 20 20 22 20 20 53 45 4c  f]\n".    "  SEL
c360: 45 43 54 20 27 72 75 6e 27 2c 22 0a 20 20 20 20  ECT 'run',".    
c370: 22 20 20 20 20 27 53 45 4c 45 43 54 20 68 65 78  "    'SELECT hex
c380: 28 73 68 61 33 5f 71 75 65 72 79 28 27 27 53 45  (sha3_query(''SE
c390: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5c 22 27 20  LECT * FROM \"' 
c3a0: 7c 7c 22 0a 20 20 20 20 22 20 20 20 20 20 20 20  ||".    "       
c3b0: 20 70 72 69 6e 74 66 28 27 25 77 27 2c 6e 61 6d   printf('%w',nam
c3c0: 65 29 20 7c 7c 20 27 5c 22 20 4e 4f 54 20 49 4e  e) || '\" NOT IN
c3d0: 44 45 58 45 44 27 27 2c 32 32 34 29 29 27 2c 5c  DEXED'',224))',\
c3e0: 6e 22 0a 20 20 20 20 22 20 20 20 20 68 65 78 28  n".    "    hex(
c3f0: 73 68 61 33 5f 71 75 65 72 79 28 70 72 69 6e 74  sha3_query(print
c400: 66 28 27 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  f('SELECT * FROM
c410: 20 5c 22 25 77 5c 22 20 4e 4f 54 20 49 4e 44 45   \"%w\" NOT INDE
c420: 58 45 44 27 2c 6e 61 6d 65 29 2c 32 32 34 29 29  XED',name),224))
c430: 5c 6e 22 0a 20 20 20 20 22 20 20 46 52 4f 4d 20  \n".    "  FROM 
c440: 28 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 53 45  (\n".    "    SE
c450: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
c460: 71 6c 69 74 65 5f 6d 61 73 74 65 72 5c 6e 22 0a  qlite_master\n".
c470: 20 20 20 20 22 20 20 20 20 20 57 48 45 52 45 20      "     WHERE 
c480: 74 79 70 65 3d 27 74 61 62 6c 65 27 5c 6e 22 0a  type='table'\n".
c490: 20 20 20 20 22 20 20 20 20 20 20 20 41 4e 44 20      "       AND 
c4a0: 6e 61 6d 65 3c 3e 27 73 65 6c 66 74 65 73 74 27  name<>'selftest'
c4b0: 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20 20 20  \n".    "       
c4c0: 41 4e 44 20 63 6f 61 6c 65 73 63 65 28 72 6f 6f  AND coalesce(roo
c4d0: 74 70 61 67 65 2c 30 29 3e 30 5c 6e 22 0a 20 20  tpage,0)>0\n".  
c4e0: 20 20 22 20 20 29 5c 6e 22 0a 20 20 20 20 22 20    "  )\n".    " 
c4f0: 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 3b 5c 6e  ORDER BY name;\n
c500: 22 0a 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e  ".    "INSERT IN
c510: 54 4f 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d  TO [_shell$self]
c520: 5c 6e 22 0a 20 20 20 20 22 20 20 56 41 4c 55 45  \n".    "  VALUE
c530: 53 28 27 72 75 6e 27 2c 27 50 52 41 47 4d 41 20  S('run','PRAGMA 
c540: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 27  integrity_check'
c550: 2c 27 6f 6b 27 29 3b 5c 6e 22 0a 20 20 20 20 22  ,'ok');\n".    "
c560: 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 65 6c 66  INSERT INTO self
c570: 74 65 73 74 28 74 6e 6f 2c 6f 70 2c 63 6d 64 2c  test(tno,op,cmd,
c580: 61 6e 73 29 22 0a 20 20 20 20 22 20 20 53 45 4c  ans)".    "  SEL
c590: 45 43 54 20 72 6f 77 69 64 2a 31 30 2c 6f 70 2c  ECT rowid*10,op,
c5a0: 63 6d 64 2c 61 6e 73 20 46 52 4f 4d 20 5b 5f 73  cmd,ans FROM [_s
c5b0: 68 65 6c 6c 24 73 65 6c 66 5d 3b 5c 6e 22 0a 20  hell$self];\n". 
c5c0: 20 20 20 22 44 52 4f 50 20 54 41 42 4c 45 20 5b     "DROP TABLE [
c5d0: 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 3b 22 0a 20  _shell$self];". 
c5e0: 20 20 20 2c 30 2c 30 2c 26 7a 45 72 72 4d 73 67     ,0,0,&zErrMsg
c5f0: 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 4d 73 67  );.  if( zErrMsg
c600: 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69   ){.    utf8_pri
c610: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53 45 4c  ntf(stderr, "SEL
c620: 46 54 45 53 54 20 69 6e 69 74 69 61 6c 69 7a 61  FTEST initializa
c630: 74 69 6f 6e 20 66 61 69 6c 75 72 65 3a 20 25 73  tion failure: %s
c640: 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20  \n", zErrMsg);. 
c650: 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
c660: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20  zErrMsg);.  }.  
c670: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e  sqlite3_exec(p->
c680: 64 62 2c 20 22 52 45 4c 45 41 53 45 20 73 65 6c  db, "RELEASE sel
c690: 66 74 65 73 74 5f 69 6e 69 74 22 2c 30 2c 30 2c  ftest_init",0,0,
c6a0: 30 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 53 65  0);.}.../*.** Se
c6b0: 74 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f  t the destinatio
c6c0: 6e 20 74 61 62 6c 65 20 66 69 65 6c 64 20 6f 66  n table field of
c6d0: 20 74 68 65 20 53 68 65 6c 6c 53 74 61 74 65 20   the ShellState 
c6e0: 73 74 72 75 63 74 75 72 65 20 74 6f 0a 2a 2a 20  structure to.** 
c6f0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
c700: 74 61 62 6c 65 20 67 69 76 65 6e 2e 20 20 45 73  table given.  Es
c710: 63 61 70 65 20 61 6e 79 20 71 75 6f 74 65 20 63  cape any quote c
c720: 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65  haracters in the
c730: 0a 2a 2a 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a  .** table name..
c740: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73  */.static void s
c750: 65 74 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 53 68  et_table_name(Sh
c760: 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f 6e  ellState *p, con
c770: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 7b  st char *zName){
c780: 0a 20 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 63  .  int i, n;.  c
c790: 68 61 72 20 63 51 75 6f 74 65 3b 0a 20 20 63 68  har cQuote;.  ch
c7a0: 61 72 20 2a 7a 3b 0a 0a 20 20 69 66 28 20 70 2d  ar *z;..  if( p-
c7b0: 3e 7a 44 65 73 74 54 61 62 6c 65 20 29 7b 0a 20  >zDestTable ){. 
c7c0: 20 20 20 66 72 65 65 28 70 2d 3e 7a 44 65 73 74     free(p->zDest
c7d0: 54 61 62 6c 65 29 3b 0a 20 20 20 20 70 2d 3e 7a  Table);.    p->z
c7e0: 44 65 73 74 54 61 62 6c 65 20 3d 20 30 3b 0a 20  DestTable = 0;. 
c7f0: 20 7d 0a 20 20 69 66 28 20 7a 4e 61 6d 65 3d 3d   }.  if( zName==
c800: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 63 51  0 ) return;.  cQ
c810: 75 6f 74 65 20 3d 20 71 75 6f 74 65 43 68 61 72  uote = quoteChar
c820: 28 7a 4e 61 6d 65 29 3b 0a 20 20 6e 20 3d 20 73  (zName);.  n = s
c830: 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a  trlen30(zName);.
c840: 20 20 69 66 28 20 63 51 75 6f 74 65 20 29 20 6e    if( cQuote ) n
c850: 20 2b 3d 20 6e 2b 32 3b 0a 20 20 7a 20 3d 20 70   += n+2;.  z = p
c860: 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20 3d 20 6d  ->zDestTable = m
c870: 61 6c 6c 6f 63 28 20 6e 2b 31 20 29 3b 0a 20 20  alloc( n+1 );.  
c880: 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
c890: 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
c8a0: 72 2c 22 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66  r,"Error: out of
c8b0: 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20   memory\n");.   
c8c0: 20 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a 20 20   exit(1);.  }.  
c8d0: 6e 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 51 75  n = 0;.  if( cQu
c8e0: 6f 74 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d 20 63  ote ) z[n++] = c
c8f0: 51 75 6f 74 65 3b 0a 20 20 66 6f 72 28 69 3d 30  Quote;.  for(i=0
c900: 3b 20 7a 4e 61 6d 65 5b 69 5d 3b 20 69 2b 2b 29  ; zName[i]; i++)
c910: 7b 0a 20 20 20 20 7a 5b 6e 2b 2b 5d 20 3d 20 7a  {.    z[n++] = z
c920: 4e 61 6d 65 5b 69 5d 3b 0a 20 20 20 20 69 66 28  Name[i];.    if(
c930: 20 7a 4e 61 6d 65 5b 69 5d 3d 3d 63 51 75 6f 74   zName[i]==cQuot
c940: 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d 20 63 51 75  e ) z[n++] = cQu
c950: 6f 74 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63  ote;.  }.  if( c
c960: 51 75 6f 74 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d  Quote ) z[n++] =
c970: 20 63 51 75 6f 74 65 3b 0a 20 20 7a 5b 6e 5d 20   cQuote;.  z[n] 
c980: 3d 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45  = 0;.}.../*.** E
c990: 78 65 63 75 74 65 20 61 20 71 75 65 72 79 20 73  xecute a query s
c9a0: 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 77 69  tatement that wi
c9b0: 6c 6c 20 67 65 6e 65 72 61 74 65 20 53 51 4c 20  ll generate SQL 
c9c0: 6f 75 74 70 75 74 2e 20 20 50 72 69 6e 74 0a 2a  output.  Print.*
c9d0: 2a 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  * the result col
c9e0: 75 6d 6e 73 2c 20 63 6f 6d 6d 61 2d 73 65 70 61  umns, comma-sepa
c9f0: 72 61 74 65 64 2c 20 6f 6e 20 61 20 6c 69 6e 65  rated, on a line
ca00: 20 61 6e 64 20 74 68 65 6e 20 61 64 64 20 61 0a   and then add a.
ca10: 2a 2a 20 73 65 6d 69 63 6f 6c 6f 6e 20 74 65 72  ** semicolon ter
ca20: 6d 69 6e 61 74 6f 72 20 74 6f 20 74 68 65 20 65  minator to the e
ca30: 6e 64 20 6f 66 20 74 68 61 74 20 6c 69 6e 65 2e  nd of that line.
ca40: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 6e 75  .**.** If the nu
ca50: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
ca60: 69 73 20 31 20 61 6e 64 20 74 68 61 74 20 63 6f  is 1 and that co
ca70: 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 74 65  lumn contains te
ca80: 78 74 20 22 2d 2d 22 0a 2a 2a 20 74 68 65 6e 20  xt "--".** then 
ca90: 77 72 69 74 65 20 74 68 65 20 73 65 6d 69 63 6f  write the semico
caa0: 6c 6f 6e 20 6f 6e 20 61 20 73 65 70 61 72 61 74  lon on a separat
cab0: 65 20 6c 69 6e 65 2e 20 20 54 68 61 74 20 77 61  e line.  That wa
cac0: 79 2c 20 69 66 20 61 0a 2a 2a 20 22 2d 2d 22 20  y, if a.** "--" 
cad0: 63 6f 6d 6d 65 6e 74 20 6f 63 63 75 72 73 20 61  comment occurs a
cae0: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
caf0: 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 20   statement, the 
cb00: 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 77 6f 6e 27 74  comment.** won't
cb10: 20 63 6f 6e 73 75 6d 65 20 74 68 65 20 73 65 6d   consume the sem
cb20: 69 63 6f 6c 6f 6e 20 74 65 72 6d 69 6e 61 74 6f  icolon terminato
cb30: 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  r..*/.static int
cb40: 20 72 75 6e 5f 74 61 62 6c 65 5f 64 75 6d 70 5f   run_table_dump_
cb50: 71 75 65 72 79 28 0a 20 20 53 68 65 6c 6c 53 74  query(.  ShellSt
cb60: 61 74 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20  ate *p,         
cb70: 20 20 2f 2a 20 51 75 65 72 79 20 63 6f 6e 74 65    /* Query conte
cb80: 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  xt */.  const ch
cb90: 61 72 20 2a 7a 53 65 6c 65 63 74 2c 20 20 20 20  ar *zSelect,    
cba0: 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65   /* SELECT state
cbb0: 6d 65 6e 74 20 74 6f 20 65 78 74 72 61 63 74 20  ment to extract 
cbc0: 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e  content */.  con
cbd0: 73 74 20 63 68 61 72 20 2a 7a 46 69 72 73 74 52  st char *zFirstR
cbe0: 6f 77 20 20 20 20 2f 2a 20 50 72 69 6e 74 20 62  ow    /* Print b
cbf0: 65 66 6f 72 65 20 66 69 72 73 74 20 72 6f 77 2c  efore first row,
cc00: 20 69 66 20 6e 6f 74 20 4e 55 4c 4c 20 2a 2f 0a   if not NULL */.
cc10: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
cc20: 74 20 2a 70 53 65 6c 65 63 74 3b 0a 20 20 69 6e  t *pSelect;.  in
cc30: 74 20 72 63 3b 0a 20 20 69 6e 74 20 6e 52 65 73  t rc;.  int nRes
cc40: 75 6c 74 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  ult;.  int i;.  
cc50: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20  const char *z;. 
cc60: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
cc70: 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
cc80: 7a 53 65 6c 65 63 74 2c 20 2d 31 2c 20 26 70 53  zSelect, -1, &pS
cc90: 65 6c 65 63 74 2c 20 30 29 3b 0a 20 20 69 66 28  elect, 0);.  if(
cca0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc!=SQLITE_OK |
ccb0: 7c 20 21 70 53 65 6c 65 63 74 20 29 7b 0a 20 20  | !pSelect ){.  
ccc0: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
ccd0: 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 20 45 52 52  >out, "/**** ERR
cce0: 4f 52 3a 20 28 25 64 29 20 25 73 20 2a 2a 2a 2a  OR: (%d) %s ****
ccf0: 2a 2f 5c 6e 22 2c 20 72 63 2c 0a 20 20 20 20 20  */\n", rc,.     
cd00: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
cd10: 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29  e3_errmsg(p->db)
cd20: 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26 30  );.    if( (rc&0
cd30: 78 66 66 29 21 3d 53 51 4c 49 54 45 5f 43 4f 52  xff)!=SQLITE_COR
cd40: 52 55 50 54 20 29 20 70 2d 3e 6e 45 72 72 2b 2b  RUPT ) p->nErr++
cd50: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b  ;.    return rc;
cd60: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
cd70: 74 65 33 5f 73 74 65 70 28 70 53 65 6c 65 63 74  te3_step(pSelect
cd80: 29 3b 0a 20 20 6e 52 65 73 75 6c 74 20 3d 20 73  );.  nResult = s
cd90: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
cda0: 75 6e 74 28 70 53 65 6c 65 63 74 29 3b 0a 20 20  unt(pSelect);.  
cdb0: 77 68 69 6c 65 28 20 72 63 3d 3d 53 51 4c 49 54  while( rc==SQLIT
cdc0: 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69 66 28  E_ROW ){.    if(
cdd0: 20 7a 46 69 72 73 74 52 6f 77 20 29 7b 0a 20 20   zFirstRow ){.  
cde0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
cdf0: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 46  p->out, "%s", zF
ce00: 69 72 73 74 52 6f 77 29 3b 0a 20 20 20 20 20 20  irstRow);.      
ce10: 7a 46 69 72 73 74 52 6f 77 20 3d 20 30 3b 0a 20  zFirstRow = 0;. 
ce20: 20 20 20 7d 0a 20 20 20 20 7a 20 3d 20 28 63 6f     }.    z = (co
ce30: 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
ce40: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53  3_column_text(pS
ce50: 65 6c 65 63 74 2c 20 30 29 3b 0a 20 20 20 20 75  elect, 0);.    u
ce60: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
ce70: 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20  t, "%s", z);.   
ce80: 20 66 6f 72 28 69 3d 31 3b 20 69 3c 6e 52 65 73   for(i=1; i<nRes
ce90: 75 6c 74 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ult; i++){.     
cea0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
ceb0: 6f 75 74 2c 20 22 2c 25 73 22 2c 20 73 71 6c 69  out, ",%s", sqli
cec0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
ced0: 70 53 65 6c 65 63 74 2c 20 69 29 29 3b 0a 20 20  pSelect, i));.  
cee0: 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 3d 3d 30    }.    if( z==0
cef0: 20 29 20 7a 20 3d 20 22 22 3b 0a 20 20 20 20 77   ) z = "";.    w
cf00: 68 69 6c 65 28 20 7a 5b 30 5d 20 26 26 20 28 7a  hile( z[0] && (z
cf10: 5b 30 5d 21 3d 27 2d 27 20 7c 7c 20 7a 5b 31 5d  [0]!='-' || z[1]
cf20: 21 3d 27 2d 27 29 20 29 20 7a 2b 2b 3b 0a 20 20  !='-') ) z++;.  
cf30: 20 20 69 66 28 20 7a 5b 30 5d 20 29 7b 0a 20 20    if( z[0] ){.  
cf40: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
cf50: 2d 3e 6f 75 74 2c 20 22 5c 6e 3b 5c 6e 22 29 3b  ->out, "\n;\n");
cf60: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
cf70: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
cf80: 6f 75 74 2c 20 22 3b 5c 6e 22 29 3b 0a 20 20 20  out, ";\n");.   
cf90: 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69   }.    rc = sqli
cfa0: 74 65 33 5f 73 74 65 70 28 70 53 65 6c 65 63 74  te3_step(pSelect
cfb0: 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  );.  }.  rc = sq
cfc0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
cfd0: 53 65 6c 65 63 74 29 3b 0a 20 20 69 66 28 20 72  Select);.  if( r
cfe0: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
cff0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
d000: 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 20 45  p->out, "/**** E
d010: 52 52 4f 52 3a 20 28 25 64 29 20 25 73 20 2a 2a  RROR: (%d) %s **
d020: 2a 2a 2a 2f 5c 6e 22 2c 20 72 63 2c 0a 20 20 20  ***/\n", rc,.   
d030: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
d040: 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64  ite3_errmsg(p->d
d050: 62 29 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63  b));.    if( (rc
d060: 26 30 78 66 66 29 21 3d 53 51 4c 49 54 45 5f 43  &0xff)!=SQLITE_C
d070: 4f 52 52 55 50 54 20 29 20 70 2d 3e 6e 45 72 72  ORRUPT ) p->nErr
d080: 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  ++;.  }.  return
d090: 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c   rc;.}../*.** Al
d0a0: 6c 6f 63 61 74 65 20 73 70 61 63 65 20 61 6e 64  locate space and
d0b0: 20 73 61 76 65 20 6f 66 66 20 63 75 72 72 65 6e   save off curren
d0c0: 74 20 65 72 72 6f 72 20 73 74 72 69 6e 67 2e 0a  t error string..
d0d0: 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a  */.static char *
d0e0: 73 61 76 65 5f 65 72 72 5f 6d 73 67 28 0a 20 20  save_err_msg(.  
d0f0: 73 71 6c 69 74 65 33 20 2a 64 62 20 20 20 20 20  sqlite3 *db     
d100: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
d110: 73 65 20 74 6f 20 71 75 65 72 79 20 2a 2f 0a 29  se to query */.)
d120: 7b 0a 20 20 69 6e 74 20 6e 45 72 72 4d 73 67 20  {.  int nErrMsg 
d130: 3d 20 31 2b 73 74 72 6c 65 6e 33 30 28 73 71 6c  = 1+strlen30(sql
d140: 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 29  ite3_errmsg(db))
d150: 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  ;.  char *zErrMs
d160: 67 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  g = sqlite3_mall
d170: 6f 63 36 34 28 6e 45 72 72 4d 73 67 29 3b 0a 20  oc64(nErrMsg);. 
d180: 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a   if( zErrMsg ){.
d190: 20 20 20 20 6d 65 6d 63 70 79 28 7a 45 72 72 4d      memcpy(zErrM
d1a0: 73 67 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  sg, sqlite3_errm
d1b0: 73 67 28 64 62 29 2c 20 6e 45 72 72 4d 73 67 29  sg(db), nErrMsg)
d1c0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a  ;.  }.  return z
d1d0: 45 72 72 4d 73 67 3b 0a 7d 0a 0a 23 69 66 64 65  ErrMsg;.}..#ifde
d1e0: 66 20 5f 5f 6c 69 6e 75 78 5f 5f 0a 2f 2a 0a 2a  f __linux__./*.*
d1f0: 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 69 73  * Attempt to dis
d200: 70 6c 61 79 20 49 2f 4f 20 73 74 61 74 73 20 6f  play I/O stats o
d210: 6e 20 4c 69 6e 75 78 20 75 73 69 6e 67 20 2f 70  n Linux using /p
d220: 72 6f 63 2f 50 49 44 2f 69 6f 0a 2a 2f 0a 73 74  roc/PID/io.*/.st
d230: 61 74 69 63 20 76 6f 69 64 20 64 69 73 70 6c 61  atic void displa
d240: 79 4c 69 6e 75 78 49 6f 53 74 61 74 73 28 46 49  yLinuxIoStats(FI
d250: 4c 45 20 2a 6f 75 74 29 7b 0a 20 20 46 49 4c 45  LE *out){.  FILE
d260: 20 2a 69 6e 3b 0a 20 20 63 68 61 72 20 7a 5b 32   *in;.  char z[2
d270: 30 30 5d 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  00];.  sqlite3_s
d280: 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a  nprintf(sizeof(z
d290: 29 2c 20 7a 2c 20 22 2f 70 72 6f 63 2f 25 64 2f  ), z, "/proc/%d/
d2a0: 69 6f 22 2c 20 67 65 74 70 69 64 28 29 29 3b 0a  io", getpid());.
d2b0: 20 20 69 6e 20 3d 20 66 6f 70 65 6e 28 7a 2c 20    in = fopen(z, 
d2c0: 22 72 62 22 29 3b 0a 20 20 69 66 28 20 69 6e 3d  "rb");.  if( in=
d2d0: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 77  =0 ) return;.  w
d2e0: 68 69 6c 65 28 20 66 67 65 74 73 28 7a 2c 20 73  hile( fgets(z, s
d2f0: 69 7a 65 6f 66 28 7a 29 2c 20 69 6e 29 21 3d 30  izeof(z), in)!=0
d300: 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
d310: 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 0a 20 20  onst struct {.  
d320: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
d330: 7a 50 61 74 74 65 72 6e 3b 0a 20 20 20 20 20 20  zPattern;.      
d340: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 65 73  const char *zDes
d350: 63 3b 0a 20 20 20 20 7d 20 61 54 72 61 6e 73 5b  c;.    } aTrans[
d360: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 72  ] = {.      { "r
d370: 63 68 61 72 3a 20 22 2c 20 20 20 20 20 20 20 20  char: ",        
d380: 20 20 20 20 20 20 20 20 20 20 22 42 79 74 65 73            "Bytes
d390: 20 72 65 63 65 69 76 65 64 20 62 79 20 72 65 61   received by rea
d3a0: 64 28 29 3a 22 20 7d 2c 0a 20 20 20 20 20 20 7b  d():" },.      {
d3b0: 20 22 77 63 68 61 72 3a 20 22 2c 20 20 20 20 20   "wchar: ",     
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 79               "By
d3d0: 74 65 73 20 73 65 6e 74 20 74 6f 20 77 72 69 74  tes sent to writ
d3e0: 65 28 29 3a 22 20 20 20 20 7d 2c 0a 20 20 20 20  e():"    },.    
d3f0: 20 20 7b 20 22 73 79 73 63 72 3a 20 22 2c 20 20    { "syscr: ",  
d400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d410: 22 52 65 61 64 28 29 20 73 79 73 74 65 6d 20 63  "Read() system c
d420: 61 6c 6c 73 3a 22 20 20 20 20 20 20 7d 2c 0a 20  alls:"      },. 
d430: 20 20 20 20 20 7b 20 22 73 79 73 63 77 3a 20 22       { "syscw: "
d440: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
d450: 20 20 20 22 57 72 69 74 65 28 29 20 73 79 73 74     "Write() syst
d460: 65 6d 20 63 61 6c 6c 73 3a 22 20 20 20 20 20 7d  em calls:"     }
d470: 2c 0a 20 20 20 20 20 20 7b 20 22 72 65 61 64 5f  ,.      { "read_
d480: 62 79 74 65 73 3a 20 22 2c 20 20 20 20 20 20 20  bytes: ",       
d490: 20 20 20 20 20 20 22 42 79 74 65 73 20 72 65 61        "Bytes rea
d4a0: 64 20 66 72 6f 6d 20 73 74 6f 72 61 67 65 3a 22  d from storage:"
d4b0: 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 77 72    },.      { "wr
d4c0: 69 74 65 5f 62 79 74 65 73 3a 20 22 2c 20 20 20  ite_bytes: ",   
d4d0: 20 20 20 20 20 20 20 20 20 22 42 79 74 65 73 20           "Bytes 
d4e0: 77 72 69 74 74 65 6e 20 74 6f 20 73 74 6f 72 61  written to stora
d4f0: 67 65 3a 22 20 7d 2c 0a 20 20 20 20 20 20 7b 20  ge:" },.      { 
d500: 22 63 61 6e 63 65 6c 6c 65 64 5f 77 72 69 74 65  "cancelled_write
d510: 5f 62 79 74 65 73 3a 20 22 2c 20 20 22 43 61 6e  _bytes: ",  "Can
d520: 63 65 6c 6c 65 64 20 77 72 69 74 65 20 62 79 74  celled write byt
d530: 65 73 3a 22 20 20 20 20 7d 2c 0a 20 20 20 20 7d  es:"    },.    }
d540: 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  ;.    int i;.   
d550: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61   for(i=0; i<Arra
d560: 79 53 69 7a 65 28 61 54 72 61 6e 73 29 3b 20 69  ySize(aTrans); i
d570: 2b 2b 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e  ++){.      int n
d580: 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 61   = (int)strlen(a
d590: 54 72 61 6e 73 5b 69 5d 2e 7a 50 61 74 74 65 72  Trans[i].zPatter
d5a0: 6e 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 74  n);.      if( st
d5b0: 72 6e 63 6d 70 28 61 54 72 61 6e 73 5b 69 5d 2e  rncmp(aTrans[i].
d5c0: 7a 50 61 74 74 65 72 6e 2c 20 7a 2c 20 6e 29 3d  zPattern, z, n)=
d5d0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74  =0 ){.        ut
d5e0: 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  f8_printf(out, "
d5f0: 25 2d 33 36 73 20 25 73 22 2c 20 61 54 72 61 6e  %-36s %s", aTran
d600: 73 5b 69 5d 2e 7a 44 65 73 63 2c 20 26 7a 5b 6e  s[i].zDesc, &z[n
d610: 5d 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  ]);.        brea
d620: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
d630: 0a 20 20 7d 0a 20 20 66 63 6c 6f 73 65 28 69 6e  .  }.  fclose(in
d640: 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  );.}.#endif../*.
d650: 2a 2a 20 44 69 73 70 6c 61 79 20 61 20 73 69 6e  ** Display a sin
d660: 67 6c 65 20 6c 69 6e 65 20 6f 66 20 73 74 61 74  gle line of stat
d670: 75 73 20 75 73 69 6e 67 20 36 34 2d 62 69 74 20  us using 64-bit 
d680: 76 61 6c 75 65 73 2e 0a 2a 2f 0a 73 74 61 74 69  values..*/.stati
d690: 63 20 76 6f 69 64 20 64 69 73 70 6c 61 79 53 74  c void displaySt
d6a0: 61 74 4c 69 6e 65 28 0a 20 20 53 68 65 6c 6c 53  atLine(.  ShellS
d6b0: 74 61 74 65 20 2a 70 2c 20 20 20 20 20 20 20 20  tate *p,        
d6c0: 20 20 20 20 2f 2a 20 54 68 65 20 73 68 65 6c 6c      /* The shell
d6d0: 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 63 68   context */.  ch
d6e0: 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 20 20 20 20  ar *zLabel,     
d6f0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 62 65 6c          /* Label
d700: 20 66 6f 72 20 74 68 69 73 20 6f 6e 65 20 6c 69   for this one li
d710: 6e 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 46  ne */.  char *zF
d720: 6f 72 6d 61 74 2c 20 20 20 20 20 20 20 20 20 20  ormat,          
d730: 20 20 2f 2a 20 46 6f 72 6d 61 74 20 66 6f 72 20    /* Format for 
d740: 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  the result */.  
d750: 69 6e 74 20 69 53 74 61 74 75 73 43 74 72 6c 2c  int iStatusCtrl,
d760: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
d770: 63 68 20 73 74 61 74 75 73 20 74 6f 20 64 69 73  ch status to dis
d780: 70 6c 61 79 20 2a 2f 0a 20 20 69 6e 74 20 62 52  play */.  int bR
d790: 65 73 65 74 20 20 20 20 20 20 20 20 20 20 20 20  eset            
d7a0: 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 72      /* True to r
d7b0: 65 73 65 74 20 74 68 65 20 73 74 61 74 73 20 2a  eset the stats *
d7c0: 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 69  /.){.  sqlite3_i
d7d0: 6e 74 36 34 20 69 43 75 72 20 3d 20 2d 31 3b 0a  nt64 iCur = -1;.
d7e0: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
d7f0: 69 48 69 77 74 72 20 3d 20 2d 31 3b 0a 20 20 69  iHiwtr = -1;.  i
d800: 6e 74 20 69 2c 20 6e 50 65 72 63 65 6e 74 3b 0a  nt i, nPercent;.
d810: 20 20 63 68 61 72 20 7a 4c 69 6e 65 5b 32 30 30    char zLine[200
d820: 5d 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 61  ];.  sqlite3_sta
d830: 74 75 73 36 34 28 69 53 74 61 74 75 73 43 74 72  tus64(iStatusCtr
d840: 6c 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77 74  l, &iCur, &iHiwt
d850: 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 66 6f  r, bReset);.  fo
d860: 72 28 69 3d 30 2c 20 6e 50 65 72 63 65 6e 74 3d  r(i=0, nPercent=
d870: 30 3b 20 7a 46 6f 72 6d 61 74 5b 69 5d 3b 20 69  0; zFormat[i]; i
d880: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 7a 46 6f  ++){.    if( zFo
d890: 72 6d 61 74 5b 69 5d 3d 3d 27 25 27 20 29 20 6e  rmat[i]=='%' ) n
d8a0: 50 65 72 63 65 6e 74 2b 2b 3b 0a 20 20 7d 0a 20  Percent++;.  }. 
d8b0: 20 69 66 28 20 6e 50 65 72 63 65 6e 74 3e 31 20   if( nPercent>1 
d8c0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ){.    sqlite3_s
d8d0: 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a  nprintf(sizeof(z
d8e0: 4c 69 6e 65 29 2c 20 7a 4c 69 6e 65 2c 20 7a 46  Line), zLine, zF
d8f0: 6f 72 6d 61 74 2c 20 69 43 75 72 2c 20 69 48 69  ormat, iCur, iHi
d900: 77 74 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  wtr);.  }else{. 
d910: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
d920: 6e 74 66 28 73 69 7a 65 6f 66 28 7a 4c 69 6e 65  ntf(sizeof(zLine
d930: 29 2c 20 7a 4c 69 6e 65 2c 20 7a 46 6f 72 6d 61  ), zLine, zForma
d940: 74 2c 20 69 48 69 77 74 72 29 3b 0a 20 20 7d 0a  t, iHiwtr);.  }.
d950: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
d960: 6f 75 74 2c 20 22 25 2d 33 36 73 20 25 73 5c 6e  out, "%-36s %s\n
d970: 22 2c 20 7a 4c 61 62 65 6c 2c 20 7a 4c 69 6e 65  ", zLabel, zLine
d980: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 70  );.}../*.** Disp
d990: 6c 61 79 20 6d 65 6d 6f 72 79 20 73 74 61 74 73  lay memory stats
d9a0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
d9b0: 64 69 73 70 6c 61 79 5f 73 74 61 74 73 28 0a 20  display_stats(. 
d9c0: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20   sqlite3 *db,   
d9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d9e0: 44 61 74 61 62 61 73 65 20 74 6f 20 71 75 65 72  Database to quer
d9f0: 79 20 2a 2f 0a 20 20 53 68 65 6c 6c 53 74 61 74  y */.  ShellStat
da00: 65 20 2a 70 41 72 67 2c 20 20 20 20 20 20 20 20  e *pArg,        
da10: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
da20: 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 2f 0a 20   ShellState */. 
da30: 20 69 6e 74 20 62 52 65 73 65 74 20 20 20 20 20   int bReset     
da40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
da50: 54 72 75 65 20 74 6f 20 72 65 73 65 74 20 74 68  True to reset th
da60: 65 20 73 74 61 74 73 20 2a 2f 0a 29 7b 0a 20 20  e stats */.){.  
da70: 69 6e 74 20 69 43 75 72 3b 0a 20 20 69 6e 74 20  int iCur;.  int 
da80: 69 48 69 77 74 72 3b 0a 0a 20 20 69 66 28 20 70  iHiwtr;..  if( p
da90: 41 72 67 20 26 26 20 70 41 72 67 2d 3e 6f 75 74  Arg && pArg->out
daa0: 20 29 7b 0a 20 20 20 20 64 69 73 70 6c 61 79 53   ){.    displayS
dab0: 74 61 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 4d  tatLine(pArg, "M
dac0: 65 6d 6f 72 79 20 55 73 65 64 3a 22 2c 0a 20 20  emory Used:",.  
dad0: 20 20 20 20 20 22 25 6c 6c 64 20 28 6d 61 78 20       "%lld (max 
dae0: 25 6c 6c 64 29 20 62 79 74 65 73 22 2c 20 53 51  %lld) bytes", SQ
daf0: 4c 49 54 45 5f 53 54 41 54 55 53 5f 4d 45 4d 4f  LITE_STATUS_MEMO
db00: 52 59 5f 55 53 45 44 2c 20 62 52 65 73 65 74 29  RY_USED, bReset)
db10: 3b 0a 20 20 20 20 64 69 73 70 6c 61 79 53 74 61  ;.    displaySta
db20: 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 4e 75 6d  tLine(pArg, "Num
db30: 62 65 72 20 6f 66 20 4f 75 74 73 74 61 6e 64 69  ber of Outstandi
db40: 6e 67 20 41 6c 6c 6f 63 61 74 69 6f 6e 73 3a 22  ng Allocations:"
db50: 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c 64 20 28  ,.       "%lld (
db60: 6d 61 78 20 25 6c 6c 64 29 22 2c 20 53 51 4c 49  max %lld)", SQLI
db70: 54 45 5f 53 54 41 54 55 53 5f 4d 41 4c 4c 4f 43  TE_STATUS_MALLOC
db80: 5f 43 4f 55 4e 54 2c 20 62 52 65 73 65 74 29 3b  _COUNT, bReset);
db90: 0a 20 20 20 20 69 66 28 20 70 41 72 67 2d 3e 73  .    if( pArg->s
dba0: 68 65 6c 6c 46 6c 67 73 20 26 20 53 48 46 4c 47  hellFlgs & SHFLG
dbb0: 5f 50 61 67 65 63 61 63 68 65 20 29 7b 0a 20 20  _Pagecache ){.  
dbc0: 20 20 20 20 64 69 73 70 6c 61 79 53 74 61 74 4c      displayStatL
dbd0: 69 6e 65 28 70 41 72 67 2c 20 22 4e 75 6d 62 65  ine(pArg, "Numbe
dbe0: 72 20 6f 66 20 50 63 61 63 68 65 20 50 61 67 65  r of Pcache Page
dbf0: 73 20 55 73 65 64 3a 22 2c 0a 20 20 20 20 20 20  s Used:",.      
dc00: 20 20 20 22 25 6c 6c 64 20 28 6d 61 78 20 25 6c     "%lld (max %l
dc10: 6c 64 29 20 70 61 67 65 73 22 2c 20 53 51 4c 49  ld) pages", SQLI
dc20: 54 45 5f 53 54 41 54 55 53 5f 50 41 47 45 43 41  TE_STATUS_PAGECA
dc30: 43 48 45 5f 55 53 45 44 2c 20 62 52 65 73 65 74  CHE_USED, bReset
dc40: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 69 73  );.    }.    dis
dc50: 70 6c 61 79 53 74 61 74 4c 69 6e 65 28 70 41 72  playStatLine(pAr
dc60: 67 2c 20 22 4e 75 6d 62 65 72 20 6f 66 20 50 63  g, "Number of Pc
dc70: 61 63 68 65 20 4f 76 65 72 66 6c 6f 77 20 42 79  ache Overflow By
dc80: 74 65 73 3a 22 2c 0a 20 20 20 20 20 20 20 22 25  tes:",.       "%
dc90: 6c 6c 64 20 28 6d 61 78 20 25 6c 6c 64 29 20 62  lld (max %lld) b
dca0: 79 74 65 73 22 2c 20 53 51 4c 49 54 45 5f 53 54  ytes", SQLITE_ST
dcb0: 41 54 55 53 5f 50 41 47 45 43 41 43 48 45 5f 4f  ATUS_PAGECACHE_O
dcc0: 56 45 52 46 4c 4f 57 2c 20 62 52 65 73 65 74 29  VERFLOW, bReset)
dcd0: 3b 0a 20 20 20 20 64 69 73 70 6c 61 79 53 74 61  ;.    displaySta
dce0: 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 4c 61 72  tLine(pArg, "Lar
dcf0: 67 65 73 74 20 41 6c 6c 6f 63 61 74 69 6f 6e 3a  gest Allocation:
dd00: 22 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c 64 20  ",.       "%lld 
dd10: 62 79 74 65 73 22 2c 20 53 51 4c 49 54 45 5f 53  bytes", SQLITE_S
dd20: 54 41 54 55 53 5f 4d 41 4c 4c 4f 43 5f 53 49 5a  TATUS_MALLOC_SIZ
dd30: 45 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20  E, bReset);.    
dd40: 64 69 73 70 6c 61 79 53 74 61 74 4c 69 6e 65 28  displayStatLine(
dd50: 70 41 72 67 2c 20 22 4c 61 72 67 65 73 74 20 50  pArg, "Largest P
dd60: 63 61 63 68 65 20 41 6c 6c 6f 63 61 74 69 6f 6e  cache Allocation
dd70: 3a 22 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c 64  :",.       "%lld
dd80: 20 62 79 74 65 73 22 2c 20 53 51 4c 49 54 45 5f   bytes", SQLITE_
dd90: 53 54 41 54 55 53 5f 50 41 47 45 43 41 43 48 45  STATUS_PAGECACHE
dda0: 5f 53 49 5a 45 2c 20 62 52 65 73 65 74 29 3b 0a  _SIZE, bReset);.
ddb0: 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41  #ifdef YYTRACKMA
ddc0: 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 20 20  XSTACKDEPTH.    
ddd0: 64 69 73 70 6c 61 79 53 74 61 74 4c 69 6e 65 28  displayStatLine(
dde0: 70 41 72 67 2c 20 22 44 65 65 70 65 73 74 20 50  pArg, "Deepest P
ddf0: 61 72 73 65 72 20 53 74 61 63 6b 3a 22 2c 0a 20  arser Stack:",. 
de00: 20 20 20 20 20 20 22 25 6c 6c 64 20 28 6d 61 78        "%lld (max
de10: 20 25 6c 6c 64 29 22 2c 20 53 51 4c 49 54 45 5f   %lld)", SQLITE_
de20: 53 54 41 54 55 53 5f 50 41 52 53 45 52 5f 53 54  STATUS_PARSER_ST
de30: 41 43 4b 2c 20 62 52 65 73 65 74 29 3b 0a 23 65  ACK, bReset);.#e
de40: 6e 64 69 66 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ndif.  }..  if( 
de50: 70 41 72 67 20 26 26 20 70 41 72 67 2d 3e 6f 75  pArg && pArg->ou
de60: 74 20 26 26 20 64 62 20 29 7b 0a 20 20 20 20 69  t && db ){.    i
de70: 66 28 20 70 41 72 67 2d 3e 73 68 65 6c 6c 46 6c  f( pArg->shellFl
de80: 67 73 20 26 20 53 48 46 4c 47 5f 4c 6f 6f 6b 61  gs & SHFLG_Looka
de90: 73 69 64 65 20 29 7b 0a 20 20 20 20 20 20 69 48  side ){.      iH
dea0: 69 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31  iwtr = iCur = -1
deb0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
dec0: 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51  db_status(db, SQ
ded0: 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f  LITE_DBSTATUS_LO
dee0: 4f 4b 41 53 49 44 45 5f 55 53 45 44 2c 0a 20 20  OKASIDE_USED,.  
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df00: 20 20 20 20 20 20 26 69 43 75 72 2c 20 26 69 48        &iCur, &iH
df10: 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20  iwtr, bReset);. 
df20: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
df30: 70 41 72 67 2d 3e 6f 75 74 2c 0a 20 20 20 20 20  pArg->out,.     
df40: 20 20 20 20 20 20 20 20 20 22 4c 6f 6f 6b 61 73           "Lookas
df50: 69 64 65 20 53 6c 6f 74 73 20 55 73 65 64 3a 20  ide Slots Used: 
df60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25                 %
df70: 64 20 28 6d 61 78 20 25 64 29 5c 6e 22 2c 0a 20  d (max %d)\n",. 
df80: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 43 75               iCu
df90: 72 2c 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20  r, iHiwtr);.    
dfa0: 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61    sqlite3_db_sta
dfb0: 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44  tus(db, SQLITE_D
dfc0: 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44  BSTATUS_LOOKASID
dfd0: 45 5f 48 49 54 2c 0a 20 20 20 20 20 20 20 20 20  E_HIT,.         
dfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26                 &
dff0: 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62  iCur, &iHiwtr, b
e000: 52 65 73 65 74 29 3b 0a 20 20 20 20 20 20 72 61  Reset);.      ra
e010: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
e020: 75 74 2c 20 22 53 75 63 63 65 73 73 66 75 6c 20  ut, "Successful 
e030: 6c 6f 6f 6b 61 73 69 64 65 20 61 74 74 65 6d 70  lookaside attemp
e040: 74 73 3a 20 20 20 20 20 20 20 25 64 5c 6e 22 2c  ts:       %d\n",
e050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
e060: 48 69 77 74 72 29 3b 0a 20 20 20 20 20 20 73 71  Hiwtr);.      sq
e070: 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28  lite3_db_status(
e080: 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41  db, SQLITE_DBSTA
e090: 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49  TUS_LOOKASIDE_MI
e0a0: 53 53 5f 53 49 5a 45 2c 0a 20 20 20 20 20 20 20  SS_SIZE,.       
e0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0c0: 20 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c   &iCur, &iHiwtr,
e0d0: 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20 20 20   bReset);.      
e0e0: 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  raw_printf(pArg-
e0f0: 3e 6f 75 74 2c 20 22 4c 6f 6f 6b 61 73 69 64 65  >out, "Lookaside
e100: 20 66 61 69 6c 75 72 65 73 20 64 75 65 20 74 6f   failures due to
e110: 20 73 69 7a 65 3a 20 20 20 20 20 20 25 64 5c 6e   size:      %d\n
e120: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
e130: 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20 20 20   iHiwtr);.      
e140: 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75  sqlite3_db_statu
e150: 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53  s(db, SQLITE_DBS
e160: 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f  TATUS_LOOKASIDE_
e170: 4d 49 53 53 5f 46 55 4c 4c 2c 0a 20 20 20 20 20  MISS_FULL,.     
e180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e190: 20 20 20 26 69 43 75 72 2c 20 26 69 48 69 77 74     &iCur, &iHiwt
e1a0: 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20  r, bReset);.    
e1b0: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72    raw_printf(pAr
e1c0: 67 2d 3e 6f 75 74 2c 20 22 4c 6f 6f 6b 61 73 69  g->out, "Lookasi
e1d0: 64 65 20 66 61 69 6c 75 72 65 73 20 64 75 65 20  de failures due 
e1e0: 74 6f 20 4f 4f 4d 3a 20 20 20 20 20 20 20 25 64  to OOM:       %d
e1f0: 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
e200: 20 20 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20     iHiwtr);.    
e210: 7d 0a 20 20 20 20 69 48 69 77 74 72 20 3d 20 69  }.    iHiwtr = i
e220: 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71  Cur = -1;.    sq
e230: 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28  lite3_db_status(
e240: 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41  db, SQLITE_DBSTA
e250: 54 55 53 5f 43 41 43 48 45 5f 55 53 45 44 2c 20  TUS_CACHE_USED, 
e260: 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20  &iCur, &iHiwtr, 
e270: 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77  bReset);.    raw
e280: 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
e290: 74 2c 20 22 50 61 67 65 72 20 48 65 61 70 20 55  t, "Pager Heap U
e2a0: 73 61 67 65 3a 20 20 20 20 20 20 20 20 20 20 20  sage:           
e2b0: 20 20 20 20 20 20 20 20 20 25 64 20 62 79 74 65           %d byte
e2c0: 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  s\n",.          
e2d0: 20 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69    iCur);.    iHi
e2e0: 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b  wtr = iCur = -1;
e2f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
e300: 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54  status(db, SQLIT
e310: 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45  E_DBSTATUS_CACHE
e320: 5f 48 49 54 2c 20 26 69 43 75 72 2c 20 26 69 48  _HIT, &iCur, &iH
e330: 69 77 74 72 2c 20 31 29 3b 0a 20 20 20 20 72 61  iwtr, 1);.    ra
e340: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
e350: 75 74 2c 20 22 50 61 67 65 20 63 61 63 68 65 20  ut, "Page cache 
e360: 68 69 74 73 3a 20 20 20 20 20 20 20 20 20 20 20  hits:           
e370: 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c            %d\n",
e380: 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69 77   iCur);.    iHiw
e390: 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a  tr = iCur = -1;.
e3a0: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
e3b0: 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45  tatus(db, SQLITE
e3c0: 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f  _DBSTATUS_CACHE_
e3d0: 4d 49 53 53 2c 20 26 69 43 75 72 2c 20 26 69 48  MISS, &iCur, &iH
e3e0: 69 77 74 72 2c 20 31 29 3b 0a 20 20 20 20 72 61  iwtr, 1);.    ra
e3f0: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
e400: 75 74 2c 20 22 50 61 67 65 20 63 61 63 68 65 20  ut, "Page cache 
e410: 6d 69 73 73 65 73 3a 20 20 20 20 20 20 20 20 20  misses:         
e420: 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c            %d\n",
e430: 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69 77   iCur);.    iHiw
e440: 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a  tr = iCur = -1;.
e450: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
e460: 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45  tatus(db, SQLITE
e470: 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f  _DBSTATUS_CACHE_
e480: 57 52 49 54 45 2c 20 26 69 43 75 72 2c 20 26 69  WRITE, &iCur, &i
e490: 48 69 77 74 72 2c 20 31 29 3b 0a 20 20 20 20 72  Hiwtr, 1);.    r
e4a0: 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
e4b0: 6f 75 74 2c 20 22 50 61 67 65 20 63 61 63 68 65  out, "Page cache
e4c0: 20 77 72 69 74 65 73 3a 20 20 20 20 20 20 20 20   writes:        
e4d0: 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22             %d\n"
e4e0: 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69  , iCur);.    iHi
e4f0: 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b  wtr = iCur = -1;
e500: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
e510: 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54  status(db, SQLIT
e520: 45 5f 44 42 53 54 41 54 55 53 5f 53 43 48 45 4d  E_DBSTATUS_SCHEM
e530: 41 5f 55 53 45 44 2c 20 26 69 43 75 72 2c 20 26  A_USED, &iCur, &
e540: 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b  iHiwtr, bReset);
e550: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
e560: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 53 63 68 65  pArg->out, "Sche
e570: 6d 61 20 48 65 61 70 20 55 73 61 67 65 3a 20 20  ma Heap Usage:  
e580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e590: 20 25 64 20 62 79 74 65 73 5c 6e 22 2c 0a 20 20   %d bytes\n",.  
e5a0: 20 20 20 20 20 20 20 20 20 20 69 43 75 72 29 3b            iCur);
e5b0: 0a 20 20 20 20 69 48 69 77 74 72 20 3d 20 69 43  .    iHiwtr = iC
e5c0: 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c  ur = -1;.    sql
e5d0: 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64  ite3_db_status(d
e5e0: 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54  b, SQLITE_DBSTAT
e5f0: 55 53 5f 53 54 4d 54 5f 55 53 45 44 2c 20 26 69  US_STMT_USED, &i
e600: 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52  Cur, &iHiwtr, bR
e610: 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70  eset);.    raw_p
e620: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
e630: 20 22 53 74 61 74 65 6d 65 6e 74 20 48 65 61 70   "Statement Heap
e640: 2f 4c 6f 6f 6b 61 73 69 64 65 20 55 73 61 67 65  /Lookaside Usage
e650: 3a 20 20 20 20 20 20 25 64 20 62 79 74 65 73 5c  :      %d bytes\
e660: 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n",.            
e670: 69 43 75 72 29 3b 0a 20 20 7d 0a 0a 20 20 69 66  iCur);.  }..  if
e680: 28 20 70 41 72 67 20 26 26 20 70 41 72 67 2d 3e  ( pArg && pArg->
e690: 6f 75 74 20 26 26 20 64 62 20 26 26 20 70 41 72  out && db && pAr
e6a0: 67 2d 3e 70 53 74 6d 74 20 29 7b 0a 20 20 20 20  g->pStmt ){.    
e6b0: 69 43 75 72 20 3d 20 73 71 6c 69 74 65 33 5f 73  iCur = sqlite3_s
e6c0: 74 6d 74 5f 73 74 61 74 75 73 28 70 41 72 67 2d  tmt_status(pArg-
e6d0: 3e 70 53 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53  >pStmt, SQLITE_S
e6e0: 54 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c 53 43  TMTSTATUS_FULLSC
e6f0: 41 4e 5f 53 54 45 50 2c 0a 20 20 20 20 20 20 20  AN_STEP,.       
e700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e710: 20 20 20 20 20 20 20 20 62 52 65 73 65 74 29 3b          bReset);
e720: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
e730: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 46 75 6c 6c  pArg->out, "Full
e740: 73 63 61 6e 20 53 74 65 70 73 3a 20 20 20 20 20  scan Steps:     
e750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e760: 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20   %d\n", iCur);. 
e770: 20 20 20 69 43 75 72 20 3d 20 73 71 6c 69 74 65     iCur = sqlite
e780: 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 70 41  3_stmt_status(pA
e790: 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51 4c 49 54  rg->pStmt, SQLIT
e7a0: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52  E_STMTSTATUS_SOR
e7b0: 54 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20  T, bReset);.    
e7c0: 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  raw_printf(pArg-
e7d0: 3e 6f 75 74 2c 20 22 53 6f 72 74 20 4f 70 65 72  >out, "Sort Oper
e7e0: 61 74 69 6f 6e 73 3a 20 20 20 20 20 20 20 20 20  ations:         
e7f0: 20 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e              %d\n
e800: 22 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69 43  ", iCur);.    iC
e810: 75 72 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d  ur = sqlite3_stm
e820: 74 5f 73 74 61 74 75 73 28 70 41 72 67 2d 3e 70  t_status(pArg->p
e830: 53 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53 54 4d  Stmt, SQLITE_STM
e840: 54 53 54 41 54 55 53 5f 41 55 54 4f 49 4e 44 45  TSTATUS_AUTOINDE
e850: 58 2c 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72  X,bReset);.    r
e860: 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
e870: 6f 75 74 2c 20 22 41 75 74 6f 69 6e 64 65 78 20  out, "Autoindex 
e880: 49 6e 73 65 72 74 73 3a 20 20 20 20 20 20 20 20  Inserts:        
e890: 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22             %d\n"
e8a0: 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69 43 75  , iCur);.    iCu
e8b0: 72 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  r = sqlite3_stmt
e8c0: 5f 73 74 61 74 75 73 28 70 41 72 67 2d 3e 70 53  _status(pArg->pS
e8d0: 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53 54 4d 54  tmt, SQLITE_STMT
e8e0: 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 2c 20  STATUS_VM_STEP, 
e8f0: 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77  bReset);.    raw
e900: 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
e910: 74 2c 20 22 56 69 72 74 75 61 6c 20 4d 61 63 68  t, "Virtual Mach
e920: 69 6e 65 20 53 74 65 70 73 3a 20 20 20 20 20 20  ine Steps:      
e930: 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20           %d\n", 
e940: 69 43 75 72 29 3b 0a 20 20 7d 0a 0a 23 69 66 64  iCur);.  }..#ifd
e950: 65 66 20 5f 5f 6c 69 6e 75 78 5f 5f 0a 20 20 64  ef __linux__.  d
e960: 69 73 70 6c 61 79 4c 69 6e 75 78 49 6f 53 74 61  isplayLinuxIoSta
e970: 74 73 28 70 41 72 67 2d 3e 6f 75 74 29 3b 0a 23  ts(pArg->out);.#
e980: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 44 6f 20 6e  endif..  /* Do n
e990: 6f 74 20 72 65 6d 6f 76 65 20 74 68 69 73 20 6d  ot remove this m
e9a0: 61 63 68 69 6e 65 20 72 65 61 64 61 62 6c 65 20  achine readable 
e9b0: 63 6f 6d 6d 65 6e 74 3a 20 65 78 74 72 61 2d 73  comment: extra-s
e9c0: 74 61 74 73 2d 6f 75 74 70 75 74 2d 68 65 72 65  tats-output-here
e9d0: 20 2a 2f 0a 0a 20 20 72 65 74 75 72 6e 20 30 3b   */..  return 0;
e9e0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 70 6c 61  .}../*.** Displa
e9f0: 79 20 73 63 61 6e 20 73 74 61 74 73 2e 0a 2a 2f  y scan stats..*/
ea00: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 64 69 73  .static void dis
ea10: 70 6c 61 79 5f 73 63 61 6e 73 74 61 74 73 28 0a  play_scanstats(.
ea20: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20    sqlite3 *db,  
ea30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea40: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74 6f    /* Database to
ea50: 20 71 75 65 72 79 20 2a 2f 0a 20 20 53 68 65 6c   query */.  Shel
ea60: 6c 53 74 61 74 65 20 2a 70 41 72 67 20 20 20 20  lState *pArg    
ea70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
ea80: 6f 69 6e 74 65 72 20 74 6f 20 53 68 65 6c 6c 53  ointer to ShellS
ea90: 74 61 74 65 20 2a 2f 0a 29 7b 0a 23 69 66 6e 64  tate */.){.#ifnd
eaa0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
eab0: 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
eac0: 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  .  UNUSED_PARAME
ead0: 54 45 52 28 64 62 29 3b 0a 20 20 55 4e 55 53 45  TER(db);.  UNUSE
eae0: 44 5f 50 41 52 41 4d 45 54 45 52 28 70 41 72 67  D_PARAMETER(pArg
eaf0: 29 3b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 69  );.#else.  int i
eb00: 2c 20 6b 2c 20 6e 2c 20 6d 78 3b 0a 20 20 72 61  , k, n, mx;.  ra
eb10: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
eb20: 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 20 73 63  ut, "-------- sc
eb30: 61 6e 73 74 61 74 73 20 2d 2d 2d 2d 2d 2d 2d 2d  anstats --------
eb40: 5c 6e 22 29 3b 0a 20 20 6d 78 20 3d 20 30 3b 0a  \n");.  mx = 0;.
eb50: 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 3d 6d 78    for(k=0; k<=mx
eb60: 3b 20 6b 2b 2b 29 7b 0a 20 20 20 20 64 6f 75 62  ; k++){.    doub
eb70: 6c 65 20 72 45 73 74 4c 6f 6f 70 20 3d 20 31 2e  le rEstLoop = 1.
eb80: 30 3b 0a 20 20 20 20 66 6f 72 28 69 3d 6e 3d 30  0;.    for(i=n=0
eb90: 3b 20 31 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ; 1; i++){.     
eba0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
ebb0: 20 3d 20 70 41 72 67 2d 3e 70 53 74 6d 74 3b 0a   = pArg->pStmt;.
ebc0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
ebd0: 74 36 34 20 6e 4c 6f 6f 70 2c 20 6e 56 69 73 69  t64 nLoop, nVisi
ebe0: 74 3b 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20  t;.      double 
ebf0: 72 45 73 74 3b 0a 20 20 20 20 20 20 69 6e 74 20  rEst;.      int 
ec00: 69 53 69 64 3b 0a 20 20 20 20 20 20 63 6f 6e 73  iSid;.      cons
ec10: 74 20 63 68 61 72 20 2a 7a 45 78 70 6c 61 69 6e  t char *zExplain
ec20: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
ec30: 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61  te3_stmt_scansta
ec40: 74 75 73 28 70 2c 20 69 2c 20 53 51 4c 49 54 45  tus(p, i, SQLITE
ec50: 5f 53 43 41 4e 53 54 41 54 5f 4e 4c 4f 4f 50 2c  _SCANSTAT_NLOOP,
ec60: 20 28 76 6f 69 64 2a 29 26 6e 4c 6f 6f 70 29 20   (void*)&nLoop) 
ec70: 29 7b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  ){.        break
ec80: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
ec90: 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61  sqlite3_stmt_sca
eca0: 6e 73 74 61 74 75 73 28 70 2c 20 69 2c 20 53 51  nstatus(p, i, SQ
ecb0: 4c 49 54 45 5f 53 43 41 4e 53 54 41 54 5f 53 45  LITE_SCANSTAT_SE
ecc0: 4c 45 43 54 49 44 2c 20 28 76 6f 69 64 2a 29 26  LECTID, (void*)&
ecd0: 69 53 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28  iSid);.      if(
ece0: 20 69 53 69 64 3e 6d 78 20 29 20 6d 78 20 3d 20   iSid>mx ) mx = 
ecf0: 69 53 69 64 3b 0a 20 20 20 20 20 20 69 66 28 20  iSid;.      if( 
ed00: 69 53 69 64 21 3d 6b 20 29 20 63 6f 6e 74 69 6e  iSid!=k ) contin
ed10: 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 3d  ue;.      if( n=
ed20: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 45  =0 ){.        rE
ed30: 73 74 4c 6f 6f 70 20 3d 20 28 64 6f 75 62 6c 65  stLoop = (double
ed40: 29 6e 4c 6f 6f 70 3b 0a 20 20 20 20 20 20 20 20  )nLoop;.        
ed50: 69 66 28 20 6b 3e 30 20 29 20 72 61 77 5f 70 72  if( k>0 ) raw_pr
ed60: 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20  intf(pArg->out, 
ed70: 22 2d 2d 2d 2d 2d 2d 2d 2d 20 73 75 62 71 75 65  "-------- subque
ed80: 72 79 20 25 64 20 2d 2d 2d 2d 2d 2d 2d 5c 6e 22  ry %d -------\n"
ed90: 2c 20 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , k);.      }.  
eda0: 20 20 20 20 6e 2b 2b 3b 0a 20 20 20 20 20 20 73      n++;.      s
edb0: 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e  qlite3_stmt_scan
edc0: 73 74 61 74 75 73 28 70 2c 20 69 2c 20 53 51 4c  status(p, i, SQL
edd0: 49 54 45 5f 53 43 41 4e 53 54 41 54 5f 4e 56 49  ITE_SCANSTAT_NVI
ede0: 53 49 54 2c 20 28 76 6f 69 64 2a 29 26 6e 56 69  SIT, (void*)&nVi
edf0: 73 69 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  sit);.      sqli
ee00: 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61  te3_stmt_scansta
ee10: 74 75 73 28 70 2c 20 69 2c 20 53 51 4c 49 54 45  tus(p, i, SQLITE
ee20: 5f 53 43 41 4e 53 54 41 54 5f 45 53 54 2c 20 28  _SCANSTAT_EST, (
ee30: 76 6f 69 64 2a 29 26 72 45 73 74 29 3b 0a 20 20  void*)&rEst);.  
ee40: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74      sqlite3_stmt
ee50: 5f 73 63 61 6e 73 74 61 74 75 73 28 70 2c 20 69  _scanstatus(p, i
ee60: 2c 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41  , SQLITE_SCANSTA
ee70: 54 5f 45 58 50 4c 41 49 4e 2c 20 28 76 6f 69 64  T_EXPLAIN, (void
ee80: 2a 29 26 7a 45 78 70 6c 61 69 6e 29 3b 0a 20 20  *)&zExplain);.  
ee90: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
eea0: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4c 6f 6f 70  pArg->out, "Loop
eeb0: 20 25 32 64 3a 20 25 73 5c 6e 22 2c 20 6e 2c 20   %2d: %s\n", n, 
eec0: 7a 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20 20 20  zExplain);.     
eed0: 20 72 45 73 74 4c 6f 6f 70 20 2a 3d 20 72 45 73   rEstLoop *= rEs
eee0: 74 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  t;.      raw_pri
eef0: 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 0a 20  ntf(pArg->out,. 
ef00: 20 20 20 20 20 20 20 20 20 22 20 20 20 20 20 20           "      
ef10: 20 20 20 6e 4c 6f 6f 70 3d 25 2d 38 6c 6c 64 20     nLoop=%-8lld 
ef20: 6e 52 6f 77 3d 25 2d 38 6c 6c 64 20 65 73 74 52  nRow=%-8lld estR
ef30: 6f 77 3d 25 2d 38 6c 6c 64 20 65 73 74 52 6f 77  ow=%-8lld estRow
ef40: 2f 4c 6f 6f 70 3d 25 2d 38 67 5c 6e 22 2c 0a 20  /Loop=%-8g\n",. 
ef50: 20 20 20 20 20 20 20 20 20 6e 4c 6f 6f 70 2c 20           nLoop, 
ef60: 6e 56 69 73 69 74 2c 20 28 73 71 6c 69 74 65 33  nVisit, (sqlite3
ef70: 5f 69 6e 74 36 34 29 28 72 45 73 74 4c 6f 6f 70  _int64)(rEstLoop
ef80: 2b 30 2e 35 29 2c 20 72 45 73 74 0a 20 20 20 20  +0.5), rEst.    
ef90: 20 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20    );.    }.  }. 
efa0: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67   raw_printf(pArg
efb0: 2d 3e 6f 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d  ->out, "--------
efc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
efd0: 2d 2d 2d 5c 6e 22 29 3b 0a 23 65 6e 64 69 66 0a  ---\n");.#endif.
efe0: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65 74  }../*.** Paramet
eff0: 65 72 20 61 7a 41 72 72 61 79 20 70 6f 69 6e 74  er azArray point
f000: 73 20 74 6f 20 61 20 7a 65 72 6f 2d 74 65 72 6d  s to a zero-term
f010: 69 6e 61 74 65 64 20 61 72 72 61 79 20 6f 66 20  inated array of 
f020: 73 74 72 69 6e 67 73 2e 20 7a 53 74 72 0a 2a 2a  strings. zStr.**
f030: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 73 69 6e   points to a sin
f040: 67 6c 65 20 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  gle nul-terminat
f050: 65 64 20 73 74 72 69 6e 67 2e 20 52 65 74 75 72  ed string. Retur
f060: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 7a 53  n non-zero if zS
f070: 74 72 0a 2a 2a 20 69 73 20 65 71 75 61 6c 2c 20  tr.** is equal, 
f080: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 73 74 72  according to str
f090: 63 6d 70 28 29 2c 20 74 6f 20 61 6e 79 20 6f 66  cmp(), to any of
f0a0: 20 74 68 65 20 73 74 72 69 6e 67 73 20 69 6e 20   the strings in 
f0b0: 74 68 65 20 61 72 72 61 79 2e 0a 2a 2a 20 4f 74  the array..** Ot
f0c0: 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20  herwise, return 
f0d0: 7a 65 72 6f 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  zero..*/.static 
f0e0: 69 6e 74 20 73 74 72 5f 69 6e 5f 61 72 72 61 79  int str_in_array
f0f0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74  (const char *zSt
f100: 72 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a  r, const char **
f110: 61 7a 41 72 72 61 79 29 7b 0a 20 20 69 6e 74 20  azArray){.  int 
f120: 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 61 7a  i;.  for(i=0; az
f130: 41 72 72 61 79 5b 69 5d 3b 20 69 2b 2b 29 7b 0a  Array[i]; i++){.
f140: 20 20 20 20 69 66 28 20 30 3d 3d 73 74 72 63 6d      if( 0==strcm
f150: 70 28 7a 53 74 72 2c 20 61 7a 41 72 72 61 79 5b  p(zStr, azArray[
f160: 69 5d 29 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  i]) ) return 1;.
f170: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
f180: 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70  }../*.** If comp
f190: 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 20 70  iled statement p
f1a0: 53 71 6c 20 61 70 70 65 61 72 73 20 74 6f 20 62  Sql appears to b
f1b0: 65 20 61 6e 20 45 58 50 4c 41 49 4e 20 73 74 61  e an EXPLAIN sta
f1c0: 74 65 6d 65 6e 74 2c 20 61 6c 6c 6f 63 61 74 65  tement, allocate
f1d0: 0a 2a 2a 20 61 6e 64 20 70 6f 70 75 6c 61 74 65  .** and populate
f1e0: 20 74 68 65 20 53 68 65 6c 6c 53 74 61 74 65 2e   the ShellState.
f1f0: 61 69 49 6e 64 65 6e 74 5b 5d 20 61 72 72 61 79  aiIndent[] array
f200: 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72   with the number
f210: 20 6f 66 0a 2a 2a 20 73 70 61 63 65 73 20 65 61   of.** spaces ea
f220: 63 68 20 6f 70 63 6f 64 65 20 73 68 6f 75 6c 64  ch opcode should
f230: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 65 66   be indented bef
f240: 6f 72 65 20 69 74 20 69 73 20 6f 75 74 70 75 74  ore it is output
f250: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 64 65  ..**.** The inde
f260: 6e 74 69 6e 67 20 72 75 6c 65 73 20 61 72 65 3a  nting rules are:
f270: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 2a 20 46 6f 72  .**.**     * For
f280: 20 65 61 63 68 20 22 4e 65 78 74 22 2c 20 22 50   each "Next", "P
f290: 72 65 76 22 2c 20 22 56 4e 65 78 74 22 20 6f 72  rev", "VNext" or
f2a0: 20 22 56 50 72 65 76 22 20 69 6e 73 74 72 75 63   "VPrev" instruc
f2b0: 74 69 6f 6e 2c 20 69 6e 64 65 6e 74 0a 2a 2a 20  tion, indent.** 
f2c0: 20 20 20 20 20 20 61 6c 6c 20 6f 70 63 6f 64 65        all opcode
f2d0: 73 20 74 68 61 74 20 6f 63 63 75 72 20 62 65 74  s that occur bet
f2e0: 77 65 65 6e 20 74 68 65 20 70 32 20 6a 75 6d 70  ween the p2 jump
f2f0: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 61 6e 64   destination and
f300: 20 74 68 65 20 6f 70 63 6f 64 65 0a 2a 2a 20 20   the opcode.**  
f310: 20 20 20 20 20 69 74 73 65 6c 66 20 62 79 20 32       itself by 2
f320: 20 73 70 61 63 65 73 2e 0a 2a 2a 0a 2a 2a 20 20   spaces..**.**  
f330: 20 20 20 2a 20 46 6f 72 20 65 61 63 68 20 22 47     * For each "G
f340: 6f 74 6f 22 2c 20 69 66 20 74 68 65 20 6a 75 6d  oto", if the jum
f350: 70 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 73  p destination is
f360: 20 65 61 72 6c 69 65 72 20 69 6e 20 74 68 65 20   earlier in the 
f370: 70 72 6f 67 72 61 6d 0a 2a 2a 20 20 20 20 20 20  program.**      
f380: 20 61 6e 64 20 65 6e 64 73 20 6f 6e 20 6f 6e 65   and ends on one
f390: 20 6f 66 3a 0a 2a 2a 20 20 20 20 20 20 20 20 20   of:.**         
f3a0: 20 59 69 65 6c 64 20 20 53 65 65 6b 47 74 20 20   Yield  SeekGt  
f3b0: 53 65 65 6b 4c 74 20 20 52 6f 77 53 65 74 52 65  SeekLt  RowSetRe
f3c0: 61 64 20 20 52 65 77 69 6e 64 0a 2a 2a 20 20 20  ad  Rewind.**   
f3d0: 20 20 20 20 6f 72 20 69 66 20 74 68 65 20 50 31      or if the P1
f3e0: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6f 6e   parameter is on
f3f0: 65 20 69 6e 73 74 65 61 64 20 6f 66 20 7a 65 72  e instead of zer
f400: 6f 2c 0a 2a 2a 20 20 20 20 20 20 20 74 68 65 6e  o,.**       then
f410: 20 69 6e 64 65 6e 74 20 61 6c 6c 20 6f 70 63 6f   indent all opco
f420: 64 65 73 20 62 65 74 77 65 65 6e 20 74 68 65 20  des between the 
f430: 65 61 72 6c 69 65 72 20 69 6e 73 74 72 75 63 74  earlier instruct
f440: 69 6f 6e 0a 2a 2a 20 20 20 20 20 20 20 61 6e 64  ion.**       and
f450: 20 22 47 6f 74 6f 22 20 62 79 20 32 20 73 70 61   "Goto" by 2 spa
f460: 63 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ces..*/.static v
f470: 6f 69 64 20 65 78 70 6c 61 69 6e 5f 64 61 74 61  oid explain_data
f480: 5f 70 72 65 70 61 72 65 28 53 68 65 6c 6c 53 74  _prepare(ShellSt
f490: 61 74 65 20 2a 70 2c 20 73 71 6c 69 74 65 33 5f  ate *p, sqlite3_
f4a0: 73 74 6d 74 20 2a 70 53 71 6c 29 7b 0a 20 20 63  stmt *pSql){.  c
f4b0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b  onst char *zSql;
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f4d0: 2a 20 54 68 65 20 74 65 78 74 20 6f 66 20 74 68  * The text of th
f4e0: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
f4f0: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
f500: 2a 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *z;             
f510: 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20       /* Used to 
f520: 63 68 65 63 6b 20 69 66 20 74 68 69 73 20 69 73  check if this is
f530: 20 61 6e 20 45 58 50 4c 41 49 4e 20 2a 2f 0a 20   an EXPLAIN */. 
f540: 20 69 6e 74 20 2a 61 62 59 69 65 6c 64 20 3d 20   int *abYield = 
f550: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0;              
f560: 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 70 20 69   /* True if op i
f570: 73 20 61 6e 20 4f 50 5f 59 69 65 6c 64 20 2a 2f  s an OP_Yield */
f580: 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 20 3d 20  .  int nAlloc = 
f590: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0;              
f5a0: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
f5b0: 73 69 7a 65 20 6f 66 20 70 2d 3e 61 69 49 6e 64  size of p->aiInd
f5c0: 65 6e 74 5b 5d 2c 20 61 62 59 69 65 6c 64 20 2a  ent[], abYield *
f5d0: 2f 0a 20 20 69 6e 74 20 69 4f 70 3b 20 20 20 20  /.  int iOp;    
f5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5f0: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
f600: 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 2d 3e  operation in p->
f610: 61 69 49 6e 64 65 6e 74 5b 5d 20 2a 2f 0a 0a 20  aiIndent[] */.. 
f620: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 4e   const char *azN
f630: 65 78 74 5b 5d 20 3d 20 7b 20 22 4e 65 78 74 22  ext[] = { "Next"
f640: 2c 20 22 50 72 65 76 22 2c 20 22 56 50 72 65 76  , "Prev", "VPrev
f650: 22 2c 20 22 56 4e 65 78 74 22 2c 20 22 53 6f 72  ", "VNext", "Sor
f660: 74 65 72 4e 65 78 74 22 2c 0a 20 20 20 20 20 20  terNext",.      
f670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f680: 20 20 20 20 20 22 4e 65 78 74 49 66 4f 70 65 6e       "NextIfOpen
f690: 22 2c 20 22 50 72 65 76 49 66 4f 70 65 6e 22 2c  ", "PrevIfOpen",
f6a0: 20 30 20 7d 3b 0a 20 20 63 6f 6e 73 74 20 63 68   0 };.  const ch
f6b0: 61 72 20 2a 61 7a 59 69 65 6c 64 5b 5d 20 3d 20  ar *azYield[] = 
f6c0: 7b 20 22 59 69 65 6c 64 22 2c 20 22 53 65 65 6b  { "Yield", "Seek
f6d0: 4c 54 22 2c 20 22 53 65 65 6b 47 54 22 2c 20 22  LT", "SeekGT", "
f6e0: 52 6f 77 53 65 74 52 65 61 64 22 2c 0a 20 20 20  RowSetRead",.   
f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f700: 20 20 20 20 20 20 20 20 20 22 52 65 77 69 6e 64           "Rewind
f710: 22 2c 20 30 20 7d 3b 0a 20 20 63 6f 6e 73 74 20  ", 0 };.  const 
f720: 63 68 61 72 20 2a 61 7a 47 6f 74 6f 5b 5d 20 3d  char *azGoto[] =
f730: 20 7b 20 22 47 6f 74 6f 22 2c 20 30 20 7d 3b 0a   { "Goto", 0 };.
f740: 0a 20 20 2f 2a 20 54 72 79 20 74 6f 20 66 69 67  .  /* Try to fig
f750: 75 72 65 20 6f 75 74 20 69 66 20 74 68 69 73 20  ure out if this 
f760: 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 45 58 50  is really an EXP
f770: 4c 41 49 4e 20 73 74 61 74 65 6d 65 6e 74 2e 20  LAIN statement. 
f780: 49 66 20 74 68 69 73 0a 20 20 2a 2a 20 63 61 6e  If this.  ** can
f790: 6e 6f 74 20 62 65 20 76 65 72 69 66 69 65 64 2c  not be verified,
f7a0: 20 72 65 74 75 72 6e 20 65 61 72 6c 79 2e 20 20   return early.  
f7b0: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
f7c0: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53  _column_count(pS
f7d0: 71 6c 29 21 3d 38 20 29 7b 0a 20 20 20 20 70 2d  ql)!=8 ){.    p-
f7e0: 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64 65  >cMode = p->mode
f7f0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20  ;.    return;.  
f800: 7d 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74  }.  zSql = sqlit
f810: 65 33 5f 73 71 6c 28 70 53 71 6c 29 3b 0a 20 20  e3_sql(pSql);.  
f820: 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 20 72 65  if( zSql==0 ) re
f830: 74 75 72 6e 3b 0a 20 20 66 6f 72 28 7a 3d 7a 53  turn;.  for(z=zS
f840: 71 6c 3b 20 2a 7a 3d 3d 27 20 27 20 7c 7c 20 2a  ql; *z==' ' || *
f850: 7a 3d 3d 27 5c 74 27 20 7c 7c 20 2a 7a 3d 3d 27  z=='\t' || *z=='
f860: 5c 6e 27 20 7c 7c 20 2a 7a 3d 3d 27 5c 66 27 20  \n' || *z=='\f' 
f870: 7c 7c 20 2a 7a 3d 3d 27 5c 72 27 3b 20 7a 2b 2b  || *z=='\r'; z++
f880: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
f890: 5f 73 74 72 6e 69 63 6d 70 28 7a 2c 20 22 65 78  _strnicmp(z, "ex
f8a0: 70 6c 61 69 6e 22 2c 20 37 29 20 29 7b 0a 20 20  plain", 7) ){.  
f8b0: 20 20 70 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e    p->cMode = p->
f8c0: 6d 6f 64 65 3b 0a 20 20 20 20 72 65 74 75 72 6e  mode;.    return
f8d0: 3b 0a 20 20 7d 0a 0a 20 20 66 6f 72 28 69 4f 70  ;.  }..  for(iOp
f8e0: 3d 30 3b 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d  =0; SQLITE_ROW==
f8f0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 71  sqlite3_step(pSq
f900: 6c 29 3b 20 69 4f 70 2b 2b 29 7b 0a 20 20 20 20  l); iOp++){.    
f910: 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 69  int i;.    int i
f920: 41 64 64 72 20 3d 20 73 71 6c 69 74 65 33 5f 63  Addr = sqlite3_c
f930: 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 71 6c 2c 20  olumn_int(pSql, 
f940: 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68  0);.    const ch
f950: 61 72 20 2a 7a 4f 70 20 3d 20 28 63 6f 6e 73 74  ar *zOp = (const
f960: 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63   char*)sqlite3_c
f970: 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c  olumn_text(pSql,
f980: 20 31 29 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 74   1);..    /* Set
f990: 20 70 32 20 74 6f 20 74 68 65 20 50 32 20 66 69   p2 to the P2 fi
f9a0: 65 6c 64 20 6f 66 20 74 68 65 20 63 75 72 72 65  eld of the curre
f9b0: 6e 74 20 6f 70 63 6f 64 65 2e 20 54 68 65 6e 2c  nt opcode. Then,
f9c0: 20 61 73 73 75 6d 69 6e 67 20 74 68 61 74 0a 20   assuming that. 
f9d0: 20 20 20 2a 2a 20 70 32 20 69 73 20 61 6e 20 69     ** p2 is an i
f9e0: 6e 73 74 72 75 63 74 69 6f 6e 20 61 64 64 72 65  nstruction addre
f9f0: 73 73 2c 20 73 65 74 20 76 61 72 69 61 62 6c 65  ss, set variable
fa00: 20 70 32 6f 70 20 74 6f 20 74 68 65 20 69 6e 64   p2op to the ind
fa10: 65 78 20 6f 66 20 74 68 61 74 0a 20 20 20 20 2a  ex of that.    *
fa20: 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  * instruction in
fa30: 20 74 68 65 20 61 69 49 6e 64 65 6e 74 5b 5d 20   the aiIndent[] 
fa40: 61 72 72 61 79 2e 20 70 32 20 61 6e 64 20 70 32  array. p2 and p2
fa50: 6f 70 20 6d 61 79 20 62 65 20 64 69 66 66 65 72  op may be differ
fa60: 65 6e 74 20 69 66 0a 20 20 20 20 2a 2a 20 74 68  ent if.    ** th
fa70: 65 20 63 75 72 72 65 6e 74 20 69 6e 73 74 72 75  e current instru
fa80: 63 74 69 6f 6e 20 69 73 20 70 61 72 74 20 6f 66  ction is part of
fa90: 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 67   a sub-program g
faa0: 65 6e 65 72 61 74 65 64 20 62 79 20 61 6e 0a 20  enerated by an. 
fab0: 20 20 20 2a 2a 20 53 51 4c 20 74 72 69 67 67 65     ** SQL trigge
fac0: 72 20 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79  r or foreign key
fad0: 2e 20 20 2a 2f 0a 20 20 20 20 69 6e 74 20 70 32  .  */.    int p2
fae0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
faf0: 6e 5f 69 6e 74 28 70 53 71 6c 2c 20 33 29 3b 0a  n_int(pSql, 3);.
fb00: 20 20 20 20 69 6e 74 20 70 32 6f 70 20 3d 20 28      int p2op = (
fb10: 70 32 20 2b 20 28 69 4f 70 2d 69 41 64 64 72 29  p2 + (iOp-iAddr)
fb20: 29 3b 0a 0a 20 20 20 20 2f 2a 20 47 72 6f 77 20  );..    /* Grow 
fb30: 74 68 65 20 70 2d 3e 61 69 49 6e 64 65 6e 74 20  the p->aiIndent 
fb40: 61 72 72 61 79 20 61 73 20 72 65 71 75 69 72 65  array as require
fb50: 64 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 4f 70  d */.    if( iOp
fb60: 3e 3d 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20  >=nAlloc ){.    
fb70: 20 20 69 66 28 20 69 4f 70 3d 3d 30 20 29 7b 0a    if( iOp==0 ){.
fb80: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 66 75          /* Do fu
fb90: 72 74 68 65 72 20 76 65 72 66 69 63 61 74 69 6f  rther verficatio
fba0: 6e 20 74 68 61 74 20 74 68 69 73 20 69 73 20 65  n that this is e
fbb0: 78 70 6c 61 69 6e 20 6f 75 74 70 75 74 2e 20 20  xplain output.  
fbc0: 41 62 6f 72 74 20 69 66 0a 20 20 20 20 20 20 20  Abort if.       
fbd0: 20 2a 2a 20 69 74 20 69 73 20 6e 6f 74 20 2a 2f   ** it is not */
fbe0: 0a 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20  .        static 
fbf0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 65 78 70 6c  const char *expl
fc00: 61 69 6e 43 6f 6c 73 5b 5d 20 3d 20 7b 0a 20 20  ainCols[] = {.  
fc10: 20 20 20 20 20 20 20 20 20 22 61 64 64 72 22 2c           "addr",
fc20: 20 22 6f 70 63 6f 64 65 22 2c 20 22 70 31 22 2c   "opcode", "p1",
fc30: 20 22 70 32 22 2c 20 22 70 33 22 2c 20 22 70 34   "p2", "p3", "p4
fc40: 22 2c 20 22 70 35 22 2c 20 22 63 6f 6d 6d 65 6e  ", "p5", "commen
fc50: 74 22 20 7d 3b 0a 20 20 20 20 20 20 20 20 69 6e  t" };.        in
fc60: 74 20 6a 6a 3b 0a 20 20 20 20 20 20 20 20 66 6f  t jj;.        fo
fc70: 72 28 6a 6a 3d 30 3b 20 6a 6a 3c 41 72 72 61 79  r(jj=0; jj<Array
fc80: 53 69 7a 65 28 65 78 70 6c 61 69 6e 43 6f 6c 73  Size(explainCols
fc90: 29 3b 20 6a 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  ); jj++){.      
fca0: 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 73      if( strcmp(s
fcb0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
fcc0: 6d 65 28 70 53 71 6c 2c 6a 6a 29 2c 65 78 70 6c  me(pSql,jj),expl
fcd0: 61 69 6e 43 6f 6c 73 5b 6a 6a 5d 29 21 3d 30 20  ainCols[jj])!=0 
fce0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ){.            p
fcf0: 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64  ->cMode = p->mod
fd00: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  e;.            s
fd10: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70 53 71  qlite3_reset(pSq
fd20: 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  l);.            
fd30: 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
fd40: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
fd50: 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 41 6c 6c      }.      nAll
fd60: 6f 63 20 2b 3d 20 31 30 30 3b 0a 20 20 20 20 20  oc += 100;.     
fd70: 20 70 2d 3e 61 69 49 6e 64 65 6e 74 20 3d 20 28   p->aiIndent = (
fd80: 69 6e 74 2a 29 73 71 6c 69 74 65 33 5f 72 65 61  int*)sqlite3_rea
fd90: 6c 6c 6f 63 36 34 28 70 2d 3e 61 69 49 6e 64 65  lloc64(p->aiInde
fda0: 6e 74 2c 20 6e 41 6c 6c 6f 63 2a 73 69 7a 65 6f  nt, nAlloc*sizeo
fdb0: 66 28 69 6e 74 29 29 3b 0a 20 20 20 20 20 20 61  f(int));.      a
fdc0: 62 59 69 65 6c 64 20 3d 20 28 69 6e 74 2a 29 73  bYield = (int*)s
fdd0: 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 36 34  qlite3_realloc64
fde0: 28 61 62 59 69 65 6c 64 2c 20 6e 41 6c 6c 6f 63  (abYield, nAlloc
fdf0: 2a 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0a 20  *sizeof(int));. 
fe00: 20 20 20 7d 0a 20 20 20 20 61 62 59 69 65 6c 64     }.    abYield
fe10: 5b 69 4f 70 5d 20 3d 20 73 74 72 5f 69 6e 5f 61  [iOp] = str_in_a
fe20: 72 72 61 79 28 7a 4f 70 2c 20 61 7a 59 69 65 6c  rray(zOp, azYiel
fe30: 64 29 3b 0a 20 20 20 20 70 2d 3e 61 69 49 6e 64  d);.    p->aiInd
fe40: 65 6e 74 5b 69 4f 70 5d 20 3d 20 30 3b 0a 20 20  ent[iOp] = 0;.  
fe50: 20 20 70 2d 3e 6e 49 6e 64 65 6e 74 20 3d 20 69    p->nIndent = i
fe60: 4f 70 2b 31 3b 0a 0a 20 20 20 20 69 66 28 20 73  Op+1;..    if( s
fe70: 74 72 5f 69 6e 5f 61 72 72 61 79 28 7a 4f 70 2c  tr_in_array(zOp,
fe80: 20 61 7a 4e 65 78 74 29 20 29 7b 0a 20 20 20 20   azNext) ){.    
fe90: 20 20 66 6f 72 28 69 3d 70 32 6f 70 3b 20 69 3c    for(i=p2op; i<
fea0: 69 4f 70 3b 20 69 2b 2b 29 20 70 2d 3e 61 69 49  iOp; i++) p->aiI
feb0: 6e 64 65 6e 74 5b 69 5d 20 2b 3d 20 32 3b 0a 20  ndent[i] += 2;. 
fec0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 74 72     }.    if( str
fed0: 5f 69 6e 5f 61 72 72 61 79 28 7a 4f 70 2c 20 61  _in_array(zOp, a
fee0: 7a 47 6f 74 6f 29 20 26 26 20 70 32 6f 70 3c 70  zGoto) && p2op<p
fef0: 2d 3e 6e 49 6e 64 65 6e 74 0a 20 20 20 20 20 26  ->nIndent.     &
ff00: 26 20 28 61 62 59 69 65 6c 64 5b 70 32 6f 70 5d  & (abYield[p2op]
ff10: 20 7c 7c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   || sqlite3_colu
ff20: 6d 6e 5f 69 6e 74 28 70 53 71 6c 2c 20 32 29 29  mn_int(pSql, 2))
ff30: 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 66 6f  .    ){.      fo
ff40: 72 28 69 3d 70 32 6f 70 3b 20 69 3c 69 4f 70 3b  r(i=p2op; i<iOp;
ff50: 20 69 2b 2b 29 20 70 2d 3e 61 69 49 6e 64 65 6e   i++) p->aiInden
ff60: 74 5b 69 5d 20 2b 3d 20 32 3b 0a 20 20 20 20 7d  t[i] += 2;.    }
ff70: 0a 20 20 7d 0a 0a 20 20 70 2d 3e 69 49 6e 64 65  .  }..  p->iInde
ff80: 6e 74 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  nt = 0;.  sqlite
ff90: 33 5f 66 72 65 65 28 61 62 59 69 65 6c 64 29 3b  3_free(abYield);
ffa0: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  .  sqlite3_reset
ffb0: 28 70 53 71 6c 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  (pSql);.}../*.**
ffc0: 20 46 72 65 65 20 74 68 65 20 61 72 72 61 79 20   Free the array 
ffd0: 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 65 78 70  allocated by exp
ffe0: 6c 61 69 6e 5f 64 61 74 61 5f 70 72 65 70 61 72  lain_data_prepar
fff0: 65 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  e()..*/.static v
10000 6f 69 64 20 65 78 70 6c 61 69 6e 5f 64 61 74 61  oid explain_data
10010 5f 64 65 6c 65 74 65 28 53 68 65 6c 6c 53 74 61  _delete(ShellSta
10020 74 65 20 2a 70 29 7b 0a 20 20 73 71 6c 69 74 65  te *p){.  sqlite
10030 33 5f 66 72 65 65 28 70 2d 3e 61 69 49 6e 64 65  3_free(p->aiInde
10040 6e 74 29 3b 0a 20 20 70 2d 3e 61 69 49 6e 64 65  nt);.  p->aiInde
10050 6e 74 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 49 6e  nt = 0;.  p->nIn
10060 64 65 6e 74 20 3d 20 30 3b 0a 20 20 70 2d 3e 69  dent = 0;.  p->i
10070 49 6e 64 65 6e 74 20 3d 20 30 3b 0a 7d 0a 0a 2f  Indent = 0;.}../
10080 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 61 6e 64  *.** Disable and
10090 20 72 65 73 74 6f 72 65 20 2e 77 68 65 72 65 74   restore .wheret
100a0 72 61 63 65 20 61 6e 64 20 2e 73 65 6c 65 63 74  race and .select
100b0 74 72 61 63 65 20 73 65 74 74 69 6e 67 73 2e 0a  trace settings..
100c0 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
100d0 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20  QLITE_DEBUG) && 
100e0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
100f0 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
10100 45 29 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71  E).extern int sq
10110 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63 65  lite3SelectTrace
10120 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 73 61 76  ;.static int sav
10130 65 64 53 65 6c 65 63 74 54 72 61 63 65 3b 0a 23  edSelectTrace;.#
10140 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
10150 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
10160 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
10170 45 5f 45 4e 41 42 4c 45 5f 57 48 45 52 45 54 52  E_ENABLE_WHERETR
10180 41 43 45 29 0a 65 78 74 65 72 6e 20 69 6e 74 20  ACE).extern int 
10190 73 71 6c 69 74 65 33 57 68 65 72 65 54 72 61 63  sqlite3WhereTrac
101a0 65 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 73 61  e;.static int sa
101b0 76 65 64 57 68 65 72 65 54 72 61 63 65 3b 0a 23  vedWhereTrace;.#
101c0 65 6e 64 69 66 0a 73 74 61 74 69 63 20 76 6f 69  endif.static voi
101d0 64 20 64 69 73 61 62 6c 65 5f 64 65 62 75 67 5f  d disable_debug_
101e0 74 72 61 63 65 5f 6d 6f 64 65 73 28 76 6f 69 64  trace_modes(void
101f0 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ){.#if defined(S
10200 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20  QLITE_DEBUG) && 
10210 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
10220 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
10230 45 29 0a 20 20 73 61 76 65 64 53 65 6c 65 63 74  E).  savedSelect
10240 54 72 61 63 65 20 3d 20 73 71 6c 69 74 65 33 53  Trace = sqlite3S
10250 65 6c 65 63 74 54 72 61 63 65 3b 0a 20 20 73 71  electTrace;.  sq
10260 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63 65  lite3SelectTrace
10270 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 23 69 66   = 0;.#endif.#if
10280 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
10290 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65  DEBUG) && define
102a0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
102b0 57 48 45 52 45 54 52 41 43 45 29 0a 20 20 73 61  WHERETRACE).  sa
102c0 76 65 64 57 68 65 72 65 54 72 61 63 65 20 3d 20  vedWhereTrace = 
102d0 73 71 6c 69 74 65 33 57 68 65 72 65 54 72 61 63  sqlite3WhereTrac
102e0 65 3b 0a 20 20 73 71 6c 69 74 65 33 57 68 65 72  e;.  sqlite3Wher
102f0 65 54 72 61 63 65 20 3d 20 30 3b 0a 23 65 6e 64  eTrace = 0;.#end
10300 69 66 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64  if.}.static void
10310 20 72 65 73 74 6f 72 65 5f 64 65 62 75 67 5f 74   restore_debug_t
10320 72 61 63 65 5f 6d 6f 64 65 73 28 76 6f 69 64 29  race_modes(void)
10330 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  {.#if defined(SQ
10340 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64  LITE_DEBUG) && d
10350 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
10360 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45  ABLE_SELECTTRACE
10370 29 0a 20 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ).  sqlite3Selec
10380 74 54 72 61 63 65 20 3d 20 73 61 76 65 64 53 65  tTrace = savedSe
10390 6c 65 63 74 54 72 61 63 65 3b 0a 23 65 6e 64 69  lectTrace;.#endi
103a0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
103b0 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64  LITE_DEBUG) && d
103c0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
103d0 41 42 4c 45 5f 57 48 45 52 45 54 52 41 43 45 29  ABLE_WHERETRACE)
103e0 0a 20 20 73 71 6c 69 74 65 33 57 68 65 72 65 54  .  sqlite3WhereT
103f0 72 61 63 65 20 3d 20 73 61 76 65 64 57 68 65 72  race = savedWher
10400 65 54 72 61 63 65 3b 0a 23 65 6e 64 69 66 0a 7d  eTrace;.#endif.}
10410 0a 0a 2f 2a 0a 2a 2a 20 52 75 6e 20 61 20 70 72  ../*.** Run a pr
10420 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
10430 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
10440 65 78 65 63 5f 70 72 65 70 61 72 65 64 5f 73 74  exec_prepared_st
10450 6d 74 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65  mt(.  ShellState
10460 20 2a 70 41 72 67 2c 20 20 20 20 20 20 20 20 20   *pArg,         
10470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10480 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
10490 72 20 74 6f 20 53 68 65 6c 6c 53 74 61 74 65 20  r to ShellState 
104a0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  */.  sqlite3_stm
104b0 74 20 2a 70 53 74 6d 74 2c 20 20 20 20 20 20 20  t *pStmt,       
104c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104d0 20 20 20 20 20 20 2f 2a 20 53 74 61 74 6d 65 6e        /* Statmen
104e0 74 20 74 6f 20 72 75 6e 20 2a 2f 0a 20 20 69 6e  t to run */.  in
104f0 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76  t (*xCallback)(v
10500 6f 69 64 2a 2c 69 6e 74 2c 63 68 61 72 2a 2a 2c  oid*,int,char**,
10510 63 68 61 72 2a 2a 2c 69 6e 74 2a 29 20 20 20 2f  char**,int*)   /
10520 2a 20 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74  * Callback funct
10530 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  ion */.){.  int 
10540 72 63 3b 0a 0a 20 20 2f 2a 20 70 65 72 66 6f 72  rc;..  /* perfor
10550 6d 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70  m the first step
10560 2e 20 20 74 68 69 73 20 77 69 6c 6c 20 74 65 6c  .  this will tel
10570 6c 20 75 73 20 69 66 20 77 65 0a 20 20 2a 2a 20  l us if we.  ** 
10580 68 61 76 65 20 61 20 72 65 73 75 6c 74 20 73 65  have a result se
10590 74 20 6f 72 20 6e 6f 74 20 61 6e 64 20 68 6f 77  t or not and how
105a0 20 77 69 64 65 20 69 74 20 69 73 2e 0a 20 20 2a   wide it is..  *
105b0 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
105c0 5f 73 74 65 70 28 70 53 74 6d 74 29 3b 0a 20 20  _step(pStmt);.  
105d0 2f 2a 20 69 66 20 77 65 20 68 61 76 65 20 61 20  /* if we have a 
105e0 72 65 73 75 6c 74 20 73 65 74 2e 2e 2e 20 2a 2f  result set... */
105f0 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 52 4f  .  if( SQLITE_RO
10600 57 20 3d 3d 20 72 63 20 29 7b 0a 20 20 20 20 2f  W == rc ){.    /
10610 2a 20 69 66 20 77 65 20 68 61 76 65 20 61 20 63  * if we have a c
10620 61 6c 6c 62 61 63 6b 2e 2e 2e 20 2a 2f 0a 20 20  allback... */.  
10630 20 20 69 66 28 20 78 43 61 6c 6c 62 61 63 6b 20    if( xCallback 
10640 29 7b 0a 20 20 20 20 20 20 2f 2a 20 61 6c 6c 6f  ){.      /* allo
10650 63 61 74 65 20 73 70 61 63 65 20 66 6f 72 20 63  cate space for c
10660 6f 6c 20 6e 61 6d 65 20 70 74 72 2c 20 76 61 6c  ol name ptr, val
10670 75 65 20 70 74 72 2c 20 61 6e 64 20 74 79 70 65  ue ptr, and type
10680 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 6e 43   */.      int nC
10690 6f 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  ol = sqlite3_col
106a0 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  umn_count(pStmt)
106b0 3b 0a 20 20 20 20 20 20 76 6f 69 64 20 2a 70 44  ;.      void *pD
106c0 61 74 61 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61  ata = sqlite3_ma
106d0 6c 6c 6f 63 36 34 28 33 2a 6e 43 6f 6c 2a 73 69  lloc64(3*nCol*si
106e0 7a 65 6f 66 28 63 6f 6e 73 74 20 63 68 61 72 2a  zeof(const char*
106f0 29 20 2b 20 31 29 3b 0a 20 20 20 20 20 20 69 66  ) + 1);.      if
10700 28 20 21 70 44 61 74 61 20 29 7b 0a 20 20 20 20  ( !pData ){.    
10710 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
10720 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20 7d 65 6c  NOMEM;.      }el
10730 73 65 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72  se{.        char
10740 20 2a 2a 61 7a 43 6f 6c 73 20 3d 20 28 63 68 61   **azCols = (cha
10750 72 20 2a 2a 29 70 44 61 74 61 3b 20 20 20 20 20  r **)pData;     
10760 20 2f 2a 20 4e 61 6d 65 73 20 6f 66 20 72 65 73   /* Names of res
10770 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  ult columns */. 
10780 20 20 20 20 20 20 20 63 68 61 72 20 2a 2a 61 7a         char **az
10790 56 61 6c 73 20 3d 20 26 61 7a 43 6f 6c 73 5b 6e  Vals = &azCols[n
107a0 43 6f 6c 5d 3b 20 20 20 20 20 20 20 2f 2a 20 52  Col];       /* R
107b0 65 73 75 6c 74 73 20 2a 2f 0a 20 20 20 20 20 20  esults */.      
107c0 20 20 69 6e 74 20 2a 61 69 54 79 70 65 73 20 3d    int *aiTypes =
107d0 20 28 69 6e 74 20 2a 29 26 61 7a 56 61 6c 73 5b   (int *)&azVals[
107e0 6e 43 6f 6c 5d 3b 20 2f 2a 20 52 65 73 75 6c 74  nCol]; /* Result
107f0 20 74 79 70 65 73 20 2a 2f 0a 20 20 20 20 20 20   types */.      
10800 20 20 69 6e 74 20 69 2c 20 78 3b 0a 20 20 20 20    int i, x;.    
10810 20 20 20 20 61 73 73 65 72 74 28 73 69 7a 65 6f      assert(sizeo
10820 66 28 69 6e 74 29 20 3c 3d 20 73 69 7a 65 6f 66  f(int) <= sizeof
10830 28 63 68 61 72 20 2a 29 29 3b 0a 20 20 20 20 20  (char *));.     
10840 20 20 20 2f 2a 20 73 61 76 65 20 6f 66 66 20 70     /* save off p
10850 74 72 73 20 74 6f 20 63 6f 6c 75 6d 6e 20 6e 61  trs to column na
10860 6d 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 66  mes */.        f
10870 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20  or(i=0; i<nCol; 
10880 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
10890 61 7a 43 6f 6c 73 5b 69 5d 20 3d 20 28 63 68 61  azCols[i] = (cha
108a0 72 20 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  r *)sqlite3_colu
108b0 6d 6e 5f 6e 61 6d 65 28 70 53 74 6d 74 2c 20 69  mn_name(pStmt, i
108c0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
108d0 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
108e0 20 20 20 2f 2a 20 65 78 74 72 61 63 74 20 74 68     /* extract th
108f0 65 20 64 61 74 61 20 61 6e 64 20 64 61 74 61 20  e data and data 
10900 74 79 70 65 73 20 2a 2f 0a 20 20 20 20 20 20 20  types */.       
10910 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43     for(i=0; i<nC
10920 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; i++){.      
10930 20 20 20 20 20 20 61 69 54 79 70 65 73 5b 69 5d        aiTypes[i]
10940 20 3d 20 78 20 3d 20 73 71 6c 69 74 65 33 5f 63   = x = sqlite3_c
10950 6f 6c 75 6d 6e 5f 74 79 70 65 28 70 53 74 6d 74  olumn_type(pStmt
10960 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , i);.          
10970 20 20 69 66 28 20 78 3d 3d 53 51 4c 49 54 45 5f    if( x==SQLITE_
10980 42 4c 4f 42 20 26 26 20 70 41 72 67 20 26 26 20  BLOB && pArg && 
10990 70 41 72 67 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f 44  pArg->cMode==MOD
109a0 45 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20  E_Insert ){.    
109b0 20 20 20 20 20 20 20 20 20 20 61 7a 56 61 6c 73            azVals
109c0 5b 69 5d 20 3d 20 22 22 3b 0a 20 20 20 20 20 20  [i] = "";.      
109d0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
109e0 20 20 20 20 20 20 20 20 20 20 20 61 7a 56 61 6c             azVal
109f0 73 5b 69 5d 20 3d 20 28 63 68 61 72 2a 29 73 71  s[i] = (char*)sq
10a00 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
10a10 74 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20  t(pStmt, i);.   
10a20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
10a30 20 20 20 20 20 20 20 69 66 28 20 21 61 7a 56 61         if( !azVa
10a40 6c 73 5b 69 5d 20 26 26 20 28 61 69 54 79 70 65  ls[i] && (aiType
10a50 73 5b 69 5d 21 3d 53 51 4c 49 54 45 5f 4e 55 4c  s[i]!=SQLITE_NUL
10a60 4c 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  L) ){.          
10a70 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
10a80 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20 20 20 20  NOMEM;.         
10a90 20 20 20 20 20 62 72 65 61 6b 3b 20 2f 2a 20 66       break; /* f
10aa0 72 6f 6d 20 66 6f 72 20 2a 2f 0a 20 20 20 20 20  rom for */.     
10ab0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
10ac0 20 20 20 7d 20 2f 2a 20 65 6e 64 20 66 6f 72 20     } /* end for 
10ad0 2a 2f 0a 0a 20 20 20 20 20 20 20 20 20 20 2f 2a  */..          /*
10ae0 20 69 66 20 64 61 74 61 20 61 6e 64 20 74 79 70   if data and typ
10af0 65 73 20 65 78 74 72 61 63 74 65 64 20 73 75 63  es extracted suc
10b00 63 65 73 73 66 75 6c 6c 79 2e 2e 2e 20 2a 2f 0a  cessfully... */.
10b10 20 20 20 20 20 20 20 20 20 20 69 66 28 20 53 51            if( SQ
10b20 4c 49 54 45 5f 52 4f 57 20 3d 3d 20 72 63 20 29  LITE_ROW == rc )
10b30 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {.            /*
10b40 20 63 61 6c 6c 20 74 68 65 20 73 75 70 70 6c 69   call the suppli
10b50 65 64 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68  ed callback with
10b60 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20   the result row 
10b70 64 61 74 61 20 2a 2f 0a 20 20 20 20 20 20 20 20  data */.        
10b80 20 20 20 20 69 66 28 20 78 43 61 6c 6c 62 61 63      if( xCallbac
10b90 6b 28 70 41 72 67 2c 20 6e 43 6f 6c 2c 20 61 7a  k(pArg, nCol, az
10ba0 56 61 6c 73 2c 20 61 7a 43 6f 6c 73 2c 20 61 69  Vals, azCols, ai
10bb0 54 79 70 65 73 29 20 29 7b 0a 20 20 20 20 20 20  Types) ){.      
10bc0 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
10bd0 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 20  ITE_ABORT;.     
10be0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
10bf0 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
10c00 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53   sqlite3_step(pS
10c10 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  tmt);.          
10c20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a    }.          }.
10c30 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65 28          } while(
10c40 20 53 51 4c 49 54 45 5f 52 4f 57 20 3d 3d 20 72   SQLITE_ROW == r
10c50 63 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  c );.        sql
10c60 69 74 65 33 5f 66 72 65 65 28 70 44 61 74 61 29  ite3_free(pData)
10c70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
10c80 6c 73 65 7b 0a 20 20 20 20 20 20 64 6f 7b 0a 20  lse{.      do{. 
10c90 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
10ca0 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3b  te3_step(pStmt);
10cb0 0a 20 20 20 20 20 20 7d 20 77 68 69 6c 65 28 20  .      } while( 
10cc0 72 63 20 3d 3d 20 53 51 4c 49 54 45 5f 52 4f 57  rc == SQLITE_ROW
10cd0 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a   );.    }.  }.}.
10ce0 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61  ./*.** Execute a
10cf0 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 73 65   statement or se
10d00 74 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 2e  t of statements.
10d10 20 20 50 72 69 6e 74 0a 2a 2a 20 61 6e 79 20 72    Print.** any r
10d20 65 73 75 6c 74 20 72 6f 77 73 2f 63 6f 6c 75 6d  esult rows/colum
10d30 6e 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ns depending on 
10d40 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 64 65  the current mode
10d50 0a 2a 2a 20 73 65 74 20 76 69 61 20 74 68 65 20  .** set via the 
10d60 73 75 70 70 6c 69 65 64 20 63 61 6c 6c 62 61 63  supplied callbac
10d70 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73  k..**.** This is
10d80 20 76 65 72 79 20 73 69 6d 69 6c 61 72 20 74 6f   very similar to
10d90 20 53 51 4c 69 74 65 27 73 20 62 75 69 6c 74 2d   SQLite's built-
10da0 69 6e 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  in sqlite3_exec(
10db0 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 65 78  ).** function ex
10dc0 63 65 70 74 20 69 74 20 74 61 6b 65 73 20 61 20  cept it takes a 
10dd0 73 6c 69 67 68 74 6c 79 20 64 69 66 66 65 72 65  slightly differe
10de0 6e 74 20 63 61 6c 6c 62 61 63 6b 0a 2a 2a 20 61  nt callback.** a
10df0 6e 64 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61  nd callback data
10e00 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
10e10 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 5f 65  atic int shell_e
10e20 78 65 63 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  xec(.  sqlite3 *
10e30 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  db,             
10e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e50 20 2f 2a 20 41 6e 20 6f 70 65 6e 20 64 61 74 61   /* An open data
10e60 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
10e70 63 68 61 72 20 2a 7a 53 71 6c 2c 20 20 20 20 20  char *zSql,     
10e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e90 20 20 20 20 2f 2a 20 53 51 4c 20 74 6f 20 62 65      /* SQL to be
10ea0 20 65 76 61 6c 75 61 74 65 64 20 2a 2f 0a 20 20   evaluated */.  
10eb0 69 6e 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29  int (*xCallback)
10ec0 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 68 61 72 2a  (void*,int,char*
10ed0 2a 2c 63 68 61 72 2a 2a 2c 69 6e 74 2a 29 2c 20  *,char**,int*), 
10ee0 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 75    /* Callback fu
10ef0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 20 20  nction */.      
10f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f20 20 20 20 20 20 20 2f 2a 20 28 6e 6f 74 20 74 68        /* (not th
10f30 65 20 73 61 6d 65 20 61 73 20 73 71 6c 69 74 65  e same as sqlite
10f40 33 5f 65 78 65 63 29 20 2a 2f 0a 20 20 53 68 65  3_exec) */.  She
10f50 6c 6c 53 74 61 74 65 20 2a 70 41 72 67 2c 20 20  llState *pArg,  
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f70 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
10f80 72 20 74 6f 20 53 68 65 6c 6c 53 74 61 74 65 20  r to ShellState 
10f90 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
10fa0 72 4d 73 67 20 20 20 20 20 20 20 20 20 20 20 20  rMsg            
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10fc0 2a 20 45 72 72 6f 72 20 6d 73 67 20 77 72 69 74  * Error msg writ
10fd0 74 65 6e 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20  ten here */.){. 
10fe0 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
10ff0 53 74 6d 74 20 3d 20 4e 55 4c 4c 3b 20 20 20 20  Stmt = NULL;    
11000 20 2f 2a 20 53 74 61 74 65 6d 65 6e 74 20 74 6f   /* Statement to
11010 20 65 78 65 63 75 74 65 2e 20 2a 2f 0a 20 20 69   execute. */.  i
11020 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  nt rc = SQLITE_O
11030 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  K;             /
11040 2a 20 52 65 74 75 72 6e 20 43 6f 64 65 20 2a 2f  * Return Code */
11050 0a 20 20 69 6e 74 20 72 63 32 3b 0a 20 20 63 6f  .  int rc2;.  co
11060 6e 73 74 20 63 68 61 72 20 2a 7a 4c 65 66 74 6f  nst char *zLefto
11070 76 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ver;          /*
11080 20 54 61 69 6c 20 6f 66 20 75 6e 70 72 6f 63 65   Tail of unproce
11090 73 73 65 64 20 53 51 4c 20 2a 2f 0a 0a 20 20 69  ssed SQL */..  i
110a0 66 28 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20  f( pzErrMsg ){. 
110b0 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 4e     *pzErrMsg = N
110c0 55 4c 4c 3b 0a 20 20 7d 0a 0a 20 20 77 68 69 6c  ULL;.  }..  whil
110d0 65 28 20 7a 53 71 6c 5b 30 5d 20 26 26 20 28 53  e( zSql[0] && (S
110e0 51 4c 49 54 45 5f 4f 4b 20 3d 3d 20 72 63 29 20  QLITE_OK == rc) 
110f0 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
11100 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 6d 74 53  nst char *zStmtS
11110 71 6c 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  ql;.    rc = sql
11120 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
11130 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70  db, zSql, -1, &p
11140 53 74 6d 74 2c 20 26 7a 4c 65 66 74 6f 76 65 72  Stmt, &zLeftover
11150 29 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54  );.    if( SQLIT
11160 45 5f 4f 4b 20 21 3d 20 72 63 20 29 7b 0a 20 20  E_OK != rc ){.  
11170 20 20 20 20 69 66 28 20 70 7a 45 72 72 4d 73 67      if( pzErrMsg
11180 20 29 7b 0a 20 20 20 20 20 20 20 20 2a 70 7a 45   ){.        *pzE
11190 72 72 4d 73 67 20 3d 20 73 61 76 65 5f 65 72 72  rrMsg = save_err
111a0 5f 6d 73 67 28 64 62 29 3b 0a 20 20 20 20 20 20  _msg(db);.      
111b0 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
111c0 20 20 20 69 66 28 20 21 70 53 74 6d 74 20 29 7b     if( !pStmt ){
111d0 0a 20 20 20 20 20 20 20 20 2f 2a 20 74 68 69 73  .        /* this
111e0 20 68 61 70 70 65 6e 73 20 66 6f 72 20 61 20 63   happens for a c
111f0 6f 6d 6d 65 6e 74 20 6f 72 20 77 68 69 74 65 2d  omment or white-
11200 73 70 61 63 65 20 2a 2f 0a 20 20 20 20 20 20 20  space */.       
11210 20 7a 53 71 6c 20 3d 20 7a 4c 65 66 74 6f 76 65   zSql = zLeftove
11220 72 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  r;.        while
11230 28 20 49 73 53 70 61 63 65 28 7a 53 71 6c 5b 30  ( IsSpace(zSql[0
11240 5d 29 20 29 20 7a 53 71 6c 2b 2b 3b 0a 20 20 20  ]) ) zSql++;.   
11250 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20       continue;. 
11260 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 53 74       }.      zSt
11270 6d 74 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f  mtSql = sqlite3_
11280 73 71 6c 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  sql(pStmt);.    
11290 20 20 69 66 28 20 7a 53 74 6d 74 53 71 6c 3d 3d    if( zStmtSql==
112a0 30 20 29 20 7a 53 74 6d 74 53 71 6c 20 3d 20 22  0 ) zStmtSql = "
112b0 22 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  ";.      while( 
112c0 49 73 53 70 61 63 65 28 7a 53 74 6d 74 53 71 6c  IsSpace(zStmtSql
112d0 5b 30 5d 29 20 29 20 7a 53 74 6d 74 53 71 6c 2b  [0]) ) zStmtSql+
112e0 2b 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 73 61 76  +;..      /* sav
112f0 65 20 6f 66 66 20 74 68 65 20 70 72 65 70 61 72  e off the prepar
11300 65 64 20 73 74 61 74 6d 65 6e 74 20 68 61 6e 64  ed statment hand
11310 6c 65 20 61 6e 64 20 72 65 73 65 74 20 72 6f 77  le and reset row
11320 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20   count */.      
11330 69 66 28 20 70 41 72 67 20 29 7b 0a 20 20 20 20  if( pArg ){.    
11340 20 20 20 20 70 41 72 67 2d 3e 70 53 74 6d 74 20      pArg->pStmt 
11350 3d 20 70 53 74 6d 74 3b 0a 20 20 20 20 20 20 20  = pStmt;.       
11360 20 70 41 72 67 2d 3e 63 6e 74 20 3d 20 30 3b 0a   pArg->cnt = 0;.
11370 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
11380 2a 20 65 63 68 6f 20 74 68 65 20 73 71 6c 20 73  * echo the sql s
11390 74 61 74 65 6d 65 6e 74 20 69 66 20 65 63 68 6f  tatement if echo
113a0 20 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28   on */.      if(
113b0 20 70 41 72 67 20 26 26 20 53 68 65 6c 6c 48 61   pArg && ShellHa
113c0 73 46 6c 61 67 28 70 41 72 67 2c 20 53 48 46 4c  sFlag(pArg, SHFL
113d0 47 5f 45 63 68 6f 29 20 29 7b 0a 20 20 20 20 20  G_Echo) ){.     
113e0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
113f0 41 72 67 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e 22  Arg->out, "%s\n"
11400 2c 20 7a 53 74 6d 74 53 71 6c 20 3f 20 7a 53 74  , zStmtSql ? zSt
11410 6d 74 53 71 6c 20 3a 20 7a 53 71 6c 29 3b 0a 20  mtSql : zSql);. 
11420 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
11430 20 53 68 6f 77 20 74 68 65 20 45 58 50 4c 41 49   Show the EXPLAI
11440 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 69 66 20  N QUERY PLAN if 
11450 2e 65 71 70 20 69 73 20 6f 6e 20 2a 2f 0a 20 20  .eqp is on */.  
11460 20 20 20 20 69 66 28 20 70 41 72 67 20 26 26 20      if( pArg && 
11470 70 41 72 67 2d 3e 61 75 74 6f 45 51 50 20 26 26  pArg->autoEQP &&
11480 20 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65   sqlite3_strlike
11490 28 22 45 58 50 4c 41 49 4e 25 22 2c 7a 53 74 6d  ("EXPLAIN%",zStm
114a0 74 53 71 6c 2c 30 29 21 3d 30 20 29 7b 0a 20 20  tSql,0)!=0 ){.  
114b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74        sqlite3_st
114c0 6d 74 20 2a 70 45 78 70 6c 61 69 6e 3b 0a 20 20  mt *pExplain;.  
114d0 20 20 20 20 20 20 63 68 61 72 20 2a 7a 45 51 50        char *zEQP
114e0 3b 0a 20 20 20 20 20 20 20 20 64 69 73 61 62 6c  ;.        disabl
114f0 65 5f 64 65 62 75 67 5f 74 72 61 63 65 5f 6d 6f  e_debug_trace_mo
11500 64 65 73 28 29 3b 0a 20 20 20 20 20 20 20 20 7a  des();.        z
11510 45 51 50 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  EQP = sqlite3_mp
11520 72 69 6e 74 66 28 22 45 58 50 4c 41 49 4e 20 51  rintf("EXPLAIN Q
11530 55 45 52 59 20 50 4c 41 4e 20 25 73 22 2c 20 7a  UERY PLAN %s", z
11540 53 74 6d 74 53 71 6c 29 3b 0a 20 20 20 20 20 20  StmtSql);.      
11550 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
11560 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20 7a 45  repare_v2(db, zE
11570 51 50 2c 20 2d 31 2c 20 26 70 45 78 70 6c 61 69  QP, -1, &pExplai
11580 6e 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 69  n, 0);.        i
11590 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
115a0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 77 68   ){.          wh
115b0 69 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65  ile( sqlite3_ste
115c0 70 28 70 45 78 70 6c 61 69 6e 29 3d 3d 53 51 4c  p(pExplain)==SQL
115d0 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20  ITE_ROW ){.     
115e0 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
115f0 66 28 70 41 72 67 2d 3e 6f 75 74 2c 22 2d 2d 45  f(pArg->out,"--E
11600 51 50 2d 2d 20 25 64 2c 22 2c 73 71 6c 69 74 65  QP-- %d,",sqlite
11610 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 45 78  3_column_int(pEx
11620 70 6c 61 69 6e 2c 20 30 29 29 3b 0a 20 20 20 20  plain, 0));.    
11630 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
11640 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 22 25 64  tf(pArg->out,"%d
11650 2c 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ,", sqlite3_colu
11660 6d 6e 5f 69 6e 74 28 70 45 78 70 6c 61 69 6e 2c  mn_int(pExplain,
11670 20 31 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20   1));.          
11680 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72    raw_printf(pAr
11690 67 2d 3e 6f 75 74 2c 22 25 64 2c 22 2c 20 73 71  g->out,"%d,", sq
116a0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
116b0 28 70 45 78 70 6c 61 69 6e 2c 20 32 29 29 3b 0a  (pExplain, 2));.
116c0 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38              utf8
116d0 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
116e0 74 2c 22 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65  t,"%s\n", sqlite
116f0 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 45  3_column_text(pE
11700 78 70 6c 61 69 6e 2c 20 33 29 29 3b 0a 20 20 20  xplain, 3));.   
11710 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
11720 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
11730 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 45 78 70  e3_finalize(pExp
11740 6c 61 69 6e 29 3b 0a 20 20 20 20 20 20 20 20 73  lain);.        s
11750 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 51 50  qlite3_free(zEQP
11760 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
11770 41 72 67 2d 3e 61 75 74 6f 45 51 50 3e 3d 32 20  Arg->autoEQP>=2 
11780 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
11790 41 6c 73 6f 20 64 6f 20 61 6e 20 45 58 50 4c 41  Also do an EXPLA
117a0 49 4e 20 66 6f 72 20 22 2e 65 71 70 20 66 75 6c  IN for ".eqp ful
117b0 6c 22 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20  l" mode */.     
117c0 20 20 20 20 20 7a 45 51 50 20 3d 20 73 71 6c 69       zEQP = sqli
117d0 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 45 58 50  te3_mprintf("EXP
117e0 4c 41 49 4e 20 25 73 22 2c 20 7a 53 74 6d 74 53  LAIN %s", zStmtS
117f0 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72  ql);.          r
11800 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
11810 61 72 65 5f 76 32 28 64 62 2c 20 7a 45 51 50 2c  are_v2(db, zEQP,
11820 20 2d 31 2c 20 26 70 45 78 70 6c 61 69 6e 2c 20   -1, &pExplain, 
11830 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  0);.          if
11840 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
11850 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ){.            p
11860 41 72 67 2d 3e 63 4d 6f 64 65 20 3d 20 4d 4f 44  Arg->cMode = MOD
11870 45 5f 45 78 70 6c 61 69 6e 3b 0a 20 20 20 20 20  E_Explain;.     
11880 20 20 20 20 20 20 20 65 78 70 6c 61 69 6e 5f 64         explain_d
11890 61 74 61 5f 70 72 65 70 61 72 65 28 70 41 72 67  ata_prepare(pArg
118a0 2c 20 70 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20  , pExplain);.   
118b0 20 20 20 20 20 20 20 20 20 65 78 65 63 5f 70 72           exec_pr
118c0 65 70 61 72 65 64 5f 73 74 6d 74 28 70 41 72 67  epared_stmt(pArg
118d0 2c 20 70 45 78 70 6c 61 69 6e 2c 20 78 43 61 6c  , pExplain, xCal
118e0 6c 62 61 63 6b 29 3b 0a 20 20 20 20 20 20 20 20  lback);.        
118f0 20 20 20 20 65 78 70 6c 61 69 6e 5f 64 61 74 61      explain_data
11900 5f 64 65 6c 65 74 65 28 70 41 72 67 29 3b 0a 20  _delete(pArg);. 
11910 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
11920 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e       sqlite3_fin
11930 61 6c 69 7a 65 28 70 45 78 70 6c 61 69 6e 29 3b  alize(pExplain);
11940 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
11950 65 33 5f 66 72 65 65 28 7a 45 51 50 29 3b 0a 20  e3_free(zEQP);. 
11960 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
11970 20 72 65 73 74 6f 72 65 5f 64 65 62 75 67 5f 74   restore_debug_t
11980 72 61 63 65 5f 6d 6f 64 65 73 28 29 3b 0a 20 20  race_modes();.  
11990 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28      }..      if(
119a0 20 70 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20   pArg ){.       
119b0 20 70 41 72 67 2d 3e 63 4d 6f 64 65 20 3d 20 70   pArg->cMode = p
119c0 41 72 67 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20 20  Arg->mode;.     
119d0 20 20 20 69 66 28 20 70 41 72 67 2d 3e 61 75 74     if( pArg->aut
119e0 6f 45 78 70 6c 61 69 6e 0a 20 20 20 20 20 20 20  oExplain.       
119f0 20 20 26 26 20 73 71 6c 69 74 65 33 5f 63 6f 6c    && sqlite3_col
11a00 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  umn_count(pStmt)
11a10 3d 3d 38 0a 20 20 20 20 20 20 20 20 20 26 26 20  ==8.         && 
11a20 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28  sqlite3_strlike(
11a30 22 45 58 50 4c 41 49 4e 25 22 2c 20 7a 53 74 6d  "EXPLAIN%", zStm
11a40 74 53 71 6c 2c 30 29 3d 3d 30 0a 20 20 20 20 20  tSql,0)==0.     
11a50 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20     ){.          
11a60 70 41 72 67 2d 3e 63 4d 6f 64 65 20 3d 20 4d 4f  pArg->cMode = MO
11a70 44 45 5f 45 78 70 6c 61 69 6e 3b 0a 20 20 20 20  DE_Explain;.    
11a80 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f      }..        /
11a90 2a 20 49 66 20 74 68 65 20 73 68 65 6c 6c 20 69  * If the shell i
11aa0 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 22  s currently in "
11ab0 2e 65 78 70 6c 61 69 6e 22 20 6d 6f 64 65 2c 20  .explain" mode, 
11ac0 67 61 74 68 65 72 20 74 68 65 20 65 78 74 72 61  gather the extra
11ad0 0a 20 20 20 20 20 20 20 20 2a 2a 20 64 61 74 61  .        ** data
11ae0 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 64 64   required to add
11af0 20 69 6e 64 65 6e 74 73 20 74 6f 20 74 68 65 20   indents to the 
11b00 6f 75 74 70 75 74 2e 2a 2f 0a 20 20 20 20 20 20  output.*/.      
11b10 20 20 69 66 28 20 70 41 72 67 2d 3e 63 4d 6f 64    if( pArg->cMod
11b20 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20  e==MODE_Explain 
11b30 29 7b 0a 20 20 20 20 20 20 20 20 20 20 65 78 70  ){.          exp
11b40 6c 61 69 6e 5f 64 61 74 61 5f 70 72 65 70 61 72  lain_data_prepar
11b50 65 28 70 41 72 67 2c 20 70 53 74 6d 74 29 3b 0a  e(pArg, pStmt);.
11b60 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
11b70 7d 0a 0a 20 20 20 20 20 20 65 78 65 63 5f 70 72  }..      exec_pr
11b80 65 70 61 72 65 64 5f 73 74 6d 74 28 70 41 72 67  epared_stmt(pArg
11b90 2c 20 70 53 74 6d 74 2c 20 78 43 61 6c 6c 62 61  , pStmt, xCallba
11ba0 63 6b 29 3b 0a 20 20 20 20 20 20 65 78 70 6c 61  ck);.      expla
11bb0 69 6e 5f 64 61 74 61 5f 64 65 6c 65 74 65 28 70  in_data_delete(p
11bc0 41 72 67 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  Arg);..      /* 
11bd0 70 72 69 6e 74 20 75 73 61 67 65 20 73 74 61 74  print usage stat
11be0 73 20 69 66 20 73 74 61 74 73 20 6f 6e 20 2a 2f  s if stats on */
11bf0 0a 20 20 20 20 20 20 69 66 28 20 70 41 72 67 20  .      if( pArg 
11c00 26 26 20 70 41 72 67 2d 3e 73 74 61 74 73 4f 6e  && pArg->statsOn
11c10 20 29 7b 0a 20 20 20 20 20 20 20 20 64 69 73 70   ){.        disp
11c20 6c 61 79 5f 73 74 61 74 73 28 64 62 2c 20 70 41  lay_stats(db, pA
11c30 72 67 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a  rg, 0);.      }.
11c40 0a 20 20 20 20 20 20 2f 2a 20 70 72 69 6e 74 20  .      /* print 
11c50 6c 6f 6f 70 2d 63 6f 75 6e 74 65 72 73 20 69 66  loop-counters if
11c60 20 72 65 71 75 69 72 65 64 20 2a 2f 0a 20 20 20   required */.   
11c70 20 20 20 69 66 28 20 70 41 72 67 20 26 26 20 70     if( pArg && p
11c80 41 72 67 2d 3e 73 63 61 6e 73 74 61 74 73 4f 6e  Arg->scanstatsOn
11c90 20 29 7b 0a 20 20 20 20 20 20 20 20 64 69 73 70   ){.        disp
11ca0 6c 61 79 5f 73 63 61 6e 73 74 61 74 73 28 64 62  lay_scanstats(db
11cb0 2c 20 70 41 72 67 29 3b 0a 20 20 20 20 20 20 7d  , pArg);.      }
11cc0 0a 0a 20 20 20 20 20 20 2f 2a 20 46 69 6e 61 6c  ..      /* Final
11cd0 69 7a 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ize the statemen
11ce0 74 20 6a 75 73 74 20 65 78 65 63 75 74 65 64 2e  t just executed.
11cf0 20 49 66 20 74 68 69 73 20 66 61 69 6c 73 2c 20   If this fails, 
11d00 73 61 76 65 20 61 0a 20 20 20 20 20 20 2a 2a 20  save a.      ** 
11d10 63 6f 70 79 20 6f 66 20 74 68 65 20 65 72 72 6f  copy of the erro
11d20 72 20 6d 65 73 73 61 67 65 2e 20 4f 74 68 65 72  r message. Other
11d30 77 69 73 65 2c 20 73 65 74 20 7a 53 71 6c 20 74  wise, set zSql t
11d40 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 0a 20  o point to the. 
11d50 20 20 20 20 20 2a 2a 20 6e 65 78 74 20 73 74 61       ** next sta
11d60 74 65 6d 65 6e 74 20 74 6f 20 65 78 65 63 75 74  tement to execut
11d70 65 2e 20 2a 2f 0a 20 20 20 20 20 20 72 63 32 20  e. */.      rc2 
11d80 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  = sqlite3_finali
11d90 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20  ze(pStmt);.     
11da0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
11db0 4e 4f 4d 45 4d 20 29 20 72 63 20 3d 20 72 63 32  NOMEM ) rc = rc2
11dc0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
11dd0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
11de0 20 20 20 20 20 7a 53 71 6c 20 3d 20 7a 4c 65 66       zSql = zLef
11df0 74 6f 76 65 72 3b 0a 20 20 20 20 20 20 20 20 77  tover;.        w
11e00 68 69 6c 65 28 20 49 73 53 70 61 63 65 28 7a 53  hile( IsSpace(zS
11e10 71 6c 5b 30 5d 29 20 29 20 7a 53 71 6c 2b 2b 3b  ql[0]) ) zSql++;
11e20 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
11e30 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20   pzErrMsg ){.   
11e40 20 20 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d       *pzErrMsg =
11e50 20 73 61 76 65 5f 65 72 72 5f 6d 73 67 28 64 62   save_err_msg(db
11e60 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  );.      }..    
11e70 20 20 2f 2a 20 63 6c 65 61 72 20 73 61 76 65 64    /* clear saved
11e80 20 73 74 6d 74 20 68 61 6e 64 6c 65 20 2a 2f 0a   stmt handle */.
11e90 20 20 20 20 20 20 69 66 28 20 70 41 72 67 20 29        if( pArg )
11ea0 7b 0a 20 20 20 20 20 20 20 20 70 41 72 67 2d 3e  {.        pArg->
11eb0 70 53 74 6d 74 20 3d 20 4e 55 4c 4c 3b 0a 20 20  pStmt = NULL;.  
11ec0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 20      }.    }.  } 
11ed0 2f 2a 20 65 6e 64 20 77 68 69 6c 65 20 2a 2f 0a  /* end while */.
11ee0 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
11ef0 0a 2f 2a 0a 2a 2a 20 52 65 6c 65 61 73 65 20 6d  ./*.** Release m
11f00 65 6d 6f 72 79 20 70 72 65 76 69 6f 75 73 6c 79  emory previously
11f10 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 74 61   allocated by ta
11f20 62 6c 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 29 2e  bleColumnList().
11f30 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
11f40 66 72 65 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 63  freeColumnList(c
11f50 68 61 72 20 2a 2a 61 7a 43 6f 6c 29 7b 0a 20 20  har **azCol){.  
11f60 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 31  int i;.  for(i=1
11f70 3b 20 61 7a 43 6f 6c 5b 69 5d 3b 20 69 2b 2b 29  ; azCol[i]; i++)
11f80 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  {.    sqlite3_fr
11f90 65 65 28 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20  ee(azCol[i]);.  
11fa0 7d 0a 20 20 2f 2a 20 61 7a 43 6f 6c 5b 30 5d 20  }.  /* azCol[0] 
11fb0 69 73 20 61 20 73 74 61 74 69 63 20 73 74 72 69  is a static stri
11fc0 6e 67 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ng */.  sqlite3_
11fd0 66 72 65 65 28 61 7a 43 6f 6c 29 3b 0a 7d 0a 0a  free(azCol);.}..
11fe0 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 6c  /*.** Return a l
11ff0 69 73 74 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ist of pointers 
12000 74 6f 20 73 74 72 69 6e 67 73 20 77 68 69 63 68  to strings which
12010 20 61 72 65 20 74 68 65 20 6e 61 6d 65 73 20 6f   are the names o
12020 66 20 61 6c 6c 0a 2a 2a 20 63 6f 6c 75 6d 6e 73  f all.** columns
12030 20 69 6e 20 74 61 62 6c 65 20 7a 54 61 62 2e 20   in table zTab. 
12040 20 20 54 68 65 20 6d 65 6d 6f 72 79 20 74 6f 20    The memory to 
12050 68 6f 6c 64 20 74 68 65 20 6e 61 6d 65 73 20 69  hold the names i
12060 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  s dynamically.**
12070 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 6d   allocated and m
12080 75 73 74 20 62 65 20 72 65 6c 65 61 73 65 64 20  ust be released 
12090 62 79 20 74 68 65 20 63 61 6c 6c 65 72 20 75 73  by the caller us
120a0 69 6e 67 20 61 20 73 75 62 73 65 71 75 65 6e 74  ing a subsequent
120b0 20 63 61 6c 6c 0a 2a 2a 20 74 6f 20 66 72 65 65   call.** to free
120c0 43 6f 6c 75 6d 6e 4c 69 73 74 28 29 2e 0a 2a 2a  ColumnList()..**
120d0 0a 2a 2a 20 54 68 65 20 61 7a 43 6f 6c 5b 30 5d  .** The azCol[0]
120e0 20 65 6e 74 72 79 20 69 73 20 75 73 75 61 6c 6c   entry is usuall
120f0 79 20 4e 55 4c 4c 2e 20 20 48 6f 77 65 76 65 72  y NULL.  However
12100 2c 20 69 66 20 7a 54 61 62 20 63 6f 6e 74 61 69  , if zTab contai
12110 6e 73 20 61 20 72 6f 77 69 64 0a 2a 2a 20 76 61  ns a rowid.** va
12120 6c 75 65 20 74 68 61 74 20 6e 65 65 64 73 20 74  lue that needs t
12130 6f 20 62 65 20 70 72 65 73 65 72 76 65 64 2c 20  o be preserved, 
12140 74 68 65 6e 20 61 7a 43 6f 6c 5b 30 5d 20 69 73  then azCol[0] is
12150 20 66 69 6c 6c 65 64 20 69 6e 20 77 69 74 68 20   filled in with 
12160 74 68 65 0a 2a 2a 20 6e 61 6d 65 20 6f 66 20 74  the.** name of t
12170 68 65 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 2e  he rowid column.
12180 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  .**.** The first
12190 20 72 65 67 75 6c 61 72 20 63 6f 6c 75 6d 6e 20   regular column 
121a0 69 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  in the table is 
121b0 61 7a 43 6f 6c 5b 31 5d 2e 20 20 54 68 65 20 6c  azCol[1].  The l
121c0 69 73 74 20 69 73 20 74 65 72 6d 69 6e 61 74 65  ist is terminate
121d0 64 0a 2a 2a 20 62 79 20 61 6e 20 65 6e 74 72 79  d.** by an entry
121e0 20 77 69 74 68 20 61 7a 43 6f 6c 5b 69 5d 3d 3d   with azCol[i]==
121f0 30 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61  0..*/.static cha
12200 72 20 2a 2a 74 61 62 6c 65 43 6f 6c 75 6d 6e 4c  r **tableColumnL
12210 69 73 74 28 53 68 65 6c 6c 53 74 61 74 65 20 2a  ist(ShellState *
12220 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  p, const char *z
12230 54 61 62 29 7b 0a 20 20 63 68 61 72 20 2a 2a 61  Tab){.  char **a
12240 7a 43 6f 6c 20 3d 20 30 3b 0a 20 20 73 71 6c 69  zCol = 0;.  sqli
12250 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
12260 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
12270 20 69 6e 74 20 6e 43 6f 6c 20 3d 20 30 3b 0a 20   int nCol = 0;. 
12280 20 69 6e 74 20 6e 41 6c 6c 6f 63 20 3d 20 30 3b   int nAlloc = 0;
12290 0a 20 20 69 6e 74 20 6e 50 4b 20 3d 20 30 3b 20  .  int nPK = 0; 
122a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
122b0 6f 66 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  of PRIMARY KEY c
122c0 6f 6c 75 6d 6e 73 20 73 65 65 6e 20 2a 2f 0a 20  olumns seen */. 
122d0 20 69 6e 74 20 69 73 49 50 4b 20 3d 20 30 3b 20   int isIPK = 0; 
122e0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f      /* True if o
122f0 6e 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  ne PRIMARY KEY c
12300 6f 6c 75 6d 6e 20 6f 66 20 74 79 70 65 20 49 4e  olumn of type IN
12310 54 45 47 45 52 20 2a 2f 0a 20 20 69 6e 74 20 70  TEGER */.  int p
12320 72 65 73 65 72 76 65 52 6f 77 69 64 20 3d 20 53  reserveRowid = S
12330 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c 20 53  hellHasFlag(p, S
12340 48 46 4c 47 5f 50 72 65 73 65 72 76 65 52 6f 77  HFLG_PreserveRow
12350 69 64 29 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  id);.  int rc;..
12360 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
12370 5f 6d 70 72 69 6e 74 66 28 22 50 52 41 47 4d 41  _mprintf("PRAGMA
12380 20 74 61 62 6c 65 5f 69 6e 66 6f 3d 25 51 22 2c   table_info=%Q",
12390 20 7a 54 61 62 29 3b 0a 20 20 72 63 20 3d 20 73   zTab);.  rc = s
123a0 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
123b0 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d  2(p->db, zSql, -
123c0 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20  1, &pStmt, 0);. 
123d0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53   sqlite3_free(zS
123e0 71 6c 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ql);.  if( rc ) 
123f0 72 65 74 75 72 6e 20 30 3b 0a 20 20 77 68 69 6c  return 0;.  whil
12400 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  e( sqlite3_step(
12410 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52  pStmt)==SQLITE_R
12420 4f 57 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 43  OW ){.    if( nC
12430 6f 6c 3e 3d 6e 41 6c 6c 6f 63 2d 32 20 29 7b 0a  ol>=nAlloc-2 ){.
12440 20 20 20 20 20 20 6e 41 6c 6c 6f 63 20 3d 20 6e        nAlloc = n
12450 41 6c 6c 6f 63 2a 32 20 2b 20 6e 43 6f 6c 20 2b  Alloc*2 + nCol +
12460 20 31 30 3b 0a 20 20 20 20 20 20 61 7a 43 6f 6c   10;.      azCol
12470 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c   = sqlite3_reall
12480 6f 63 28 61 7a 43 6f 6c 2c 20 6e 41 6c 6c 6f 63  oc(azCol, nAlloc
12490 2a 73 69 7a 65 6f 66 28 61 7a 43 6f 6c 5b 30 5d  *sizeof(azCol[0]
124a0 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 61 7a  ));.      if( az
124b0 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Col==0 ){.      
124c0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
124d0 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75 74  err, "Error: out
124e0 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a   of memory\n");.
124f0 20 20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b          exit(1);
12500 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
12510 20 20 20 61 7a 43 6f 6c 5b 2b 2b 6e 43 6f 6c 5d     azCol[++nCol]
12520 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
12530 74 66 28 22 25 73 22 2c 20 73 71 6c 69 74 65 33  tf("%s", sqlite3
12540 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
12550 6d 74 2c 20 31 29 29 3b 0a 20 20 20 20 69 66 28  mt, 1));.    if(
12560 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
12570 69 6e 74 28 70 53 74 6d 74 2c 20 35 29 20 29 7b  int(pStmt, 5) ){
12580 0a 20 20 20 20 20 20 6e 50 4b 2b 2b 3b 0a 20 20  .      nPK++;.  
12590 20 20 20 20 69 66 28 20 6e 50 4b 3d 3d 31 0a 20      if( nPK==1. 
125a0 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
125b0 5f 73 74 72 69 63 6d 70 28 28 63 6f 6e 73 74 20  _stricmp((const 
125c0 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f  char*)sqlite3_co
125d0 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c  lumn_text(pStmt,
125e0 32 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  2),.            
125f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
12600 4e 54 45 47 45 52 22 29 3d 3d 30 0a 20 20 20 20  NTEGER")==0.    
12610 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 73 49    ){.        isI
12620 50 4b 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65  PK = 1;.      }e
12630 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 73 49  lse{.        isI
12640 50 4b 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  PK = 0;.      }.
12650 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
12660 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
12670 6d 74 29 3b 0a 20 20 69 66 28 20 61 7a 43 6f 6c  mt);.  if( azCol
12680 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
12690 20 20 61 7a 43 6f 6c 5b 30 5d 20 3d 20 30 3b 0a    azCol[0] = 0;.
126a0 20 20 61 7a 43 6f 6c 5b 6e 43 6f 6c 2b 31 5d 20    azCol[nCol+1] 
126b0 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 64  = 0;..  /* The d
126c0 65 63 69 73 69 6f 6e 20 6f 66 20 77 68 65 74 68  ecision of wheth
126d0 65 72 20 6f 72 20 6e 6f 74 20 61 20 72 6f 77 69  er or not a rowi
126e0 64 20 72 65 61 6c 6c 79 20 6e 65 65 64 73 20 74  d really needs t
126f0 6f 20 62 65 20 70 72 65 73 65 72 76 65 64 0a 20  o be preserved. 
12700 20 2a 2a 20 69 73 20 74 72 69 63 6b 79 2e 20 20   ** is tricky.  
12710 57 65 20 6e 65 76 65 72 20 6e 65 65 64 20 74 6f  We never need to
12720 20 70 72 65 73 65 72 76 65 20 61 20 72 6f 77 69   preserve a rowi
12730 64 20 66 6f 72 20 61 20 57 49 54 48 4f 55 54 20  d for a WITHOUT 
12740 52 4f 57 49 44 20 74 61 62 6c 65 0a 20 20 2a 2a  ROWID table.  **
12750 20 6f 72 20 61 20 74 61 62 6c 65 20 77 69 74 68   or a table with
12760 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d   an INTEGER PRIM
12770 41 52 59 20 4b 45 59 2e 20 20 57 65 20 61 72 65  ARY KEY.  We are
12780 20 75 6e 61 62 6c 65 20 74 6f 20 70 72 65 73 65   unable to prese
12790 72 76 65 0a 20 20 2a 2a 20 72 6f 77 69 64 73 20  rve.  ** rowids 
127a0 6f 6e 20 74 61 62 6c 65 73 20 77 68 65 72 65 20  on tables where 
127b0 74 68 65 20 72 6f 77 69 64 20 69 73 20 69 6e 61  the rowid is ina
127c0 63 63 65 73 73 69 62 6c 65 20 62 65 63 61 75 73  ccessible becaus
127d0 65 20 74 68 65 72 65 20 61 72 65 20 6f 74 68 65  e there are othe
127e0 72 0a 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 20 69  r.  ** columns i
127f0 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
12800 64 20 22 72 6f 77 69 64 22 2c 20 22 5f 72 6f 77  d "rowid", "_row
12810 69 64 5f 22 2c 20 61 6e 64 20 22 6f 69 64 22 2e  id_", and "oid".
12820 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 72 65 73  .  */.  if( pres
12830 65 72 76 65 52 6f 77 69 64 20 26 26 20 69 73 49  erveRowid && isI
12840 50 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  PK ){.    /* If 
12850 61 20 73 69 6e 67 6c 65 20 50 52 49 4d 41 52 59  a single PRIMARY
12860 20 4b 45 59 20 63 6f 6c 75 6d 6e 20 77 69 74 68   KEY column with
12870 20 74 79 70 65 20 49 4e 54 45 47 45 52 20 77 61   type INTEGER wa
12880 73 20 73 65 65 6e 2c 20 74 68 65 6e 20 69 74 0a  s seen, then it.
12890 20 20 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20      ** might be 
128a0 61 6e 20 61 6c 69 73 65 20 66 6f 72 20 74 68 65  an alise for the
128b0 20 52 4f 57 49 44 2e 20 20 42 75 74 20 69 74 20   ROWID.  But it 
128c0 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20  might also be a 
128d0 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a 20 20  WITHOUT ROWID.  
128e0 20 20 2a 2a 20 74 61 62 6c 65 20 6f 72 20 61 20    ** table or a 
128f0 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
12900 4b 45 59 20 44 45 53 43 20 63 6f 6c 75 6d 6e 2c  KEY DESC column,
12910 20 6e 65 69 74 68 65 72 20 6f 66 20 77 68 69 63   neither of whic
12920 68 20 61 72 65 0a 20 20 20 20 2a 2a 20 52 4f 57  h are.    ** ROW
12930 49 44 20 61 6c 69 61 73 65 73 2e 20 20 54 6f 20  ID aliases.  To 
12940 64 69 73 74 69 6e 67 75 69 73 68 20 74 68 65 73  distinguish thes
12950 65 20 63 61 73 65 73 2c 20 63 68 65 63 6b 20 74  e cases, check t
12960 6f 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20  o see if.    ** 
12970 74 68 65 72 65 20 69 73 20 61 20 22 70 6b 22 20  there is a "pk" 
12980 65 6e 74 72 79 20 69 6e 20 22 50 52 41 47 4d 41  entry in "PRAGMA
12990 20 69 6e 64 65 78 5f 6c 69 73 74 22 2e 20 20 54   index_list".  T
129a0 68 65 72 65 20 77 69 6c 6c 20 62 65 0a 20 20 20  here will be.   
129b0 20 2a 2a 20 6e 6f 20 22 70 6b 22 20 69 6e 64 65   ** no "pk" inde
129c0 78 20 69 66 20 74 68 65 20 50 52 49 4d 41 52 59  x if the PRIMARY
129d0 20 4b 45 59 20 72 65 61 6c 6c 79 20 69 73 20 61   KEY really is a
129e0 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
129f0 52 4f 57 49 44 2e 0a 20 20 20 20 2a 2f 0a 20 20  ROWID..    */.  
12a00 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
12a10 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c 45 43 54  _mprintf("SELECT
12a20 20 31 20 46 52 4f 4d 20 70 72 61 67 6d 61 5f 69   1 FROM pragma_i
12a30 6e 64 65 78 5f 6c 69 73 74 28 25 51 29 22 0a 20  ndex_list(%Q)". 
12a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a50 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52            " WHER
12a60 45 20 6f 72 69 67 69 6e 3d 27 70 6b 27 22 2c 20  E origin='pk'", 
12a70 7a 54 61 62 29 3b 0a 20 20 20 20 72 63 20 3d 20  zTab);.    rc = 
12a80 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
12a90 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20  v2(p->db, zSql, 
12aa0 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a  -1, &pStmt, 0);.
12ab0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
12ac0 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66 28 20  (zSql);.    if( 
12ad0 72 63 20 29 7b 0a 20 20 20 20 20 20 66 72 65 65  rc ){.      free
12ae0 43 6f 6c 75 6d 6e 4c 69 73 74 28 61 7a 43 6f 6c  ColumnList(azCol
12af0 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
12b00 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20  0;.    }.    rc 
12b10 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  = sqlite3_step(p
12b20 53 74 6d 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  Stmt);.    sqlit
12b30 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d  e3_finalize(pStm
12b40 74 29 3b 0a 20 20 20 20 70 72 65 73 65 72 76 65  t);.    preserve
12b50 52 6f 77 69 64 20 3d 20 72 63 3d 3d 53 51 4c 49  Rowid = rc==SQLI
12b60 54 45 5f 52 4f 57 3b 0a 20 20 7d 0a 20 20 69 66  TE_ROW;.  }.  if
12b70 28 20 70 72 65 73 65 72 76 65 52 6f 77 69 64 20  ( preserveRowid 
12b80 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70  ){.    /* Only p
12b90 72 65 73 65 72 76 65 20 74 68 65 20 72 6f 77 69  reserve the rowi
12ba0 64 20 69 66 20 77 65 20 63 61 6e 20 66 69 6e 64  d if we can find
12bb0 20 61 20 6e 61 6d 65 20 74 6f 20 75 73 65 20 66   a name to use f
12bc0 6f 72 20 74 68 65 0a 20 20 20 20 2a 2a 20 72 6f  or the.    ** ro
12bd0 77 69 64 20 2a 2f 0a 20 20 20 20 73 74 61 74 69  wid */.    stati
12be0 63 20 63 68 61 72 20 2a 61 7a 52 6f 77 69 64 5b  c char *azRowid[
12bf0 5d 20 3d 20 7b 20 22 72 6f 77 69 64 22 2c 20 22  ] = { "rowid", "
12c00 5f 72 6f 77 69 64 5f 22 2c 20 22 6f 69 64 22 20  _rowid_", "oid" 
12c10 7d 3b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 3b  };.    int i, j;
12c20 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c  .    for(j=0; j<
12c30 33 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 66  3; j++){.      f
12c40 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 43 6f 6c 3b  or(i=1; i<=nCol;
12c50 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
12c60 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63  f( sqlite3_stric
12c70 6d 70 28 61 7a 52 6f 77 69 64 5b 6a 5d 2c 61 7a  mp(azRowid[j],az
12c80 43 6f 6c 5b 69 5d 29 3d 3d 30 20 29 20 62 72 65  Col[i])==0 ) bre
12c90 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
12ca0 20 20 69 66 28 20 69 3e 6e 43 6f 6c 20 29 7b 0a    if( i>nCol ){.
12cb0 20 20 20 20 20 20 20 20 2f 2a 20 41 74 20 74 68          /* At th
12cc0 69 73 20 70 6f 69 6e 74 2c 20 77 65 20 6b 6e 6f  is point, we kno
12cd0 77 20 74 68 61 74 20 61 7a 52 6f 77 69 64 5b 6a  w that azRowid[j
12ce0 5d 20 69 73 20 6e 6f 74 20 74 68 65 20 6e 61 6d  ] is not the nam
12cf0 65 20 6f 66 20 61 6e 79 0a 20 20 20 20 20 20 20  e of any.       
12d00 20 2a 2a 20 6f 72 64 69 6e 61 72 79 20 63 6f 6c   ** ordinary col
12d10 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65  umn in the table
12d20 2e 20 20 56 65 72 69 66 79 20 74 68 61 74 20 61  .  Verify that a
12d30 7a 52 6f 77 69 64 5b 6a 5d 20 69 73 20 61 20 76  zRowid[j] is a v
12d40 61 6c 69 64 0a 20 20 20 20 20 20 20 20 2a 2a 20  alid.        ** 
12d50 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 72 6f 77  name for the row
12d60 69 64 20 62 65 66 6f 72 65 20 61 64 64 69 6e 67  id before adding
12d70 20 69 74 20 74 6f 20 61 7a 43 6f 6c 5b 30 5d 2e   it to azCol[0].
12d80 20 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a    WITHOUT ROWID.
12d90 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65          ** table
12da0 73 20 77 69 6c 6c 20 66 61 69 6c 20 74 68 69 73  s will fail this
12db0 20 6c 61 73 74 20 63 68 65 63 6b 20 2a 2f 0a 20   last check */. 
12dc0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
12dd0 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
12de0 5f 6d 65 74 61 64 61 74 61 28 70 2d 3e 64 62 2c  _metadata(p->db,
12df0 30 2c 7a 54 61 62 2c 61 7a 52 6f 77 69 64 5b 6a  0,zTab,azRowid[j
12e00 5d 2c 30 2c 30 2c 30 2c 30 2c 30 29 3b 0a 20 20  ],0,0,0,0,0);.  
12e10 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
12e20 4c 49 54 45 5f 4f 4b 20 29 20 61 7a 43 6f 6c 5b  LITE_OK ) azCol[
12e30 30 5d 20 3d 20 61 7a 52 6f 77 69 64 5b 6a 5d 3b  0] = azRowid[j];
12e40 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
12e50 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
12e60 7d 0a 20 20 72 65 74 75 72 6e 20 61 7a 43 6f 6c  }.  return azCol
12e70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 6f 67 67 6c  ;.}../*.** Toggl
12e80 65 20 74 68 65 20 72 65 76 65 72 73 65 5f 75 6e  e the reverse_un
12e90 6f 72 64 65 72 65 64 5f 73 65 6c 65 63 74 73 20  ordered_selects 
12ea0 73 65 74 74 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74  setting..*/.stat
12eb0 69 63 20 76 6f 69 64 20 74 6f 67 67 6c 65 53 65  ic void toggleSe
12ec0 6c 65 63 74 4f 72 64 65 72 28 73 71 6c 69 74 65  lectOrder(sqlite
12ed0 33 20 2a 64 62 29 7b 0a 20 20 73 71 6c 69 74 65  3 *db){.  sqlite
12ee0 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20  3_stmt *pStmt = 
12ef0 30 3b 0a 20 20 69 6e 74 20 69 53 65 74 74 69 6e  0;.  int iSettin
12f00 67 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a 53  g = 0;.  char zS
12f10 74 6d 74 5b 31 30 30 5d 3b 0a 20 20 73 71 6c 69  tmt[100];.  sqli
12f20 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 64  te3_prepare_v2(d
12f30 62 2c 20 22 50 52 41 47 4d 41 20 72 65 76 65 72  b, "PRAGMA rever
12f40 73 65 5f 75 6e 6f 72 64 65 72 65 64 5f 73 65 6c  se_unordered_sel
12f50 65 63 74 73 22 2c 20 2d 31 2c 20 26 70 53 74 6d  ects", -1, &pStm
12f60 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 73 71 6c  t, 0);.  if( sql
12f70 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29  ite3_step(pStmt)
12f80 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a  ==SQLITE_ROW ){.
12f90 20 20 20 20 69 53 65 74 74 69 6e 67 20 3d 20 73      iSetting = s
12fa0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
12fb0 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 7d  t(pStmt, 0);.  }
12fc0 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
12fd0 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 73 71  ize(pStmt);.  sq
12fe0 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
12ff0 69 7a 65 6f 66 28 7a 53 74 6d 74 29 2c 20 7a 53  izeof(zStmt), zS
13000 74 6d 74 2c 0a 20 20 20 20 20 20 20 22 50 52 41  tmt,.       "PRA
13010 47 4d 41 20 72 65 76 65 72 73 65 5f 75 6e 6f 72  GMA reverse_unor
13020 64 65 72 65 64 5f 73 65 6c 65 63 74 73 28 25 64  dered_selects(%d
13030 29 22 2c 20 21 69 53 65 74 74 69 6e 67 29 3b 0a  )", !iSetting);.
13040 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64    sqlite3_exec(d
13050 62 2c 20 7a 53 74 6d 74 2c 20 30 2c 20 30 2c 20  b, zStmt, 0, 0, 
13060 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  0);.}../*.** Thi
13070 73 20 69 73 20 61 20 64 69 66 66 65 72 65 6e 74  s is a different
13080 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e   callback routin
13090 65 20 75 73 65 64 20 66 6f 72 20 64 75 6d 70 69  e used for dumpi
130a0 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  ng the database.
130b0 0a 2a 2a 20 45 61 63 68 20 72 6f 77 20 72 65 63  .** Each row rec
130c0 65 69 76 65 64 20 62 79 20 74 68 69 73 20 63 61  eived by this ca
130d0 6c 6c 62 61 63 6b 20 63 6f 6e 73 69 73 74 73 20  llback consists 
130e0 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2c  of a table name,
130f0 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 79  .** the table ty
13100 70 65 20 28 22 69 6e 64 65 78 22 20 6f 72 20 22  pe ("index" or "
13110 74 61 62 6c 65 22 29 20 61 6e 64 20 53 51 4c 20  table") and SQL 
13120 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 74 61  to create the ta
13130 62 6c 65 2e 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ble..** This rou
13140 74 69 6e 65 20 73 68 6f 75 6c 64 20 70 72 69 6e  tine should prin
13150 74 20 74 65 78 74 20 73 75 66 66 69 63 69 65 6e  t text sufficien
13160 74 20 74 6f 20 72 65 63 72 65 61 74 65 20 74 68  t to recreate th
13170 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74  e table..*/.stat
13180 69 63 20 69 6e 74 20 64 75 6d 70 5f 63 61 6c 6c  ic int dump_call
13190 62 61 63 6b 28 76 6f 69 64 20 2a 70 41 72 67 2c  back(void *pArg,
131a0 20 69 6e 74 20 6e 41 72 67 2c 20 63 68 61 72 20   int nArg, char 
131b0 2a 2a 61 7a 41 72 67 2c 20 63 68 61 72 20 2a 2a  **azArg, char **
131c0 61 7a 4e 6f 74 55 73 65 64 29 7b 0a 20 20 69 6e  azNotUsed){.  in
131d0 74 20 72 63 3b 0a 20 20 63 6f 6e 73 74 20 63 68  t rc;.  const ch
131e0 61 72 20 2a 7a 54 61 62 6c 65 3b 0a 20 20 63 6f  ar *zTable;.  co
131f0 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  nst char *zType;
13200 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
13210 53 71 6c 3b 0a 20 20 53 68 65 6c 6c 53 74 61 74  Sql;.  ShellStat
13220 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53 74 61  e *p = (ShellSta
13230 74 65 20 2a 29 70 41 72 67 3b 0a 0a 20 20 55 4e  te *)pArg;..  UN
13240 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 61  USED_PARAMETER(a
13250 7a 4e 6f 74 55 73 65 64 29 3b 0a 20 20 69 66 28  zNotUsed);.  if(
13260 20 6e 41 72 67 21 3d 33 20 7c 7c 20 61 7a 41 72   nArg!=3 || azAr
13270 67 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  g==0 ) return 0;
13280 0a 20 20 7a 54 61 62 6c 65 20 3d 20 61 7a 41 72  .  zTable = azAr
13290 67 5b 30 5d 3b 0a 20 20 7a 54 79 70 65 20 3d 20  g[0];.  zType = 
132a0 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 7a 53 71 6c  azArg[1];.  zSql
132b0 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a 0a 20 20   = azArg[2];..  
132c0 69 66 28 20 73 74 72 63 6d 70 28 7a 54 61 62 6c  if( strcmp(zTabl
132d0 65 2c 20 22 73 71 6c 69 74 65 5f 73 65 71 75 65  e, "sqlite_seque
132e0 6e 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  nce")==0 ){.    
132f0 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
13300 74 2c 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20  t, "DELETE FROM 
13310 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b  sqlite_sequence;
13320 5c 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  \n");.  }else if
13330 28 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f  ( sqlite3_strglo
13340 62 28 22 73 71 6c 69 74 65 5f 73 74 61 74 3f 22  b("sqlite_stat?"
13350 2c 20 7a 54 61 62 6c 65 29 3d 3d 30 20 29 7b 0a  , zTable)==0 ){.
13360 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
13370 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45 20  ->out, "ANALYZE 
13380 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c 6e  sqlite_master;\n
13390 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
133a0 73 74 72 6e 63 6d 70 28 7a 54 61 62 6c 65 2c 20  strncmp(zTable, 
133b0 22 73 71 6c 69 74 65 5f 22 2c 20 37 29 3d 3d 30  "sqlite_", 7)==0
133c0 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30   ){.    return 0
133d0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  ;.  }else if( st
133e0 72 6e 63 6d 70 28 7a 53 71 6c 2c 20 22 43 52 45  rncmp(zSql, "CRE
133f0 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
13400 45 22 2c 20 32 30 29 3d 3d 30 20 29 7b 0a 20 20  E", 20)==0 ){.  
13410 20 20 63 68 61 72 20 2a 7a 49 6e 73 3b 0a 20 20    char *zIns;.  
13420 20 20 69 66 28 20 21 70 2d 3e 77 72 69 74 61 62    if( !p->writab
13430 6c 65 53 63 68 65 6d 61 20 29 7b 0a 20 20 20 20  leSchema ){.    
13440 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
13450 6f 75 74 2c 20 22 50 52 41 47 4d 41 20 77 72 69  out, "PRAGMA wri
13460 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b  table_schema=ON;
13470 5c 6e 22 29 3b 0a 20 20 20 20 20 20 70 2d 3e 77  \n");.      p->w
13480 72 69 74 61 62 6c 65 53 63 68 65 6d 61 20 3d 20  ritableSchema = 
13490 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 49 6e  1;.    }.    zIn
134a0 73 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  s = sqlite3_mpri
134b0 6e 74 66 28 0a 20 20 20 20 20 20 20 22 49 4e 53  ntf(.       "INS
134c0 45 52 54 20 49 4e 54 4f 20 73 71 6c 69 74 65 5f  ERT INTO sqlite_
134d0 6d 61 73 74 65 72 28 74 79 70 65 2c 6e 61 6d 65  master(type,name
134e0 2c 74 62 6c 5f 6e 61 6d 65 2c 72 6f 6f 74 70 61  ,tbl_name,rootpa
134f0 67 65 2c 73 71 6c 29 22 0a 20 20 20 20 20 20 20  ge,sql)".       
13500 22 56 41 4c 55 45 53 28 27 74 61 62 6c 65 27 2c  "VALUES('table',
13510 27 25 71 27 2c 27 25 71 27 2c 30 2c 27 25 71 27  '%q','%q',0,'%q'
13520 29 3b 22 2c 0a 20 20 20 20 20 20 20 7a 54 61 62  );",.       zTab
13530 6c 65 2c 20 7a 54 61 62 6c 65 2c 20 7a 53 71 6c  le, zTable, zSql
13540 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
13550 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e  tf(p->out, "%s\n
13560 22 2c 20 7a 49 6e 73 29 3b 0a 20 20 20 20 73 71  ", zIns);.    sq
13570 6c 69 74 65 33 5f 66 72 65 65 28 7a 49 6e 73 29  lite3_free(zIns)
13580 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  ;.    return 0;.
13590 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 72 69    }else{.    pri
135a0 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 70 2d 3e  ntSchemaLine(p->
135b0 6f 75 74 2c 20 7a 53 71 6c 2c 20 22 3b 5c 6e 22  out, zSql, ";\n"
135c0 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 73 74  );.  }..  if( st
135d0 72 63 6d 70 28 7a 54 79 70 65 2c 20 22 74 61 62  rcmp(zType, "tab
135e0 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 53  le")==0 ){.    S
135f0 68 65 6c 6c 54 65 78 74 20 73 53 65 6c 65 63 74  hellText sSelect
13600 3b 0a 20 20 20 20 53 68 65 6c 6c 54 65 78 74 20  ;.    ShellText 
13610 73 54 61 62 6c 65 3b 0a 20 20 20 20 63 68 61 72  sTable;.    char
13620 20 2a 2a 61 7a 43 6f 6c 3b 0a 20 20 20 20 69 6e   **azCol;.    in
13630 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 2a 73  t i;.    char *s
13640 61 76 65 64 44 65 73 74 54 61 62 6c 65 3b 0a 20  avedDestTable;. 
13650 20 20 20 69 6e 74 20 73 61 76 65 64 4d 6f 64 65     int savedMode
13660 3b 0a 0a 20 20 20 20 61 7a 43 6f 6c 20 3d 20 74  ;..    azCol = t
13670 61 62 6c 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 70  ableColumnList(p
13680 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20 69  , zTable);.    i
13690 66 28 20 61 7a 43 6f 6c 3d 3d 30 20 29 7b 0a 20  f( azCol==0 ){. 
136a0 20 20 20 20 20 70 2d 3e 6e 45 72 72 2b 2b 3b 0a       p->nErr++;.
136b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a        return 0;.
136c0 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 41 6c      }..    /* Al
136d0 77 61 79 73 20 71 75 6f 74 65 20 74 68 65 20 74  ways quote the t
136e0 61 62 6c 65 20 6e 61 6d 65 2c 20 65 76 65 6e 20  able name, even 
136f0 69 66 20 69 74 20 61 70 70 65 61 72 73 20 74 6f  if it appears to
13700 20 62 65 20 70 75 72 65 20 61 73 63 69 69 2c 0a   be pure ascii,.
13710 20 20 20 20 2a 2a 20 69 6e 20 63 61 73 65 20 69      ** in case i
13720 74 20 69 73 20 61 20 6b 65 79 77 6f 72 64 2e 20  t is a keyword. 
13730 45 78 3a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  Ex:  INSERT INTO
13740 20 22 74 61 62 6c 65 22 20 2e 2e 2e 20 2a 2f 0a   "table" ... */.
13750 20 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 54      initText(&sT
13760 61 62 6c 65 29 3b 0a 20 20 20 20 61 70 70 65 6e  able);.    appen
13770 64 54 65 78 74 28 26 73 54 61 62 6c 65 2c 20 7a  dText(&sTable, z
13780 54 61 62 6c 65 2c 20 71 75 6f 74 65 43 68 61 72  Table, quoteChar
13790 28 7a 54 61 62 6c 65 29 29 3b 0a 20 20 20 20 2f  (zTable));.    /
137a0 2a 20 49 66 20 70 72 65 73 65 72 76 69 6e 67 20  * If preserving 
137b0 74 68 65 20 72 6f 77 69 64 2c 20 61 64 64 20 61  the rowid, add a
137c0 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 66 74   column list aft
137d0 65 72 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  er the table nam
137e0 65 2e 0a 20 20 20 20 2a 2a 20 49 6e 20 6f 74 68  e..    ** In oth
137f0 65 72 20 77 6f 72 64 73 3a 20 20 22 49 4e 53 45  er words:  "INSE
13800 52 54 20 49 4e 54 4f 20 74 61 62 28 72 6f 77 69  RT INTO tab(rowi
13810 64 2c 61 2c 62 2c 63 2c 2e 2e 2e 29 20 56 41 4c  d,a,b,c,...) VAL
13820 55 45 53 28 2e 2e 2e 29 22 0a 20 20 20 20 2a 2a  UES(...)".    **
13830 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
13840 75 73 75 61 6c 20 22 49 4e 53 45 52 54 20 49 4e  usual "INSERT IN
13850 54 4f 20 74 61 62 20 56 41 4c 55 45 53 28 2e 2e  TO tab VALUES(..
13860 2e 29 22 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  .)"..    */.    
13870 69 66 28 20 61 7a 43 6f 6c 5b 30 5d 20 29 7b 0a  if( azCol[0] ){.
13880 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
13890 28 26 73 54 61 62 6c 65 2c 20 22 28 22 2c 20 30  (&sTable, "(", 0
138a0 29 3b 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54  );.      appendT
138b0 65 78 74 28 26 73 54 61 62 6c 65 2c 20 61 7a 43  ext(&sTable, azC
138c0 6f 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20  ol[0], 0);.     
138d0 20 66 6f 72 28 69 3d 31 3b 20 61 7a 43 6f 6c 5b   for(i=1; azCol[
138e0 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  i]; i++){.      
138f0 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 54    appendText(&sT
13900 61 62 6c 65 2c 20 22 2c 22 2c 20 30 29 3b 0a 20  able, ",", 0);. 
13910 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
13920 74 28 26 73 54 61 62 6c 65 2c 20 61 7a 43 6f 6c  t(&sTable, azCol
13930 5b 69 5d 2c 20 71 75 6f 74 65 43 68 61 72 28 61  [i], quoteChar(a
13940 7a 43 6f 6c 5b 69 5d 29 29 3b 0a 20 20 20 20 20  zCol[i]));.     
13950 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54   }.      appendT
13960 65 78 74 28 26 73 54 61 62 6c 65 2c 20 22 29 22  ext(&sTable, ")"
13970 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  , 0);.    }..   
13980 20 2f 2a 20 42 75 69 6c 64 20 61 6e 20 61 70 70   /* Build an app
13990 72 6f 70 72 69 61 74 65 20 53 45 4c 45 43 54 20  ropriate SELECT 
139a0 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 20  statement */.   
139b0 20 69 6e 69 74 54 65 78 74 28 26 73 53 65 6c 65   initText(&sSele
139c0 63 74 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54  ct);.    appendT
139d0 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 53  ext(&sSelect, "S
139e0 45 4c 45 43 54 20 22 2c 20 30 29 3b 0a 20 20 20  ELECT ", 0);.   
139f0 20 69 66 28 20 61 7a 43 6f 6c 5b 30 5d 20 29 7b   if( azCol[0] ){
13a00 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78  .      appendTex
13a10 74 28 26 73 53 65 6c 65 63 74 2c 20 61 7a 43 6f  t(&sSelect, azCo
13a20 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20  l[0], 0);.      
13a30 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c  appendText(&sSel
13a40 65 63 74 2c 20 22 2c 22 2c 20 30 29 3b 0a 20 20  ect, ",", 0);.  
13a50 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b    }.    for(i=1;
13a60 20 61 7a 43 6f 6c 5b 69 5d 3b 20 69 2b 2b 29 7b   azCol[i]; i++){
13a70 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78  .      appendTex
13a80 74 28 26 73 53 65 6c 65 63 74 2c 20 61 7a 43 6f  t(&sSelect, azCo
13a90 6c 5b 69 5d 2c 20 71 75 6f 74 65 43 68 61 72 28  l[i], quoteChar(
13aa0 61 7a 43 6f 6c 5b 69 5d 29 29 3b 0a 20 20 20 20  azCol[i]));.    
13ab0 20 20 69 66 28 20 61 7a 43 6f 6c 5b 69 2b 31 5d    if( azCol[i+1]
13ac0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65   ){.        appe
13ad0 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c  ndText(&sSelect,
13ae0 20 22 2c 22 2c 20 30 29 3b 0a 20 20 20 20 20 20   ",", 0);.      
13af0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 66 72 65 65  }.    }.    free
13b00 43 6f 6c 75 6d 6e 4c 69 73 74 28 61 7a 43 6f 6c  ColumnList(azCol
13b10 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54 65 78  );.    appendTex
13b20 74 28 26 73 53 65 6c 65 63 74 2c 20 22 20 46 52  t(&sSelect, " FR
13b30 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 61 70  OM ", 0);.    ap
13b40 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63  pendText(&sSelec
13b50 74 2c 20 7a 54 61 62 6c 65 2c 20 71 75 6f 74 65  t, zTable, quote
13b60 43 68 61 72 28 7a 54 61 62 6c 65 29 29 3b 0a 0a  Char(zTable));..
13b70 20 20 20 20 73 61 76 65 64 44 65 73 74 54 61 62      savedDestTab
13b80 6c 65 20 3d 20 70 2d 3e 7a 44 65 73 74 54 61 62  le = p->zDestTab
13b90 6c 65 3b 0a 20 20 20 20 73 61 76 65 64 4d 6f 64  le;.    savedMod
13ba0 65 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20 20  e = p->mode;.   
13bb0 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20 3d   p->zDestTable =
13bc0 20 73 54 61 62 6c 65 2e 7a 3b 0a 20 20 20 20 70   sTable.z;.    p
13bd0 2d 3e 6d 6f 64 65 20 3d 20 70 2d 3e 63 4d 6f 64  ->mode = p->cMod
13be0 65 20 3d 20 4d 4f 44 45 5f 49 6e 73 65 72 74 3b  e = MODE_Insert;
13bf0 0a 20 20 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f  .    rc = shell_
13c00 65 78 65 63 28 70 2d 3e 64 62 2c 20 73 53 65 6c  exec(p->db, sSel
13c10 65 63 74 2e 7a 2c 20 73 68 65 6c 6c 5f 63 61 6c  ect.z, shell_cal
13c20 6c 62 61 63 6b 2c 20 70 2c 20 30 29 3b 0a 20 20  lback, p, 0);.  
13c30 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d    if( (rc&0xff)=
13c40 3d 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20  =SQLITE_CORRUPT 
13c50 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
13c60 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a  ntf(p->out, "/**
13c70 2a 2a 2a 2a 20 43 4f 52 52 55 50 54 49 4f 4e 20  **** CORRUPTION 
13c80 45 52 52 4f 52 20 2a 2a 2a 2a 2a 2a 2a 2f 5c 6e  ERROR *******/\n
13c90 22 29 3b 0a 20 20 20 20 20 20 74 6f 67 67 6c 65  ");.      toggle
13ca0 53 65 6c 65 63 74 4f 72 64 65 72 28 70 2d 3e 64  SelectOrder(p->d
13cb0 62 29 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f  b);.      shell_
13cc0 65 78 65 63 28 70 2d 3e 64 62 2c 20 73 53 65 6c  exec(p->db, sSel
13cd0 65 63 74 2e 7a 2c 20 73 68 65 6c 6c 5f 63 61 6c  ect.z, shell_cal
13ce0 6c 62 61 63 6b 2c 20 70 2c 20 30 29 3b 0a 20 20  lback, p, 0);.  
13cf0 20 20 20 20 74 6f 67 67 6c 65 53 65 6c 65 63 74      toggleSelect
13d00 4f 72 64 65 72 28 70 2d 3e 64 62 29 3b 0a 20 20  Order(p->db);.  
13d10 20 20 7d 0a 20 20 20 20 70 2d 3e 7a 44 65 73 74    }.    p->zDest
13d20 54 61 62 6c 65 20 3d 20 73 61 76 65 64 44 65 73  Table = savedDes
13d30 74 54 61 62 6c 65 3b 0a 20 20 20 20 70 2d 3e 6d  tTable;.    p->m
13d40 6f 64 65 20 3d 20 73 61 76 65 64 4d 6f 64 65 3b  ode = savedMode;
13d50 0a 20 20 20 20 66 72 65 65 54 65 78 74 28 26 73  .    freeText(&s
13d60 54 61 62 6c 65 29 3b 0a 20 20 20 20 66 72 65 65  Table);.    free
13d70 54 65 78 74 28 26 73 53 65 6c 65 63 74 29 3b 0a  Text(&sSelect);.
13d80 20 20 20 20 69 66 28 20 72 63 20 29 20 70 2d 3e      if( rc ) p->
13d90 6e 45 72 72 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65  nErr++;.  }.  re
13da0 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
13db0 20 52 75 6e 20 7a 51 75 65 72 79 2e 20 20 55 73   Run zQuery.  Us
13dc0 65 20 64 75 6d 70 5f 63 61 6c 6c 62 61 63 6b 28  e dump_callback(
13dd0 29 20 61 73 20 74 68 65 20 63 61 6c 6c 62 61 63  ) as the callbac
13de0 6b 20 72 6f 75 74 69 6e 65 20 73 6f 20 74 68 61  k routine so tha
13df0 74 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  t.** the content
13e00 73 20 6f 66 20 74 68 65 20 71 75 65 72 79 20 61  s of the query a
13e10 72 65 20 6f 75 74 70 75 74 20 61 73 20 53 51 4c  re output as SQL
13e20 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
13e30 2a 2a 20 49 66 20 77 65 20 67 65 74 20 61 20 53  ** If we get a S
13e40 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72  QLITE_CORRUPT er
13e50 72 6f 72 2c 20 72 65 72 75 6e 20 74 68 65 20 71  ror, rerun the q
13e60 75 65 72 79 20 61 66 74 65 72 20 61 70 70 65 6e  uery after appen
13e70 64 69 6e 67 0a 2a 2a 20 22 4f 52 44 45 52 20 42  ding.** "ORDER B
13e80 59 20 72 6f 77 69 64 20 44 45 53 43 22 20 74 6f  Y rowid DESC" to
13e90 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 61   the end..*/.sta
13ea0 74 69 63 20 69 6e 74 20 72 75 6e 5f 73 63 68 65  tic int run_sche
13eb0 6d 61 5f 64 75 6d 70 5f 71 75 65 72 79 28 0a 20  ma_dump_query(. 
13ec0 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 0a   ShellState *p,.
13ed0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 51    const char *zQ
13ee0 75 65 72 79 0a 29 7b 0a 20 20 69 6e 74 20 72 63  uery.){.  int rc
13ef0 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20 3d  ;.  char *zErr =
13f00 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
13f10 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a  e3_exec(p->db, z
13f20 51 75 65 72 79 2c 20 64 75 6d 70 5f 63 61 6c 6c  Query, dump_call
13f30 62 61 63 6b 2c 20 70 2c 20 26 7a 45 72 72 29 3b  back, p, &zErr);
13f40 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
13f50 45 5f 43 4f 52 52 55 50 54 20 29 7b 0a 20 20 20  E_CORRUPT ){.   
13f60 20 63 68 61 72 20 2a 7a 51 32 3b 0a 20 20 20 20   char *zQ2;.    
13f70 69 6e 74 20 6c 65 6e 20 3d 20 73 74 72 6c 65 6e  int len = strlen
13f80 33 30 28 7a 51 75 65 72 79 29 3b 0a 20 20 20 20  30(zQuery);.    
13f90 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
13fa0 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 43 4f 52 52  t, "/****** CORR
13fb0 55 50 54 49 4f 4e 20 45 52 52 4f 52 20 2a 2a 2a  UPTION ERROR ***
13fc0 2a 2a 2a 2a 2f 5c 6e 22 29 3b 0a 20 20 20 20 69  ****/\n");.    i
13fd0 66 28 20 7a 45 72 72 20 29 7b 0a 20 20 20 20 20  f( zErr ){.     
13fe0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
13ff0 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 25 73  out, "/****** %s
14000 20 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20 7a 45 72   ******/\n", zEr
14010 72 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  r);.      sqlite
14020 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a 20 20  3_free(zErr);.  
14030 20 20 20 20 7a 45 72 72 20 3d 20 30 3b 0a 20 20      zErr = 0;.  
14040 20 20 7d 0a 20 20 20 20 7a 51 32 20 3d 20 6d 61    }.    zQ2 = ma
14050 6c 6c 6f 63 28 20 6c 65 6e 2b 31 30 30 20 29 3b  lloc( len+100 );
14060 0a 20 20 20 20 69 66 28 20 7a 51 32 3d 3d 30 20  .    if( zQ2==0 
14070 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20  ) return rc;.   
14080 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
14090 66 28 6c 65 6e 2b 31 30 30 2c 20 7a 51 32 2c 20  f(len+100, zQ2, 
140a0 22 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77  "%s ORDER BY row
140b0 69 64 20 44 45 53 43 22 2c 20 7a 51 75 65 72 79  id DESC", zQuery
140c0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
140d0 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  te3_exec(p->db, 
140e0 7a 51 32 2c 20 64 75 6d 70 5f 63 61 6c 6c 62 61  zQ2, dump_callba
140f0 63 6b 2c 20 70 2c 20 26 7a 45 72 72 29 3b 0a 20  ck, p, &zErr);. 
14100 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
14110 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
14120 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20  ->out, "/****** 
14130 45 52 52 4f 52 3a 20 25 73 20 2a 2a 2a 2a 2a 2a  ERROR: %s ******
14140 2f 5c 6e 22 2c 20 7a 45 72 72 29 3b 0a 20 20 20  /\n", zErr);.   
14150 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
14160 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
14170 54 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  T;.    }.    sql
14180 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b  ite3_free(zErr);
14190 0a 20 20 20 20 66 72 65 65 28 7a 51 32 29 3b 0a  .    free(zQ2);.
141a0 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
141b0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 78 74 20 6f  .}../*.** Text o
141c0 66 20 61 20 68 65 6c 70 20 6d 65 73 73 61 67 65  f a help message
141d0 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20  .*/.static char 
141e0 7a 48 65 6c 70 5b 5d 20 3d 0a 23 69 66 6e 64 65  zHelp[] =.#ifnde
141f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
14200 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 22 2e  THORIZATION.  ".
14210 61 75 74 68 20 4f 4e 7c 4f 46 46 20 20 20 20 20  auth ON|OFF     
14220 20 20 20 20 20 20 53 68 6f 77 20 61 75 74 68 6f        Show autho
14230 72 69 7a 65 72 20 63 61 6c 6c 62 61 63 6b 73 5c  rizer callbacks\
14240 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 62 61  n".#endif.  ".ba
14250 63 6b 75 70 20 3f 44 42 3f 20 46 49 4c 45 20 20  ckup ?DB? FILE  
14260 20 20 20 20 42 61 63 6b 75 70 20 44 42 20 28 64      Backup DB (d
14270 65 66 61 75 6c 74 20 5c 22 6d 61 69 6e 5c 22 29  efault \"main\")
14280 20 74 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e   to FILE\n".  ".
14290 62 61 69 6c 20 6f 6e 7c 6f 66 66 20 20 20 20 20  bail on|off     
142a0 20 20 20 20 20 20 53 74 6f 70 20 61 66 74 65 72        Stop after
142b0 20 68 69 74 74 69 6e 67 20 61 6e 20 65 72 72 6f   hitting an erro
142c0 72 2e 20 20 44 65 66 61 75 6c 74 20 4f 46 46 5c  r.  Default OFF\
142d0 6e 22 0a 20 20 22 2e 62 69 6e 61 72 79 20 6f 6e  n".  ".binary on
142e0 7c 6f 66 66 20 20 20 20 20 20 20 20 20 54 75 72  |off         Tur
142f0 6e 20 62 69 6e 61 72 79 20 6f 75 74 70 75 74 20  n binary output 
14300 6f 6e 20 6f 72 20 6f 66 66 2e 20 20 44 65 66 61  on or off.  Defa
14310 75 6c 74 20 4f 46 46 5c 6e 22 0a 20 20 22 2e 63  ult OFF\n".  ".c
14320 64 20 44 49 52 45 43 54 4f 52 59 20 20 20 20 20  d DIRECTORY     
14330 20 20 20 20 20 43 68 61 6e 67 65 20 74 68 65 20       Change the 
14340 77 6f 72 6b 69 6e 67 20 64 69 72 65 63 74 6f 72  working director
14350 79 20 74 6f 20 44 49 52 45 43 54 4f 52 59 5c 6e  y to DIRECTORY\n
14360 22 0a 20 20 22 2e 63 68 61 6e 67 65 73 20 6f 6e  ".  ".changes on
14370 7c 6f 66 66 20 20 20 20 20 20 20 20 53 68 6f 77  |off        Show
14380 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
14390 63 68 61 6e 67 65 64 20 62 79 20 53 51 4c 5c 6e  changed by SQL\n
143a0 22 0a 20 20 22 2e 63 68 65 63 6b 20 47 4c 4f 42  ".  ".check GLOB
143b0 20 20 20 20 20 20 20 20 20 20 20 20 46 61 69 6c              Fail
143c0 20 69 66 20 6f 75 74 70 75 74 20 73 69 6e 63 65   if output since
143d0 20 2e 74 65 73 74 63 61 73 65 20 64 6f 65 73 20   .testcase does 
143e0 6e 6f 74 20 6d 61 74 63 68 5c 6e 22 0a 20 20 22  not match\n".  "
143f0 2e 63 6c 6f 6e 65 20 4e 45 57 44 42 20 20 20 20  .clone NEWDB    
14400 20 20 20 20 20 20 20 43 6c 6f 6e 65 20 64 61 74         Clone dat
14410 61 20 69 6e 74 6f 20 4e 45 57 44 42 20 66 72 6f  a into NEWDB fro
14420 6d 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 64  m the existing d
14430 61 74 61 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64  atabase\n".  ".d
14440 61 74 61 62 61 73 65 73 20 20 20 20 20 20 20 20  atabases        
14450 20 20 20 20 20 4c 69 73 74 20 6e 61 6d 65 73 20       List names 
14460 61 6e 64 20 66 69 6c 65 73 20 6f 66 20 61 74 74  and files of att
14470 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 5c  ached databases\
14480 6e 22 0a 20 20 22 2e 64 62 69 6e 66 6f 20 3f 44  n".  ".dbinfo ?D
14490 42 3f 20 20 20 20 20 20 20 20 20 20 20 53 68 6f  B?           Sho
144a0 77 20 73 74 61 74 75 73 20 69 6e 66 6f 72 6d 61  w status informa
144b0 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 64  tion about the d
144c0 61 74 61 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64  atabase\n".  ".d
144d0 75 6d 70 20 3f 54 41 42 4c 45 3f 20 2e 2e 2e 20  ump ?TABLE? ... 
144e0 20 20 20 20 20 44 75 6d 70 20 74 68 65 20 64 61       Dump the da
144f0 74 61 62 61 73 65 20 69 6e 20 61 6e 20 53 51 4c  tabase in an SQL
14500 20 74 65 78 74 20 66 6f 72 6d 61 74 5c 6e 22 0a   text format\n".
14510 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20    "             
14520 20 20 20 20 20 20 20 20 20 20 20 20 49 66 20 54              If T
14530 41 42 4c 45 20 73 70 65 63 69 66 69 65 64 2c 20  ABLE specified, 
14540 6f 6e 6c 79 20 64 75 6d 70 20 74 61 62 6c 65 73  only dump tables
14550 20 6d 61 74 63 68 69 6e 67 5c 6e 22 0a 20 20 22   matching\n".  "
14560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14570 20 20 20 20 20 20 20 20 20 4c 49 4b 45 20 70 61           LIKE pa
14580 74 74 65 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a  ttern TABLE.\n".
14590 20 20 22 2e 65 63 68 6f 20 6f 6e 7c 6f 66 66 20    ".echo on|off 
145a0 20 20 20 20 20 20 20 20 20 20 54 75 72 6e 20 63            Turn c
145b0 6f 6d 6d 61 6e 64 20 65 63 68 6f 20 6f 6e 20 6f  ommand echo on o
145c0 72 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 65 71 70  r off\n".  ".eqp
145d0 20 6f 6e 7c 6f 66 66 7c 66 75 6c 6c 20 20 20 20   on|off|full    
145e0 20 20 20 45 6e 61 62 6c 65 20 6f 72 20 64 69 73     Enable or dis
145f0 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 45  able automatic E
14600 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
14610 4e 5c 6e 22 0a 20 20 22 2e 65 78 69 74 20 20 20  N\n".  ".exit   
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
14630 78 69 74 20 74 68 69 73 20 70 72 6f 67 72 61 6d  xit this program
14640 5c 6e 22 0a 2f 2a 20 42 65 63 61 75 73 65 20 65  \n"./* Because e
14650 78 70 6c 61 69 6e 20 6d 6f 64 65 20 63 6f 6d 65  xplain mode come
14660 73 20 6f 6e 20 61 75 74 6f 6d 61 74 69 63 61 6c  s on automatical
14670 6c 79 20 6e 6f 77 2c 20 74 68 65 20 22 2e 65 78  ly now, the ".ex
14680 70 6c 61 69 6e 22 20 6d 6f 64 65 0a 2a 2a 20 69  plain" mode.** i
14690 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74  s removed from t
146a0 68 65 20 68 65 6c 70 20 73 63 72 65 65 6e 2e 20  he help screen. 
146b0 20 49 74 20 69 73 20 73 74 69 6c 6c 20 73 75 70   It is still sup
146c0 70 6f 72 74 65 64 20 66 6f 72 20 6c 65 67 61 63  ported for legac
146d0 79 2c 20 68 6f 77 65 76 65 72 20 2a 2f 0a 2f 2a  y, however */./*
146e0 22 2e 65 78 70 6c 61 69 6e 20 3f 6f 6e 7c 6f 66  ".explain ?on|of
146f0 66 7c 61 75 74 6f 3f 20 54 75 72 6e 20 45 58 50  f|auto? Turn EXP
14700 4c 41 49 4e 20 6f 75 74 70 75 74 20 6d 6f 64 65  LAIN output mode
14710 20 6f 6e 20 6f 72 20 6f 66 66 20 6f 72 20 74 6f   on or off or to
14720 20 61 75 74 6f 6d 61 74 69 63 5c 6e 22 2a 2f 0a   automatic\n"*/.
14730 20 20 22 2e 66 75 6c 6c 73 63 68 65 6d 61 20 3f    ".fullschema ?
14740 2d 2d 69 6e 64 65 6e 74 3f 20 53 68 6f 77 20 73  --indent? Show s
14750 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20 63 6f  chema and the co
14760 6e 74 65 6e 74 20 6f 66 20 73 71 6c 69 74 65 5f  ntent of sqlite_
14770 73 74 61 74 20 74 61 62 6c 65 73 5c 6e 22 0a 20  stat tables\n". 
14780 20 22 2e 68 65 61 64 65 72 73 20 6f 6e 7c 6f 66   ".headers on|of
14790 66 20 20 20 20 20 20 20 20 54 75 72 6e 20 64 69  f        Turn di
147a0 73 70 6c 61 79 20 6f 66 20 68 65 61 64 65 72 73  splay of headers
147b0 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 20 20   on or off\n".  
147c0 22 2e 68 65 6c 70 20 20 20 20 20 20 20 20 20 20  ".help          
147d0 20 20 20 20 20 20 20 20 53 68 6f 77 20 74 68 69          Show thi
147e0 73 20 6d 65 73 73 61 67 65 5c 6e 22 0a 20 20 22  s message\n".  "
147f0 2e 69 6d 70 6f 72 74 20 46 49 4c 45 20 54 41 42  .import FILE TAB
14800 4c 45 20 20 20 20 20 49 6d 70 6f 72 74 20 64 61  LE     Import da
14810 74 61 20 66 72 6f 6d 20 46 49 4c 45 20 69 6e 74  ta from FILE int
14820 6f 20 54 41 42 4c 45 5c 6e 22 0a 23 69 66 6e 64  o TABLE\n".#ifnd
14830 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
14840 45 53 54 5f 43 4f 4e 54 52 4f 4c 0a 20 20 22 2e  EST_CONTROL.  ".
14850 69 6d 70 6f 73 74 65 72 20 49 4e 44 45 58 20 54  imposter INDEX T
14860 41 42 4c 45 20 20 43 72 65 61 74 65 20 69 6d 70  ABLE  Create imp
14870 6f 73 74 65 72 20 74 61 62 6c 65 20 54 41 42 4c  oster table TABL
14880 45 20 6f 6e 20 69 6e 64 65 78 20 49 4e 44 45 58  E on index INDEX
14890 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 69  \n".#endif.  ".i
148a0 6e 64 65 78 65 73 20 3f 54 41 42 4c 45 3f 20 20  ndexes ?TABLE?  
148b0 20 20 20 20 20 53 68 6f 77 20 6e 61 6d 65 73 20       Show names 
148c0 6f 66 20 61 6c 6c 20 69 6e 64 65 78 65 73 5c 6e  of all indexes\n
148d0 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 66                If
148f0 20 54 41 42 4c 45 20 73 70 65 63 69 66 69 65 64   TABLE specified
14900 2c 20 6f 6e 6c 79 20 73 68 6f 77 20 69 6e 64 65  , only show inde
14910 78 65 73 20 66 6f 72 20 74 61 62 6c 65 73 5c 6e  xes for tables\n
14920 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
14930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61                ma
14940 74 63 68 69 6e 67 20 4c 49 4b 45 20 70 61 74 74  tching LIKE patt
14950 65 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a 23 69  ern TABLE.\n".#i
14960 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
14970 4c 45 5f 49 4f 54 52 41 43 45 0a 20 20 22 2e 69  LE_IOTRACE.  ".i
14980 6f 74 72 61 63 65 20 46 49 4c 45 20 20 20 20 20  otrace FILE     
14990 20 20 20 20 20 45 6e 61 62 6c 65 20 49 2f 4f 20       Enable I/O 
149a0 64 69 61 67 6e 6f 73 74 69 63 20 6c 6f 67 67 69  diagnostic loggi
149b0 6e 67 20 74 6f 20 46 49 4c 45 5c 6e 22 0a 23 65  ng to FILE\n".#e
149c0 6e 64 69 66 0a 20 20 22 2e 6c 69 6d 69 74 20 3f  ndif.  ".limit ?
149d0 4c 49 4d 49 54 3f 20 3f 56 41 4c 3f 20 20 20 44  LIMIT? ?VAL?   D
149e0 69 73 70 6c 61 79 20 6f 72 20 63 68 61 6e 67 65  isplay or change
149f0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 6e   the value of an
14a00 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5c 6e 22   SQLITE_LIMIT\n"
14a10 0a 20 20 22 2e 6c 69 6e 74 20 4f 50 54 49 4f 4e  .  ".lint OPTION
14a20 53 20 20 20 20 20 20 20 20 20 20 52 65 70 6f 72  S          Repor
14a30 74 20 70 6f 74 65 6e 74 69 61 6c 20 73 63 68 65  t potential sche
14a40 6d 61 20 69 73 73 75 65 73 2e 20 4f 70 74 69 6f  ma issues. Optio
14a50 6e 73 3a 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  ns:\n".  "      
14a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a70 20 20 20 66 6b 65 79 2d 69 6e 64 65 78 65 73 20     fkey-indexes 
14a80 20 20 20 20 46 69 6e 64 20 6d 69 73 73 69 6e 67      Find missing
14a90 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 6e 64   foreign key ind
14aa0 65 78 65 73 5c 6e 22 0a 23 69 66 6e 64 65 66 20  exes\n".#ifndef 
14ab0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44  SQLITE_OMIT_LOAD
14ac0 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 22 2e 6c  _EXTENSION.  ".l
14ad0 6f 61 64 20 46 49 4c 45 20 3f 45 4e 54 52 59 3f  oad FILE ?ENTRY?
14ae0 20 20 20 20 20 4c 6f 61 64 20 61 6e 20 65 78 74       Load an ext
14af0 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72 79 5c 6e  ension library\n
14b00 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 6c 6f 67  ".#endif.  ".log
14b10 20 46 49 4c 45 7c 6f 66 66 20 20 20 20 20 20 20   FILE|off       
14b20 20 20 20 54 75 72 6e 20 6c 6f 67 67 69 6e 67 20     Turn logging 
14b30 6f 6e 20 6f 72 20 6f 66 66 2e 20 20 46 49 4c 45  on or off.  FILE
14b40 20 63 61 6e 20 62 65 20 73 74 64 65 72 72 2f 73   can be stderr/s
14b50 74 64 6f 75 74 5c 6e 22 0a 20 20 22 2e 6d 6f 64  tdout\n".  ".mod
14b60 65 20 4d 4f 44 45 20 3f 54 41 42 4c 45 3f 20 20  e MODE ?TABLE?  
14b70 20 20 20 53 65 74 20 6f 75 74 70 75 74 20 6d 6f     Set output mo
14b80 64 65 20 77 68 65 72 65 20 4d 4f 44 45 20 69 73  de where MODE is
14b90 20 6f 6e 65 20 6f 66 3a 5c 6e 22 0a 20 20 22 20   one of:\n".  " 
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bb0 20 20 20 20 20 20 20 20 61 73 63 69 69 20 20 20          ascii   
14bc0 20 43 6f 6c 75 6d 6e 73 2f 72 6f 77 73 20 64 65   Columns/rows de
14bd0 6c 69 6d 69 74 65 64 20 62 79 20 30 78 31 46 20  limited by 0x1F 
14be0 61 6e 64 20 30 78 31 45 5c 6e 22 0a 20 20 22 20  and 0x1E\n".  " 
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c00 20 20 20 20 20 20 20 20 63 73 76 20 20 20 20 20          csv     
14c10 20 43 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64   Comma-separated
14c20 20 76 61 6c 75 65 73 5c 6e 22 0a 20 20 22 20 20   values\n".  "  
14c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c40 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 20 20 20         column   
14c50 4c 65 66 74 2d 61 6c 69 67 6e 65 64 20 63 6f 6c  Left-aligned col
14c60 75 6d 6e 73 2e 20 20 28 53 65 65 20 2e 77 69 64  umns.  (See .wid
14c70 74 68 29 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  th)\n".  "      
14c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c90 20 20 20 68 74 6d 6c 20 20 20 20 20 48 54 4d 4c     html     HTML
14ca0 20 3c 74 61 62 6c 65 3e 20 63 6f 64 65 5c 6e 22   <table> code\n"
14cb0 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20  .  "            
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
14cd0 65 72 74 20 20 20 53 51 4c 20 69 6e 73 65 72 74  ert   SQL insert
14ce0 20 73 74 61 74 65 6d 65 6e 74 73 20 66 6f 72 20   statements for 
14cf0 54 41 42 4c 45 5c 6e 22 0a 20 20 22 20 20 20 20  TABLE\n".  "    
14d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d10 20 20 20 20 20 6c 69 6e 65 20 20 20 20 20 4f 6e       line     On
14d20 65 20 76 61 6c 75 65 20 70 65 72 20 6c 69 6e 65  e value per line
14d30 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20  \n".  "         
14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d50 6c 69 73 74 20 20 20 20 20 56 61 6c 75 65 73 20  list     Values 
14d60 64 65 6c 69 6d 69 74 65 64 20 62 79 20 5c 22 7c  delimited by \"|
14d70 5c 22 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20  \"\n".  "       
14d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d90 20 20 71 75 6f 74 65 20 20 20 20 45 73 63 61 70    quote    Escap
14da0 65 20 61 6e 73 77 65 72 73 20 61 73 20 66 6f 72  e answers as for
14db0 20 53 51 4c 5c 6e 22 0a 20 20 22 20 20 20 20 20   SQL\n".  "     
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dd0 20 20 20 20 74 61 62 73 20 20 20 20 20 54 61 62      tabs     Tab
14de0 2d 73 65 70 61 72 61 74 65 64 20 76 61 6c 75 65  -separated value
14df0 73 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20  s\n".  "        
14e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e10 20 74 63 6c 20 20 20 20 20 20 54 43 4c 20 6c 69   tcl      TCL li
14e20 73 74 20 65 6c 65 6d 65 6e 74 73 5c 6e 22 0a 20  st elements\n". 
14e30 20 22 2e 6e 75 6c 6c 76 61 6c 75 65 20 53 54 52   ".nullvalue STR
14e40 49 4e 47 20 20 20 20 20 20 55 73 65 20 53 54 52  ING      Use STR
14e50 49 4e 47 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  ING in place of 
14e60 4e 55 4c 4c 20 76 61 6c 75 65 73 5c 6e 22 0a 20  NULL values\n". 
14e70 20 22 2e 6f 6e 63 65 20 46 49 4c 45 4e 41 4d 45   ".once FILENAME
14e80 20 20 20 20 20 20 20 20 20 4f 75 74 70 75 74 20           Output 
14e90 66 6f 72 20 74 68 65 20 6e 65 78 74 20 53 51 4c  for the next SQL
14ea0 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 20 74 6f   command only to
14eb0 20 46 49 4c 45 4e 41 4d 45 5c 6e 22 0a 20 20 22   FILENAME\n".  "
14ec0 2e 6f 70 65 6e 20 3f 4f 50 54 49 4f 4e 53 3f 20  .open ?OPTIONS? 
14ed0 3f 46 49 4c 45 3f 20 43 6c 6f 73 65 20 65 78 69  ?FILE? Close exi
14ee0 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 61  sting database a
14ef0 6e 64 20 72 65 6f 70 65 6e 20 46 49 4c 45 5c 6e  nd reopen FILE\n
14f00 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
14f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 68                Th
14f20 65 20 2d 2d 6e 65 77 20 6f 70 74 69 6f 6e 20 73  e --new option s
14f30 74 61 72 74 73 20 77 69 74 68 20 61 6e 20 65 6d  tarts with an em
14f40 70 74 79 20 66 69 6c 65 5c 6e 22 0a 20 20 22 2e  pty file\n".  ".
14f50 6f 75 74 70 75 74 20 3f 46 49 4c 45 4e 41 4d 45  output ?FILENAME
14f60 3f 20 20 20 20 20 53 65 6e 64 20 6f 75 74 70 75  ?     Send outpu
14f70 74 20 74 6f 20 46 49 4c 45 4e 41 4d 45 20 6f 72  t to FILENAME or
14f80 20 73 74 64 6f 75 74 5c 6e 22 0a 20 20 22 2e 70   stdout\n".  ".p
14f90 72 69 6e 74 20 53 54 52 49 4e 47 2e 2e 2e 20 20  rint STRING...  
14fa0 20 20 20 20 20 50 72 69 6e 74 20 6c 69 74 65 72       Print liter
14fb0 61 6c 20 53 54 52 49 4e 47 5c 6e 22 0a 20 20 22  al STRING\n".  "
14fc0 2e 70 72 6f 6d 70 74 20 4d 41 49 4e 20 43 4f 4e  .prompt MAIN CON
14fd0 54 49 4e 55 45 20 20 52 65 70 6c 61 63 65 20 74  TINUE  Replace t
14fe0 68 65 20 73 74 61 6e 64 61 72 64 20 70 72 6f 6d  he standard prom
14ff0 70 74 73 5c 6e 22 0a 20 20 22 2e 71 75 69 74 20  pts\n".  ".quit 
15000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15010 20 45 78 69 74 20 74 68 69 73 20 70 72 6f 67 72   Exit this progr
15020 61 6d 5c 6e 22 0a 20 20 22 2e 72 65 61 64 20 46  am\n".  ".read F
15030 49 4c 45 4e 41 4d 45 20 20 20 20 20 20 20 20 20  ILENAME         
15040 45 78 65 63 75 74 65 20 53 51 4c 20 69 6e 20 46  Execute SQL in F
15050 49 4c 45 4e 41 4d 45 5c 6e 22 0a 20 20 22 2e 72  ILENAME\n".  ".r
15060 65 73 74 6f 72 65 20 3f 44 42 3f 20 46 49 4c 45  estore ?DB? FILE
15070 20 20 20 20 20 52 65 73 74 6f 72 65 20 63 6f 6e       Restore con
15080 74 65 6e 74 20 6f 66 20 44 42 20 28 64 65 66 61  tent of DB (defa
15090 75 6c 74 20 5c 22 6d 61 69 6e 5c 22 29 20 66 72  ult \"main\") fr
150a0 6f 6d 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e 73  om FILE\n".  ".s
150b0 61 76 65 20 46 49 4c 45 20 20 20 20 20 20 20 20  ave FILE        
150c0 20 20 20 20 20 57 72 69 74 65 20 69 6e 2d 6d 65       Write in-me
150d0 6d 6f 72 79 20 64 61 74 61 62 61 73 65 20 69 6e  mory database in
150e0 74 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e 73  to FILE\n".  ".s
150f0 63 61 6e 73 74 61 74 73 20 6f 6e 7c 6f 66 66 20  canstats on|off 
15100 20 20 20 20 20 54 75 72 6e 20 73 71 6c 69 74 65       Turn sqlite
15110 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74 75  3_stmt_scanstatu
15120 73 28 29 20 6d 65 74 72 69 63 73 20 6f 6e 20 6f  s() metrics on o
15130 72 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 73 63 68  r off\n".  ".sch
15140 65 6d 61 20 3f 50 41 54 54 45 52 4e 3f 20 20 20  ema ?PATTERN?   
15150 20 20 20 53 68 6f 77 20 74 68 65 20 43 52 45 41     Show the CREA
15160 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 6d 61  TE statements ma
15170 74 63 68 69 6e 67 20 50 41 54 54 45 52 4e 5c 6e  tching PATTERN\n
15180 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
15190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
151a0 64 64 20 2d 2d 69 6e 64 65 6e 74 20 66 6f 72 20  dd --indent for 
151b0 70 72 65 74 74 79 2d 70 72 69 6e 74 69 6e 67 5c  pretty-printing\
151c0 6e 22 0a 20 20 22 2e 73 65 6c 66 74 65 73 74 20  n".  ".selftest 
151d0 3f 2d 2d 69 6e 69 74 3f 20 20 20 20 20 52 75 6e  ?--init?     Run
151e0 20 74 65 73 74 73 20 64 65 66 69 6e 65 64 20 69   tests defined i
151f0 6e 20 74 68 65 20 53 45 4c 46 54 45 53 54 20 74  n the SELFTEST t
15200 61 62 6c 65 5c 6e 22 0a 20 20 22 2e 73 65 70 61  able\n".  ".sepa
15210 72 61 74 6f 72 20 43 4f 4c 20 3f 52 4f 57 3f 20  rator COL ?ROW? 
15220 20 20 43 68 61 6e 67 65 20 74 68 65 20 63 6f 6c    Change the col
15230 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 20 61 6e  umn separator an
15240 64 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 74 68 65  d optionally the
15250 20 72 6f 77 5c 6e 22 0a 20 20 22 20 20 20 20 20   row\n".  "     
15260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15270 20 20 20 20 73 65 70 61 72 61 74 6f 72 20 66 6f      separator fo
15280 72 20 62 6f 74 68 20 74 68 65 20 6f 75 74 70 75  r both the outpu
15290 74 20 6d 6f 64 65 20 61 6e 64 20 2e 69 6d 70 6f  t mode and .impo
152a0 72 74 5c 6e 22 0a 23 69 66 20 64 65 66 69 6e 65  rt\n".#if define
152b0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
152c0 53 45 53 53 49 4f 4e 29 0a 20 20 22 2e 73 65 73  SESSION).  ".ses
152d0 73 69 6f 6e 20 43 4d 44 20 2e 2e 2e 20 20 20 20  sion CMD ...    
152e0 20 20 20 43 72 65 61 74 65 20 6f 72 20 63 6f 6e     Create or con
152f0 74 72 6f 6c 20 73 65 73 73 69 6f 6e 73 5c 6e 22  trol sessions\n"
15300 0a 23 65 6e 64 69 66 0a 20 20 22 2e 73 68 61 33  .#endif.  ".sha3
15310 73 75 6d 20 3f 4f 50 54 49 4f 4e 53 2e 2e 2e 3f  sum ?OPTIONS...?
15320 20 20 43 6f 6d 70 75 74 65 20 61 20 53 48 41 33    Compute a SHA3
15330 20 68 61 73 68 20 6f 66 20 64 61 74 61 62 61 73   hash of databas
15340 65 20 63 6f 6e 74 65 6e 74 5c 6e 22 0a 20 20 22  e content\n".  "
15350 2e 73 68 65 6c 6c 20 43 4d 44 20 41 52 47 53 2e  .shell CMD ARGS.
15360 2e 2e 20 20 20 20 20 52 75 6e 20 43 4d 44 20 41  ..     Run CMD A
15370 52 47 53 2e 2e 2e 20 69 6e 20 61 20 73 79 73 74  RGS... in a syst
15380 65 6d 20 73 68 65 6c 6c 5c 6e 22 0a 20 20 22 2e  em shell\n".  ".
15390 73 68 6f 77 20 20 20 20 20 20 20 20 20 20 20 20  show            
153a0 20 20 20 20 20 20 53 68 6f 77 20 74 68 65 20 63        Show the c
153b0 75 72 72 65 6e 74 20 76 61 6c 75 65 73 20 66 6f  urrent values fo
153c0 72 20 76 61 72 69 6f 75 73 20 73 65 74 74 69 6e  r various settin
153d0 67 73 5c 6e 22 0a 20 20 22 2e 73 74 61 74 73 20  gs\n".  ".stats 
153e0 3f 6f 6e 7c 6f 66 66 3f 20 20 20 20 20 20 20 20  ?on|off?        
153f0 53 68 6f 77 20 73 74 61 74 73 20 6f 72 20 74 75  Show stats or tu
15400 72 6e 20 73 74 61 74 73 20 6f 6e 20 6f 72 20 6f  rn stats on or o
15410 66 66 5c 6e 22 0a 20 20 22 2e 73 79 73 74 65 6d  ff\n".  ".system
15420 20 43 4d 44 20 41 52 47 53 2e 2e 2e 20 20 20 20   CMD ARGS...    
15430 52 75 6e 20 43 4d 44 20 41 52 47 53 2e 2e 2e 20  Run CMD ARGS... 
15440 69 6e 20 61 20 73 79 73 74 65 6d 20 73 68 65 6c  in a system shel
15450 6c 5c 6e 22 0a 20 20 22 2e 74 61 62 6c 65 73 20  l\n".  ".tables 
15460 3f 54 41 42 4c 45 3f 20 20 20 20 20 20 20 20 4c  ?TABLE?        L
15470 69 73 74 20 6e 61 6d 65 73 20 6f 66 20 74 61 62  ist names of tab
15480 6c 65 73 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  les\n".  "      
15490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154a0 20 20 20 49 66 20 54 41 42 4c 45 20 73 70 65 63     If TABLE spec
154b0 69 66 69 65 64 2c 20 6f 6e 6c 79 20 6c 69 73 74  ified, only list
154c0 20 74 61 62 6c 65 73 20 6d 61 74 63 68 69 6e 67   tables matching
154d0 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20  \n".  "         
154e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154f0 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 54 41 42  LIKE pattern TAB
15500 4c 45 2e 5c 6e 22 0a 20 20 22 2e 74 65 73 74 63  LE.\n".  ".testc
15510 61 73 65 20 4e 41 4d 45 20 20 20 20 20 20 20 20  ase NAME        
15520 20 42 65 67 69 6e 20 72 65 64 69 72 65 63 74 69   Begin redirecti
15530 6e 67 20 6f 75 74 70 75 74 20 74 6f 20 27 74 65  ng output to 'te
15540 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 27 5c  stcase-out.txt'\
15550 6e 22 0a 20 20 22 2e 74 69 6d 65 6f 75 74 20 4d  n".  ".timeout M
15560 53 20 20 20 20 20 20 20 20 20 20 20 20 54 72 79  S            Try
15570 20 6f 70 65 6e 69 6e 67 20 6c 6f 63 6b 65 64 20   opening locked 
15580 74 61 62 6c 65 73 20 66 6f 72 20 4d 53 20 6d 69  tables for MS mi
15590 6c 6c 69 73 65 63 6f 6e 64 73 5c 6e 22 0a 20 20  lliseconds\n".  
155a0 22 2e 74 69 6d 65 72 20 6f 6e 7c 6f 66 66 20 20  ".timer on|off  
155b0 20 20 20 20 20 20 20 20 54 75 72 6e 20 53 51 4c          Turn SQL
155c0 20 74 69 6d 65 72 20 6f 6e 20 6f 72 20 6f 66 66   timer on or off
155d0 5c 6e 22 0a 20 20 22 2e 74 72 61 63 65 20 46 49  \n".  ".trace FI
155e0 4c 45 7c 6f 66 66 20 20 20 20 20 20 20 20 4f 75  LE|off        Ou
155f0 74 70 75 74 20 65 61 63 68 20 53 51 4c 20 73 74  tput each SQL st
15600 61 74 65 6d 65 6e 74 20 61 73 20 69 74 20 69 73  atement as it is
15610 20 72 75 6e 5c 6e 22 0a 20 20 22 2e 76 66 73 69   run\n".  ".vfsi
15620 6e 66 6f 20 3f 41 55 58 3f 20 20 20 20 20 20 20  nfo ?AUX?       
15630 20 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62    Information ab
15640 6f 75 74 20 74 68 65 20 74 6f 70 2d 6c 65 76 65  out the top-leve
15650 6c 20 56 46 53 5c 6e 22 0a 20 20 22 2e 76 66 73  l VFS\n".  ".vfs
15660 6c 69 73 74 20 20 20 20 20 20 20 20 20 20 20 20  list            
15670 20 20 20 4c 69 73 74 20 61 6c 6c 20 61 76 61 69     List all avai
15680 6c 61 62 6c 65 20 56 46 53 65 73 5c 6e 22 0a 20  lable VFSes\n". 
15690 20 22 2e 76 66 73 6e 61 6d 65 20 3f 41 55 58 3f   ".vfsname ?AUX?
156a0 20 20 20 20 20 20 20 20 20 50 72 69 6e 74 20 74           Print t
156b0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 56  he name of the V
156c0 46 53 20 73 74 61 63 6b 5c 6e 22 0a 20 20 22 2e  FS stack\n".  ".
156d0 77 69 64 74 68 20 4e 55 4d 31 20 4e 55 4d 32 20  width NUM1 NUM2 
156e0 2e 2e 2e 20 20 20 53 65 74 20 63 6f 6c 75 6d 6e  ...   Set column
156f0 20 77 69 64 74 68 73 20 66 6f 72 20 5c 22 63 6f   widths for \"co
15700 6c 75 6d 6e 5c 22 20 6d 6f 64 65 5c 6e 22 0a 20  lumn\" mode\n". 
15710 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20   "              
15720 20 20 20 20 20 20 20 20 20 20 20 4e 65 67 61 74             Negat
15730 69 76 65 20 76 61 6c 75 65 73 20 72 69 67 68 74  ive values right
15740 2d 6a 75 73 74 69 66 79 5c 6e 22 0a 3b 0a 0a 23  -justify\n".;..#
15750 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
15760 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e  E_ENABLE_SESSION
15770 29 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 68 65  )./*.** Print he
15780 6c 70 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  lp information f
15790 6f 72 20 74 68 65 20 22 2e 73 65 73 73 69 6f 6e  or the ".session
157a0 73 22 20 63 6f 6d 6d 61 6e 64 0a 2a 2f 0a 76 6f  s" command.*/.vo
157b0 69 64 20 73 65 73 73 69 6f 6e 5f 68 65 6c 70 28  id session_help(
157c0 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a  ShellState *p){.
157d0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
157e0 6f 75 74 2c 0a 20 20 20 20 22 2e 73 65 73 73 69  out,.    ".sessi
157f0 6f 6e 20 3f 4e 41 4d 45 3f 20 53 55 42 43 4f 4d  on ?NAME? SUBCOM
15800 4d 41 4e 44 20 3f 41 52 47 53 2e 2e 2e 3f 5c 6e  MAND ?ARGS...?\n
15810 22 0a 20 20 20 20 22 49 66 20 3f 4e 41 4d 45 3f  ".    "If ?NAME?
15820 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 68 65   is omitted, the
15830 20 66 69 72 73 74 20 64 65 66 69 6e 65 64 20 73   first defined s
15840 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 2e 5c  ession is used.\
15850 6e 22 0a 20 20 20 20 22 53 75 62 63 6f 6d 6d 61  n".    "Subcomma
15860 6e 64 73 3a 5c 6e 22 0a 20 20 20 20 22 20 20 20  nds:\n".    "   
15870 61 74 74 61 63 68 20 54 41 42 4c 45 20 20 20 20  attach TABLE    
15880 20 20 20 20 20 20 20 20 20 41 74 74 61 63 68 20           Attach 
15890 54 41 42 4c 45 5c 6e 22 0a 20 20 20 20 22 20 20  TABLE\n".    "  
158a0 20 63 68 61 6e 67 65 73 65 74 20 46 49 4c 45 20   changeset FILE 
158b0 20 20 20 20 20 20 20 20 20 20 57 72 69 74 65 20            Write 
158c0 61 20 63 68 61 6e 67 65 73 65 74 20 69 6e 74 6f  a changeset into
158d0 20 46 49 4c 45 5c 6e 22 0a 20 20 20 20 22 20 20   FILE\n".    "  
158e0 20 63 6c 6f 73 65 20 20 20 20 20 20 20 20 20 20   close          
158f0 20 20 20 20 20 20 20 20 20 20 43 6c 6f 73 65 20            Close 
15900 6f 6e 65 20 73 65 73 73 69 6f 6e 5c 6e 22 0a 20  one session\n". 
15910 20 20 20 22 20 20 20 65 6e 61 62 6c 65 20 3f 42     "   enable ?B
15920 4f 4f 4c 45 41 4e 3f 20 20 20 20 20 20 20 20 20  OOLEAN?         
15930 53 65 74 20 6f 72 20 71 75 65 72 79 20 74 68 65  Set or query the
15940 20 65 6e 61 62 6c 65 20 62 69 74 5c 6e 22 0a 20   enable bit\n". 
15950 20 20 20 22 20 20 20 66 69 6c 74 65 72 20 47 4c     "   filter GL
15960 4f 42 2e 2e 2e 20 20 20 20 20 20 20 20 20 20 20  OB...           
15970 52 65 6a 65 63 74 20 74 61 62 6c 65 73 20 6d 61  Reject tables ma
15980 74 63 68 69 6e 67 20 47 4c 4f 42 73 5c 6e 22 0a  tching GLOBs\n".
15990 20 20 20 20 22 20 20 20 69 6e 64 69 72 65 63 74      "   indirect
159a0 20 3f 42 4f 4f 4c 45 41 4e 3f 20 20 20 20 20 20   ?BOOLEAN?      
159b0 20 4d 61 72 6b 20 6f 72 20 71 75 65 72 79 20 74   Mark or query t
159c0 68 65 20 69 6e 64 69 72 65 63 74 20 73 74 61 74  he indirect stat
159d0 75 73 5c 6e 22 0a 20 20 20 20 22 20 20 20 69 73  us\n".    "   is
159e0 65 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20  empty           
159f0 20 20 20 20 20 20 20 51 75 65 72 79 20 77 68 65         Query whe
15a00 74 68 65 72 20 74 68 65 20 73 65 73 73 69 6f 6e  ther the session
15a10 20 69 73 20 65 6d 70 74 79 5c 6e 22 0a 20 20 20   is empty\n".   
15a20 20 22 20 20 20 6c 69 73 74 20 20 20 20 20 20 20   "   list       
15a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 69                Li
15a40 73 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  st currently ope
15a50 6e 20 73 65 73 73 69 6f 6e 20 6e 61 6d 65 73 5c  n session names\
15a60 6e 22 0a 20 20 20 20 22 20 20 20 6f 70 65 6e 20  n".    "   open 
15a70 44 42 20 4e 41 4d 45 20 20 20 20 20 20 20 20 20  DB NAME         
15a80 20 20 20 20 4f 70 65 6e 20 61 20 6e 65 77 20 73      Open a new s
15a90 65 73 73 69 6f 6e 20 6f 6e 20 44 42 5c 6e 22 0a  ession on DB\n".
15aa0 20 20 20 20 22 20 20 20 70 61 74 63 68 73 65 74      "   patchset
15ab0 20 46 49 4c 45 20 20 20 20 20 20 20 20 20 20 20   FILE           
15ac0 20 57 72 69 74 65 20 61 20 70 61 74 63 68 73 65   Write a patchse
15ad0 74 20 69 6e 74 6f 20 46 49 4c 45 5c 6e 22 0a 20  t into FILE\n". 
15ae0 20 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f   );.}.#endif.../
15af0 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72 65  * Forward refere
15b00 6e 63 65 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e  nce */.static in
15b10 74 20 70 72 6f 63 65 73 73 5f 69 6e 70 75 74 28  t process_input(
15b20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 46  ShellState *p, F
15b30 49 4c 45 20 2a 69 6e 29 3b 0a 0a 2f 2a 0a 2a 2a  ILE *in);../*.**
15b40 20 52 65 61 64 20 74 68 65 20 63 6f 6e 74 65 6e   Read the conten
15b50 74 20 6f 66 20 66 69 6c 65 20 7a 4e 61 6d 65 20  t of file zName 
15b60 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61  into memory obta
15b70 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
15b80 33 5f 6d 61 6c 6c 6f 63 36 34 28 29 0a 2a 2a 20  3_malloc64().** 
15b90 61 6e 64 20 72 65 74 75 72 6e 20 61 20 70 6f 69  and return a poi
15ba0 6e 74 65 72 20 74 6f 20 74 68 65 20 62 75 66 66  nter to the buff
15bb0 65 72 2e 20 54 68 65 20 63 61 6c 6c 65 72 20 69  er. The caller i
15bc0 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  s responsible fo
15bd0 72 20 66 72 65 65 69 6e 67 0a 2a 2a 20 74 68 65  r freeing.** the
15be0 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 0a 2a 2a 20 49   memory..**.** I
15bf0 66 20 70 61 72 61 6d 65 74 65 72 20 70 6e 42 79  f parameter pnBy
15c00 74 65 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  te is not NULL, 
15c10 28 2a 70 6e 42 79 74 65 29 20 69 73 20 73 65 74  (*pnByte) is set
15c20 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
15c30 66 20 62 79 74 65 73 0a 2a 2a 20 72 65 61 64 2e  f bytes.** read.
15c40 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 63 6f 6e 76 65  .**.** For conve
15c50 6e 69 65 6e 63 65 2c 20 61 20 6e 75 6c 2d 74 65  nience, a nul-te
15c60 72 6d 69 6e 61 74 6f 72 20 62 79 74 65 20 69 73  rminator byte is
15c70 20 61 6c 77 61 79 73 20 61 70 70 65 6e 64 65 64   always appended
15c80 20 74 6f 20 74 68 65 20 64 61 74 61 20 72 65 61   to the data rea
15c90 64 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 66 69  d.** from the fi
15ca0 6c 65 20 62 65 66 6f 72 65 20 74 68 65 20 62 75  le before the bu
15cb0 66 66 65 72 20 69 73 20 72 65 74 75 72 6e 65 64  ffer is returned
15cc0 2e 20 54 68 69 73 20 62 79 74 65 20 69 73 20 6e  . This byte is n
15cd0 6f 74 20 69 6e 63 6c 75 64 65 64 20 69 6e 0a 2a  ot included in.*
15ce0 2a 20 74 68 65 20 66 69 6e 61 6c 20 76 61 6c 75  * the final valu
15cf0 65 20 6f 66 20 28 2a 70 6e 42 79 74 65 29 2c 20  e of (*pnByte), 
15d00 69 66 20 61 70 70 6c 69 63 61 62 6c 65 2e 0a 2a  if applicable..*
15d10 2a 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20 72 65 74  *.** NULL is ret
15d20 75 72 6e 65 64 20 69 66 20 61 6e 79 20 65 72 72  urned if any err
15d30 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
15d40 64 2e 20 54 68 65 20 66 69 6e 61 6c 20 76 61 6c  d. The final val
15d50 75 65 20 6f 66 20 2a 70 6e 42 79 74 65 0a 2a 2a  ue of *pnByte.**
15d60 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20 69 6e   is undefined in
15d70 20 74 68 69 73 20 63 61 73 65 2e 0a 2a 2f 0a 73   this case..*/.s
15d80 74 61 74 69 63 20 63 68 61 72 20 2a 72 65 61 64  tatic char *read
15d90 46 69 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 20  File(const char 
15da0 2a 7a 4e 61 6d 65 2c 20 69 6e 74 20 2a 70 6e 42  *zName, int *pnB
15db0 79 74 65 29 7b 0a 20 20 46 49 4c 45 20 2a 69 6e  yte){.  FILE *in
15dc0 20 3d 20 66 6f 70 65 6e 28 7a 4e 61 6d 65 2c 20   = fopen(zName, 
15dd0 22 72 62 22 29 3b 0a 20 20 6c 6f 6e 67 20 6e 49  "rb");.  long nI
15de0 6e 3b 0a 20 20 73 69 7a 65 5f 74 20 6e 52 65 61  n;.  size_t nRea
15df0 64 3b 0a 20 20 63 68 61 72 20 2a 70 42 75 66 3b  d;.  char *pBuf;
15e00 0a 20 20 69 66 28 20 69 6e 3d 3d 30 20 29 20 72  .  if( in==0 ) r
15e10 65 74 75 72 6e 20 30 3b 0a 20 20 66 73 65 65 6b  eturn 0;.  fseek
15e20 28 69 6e 2c 20 30 2c 20 53 45 45 4b 5f 45 4e 44  (in, 0, SEEK_END
15e30 29 3b 0a 20 20 6e 49 6e 20 3d 20 66 74 65 6c 6c  );.  nIn = ftell
15e40 28 69 6e 29 3b 0a 20 20 72 65 77 69 6e 64 28 69  (in);.  rewind(i
15e50 6e 29 3b 0a 20 20 70 42 75 66 20 3d 20 73 71 6c  n);.  pBuf = sql
15e60 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 20 6e  ite3_malloc64( n
15e70 49 6e 2b 31 20 29 3b 0a 20 20 69 66 28 20 70 42  In+1 );.  if( pB
15e80 75 66 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  uf==0 ) return 0
15e90 3b 0a 20 20 6e 52 65 61 64 20 3d 20 66 72 65 61  ;.  nRead = frea
15ea0 64 28 70 42 75 66 2c 20 6e 49 6e 2c 20 31 2c 20  d(pBuf, nIn, 1, 
15eb0 69 6e 29 3b 0a 20 20 66 63 6c 6f 73 65 28 69 6e  in);.  fclose(in
15ec0 29 3b 0a 20 20 69 66 28 20 6e 52 65 61 64 21 3d  );.  if( nRead!=
15ed0 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  1 ){.    sqlite3
15ee0 5f 66 72 65 65 28 70 42 75 66 29 3b 0a 20 20 20  _free(pBuf);.   
15ef0 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
15f00 20 70 42 75 66 5b 6e 49 6e 5d 20 3d 20 30 3b 0a   pBuf[nIn] = 0;.
15f10 20 20 69 66 28 20 70 6e 42 79 74 65 20 29 20 2a    if( pnByte ) *
15f20 70 6e 42 79 74 65 20 3d 20 6e 49 6e 3b 0a 20 20  pnByte = nIn;.  
15f30 72 65 74 75 72 6e 20 70 42 75 66 3b 0a 7d 0a 0a  return pBuf;.}..
15f40 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
15f50 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f  TE_ENABLE_SESSIO
15f60 4e 29 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61  N)./*.** Close a
15f70 20 73 69 6e 67 6c 65 20 4f 70 65 6e 53 65 73 73   single OpenSess
15f80 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 72  ion object and r
15f90 65 6c 65 61 73 65 20 61 6c 6c 20 6f 66 20 69 74  elease all of it
15fa0 73 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20  s associated.** 
15fb0 72 65 73 6f 75 72 63 65 73 2e 0a 2a 2f 0a 73 74  resources..*/.st
15fc0 61 74 69 63 20 76 6f 69 64 20 73 65 73 73 69 6f  atic void sessio
15fd0 6e 5f 63 6c 6f 73 65 28 4f 70 65 6e 53 65 73 73  n_close(OpenSess
15fe0 69 6f 6e 20 2a 70 53 65 73 73 69 6f 6e 29 7b 0a  ion *pSession){.
15ff0 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74    int i;.  sqlit
16000 65 33 73 65 73 73 69 6f 6e 5f 64 65 6c 65 74 65  e3session_delete
16010 28 70 53 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20  (pSession->p);. 
16020 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 53   sqlite3_free(pS
16030 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 29 3b 0a  ession->zName);.
16040 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 53 65    for(i=0; i<pSe
16050 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 3b 20  ssion->nFilter; 
16060 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i++){.    sqlite
16070 33 5f 66 72 65 65 28 70 53 65 73 73 69 6f 6e 2d  3_free(pSession-
16080 3e 61 7a 46 69 6c 74 65 72 5b 69 5d 29 3b 0a 20  >azFilter[i]);. 
16090 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65   }.  sqlite3_fre
160a0 65 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69  e(pSession->azFi
160b0 6c 74 65 72 29 3b 0a 20 20 6d 65 6d 73 65 74 28  lter);.  memset(
160c0 70 53 65 73 73 69 6f 6e 2c 20 30 2c 20 73 69 7a  pSession, 0, siz
160d0 65 6f 66 28 4f 70 65 6e 53 65 73 73 69 6f 6e 29  eof(OpenSession)
160e0 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  );.}.#endif../*.
160f0 2a 2a 20 43 6c 6f 73 65 20 61 6c 6c 20 4f 70 65  ** Close all Ope
16100 6e 53 65 73 73 69 6f 6e 20 6f 62 6a 65 63 74 73  nSession objects
16110 20 61 6e 64 20 72 65 6c 65 61 73 65 20 61 6c 6c   and release all
16120 20 61 73 73 6f 63 69 61 74 65 64 20 72 65 73 6f   associated reso
16130 75 72 63 65 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  urces..*/.#if de
16140 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
16150 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 73 74 61  BLE_SESSION).sta
16160 74 69 63 20 76 6f 69 64 20 73 65 73 73 69 6f 6e  tic void session
16170 5f 63 6c 6f 73 65 5f 61 6c 6c 28 53 68 65 6c 6c  _close_all(Shell
16180 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 69 6e 74  State *p){.  int
16190 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   i;.  for(i=0; i
161a0 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69 2b  <p->nSession; i+
161b0 2b 29 7b 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f  +){.    session_
161c0 63 6c 6f 73 65 28 26 70 2d 3e 61 53 65 73 73 69  close(&p->aSessi
161d0 6f 6e 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 70 2d  on[i]);.  }.  p-
161e0 3e 6e 53 65 73 73 69 6f 6e 20 3d 20 30 3b 0a 7d  >nSession = 0;.}
161f0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
16200 73 65 73 73 69 6f 6e 5f 63 6c 6f 73 65 5f 61 6c  session_close_al
16210 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  l(X).#endif../*.
16220 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** Implementatio
16230 6e 20 6f 66 20 74 68 65 20 78 46 69 6c 74 65 72  n of the xFilter
16240 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
16250 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e 2e 20 20   open session.  
16260 4f 6d 69 74 0a 2a 2a 20 61 6e 79 20 74 61 62 6c  Omit.** any tabl
16270 65 73 20 6e 61 6d 65 64 20 62 79 20 22 2e 73 65  es named by ".se
16280 73 73 69 6f 6e 20 66 69 6c 74 65 72 22 20 62 75  ssion filter" bu
16290 74 20 6c 65 74 20 61 6c 6c 20 6f 74 68 65 72 20  t let all other 
162a0 74 61 62 6c 65 20 74 68 72 6f 75 67 68 2e 0a 2a  table through..*
162b0 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
162c0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53  LITE_ENABLE_SESS
162d0 49 4f 4e 29 0a 73 74 61 74 69 63 20 69 6e 74 20  ION).static int 
162e0 73 65 73 73 69 6f 6e 5f 66 69 6c 74 65 72 28 76  session_filter(v
162f0 6f 69 64 20 2a 70 43 74 78 2c 20 63 6f 6e 73 74  oid *pCtx, const
16300 20 63 68 61 72 20 2a 7a 54 61 62 29 7b 0a 20 20   char *zTab){.  
16310 4f 70 65 6e 53 65 73 73 69 6f 6e 20 2a 70 53 65  OpenSession *pSe
16320 73 73 69 6f 6e 20 3d 20 28 4f 70 65 6e 53 65 73  ssion = (OpenSes
16330 73 69 6f 6e 2a 29 70 43 74 78 3b 0a 20 20 69 6e  sion*)pCtx;.  in
16340 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  t i;.  for(i=0; 
16350 69 3c 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c  i<pSession->nFil
16360 74 65 72 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  ter; i++){.    i
16370 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c  f( sqlite3_strgl
16380 6f 62 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46  ob(pSession->azF
16390 69 6c 74 65 72 5b 69 5d 2c 20 7a 54 61 62 29 3d  ilter[i], zTab)=
163a0 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
163b0 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d   }.  return 1;.}
163c0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
163d0 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74  ake sure the dat
163e0 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2e 20 20  abase is open.  
163f0 49 66 20 69 74 20 69 73 20 6e 6f 74 2c 20 74 68  If it is not, th
16400 65 6e 20 6f 70 65 6e 20 69 74 2e 20 20 49 66 0a  en open it.  If.
16410 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
16420 66 61 69 6c 73 20 74 6f 20 6f 70 65 6e 2c 20 70  fails to open, p
16430 72 69 6e 74 20 61 6e 20 65 72 72 6f 72 20 6d 65  rint an error me
16440 73 73 61 67 65 20 61 6e 64 20 65 78 69 74 2e 0a  ssage and exit..
16450 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f  */.static void o
16460 70 65 6e 5f 64 62 28 53 68 65 6c 6c 53 74 61 74  pen_db(ShellStat
16470 65 20 2a 70 2c 20 69 6e 74 20 6b 65 65 70 41 6c  e *p, int keepAl
16480 69 76 65 29 7b 0a 20 20 69 66 28 20 70 2d 3e 64  ive){.  if( p->d
16490 62 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  b==0 ){.    sqli
164a0 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
164b0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6f 70  ;.    sqlite3_op
164c0 65 6e 28 70 2d 3e 7a 44 62 46 69 6c 65 6e 61 6d  en(p->zDbFilenam
164d0 65 2c 20 26 70 2d 3e 64 62 29 3b 0a 20 20 20 20  e, &p->db);.    
164e0 67 6c 6f 62 61 6c 44 62 20 3d 20 70 2d 3e 64 62  globalDb = p->db
164f0 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 3d  ;.    if( p->db=
16500 3d 30 20 7c 7c 20 53 51 4c 49 54 45 5f 4f 4b 21  =0 || SQLITE_OK!
16510 3d 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65  =sqlite3_errcode
16520 28 70 2d 3e 64 62 29 20 29 7b 0a 20 20 20 20 20  (p->db) ){.     
16530 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
16540 65 72 72 2c 22 45 72 72 6f 72 3a 20 75 6e 61 62  err,"Error: unab
16550 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62  le to open datab
16560 61 73 65 20 5c 22 25 73 5c 22 3a 20 25 73 5c 6e  ase \"%s\": %s\n
16570 22 2c 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  ",.          p->
16580 7a 44 62 46 69 6c 65 6e 61 6d 65 2c 20 73 71 6c  zDbFilename, sql
16590 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64  ite3_errmsg(p->d
165a0 62 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6b  b));.      if( k
165b0 65 65 70 41 6c 69 76 65 20 29 20 72 65 74 75 72  eepAlive ) retur
165c0 6e 3b 0a 20 20 20 20 20 20 65 78 69 74 28 31 29  n;.      exit(1)
165d0 3b 0a 20 20 20 20 7d 0a 23 69 66 6e 64 65 66 20  ;.    }.#ifndef 
165e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44  SQLITE_OMIT_LOAD
165f0 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 20 20 73  _EXTENSION.    s
16600 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f  qlite3_enable_lo
16610 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 70 2d 3e  ad_extension(p->
16620 64 62 2c 20 31 29 3b 0a 23 65 6e 64 69 66 0a 20  db, 1);.#endif. 
16630 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 69     sqlite3_filei
16640 6f 5f 69 6e 69 74 28 70 2d 3e 64 62 2c 20 30 2c  o_init(p->db, 0,
16650 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
16660 5f 73 68 61 74 68 72 65 65 5f 69 6e 69 74 28 70  _shathree_init(p
16670 2d 3e 64 62 2c 20 30 2c 20 30 29 3b 0a 20 20 20  ->db, 0, 0);.   
16680 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74   sqlite3_complet
16690 69 6f 6e 5f 69 6e 69 74 28 70 2d 3e 64 62 2c 20  ion_init(p->db, 
166a0 30 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  0, 0);.    sqlit
166b0 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
166c0 6f 6e 28 70 2d 3e 64 62 2c 20 22 73 68 65 6c 6c  on(p->db, "shell
166d0 5f 61 64 64 5f 73 63 68 65 6d 61 22 2c 20 32 2c  _add_schema", 2,
166e0 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c   SQLITE_UTF8, 0,
166f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16700 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68 65               she
16710 6c 6c 41 64 64 53 63 68 65 6d 61 4e 61 6d 65 2c  llAddSchemaName,
16720 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 7d 0a 0a 23   0, 0);.  }.}..#
16730 69 66 20 48 41 56 45 5f 52 45 41 44 4c 49 4e 45  if HAVE_READLINE
16740 20 7c 7c 20 48 41 56 45 5f 45 44 49 54 4c 49 4e   || HAVE_EDITLIN
16750 45 0a 2f 2a 0a 2a 2a 20 52 65 61 64 6c 69 6e 65  E./*.** Readline
16760 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 63 61 6c 6c   completion call
16770 62 61 63 6b 73 0a 2a 2f 0a 73 74 61 74 69 63 20  backs.*/.static 
16780 63 68 61 72 20 2a 72 65 61 64 6c 69 6e 65 5f 63  char *readline_c
16790 6f 6d 70 6c 65 74 69 6f 6e 5f 67 65 6e 65 72 61  ompletion_genera
167a0 74 6f 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  tor(const char *
167b0 74 65 78 74 2c 20 69 6e 74 20 73 74 61 74 65 29  text, int state)
167c0 7b 0a 20 20 73 74 61 74 69 63 20 73 71 6c 69 74  {.  static sqlit
167d0 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d  e3_stmt *pStmt =
167e0 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 52 65 74   0;.  char *zRet
167f0 3b 0a 20 20 69 66 28 20 73 74 61 74 65 3d 3d 30  ;.  if( state==0
16800 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 53   ){.    char *zS
16810 71 6c 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  ql;.    sqlite3_
16820 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
16830 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  .    zSql = sqli
16840 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c  te3_mprintf("SEL
16850 45 43 54 20 44 49 53 54 49 4e 43 54 20 63 61 6e  ECT DISTINCT can
16860 64 69 64 61 74 65 20 43 4f 4c 4c 41 54 45 20 6e  didate COLLATE n
16870 6f 63 61 73 65 22 0a 20 20 20 20 20 20 20 20 20  ocase".         
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16890 20 20 22 20 20 46 52 4f 4d 20 63 6f 6d 70 6c 65    "  FROM comple
168a0 74 69 6f 6e 28 25 51 29 20 4f 52 44 45 52 20 42  tion(%Q) ORDER B
168b0 59 20 31 22 2c 20 74 65 78 74 29 3b 0a 20 20 20  Y 1", text);.   
168c0 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
168d0 5f 76 32 28 67 6c 6f 62 61 6c 44 62 2c 20 7a 53  _v2(globalDb, zS
168e0 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20  ql, -1, &pStmt, 
168f0 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
16900 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 7d 0a  free(zSql);.  }.
16910 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74    if( sqlite3_st
16920 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  ep(pStmt)==SQLIT
16930 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 7a 52 65  E_ROW ){.    zRe
16940 74 20 3d 20 73 74 72 64 75 70 28 28 63 6f 6e 73  t = strdup((cons
16950 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  t char*)sqlite3_
16960 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d  column_text(pStm
16970 74 2c 20 30 29 29 3b 0a 20 20 7d 65 6c 73 65 7b  t, 0));.  }else{
16980 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  .    sqlite3_fin
16990 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
169a0 20 20 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 20    pStmt = 0;.   
169b0 20 7a 52 65 74 20 3d 20 30 3b 0a 20 20 7d 0a 20   zRet = 0;.  }. 
169c0 20 72 65 74 75 72 6e 20 7a 52 65 74 3b 0a 7d 0a   return zRet;.}.
169d0 73 74 61 74 69 63 20 63 68 61 72 20 2a 2a 72 65  static char **re
169e0 61 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65 74 69 6f  adline_completio
169f0 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54  n(const char *zT
16a00 65 78 74 2c 20 69 6e 74 20 69 53 74 61 72 74 2c  ext, int iStart,
16a10 20 69 6e 74 20 69 45 6e 64 29 7b 0a 20 20 72 6c   int iEnd){.  rl
16a20 5f 61 74 74 65 6d 70 74 65 64 5f 63 6f 6d 70 6c  _attempted_compl
16a30 65 74 69 6f 6e 5f 6f 76 65 72 20 3d 20 31 3b 0a  etion_over = 1;.
16a40 20 20 72 65 74 75 72 6e 20 72 6c 5f 63 6f 6d 70    return rl_comp
16a50 6c 65 74 69 6f 6e 5f 6d 61 74 63 68 65 73 28 7a  letion_matches(z
16a60 54 65 78 74 2c 20 72 65 61 64 6c 69 6e 65 5f 63  Text, readline_c
16a70 6f 6d 70 6c 65 74 69 6f 6e 5f 67 65 6e 65 72 61  ompletion_genera
16a80 74 6f 72 29 3b 0a 7d 0a 0a 23 65 6c 69 66 20 48  tor);.}..#elif H
16a90 41 56 45 5f 4c 49 4e 45 4e 4f 49 53 45 0a 2f 2a  AVE_LINENOISE./*
16aa0 0a 2a 2a 20 4c 69 6e 65 6e 6f 69 73 65 20 63 6f  .** Linenoise co
16ab0 6d 70 6c 65 74 69 6f 6e 20 63 61 6c 6c 62 61 63  mpletion callbac
16ac0 6b 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  k.*/.static void
16ad0 20 6c 69 6e 65 6e 6f 69 73 65 5f 63 6f 6d 70 6c   linenoise_compl
16ae0 65 74 69 6f 6e 28 63 6f 6e 73 74 20 63 68 61 72  etion(const char
16af0 20 2a 7a 4c 69 6e 65 2c 20 6c 69 6e 65 6e 6f 69   *zLine, linenoi
16b00 73 65 43 6f 6d 70 6c 65 74 69 6f 6e 73 20 2a 6c  seCompletions *l
16b10 63 29 7b 0a 20 20 69 6e 74 20 6e 4c 69 6e 65 20  c){.  int nLine 
16b20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 4c  = (int)strlen(zL
16b30 69 6e 65 29 3b 0a 20 20 69 6e 74 20 69 2c 20 69  ine);.  int i, i
16b40 53 74 61 72 74 3b 0a 20 20 73 71 6c 69 74 65 33  Start;.  sqlite3
16b50 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30  _stmt *pStmt = 0
16b60 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a  ;.  char *zSql;.
16b70 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30 30    char zBuf[1000
16b80 5d 3b 0a 0a 20 20 69 66 28 20 6e 4c 69 6e 65 3e  ];..  if( nLine>
16b90 73 69 7a 65 6f 66 28 7a 42 75 66 29 2d 33 30 20  sizeof(zBuf)-30 
16ba0 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20  ) return;.  if( 
16bb0 7a 4c 69 6e 65 5b 30 5d 3d 3d 27 2e 27 20 29 20  zLine[0]=='.' ) 
16bc0 72 65 74 75 72 6e 3b 0a 20 20 66 6f 72 28 69 3d  return;.  for(i=
16bd0 6e 4c 69 6e 65 2d 31 3b 20 69 3e 3d 30 20 26 26  nLine-1; i>=0 &&
16be0 20 28 69 73 61 6c 6e 75 6d 28 7a 4c 69 6e 65 5b   (isalnum(zLine[
16bf0 69 5d 29 20 7c 7c 20 7a 4c 69 6e 65 5b 69 5d 3d  i]) || zLine[i]=
16c00 3d 27 5f 27 29 3b 20 69 2d 2d 29 7b 7d 0a 20 20  ='_'); i--){}.  
16c10 69 66 28 20 69 3d 3d 6e 4c 69 6e 65 2d 31 20 29  if( i==nLine-1 )
16c20 20 72 65 74 75 72 6e 3b 0a 20 20 69 53 74 61 72   return;.  iStar
16c30 74 20 3d 20 69 2b 31 3b 0a 20 20 6d 65 6d 63 70  t = i+1;.  memcp
16c40 79 28 7a 42 75 66 2c 20 7a 4c 69 6e 65 2c 20 69  y(zBuf, zLine, i
16c50 53 74 61 72 74 29 3b 0a 20 20 7a 53 71 6c 20 3d  Start);.  zSql =
16c60 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
16c70 28 22 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43  ("SELECT DISTINC
16c80 54 20 63 61 6e 64 69 64 61 74 65 20 43 4f 4c 4c  T candidate COLL
16c90 41 54 45 20 6e 6f 63 61 73 65 22 0a 20 20 20 20  ATE nocase".    
16ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cb0 20 20 20 20 20 22 20 20 46 52 4f 4d 20 63 6f 6d       "  FROM com
16cc0 70 6c 65 74 69 6f 6e 28 25 51 2c 25 51 29 20 4f  pletion(%Q,%Q) O
16cd0 52 44 45 52 20 42 59 20 31 22 2c 0a 20 20 20 20  RDER BY 1",.    
16ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cf0 20 20 20 20 20 26 7a 4c 69 6e 65 5b 69 53 74 61       &zLine[iSta
16d00 72 74 5d 2c 20 7a 4c 69 6e 65 29 3b 0a 20 20 73  rt], zLine);.  s
16d10 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
16d20 32 28 67 6c 6f 62 61 6c 44 62 2c 20 7a 53 71 6c  2(globalDb, zSql
16d30 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29  , -1, &pStmt, 0)
16d40 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
16d50 28 7a 53 71 6c 29 3b 0a 20 20 73 71 6c 69 74 65  (zSql);.  sqlite
16d60 33 5f 65 78 65 63 28 67 6c 6f 62 61 6c 44 62 2c  3_exec(globalDb,
16d70 20 22 50 52 41 47 4d 41 20 70 61 67 65 5f 63 6f   "PRAGMA page_co
16d80 75 6e 74 22 2c 20 30 2c 20 30 2c 20 30 29 3b 20  unt", 0, 0, 0); 
16d90 2f 2a 20 4c 6f 61 64 20 74 68 65 20 73 63 68 65  /* Load the sche
16da0 6d 61 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20 73  ma */.  while( s
16db0 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d  qlite3_step(pStm
16dc0 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  t)==SQLITE_ROW )
16dd0 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
16de0 20 2a 7a 43 6f 6d 70 6c 65 74 69 6f 6e 20 3d 20   *zCompletion = 
16df0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
16e00 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
16e10 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20  (pStmt, 0);.    
16e20 69 6e 74 20 6e 43 6f 6d 70 6c 65 74 69 6f 6e 20  int nCompletion 
16e30 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
16e40 5f 62 79 74 65 73 28 70 53 74 6d 74 2c 20 30 29  _bytes(pStmt, 0)
16e50 3b 0a 20 20 20 20 69 66 28 20 69 53 74 61 72 74  ;.    if( iStart
16e60 2b 6e 43 6f 6d 70 6c 65 74 69 6f 6e 20 3c 20 73  +nCompletion < s
16e70 69 7a 65 6f 66 28 7a 42 75 66 29 2d 31 20 29 7b  izeof(zBuf)-1 ){
16e80 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 7a 42  .      memcpy(zB
16e90 75 66 2b 69 53 74 61 72 74 2c 20 7a 43 6f 6d 70  uf+iStart, zComp
16ea0 6c 65 74 69 6f 6e 2c 20 6e 43 6f 6d 70 6c 65 74  letion, nComplet
16eb0 69 6f 6e 2b 31 29 3b 0a 20 20 20 20 20 20 6c 69  ion+1);.      li
16ec0 6e 65 6e 6f 69 73 65 41 64 64 43 6f 6d 70 6c 65  nenoiseAddComple
16ed0 74 69 6f 6e 28 6c 63 2c 20 7a 42 75 66 29 3b 0a  tion(lc, zBuf);.
16ee0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
16ef0 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
16f00 6d 74 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  mt);.}.#endif../
16f10 2a 0a 2a 2a 20 44 6f 20 43 2d 6c 61 6e 67 75 61  *.** Do C-langua
16f20 67 65 20 73 74 79 6c 65 20 64 65 71 75 6f 74 69  ge style dequoti
16f30 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 5c 61 20  ng..**.**    \a 
16f40 20 20 20 2d 3e 20 61 6c 61 72 6d 0a 2a 2a 20 20     -> alarm.**  
16f50 20 20 5c 62 20 20 20 20 2d 3e 20 62 61 63 6b 73    \b    -> backs
16f60 70 61 63 65 0a 2a 2a 20 20 20 20 5c 74 20 20 20  pace.**    \t   
16f70 20 2d 3e 20 74 61 62 0a 2a 2a 20 20 20 20 5c 6e   -> tab.**    \n
16f80 20 20 20 20 2d 3e 20 6e 65 77 6c 69 6e 65 0a 2a      -> newline.*
16f90 2a 20 20 20 20 5c 76 20 20 20 20 2d 3e 20 76 65  *    \v    -> ve
16fa0 72 74 69 63 61 6c 20 74 61 62 0a 2a 2a 20 20 20  rtical tab.**   
16fb0 20 5c 66 20 20 20 20 2d 3e 20 66 6f 72 6d 20 66   \f    -> form f
16fc0 65 65 64 0a 2a 2a 20 20 20 20 5c 72 20 20 20 20  eed.**    \r    
16fd0 2d 3e 20 63 61 72 72 69 61 67 65 20 72 65 74 75  -> carriage retu
16fe0 72 6e 0a 2a 2a 20 20 20 20 5c 73 20 20 20 20 2d  rn.**    \s    -
16ff0 3e 20 73 70 61 63 65 0a 2a 2a 20 20 20 20 5c 22  > space.**    \"
17000 20 20 20 20 2d 3e 20 22 0a 2a 2a 20 20 20 20 5c      -> ".**    \
17010 27 20 20 20 20 2d 3e 20 27 0a 2a 2a 20 20 20 20  '    -> '.**    
17020 5c 5c 20 20 20 20 2d 3e 20 62 61 63 6b 73 6c 61  \\    -> backsla
17030 73 68 0a 2a 2a 20 20 20 20 5c 4e 4e 4e 20 20 2d  sh.**    \NNN  -
17040 3e 20 61 73 63 69 69 20 63 68 61 72 61 63 74 65  > ascii characte
17050 72 20 4e 4e 4e 20 69 6e 20 6f 63 74 61 6c 0a 2a  r NNN in octal.*
17060 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65  /.static void re
17070 73 6f 6c 76 65 5f 62 61 63 6b 73 6c 61 73 68 65  solve_backslashe
17080 73 28 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e  s(char *z){.  in
17090 74 20 69 2c 20 6a 3b 0a 20 20 63 68 61 72 20 63  t i, j;.  char c
170a0 3b 0a 20 20 77 68 69 6c 65 28 20 2a 7a 20 26 26  ;.  while( *z &&
170b0 20 2a 7a 21 3d 27 5c 5c 27 20 29 20 7a 2b 2b 3b   *z!='\\' ) z++;
170c0 0a 20 20 66 6f 72 28 69 3d 6a 3d 30 3b 20 28 63  .  for(i=j=0; (c
170d0 20 3d 20 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b   = z[i])!=0; i++
170e0 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  , j++){.    if( 
170f0 63 3d 3d 27 5c 5c 27 20 26 26 20 7a 5b 69 2b 31  c=='\\' && z[i+1
17100 5d 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 63 20  ]!=0 ){.      c 
17110 3d 20 7a 5b 2b 2b 69 5d 3b 0a 20 20 20 20 20 20  = z[++i];.      
17120 69 66 28 20 63 3d 3d 27 61 27 20 29 7b 0a 20 20  if( c=='a' ){.  
17130 20 20 20 20 20 20 63 20 3d 20 27 5c 61 27 3b 0a        c = '\a';.
17140 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
17150 63 3d 3d 27 62 27 20 29 7b 0a 20 20 20 20 20 20  c=='b' ){.      
17160 20 20 63 20 3d 20 27 5c 62 27 3b 0a 20 20 20 20    c = '\b';.    
17170 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27    }else if( c=='
17180 74 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20  t' ){.        c 
17190 3d 20 27 5c 74 27 3b 0a 20 20 20 20 20 20 7d 65  = '\t';.      }e
171a0 6c 73 65 20 69 66 28 20 63 3d 3d 27 6e 27 20 29  lse if( c=='n' )
171b0 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27 5c  {.        c = '\
171c0 6e 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  n';.      }else 
171d0 69 66 28 20 63 3d 3d 27 76 27 20 29 7b 0a 20 20  if( c=='v' ){.  
171e0 20 20 20 20 20 20 63 20 3d 20 27 5c 76 27 3b 0a        c = '\v';.
171f0 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
17200 63 3d 3d 27 66 27 20 29 7b 0a 20 20 20 20 20 20  c=='f' ){.      
17210 20 20 63 20 3d 20 27 5c 66 27 3b 0a 20 20 20 20    c = '\f';.    
17220 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27    }else if( c=='
17230 72 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20  r' ){.        c 
17240 3d 20 27 5c 72 27 3b 0a 20 20 20 20 20 20 7d 65  = '\r';.      }e
17250 6c 73 65 20 69 66 28 20 63 3d 3d 27 22 27 20 29  lse if( c=='"' )
17260 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27 22  {.        c = '"
17270 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  ';.      }else i
17280 66 28 20 63 3d 3d 27 5c 27 27 20 29 7b 0a 20 20  f( c=='\'' ){.  
17290 20 20 20 20 20 20 63 20 3d 20 27 5c 27 27 3b 0a        c = '\'';.
172a0 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
172b0 63 3d 3d 27 5c 5c 27 20 29 7b 0a 20 20 20 20 20  c=='\\' ){.     
172c0 20 20 20 63 20 3d 20 27 5c 5c 27 3b 0a 20 20 20     c = '\\';.   
172d0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3e 3d     }else if( c>=
172e0 27 30 27 20 26 26 20 63 3c 3d 27 37 27 20 29 7b  '0' && c<='7' ){
172f0 0a 20 20 20 20 20 20 20 20 63 20 2d 3d 20 27 30  .        c -= '0
17300 27 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a  ';.        if( z
17310 5b 69 2b 31 5d 3e 3d 27 30 27 20 26 26 20 7a 5b  [i+1]>='0' && z[
17320 69 2b 31 5d 3c 3d 27 37 27 20 29 7b 0a 20 20 20  i+1]<='7' ){.   
17330 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20         i++;.    
17340 20 20 20 20 20 20 63 20 3d 20 28 63 3c 3c 33 29        c = (c<<3)
17350 20 2b 20 7a 5b 69 5d 20 2d 20 27 30 27 3b 0a 20   + z[i] - '0';. 
17360 20 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b 69           if( z[i
17370 2b 31 5d 3e 3d 27 30 27 20 26 26 20 7a 5b 69 2b  +1]>='0' && z[i+
17380 31 5d 3c 3d 27 37 27 20 29 7b 0a 20 20 20 20 20  1]<='7' ){.     
17390 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20         i++;.    
173a0 20 20 20 20 20 20 20 20 63 20 3d 20 28 63 3c 3c          c = (c<<
173b0 33 29 20 2b 20 7a 5b 69 5d 20 2d 20 27 30 27 3b  3) + z[i] - '0';
173c0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
173d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
173e0 20 20 20 7d 0a 20 20 20 20 7a 5b 6a 5d 20 3d 20     }.    z[j] = 
173f0 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6a 3c 69  c;.  }.  if( j<i
17400 20 29 20 7a 5b 6a 5d 20 3d 20 30 3b 0a 7d 0a 0a   ) z[j] = 0;.}..
17410 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
17420 20 76 61 6c 75 65 20 6f 66 20 61 20 68 65 78 61   value of a hexa
17430 64 65 63 69 6d 61 6c 20 64 69 67 69 74 2e 20 20  decimal digit.  
17440 52 65 74 75 72 6e 20 2d 31 20 69 66 20 74 68 65  Return -1 if the
17450 20 69 6e 70 75 74 0a 2a 2a 20 69 73 20 6e 6f 74   input.** is not
17460 20 61 20 68 65 78 20 64 69 67 69 74 2e 0a 2a 2f   a hex digit..*/
17470 0a 73 74 61 74 69 63 20 69 6e 74 20 68 65 78 44  .static int hexD
17480 69 67 69 74 56 61 6c 75 65 28 63 68 61 72 20 63  igitValue(char c
17490 29 7b 0a 20 20 69 66 28 20 63 3e 3d 27 30 27 20  ){.  if( c>='0' 
174a0 26 26 20 63 3c 3d 27 39 27 20 29 20 72 65 74 75  && c<='9' ) retu
174b0 72 6e 20 63 20 2d 20 27 30 27 3b 0a 20 20 69 66  rn c - '0';.  if
174c0 28 20 63 3e 3d 27 61 27 20 26 26 20 63 3c 3d 27  ( c>='a' && c<='
174d0 66 27 20 29 20 72 65 74 75 72 6e 20 63 20 2d 20  f' ) return c - 
174e0 27 61 27 20 2b 20 31 30 3b 0a 20 20 69 66 28 20  'a' + 10;.  if( 
174f0 63 3e 3d 27 41 27 20 26 26 20 63 3c 3d 27 46 27  c>='A' && c<='F'
17500 20 29 20 72 65 74 75 72 6e 20 63 20 2d 20 27 41   ) return c - 'A
17510 27 20 2b 20 31 30 3b 0a 20 20 72 65 74 75 72 6e  ' + 10;.  return
17520 20 2d 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e   -1;.}../*.** In
17530 74 65 72 70 72 65 74 20 7a 41 72 67 20 61 73 20  terpret zArg as 
17540 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
17550 2c 20 70 6f 73 73 69 62 6c 79 20 77 69 74 68 20  , possibly with 
17560 73 75 66 66 69 78 65 73 2e 0a 2a 2f 0a 73 74 61  suffixes..*/.sta
17570 74 69 63 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  tic sqlite3_int6
17580 34 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 63  4 integerValue(c
17590 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67 29  onst char *zArg)
175a0 7b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  {.  sqlite3_int6
175b0 34 20 76 20 3d 20 30 3b 0a 20 20 73 74 61 74 69  4 v = 0;.  stati
175c0 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 7b  c const struct {
175d0 20 63 68 61 72 20 2a 7a 53 75 66 66 69 78 3b 20   char *zSuffix; 
175e0 69 6e 74 20 69 4d 75 6c 74 3b 20 7d 20 61 4d 75  int iMult; } aMu
175f0 6c 74 5b 5d 20 3d 20 7b 0a 20 20 20 20 7b 20 22  lt[] = {.    { "
17600 4b 69 42 22 2c 20 31 30 32 34 20 7d 2c 0a 20 20  KiB", 1024 },.  
17610 20 20 7b 20 22 4d 69 42 22 2c 20 31 30 32 34 2a    { "MiB", 1024*
17620 31 30 32 34 20 7d 2c 0a 20 20 20 20 7b 20 22 47  1024 },.    { "G
17630 69 42 22 2c 20 31 30 32 34 2a 31 30 32 34 2a 31  iB", 1024*1024*1
17640 30 32 34 20 7d 2c 0a 20 20 20 20 7b 20 22 4b 42  024 },.    { "KB
17650 22 2c 20 20 31 30 30 30 20 7d 2c 0a 20 20 20 20  ",  1000 },.    
17660 7b 20 22 4d 42 22 2c 20 20 31 30 30 30 30 30 30  { "MB",  1000000
17670 20 7d 2c 0a 20 20 20 20 7b 20 22 47 42 22 2c 20   },.    { "GB", 
17680 20 31 30 30 30 30 30 30 30 30 30 20 7d 2c 0a 20   1000000000 },. 
17690 20 20 20 7b 20 22 4b 22 2c 20 20 20 31 30 30 30     { "K",   1000
176a0 20 7d 2c 0a 20 20 20 20 7b 20 22 4d 22 2c 20 20   },.    { "M",  
176b0 20 31 30 30 30 30 30 30 20 7d 2c 0a 20 20 20 20   1000000 },.    
176c0 7b 20 22 47 22 2c 20 20 20 31 30 30 30 30 30 30  { "G",   1000000
176d0 30 30 30 20 7d 2c 0a 20 20 7d 3b 0a 20 20 69 6e  000 },.  };.  in
176e0 74 20 69 3b 0a 20 20 69 6e 74 20 69 73 4e 65 67  t i;.  int isNeg
176f0 20 3d 20 30 3b 0a 20 20 69 66 28 20 7a 41 72 67   = 0;.  if( zArg
17700 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  [0]=='-' ){.    
17710 69 73 4e 65 67 20 3d 20 31 3b 0a 20 20 20 20 7a  isNeg = 1;.    z
17720 41 72 67 2b 2b 3b 0a 20 20 7d 65 6c 73 65 20 69  Arg++;.  }else i
17730 66 28 20 7a 41 72 67 5b 30 5d 3d 3d 27 2b 27 20  f( zArg[0]=='+' 
17740 29 7b 0a 20 20 20 20 7a 41 72 67 2b 2b 3b 0a 20  ){.    zArg++;. 
17750 20 7d 0a 20 20 69 66 28 20 7a 41 72 67 5b 30 5d   }.  if( zArg[0]
17760 3d 3d 27 30 27 20 26 26 20 7a 41 72 67 5b 31 5d  =='0' && zArg[1]
17770 3d 3d 27 78 27 20 29 7b 0a 20 20 20 20 69 6e 74  =='x' ){.    int
17780 20 78 3b 0a 20 20 20 20 7a 41 72 67 20 2b 3d 20   x;.    zArg += 
17790 32 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 78  2;.    while( (x
177a0 20 3d 20 68 65 78 44 69 67 69 74 56 61 6c 75 65   = hexDigitValue
177b0 28 7a 41 72 67 5b 30 5d 29 29 3e 3d 30 20 29 7b  (zArg[0]))>=0 ){
177c0 0a 20 20 20 20 20 20 76 20 3d 20 28 76 3c 3c 34  .      v = (v<<4
177d0 29 20 2b 20 78 3b 0a 20 20 20 20 20 20 7a 41 72  ) + x;.      zAr
177e0 67 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  g++;.    }.  }el
177f0 73 65 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 49  se{.    while( I
17800 73 44 69 67 69 74 28 7a 41 72 67 5b 30 5d 29 20  sDigit(zArg[0]) 
17810 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 76 2a 31  ){.      v = v*1
17820 30 20 2b 20 7a 41 72 67 5b 30 5d 20 2d 20 27 30  0 + zArg[0] - '0
17830 27 3b 0a 20 20 20 20 20 20 7a 41 72 67 2b 2b 3b  ';.      zArg++;
17840 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66 6f 72  .    }.  }.  for
17850 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a  (i=0; i<ArraySiz
17860 65 28 61 4d 75 6c 74 29 3b 20 69 2b 2b 29 7b 0a  e(aMult); i++){.
17870 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
17880 73 74 72 69 63 6d 70 28 61 4d 75 6c 74 5b 69 5d  stricmp(aMult[i]
17890 2e 7a 53 75 66 66 69 78 2c 20 7a 41 72 67 29 3d  .zSuffix, zArg)=
178a0 3d 30 20 29 7b 0a 20 20 20 20 20 20 76 20 2a 3d  =0 ){.      v *=
178b0 20 61 4d 75 6c 74 5b 69 5d 2e 69 4d 75 6c 74 3b   aMult[i].iMult;
178c0 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
178d0 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
178e0 20 69 73 4e 65 67 3f 20 2d 76 20 3a 20 76 3b 0a   isNeg? -v : v;.
178f0 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  }../*.** Interpr
17900 65 74 20 7a 41 72 67 20 61 73 20 65 69 74 68 65  et zArg as eithe
17910 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  r an integer or 
17920 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e  a boolean value.
17930 20 20 52 65 74 75 72 6e 20 31 20 6f 72 20 30 0a    Return 1 or 0.
17940 2a 2a 20 66 6f 72 20 54 52 55 45 20 61 6e 64 20  ** for TRUE and 
17950 46 41 4c 53 45 2e 20 20 52 65 74 75 72 6e 20 74  FALSE.  Return t
17960 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
17970 20 69 66 20 61 70 70 72 6f 70 72 69 61 74 65 2e   if appropriate.
17980 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 62  .*/.static int b
17990 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 63 6f 6e 73  ooleanValue(cons
179a0 74 20 63 68 61 72 20 2a 7a 41 72 67 29 7b 0a 20  t char *zArg){. 
179b0 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 7a 41   int i;.  if( zA
179c0 72 67 5b 30 5d 3d 3d 27 30 27 20 26 26 20 7a 41  rg[0]=='0' && zA
179d0 72 67 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a 20 20  rg[1]=='x' ){.  
179e0 20 20 66 6f 72 28 69 3d 32 3b 20 68 65 78 44 69    for(i=2; hexDi
179f0 67 69 74 56 61 6c 75 65 28 7a 41 72 67 5b 69 5d  gitValue(zArg[i]
17a00 29 3e 3d 30 3b 20 69 2b 2b 29 7b 7d 0a 20 20 7d  )>=0; i++){}.  }
17a10 65 6c 73 65 7b 0a 20 20 20 20 66 6f 72 28 69 3d  else{.    for(i=
17a20 30 3b 20 7a 41 72 67 5b 69 5d 3e 3d 27 30 27 20  0; zArg[i]>='0' 
17a30 26 26 20 7a 41 72 67 5b 69 5d 3c 3d 27 39 27 3b  && zArg[i]<='9';
17a40 20 69 2b 2b 29 7b 7d 0a 20 20 7d 0a 20 20 69 66   i++){}.  }.  if
17a50 28 20 69 3e 30 20 26 26 20 7a 41 72 67 5b 69 5d  ( i>0 && zArg[i]
17a60 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 28 69 6e  ==0 ) return (in
17a70 74 29 28 69 6e 74 65 67 65 72 56 61 6c 75 65 28  t)(integerValue(
17a80 7a 41 72 67 29 20 26 20 30 78 66 66 66 66 66 66  zArg) & 0xffffff
17a90 66 66 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  ff);.  if( sqlit
17aa0 65 33 5f 73 74 72 69 63 6d 70 28 7a 41 72 67 2c  e3_stricmp(zArg,
17ab0 20 22 6f 6e 22 29 3d 3d 30 20 7c 7c 20 73 71 6c   "on")==0 || sql
17ac0 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 41 72  ite3_stricmp(zAr
17ad0 67 2c 22 79 65 73 22 29 3d 3d 30 20 29 7b 0a 20  g,"yes")==0 ){. 
17ae0 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
17af0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73  .  if( sqlite3_s
17b00 74 72 69 63 6d 70 28 7a 41 72 67 2c 20 22 6f 66  tricmp(zArg, "of
17b10 66 22 29 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65  f")==0 || sqlite
17b20 33 5f 73 74 72 69 63 6d 70 28 7a 41 72 67 2c 22  3_stricmp(zArg,"
17b30 6e 6f 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72  no")==0 ){.    r
17b40 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 75  eturn 0;.  }.  u
17b50 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
17b60 72 2c 20 22 45 52 52 4f 52 3a 20 4e 6f 74 20 61  r, "ERROR: Not a
17b70 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
17b80 5c 22 25 73 5c 22 2e 20 41 73 73 75 6d 69 6e 67  \"%s\". Assuming
17b90 20 5c 22 6e 6f 5c 22 2e 5c 6e 22 2c 0a 20 20 20   \"no\".\n",.   
17ba0 20 20 20 20 20 20 20 7a 41 72 67 29 3b 0a 20 20         zArg);.  
17bb0 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a  return 0;.}../*.
17bc0 2a 2a 20 53 65 74 20 6f 72 20 63 6c 65 61 72 20  ** Set or clear 
17bd0 61 20 73 68 65 6c 6c 20 66 6c 61 67 20 61 63 63  a shell flag acc
17be0 6f 72 64 69 6e 67 20 74 6f 20 61 20 62 6f 6f 6c  ording to a bool
17bf0 65 61 6e 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74  ean value..*/.st
17c00 61 74 69 63 20 76 6f 69 64 20 73 65 74 4f 72 43  atic void setOrC
17c10 6c 65 61 72 46 6c 61 67 28 53 68 65 6c 6c 53 74  learFlag(ShellSt
17c20 61 74 65 20 2a 70 2c 20 75 6e 73 69 67 6e 65 64  ate *p, unsigned
17c30 20 6d 46 6c 61 67 2c 20 63 6f 6e 73 74 20 63 68   mFlag, const ch
17c40 61 72 20 2a 7a 41 72 67 29 7b 0a 20 20 69 66 28  ar *zArg){.  if(
17c50 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 7a 41   booleanValue(zA
17c60 72 67 29 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c  rg) ){.    Shell
17c70 53 65 74 46 6c 61 67 28 70 2c 20 6d 46 6c 61 67  SetFlag(p, mFlag
17c80 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
17c90 53 68 65 6c 6c 43 6c 65 61 72 46 6c 61 67 28 70  ShellClearFlag(p
17ca0 2c 20 6d 46 6c 61 67 29 3b 0a 20 20 7d 0a 7d 0a  , mFlag);.  }.}.
17cb0 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 6e 20  ./*.** Close an 
17cc0 6f 75 74 70 75 74 20 66 69 6c 65 2c 20 61 73 73  output file, ass
17cd0 75 6d 69 6e 67 20 69 74 20 69 73 20 6e 6f 74 20  uming it is not 
17ce0 73 74 64 65 72 72 20 6f 72 20 73 74 64 6f 75 74  stderr or stdout
17cf0 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
17d00 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73  output_file_clos
17d10 65 28 46 49 4c 45 20 2a 66 29 7b 0a 20 20 69 66  e(FILE *f){.  if
17d20 28 20 66 20 26 26 20 66 21 3d 73 74 64 6f 75 74  ( f && f!=stdout
17d30 20 26 26 20 66 21 3d 73 74 64 65 72 72 20 29 20   && f!=stderr ) 
17d40 66 63 6c 6f 73 65 28 66 29 3b 0a 7d 0a 0a 2f 2a  fclose(f);.}../*
17d50 0a 2a 2a 20 54 72 79 20 74 6f 20 6f 70 65 6e 20  .** Try to open 
17d60 61 6e 20 6f 75 74 70 75 74 20 66 69 6c 65 2e 20  an output file. 
17d70 20 20 54 68 65 20 6e 61 6d 65 73 20 22 73 74 64    The names "std
17d80 6f 75 74 22 20 61 6e 64 20 22 73 74 64 65 72 72  out" and "stderr
17d90 22 20 61 72 65 0a 2a 2a 20 72 65 63 6f 67 6e 69  " are.** recogni
17da0 7a 65 64 20 61 6e 64 20 64 6f 20 74 68 65 20 72  zed and do the r
17db0 69 67 68 74 20 74 68 69 6e 67 2e 20 20 4e 55 4c  ight thing.  NUL
17dc0 4c 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66  L is returned if
17dd0 20 74 68 65 20 6f 75 74 70 75 74 0a 2a 2a 20 66   the output.** f
17de0 69 6c 65 6e 61 6d 65 20 69 73 20 22 6f 66 66 22  ilename is "off"
17df0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 46 49 4c 45  ..*/.static FILE
17e00 20 2a 6f 75 74 70 75 74 5f 66 69 6c 65 5f 6f 70   *output_file_op
17e10 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  en(const char *z
17e20 46 69 6c 65 29 7b 0a 20 20 46 49 4c 45 20 2a 66  File){.  FILE *f
17e30 3b 0a 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a  ;.  if( strcmp(z
17e40 46 69 6c 65 2c 22 73 74 64 6f 75 74 22 29 3d 3d  File,"stdout")==
17e50 30 20 29 7b 0a 20 20 20 20 66 20 3d 20 73 74 64  0 ){.    f = std
17e60 6f 75 74 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  out;.  }else if(
17e70 20 73 74 72 63 6d 70 28 7a 46 69 6c 65 2c 20 22   strcmp(zFile, "
17e80 73 74 64 65 72 72 22 29 3d 3d 30 20 29 7b 0a 20  stderr")==0 ){. 
17e90 20 20 20 66 20 3d 20 73 74 64 65 72 72 3b 0a 20     f = stderr;. 
17ea0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
17eb0 70 28 7a 46 69 6c 65 2c 20 22 6f 66 66 22 29 3d  p(zFile, "off")=
17ec0 3d 30 20 29 7b 0a 20 20 20 20 66 20 3d 20 30 3b  =0 ){.    f = 0;
17ed0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 20  .  }else{.    f 
17ee0 3d 20 66 6f 70 65 6e 28 7a 46 69 6c 65 2c 20 22  = fopen(zFile, "
17ef0 77 62 22 29 3b 0a 20 20 20 20 69 66 28 20 66 3d  wb");.    if( f=
17f00 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  =0 ){.      utf8
17f10 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
17f20 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f  "Error: cannot o
17f30 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a  pen \"%s\"\n", z
17f40 46 69 6c 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  File);.    }.  }
17f50 0a 20 20 72 65 74 75 72 6e 20 66 3b 0a 7d 0a 0a  .  return f;.}..
17f60 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
17f70 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 29 0a  ITE_UNTESTABLE).
17f80 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
17f90 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 29 20  ITE_OMIT_TRACE) 
17fa0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
17fb0 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
17fc0 5f 50 4f 49 4e 54 29 0a 2f 2a 0a 2a 2a 20 41 20  _POINT)./*.** A 
17fd0 72 6f 75 74 69 6e 65 20 66 6f 72 20 68 61 6e 64  routine for hand
17fe0 6c 69 6e 67 20 6f 75 74 70 75 74 20 66 72 6f 6d  ling output from
17ff0 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29   sqlite3_trace()
18000 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
18010 73 71 6c 5f 74 72 61 63 65 5f 63 61 6c 6c 62 61  sql_trace_callba
18020 63 6b 28 0a 20 20 75 6e 73 69 67 6e 65 64 20 6d  ck(.  unsigned m
18030 54 79 70 65 2c 0a 20 20 76 6f 69 64 20 2a 70 41  Type,.  void *pA
18040 72 67 2c 0a 20 20 76 6f 69 64 20 2a 70 50 2c 0a  rg,.  void *pP,.
18050 20 20 76 6f 69 64 20 2a 70 58 0a 29 7b 0a 20 20    void *pX.){.  
18060 46 49 4c 45 20 2a 66 20 3d 20 28 46 49 4c 45 2a  FILE *f = (FILE*
18070 29 70 41 72 67 3b 0a 20 20 55 4e 55 53 45 44 5f  )pArg;.  UNUSED_
18080 50 41 52 41 4d 45 54 45 52 28 6d 54 79 70 65 29  PARAMETER(mType)
18090 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ;.  UNUSED_PARAM
180a0 45 54 45 52 28 70 50 29 3b 0a 20 20 69 66 28 20  ETER(pP);.  if( 
180b0 66 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  f ){.    const c
180c0 68 61 72 20 2a 7a 20 3d 20 28 63 6f 6e 73 74 20  har *z = (const 
180d0 63 68 61 72 2a 29 70 58 3b 0a 20 20 20 20 69 6e  char*)pX;.    in
180e0 74 20 69 20 3d 20 28 69 6e 74 29 73 74 72 6c 65  t i = (int)strle
180f0 6e 28 7a 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  n(z);.    while(
18100 20 69 3e 30 20 26 26 20 7a 5b 69 2d 31 5d 3d 3d   i>0 && z[i-1]==
18110 27 3b 27 20 29 7b 20 69 2d 2d 3b 20 7d 0a 20 20  ';' ){ i--; }.  
18120 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 66 2c    utf8_printf(f,
18130 20 22 25 2e 2a 73 3b 5c 6e 22 2c 20 69 2c 20 7a   "%.*s;\n", i, z
18140 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
18150 30 3b 0a 7d 0a 23 65 6e 64 69 66 0a 23 65 6e 64  0;.}.#endif.#end
18160 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6e 6f 2d 6f  if../*.** A no-o
18170 70 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72  p routine that r
18180 75 6e 73 20 77 69 74 68 20 74 68 65 20 22 2e 62  uns with the ".b
18190 72 65 61 6b 70 6f 69 6e 74 22 20 64 6f 63 2d 63  reakpoint" doc-c
181a0 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 69 73  ommand.  This is
181b0 0a 2a 2a 20 61 20 75 73 65 66 75 6c 20 73 70 6f  .** a useful spo
181c0 74 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67  t to set a debug
181d0 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a  ger breakpoint..
181e0 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74  */.static void t
181f0 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 28 76  est_breakpoint(v
18200 6f 69 64 29 7b 0a 20 20 73 74 61 74 69 63 20 69  oid){.  static i
18210 6e 74 20 6e 43 61 6c 6c 20 3d 20 30 3b 0a 20 20  nt nCall = 0;.  
18220 6e 43 61 6c 6c 2b 2b 3b 0a 7d 0a 0a 2f 2a 0a 2a  nCall++;.}../*.*
18230 2a 20 41 6e 20 6f 62 6a 65 63 74 20 75 73 65 64  * An object used
18240 20 74 6f 20 72 65 61 64 20 61 20 43 53 56 20 61   to read a CSV a
18250 6e 64 20 6f 74 68 65 72 20 66 69 6c 65 73 20 66  nd other files f
18260 6f 72 20 69 6d 70 6f 72 74 2e 0a 2a 2f 0a 74 79  or import..*/.ty
18270 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6d 70  pedef struct Imp
18280 6f 72 74 43 74 78 20 49 6d 70 6f 72 74 43 74 78  ortCtx ImportCtx
18290 3b 0a 73 74 72 75 63 74 20 49 6d 70 6f 72 74 43  ;.struct ImportC
182a0 74 78 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  tx {.  const cha
182b0 72 20 2a 7a 46 69 6c 65 3b 20 20 2f 2a 20 4e 61  r *zFile;  /* Na
182c0 6d 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20  me of the input 
182d0 66 69 6c 65 20 2a 2f 0a 20 20 46 49 4c 45 20 2a  file */.  FILE *
182e0 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  in;           /*
182f0 20 52 65 61 64 20 74 68 65 20 43 53 56 20 74 65   Read the CSV te
18300 78 74 20 66 72 6f 6d 20 74 68 69 73 20 69 6e 70  xt from this inp
18310 75 74 20 73 74 72 65 61 6d 20 2a 2f 0a 20 20 63  ut stream */.  c
18320 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 20  har *z;         
18330 20 20 20 2f 2a 20 41 63 63 75 6d 75 6c 61 74 65     /* Accumulate
18340 64 20 74 65 78 74 20 66 6f 72 20 61 20 66 69 65  d text for a fie
18350 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20  ld */.  int n;  
18360 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
18370 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
18380 6e 20 7a 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c  n z */.  int nAl
18390 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  loc;         /* 
183a0 53 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  Space allocated 
183b0 66 6f 72 20 7a 5b 5d 20 2a 2f 0a 20 20 69 6e 74  for z[] */.  int
183c0 20 6e 4c 69 6e 65 3b 20 20 20 20 20 20 20 20 20   nLine;         
183d0 20 2f 2a 20 43 75 72 72 65 6e 74 20 6c 69 6e 65   /* Current line
183e0 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 69 6e 74   number */.  int
183f0 20 62 4e 6f 74 46 69 72 73 74 3b 20 20 20 20 20   bNotFirst;     
18400 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 6e 65 20   /* True if one 
18410 6f 72 20 6d 6f 72 65 20 62 79 74 65 73 20 61 6c  or more bytes al
18420 72 65 61 64 79 20 72 65 61 64 20 2a 2f 0a 20 20  ready read */.  
18430 69 6e 74 20 63 54 65 72 6d 3b 20 20 20 20 20 20  int cTerm;      
18440 20 20 20 20 2f 2a 20 43 68 61 72 61 63 74 65 72      /* Character
18450 20 74 68 61 74 20 74 65 72 6d 69 6e 61 74 65 64   that terminated
18460 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
18470 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20   field */.  int 
18480 63 43 6f 6c 53 65 70 3b 20 20 20 20 20 20 20 20  cColSep;        
18490 2f 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 20 73 65  /* The column se
184a0 70 61 72 61 74 6f 72 20 63 68 61 72 61 63 74 65  parator characte
184b0 72 2e 20 20 28 55 73 75 61 6c 6c 79 20 22 2c 22  r.  (Usually ","
184c0 29 20 2a 2f 0a 20 20 69 6e 74 20 63 52 6f 77 53  ) */.  int cRowS
184d0 65 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ep;        /* Th
184e0 65 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 20  e row separator 
184f0 63 68 61 72 61 63 74 65 72 2e 20 20 28 55 73 75  character.  (Usu
18500 61 6c 6c 79 20 22 5c 6e 22 29 20 2a 2f 0a 7d 3b  ally "\n") */.};
18510 0a 0a 2f 2a 20 41 70 70 65 6e 64 20 61 20 73 69  ../* Append a si
18520 6e 67 6c 65 20 62 79 74 65 20 74 6f 20 7a 5b 5d  ngle byte to z[]
18530 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20   */.static void 
18540 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68  import_append_ch
18550 61 72 28 49 6d 70 6f 72 74 43 74 78 20 2a 70 2c  ar(ImportCtx *p,
18560 20 69 6e 74 20 63 29 7b 0a 20 20 69 66 28 20 70   int c){.  if( p
18570 2d 3e 6e 2b 31 3e 3d 70 2d 3e 6e 41 6c 6c 6f 63  ->n+1>=p->nAlloc
18580 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f   ){.    p->nAllo
18590 63 20 2b 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 20 2b  c += p->nAlloc +
185a0 20 31 30 30 3b 0a 20 20 20 20 70 2d 3e 7a 20 3d   100;.    p->z =
185b0 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63   sqlite3_realloc
185c0 36 34 28 70 2d 3e 7a 2c 20 70 2d 3e 6e 41 6c 6c  64(p->z, p->nAll
185d0 6f 63 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  oc);.    if( p->
185e0 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61  z==0 ){.      ra
185f0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
18600 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c   "out of memory\
18610 6e 22 29 3b 0a 20 20 20 20 20 20 65 78 69 74 28  n");.      exit(
18620 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  1);.    }.  }.  
18630 70 2d 3e 7a 5b 70 2d 3e 6e 2b 2b 5d 20 3d 20 28  p->z[p->n++] = (
18640 63 68 61 72 29 63 3b 0a 7d 0a 0a 2f 2a 20 52 65  char)c;.}../* Re
18650 61 64 20 61 20 73 69 6e 67 6c 65 20 66 69 65 6c  ad a single fiel
18660 64 20 6f 66 20 43 53 56 20 74 65 78 74 2e 20 20  d of CSV text.  
18670 43 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20  Compatible with 
18680 72 66 63 34 31 38 30 20 61 6e 64 20 65 78 74 65  rfc4180 and exte
18690 6e 64 65 64 0a 2a 2a 20 77 69 74 68 20 74 68 65  nded.** with the
186a0 20 6f 70 74 69 6f 6e 20 6f 66 20 68 61 76 69 6e   option of havin
186b0 67 20 61 20 73 65 70 61 72 61 74 6f 72 20 6f 74  g a separator ot
186c0 68 65 72 20 74 68 61 6e 20 22 2c 22 2e 0a 2a 2a  her than ","..**
186d0 0a 2a 2a 20 20 20 2b 20 20 49 6e 70 75 74 20 63  .**   +  Input c
186e0 6f 6d 65 73 20 66 72 6f 6d 20 70 2d 3e 69 6e 2e  omes from p->in.
186f0 0a 2a 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 72  .**   +  Store r
18700 65 73 75 6c 74 73 20 69 6e 20 70 2d 3e 7a 20 6f  esults in p->z o
18710 66 20 6c 65 6e 67 74 68 20 70 2d 3e 6e 2e 20 20  f length p->n.  
18720 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 70 2d  Space to hold p-
18730 3e 7a 20 63 6f 6d 65 73 0a 2a 2a 20 20 20 20 20  >z comes.**     
18740 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
18750 6c 6c 6f 63 36 34 28 29 2e 0a 2a 2a 20 20 20 2b  lloc64()..**   +
18760 20 20 55 73 65 20 70 2d 3e 63 53 65 70 20 61 73    Use p->cSep as
18770 20 74 68 65 20 63 6f 6c 75 6d 6e 20 73 65 70 61   the column sepa
18780 72 61 74 6f 72 2e 20 20 54 68 65 20 64 65 66 61  rator.  The defa
18790 75 6c 74 20 69 73 20 22 2c 22 2e 0a 2a 2a 20 20  ult is ","..**  
187a0 20 2b 20 20 55 73 65 20 70 2d 3e 72 53 65 70 20   +  Use p->rSep 
187b0 61 73 20 74 68 65 20 72 6f 77 20 73 65 70 61 72  as the row separ
187c0 61 74 6f 72 2e 20 20 54 68 65 20 64 65 66 61 75  ator.  The defau
187d0 6c 74 20 69 73 20 22 5c 6e 22 2e 0a 2a 2a 20 20  lt is "\n"..**  
187e0 20 2b 20 20 4b 65 65 70 20 74 72 61 63 6b 20 6f   +  Keep track o
187f0 66 20 74 68 65 20 6c 69 6e 65 20 6e 75 6d 62 65  f the line numbe
18800 72 20 69 6e 20 70 2d 3e 6e 4c 69 6e 65 2e 0a 2a  r in p->nLine..*
18810 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 74 68 65  *   +  Store the
18820 20 63 68 61 72 61 63 74 65 72 20 74 68 61 74 20   character that 
18830 74 65 72 6d 69 6e 61 74 65 73 20 74 68 65 20 66  terminates the f
18840 69 65 6c 64 20 69 6e 20 70 2d 3e 63 54 65 72 6d  ield in p->cTerm
18850 2e 20 20 53 74 6f 72 65 0a 2a 2a 20 20 20 20 20  .  Store.**     
18860 20 45 4f 46 20 6f 6e 20 65 6e 64 2d 6f 66 2d 66   EOF on end-of-f
18870 69 6c 65 2e 0a 2a 2a 20 20 20 2b 20 20 52 65 70  ile..**   +  Rep
18880 6f 72 74 20 73 79 6e 74 61 78 20 65 72 72 6f 72  ort syntax error
18890 73 20 6f 6e 20 73 74 64 65 72 72 0a 2a 2f 0a 73  s on stderr.*/.s
188a0 74 61 74 69 63 20 63 68 61 72 20 2a 53 51 4c 49  tatic char *SQLI
188b0 54 45 5f 43 44 45 43 4c 20 63 73 76 5f 72 65 61  TE_CDECL csv_rea
188c0 64 5f 6f 6e 65 5f 66 69 65 6c 64 28 49 6d 70 6f  d_one_field(Impo
188d0 72 74 43 74 78 20 2a 70 29 7b 0a 20 20 69 6e 74  rtCtx *p){.  int
188e0 20 63 3b 0a 20 20 69 6e 74 20 63 53 65 70 20 3d   c;.  int cSep =
188f0 20 70 2d 3e 63 43 6f 6c 53 65 70 3b 0a 20 20 69   p->cColSep;.  i
18900 6e 74 20 72 53 65 70 20 3d 20 70 2d 3e 63 52 6f  nt rSep = p->cRo
18910 77 53 65 70 3b 0a 20 20 70 2d 3e 6e 20 3d 20 30  wSep;.  p->n = 0
18920 3b 0a 20 20 63 20 3d 20 66 67 65 74 63 28 70 2d  ;.  c = fgetc(p-
18930 3e 69 6e 29 3b 0a 20 20 69 66 28 20 63 3d 3d 45  >in);.  if( c==E
18940 4f 46 20 7c 7c 20 73 65 65 6e 49 6e 74 65 72 72  OF || seenInterr
18950 75 70 74 20 29 7b 0a 20 20 20 20 70 2d 3e 63 54  upt ){.    p->cT
18960 65 72 6d 20 3d 20 45 4f 46 3b 0a 20 20 20 20 72  erm = EOF;.    r
18970 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69  eturn 0;.  }.  i
18980 66 28 20 63 3d 3d 27 22 27 20 29 7b 0a 20 20 20  f( c=='"' ){.   
18990 20 69 6e 74 20 70 63 2c 20 70 70 63 3b 0a 20 20   int pc, ppc;.  
189a0 20 20 69 6e 74 20 73 74 61 72 74 4c 69 6e 65 20    int startLine 
189b0 3d 20 70 2d 3e 6e 4c 69 6e 65 3b 0a 20 20 20 20  = p->nLine;.    
189c0 69 6e 74 20 63 51 75 6f 74 65 20 3d 20 63 3b 0a  int cQuote = c;.
189d0 20 20 20 20 70 63 20 3d 20 70 70 63 20 3d 20 30      pc = ppc = 0
189e0 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 31 20 29  ;.    while( 1 )
189f0 7b 0a 20 20 20 20 20 20 63 20 3d 20 66 67 65 74  {.      c = fget
18a00 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 20 20 20 20  c(p->in);.      
18a10 69 66 28 20 63 3d 3d 72 53 65 70 20 29 20 70 2d  if( c==rSep ) p-
18a20 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20 20 20  >nLine++;.      
18a30 69 66 28 20 63 3d 3d 63 51 75 6f 74 65 20 29 7b  if( c==cQuote ){
18a40 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 63 3d  .        if( pc=
18a50 3d 63 51 75 6f 74 65 20 29 7b 0a 20 20 20 20 20  =cQuote ){.     
18a60 20 20 20 20 20 70 63 20 3d 20 30 3b 0a 20 20 20       pc = 0;.   
18a70 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
18a80 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
18a90 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 63 3d   }.      if( (c=
18aa0 3d 63 53 65 70 20 26 26 20 70 63 3d 3d 63 51 75  =cSep && pc==cQu
18ab0 6f 74 65 29 0a 20 20 20 20 20 20 20 7c 7c 20 28  ote).       || (
18ac0 63 3d 3d 72 53 65 70 20 26 26 20 70 63 3d 3d 63  c==rSep && pc==c
18ad0 51 75 6f 74 65 29 0a 20 20 20 20 20 20 20 7c 7c  Quote).       ||
18ae0 20 28 63 3d 3d 72 53 65 70 20 26 26 20 70 63 3d   (c==rSep && pc=
18af0 3d 27 5c 72 27 20 26 26 20 70 70 63 3d 3d 63 51  ='\r' && ppc==cQ
18b00 75 6f 74 65 29 0a 20 20 20 20 20 20 20 7c 7c 20  uote).       || 
18b10 28 63 3d 3d 45 4f 46 20 26 26 20 70 63 3d 3d 63  (c==EOF && pc==c
18b20 51 75 6f 74 65 29 0a 20 20 20 20 20 20 29 7b 0a  Quote).      ){.
18b30 20 20 20 20 20 20 20 20 64 6f 7b 20 70 2d 3e 6e          do{ p->n
18b40 2d 2d 3b 20 7d 77 68 69 6c 65 28 20 70 2d 3e 7a  --; }while( p->z
18b50 5b 70 2d 3e 6e 5d 21 3d 63 51 75 6f 74 65 20 29  [p->n]!=cQuote )
18b60 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 63 54 65  ;.        p->cTe
18b70 72 6d 20 3d 20 63 3b 0a 20 20 20 20 20 20 20 20  rm = c;.        
18b80 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
18b90 20 20 20 20 20 69 66 28 20 70 63 3d 3d 63 51 75       if( pc==cQu
18ba0 6f 74 65 20 26 26 20 63 21 3d 27 5c 72 27 20 29  ote && c!='\r' )
18bb0 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  {.        utf8_p
18bc0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25  rintf(stderr, "%
18bd0 73 3a 25 64 3a 20 75 6e 65 73 63 61 70 65 64 20  s:%d: unescaped 
18be0 25 63 20 63 68 61 72 61 63 74 65 72 5c 6e 22 2c  %c character\n",
18bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18c00 20 70 2d 3e 7a 46 69 6c 65 2c 20 70 2d 3e 6e 4c   p->zFile, p->nL
18c10 69 6e 65 2c 20 63 51 75 6f 74 65 29 3b 0a 20 20  ine, cQuote);.  
18c20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
18c30 63 3d 3d 45 4f 46 20 29 7b 0a 20 20 20 20 20 20  c==EOF ){.      
18c40 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
18c50 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20 75 6e  derr, "%s:%d: un
18c60 74 65 72 6d 69 6e 61 74 65 64 20 25 63 2d 71 75  terminated %c-qu
18c70 6f 74 65 64 20 66 69 65 6c 64 5c 6e 22 2c 0a 20  oted field\n",. 
18c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
18c90 2d 3e 7a 46 69 6c 65 2c 20 73 74 61 72 74 4c 69  ->zFile, startLi
18ca0 6e 65 2c 20 63 51 75 6f 74 65 29 3b 0a 20 20 20  ne, cQuote);.   
18cb0 20 20 20 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20       p->cTerm = 
18cc0 63 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  c;.        break
18cd0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
18ce0 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68  import_append_ch
18cf0 61 72 28 70 2c 20 63 29 3b 0a 20 20 20 20 20 20  ar(p, c);.      
18d00 70 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  ppc = pc;.      
18d10 70 63 20 3d 20 63 3b 0a 20 20 20 20 7d 0a 20 20  pc = c;.    }.  
18d20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 49 66  }else{.    /* If
18d30 20 74 68 69 73 20 69 73 20 74 68 65 20 66 69 72   this is the fir
18d40 73 74 20 66 69 65 6c 64 20 62 65 69 6e 67 20 70  st field being p
18d50 61 72 73 65 64 20 61 6e 64 20 69 74 20 62 65 67  arsed and it beg
18d60 69 6e 73 20 77 69 74 68 20 74 68 65 0a 20 20 20  ins with the.   
18d70 20 2a 2a 20 55 54 46 2d 38 20 42 4f 4d 20 20 28   ** UTF-8 BOM  (
18d80 30 78 45 46 20 42 42 20 42 46 29 20 74 68 65 6e  0xEF BB BF) then
18d90 20 73 6b 69 70 20 74 68 65 20 42 4f 4d 20 2a 2f   skip the BOM */
18da0 0a 20 20 20 20 69 66 28 20 28 63 26 30 78 66 66  .    if( (c&0xff
18db0 29 3d 3d 30 78 65 66 20 26 26 20 70 2d 3e 62 4e  )==0xef && p->bN
18dc0 6f 74 46 69 72 73 74 3d 3d 30 20 29 7b 0a 20 20  otFirst==0 ){.  
18dd0 20 20 20 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e      import_appen
18de0 64 5f 63 68 61 72 28 70 2c 20 63 29 3b 0a 20 20  d_char(p, c);.  
18df0 20 20 20 20 63 20 3d 20 66 67 65 74 63 28 70 2d      c = fgetc(p-
18e00 3e 69 6e 29 3b 0a 20 20 20 20 20 20 69 66 28 20  >in);.      if( 
18e10 28 63 26 30 78 66 66 29 3d 3d 30 78 62 62 20 29  (c&0xff)==0xbb )
18e20 7b 0a 20 20 20 20 20 20 20 20 69 6d 70 6f 72 74  {.        import
18e30 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 70 2c 20  _append_char(p, 
18e40 63 29 3b 0a 20 20 20 20 20 20 20 20 63 20 3d 20  c);.        c = 
18e50 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20  fgetc(p->in);.  
18e60 20 20 20 20 20 20 69 66 28 20 28 63 26 30 78 66        if( (c&0xf
18e70 66 29 3d 3d 30 78 62 66 20 29 7b 0a 20 20 20 20  f)==0xbf ){.    
18e80 20 20 20 20 20 20 70 2d 3e 62 4e 6f 74 46 69 72        p->bNotFir
18e90 73 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  st = 1;.        
18ea0 20 20 70 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20 20    p->n = 0;.    
18eb0 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 73 76        return csv
18ec0 5f 72 65 61 64 5f 6f 6e 65 5f 66 69 65 6c 64 28  _read_one_field(
18ed0 70 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  p);.        }.  
18ee0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
18ef0 77 68 69 6c 65 28 20 63 21 3d 45 4f 46 20 26 26  while( c!=EOF &&
18f00 20 63 21 3d 63 53 65 70 20 26 26 20 63 21 3d 72   c!=cSep && c!=r
18f10 53 65 70 20 29 7b 0a 20 20 20 20 20 20 69 6d 70  Sep ){.      imp
18f20 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28  ort_append_char(
18f30 70 2c 20 63 29 3b 0a 20 20 20 20 20 20 63 20 3d  p, c);.      c =
18f40 20 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20   fgetc(p->in);. 
18f50 20 20 20 7d 0a 20 20 20 20 69 66 28 20 63 3d 3d     }.    if( c==
18f60 72 53 65 70 20 29 7b 0a 20 20 20 20 20 20 70 2d  rSep ){.      p-
18f70 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20 20 20  >nLine++;.      
18f80 69 66 28 20 70 2d 3e 6e 3e 30 20 26 26 20 70 2d  if( p->n>0 && p-
18f90 3e 7a 5b 70 2d 3e 6e 2d 31 5d 3d 3d 27 5c 72 27  >z[p->n-1]=='\r'
18fa0 20 29 20 70 2d 3e 6e 2d 2d 3b 0a 20 20 20 20 7d   ) p->n--;.    }
18fb0 0a 20 20 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20  .    p->cTerm = 
18fc0 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e  c;.  }.  if( p->
18fd0 7a 20 29 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 20 3d  z ) p->z[p->n] =
18fe0 20 30 3b 0a 20 20 70 2d 3e 62 4e 6f 74 46 69 72   0;.  p->bNotFir
18ff0 73 74 20 3d 20 31 3b 0a 20 20 72 65 74 75 72 6e  st = 1;.  return
19000 20 70 2d 3e 7a 3b 0a 7d 0a 0a 2f 2a 20 52 65 61   p->z;.}../* Rea
19010 64 20 61 20 73 69 6e 67 6c 65 20 66 69 65 6c 64  d a single field
19020 20 6f 66 20 41 53 43 49 49 20 64 65 6c 69 6d 69   of ASCII delimi
19030 74 65 64 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  ted text..**.** 
19040 20 20 2b 20 20 49 6e 70 75 74 20 63 6f 6d 65 73    +  Input comes
19050 20 66 72 6f 6d 20 70 2d 3e 69 6e 2e 0a 2a 2a 20   from p->in..** 
19060 20 20 2b 20 20 53 74 6f 72 65 20 72 65 73 75 6c    +  Store resul
19070 74 73 20 69 6e 20 70 2d 3e 7a 20 6f 66 20 6c 65  ts in p->z of le
19080 6e 67 74 68 20 70 2d 3e 6e 2e 20 20 53 70 61 63  ngth p->n.  Spac
19090 65 20 74 6f 20 68 6f 6c 64 20 70 2d 3e 7a 20 63  e to hold p->z c
190a0 6f 6d 65 73 0a 2a 2a 20 20 20 20 20 20 66 72 6f  omes.**      fro
190b0 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
190c0 36 34 28 29 2e 0a 2a 2a 20 20 20 2b 20 20 55 73  64()..**   +  Us
190d0 65 20 70 2d 3e 63 53 65 70 20 61 73 20 74 68 65  e p->cSep as the
190e0 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f   column separato
190f0 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  r.  The default 
19100 69 73 20 22 5c 78 31 46 22 2e 0a 2a 2a 20 20 20  is "\x1F"..**   
19110 2b 20 20 55 73 65 20 70 2d 3e 72 53 65 70 20 61  +  Use p->rSep a
19120 73 20 74 68 65 20 72 6f 77 20 73 65 70 61 72 61  s the row separa
19130 74 6f 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c  tor.  The defaul
19140 74 20 69 73 20 22 5c 78 31 45 22 2e 0a 2a 2a 20  t is "\x1E"..** 
19150 20 20 2b 20 20 4b 65 65 70 20 74 72 61 63 6b 20    +  Keep track 
19160 6f 66 20 74 68 65 20 72 6f 77 20 6e 75 6d 62 65  of the row numbe
19170 72 20 69 6e 20 70 2d 3e 6e 4c 69 6e 65 2e 0a 2a  r in p->nLine..*
19180 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 74 68 65  *   +  Store the
19190 20 63 68 61 72 61 63 74 65 72 20 74 68 61 74 20   character that 
191a0 74 65 72 6d 69 6e 61 74 65 73 20 74 68 65 20 66  terminates the f
191b0 69 65 6c 64 20 69 6e 20 70 2d 3e 63 54 65 72 6d  ield in p->cTerm
191c0 2e 20 20 53 74 6f 72 65 0a 2a 2a 20 20 20 20 20  .  Store.**     
191d0 20 45 4f 46 20 6f 6e 20 65 6e 64 2d 6f 66 2d 66   EOF on end-of-f
191e0 69 6c 65 2e 0a 2a 2a 20 20 20 2b 20 20 52 65 70  ile..**   +  Rep
191f0 6f 72 74 20 73 79 6e 74 61 78 20 65 72 72 6f 72  ort syntax error
19200 73 20 6f 6e 20 73 74 64 65 72 72 0a 2a 2f 0a 73  s on stderr.*/.s
19210 74 61 74 69 63 20 63 68 61 72 20 2a 53 51 4c 49  tatic char *SQLI
19220 54 45 5f 43 44 45 43 4c 20 61 73 63 69 69 5f 72  TE_CDECL ascii_r
19230 65 61 64 5f 6f 6e 65 5f 66 69 65 6c 64 28 49 6d  ead_one_field(Im
19240 70 6f 72 74 43 74 78 20 2a 70 29 7b 0a 20 20 69  portCtx *p){.  i
19250 6e 74 20 63 3b 0a 20 20 69 6e 74 20 63 53 65 70  nt c;.  int cSep
19260 20 3d 20 70 2d 3e 63 43 6f 6c 53 65 70 3b 0a 20   = p->cColSep;. 
19270 20 69 6e 74 20 72 53 65 70 20 3d 20 70 2d 3e 63   int rSep = p->c
19280 52 6f 77 53 65 70 3b 0a 20 20 70 2d 3e 6e 20 3d  RowSep;.  p->n =
19290 20 30 3b 0a 20 20 63 20 3d 20 66 67 65 74 63 28   0;.  c = fgetc(
192a0 70 2d 3e 69 6e 29 3b 0a 20 20 69 66 28 20 63 3d  p->in);.  if( c=
192b0 3d 45 4f 46 20 7c 7c 20 73 65 65 6e 49 6e 74 65  =EOF || seenInte
192c0 72 72 75 70 74 20 29 7b 0a 20 20 20 20 70 2d 3e  rrupt ){.    p->
192d0 63 54 65 72 6d 20 3d 20 45 4f 46 3b 0a 20 20 20  cTerm = EOF;.   
192e0 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
192f0 20 77 68 69 6c 65 28 20 63 21 3d 45 4f 46 20 26   while( c!=EOF &
19300 26 20 63 21 3d 63 53 65 70 20 26 26 20 63 21 3d  & c!=cSep && c!=
19310 72 53 65 70 20 29 7b 0a 20 20 20 20 69 6d 70 6f  rSep ){.    impo
19320 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 70  rt_append_char(p
19330 2c 20 63 29 3b 0a 20 20 20 20 63 20 3d 20 66 67  , c);.    c = fg
19340 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 7d 0a  etc(p->in);.  }.
19350 20 20 69 66 28 20 63 3d 3d 72 53 65 70 20 29 7b    if( c==rSep ){
19360 0a 20 20 20 20 70 2d 3e 6e 4c 69 6e 65 2b 2b 3b  .    p->nLine++;
19370 0a 20 20 7d 0a 20 20 70 2d 3e 63 54 65 72 6d 20  .  }.  p->cTerm 
19380 3d 20 63 3b 0a 20 20 69 66 28 20 70 2d 3e 7a 20  = c;.  if( p->z 
19390 29 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 20 3d 20 30  ) p->z[p->n] = 0
193a0 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 7a 3b  ;.  return p->z;
193b0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  .}../*.** Try to
193c0 20 74 72 61 6e 73 66 65 72 20 64 61 74 61 20 66   transfer data f
193d0 6f 72 20 74 61 62 6c 65 20 7a 54 61 62 6c 65 2e  or table zTable.
193e0 20 20 49 66 20 61 6e 20 65 72 72 6f 72 20 69 73    If an error is
193f0 20 73 65 65 6e 20 77 68 69 6c 65 0a 2a 2a 20 6d   seen while.** m
19400 6f 76 69 6e 67 20 66 6f 72 77 61 72 64 2c 20 74  oving forward, t
19410 72 79 20 74 6f 20 67 6f 20 62 61 63 6b 77 61 72  ry to go backwar
19420 64 73 2e 20 20 54 68 65 20 62 61 63 6b 77 61 72  ds.  The backwar
19430 64 73 20 6d 6f 76 65 6d 65 6e 74 20 77 6f 6e 27  ds movement won'
19440 74 0a 2a 2a 20 77 6f 72 6b 20 66 6f 72 20 57 49  t.** work for WI
19450 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
19460 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  es..*/.static vo
19470 69 64 20 74 72 79 54 6f 43 6c 6f 6e 65 44 61 74  id tryToCloneDat
19480 61 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20  a(.  ShellState 
19490 2a 70 2c 0a 20 20 73 71 6c 69 74 65 33 20 2a 6e  *p,.  sqlite3 *n
194a0 65 77 44 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68  ewDb,.  const ch
194b0 61 72 20 2a 7a 54 61 62 6c 65 0a 29 7b 0a 20 20  ar *zTable.){.  
194c0 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 51  sqlite3_stmt *pQ
194d0 75 65 72 79 20 3d 20 30 3b 0a 20 20 73 71 6c 69  uery = 0;.  sqli
194e0 74 65 33 5f 73 74 6d 74 20 2a 70 49 6e 73 65 72  te3_stmt *pInser
194f0 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a  t = 0;.  char *z
19500 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 63 68 61  Query = 0;.  cha
19510 72 20 2a 7a 49 6e 73 65 72 74 20 3d 20 30 3b 0a  r *zInsert = 0;.
19520 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
19530 69 2c 20 6a 2c 20 6e 3b 0a 20 20 69 6e 74 20 6e  i, j, n;.  int n
19540 54 61 62 6c 65 20 3d 20 28 69 6e 74 29 73 74 72  Table = (int)str
19550 6c 65 6e 28 7a 54 61 62 6c 65 29 3b 0a 20 20 69  len(zTable);.  i
19560 6e 74 20 6b 20 3d 20 30 3b 0a 20 20 69 6e 74 20  nt k = 0;.  int 
19570 63 6e 74 20 3d 20 30 3b 0a 20 20 63 6f 6e 73 74  cnt = 0;.  const
19580 20 69 6e 74 20 73 70 69 6e 52 61 74 65 20 3d 20   int spinRate = 
19590 31 30 30 30 30 3b 0a 0a 20 20 7a 51 75 65 72 79  10000;..  zQuery
195a0 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
195b0 74 66 28 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  tf("SELECT * FRO
195c0 4d 20 5c 22 25 77 5c 22 22 2c 20 7a 54 61 62 6c  M \"%w\"", zTabl
195d0 65 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  e);.  rc = sqlit
195e0 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d  e3_prepare_v2(p-
195f0 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20 2d 31 2c  >db, zQuery, -1,
19600 20 26 70 51 75 65 72 79 2c 20 30 29 3b 0a 20 20   &pQuery, 0);.  
19610 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 75 74  if( rc ){.    ut
19620 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
19630 2c 20 22 45 72 72 6f 72 20 25 64 3a 20 25 73 20  , "Error %d: %s 
19640 6f 6e 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20  on [%s]\n",.    
19650 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
19660 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
19670 28 70 2d 3e 64 62 29 2c 20 73 71 6c 69 74 65 33  (p->db), sqlite3
19680 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 2c 0a  _errmsg(p->db),.
19690 20 20 20 20 20 20 20 20 20 20 20 20 7a 51 75 65              zQue
196a0 72 79 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e  ry);.    goto en
196b0 64 5f 64 61 74 61 5f 78 66 65 72 3b 0a 20 20 7d  d_data_xfer;.  }
196c0 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63  .  n = sqlite3_c
196d0 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 51 75 65  olumn_count(pQue
196e0 72 79 29 3b 0a 20 20 7a 49 6e 73 65 72 74 20 3d  ry);.  zInsert =
196f0 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36   sqlite3_malloc6
19700 34 28 32 30 30 20 2b 20 6e 54 61 62 6c 65 20 2b  4(200 + nTable +
19710 20 6e 2a 33 29 3b 0a 20 20 69 66 28 20 7a 49 6e   n*3);.  if( zIn
19720 73 65 72 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72  sert==0 ){.    r
19730 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
19740 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  , "out of memory
19750 5c 6e 22 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65  \n");.    goto e
19760 6e 64 5f 64 61 74 61 5f 78 66 65 72 3b 0a 20 20  nd_data_xfer;.  
19770 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72  }.  sqlite3_snpr
19780 69 6e 74 66 28 32 30 30 2b 6e 54 61 62 6c 65 2c  intf(200+nTable,
19790 7a 49 6e 73 65 72 74 2c 0a 20 20 20 20 20 20 20  zInsert,.       
197a0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 4e 53              "INS
197b0 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 20 49 4e  ERT OR IGNORE IN
197c0 54 4f 20 5c 22 25 73 5c 22 20 56 41 4c 55 45 53  TO \"%s\" VALUES
197d0 28 3f 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20  (?", zTable);.  
197e0 69 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28  i = (int)strlen(
197f0 7a 49 6e 73 65 72 74 29 3b 0a 20 20 66 6f 72 28  zInsert);.  for(
19800 6a 3d 31 3b 20 6a 3c 6e 3b 20 6a 2b 2b 29 7b 0a  j=1; j<n; j++){.
19810 20 20 20 20 6d 65 6d 63 70 79 28 7a 49 6e 73 65      memcpy(zInse
19820 72 74 2b 69 2c 20 22 2c 3f 22 2c 20 32 29 3b 0a  rt+i, ",?", 2);.
19830 20 20 20 20 69 20 2b 3d 20 32 3b 0a 20 20 7d 0a      i += 2;.  }.
19840 20 20 6d 65 6d 63 70 79 28 7a 49 6e 73 65 72 74    memcpy(zInsert
19850 2b 69 2c 20 22 29 3b 22 2c 20 33 29 3b 0a 20 20  +i, ");", 3);.  
19860 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
19870 70 61 72 65 5f 76 32 28 6e 65 77 44 62 2c 20 7a  pare_v2(newDb, z
19880 49 6e 73 65 72 74 2c 20 2d 31 2c 20 26 70 49 6e  Insert, -1, &pIn
19890 73 65 72 74 2c 20 30 29 3b 0a 20 20 69 66 28 20  sert, 0);.  if( 
198a0 72 63 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70  rc ){.    utf8_p
198b0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
198c0 72 72 6f 72 20 25 64 3a 20 25 73 20 6f 6e 20 5b  rror %d: %s on [
198d0 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  %s]\n",.        
198e0 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65      sqlite3_exte
198f0 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 6e 65 77  nded_errcode(new
19900 44 62 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  Db), sqlite3_err
19910 6d 73 67 28 6e 65 77 44 62 29 2c 0a 20 20 20 20  msg(newDb),.    
19920 20 20 20 20 20 20 20 20 7a 51 75 65 72 79 29 3b          zQuery);
19930 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 64 61  .    goto end_da
19940 74 61 5f 78 66 65 72 3b 0a 20 20 7d 0a 20 20 66  ta_xfer;.  }.  f
19950 6f 72 28 6b 3d 30 3b 20 6b 3c 32 3b 20 6b 2b 2b  or(k=0; k<2; k++
19960 29 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 72  ){.    while( (r
19970 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70  c = sqlite3_step
19980 28 70 51 75 65 72 79 29 29 3d 3d 53 51 4c 49 54  (pQuery))==SQLIT
19990 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 66  E_ROW ){.      f
199a0 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
199b0 29 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74 63  ){.        switc
199c0 68 28 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  h( sqlite3_colum
199d0 6e 5f 74 79 70 65 28 70 51 75 65 72 79 2c 20 69  n_type(pQuery, i
199e0 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63  ) ){.          c
199f0 61 73 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3a  ase SQLITE_NULL:
19a00 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73   {.            s
19a10 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c  qlite3_bind_null
19a20 28 70 49 6e 73 65 72 74 2c 20 69 2b 31 29 3b 0a  (pInsert, i+1);.
19a30 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
19a40 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  k;.          }. 
19a50 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
19a60 4c 49 54 45 5f 49 4e 54 45 47 45 52 3a 20 7b 0a  LITE_INTEGER: {.
19a70 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
19a80 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 70  te3_bind_int64(p
19a90 49 6e 73 65 72 74 2c 20 69 2b 31 2c 20 73 71 6c  Insert, i+1, sql
19aa0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
19ab0 34 28 70 51 75 65 72 79 2c 69 29 29 3b 0a 20 20  4(pQuery,i));.  
19ac0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
19ad0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
19ae0 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49         case SQLI
19af0 54 45 5f 46 4c 4f 41 54 3a 20 7b 0a 20 20 20 20  TE_FLOAT: {.    
19b00 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
19b10 62 69 6e 64 5f 64 6f 75 62 6c 65 28 70 49 6e 73  bind_double(pIns
19b20 65 72 74 2c 20 69 2b 31 2c 20 73 71 6c 69 74 65  ert, i+1, sqlite
19b30 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28  3_column_double(
19b40 70 51 75 65 72 79 2c 69 29 29 3b 0a 20 20 20 20  pQuery,i));.    
19b50 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
19b60 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
19b70 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
19b80 5f 54 45 58 54 3a 20 7b 0a 20 20 20 20 20 20 20  _TEXT: {.       
19b90 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e       sqlite3_bin
19ba0 64 5f 74 65 78 74 28 70 49 6e 73 65 72 74 2c 20  d_text(pInsert, 
19bb0 69 2b 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20  i+1,.           
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bd0 20 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73    (const char*)s
19be0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
19bf0 78 74 28 70 51 75 65 72 79 2c 69 29 2c 0a 20 20  xt(pQuery,i),.  
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c10 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20 53             -1, S
19c20 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
19c30 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
19c40 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
19c50 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
19c60 49 54 45 5f 42 4c 4f 42 3a 20 7b 0a 20 20 20 20  ITE_BLOB: {.    
19c70 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
19c80 62 69 6e 64 5f 62 6c 6f 62 28 70 49 6e 73 65 72  bind_blob(pInser
19c90 74 2c 20 69 2b 31 2c 20 73 71 6c 69 74 65 33 5f  t, i+1, sqlite3_
19ca0 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 51 75 65  column_blob(pQue
19cb0 72 79 2c 69 29 2c 0a 20 20 20 20 20 20 20 20 20  ry,i),.         
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ce0 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d     sqlite3_colum
19cf0 6e 5f 62 79 74 65 73 28 70 51 75 65 72 79 2c 69  n_bytes(pQuery,i
19d00 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
19d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
19d30 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
19d40 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
19d50 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
19d60 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20        }.      } 
19d70 2f 2a 20 45 6e 64 20 66 6f 72 20 2a 2f 0a 20 20  /* End for */.  
19d80 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
19d90 5f 73 74 65 70 28 70 49 6e 73 65 72 74 29 3b 0a  _step(pInsert);.
19da0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
19db0 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63 21 3d 53  LITE_OK && rc!=S
19dc0 51 4c 49 54 45 5f 52 4f 57 20 26 26 20 72 63 21  QLITE_ROW && rc!
19dd0 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a  =SQLITE_DONE ){.
19de0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
19df0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
19e00 6f 72 20 25 64 3a 20 25 73 5c 6e 22 2c 20 73 71  or %d: %s\n", sq
19e10 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65  lite3_extended_e
19e20 72 72 63 6f 64 65 28 6e 65 77 44 62 29 2c 0a 20  rrcode(newDb),. 
19e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e40 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65         sqlite3_e
19e50 72 72 6d 73 67 28 6e 65 77 44 62 29 29 3b 0a 20  rrmsg(newDb));. 
19e60 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
19e70 69 74 65 33 5f 72 65 73 65 74 28 70 49 6e 73 65  ite3_reset(pInse
19e80 72 74 29 3b 0a 20 20 20 20 20 20 63 6e 74 2b 2b  rt);.      cnt++
19e90 3b 0a 20 20 20 20 20 20 69 66 28 20 28 63 6e 74  ;.      if( (cnt
19ea0 25 73 70 69 6e 52 61 74 65 29 3d 3d 30 20 29 7b  %spinRate)==0 ){
19eb0 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28  .        printf(
19ec0 22 25 63 5c 62 22 2c 20 22 7c 2f 2d 5c 5c 22 5b  "%c\b", "|/-\\"[
19ed0 28 63 6e 74 2f 73 70 69 6e 52 61 74 65 29 25 34  (cnt/spinRate)%4
19ee0 5d 29 3b 0a 20 20 20 20 20 20 20 20 66 66 6c 75  ]);.        fflu
19ef0 73 68 28 73 74 64 6f 75 74 29 3b 0a 20 20 20 20  sh(stdout);.    
19f00 20 20 7d 0a 20 20 20 20 7d 20 2f 2a 20 45 6e 64    }.    } /* End
19f10 20 77 68 69 6c 65 20 2a 2f 0a 20 20 20 20 69 66   while */.    if
19f20 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc==SQLITE_DON
19f30 45 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 73  E ) break;.    s
19f40 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
19f50 70 51 75 65 72 79 29 3b 0a 20 20 20 20 73 71 6c  pQuery);.    sql
19f60 69 74 65 33 5f 66 72 65 65 28 7a 51 75 65 72 79  ite3_free(zQuery
19f70 29 3b 0a 20 20 20 20 7a 51 75 65 72 79 20 3d 20  );.    zQuery = 
19f80 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
19f90 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5c  "SELECT * FROM \
19fa0 22 25 77 5c 22 20 4f 52 44 45 52 20 42 59 20 72  "%w\" ORDER BY r
19fb0 6f 77 69 64 20 44 45 53 43 3b 22 2c 0a 20 20 20  owid DESC;",.   
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fd0 20 20 20 20 20 20 20 20 20 20 7a 54 61 62 6c 65            zTable
19fe0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
19ff0 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70  te3_prepare_v2(p
1a000 2d 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20 2d 31  ->db, zQuery, -1
1a010 2c 20 26 70 51 75 65 72 79 2c 20 30 29 3b 0a 20  , &pQuery, 0);. 
1a020 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
1a030 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
1a040 74 64 65 72 72 2c 20 22 57 61 72 6e 69 6e 67 3a  tderr, "Warning:
1a050 20 63 61 6e 6e 6f 74 20 73 74 65 70 20 5c 22 25   cannot step \"%
1a060 73 5c 22 20 62 61 63 6b 77 61 72 64 73 22 2c 20  s\" backwards", 
1a070 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20 20 20 62  zTable);.      b
1a080 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  reak;.    }.  } 
1a090 2f 2a 20 45 6e 64 20 66 6f 72 28 6b 3d 30 2e 2e  /* End for(k=0..
1a0a0 2e 29 20 2a 2f 0a 0a 65 6e 64 5f 64 61 74 61 5f  .) */..end_data_
1a0b0 78 66 65 72 3a 0a 20 20 73 71 6c 69 74 65 33 5f  xfer:.  sqlite3_
1a0c0 66 69 6e 61 6c 69 7a 65 28 70 51 75 65 72 79 29  finalize(pQuery)
1a0d0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  ;.  sqlite3_fina
1a0e0 6c 69 7a 65 28 70 49 6e 73 65 72 74 29 3b 0a 20  lize(pInsert);. 
1a0f0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 51   sqlite3_free(zQ
1a100 75 65 72 79 29 3b 0a 20 20 73 71 6c 69 74 65 33  uery);.  sqlite3
1a110 5f 66 72 65 65 28 7a 49 6e 73 65 72 74 29 3b 0a  _free(zInsert);.
1a120 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  }.../*.** Try to
1a130 20 74 72 61 6e 73 66 65 72 20 61 6c 6c 20 72 6f   transfer all ro
1a140 77 73 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  ws of the schema
1a150 20 74 68 61 74 20 6d 61 74 63 68 20 7a 57 68 65   that match zWhe
1a160 72 65 2e 20 20 46 6f 72 0a 2a 2a 20 65 61 63 68  re.  For.** each
1a170 20 72 6f 77 2c 20 69 6e 76 6f 6b 65 20 78 46 6f   row, invoke xFo
1a180 72 45 61 63 68 28 29 20 6f 6e 20 74 68 65 20 6f  rEach() on the o
1a190 62 6a 65 63 74 20 64 65 66 69 6e 65 64 20 62 79  bject defined by
1a1a0 20 74 68 61 74 20 72 6f 77 2e 0a 2a 2a 20 49 66   that row..** If
1a1b0 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63   an error is enc
1a1c0 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 6d  ountered while m
1a1d0 6f 76 69 6e 67 20 66 6f 72 77 61 72 64 20 74 68  oving forward th
1a1e0 72 6f 75 67 68 20 74 68 65 0a 2a 2a 20 73 71 6c  rough the.** sql
1a1f0 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
1a200 2c 20 74 72 79 20 61 67 61 69 6e 20 6d 6f 76 69  , try again movi
1a210 6e 67 20 62 61 63 6b 77 61 72 64 73 2e 0a 2a 2f  ng backwards..*/
1a220 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 72 79  .static void try
1a230 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28 0a 20  ToCloneSchema(. 
1a240 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 0a   ShellState *p,.
1a250 20 20 73 71 6c 69 74 65 33 20 2a 6e 65 77 44 62    sqlite3 *newDb
1a260 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ,.  const char *
1a270 7a 57 68 65 72 65 2c 0a 20 20 76 6f 69 64 20 28  zWhere,.  void (
1a280 2a 78 46 6f 72 45 61 63 68 29 28 53 68 65 6c 6c  *xForEach)(Shell
1a290 53 74 61 74 65 2a 2c 73 71 6c 69 74 65 33 2a 2c  State*,sqlite3*,
1a2a0 63 6f 6e 73 74 20 63 68 61 72 2a 29 0a 29 7b 0a  const char*).){.
1a2b0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
1a2c0 70 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 63 68  pQuery = 0;.  ch
1a2d0 61 72 20 2a 7a 51 75 65 72 79 20 3d 20 30 3b 0a  ar *zQuery = 0;.
1a2e0 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 6f 6e 73    int rc;.  cons
1a2f0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
1a300 2a 7a 4e 61 6d 65 3b 0a 20 20 63 6f 6e 73 74 20  *zName;.  const 
1a310 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 7a  unsigned char *z
1a320 53 71 6c 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72  Sql;.  char *zEr
1a330 72 4d 73 67 20 3d 20 30 3b 0a 0a 20 20 7a 51 75  rMsg = 0;..  zQu
1a340 65 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ery = sqlite3_mp
1a350 72 69 6e 74 66 28 22 53 45 4c 45 43 54 20 6e 61  rintf("SELECT na
1a360 6d 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c  me, sql FROM sql
1a370 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20  ite_master".    
1a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a390 20 20 20 20 20 20 20 22 20 57 48 45 52 45 20 25         " WHERE %
1a3a0 73 22 2c 20 7a 57 68 65 72 65 29 3b 0a 20 20 72  s", zWhere);.  r
1a3b0 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
1a3c0 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 51  are_v2(p->db, zQ
1a3d0 75 65 72 79 2c 20 2d 31 2c 20 26 70 51 75 65 72  uery, -1, &pQuer
1a3e0 79 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63 20  y, 0);.  if( rc 
1a3f0 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  ){.    utf8_prin
1a400 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
1a410 72 3a 20 28 25 64 29 20 25 73 20 6f 6e 20 5b 25  r: (%d) %s on [%
1a420 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  s]\n",.         
1a430 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
1a440 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
1a450 6f 64 65 28 70 2d 3e 64 62 29 2c 20 73 71 6c 69  ode(p->db), sqli
1a460 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62  te3_errmsg(p->db
1a470 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
1a480 20 20 20 20 20 20 20 7a 51 75 65 72 79 29 3b 0a         zQuery);.
1a490 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 73 63 68      goto end_sch
1a4a0 65 6d 61 5f 78 66 65 72 3b 0a 20 20 7d 0a 20 20  ema_xfer;.  }.  
1a4b0 77 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c  while( (rc = sql
1a4c0 69 74 65 33 5f 73 74 65 70 28 70 51 75 65 72 79  ite3_step(pQuery
1a4d0 29 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  ))==SQLITE_ROW )
1a4e0 7b 0a 20 20 20 20 7a 4e 61 6d 65 20 3d 20 73 71  {.    zName = sq
1a4f0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
1a500 74 28 70 51 75 65 72 79 2c 20 30 29 3b 0a 20 20  t(pQuery, 0);.  
1a510 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
1a520 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 51 75  _column_text(pQu
1a530 65 72 79 2c 20 31 29 3b 0a 20 20 20 20 70 72 69  ery, 1);.    pri
1a540 6e 74 66 28 22 25 73 2e 2e 2e 20 22 2c 20 7a 4e  ntf("%s... ", zN
1a550 61 6d 65 29 3b 20 66 66 6c 75 73 68 28 73 74 64  ame); fflush(std
1a560 6f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  out);.    sqlite
1a570 33 5f 65 78 65 63 28 6e 65 77 44 62 2c 20 28 63  3_exec(newDb, (c
1a580 6f 6e 73 74 20 63 68 61 72 2a 29 7a 53 71 6c 2c  onst char*)zSql,
1a590 20 30 2c 20 30 2c 20 26 7a 45 72 72 4d 73 67 29   0, 0, &zErrMsg)
1a5a0 3b 0a 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73  ;.    if( zErrMs
1a5b0 67 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  g ){.      utf8_
1a5c0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1a5d0 45 72 72 6f 72 3a 20 25 73 5c 6e 53 51 4c 3a 20  Error: %s\nSQL: 
1a5e0 5b 25 73 5d 5c 6e 22 2c 20 7a 45 72 72 4d 73 67  [%s]\n", zErrMsg
1a5f0 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 73  , zSql);.      s
1a600 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72  qlite3_free(zErr
1a610 4d 73 67 29 3b 0a 20 20 20 20 20 20 7a 45 72 72  Msg);.      zErr
1a620 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  Msg = 0;.    }. 
1a630 20 20 20 69 66 28 20 78 46 6f 72 45 61 63 68 20     if( xForEach 
1a640 29 7b 0a 20 20 20 20 20 20 78 46 6f 72 45 61 63  ){.      xForEac
1a650 68 28 70 2c 20 6e 65 77 44 62 2c 20 28 63 6f 6e  h(p, newDb, (con
1a660 73 74 20 63 68 61 72 2a 29 7a 4e 61 6d 65 29 3b  st char*)zName);
1a670 0a 20 20 20 20 7d 0a 20 20 20 20 70 72 69 6e 74  .    }.    print
1a680 66 28 22 64 6f 6e 65 5c 6e 22 29 3b 0a 20 20 7d  f("done\n");.  }
1a690 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
1a6a0 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 73 71  E_DONE ){.    sq
1a6b0 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
1a6c0 51 75 65 72 79 29 3b 0a 20 20 20 20 73 71 6c 69  Query);.    sqli
1a6d0 74 65 33 5f 66 72 65 65 28 7a 51 75 65 72 79 29  te3_free(zQuery)
1a6e0 3b 0a 20 20 20 20 7a 51 75 65 72 79 20 3d 20 73  ;.    zQuery = s
1a6f0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
1a700 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 73 71 6c  SELECT name, sql
1a710 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
1a720 74 65 72 22 0a 20 20 20 20 20 20 20 20 20 20 20  ter".           
1a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a740 20 20 22 20 57 48 45 52 45 20 25 73 20 4f 52 44    " WHERE %s ORD
1a750 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43  ER BY rowid DESC
1a760 22 2c 20 7a 57 68 65 72 65 29 3b 0a 20 20 20 20  ", zWhere);.    
1a770 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
1a780 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a  pare_v2(p->db, z
1a790 51 75 65 72 79 2c 20 2d 31 2c 20 26 70 51 75 65  Query, -1, &pQue
1a7a0 72 79 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20  ry, 0);.    if( 
1a7b0 72 63 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  rc ){.      utf8
1a7c0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1a7d0 22 45 72 72 6f 72 3a 20 28 25 64 29 20 25 73 20  "Error: (%d) %s 
1a7e0 6f 6e 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20  on [%s]\n",.    
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a800 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64    sqlite3_extend
1a810 65 64 5f 65 72 72 63 6f 64 65 28 70 2d 3e 64 62  ed_errcode(p->db
1a820 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ), sqlite3_errms
1a830 67 28 70 2d 3e 64 62 29 2c 0a 20 20 20 20 20 20  g(p->db),.      
1a840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a850 7a 51 75 65 72 79 29 3b 0a 20 20 20 20 20 20 67  zQuery);.      g
1a860 6f 74 6f 20 65 6e 64 5f 73 63 68 65 6d 61 5f 78  oto end_schema_x
1a870 66 65 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77  fer;.    }.    w
1a880 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c 69  hile( (rc = sqli
1a890 74 65 33 5f 73 74 65 70 28 70 51 75 65 72 79 29  te3_step(pQuery)
1a8a0 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b  )==SQLITE_ROW ){
1a8b0 0a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 73  .      zName = s
1a8c0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
1a8d0 78 74 28 70 51 75 65 72 79 2c 20 30 29 3b 0a 20  xt(pQuery, 0);. 
1a8e0 20 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69       zSql = sqli
1a8f0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
1a900 70 51 75 65 72 79 2c 20 31 29 3b 0a 20 20 20 20  pQuery, 1);.    
1a910 20 20 70 72 69 6e 74 66 28 22 25 73 2e 2e 2e 20    printf("%s... 
1a920 22 2c 20 7a 4e 61 6d 65 29 3b 20 66 66 6c 75 73  ", zName); fflus
1a930 68 28 73 74 64 6f 75 74 29 3b 0a 20 20 20 20 20  h(stdout);.     
1a940 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 6e 65   sqlite3_exec(ne
1a950 77 44 62 2c 20 28 63 6f 6e 73 74 20 63 68 61 72  wDb, (const char
1a960 2a 29 7a 53 71 6c 2c 20 30 2c 20 30 2c 20 26 7a  *)zSql, 0, 0, &z
1a970 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 69  ErrMsg);.      i
1a980 66 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20  f( zErrMsg ){.  
1a990 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
1a9a0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
1a9b0 3a 20 25 73 5c 6e 53 51 4c 3a 20 5b 25 73 5d 5c  : %s\nSQL: [%s]\
1a9c0 6e 22 2c 20 7a 45 72 72 4d 73 67 2c 20 7a 53 71  n", zErrMsg, zSq
1a9d0 6c 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  l);.        sqli
1a9e0 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67  te3_free(zErrMsg
1a9f0 29 3b 0a 20 20 20 20 20 20 20 20 7a 45 72 72 4d  );.        zErrM
1aa00 73 67 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  sg = 0;.      }.
1aa10 20 20 20 20 20 20 69 66 28 20 78 46 6f 72 45 61        if( xForEa
1aa20 63 68 20 29 7b 0a 20 20 20 20 20 20 20 20 78 46  ch ){.        xF
1aa30 6f 72 45 61 63 68 28 70 2c 20 6e 65 77 44 62 2c  orEach(p, newDb,
1aa40 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a 4e   (const char*)zN
1aa50 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ame);.      }.  
1aa60 20 20 20 20 70 72 69 6e 74 66 28 22 64 6f 6e 65      printf("done
1aa70 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  \n");.    }.  }.
1aa80 65 6e 64 5f 73 63 68 65 6d 61 5f 78 66 65 72 3a  end_schema_xfer:
1aa90 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
1aaa0 69 7a 65 28 70 51 75 65 72 79 29 3b 0a 20 20 73  ize(pQuery);.  s
1aab0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 51 75 65  qlite3_free(zQue
1aac0 72 79 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70  ry);.}../*.** Op
1aad0 65 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61 73  en a new databas
1aae0 65 20 66 69 6c 65 20 6e 61 6d 65 64 20 22 7a 4e  e file named "zN
1aaf0 65 77 44 62 22 2e 20 20 54 72 79 20 74 6f 20 72  ewDb".  Try to r
1ab00 65 63 6f 76 65 72 20 61 73 20 6d 75 63 68 20 69  ecover as much i
1ab10 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 61 73  nformation.** as
1ab20 20 70 6f 73 73 69 62 6c 65 20 6f 75 74 20 6f 66   possible out of
1ab30 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1ab40 73 65 20 28 77 68 69 63 68 20 6d 69 67 68 74 20  se (which might 
1ab50 62 65 20 63 6f 72 72 75 70 74 29 20 61 6e 64 20  be corrupt) and 
1ab60 77 72 69 74 65 20 69 74 0a 2a 2a 20 69 6e 74 6f  write it.** into
1ab70 20 7a 4e 65 77 44 62 2e 0a 2a 2f 0a 73 74 61 74   zNewDb..*/.stat
1ab80 69 63 20 76 6f 69 64 20 74 72 79 54 6f 43 6c 6f  ic void tryToClo
1ab90 6e 65 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  ne(ShellState *p
1aba0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  , const char *zN
1abb0 65 77 44 62 29 7b 0a 20 20 69 6e 74 20 72 63 3b  ewDb){.  int rc;
1abc0 0a 20 20 73 71 6c 69 74 65 33 20 2a 6e 65 77 44  .  sqlite3 *newD
1abd0 62 20 3d 20 30 3b 0a 20 20 69 66 28 20 61 63 63  b = 0;.  if( acc
1abe0 65 73 73 28 7a 4e 65 77 44 62 2c 30 29 3d 3d 30  ess(zNewDb,0)==0
1abf0 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69   ){.    utf8_pri
1ac00 6e 74 66 28 73 74 64 65 72 72 2c 20 22 46 69 6c  ntf(stderr, "Fil
1ac10 65 20 5c 22 25 73 5c 22 20 61 6c 72 65 61 64 79  e \"%s\" already
1ac20 20 65 78 69 73 74 73 2e 5c 6e 22 2c 20 7a 4e 65   exists.\n", zNe
1ac30 77 44 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  wDb);.    return
1ac40 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
1ac50 69 74 65 33 5f 6f 70 65 6e 28 7a 4e 65 77 44 62  ite3_open(zNewDb
1ac60 2c 20 26 6e 65 77 44 62 29 3b 0a 20 20 69 66 28  , &newDb);.  if(
1ac70 20 72 63 20 29 7b 0a 20 20 20 20 75 74 66 38 5f   rc ){.    utf8_
1ac80 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1ac90 43 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 6f 75  Cannot create ou
1aca0 74 70 75 74 20 64 61 74 61 62 61 73 65 3a 20 25  tput database: %
1acb0 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  s\n",.          
1acc0 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67    sqlite3_errmsg
1acd0 28 6e 65 77 44 62 29 29 3b 0a 20 20 7d 65 6c 73  (newDb));.  }els
1ace0 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65  e{.    sqlite3_e
1acf0 78 65 63 28 70 2d 3e 64 62 2c 20 22 50 52 41 47  xec(p->db, "PRAG
1ad00 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
1ad10 6d 61 3d 4f 4e 3b 22 2c 20 30 2c 20 30 2c 20 30  ma=ON;", 0, 0, 0
1ad20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65  );.    sqlite3_e
1ad30 78 65 63 28 6e 65 77 44 62 2c 20 22 42 45 47 49  xec(newDb, "BEGI
1ad40 4e 20 45 58 43 4c 55 53 49 56 45 3b 22 2c 20 30  N EXCLUSIVE;", 0
1ad50 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 74 72 79  , 0, 0);.    try
1ad60 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28 70 2c  ToCloneSchema(p,
1ad70 20 6e 65 77 44 62 2c 20 22 74 79 70 65 3d 27 74   newDb, "type='t
1ad80 61 62 6c 65 27 22 2c 20 74 72 79 54 6f 43 6c 6f  able'", tryToClo
1ad90 6e 65 44 61 74 61 29 3b 0a 20 20 20 20 74 72 79  neData);.    try
1ada0 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28 70 2c  ToCloneSchema(p,
1adb0 20 6e 65 77 44 62 2c 20 22 74 79 70 65 21 3d 27   newDb, "type!='
1adc0 74 61 62 6c 65 27 22 2c 20 30 29 3b 0a 20 20 20  table'", 0);.   
1add0 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 6e 65   sqlite3_exec(ne
1ade0 77 44 62 2c 20 22 43 4f 4d 4d 49 54 3b 22 2c 20  wDb, "COMMIT;", 
1adf0 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 73 71  0, 0, 0);.    sq
1ae00 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
1ae10 2c 20 22 50 52 41 47 4d 41 20 77 72 69 74 61 62  , "PRAGMA writab
1ae20 6c 65 5f 73 63 68 65 6d 61 3d 4f 46 46 3b 22 2c  le_schema=OFF;",
1ae30 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20   0, 0, 0);.  }. 
1ae40 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 6e   sqlite3_close(n
1ae50 65 77 44 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  ewDb);.}../*.** 
1ae60 43 68 61 6e 67 65 20 74 68 65 20 6f 75 74 70 75  Change the outpu
1ae70 74 20 66 69 6c 65 20 62 61 63 6b 20 74 6f 20 73  t file back to s
1ae80 74 64 6f 75 74 0a 2a 2f 0a 73 74 61 74 69 63 20  tdout.*/.static 
1ae90 76 6f 69 64 20 6f 75 74 70 75 74 5f 72 65 73 65  void output_rese
1aea0 74 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29  t(ShellState *p)
1aeb0 7b 0a 20 20 69 66 28 20 70 2d 3e 6f 75 74 66 69  {.  if( p->outfi
1aec0 6c 65 5b 30 5d 3d 3d 27 7c 27 20 29 7b 0a 23 69  le[0]=='|' ){.#i
1aed0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1aee0 54 5f 50 4f 50 45 4e 0a 20 20 20 20 70 63 6c 6f  T_POPEN.    pclo
1aef0 73 65 28 70 2d 3e 6f 75 74 29 3b 0a 23 65 6e 64  se(p->out);.#end
1af00 69 66 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  if.  }else{.    
1af10 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73  output_file_clos
1af20 65 28 70 2d 3e 6f 75 74 29 3b 0a 20 20 7d 0a 20  e(p->out);.  }. 
1af30 20 70 2d 3e 6f 75 74 66 69 6c 65 5b 30 5d 20 3d   p->outfile[0] =
1af40 20 30 3b 0a 20 20 70 2d 3e 6f 75 74 20 3d 20 73   0;.  p->out = s
1af50 74 64 6f 75 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  tdout;.}../*.** 
1af60 52 75 6e 20 61 6e 20 53 51 4c 20 63 6f 6d 6d 61  Run an SQL comma
1af70 6e 64 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68  nd and return th
1af80 65 20 73 69 6e 67 6c 65 20 69 6e 74 65 67 65 72  e single integer
1af90 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74   result..*/.stat
1afa0 69 63 20 69 6e 74 20 64 62 5f 69 6e 74 28 53 68  ic int db_int(Sh
1afb0 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f 6e  ellState *p, con
1afc0 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 29 7b 0a  st char *zSql){.
1afd0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
1afe0 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 65 73  pStmt;.  int res
1aff0 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f   = 0;.  sqlite3_
1b000 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62  prepare_v2(p->db
1b010 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74  , zSql, -1, &pSt
1b020 6d 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 53  mt, 0);.  if( pS
1b030 74 6d 74 20 26 26 20 73 71 6c 69 74 65 33 5f 73  tmt && sqlite3_s
1b040 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49  tep(pStmt)==SQLI
1b050 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 72 65  TE_ROW ){.    re
1b060 73 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  s = sqlite3_colu
1b070 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c 30 29 3b  mn_int(pStmt,0);
1b080 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66  .  }.  sqlite3_f
1b090 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a  inalize(pStmt);.
1b0a0 20 20 72 65 74 75 72 6e 20 72 65 73 3b 0a 7d 0a    return res;.}.
1b0b0 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61  ./*.** Convert a
1b0c0 20 32 2d 62 79 74 65 20 6f 72 20 34 2d 62 79 74   2-byte or 4-byt
1b0d0 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
1b0e0 65 67 65 72 20 69 6e 74 6f 20 61 20 6e 61 74 69  eger into a nati
1b0f0 76 65 20 69 6e 74 65 67 65 72 0a 2a 2f 0a 73 74  ve integer.*/.st
1b100 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 69 6e  atic unsigned in
1b110 74 20 67 65 74 32 62 79 74 65 49 6e 74 28 75 6e  t get2byteInt(un
1b120 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61 29 7b  signed char *a){
1b130 0a 20 20 72 65 74 75 72 6e 20 28 61 5b 30 5d 3c  .  return (a[0]<
1b140 3c 38 29 20 2b 20 61 5b 31 5d 3b 0a 7d 0a 73 74  <8) + a[1];.}.st
1b150 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 69 6e  atic unsigned in
1b160 74 20 67 65 74 34 62 79 74 65 49 6e 74 28 75 6e  t get4byteInt(un
1b170 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61 29 7b  signed char *a){
1b180 0a 20 20 72 65 74 75 72 6e 20 28 61 5b 30 5d 3c  .  return (a[0]<
1b190 3c 32 34 29 20 2b 20 28 61 5b 31 5d 3c 3c 31 36  <24) + (a[1]<<16
1b1a0 29 20 2b 20 28 61 5b 32 5d 3c 3c 38 29 20 2b 20  ) + (a[2]<<8) + 
1b1b0 61 5b 33 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  a[3];.}../*.** I
1b1c0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
1b1d0 20 74 68 65 20 22 2e 69 6e 66 6f 22 20 63 6f 6d   the ".info" com
1b1e0 6d 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75  mand..**.** Retu
1b1f0 72 6e 20 31 20 6f 6e 20 65 72 72 6f 72 2c 20 32  rn 1 on error, 2
1b200 20 74 6f 20 65 78 69 74 2c 20 61 6e 64 20 30 20   to exit, and 0 
1b210 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2f 0a 73 74  otherwise..*/.st
1b220 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 5f 64  atic int shell_d
1b230 62 69 6e 66 6f 5f 63 6f 6d 6d 61 6e 64 28 53 68  binfo_command(Sh
1b240 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 69 6e 74  ellState *p, int
1b250 20 6e 41 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a   nArg, char **az
1b260 41 72 67 29 7b 0a 20 20 73 74 61 74 69 63 20 63  Arg){.  static c
1b270 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 20 63 6f  onst struct { co
1b280 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  nst char *zName;
1b290 20 69 6e 74 20 6f 66 73 74 3b 20 7d 20 61 46 69   int ofst; } aFi
1b2a0 65 6c 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b  eld[] = {.     {
1b2b0 20 22 66 69 6c 65 20 63 68 61 6e 67 65 20 63 6f   "file change co
1b2c0 75 6e 74 65 72 3a 22 2c 20 20 32 34 20 20 7d 2c  unter:",  24  },
1b2d0 0a 20 20 20 20 20 7b 20 22 64 61 74 61 62 61 73  .     { "databas
1b2e0 65 20 70 61 67 65 20 63 6f 75 6e 74 3a 22 2c 20  e page count:", 
1b2f0 20 32 38 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22   28  },.     { "
1b300 66 72 65 65 6c 69 73 74 20 70 61 67 65 20 63 6f  freelist page co
1b310 75 6e 74 3a 22 2c 20 20 33 36 20 20 7d 2c 0a 20  unt:",  36  },. 
1b320 20 20 20 20 7b 20 22 73 63 68 65 6d 61 20 63 6f      { "schema co
1b330 6f 6b 69 65 3a 22 2c 20 20 20 20 20 20 20 20 34  okie:",        4
1b340 30 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 63  0  },.     { "sc
1b350 68 65 6d 61 20 66 6f 72 6d 61 74 3a 22 2c 20 20  hema format:",  
1b360 20 20 20 20 20 20 34 34 20 20 7d 2c 0a 20 20 20        44  },.   
1b370 20 20 7b 20 22 64 65 66 61 75 6c 74 20 63 61 63    { "default cac
1b380 68 65 20 73 69 7a 65 3a 22 2c 20 20 20 34 38 20  he size:",   48 
1b390 20 7d 2c 0a 20 20 20 20 20 7b 20 22 61 75 74 6f   },.     { "auto
1b3a0 76 61 63 75 75 6d 20 74 6f 70 20 72 6f 6f 74 3a  vacuum top root:
1b3b0 22 2c 20 20 35 32 20 20 7d 2c 0a 20 20 20 20 20  ",  52  },.     
1b3c0 7b 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76  { "incremental v
1b3d0 61 63 75 75 6d 3a 22 2c 20 20 20 36 34 20 20 7d  acuum:",   64  }
1b3e0 2c 0a 20 20 20 20 20 7b 20 22 74 65 78 74 20 65  ,.     { "text e
1b3f0 6e 63 6f 64 69 6e 67 3a 22 2c 20 20 20 20 20 20  ncoding:",      
1b400 20 20 35 36 20 20 7d 2c 0a 20 20 20 20 20 7b 20    56  },.     { 
1b410 22 75 73 65 72 20 76 65 72 73 69 6f 6e 3a 22 2c  "user version:",
1b420 20 20 20 20 20 20 20 20 20 36 30 20 20 7d 2c 0a           60  },.
1b430 20 20 20 20 20 7b 20 22 61 70 70 6c 69 63 61 74       { "applicat
1b440 69 6f 6e 20 69 64 3a 22 2c 20 20 20 20 20 20 20  ion id:",       
1b450 36 38 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73  68  },.     { "s
1b460 6f 66 74 77 61 72 65 20 76 65 72 73 69 6f 6e 3a  oftware version:
1b470 22 2c 20 20 20 20 20 39 36 20 20 7d 2c 0a 20 20  ",     96  },.  
1b480 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  };.  static cons
1b490 74 20 73 74 72 75 63 74 20 7b 20 63 6f 6e 73 74  t struct { const
1b4a0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 63 6f   char *zName; co
1b4b0 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20  nst char *zSql; 
1b4c0 7d 20 61 51 75 65 72 79 5b 5d 20 3d 20 7b 0a 20  } aQuery[] = {. 
1b4d0 20 20 20 20 7b 20 22 6e 75 6d 62 65 72 20 6f 66      { "number of
1b4e0 20 74 61 62 6c 65 73 3a 22 2c 0a 20 20 20 20 20   tables:",.     
1b4f0 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28    "SELECT count(
1b500 2a 29 20 46 52 4f 4d 20 25 73 20 57 48 45 52 45  *) FROM %s WHERE
1b510 20 74 79 70 65 3d 27 74 61 62 6c 65 27 22 20 7d   type='table'" }
1b520 2c 0a 20 20 20 20 20 7b 20 22 6e 75 6d 62 65 72  ,.     { "number
1b530 20 6f 66 20 69 6e 64 65 78 65 73 3a 22 2c 0a 20   of indexes:",. 
1b540 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f        "SELECT co
1b550 75 6e 74 28 2a 29 20 46 52 4f 4d 20 25 73 20 57  unt(*) FROM %s W
1b560 48 45 52 45 20 74 79 70 65 3d 27 69 6e 64 65 78  HERE type='index
1b570 27 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 6e 75  '" },.     { "nu
1b580 6d 62 65 72 20 6f 66 20 74 72 69 67 67 65 72 73  mber of triggers
1b590 3a 22 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45  :",.       "SELE
1b5a0 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
1b5b0 20 25 73 20 57 48 45 52 45 20 74 79 70 65 3d 27   %s WHERE type='
1b5c0 74 72 69 67 67 65 72 27 22 20 7d 2c 0a 20 20 20  trigger'" },.   
1b5d0 20 20 7b 20 22 6e 75 6d 62 65 72 20 6f 66 20 76    { "number of v
1b5e0 69 65 77 73 3a 22 2c 0a 20 20 20 20 20 20 20 22  iews:",.       "
1b5f0 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
1b600 46 52 4f 4d 20 25 73 20 57 48 45 52 45 20 74 79  FROM %s WHERE ty
1b610 70 65 3d 27 76 69 65 77 27 22 20 7d 2c 0a 20 20  pe='view'" },.  
1b620 20 20 20 7b 20 22 73 63 68 65 6d 61 20 73 69 7a     { "schema siz
1b630 65 3a 22 2c 0a 20 20 20 20 20 20 20 22 53 45 4c  e:",.       "SEL
1b640 45 43 54 20 74 6f 74 61 6c 28 6c 65 6e 67 74 68  ECT total(length
1b650 28 73 71 6c 29 29 20 46 52 4f 4d 20 25 73 22 20  (sql)) FROM %s" 
1b660 7d 2c 0a 20 20 7d 3b 0a 20 20 69 6e 74 20 69 3b  },.  };.  int i;
1b670 0a 20 20 63 68 61 72 20 2a 7a 53 63 68 65 6d 61  .  char *zSchema
1b680 54 61 62 3b 0a 20 20 63 68 61 72 20 2a 7a 44 62  Tab;.  char *zDb
1b690 20 3d 20 6e 41 72 67 3e 3d 32 20 3f 20 61 7a 41   = nArg>=2 ? azA
1b6a0 72 67 5b 31 5d 20 3a 20 22 6d 61 69 6e 22 3b 0a  rg[1] : "main";.
1b6b0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
1b6c0 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 75 6e 73  pStmt = 0;.  uns
1b6d0 69 67 6e 65 64 20 63 68 61 72 20 61 48 64 72 5b  igned char aHdr[
1b6e0 31 30 30 5d 3b 0a 20 20 6f 70 65 6e 5f 64 62 28  100];.  open_db(
1b6f0 70 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 2d 3e  p, 0);.  if( p->
1b700 64 62 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31  db==0 ) return 1
1b710 3b 0a 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ;.  sqlite3_prep
1b720 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 22 53 45  are_v2(p->db,"SE
1b730 4c 45 43 54 20 64 61 74 61 20 46 52 4f 4d 20 73  LECT data FROM s
1b740 71 6c 69 74 65 5f 64 62 70 61 67 65 28 3f 31 29  qlite_dbpage(?1)
1b750 20 57 48 45 52 45 20 70 67 6e 6f 3d 31 22 2c 0a   WHERE pgno=1",.
1b760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b770 20 20 20 20 20 2d 31 2c 20 26 70 53 74 6d 74 2c       -1, &pStmt,
1b780 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 62   0);.  sqlite3_b
1b790 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20  ind_text(pStmt, 
1b7a0 31 2c 20 7a 44 62 2c 20 2d 31 2c 20 53 51 4c 49  1, zDb, -1, SQLI
1b7b0 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 69 66  TE_STATIC);.  if
1b7c0 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  ( sqlite3_step(p
1b7d0 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  Stmt)==SQLITE_RO
1b7e0 57 0a 20 20 20 26 26 20 73 71 6c 69 74 65 33 5f  W.   && sqlite3_
1b7f0 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 70 53 74  column_bytes(pSt
1b800 6d 74 2c 30 29 3e 31 30 30 0a 20 20 29 7b 0a 20  mt,0)>100.  ){. 
1b810 20 20 20 6d 65 6d 63 70 79 28 61 48 64 72 2c 20     memcpy(aHdr, 
1b820 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
1b830 6c 6f 62 28 70 53 74 6d 74 2c 30 29 2c 20 31 30  lob(pStmt,0), 10
1b840 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
1b850 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
1b860 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 61  .  }else{.    ra
1b870 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
1b880 20 22 75 6e 61 62 6c 65 20 74 6f 20 72 65 61 64   "unable to read
1b890 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72   database header
1b8a0 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  \n");.    sqlite
1b8b0 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
1b8c0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b  );.    return 1;
1b8d0 0a 20 20 7d 0a 20 20 69 20 3d 20 67 65 74 32 62  .  }.  i = get2b
1b8e0 79 74 65 49 6e 74 28 61 48 64 72 2b 31 36 29 3b  yteInt(aHdr+16);
1b8f0 0a 20 20 69 66 28 20 69 3d 3d 31 20 29 20 69 20  .  if( i==1 ) i 
1b900 3d 20 36 35 35 33 36 3b 0a 20 20 75 74 66 38 5f  = 65536;.  utf8_
1b910 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
1b920 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22 64 61  %-20s %d\n", "da
1b930 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65  tabase page size
1b940 3a 22 2c 20 69 29 3b 0a 20 20 75 74 66 38 5f 70  :", i);.  utf8_p
1b950 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
1b960 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22 77 72 69  -20s %d\n", "wri
1b970 74 65 20 66 6f 72 6d 61 74 3a 22 2c 20 61 48 64  te format:", aHd
1b980 72 5b 31 38 5d 29 3b 0a 20 20 75 74 66 38 5f 70  r[18]);.  utf8_p
1b990 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
1b9a0 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22 72 65 61  -20s %d\n", "rea
1b9b0 64 20 66 6f 72 6d 61 74 3a 22 2c 20 61 48 64 72  d format:", aHdr
1b9c0 5b 31 39 5d 29 3b 0a 20 20 75 74 66 38 5f 70 72  [19]);.  utf8_pr
1b9d0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d  intf(p->out, "%-
1b9e0 32 30 73 20 25 64 5c 6e 22 2c 20 22 72 65 73 65  20s %d\n", "rese
1b9f0 72 76 65 64 20 62 79 74 65 73 3a 22 2c 20 61 48  rved bytes:", aH
1ba00 64 72 5b 32 30 5d 29 3b 0a 20 20 66 6f 72 28 69  dr[20]);.  for(i
1ba10 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28  =0; i<ArraySize(
1ba20 61 46 69 65 6c 64 29 3b 20 69 2b 2b 29 7b 0a 20  aField); i++){. 
1ba30 20 20 20 69 6e 74 20 6f 66 73 74 20 3d 20 61 46     int ofst = aF
1ba40 69 65 6c 64 5b 69 5d 2e 6f 66 73 74 3b 0a 20 20  ield[i].ofst;.  
1ba50 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 76    unsigned int v
1ba60 61 6c 20 3d 20 67 65 74 34 62 79 74 65 49 6e 74  al = get4byteInt
1ba70 28 61 48 64 72 20 2b 20 6f 66 73 74 29 3b 0a 20  (aHdr + ofst);. 
1ba80 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
1ba90 2d 3e 6f 75 74 2c 20 22 25 2d 32 30 73 20 25 75  ->out, "%-20s %u
1baa0 22 2c 20 61 46 69 65 6c 64 5b 69 5d 2e 7a 4e 61  ", aField[i].zNa
1bab0 6d 65 2c 20 76 61 6c 29 3b 0a 20 20 20 20 73 77  me, val);.    sw
1bac0 69 74 63 68 28 20 6f 66 73 74 20 29 7b 0a 20 20  itch( ofst ){.  
1bad0 20 20 20 20 63 61 73 65 20 35 36 3a 20 7b 0a 20      case 56: {. 
1bae0 20 20 20 20 20 20 20 69 66 28 20 76 61 6c 3d 3d         if( val==
1baf0 31 20 29 20 72 61 77 5f 70 72 69 6e 74 66 28 70  1 ) raw_printf(p
1bb00 2d 3e 6f 75 74 2c 20 22 20 28 75 74 66 38 29 22  ->out, " (utf8)"
1bb10 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 76  );.        if( v
1bb20 61 6c 3d 3d 32 20 29 20 72 61 77 5f 70 72 69 6e  al==2 ) raw_prin
1bb30 74 66 28 70 2d 3e 6f 75 74 2c 20 22 20 28 75 74  tf(p->out, " (ut
1bb40 66 31 36 6c 65 29 22 29 3b 0a 20 20 20 20 20 20  f16le)");.      
1bb50 20 20 69 66 28 20 76 61 6c 3d 3d 33 20 29 20 72    if( val==3 ) r
1bb60 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
1bb70 2c 20 22 20 28 75 74 66 31 36 62 65 29 22 29 3b  , " (utf16be)");
1bb80 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1bb90 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
1bba0 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 7d  >out, "\n");.  }
1bbb0 0a 20 20 69 66 28 20 7a 44 62 3d 3d 30 20 29 7b  .  if( zDb==0 ){
1bbc0 0a 20 20 20 20 7a 53 63 68 65 6d 61 54 61 62 20  .    zSchemaTab 
1bbd0 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
1bbe0 66 28 22 6d 61 69 6e 2e 73 71 6c 69 74 65 5f 6d  f("main.sqlite_m
1bbf0 61 73 74 65 72 22 29 3b 0a 20 20 7d 65 6c 73 65  aster");.  }else
1bc00 20 69 66 28 20 73 74 72 63 6d 70 28 7a 44 62 2c   if( strcmp(zDb,
1bc10 22 74 65 6d 70 22 29 3d 3d 30 20 29 7b 0a 20 20  "temp")==0 ){.  
1bc20 20 20 7a 53 63 68 65 6d 61 54 61 62 20 3d 20 73    zSchemaTab = s
1bc30 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
1bc40 25 73 22 2c 20 22 73 71 6c 69 74 65 5f 74 65 6d  %s", "sqlite_tem
1bc50 70 5f 6d 61 73 74 65 72 22 29 3b 0a 20 20 7d 65  p_master");.  }e
1bc60 6c 73 65 7b 0a 20 20 20 20 7a 53 63 68 65 6d 61  lse{.    zSchema
1bc70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  Tab = sqlite3_mp
1bc80 72 69 6e 74 66 28 22 5c 22 25 77 5c 22 2e 73 71  rintf("\"%w\".sq
1bc90 6c 69 74 65 5f 6d 61 73 74 65 72 22 2c 20 7a 44  lite_master", zD
1bca0 62 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d  b);.  }.  for(i=
1bcb0 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28 61  0; i<ArraySize(a
1bcc0 51 75 65 72 79 29 3b 20 69 2b 2b 29 7b 0a 20 20  Query); i++){.  
1bcd0 20 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d 20 73    char *zSql = s
1bce0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61  qlite3_mprintf(a
1bcf0 51 75 65 72 79 5b 69 5d 2e 7a 53 71 6c 2c 20 7a  Query[i].zSql, z
1bd00 53 63 68 65 6d 61 54 61 62 29 3b 0a 20 20 20 20  SchemaTab);.    
1bd10 69 6e 74 20 76 61 6c 20 3d 20 64 62 5f 69 6e 74  int val = db_int
1bd20 28 70 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 73  (p, zSql);.    s
1bd30 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
1bd40 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
1bd50 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 32 30  tf(p->out, "%-20
1bd60 73 20 25 64 5c 6e 22 2c 20 61 51 75 65 72 79 5b  s %d\n", aQuery[
1bd70 69 5d 2e 7a 4e 61 6d 65 2c 20 76 61 6c 29 3b 0a  i].zName, val);.
1bd80 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72    }.  sqlite3_fr
1bd90 65 65 28 7a 53 63 68 65 6d 61 54 61 62 29 3b 0a  ee(zSchemaTab);.
1bda0 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
1bdb0 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 63  *.** Print the c
1bdc0 75 72 72 65 6e 74 20 73 71 6c 69 74 65 33 5f 65  urrent sqlite3_e
1bdd0 72 72 6d 73 67 28 29 20 76 61 6c 75 65 20 74 6f  rrmsg() value to
1bde0 20 73 74 64 65 72 72 20 61 6e 64 20 72 65 74 75   stderr and retu
1bdf0 72 6e 20 31 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  rn 1..*/.static 
1be00 69 6e 74 20 73 68 65 6c 6c 44 61 74 61 62 61 73  int shellDatabas
1be10 65 45 72 72 6f 72 28 73 71 6c 69 74 65 33 20 2a  eError(sqlite3 *
1be20 64 62 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  db){.  const cha
1be30 72 20 2a 7a 45 72 72 20 3d 20 73 71 6c 69 74 65  r *zErr = sqlite
1be40 33 5f 65 72 72 6d 73 67 28 64 62 29 3b 0a 20 20  3_errmsg(db);.  
1be50 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
1be60 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e  rr, "Error: %s\n
1be70 22 2c 20 7a 45 72 72 29 3b 0a 20 20 72 65 74 75  ", zErr);.  retu
1be80 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  rn 1;.}../*.** P
1be90 72 69 6e 74 20 61 6e 20 6f 75 74 2d 6f 66 2d 6d  rint an out-of-m
1bea0 65 6d 6f 72 79 20 6d 65 73 73 61 67 65 20 74 6f  emory message to
1beb0 20 73 74 64 65 72 72 20 61 6e 64 20 72 65 74 75   stderr and retu
1bec0 72 6e 20 31 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  rn 1..*/.static 
1bed0 69 6e 74 20 73 68 65 6c 6c 4e 6f 6d 65 6d 45 72  int shellNomemEr
1bee0 72 6f 72 28 76 6f 69 64 29 7b 0a 20 20 72 61 77  ror(void){.  raw
1bef0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1bf00 22 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66 20 6d  "Error: out of m
1bf10 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 72 65 74  emory\n");.  ret
1bf20 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 1;.}../*.** 
1bf30 43 6f 6d 70 61 72 65 20 74 68 65 20 70 61 74 74  Compare the patt
1bf40 65 72 6e 20 69 6e 20 7a 47 6c 6f 62 5b 5d 20 61  ern in zGlob[] a
1bf50 67 61 69 6e 73 74 20 74 68 65 20 74 65 78 74 20  gainst the text 
1bf60 69 6e 20 7a 5b 5d 2e 20 20 52 65 74 75 72 6e 20  in z[].  Return 
1bf70 54 52 55 45 0a 2a 2a 20 69 66 20 74 68 65 79 20  TRUE.** if they 
1bf80 6d 61 74 63 68 20 61 6e 64 20 46 41 4c 53 45 20  match and FALSE 
1bf90 28 30 29 20 69 66 20 74 68 65 79 20 64 6f 20 6e  (0) if they do n
1bfa0 6f 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20  ot match..**.** 
1bfb0 47 6c 6f 62 62 69 6e 67 20 72 75 6c 65 73 3a 0a  Globbing rules:.
1bfc0 2a 2a 0a 2a 2a 20 20 20 20 20 20 27 2a 27 20 20  **.**      '*'  
1bfd0 20 20 20 20 20 4d 61 74 63 68 65 73 20 61 6e 79       Matches any
1bfe0 20 73 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72   sequence of zer
1bff0 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61 72 61 63  o or more charac
1c000 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ters..**.**     
1c010 20 27 3f 27 20 20 20 20 20 20 20 4d 61 74 63 68   '?'       Match
1c020 65 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 63  es exactly one c
1c030 68 61 72 61 63 74 65 72 2e 0a 2a 2a 0a 2a 2a 20  haracter..**.** 
1c040 20 20 20 20 5b 2e 2e 2e 5d 20 20 20 20 20 20 4d      [...]      M
1c050 61 74 63 68 65 73 20 6f 6e 65 20 63 68 61 72 61  atches one chara
1c060 63 74 65 72 20 66 72 6f 6d 20 74 68 65 20 65 6e  cter from the en
1c070 63 6c 6f 73 65 64 20 6c 69 73 74 20 6f 66 0a 2a  closed list of.*
1c080 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1c090 20 63 68 61 72 61 63 74 65 72 73 2e 0a 2a 2a 0a   characters..**.
1c0a0 2a 2a 20 20 20 20 20 5b 5e 2e 2e 2e 5d 20 20 20  **     [^...]   
1c0b0 20 20 4d 61 74 63 68 65 73 20 6f 6e 65 20 63 68    Matches one ch
1c0c0 61 72 61 63 74 65 72 20 6e 6f 74 20 69 6e 20 74  aracter not in t
1c0d0 68 65 20 65 6e 63 6c 6f 73 65 64 20 6c 69 73 74  he enclosed list
1c0e0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 27 23 27  ..**.**      '#'
1c0f0 20 20 20 20 20 20 20 4d 61 74 63 68 65 73 20 61         Matches a
1c100 6e 79 20 73 65 71 75 65 6e 63 65 20 6f 66 20 6f  ny sequence of o
1c110 6e 65 20 6f 72 20 6d 6f 72 65 20 64 69 67 69 74  ne or more digit
1c120 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 20 20 20  s with an.**    
1c130 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 74 69              opti
1c140 6f 6e 61 6c 20 2b 20 6f 72 20 2d 20 73 69 67 6e  onal + or - sign
1c150 20 69 6e 20 66 72 6f 6e 74 0a 2a 2a 0a 2a 2a 20   in front.**.** 
1c160 20 20 20 20 20 27 20 27 20 20 20 20 20 20 20 41       ' '       A
1c170 6e 79 20 73 70 61 6e 20 6f 66 20 77 68 69 74 65  ny span of white
1c180 73 70 61 63 65 20 6d 61 74 63 68 65 73 20 61 6e  space matches an
1c190 79 20 6f 74 68 65 72 20 73 70 61 6e 20 6f 66 0a  y other span of.
1c1a0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1c1b0 20 20 77 68 69 74 65 73 70 61 63 65 2e 0a 2a 2a    whitespace..**
1c1c0 0a 2a 2a 20 45 78 74 72 61 20 77 68 69 74 65 73  .** Extra whites
1c1d0 70 61 63 65 20 61 74 20 74 68 65 20 65 6e 64 20  pace at the end 
1c1e0 6f 66 20 7a 5b 5d 20 69 73 20 69 67 6e 6f 72 65  of z[] is ignore
1c1f0 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
1c200 20 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28 63   testcase_glob(c
1c210 6f 6e 73 74 20 63 68 61 72 20 2a 7a 47 6c 6f 62  onst char *zGlob
1c220 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29  , const char *z)
1c230 7b 0a 20 20 69 6e 74 20 63 2c 20 63 32 3b 0a 20  {.  int c, c2;. 
1c240 20 69 6e 74 20 69 6e 76 65 72 74 3b 0a 20 20 69   int invert;.  i
1c250 6e 74 20 73 65 65 6e 3b 0a 0a 20 20 77 68 69 6c  nt seen;..  whil
1c260 65 28 20 28 63 20 3d 20 28 2a 28 7a 47 6c 6f 62  e( (c = (*(zGlob
1c270 2b 2b 29 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  ++)))!=0 ){.    
1c280 69 66 28 20 49 73 53 70 61 63 65 28 63 29 20 29  if( IsSpace(c) )
1c290 7b 0a 20 20 20 20 20 20 69 66 28 20 21 49 73 53  {.      if( !IsS
1c2a0 70 61 63 65 28 2a 7a 29 20 29 20 72 65 74 75 72  pace(*z) ) retur
1c2b0 6e 20 30 3b 0a 20 20 20 20 20 20 77 68 69 6c 65  n 0;.      while
1c2c0 28 20 49 73 53 70 61 63 65 28 2a 7a 47 6c 6f 62  ( IsSpace(*zGlob
1c2d0 29 20 29 20 7a 47 6c 6f 62 2b 2b 3b 0a 20 20 20  ) ) zGlob++;.   
1c2e0 20 20 20 77 68 69 6c 65 28 20 49 73 53 70 61 63     while( IsSpac
1c2f0 65 28 2a 7a 29 20 29 20 7a 2b 2b 3b 0a 20 20 20  e(*z) ) z++;.   
1c300 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 2a   }else if( c=='*
1c310 27 20 29 7b 0a 20 20 20 20 20 20 77 68 69 6c 65  ' ){.      while
1c320 28 20 28 63 3d 28 2a 28 7a 47 6c 6f 62 2b 2b 29  ( (c=(*(zGlob++)
1c330 29 29 20 3d 3d 20 27 2a 27 20 7c 7c 20 63 3d 3d  )) == '*' || c==
1c340 27 3f 27 20 29 7b 0a 20 20 20 20 20 20 20 20 69  '?' ){.        i
1c350 66 28 20 63 3d 3d 27 3f 27 20 26 26 20 28 2a 28  f( c=='?' && (*(
1c360 7a 2b 2b 29 29 3d 3d 30 20 29 20 72 65 74 75 72  z++))==0 ) retur
1c370 6e 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  n 0;.      }.   
1c380 20 20 20 69 66 28 20 63 3d 3d 30 20 29 7b 0a 20     if( c==0 ){. 
1c390 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
1c3a0 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
1c3b0 20 63 3d 3d 27 5b 27 20 29 7b 0a 20 20 20 20 20   c=='[' ){.     
1c3c0 20 20 20 77 68 69 6c 65 28 20 2a 7a 20 26 26 20     while( *z && 
1c3d0 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28 7a 47  testcase_glob(zG
1c3e0 6c 6f 62 2d 31 2c 7a 29 3d 3d 30 20 29 7b 0a 20  lob-1,z)==0 ){. 
1c3f0 20 20 20 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20           z++;.  
1c400 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1c410 72 65 74 75 72 6e 20 28 2a 7a 29 21 3d 30 3b 0a  return (*z)!=0;.
1c420 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 77 68        }.      wh
1c430 69 6c 65 28 20 28 63 32 20 3d 20 28 2a 28 7a 2b  ile( (c2 = (*(z+
1c440 2b 29 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  +)))!=0 ){.     
1c450 20 20 20 77 68 69 6c 65 28 20 63 32 21 3d 63 20     while( c2!=c 
1c460 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63 32 20  ){.          c2 
1c470 3d 20 2a 28 7a 2b 2b 29 3b 0a 20 20 20 20 20 20  = *(z++);.      
1c480 20 20 20 20 69 66 28 20 63 32 3d 3d 30 20 29 20      if( c2==0 ) 
1c490 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20  return 0;.      
1c4a0 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
1c4b0 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28 7a 47  testcase_glob(zG
1c4c0 6c 6f 62 2c 7a 29 20 29 20 72 65 74 75 72 6e 20  lob,z) ) return 
1c4d0 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  1;.      }.     
1c4e0 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d   return 0;.    }
1c4f0 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 3f 27 20  else if( c=='?' 
1c500 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 2a 28  ){.      if( (*(
1c510 7a 2b 2b 29 29 3d 3d 30 20 29 20 72 65 74 75 72  z++))==0 ) retur
1c520 6e 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  n 0;.    }else i
1c530 66 28 20 63 3d 3d 27 5b 27 20 29 7b 0a 20 20 20  f( c=='[' ){.   
1c540 20 20 20 69 6e 74 20 70 72 69 6f 72 5f 63 20 3d     int prior_c =
1c550 20 30 3b 0a 20 20 20 20 20 20 73 65 65 6e 20 3d   0;.      seen =
1c560 20 30 3b 0a 20 20 20 20 20 20 69 6e 76 65 72 74   0;.      invert
1c570 20 3d 20 30 3b 0a 20 20 20 20 20 20 63 20 3d 20   = 0;.      c = 
1c580 2a 28 7a 2b 2b 29 3b 0a 20 20 20 20 20 20 69 66  *(z++);.      if
1c590 28 20 63 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  ( c==0 ) return 
1c5a0 30 3b 0a 20 20 20 20 20 20 63 32 20 3d 20 2a 28  0;.      c2 = *(
1c5b0 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20 20 20  zGlob++);.      
1c5c0 69 66 28 20 63 32 3d 3d 27 5e 27 20 29 7b 0a 20  if( c2=='^' ){. 
1c5d0 20 20 20 20 20 20 20 69 6e 76 65 72 74 20 3d 20         invert = 
1c5e0 31 3b 0a 20 20 20 20 20 20 20 20 63 32 20 3d 20  1;.        c2 = 
1c5f0 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20  *(zGlob++);.    
1c600 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63 32    }.      if( c2
1c610 3d 3d 27 5d 27 20 29 7b 0a 20 20 20 20 20 20 20  ==']' ){.       
1c620 20 69 66 28 20 63 3d 3d 27 5d 27 20 29 20 73 65   if( c==']' ) se
1c630 65 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  en = 1;.        
1c640 63 32 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b  c2 = *(zGlob++);
1c650 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 77  .      }.      w
1c660 68 69 6c 65 28 20 63 32 20 26 26 20 63 32 21 3d  hile( c2 && c2!=
1c670 27 5d 27 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ']' ){.        i
1c680 66 28 20 63 32 3d 3d 27 2d 27 20 26 26 20 7a 47  f( c2=='-' && zG
1c690 6c 6f 62 5b 30 5d 21 3d 27 5d 27 20 26 26 20 7a  lob[0]!=']' && z
1c6a0 47 6c 6f 62 5b 30 5d 21 3d 30 20 26 26 20 70 72  Glob[0]!=0 && pr
1c6b0 69 6f 72 5f 63 3e 30 20 29 7b 0a 20 20 20 20 20  ior_c>0 ){.     
1c6c0 20 20 20 20 20 63 32 20 3d 20 2a 28 7a 47 6c 6f       c2 = *(zGlo
1c6d0 62 2b 2b 29 3b 0a 20 20 20 20 20 20 20 20 20 20  b++);.          
1c6e0 69 66 28 20 63 3e 3d 70 72 69 6f 72 5f 63 20 26  if( c>=prior_c &
1c6f0 26 20 63 3c 3d 63 32 20 29 20 73 65 65 6e 20 3d  & c<=c2 ) seen =
1c700 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72   1;.          pr
1c710 69 6f 72 5f 63 20 3d 20 30 3b 0a 20 20 20 20 20  ior_c = 0;.     
1c720 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1c730 20 20 20 20 69 66 28 20 63 3d 3d 63 32 20 29 7b      if( c==c2 ){
1c740 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 65  .            see
1c750 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  n = 1;.         
1c760 20 7d 0a 20 20 20 20 20 20 20 20 20 20 70 72 69   }.          pri
1c770 6f 72 5f 63 20 3d 20 63 32 3b 0a 20 20 20 20 20  or_c = c2;.     
1c780 20 20 20 7d 0a 20 20 20 20 20 20 20 20 63 32 20     }.        c2 
1c790 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20  = *(zGlob++);.  
1c7a0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
1c7b0 63 32 3d 3d 30 20 7c 7c 20 28 73 65 65 6e 20 5e  c2==0 || (seen ^
1c7c0 20 69 6e 76 65 72 74 29 3d 3d 30 20 29 20 72 65   invert)==0 ) re
1c7d0 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 65 6c 73  turn 0;.    }els
1c7e0 65 20 69 66 28 20 63 3d 3d 27 23 27 20 29 7b 0a  e if( c=='#' ){.
1c7f0 20 20 20 20 20 20 69 66 28 20 28 7a 5b 30 5d 3d        if( (z[0]=
1c800 3d 27 2d 27 20 7c 7c 20 7a 5b 30 5d 3d 3d 27 2b  ='-' || z[0]=='+
1c810 27 29 20 26 26 20 49 73 44 69 67 69 74 28 7a 5b  ') && IsDigit(z[
1c820 31 5d 29 20 29 20 7a 2b 2b 3b 0a 20 20 20 20 20  1]) ) z++;.     
1c830 20 69 66 28 20 21 49 73 44 69 67 69 74 28 7a 5b   if( !IsDigit(z[
1c840 30 5d 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  0]) ) return 0;.
1c850 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 20        z++;.     
1c860 20 77 68 69 6c 65 28 20 49 73 44 69 67 69 74 28   while( IsDigit(
1c870 7a 5b 30 5d 29 20 29 7b 20 7a 2b 2b 3b 20 7d 0a  z[0]) ){ z++; }.
1c880 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1c890 20 69 66 28 20 63 21 3d 28 2a 28 7a 2b 2b 29 29   if( c!=(*(z++))
1c8a0 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20   ) return 0;.   
1c8b0 20 7d 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28 20   }.  }.  while( 
1c8c0 49 73 53 70 61 63 65 28 2a 7a 29 20 29 7b 20 7a  IsSpace(*z) ){ z
1c8d0 2b 2b 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20 2a  ++; }.  return *
1c8e0 7a 3d 3d 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  z==0;.}.../*.** 
1c8f0 43 6f 6d 70 61 72 65 20 74 68 65 20 73 74 72 69  Compare the stri
1c900 6e 67 20 61 73 20 61 20 63 6f 6d 6d 61 6e 64 2d  ng as a command-
1c910 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 77 69 74 68  line option with
1c920 20 65 69 74 68 65 72 20 6f 6e 65 20 6f 72 20 74   either one or t
1c930 77 6f 0a 2a 2a 20 69 6e 69 74 69 61 6c 20 22 2d  wo.** initial "-
1c940 22 20 63 68 61 72 61 63 74 65 72 73 2e 0a 2a 2f  " characters..*/
1c950 0a 73 74 61 74 69 63 20 69 6e 74 20 6f 70 74 69  .static int opti
1c960 6f 6e 4d 61 74 63 68 28 63 6f 6e 73 74 20 63 68  onMatch(const ch
1c970 61 72 20 2a 7a 53 74 72 2c 20 63 6f 6e 73 74 20  ar *zStr, const 
1c980 63 68 61 72 20 2a 7a 4f 70 74 29 7b 0a 20 20 69  char *zOpt){.  i
1c990 66 28 20 7a 53 74 72 5b 30 5d 21 3d 27 2d 27 20  f( zStr[0]!='-' 
1c9a0 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7a 53  ) return 0;.  zS
1c9b0 74 72 2b 2b 3b 0a 20 20 69 66 28 20 7a 53 74 72  tr++;.  if( zStr
1c9c0 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 53 74 72 2b  [0]=='-' ) zStr+
1c9d0 2b 3b 0a 20 20 72 65 74 75 72 6e 20 73 74 72 63  +;.  return strc
1c9e0 6d 70 28 7a 53 74 72 2c 20 7a 4f 70 74 29 3d 3d  mp(zStr, zOpt)==
1c9f0 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 6c 65  0;.}../*.** Dele
1ca00 74 65 20 61 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e  te a file..*/.in
1ca10 74 20 73 68 65 6c 6c 44 65 6c 65 74 65 46 69 6c  t shellDeleteFil
1ca20 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46  e(const char *zF
1ca30 69 6c 65 6e 61 6d 65 29 7b 0a 20 20 69 6e 74 20  ilename){.  int 
1ca40 72 63 3b 0a 23 69 66 64 65 66 20 5f 57 49 4e 33  rc;.#ifdef _WIN3
1ca50 32 0a 20 20 77 63 68 61 72 5f 74 20 2a 7a 20 3d  2.  wchar_t *z =
1ca60 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75   sqlite3_win32_u
1ca70 74 66 38 5f 74 6f 5f 75 6e 69 63 6f 64 65 28 7a  tf8_to_unicode(z
1ca80 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 72 63 20  Filename);.  rc 
1ca90 3d 20 5f 77 75 6e 6c 69 6e 6b 28 7a 29 3b 0a 20  = _wunlink(z);. 
1caa0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29   sqlite3_free(z)
1cab0 3b 0a 23 65 6c 73 65 0a 20 20 72 63 20 3d 20 75  ;.#else.  rc = u
1cac0 6e 6c 69 6e 6b 28 7a 46 69 6c 65 6e 61 6d 65 29  nlink(zFilename)
1cad0 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  ;.#endif.  retur
1cae0 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  n rc;.}.../*.** 
1caf0 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  The implementati
1cb00 6f 6e 20 6f 66 20 53 51 4c 20 73 63 61 6c 61 72  on of SQL scalar
1cb10 20 66 75 6e 63 74 69 6f 6e 20 66 6b 65 79 5f 63   function fkey_c
1cb20 6f 6c 6c 61 74 65 5f 63 6c 61 75 73 65 28 29 2c  ollate_clause(),
1cb30 20 75 73 65 64 0a 2a 2a 20 62 79 20 74 68 65 20   used.** by the 
1cb40 22 2e 6c 69 6e 74 20 66 6b 65 79 2d 69 6e 64 65  ".lint fkey-inde
1cb50 78 65 73 22 20 63 6f 6d 6d 61 6e 64 2e 20 54 68  xes" command. Th
1cb60 69 73 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69  is scalar functi
1cb70 6f 6e 20 69 73 20 61 6c 77 61 79 73 0a 2a 2a 20  on is always.** 
1cb80 63 61 6c 6c 65 64 20 77 69 74 68 20 66 6f 75 72  called with four
1cb90 20 61 72 67 75 6d 65 6e 74 73 20 2d 20 74 68 65   arguments - the
1cba0 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20 6e 61   parent table na
1cbb0 6d 65 2c 20 74 68 65 20 70 61 72 65 6e 74 20 63  me, the parent c
1cbc0 6f 6c 75 6d 6e 20 6e 61 6d 65 2c 0a 2a 2a 20 74  olumn name,.** t
1cbd0 68 65 20 63 68 69 6c 64 20 74 61 62 6c 65 20 6e  he child table n
1cbe0 61 6d 65 20 61 6e 64 20 74 68 65 20 63 68 69 6c  ame and the chil
1cbf0 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 2a  d column name..*
1cc00 2a 0a 2a 2a 20 20 20 66 6b 65 79 5f 63 6f 6c 6c  *.**   fkey_coll
1cc10 61 74 65 5f 63 6c 61 75 73 65 28 27 70 61 72 65  ate_clause('pare
1cc20 6e 74 2d 74 61 62 27 2c 20 27 70 61 72 65 6e 74  nt-tab', 'parent
1cc30 2d 63 6f 6c 27 2c 20 27 63 68 69 6c 64 2d 74 61  -col', 'child-ta
1cc40 62 27 2c 20 27 63 68 69 6c 64 2d 63 6f 6c 27 29  b', 'child-col')
1cc50 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
1cc60 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61   of the named ta
1cc70 62 6c 65 73 20 6f 72 20 63 6f 6c 75 6d 6e 73 20  bles or columns 
1cc80 64 6f 20 6e 6f 74 20 65 78 69 73 74 2c 20 74 68  do not exist, th
1cc90 69 73 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 72  is function.** r
1cca0 65 74 75 72 6e 73 20 61 6e 20 65 6d 70 74 79 20  eturns an empty 
1ccb0 73 74 72 69 6e 67 2e 20 41 6e 20 65 6d 70 74 79  string. An empty
1ccc0 20 73 74 72 69 6e 67 20 69 73 20 61 6c 73 6f 20   string is also 
1ccd0 72 65 74 75 72 6e 65 64 20 69 66 20 62 6f 74 68  returned if both
1cce0 20 74 61 62 6c 65 73 0a 2a 2a 20 61 6e 64 20 63   tables.** and c
1ccf0 6f 6c 75 6d 6e 73 20 65 78 69 73 74 20 62 75 74  olumns exist but
1cd00 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 64   have the same d
1cd10 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
1cd20 20 73 65 71 75 65 6e 63 65 2e 20 4f 72 2c 0a 2a   sequence. Or,.*
1cd30 2a 20 69 66 20 62 6f 74 68 20 65 78 69 73 74 20  * if both exist 
1cd40 62 75 74 20 74 68 65 20 64 65 66 61 75 6c 74 20  but the default 
1cd50 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
1cd60 63 65 73 20 61 72 65 20 64 69 66 66 65 72 65 6e  ces are differen
1cd70 74 2c 20 74 68 69 73 0a 2a 2a 20 66 75 6e 63 74  t, this.** funct
1cd80 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
1cd90 73 74 72 69 6e 67 20 22 20 43 4f 4c 4c 41 54 45  string " COLLATE
1cda0 20 3c 70 61 72 65 6e 74 2d 63 6f 6c 6c 61 74 69   <parent-collati
1cdb0 6f 6e 3e 22 2c 20 77 68 65 72 65 0a 2a 2a 20 3c  on>", where.** <
1cdc0 70 61 72 65 6e 74 2d 63 6f 6c 6c 61 74 69 6f 6e  parent-collation
1cdd0 3e 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  > is the default
1cde0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
1cdf0 6e 63 65 20 6f 66 20 74 68 65 20 70 61 72 65 6e  nce of the paren
1ce00 74 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 73 74 61  t column..*/.sta
1ce10 74 69 63 20 76 6f 69 64 20 73 68 65 6c 6c 46 6b  tic void shellFk
1ce20 65 79 43 6f 6c 6c 61 74 65 43 6c 61 75 73 65 28  eyCollateClause(
1ce30 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
1ce40 78 74 20 2a 70 43 74 78 2c 0a 20 20 69 6e 74 20  xt *pCtx,.  int 
1ce50 6e 56 61 6c 2c 0a 20 20 73 71 6c 69 74 65 33 5f  nVal,.  sqlite3_
1ce60 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 0a 29 7b  value **apVal.){
1ce70 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
1ce80 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
1ce90 5f 64 62 5f 68 61 6e 64 6c 65 28 70 43 74 78 29  _db_handle(pCtx)
1cea0 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
1ceb0 7a 50 61 72 65 6e 74 3b 0a 20 20 63 6f 6e 73 74  zParent;.  const
1cec0 20 63 68 61 72 20 2a 7a 50 61 72 65 6e 74 43 6f   char *zParentCo
1ced0 6c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  l;.  const char 
1cee0 2a 7a 50 61 72 65 6e 74 53 65 71 3b 0a 20 20 63  *zParentSeq;.  c
1cef0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 68 69 6c  onst char *zChil
1cf00 64 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  d;.  const char 
1cf10 2a 7a 43 68 69 6c 64 43 6f 6c 3b 0a 20 20 63 6f  *zChildCol;.  co
1cf20 6e 73 74 20 63 68 61 72 20 2a 7a 43 68 69 6c 64  nst char *zChild
1cf30 53 65 71 20 3d 20 30 3b 20 20 2f 2a 20 49 6e 69  Seq = 0;  /* Ini
1cf40 74 69 61 6c 69 7a 65 20 74 6f 20 61 76 6f 69 64  tialize to avoid
1cf50 20 66 61 6c 73 65 2d 70 6f 73 69 74 69 76 65 20   false-positive 
1cf60 77 61 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  warning */.  int
1cf70 20 72 63 3b 0a 0a 20 20 61 73 73 65 72 74 28 20   rc;..  assert( 
1cf80 6e 56 61 6c 3d 3d 34 20 29 3b 0a 20 20 7a 50 61  nVal==4 );.  zPa
1cf90 72 65 6e 74 20 3d 20 28 63 6f 6e 73 74 20 63 68  rent = (const ch
1cfa0 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
1cfb0 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 30 5d 29  e_text(apVal[0])
1cfc0 3b 0a 20 20 7a 50 61 72 65 6e 74 43 6f 6c 20 3d  ;.  zParentCol =
1cfd0 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
1cfe0 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
1cff0 28 61 70 56 61 6c 5b 31 5d 29 3b 0a 20 20 7a 43  (apVal[1]);.  zC
1d000 68 69 6c 64 20 3d 20 28 63 6f 6e 73 74 20 63 68  hild = (const ch
1d010 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
1d020 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 32 5d 29  e_text(apVal[2])
1d030 3b 0a 20 20 7a 43 68 69 6c 64 43 6f 6c 20 3d 20  ;.  zChildCol = 
1d040 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
1d050 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
1d060 61 70 56 61 6c 5b 33 5d 29 3b 0a 0a 20 20 73 71  apVal[3]);..  sq
1d070 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
1d080 74 28 70 43 74 78 2c 20 22 22 2c 20 2d 31 2c 20  t(pCtx, "", -1, 
1d090 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
1d0a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 74    rc = sqlite3_t
1d0b0 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61  able_column_meta
1d0c0 64 61 74 61 28 0a 20 20 20 20 20 20 64 62 2c 20  data(.      db, 
1d0d0 22 6d 61 69 6e 22 2c 20 7a 50 61 72 65 6e 74 2c  "main", zParent,
1d0e0 20 7a 50 61 72 65 6e 74 43 6f 6c 2c 20 30 2c 20   zParentCol, 0, 
1d0f0 26 7a 50 61 72 65 6e 74 53 65 71 2c 20 30 2c 20  &zParentSeq, 0, 
1d100 30 2c 20 30 0a 20 20 29 3b 0a 20 20 69 66 28 20  0, 0.  );.  if( 
1d110 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1d120 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1d130 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d  3_table_column_m
1d140 65 74 61 64 61 74 61 28 0a 20 20 20 20 20 20 20  etadata(.       
1d150 20 64 62 2c 20 22 6d 61 69 6e 22 2c 20 7a 43 68   db, "main", zCh
1d160 69 6c 64 2c 20 7a 43 68 69 6c 64 43 6f 6c 2c 20  ild, zChildCol, 
1d170 30 2c 20 26 7a 43 68 69 6c 64 53 65 71 2c 20 30  0, &zChildSeq, 0
1d180 2c 20 30 2c 20 30 0a 20 20 20 20 29 3b 0a 20 20  , 0, 0.    );.  
1d190 7d 0a 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  }..  if( rc==SQL
1d1a0 49 54 45 5f 4f 4b 20 26 26 20 73 71 6c 69 74 65  ITE_OK && sqlite
1d1b0 33 5f 73 74 72 69 63 6d 70 28 7a 50 61 72 65 6e  3_stricmp(zParen
1d1c0 74 53 65 71 2c 20 7a 43 68 69 6c 64 53 65 71 29  tSeq, zChildSeq)
1d1d0 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 20   ){.    char *z 
1d1e0 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
1d1f0 66 28 22 20 43 4f 4c 4c 41 54 45 20 25 73 22 2c  f(" COLLATE %s",
1d200 20 7a 50 61 72 65 6e 74 53 65 71 29 3b 0a 20 20   zParentSeq);.  
1d210 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
1d220 5f 74 65 78 74 28 70 43 74 78 2c 20 7a 2c 20 2d  _text(pCtx, z, -
1d230 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  1, SQLITE_TRANSI
1d240 45 4e 54 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  ENT);.    sqlite
1d250 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 7d 0a 7d  3_free(z);.  }.}
1d260 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6d 70  .../*.** The imp
1d270 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 64  lementation of d
1d280 6f 74 2d 63 6f 6d 6d 61 6e 64 20 22 2e 6c 69 6e  ot-command ".lin
1d290 74 20 66 6b 65 79 2d 69 6e 64 65 78 65 73 22 2e  t fkey-indexes".
1d2a0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 6c  .*/.static int l
1d2b0 69 6e 74 46 6b 65 79 49 6e 64 65 78 65 73 28 0a  intFkeyIndexes(.
1d2c0 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 53    ShellState *pS
1d2d0 74 61 74 65 2c 20 20 20 20 20 20 20 20 20 20 20  tate,           
1d2e0 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 73 68 65    /* Current she
1d2f0 6c 6c 20 74 6f 6f 6c 20 73 74 61 74 65 20 2a 2f  ll tool state */
1d300 0a 20 20 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c  .  char **azArg,
1d310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d320 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 61     /* Array of a
1d330 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20  rguments passed 
1d340 74 6f 20 64 6f 74 20 63 6f 6d 6d 61 6e 64 20 2a  to dot command *
1d350 2f 0a 20 20 69 6e 74 20 6e 41 72 67 20 20 20 20  /.  int nArg    
1d360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d370 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1d380 20 65 6e 74 72 69 65 73 20 69 6e 20 61 7a 41 72   entries in azAr
1d390 67 5b 5d 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69  g[] */.){.  sqli
1d3a0 74 65 33 20 2a 64 62 20 3d 20 70 53 74 61 74 65  te3 *db = pState
1d3b0 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 44  ->db;       /* D
1d3c0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 74  atabase handle t
1d3d0 6f 20 71 75 65 72 79 20 22 6d 61 69 6e 22 20 64  o query "main" d
1d3e0 62 20 6f 66 20 2a 2f 0a 20 20 46 49 4c 45 20 2a  b of */.  FILE *
1d3f0 6f 75 74 20 3d 20 70 53 74 61 74 65 2d 3e 6f 75  out = pState->ou
1d400 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72  t;        /* Str
1d410 65 61 6d 20 74 6f 20 77 72 69 74 65 20 6e 6f 6e  eam to write non
1d420 2d 65 72 72 6f 72 20 6f 75 74 70 75 74 20 74 6f  -error output to
1d430 20 2a 2f 0a 20 20 69 6e 74 20 62 56 65 72 62 6f   */.  int bVerbo
1d440 73 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  se = 0;         
1d450 20 20 20 20 20 20 2f 2a 20 49 66 20 2d 76 65 72        /* If -ver
1d460 62 6f 73 65 20 69 73 20 70 72 65 73 65 6e 74 20  bose is present 
1d470 2a 2f 0a 20 20 69 6e 74 20 62 47 72 6f 75 70 42  */.  int bGroupB
1d480 79 50 61 72 65 6e 74 20 3d 20 30 3b 20 20 20 20  yParent = 0;    
1d490 20 20 20 20 20 2f 2a 20 49 66 20 2d 67 72 6f 75       /* If -grou
1d4a0 70 62 79 70 61 72 65 6e 74 20 69 73 20 70 72 65  pbyparent is pre
1d4b0 73 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  sent */.  int i;
1d4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 20            /* To 
1d4e0 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20  iterate through 
1d4f0 61 7a 41 72 67 5b 5d 20 2a 2f 0a 20 20 63 6f 6e  azArg[] */.  con
1d500 73 74 20 63 68 61 72 20 2a 7a 49 6e 64 65 6e 74  st char *zIndent
1d510 20 3d 20 22 22 3b 20 20 20 20 20 20 20 2f 2a 20   = "";       /* 
1d520 48 6f 77 20 6d 75 63 68 20 74 6f 20 69 6e 64 65  How much to inde
1d530 6e 74 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  nt CREATE INDEX 
1d540 62 79 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  by */.  int rc; 
1d550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d560 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
1d570 6e 20 63 6f 64 65 20 2a 2f 0a 20 20 73 71 6c 69  n code */.  sqli
1d580 74 65 33 5f 73 74 6d 74 20 2a 70 53 71 6c 20 3d  te3_stmt *pSql =
1d590 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43   0;         /* C
1d5a0 6f 6d 70 69 6c 65 64 20 76 65 72 73 69 6f 6e 20  ompiled version 
1d5b0 6f 66 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  of SQL statement
1d5c0 20 62 65 6c 6f 77 20 2a 2f 0a 0a 20 20 2f 2a 0a   below */..  /*.
1d5d0 20 20 2a 2a 20 54 68 69 73 20 53 45 4c 45 43 54    ** This SELECT
1d5e0 20 73 74 61 74 65 6d 65 6e 74 20 72 65 74 75 72   statement retur
1d5f0 6e 73 20 6f 6e 65 20 72 6f 77 20 66 6f 72 20 65  ns one row for e
1d600 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ach foreign key 
1d610 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 2a 2a 20  constraint.  ** 
1d620 69 6e 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66  in the schema of
1d630 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1d640 73 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e 20 76  se. The column v
1d650 61 6c 75 65 73 20 61 72 65 3a 0a 20 20 2a 2a 0a  alues are:.  **.
1d660 20 20 2a 2a 20 30 2e 20 54 68 65 20 74 65 78 74    ** 0. The text
1d670 20 6f 66 20 61 6e 20 53 51 4c 20 73 74 61 74 65   of an SQL state
1d680 6d 65 6e 74 20 73 69 6d 69 6c 61 72 20 74 6f 3a  ment similar to:
1d690 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 20  .  **.  **      
1d6a0 22 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50  "EXPLAIN QUERY P
1d6b0 4c 41 4e 20 53 45 4c 45 43 54 20 72 6f 77 69 64  LAN SELECT rowid
1d6c0 20 46 52 4f 4d 20 63 68 69 6c 64 5f 74 61 62 6c   FROM child_tabl
1d6d0 65 20 57 48 45 52 45 20 63 68 69 6c 64 5f 6b 65  e WHERE child_ke
1d6e0 79 3d 3f 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  y=?".  **.  **  
1d6f0 20 20 54 68 69 73 20 69 73 20 74 68 65 20 73 61    This is the sa
1d700 6d 65 20 53 45 4c 45 43 54 20 74 68 61 74 20 74  me SELECT that t
1d710 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  he foreign keys 
1d720 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6e  implementation n
1d730 65 65 64 73 0a 20 20 2a 2a 20 20 20 20 74 6f 20  eeds.  **    to 
1d740 72 75 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 20 6f  run internally o
1d750 6e 20 63 68 69 6c 64 20 74 61 62 6c 65 73 2e 20  n child tables. 
1d760 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69  If there is an i
1d770 6e 64 65 78 20 74 68 61 74 20 63 61 6e 0a 20 20  ndex that can.  
1d780 2a 2a 20 20 20 20 62 65 20 75 73 65 64 20 74 6f  **    be used to
1d790 20 6f 70 74 69 6d 69 7a 65 20 74 68 69 73 20 71   optimize this q
1d7a0 75 65 72 79 2c 20 74 68 65 6e 20 69 74 20 63 61  uery, then it ca
1d7b0 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 62  n also be used b
1d7c0 79 20 74 68 65 20 46 4b 0a 20 20 2a 2a 20 20 20  y the FK.  **   
1d7d0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
1d7e0 74 6f 20 6f 70 74 69 6d 69 7a 65 20 44 45 4c 45  to optimize DELE
1d7f0 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  TE or UPDATE sta
1d800 74 65 6d 65 6e 74 73 20 6f 6e 20 74 68 65 20 70  tements on the p
1d810 61 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 74 61  arent.  **    ta
1d820 62 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 31  ble..  **.  ** 1
1d830 2e 20 41 20 47 4c 4f 42 20 70 61 74 74 65 72 6e  . A GLOB pattern
1d840 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 73 71   suitable for sq
1d850 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62 28 29 2e  lite3_strglob().
1d860 20 49 66 20 74 68 65 20 70 6c 61 6e 20 6f 75 74   If the plan out
1d870 70 75 74 20 62 79 0a 20 20 2a 2a 20 20 20 20 74  put by.  **    t
1d880 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  he EXPLAIN QUERY
1d890 20 50 4c 41 4e 20 63 6f 6d 6d 61 6e 64 20 6d 61   PLAN command ma
1d8a0 74 63 68 65 73 20 74 68 69 73 20 70 61 74 74 65  tches this patte
1d8b0 72 6e 2c 20 74 68 65 6e 20 74 68 65 20 73 63 68  rn, then the sch
1d8c0 65 6d 61 0a 20 20 2a 2a 20 20 20 20 63 6f 6e 74  ema.  **    cont
1d8d0 61 69 6e 73 20 61 6e 20 69 6e 64 65 78 20 74 68  ains an index th
1d8e0 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  at can be used t
1d8f0 6f 20 6f 70 74 69 6d 69 7a 65 20 74 68 65 20 71  o optimize the q
1d900 75 65 72 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  uery..  **.  ** 
1d910 32 2e 20 48 75 6d 61 6e 20 72 65 61 64 61 62 6c  2. Human readabl
1d920 65 20 74 65 78 74 20 74 68 61 74 20 64 65 73 63  e text that desc
1d930 72 69 62 65 73 20 74 68 65 20 63 68 69 6c 64 20  ribes the child 
1d940 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
1d950 73 2e 20 65 2e 67 2e 0a 20 20 2a 2a 0a 20 20 2a  s. e.g..  **.  *
1d960 2a 20 20 20 20 20 20 20 22 63 68 69 6c 64 5f 74  *       "child_t
1d970 61 62 6c 65 28 63 68 69 6c 64 5f 6b 65 79 31 2c  able(child_key1,
1d980 20 63 68 69 6c 64 5f 6b 65 79 32 29 22 0a 20 20   child_key2)".  
1d990 2a 2a 0a 20 20 2a 2a 20 33 2e 20 48 75 6d 61 6e  **.  ** 3. Human
1d9a0 20 72 65 61 64 61 62 6c 65 20 74 65 78 74 20 74   readable text t
1d9b0 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
1d9c0 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20 61  e parent table a
1d9d0 6e 64 20 63 6f 6c 75 6d 6e 73 2e 20 65 2e 67 2e  nd columns. e.g.
1d9e0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 20  .  **.  **      
1d9f0 20 22 70 61 72 65 6e 74 5f 74 61 62 6c 65 28 70   "parent_table(p
1da00 61 72 65 6e 74 5f 6b 65 79 31 2c 20 70 61 72 65  arent_key1, pare
1da10 6e 74 5f 6b 65 79 32 29 22 0a 20 20 2a 2a 0a 20  nt_key2)".  **. 
1da20 20 2a 2a 20 34 2e 20 41 20 66 75 6c 6c 20 43 52   ** 4. A full CR
1da30 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65  EATE INDEX state
1da40 6d 65 6e 74 20 66 6f 72 20 61 6e 20 69 6e 64 65  ment for an inde
1da50 78 20 74 68 61 74 20 63 6f 75 6c 64 20 62 65 20  x that could be 
1da60 75 73 65 64 20 74 6f 0a 20 20 2a 2a 20 20 20 20  used to.  **    
1da70 6f 70 74 69 6d 69 7a 65 20 44 45 4c 45 54 45 20  optimize DELETE 
1da80 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
1da90 65 6e 74 73 20 6f 6e 20 74 68 65 20 70 61 72 65  ents on the pare
1daa0 6e 74 20 74 61 62 6c 65 2e 20 65 2e 67 2e 0a 20  nt table. e.g.. 
1dab0 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 20 20 22   **.  **       "
1dac0 43 52 45 41 54 45 20 49 4e 44 45 58 20 63 68 69  CREATE INDEX chi
1dad0 6c 64 5f 74 61 62 6c 65 5f 63 68 69 6c 64 5f 6b  ld_table_child_k
1dae0 65 79 20 4f 4e 20 63 68 69 6c 64 5f 74 61 62 6c  ey ON child_tabl
1daf0 65 28 63 68 69 6c 64 5f 6b 65 79 29 22 0a 20 20  e(child_key)".  
1db00 2a 2a 0a 20 20 2a 2a 20 35 2e 20 54 68 65 20 6e  **.  ** 5. The n
1db10 61 6d 65 20 6f 66 20 74 68 65 20 70 61 72 65 6e  ame of the paren
1db20 74 20 74 61 62 6c 65 2e 0a 20 20 2a 2a 0a 20 20  t table..  **.  
1db30 2a 2a 20 54 68 65 73 65 20 73 69 78 20 76 61 6c  ** These six val
1db40 75 65 73 20 61 72 65 20 75 73 65 64 20 62 79 20  ues are used by 
1db50 74 68 65 20 43 20 6c 6f 67 69 63 20 62 65 6c 6f  the C logic belo
1db60 77 20 74 6f 20 67 65 6e 65 72 61 74 65 20 74 68  w to generate th
1db70 65 20 72 65 70 6f 72 74 2e 0a 20 20 2a 2f 0a 20  e report..  */. 
1db80 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71   const char *zSq
1db90 6c 20 3d 0a 20 20 22 53 45 4c 45 43 54 20 22 0a  l =.  "SELECT ".
1dba0 20 20 20 20 22 20 20 20 20 20 27 45 58 50 4c 41      "     'EXPLA
1dbb0 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 53 45  IN QUERY PLAN SE
1dbc0 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20  LECT rowid FROM 
1dbd0 27 20 7c 7c 20 71 75 6f 74 65 28 73 2e 6e 61 6d  ' || quote(s.nam
1dbe0 65 29 20 7c 7c 20 27 20 57 48 45 52 45 20 27 22  e) || ' WHERE '"
1dbf0 0a 20 20 20 20 22 20 20 7c 7c 20 67 72 6f 75 70  .    "  || group
1dc00 5f 63 6f 6e 63 61 74 28 71 75 6f 74 65 28 73 2e  _concat(quote(s.
1dc10 6e 61 6d 65 29 20 7c 7c 20 27 2e 27 20 7c 7c 20  name) || '.' || 
1dc20 71 75 6f 74 65 28 66 2e 5b 66 72 6f 6d 5d 29 20  quote(f.[from]) 
1dc30 7c 7c 20 27 3d 3f 27 20 22 0a 20 20 20 20 22 20  || '=?' ".    " 
1dc40 20 7c 7c 20 66 6b 65 79 5f 63 6f 6c 6c 61 74 65   || fkey_collate
1dc50 5f 63 6c 61 75 73 65 28 22 0a 20 20 20 20 22 20  _clause(".    " 
1dc60 20 20 20 20 20 20 66 2e 5b 74 61 62 6c 65 5d 2c        f.[table],
1dc70 20 43 4f 41 4c 45 53 43 45 28 66 2e 5b 74 6f 5d   COALESCE(f.[to]
1dc80 2c 20 70 2e 5b 6e 61 6d 65 5d 29 2c 20 73 2e 6e  , p.[name]), s.n
1dc90 61 6d 65 2c 20 66 2e 5b 66 72 6f 6d 5d 29 2c 27  ame, f.[from]),'
1dca0 20 41 4e 44 20 27 29 22 0a 20 20 20 20 22 2c 20   AND ')".    ", 
1dcb0 22 0a 20 20 20 20 22 20 20 20 20 20 27 53 45 41  ".    "     'SEA
1dcc0 52 43 48 20 54 41 42 4c 45 20 27 20 7c 7c 20 73  RCH TABLE ' || s
1dcd0 2e 6e 61 6d 65 20 7c 7c 20 27 20 55 53 49 4e 47  .name || ' USING
1dce0 20 43 4f 56 45 52 49 4e 47 20 49 4e 44 45 58 2a   COVERING INDEX*
1dcf0 28 27 22 0a 20 20 20 20 22 20 20 7c 7c 20 67 72  ('".    "  || gr
1dd00 6f 75 70 5f 63 6f 6e 63 61 74 28 27 2a 3d 3f 27  oup_concat('*=?'
1dd10 2c 20 27 20 41 4e 44 20 27 29 20 7c 7c 20 27 29  , ' AND ') || ')
1dd20 27 22 0a 20 20 20 20 22 2c 20 22 0a 20 20 20 20  '".    ", ".    
1dd30 22 20 20 20 20 20 73 2e 6e 61 6d 65 20 20 7c 7c  "     s.name  ||
1dd40 20 27 28 27 20 7c 7c 20 67 72 6f 75 70 5f 63 6f   '(' || group_co
1dd50 6e 63 61 74 28 66 2e 5b 66 72 6f 6d 5d 2c 20 20  ncat(f.[from],  
1dd60 27 2c 20 27 29 20 7c 7c 20 27 29 27 22 0a 20 20  ', ') || ')'".  
1dd70 20 20 22 2c 20 22 0a 20 20 20 20 22 20 20 20 20    ", ".    "    
1dd80 20 66 2e 5b 74 61 62 6c 65 5d 20 7c 7c 20 27 28   f.[table] || '(
1dd90 27 20 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61  ' || group_conca
1dda0 74 28 43 4f 41 4c 45 53 43 45 28 66 2e 5b 74 6f  t(COALESCE(f.[to
1ddb0 5d 2c 20 70 2e 5b 6e 61 6d 65 5d 29 29 20 7c 7c  ], p.[name])) ||
1ddc0 20 27 29 27 22 0a 20 20 20 20 22 2c 20 22 0a 20   ')'".    ", ". 
1ddd0 20 20 20 22 20 20 20 20 20 27 43 52 45 41 54 45     "     'CREATE
1dde0 20 49 4e 44 45 58 20 27 20 7c 7c 20 71 75 6f 74   INDEX ' || quot
1ddf0 65 28 73 2e 6e 61 6d 65 20 7c 7c 27 5f 27 7c 7c  e(s.name ||'_'||
1de00 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 66 2e   group_concat(f.
1de10 5b 66 72 6f 6d 5d 2c 20 27 5f 27 29 29 22 0a 20  [from], '_'))". 
1de20 20 20 20 22 20 20 7c 7c 20 27 20 4f 4e 20 27 20     "  || ' ON ' 
1de30 7c 7c 20 71 75 6f 74 65 28 73 2e 6e 61 6d 65 29  || quote(s.name)
1de40 20 7c 7c 20 27 28 27 22 0a 20 20 20 20 22 20 20   || '('".    "  
1de50 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  || group_concat(
1de60 71 75 6f 74 65 28 66 2e 5b 66 72 6f 6d 5d 29 20  quote(f.[from]) 
1de70 7c 7c 22 0a 20 20 20 20 22 20 20 20 20 20 20 20  ||".    "       
1de80 20 66 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c   fkey_collate_cl
1de90 61 75 73 65 28 22 0a 20 20 20 20 22 20 20 20 20  ause(".    "    
1dea0 20 20 20 20 20 20 66 2e 5b 74 61 62 6c 65 5d 2c        f.[table],
1deb0 20 43 4f 41 4c 45 53 43 45 28 66 2e 5b 74 6f 5d   COALESCE(f.[to]
1dec0 2c 20 70 2e 5b 6e 61 6d 65 5d 29 2c 20 73 2e 6e  , p.[name]), s.n
1ded0 61 6d 65 2c 20 66 2e 5b 66 72 6f 6d 5d 29 2c 20  ame, f.[from]), 
1dee0 27 2c 20 27 29 22 0a 20 20 20 20 22 20 20 7c 7c  ', ')".    "  ||
1def0 20 27 29 3b 27 22 0a 20 20 20 20 22 2c 20 22 0a   ');'".    ", ".
1df00 20 20 20 20 22 20 20 20 20 20 66 2e 5b 74 61 62      "     f.[tab
1df10 6c 65 5d 20 22 0a 20 20 20 20 22 46 52 4f 4d 20  le] ".    "FROM 
1df20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 41 53  sqlite_master AS
1df30 20 73 2c 20 70 72 61 67 6d 61 5f 66 6f 72 65 69   s, pragma_forei
1df40 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 73 2e 6e 61  gn_key_list(s.na
1df50 6d 65 29 20 41 53 20 66 20 22 0a 20 20 20 20 22  me) AS f ".    "
1df60 4c 45 46 54 20 4a 4f 49 4e 20 70 72 61 67 6d 61  LEFT JOIN pragma
1df70 5f 74 61 62 6c 65 5f 69 6e 66 6f 20 41 53 20 70  _table_info AS p
1df80 20 4f 4e 20 28 70 6b 2d 31 3d 73 65 71 20 41 4e   ON (pk-1=seq AN
1df90 44 20 70 2e 61 72 67 3d 66 2e 5b 74 61 62 6c 65  D p.arg=f.[table
1dfa0 5d 29 20 22 0a 20 20 20 20 22 47 52 4f 55 50 20  ]) ".    "GROUP 
1dfb0 42 59 20 73 2e 6e 61 6d 65 2c 20 66 2e 69 64 20  BY s.name, f.id 
1dfc0 22 0a 20 20 20 20 22 4f 52 44 45 52 20 42 59 20  ".    "ORDER BY 
1dfd0 28 43 41 53 45 20 57 48 45 4e 20 3f 20 54 48 45  (CASE WHEN ? THE
1dfe0 4e 20 66 2e 5b 74 61 62 6c 65 5d 20 45 4c 53 45  N f.[table] ELSE
1dff0 20 73 2e 6e 61 6d 65 20 45 4e 44 29 22 0a 20 20   s.name END)".  
1e000 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
1e010 7a 47 6c 6f 62 49 50 4b 20 3d 20 22 53 45 41 52  zGlobIPK = "SEAR
1e020 43 48 20 54 41 42 4c 45 20 2a 20 55 53 49 4e 47  CH TABLE * USING
1e030 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
1e040 20 4b 45 59 20 28 72 6f 77 69 64 3d 3f 29 22 3b   KEY (rowid=?)";
1e050 0a 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 6e  ..  for(i=2; i<n
1e060 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  Arg; i++){.    i
1e070 6e 74 20 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c  nt n = (int)strl
1e080 65 6e 28 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20  en(azArg[i]);.  
1e090 20 20 69 66 28 20 6e 3e 31 20 26 26 20 73 71 6c    if( n>1 && sql
1e0a0 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 28 22 2d  ite3_strnicmp("-
1e0b0 76 65 72 62 6f 73 65 22 2c 20 61 7a 41 72 67 5b  verbose", azArg[
1e0c0 69 5d 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  i], n)==0 ){.   
1e0d0 20 20 20 62 56 65 72 62 6f 73 65 20 3d 20 31 3b     bVerbose = 1;
1e0e0 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20  .    }.    else 
1e0f0 69 66 28 20 6e 3e 31 20 26 26 20 73 71 6c 69 74  if( n>1 && sqlit
1e100 65 33 5f 73 74 72 6e 69 63 6d 70 28 22 2d 67 72  e3_strnicmp("-gr
1e110 6f 75 70 62 79 70 61 72 65 6e 74 22 2c 20 61 7a  oupbyparent", az
1e120 41 72 67 5b 69 5d 2c 20 6e 29 3d 3d 30 20 29 7b  Arg[i], n)==0 ){
1e130 0a 20 20 20 20 20 20 62 47 72 6f 75 70 42 79 50  .      bGroupByP
1e140 61 72 65 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20  arent = 1;.     
1e150 20 7a 49 6e 64 65 6e 74 20 3d 20 22 20 20 20 20   zIndent = "    
1e160 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73  ";.    }.    els
1e170 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  e{.      raw_pri
1e180 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
1e190 67 65 3a 20 25 73 20 25 73 20 3f 2d 76 65 72 62  ge: %s %s ?-verb
1e1a0 6f 73 65 3f 20 3f 2d 67 72 6f 75 70 62 79 70 61  ose? ?-groupbypa
1e1b0 72 65 6e 74 3f 5c 6e 22 2c 0a 20 20 20 20 20 20  rent?\n",.      
1e1c0 20 20 20 20 61 7a 41 72 67 5b 30 5d 2c 20 61 7a      azArg[0], az
1e1d0 41 72 67 5b 31 5d 0a 20 20 20 20 20 20 29 3b 0a  Arg[1].      );.
1e1e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
1e1f0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
1e200 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73  .  }..  /* Regis
1e210 74 65 72 20 74 68 65 20 66 6b 65 79 5f 63 6f 6c  ter the fkey_col
1e220 6c 61 74 65 5f 63 6c 61 75 73 65 28 29 20 53 51  late_clause() SQ
1e230 4c 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  L function */.  
1e240 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
1e250 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
1e260 20 22 66 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63   "fkey_collate_c
1e270 6c 61 75 73 65 22 2c 20 34 2c 20 53 51 4c 49 54  lause", 4, SQLIT
1e280 45 5f 55 54 46 38 2c 0a 20 20 20 20 20 20 30 2c  E_UTF8,.      0,
1e290 20 73 68 65 6c 6c 46 6b 65 79 43 6f 6c 6c 61 74   shellFkeyCollat
1e2a0 65 43 6c 61 75 73 65 2c 20 30 2c 20 30 0a 20 20  eClause, 0, 0.  
1e2b0 29 3b 0a 0a 0a 20 20 69 66 28 20 72 63 3d 3d 53  );...  if( rc==S
1e2c0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1e2d0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
1e2e0 70 61 72 65 5f 76 32 28 64 62 2c 20 7a 53 71 6c  pare_v2(db, zSql
1e2f0 2c 20 2d 31 2c 20 26 70 53 71 6c 2c 20 30 29 3b  , -1, &pSql, 0);
1e300 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53  .  }.  if( rc==S
1e310 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1e320 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
1e330 28 70 53 71 6c 2c 20 31 2c 20 62 47 72 6f 75 70  (pSql, 1, bGroup
1e340 42 79 50 61 72 65 6e 74 29 3b 0a 20 20 7d 0a 0a  ByParent);.  }..
1e350 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1e360 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 6e 74 20 72  _OK ){.    int r
1e370 63 32 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 50  c2;.    char *zP
1e380 72 65 76 20 3d 20 30 3b 0a 20 20 20 20 77 68 69  rev = 0;.    whi
1e390 6c 65 28 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d  le( SQLITE_ROW==
1e3a0 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 71  sqlite3_step(pSq
1e3b0 6c 29 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  l) ){.      int 
1e3c0 72 65 73 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20  res = -1;.      
1e3d0 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 45  sqlite3_stmt *pE
1e3e0 78 70 6c 61 69 6e 20 3d 20 30 3b 0a 20 20 20 20  xplain = 0;.    
1e3f0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
1e400 51 50 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  QP = (const char
1e410 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
1e420 5f 74 65 78 74 28 70 53 71 6c 2c 20 30 29 3b 0a  _text(pSql, 0);.
1e430 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
1e440 20 2a 7a 47 6c 6f 62 20 3d 20 28 63 6f 6e 73 74   *zGlob = (const
1e450 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63   char*)sqlite3_c
1e460 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c  olumn_text(pSql,
1e470 20 31 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74   1);.      const
1e480 20 63 68 61 72 20 2a 7a 46 72 6f 6d 20 3d 20 28   char *zFrom = (
1e490 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
1e4a0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
1e4b0 70 53 71 6c 2c 20 32 29 3b 0a 20 20 20 20 20 20  pSql, 2);.      
1e4c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 72  const char *zTar
1e4d0 67 65 74 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  get = (const cha
1e4e0 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  r*)sqlite3_colum
1e4f0 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20 33 29 3b  n_text(pSql, 3);
1e500 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
1e510 72 20 2a 7a 43 49 20 3d 20 28 63 6f 6e 73 74 20  r *zCI = (const 
1e520 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f  char*)sqlite3_co
1e530 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20  lumn_text(pSql, 
1e540 34 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  4);.      const 
1e550 63 68 61 72 20 2a 7a 50 61 72 65 6e 74 20 3d 20  char *zParent = 
1e560 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
1e570 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
1e580 28 70 53 71 6c 2c 20 35 29 3b 0a 0a 20 20 20 20  (pSql, 5);..    
1e590 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
1e5a0 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20 7a 45  repare_v2(db, zE
1e5b0 51 50 2c 20 2d 31 2c 20 26 70 45 78 70 6c 61 69  QP, -1, &pExplai
1e5c0 6e 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  n, 0);.      if(
1e5d0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1e5e0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66   break;.      if
1e5f0 28 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d 73 71  ( SQLITE_ROW==sq
1e600 6c 69 74 65 33 5f 73 74 65 70 28 70 45 78 70 6c  lite3_step(pExpl
1e610 61 69 6e 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ain) ){.        
1e620 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 6c 61  const char *zPla
1e630 6e 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  n = (const char*
1e640 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  )sqlite3_column_
1e650 74 65 78 74 28 70 45 78 70 6c 61 69 6e 2c 20 33  text(pExplain, 3
1e660 29 3b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  );.        res =
1e670 20 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   (.             
1e680 20 30 3d 3d 73 71 6c 69 74 65 33 5f 73 74 72 67   0==sqlite3_strg
1e690 6c 6f 62 28 7a 47 6c 6f 62 2c 20 7a 50 6c 61 6e  lob(zGlob, zPlan
1e6a0 29 0a 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20  ).           || 
1e6b0 30 3d 3d 73 71 6c 69 74 65 33 5f 73 74 72 67 6c  0==sqlite3_strgl
1e6c0 6f 62 28 7a 47 6c 6f 62 49 50 4b 2c 20 7a 50 6c  ob(zGlobIPK, zPl
1e6d0 61 6e 29 0a 20 20 20 20 20 20 20 20 29 3b 0a 20  an).        );. 
1e6e0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63 20       }.      rc 
1e6f0 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  = sqlite3_finali
1e700 7a 65 28 70 45 78 70 6c 61 69 6e 29 3b 0a 20 20  ze(pExplain);.  
1e710 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1e720 54 45 5f 4f 4b 20 29 20 62 72 65 61 6b 3b 0a 0a  TE_OK ) break;..
1e730 20 20 20 20 20 20 69 66 28 20 72 65 73 3c 30 20        if( res<0 
1e740 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  ){.        raw_p
1e750 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
1e760 72 72 6f 72 3a 20 69 6e 74 65 72 6e 61 6c 20 65  rror: internal e
1e770 72 72 6f 72 22 29 3b 0a 20 20 20 20 20 20 20 20  rror");.        
1e780 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 65 6c  break;.      }el
1e790 73 65 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  se{.        if( 
1e7a0 62 47 72 6f 75 70 42 79 50 61 72 65 6e 74 0a 20  bGroupByParent. 
1e7b0 20 20 20 20 20 20 20 26 26 20 28 62 56 65 72 62         && (bVerb
1e7c0 6f 73 65 20 7c 7c 20 72 65 73 3d 3d 30 29 0a 20  ose || res==0). 
1e7d0 20 20 20 20 20 20 20 26 26 20 28 7a 50 72 65 76         && (zPrev
1e7e0 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f 73  ==0 || sqlite3_s
1e7f0 74 72 69 63 6d 70 28 7a 50 61 72 65 6e 74 2c 20  tricmp(zParent, 
1e800 7a 50 72 65 76 29 29 0a 20 20 20 20 20 20 20 20  zPrev)).        
1e810 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77  ){.          raw
1e820 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 2d 2d  _printf(out, "--
1e830 20 50 61 72 65 6e 74 20 74 61 62 6c 65 20 25 73   Parent table %s
1e840 5c 6e 22 2c 20 7a 50 61 72 65 6e 74 29 3b 0a 20  \n", zParent);. 
1e850 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1e860 5f 66 72 65 65 28 7a 50 72 65 76 29 3b 0a 20 20  _free(zPrev);.  
1e870 20 20 20 20 20 20 20 20 7a 50 72 65 76 20 3d 20          zPrev = 
1e880 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
1e890 22 25 73 22 2c 20 7a 50 61 72 65 6e 74 29 3b 0a  "%s", zParent);.
1e8a0 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
1e8b0 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b     if( res==0 ){
1e8c0 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
1e8d0 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 25 73  rintf(out, "%s%s
1e8e0 20 2d 2d 3e 20 25 73 5c 6e 22 2c 20 7a 49 6e 64   --> %s\n", zInd
1e8f0 65 6e 74 2c 20 7a 43 49 2c 20 7a 54 61 72 67 65  ent, zCI, zTarge
1e900 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  t);.        }els
1e910 65 20 69 66 28 20 62 56 65 72 62 6f 73 65 20 29  e if( bVerbose )
1e920 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f  {.          raw_
1e930 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 2f  printf(out, "%s/
1e940 2a 20 6e 6f 20 65 78 74 72 61 20 69 6e 64 65 78  * no extra index
1e950 65 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  es required for 
1e960 25 73 20 2d 3e 20 25 73 20 2a 2f 5c 6e 22 2c 0a  %s -> %s */\n",.
1e970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 49                zI
1e980 6e 64 65 6e 74 2c 20 7a 46 72 6f 6d 2c 20 7a 54  ndent, zFrom, zT
1e990 61 72 67 65 74 0a 20 20 20 20 20 20 20 20 20 20  arget.          
1e9a0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
1e9b0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
1e9c0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 50 72 65  qlite3_free(zPre
1e9d0 76 29 3b 0a 0a 20 20 20 20 69 66 28 20 72 63 21  v);..    if( rc!
1e9e0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1e9f0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
1ea00 74 64 65 72 72 2c 20 22 25 73 5c 6e 22 2c 20 73  tderr, "%s\n", s
1ea10 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62  qlite3_errmsg(db
1ea20 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 72  ));.    }..    r
1ea30 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e  c2 = sqlite3_fin
1ea40 61 6c 69 7a 65 28 70 53 71 6c 29 3b 0a 20 20 20  alize(pSql);.   
1ea50 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1ea60 4f 4b 20 26 26 20 72 63 32 21 3d 53 51 4c 49 54  OK && rc2!=SQLIT
1ea70 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63  E_OK ){.      rc
1ea80 20 3d 20 72 63 32 3b 0a 20 20 20 20 20 20 72 61   = rc2;.      ra
1ea90 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
1eaa0 20 22 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33   "%s\n", sqlite3
1eab0 5f 65 72 72 6d 73 67 28 64 62 29 29 3b 0a 20 20  _errmsg(db));.  
1eac0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1ead0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
1eae0 72 72 2c 20 22 25 73 5c 6e 22 2c 20 73 71 6c 69  rr, "%s\n", sqli
1eaf0 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 29 3b  te3_errmsg(db));
1eb00 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 72  .  }..  return r
1eb10 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c  c;.}../*.** Impl
1eb20 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 2e  ementation of ".
1eb30 6c 69 6e 74 22 20 64 6f 74 20 63 6f 6d 6d 61 6e  lint" dot comman
1eb40 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
1eb50 20 6c 69 6e 74 44 6f 74 43 6f 6d 6d 61 6e 64 28   lintDotCommand(
1eb60 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  .  ShellState *p
1eb70 53 74 61 74 65 2c 20 20 20 20 20 20 20 20 20 20  State,          
1eb80 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 73 68     /* Current sh
1eb90 65 6c 6c 20 74 6f 6f 6c 20 73 74 61 74 65 20 2a  ell tool state *
1eba0 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 41 72 67  /.  char **azArg
1ebb0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1ebc0 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
1ebd0 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64  arguments passed
1ebe0 20 74 6f 20 64 6f 74 20 63 6f 6d 6d 61 6e 64 20   to dot command 
1ebf0 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 20 20 20  */.  int nArg   
1ec00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec10 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1ec20 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 7a 41  f entries in azA
1ec30 72 67 5b 5d 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  rg[] */.){.  int
1ec40 20 6e 3b 0a 20 20 6e 20 3d 20 28 6e 41 72 67 3e   n;.  n = (nArg>
1ec50 3d 32 20 3f 20 28 69 6e 74 29 73 74 72 6c 65 6e  =2 ? (int)strlen
1ec60 28 61 7a 41 72 67 5b 31 5d 29 20 3a 20 30 29 3b  (azArg[1]) : 0);
1ec70 0a 20 20 69 66 28 20 6e 3c 31 20 7c 7c 20 73 71  .  if( n<1 || sq
1ec80 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 28 61  lite3_strnicmp(a
1ec90 7a 41 72 67 5b 31 5d 2c 20 22 66 6b 65 79 2d 69  zArg[1], "fkey-i
1eca0 6e 64 65 78 65 73 22 2c 20 6e 29 20 29 20 67 6f  ndexes", n) ) go
1ecb0 74 6f 20 75 73 61 67 65 3b 0a 20 20 72 65 74 75  to usage;.  retu
1ecc0 72 6e 20 6c 69 6e 74 46 6b 65 79 49 6e 64 65 78  rn lintFkeyIndex
1ecd0 65 73 28 70 53 74 61 74 65 2c 20 61 7a 41 72 67  es(pState, azArg
1ece0 2c 20 6e 41 72 67 29 3b 0a 0a 20 75 73 61 67 65  , nArg);.. usage
1ecf0 3a 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73  :.  raw_printf(s
1ed00 74 64 65 72 72 2c 20 22 55 73 61 67 65 20 25 73  tderr, "Usage %s
1ed10 20 73 75 62 2d 63 6f 6d 6d 61 6e 64 20 3f 73 77   sub-command ?sw
1ed20 69 74 63 68 65 73 2e 2e 2e 3f 5c 6e 22 2c 20 61  itches...?\n", a
1ed30 7a 41 72 67 5b 30 5d 29 3b 0a 20 20 72 61 77 5f  zArg[0]);.  raw_
1ed40 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1ed50 57 68 65 72 65 20 73 75 62 2d 63 6f 6d 6d 61 6e  Where sub-comman
1ed60 64 73 20 61 72 65 3a 5c 6e 22 29 3b 0a 20 20 72  ds are:\n");.  r
1ed70 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
1ed80 2c 20 22 20 20 20 20 66 6b 65 79 2d 69 6e 64 65  , "    fkey-inde
1ed90 78 65 73 5c 6e 22 29 3b 0a 20 20 72 65 74 75 72  xes\n");.  retur
1eda0 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  n SQLITE_ERROR;.
1edb0 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 61 6e 20  }.../*.** If an 
1edc0 69 6e 70 75 74 20 6c 69 6e 65 20 62 65 67 69 6e  input line begin
1edd0 73 20 77 69 74 68 20 22 2e 22 20 74 68 65 6e 20  s with "." then 
1ede0 69 6e 76 6f 6b 65 20 74 68 69 73 20 72 6f 75 74  invoke this rout
1edf0 69 6e 65 20 74 6f 0a 2a 2a 20 70 72 6f 63 65 73  ine to.** proces
1ee00 73 20 74 68 61 74 20 6c 69 6e 65 2e 0a 2a 2a 0a  s that line..**.
1ee10 2a 2a 20 52 65 74 75 72 6e 20 31 20 6f 6e 20 65  ** Return 1 on e
1ee20 72 72 6f 72 2c 20 32 20 74 6f 20 65 78 69 74 2c  rror, 2 to exit,
1ee30 20 61 6e 64 20 30 20 6f 74 68 65 72 77 69 73 65   and 0 otherwise
1ee40 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
1ee50 64 6f 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 28  do_meta_command(
1ee60 63 68 61 72 20 2a 7a 4c 69 6e 65 2c 20 53 68 65  char *zLine, She
1ee70 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 69  llState *p){.  i
1ee80 6e 74 20 68 20 3d 20 31 3b 0a 20 20 69 6e 74 20  nt h = 1;.  int 
1ee90 6e 41 72 67 20 3d 20 30 3b 0a 20 20 69 6e 74 20  nArg = 0;.  int 
1eea0 6e 2c 20 63 3b 0a 20 20 69 6e 74 20 72 63 20 3d  n, c;.  int rc =
1eeb0 20 30 3b 0a 20 20 63 68 61 72 20 2a 61 7a 41 72   0;.  char *azAr
1eec0 67 5b 35 30 5d 3b 0a 0a 20 20 2f 2a 20 50 61 72  g[50];..  /* Par
1eed0 73 65 20 74 68 65 20 69 6e 70 75 74 20 6c 69 6e  se the input lin
1eee0 65 20 69 6e 74 6f 20 74 6f 6b 65 6e 73 2e 0a 20  e into tokens.. 
1eef0 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20 7a 4c 69   */.  while( zLi
1ef00 6e 65 5b 68 5d 20 26 26 20 6e 41 72 67 3c 41 72  ne[h] && nArg<Ar
1ef10 72 61 79 53 69 7a 65 28 61 7a 41 72 67 29 20 29  raySize(azArg) )
1ef20 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 49 73 53  {.    while( IsS
1ef30 70 61 63 65 28 7a 4c 69 6e 65 5b 68 5d 29 20 29  pace(zLine[h]) )
1ef40 7b 20 68 2b 2b 3b 20 7d 0a 20 20 20 20 69 66 28  { h++; }.    if(
1ef50 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 30 20 29 20 62   zLine[h]==0 ) b
1ef60 72 65 61 6b 3b 0a 20 20 20 20 69 66 28 20 7a 4c  reak;.    if( zL
1ef70 69 6e 65 5b 68 5d 3d 3d 27 5c 27 27 20 7c 7c 20  ine[h]=='\'' || 
1ef80 7a 4c 69 6e 65 5b 68 5d 3d 3d 27 22 27 20 29 7b  zLine[h]=='"' ){
1ef90 0a 20 20 20 20 20 20 69 6e 74 20 64 65 6c 69 6d  .      int delim
1efa0 20 3d 20 7a 4c 69 6e 65 5b 68 2b 2b 5d 3b 0a 20   = zLine[h++];. 
1efb0 20 20 20 20 20 61 7a 41 72 67 5b 6e 41 72 67 2b       azArg[nArg+
1efc0 2b 5d 20 3d 20 26 7a 4c 69 6e 65 5b 68 5d 3b 0a  +] = &zLine[h];.
1efd0 20 20 20 20 20 20 77 68 69 6c 65 28 20 7a 4c 69        while( zLi
1efe0 6e 65 5b 68 5d 20 26 26 20 7a 4c 69 6e 65 5b 68  ne[h] && zLine[h
1eff0 5d 21 3d 64 65 6c 69 6d 20 29 7b 0a 20 20 20 20  ]!=delim ){.    
1f000 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 5b 68 5d      if( zLine[h]
1f010 3d 3d 27 5c 5c 27 20 26 26 20 64 65 6c 69 6d 3d  =='\\' && delim=
1f020 3d 27 22 27 20 26 26 20 7a 4c 69 6e 65 5b 68 2b  ='"' && zLine[h+
1f030 31 5d 21 3d 30 20 29 20 68 2b 2b 3b 0a 20 20 20  1]!=0 ) h++;.   
1f040 20 20 20 20 20 68 2b 2b 3b 0a 20 20 20 20 20 20       h++;.      
1f050 7d 0a 20 20 20 20 20 20 69 66 28 20 7a 4c 69 6e  }.      if( zLin
1f060 65 5b 68 5d 3d 3d 64 65 6c 69 6d 20 29 7b 0a 20  e[h]==delim ){. 
1f070 20 20 20 20 20 20 20 7a 4c 69 6e 65 5b 68 2b 2b         zLine[h++
1f080 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  ] = 0;.      }. 
1f090 20 20 20 20 20 69 66 28 20 64 65 6c 69 6d 3d 3d       if( delim==
1f0a0 27 22 27 20 29 20 72 65 73 6f 6c 76 65 5f 62 61  '"' ) resolve_ba
1f0b0 63 6b 73 6c 61 73 68 65 73 28 61 7a 41 72 67 5b  ckslashes(azArg[
1f0c0 6e 41 72 67 2d 31 5d 29 3b 0a 20 20 20 20 7d 65  nArg-1]);.    }e
1f0d0 6c 73 65 7b 0a 20 20 20 20 20 20 61 7a 41 72 67  lse{.      azArg
1f0e0 5b 6e 41 72 67 2b 2b 5d 20 3d 20 26 7a 4c 69 6e  [nArg++] = &zLin
1f0f0 65 5b 68 5d 3b 0a 20 20 20 20 20 20 77 68 69 6c  e[h];.      whil
1f100 65 28 20 7a 4c 69 6e 65 5b 68 5d 20 26 26 20 21  e( zLine[h] && !
1f110 49 73 53 70 61 63 65 28 7a 4c 69 6e 65 5b 68 5d  IsSpace(zLine[h]
1f120 29 20 29 7b 20 68 2b 2b 3b 20 7d 0a 20 20 20 20  ) ){ h++; }.    
1f130 20 20 69 66 28 20 7a 4c 69 6e 65 5b 68 5d 20 29    if( zLine[h] )
1f140 20 7a 4c 69 6e 65 5b 68 2b 2b 5d 20 3d 20 30 3b   zLine[h++] = 0;
1f150 0a 20 20 20 20 20 20 72 65 73 6f 6c 76 65 5f 62  .      resolve_b
1f160 61 63 6b 73 6c 61 73 68 65 73 28 61 7a 41 72 67  ackslashes(azArg
1f170 5b 6e 41 72 67 2d 31 5d 29 3b 0a 20 20 20 20 7d  [nArg-1]);.    }
1f180 0a 20 20 7d 0a 0a 20 20 2f 2a 20 50 72 6f 63 65  .  }..  /* Proce
1f190 73 73 20 74 68 65 20 69 6e 70 75 74 20 6c 69 6e  ss the input lin
1f1a0 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 6e 41  e..  */.  if( nA
1f1b0 72 67 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  rg==0 ) return 0
1f1c0 3b 20 2f 2a 20 6e 6f 20 74 6f 6b 65 6e 73 2c 20  ; /* no tokens, 
1f1d0 6e 6f 20 65 72 72 6f 72 20 2a 2f 0a 20 20 6e 20  no error */.  n 
1f1e0 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a 41 72 67  = strlen30(azArg
1f1f0 5b 30 5d 29 3b 0a 20 20 63 20 3d 20 61 7a 41 72  [0]);.  c = azAr
1f200 67 5b 30 5d 5b 30 5d 3b 0a 0a 23 69 66 6e 64 65  g[0][0];..#ifnde
1f210 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
1f220 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 69 66  THORIZATION.  if
1f230 28 20 63 3d 3d 27 61 27 20 26 26 20 73 74 72 6e  ( c=='a' && strn
1f240 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 61  cmp(azArg[0], "a
1f250 75 74 68 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  uth", n)==0 ){. 
1f260 20 20 20 69 66 28 20 6e 41 72 67 21 3d 32 20 29     if( nArg!=2 )
1f270 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
1f280 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
1f290 65 3a 20 2e 61 75 74 68 20 4f 4e 7c 4f 46 46 5c  e: .auth ON|OFF\
1f2a0 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
1f2b0 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65  1;.      goto me
1f2c0 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
1f2d0 0a 20 20 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f  .    }.    open_
1f2e0 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 69 66  db(p, 0);.    if
1f2f0 28 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61  ( booleanValue(a
1f300 7a 41 72 67 5b 31 5d 29 20 29 7b 0a 20 20 20 20  zArg[1]) ){.    
1f310 20 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75    sqlite3_set_au
1f320 74 68 6f 72 69 7a 65 72 28 70 2d 3e 64 62 2c 20  thorizer(p->db, 
1f330 73 68 65 6c 6c 41 75 74 68 2c 20 70 29 3b 0a 20  shellAuth, p);. 
1f340 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1f350 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74 68  sqlite3_set_auth
1f360 6f 72 69 7a 65 72 28 70 2d 3e 64 62 2c 20 30 2c  orizer(p->db, 0,
1f370 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c   0);.    }.  }el
1f380 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  se.#endif..  if(
1f390 20 28 63 3d 3d 27 62 27 20 26 26 20 6e 3e 3d 33   (c=='b' && n>=3
1f3a0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
1f3b0 67 5b 30 5d 2c 20 22 62 61 63 6b 75 70 22 2c 20  g[0], "backup", 
1f3c0 6e 29 3d 3d 30 29 0a 20 20 20 7c 7c 20 28 63 3d  n)==0).   || (c=
1f3d0 3d 27 73 27 20 26 26 20 6e 3e 3d 33 20 26 26 20  ='s' && n>=3 && 
1f3e0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
1f3f0 2c 20 22 73 61 76 65 22 2c 20 6e 29 3d 3d 30 29  , "save", n)==0)
1f400 0a 20 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20  .  ){.    const 
1f410 63 68 61 72 20 2a 7a 44 65 73 74 46 69 6c 65 20  char *zDestFile 
1f420 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  = 0;.    const c
1f430 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b 0a 20 20  har *zDb = 0;.  
1f440 20 20 73 71 6c 69 74 65 33 20 2a 70 44 65 73 74    sqlite3 *pDest
1f450 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 61  ;.    sqlite3_ba
1f460 63 6b 75 70 20 2a 70 42 61 63 6b 75 70 3b 0a 20  ckup *pBackup;. 
1f470 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 66 6f     int j;.    fo
1f480 72 28 6a 3d 31 3b 20 6a 3c 6e 41 72 67 3b 20 6a  r(j=1; j<nArg; j
1f490 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  ++){.      const
1f4a0 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67   char *z = azArg
1f4b0 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  [j];.      if( z
1f4c0 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  [0]=='-' ){.    
1f4d0 20 20 20 20 77 68 69 6c 65 28 20 7a 5b 30 5d 3d      while( z[0]=
1f4e0 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20 20 20  ='-' ) z++;.    
1f4f0 20 20 20 20 2f 2a 20 4e 6f 20 6f 70 74 69 6f 6e      /* No option
1f500 73 20 74 6f 20 70 72 6f 63 65 73 73 20 61 74 20  s to process at 
1f510 74 68 69 73 20 74 69 6d 65 20 2a 2f 0a 20 20 20  this time */.   
1f520 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
1f530 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
1f540 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6f 70  err, "unknown op
1f550 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 61 7a 41  tion: %s\n", azA
1f560 72 67 5b 6a 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[j]);.        
1f570 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20    return 1;.    
1f580 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
1f590 65 20 69 66 28 20 7a 44 65 73 74 46 69 6c 65 3d  e if( zDestFile=
1f5a0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 44  =0 ){.        zD
1f5b0 65 73 74 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b  estFile = azArg[
1f5c0 6a 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  j];.      }else 
1f5d0 69 66 28 20 7a 44 62 3d 3d 30 20 29 7b 0a 20 20  if( zDb==0 ){.  
1f5e0 20 20 20 20 20 20 7a 44 62 20 3d 20 7a 44 65 73        zDb = zDes
1f5f0 74 46 69 6c 65 3b 0a 20 20 20 20 20 20 20 20 7a  tFile;.        z
1f600 44 65 73 74 46 69 6c 65 20 3d 20 61 7a 41 72 67  DestFile = azArg
1f610 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  [j];.      }else
1f620 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
1f630 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 74 6f  intf(stderr, "to
1f640 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e 74 73  o many arguments
1f650 20 74 6f 20 2e 62 61 63 6b 75 70 5c 6e 22 29 3b   to .backup\n");
1f660 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
1f670 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  1;.      }.    }
1f680 0a 20 20 20 20 69 66 28 20 7a 44 65 73 74 46 69  .    if( zDestFi
1f690 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  le==0 ){.      r
1f6a0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
1f6b0 2c 20 22 6d 69 73 73 69 6e 67 20 46 49 4c 45 4e  , "missing FILEN
1f6c0 41 4d 45 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20  AME argument on 
1f6d0 2e 62 61 63 6b 75 70 5c 6e 22 29 3b 0a 20 20 20  .backup\n");.   
1f6e0 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
1f6f0 20 7d 0a 20 20 20 20 69 66 28 20 7a 44 62 3d 3d   }.    if( zDb==
1f700 30 20 29 20 7a 44 62 20 3d 20 22 6d 61 69 6e 22  0 ) zDb = "main"
1f710 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
1f720 65 33 5f 6f 70 65 6e 28 7a 44 65 73 74 46 69 6c  e3_open(zDestFil
1f730 65 2c 20 26 70 44 65 73 74 29 3b 0a 20 20 20 20  e, &pDest);.    
1f740 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1f750 4b 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  K ){.      utf8_
1f760 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1f770 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70  Error: cannot op
1f780 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 44  en \"%s\"\n", zD
1f790 65 73 74 46 69 6c 65 29 3b 0a 20 20 20 20 20 20  estFile);.      
1f7a0 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 44  sqlite3_close(pD
1f7b0 65 73 74 29 3b 0a 20 20 20 20 20 20 72 65 74 75  est);.      retu
1f7c0 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rn 1;.    }.    
1f7d0 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20  open_db(p, 0);. 
1f7e0 20 20 20 70 42 61 63 6b 75 70 20 3d 20 73 71 6c     pBackup = sql
1f7f0 69 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69 74  ite3_backup_init
1f800 28 70 44 65 73 74 2c 20 22 6d 61 69 6e 22 2c 20  (pDest, "main", 
1f810 70 2d 3e 64 62 2c 20 7a 44 62 29 3b 0a 20 20 20  p->db, zDb);.   
1f820 20 69 66 28 20 70 42 61 63 6b 75 70 3d 3d 30 20   if( pBackup==0 
1f830 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
1f840 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
1f850 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69  ror: %s\n", sqli
1f860 74 65 33 5f 65 72 72 6d 73 67 28 70 44 65 73 74  te3_errmsg(pDest
1f870 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ));.      sqlite
1f880 33 5f 63 6c 6f 73 65 28 70 44 65 73 74 29 3b 0a  3_close(pDest);.
1f890 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
1f8a0 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c 65 28      }.    while(
1f8b0 20 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 5f    (rc = sqlite3_
1f8c0 62 61 63 6b 75 70 5f 73 74 65 70 28 70 42 61 63  backup_step(pBac
1f8d0 6b 75 70 2c 31 30 30 29 29 3d 3d 53 51 4c 49 54  kup,100))==SQLIT
1f8e0 45 5f 4f 4b 20 29 7b 7d 0a 20 20 20 20 73 71 6c  E_OK ){}.    sql
1f8f0 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69  ite3_backup_fini
1f900 73 68 28 70 42 61 63 6b 75 70 29 3b 0a 20 20 20  sh(pBackup);.   
1f910 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1f920 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 72 63  DONE ){.      rc
1f930 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
1f940 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
1f950 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
1f960 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65  r: %s\n", sqlite
1f970 33 5f 65 72 72 6d 73 67 28 70 44 65 73 74 29 29  3_errmsg(pDest))
1f980 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
1f990 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
1f9a0 33 5f 63 6c 6f 73 65 28 70 44 65 73 74 29 3b 0a  3_close(pDest);.
1f9b0 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
1f9c0 3d 3d 27 62 27 20 26 26 20 6e 3e 3d 33 20 26 26  =='b' && n>=3 &&
1f9d0 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
1f9e0 5d 2c 20 22 62 61 69 6c 22 2c 20 6e 29 3d 3d 30  ], "bail", n)==0
1f9f0 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   ){.    if( nArg
1fa00 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 62 61 69  ==2 ){.      bai
1fa10 6c 5f 6f 6e 5f 65 72 72 6f 72 20 3d 20 62 6f 6f  l_on_error = boo
1fa20 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b  leanValue(azArg[
1fa30 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  1]);.    }else{.
1fa40 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
1fa50 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
1fa60 20 2e 62 61 69 6c 20 6f 6e 7c 6f 66 66 5c 6e 22   .bail on|off\n"
1fa70 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
1fa80 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
1fa90 20 20 69 66 28 20 63 3d 3d 27 62 27 20 26 26 20    if( c=='b' && 
1faa0 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28  n>=3 && strncmp(
1fab0 61 7a 41 72 67 5b 30 5d 2c 20 22 62 69 6e 61 72  azArg[0], "binar
1fac0 79 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  y", n)==0 ){.   
1fad0 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a   if( nArg==2 ){.
1fae0 20 20 20 20 20 20 69 66 28 20 62 6f 6f 6c 65 61        if( boolea
1faf0 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29  nValue(azArg[1])
1fb00 20 29 7b 0a 20 20 20 20 20 20 20 20 73 65 74 42   ){.        setB
1fb10 69 6e 61 72 79 4d 6f 64 65 28 70 2d 3e 6f 75 74  inaryMode(p->out
1fb20 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  , 1);.      }els
1fb30 65 7b 0a 20 20 20 20 20 20 20 20 73 65 74 54 65  e{.        setTe
1fb40 78 74 4d 6f 64 65 28 70 2d 3e 6f 75 74 2c 20 31  xtMode(p->out, 1
1fb50 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
1fb60 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
1fb70 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1fb80 55 73 61 67 65 3a 20 2e 62 69 6e 61 72 79 20 6f  Usage: .binary o
1fb90 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20  n|off\n");.     
1fba0 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20   rc = 1;.    }. 
1fbb0 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
1fbc0 3d 27 63 27 20 26 26 20 73 74 72 63 6d 70 28 61  ='c' && strcmp(a
1fbd0 7a 41 72 67 5b 30 5d 2c 22 63 64 22 29 3d 3d 30  zArg[0],"cd")==0
1fbe0 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   ){.    if( nArg
1fbf0 3d 3d 32 20 29 7b 0a 23 69 66 20 64 65 66 69 6e  ==2 ){.#if defin
1fc00 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65  ed(_WIN32) || de
1fc10 66 69 6e 65 64 28 57 49 4e 33 32 29 0a 20 20 20  fined(WIN32).   
1fc20 20 20 20 77 63 68 61 72 5f 74 20 2a 7a 20 3d 20     wchar_t *z = 
1fc30 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75 74  sqlite3_win32_ut
1fc40 66 38 5f 74 6f 5f 75 6e 69 63 6f 64 65 28 61 7a  f8_to_unicode(az
1fc50 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 72  Arg[1]);.      r
1fc60 63 20 3d 20 21 53 65 74 43 75 72 72 65 6e 74 44  c = !SetCurrentD
1fc70 69 72 65 63 74 6f 72 79 57 28 7a 29 3b 0a 20 20  irectoryW(z);.  
1fc80 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
1fc90 28 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 20  (z);.#else.     
1fca0 20 72 63 20 3d 20 63 68 64 69 72 28 61 7a 41 72   rc = chdir(azAr
1fcb0 67 5b 31 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20  g[1]);.#endif.  
1fcc0 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
1fcd0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
1fce0 66 28 73 74 64 65 72 72 2c 20 22 43 61 6e 6e 6f  f(stderr, "Canno
1fcf0 74 20 63 68 61 6e 67 65 20 74 6f 20 64 69 72 65  t change to dire
1fd00 63 74 6f 72 79 20 5c 22 25 73 5c 22 5c 6e 22 2c  ctory \"%s\"\n",
1fd10 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
1fd20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
1fd30 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
1fd40 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
1fd50 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
1fd60 2e 63 64 20 44 49 52 45 43 54 4f 52 59 5c 6e 22  .cd DIRECTORY\n"
1fd70 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
1fd80 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
1fd90 20 20 2f 2a 20 54 68 65 20 75 6e 64 6f 63 75 6d    /* The undocum
1fda0 65 6e 74 65 64 20 22 2e 62 72 65 61 6b 70 6f 69  ented ".breakpoi
1fdb0 6e 74 22 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73  nt" command caus
1fdc0 65 73 20 61 20 63 61 6c 6c 20 74 6f 20 74 68 65  es a call to the
1fdd0 20 6e 6f 2d 6f 70 0a 20 20 2a 2a 20 72 6f 75 74   no-op.  ** rout
1fde0 69 6e 65 20 6e 61 6d 65 64 20 74 65 73 74 5f 62  ine named test_b
1fdf0 72 65 61 6b 70 6f 69 6e 74 28 29 2e 0a 20 20 2a  reakpoint()..  *
1fe00 2f 0a 20 20 69 66 28 20 63 3d 3d 27 62 27 20 26  /.  if( c=='b' &
1fe10 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d  & n>=3 && strncm
1fe20 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 62 72 65  p(azArg[0], "bre
1fe30 61 6b 70 6f 69 6e 74 22 2c 20 6e 29 3d 3d 30 20  akpoint", n)==0 
1fe40 29 7b 0a 20 20 20 20 74 65 73 74 5f 62 72 65 61  ){.    test_brea
1fe50 6b 70 6f 69 6e 74 28 29 3b 0a 20 20 7d 65 6c 73  kpoint();.  }els
1fe60 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 63 27 20  e..  if( c=='c' 
1fe70 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63  && n>=3 && strnc
1fe80 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 63 68  mp(azArg[0], "ch
1fe90 61 6e 67 65 73 22 2c 20 6e 29 3d 3d 30 20 29 7b  anges", n)==0 ){
1fea0 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32  .    if( nArg==2
1feb0 20 29 7b 0a 20 20 20 20 20 20 73 65 74 4f 72 43   ){.      setOrC
1fec0 6c 65 61 72 46 6c 61 67 28 70 2c 20 53 48 46 4c  learFlag(p, SHFL
1fed0 47 5f 43 6f 75 6e 74 43 68 61 6e 67 65 73 2c 20  G_CountChanges, 
1fee0 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d  azArg[1]);.    }
1fef0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
1ff00 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1ff10 55 73 61 67 65 3a 20 2e 63 68 61 6e 67 65 73 20  Usage: .changes 
1ff20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20  on|off\n");.    
1ff30 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a    rc = 1;.    }.
1ff40 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 20 43 61    }else..  /* Ca
1ff50 6e 63 65 6c 20 6f 75 74 70 75 74 20 72 65 64 69  ncel output redi
1ff60 72 65 63 74 69 6f 6e 2c 20 69 66 20 69 74 20 69  rection, if it i
1ff70 73 20 63 75 72 72 65 6e 74 6c 79 20 73 65 74 20  s currently set 
1ff80 28 62 79 20 2e 74 65 73 74 63 61 73 65 29 0a 20  (by .testcase). 
1ff90 20 2a 2a 20 54 68 65 6e 20 72 65 61 64 20 74 68   ** Then read th
1ffa0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
1ffb0 20 74 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78   testcase-out.tx
1ffc0 74 20 66 69 6c 65 20 61 6e 64 20 63 6f 6d 70 61  t file and compa
1ffd0 72 65 20 61 67 61 69 6e 73 74 0a 20 20 2a 2a 20  re against.  ** 
1ffe0 61 7a 41 72 67 5b 31 5d 2e 20 20 49 66 20 74 68  azArg[1].  If th
1fff0 65 72 65 20 61 72 65 20 64 69 66 66 65 72 65 6e  ere are differen
20000 63 65 73 2c 20 72 65 70 6f 72 74 20 61 6e 20 65  ces, report an e
20010 72 72 6f 72 20 61 6e 64 20 65 78 69 74 2e 0a 20  rror and exit.. 
20020 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27 63 27   */.  if( c=='c'
20030 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e   && n>=3 && strn
20040 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 63  cmp(azArg[0], "c
20050 68 65 63 6b 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  heck", n)==0 ){.
20060 20 20 20 20 63 68 61 72 20 2a 7a 52 65 73 20 3d      char *zRes =
20070 20 30 3b 0a 20 20 20 20 6f 75 74 70 75 74 5f 72   0;.    output_r
20080 65 73 65 74 28 70 29 3b 0a 20 20 20 20 69 66 28  eset(p);.    if(
20090 20 6e 41 72 67 21 3d 32 20 29 7b 0a 20 20 20 20   nArg!=2 ){.    
200a0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
200b0 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 63 68  err, "Usage: .ch
200c0 65 63 6b 20 47 4c 4f 42 2d 50 41 54 54 45 52 4e  eck GLOB-PATTERN
200d0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
200e0 20 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   2;.    }else if
200f0 28 20 28 7a 52 65 73 20 3d 20 72 65 61 64 46 69  ( (zRes = readFi
20100 6c 65 28 22 74 65 73 74 63 61 73 65 2d 6f 75 74  le("testcase-out
20110 2e 74 78 74 22 2c 20 30 29 29 3d 3d 30 20 29 7b  .txt", 0))==0 ){
20120 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
20130 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
20140 3a 20 63 61 6e 6e 6f 74 20 72 65 61 64 20 27 74  : cannot read 't
20150 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 27  estcase-out.txt'
20160 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
20170 20 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   2;.    }else if
20180 28 20 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28  ( testcase_glob(
20190 61 7a 41 72 67 5b 31 5d 2c 7a 52 65 73 29 3d 3d  azArg[1],zRes)==
201a0 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  0 ){.      utf8_
201b0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 0a 20  printf(stderr,. 
201c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201d0 22 74 65 73 74 63 61 73 65 2d 25 73 20 46 41 49  "testcase-%s FAI
201e0 4c 45 44 5c 6e 20 45 78 70 65 63 74 65 64 3a 20  LED\n Expected: 
201f0 5b 25 73 5d 5c 6e 20 20 20 20 20 20 47 6f 74 3a  [%s]\n      Got:
20200 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20   [%s]\n",.      
20210 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e 7a 54             p->zT
20220 65 73 74 63 61 73 65 2c 20 61 7a 41 72 67 5b 31  estcase, azArg[1
20230 5d 2c 20 7a 52 65 73 29 3b 0a 20 20 20 20 20 20  ], zRes);.      
20240 72 63 20 3d 20 32 3b 0a 20 20 20 20 7d 65 6c 73  rc = 2;.    }els
20250 65 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  e{.      utf8_pr
20260 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 74 65  intf(stdout, "te
20270 73 74 63 61 73 65 2d 25 73 20 6f 6b 5c 6e 22 2c  stcase-%s ok\n",
20280 20 70 2d 3e 7a 54 65 73 74 63 61 73 65 29 3b 0a   p->zTestcase);.
20290 20 20 20 20 20 20 70 2d 3e 6e 43 68 65 63 6b 2b        p->nCheck+
202a0 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  +;.    }.    sql
202b0 69 74 65 33 5f 66 72 65 65 28 7a 52 65 73 29 3b  ite3_free(zRes);
202c0 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
202d0 63 3d 3d 27 63 27 20 26 26 20 73 74 72 6e 63 6d  c=='c' && strncm
202e0 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 63 6c 6f  p(azArg[0], "clo
202f0 6e 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  ne", n)==0 ){.  
20300 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b    if( nArg==2 ){
20310 0a 20 20 20 20 20 20 74 72 79 54 6f 43 6c 6f 6e  .      tryToClon
20320 65 28 70 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a  e(p, azArg[1]);.
20330 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
20340 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
20350 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 63 6c 6f  rr, "Usage: .clo
20360 6e 65 20 46 49 4c 45 4e 41 4d 45 5c 6e 22 29 3b  ne FILENAME\n");
20370 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
20380 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
20390 69 66 28 20 63 3d 3d 27 64 27 20 26 26 20 6e 3e  if( c=='d' && n>
203a0 31 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  1 && strncmp(azA
203b0 72 67 5b 30 5d 2c 20 22 64 61 74 61 62 61 73 65  rg[0], "database
203c0 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  s", n)==0 ){.   
203d0 20 53 68 65 6c 6c 53 74 61 74 65 20 64 61 74 61   ShellState data
203e0 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72  ;.    char *zErr
203f0 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 6f 70 65  Msg = 0;.    ope
20400 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20  n_db(p, 0);.    
20410 6d 65 6d 63 70 79 28 26 64 61 74 61 2c 20 70 2c  memcpy(&data, p,
20420 20 73 69 7a 65 6f 66 28 64 61 74 61 29 29 3b 0a   sizeof(data));.
20430 20 20 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61      data.showHea
20440 64 65 72 20 3d 20 30 3b 0a 20 20 20 20 64 61 74  der = 0;.    dat
20450 61 2e 63 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d  a.cMode = data.m
20460 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b  ode = MODE_List;
20470 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
20480 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 64 61 74  rintf(sizeof(dat
20490 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c  a.colSeparator),
204a0 64 61 74 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f  data.colSeparato
204b0 72 2c 22 3a 20 22 29 3b 0a 20 20 20 20 64 61 74  r,": ");.    dat
204c0 61 2e 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 73  a.cnt = 0;.    s
204d0 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64  qlite3_exec(p->d
204e0 62 2c 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c  b, "SELECT name,
204f0 20 66 69 6c 65 20 46 52 4f 4d 20 70 72 61 67 6d   file FROM pragm
20500 61 5f 64 61 74 61 62 61 73 65 5f 6c 69 73 74 22  a_database_list"
20510 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
20520 20 20 20 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61     callback, &da
20530 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20  ta, &zErrMsg);. 
20540 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29     if( zErrMsg )
20550 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
20560 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f  ntf(stderr,"Erro
20570 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73  r: %s\n", zErrMs
20580 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  g);.      sqlite
20590 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b  3_free(zErrMsg);
205a0 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
205b0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
205c0 69 66 28 20 63 3d 3d 27 64 27 20 26 26 20 73 74  if( c=='d' && st
205d0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
205e0 22 64 62 69 6e 66 6f 22 2c 20 6e 29 3d 3d 30 20  "dbinfo", n)==0 
205f0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 68 65 6c  ){.    rc = shel
20600 6c 5f 64 62 69 6e 66 6f 5f 63 6f 6d 6d 61 6e 64  l_dbinfo_command
20610 28 70 2c 20 6e 41 72 67 2c 20 61 7a 41 72 67 29  (p, nArg, azArg)
20620 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  ;.  }else..  if(
20630 20 63 3d 3d 27 64 27 20 26 26 20 73 74 72 6e 63   c=='d' && strnc
20640 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 64 75  mp(azArg[0], "du
20650 6d 70 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  mp", n)==0 ){.  
20660 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c    const char *zL
20670 69 6b 65 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74  ike = 0;.    int
20680 20 69 3b 0a 20 20 20 20 69 6e 74 20 73 61 76 65   i;.    int save
20690 64 53 68 6f 77 48 65 61 64 65 72 20 3d 20 70 2d  dShowHeader = p-
206a0 3e 73 68 6f 77 48 65 61 64 65 72 3b 0a 20 20 20  >showHeader;.   
206b0 20 53 68 65 6c 6c 43 6c 65 61 72 46 6c 61 67 28   ShellClearFlag(
206c0 70 2c 20 53 48 46 4c 47 5f 50 72 65 73 65 72 76  p, SHFLG_Preserv
206d0 65 52 6f 77 69 64 7c 53 48 46 4c 47 5f 4e 65 77  eRowid|SHFLG_New
206e0 6c 69 6e 65 73 29 3b 0a 20 20 20 20 66 6f 72 28  lines);.    for(
206f0 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=1; i<nArg; i++
20700 29 7b 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41  ){.      if( azA
20710 72 67 5b 69 5d 5b 30 5d 3d 3d 27 2d 27 20 29 7b  rg[i][0]=='-' ){
20720 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63  .        const c
20730 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69  har *z = azArg[i
20740 5d 2b 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ]+1;.        if(
20750 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b   z[0]=='-' ) z++
20760 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74  ;.        if( st
20770 72 63 6d 70 28 7a 2c 22 70 72 65 73 65 72 76 65  rcmp(z,"preserve
20780 2d 72 6f 77 69 64 73 22 29 3d 3d 30 20 29 7b 0a  -rowids")==0 ){.
20790 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
207a0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
207b0 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72            raw_pr
207c0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 54 68  intf(stderr, "Th
207d0 65 20 2d 2d 70 72 65 73 65 72 76 65 2d 72 6f 77  e --preserve-row
207e0 69 64 73 20 6f 70 74 69 6f 6e 20 69 73 20 6e 6f  ids option is no
207f0 74 20 63 6f 6d 70 61 74 69 62 6c 65 22 0a 20 20  t compatible".  
20800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20810 20 20 20 20 20 20 20 20 20 20 20 22 20 77 69 74             " wit
20820 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  h SQLITE_OMIT_VI
20830 52 54 55 41 4c 54 41 42 4c 45 5c 6e 22 29 3b 0a  RTUALTABLE\n");.
20840 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 31            rc = 1
20850 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
20860 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
20870 69 74 3b 0a 23 65 6c 73 65 0a 20 20 20 20 20 20  it;.#else.      
20880 20 20 20 20 53 68 65 6c 6c 53 65 74 46 6c 61 67      ShellSetFlag
20890 28 70 2c 20 53 48 46 4c 47 5f 50 72 65 73 65 72  (p, SHFLG_Preser
208a0 76 65 52 6f 77 69 64 29 3b 0a 23 65 6e 64 69 66  veRowid);.#endif
208b0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 20  .        }else. 
208c0 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d         if( strcm
208d0 70 28 7a 2c 22 6e 65 77 6c 69 6e 65 73 22 29 3d  p(z,"newlines")=
208e0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
208f0 53 68 65 6c 6c 53 65 74 46 6c 61 67 28 70 2c 20  ShellSetFlag(p, 
20900 53 48 46 4c 47 5f 4e 65 77 6c 69 6e 65 73 29 3b  SHFLG_Newlines);
20910 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 20  .        }else. 
20920 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
20930 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
20940 64 65 72 72 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f  derr, "Unknown o
20950 70 74 69 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20  ption \"%s\" on 
20960 5c 22 2e 64 75 6d 70 5c 22 5c 6e 22 2c 20 61 7a  \".dump\"\n", az
20970 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[i]);.       
20980 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
20990 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
209a0 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
209b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
209c0 73 65 20 69 66 28 20 7a 4c 69 6b 65 20 29 7b 0a  se if( zLike ){.
209d0 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
209e0 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
209f0 65 3a 20 2e 64 75 6d 70 20 3f 2d 2d 70 72 65 73  e: .dump ?--pres
20a00 65 72 76 65 2d 72 6f 77 69 64 73 3f 20 22 0a 20  erve-rowids? ". 
20a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a20 20 20 20 20 20 20 20 20 20 20 22 3f 2d 2d 6e 65            "?--ne
20a30 77 6c 69 6e 65 73 3f 20 3f 4c 49 4b 45 2d 50 41  wlines? ?LIKE-PA
20a40 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20 20  TTERN?\n");.    
20a50 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
20a60 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
20a70 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
20a80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
20a90 20 7a 4c 69 6b 65 20 3d 20 61 7a 41 72 67 5b 69   zLike = azArg[i
20aa0 5d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ];.      }.    }
20ab0 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20  .    open_db(p, 
20ac0 30 29 3b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20  0);.    /* When 
20ad0 70 6c 61 79 69 6e 67 20 62 61 63 6b 20 61 20 22  playing back a "
20ae0 64 75 6d 70 22 2c 20 74 68 65 20 63 6f 6e 74 65  dump", the conte
20af0 6e 74 20 6d 69 67 68 74 20 61 70 70 65 61 72 20  nt might appear 
20b00 69 6e 20 61 6e 20 6f 72 64 65 72 0a 20 20 20 20  in an order.    
20b10 2a 2a 20 77 68 69 63 68 20 63 61 75 73 65 73 20  ** which causes 
20b20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
20b30 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
20b40 73 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64  s to be violated
20b50 2e 0a 20 20 20 20 2a 2a 20 53 6f 20 64 69 73 61  ..    ** So disa
20b60 62 6c 65 20 66 6f 72 65 69 67 6e 2d 6b 65 79 20  ble foreign-key 
20b70 63 6f 6e 73 74 72 61 69 6e 74 20 65 6e 66 6f 72  constraint enfor
20b80 63 65 6d 65 6e 74 20 74 6f 20 70 72 65 76 65 6e  cement to preven
20b90 74 20 70 72 6f 62 6c 65 6d 73 2e 20 2a 2f 0a 20  t problems. */. 
20ba0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
20bb0 3e 6f 75 74 2c 20 22 50 52 41 47 4d 41 20 66 6f  >out, "PRAGMA fo
20bc0 72 65 69 67 6e 5f 6b 65 79 73 3d 4f 46 46 3b 5c  reign_keys=OFF;\
20bd0 6e 22 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69  n");.    raw_pri
20be0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 42 45 47  ntf(p->out, "BEG
20bf0 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 5c  IN TRANSACTION;\
20c00 6e 22 29 3b 0a 20 20 20 20 70 2d 3e 77 72 69 74  n");.    p->writ
20c10 61 62 6c 65 53 63 68 65 6d 61 20 3d 20 30 3b 0a  ableSchema = 0;.
20c20 20 20 20 20 70 2d 3e 73 68 6f 77 48 65 61 64 65      p->showHeade
20c30 72 20 3d 20 30 3b 0a 20 20 20 20 2f 2a 20 53 65  r = 0;.    /* Se
20c40 74 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d  t writable_schem
20c50 61 3d 4f 4e 20 73 69 6e 63 65 20 64 6f 69 6e 67  a=ON since doing
20c60 20 73 6f 20 66 6f 72 63 65 73 20 53 51 4c 69 74   so forces SQLit
20c70 65 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 0a  e to initialize.
20c80 20 20 20 20 2a 2a 20 61 73 20 6d 75 63 68 20 6f      ** as much o
20c90 66 20 74 68 65 20 73 63 68 65 6d 61 20 61 73 20  f the schema as 
20ca0 69 74 20 63 61 6e 20 65 76 65 6e 20 69 66 20 74  it can even if t
20cb0 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
20cc0 20 74 61 62 6c 65 20 69 73 0a 20 20 20 20 2a 2a   table is.    **
20cd0 20 63 6f 72 72 75 70 74 2e 20 2a 2f 0a 20 20 20   corrupt. */.   
20ce0 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d   sqlite3_exec(p-
20cf0 3e 64 62 2c 20 22 53 41 56 45 50 4f 49 4e 54 20  >db, "SAVEPOINT 
20d00 64 75 6d 70 3b 20 50 52 41 47 4d 41 20 77 72 69  dump; PRAGMA wri
20d10 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 22  table_schema=ON"
20d20 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  , 0, 0, 0);.    
20d30 70 2d 3e 6e 45 72 72 20 3d 20 30 3b 0a 20 20 20  p->nErr = 0;.   
20d40 20 69 66 28 20 7a 4c 69 6b 65 3d 3d 30 20 29 7b   if( zLike==0 ){
20d50 0a 20 20 20 20 20 20 72 75 6e 5f 73 63 68 65 6d  .      run_schem
20d60 61 5f 64 75 6d 70 5f 71 75 65 72 79 28 70 2c 0a  a_dump_query(p,.
20d70 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20          "SELECT 
20d80 6e 61 6d 65 2c 20 74 79 70 65 2c 20 73 71 6c 20  name, type, sql 
20d90 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
20da0 65 72 20 22 0a 20 20 20 20 20 20 20 20 22 57 48  er ".        "WH
20db0 45 52 45 20 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c  ERE sql NOT NULL
20dc0 20 41 4e 44 20 74 79 70 65 3d 3d 27 74 61 62 6c   AND type=='tabl
20dd0 65 27 20 41 4e 44 20 6e 61 6d 65 21 3d 27 73 71  e' AND name!='sq
20de0 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 27 22 0a  lite_sequence'".
20df0 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72        );.      r
20e00 75 6e 5f 73 63 68 65 6d 61 5f 64 75 6d 70 5f 71  un_schema_dump_q
20e10 75 65 72 79 28 70 2c 0a 20 20 20 20 20 20 20 20  uery(p,.        
20e20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 74 79  "SELECT name, ty
20e30 70 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c  pe, sql FROM sql
20e40 69 74 65 5f 6d 61 73 74 65 72 20 22 0a 20 20 20  ite_master ".   
20e50 20 20 20 20 20 22 57 48 45 52 45 20 6e 61 6d 65       "WHERE name
20e60 3d 3d 27 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  =='sqlite_sequen
20e70 63 65 27 22 0a 20 20 20 20 20 20 29 3b 0a 20 20  ce'".      );.  
20e80 20 20 20 20 72 75 6e 5f 74 61 62 6c 65 5f 64 75      run_table_du
20e90 6d 70 5f 71 75 65 72 79 28 70 2c 0a 20 20 20 20  mp_query(p,.    
20ea0 20 20 20 20 22 53 45 4c 45 43 54 20 73 71 6c 20      "SELECT sql 
20eb0 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
20ec0 65 72 20 22 0a 20 20 20 20 20 20 20 20 22 57 48  er ".        "WH
20ed0 45 52 45 20 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c  ERE sql NOT NULL
20ee0 20 41 4e 44 20 74 79 70 65 20 49 4e 20 28 27 69   AND type IN ('i
20ef0 6e 64 65 78 27 2c 27 74 72 69 67 67 65 72 27 2c  ndex','trigger',
20f00 27 76 69 65 77 27 29 22 2c 20 30 0a 20 20 20 20  'view')", 0.    
20f10 20 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a    );.    }else{.
20f20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 53 71 6c        char *zSql
20f30 3b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 73  ;.      zSql = s
20f40 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 0a  qlite3_mprintf(.
20f50 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20          "SELECT 
20f60 6e 61 6d 65 2c 20 74 79 70 65 2c 20 73 71 6c 20  name, type, sql 
20f70 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
20f80 65 72 20 22 0a 20 20 20 20 20 20 20 20 22 57 48  er ".        "WH
20f90 45 52 45 20 74 62 6c 5f 6e 61 6d 65 20 4c 49 4b  ERE tbl_name LIK
20fa0 45 20 25 51 20 41 4e 44 20 74 79 70 65 3d 3d 27  E %Q AND type=='
20fb0 74 61 62 6c 65 27 22 0a 20 20 20 20 20 20 20 20  table'".        
20fc0 22 20 20 41 4e 44 20 73 71 6c 20 4e 4f 54 20 4e  "  AND sql NOT N
20fd0 55 4c 4c 22 2c 20 7a 4c 69 6b 65 29 3b 0a 20 20  ULL", zLike);.  
20fe0 20 20 20 20 72 75 6e 5f 73 63 68 65 6d 61 5f 64      run_schema_d
20ff0 75 6d 70 5f 71 75 65 72 79 28 70 2c 7a 53 71 6c  ump_query(p,zSql
21000 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
21010 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20  _free(zSql);.   
21020 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65     zSql = sqlite
21030 33 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20 20 20  3_mprintf(.     
21040 20 20 20 22 53 45 4c 45 43 54 20 73 71 6c 20 46     "SELECT sql F
21050 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
21060 72 20 22 0a 20 20 20 20 20 20 20 20 22 57 48 45  r ".        "WHE
21070 52 45 20 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c 22  RE sql NOT NULL"
21080 0a 20 20 20 20 20 20 20 20 22 20 20 41 4e 44 20  .        "  AND 
21090 74 79 70 65 20 49 4e 20 28 27 69 6e 64 65 78 27  type IN ('index'
210a0 2c 27 74 72 69 67 67 65 72 27 2c 27 76 69 65 77  ,'trigger','view
210b0 27 29 22 0a 20 20 20 20 20 20 20 20 22 20 20 41  ')".        "  A
210c0 4e 44 20 74 62 6c 5f 6e 61 6d 65 20 4c 49 4b 45  ND tbl_name LIKE
210d0 20 25 51 22 2c 20 7a 4c 69 6b 65 29 3b 0a 20 20   %Q", zLike);.  
210e0 20 20 20 20 72 75 6e 5f 74 61 62 6c 65 5f 64 75      run_table_du
210f0 6d 70 5f 71 75 65 72 79 28 70 2c 20 7a 53 71 6c  mp_query(p, zSql
21100 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
21110 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a  te3_free(zSql);.
21120 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
21130 3e 77 72 69 74 61 62 6c 65 53 63 68 65 6d 61 20  >writableSchema 
21140 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
21150 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 50 52 41  ntf(p->out, "PRA
21160 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68  GMA writable_sch
21170 65 6d 61 3d 4f 46 46 3b 5c 6e 22 29 3b 0a 20 20  ema=OFF;\n");.  
21180 20 20 20 20 70 2d 3e 77 72 69 74 61 62 6c 65 53      p->writableS
21190 63 68 65 6d 61 20 3d 20 30 3b 0a 20 20 20 20 7d  chema = 0;.    }
211a0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65  .    sqlite3_exe
211b0 63 28 70 2d 3e 64 62 2c 20 22 50 52 41 47 4d 41  c(p->db, "PRAGMA
211c0 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61   writable_schema
211d0 3d 4f 46 46 3b 22 2c 20 30 2c 20 30 2c 20 30 29  =OFF;", 0, 0, 0)
211e0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78  ;.    sqlite3_ex
211f0 65 63 28 70 2d 3e 64 62 2c 20 22 52 45 4c 45 41  ec(p->db, "RELEA
21200 53 45 20 64 75 6d 70 3b 22 2c 20 30 2c 20 30 2c  SE dump;", 0, 0,
21210 20 30 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69   0);.    raw_pri
21220 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e 6e  ntf(p->out, p->n
21230 45 72 72 20 3f 20 22 52 4f 4c 4c 42 41 43 4b 3b  Err ? "ROLLBACK;
21240 20 2d 2d 20 64 75 65 20 74 6f 20 65 72 72 6f 72   -- due to error
21250 73 5c 6e 22 20 3a 20 22 43 4f 4d 4d 49 54 3b 5c  s\n" : "COMMIT;\
21260 6e 22 29 3b 0a 20 20 20 20 70 2d 3e 73 68 6f 77  n");.    p->show
21270 48 65 61 64 65 72 20 3d 20 73 61 76 65 64 53 68  Header = savedSh
21280 6f 77 48 65 61 64 65 72 3b 0a 20 20 7d 65 6c 73  owHeader;.  }els
21290 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 65 27 20  e..  if( c=='e' 
212a0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
212b0 5b 30 5d 2c 20 22 65 63 68 6f 22 2c 20 6e 29 3d  [0], "echo", n)=
212c0 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41  =0 ){.    if( nA
212d0 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 73  rg==2 ){.      s
212e0 65 74 4f 72 43 6c 65 61 72 46 6c 61 67 28 70 2c  etOrClearFlag(p,
212f0 20 53 48 46 4c 47 5f 45 63 68 6f 2c 20 61 7a 41   SHFLG_Echo, azA
21300 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73  rg[1]);.    }els
21310 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  e{.      raw_pri
21320 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
21330 67 65 3a 20 2e 65 63 68 6f 20 6f 6e 7c 6f 66 66  ge: .echo on|off
21340 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
21350 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
21360 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 65 27 20  e..  if( c=='e' 
21370 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
21380 5b 30 5d 2c 20 22 65 71 70 22 2c 20 6e 29 3d 3d  [0], "eqp", n)==
21390 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72  0 ){.    if( nAr
213a0 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 69 66  g==2 ){.      if
213b0 28 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 31  ( strcmp(azArg[1
213c0 5d 2c 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a  ],"full")==0 ){.
213d0 20 20 20 20 20 20 20 20 70 2d 3e 61 75 74 6f 45          p->autoE
213e0 51 50 20 3d 20 32 3b 0a 20 20 20 20 20 20 7d 65  QP = 2;.      }e
213f0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e  lse{.        p->
21400 61 75 74 6f 45 51 50 20 3d 20 62 6f 6f 6c 65 61  autoEQP = boolea
21410 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29  nValue(azArg[1])
21420 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
21430 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  lse{.      raw_p
21440 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
21450 73 61 67 65 3a 20 2e 65 71 70 20 6f 6e 7c 6f 66  sage: .eqp on|of
21460 66 7c 66 75 6c 6c 5c 6e 22 29 3b 0a 20 20 20 20  f|full\n");.    
21470 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a    rc = 1;.    }.
21480 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
21490 3d 3d 27 65 27 20 26 26 20 73 74 72 6e 63 6d 70  =='e' && strncmp
214a0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 65 78 69 74  (azArg[0], "exit
214b0 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
214c0 69 66 28 20 6e 41 72 67 3e 31 20 26 26 20 28 72  if( nArg>1 && (r
214d0 63 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72  c = (int)integer
214e0 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 29  Value(azArg[1]))
214f0 21 3d 30 20 29 20 65 78 69 74 28 72 63 29 3b 0a  !=0 ) exit(rc);.
21500 20 20 20 20 72 63 20 3d 20 32 3b 0a 20 20 7d 65      rc = 2;.  }e
21510 6c 73 65 0a 0a 20 20 2f 2a 20 54 68 65 20 22 2e  lse..  /* The ".
21520 65 78 70 6c 61 69 6e 22 20 63 6f 6d 6d 61 6e 64  explain" command
21530 20 69 73 20 61 75 74 6f 6d 61 74 69 63 20 6e 6f   is automatic no
21540 77 2e 20 20 49 74 20 69 73 20 6c 61 72 67 65 6c  w.  It is largel
21550 79 20 70 6f 69 6e 74 6c 65 73 73 2e 20 20 49 74  y pointless.  It
21560 0a 20 20 2a 2a 20 72 65 74 61 69 6e 65 64 20 70  .  ** retained p
21570 75 72 65 6c 79 20 66 6f 72 20 62 61 63 6b 77 61  urely for backwa
21580 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  rds compatibilit
21590 79 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27 65  y */.  if( c=='e
215a0 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
215b0 72 67 5b 30 5d 2c 20 22 65 78 70 6c 61 69 6e 22  rg[0], "explain"
215c0 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  , n)==0 ){.    i
215d0 6e 74 20 76 61 6c 20 3d 20 31 3b 0a 20 20 20 20  nt val = 1;.    
215e0 69 66 28 20 6e 41 72 67 3e 3d 32 20 29 7b 0a 20  if( nArg>=2 ){. 
215f0 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
21600 61 7a 41 72 67 5b 31 5d 2c 22 61 75 74 6f 22 29  azArg[1],"auto")
21610 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 76  ==0 ){.        v
21620 61 6c 20 3d 20 39 39 3b 0a 20 20 20 20 20 20 7d  al = 99;.      }
21630 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 76 61  else{.        va
21640 6c 20 3d 20 20 62 6f 6f 6c 65 61 6e 56 61 6c 75  l =  booleanValu
21650 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  e(azArg[1]);.   
21660 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
21670 66 28 20 76 61 6c 3d 3d 31 20 26 26 20 70 2d 3e  f( val==1 && p->
21680 6d 6f 64 65 21 3d 4d 4f 44 45 5f 45 78 70 6c 61  mode!=MODE_Expla
21690 69 6e 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6e  in ){.      p->n
216a0 6f 72 6d 61 6c 4d 6f 64 65 20 3d 20 70 2d 3e 6d  ormalMode = p->m
216b0 6f 64 65 3b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f  ode;.      p->mo
216c0 64 65 20 3d 20 4d 4f 44 45 5f 45 78 70 6c 61 69  de = MODE_Explai
216d0 6e 3b 0a 20 20 20 20 20 20 70 2d 3e 61 75 74 6f  n;.      p->auto
216e0 45 78 70 6c 61 69 6e 20 3d 20 30 3b 0a 20 20 20  Explain = 0;.   
216f0 20 7d 65 6c 73 65 20 69 66 28 20 76 61 6c 3d 3d   }else if( val==
21700 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  0 ){.      if( p
21710 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78 70  ->mode==MODE_Exp
21720 6c 61 69 6e 20 29 20 70 2d 3e 6d 6f 64 65 20 3d  lain ) p->mode =
21730 20 70 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 3b 0a   p->normalMode;.
21740 20 20 20 20 20 20 70 2d 3e 61 75 74 6f 45 78 70        p->autoExp
21750 6c 61 69 6e 20 3d 20 30 3b 0a 20 20 20 20 7d 65  lain = 0;.    }e
21760 6c 73 65 20 69 66 28 20 76 61 6c 3d 3d 39 39 20  lse if( val==99 
21770 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  ){.      if( p->
21780 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c 61  mode==MODE_Expla
21790 69 6e 20 29 20 70 2d 3e 6d 6f 64 65 20 3d 20 70  in ) p->mode = p
217a0 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 3b 0a 20 20  ->normalMode;.  
217b0 20 20 20 20 70 2d 3e 61 75 74 6f 45 78 70 6c 61      p->autoExpla
217c0 69 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  in = 1;.    }.  
217d0 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
217e0 27 66 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'f' && strncmp(a
217f0 7a 41 72 67 5b 30 5d 2c 20 22 66 75 6c 6c 73 63  zArg[0], "fullsc
21800 68 65 6d 61 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  hema", n)==0 ){.
21810 20 20 20 20 53 68 65 6c 6c 53 74 61 74 65 20 64      ShellState d
21820 61 74 61 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a  ata;.    char *z
21830 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
21840 69 6e 74 20 64 6f 53 74 61 74 73 20 3d 20 30 3b  int doStats = 0;
21850 0a 20 20 20 20 6d 65 6d 63 70 79 28 26 64 61 74  .    memcpy(&dat
21860 61 2c 20 70 2c 20 73 69 7a 65 6f 66 28 64 61 74  a, p, sizeof(dat
21870 61 29 29 3b 0a 20 20 20 20 64 61 74 61 2e 73 68  a));.    data.sh
21880 6f 77 48 65 61 64 65 72 20 3d 20 30 3b 0a 20 20  owHeader = 0;.  
21890 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20 64    data.cMode = d
218a0 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f  ata.mode = MODE_
218b0 53 65 6d 69 3b 0a 20 20 20 20 69 66 28 20 6e 41  Semi;.    if( nA
218c0 72 67 3d 3d 32 20 26 26 20 6f 70 74 69 6f 6e 4d  rg==2 && optionM
218d0 61 74 63 68 28 61 7a 41 72 67 5b 31 5d 2c 20 22  atch(azArg[1], "
218e0 69 6e 64 65 6e 74 22 29 20 29 7b 0a 20 20 20 20  indent") ){.    
218f0 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20 64    data.cMode = d
21900 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f  ata.mode = MODE_
21910 50 72 65 74 74 79 3b 0a 20 20 20 20 20 20 6e 41  Pretty;.      nA
21920 72 67 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  rg = 1;.    }.  
21930 20 20 69 66 28 20 6e 41 72 67 21 3d 31 20 29 7b    if( nArg!=1 ){
21940 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
21950 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
21960 3a 20 2e 66 75 6c 6c 73 63 68 65 6d 61 20 3f 2d  : .fullschema ?-
21970 2d 69 6e 64 65 6e 74 3f 5c 6e 22 29 3b 0a 20 20  -indent?\n");.  
21980 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
21990 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
219a0 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a  and_exit;.    }.
219b0 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
219c0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
219d0 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 0a  te3_exec(p->db,.
219e0 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 73         "SELECT s
219f0 71 6c 20 46 52 4f 4d 22 0a 20 20 20 20 20 20 20  ql FROM".       
21a00 22 20 20 28 53 45 4c 45 43 54 20 73 71 6c 20 73  "  (SELECT sql s
21a10 71 6c 2c 20 74 79 70 65 20 74 79 70 65 2c 20 74  ql, type type, t
21a20 62 6c 5f 6e 61 6d 65 20 74 62 6c 5f 6e 61 6d 65  bl_name tbl_name
21a30 2c 20 6e 61 6d 65 20 6e 61 6d 65 2c 20 72 6f 77  , name name, row
21a40 69 64 20 78 22 0a 20 20 20 20 20 20 20 22 20 20  id x".       "  
21a50 20 20 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d     FROM sqlite_m
21a60 61 73 74 65 72 20 55 4e 49 4f 4e 20 41 4c 4c 22  aster UNION ALL"
21a70 0a 20 20 20 20 20 20 20 22 20 20 20 53 45 4c 45  .       "   SELE
21a80 43 54 20 73 71 6c 2c 20 74 79 70 65 2c 20 74 62  CT sql, type, tb
21a90 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c 20 72 6f  l_name, name, ro
21aa0 77 69 64 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  wid FROM sqlite_
21ab0 74 65 6d 70 5f 6d 61 73 74 65 72 29 20 22 0a 20  temp_master) ". 
21ac0 20 20 20 20 20 20 22 57 48 45 52 45 20 74 79 70        "WHERE typ
21ad0 65 21 3d 27 6d 65 74 61 27 20 41 4e 44 20 73 71  e!='meta' AND sq
21ae0 6c 20 4e 4f 54 4e 55 4c 4c 20 41 4e 44 20 6e 61  l NOTNULL AND na
21af0 6d 65 20 4e 4f 54 20 4c 49 4b 45 20 27 73 71 6c  me NOT LIKE 'sql
21b00 69 74 65 5f 25 27 20 22 0a 20 20 20 20 20 20 20  ite_%' ".       
21b10 22 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22  "ORDER BY rowid"
21b20 2c 0a 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63  ,.       callbac
21b30 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d  k, &data, &zErrM
21b40 73 67 0a 20 20 20 20 29 3b 0a 20 20 20 20 69 66  sg.    );.    if
21b50 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
21b60 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
21b70 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
21b80 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21b90 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64  _prepare_v2(p->d
21ba0 62 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  b,.             
21bb0 20 20 22 53 45 4c 45 43 54 20 72 6f 77 69 64 20    "SELECT rowid 
21bc0 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
21bd0 65 72 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  er".            
21be0 20 20 20 22 20 57 48 45 52 45 20 6e 61 6d 65 20     " WHERE name 
21bf0 47 4c 4f 42 20 27 73 71 6c 69 74 65 5f 73 74 61  GLOB 'sqlite_sta
21c00 74 5b 31 33 34 5d 27 22 2c 0a 20 20 20 20 20 20  t[134]'",.      
21c10 20 20 20 20 20 20 20 20 20 2d 31 2c 20 26 70 53           -1, &pS
21c20 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 64  tmt, 0);.      d
21c30 6f 53 74 61 74 73 20 3d 20 73 71 6c 69 74 65 33  oStats = sqlite3
21c40 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51  _step(pStmt)==SQ
21c50 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 20 20 20 20  LITE_ROW;.      
21c60 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
21c70 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 7d 0a 20  (pStmt);.    }. 
21c80 20 20 20 69 66 28 20 64 6f 53 74 61 74 73 3d 3d     if( doStats==
21c90 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  0 ){.      raw_p
21ca0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f  rintf(p->out, "/
21cb0 2a 20 4e 6f 20 53 54 41 54 20 74 61 62 6c 65 73  * No STAT tables
21cc0 20 61 76 61 69 6c 61 62 6c 65 20 2a 2f 5c 6e 22   available */\n"
21cd0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
21ce0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
21cf0 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45 20  ->out, "ANALYZE 
21d00 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c 6e  sqlite_master;\n
21d10 22 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ");.      sqlite
21d20 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 53  3_exec(p->db, "S
21d30 45 4c 45 43 54 20 27 41 4e 41 4c 59 5a 45 20 73  ELECT 'ANALYZE s
21d40 71 6c 69 74 65 5f 6d 61 73 74 65 72 27 22 2c 0a  qlite_master'",.
21d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d60 20 20 20 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61     callback, &da
21d70 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20  ta, &zErrMsg);. 
21d80 20 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20       data.cMode 
21d90 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f  = data.mode = MO
21da0 44 45 5f 49 6e 73 65 72 74 3b 0a 20 20 20 20 20  DE_Insert;.     
21db0 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62 6c 65   data.zDestTable
21dc0 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 31   = "sqlite_stat1
21dd0 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f 65  ";.      shell_e
21de0 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45 4c 45  xec(p->db, "SELE
21df0 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
21e00 5f 73 74 61 74 31 22 2c 0a 20 20 20 20 20 20 20  _stat1",.       
21e10 20 20 20 20 20 20 20 20 20 20 73 68 65 6c 6c 5f            shell_
21e20 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c  callback, &data,
21e30 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20  &zErrMsg);.     
21e40 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62 6c 65   data.zDestTable
21e50 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 33   = "sqlite_stat3
21e60 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f 65  ";.      shell_e
21e70 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45 4c 45  xec(p->db, "SELE
21e80 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
21e90 5f 73 74 61 74 33 22 2c 0a 20 20 20 20 20 20 20  _stat3",.       
21ea0 20 20 20 20 20 20 20 20 20 20 73 68 65 6c 6c 5f            shell_
21eb0 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c  callback, &data,
21ec0 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20  &zErrMsg);.     
21ed0 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62 6c 65   data.zDestTable
21ee0 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 34   = "sqlite_stat4
21ef0 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f 65  ";.      shell_e
21f00 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45 4c 45  xec(p->db, "SELE
21f10 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
21f20 5f 73 74 61 74 34 22 2c 0a 20 20 20 20 20 20 20  _stat4",.       
21f30 20 20 20 20 20 20 20 20 20 20 73 68 65 6c 6c 5f            shell_
21f40 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c  callback, &data,
21f50 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20   &zErrMsg);.    
21f60 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
21f70 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45 20 73 71  out, "ANALYZE sq
21f80 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c 6e 22 29  lite_master;\n")
21f90 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
21fa0 0a 20 20 69 66 28 20 63 3d 3d 27 68 27 20 26 26  .  if( c=='h' &&
21fb0 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
21fc0 5d 2c 20 22 68 65 61 64 65 72 73 22 2c 20 6e 29  ], "headers", n)
21fd0 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
21fe0 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg==2 ){.      
21ff0 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 3d 20  p->showHeader = 
22000 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41  booleanValue(azA
22010 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73  rg[1]);.    }els
22020 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  e{.      raw_pri
22030 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
22040 67 65 3a 20 2e 68 65 61 64 65 72 73 20 6f 6e 7c  ge: .headers on|
22050 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  off\n");.      r
22060 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  c = 1;.    }.  }
22070 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
22080 68 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  h' && strncmp(az
22090 41 72 67 5b 30 5d 2c 20 22 68 65 6c 70 22 2c 20  Arg[0], "help", 
220a0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74 66  n)==0 ){.    utf
220b0 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
220c0 20 22 25 73 22 2c 20 7a 48 65 6c 70 29 3b 0a 20   "%s", zHelp);. 
220d0 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
220e0 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='i' && strncmp(
220f0 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6d 70 6f 72  azArg[0], "impor
22100 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  t", n)==0 ){.   
22110 20 63 68 61 72 20 2a 7a 54 61 62 6c 65 3b 20 20   char *zTable;  
22120 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22130 49 6e 73 65 72 74 20 64 61 74 61 20 69 6e 74 6f  Insert data into
22140 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
22150 20 20 20 63 68 61 72 20 2a 7a 46 69 6c 65 3b 20     char *zFile; 
22160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22170 2a 20 4e 61 6d 65 20 6f 66 20 66 69 6c 65 20 74  * Name of file t
22180 6f 20 65 78 74 72 61 20 63 6f 6e 74 65 6e 74 20  o extra content 
22190 66 72 6f 6d 20 2a 2f 0a 20 20 20 20 73 71 6c 69  from */.    sqli
221a0 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20  te3_stmt *pStmt 
221b0 3d 20 4e 55 4c 4c 3b 20 2f 2a 20 41 20 73 74 61  = NULL; /* A sta
221c0 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 20 20 69 6e  tement */.    in
221d0 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  t nCol;         
221e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
221f0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
22200 6e 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  n the table */. 
22210 20 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20     int nByte;   
22220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22230 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
22240 73 20 69 6e 20 61 6e 20 53 51 4c 20 73 74 72 69  s in an SQL stri
22250 6e 67 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 2c  ng */.    int i,
22260 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   j;             
22270 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
22280 75 6e 74 65 72 73 20 2a 2f 0a 20 20 20 20 69 6e  unters */.    in
22290 74 20 6e 65 65 64 43 6f 6d 6d 69 74 3b 20 20 20  t needCommit;   
222a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
222b0 65 20 74 6f 20 43 4f 4d 4d 49 54 20 6f 72 20 52  e to COMMIT or R
222c0 4f 4c 4c 42 41 43 4b 20 61 74 20 65 6e 64 20 2a  OLLBACK at end *
222d0 2f 0a 20 20 20 20 69 6e 74 20 6e 53 65 70 3b 20  /.    int nSep; 
222e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
22300 79 74 65 73 20 69 6e 20 70 2d 3e 63 6f 6c 53 65  ytes in p->colSe
22310 70 61 72 61 74 6f 72 5b 5d 20 2a 2f 0a 20 20 20  parator[] */.   
22320 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20 20 20   char *zSql;    
22330 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22340 41 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  An SQL statement
22350 20 2a 2f 0a 20 20 20 20 49 6d 70 6f 72 74 43 74   */.    ImportCt
22360 78 20 73 43 74 78 3b 20 20 20 20 20 20 20 20 20  x sCtx;         
22370 20 20 20 20 2f 2a 20 52 65 61 64 65 72 20 63 6f      /* Reader co
22380 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 63 68 61  ntext */.    cha
22390 72 20 2a 28 53 51 4c 49 54 45 5f 43 44 45 43 4c  r *(SQLITE_CDECL
223a0 20 2a 78 52 65 61 64 29 28 49 6d 70 6f 72 74 43   *xRead)(ImportC
223b0 74 78 2a 29 3b 20 2f 2a 20 46 75 6e 63 20 74 6f  tx*); /* Func to
223c0 20 72 65 61 64 20 6f 6e 65 20 76 61 6c 75 65 20   read one value 
223d0 2a 2f 0a 20 20 20 20 69 6e 74 20 28 53 51 4c 49  */.    int (SQLI
223e0 54 45 5f 43 44 45 43 4c 20 2a 78 43 6c 6f 73 65  TE_CDECL *xClose
223f0 72 29 28 46 49 4c 45 2a 29 3b 20 20 20 20 20 20  r)(FILE*);      
22400 2f 2a 20 46 75 6e 63 20 74 6f 20 63 6c 6f 73 65  /* Func to close
22410 20 66 69 6c 65 20 2a 2f 0a 0a 20 20 20 20 69 66   file */..    if
22420 28 20 6e 41 72 67 21 3d 33 20 29 7b 0a 20 20 20  ( nArg!=3 ){.   
22430 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
22440 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 69  derr, "Usage: .i
22450 6d 70 6f 72 74 20 46 49 4c 45 20 54 41 42 4c 45  mport FILE TABLE
22460 5c 6e 22 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  \n");.      goto
22470 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
22480 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 46  it;.    }.    zF
22490 69 6c 65 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a  ile = azArg[1];.
224a0 20 20 20 20 7a 54 61 62 6c 65 20 3d 20 61 7a 41      zTable = azA
224b0 72 67 5b 32 5d 3b 0a 20 20 20 20 73 65 65 6e 49  rg[2];.    seenI
224c0 6e 74 65 72 72 75 70 74 20 3d 20 30 3b 0a 20 20  nterrupt = 0;.  
224d0 20 20 6d 65 6d 73 65 74 28 26 73 43 74 78 2c 20    memset(&sCtx, 
224e0 30 2c 20 73 69 7a 65 6f 66 28 73 43 74 78 29 29  0, sizeof(sCtx))
224f0 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  ;.    open_db(p,
22500 20 30 29 3b 0a 20 20 20 20 6e 53 65 70 20 3d 20   0);.    nSep = 
22510 73 74 72 6c 65 6e 33 30 28 70 2d 3e 63 6f 6c 53  strlen30(p->colS
22520 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 69  eparator);.    i
22530 66 28 20 6e 53 65 70 3d 3d 30 20 29 7b 0a 20 20  f( nSep==0 ){.  
22540 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
22550 74 64 65 72 72 2c 0a 20 20 20 20 20 20 20 20 20  tderr,.         
22560 20 20 20 20 20 20 20 20 22 45 72 72 6f 72 3a 20          "Error: 
22570 6e 6f 6e 2d 6e 75 6c 6c 20 63 6f 6c 75 6d 6e 20  non-null column 
22580 73 65 70 61 72 61 74 6f 72 20 72 65 71 75 69 72  separator requir
22590 65 64 20 66 6f 72 20 69 6d 70 6f 72 74 5c 6e 22  ed for import\n"
225a0 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
225b0 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  1;.    }.    if(
225c0 20 6e 53 65 70 3e 31 20 29 7b 0a 20 20 20 20 20   nSep>1 ){.     
225d0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
225e0 72 72 2c 20 22 45 72 72 6f 72 3a 20 6d 75 6c 74  rr, "Error: mult
225f0 69 2d 63 68 61 72 61 63 74 65 72 20 63 6f 6c 75  i-character colu
22600 6d 6e 20 73 65 70 61 72 61 74 6f 72 73 20 6e 6f  mn separators no
22610 74 20 61 6c 6c 6f 77 65 64 22 0a 20 20 20 20 20  t allowed".     
22620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22630 20 22 20 66 6f 72 20 69 6d 70 6f 72 74 5c 6e 22   " for import\n"
22640 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
22650 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 53 65  1;.    }.    nSe
22660 70 20 3d 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e  p = strlen30(p->
22670 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20  rowSeparator);. 
22680 20 20 20 69 66 28 20 6e 53 65 70 3d 3d 30 20 29     if( nSep==0 )
22690 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
226a0 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
226b0 72 3a 20 6e 6f 6e 2d 6e 75 6c 6c 20 72 6f 77 20  r: non-null row 
226c0 73 65 70 61 72 61 74 6f 72 20 72 65 71 75 69 72  separator requir
226d0 65 64 20 66 6f 72 20 69 6d 70 6f 72 74 5c 6e 22  ed for import\n"
226e0 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
226f0 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  1;.    }.    if(
22700 20 6e 53 65 70 3d 3d 32 20 26 26 20 70 2d 3e 6d   nSep==2 && p->m
22710 6f 64 65 3d 3d 4d 4f 44 45 5f 43 73 76 20 26 26  ode==MODE_Csv &&
22720 20 73 74 72 63 6d 70 28 70 2d 3e 72 6f 77 53 65   strcmp(p->rowSe
22730 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 43 72 4c  parator, SEP_CrL
22740 66 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f  f)==0 ){.      /
22750 2a 20 57 68 65 6e 20 69 6d 70 6f 72 74 69 6e 67  * When importing
22760 20 43 53 56 20 28 6f 6e 6c 79 29 2c 20 69 66 20   CSV (only), if 
22770 74 68 65 20 72 6f 77 20 73 65 70 61 72 61 74 6f  the row separato
22780 72 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 0a  r is set to the.
22790 20 20 20 20 20 20 2a 2a 20 64 65 66 61 75 6c 74        ** default
227a0 20 6f 75 74 70 75 74 20 72 6f 77 20 73 65 70 61   output row sepa
227b0 72 61 74 6f 72 2c 20 63 68 61 6e 67 65 20 69 74  rator, change it
227c0 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74 20   to the default 
227d0 69 6e 70 75 74 0a 20 20 20 20 20 20 2a 2a 20 72  input.      ** r
227e0 6f 77 20 73 65 70 61 72 61 74 6f 72 2e 20 20 54  ow separator.  T
227f0 68 69 73 20 61 76 6f 69 64 73 20 68 61 76 69 6e  his avoids havin
22800 67 20 74 6f 20 6d 61 69 6e 74 61 69 6e 20 64 69  g to maintain di
22810 66 66 65 72 65 6e 74 20 69 6e 70 75 74 0a 20 20  fferent input.  
22820 20 20 20 20 2a 2a 20 61 6e 64 20 6f 75 74 70 75      ** and outpu
22830 74 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 73  t row separators
22840 2e 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  . */.      sqlit
22850 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
22860 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74  of(p->rowSeparat
22870 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72  or), p->rowSepar
22880 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29 3b 0a  ator, SEP_Row);.
22890 20 20 20 20 20 20 6e 53 65 70 20 3d 20 73 74 72        nSep = str
228a0 6c 65 6e 33 30 28 70 2d 3e 72 6f 77 53 65 70 61  len30(p->rowSepa
228b0 72 61 74 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  rator);.    }.  
228c0 20 20 69 66 28 20 6e 53 65 70 3e 31 20 29 7b 0a    if( nSep>1 ){.
228d0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
228e0 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
228f0 20 6d 75 6c 74 69 2d 63 68 61 72 61 63 74 65 72   multi-character
22900 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 73 20   row separators 
22910 6e 6f 74 20 61 6c 6c 6f 77 65 64 22 0a 20 20 20  not allowed".   
22920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22930 20 20 20 22 20 66 6f 72 20 69 6d 70 6f 72 74 5c     " for import\
22940 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  n");.      retur
22950 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  n 1;.    }.    s
22960 43 74 78 2e 7a 46 69 6c 65 20 3d 20 7a 46 69 6c  Ctx.zFile = zFil
22970 65 3b 0a 20 20 20 20 73 43 74 78 2e 6e 4c 69 6e  e;.    sCtx.nLin
22980 65 20 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 73  e = 1;.    if( s
22990 43 74 78 2e 7a 46 69 6c 65 5b 30 5d 3d 3d 27 7c  Ctx.zFile[0]=='|
229a0 27 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  ' ){.#ifdef SQLI
229b0 54 45 5f 4f 4d 49 54 5f 50 4f 50 45 4e 0a 20 20  TE_OMIT_POPEN.  
229c0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
229d0 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 70  tderr, "Error: p
229e0 69 70 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70  ipes are not sup
229f0 70 6f 72 74 65 64 20 69 6e 20 74 68 69 73 20 4f  ported in this O
22a00 53 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74  S\n");.      ret
22a10 75 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20 20 20  urn 1;.#else.   
22a20 20 20 20 73 43 74 78 2e 69 6e 20 3d 20 70 6f 70     sCtx.in = pop
22a30 65 6e 28 73 43 74 78 2e 7a 46 69 6c 65 2b 31 2c  en(sCtx.zFile+1,
22a40 20 22 72 22 29 3b 0a 20 20 20 20 20 20 73 43 74   "r");.      sCt
22a50 78 2e 7a 46 69 6c 65 20 3d 20 22 3c 70 69 70 65  x.zFile = "<pipe
22a60 3e 22 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73 65  >";.      xClose
22a70 72 20 3d 20 70 63 6c 6f 73 65 3b 0a 23 65 6e 64  r = pclose;.#end
22a80 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  if.    }else{.  
22a90 20 20 20 20 73 43 74 78 2e 69 6e 20 3d 20 66 6f      sCtx.in = fo
22aa0 70 65 6e 28 73 43 74 78 2e 7a 46 69 6c 65 2c 20  pen(sCtx.zFile, 
22ab0 22 72 62 22 29 3b 0a 20 20 20 20 20 20 78 43 6c  "rb");.      xCl
22ac0 6f 73 65 72 20 3d 20 66 63 6c 6f 73 65 3b 0a 20  oser = fclose;. 
22ad0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e     }.    if( p->
22ae0 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 41 73 63 69 69  mode==MODE_Ascii
22af0 20 29 7b 0a 20 20 20 20 20 20 78 52 65 61 64 20   ){.      xRead 
22b00 3d 20 61 73 63 69 69 5f 72 65 61 64 5f 6f 6e 65  = ascii_read_one
22b10 5f 66 69 65 6c 64 3b 0a 20 20 20 20 7d 65 6c 73  _field;.    }els
22b20 65 7b 0a 20 20 20 20 20 20 78 52 65 61 64 20 3d  e{.      xRead =
22b30 20 63 73 76 5f 72 65 61 64 5f 6f 6e 65 5f 66 69   csv_read_one_fi
22b40 65 6c 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  eld;.    }.    i
22b50 66 28 20 73 43 74 78 2e 69 6e 3d 3d 30 20 29 7b  f( sCtx.in==0 ){
22b60 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
22b70 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
22b80 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c  r: cannot open \
22b90 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c 65 29  "%s\"\n", zFile)
22ba0 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31  ;.      return 1
22bb0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 43 74 78  ;.    }.    sCtx
22bc0 2e 63 43 6f 6c 53 65 70 20 3d 20 70 2d 3e 63 6f  .cColSep = p->co
22bd0 6c 53 65 70 61 72 61 74 6f 72 5b 30 5d 3b 0a 20  lSeparator[0];. 
22be0 20 20 20 73 43 74 78 2e 63 52 6f 77 53 65 70 20     sCtx.cRowSep 
22bf0 3d 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  = p->rowSeparato
22c00 72 5b 30 5d 3b 0a 20 20 20 20 7a 53 71 6c 20 3d  r[0];.    zSql =
22c10 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
22c20 28 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  ("SELECT * FROM 
22c30 25 73 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20  %s", zTable);.  
22c40 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b    if( zSql==0 ){
22c50 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
22c60 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
22c70 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c  : out of memory\
22c80 6e 22 29 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73  n");.      xClos
22c90 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20  er(sCtx.in);.   
22ca0 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
22cb0 20 7d 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 73   }.    nByte = s
22cc0 74 72 6c 65 6e 33 30 28 7a 53 71 6c 29 3b 0a 20  trlen30(zSql);. 
22cd0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
22ce0 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62  prepare_v2(p->db
22cf0 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74  , zSql, -1, &pSt
22d00 6d 74 2c 20 30 29 3b 0a 20 20 20 20 69 6d 70 6f  mt, 0);.    impo
22d10 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 26  rt_append_char(&
22d20 73 43 74 78 2c 20 30 29 3b 20 20 20 20 2f 2a 20  sCtx, 0);    /* 
22d30 54 6f 20 65 6e 73 75 72 65 20 73 43 74 78 2e 7a  To ensure sCtx.z
22d40 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f   is allocated */
22d50 0a 20 20 20 20 69 66 28 20 72 63 20 26 26 20 73  .    if( rc && s
22d60 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62 28 22  qlite3_strglob("
22d70 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 2a  no such table: *
22d80 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
22d90 67 28 70 2d 3e 64 62 29 29 3d 3d 30 20 29 7b 0a  g(p->db))==0 ){.
22da0 20 20 20 20 20 20 63 68 61 72 20 2a 7a 43 72 65        char *zCre
22db0 61 74 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ate = sqlite3_mp
22dc0 72 69 6e 74 66 28 22 43 52 45 41 54 45 20 54 41  rintf("CREATE TA
22dd0 42 4c 45 20 25 73 22 2c 20 7a 54 61 62 6c 65 29  BLE %s", zTable)
22de0 3b 0a 20 20 20 20 20 20 63 68 61 72 20 63 53 65  ;.      char cSe
22df0 70 20 3d 20 27 28 27 3b 0a 20 20 20 20 20 20 77  p = '(';.      w
22e00 68 69 6c 65 28 20 78 52 65 61 64 28 26 73 43 74  hile( xRead(&sCt
22e10 78 29 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 43  x) ){.        zC
22e20 72 65 61 74 65 20 3d 20 73 71 6c 69 74 65 33 5f  reate = sqlite3_
22e30 6d 70 72 69 6e 74 66 28 22 25 7a 25 63 5c 6e 20  mprintf("%z%c\n 
22e40 20 5c 22 25 77 5c 22 20 54 45 58 54 22 2c 20 7a   \"%w\" TEXT", z
22e50 43 72 65 61 74 65 2c 20 63 53 65 70 2c 20 73 43  Create, cSep, sC
22e60 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 63  tx.z);.        c
22e70 53 65 70 20 3d 20 27 2c 27 3b 0a 20 20 20 20 20  Sep = ',';.     
22e80 20 20 20 69 66 28 20 73 43 74 78 2e 63 54 65 72     if( sCtx.cTer
22e90 6d 21 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70 20  m!=sCtx.cColSep 
22ea0 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d  ) break;.      }
22eb0 0a 20 20 20 20 20 20 69 66 28 20 63 53 65 70 3d  .      if( cSep=
22ec0 3d 27 28 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='(' ){.        
22ed0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 43 72  sqlite3_free(zCr
22ee0 65 61 74 65 29 3b 0a 20 20 20 20 20 20 20 20 73  eate);.        s
22ef0 71 6c 69 74 65 33 5f 66 72 65 65 28 73 43 74 78  qlite3_free(sCtx
22f00 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 78 43 6c  .z);.        xCl
22f10 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20  oser(sCtx.in);. 
22f20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
22f30 74 66 28 73 74 64 65 72 72 2c 22 25 73 3a 20 65  tf(stderr,"%s: e
22f40 6d 70 74 79 20 66 69 6c 65 5c 6e 22 2c 20 73 43  mpty file\n", sC
22f50 74 78 2e 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20  tx.zFile);.     
22f60 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
22f70 20 20 20 7d 0a 20 20 20 20 20 20 7a 43 72 65 61     }.      zCrea
22f80 74 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  te = sqlite3_mpr
22f90 69 6e 74 66 28 22 25 7a 5c 6e 29 22 2c 20 7a 43  intf("%z\n)", zC
22fa0 72 65 61 74 65 29 3b 0a 20 20 20 20 20 20 72 63  reate);.      rc
22fb0 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
22fc0 70 2d 3e 64 62 2c 20 7a 43 72 65 61 74 65 2c 20  p->db, zCreate, 
22fd0 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  0, 0, 0);.      
22fe0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 43 72  sqlite3_free(zCr
22ff0 65 61 74 65 29 3b 0a 20 20 20 20 20 20 69 66 28  eate);.      if(
23000 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 75   rc ){.        u
23010 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
23020 72 2c 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  r, "CREATE TABLE
23030 20 25 73 28 2e 2e 2e 29 20 66 61 69 6c 65 64 3a   %s(...) failed:
23040 20 25 73 5c 6e 22 2c 20 7a 54 61 62 6c 65 2c 0a   %s\n", zTable,.
23050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23060 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70  sqlite3_errmsg(p
23070 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 20 20  ->db));.        
23080 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73 43 74  sqlite3_free(sCt
23090 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 78 43  x.z);.        xC
230a0 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a  loser(sCtx.in);.
230b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
230c0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
230d0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
230e0 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a  pare_v2(p->db, z
230f0 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c  Sql, -1, &pStmt,
23100 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73   0);.    }.    s
23110 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
23120 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b  );.    if( rc ){
23130 0a 20 20 20 20 20 20 69 66 20 28 70 53 74 6d 74  .      if (pStmt
23140 29 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  ) sqlite3_finali
23150 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20  ze(pStmt);.     
23160 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
23170 65 72 72 2c 22 45 72 72 6f 72 3a 20 25 73 5c 6e  err,"Error: %s\n
23180 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
23190 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20  g(p->db));.     
231a0 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e   xCloser(sCtx.in
231b0 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
231c0 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 43 6f  1;.    }.    nCo
231d0 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  l = sqlite3_colu
231e0 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 3b  mn_count(pStmt);
231f0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  .    sqlite3_fin
23200 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
23210 20 20 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 20    pStmt = 0;.   
23220 20 69 66 28 20 6e 43 6f 6c 3d 3d 30 20 29 20 72   if( nCol==0 ) r
23230 65 74 75 72 6e 20 30 3b 20 2f 2a 20 6e 6f 20 63  eturn 0; /* no c
23240 6f 6c 75 6d 6e 73 2c 20 6e 6f 20 65 72 72 6f 72  olumns, no error
23250 20 2a 2f 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73   */.    zSql = s
23260 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28  qlite3_malloc64(
23270 20 6e 42 79 74 65 2a 32 20 2b 20 32 30 20 2b 20   nByte*2 + 20 + 
23280 6e 43 6f 6c 2a 32 20 29 3b 0a 20 20 20 20 69 66  nCol*2 );.    if
23290 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
232a0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
232b0 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75  derr, "Error: ou
232c0 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b  t of memory\n");
232d0 0a 20 20 20 20 20 20 78 43 6c 6f 73 65 72 28 73  .      xCloser(s
232e0 43 74 78 2e 69 6e 29 3b 0a 20 20 20 20 20 20 72  Ctx.in);.      r
232f0 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
23300 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
23310 6e 74 66 28 6e 42 79 74 65 2b 32 30 2c 20 7a 53  ntf(nByte+20, zS
23320 71 6c 2c 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  ql, "INSERT INTO
23330 20 5c 22 25 77 5c 22 20 56 41 4c 55 45 53 28 3f   \"%w\" VALUES(?
23340 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20  ", zTable);.    
23350 6a 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 53 71  j = strlen30(zSq
23360 6c 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b  l);.    for(i=1;
23370 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20   i<nCol; i++){. 
23380 20 20 20 20 20 7a 53 71 6c 5b 6a 2b 2b 5d 20 3d       zSql[j++] =
23390 20 27 2c 27 3b 0a 20 20 20 20 20 20 7a 53 71 6c   ',';.      zSql
233a0 5b 6a 2b 2b 5d 20 3d 20 27 3f 27 3b 0a 20 20 20  [j++] = '?';.   
233b0 20 7d 0a 20 20 20 20 7a 53 71 6c 5b 6a 2b 2b 5d   }.    zSql[j++]
233c0 20 3d 20 27 29 27 3b 0a 20 20 20 20 7a 53 71 6c   = ')';.    zSql
233d0 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20 20 72 63 20  [j] = 0;.    rc 
233e0 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
233f0 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c  e_v2(p->db, zSql
23400 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29  , -1, &pStmt, 0)
23410 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
23420 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66  ee(zSql);.    if
23430 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 75 74  ( rc ){.      ut
23440 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
23450 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c  , "Error: %s\n",
23460 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
23470 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 69  p->db));.      i
23480 66 20 28 70 53 74 6d 74 29 20 73 71 6c 69 74 65  f (pStmt) sqlite
23490 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
234a0 29 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73 65 72  );.      xCloser
234b0 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20 20 20  (sCtx.in);.     
234c0 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
234d0 0a 20 20 20 20 6e 65 65 64 43 6f 6d 6d 69 74 20  .    needCommit 
234e0 3d 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75  = sqlite3_get_au
234f0 74 6f 63 6f 6d 6d 69 74 28 70 2d 3e 64 62 29 3b  tocommit(p->db);
23500 0a 20 20 20 20 69 66 28 20 6e 65 65 64 43 6f 6d  .    if( needCom
23510 6d 69 74 20 29 20 73 71 6c 69 74 65 33 5f 65 78  mit ) sqlite3_ex
23520 65 63 28 70 2d 3e 64 62 2c 20 22 42 45 47 49 4e  ec(p->db, "BEGIN
23530 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20  ", 0, 0, 0);.   
23540 20 64 6f 7b 0a 20 20 20 20 20 20 69 6e 74 20 73   do{.      int s
23550 74 61 72 74 4c 69 6e 65 20 3d 20 73 43 74 78 2e  tartLine = sCtx.
23560 6e 4c 69 6e 65 3b 0a 20 20 20 20 20 20 66 6f 72  nLine;.      for
23570 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b  (i=0; i<nCol; i+
23580 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72  +){.        char
23590 20 2a 7a 20 3d 20 78 52 65 61 64 28 26 73 43 74   *z = xRead(&sCt
235a0 78 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 0a 20  x);.        /*. 
235b0 20 20 20 20 20 20 20 2a 2a 20 44 69 64 20 77 65         ** Did we
235c0 20 72 65 61 63 68 20 65 6e 64 2d 6f 66 2d 66 69   reach end-of-fi
235d0 6c 65 20 62 65 66 6f 72 65 20 66 69 6e 64 69 6e  le before findin
235e0 67 20 61 6e 79 20 63 6f 6c 75 6d 6e 73 3f 0a 20  g any columns?. 
235f0 20 20 20 20 20 20 20 2a 2a 20 49 66 20 73 6f 2c         ** If so,
23600 20 73 74 6f 70 20 69 6e 73 74 65 61 64 20 6f 66   stop instead of
23610 20 4e 55 4c 4c 20 66 69 6c 6c 69 6e 67 20 74 68   NULL filling th
23620 65 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75  e remaining colu
23630 6d 6e 73 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  mns..        */.
23640 20 20 20 20 20 20 20 20 69 66 28 20 7a 3d 3d 30          if( z==0
23650 20 26 26 20 69 3d 3d 30 20 29 20 62 72 65 61 6b   && i==0 ) break
23660 3b 0a 20 20 20 20 20 20 20 20 2f 2a 0a 20 20 20  ;.        /*.   
23670 20 20 20 20 20 2a 2a 20 44 69 64 20 77 65 20 72       ** Did we r
23680 65 61 63 68 20 65 6e 64 2d 6f 66 2d 66 69 6c 65  each end-of-file
23690 20 4f 52 20 65 6e 64 2d 6f 66 2d 6c 69 6e 65 20   OR end-of-line 
236a0 62 65 66 6f 72 65 20 66 69 6e 64 69 6e 67 20 61  before finding a
236b0 6e 79 0a 20 20 20 20 20 20 20 20 2a 2a 20 63 6f  ny.        ** co
236c0 6c 75 6d 6e 73 20 69 6e 20 41 53 43 49 49 20 6d  lumns in ASCII m
236d0 6f 64 65 3f 20 20 49 66 20 73 6f 2c 20 73 74 6f  ode?  If so, sto
236e0 70 20 69 6e 73 74 65 61 64 20 6f 66 20 4e 55 4c  p instead of NUL
236f0 4c 20 66 69 6c 6c 69 6e 67 0a 20 20 20 20 20 20  L filling.      
23700 20 20 2a 2a 20 74 68 65 20 72 65 6d 61 69 6e 69    ** the remaini
23710 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 20 20 20 20  ng columns..    
23720 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69      */.        i
23730 66 28 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45  f( p->mode==MODE
23740 5f 41 73 63 69 69 20 26 26 20 28 7a 3d 3d 30 20  _Ascii && (z==0 
23750 7c 7c 20 7a 5b 30 5d 3d 3d 30 29 20 26 26 20 69  || z[0]==0) && i
23760 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
23770 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e       sqlite3_bin
23780 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69 2b  d_text(pStmt, i+
23790 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
237a0 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
237b0 20 20 20 20 20 69 66 28 20 69 3c 6e 43 6f 6c 2d       if( i<nCol-
237c0 31 20 26 26 20 73 43 74 78 2e 63 54 65 72 6d 21  1 && sCtx.cTerm!
237d0 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70 20 29 7b  =sCtx.cColSep ){
237e0 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
237f0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
23800 25 73 3a 25 64 3a 20 65 78 70 65 63 74 65 64 20  %s:%d: expected 
23810 25 64 20 63 6f 6c 75 6d 6e 73 20 62 75 74 20 66  %d columns but f
23820 6f 75 6e 64 20 25 64 20 2d 20 22 0a 20 20 20 20  ound %d - ".    
23830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23840 20 20 20 20 20 20 22 66 69 6c 6c 69 6e 67 20 74        "filling t
23850 68 65 20 72 65 73 74 20 77 69 74 68 20 4e 55 4c  he rest with NUL
23860 4c 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  L\n",.          
23870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23880 73 43 74 78 2e 7a 46 69 6c 65 2c 20 73 74 61 72  sCtx.zFile, star
23890 74 4c 69 6e 65 2c 20 6e 43 6f 6c 2c 20 69 2b 31  tLine, nCol, i+1
238a0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 20 2b  );.          i +
238b0 3d 20 32 3b 0a 20 20 20 20 20 20 20 20 20 20 77  = 2;.          w
238c0 68 69 6c 65 28 20 69 3c 3d 6e 43 6f 6c 20 29 7b  hile( i<=nCol ){
238d0 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75   sqlite3_bind_nu
238e0 6c 6c 28 70 53 74 6d 74 2c 20 69 29 3b 20 69 2b  ll(pStmt, i); i+
238f0 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20  +; }.        }. 
23900 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
23910 20 73 43 74 78 2e 63 54 65 72 6d 3d 3d 73 43 74   sCtx.cTerm==sCt
23920 78 2e 63 43 6f 6c 53 65 70 20 29 7b 0a 20 20 20  x.cColSep ){.   
23930 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
23940 20 20 20 78 52 65 61 64 28 26 73 43 74 78 29 3b     xRead(&sCtx);
23950 0a 20 20 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a  .          i++;.
23960 20 20 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20          }while( 
23970 73 43 74 78 2e 63 54 65 72 6d 3d 3d 73 43 74 78  sCtx.cTerm==sCtx
23980 2e 63 43 6f 6c 53 65 70 20 29 3b 0a 20 20 20 20  .cColSep );.    
23990 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
239a0 73 74 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20  stderr, "%s:%d: 
239b0 65 78 70 65 63 74 65 64 20 25 64 20 63 6f 6c 75  expected %d colu
239c0 6d 6e 73 20 62 75 74 20 66 6f 75 6e 64 20 25 64  mns but found %d
239d0 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20   - ".           
239e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 65 78               "ex
239f0 74 72 61 73 20 69 67 6e 6f 72 65 64 5c 6e 22 2c  tras ignored\n",
23a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23a10 20 20 20 20 20 20 20 20 20 73 43 74 78 2e 7a 46           sCtx.zF
23a20 69 6c 65 2c 20 73 74 61 72 74 4c 69 6e 65 2c 20  ile, startLine, 
23a30 6e 43 6f 6c 2c 20 69 29 3b 0a 20 20 20 20 20 20  nCol, i);.      
23a40 7d 0a 20 20 20 20 20 20 69 66 28 20 69 3e 3d 6e  }.      if( i>=n
23a50 43 6f 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 73  Col ){.        s
23a60 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d  qlite3_step(pStm
23a70 74 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  t);.        rc =
23a80 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70   sqlite3_reset(p
23a90 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 69  Stmt);.        i
23aa0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
23ab0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74   ){.          ut
23ac0 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
23ad0 2c 20 22 25 73 3a 25 64 3a 20 49 4e 53 45 52 54  , "%s:%d: INSERT
23ae0 20 66 61 69 6c 65 64 3a 20 25 73 5c 6e 22 2c 20   failed: %s\n", 
23af0 73 43 74 78 2e 7a 46 69 6c 65 2c 0a 20 20 20 20  sCtx.zFile,.    
23b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b10 20 20 73 74 61 72 74 4c 69 6e 65 2c 20 73 71 6c    startLine, sql
23b20 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64  ite3_errmsg(p->d
23b30 62 29 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  b));.        }. 
23b40 20 20 20 20 20 7d 0a 20 20 20 20 7d 77 68 69 6c       }.    }whil
23b50 65 28 20 73 43 74 78 2e 63 54 65 72 6d 21 3d 45  e( sCtx.cTerm!=E
23b60 4f 46 20 29 3b 0a 0a 20 20 20 20 78 43 6c 6f 73  OF );..    xClos
23b70 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20  er(sCtx.in);.   
23b80 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73 43   sqlite3_free(sC
23b90 74 78 2e 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74  tx.z);.    sqlit
23ba0 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d  e3_finalize(pStm
23bb0 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 65 64  t);.    if( need
23bc0 43 6f 6d 6d 69 74 20 29 20 73 71 6c 69 74 65 33  Commit ) sqlite3
23bd0 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 43 4f  _exec(p->db, "CO
23be0 4d 4d 49 54 22 2c 20 30 2c 20 30 2c 20 30 29 3b  MMIT", 0, 0, 0);
23bf0 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e 64 65  .  }else..#ifnde
23c00 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
23c10 42 4c 45 0a 20 20 69 66 28 20 63 3d 3d 27 69 27  BLE.  if( c=='i'
23c20 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
23c30 67 5b 30 5d 2c 20 22 69 6d 70 6f 73 74 65 72 22  g[0], "imposter"
23c40 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63  , n)==0 ){.    c
23c50 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 20 20 63  har *zSql;.    c
23c60 68 61 72 20 2a 7a 43 6f 6c 6c 69 73 74 20 3d 20  har *zCollist = 
23c70 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  0;.    sqlite3_s
23c80 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 20 20  tmt *pStmt;.    
23c90 69 6e 74 20 74 6e 75 6d 20 3d 20 30 3b 0a 20 20  int tnum = 0;.  
23ca0 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 66 28    int i;.    if(
23cb0 20 6e 41 72 67 21 3d 33 20 29 7b 0a 20 20 20 20   nArg!=3 ){.    
23cc0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
23cd0 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 69  derr, "Usage: .i
23ce0 6d 70 6f 73 74 65 72 20 49 4e 44 45 58 20 49 4d  mposter INDEX IM
23cf0 50 4f 53 54 45 52 5c 6e 22 29 3b 0a 20 20 20 20  POSTER\n");.    
23d00 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
23d10 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
23d20 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20  d_exit;.    }.  
23d30 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
23d40 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  .    zSql = sqli
23d50 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c  te3_mprintf("SEL
23d60 45 43 54 20 72 6f 6f 74 70 61 67 65 20 46 52 4f  ECT rootpage FRO
23d70 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22  M sqlite_master"
23d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23d90 20 20 20 20 20 20 20 20 20 20 20 20 22 20 57 48              " WH
23da0 45 52 45 20 6e 61 6d 65 3d 27 25 71 27 20 41 4e  ERE name='%q' AN
23db0 44 20 74 79 70 65 3d 27 69 6e 64 65 78 27 22 2c  D type='index'",
23dc0 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
23dd0 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
23de0 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20  v2(p->db, zSql, 
23df0 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a  -1, &pStmt, 0);.
23e00 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
23e10 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66 28 20  (zSql);.    if( 
23e20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74  sqlite3_step(pSt
23e30 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20  mt)==SQLITE_ROW 
23e40 29 7b 0a 20 20 20 20 20 20 74 6e 75 6d 20 3d 20  ){.      tnum = 
23e50 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
23e60 6e 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20  nt(pStmt, 0);.  
23e70 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
23e80 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
23e90 0a 20 20 20 20 69 66 28 20 74 6e 75 6d 3d 3d 30  .    if( tnum==0
23ea0 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
23eb0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6e  rintf(stderr, "n
23ec0 6f 20 73 75 63 68 20 69 6e 64 65 78 3a 20 5c 22  o such index: \"
23ed0 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72 67 5b 31  %s\"\n", azArg[1
23ee0 5d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ]);.      rc = 1
23ef0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
23f00 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
23f10 20 20 20 20 7d 0a 20 20 20 20 7a 53 71 6c 20 3d      }.    zSql =
23f20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
23f30 28 22 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78  ("PRAGMA index_x
23f40 69 6e 66 6f 3d 27 25 71 27 22 2c 20 61 7a 41 72  info='%q'", azAr
23f50 67 5b 31 5d 29 3b 0a 20 20 20 20 72 63 20 3d 20  g[1]);.    rc = 
23f60 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
23f70 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20  v2(p->db, zSql, 
23f80 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a  -1, &pStmt, 0);.
23f90 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
23fa0 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 20 3d 20  (zSql);.    i = 
23fb0 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 73 71  0;.    while( sq
23fc0 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74  lite3_step(pStmt
23fd0 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b  )==SQLITE_ROW ){
23fe0 0a 20 20 20 20 20 20 63 68 61 72 20 7a 4c 61 62  .      char zLab
23ff0 65 6c 5b 32 30 5d 3b 0a 20 20 20 20 20 20 63 6f  el[20];.      co
24000 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 20 3d  nst char *zCol =
24010 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
24020 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
24030 74 28 70 53 74 6d 74 2c 32 29 3b 0a 20 20 20 20  t(pStmt,2);.    
24040 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28    i++;.      if(
24050 20 7a 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20 20   zCol==0 ){.    
24060 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
24070 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74  column_int(pStmt
24080 2c 31 29 3d 3d 2d 31 20 29 7b 0a 20 20 20 20 20  ,1)==-1 ){.     
24090 20 20 20 20 20 7a 43 6f 6c 20 3d 20 22 5f 52 4f       zCol = "_RO
240a0 57 49 44 5f 22 3b 0a 20 20 20 20 20 20 20 20 7d  WID_";.        }
240b0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
240c0 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
240d0 28 73 69 7a 65 6f 66 28 7a 4c 61 62 65 6c 29 2c  (sizeof(zLabel),
240e0 7a 4c 61 62 65 6c 2c 22 65 78 70 72 25 64 22 2c  zLabel,"expr%d",
240f0 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 43  i);.          zC
24100 6f 6c 20 3d 20 7a 4c 61 62 65 6c 3b 0a 20 20 20  ol = zLabel;.   
24110 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
24120 20 20 20 20 20 69 66 28 20 7a 43 6f 6c 6c 69 73       if( zCollis
24130 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  t==0 ){.        
24140 7a 43 6f 6c 6c 69 73 74 20 3d 20 73 71 6c 69 74  zCollist = sqlit
24150 65 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22 25 77  e3_mprintf("\"%w
24160 5c 22 22 2c 20 7a 43 6f 6c 29 3b 0a 20 20 20 20  \"", zCol);.    
24170 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
24180 20 7a 43 6f 6c 6c 69 73 74 20 3d 20 73 71 6c 69   zCollist = sqli
24190 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 7a 2c  te3_mprintf("%z,
241a0 5c 22 25 77 5c 22 22 2c 20 7a 43 6f 6c 6c 69 73  \"%w\"", zCollis
241b0 74 2c 20 7a 43 6f 6c 29 3b 0a 20 20 20 20 20 20  t, zCol);.      
241c0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
241d0 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
241e0 6d 74 29 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20  mt);.    zSql = 
241f0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
24200 0a 20 20 20 20 20 20 20 20 20 20 22 43 52 45 41  .          "CREA
24210 54 45 20 54 41 42 4c 45 20 5c 22 25 77 5c 22 28  TE TABLE \"%w\"(
24220 25 73 2c 50 52 49 4d 41 52 59 20 4b 45 59 28 25  %s,PRIMARY KEY(%
24230 73 29 29 57 49 54 48 4f 55 54 20 52 4f 57 49 44  s))WITHOUT ROWID
24240 22 2c 0a 20 20 20 20 20 20 20 20 20 20 61 7a 41  ",.          azA
24250 72 67 5b 32 5d 2c 20 7a 43 6f 6c 6c 69 73 74 2c  rg[2], zCollist,
24260 20 7a 43 6f 6c 6c 69 73 74 29 3b 0a 20 20 20 20   zCollist);.    
24270 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 43 6f  sqlite3_free(zCo
24280 6c 6c 69 73 74 29 3b 0a 20 20 20 20 72 63 20 3d  llist);.    rc =
24290 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
242a0 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
242b0 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52 2c 20  TCTRL_IMPOSTER, 
242c0 70 2d 3e 64 62 2c 20 22 6d 61 69 6e 22 2c 20 31  p->db, "main", 1
242d0 2c 20 74 6e 75 6d 29 3b 0a 20 20 20 20 69 66 28  , tnum);.    if(
242e0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
242f0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
24300 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c  ite3_exec(p->db,
24310 20 7a 53 71 6c 2c 20 30 2c 20 30 2c 20 30 29 3b   zSql, 0, 0, 0);
24320 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74  .      sqlite3_t
24330 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
24340 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d 50 4f  TE_TESTCTRL_IMPO
24350 53 54 45 52 2c 20 70 2d 3e 64 62 2c 20 22 6d 61  STER, p->db, "ma
24360 69 6e 22 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  in", 0, 0);.    
24370 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
24380 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
24390 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 20 69  stderr, "Error i
243a0 6e 20 5b 25 73 5d 3a 20 25 73 5c 6e 22 2c 20 7a  n [%s]: %s\n", z
243b0 53 71 6c 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  Sql, sqlite3_err
243c0 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20  msg(p->db));.   
243d0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
243e0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
243f0 64 6f 75 74 2c 20 22 25 73 3b 5c 6e 22 2c 20 7a  dout, "%s;\n", z
24400 53 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 72 61  Sql);.        ra
24410 77 5f 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c  w_printf(stdout,
24420 0a 20 20 20 20 20 20 20 20 20 20 20 22 57 41 52  .           "WAR
24430 4e 49 4e 47 3a 20 77 72 69 74 69 6e 67 20 74 6f  NING: writing to
24440 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62   an imposter tab
24450 6c 65 20 77 69 6c 6c 20 63 6f 72 72 75 70 74 20  le will corrupt 
24460 74 68 65 20 69 6e 64 65 78 21 5c 6e 22 0a 20 20  the index!\n".  
24470 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 7d        );.      }
24480 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
24490 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
244a0 65 72 72 2c 20 22 53 51 4c 49 54 45 5f 54 45 53  err, "SQLITE_TES
244b0 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52 20 72  TCTRL_IMPOSTER r
244c0 65 74 75 72 6e 73 20 25 64 5c 6e 22 2c 20 72 63  eturns %d\n", rc
244d0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
244e0 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
244f0 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20  e3_free(zSql);. 
24500 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a   }else.#endif /*
24510 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
24520 5f 4f 4d 49 54 5f 54 45 53 54 5f 43 4f 4e 54 52  _OMIT_TEST_CONTR
24530 4f 4c 29 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53  OL) */..#ifdef S
24540 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54  QLITE_ENABLE_IOT
24550 52 41 43 45 0a 20 20 69 66 28 20 63 3d 3d 27 69  RACE.  if( c=='i
24560 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
24570 72 67 5b 30 5d 2c 20 22 69 6f 74 72 61 63 65 22  rg[0], "iotrace"
24580 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 53  , n)==0 ){.    S
24590 51 4c 49 54 45 5f 41 50 49 20 65 78 74 65 72 6e  QLITE_API extern
245a0 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44   void (SQLITE_CD
245b0 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72  ECL *sqlite3IoTr
245c0 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a  ace)(const char*
245d0 2c 20 2e 2e 2e 29 3b 0a 20 20 20 20 69 66 28 20  , ...);.    if( 
245e0 69 6f 74 72 61 63 65 20 26 26 20 69 6f 74 72 61  iotrace && iotra
245f0 63 65 21 3d 73 74 64 6f 75 74 20 29 20 66 63 6c  ce!=stdout ) fcl
24600 6f 73 65 28 69 6f 74 72 61 63 65 29 3b 0a 20 20  ose(iotrace);.  
24610 20 20 69 6f 74 72 61 63 65 20 3d 20 30 3b 0a 20    iotrace = 0;. 
24620 20 20 20 69 66 28 20 6e 41 72 67 3c 32 20 29 7b     if( nArg<2 ){
24630 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 49 6f  .      sqlite3Io
24640 54 72 61 63 65 20 3d 20 30 3b 0a 20 20 20 20 7d  Trace = 0;.    }
24650 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
24660 61 7a 41 72 67 5b 31 5d 2c 20 22 2d 22 29 3d 3d  azArg[1], "-")==
24670 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
24680 65 33 49 6f 54 72 61 63 65 20 3d 20 69 6f 74 72  e3IoTrace = iotr
24690 61 63 65 50 72 69 6e 74 66 3b 0a 20 20 20 20 20  acePrintf;.     
246a0 20 69 6f 74 72 61 63 65 20 3d 20 73 74 64 6f 75   iotrace = stdou
246b0 74 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  t;.    }else{.  
246c0 20 20 20 20 69 6f 74 72 61 63 65 20 3d 20 66 6f      iotrace = fo
246d0 70 65 6e 28 61 7a 41 72 67 5b 31 5d 2c 20 22 77  pen(azArg[1], "w
246e0 22 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 6f  ");.      if( io
246f0 74 72 61 63 65 3d 3d 30 20 29 7b 0a 20 20 20 20  trace==0 ){.    
24700 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
24710 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
24720 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73  cannot open \"%s
24730 5c 22 5c 6e 22 2c 20 61 7a 41 72 67 5b 31 5d 29  \"\n", azArg[1])
24740 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
24750 33 49 6f 54 72 61 63 65 20 3d 20 30 3b 0a 20 20  3IoTrace = 0;.  
24760 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
24770 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
24780 20 20 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63     sqlite3IoTrac
24790 65 20 3d 20 69 6f 74 72 61 63 65 50 72 69 6e 74  e = iotracePrint
247a0 66 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  f;.      }.    }
247b0 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
247c0 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 26 26  .  if( c=='l' &&
247d0 20 6e 3e 3d 35 20 26 26 20 73 74 72 6e 63 6d 70   n>=5 && strncmp
247e0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6c 69 6d 69  (azArg[0], "limi
247f0 74 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  ts", n)==0 ){.  
24800 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73    static const s
24810 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 63  truct {.       c
24820 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 69 6d 69  onst char *zLimi
24830 74 4e 61 6d 65 3b 20 20 20 2f 2a 20 4e 61 6d 65  tName;   /* Name
24840 20 6f 66 20 61 20 6c 69 6d 69 74 20 2a 2f 0a 20   of a limit */. 
24850 20 20 20 20 20 20 69 6e 74 20 6c 69 6d 69 74 43        int limitC
24860 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
24870 2f 2a 20 49 6e 74 65 67 65 72 20 63 6f 64 65 20  /* Integer code 
24880 66 6f 72 20 74 68 61 74 20 6c 69 6d 69 74 20 2a  for that limit *
24890 2f 0a 20 20 20 20 7d 20 61 4c 69 6d 69 74 5b 5d  /.    } aLimit[]
248a0 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 6c 65   = {.      { "le
248b0 6e 67 74 68 22 2c 20 20 20 20 20 20 20 20 20 20  ngth",          
248c0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d        SQLITE_LIM
248d0 49 54 5f 4c 45 4e 47 54 48 20 20 20 20 20 20 20  IT_LENGTH       
248e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
248f0 20 20 20 20 20 20 7b 20 22 73 71 6c 5f 6c 65 6e        { "sql_len
24900 67 74 68 22 2c 20 20 20 20 20 20 20 20 20 20 20  gth",           
24910 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 53 51   SQLITE_LIMIT_SQ
24920 4c 5f 4c 45 4e 47 54 48 20 20 20 20 20 20 20 20  L_LENGTH        
24930 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
24940 20 7b 20 22 63 6f 6c 75 6d 6e 22 2c 20 20 20 20   { "column",    
24950 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
24960 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 20  TE_LIMIT_COLUMN 
24970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24980 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 65     },.      { "e
24990 78 70 72 5f 64 65 70 74 68 22 2c 20 20 20 20 20  xpr_depth",     
249a0 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49         SQLITE_LI
249b0 4d 49 54 5f 45 58 50 52 5f 44 45 50 54 48 20 20  MIT_EXPR_DEPTH  
249c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
249d0 0a 20 20 20 20 20 20 7b 20 22 63 6f 6d 70 6f 75  .      { "compou
249e0 6e 64 5f 73 65 6c 65 63 74 22 2c 20 20 20 20 20  nd_select",     
249f0 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43    SQLITE_LIMIT_C
24a00 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 20 20  OMPOUND_SELECT  
24a10 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
24a20 20 20 7b 20 22 76 64 62 65 5f 6f 70 22 2c 20 20    { "vdbe_op",  
24a30 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
24a40 49 54 45 5f 4c 49 4d 49 54 5f 56 44 42 45 5f 4f  ITE_LIMIT_VDBE_O
24a50 50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  P               
24a60 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
24a70 66 75 6e 63 74 69 6f 6e 5f 61 72 67 22 2c 20 20  function_arg",  
24a80 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c          SQLITE_L
24a90 49 4d 49 54 5f 46 55 4e 43 54 49 4f 4e 5f 41 52  IMIT_FUNCTION_AR
24aa0 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  G              }
24ab0 2c 0a 20 20 20 20 20 20 7b 20 22 61 74 74 61 63  ,.      { "attac
24ac0 68 65 64 22 2c 20 20 20 20 20 20 20 20 20 20 20  hed",           
24ad0 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f     SQLITE_LIMIT_
24ae0 41 54 54 41 43 48 45 44 20 20 20 20 20 20 20 20  ATTACHED        
24af0 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
24b00 20 20 20 7b 20 22 6c 69 6b 65 5f 70 61 74 74 65     { "like_patte
24b10 72 6e 5f 6c 65 6e 67 74 68 22 2c 20 20 20 53 51  rn_length",   SQ
24b20 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 49 4b 45 5f  LITE_LIMIT_LIKE_
24b30 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48 20 20  PATTERN_LENGTH  
24b40 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
24b50 22 76 61 72 69 61 62 6c 65 5f 6e 75 6d 62 65 72  "variable_number
24b60 22 2c 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f  ",       SQLITE_
24b70 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c 45 5f 4e  LIMIT_VARIABLE_N
24b80 55 4d 42 45 52 20 20 20 20 20 20 20 20 20 20 20  UMBER           
24b90 7d 2c 0a 20 20 20 20 20 20 7b 20 22 74 72 69 67  },.      { "trig
24ba0 67 65 72 5f 64 65 70 74 68 22 2c 20 20 20 20 20  ger_depth",     
24bb0 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54      SQLITE_LIMIT
24bc0 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 20 20  _TRIGGER_DEPTH  
24bd0 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
24be0 20 20 20 20 7b 20 22 77 6f 72 6b 65 72 5f 74 68      { "worker_th
24bf0 72 65 61 64 73 22 2c 20 20 20 20 20 20 20 20 53  reads",        S
24c00 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b  QLITE_LIMIT_WORK
24c10 45 52 5f 54 48 52 45 41 44 53 20 20 20 20 20 20  ER_THREADS      
24c20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7d 3b 0a        },.    };.
24c30 20 20 20 20 69 6e 74 20 69 2c 20 6e 32 3b 0a 20      int i, n2;. 
24c40 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29     open_db(p, 0)
24c50 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d  ;.    if( nArg==
24c60 31 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69  1 ){.      for(i
24c70 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28  =0; i<ArraySize(
24c80 61 4c 69 6d 69 74 29 3b 20 69 2b 2b 29 7b 0a 20  aLimit); i++){. 
24c90 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25         printf("%
24ca0 32 30 73 20 25 64 5c 6e 22 2c 20 61 4c 69 6d 69  20s %d\n", aLimi
24cb0 74 5b 69 5d 2e 7a 4c 69 6d 69 74 4e 61 6d 65 2c  t[i].zLimitName,
24cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24cd0 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 70 2d  sqlite3_limit(p-
24ce0 3e 64 62 2c 20 61 4c 69 6d 69 74 5b 69 5d 2e 6c  >db, aLimit[i].l
24cf0 69 6d 69 74 43 6f 64 65 2c 20 2d 31 29 29 3b 0a  imitCode, -1));.
24d00 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
24d10 65 20 69 66 28 20 6e 41 72 67 3e 33 20 29 7b 0a  e if( nArg>3 ){.
24d20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
24d30 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
24d40 20 2e 6c 69 6d 69 74 20 4e 41 4d 45 20 3f 4e 45   .limit NAME ?NE
24d50 57 2d 56 41 4c 55 45 3f 5c 6e 22 29 3b 0a 20 20  W-VALUE?\n");.  
24d60 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
24d70 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
24d80 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 65  and_exit;.    }e
24d90 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  lse{.      int i
24da0 4c 69 6d 69 74 20 3d 20 2d 31 3b 0a 20 20 20 20  Limit = -1;.    
24db0 20 20 6e 32 20 3d 20 73 74 72 6c 65 6e 33 30 28    n2 = strlen30(
24dc0 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20  azArg[1]);.     
24dd0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61   for(i=0; i<Arra
24de0 79 53 69 7a 65 28 61 4c 69 6d 69 74 29 3b 20 69  ySize(aLimit); i
24df0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
24e00 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
24e10 70 28 61 4c 69 6d 69 74 5b 69 5d 2e 7a 4c 69 6d  p(aLimit[i].zLim
24e20 69 74 4e 61 6d 65 2c 20 61 7a 41 72 67 5b 31 5d  itName, azArg[1]
24e30 2c 20 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  , n2)==0 ){.    
24e40 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74        if( iLimit
24e50 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  <0 ){.          
24e60 20 20 69 4c 69 6d 69 74 20 3d 20 69 3b 0a 20 20    iLimit = i;.  
24e70 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
24e80 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f             utf8_
24e90 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
24ea0 61 6d 62 69 67 75 6f 75 73 20 6c 69 6d 69 74 3a  ambiguous limit:
24eb0 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72   \"%s\"\n", azAr
24ec0 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 20  g[1]);.         
24ed0 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
24ee0 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
24ef0 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
24f00 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
24f10 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
24f20 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c 30 20     if( iLimit<0 
24f30 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
24f40 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
24f50 75 6e 6b 6e 6f 77 6e 20 6c 69 6d 69 74 3a 20 5c  unknown limit: \
24f60 22 25 73 5c 22 5c 6e 22 0a 20 20 20 20 20 20 20  "%s\"\n".       
24f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f80 20 22 65 6e 74 65 72 20 5c 22 2e 6c 69 6d 69 74   "enter \".limit
24f90 73 5c 22 20 77 69 74 68 20 6e 6f 20 61 72 67 75  s\" with no argu
24fa0 6d 65 6e 74 73 20 66 6f 72 20 61 20 6c 69 73 74  ments for a list
24fb0 2e 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  .\n",.          
24fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
24fd0 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20  zArg[1]);.      
24fe0 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
24ff0 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
25000 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20  and_exit;.      
25010 7d 0a 20 20 20 20 20 20 69 66 28 20 6e 41 72 67  }.      if( nArg
25020 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==3 ){.        s
25030 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 70 2d 3e  qlite3_limit(p->
25040 64 62 2c 20 61 4c 69 6d 69 74 5b 69 4c 69 6d 69  db, aLimit[iLimi
25050 74 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c 0a 20 20  t].limitCode,.  
25060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25070 20 20 20 20 28 69 6e 74 29 69 6e 74 65 67 65 72      (int)integer
25080 56 61 6c 75 65 28 61 7a 41 72 67 5b 32 5d 29 29  Value(azArg[2]))
25090 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
250a0 70 72 69 6e 74 66 28 22 25 32 30 73 20 25 64 5c  printf("%20s %d\
250b0 6e 22 2c 20 61 4c 69 6d 69 74 5b 69 4c 69 6d 69  n", aLimit[iLimi
250c0 74 5d 2e 7a 4c 69 6d 69 74 4e 61 6d 65 2c 0a 20  t].zLimitName,. 
250d0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
250e0 74 65 33 5f 6c 69 6d 69 74 28 70 2d 3e 64 62 2c  te3_limit(p->db,
250f0 20 61 4c 69 6d 69 74 5b 69 4c 69 6d 69 74 5d 2e   aLimit[iLimit].
25100 6c 69 6d 69 74 43 6f 64 65 2c 20 2d 31 29 29 3b  limitCode, -1));
25110 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
25120 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 26 26 20    if( c=='l' && 
25130 6e 3e 32 20 26 26 20 73 74 72 6e 63 6d 70 28 61  n>2 && strncmp(a
25140 7a 41 72 67 5b 30 5d 2c 20 22 6c 69 6e 74 22 2c  zArg[0], "lint",
25150 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 6f 70   n)==0 ){.    op
25160 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20  en_db(p, 0);.   
25170 20 6c 69 6e 74 44 6f 74 43 6f 6d 6d 61 6e 64 28   lintDotCommand(
25180 70 2c 20 61 7a 41 72 67 2c 20 6e 41 72 67 29 3b  p, azArg, nArg);
25190 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e 64 65  .  }else..#ifnde
251a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f  f SQLITE_OMIT_LO
251b0 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 69  AD_EXTENSION.  i
251c0 66 28 20 63 3d 3d 27 6c 27 20 26 26 20 73 74 72  f( c=='l' && str
251d0 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
251e0 6c 6f 61 64 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  load", n)==0 ){.
251f0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
25200 7a 46 69 6c 65 2c 20 2a 7a 50 72 6f 63 3b 0a 20  zFile, *zProc;. 
25210 20 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67     char *zErrMsg
25220 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 6e 41   = 0;.    if( nA
25230 72 67 3c 32 20 29 7b 0a 20 20 20 20 20 20 72 61  rg<2 ){.      ra
25240 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
25250 20 22 55 73 61 67 65 3a 20 2e 6c 6f 61 64 20 46   "Usage: .load F
25260 49 4c 45 20 3f 45 4e 54 52 59 50 4f 49 4e 54 3f  ILE ?ENTRYPOINT?
25270 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
25280 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
25290 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
252a0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 46 69 6c  ;.    }.    zFil
252b0 65 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20  e = azArg[1];.  
252c0 20 20 7a 50 72 6f 63 20 3d 20 6e 41 72 67 3e 3d    zProc = nArg>=
252d0 33 20 3f 20 61 7a 41 72 67 5b 32 5d 20 3a 20 30  3 ? azArg[2] : 0
252e0 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  ;.    open_db(p,
252f0 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71   0);.    rc = sq
25300 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e  lite3_load_exten
25310 73 69 6f 6e 28 70 2d 3e 64 62 2c 20 7a 46 69 6c  sion(p->db, zFil
25320 65 2c 20 7a 50 72 6f 63 2c 20 26 7a 45 72 72 4d  e, zProc, &zErrM
25330 73 67 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  sg);.    if( rc!
25340 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
25350 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
25360 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
25370 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 29 3b  %s\n", zErrMsg);
25380 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
25390 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20 20  ree(zErrMsg);.  
253a0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
253b0 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  }.  }else.#endif
253c0 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 26  ..  if( c=='l' &
253d0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
253e0 30 5d 2c 20 22 6c 6f 67 22 2c 20 6e 29 3d 3d 30  0], "log", n)==0
253f0 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   ){.    if( nArg
25400 21 3d 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77  !=2 ){.      raw
25410 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
25420 22 55 73 61 67 65 3a 20 2e 6c 6f 67 20 46 49 4c  "Usage: .log FIL
25430 45 4e 41 4d 45 5c 6e 22 29 3b 0a 20 20 20 20 20  ENAME\n");.     
25440 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c   rc = 1;.    }el
25450 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  se{.      const 
25460 63 68 61 72 20 2a 7a 46 69 6c 65 20 3d 20 61 7a  char *zFile = az
25470 41 72 67 5b 31 5d 3b 0a 20 20 20 20 20 20 6f 75  Arg[1];.      ou
25480 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73 65 28  tput_file_close(
25490 70 2d 3e 70 4c 6f 67 29 3b 0a 20 20 20 20 20 20  p->pLog);.      
254a0 70 2d 3e 70 4c 6f 67 20 3d 20 6f 75 74 70 75 74  p->pLog = output
254b0 5f 66 69 6c 65 5f 6f 70 65 6e 28 7a 46 69 6c 65  _file_open(zFile
254c0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
254d0 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6d 27 20 26  ..  if( c=='m' &
254e0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
254f0 30 5d 2c 20 22 6d 6f 64 65 22 2c 20 6e 29 3d 3d  0], "mode", n)==
25500 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  0 ){.    const c
25510 68 61 72 20 2a 7a 4d 6f 64 65 20 3d 20 6e 41 72  har *zMode = nAr
25520 67 3e 3d 32 20 3f 20 61 7a 41 72 67 5b 31 5d 20  g>=2 ? azArg[1] 
25530 3a 20 22 22 3b 0a 20 20 20 20 69 6e 74 20 6e 32  : "";.    int n2
25540 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a   = (int)strlen(z
25550 4d 6f 64 65 29 3b 0a 20 20 20 20 69 6e 74 20 63  Mode);.    int c
25560 32 20 3d 20 7a 4d 6f 64 65 5b 30 5d 3b 0a 20 20  2 = zMode[0];.  
25570 20 20 69 66 28 20 63 32 3d 3d 27 6c 27 20 26 26    if( c2=='l' &&
25580 20 6e 32 3e 32 20 26 26 20 73 74 72 6e 63 6d 70   n2>2 && strncmp
25590 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 69 6e 65 73  (azArg[1],"lines
255a0 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ",n2)==0 ){.    
255b0 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45    p->mode = MODE
255c0 5f 4c 69 6e 65 3b 0a 20 20 20 20 20 20 73 71 6c  _Line;.      sql
255d0 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
255e0 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72  zeof(p->rowSepar
255f0 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70  ator), p->rowSep
25600 61 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29  arator, SEP_Row)
25610 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
25620 63 32 3d 3d 27 63 27 20 26 26 20 73 74 72 6e 63  c2=='c' && strnc
25630 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 63 6f 6c  mp(azArg[1],"col
25640 75 6d 6e 73 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a  umns",n2)==0 ){.
25650 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20        p->mode = 
25660 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3b 0a 20 20 20  MODE_Column;.   
25670 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
25680 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f  ntf(sizeof(p->ro
25690 77 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e  wSeparator), p->
256a0 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45  rowSeparator, SE
256b0 50 5f 52 6f 77 29 3b 0a 20 20 20 20 7d 65 6c 73  P_Row);.    }els
256c0 65 20 69 66 28 20 63 32 3d 3d 27 6c 27 20 26 26  e if( c2=='l' &&
256d0 20 6e 32 3e 32 20 26 26 20 73 74 72 6e 63 6d 70   n2>2 && strncmp
256e0 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 69 73 74 22  (azArg[1],"list"
256f0 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ,n2)==0 ){.     
25700 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f   p->mode = MODE_
25710 4c 69 73 74 3b 0a 20 20 20 20 20 20 73 71 6c 69  List;.      sqli
25720 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
25730 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61  eof(p->colSepara
25740 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  tor), p->colSepa
25750 72 61 74 6f 72 2c 20 53 45 50 5f 43 6f 6c 75 6d  rator, SEP_Colum
25760 6e 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  n);.      sqlite
25770 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
25780 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  f(p->rowSeparato
25790 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61  r), p->rowSepara
257a0 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29 3b 0a 20  tor, SEP_Row);. 
257b0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32 3d     }else if( c2=
257c0 3d 27 68 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='h' && strncmp(
257d0 61 7a 41 72 67 5b 31 5d 2c 22 68 74 6d 6c 22 2c  azArg[1],"html",
257e0 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  n2)==0 ){.      
257f0 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 48  p->mode = MODE_H
25800 74 6d 6c 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  tml;.    }else i
25810 66 28 20 63 32 3d 3d 27 74 27 20 26 26 20 73 74  f( c2=='t' && st
25820 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22  rncmp(azArg[1],"
25830 74 63 6c 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20  tcl",n2)==0 ){. 
25840 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d       p->mode = M
25850 4f 44 45 5f 54 63 6c 3b 0a 20 20 20 20 20 20 73  ODE_Tcl;.      s
25860 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
25870 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70  sizeof(p->colSep
25880 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53  arator), p->colS
25890 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 53 70  eparator, SEP_Sp
258a0 61 63 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ace);.      sqli
258b0 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
258c0 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61  eof(p->rowSepara
258d0 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61  tor), p->rowSepa
258e0 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29 3b  rator, SEP_Row);
258f0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63  .    }else if( c
25900 32 3d 3d 27 63 27 20 26 26 20 73 74 72 6e 63 6d  2=='c' && strncm
25910 70 28 61 7a 41 72 67 5b 31 5d 2c 22 63 73 76 22  p(azArg[1],"csv"
25920 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ,n2)==0 ){.     
25930 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f   p->mode = MODE_
25940 43 73 76 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Csv;.      sqlit
25950 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
25960 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  of(p->colSeparat
25970 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72  or), p->colSepar
25980 61 74 6f 72 2c 20 53 45 50 5f 43 6f 6d 6d 61 29  ator, SEP_Comma)
25990 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
259a0 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28  snprintf(sizeof(
259b0 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29  p->rowSeparator)
259c0 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  , p->rowSeparato
259d0 72 2c 20 53 45 50 5f 43 72 4c 66 29 3b 0a 20 20  r, SEP_CrLf);.  
259e0 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32 3d 3d    }else if( c2==
259f0 27 74 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  't' && strncmp(a
25a00 7a 41 72 67 5b 31 5d 2c 22 74 61 62 73 22 2c 6e  zArg[1],"tabs",n
25a10 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70  2)==0 ){.      p
25a20 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c 69  ->mode = MODE_Li
25a30 73 74 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  st;.      sqlite
25a40 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
25a50 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  f(p->colSeparato
25a60 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61  r), p->colSepara
25a70 74 6f 72 2c 20 53 45 50 5f 54 61 62 29 3b 0a 20  tor, SEP_Tab);. 
25a80 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32 3d     }else if( c2=
25a90 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='i' && strncmp(
25aa0 61 7a 41 72 67 5b 31 5d 2c 22 69 6e 73 65 72 74  azArg[1],"insert
25ab0 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ",n2)==0 ){.    
25ac0 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45    p->mode = MODE
25ad0 5f 49 6e 73 65 72 74 3b 0a 20 20 20 20 20 20 73  _Insert;.      s
25ae0 65 74 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 70 2c  et_table_name(p,
25af0 20 6e 41 72 67 3e 3d 33 20 3f 20 61 7a 41 72 67   nArg>=3 ? azArg
25b00 5b 32 5d 20 3a 20 22 74 61 62 6c 65 22 29 3b 0a  [2] : "table");.
25b10 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32      }else if( c2
25b20 3d 3d 27 71 27 20 26 26 20 73 74 72 6e 63 6d 70  =='q' && strncmp
25b30 28 61 7a 41 72 67 5b 31 5d 2c 22 71 75 6f 74 65  (azArg[1],"quote
25b40 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ",n2)==0 ){.    
25b50 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45    p->mode = MODE
25b60 5f 51 75 6f 74 65 3b 0a 20 20 20 20 7d 65 6c 73  _Quote;.    }els
25b70 65 20 69 66 28 20 63 32 3d 3d 27 61 27 20 26 26  e if( c2=='a' &&
25b80 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31   strncmp(azArg[1
25b90 5d 2c 22 61 73 63 69 69 22 2c 6e 32 29 3d 3d 30  ],"ascii",n2)==0
25ba0 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64   ){.      p->mod
25bb0 65 20 3d 20 4d 4f 44 45 5f 41 73 63 69 69 3b 0a  e = MODE_Ascii;.
25bc0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
25bd0 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d  printf(sizeof(p-
25be0 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c 20  >colSeparator), 
25bf0 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c  p->colSeparator,
25c00 20 53 45 50 5f 55 6e 69 74 29 3b 0a 20 20 20 20   SEP_Unit);.    
25c10 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
25c20 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77  tf(sizeof(p->row
25c30 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72  Separator), p->r
25c40 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50  owSeparator, SEP
25c50 5f 52 65 63 6f 72 64 29 3b 0a 20 20 20 20 7d 65  _Record);.    }e
25c60 6c 73 65 20 69 66 28 20 6e 41 72 67 3d 3d 31 20  lse if( nArg==1 
25c70 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
25c80 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 63 75 72  ntf(p->out, "cur
25c90 72 65 6e 74 20 6f 75 74 70 75 74 20 6d 6f 64 65  rent output mode
25ca0 3a 20 25 73 5c 6e 22 2c 20 6d 6f 64 65 44 65 73  : %s\n", modeDes
25cb0 63 72 5b 70 2d 3e 6d 6f 64 65 5d 29 3b 0a 20 20  cr[p->mode]);.  
25cc0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
25cd0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
25ce0 2c 20 22 45 72 72 6f 72 3a 20 6d 6f 64 65 20 73  , "Error: mode s
25cf0 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a  hould be one of:
25d00 20 22 0a 20 20 20 20 20 20 20 20 20 22 61 73 63   ".         "asc
25d10 69 69 20 63 6f 6c 75 6d 6e 20 63 73 76 20 68 74  ii column csv ht
25d20 6d 6c 20 69 6e 73 65 72 74 20 6c 69 6e 65 20 6c  ml insert line l
25d30 69 73 74 20 71 75 6f 74 65 20 74 61 62 73 20 74  ist quote tabs t
25d40 63 6c 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  cl\n");.      rc
25d50 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 1;.    }.    
25d60 70 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f  p->cMode = p->mo
25d70 64 65 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69  de;.  }else..  i
25d80 66 28 20 63 3d 3d 27 6e 27 20 26 26 20 73 74 72  f( c=='n' && str
25d90 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
25da0 6e 75 6c 6c 76 61 6c 75 65 22 2c 20 6e 29 3d 3d  nullvalue", n)==
25db0 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72  0 ){.    if( nAr
25dc0 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 73 71  g==2 ){.      sq
25dd0 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
25de0 69 7a 65 6f 66 28 70 2d 3e 6e 75 6c 6c 56 61 6c  izeof(p->nullVal
25df0 75 65 29 2c 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75  ue), p->nullValu
25e00 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
25e10 20 20 20 20 20 20 20 20 20 20 22 25 2e 2a 73 22            "%.*s"
25e20 2c 20 28 69 6e 74 29 41 72 72 61 79 53 69 7a 65  , (int)ArraySize
25e30 28 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 2d 31  (p->nullValue)-1
25e40 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  , azArg[1]);.   
25e50 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61   }else{.      ra
25e60 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
25e70 20 22 55 73 61 67 65 3a 20 2e 6e 75 6c 6c 76 61   "Usage: .nullva
25e80 6c 75 65 20 53 54 52 49 4e 47 5c 6e 22 29 3b 0a  lue STRING\n");.
25e90 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
25ea0 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
25eb0 66 28 20 63 3d 3d 27 6f 27 20 26 26 20 73 74 72  f( c=='o' && str
25ec0 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
25ed0 6f 70 65 6e 22 2c 20 6e 29 3d 3d 30 20 26 26 20  open", n)==0 && 
25ee0 6e 3e 3d 32 20 29 7b 0a 20 20 20 20 63 68 61 72  n>=2 ){.    char
25ef0 20 2a 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 3b 20   *zNewFilename; 
25f00 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
25f10 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
25f20 20 6f 70 65 6e 20 2a 2f 0a 20 20 20 20 69 6e 74   open */.    int
25f30 20 69 4e 61 6d 65 20 3d 20 31 3b 20 20 20 20 20   iName = 1;     
25f40 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 61 7a    /* Index in az
25f50 41 72 67 5b 5d 20 6f 66 20 74 68 65 20 66 69 6c  Arg[] of the fil
25f60 65 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74  ename */.    int
25f70 20 6e 65 77 46 6c 61 67 20 3d 20 30 3b 20 20 20   newFlag = 0;   
25f80 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 65 6c    /* True to del
25f90 65 74 65 20 66 69 6c 65 20 62 65 66 6f 72 65 20  ete file before 
25fa0 6f 70 65 6e 69 6e 67 20 2a 2f 0a 20 20 20 20 2f  opening */.    /
25fb0 2a 20 43 6c 6f 73 65 20 74 68 65 20 65 78 69 73  * Close the exis
25fc0 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 2a 2f  ting database */
25fd0 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 63 6c 6f  .    session_clo
25fe0 73 65 5f 61 6c 6c 28 70 29 3b 0a 20 20 20 20 73  se_all(p);.    s
25ff0 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 2d 3e  qlite3_close(p->
26000 64 62 29 3b 0a 20 20 20 20 70 2d 3e 64 62 20 3d  db);.    p->db =
26010 20 30 3b 0a 20 20 20 20 70 2d 3e 7a 44 62 46 69   0;.    p->zDbFi
26020 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a 20 20 20 20  lename = 0;.    
26030 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 2d 3e  sqlite3_free(p->
26040 7a 46 72 65 65 4f 6e 43 6c 6f 73 65 29 3b 0a 20  zFreeOnClose);. 
26050 20 20 20 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f     p->zFreeOnClo
26060 73 65 20 3d 20 30 3b 0a 20 20 20 20 2f 2a 20 43  se = 0;.    /* C
26070 68 65 63 6b 20 66 6f 72 20 63 6f 6d 6d 61 6e 64  heck for command
26080 2d 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 20  -line arguments 
26090 2a 2f 0a 20 20 20 20 66 6f 72 28 69 4e 61 6d 65  */.    for(iName
260a0 3d 31 3b 20 69 4e 61 6d 65 3c 6e 41 72 67 20 26  =1; iName<nArg &
260b0 26 20 61 7a 41 72 67 5b 69 4e 61 6d 65 5d 5b 30  & azArg[iName][0
260c0 5d 3d 3d 27 2d 27 3b 20 69 4e 61 6d 65 2b 2b 29  ]=='-'; iName++)
260d0 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
260e0 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 4e  ar *z = azArg[iN
260f0 61 6d 65 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  ame];.      if( 
26100 6f 70 74 69 6f 6e 4d 61 74 63 68 28 7a 2c 22 6e  optionMatch(z,"n
26110 65 77 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ew") ){.        
26120 6e 65 77 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20  newFlag = 1;.   
26130 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b 30     }else if( z[0
26140 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20  ]=='-' ){.      
26150 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
26160 64 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6f  derr, "unknown o
26170 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 7a 29  ption: %s\n", z)
26180 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31  ;.        rc = 1
26190 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d  ;.        goto m
261a0 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
261b0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
261c0 20 20 20 20 2f 2a 20 49 66 20 61 20 66 69 6c 65      /* If a file
261d0 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65  name is specifie
261e0 64 2c 20 74 72 79 20 74 6f 20 6f 70 65 6e 20 69  d, try to open i
261f0 74 20 66 69 72 73 74 20 2a 2f 0a 20 20 20 20 7a  t first */.    z
26200 4e 65 77 46 69 6c 65 6e 61 6d 65 20 3d 20 6e 41  NewFilename = nA
26210 72 67 3e 69 4e 61 6d 65 20 3f 20 73 71 6c 69 74  rg>iName ? sqlit
26220 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c  e3_mprintf("%s",
26230 20 61 7a 41 72 67 5b 69 4e 61 6d 65 5d 29 20 3a   azArg[iName]) :
26240 20 30 3b 0a 20 20 20 20 69 66 28 20 7a 4e 65 77   0;.    if( zNew
26250 46 69 6c 65 6e 61 6d 65 20 29 7b 0a 20 20 20 20  Filename ){.    
26260 20 20 69 66 28 20 6e 65 77 46 6c 61 67 20 29 20    if( newFlag ) 
26270 73 68 65 6c 6c 44 65 6c 65 74 65 46 69 6c 65 28  shellDeleteFile(
26280 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 29 3b 0a 20  zNewFilename);. 
26290 20 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c 65 6e       p->zDbFilen
262a0 61 6d 65 20 3d 20 7a 4e 65 77 46 69 6c 65 6e 61  ame = zNewFilena
262b0 6d 65 3b 0a 20 20 20 20 20 20 6f 70 65 6e 5f 64  me;.      open_d
262c0 62 28 70 2c 20 31 29 3b 0a 20 20 20 20 20 20 69  b(p, 1);.      i
262d0 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29 7b 0a 20  f( p->db==0 ){. 
262e0 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
262f0 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
26300 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 27  r: cannot open '
26310 25 73 27 5c 6e 22 2c 20 7a 4e 65 77 46 69 6c 65  %s'\n", zNewFile
26320 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 73  name);.        s
26330 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 4e 65 77  qlite3_free(zNew
26340 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 20 20 20  Filename);.     
26350 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
26360 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f 73 65 20  p->zFreeOnClose 
26370 3d 20 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 3b 0a  = zNewFilename;.
26380 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
26390 20 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29    if( p->db==0 )
263a0 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 20 61 20  {.      /* As a 
263b0 66 61 6c 6c 2d 62 61 63 6b 20 6f 70 65 6e 20 61  fall-back open a
263c0 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 20 2a   TEMP database *
263d0 2f 0a 20 20 20 20 20 20 70 2d 3e 7a 44 62 46 69  /.      p->zDbFi
263e0 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a 20 20 20 20  lename = 0;.    
263f0 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
26400 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
26410 20 20 69 66 28 20 63 3d 3d 27 6f 27 0a 20 20 20    if( c=='o'.   
26420 26 26 20 28 73 74 72 6e 63 6d 70 28 61 7a 41 72  && (strncmp(azAr
26430 67 5b 30 5d 2c 20 22 6f 75 74 70 75 74 22 2c 20  g[0], "output", 
26440 6e 29 3d 3d 30 20 7c 7c 20 73 74 72 6e 63 6d 70  n)==0 || strncmp
26450 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6f 6e 63 65  (azArg[0], "once
26460 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 29 7b 0a 20  ", n)==0).  ){. 
26470 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
26480 46 69 6c 65 20 3d 20 6e 41 72 67 3e 3d 32 20 3f  File = nArg>=2 ?
26490 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 73 74 64   azArg[1] : "std
264a0 6f 75 74 22 3b 0a 20 20 20 20 69 66 28 20 6e 41  out";.    if( nA
264b0 72 67 3e 32 20 29 7b 0a 20 20 20 20 20 20 75 74  rg>2 ){.      ut
264c0 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
264d0 2c 20 22 55 73 61 67 65 3a 20 2e 25 73 20 46 49  , "Usage: .%s FI
264e0 4c 45 5c 6e 22 2c 20 61 7a 41 72 67 5b 30 5d 29  LE\n", azArg[0])
264f0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
26500 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
26510 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
26520 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 3e 31 20    }.    if( n>1 
26530 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
26540 5b 30 5d 2c 20 22 6f 6e 63 65 22 2c 20 6e 29 3d  [0], "once", n)=
26550 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  =0 ){.      if( 
26560 6e 41 72 67 3c 32 20 29 7b 0a 20 20 20 20 20 20  nArg<2 ){.      
26570 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
26580 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 6f 6e  err, "Usage: .on
26590 63 65 20 46 49 4c 45 5c 6e 22 29 3b 0a 20 20 20  ce FILE\n");.   
265a0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
265b0 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
265c0 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
265d0 20 20 20 7d 0a 20 20 20 20 20 20 70 2d 3e 6f 75     }.      p->ou
265e0 74 43 6f 75 6e 74 20 3d 20 32 3b 0a 20 20 20 20  tCount = 2;.    
265f0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e  }else{.      p->
26600 6f 75 74 43 6f 75 6e 74 20 3d 20 30 3b 0a 20 20  outCount = 0;.  
26610 20 20 7d 0a 20 20 20 20 6f 75 74 70 75 74 5f 72    }.    output_r
26620 65 73 65 74 28 70 29 3b 0a 20 20 20 20 69 66 28  eset(p);.    if(
26630 20 7a 46 69 6c 65 5b 30 5d 3d 3d 27 7c 27 20 29   zFile[0]=='|' )
26640 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
26650 4f 4d 49 54 5f 50 4f 50 45 4e 0a 20 20 20 20 20  OMIT_POPEN.     
26660 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
26670 72 72 2c 20 22 45 72 72 6f 72 3a 20 70 69 70 65  rr, "Error: pipe
26680 73 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72  s are not suppor
26690 74 65 64 20 69 6e 20 74 68 69 73 20 4f 53 5c 6e  ted in this OS\n
266a0 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
266b0 3b 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d  ;.      p->out =
266c0 20 73 74 64 6f 75 74 3b 0a 23 65 6c 73 65 0a 20   stdout;.#else. 
266d0 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 70 6f       p->out = po
266e0 70 65 6e 28 7a 46 69 6c 65 20 2b 20 31 2c 20 22  pen(zFile + 1, "
266f0 77 22 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  w");.      if( p
26700 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ->out==0 ){.    
26710 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
26720 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 63  stderr,"Error: c
26730 61 6e 6e 6f 74 20 6f 70 65 6e 20 70 69 70 65 20  annot open pipe 
26740 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c 65  \"%s\"\n", zFile
26750 20 2b 20 31 29 3b 0a 20 20 20 20 20 20 20 20 70   + 1);.        p
26760 2d 3e 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a  ->out = stdout;.
26770 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
26780 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
26790 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
267a0 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e  rintf(sizeof(p->
267b0 6f 75 74 66 69 6c 65 29 2c 20 70 2d 3e 6f 75 74  outfile), p->out
267c0 66 69 6c 65 2c 20 22 25 73 22 2c 20 7a 46 69 6c  file, "%s", zFil
267d0 65 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64  e);.      }.#end
267e0 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  if.    }else{.  
267f0 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 6f 75 74      p->out = out
26800 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 7a 46  put_file_open(zF
26810 69 6c 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ile);.      if( 
26820 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20  p->out==0 ){.   
26830 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
26840 7a 46 69 6c 65 2c 22 6f 66 66 22 29 21 3d 30 20  zFile,"off")!=0 
26850 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66  ){.          utf
26860 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
26870 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 77  "Error: cannot w
26880 72 69 74 65 20 74 6f 20 5c 22 25 73 5c 22 5c 6e  rite to \"%s\"\n
26890 22 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20  ", zFile);.     
268a0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 2d 3e     }.        p->
268b0 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a 20 20  out = stdout;.  
268c0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
268d0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
268e0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
268f0 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e  rintf(sizeof(p->
26900 6f 75 74 66 69 6c 65 29 2c 20 70 2d 3e 6f 75 74  outfile), p->out
26910 66 69 6c 65 2c 20 22 25 73 22 2c 20 7a 46 69 6c  file, "%s", zFil
26920 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
26930 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
26940 20 63 3d 3d 27 70 27 20 26 26 20 6e 3e 3d 33 20   c=='p' && n>=3 
26950 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
26960 5b 30 5d 2c 20 22 70 72 69 6e 74 22 2c 20 6e 29  [0], "print", n)
26970 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  ==0 ){.    int i
26980 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b 20 69  ;.    for(i=1; i
26990 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
269a0 20 20 20 69 66 28 20 69 3e 31 20 29 20 72 61 77     if( i>1 ) raw
269b0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
269c0 22 20 22 29 3b 0a 20 20 20 20 20 20 75 74 66 38  " ");.      utf8
269d0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
269e0 22 25 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b  "%s", azArg[i]);
269f0 0a 20 20 20 20 7d 0a 20 20 20 20 72 61 77 5f 70  .    }.    raw_p
26a00 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c  rintf(p->out, "\
26a10 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20  n");.  }else..  
26a20 69 66 28 20 63 3d 3d 27 70 27 20 26 26 20 73 74  if( c=='p' && st
26a30 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
26a40 22 70 72 6f 6d 70 74 22 2c 20 6e 29 3d 3d 30 20  "prompt", n)==0 
26a50 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 20  ){.    if( nArg 
26a60 3e 3d 20 32 29 20 7b 0a 20 20 20 20 20 20 73 74  >= 2) {.      st
26a70 72 6e 63 70 79 28 6d 61 69 6e 50 72 6f 6d 70 74  rncpy(mainPrompt
26a80 2c 61 7a 41 72 67 5b 31 5d 2c 28 69 6e 74 29 41  ,azArg[1],(int)A
26a90 72 72 61 79 53 69 7a 65 28 6d 61 69 6e 50 72 6f  rraySize(mainPro
26aa0 6d 70 74 29 2d 31 29 3b 0a 20 20 20 20 7d 0a 20  mpt)-1);.    }. 
26ab0 20 20 20 69 66 28 20 6e 41 72 67 20 3e 3d 20 33     if( nArg >= 3
26ac0 29 20 7b 0a 20 20 20 20 20 20 73 74 72 6e 63 70  ) {.      strncp
26ad0 79 28 63 6f 6e 74 69 6e 75 65 50 72 6f 6d 70 74  y(continuePrompt
26ae0 2c 61 7a 41 72 67 5b 32 5d 2c 28 69 6e 74 29 41  ,azArg[2],(int)A
26af0 72 72 61 79 53 69 7a 65 28 63 6f 6e 74 69 6e 75  rraySize(continu
26b00 65 50 72 6f 6d 70 74 29 2d 31 29 3b 0a 20 20 20  ePrompt)-1);.   
26b10 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66   }.  }else..  if
26b20 28 20 63 3d 3d 27 71 27 20 26 26 20 73 74 72 6e  ( c=='q' && strn
26b30 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 71  cmp(azArg[0], "q
26b40 75 69 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  uit", n)==0 ){. 
26b50 20 20 20 72 63 20 3d 20 32 3b 0a 20 20 7d 65 6c     rc = 2;.  }el
26b60 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 72 27  se..  if( c=='r'
26b70 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e   && n>=3 && strn
26b80 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 72  cmp(azArg[0], "r
26b90 65 61 64 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ead", n)==0 ){. 
26ba0 20 20 20 46 49 4c 45 20 2a 61 6c 74 3b 0a 20 20     FILE *alt;.  
26bb0 20 20 69 66 28 20 6e 41 72 67 21 3d 32 20 29 7b    if( nArg!=2 ){
26bc0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
26bd0 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
26be0 3a 20 2e 72 65 61 64 20 46 49 4c 45 5c 6e 22 29  : .read FILE\n")
26bf0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
26c00 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
26c10 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
26c20 20 20 7d 0a 20 20 20 20 61 6c 74 20 3d 20 66 6f    }.    alt = fo
26c30 70 65 6e 28 61 7a 41 72 67 5b 31 5d 2c 20 22 72  pen(azArg[1], "r
26c40 62 22 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 74  b");.    if( alt
26c50 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66  ==0 ){.      utf
26c60 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
26c70 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f  "Error: cannot o
26c80 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61  pen \"%s\"\n", a
26c90 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20  zArg[1]);.      
26ca0 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  rc = 1;.    }els
26cb0 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 70 72  e{.      rc = pr
26cc0 6f 63 65 73 73 5f 69 6e 70 75 74 28 70 2c 20 61  ocess_input(p, a
26cd0 6c 74 29 3b 0a 20 20 20 20 20 20 66 63 6c 6f 73  lt);.      fclos
26ce0 65 28 61 6c 74 29 3b 0a 20 20 20 20 7d 0a 20 20  e(alt);.    }.  
26cf0 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
26d00 27 72 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73  'r' && n>=3 && s
26d10 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
26d20 20 22 72 65 73 74 6f 72 65 22 2c 20 6e 29 3d 3d   "restore", n)==
26d30 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  0 ){.    const c
26d40 68 61 72 20 2a 7a 53 72 63 46 69 6c 65 3b 0a 20  har *zSrcFile;. 
26d50 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
26d60 44 62 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  Db;.    sqlite3 
26d70 2a 70 53 72 63 3b 0a 20 20 20 20 73 71 6c 69 74  *pSrc;.    sqlit
26d80 65 33 5f 62 61 63 6b 75 70 20 2a 70 42 61 63 6b  e3_backup *pBack
26d90 75 70 3b 0a 20 20 20 20 69 6e 74 20 6e 54 69 6d  up;.    int nTim
26da0 65 6f 75 74 20 3d 20 30 3b 0a 0a 20 20 20 20 69  eout = 0;..    i
26db0 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20  f( nArg==2 ){.  
26dc0 20 20 20 20 7a 53 72 63 46 69 6c 65 20 3d 20 61      zSrcFile = a
26dd0 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 20 20 7a  zArg[1];.      z
26de0 44 62 20 3d 20 22 6d 61 69 6e 22 3b 0a 20 20 20  Db = "main";.   
26df0 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67 3d   }else if( nArg=
26e00 3d 33 20 29 7b 0a 20 20 20 20 20 20 7a 53 72 63  =3 ){.      zSrc
26e10 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b 32 5d 3b  File = azArg[2];
26e20 0a 20 20 20 20 20 20 7a 44 62 20 3d 20 61 7a 41  .      zDb = azA
26e30 72 67 5b 31 5d 3b 0a 20 20 20 20 7d 65 6c 73 65  rg[1];.    }else
26e40 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
26e50 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
26e60 65 3a 20 2e 72 65 73 74 6f 72 65 20 3f 44 42 3f  e: .restore ?DB?
26e70 20 46 49 4c 45 5c 6e 22 29 3b 0a 20 20 20 20 20   FILE\n");.     
26e80 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67   rc = 1;.      g
26e90 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
26ea0 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20  _exit;.    }.   
26eb0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70   rc = sqlite3_op
26ec0 65 6e 28 7a 53 72 63 46 69 6c 65 2c 20 26 70 53  en(zSrcFile, &pS
26ed0 72 63 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  rc);.    if( rc!
26ee0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
26ef0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
26f00 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
26f10 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73  cannot open \"%s
26f20 5c 22 5c 6e 22 2c 20 7a 53 72 63 46 69 6c 65 29  \"\n", zSrcFile)
26f30 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
26f40 63 6c 6f 73 65 28 70 53 72 63 29 3b 0a 20 20 20  close(pSrc);.   
26f50 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
26f60 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70   }.    open_db(p
26f70 2c 20 30 29 3b 0a 20 20 20 20 70 42 61 63 6b 75  , 0);.    pBacku
26f80 70 20 3d 20 73 71 6c 69 74 65 33 5f 62 61 63 6b  p = sqlite3_back
26f90 75 70 5f 69 6e 69 74 28 70 2d 3e 64 62 2c 20 7a  up_init(p->db, z
26fa0 44 62 2c 20 70 53 72 63 2c 20 22 6d 61 69 6e 22  Db, pSrc, "main"
26fb0 29 3b 0a 20 20 20 20 69 66 28 20 70 42 61 63 6b  );.    if( pBack
26fc0 75 70 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75  up==0 ){.      u
26fd0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
26fe0 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22  r, "Error: %s\n"
26ff0 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
27000 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20  (p->db));.      
27010 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 53  sqlite3_close(pS
27020 72 63 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  rc);.      retur
27030 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77  n 1;.    }.    w
27040 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c 69  hile( (rc = sqli
27050 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70 28  te3_backup_step(
27060 70 42 61 63 6b 75 70 2c 31 30 30 29 29 3d 3d 53  pBackup,100))==S
27070 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 20 20  QLITE_OK.       
27080 20 20 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45     || rc==SQLITE
27090 5f 42 55 53 59 20 20 29 7b 0a 20 20 20 20 20 20  _BUSY  ){.      
270a0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
270b0 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 69  USY ){.        i
270c0 66 28 20 6e 54 69 6d 65 6f 75 74 2b 2b 20 3e 3d  f( nTimeout++ >=
270d0 20 33 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20   3 ) break;.    
270e0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6c 65 65      sqlite3_slee
270f0 70 28 31 30 30 29 3b 0a 20 20 20 20 20 20 7d 0a  p(100);.      }.
27100 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
27110 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28  3_backup_finish(
27120 70 42 61 63 6b 75 70 29 3b 0a 20 20 20 20 69 66  pBackup);.    if
27130 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc==SQLITE_DON
27140 45 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  E ){.      rc = 
27150 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
27160 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
27170 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4c   || rc==SQLITE_L
27180 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 72  OCKED ){.      r
27190 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
271a0 2c 20 22 45 72 72 6f 72 3a 20 73 6f 75 72 63 65  , "Error: source
271b0 20 64 61 74 61 62 61 73 65 20 69 73 20 62 75 73   database is bus
271c0 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20  y\n");.      rc 
271d0 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 1;.    }else{.
271e0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
271f0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
27200 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33  : %s\n", sqlite3
27210 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b  _errmsg(p->db));
27220 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
27230 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
27240 5f 63 6c 6f 73 65 28 70 53 72 63 29 3b 0a 20 20  _close(pSrc);.  
27250 7d 65 6c 73 65 0a 0a 0a 20 20 69 66 28 20 63 3d  }else...  if( c=
27260 3d 27 73 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='s' && strncmp(
27270 61 7a 41 72 67 5b 30 5d 2c 20 22 73 63 61 6e 73  azArg[0], "scans
27280 74 61 74 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  tats", n)==0 ){.
27290 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20      if( nArg==2 
272a0 29 7b 0a 20 20 20 20 20 20 70 2d 3e 73 63 61 6e  ){.      p->scan
272b0 73 74 61 74 73 4f 6e 20 3d 20 62 6f 6f 6c 65 61  statsOn = boolea
272c0 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29  nValue(azArg[1])
272d0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
272e0 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
272f0 4e 53 54 41 54 55 53 0a 20 20 20 20 20 20 72 61  NSTATUS.      ra
27300 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
27310 20 22 57 61 72 6e 69 6e 67 3a 20 2e 73 63 61 6e   "Warning: .scan
27320 73 74 61 74 73 20 6e 6f 74 20 61 76 61 69 6c 61  stats not availa
27330 62 6c 65 20 69 6e 20 74 68 69 73 20 62 75 69 6c  ble in this buil
27340 64 2e 5c 6e 22 29 3b 0a 23 65 6e 64 69 66 0a 20  d.\n");.#endif. 
27350 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
27360 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
27370 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 63 61 6e  r, "Usage: .scan
27380 73 74 61 74 73 20 6f 6e 7c 6f 66 66 5c 6e 22 29  stats on|off\n")
27390 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
273a0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
273b0 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 73   if( c=='s' && s
273c0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
273d0 20 22 73 63 68 65 6d 61 22 2c 20 6e 29 3d 3d 30   "schema", n)==0
273e0 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c 54 65 78   ){.    ShellTex
273f0 74 20 73 53 65 6c 65 63 74 3b 0a 20 20 20 20 53  t sSelect;.    S
27400 68 65 6c 6c 53 74 61 74 65 20 64 61 74 61 3b 0a  hellState data;.
27410 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73      char *zErrMs
27420 67 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74  g = 0;.    const
27430 20 63 68 61 72 20 2a 7a 44 69 76 20 3d 20 30 3b   char *zDiv = 0;
27440 0a 20 20 20 20 69 6e 74 20 69 53 63 68 65 6d 61  .    int iSchema
27450 20 3d 20 30 3b 0a 0a 20 20 20 20 6f 70 65 6e 5f   = 0;..    open_
27460 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 6d 65  db(p, 0);.    me
27470 6d 63 70 79 28 26 64 61 74 61 2c 20 70 2c 20 73  mcpy(&data, p, s
27480 69 7a 65 6f 66 28 64 61 74 61 29 29 3b 0a 20 20  izeof(data));.  
27490 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61 64 65    data.showHeade
274a0 72 20 3d 20 30 3b 0a 20 20 20 20 64 61 74 61 2e  r = 0;.    data.
274b0 63 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64  cMode = data.mod
274c0 65 20 3d 20 4d 4f 44 45 5f 53 65 6d 69 3b 0a 20  e = MODE_Semi;. 
274d0 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 53 65     initText(&sSe
274e0 6c 65 63 74 29 3b 0a 20 20 20 20 69 66 28 20 6e  lect);.    if( n
274f0 41 72 67 3e 3d 32 20 26 26 20 6f 70 74 69 6f 6e  Arg>=2 && option
27500 4d 61 74 63 68 28 61 7a 41 72 67 5b 31 5d 2c 20  Match(azArg[1], 
27510 22 69 6e 64 65 6e 74 22 29 20 29 7b 0a 20 20 20  "indent") ){.   
27520 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20     data.cMode = 
27530 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45  data.mode = MODE
27540 5f 50 72 65 74 74 79 3b 0a 20 20 20 20 20 20 6e  _Pretty;.      n
27550 41 72 67 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28  Arg--;.      if(
27560 20 6e 41 72 67 3d 3d 32 20 29 20 61 7a 41 72 67   nArg==2 ) azArg
27570 5b 31 5d 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a  [1] = azArg[2];.
27580 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 41      }.    if( nA
27590 72 67 3d 3d 32 20 26 26 20 61 7a 41 72 67 5b 31  rg==2 && azArg[1
275a0 5d 5b 30 5d 21 3d 27 2d 27 20 29 7b 0a 20 20 20  ][0]!='-' ){.   
275b0 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20     int i;.      
275c0 66 6f 72 28 69 3d 30 3b 20 61 7a 41 72 67 5b 31  for(i=0; azArg[1
275d0 5d 5b 69 5d 3b 20 69 2b 2b 29 20 61 7a 41 72 67  ][i]; i++) azArg
275e0 5b 31 5d 5b 69 5d 20 3d 20 54 6f 4c 6f 77 65 72  [1][i] = ToLower
275f0 28 61 7a 41 72 67 5b 31 5d 5b 69 5d 29 3b 0a 20  (azArg[1][i]);. 
27600 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
27610 61 7a 41 72 67 5b 31 5d 2c 22 73 71 6c 69 74 65  azArg[1],"sqlite
27620 5f 6d 61 73 74 65 72 22 29 3d 3d 30 20 29 7b 0a  _master")==0 ){.
27630 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 6e 65          char *ne
27640 77 5f 61 72 67 76 5b 32 5d 2c 20 2a 6e 65 77 5f  w_argv[2], *new_
27650 63 6f 6c 76 5b 32 5d 3b 0a 20 20 20 20 20 20 20  colv[2];.       
27660 20 6e 65 77 5f 61 72 67 76 5b 30 5d 20 3d 20 22   new_argv[0] = "
27670 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c  CREATE TABLE sql
27680 69 74 65 5f 6d 61 73 74 65 72 20 28 5c 6e 22 0a  ite_master (\n".
27690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276a0 20 20 20 20 20 20 22 20 20 74 79 70 65 20 74 65        "  type te
276b0 78 74 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20 20  xt,\n".         
276c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20               "  
276d0 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20  name text,\n".  
276e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276f0 20 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65 20      "  tbl_name 
27700 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 20 20  text,\n".       
27710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
27720 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67    rootpage integ
27730 65 72 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20 20  er,\n".         
27740 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20               "  
27750 73 71 6c 20 74 65 78 74 5c 6e 22 0a 20 20 20 20  sql text\n".    
27760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27770 20 20 22 29 22 3b 0a 20 20 20 20 20 20 20 20 6e    ")";.        n
27780 65 77 5f 61 72 67 76 5b 31 5d 20 3d 20 30 3b 0a  ew_argv[1] = 0;.
27790 20 20 20 20 20 20 20 20 6e 65 77 5f 63 6f 6c 76          new_colv
277a0 5b 30 5d 20 3d 20 22 73 71 6c 22 3b 0a 20 20 20  [0] = "sql";.   
277b0 20 20 20 20 20 6e 65 77 5f 63 6f 6c 76 5b 31 5d       new_colv[1]
277c0 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 63 61   = 0;.        ca
277d0 6c 6c 62 61 63 6b 28 26 64 61 74 61 2c 20 31 2c  llback(&data, 1,
277e0 20 6e 65 77 5f 61 72 67 76 2c 20 6e 65 77 5f 63   new_argv, new_c
277f0 6f 6c 76 29 3b 0a 20 20 20 20 20 20 20 20 72 63  olv);.        rc
27800 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
27810 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
27820 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 73  rcmp(azArg[1],"s
27830 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
27840 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  r")==0 ){.      
27850 20 20 63 68 61 72 20 2a 6e 65 77 5f 61 72 67 76    char *new_argv
27860 5b 32 5d 2c 20 2a 6e 65 77 5f 63 6f 6c 76 5b 32  [2], *new_colv[2
27870 5d 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 61  ];.        new_a
27880 72 67 76 5b 30 5d 20 3d 20 22 43 52 45 41 54 45  rgv[0] = "CREATE
27890 20 54 45 4d 50 20 54 41 42 4c 45 20 73 71 6c 69   TEMP TABLE sqli
278a0 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 28  te_temp_master (
278b0 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  \n".            
278c0 20 20 20 20 20 20 20 20 20 20 22 20 20 74 79 70            "  typ
278d0 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20  e text,\n".     
278e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278f0 20 22 20 20 6e 61 6d 65 20 74 65 78 74 2c 5c 6e   "  name text,\n
27900 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
27910 20 20 20 20 20 20 20 20 22 20 20 74 62 6c 5f 6e          "  tbl_n
27920 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20  ame text,\n".   
27930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27940 20 20 20 22 20 20 72 6f 6f 74 70 61 67 65 20 69     "  rootpage i
27950 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20 20 20 20  nteger,\n".     
27960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27970 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e 22 0a   "  sql text\n".
27980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27990 20 20 20 20 20 20 22 29 22 3b 0a 20 20 20 20 20        ")";.     
279a0 20 20 20 6e 65 77 5f 61 72 67 76 5b 31 5d 20 3d     new_argv[1] =
279b0 20 30 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f   0;.        new_
279c0 63 6f 6c 76 5b 30 5d 20 3d 20 22 73 71 6c 22 3b  colv[0] = "sql";
279d0 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 63 6f 6c  .        new_col
279e0 76 5b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  v[1] = 0;.      
279f0 20 20 63 61 6c 6c 62 61 63 6b 28 26 64 61 74 61    callback(&data
27a00 2c 20 31 2c 20 6e 65 77 5f 61 72 67 76 2c 20 6e  , 1, new_argv, n
27a10 65 77 5f 63 6f 6c 76 29 3b 0a 20 20 20 20 20 20  ew_colv);.      
27a20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
27a30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
27a40 20 20 20 20 20 20 20 7a 44 69 76 20 3d 20 22 28         zDiv = "(
27a50 22 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ";.      }.    }
27a60 65 6c 73 65 20 69 66 28 20 6e 41 72 67 3d 3d 31  else if( nArg==1
27a70 20 29 7b 0a 20 20 20 20 20 20 7a 44 69 76 20 3d   ){.      zDiv =
27a80 20 22 28 22 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   "(";.    }else{
27a90 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
27aa0 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
27ab0 3a 20 2e 73 63 68 65 6d 61 20 3f 2d 2d 69 6e 64  : .schema ?--ind
27ac0 65 6e 74 3f 20 3f 4c 49 4b 45 2d 50 41 54 54 45  ent? ?LIKE-PATTE
27ad0 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  RN?\n");.      r
27ae0 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74  c = 1;.      got
27af0 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
27b00 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  xit;.    }.    i
27b10 66 28 20 7a 44 69 76 20 29 7b 0a 20 20 20 20 20  f( zDiv ){.     
27b20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
27b30 53 74 6d 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  Stmt = 0;.      
27b40 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
27b50 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 22  pare_v2(p->db, "
27b60 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
27b70 20 70 72 61 67 6d 61 5f 64 61 74 61 62 61 73 65   pragma_database
27b80 5f 6c 69 73 74 22 2c 0a 20 20 20 20 20 20 20 20  _list",.        
27b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ba0 20 20 20 20 20 20 2d 31 2c 20 26 70 53 74 6d 74        -1, &pStmt
27bb0 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
27bc0 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74  rc ){.        ut
27bd0 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
27be0 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c  , "Error: %s\n",
27bf0 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
27c00 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 20  p->db));.       
27c10 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
27c20 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20  e(pStmt);.      
27c30 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
27c40 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
27c50 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20  and_exit;.      
27c60 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65  }.      appendTe
27c70 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 53 45  xt(&sSelect, "SE
27c80 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 22 2c 20  LECT sql FROM", 
27c90 30 29 3b 0a 20 20 20 20 20 20 69 53 63 68 65 6d  0);.      iSchem
27ca0 61 20 3d 20 30 3b 0a 20 20 20 20 20 20 77 68 69  a = 0;.      whi
27cb0 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70  le( sqlite3_step
27cc0 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f  (pStmt)==SQLITE_
27cd0 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 20 20 63  ROW ){.        c
27ce0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
27cf0 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
27d00 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
27d10 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20  t(pStmt, 0);.   
27d20 20 20 20 20 20 63 68 61 72 20 7a 53 63 4e 75 6d       char zScNum
27d30 5b 33 30 5d 3b 0a 20 20 20 20 20 20 20 20 73 71  [30];.        sq
27d40 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
27d50 69 7a 65 6f 66 28 7a 53 63 4e 75 6d 29 2c 20 7a  izeof(zScNum), z
27d60 53 63 4e 75 6d 2c 20 22 25 64 22 2c 20 2b 2b 69  ScNum, "%d", ++i
27d70 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20 20 20  Schema);.       
27d80 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
27d90 6c 65 63 74 2c 20 7a 44 69 76 2c 20 30 29 3b 0a  lect, zDiv, 0);.
27da0 20 20 20 20 20 20 20 20 7a 44 69 76 20 3d 20 22          zDiv = "
27db0 20 55 4e 49 4f 4e 20 41 4c 4c 20 22 3b 0a 20 20   UNION ALL ";.  
27dc0 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70        if( strcmp
27dd0 28 7a 44 62 2c 20 22 6d 61 69 6e 22 29 21 3d 30  (zDb, "main")!=0
27de0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70   ){.          ap
27df0 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63  pendText(&sSelec
27e00 74 2c 20 22 53 45 4c 45 43 54 20 73 68 65 6c 6c  t, "SELECT shell
27e10 5f 61 64 64 5f 73 63 68 65 6d 61 28 73 71 6c 2c  _add_schema(sql,
27e20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  ", 0);.         
27e30 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
27e40 6c 65 63 74 2c 20 7a 44 62 2c 20 27 22 27 29 3b  lect, zDb, '"');
27e50 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e  .          appen
27e60 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20  dText(&sSelect, 
27e70 22 29 20 41 53 20 73 71 6c 2c 20 74 79 70 65 2c  ") AS sql, type,
27e80 20 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c   tbl_name, name,
27e90 20 72 6f 77 69 64 2c 22 2c 20 30 29 3b 0a 20 20   rowid,", 0);.  
27ea0 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65          appendTe
27eb0 78 74 28 26 73 53 65 6c 65 63 74 2c 20 7a 53 63  xt(&sSelect, zSc
27ec0 4e 75 6d 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  Num, 0);.       
27ed0 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
27ee0 53 65 6c 65 63 74 2c 20 22 20 41 53 20 73 6e 75  Select, " AS snu
27ef0 6d 2c 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  m, ", 0);.      
27f00 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
27f10 73 53 65 6c 65 63 74 2c 20 7a 44 62 2c 20 27 5c  sSelect, zDb, '\
27f20 27 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  '');.          a
27f30 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
27f40 63 74 2c 20 22 20 41 53 20 73 6e 61 6d 65 20 46  ct, " AS sname F
27f50 52 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 20  ROM ", 0);.     
27f60 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
27f70 26 73 53 65 6c 65 63 74 2c 20 7a 44 62 2c 20 27  &sSelect, zDb, '
27f80 22 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  "');.          a
27f90 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
27fa0 63 74 2c 20 22 2e 73 71 6c 69 74 65 5f 6d 61 73  ct, ".sqlite_mas
27fb0 74 65 72 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  ter", 0);.      
27fc0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
27fd0 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
27fe0 53 65 6c 65 63 74 2c 20 22 53 45 4c 45 43 54 20  Select, "SELECT 
27ff0 73 71 6c 2c 20 74 79 70 65 2c 20 74 62 6c 5f 6e  sql, type, tbl_n
28000 61 6d 65 2c 20 6e 61 6d 65 2c 20 72 6f 77 69 64  ame, name, rowid
28010 2c 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  , ", 0);.       
28020 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
28030 53 65 6c 65 63 74 2c 20 7a 53 63 4e 75 6d 2c 20  Select, zScNum, 
28040 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 70  0);.          ap
28050 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63  pendText(&sSelec
28060 74 2c 20 22 20 41 53 20 73 6e 75 6d 2c 20 27 6d  t, " AS snum, 'm
28070 61 69 6e 27 20 41 53 20 73 6e 61 6d 65 20 46 52  ain' AS sname FR
28080 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
28090 22 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ",0);.        }.
280a0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
280b0 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
280c0 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 61 70 70  Stmt);.      app
280d0 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74  endText(&sSelect
280e0 2c 20 22 29 20 57 48 45 52 45 20 22 2c 20 30 29  , ") WHERE ", 0)
280f0 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 41 72 67  ;.      if( nArg
28100 3e 31 20 29 7b 0a 20 20 20 20 20 20 20 20 63 68  >1 ){.        ch
28110 61 72 20 2a 7a 51 61 72 67 20 3d 20 73 71 6c 69  ar *zQarg = sqli
28120 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 51 22  te3_mprintf("%Q"
28130 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  , azArg[1]);.   
28140 20 20 20 20 20 69 66 28 20 73 74 72 63 68 72 28       if( strchr(
28150 61 7a 41 72 67 5b 31 5d 2c 20 27 2e 27 29 20 29  azArg[1], '.') )
28160 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 65  {.          appe
28170 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c  ndText(&sSelect,
28180 20 22 6c 6f 77 65 72 28 70 72 69 6e 74 66 28 27   "lower(printf('
28190 25 73 2e 25 73 27 2c 73 6e 61 6d 65 2c 74 62 6c  %s.%s',sname,tbl
281a0 5f 6e 61 6d 65 29 29 22 2c 20 30 29 3b 0a 20 20  _name))", 0);.  
281b0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
281c0 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
281d0 74 28 26 73 53 65 6c 65 63 74 2c 20 22 6c 6f 77  t(&sSelect, "low
281e0 65 72 28 74 62 6c 5f 6e 61 6d 65 29 22 2c 20 30  er(tbl_name)", 0
281f0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
28200 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
28210 26 73 53 65 6c 65 63 74 2c 20 73 74 72 63 68 72  &sSelect, strchr
28220 28 61 7a 41 72 67 5b 31 5d 2c 20 27 2a 27 29 20  (azArg[1], '*') 
28230 3f 20 22 20 47 4c 4f 42 20 22 20 3a 20 22 20 4c  ? " GLOB " : " L
28240 49 4b 45 20 22 2c 20 30 29 3b 0a 20 20 20 20 20  IKE ", 0);.     
28250 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
28260 53 65 6c 65 63 74 2c 20 7a 51 61 72 67 2c 20 30  Select, zQarg, 0
28270 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  );.        appen
28280 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20  dText(&sSelect, 
28290 22 20 41 4e 44 20 22 2c 20 30 29 3b 0a 20 20 20  " AND ", 0);.   
282a0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
282b0 65 28 7a 51 61 72 67 29 3b 0a 20 20 20 20 20 20  e(zQarg);.      
282c0 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65  }.      appendTe
282d0 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 74 79  xt(&sSelect, "ty
282e0 70 65 21 3d 27 6d 65 74 61 27 20 41 4e 44 20 73  pe!='meta' AND s
282f0 71 6c 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 22 0a  ql IS NOT NULL".
28300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28310 20 20 20 20 20 20 20 20 20 20 20 22 20 4f 52 44             " ORD
28320 45 52 20 42 59 20 73 6e 75 6d 2c 20 72 6f 77 69  ER BY snum, rowi
28330 64 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 72 63  d", 0);.      rc
28340 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
28350 70 2d 3e 64 62 2c 20 73 53 65 6c 65 63 74 2e 7a  p->db, sSelect.z
28360 2c 20 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74  , callback, &dat
28370 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20  a, &zErrMsg);.  
28380 20 20 20 20 66 72 65 65 54 65 78 74 28 26 73 53      freeText(&sS
28390 65 6c 65 63 74 29 3b 0a 20 20 20 20 7d 0a 20 20  elect);.    }.  
283a0 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b    if( zErrMsg ){
283b0 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
283c0 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72  tf(stderr,"Error
283d0 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67  : %s\n", zErrMsg
283e0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
283f0 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a  _free(zErrMsg);.
28400 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
28410 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 20 21    }else if( rc !
28420 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  = SQLITE_OK ){. 
28430 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
28440 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 71  stderr,"Error: q
28450 75 65 72 79 69 6e 67 20 73 63 68 65 6d 61 20 69  uerying schema i
28460 6e 66 6f 72 6d 61 74 69 6f 6e 5c 6e 22 29 3b 0a  nformation\n");.
28470 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
28480 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
28490 63 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  c = 0;.    }.  }
284a0 65 6c 73 65 0a 0a 23 69 66 20 64 65 66 69 6e 65  else..#if define
284b0 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
284c0 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
284d0 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54  E_ENABLE_SELECTT
284e0 52 41 43 45 29 0a 20 20 69 66 28 20 63 3d 3d 27  RACE).  if( c=='
284f0 73 27 20 26 26 20 6e 3d 3d 31 31 20 26 26 20 73  s' && n==11 && s
28500 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
28510 20 22 73 65 6c 65 63 74 74 72 61 63 65 22 2c 20   "selecttrace", 
28520 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  n)==0 ){.    sql
28530 69 74 65 33 53 65 6c 65 63 74 54 72 61 63 65 20  ite3SelectTrace 
28540 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61  = (int)integerVa
28550 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  lue(azArg[1]);. 
28560 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 23   }else.#endif..#
28570 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
28580 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e  E_ENABLE_SESSION
28590 29 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26  ).  if( c=='s' &
285a0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
285b0 30 5d 2c 22 73 65 73 73 69 6f 6e 22 2c 6e 29 3d  0],"session",n)=
285c0 3d 30 20 26 26 20 6e 3e 3d 33 20 29 7b 0a 20 20  =0 && n>=3 ){.  
285d0 20 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20 2a 70    OpenSession *p
285e0 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e 61 53  Session = &p->aS
285f0 65 73 73 69 6f 6e 5b 30 5d 3b 0a 20 20 20 20 63  ession[0];.    c
28600 68 61 72 20 2a 2a 61 7a 43 6d 64 20 3d 20 26 61  har **azCmd = &a
28610 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 69 6e 74  zArg[1];.    int
28620 20 69 53 65 73 20 3d 20 30 3b 0a 20 20 20 20 69   iSes = 0;.    i
28630 6e 74 20 6e 43 6d 64 20 3d 20 6e 41 72 67 20 2d  nt nCmd = nArg -
28640 20 31 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   1;.    int i;. 
28650 20 20 20 69 66 28 20 6e 41 72 67 3c 3d 31 20 29     if( nArg<=1 )
28660 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79   goto session_sy
28670 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20  ntax_error;.    
28680 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20  open_db(p, 0);. 
28690 20 20 20 69 66 28 20 6e 41 72 67 3e 3d 33 20 29     if( nArg>=3 )
286a0 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 53 65 73  {.      for(iSes
286b0 3d 30 3b 20 69 53 65 73 3c 70 2d 3e 6e 53 65 73  =0; iSes<p->nSes
286c0 73 69 6f 6e 3b 20 69 53 65 73 2b 2b 29 7b 0a 20  sion; iSes++){. 
286d0 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d         if( strcm
286e0 70 28 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 69 53  p(p->aSession[iS
286f0 65 73 5d 2e 7a 4e 61 6d 65 2c 20 61 7a 41 72 67  es].zName, azArg
28700 5b 31 5d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  [1])==0 ) break;
28710 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
28720 66 28 20 69 53 65 73 3c 70 2d 3e 6e 53 65 73 73  f( iSes<p->nSess
28730 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ion ){.        p
28740 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e 61 53  Session = &p->aS
28750 65 73 73 69 6f 6e 5b 69 53 65 73 5d 3b 0a 20 20  ession[iSes];.  
28760 20 20 20 20 20 20 61 7a 43 6d 64 2b 2b 3b 0a 20        azCmd++;. 
28770 20 20 20 20 20 20 20 6e 43 6d 64 2d 2d 3b 0a 20         nCmd--;. 
28780 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
28790 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d 20 26      pSession = &
287a0 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 30 5d 3b 0a  p->aSession[0];.
287b0 20 20 20 20 20 20 20 20 69 53 65 73 20 3d 20 30          iSes = 0
287c0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
287d0 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e  .    /* .session
287e0 20 61 74 74 61 63 68 20 54 41 42 4c 45 0a 20 20   attach TABLE.  
287f0 20 20 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    ** Invoke the 
28800 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 61  sqlite3session_a
28810 74 74 61 63 68 28 29 20 69 6e 74 65 72 66 61 63  ttach() interfac
28820 65 20 74 6f 20 61 74 74 61 63 68 20 61 20 70 61  e to attach a pa
28830 72 74 69 63 75 6c 61 72 0a 20 20 20 20 2a 2a 20  rticular.    ** 
28840 74 61 62 6c 65 20 73 6f 20 74 68 61 74 20 69 74  table so that it
28850 20 69 73 20 6e 65 76 65 72 20 66 69 6c 74 65 72   is never filter
28860 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ed..    */.    i
28870 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b  f( strcmp(azCmd[
28880 30 5d 2c 22 61 74 74 61 63 68 22 29 3d 3d 30 20  0],"attach")==0 
28890 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d  ){.      if( nCm
288a0 64 21 3d 32 20 29 20 67 6f 74 6f 20 73 65 73 73  d!=2 ) goto sess
288b0 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72  ion_syntax_error
288c0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 53 65 73  ;.      if( pSes
288d0 73 69 6f 6e 2d 3e 70 3d 3d 30 20 29 7b 0a 20 20  sion->p==0 ){.  
288e0 20 20 20 20 20 20 73 65 73 73 69 6f 6e 5f 6e 6f        session_no
288f0 74 5f 6f 70 65 6e 3a 0a 20 20 20 20 20 20 20 20  t_open:.        
28900 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
28910 72 2c 20 22 45 52 52 4f 52 3a 20 4e 6f 20 73 65  r, "ERROR: No se
28920 73 73 69 6f 6e 73 20 61 72 65 20 6f 70 65 6e 5c  ssions are open\
28930 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  n");.      }else
28940 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
28950 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 61 74  qlite3session_at
28960 74 61 63 68 28 70 53 65 73 73 69 6f 6e 2d 3e 70  tach(pSession->p
28970 2c 20 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20 20 20  , azCmd[1]);.   
28980 20 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20       if( rc ){. 
28990 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69           raw_pri
289a0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 52 52  ntf(stderr, "ERR
289b0 4f 52 3a 20 73 71 6c 69 74 65 33 73 65 73 73 69  OR: sqlite3sessi
289c0 6f 6e 5f 61 74 74 61 63 68 28 29 20 72 65 74 75  on_attach() retu
289d0 72 6e 73 20 25 64 5c 6e 22 2c 20 72 63 29 3b 0a  rns %d\n", rc);.
289e0 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 30            rc = 0
289f0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
28a00 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20    }.    }else.. 
28a10 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 63     /* .session c
28a20 68 61 6e 67 65 73 65 74 20 46 49 4c 45 0a 20 20  hangeset FILE.  
28a30 20 20 2a 2a 20 2e 73 65 73 73 69 6f 6e 20 70 61    ** .session pa
28a40 74 63 68 73 65 74 20 46 49 4c 45 0a 20 20 20 20  tchset FILE.    
28a50 2a 2a 20 57 72 69 74 65 20 61 20 63 68 61 6e 67  ** Write a chang
28a60 65 73 65 74 20 6f 72 20 70 61 74 63 68 73 65 74  eset or patchset
28a70 20 69 6e 74 6f 20 61 20 66 69 6c 65 2e 20 20 54   into a file.  T
28a80 68 65 20 66 69 6c 65 20 69 73 20 6f 76 65 72 77  he file is overw
28a90 72 69 74 74 65 6e 2e 0a 20 20 20 20 2a 2f 0a 20  ritten..    */. 
28aa0 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a     if( strcmp(az
28ab0 43 6d 64 5b 30 5d 2c 22 63 68 61 6e 67 65 73 65  Cmd[0],"changese
28ac0 74 22 29 3d 3d 30 20 7c 7c 20 73 74 72 63 6d 70  t")==0 || strcmp
28ad0 28 61 7a 43 6d 64 5b 30 5d 2c 22 70 61 74 63 68  (azCmd[0],"patch
28ae0 73 65 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  set")==0 ){.    
28af0 20 20 46 49 4c 45 20 2a 6f 75 74 20 3d 20 30 3b    FILE *out = 0;
28b00 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 21  .      if( nCmd!
28b10 3d 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f  =2 ) goto sessio
28b20 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a  n_syntax_error;.
28b30 20 20 20 20 20 20 69 66 28 20 70 53 65 73 73 69        if( pSessi
28b40 6f 6e 2d 3e 70 3d 3d 30 20 29 20 67 6f 74 6f 20  on->p==0 ) goto 
28b50 73 65 73 73 69 6f 6e 5f 6e 6f 74 5f 6f 70 65 6e  session_not_open
28b60 3b 0a 20 20 20 20 20 20 6f 75 74 20 3d 20 66 6f  ;.      out = fo
28b70 70 65 6e 28 61 7a 43 6d 64 5b 31 5d 2c 20 22 77  pen(azCmd[1], "w
28b80 62 22 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f  b");.      if( o
28b90 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ut==0 ){.       
28ba0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
28bb0 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 63 61 6e  err, "ERROR: can
28bc0 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73 5c 22 20  not open \"%s\" 
28bd0 66 6f 72 20 77 72 69 74 69 6e 67 5c 6e 22 2c 20  for writing\n", 
28be0 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20 20 20 20 20  azCmd[1]);.     
28bf0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
28c00 69 6e 74 20 73 7a 43 68 6e 67 3b 0a 20 20 20 20  int szChng;.    
28c10 20 20 20 20 76 6f 69 64 20 2a 70 43 68 6e 67 3b      void *pChng;
28c20 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 7a 43  .        if( azC
28c30 6d 64 5b 30 5d 5b 30 5d 3d 3d 27 63 27 20 29 7b  md[0][0]=='c' ){
28c40 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
28c50 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 63  sqlite3session_c
28c60 68 61 6e 67 65 73 65 74 28 70 53 65 73 73 69 6f  hangeset(pSessio
28c70 6e 2d 3e 70 2c 20 26 73 7a 43 68 6e 67 2c 20 26  n->p, &szChng, &
28c80 70 43 68 6e 67 29 3b 0a 20 20 20 20 20 20 20 20  pChng);.        
28c90 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
28ca0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 73 65 73   rc = sqlite3ses
28cb0 73 69 6f 6e 5f 70 61 74 63 68 73 65 74 28 70 53  sion_patchset(pS
28cc0 65 73 73 69 6f 6e 2d 3e 70 2c 20 26 73 7a 43 68  ession->p, &szCh
28cd0 6e 67 2c 20 26 70 43 68 6e 67 29 3b 0a 20 20 20  ng, &pChng);.   
28ce0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
28cf0 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20  f( rc ){.       
28d00 20 20 20 70 72 69 6e 74 66 28 22 45 72 72 6f 72     printf("Error
28d10 3a 20 65 72 72 6f 72 20 63 6f 64 65 20 25 64 5c  : error code %d\
28d20 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 20  n", rc);.       
28d30 20 20 20 72 63 20 3d 20 30 3b 0a 20 20 20 20 20     rc = 0;.     
28d40 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
28d50 20 70 43 68 6e 67 0a 20 20 20 20 20 20 20 20 20   pChng.         
28d60 20 26 26 20 66 77 72 69 74 65 28 70 43 68 6e 67   && fwrite(pChng
28d70 2c 20 73 7a 43 68 6e 67 2c 20 31 2c 20 6f 75 74  , szChng, 1, out
28d80 29 21 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=1 ){.        
28d90 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
28da0 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 46 61 69  err, "ERROR: Fai
28db0 6c 65 64 20 74 6f 20 77 72 69 74 65 20 65 6e 74  led to write ent
28dc0 69 72 65 20 25 64 2d 62 79 74 65 20 6f 75 74 70  ire %d-byte outp
28dd0 75 74 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  ut\n",.         
28de0 20 20 20 20 20 20 20 20 20 73 7a 43 68 6e 67 29           szChng)
28df0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
28e00 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
28e10 28 70 43 68 6e 67 29 3b 0a 20 20 20 20 20 20 20  (pChng);.       
28e20 20 66 63 6c 6f 73 65 28 6f 75 74 29 3b 0a 20 20   fclose(out);.  
28e30 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a      }.    }else.
28e40 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e  .    /* .session
28e50 20 63 6c 6f 73 65 0a 20 20 20 20 2a 2a 20 43 6c   close.    ** Cl
28e60 6f 73 65 20 74 68 65 20 69 64 65 6e 74 69 66 69  ose the identifi
28e70 65 64 20 73 65 73 73 69 6f 6e 0a 20 20 20 20 2a  ed session.    *
28e80 2f 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d 70  /.    if( strcmp
28e90 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 63 6c 6f 73  (azCmd[0], "clos
28ea0 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  e")==0 ){.      
28eb0 69 66 28 20 6e 43 6d 64 21 3d 31 20 29 20 67 6f  if( nCmd!=1 ) go
28ec0 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79 6e 74 61  to session_synta
28ed0 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 69  x_error;.      i
28ee0 66 28 20 70 2d 3e 6e 53 65 73 73 69 6f 6e 20 29  f( p->nSession )
28ef0 7b 0a 20 20 20 20 20 20 20 20 73 65 73 73 69 6f  {.        sessio
28f00 6e 5f 63 6c 6f 73 65 28 70 53 65 73 73 69 6f 6e  n_close(pSession
28f10 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 61 53  );.        p->aS
28f20 65 73 73 69 6f 6e 5b 69 53 65 73 5d 20 3d 20 70  ession[iSes] = p
28f30 2d 3e 61 53 65 73 73 69 6f 6e 5b 2d 2d 70 2d 3e  ->aSession[--p->
28f40 6e 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20 20 20  nSession];.     
28f50 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20   }.    }else..  
28f60 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 65 6e    /* .session en
28f70 61 62 6c 65 20 3f 42 4f 4f 4c 45 41 4e 3f 0a 20  able ?BOOLEAN?. 
28f80 20 20 20 2a 2a 20 51 75 65 72 79 20 6f 72 20 73     ** Query or s
28f90 65 74 20 74 68 65 20 65 6e 61 62 6c 65 20 66 6c  et the enable fl
28fa0 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  ag.    */.    if
28fb0 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30  ( strcmp(azCmd[0
28fc0 5d 2c 20 22 65 6e 61 62 6c 65 22 29 3d 3d 30 20  ], "enable")==0 
28fd0 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b  ){.      int ii;
28fe0 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 3e  .      if( nCmd>
28ff0 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  2 ) goto session
29000 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
29010 20 20 20 20 20 69 69 20 3d 20 6e 43 6d 64 3d 3d       ii = nCmd==
29020 31 20 3f 20 2d 31 20 3a 20 62 6f 6f 6c 65 61 6e  1 ? -1 : boolean
29030 56 61 6c 75 65 28 61 7a 43 6d 64 5b 31 5d 29 3b  Value(azCmd[1]);
29040 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53  .      if( p->nS
29050 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  ession ){.      
29060 20 20 69 69 20 3d 20 73 71 6c 69 74 65 33 73 65    ii = sqlite3se
29070 73 73 69 6f 6e 5f 65 6e 61 62 6c 65 28 70 53 65  ssion_enable(pSe
29080 73 73 69 6f 6e 2d 3e 70 2c 20 69 69 29 3b 0a 20  ssion->p, ii);. 
29090 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
290a0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 73 65 73 73  tf(p->out, "sess
290b0 69 6f 6e 20 25 73 20 65 6e 61 62 6c 65 20 66 6c  ion %s enable fl
290c0 61 67 20 3d 20 25 64 5c 6e 22 2c 0a 20 20 20 20  ag = %d\n",.    
290d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290e0 70 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 2c  pSession->zName,
290f0 20 69 69 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20   ii);.      }.  
29100 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20    }else..    /* 
29110 2e 73 65 73 73 69 6f 6e 20 66 69 6c 74 65 72 20  .session filter 
29120 47 4c 4f 42 20 2e 2e 2e 2e 0a 20 20 20 20 2a 2a  GLOB .....    **
29130 20 53 65 74 20 61 20 6c 69 73 74 20 6f 66 20 47   Set a list of G
29140 4c 4f 42 20 70 61 74 74 65 72 6e 73 20 6f 66 20  LOB patterns of 
29150 74 61 62 6c 65 20 6e 61 6d 65 73 20 74 6f 20 62  table names to b
29160 65 20 65 78 63 6c 75 64 65 64 2e 0a 20 20 20 20  e excluded..    
29170 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d  */.    if( strcm
29180 70 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 66 69 6c  p(azCmd[0], "fil
29190 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ter")==0 ){.    
291a0 20 20 69 6e 74 20 69 69 2c 20 6e 42 79 74 65 3b    int ii, nByte;
291b0 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 3c  .      if( nCmd<
291c0 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  2 ) goto session
291d0 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
291e0 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53 65 73       if( p->nSes
291f0 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  sion ){.        
29200 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 53 65  for(ii=0; ii<pSe
29210 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 3b 20  ssion->nFilter; 
29220 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
29230 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 53   sqlite3_free(pS
29240 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72  ession->azFilter
29250 5b 69 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d  [ii]);.        }
29260 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
29270 5f 66 72 65 65 28 70 53 65 73 73 69 6f 6e 2d 3e  _free(pSession->
29280 61 7a 46 69 6c 74 65 72 29 3b 0a 20 20 20 20 20  azFilter);.     
29290 20 20 20 6e 42 79 74 65 20 3d 20 73 69 7a 65 6f     nByte = sizeo
292a0 66 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69  f(pSession->azFi
292b0 6c 74 65 72 5b 30 5d 29 2a 28 6e 43 6d 64 2d 31  lter[0])*(nCmd-1
292c0 29 3b 0a 20 20 20 20 20 20 20 20 70 53 65 73 73  );.        pSess
292d0 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72 20 3d 20  ion->azFilter = 
292e0 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 20  sqlite3_malloc( 
292f0 6e 42 79 74 65 20 29 3b 0a 20 20 20 20 20 20 20  nByte );.       
29300 20 69 66 28 20 70 53 65 73 73 69 6f 6e 2d 3e 61   if( pSession->a
29310 7a 46 69 6c 74 65 72 3d 3d 30 20 29 7b 0a 20 20  zFilter==0 ){.  
29320 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
29330 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
29340 72 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79  r: out or memory
29350 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  \n");.          
29360 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20 20 20  exit(1);.       
29370 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69   }.        for(i
29380 69 3d 31 3b 20 69 69 3c 6e 43 6d 64 3b 20 69 69  i=1; ii<nCmd; ii
29390 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  ++){.          p
293a0 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65  Session->azFilte
293b0 72 5b 69 69 2d 31 5d 20 3d 20 73 71 6c 69 74 65  r[ii-1] = sqlite
293c0 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
293d0 61 7a 43 6d 64 5b 69 69 5d 29 3b 0a 20 20 20 20  azCmd[ii]);.    
293e0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 53      }.        pS
293f0 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 20  ession->nFilter 
29400 3d 20 69 69 2d 31 3b 0a 20 20 20 20 20 20 7d 0a  = ii-1;.      }.
29410 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f      }else..    /
29420 2a 20 2e 73 65 73 73 69 6f 6e 20 69 6e 64 69 72  * .session indir
29430 65 63 74 20 3f 42 4f 4f 4c 45 41 4e 3f 0a 20 20  ect ?BOOLEAN?.  
29440 20 20 2a 2a 20 51 75 65 72 79 20 6f 72 20 73 65    ** Query or se
29450 74 20 74 68 65 20 69 6e 64 69 72 65 63 74 20 66  t the indirect f
29460 6c 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  lag.    */.    i
29470 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b  f( strcmp(azCmd[
29480 30 5d 2c 20 22 69 6e 64 69 72 65 63 74 22 29 3d  0], "indirect")=
29490 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
294a0 69 69 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43  ii;.      if( nC
294b0 6d 64 3e 32 20 29 20 67 6f 74 6f 20 73 65 73 73  md>2 ) goto sess
294c0 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72  ion_syntax_error
294d0 3b 0a 20 20 20 20 20 20 69 69 20 3d 20 6e 43 6d  ;.      ii = nCm
294e0 64 3d 3d 31 20 3f 20 2d 31 20 3a 20 62 6f 6f 6c  d==1 ? -1 : bool
294f0 65 61 6e 56 61 6c 75 65 28 61 7a 43 6d 64 5b 31  eanValue(azCmd[1
29500 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d  ]);.      if( p-
29510 3e 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20  >nSession ){.   
29520 20 20 20 20 20 69 69 20 3d 20 73 71 6c 69 74 65       ii = sqlite
29530 33 73 65 73 73 69 6f 6e 5f 69 6e 64 69 72 65 63  3session_indirec
29540 74 28 70 53 65 73 73 69 6f 6e 2d 3e 70 2c 20 69  t(pSession->p, i
29550 69 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38  i);.        utf8
29560 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
29570 22 73 65 73 73 69 6f 6e 20 25 73 20 69 6e 64 69  "session %s indi
29580 72 65 63 74 20 66 6c 61 67 20 3d 20 25 64 5c 6e  rect flag = %d\n
29590 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
295a0 20 20 20 20 20 20 20 70 53 65 73 73 69 6f 6e 2d         pSession-
295b0 3e 7a 4e 61 6d 65 2c 20 69 69 29 3b 0a 20 20 20  >zName, ii);.   
295c0 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a     }.    }else..
295d0 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20      /* .session 
295e0 69 73 65 6d 70 74 79 0a 20 20 20 20 2a 2a 20 44  isempty.    ** D
295f0 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the 
29600 73 65 73 73 69 6f 6e 20 69 73 20 65 6d 70 74 79  session is empty
29610 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
29620 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c  strcmp(azCmd[0],
29630 20 22 69 73 65 6d 70 74 79 22 29 3d 3d 30 20 29   "isempty")==0 )
29640 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a  {.      int ii;.
29650 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 21 3d        if( nCmd!=
29660 31 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  1 ) goto session
29670 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
29680 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53 65 73       if( p->nSes
29690 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  sion ){.        
296a0 69 69 20 3d 20 73 71 6c 69 74 65 33 73 65 73 73  ii = sqlite3sess
296b0 69 6f 6e 5f 69 73 65 6d 70 74 79 28 70 53 65 73  ion_isempty(pSes
296c0 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20 20 20 20  sion->p);.      
296d0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
296e0 3e 6f 75 74 2c 20 22 73 65 73 73 69 6f 6e 20 25  >out, "session %
296f0 73 20 69 73 65 6d 70 74 79 20 66 6c 61 67 20 3d  s isempty flag =
29700 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20   %d\n",.        
29710 20 20 20 20 20 20 20 20 20 20 20 20 70 53 65 73              pSes
29720 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 2c 20 69 69 29  sion->zName, ii)
29730 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
29740 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73  lse..    /* .ses
29750 73 69 6f 6e 20 6c 69 73 74 0a 20 20 20 20 2a 2a  sion list.    **
29760 20 4c 69 73 74 20 61 6c 6c 20 63 75 72 72 65 6e   List all curren
29770 74 6c 79 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e  tly open session
29780 73 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  s.    */.    if(
29790 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d   strcmp(azCmd[0]
297a0 2c 22 6c 69 73 74 22 29 3d 3d 30 20 29 7b 0a 20  ,"list")==0 ){. 
297b0 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
297c0 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69 2b 2b  p->nSession; i++
297d0 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
297e0 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
297f0 25 64 20 25 73 5c 6e 22 2c 20 69 2c 20 70 2d 3e  %d %s\n", i, p->
29800 61 53 65 73 73 69 6f 6e 5b 69 5d 2e 7a 4e 61 6d  aSession[i].zNam
29810 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
29820 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73  }else..    /* .s
29830 65 73 73 69 6f 6e 20 6f 70 65 6e 20 44 42 20 4e  ession open DB N
29840 41 4d 45 0a 20 20 20 20 2a 2a 20 4f 70 65 6e 20  AME.    ** Open 
29850 61 20 6e 65 77 20 73 65 73 73 69 6f 6e 20 63 61  a new session ca
29860 6c 6c 65 64 20 4e 41 4d 45 20 6f 6e 20 74 68 65  lled NAME on the
29870 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
29880 73 65 20 44 42 2e 0a 20 20 20 20 2a 2a 20 44 42  se DB..    ** DB
29890 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 22 6d 61   is normally "ma
298a0 69 6e 22 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  in"..    */.    
298b0 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64  if( strcmp(azCmd
298c0 5b 30 5d 2c 22 6f 70 65 6e 22 29 3d 3d 30 20 29  [0],"open")==0 )
298d0 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4e  {.      char *zN
298e0 61 6d 65 3b 0a 20 20 20 20 20 20 69 66 28 20 6e  ame;.      if( n
298f0 43 6d 64 21 3d 33 20 29 20 67 6f 74 6f 20 73 65  Cmd!=3 ) goto se
29900 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72  ssion_syntax_err
29910 6f 72 3b 0a 20 20 20 20 20 20 7a 4e 61 6d 65 20  or;.      zName 
29920 3d 20 61 7a 43 6d 64 5b 32 5d 3b 0a 20 20 20 20  = azCmd[2];.    
29930 20 20 69 66 28 20 7a 4e 61 6d 65 5b 30 5d 3d 3d    if( zName[0]==
29940 30 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  0 ) goto session
29950 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
29960 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
29970 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69 2b 2b  p->nSession; i++
29980 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  ){.        if( s
29990 74 72 63 6d 70 28 70 2d 3e 61 53 65 73 73 69 6f  trcmp(p->aSessio
299a0 6e 5b 69 5d 2e 7a 4e 61 6d 65 2c 7a 4e 61 6d 65  n[i].zName,zName
299b0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
299c0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
299d0 64 65 72 72 2c 20 22 53 65 73 73 69 6f 6e 20 5c  derr, "Session \
299e0 22 25 73 5c 22 20 61 6c 72 65 61 64 79 20 65 78  "%s\" already ex
299f0 69 73 74 73 5c 6e 22 2c 20 7a 4e 61 6d 65 29 3b  ists\n", zName);
29a00 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
29a10 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
29a20 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
29a30 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70     }.      if( p
29a40 2d 3e 6e 53 65 73 73 69 6f 6e 3e 3d 41 72 72 61  ->nSession>=Arra
29a50 79 53 69 7a 65 28 70 2d 3e 61 53 65 73 73 69 6f  ySize(p->aSessio
29a60 6e 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  n) ){.        ra
29a70 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
29a80 20 22 4d 61 78 69 6d 75 6d 20 6f 66 20 25 64 20   "Maximum of %d 
29a90 73 65 73 73 69 6f 6e 73 5c 6e 22 2c 20 41 72 72  sessions\n", Arr
29aa0 61 79 53 69 7a 65 28 70 2d 3e 61 53 65 73 73 69  aySize(p->aSessi
29ab0 6f 6e 29 29 3b 0a 20 20 20 20 20 20 20 20 67 6f  on));.        go
29ac0 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
29ad0 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  exit;.      }.  
29ae0 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d 20 26      pSession = &
29af0 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 70 2d 3e 6e  p->aSession[p->n
29b00 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20 20 20 20  Session];.      
29b10 72 63 20 3d 20 73 71 6c 69 74 65 33 73 65 73 73  rc = sqlite3sess
29b20 69 6f 6e 5f 63 72 65 61 74 65 28 70 2d 3e 64 62  ion_create(p->db
29b30 2c 20 61 7a 43 6d 64 5b 31 5d 2c 20 26 70 53 65  , azCmd[1], &pSe
29b40 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20 20 20  ssion->p);.     
29b50 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
29b60 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
29b70 64 65 72 72 2c 20 22 43 61 6e 6e 6f 74 20 6f 70  derr, "Cannot op
29b80 65 6e 20 73 65 73 73 69 6f 6e 3a 20 65 72 72 6f  en session: erro
29b90 72 20 63 6f 64 65 3d 25 64 5c 6e 22 2c 20 72 63  r code=%d\n", rc
29ba0 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
29bb0 30 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  0;.        goto 
29bc0 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
29bd0 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
29be0 20 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74   pSession->nFilt
29bf0 65 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 71  er = 0;.      sq
29c00 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 74 61 62  lite3session_tab
29c10 6c 65 5f 66 69 6c 74 65 72 28 70 53 65 73 73 69  le_filter(pSessi
29c20 6f 6e 2d 3e 70 2c 20 73 65 73 73 69 6f 6e 5f 66  on->p, session_f
29c30 69 6c 74 65 72 2c 20 70 53 65 73 73 69 6f 6e 29  ilter, pSession)
29c40 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 65 73 73  ;.      p->nSess
29c50 69 6f 6e 2b 2b 3b 0a 20 20 20 20 20 20 70 53 65  ion++;.      pSe
29c60 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 20 3d 20 73  ssion->zName = s
29c70 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
29c80 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  %s", zName);.   
29c90 20 7d 65 6c 73 65 0a 20 20 20 20 2f 2a 20 49 66   }else.    /* If
29ca0 20 6e 6f 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65   no command name
29cb0 20 6d 61 74 63 68 65 73 2c 20 73 68 6f 77 20 61   matches, show a
29cc0 20 73 79 6e 74 61 78 20 65 72 72 6f 72 20 2a 2f   syntax error */
29cd0 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 73 79 6e  .    session_syn
29ce0 74 61 78 5f 65 72 72 6f 72 3a 0a 20 20 20 20 73  tax_error:.    s
29cf0 65 73 73 69 6f 6e 5f 68 65 6c 70 28 70 29 3b 0a  ession_help(p);.
29d00 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a    }else.#endif..
29d10 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
29d20 42 55 47 0a 20 20 2f 2a 20 55 6e 64 6f 63 75 6d  BUG.  /* Undocum
29d30 65 6e 74 65 64 20 63 6f 6d 6d 61 6e 64 73 20 66  ented commands f
29d40 6f 72 20 69 6e 74 65 72 6e 61 6c 20 74 65 73 74  or internal test
29d50 69 6e 67 2e 20 20 53 75 62 6a 65 63 74 20 74 6f  ing.  Subject to
29d60 20 63 68 61 6e 67 65 0a 20 20 2a 2a 20 77 69 74   change.  ** wit
29d70 68 6f 75 74 20 6e 6f 74 69 63 65 2e 20 2a 2f 0a  hout notice. */.
29d80 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20    if( c=='s' && 
29d90 6e 3e 3d 31 30 20 26 26 20 73 74 72 6e 63 6d 70  n>=10 && strncmp
29da0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 65 6c 66  (azArg[0], "self
29db0 74 65 73 74 2d 22 2c 20 39 29 3d 3d 30 20 29 7b  test-", 9)==0 ){
29dc0 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d 70  .    if( strncmp
29dd0 28 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22 62 6f  (azArg[0]+9, "bo
29de0 6f 6c 65 61 6e 22 2c 20 6e 2d 39 29 3d 3d 30 20  olean", n-9)==0 
29df0 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c 20  ){.      int i, 
29e00 76 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31  v;.      for(i=1
29e10 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
29e20 20 20 20 20 20 20 20 20 76 20 3d 20 62 6f 6f 6c          v = bool
29e30 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 69  eanValue(azArg[i
29e40 5d 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38  ]);.        utf8
29e50 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
29e60 22 25 73 3a 20 25 64 20 30 78 25 78 5c 6e 22 2c  "%s: %d 0x%x\n",
29e70 20 61 7a 41 72 67 5b 69 5d 2c 20 76 2c 20 76 29   azArg[i], v, v)
29e80 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
29e90 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28      if( strncmp(
29ea0 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22 69 6e 74  azArg[0]+9, "int
29eb0 65 67 65 72 22 2c 20 6e 2d 39 29 3d 3d 30 20 29  eger", n-9)==0 )
29ec0 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 20 73  {.      int i; s
29ed0 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 76 3b 0a  qlite3_int64 v;.
29ee0 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b 20 69        for(i=1; i
29ef0 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
29f00 20 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32       char zBuf[2
29f10 30 30 5d 3b 0a 20 20 20 20 20 20 20 20 76 20 3d  00];.        v =
29f20 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a   integerValue(az
29f30 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[i]);.       
29f40 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
29f50 66 28 73 69 7a 65 6f 66 28 7a 42 75 66 29 2c 7a  f(sizeof(zBuf),z
29f60 42 75 66 2c 22 25 73 3a 20 25 6c 6c 64 20 30 78  Buf,"%s: %lld 0x
29f70 25 6c 6c 78 5c 6e 22 2c 20 61 7a 41 72 67 5b 69  %llx\n", azArg[i
29f80 5d 2c 76 2c 76 29 3b 0a 20 20 20 20 20 20 20 20  ],v,v);.        
29f90 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
29fa0 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66 29 3b  ut, "%s", zBuf);
29fb0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
29fc0 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20   }else.#endif.. 
29fd0 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 6e   if( c=='s' && n
29fe0 3e 3d 34 20 26 26 20 73 74 72 6e 63 6d 70 28 61  >=4 && strncmp(a
29ff0 7a 41 72 67 5b 30 5d 2c 22 73 65 6c 66 74 65 73  zArg[0],"selftes
2a000 74 22 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  t",n)==0 ){.    
2a010 69 6e 74 20 62 49 73 49 6e 69 74 20 3d 20 30 3b  int bIsInit = 0;
2a020 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
2a030 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 74   to initialize t
2a040 68 65 20 53 45 4c 46 54 45 53 54 20 74 61 62 6c  he SELFTEST tabl
2a050 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 56 65  e */.    int bVe
2a060 72 62 6f 73 65 20 3d 20 30 3b 20 20 20 20 20 20  rbose = 0;      
2a070 20 20 2f 2a 20 56 65 72 62 6f 73 65 20 6f 75 74    /* Verbose out
2a080 70 75 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62  put */.    int b
2a090 53 65 6c 66 74 65 73 74 45 78 69 73 74 73 3b 20  SelftestExists; 
2a0a0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 53      /* True if S
2a0b0 45 4c 46 54 45 53 54 20 61 6c 72 65 61 64 79 20  ELFTEST already 
2a0c0 65 78 69 73 74 73 20 2a 2f 0a 20 20 20 20 69 6e  exists */.    in
2a0d0 74 20 69 2c 20 6b 3b 20 20 20 20 20 20 20 20 20  t i, k;         
2a0e0 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
2a0f0 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 20 20 69  ounters */.    i
2a100 6e 74 20 6e 54 65 73 74 20 3d 20 30 3b 20 20 20  nt nTest = 0;   
2a110 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
2a120 72 20 6f 66 20 74 65 73 74 73 20 72 75 6e 73 20  r of tests runs 
2a130 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 45 72 72 20  */.    int nErr 
2a140 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
2a150 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
2a160 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 20 20  ors seen */.    
2a170 53 68 65 6c 6c 54 65 78 74 20 73 74 72 3b 20 20  ShellText str;  
2a180 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 73 77           /* Answ
2a190 65 72 20 66 6f 72 20 61 20 71 75 65 72 79 20 2a  er for a query *
2a1a0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74  /.    sqlite3_st
2a1b0 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 20 2f  mt *pStmt = 0; /
2a1c0 2a 20 51 75 65 72 79 20 61 67 61 69 6e 73 74 20  * Query against 
2a1d0 74 68 65 20 53 45 4c 46 54 45 53 54 20 74 61 62  the SELFTEST tab
2a1e0 6c 65 20 2a 2f 0a 0a 20 20 20 20 6f 70 65 6e 5f  le */..    open_
2a1f0 64 62 28 70 2c 30 29 3b 0a 20 20 20 20 66 6f 72  db(p,0);.    for
2a200 28 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=1; i<nArg; i+
2a210 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  +){.      const 
2a220 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b  char *z = azArg[
2a230 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b  i];.      if( z[
2a240 30 5d 3d 3d 27 2d 27 20 26 26 20 7a 5b 31 5d 3d  0]=='-' && z[1]=
2a250 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20 20 20  ='-' ) z++;.    
2a260 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22    if( strcmp(z,"
2a270 2d 69 6e 69 74 22 29 3d 3d 30 20 29 7b 0a 20 20  -init")==0 ){.  
2a280 20 20 20 20 20 20 62 49 73 49 6e 69 74 20 3d 20        bIsInit = 
2a290 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 0a 20  1;.      }else. 
2a2a0 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
2a2b0 7a 2c 22 2d 76 22 29 3d 3d 30 20 29 7b 0a 20 20  z,"-v")==0 ){.  
2a2c0 20 20 20 20 20 20 62 56 65 72 62 6f 73 65 2b 2b        bVerbose++
2a2d0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20  ;.      }else.  
2a2e0 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 75 74      {.        ut
2a2f0 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
2a300 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f  , "Unknown optio
2a310 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22 25 73  n \"%s\" on \"%s
2a320 5c 22 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  \"\n",.         
2a330 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67             azArg
2a340 5b 69 5d 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a  [i], azArg[0]);.
2a350 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
2a360 74 66 28 73 74 64 65 72 72 2c 20 22 53 68 6f 75  tf(stderr, "Shou
2a370 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20 2d 2d  ld be one of: --
2a380 69 6e 69 74 20 2d 76 5c 6e 22 29 3b 0a 20 20 20  init -v\n");.   
2a390 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2a3a0 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
2a3b0 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
2a3c0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
2a3d0 66 28 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  f( sqlite3_table
2a3e0 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61  _column_metadata
2a3f0 28 70 2d 3e 64 62 2c 22 6d 61 69 6e 22 2c 22 73  (p->db,"main","s
2a400 65 6c 66 74 65 73 74 22 2c 30 2c 30 2c 30 2c 30  elftest",0,0,0,0
2a410 2c 30 2c 30 29 0a 20 20 20 20 20 20 20 20 20 20  ,0,0).          
2a420 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
2a430 0a 20 20 20 20 20 20 62 53 65 6c 66 74 65 73 74  .      bSelftest
2a440 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20 20 20  Exists = 0;.    
2a450 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 62 53 65  }else{.      bSe
2a460 6c 66 74 65 73 74 45 78 69 73 74 73 20 3d 20 31  lftestExists = 1
2a470 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
2a480 62 49 73 49 6e 69 74 20 29 7b 0a 20 20 20 20 20  bIsInit ){.     
2a490 20 63 72 65 61 74 65 53 65 6c 66 74 65 73 74 54   createSelftestT
2a4a0 61 62 6c 65 28 70 29 3b 0a 20 20 20 20 20 20 62  able(p);.      b
2a4b0 53 65 6c 66 74 65 73 74 45 78 69 73 74 73 20 3d  SelftestExists =
2a4c0 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 6e   1;.    }.    in
2a4d0 69 74 54 65 78 74 28 26 73 74 72 29 3b 0a 20 20  itText(&str);.  
2a4e0 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 74    appendText(&st
2a4f0 72 2c 20 22 78 22 2c 20 30 29 3b 0a 20 20 20 20  r, "x", 0);.    
2a500 66 6f 72 28 6b 3d 62 53 65 6c 66 74 65 73 74 45  for(k=bSelftestE
2a510 78 69 73 74 73 3b 20 6b 3e 3d 30 3b 20 6b 2d 2d  xists; k>=0; k--
2a520 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6b 3d 3d  ){.      if( k==
2a530 31 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  1 ){.        rc 
2a540 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
2a550 65 5f 76 32 28 70 2d 3e 64 62 2c 0a 20 20 20 20  e_v2(p->db,.    
2a560 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20          "SELECT 
2a570 74 6e 6f 2c 6f 70 2c 63 6d 64 2c 61 6e 73 20 46  tno,op,cmd,ans F
2a580 52 4f 4d 20 73 65 6c 66 74 65 73 74 20 4f 52 44  ROM selftest ORD
2a590 45 52 20 42 59 20 74 6e 6f 22 2c 0a 20 20 20 20  ER BY tno",.    
2a5a0 20 20 20 20 20 20 20 20 2d 31 2c 20 26 70 53 74          -1, &pSt
2a5b0 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 65  mt, 0);.      }e
2a5c0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 63 20  lse{.        rc 
2a5d0 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
2a5e0 65 5f 76 32 28 70 2d 3e 64 62 2c 0a 20 20 20 20  e_v2(p->db,.    
2a5f0 20 20 20 20 20 20 22 56 41 4c 55 45 53 28 30 2c        "VALUES(0,
2a600 27 6d 65 6d 6f 27 2c 27 4d 69 73 73 69 6e 67 20  'memo','Missing 
2a610 53 45 4c 46 54 45 53 54 20 74 61 62 6c 65 20 2d  SELFTEST table -
2a620 20 64 65 66 61 75 6c 74 20 63 68 65 63 6b 73 20   default checks 
2a630 6f 6e 6c 79 27 2c 27 27 29 2c 22 0a 20 20 20 20  only',''),".    
2a640 20 20 20 20 20 20 22 20 20 20 20 20 20 28 31 2c        "      (1,
2a650 27 72 75 6e 27 2c 27 50 52 41 47 4d 41 20 69 6e  'run','PRAGMA in
2a660 74 65 67 72 69 74 79 5f 63 68 65 63 6b 27 2c 27  tegrity_check','
2a670 6f 6b 27 29 22 2c 0a 20 20 20 20 20 20 20 20 20  ok')",.         
2a680 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b   -1, &pStmt, 0);
2a690 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
2a6a0 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20  f( rc ){.       
2a6b0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
2a6c0 72 72 2c 20 22 45 72 72 6f 72 20 71 75 65 72 79  rr, "Error query
2a6d0 69 6e 67 20 74 68 65 20 73 65 6c 66 74 65 73 74  ing the selftest
2a6e0 20 74 61 62 6c 65 5c 6e 22 29 3b 0a 20 20 20 20   table\n");.    
2a6f0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2a700 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61      sqlite3_fina
2a710 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20  lize(pStmt);.   
2a720 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
2a730 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
2a740 20 20 20 7d 0a 20 20 20 20 20 20 66 6f 72 28 69     }.      for(i
2a750 3d 31 3b 20 73 71 6c 69 74 65 33 5f 73 74 65 70  =1; sqlite3_step
2a760 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f  (pStmt)==SQLITE_
2a770 52 4f 57 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ROW; i++){.     
2a780 20 20 20 69 6e 74 20 74 6e 6f 20 3d 20 73 71 6c     int tno = sql
2a790 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28  ite3_column_int(
2a7a0 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20  pStmt, 0);.     
2a7b0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
2a7c0 4f 70 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  Op = (const char
2a7d0 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
2a7e0 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31 29 3b  _text(pStmt, 1);
2a7f0 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63  .        const c
2a800 68 61 72 20 2a 7a 53 71 6c 20 3d 20 28 63 6f 6e  har *zSql = (con
2a810 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
2a820 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
2a830 6d 74 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20  mt, 2);.        
2a840 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 6e 73  const char *zAns
2a850 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
2a860 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
2a870 65 78 74 28 70 53 74 6d 74 2c 20 33 29 3b 0a 0a  ext(pStmt, 3);..
2a880 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20          k = 0;. 
2a890 20 20 20 20 20 20 20 69 66 28 20 62 56 65 72 62         if( bVerb
2a8a0 6f 73 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 20  ose>0 ){.       
2a8b0 20 20 20 63 68 61 72 20 2a 7a 51 75 6f 74 65 20     char *zQuote 
2a8c0 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
2a8d0 66 28 22 25 71 22 2c 20 7a 53 71 6c 29 3b 0a 20  f("%q", zSql);. 
2a8e0 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28           printf(
2a8f0 22 25 64 3a 20 25 73 20 25 73 5c 6e 22 2c 20 74  "%d: %s %s\n", t
2a900 6e 6f 2c 20 7a 4f 70 2c 20 7a 53 71 6c 29 3b 0a  no, zOp, zSql);.
2a910 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
2a920 33 5f 66 72 65 65 28 7a 51 75 6f 74 65 29 3b 0a  3_free(zQuote);.
2a930 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2a940 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 4f 70    if( strcmp(zOp
2a950 2c 22 6d 65 6d 6f 22 29 3d 3d 30 20 29 7b 0a 20  ,"memo")==0 ){. 
2a960 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
2a970 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
2a980 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20  \n", zSql);.    
2a990 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20 20      }else.      
2a9a0 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 4f 70    if( strcmp(zOp
2a9b0 2c 22 72 75 6e 22 29 3d 3d 30 20 29 7b 0a 20 20  ,"run")==0 ){.  
2a9c0 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 45          char *zE
2a9d0 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 20  rrMsg = 0;.     
2a9e0 20 20 20 20 20 73 74 72 2e 6e 20 3d 20 30 3b 0a       str.n = 0;.
2a9f0 20 20 20 20 20 20 20 20 20 20 73 74 72 2e 7a 5b            str.z[
2aa00 30 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  0] = 0;.        
2aa10 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
2aa20 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c  xec(p->db, zSql,
2aa30 20 63 61 70 74 75 72 65 4f 75 74 70 75 74 43 61   captureOutputCa
2aa40 6c 6c 62 61 63 6b 2c 20 26 73 74 72 2c 20 26 7a  llback, &str, &z
2aa50 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20  ErrMsg);.       
2aa60 20 20 20 6e 54 65 73 74 2b 2b 3b 0a 20 20 20 20     nTest++;.    
2aa70 20 20 20 20 20 20 69 66 28 20 62 56 65 72 62 6f        if( bVerbo
2aa80 73 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  se ){.          
2aa90 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
2aaa0 3e 6f 75 74 2c 20 22 52 65 73 75 6c 74 3a 20 25  >out, "Result: %
2aab0 73 5c 6e 22 2c 20 73 74 72 2e 7a 29 3b 0a 20 20  s\n", str.z);.  
2aac0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2aad0 20 20 20 20 69 66 28 20 72 63 20 7c 7c 20 7a 45      if( rc || zE
2aae0 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20 20 20  rrMsg ){.       
2aaf0 20 20 20 20 20 6e 45 72 72 2b 2b 3b 0a 20 20 20       nErr++;.   
2ab00 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b           rc = 1;
2ab10 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66  .            utf
2ab20 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
2ab30 20 22 25 64 3a 20 65 72 72 6f 72 2d 63 6f 64 65   "%d: error-code
2ab40 2d 25 64 3a 20 25 73 5c 6e 22 2c 20 74 6e 6f 2c  -%d: %s\n", tno,
2ab50 20 72 63 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20   rc, zErrMsg);. 
2ab60 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
2ab70 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29  e3_free(zErrMsg)
2ab80 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
2ab90 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 41 6e  e if( strcmp(zAn
2aba0 73 2c 73 74 72 2e 7a 29 21 3d 30 20 29 7b 0a 20  s,str.z)!=0 ){. 
2abb0 20 20 20 20 20 20 20 20 20 20 20 6e 45 72 72 2b             nErr+
2abc0 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  +;.            r
2abd0 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  c = 1;.         
2abe0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
2abf0 2d 3e 6f 75 74 2c 20 22 25 64 3a 20 45 78 70 65  ->out, "%d: Expe
2ac00 63 74 65 64 3a 20 5b 25 73 5d 5c 6e 22 2c 20 74  cted: [%s]\n", t
2ac10 6e 6f 2c 20 7a 41 6e 73 29 3b 0a 20 20 20 20 20  no, zAns);.     
2ac20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
2ac30 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 3a 20  tf(p->out, "%d: 
2ac40 20 20 20 20 20 47 6f 74 3a 20 5b 25 73 5d 5c 6e       Got: [%s]\n
2ac50 22 2c 20 74 6e 6f 2c 20 73 74 72 2e 7a 29 3b 0a  ", tno, str.z);.
2ac60 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2ac70 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20 20      }else.      
2ac80 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74    {.          ut
2ac90 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
2aca0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 55  ,.            "U
2acb0 6e 6b 6e 6f 77 6e 20 6f 70 65 72 61 74 69 6f 6e  nknown operation
2acc0 20 5c 22 25 73 5c 22 20 6f 6e 20 73 65 6c 66 74   \"%s\" on selft
2acd0 65 73 74 20 6c 69 6e 65 20 25 64 5c 6e 22 2c 20  est line %d\n", 
2ace0 7a 4f 70 2c 20 74 6e 6f 29 3b 0a 20 20 20 20 20  zOp, tno);.     
2acf0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2ad00 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
2ad10 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20        }.      } 
2ad20 2f 2a 20 45 6e 64 20 6c 6f 6f 70 20 6f 76 65 72  /* End loop over
2ad30 20 72 6f 77 73 20 6f 66 20 63 6f 6e 74 65 6e 74   rows of content
2ad40 20 66 72 6f 6d 20 53 45 4c 46 54 45 53 54 20 2a   from SELFTEST *
2ad50 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  /.      sqlite3_
2ad60 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
2ad70 0a 20 20 20 20 7d 20 2f 2a 20 45 6e 64 20 6c 6f  .    } /* End lo
2ad80 6f 70 20 6f 76 65 72 20 6b 20 2a 2f 0a 20 20 20  op over k */.   
2ad90 20 66 72 65 65 54 65 78 74 28 26 73 74 72 29 3b   freeText(&str);
2ada0 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
2adb0 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 65 72 72  (p->out, "%d err
2adc0 6f 72 73 20 6f 75 74 20 6f 66 20 25 64 20 74 65  ors out of %d te
2add0 73 74 73 5c 6e 22 2c 20 6e 45 72 72 2c 20 6e 54  sts\n", nErr, nT
2ade0 65 73 74 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20  est);.  }else.. 
2adf0 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 73   if( c=='s' && s
2ae00 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
2ae10 20 22 73 65 70 61 72 61 74 6f 72 22 2c 20 6e 29   "separator", n)
2ae20 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
2ae30 41 72 67 3c 32 20 7c 7c 20 6e 41 72 67 3e 33 20  Arg<2 || nArg>3 
2ae40 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
2ae50 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
2ae60 67 65 3a 20 2e 73 65 70 61 72 61 74 6f 72 20 43  ge: .separator C
2ae70 4f 4c 20 3f 52 4f 57 3f 5c 6e 22 29 3b 0a 20 20  OL ?ROW?\n");.  
2ae80 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2ae90 7d 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e 3d  }.    if( nArg>=
2aea0 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  2 ){.      sqlit
2aeb0 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
2aec0 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  of(p->colSeparat
2aed0 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72  or), p->colSepar
2aee0 61 74 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20  ator,.          
2aef0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 25 2e               "%.
2af00 2a 73 22 2c 20 28 69 6e 74 29 41 72 72 61 79 53  *s", (int)ArrayS
2af10 69 7a 65 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61  ize(p->colSepara
2af20 74 6f 72 29 2d 31 2c 20 61 7a 41 72 67 5b 31 5d  tor)-1, azArg[1]
2af30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
2af40 20 6e 41 72 67 3e 3d 33 20 29 7b 0a 20 20 20 20   nArg>=3 ){.    
2af50 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
2af60 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77  tf(sizeof(p->row
2af70 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72  Separator), p->r
2af80 6f 77 53 65 70 61 72 61 74 6f 72 2c 0a 20 20 20  owSeparator,.   
2af90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2afa0 20 20 20 20 22 25 2e 2a 73 22 2c 20 28 69 6e 74      "%.*s", (int
2afb0 29 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 72 6f  )ArraySize(p->ro
2afc0 77 53 65 70 61 72 61 74 6f 72 29 2d 31 2c 20 61  wSeparator)-1, a
2afd0 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20 7d 0a  zArg[2]);.    }.
2afe0 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
2aff0 3d 3d 27 73 27 20 26 26 20 6e 3e 3d 34 20 26 26  =='s' && n>=4 &&
2b000 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
2b010 5d 2c 22 73 68 61 33 73 75 6d 22 2c 6e 29 3d 3d  ],"sha3sum",n)==
2b020 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  0 ){.    const c
2b030 68 61 72 20 2a 7a 4c 69 6b 65 20 3d 20 30 3b 20  har *zLike = 0; 
2b040 20 20 2f 2a 20 57 68 69 63 68 20 74 61 62 6c 65    /* Which table
2b050 20 74 6f 20 63 68 65 63 6b 73 75 6d 2e 20 30 20   to checksum. 0 
2b060 6d 65 61 6e 73 20 65 76 65 72 79 74 68 69 6e 67  means everything
2b070 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20 20   */.    int i;  
2b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b090 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
2b0a0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 53 63 68   */.    int bSch
2b0b0 65 6d 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ema = 0;        
2b0c0 20 2f 2a 20 41 6c 73 6f 20 68 61 73 68 20 74 68   /* Also hash th
2b0d0 65 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 20 20  e schema */.    
2b0e0 69 6e 74 20 62 53 65 70 61 72 61 74 65 20 3d 20  int bSeparate = 
2b0f0 30 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68  0;       /* Hash
2b100 20 65 61 63 68 20 74 61 62 6c 65 20 73 65 70 61   each table sepa
2b110 72 61 74 65 6c 79 20 2a 2f 0a 20 20 20 20 69 6e  rately */.    in
2b120 74 20 69 53 69 7a 65 20 3d 20 32 32 34 3b 20 20  t iSize = 224;  
2b130 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 61         /* Hash a
2b140 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20  lgorithm to use 
2b150 2a 2f 0a 20 20 20 20 69 6e 74 20 62 44 65 62 75  */.    int bDebu
2b160 67 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  g = 0;          
2b170 2f 2a 20 4f 6e 6c 79 20 73 68 6f 77 20 74 68 65  /* Only show the
2b180 20 71 75 65 72 79 20 74 68 61 74 20 77 6f 75 6c   query that woul
2b190 64 20 68 61 76 65 20 72 75 6e 20 2a 2f 0a 20 20  d have run */.  
2b1a0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
2b1b0 70 53 74 6d 74 3b 20 20 20 20 20 2f 2a 20 46 6f  pStmt;     /* Fo
2b1c0 72 20 71 75 65 72 79 69 6e 67 20 74 61 62 6c 65  r querying table
2b1d0 73 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 20 20 63  s names */.    c
2b1e0 68 61 72 20 2a 7a 53 71 6c 3b 20 20 20 20 20 20  har *zSql;      
2b1f0 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 74          /* SQL t
2b200 6f 20 62 65 20 72 75 6e 20 2a 2f 0a 20 20 20 20  o be run */.    
2b210 63 68 61 72 20 2a 7a 53 65 70 3b 20 20 20 20 20  char *zSep;     
2b220 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65 70 61           /* Sepa
2b230 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 53 68 65  rator */.    She
2b240 6c 6c 54 65 78 74 20 73 53 71 6c 3b 20 20 20 20  llText sSql;    
2b250 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74        /* Complet
2b260 65 20 53 51 4c 20 66 6f 72 20 74 68 65 20 71 75  e SQL for the qu
2b270 65 72 79 20 74 6f 20 72 75 6e 20 74 68 65 20 68  ery to run the h
2b280 61 73 68 20 2a 2f 0a 20 20 20 20 53 68 65 6c 6c  ash */.    Shell
2b290 54 65 78 74 20 73 51 75 65 72 79 3b 20 20 20 20  Text sQuery;    
2b2a0 20 20 20 20 2f 2a 20 53 65 74 20 6f 66 20 71 75      /* Set of qu
2b2b0 65 72 69 65 73 20 75 73 65 64 20 74 6f 20 72 65  eries used to re
2b2c0 61 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 2a  ad all content *
2b2d0 2f 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  /.    open_db(p,
2b2e0 20 30 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31   0);.    for(i=1
2b2f0 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
2b300 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2b310 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 5d 3b 0a   *z = azArg[i];.
2b320 20 20 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d 3d        if( z[0]==
2b330 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  '-' ){.        z
2b340 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ++;.        if( 
2b350 7a 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b  z[0]=='-' ) z++;
2b360 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72  .        if( str
2b370 63 6d 70 28 7a 2c 22 73 63 68 65 6d 61 22 29 3d  cmp(z,"schema")=
2b380 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
2b390 62 53 63 68 65 6d 61 20 3d 20 31 3b 0a 20 20 20  bSchema = 1;.   
2b3a0 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20       }else.     
2b3b0 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c     if( strcmp(z,
2b3c0 22 73 68 61 33 2d 32 32 34 22 29 3d 3d 30 20 7c  "sha3-224")==0 |
2b3d0 7c 20 73 74 72 63 6d 70 28 7a 2c 22 73 68 61 33  | strcmp(z,"sha3
2b3e0 2d 32 35 36 22 29 3d 3d 30 0a 20 20 20 20 20 20  -256")==0.      
2b3f0 20 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22     || strcmp(z,"
2b400 73 68 61 33 2d 33 38 34 22 29 3d 3d 30 20 7c 7c  sha3-384")==0 ||
2b410 20 73 74 72 63 6d 70 28 7a 2c 22 73 68 61 33 2d   strcmp(z,"sha3-
2b420 35 31 32 22 29 3d 3d 30 0a 20 20 20 20 20 20 20  512")==0.       
2b430 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 53   ){.          iS
2b440 69 7a 65 20 3d 20 61 74 6f 69 28 26 7a 5b 35 5d  ize = atoi(&z[5]
2b450 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
2b460 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72  .        if( str
2b470 63 6d 70 28 7a 2c 22 64 65 62 75 67 22 29 3d 3d  cmp(z,"debug")==
2b480 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62  0 ){.          b
2b490 44 65 62 75 67 20 3d 20 31 3b 0a 20 20 20 20 20  Debug = 1;.     
2b4a0 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20 20 20     }else.       
2b4b0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66   {.          utf
2b4c0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
2b4d0 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f 6e   "Unknown option
2b4e0 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22 25 73 5c   \"%s\" on \"%s\
2b4f0 22 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  "\n",.          
2b500 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72              azAr
2b510 67 5b 69 5d 2c 20 61 7a 41 72 67 5b 30 5d 29 3b  g[i], azArg[0]);
2b520 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
2b530 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53  rintf(stderr, "S
2b540 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a  hould be one of:
2b550 20 2d 2d 73 63 68 65 6d 61 22 0a 20 20 20 20 20   --schema".     
2b560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b570 20 20 20 20 20 20 20 20 22 20 2d 2d 73 68 61 33          " --sha3
2b580 2d 32 32 34 20 2d 2d 73 68 61 33 2d 32 35 35 20  -224 --sha3-255 
2b590 2d 2d 73 68 61 33 2d 33 38 34 20 2d 2d 73 68 61  --sha3-384 --sha
2b5a0 33 2d 35 31 32 5c 6e 22 29 3b 0a 20 20 20 20 20  3-512\n");.     
2b5b0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2b5c0 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
2b5d0 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
2b5e0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
2b5f0 65 6c 73 65 20 69 66 28 20 7a 4c 69 6b 65 20 29  else if( zLike )
2b600 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
2b610 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
2b620 61 67 65 3a 20 2e 73 68 61 33 73 75 6d 20 3f 4f  age: .sha3sum ?O
2b630 50 54 49 4f 4e 53 3f 20 3f 4c 49 4b 45 2d 50 41  PTIONS? ?LIKE-PA
2b640 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20 20  TTERN?\n");.    
2b650 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2b660 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
2b670 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
2b680 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
2b690 20 7a 4c 69 6b 65 20 3d 20 7a 3b 0a 20 20 20 20   zLike = z;.    
2b6a0 20 20 20 20 62 53 65 70 61 72 61 74 65 20 3d 20      bSeparate = 
2b6b0 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  1;.        if( s
2b6c0 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28 22  qlite3_strlike("
2b6d0 73 71 6c 69 74 65 5f 25 22 2c 20 7a 4c 69 6b 65  sqlite_%", zLike
2b6e0 2c 20 30 29 3d 3d 30 20 29 20 62 53 63 68 65 6d  , 0)==0 ) bSchem
2b6f0 61 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  a = 1;.      }. 
2b700 20 20 20 7d 0a 20 20 20 20 69 66 28 20 62 53 63     }.    if( bSc
2b710 68 65 6d 61 20 29 7b 0a 20 20 20 20 20 20 7a 53  hema ){.      zS
2b720 71 6c 20 3d 20 22 53 45 4c 45 43 54 20 6c 6f 77  ql = "SELECT low
2b730 65 72 28 6e 61 6d 65 29 20 46 52 4f 4d 20 73 71  er(name) FROM sq
2b740 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20  lite_master".   
2b750 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52            " WHER
2b760 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 20 41  E type='table' A
2b770 4e 44 20 63 6f 61 6c 65 73 63 65 28 72 6f 6f 74  ND coalesce(root
2b780 70 61 67 65 2c 30 29 3e 31 22 0a 20 20 20 20 20  page,0)>1".     
2b790 20 20 20 20 20 20 20 20 22 20 55 4e 49 4f 4e 20          " UNION 
2b7a0 41 4c 4c 20 53 45 4c 45 43 54 20 27 73 71 6c 69  ALL SELECT 'sqli
2b7b0 74 65 5f 6d 61 73 74 65 72 27 22 0a 20 20 20 20  te_master'".    
2b7c0 20 20 20 20 20 20 20 20 20 22 20 4f 52 44 45 52           " ORDER
2b7d0 20 42 59 20 31 20 63 6f 6c 6c 61 74 65 20 6e 6f   BY 1 collate no
2b7e0 63 61 73 65 22 3b 0a 20 20 20 20 7d 65 6c 73 65  case";.    }else
2b7f0 7b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 22  {.      zSql = "
2b800 53 45 4c 45 43 54 20 6c 6f 77 65 72 28 6e 61 6d  SELECT lower(nam
2b810 65 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  e) FROM sqlite_m
2b820 61 73 74 65 72 22 0a 20 20 20 20 20 20 20 20 20  aster".         
2b830 20 20 20 20 22 20 57 48 45 52 45 20 74 79 70 65      " WHERE type
2b840 3d 27 74 61 62 6c 65 27 20 41 4e 44 20 63 6f 61  ='table' AND coa
2b850 6c 65 73 63 65 28 72 6f 6f 74 70 61 67 65 2c 30  lesce(rootpage,0
2b860 29 3e 31 22 0a 20 20 20 20 20 20 20 20 20 20 20  )>1".           
2b870 20 20 22 20 41 4e 44 20 6e 61 6d 65 20 4e 4f 54    " AND name NOT
2b880 20 4c 49 4b 45 20 27 73 71 6c 69 74 65 5f 25 27   LIKE 'sqlite_%'
2b890 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22  ".             "
2b8a0 20 4f 52 44 45 52 20 42 59 20 31 20 63 6f 6c 6c   ORDER BY 1 coll
2b8b0 61 74 65 20 6e 6f 63 61 73 65 22 3b 0a 20 20 20  ate nocase";.   
2b8c0 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 70   }.    sqlite3_p
2b8d0 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c  repare_v2(p->db,
2b8e0 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d   zSql, -1, &pStm
2b8f0 74 2c 20 30 29 3b 0a 20 20 20 20 69 6e 69 74 54  t, 0);.    initT
2b900 65 78 74 28 26 73 51 75 65 72 79 29 3b 0a 20 20  ext(&sQuery);.  
2b910 20 20 69 6e 69 74 54 65 78 74 28 26 73 53 71 6c    initText(&sSql
2b920 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54 65 78  );.    appendTex
2b930 74 28 26 73 53 71 6c 2c 20 22 57 49 54 48 20 5b  t(&sSql, "WITH [
2b940 73 68 61 33 73 75 6d 24 71 75 65 72 79 5d 28 61  sha3sum$query](a
2b950 2c 62 29 20 41 53 28 22 2c 30 29 3b 0a 20 20 20  ,b) AS(",0);.   
2b960 20 7a 53 65 70 20 3d 20 22 56 41 4c 55 45 53 28   zSep = "VALUES(
2b970 22 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 53 51  ";.    while( SQ
2b980 4c 49 54 45 5f 52 4f 57 3d 3d 73 71 6c 69 74 65  LITE_ROW==sqlite
2b990 33 5f 73 74 65 70 28 70 53 74 6d 74 29 20 29 7b  3_step(pStmt) ){
2b9a0 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
2b9b0 72 20 2a 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74  r *zTab = (const
2b9c0 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63   char*)sqlite3_c
2b9d0 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74  olumn_text(pStmt
2b9e0 2c 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  ,0);.      if( z
2b9f0 4c 69 6b 65 20 26 26 20 73 71 6c 69 74 65 33 5f  Like && sqlite3_
2ba00 73 74 72 6c 69 6b 65 28 7a 4c 69 6b 65 2c 20 7a  strlike(zLike, z
2ba10 54 61 62 2c 20 30 29 21 3d 30 20 29 20 63 6f 6e  Tab, 0)!=0 ) con
2ba20 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 28  tinue;.      if(
2ba30 20 73 74 72 6e 63 6d 70 28 7a 54 61 62 2c 20 22   strncmp(zTab, "
2ba40 73 71 6c 69 74 65 5f 22 2c 37 29 21 3d 30 20 29  sqlite_",7)!=0 )
2ba50 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  {.        append
2ba60 54 65 78 74 28 26 73 51 75 65 72 79 2c 22 53 45  Text(&sQuery,"SE
2ba70 4c 45 43 54 20 2a 20 46 52 4f 4d 20 22 2c 20 30  LECT * FROM ", 0
2ba80 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  );.        appen
2ba90 64 54 65 78 74 28 26 73 51 75 65 72 79 2c 7a 54  dText(&sQuery,zT
2baa0 61 62 2c 27 22 27 29 3b 0a 20 20 20 20 20 20 20  ab,'"');.       
2bab0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 51 75   appendText(&sQu
2bac0 65 72 79 2c 22 20 4e 4f 54 20 49 4e 44 45 58 45  ery," NOT INDEXE
2bad0 44 3b 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  D;", 0);.      }
2bae0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
2baf0 7a 54 61 62 2c 20 22 73 71 6c 69 74 65 5f 6d 61  zTab, "sqlite_ma
2bb00 73 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20  ster")==0 ){.   
2bb10 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
2bb20 26 73 51 75 65 72 79 2c 22 53 45 4c 45 43 54 20  &sQuery,"SELECT 
2bb30 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61  type,name,tbl_na
2bb40 6d 65 2c 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69  me,sql FROM sqli
2bb50 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20 20  te_master".     
2bb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb70 20 20 20 20 20 20 22 20 4f 52 44 45 52 20 42 59        " ORDER BY
2bb80 20 6e 61 6d 65 3b 22 2c 20 30 29 3b 0a 20 20 20   name;", 0);.   
2bb90 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
2bba0 63 6d 70 28 7a 54 61 62 2c 20 22 73 71 6c 69 74  cmp(zTab, "sqlit
2bbb0 65 5f 73 65 71 75 65 6e 63 65 22 29 3d 3d 30 20  e_sequence")==0 
2bbc0 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  ){.        appen
2bbd0 64 54 65 78 74 28 26 73 51 75 65 72 79 2c 22 53  dText(&sQuery,"S
2bbe0 45 4c 45 43 54 20 6e 61 6d 65 2c 73 65 71 20 46  ELECT name,seq F
2bbf0 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65  ROM sqlite_seque
2bc00 6e 63 65 22 0a 20 20 20 20 20 20 20 20 20 20 20  nce".           
2bc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc20 22 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 3b  " ORDER BY name;
2bc30 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ", 0);.      }el
2bc40 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 54  se if( strcmp(zT
2bc50 61 62 2c 20 22 73 71 6c 69 74 65 5f 73 74 61 74  ab, "sqlite_stat
2bc60 31 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  1")==0 ){.      
2bc70 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 51    appendText(&sQ
2bc80 75 65 72 79 2c 22 53 45 4c 45 43 54 20 74 62 6c  uery,"SELECT tbl
2bc90 2c 69 64 78 2c 73 74 61 74 20 46 52 4f 4d 20 73  ,idx,stat FROM s
2bca0 71 6c 69 74 65 5f 73 74 61 74 31 22 0a 20 20 20  qlite_stat1".   
2bcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bcc0 20 20 20 20 20 20 20 20 22 20 4f 52 44 45 52 20          " ORDER 
2bcd0 42 59 20 74 62 6c 2c 69 64 78 3b 22 2c 20 30 29  BY tbl,idx;", 0)
2bce0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
2bcf0 28 20 73 74 72 63 6d 70 28 7a 54 61 62 2c 20 22  ( strcmp(zTab, "
2bd00 73 71 6c 69 74 65 5f 73 74 61 74 33 22 29 3d 3d  sqlite_stat3")==
2bd10 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c  0.             |
2bd20 7c 20 73 74 72 63 6d 70 28 7a 54 61 62 2c 20 22  | strcmp(zTab, "
2bd30 73 71 6c 69 74 65 5f 73 74 61 74 34 22 29 3d 3d  sqlite_stat4")==
2bd40 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70  0 ){.        app
2bd50 65 6e 64 54 65 78 74 28 26 73 51 75 65 72 79 2c  endText(&sQuery,
2bd60 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
2bd70 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61  ", 0);.        a
2bd80 70 70 65 6e 64 54 65 78 74 28 26 73 51 75 65 72  ppendText(&sQuer
2bd90 79 2c 20 7a 54 61 62 2c 20 30 29 3b 0a 20 20 20  y, zTab, 0);.   
2bda0 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
2bdb0 26 73 51 75 65 72 79 2c 20 22 20 4f 52 44 45 52  &sQuery, " ORDER
2bdc0 20 42 59 20 74 62 6c 2c 20 69 64 78 2c 20 72 6f   BY tbl, idx, ro
2bdd0 77 69 64 3b 5c 6e 22 2c 20 30 29 3b 0a 20 20 20  wid;\n", 0);.   
2bde0 20 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e     }.      appen
2bdf0 64 54 65 78 74 28 26 73 53 71 6c 2c 20 7a 53 65  dText(&sSql, zSe
2be00 70 2c 20 30 29 3b 0a 20 20 20 20 20 20 61 70 70  p, 0);.      app
2be10 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c 20 73  endText(&sSql, s
2be20 51 75 65 72 79 2e 7a 2c 20 27 5c 27 27 29 3b 0a  Query.z, '\'');.
2be30 20 20 20 20 20 20 73 51 75 65 72 79 2e 6e 20 3d        sQuery.n =
2be40 20 30 3b 0a 20 20 20 20 20 20 61 70 70 65 6e 64   0;.      append
2be50 54 65 78 74 28 26 73 53 71 6c 2c 20 22 2c 22 2c  Text(&sSql, ",",
2be60 20 30 29 3b 0a 20 20 20 20 20 20 61 70 70 65 6e   0);.      appen
2be70 64 54 65 78 74 28 26 73 53 71 6c 2c 20 7a 54 61  dText(&sSql, zTa
2be80 62 2c 20 27 5c 27 27 29 3b 0a 20 20 20 20 20 20  b, '\'');.      
2be90 7a 53 65 70 20 3d 20 22 29 2c 28 22 3b 0a 20 20  zSep = "),(";.  
2bea0 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
2beb0 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
2bec0 0a 20 20 20 20 69 66 28 20 62 53 65 70 61 72 61  .    if( bSepara
2bed0 74 65 20 29 7b 0a 20 20 20 20 20 20 7a 53 71 6c  te ){.      zSql
2bee0 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
2bef0 74 66 28 0a 20 20 20 20 20 20 20 20 20 20 22 25  tf(.          "%
2bf00 73 29 29 22 0a 20 20 20 20 20 20 20 20 20 20 22  s))".          "
2bf10 20 53 45 4c 45 43 54 20 6c 6f 77 65 72 28 68 65   SELECT lower(he
2bf20 78 28 73 68 61 33 5f 71 75 65 72 79 28 61 2c 25  x(sha3_query(a,%
2bf30 64 29 29 29 20 41 53 20 68 61 73 68 2c 20 62 20  d))) AS hash, b 
2bf40 41 53 20 6c 61 62 65 6c 22 0a 20 20 20 20 20 20  AS label".      
2bf50 20 20 20 20 22 20 20 20 46 52 4f 4d 20 5b 73 68      "   FROM [sh
2bf60 61 33 73 75 6d 24 71 75 65 72 79 5d 22 2c 0a 20  a3sum$query]",. 
2bf70 20 20 20 20 20 20 20 20 20 73 53 71 6c 2e 7a 2c           sSql.z,
2bf80 20 69 53 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c   iSize);.    }el
2bf90 73 65 7b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d  se{.      zSql =
2bfa0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
2bfb0 28 0a 20 20 20 20 20 20 20 20 20 20 22 25 73 29  (.          "%s)
2bfc0 29 22 0a 20 20 20 20 20 20 20 20 20 20 22 20 53  )".          " S
2bfd0 45 4c 45 43 54 20 6c 6f 77 65 72 28 68 65 78 28  ELECT lower(hex(
2bfe0 73 68 61 33 5f 71 75 65 72 79 28 67 72 6f 75 70  sha3_query(group
2bff0 5f 63 6f 6e 63 61 74 28 61 2c 27 27 29 2c 25 64  _concat(a,''),%d
2c000 29 29 29 20 41 53 20 68 61 73 68 22 0a 20 20 20  ))) AS hash".   
2c010 20 20 20 20 20 20 20 22 20 20 20 46 52 4f 4d 20         "   FROM 
2c020 5b 73 68 61 33 73 75 6d 24 71 75 65 72 79 5d 22  [sha3sum$query]"
2c030 2c 0a 20 20 20 20 20 20 20 20 20 20 73 53 71 6c  ,.          sSql
2c040 2e 7a 2c 20 69 53 69 7a 65 29 3b 0a 20 20 20 20  .z, iSize);.    
2c050 7d 0a 20 20 20 20 66 72 65 65 54 65 78 74 28 26  }.    freeText(&
2c060 73 51 75 65 72 79 29 3b 0a 20 20 20 20 66 72 65  sQuery);.    fre
2c070 65 54 65 78 74 28 26 73 53 71 6c 29 3b 0a 20 20  eText(&sSql);.  
2c080 20 20 69 66 28 20 62 44 65 62 75 67 20 29 7b 0a    if( bDebug ){.
2c090 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
2c0a0 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e 22  f(p->out, "%s\n"
2c0b0 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 7d 65 6c  , zSql);.    }el
2c0c0 73 65 7b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f  se{.      shell_
2c0d0 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53 71 6c  exec(p->db, zSql
2c0e0 2c 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b  , shell_callback
2c0f0 2c 20 70 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  , p, 0);.    }. 
2c100 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
2c110 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a  zSql);.  }else..
2c120 20 20 69 66 28 20 63 3d 3d 27 73 27 0a 20 20 20    if( c=='s'.   
2c130 26 26 20 28 73 74 72 6e 63 6d 70 28 61 7a 41 72  && (strncmp(azAr
2c140 67 5b 30 5d 2c 20 22 73 68 65 6c 6c 22 2c 20 6e  g[0], "shell", n
2c150 29 3d 3d 30 20 7c 7c 20 73 74 72 6e 63 6d 70 28  )==0 || strncmp(
2c160 61 7a 41 72 67 5b 30 5d 2c 22 73 79 73 74 65 6d  azArg[0],"system
2c170 22 2c 6e 29 3d 3d 30 29 0a 20 20 29 7b 0a 20 20  ",n)==0).  ){.  
2c180 20 20 63 68 61 72 20 2a 7a 43 6d 64 3b 0a 20 20    char *zCmd;.  
2c190 20 20 69 6e 74 20 69 2c 20 78 3b 0a 20 20 20 20    int i, x;.    
2c1a0 69 66 28 20 6e 41 72 67 3c 32 20 29 7b 0a 20 20  if( nArg<2 ){.  
2c1b0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
2c1c0 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
2c1d0 73 79 73 74 65 6d 20 43 4f 4d 4d 41 4e 44 5c 6e  system COMMAND\n
2c1e0 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
2c1f0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
2c200 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
2c210 20 20 20 20 7d 0a 20 20 20 20 7a 43 6d 64 20 3d      }.    zCmd =
2c220 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
2c230 28 73 74 72 63 68 72 28 61 7a 41 72 67 5b 31 5d  (strchr(azArg[1]
2c240 2c 27 20 27 29 3d 3d 30 3f 22 25 73 22 3a 22 5c  ,' ')==0?"%s":"\
2c250 22 25 73 5c 22 22 2c 20 61 7a 41 72 67 5b 31 5d  "%s\"", azArg[1]
2c260 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 32 3b 20  );.    for(i=2; 
2c270 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
2c280 20 20 20 20 7a 43 6d 64 20 3d 20 73 71 6c 69 74      zCmd = sqlit
2c290 65 33 5f 6d 70 72 69 6e 74 66 28 73 74 72 63 68  e3_mprintf(strch
2c2a0 72 28 61 7a 41 72 67 5b 69 5d 2c 27 20 27 29 3d  r(azArg[i],' ')=
2c2b0 3d 30 3f 22 25 7a 20 25 73 22 3a 22 25 7a 20 5c  =0?"%z %s":"%z \
2c2c0 22 25 73 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  "%s\"",.        
2c2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2e0 20 20 20 20 20 7a 43 6d 64 2c 20 61 7a 41 72 67       zCmd, azArg
2c2f0 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  [i]);.    }.    
2c300 78 20 3d 20 73 79 73 74 65 6d 28 7a 43 6d 64 29  x = system(zCmd)
2c310 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
2c320 65 65 28 7a 43 6d 64 29 3b 0a 20 20 20 20 69 66  ee(zCmd);.    if
2c330 28 20 78 20 29 20 72 61 77 5f 70 72 69 6e 74 66  ( x ) raw_printf
2c340 28 73 74 64 65 72 72 2c 20 22 53 79 73 74 65 6d  (stderr, "System
2c350 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e 73   command returns
2c360 20 25 64 5c 6e 22 2c 20 78 29 3b 0a 20 20 7d 65   %d\n", x);.  }e
2c370 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73  lse..  if( c=='s
2c380 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
2c390 72 67 5b 30 5d 2c 20 22 73 68 6f 77 22 2c 20 6e  rg[0], "show", n
2c3a0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74  )==0 ){.    stat
2c3b0 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  ic const char *a
2c3c0 7a 42 6f 6f 6c 5b 5d 20 3d 20 7b 20 22 6f 66 66  zBool[] = { "off
2c3d0 22 2c 20 22 6f 6e 22 2c 20 22 66 75 6c 6c 22 2c  ", "on", "full",
2c3e0 20 22 75 6e 6b 22 20 7d 3b 0a 20 20 20 20 69 6e   "unk" };.    in
2c3f0 74 20 69 3b 0a 20 20 20 20 69 66 28 20 6e 41 72  t i;.    if( nAr
2c400 67 21 3d 31 20 29 7b 0a 20 20 20 20 20 20 72 61  g!=1 ){.      ra
2c410 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
2c420 20 22 55 73 61 67 65 3a 20 2e 73 68 6f 77 5c 6e   "Usage: .show\n
2c430 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
2c440 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
2c450 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
2c460 20 20 20 20 7d 0a 20 20 20 20 75 74 66 38 5f 70      }.    utf8_p
2c470 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
2c480 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 65  12.12s: %s\n","e
2c490 63 68 6f 22 2c 0a 20 20 20 20 20 20 20 20 20 20  cho",.          
2c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4b0 20 20 20 20 20 20 20 20 61 7a 42 6f 6f 6c 5b 53          azBool[S
2c4c0 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c 20 53  hellHasFlag(p, S
2c4d0 48 46 4c 47 5f 45 63 68 6f 29 5d 29 3b 0a 20 20  HFLG_Echo)]);.  
2c4e0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
2c4f0 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73 3a 20  >out, "%12.12s: 
2c500 25 73 5c 6e 22 2c 22 65 71 70 22 2c 20 61 7a 42  %s\n","eqp", azB
2c510 6f 6f 6c 5b 70 2d 3e 61 75 74 6f 45 51 50 26 33  ool[p->autoEQP&3
2c520 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69  ]);.    utf8_pri
2c530 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32  ntf(p->out, "%12
2c540 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 65 78 70  .12s: %s\n","exp
2c550 6c 61 69 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  lain",.         
2c560 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78  p->mode==MODE_Ex
2c570 70 6c 61 69 6e 20 3f 20 22 6f 6e 22 20 3a 20 70  plain ? "on" : p
2c580 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e 20 3f 20  ->autoExplain ? 
2c590 22 61 75 74 6f 22 20 3a 20 22 6f 66 66 22 29 3b  "auto" : "off");
2c5a0 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
2c5b0 28 70 2d 3e 6f 75 74 2c 22 25 31 32 2e 31 32 73  (p->out,"%12.12s
2c5c0 3a 20 25 73 5c 6e 22 2c 22 68 65 61 64 65 72 73  : %s\n","headers
2c5d0 22 2c 20 61 7a 42 6f 6f 6c 5b 70 2d 3e 73 68 6f  ", azBool[p->sho
2c5e0 77 48 65 61 64 65 72 21 3d 30 5d 29 3b 0a 20 20  wHeader!=0]);.  
2c5f0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
2c600 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73 3a 20  >out, "%12.12s: 
2c610 25 73 5c 6e 22 2c 22 6d 6f 64 65 22 2c 20 6d 6f  %s\n","mode", mo
2c620 64 65 44 65 73 63 72 5b 70 2d 3e 6d 6f 64 65 5d  deDescr[p->mode]
2c630 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
2c640 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e  tf(p->out, "%12.
2c650 31 32 73 3a 20 22 2c 20 22 6e 75 6c 6c 76 61 6c  12s: ", "nullval
2c660 75 65 22 29 3b 0a 20 20 20 20 20 20 6f 75 74 70  ue");.      outp
2c670 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f  ut_c_string(p->o
2c680 75 74 2c 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65  ut, p->nullValue
2c690 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  );.      raw_pri
2c6a0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22  ntf(p->out, "\n"
2c6b0 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
2c6c0 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31 32 2e 31  tf(p->out,"%12.1
2c6d0 32 73 3a 20 25 73 5c 6e 22 2c 22 6f 75 74 70 75  2s: %s\n","outpu
2c6e0 74 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t",.            
2c6f0 73 74 72 6c 65 6e 33 30 28 70 2d 3e 6f 75 74 66  strlen30(p->outf
2c700 69 6c 65 29 20 3f 20 70 2d 3e 6f 75 74 66 69 6c  ile) ? p->outfil
2c710 65 20 3a 20 22 73 74 64 6f 75 74 22 29 3b 0a 20  e : "stdout");. 
2c720 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
2c730 2d 3e 6f 75 74 2c 22 25 31 32 2e 31 32 73 3a 20  ->out,"%12.12s: 
2c740 22 2c 20 22 63 6f 6c 73 65 70 61 72 61 74 6f 72  ", "colseparator
2c750 22 29 3b 0a 20 20 20 20 20 20 6f 75 74 70 75 74  ");.      output
2c760 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  _c_string(p->out
2c770 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  , p->colSeparato
2c780 72 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72  r);.      raw_pr
2c790 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e  intf(p->out, "\n
2c7a0 22 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69  ");.    utf8_pri
2c7b0 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31 32 2e  ntf(p->out,"%12.
2c7c0 31 32 73 3a 20 22 2c 20 22 72 6f 77 73 65 70 61  12s: ", "rowsepa
2c7d0 72 61 74 6f 72 22 29 3b 0a 20 20 20 20 20 20 6f  rator");.      o
2c7e0 75 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 70  utput_c_string(p
2c7f0 2d 3e 6f 75 74 2c 20 70 2d 3e 72 6f 77 53 65 70  ->out, p->rowSep
2c800 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 72  arator);.      r
2c810 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
2c820 2c 20 22 5c 6e 22 29 3b 0a 20 20 20 20 75 74 66  , "\n");.    utf
2c830 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
2c840 20 22 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22   "%12.12s: %s\n"
2c850 2c 22 73 74 61 74 73 22 2c 20 61 7a 42 6f 6f 6c  ,"stats", azBool
2c860 5b 70 2d 3e 73 74 61 74 73 4f 6e 21 3d 30 5d 29  [p->statsOn!=0])
2c870 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  ;.    utf8_print
2c880 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31  f(p->out, "%12.1
2c890 32 73 3a 20 22 2c 20 22 77 69 64 74 68 22 29 3b  2s: ", "width");
2c8a0 0a 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 69 3c  .    for (i=0;i<
2c8b0 28 69 6e 74 29 41 72 72 61 79 53 69 7a 65 28 70  (int)ArraySize(p
2c8c0 2d 3e 63 6f 6c 57 69 64 74 68 29 20 26 26 20 70  ->colWidth) && p
2c8d0 2d 3e 63 6f 6c 57 69 64 74 68 5b 69 5d 20 21 3d  ->colWidth[i] !=
2c8e0 20 30 3b 69 2b 2b 29 20 7b 0a 20 20 20 20 20 20   0;i++) {.      
2c8f0 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
2c900 74 2c 20 22 25 64 20 22 2c 20 70 2d 3e 63 6f 6c  t, "%d ", p->col
2c910 57 69 64 74 68 5b 69 5d 29 3b 0a 20 20 20 20 7d  Width[i]);.    }
2c920 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
2c930 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20  p->out, "\n");. 
2c940 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
2c950 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73 3a  ->out, "%12.12s:
2c960 20 25 73 5c 6e 22 2c 20 22 66 69 6c 65 6e 61 6d   %s\n", "filenam
2c970 65 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  e",.            
2c980 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c 65 6e 61      p->zDbFilena
2c990 6d 65 20 3f 20 70 2d 3e 7a 44 62 46 69 6c 65 6e  me ? p->zDbFilen
2c9a0 61 6d 65 20 3a 20 22 22 29 3b 0a 20 20 7d 65 6c  ame : "");.  }el
2c9b0 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73 27  se..  if( c=='s'
2c9c0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
2c9d0 67 5b 30 5d 2c 20 22 73 74 61 74 73 22 2c 20 6e  g[0], "stats", n
2c9e0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
2c9f0 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20  nArg==2 ){.     
2ca00 20 70 2d 3e 73 74 61 74 73 4f 6e 20 3d 20 62 6f   p->statsOn = bo
2ca10 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67  oleanValue(azArg
2ca20 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  [1]);.    }else 
2ca30 69 66 28 20 6e 41 72 67 3d 3d 31 20 29 7b 0a 20  if( nArg==1 ){. 
2ca40 20 20 20 20 20 64 69 73 70 6c 61 79 5f 73 74 61       display_sta
2ca50 74 73 28 70 2d 3e 64 62 2c 20 70 2c 20 30 29 3b  ts(p->db, p, 0);
2ca60 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2ca70 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
2ca80 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 74  err, "Usage: .st
2ca90 61 74 73 20 3f 6f 6e 7c 6f 66 66 3f 5c 6e 22 29  ats ?on|off?\n")
2caa0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
2cab0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
2cac0 20 69 66 28 20 28 63 3d 3d 27 74 27 20 26 26 20   if( (c=='t' && 
2cad0 6e 3e 31 20 26 26 20 73 74 72 6e 63 6d 70 28 61  n>1 && strncmp(a
2cae0 7a 41 72 67 5b 30 5d 2c 20 22 74 61 62 6c 65 73  zArg[0], "tables
2caf0 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 20 7c 7c 20  ", n)==0).   || 
2cb00 28 63 3d 3d 27 69 27 20 26 26 20 28 73 74 72 6e  (c=='i' && (strn
2cb10 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69  cmp(azArg[0], "i
2cb20 6e 64 69 63 65 73 22 2c 20 6e 29 3d 3d 30 0a 20  ndices", n)==0. 
2cb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb40 7c 7c 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  || strncmp(azArg
2cb50 5b 30 5d 2c 20 22 69 6e 64 65 78 65 73 22 2c 20  [0], "indexes", 
2cb60 6e 29 3d 3d 30 29 20 29 0a 20 20 29 7b 0a 20 20  n)==0) ).  ){.  
2cb70 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
2cb80 70 53 74 6d 74 3b 0a 20 20 20 20 63 68 61 72 20  pStmt;.    char 
2cb90 2a 2a 61 7a 52 65 73 75 6c 74 3b 0a 20 20 20 20  **azResult;.    
2cba0 69 6e 74 20 6e 52 6f 77 2c 20 6e 41 6c 6c 6f 63  int nRow, nAlloc
2cbb0 3b 0a 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20  ;.    int ii;.  
2cbc0 20 20 53 68 65 6c 6c 54 65 78 74 20 73 3b 0a 20    ShellText s;. 
2cbd0 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 29 3b     initText(&s);
2cbe0 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20  .    open_db(p, 
2cbf0 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  0);.    rc = sql
2cc00 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
2cc10 70 2d 3e 64 62 2c 20 22 50 52 41 47 4d 41 20 64  p->db, "PRAGMA d
2cc20 61 74 61 62 61 73 65 5f 6c 69 73 74 22 2c 20 2d  atabase_list", -
2cc30 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20  1, &pStmt, 0);. 
2cc40 20 20 20 69 66 28 20 72 63 20 29 20 72 65 74 75     if( rc ) retu
2cc50 72 6e 20 73 68 65 6c 6c 44 61 74 61 62 61 73 65  rn shellDatabase
2cc60 45 72 72 6f 72 28 70 2d 3e 64 62 29 3b 0a 0a 20  Error(p->db);.. 
2cc70 20 20 20 69 66 28 20 6e 41 72 67 3e 32 20 26 26     if( nArg>2 &&
2cc80 20 63 3d 3d 27 69 27 20 29 7b 0a 20 20 20 20 20   c=='i' ){.     
2cc90 20 2f 2a 20 49 74 20 69 73 20 61 6e 20 68 69 73   /* It is an his
2cca0 74 6f 72 69 63 61 6c 20 61 63 63 69 64 65 6e 74  torical accident
2ccb0 20 74 68 61 74 20 74 68 65 20 2e 69 6e 64 65 78   that the .index
2ccc0 65 73 20 63 6f 6d 6d 61 6e 64 20 73 68 6f 77 73  es command shows
2ccd0 20 61 6e 20 65 72 72 6f 72 0a 20 20 20 20 20 20   an error.      
2cce0 2a 2a 20 77 68 65 6e 20 63 61 6c 6c 65 64 20 77  ** when called w
2ccf0 69 74 68 20 74 68 65 20 77 72 6f 6e 67 20 6e 75  ith the wrong nu
2cd00 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
2cd10 73 20 77 68 65 72 65 61 73 20 74 68 65 20 2e 74  s whereas the .t
2cd20 61 62 6c 65 73 0a 20 20 20 20 20 20 2a 2a 20 63  ables.      ** c
2cd30 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 2e  ommand does not.
2cd40 20 2a 2f 0a 20 20 20 20 20 20 72 61 77 5f 70 72   */.      raw_pr
2cd50 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
2cd60 61 67 65 3a 20 2e 69 6e 64 65 78 65 73 20 3f 4c  age: .indexes ?L
2cd70 49 4b 45 2d 50 41 54 54 45 52 4e 3f 5c 6e 22 29  IKE-PATTERN?\n")
2cd80 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
2cd90 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
2cda0 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
2cdb0 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 69 3d 30    }.    for(ii=0
2cdc0 3b 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  ; sqlite3_step(p
2cdd0 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  Stmt)==SQLITE_RO
2cde0 57 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  W; ii++){.      
2cdf0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 4e  const char *zDbN
2ce00 61 6d 65 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  ame = (const cha
2ce10 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  r*)sqlite3_colum
2ce20 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31 29  n_text(pStmt, 1)
2ce30 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 44 62 4e  ;.      if( zDbN
2ce40 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  ame==0 ) continu
2ce50 65 3b 0a 20 20 20 20 20 20 69 66 28 20 73 2e 7a  e;.      if( s.z
2ce60 20 26 26 20 73 2e 7a 5b 30 5d 20 29 20 61 70 70   && s.z[0] ) app
2ce70 65 6e 64 54 65 78 74 28 26 73 2c 20 22 20 55 4e  endText(&s, " UN
2ce80 49 4f 4e 20 41 4c 4c 20 22 2c 20 30 29 3b 0a 20  ION ALL ", 0);. 
2ce90 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
2cea0 5f 73 74 72 69 63 6d 70 28 7a 44 62 4e 61 6d 65  _stricmp(zDbName
2ceb0 2c 20 22 6d 61 69 6e 22 29 3d 3d 30 20 29 7b 0a  , "main")==0 ){.
2cec0 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65          appendTe
2ced0 78 74 28 26 73 2c 20 22 53 45 4c 45 43 54 20 6e  xt(&s, "SELECT n
2cee0 61 6d 65 20 46 52 4f 4d 20 22 2c 20 30 29 3b 0a  ame FROM ", 0);.
2cef0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
2cf00 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
2cf10 26 73 2c 20 22 53 45 4c 45 43 54 20 22 2c 20 30  &s, "SELECT ", 0
2cf20 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  );.        appen
2cf30 64 54 65 78 74 28 26 73 2c 20 7a 44 62 4e 61 6d  dText(&s, zDbNam
2cf40 65 2c 20 27 5c 27 27 29 3b 0a 20 20 20 20 20 20  e, '\'');.      
2cf50 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c    appendText(&s,
2cf60 20 22 7c 7c 27 2e 27 7c 7c 6e 61 6d 65 20 46 52   "||'.'||name FR
2cf70 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  OM ", 0);.      
2cf80 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65  }.      appendTe
2cf90 78 74 28 26 73 2c 20 7a 44 62 4e 61 6d 65 2c 20  xt(&s, zDbName, 
2cfa0 27 22 27 29 3b 0a 20 20 20 20 20 20 61 70 70 65  '"');.      appe
2cfb0 6e 64 54 65 78 74 28 26 73 2c 20 22 2e 73 71 6c  ndText(&s, ".sql
2cfc0 69 74 65 5f 6d 61 73 74 65 72 20 22 2c 20 30 29  ite_master ", 0)
2cfd0 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27  ;.      if( c=='
2cfe0 74 27 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70  t' ){.        ap
2cff0 70 65 6e 64 54 65 78 74 28 26 73 2c 22 20 57 48  pendText(&s," WH
2d000 45 52 45 20 74 79 70 65 20 49 4e 20 28 27 74 61  ERE type IN ('ta
2d010 62 6c 65 27 2c 27 76 69 65 77 27 29 22 0a 20 20  ble','view')".  
2d020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d030 20 20 20 20 22 20 20 20 41 4e 44 20 6e 61 6d 65      "   AND name
2d040 20 4e 4f 54 20 4c 49 4b 45 20 27 73 71 6c 69 74   NOT LIKE 'sqlit
2d050 65 5f 25 27 22 0a 20 20 20 20 20 20 20 20 20 20  e_%'".          
2d060 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20 20              "   
2d070 41 4e 44 20 6e 61 6d 65 20 4c 49 4b 45 20 3f 31  AND name LIKE ?1
2d080 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ", 0);.      }el
2d090 73 65 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65  se{.        appe
2d0a0 6e 64 54 65 78 74 28 26 73 2c 22 20 57 48 45 52  ndText(&s," WHER
2d0b0 45 20 74 79 70 65 3d 27 69 6e 64 65 78 27 22 0a  E type='index'".
2d0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0d0 20 20 20 20 20 20 22 20 20 20 41 4e 44 20 74 62        "   AND tb
2d0e0 6c 5f 6e 61 6d 65 20 4c 49 4b 45 20 3f 31 22 2c  l_name LIKE ?1",
2d0f0 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   0);.      }.   
2d100 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69   }.    rc = sqli
2d110 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
2d120 6d 74 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54  mt);.    appendT
2d130 65 78 74 28 26 73 2c 20 22 20 4f 52 44 45 52 20  ext(&s, " ORDER 
2d140 42 59 20 31 22 2c 20 30 29 3b 0a 20 20 20 20 72  BY 1", 0);.    r
2d150 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
2d160 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 73 2e  are_v2(p->db, s.
2d170 7a 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30  z, -1, &pStmt, 0
2d180 29 3b 0a 20 20 20 20 66 72 65 65 54 65 78 74 28  );.    freeText(
2d190 26 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  &s);.    if( rc 
2d1a0 29 20 72 65 74 75 72 6e 20 73 68 65 6c 6c 44 61  ) return shellDa
2d1b0 74 61 62 61 73 65 45 72 72 6f 72 28 70 2d 3e 64  tabaseError(p->d
2d1c0 62 29 3b 0a 0a 20 20 20 20 2f 2a 20 52 75 6e 20  b);..    /* Run 
2d1d0 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
2d1e0 74 20 70 72 65 70 61 72 65 64 20 62 79 20 74 68  t prepared by th
2d1f0 65 20 61 62 6f 76 65 20 62 6c 6f 63 6b 2e 20 53  e above block. S
2d200 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 73  tore the results
2d210 0a 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 61 72  .    ** as an ar
2d220 72 61 79 20 6f 66 20 6e 75 6c 2d 74 65 72 6d 69  ray of nul-termi
2d230 6e 61 74 65 64 20 73 74 72 69 6e 67 73 20 69 6e  nated strings in
2d240 20 61 7a 52 65 73 75 6c 74 5b 5d 2e 20 20 2a 2f   azResult[].  */
2d250 0a 20 20 20 20 6e 52 6f 77 20 3d 20 6e 41 6c 6c  .    nRow = nAll
2d260 6f 63 20 3d 20 30 3b 0a 20 20 20 20 61 7a 52 65  oc = 0;.    azRe
2d270 73 75 6c 74 20 3d 20 30 3b 0a 20 20 20 20 69 66  sult = 0;.    if
2d280 28 20 6e 41 72 67 3e 31 20 29 7b 0a 20 20 20 20  ( nArg>1 ){.    
2d290 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
2d2a0 65 78 74 28 70 53 74 6d 74 2c 20 31 2c 20 61 7a  ext(pStmt, 1, az
2d2b0 41 72 67 5b 31 5d 2c 20 2d 31 2c 20 53 51 4c 49  Arg[1], -1, SQLI
2d2c0 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
2d2d0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2d2e0 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
2d2f0 74 28 70 53 74 6d 74 2c 20 31 2c 20 22 25 22 2c  t(pStmt, 1, "%",
2d300 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54 41 54   -1, SQLITE_STAT
2d310 49 43 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77  IC);.    }.    w
2d320 68 69 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74  hile( sqlite3_st
2d330 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  ep(pStmt)==SQLIT
2d340 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 69  E_ROW ){.      i
2d350 66 28 20 6e 52 6f 77 3e 3d 6e 41 6c 6c 6f 63 20  f( nRow>=nAlloc 
2d360 29 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20  ){.        char 
2d370 2a 2a 61 7a 4e 65 77 3b 0a 20 20 20 20 20 20 20  **azNew;.       
2d380 20 69 6e 74 20 6e 32 20 3d 20 6e 41 6c 6c 6f 63   int n2 = nAlloc
2d390 2a 32 20 2b 20 31 30 3b 0a 20 20 20 20 20 20 20  *2 + 10;.       
2d3a0 20 61 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65 33   azNew = sqlite3
2d3b0 5f 72 65 61 6c 6c 6f 63 36 34 28 61 7a 52 65 73  _realloc64(azRes
2d3c0 75 6c 74 2c 20 73 69 7a 65 6f 66 28 61 7a 52 65  ult, sizeof(azRe
2d3d0 73 75 6c 74 5b 30 5d 29 2a 6e 32 29 3b 0a 20 20  sult[0])*n2);.  
2d3e0 20 20 20 20 20 20 69 66 28 20 61 7a 4e 65 77 3d        if( azNew=
2d3f0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
2d400 72 63 20 3d 20 73 68 65 6c 6c 4e 6f 6d 65 6d 45  rc = shellNomemE
2d410 72 72 6f 72 28 29 3b 0a 20 20 20 20 20 20 20 20  rror();.        
2d420 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
2d430 20 7d 0a 20 20 20 20 20 20 20 20 6e 41 6c 6c 6f   }.        nAllo
2d440 63 20 3d 20 6e 32 3b 0a 20 20 20 20 20 20 20 20  c = n2;.        
2d450 61 7a 52 65 73 75 6c 74 20 3d 20 61 7a 4e 65 77  azResult = azNew
2d460 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
2d470 61 7a 52 65 73 75 6c 74 5b 6e 52 6f 77 5d 20 3d  azResult[nRow] =
2d480 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
2d490 28 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 63  ("%s", sqlite3_c
2d4a0 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74  olumn_text(pStmt
2d4b0 2c 20 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28  , 0));.      if(
2d4c0 20 30 3d 3d 61 7a 52 65 73 75 6c 74 5b 6e 52 6f   0==azResult[nRo
2d4d0 77 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  w] ){.        rc
2d4e0 20 3d 20 73 68 65 6c 6c 4e 6f 6d 65 6d 45 72 72   = shellNomemErr
2d4f0 6f 72 28 29 3b 0a 20 20 20 20 20 20 20 20 62 72  or();.        br
2d500 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
2d510 20 20 20 6e 52 6f 77 2b 2b 3b 0a 20 20 20 20 7d     nRow++;.    }
2d520 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
2d530 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29  _finalize(pStmt)
2d540 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
2d550 20 20 20 20 20 72 63 20 3d 20 73 68 65 6c 6c 44       rc = shellD
2d560 61 74 61 62 61 73 65 45 72 72 6f 72 28 70 2d 3e  atabaseError(p->
2d570 64 62 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  db);.    }..    
2d580 2f 2a 20 50 72 65 74 74 79 2d 70 72 69 6e 74 20  /* Pretty-print 
2d590 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
2d5a0 61 72 72 61 79 20 61 7a 52 65 73 75 6c 74 5b 5d  array azResult[]
2d5b0 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20 2a   to the output *
2d5c0 2f 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 30 20  /.    if( rc==0 
2d5d0 26 26 20 6e 52 6f 77 3e 30 20 29 7b 0a 20 20 20  && nRow>0 ){.   
2d5e0 20 20 20 69 6e 74 20 6c 65 6e 2c 20 6d 61 78 6c     int len, maxl
2d5f0 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 6e  en = 0;.      in
2d600 74 20 69 2c 20 6a 3b 0a 20 20 20 20 20 20 69 6e  t i, j;.      in
2d610 74 20 6e 50 72 69 6e 74 43 6f 6c 2c 20 6e 50 72  t nPrintCol, nPr
2d620 69 6e 74 52 6f 77 3b 0a 20 20 20 20 20 20 66 6f  intRow;.      fo
2d630 72 28 69 3d 30 3b 20 69 3c 6e 52 6f 77 3b 20 69  r(i=0; i<nRow; i
2d640 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 6c 65 6e  ++){.        len
2d650 20 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a 52 65   = strlen30(azRe
2d660 73 75 6c 74 5b 69 5d 29 3b 0a 20 20 20 20 20 20  sult[i]);.      
2d670 20 20 69 66 28 20 6c 65 6e 3e 6d 61 78 6c 65 6e    if( len>maxlen
2d680 20 29 20 6d 61 78 6c 65 6e 20 3d 20 6c 65 6e 3b   ) maxlen = len;
2d690 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e  .      }.      n
2d6a0 50 72 69 6e 74 43 6f 6c 20 3d 20 38 30 2f 28 6d  PrintCol = 80/(m
2d6b0 61 78 6c 65 6e 2b 32 29 3b 0a 20 20 20 20 20 20  axlen+2);.      
2d6c0 69 66 28 20 6e 50 72 69 6e 74 43 6f 6c 3c 31 20  if( nPrintCol<1 
2d6d0 29 20 6e 50 72 69 6e 74 43 6f 6c 20 3d 20 31 3b  ) nPrintCol = 1;
2d6e0 0a 20 20 20 20 20 20 6e 50 72 69 6e 74 52 6f 77  .      nPrintRow
2d6f0 20 3d 20 28 6e 52 6f 77 20 2b 20 6e 50 72 69 6e   = (nRow + nPrin
2d700 74 43 6f 6c 20 2d 20 31 29 2f 6e 50 72 69 6e 74  tCol - 1)/nPrint
2d710 43 6f 6c 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  Col;.      for(i
2d720 3d 30 3b 20 69 3c 6e 50 72 69 6e 74 52 6f 77 3b  =0; i<nPrintRow;
2d730 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 66   i++){.        f
2d740 6f 72 28 6a 3d 69 3b 20 6a 3c 6e 52 6f 77 3b 20  or(j=i; j<nRow; 
2d750 6a 2b 3d 6e 50 72 69 6e 74 52 6f 77 29 7b 0a 20  j+=nPrintRow){. 
2d760 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a           char *z
2d770 53 70 20 3d 20 6a 3c 6e 50 72 69 6e 74 52 6f 77  Sp = j<nPrintRow
2d780 20 3f 20 22 22 20 3a 20 22 20 20 22 3b 0a 20 20   ? "" : "  ";.  
2d790 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
2d7a0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 25  ntf(p->out, "%s%
2d7b0 2d 2a 73 22 2c 20 7a 53 70 2c 20 6d 61 78 6c 65  -*s", zSp, maxle
2d7c0 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n,.             
2d7d0 20 20 20 20 20 20 20 20 20 61 7a 52 65 73 75 6c           azResul
2d7e0 74 5b 6a 5d 20 3f 20 61 7a 52 65 73 75 6c 74 5b  t[j] ? azResult[
2d7f0 6a 5d 3a 22 22 29 3b 0a 20 20 20 20 20 20 20 20  j]:"");.        
2d800 7d 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  }.        raw_pr
2d810 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e  intf(p->out, "\n
2d820 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ");.      }.    
2d830 7d 0a 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b  }..    for(ii=0;
2d840 20 69 69 3c 6e 52 6f 77 3b 20 69 69 2b 2b 29 20   ii<nRow; ii++) 
2d850 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 7a 52  sqlite3_free(azR
2d860 65 73 75 6c 74 5b 69 69 5d 29 3b 0a 20 20 20 20  esult[ii]);.    
2d870 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 7a 52  sqlite3_free(azR
2d880 65 73 75 6c 74 29 3b 0a 20 20 7d 65 6c 73 65 0a  esult);.  }else.
2d890 0a 20 20 2f 2a 20 42 65 67 69 6e 20 72 65 64 69  .  /* Begin redi
2d8a0 72 65 63 74 69 6e 67 20 6f 75 74 70 75 74 20 74  recting output t
2d8b0 6f 20 74 68 65 20 66 69 6c 65 20 22 74 65 73 74  o the file "test
2d8c0 63 61 73 65 2d 6f 75 74 2e 74 78 74 22 20 2a 2f  case-out.txt" */
2d8d0 0a 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26  .  if( c=='t' &&
2d8e0 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 30 5d   strcmp(azArg[0]
2d8f0 2c 22 74 65 73 74 63 61 73 65 22 29 3d 3d 30 20  ,"testcase")==0 
2d900 29 7b 0a 20 20 20 20 6f 75 74 70 75 74 5f 72 65  ){.    output_re
2d910 73 65 74 28 70 29 3b 0a 20 20 20 20 70 2d 3e 6f  set(p);.    p->o
2d920 75 74 20 3d 20 6f 75 74 70 75 74 5f 66 69 6c 65  ut = output_file
2d930 5f 6f 70 65 6e 28 22 74 65 73 74 63 61 73 65 2d  _open("testcase-
2d940 6f 75 74 2e 74 78 74 22 29 3b 0a 20 20 20 20 69  out.txt");.    i
2d950 66 28 20 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a  f( p->out==0 ){.
2d960 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
2d970 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
2d980 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 27 74 65   cannot open 'te
2d990 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 27 5c  stcase-out.txt'\
2d9a0 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  n");.    }.    i
2d9b0 66 28 20 6e 41 72 67 3e 3d 32 20 29 7b 0a 20 20  f( nArg>=2 ){.  
2d9c0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
2d9d0 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 7a  intf(sizeof(p->z
2d9e0 54 65 73 74 63 61 73 65 29 2c 20 70 2d 3e 7a 54  Testcase), p->zT
2d9f0 65 73 74 63 61 73 65 2c 20 22 25 73 22 2c 20 61  estcase, "%s", a
2da00 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65  zArg[1]);.    }e
2da10 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
2da20 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
2da30 6f 66 28 70 2d 3e 7a 54 65 73 74 63 61 73 65 29  of(p->zTestcase)
2da40 2c 20 70 2d 3e 7a 54 65 73 74 63 61 73 65 2c 20  , p->zTestcase, 
2da50 22 3f 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  "?");.    }.  }e
2da60 6c 73 65 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  lse..#ifndef SQL
2da70 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20  ITE_UNTESTABLE. 
2da80 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26 20 6e   if( c=='t' && n
2da90 3e 3d 38 20 26 26 20 73 74 72 6e 63 6d 70 28 61  >=8 && strncmp(a
2daa0 7a 41 72 67 5b 30 5d 2c 20 22 74 65 73 74 63 74  zArg[0], "testct
2dab0 72 6c 22 2c 20 6e 29 3d 3d 30 20 26 26 20 6e 41  rl", n)==0 && nA
2dac0 72 67 3e 3d 32 20 29 7b 0a 20 20 20 20 73 74 61  rg>=2 ){.    sta
2dad0 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74  tic const struct
2dae0 20 7b 0a 20 20 20 20 20 20 20 63 6f 6e 73 74 20   {.       const 
2daf0 63 68 61 72 20 2a 7a 43 74 72 6c 4e 61 6d 65 3b  char *zCtrlName;
2db00 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 61 20     /* Name of a 
2db10 74 65 73 74 2d 63 6f 6e 74 72 6f 6c 20 6f 70 74  test-control opt
2db20 69 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 20 69 6e  ion */.       in
2db30 74 20 63 74 72 6c 43 6f 64 65 3b 20 20 20 20 20  t ctrlCode;     
2db40 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
2db50 72 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20  r code for that 
2db60 6f 70 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20  option */.    } 
2db70 61 43 74 72 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20  aCtrl[] = {.    
2db80 20 20 7b 20 22 70 72 6e 67 5f 73 61 76 65 22 2c    { "prng_save",
2db90 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
2dba0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e  ITE_TESTCTRL_PRN
2dbb0 47 5f 53 41 56 45 20 20 20 20 20 20 20 20 20 20  G_SAVE          
2dbc0 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
2dbd0 70 72 6e 67 5f 72 65 73 74 6f 72 65 22 2c 20 20  prng_restore",  
2dbe0 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54          SQLITE_T
2dbf0 45 53 54 43 54 52 4c 5f 50 52 4e 47 5f 52 45 53  ESTCTRL_PRNG_RES
2dc00 54 4f 52 45 20 20 20 20 20 20 20 20 20 20 20 7d  TORE           }
2dc10 2c 0a 20 20 20 20 20 20 7b 20 22 70 72 6e 67 5f  ,.      { "prng_
2dc20 72 65 73 65 74 22 2c 20 20 20 20 20 20 20 20 20  reset",         
2dc30 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54     SQLITE_TESTCT
2dc40 52 4c 5f 50 52 4e 47 5f 52 45 53 45 54 20 20 20  RL_PRNG_RESET   
2dc50 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
2dc60 20 20 20 7b 20 22 62 69 74 76 65 63 5f 74 65 73     { "bitvec_tes
2dc70 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 53 51  t",           SQ
2dc80 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 42 49  LITE_TESTCTRL_BI
2dc90 54 56 45 43 5f 54 45 53 54 20 20 20 20 20 20 20  TVEC_TEST       
2dca0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
2dcb0 22 66 61 75 6c 74 5f 69 6e 73 74 61 6c 6c 22 2c  "fault_install",
2dcc0 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
2dcd0 54 45 53 54 43 54 52 4c 5f 46 41 55 4c 54 5f 49  TESTCTRL_FAULT_I
2dce0 4e 53 54 41 4c 4c 20 20 20 20 20 20 20 20 20 20  NSTALL          
2dcf0 7d 2c 0a 20 20 20 20 20 20 7b 20 22 62 65 6e 69  },.      { "beni
2dd00 67 6e 5f 6d 61 6c 6c 6f 63 5f 68 6f 6f 6b 73 22  gn_malloc_hooks"
2dd10 2c 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ,   SQLITE_TESTC
2dd20 54 52 4c 5f 42 45 4e 49 47 4e 5f 4d 41 4c 4c 4f  TRL_BENIGN_MALLO
2dd30 43 5f 48 4f 4f 4b 53 20 20 20 20 7d 2c 0a 20 20  C_HOOKS    },.  
2dd40 20 20 20 20 7b 20 22 70 65 6e 64 69 6e 67 5f 62      { "pending_b
2dd50 79 74 65 22 2c 20 20 20 20 20 20 20 20 20 20 53  yte",          S
2dd60 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50  QLITE_TESTCTRL_P
2dd70 45 4e 44 49 4e 47 5f 42 59 54 45 20 20 20 20 20  ENDING_BYTE     
2dd80 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
2dd90 20 22 61 73 73 65 72 74 22 2c 20 20 20 20 20 20   "assert",      
2dda0 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
2ddb0 5f 54 45 53 54 43 54 52 4c 5f 41 53 53 45 52 54  _TESTCTRL_ASSERT
2ddc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ddd0 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 61 6c 77   },.      { "alw
2dde0 61 79 73 22 2c 20 20 20 20 20 20 20 20 20 20 20  ays",           
2ddf0 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54       SQLITE_TEST
2de00 43 54 52 4c 5f 41 4c 57 41 59 53 20 20 20 20 20  CTRL_ALWAYS     
2de10 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
2de20 20 20 20 20 20 7b 20 22 72 65 73 65 72 76 65 22       { "reserve"
2de30 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
2de40 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
2de50 52 45 53 45 52 56 45 20 20 20 20 20 20 20 20 20  RESERVE         
2de60 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
2de70 7b 20 22 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  { "optimizations
2de80 22 2c 20 20 20 20 20 20 20 20 20 53 51 4c 49 54  ",         SQLIT
2de90 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d  E_TESTCTRL_OPTIM
2dea0 49 5a 41 54 49 4f 4e 53 20 20 20 20 20 20 20 20  IZATIONS        
2deb0 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 69 73    },.      { "is
2dec0 6b 65 79 77 6f 72 64 22 2c 20 20 20 20 20 20 20  keyword",       
2ded0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53        SQLITE_TES
2dee0 54 43 54 52 4c 5f 49 53 4b 45 59 57 4f 52 44 20  TCTRL_ISKEYWORD 
2def0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
2df00 20 20 20 20 20 20 7b 20 22 62 79 74 65 6f 72 64        { "byteord
2df10 65 72 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  er",            
2df20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
2df30 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 20 20  _BYTEORDER      
2df40 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
2df50 20 7b 20 22 6e 65 76 65 72 5f 63 6f 72 72 75 70   { "never_corrup
2df60 74 22 2c 20 20 20 20 20 20 20 20 20 53 51 4c 49  t",         SQLI
2df70 54 45 5f 54 45 53 54 43 54 52 4c 5f 4e 45 56 45  TE_TESTCTRL_NEVE
2df80 52 5f 43 4f 52 52 55 50 54 20 20 20 20 20 20 20  R_CORRUPT       
2df90 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 69     },.      { "i
2dfa0 6d 70 6f 73 74 65 72 22 2c 20 20 20 20 20 20 20  mposter",       
2dfb0 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45         SQLITE_TE
2dfc0 53 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52 20  STCTRL_IMPOSTER 
2dfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
2dfe0 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20  .    };.    int 
2dff0 74 65 73 74 63 74 72 6c 20 3d 20 2d 31 3b 0a 20  testctrl = -1;. 
2e000 20 20 20 69 6e 74 20 72 63 32 20 3d 20 30 3b 0a     int rc2 = 0;.
2e010 20 20 20 20 69 6e 74 20 69 2c 20 6e 32 3b 0a 20      int i, n2;. 
2e020 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29     open_db(p, 0)
2e030 3b 0a 0a 20 20 20 20 2f 2a 20 63 6f 6e 76 65 72  ;..    /* conver
2e040 74 20 74 65 73 74 63 74 72 6c 20 74 65 78 74 20  t testctrl text 
2e050 6f 70 74 69 6f 6e 20 74 6f 20 76 61 6c 75 65 2e  option to value.
2e060 20 61 6c 6c 6f 77 20 61 6e 79 20 75 6e 69 71 75   allow any uniqu
2e070 65 20 70 72 65 66 69 78 0a 20 20 20 20 2a 2a 20  e prefix.    ** 
2e080 6f 66 20 74 68 65 20 6f 70 74 69 6f 6e 20 6e 61  of the option na
2e090 6d 65 2c 20 6f 72 20 61 20 6e 75 6d 65 72 69 63  me, or a numeric
2e0a0 61 6c 20 76 61 6c 75 65 2e 20 2a 2f 0a 20 20 20  al value. */.   
2e0b0 20 6e 32 20 3d 20 73 74 72 6c 65 6e 33 30 28 61   n2 = strlen30(a
2e0c0 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 66 6f  zArg[1]);.    fo
2e0d0 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69  r(i=0; i<ArraySi
2e0e0 7a 65 28 61 43 74 72 6c 29 3b 20 69 2b 2b 29 7b  ze(aCtrl); i++){
2e0f0 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 6e 63  .      if( strnc
2e100 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 20 61 43 74  mp(azArg[1], aCt
2e110 72 6c 5b 69 5d 2e 7a 43 74 72 6c 4e 61 6d 65 2c  rl[i].zCtrlName,
2e120 20 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20   n2)==0 ){.     
2e130 20 20 20 69 66 28 20 74 65 73 74 63 74 72 6c 3c     if( testctrl<
2e140 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 74  0 ){.          t
2e150 65 73 74 63 74 72 6c 20 3d 20 61 43 74 72 6c 5b  estctrl = aCtrl[
2e160 69 5d 2e 63 74 72 6c 43 6f 64 65 3b 0a 20 20 20  i].ctrlCode;.   
2e170 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
2e180 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
2e190 66 28 73 74 64 65 72 72 2c 20 22 61 6d 62 69 67  f(stderr, "ambig
2e1a0 75 6f 75 73 20 6f 70 74 69 6f 6e 20 6e 61 6d 65  uous option name
2e1b0 3a 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41  : \"%s\"\n", azA
2e1c0 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[1]);.        
2e1d0 20 20 74 65 73 74 63 74 72 6c 20 3d 20 2d 31 3b    testctrl = -1;
2e1e0 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
2e1f0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2e200 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
2e210 28 20 74 65 73 74 63 74 72 6c 3c 30 20 29 20 74  ( testctrl<0 ) t
2e220 65 73 74 63 74 72 6c 20 3d 20 28 69 6e 74 29 69  estctrl = (int)i
2e230 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72  ntegerValue(azAr
2e240 67 5b 31 5d 29 3b 0a 20 20 20 20 69 66 28 20 28  g[1]);.    if( (
2e250 74 65 73 74 63 74 72 6c 3c 53 51 4c 49 54 45 5f  testctrl<SQLITE_
2e260 54 45 53 54 43 54 52 4c 5f 46 49 52 53 54 29 20  TESTCTRL_FIRST) 
2e270 7c 7c 20 28 74 65 73 74 63 74 72 6c 3e 53 51 4c  || (testctrl>SQL
2e280 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4c 41 53  ITE_TESTCTRL_LAS
2e290 54 29 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  T) ){.      utf8
2e2a0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
2e2b0 45 72 72 6f 72 3a 20 69 6e 76 61 6c 69 64 20 74  Error: invalid t
2e2c0 65 73 74 63 74 72 6c 20 6f 70 74 69 6f 6e 3a 20  estctrl option: 
2e2d0 25 73 5c 6e 22 2c 20 61 7a 41 72 67 5b 31 5d 29  %s\n", azArg[1])
2e2e0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2e2f0 20 20 20 73 77 69 74 63 68 28 74 65 73 74 63 74     switch(testct
2e300 72 6c 29 7b 0a 0a 20 20 20 20 20 20 20 20 2f 2a  rl){..        /*
2e310 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
2e320 6e 74 72 6f 6c 28 69 6e 74 2c 20 64 62 2c 20 69  ntrol(int, db, i
2e330 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 63  nt) */.        c
2e340 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
2e350 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
2e360 53 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  S:.        case 
2e370 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
2e380 52 45 53 45 52 56 45 3a 0a 20 20 20 20 20 20 20  RESERVE:.       
2e390 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 33 20 29     if( nArg==3 )
2e3a0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  {.            in
2e3b0 74 20 6f 70 74 20 3d 20 28 69 6e 74 29 73 74 72  t opt = (int)str
2e3c0 74 6f 6c 28 61 7a 41 72 67 5b 32 5d 2c 20 30 2c  tol(azArg[2], 0,
2e3d0 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
2e3e0 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74   rc2 = sqlite3_t
2e3f0 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74  est_control(test
2e400 63 74 72 6c 2c 20 70 2d 3e 64 62 2c 20 6f 70 74  ctrl, p->db, opt
2e410 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  );.            r
2e420 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
2e430 2c 20 22 25 64 20 28 30 78 25 30 38 78 29 5c 6e  , "%d (0x%08x)\n
2e440 22 2c 20 72 63 32 2c 20 72 63 32 29 3b 0a 20 20  ", rc2, rc2);.  
2e450 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
2e460 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66  .            utf
2e470 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
2e480 22 45 72 72 6f 72 3a 20 74 65 73 74 63 74 72 6c  "Error: testctrl
2e490 20 25 73 20 74 61 6b 65 73 20 61 20 73 69 6e 67   %s takes a sing
2e4a0 6c 65 20 69 6e 74 20 6f 70 74 69 6f 6e 5c 6e 22  le int option\n"
2e4b0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2e4c0 20 20 20 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b        azArg[1]);
2e4d0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
2e4e0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20         break;.. 
2e4f0 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65         /* sqlite
2e500 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69  3_test_control(i
2e510 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 63  nt) */.        c
2e520 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
2e530 54 52 4c 5f 50 52 4e 47 5f 53 41 56 45 3a 0a 20  TRL_PRNG_SAVE:. 
2e540 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49         case SQLI
2e550 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e 47  TE_TESTCTRL_PRNG
2e560 5f 52 45 53 54 4f 52 45 3a 0a 20 20 20 20 20 20  _RESTORE:.      
2e570 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45    case SQLITE_TE
2e580 53 54 43 54 52 4c 5f 50 52 4e 47 5f 52 45 53 45  STCTRL_PRNG_RESE
2e590 54 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  T:.        case 
2e5a0 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
2e5b0 42 59 54 45 4f 52 44 45 52 3a 0a 20 20 20 20 20  BYTEORDER:.     
2e5c0 20 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32       if( nArg==2
2e5d0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
2e5e0 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74 65  rc2 = sqlite3_te
2e5f0 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63  st_control(testc
2e600 74 72 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20  trl);.          
2e610 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
2e620 6f 75 74 2c 20 22 25 64 20 28 30 78 25 30 38 78  out, "%d (0x%08x
2e630 29 5c 6e 22 2c 20 72 63 32 2c 20 72 63 32 29 3b  )\n", rc2, rc2);
2e640 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
2e650 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e {.            
2e660 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
2e670 72 72 2c 22 45 72 72 6f 72 3a 20 74 65 73 74 63  rr,"Error: testc
2e680 74 72 6c 20 25 73 20 74 61 6b 65 73 20 6e 6f 20  trl %s takes no 
2e690 6f 70 74 69 6f 6e 73 5c 6e 22 2c 0a 20 20 20 20  options\n",.    
2e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6b0 20 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20      azArg[1]);. 
2e6c0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
2e6d0 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20       break;..   
2e6e0 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f       /* sqlite3_
2e6f0 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74  test_control(int
2e700 2c 20 75 69 6e 74 29 20 2a 2f 0a 20 20 20 20 20  , uint) */.     
2e710 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54     case SQLITE_T
2e720 45 53 54 43 54 52 4c 5f 50 45 4e 44 49 4e 47 5f  ESTCTRL_PENDING_
2e730 42 59 54 45 3a 0a 20 20 20 20 20 20 20 20 20 20  BYTE:.          
2e740 69 66 28 20 6e 41 72 67 3d 3d 33 20 29 7b 0a 20  if( nArg==3 ){. 
2e750 20 20 20 20 20 20 20 20 20 20 20 75 6e 73 69 67             unsig
2e760 6e 65 64 20 69 6e 74 20 6f 70 74 20 3d 20 28 75  ned int opt = (u
2e770 6e 73 69 67 6e 65 64 20 69 6e 74 29 69 6e 74 65  nsigned int)inte
2e780 67 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 32  gerValue(azArg[2
2e790 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ]);.            
2e7a0 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74 65  rc2 = sqlite3_te
2e7b0 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63  st_control(testc
2e7c0 74 72 6c 2c 20 6f 70 74 29 3b 0a 20 20 20 20 20  trl, opt);.     
2e7d0 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
2e7e0 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 28 30  f(p->out, "%d (0
2e7f0 78 25 30 38 78 29 5c 6e 22 2c 20 72 63 32 2c 20  x%08x)\n", rc2, 
2e800 72 63 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  rc2);.          
2e810 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20  } else {.       
2e820 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
2e830 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20  (stderr,"Error: 
2e840 74 65 73 74 63 74 72 6c 20 25 73 20 74 61 6b 65  testctrl %s take
2e850 73 20 61 20 73 69 6e 67 6c 65 20 75 6e 73 69 67  s a single unsig
2e860 6e 65 64 22 0a 20 20 20 20 20 20 20 20 20 20 20  ned".           
2e870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e880 22 20 69 6e 74 20 6f 70 74 69 6f 6e 5c 6e 22 2c  " int option\n",
2e890 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
2e8a0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2e8b0 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20    break;..      
2e8c0 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 74 65 73    /* sqlite3_tes
2e8d0 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74 2c 20 69  t_control(int, i
2e8e0 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 63  nt) */.        c
2e8f0 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
2e900 54 52 4c 5f 41 53 53 45 52 54 3a 0a 20 20 20 20  TRL_ASSERT:.    
2e910 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
2e920 54 45 53 54 43 54 52 4c 5f 41 4c 57 41 59 53 3a  TESTCTRL_ALWAYS:
2e930 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51  .        case SQ
2e940 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4e 45  LITE_TESTCTRL_NE
2e950 56 45 52 5f 43 4f 52 52 55 50 54 3a 0a 20 20 20  VER_CORRUPT:.   
2e960 20 20 20 20 20 20 20 69 66 28 20 6e 41 72 67 3d         if( nArg=
2e970 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =3 ){.          
2e980 20 20 69 6e 74 20 6f 70 74 20 3d 20 62 6f 6f 6c    int opt = bool
2e990 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 32  eanValue(azArg[2
2e9a0 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ]);.            
2e9b0 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74 65  rc2 = sqlite3_te
2e9c0 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63  st_control(testc
2e9d0 74 72 6c 2c 20 6f 70 74 29 3b 0a 20 20 20 20 20  trl, opt);.     
2e9e0 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
2e9f0 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 28 30  f(p->out, "%d (0
2ea00 78 25 30 38 78 29 5c 6e 22 2c 20 72 63 32 2c 20  x%08x)\n", rc2, 
2ea10 72 63 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  rc2);.          
2ea20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20  } else {.       
2ea30 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
2ea40 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20  (stderr,"Error: 
2ea50 74 65 73 74 63 74 72 6c 20 25 73 20 74 61 6b 65  testctrl %s take
2ea60 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 20 6f  s a single int o
2ea70 70 74 69 6f 6e 5c 6e 22 2c 0a 20 20 20 20 20 20  ption\n",.      
2ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea90 20 20 20 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b        azArg[1]);
2eaa0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
2eab0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20         break;.. 
2eac0 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65         /* sqlite
2ead0 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69  3_test_control(i
2eae0 6e 74 2c 20 63 68 61 72 20 2a 29 20 2a 2f 0a 23  nt, char *) */.#
2eaf0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 4b  ifdef SQLITE_N_K
2eb00 45 59 57 4f 52 44 0a 20 20 20 20 20 20 20 20 63  EYWORD.        c
2eb10 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
2eb20 54 52 4c 5f 49 53 4b 45 59 57 4f 52 44 3a 0a 20  TRL_ISKEYWORD:. 
2eb30 20 20 20 20 20 20 20 20 20 69 66 28 20 6e 41 72           if( nAr
2eb40 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20  g==3 ){.        
2eb50 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
2eb60 6f 70 74 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a  opt = azArg[2];.
2eb70 20 20 20 20 20 20 20 20 20 20 20 20 72 63 32 20              rc2 
2eb80 3d 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  = sqlite3_test_c
2eb90 6f 6e 74 72 6f 6c 28 74 65 73 74 63 74 72 6c 2c  ontrol(testctrl,
2eba0 20 6f 70 74 29 3b 0a 20 20 20 20 20 20 20 20 20   opt);.         
2ebb0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
2ebc0 3e 6f 75 74 2c 20 22 25 64 20 28 30 78 25 30 38  >out, "%d (0x%08
2ebd0 78 29 5c 6e 22 2c 20 72 63 32 2c 20 72 63 32 29  x)\n", rc2, rc2)
2ebe0 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ;.          } el
2ebf0 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
2ec00 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
2ec10 65 72 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  err,.           
2ec20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 45 72               "Er
2ec30 72 6f 72 3a 20 74 65 73 74 63 74 72 6c 20 25 73  ror: testctrl %s
2ec40 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65 20   takes a single 
2ec50 63 68 61 72 20 2a 20 6f 70 74 69 6f 6e 5c 6e 22  char * option\n"
2ec60 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2ec70 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67 5b            azArg[
2ec80 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  1]);.          }
2ec90 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
2eca0 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  ;.#endif..      
2ecb0 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45    case SQLITE_TE
2ecc0 53 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52 3a  STCTRL_IMPOSTER:
2ecd0 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6e  .          if( n
2ece0 41 72 67 3d 3d 35 20 29 7b 0a 20 20 20 20 20 20  Arg==5 ){.      
2ecf0 20 20 20 20 20 20 72 63 32 20 3d 20 73 71 6c 69        rc2 = sqli
2ed00 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
2ed10 28 74 65 73 74 63 74 72 6c 2c 20 70 2d 3e 64 62  (testctrl, p->db
2ed20 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2ed30 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72              azAr
2ed40 67 5b 32 5d 2c 0a 20 20 20 20 20 20 20 20 20 20  g[2],.          
2ed50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed60 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41  integerValue(azA
2ed70 72 67 5b 33 5d 29 2c 0a 20 20 20 20 20 20 20 20  rg[3]),.        
2ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed90 20 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61    integerValue(a
2eda0 7a 41 72 67 5b 34 5d 29 29 3b 0a 20 20 20 20 20  zArg[4]));.     
2edb0 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
2edc0 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 28 30  f(p->out, "%d (0
2edd0 78 25 30 38 78 29 5c 6e 22 2c 20 72 63 32 2c 20  x%08x)\n", rc2, 
2ede0 72 63 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  rc2);.          
2edf0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
2ee00 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
2ee10 64 65 72 72 2c 22 55 73 61 67 65 3a 20 2e 74 65  derr,"Usage: .te
2ee20 73 74 63 74 72 6c 20 69 6d 70 6f 73 74 65 72 20  stctrl imposter 
2ee30 64 62 4e 61 6d 65 20 6f 6e 6f 66 66 20 74 6e 75  dbName onoff tnu
2ee40 6d 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20  m\n");.         
2ee50 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65   }.          bre
2ee60 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
2ee70 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  e SQLITE_TESTCTR
2ee80 4c 5f 42 49 54 56 45 43 5f 54 45 53 54 3a 0a 20  L_BITVEC_TEST:. 
2ee90 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49         case SQLI
2eea0 54 45 5f 54 45 53 54 43 54 52 4c 5f 46 41 55 4c  TE_TESTCTRL_FAUL
2eeb0 54 5f 49 4e 53 54 41 4c 4c 3a 0a 20 20 20 20 20  T_INSTALL:.     
2eec0 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54     case SQLITE_T
2eed0 45 53 54 43 54 52 4c 5f 42 45 4e 49 47 4e 5f 4d  ESTCTRL_BENIGN_M
2eee0 41 4c 4c 4f 43 5f 48 4f 4f 4b 53 3a 0a 20 20 20  ALLOC_HOOKS:.   
2eef0 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20       default:.  
2ef00 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
2ef10 6e 74 66 28 73 74 64 65 72 72 2c 0a 20 20 20 20  ntf(stderr,.    
2ef20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef30 20 20 22 45 72 72 6f 72 3a 20 43 4c 49 20 73 75    "Error: CLI su
2ef40 70 70 6f 72 74 20 66 6f 72 20 74 65 73 74 63 74  pport for testct
2ef50 72 6c 20 25 73 20 6e 6f 74 20 69 6d 70 6c 65 6d  rl %s not implem
2ef60 65 6e 74 65 64 5c 6e 22 2c 0a 20 20 20 20 20 20  ented\n",.      
2ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef80 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20  azArg[1]);.     
2ef90 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2efa0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
2efb0 65 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  e.#endif /* !def
2efc0 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54 45  ined(SQLITE_UNTE
2efd0 53 54 41 42 4c 45 29 20 2a 2f 0a 0a 20 20 69 66  STABLE) */..  if
2efe0 28 20 63 3d 3d 27 74 27 20 26 26 20 6e 3e 34 20  ( c=='t' && n>4 
2eff0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
2f000 5b 30 5d 2c 20 22 74 69 6d 65 6f 75 74 22 2c 20  [0], "timeout", 
2f010 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 6f 70 65  n)==0 ){.    ope
2f020 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20  n_db(p, 0);.    
2f030 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d  sqlite3_busy_tim
2f040 65 6f 75 74 28 70 2d 3e 64 62 2c 20 6e 41 72 67  eout(p->db, nArg
2f050 3e 3d 32 20 3f 20 28 69 6e 74 29 69 6e 74 65 67  >=2 ? (int)integ
2f060 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d  erValue(azArg[1]
2f070 29 20 3a 20 30 29 3b 0a 20 20 7d 65 6c 73 65 0a  ) : 0);.  }else.
2f080 0a 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26  .  if( c=='t' &&
2f090 20 6e 3e 3d 35 20 26 26 20 73 74 72 6e 63 6d 70   n>=5 && strncmp
2f0a0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 74 69 6d 65  (azArg[0], "time
2f0b0 72 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  r", n)==0 ){.   
2f0c0 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a   if( nArg==2 ){.
2f0d0 20 20 20 20 20 20 65 6e 61 62 6c 65 54 69 6d 65        enableTime
2f0e0 72 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65  r = booleanValue
2f0f0 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20  (azArg[1]);.    
2f100 20 20 69 66 28 20 65 6e 61 62 6c 65 54 69 6d 65    if( enableTime
2f110 72 20 26 26 20 21 48 41 53 5f 54 49 4d 45 52 20  r && !HAS_TIMER 
2f120 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  ){.        raw_p
2f130 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
2f140 72 72 6f 72 3a 20 74 69 6d 65 72 20 6e 6f 74 20  rror: timer not 
2f150 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 74 68 69  available on thi
2f160 73 20 73 79 73 74 65 6d 2e 5c 6e 22 29 3b 0a 20  s system.\n");. 
2f170 20 20 20 20 20 20 20 65 6e 61 62 6c 65 54 69 6d         enableTim
2f180 65 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  er = 0;.      }.
2f190 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2f1a0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
2f1b0 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 74 69 6d  rr, "Usage: .tim
2f1c0 65 72 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20  er on|off\n");. 
2f1d0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2f1e0 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66   }.  }else..  if
2f1f0 28 20 63 3d 3d 27 74 27 20 26 26 20 73 74 72 6e  ( c=='t' && strn
2f200 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 74  cmp(azArg[0], "t
2f210 72 61 63 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  race", n)==0 ){.
2f220 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
2f230 29 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 21  );.    if( nArg!
2f240 3d 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  =2 ){.      raw_
2f250 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2f260 55 73 61 67 65 3a 20 2e 74 72 61 63 65 20 46 49  Usage: .trace FI
2f270 4c 45 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20  LE|off\n");.    
2f280 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
2f290 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
2f2a0 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20  d_exit;.    }.  
2f2b0 20 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c    output_file_cl
2f2c0 6f 73 65 28 70 2d 3e 74 72 61 63 65 4f 75 74 29  ose(p->traceOut)
2f2d0 3b 0a 20 20 20 20 70 2d 3e 74 72 61 63 65 4f 75  ;.    p->traceOu
2f2e0 74 20 3d 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f  t = output_file_
2f2f0 6f 70 65 6e 28 61 7a 41 72 67 5b 31 5d 29 3b 0a  open(azArg[1]);.
2f300 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2f310 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 29 20  ITE_OMIT_TRACE) 
2f320 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
2f330 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
2f340 5f 50 4f 49 4e 54 29 0a 20 20 20 20 69 66 28 20  _POINT).    if( 
2f350 70 2d 3e 74 72 61 63 65 4f 75 74 3d 3d 30 20 29  p->traceOut==0 )
2f360 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
2f370 74 72 61 63 65 5f 76 32 28 70 2d 3e 64 62 2c 20  trace_v2(p->db, 
2f380 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 7d 65  0, 0, 0);.    }e
2f390 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
2f3a0 65 33 5f 74 72 61 63 65 5f 76 32 28 70 2d 3e 64  e3_trace_v2(p->d
2f3b0 62 2c 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  b, SQLITE_TRACE_
2f3c0 53 54 4d 54 2c 20 73 71 6c 5f 74 72 61 63 65 5f  STMT, sql_trace_
2f3d0 63 61 6c 6c 62 61 63 6b 2c 70 2d 3e 74 72 61 63  callback,p->trac
2f3e0 65 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  eOut);.    }.#en
2f3f0 64 69 66 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66  dif.  }else..#if
2f400 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
2f410 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 69 66  HENTICATION.  if
2f420 28 20 63 3d 3d 27 75 27 20 26 26 20 73 74 72 6e  ( c=='u' && strn
2f430 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 75  cmp(azArg[0], "u
2f440 73 65 72 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ser", n)==0 ){. 
2f450 20 20 20 69 66 28 20 6e 41 72 67 3c 32 20 29 7b     if( nArg<2 ){
2f460 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
2f470 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
2f480 3a 20 2e 75 73 65 72 20 53 55 42 43 4f 4d 4d 41  : .user SUBCOMMA
2f490 4e 44 20 2e 2e 2e 5c 6e 22 29 3b 0a 20 20 20 20  ND ...\n");.    
2f4a0 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
2f4b0 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
2f4c0 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20  d_exit;.    }.  
2f4d0 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
2f4e0 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28  .    if( strcmp(
2f4f0 61 7a 41 72 67 5b 31 5d 2c 22 6c 6f 67 69 6e 22  azArg[1],"login"
2f500 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  )==0 ){.      if
2f510 28 20 6e 41 72 67 21 3d 34 20 29 7b 0a 20 20 20  ( nArg!=4 ){.   
2f520 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
2f530 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
2f540 2e 75 73 65 72 20 6c 6f 67 69 6e 20 55 53 45 52  .user login USER
2f550 20 50 41 53 53 57 4f 52 44 5c 6e 22 29 3b 0a 20   PASSWORD\n");. 
2f560 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
2f570 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
2f580 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
2f590 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63 20       }.      rc 
2f5a0 3d 20 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 61  = sqlite3_user_a
2f5b0 75 74 68 65 6e 74 69 63 61 74 65 28 70 2d 3e 64  uthenticate(p->d
2f5c0 62 2c 20 61 7a 41 72 67 5b 32 5d 2c 20 61 7a 41  b, azArg[2], azA
2f5d0 72 67 5b 33 5d 2c 0a 20 20 20 20 20 20 20 20 20  rg[3],.         
2f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5f0 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
2f600 73 74 72 6c 65 6e 28 61 7a 41 72 67 5b 33 5d 29  strlen(azArg[3])
2f610 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 20  );.      if( rc 
2f620 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
2f630 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2f640 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66  Authentication f
2f650 61 69 6c 65 64 20 66 6f 72 20 75 73 65 72 20 25  ailed for user %
2f660 73 5c 6e 22 2c 20 61 7a 41 72 67 5b 32 5d 29 3b  s\n", azArg[2]);
2f670 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b  .        rc = 1;
2f680 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
2f690 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a  se if( strcmp(az
2f6a0 41 72 67 5b 31 5d 2c 22 61 64 64 22 29 3d 3d 30  Arg[1],"add")==0
2f6b0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 41   ){.      if( nA
2f6c0 72 67 21 3d 35 20 29 7b 0a 20 20 20 20 20 20 20  rg!=5 ){.       
2f6d0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
2f6e0 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 75 73 65  rr, "Usage: .use
2f6f0 72 20 61 64 64 20 55 53 45 52 20 50 41 53 53 57  r add USER PASSW
2f700 4f 52 44 20 49 53 41 44 4d 49 4e 5c 6e 22 29 3b  ORD ISADMIN\n");
2f710 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b  .        rc = 1;
2f720 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65  .        goto me
2f730 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
2f740 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
2f750 63 20 3d 20 73 71 6c 69 74 65 33 5f 75 73 65 72  c = sqlite3_user
2f760 5f 61 64 64 28 70 2d 3e 64 62 2c 20 61 7a 41 72  _add(p->db, azAr
2f770 67 5b 32 5d 2c 0a 20 20 20 20 20 20 20 20 20 20  g[2],.          
2f780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f790 20 20 61 7a 41 72 67 5b 33 5d 2c 20 28 69 6e 74    azArg[3], (int
2f7a0 29 73 74 72 6c 65 6e 28 61 7a 41 72 67 5b 33 5d  )strlen(azArg[3]
2f7b0 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
2f7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
2f7d0 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72  ooleanValue(azAr
2f7e0 67 5b 34 5d 29 29 3b 0a 20 20 20 20 20 20 69 66  g[4]));.      if
2f7f0 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20  ( rc ){.        
2f800 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
2f810 72 2c 20 22 55 73 65 72 2d 41 64 64 20 66 61 69  r, "User-Add fai
2f820 6c 65 64 3a 20 25 64 5c 6e 22 2c 20 72 63 29 3b  led: %d\n", rc);
2f830 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b  .        rc = 1;
2f840 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
2f850 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a  se if( strcmp(az
2f860 41 72 67 5b 31 5d 2c 22 65 64 69 74 22 29 3d 3d  Arg[1],"edit")==
2f870 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e  0 ){.      if( n
2f880 41 72 67 21 3d 35 20 29 7b 0a 20 20 20 20 20 20  Arg!=5 ){.      
2f890 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
2f8a0 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 75 73  err, "Usage: .us
2f8b0 65 72 20 65 64 69 74 20 55 53 45 52 20 50 41 53  er edit USER PAS
2f8c0 53 57 4f 52 44 20 49 53 41 44 4d 49 4e 5c 6e 22  SWORD ISADMIN\n"
2f8d0 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
2f8e0 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  1;.        goto 
2f8f0 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
2f900 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
2f910 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 75 73   rc = sqlite3_us
2f920 65 72 5f 63 68 61 6e 67 65 28 70 2d 3e 64 62 2c  er_change(p->db,
2f930 20 61 7a 41 72 67 5b 32 5d 2c 0a 20 20 20 20 20   azArg[2],.     
2f940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f950 20 20 20 20 20 20 20 20 20 61 7a 41 72 67 5b 33           azArg[3
2f960 5d 2c 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 61  ], (int)strlen(a
2f970 7a 41 72 67 5b 33 5d 29 2c 0a 20 20 20 20 20 20  zArg[3]),.      
2f980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f990 20 20 20 20 20 20 20 20 62 6f 6f 6c 65 61 6e 56          booleanV
2f9a0 61 6c 75 65 28 61 7a 41 72 67 5b 34 5d 29 29 3b  alue(azArg[4]));
2f9b0 0a 20 20 20 20 20 20 69 66 28 20 72 63 20 29 7b  .      if( rc ){
2f9c0 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
2f9d0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 65  ntf(stderr, "Use
2f9e0 72 2d 45 64 69 74 20 66 61 69 6c 65 64 3a 20 25  r-Edit failed: %
2f9f0 64 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20  d\n", rc);.     
2fa00 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
2fa10 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28   }.    }else if(
2fa20 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d   strcmp(azArg[1]
2fa30 2c 22 64 65 6c 65 74 65 22 29 3d 3d 30 20 29 7b  ,"delete")==0 ){
2fa40 0a 20 20 20 20 20 20 69 66 28 20 6e 41 72 67 21  .      if( nArg!
2fa50 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  =3 ){.        ra
2fa60 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
2fa70 20 22 55 73 61 67 65 3a 20 2e 75 73 65 72 20 64   "Usage: .user d
2fa80 65 6c 65 74 65 20 55 53 45 52 5c 6e 22 29 3b 0a  elete USER\n");.
2fa90 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
2faa0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74          goto met
2fab0 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
2fac0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63        }.      rc
2fad0 20 3d 20 73 71 6c 69 74 65 33 5f 75 73 65 72 5f   = sqlite3_user_
2fae0 64 65 6c 65 74 65 28 70 2d 3e 64 62 2c 20 61 7a  delete(p->db, az
2faf0 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20 20 20 69  Arg[2]);.      i
2fb00 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20  f( rc ){.       
2fb10 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
2fb20 72 72 2c 20 22 55 73 65 72 2d 44 65 6c 65 74 65  rr, "User-Delete
2fb30 20 66 61 69 6c 65 64 3a 20 25 64 5c 6e 22 2c 20   failed: %d\n", 
2fb40 72 63 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  rc);.        rc 
2fb50 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 1;.      }.   
2fb60 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61   }else{.      ra
2fb70 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
2fb80 20 22 55 73 61 67 65 3a 20 2e 75 73 65 72 20 6c   "Usage: .user l
2fb90 6f 67 69 6e 7c 61 64 64 7c 65 64 69 74 7c 64 65  ogin|add|edit|de
2fba0 6c 65 74 65 20 2e 2e 2e 5c 6e 22 29 3b 0a 20 20  lete ...\n");.  
2fbb0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2fbc0 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
2fbd0 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a  and_exit;.    }.
2fbe0 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f    }else.#endif /
2fbf0 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  * SQLITE_USER_AU
2fc00 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a  THENTICATION */.
2fc10 0a 20 20 69 66 28 20 63 3d 3d 27 76 27 20 26 26  .  if( c=='v' &&
2fc20 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
2fc30 5d 2c 20 22 76 65 72 73 69 6f 6e 22 2c 20 6e 29  ], "version", n)
2fc40 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f  ==0 ){.    utf8_
2fc50 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2fc60 53 51 4c 69 74 65 20 25 73 20 25 73 5c 6e 22 20  SQLite %s %s\n" 
2fc70 2f 2a 65 78 74 72 61 2d 76 65 72 73 69 6f 6e 2d  /*extra-version-
2fc80 69 6e 66 6f 2a 2f 2c 0a 20 20 20 20 20 20 20 20  info*/,.        
2fc90 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69  sqlite3_libversi
2fca0 6f 6e 28 29 2c 20 73 71 6c 69 74 65 33 5f 73 6f  on(), sqlite3_so
2fcb0 75 72 63 65 69 64 28 29 29 3b 0a 20 20 7d 65 6c  urceid());.  }el
2fcc0 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 76 27  se..  if( c=='v'
2fcd0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
2fce0 67 5b 30 5d 2c 20 22 76 66 73 69 6e 66 6f 22 2c  g[0], "vfsinfo",
2fcf0 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f   n)==0 ){.    co
2fd00 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d  nst char *zDbNam
2fd10 65 20 3d 20 6e 41 72 67 3d 3d 32 20 3f 20 61 7a  e = nArg==2 ? az
2fd20 41 72 67 5b 31 5d 20 3a 20 22 6d 61 69 6e 22 3b  Arg[1] : "main";
2fd30 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73  .    sqlite3_vfs
2fd40 20 2a 70 56 66 73 20 3d 20 30 3b 0a 20 20 20 20   *pVfs = 0;.    
2fd50 69 66 28 20 70 2d 3e 64 62 20 29 7b 0a 20 20 20  if( p->db ){.   
2fd60 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f     sqlite3_file_
2fd70 63 6f 6e 74 72 6f 6c 28 70 2d 3e 64 62 2c 20 7a  control(p->db, z
2fd80 44 62 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46  DbName, SQLITE_F
2fd90 43 4e 54 4c 5f 56 46 53 5f 50 4f 49 4e 54 45 52  CNTL_VFS_POINTER
2fda0 2c 20 26 70 56 66 73 29 3b 0a 20 20 20 20 20 20  , &pVfs);.      
2fdb0 69 66 28 20 70 56 66 73 20 29 7b 0a 20 20 20 20  if( pVfs ){.    
2fdc0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2fdd0 70 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 7a 4e 61  p->out, "vfs.zNa
2fde0 6d 65 20 20 20 20 20 20 3d 20 5c 22 25 73 5c 22  me      = \"%s\"
2fdf0 5c 6e 22 2c 20 70 56 66 73 2d 3e 7a 4e 61 6d 65  \n", pVfs->zName
2fe00 29 3b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  );.        raw_p
2fe10 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76  rintf(p->out, "v
2fe20 66 73 2e 69 56 65 72 73 69 6f 6e 20 20 20 3d 20  fs.iVersion   = 
2fe30 25 64 5c 6e 22 2c 20 70 56 66 73 2d 3e 69 56 65  %d\n", pVfs->iVe
2fe40 72 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20  rsion);.        
2fe50 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
2fe60 74 2c 20 22 76 66 73 2e 73 7a 4f 73 46 69 6c 65  t, "vfs.szOsFile
2fe70 20 20 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73     = %d\n", pVfs
2fe80 2d 3e 73 7a 4f 73 46 69 6c 65 29 3b 0a 20 20 20  ->szOsFile);.   
2fe90 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
2fea0 70 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 6d 78 50  p->out, "vfs.mxP
2feb0 61 74 68 6e 61 6d 65 20 3d 20 25 64 5c 6e 22 2c  athname = %d\n",
2fec0 20 70 56 66 73 2d 3e 6d 78 50 61 74 68 6e 61 6d   pVfs->mxPathnam
2fed0 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
2fee0 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
2fef0 20 63 3d 3d 27 76 27 20 26 26 20 73 74 72 6e 63   c=='v' && strnc
2ff00 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 76 66  mp(azArg[0], "vf
2ff10 73 6c 69 73 74 22 2c 20 6e 29 3d 3d 30 20 29 7b  slist", n)==0 ){
2ff20 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73  .    sqlite3_vfs
2ff30 20 2a 70 56 66 73 3b 0a 20 20 20 20 73 71 6c 69   *pVfs;.    sqli
2ff40 74 65 33 5f 76 66 73 20 2a 70 43 75 72 72 65 6e  te3_vfs *pCurren
2ff50 74 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70  t = 0;.    if( p
2ff60 2d 3e 64 62 20 29 7b 0a 20 20 20 20 20 20 73 71  ->db ){.      sq
2ff70 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
2ff80 6f 6c 28 70 2d 3e 64 62 2c 20 22 6d 61 69 6e 22  ol(p->db, "main"
2ff90 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 56  , SQLITE_FCNTL_V
2ffa0 46 53 5f 50 4f 49 4e 54 45 52 2c 20 26 70 43 75  FS_POINTER, &pCu
2ffb0 72 72 65 6e 74 29 3b 0a 20 20 20 20 7d 0a 20 20  rrent);.    }.  
2ffc0 20 20 66 6f 72 28 70 56 66 73 3d 73 71 6c 69 74    for(pVfs=sqlit
2ffd0 65 33 5f 76 66 73 5f 66 69 6e 64 28 30 29 3b 20  e3_vfs_find(0); 
2ffe0 70 56 66 73 3b 20 70 56 66 73 3d 70 56 66 73 2d  pVfs; pVfs=pVfs-
2fff0 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 75  >pNext){.      u
30000 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
30010 74 2c 20 22 76 66 73 2e 7a 4e 61 6d 65 20 20 20  t, "vfs.zName   
30020 20 20 20 3d 20 5c 22 25 73 5c 22 25 73 5c 6e 22     = \"%s\"%s\n"
30030 2c 20 70 56 66 73 2d 3e 7a 4e 61 6d 65 2c 0a 20  , pVfs->zName,. 
30040 20 20 20 20 20 20 20 20 20 20 70 56 66 73 3d 3d            pVfs==
30050 70 43 75 72 72 65 6e 74 20 3f 20 22 20 20 3c 2d  pCurrent ? "  <-
30060 2d 2d 20 43 55 52 52 45 4e 54 22 20 3a 20 22 22  -- CURRENT" : ""
30070 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  );.      raw_pri
30080 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76 66 73  ntf(p->out, "vfs
30090 2e 69 56 65 72 73 69 6f 6e 20 20 20 3d 20 25 64  .iVersion   = %d
300a0 5c 6e 22 2c 20 70 56 66 73 2d 3e 69 56 65 72 73  \n", pVfs->iVers
300b0 69 6f 6e 29 3b 0a 20 20 20 20 20 20 72 61 77 5f  ion);.      raw_
300c0 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
300d0 76 66 73 2e 73 7a 4f 73 46 69 6c 65 20 20 20 3d  vfs.szOsFile   =
300e0 20 25 64 5c 6e 22 2c 20 70 56 66 73 2d 3e 73 7a   %d\n", pVfs->sz
300f0 4f 73 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 72  OsFile);.      r
30100 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
30110 2c 20 22 76 66 73 2e 6d 78 50 61 74 68 6e 61 6d  , "vfs.mxPathnam
30120 65 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73 2d  e = %d\n", pVfs-
30130 3e 6d 78 50 61 74 68 6e 61 6d 65 29 3b 0a 20 20  >mxPathname);.  
30140 20 20 20 20 69 66 28 20 70 56 66 73 2d 3e 70 4e      if( pVfs->pN
30150 65 78 74 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ext ){.        r
30160 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
30170 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  , "-------------
30180 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30190 2d 2d 2d 2d 2d 2d 5c 6e 22 29 3b 0a 20 20 20 20  ------\n");.    
301a0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
301b0 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 76 27 20  e..  if( c=='v' 
301c0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
301d0 5b 30 5d 2c 20 22 76 66 73 6e 61 6d 65 22 2c 20  [0], "vfsname", 
301e0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e  n)==0 ){.    con
301f0 73 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65  st char *zDbName
30200 20 3d 20 6e 41 72 67 3d 3d 32 20 3f 20 61 7a 41   = nArg==2 ? azA
30210 72 67 5b 31 5d 20 3a 20 22 6d 61 69 6e 22 3b 0a  rg[1] : "main";.
30220 20 20 20 20 63 68 61 72 20 2a 7a 56 66 73 4e 61      char *zVfsNa
30230 6d 65 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  me = 0;.    if( 
30240 70 2d 3e 64 62 20 29 7b 0a 20 20 20 20 20 20 73  p->db ){.      s
30250 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74  qlite3_file_cont
30260 72 6f 6c 28 70 2d 3e 64 62 2c 20 7a 44 62 4e 61  rol(p->db, zDbNa
30270 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  me, SQLITE_FCNTL
30280 5f 56 46 53 4e 41 4d 45 2c 20 26 7a 56 66 73 4e  _VFSNAME, &zVfsN
30290 61 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ame);.      if( 
302a0 7a 56 66 73 4e 61 6d 65 20 29 7b 0a 20 20 20 20  zVfsName ){.    
302b0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
302c0 70 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e 22 2c 20  p->out, "%s\n", 
302d0 7a 56 66 73 4e 61 6d 65 29 3b 0a 20 20 20 20 20  zVfsName);.     
302e0 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
302f0 7a 56 66 73 4e 61 6d 65 29 3b 0a 20 20 20 20 20  zVfsName);.     
30300 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
30310 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
30320 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64  LITE_DEBUG) && d
30330 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
30340 41 42 4c 45 5f 57 48 45 52 45 54 52 41 43 45 29  ABLE_WHERETRACE)
30350 0a 20 20 69 66 28 20 63 3d 3d 27 77 27 20 26 26  .  if( c=='w' &&
30360 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
30370 5d 2c 20 22 77 68 65 72 65 74 72 61 63 65 22 2c  ], "wheretrace",
30380 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71   n)==0 ){.    sq
30390 6c 69 74 65 33 57 68 65 72 65 54 72 61 63 65 20  lite3WhereTrace 
303a0 3d 20 6e 41 72 67 3e 3d 32 20 3f 20 62 6f 6f 6c  = nArg>=2 ? bool
303b0 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31  eanValue(azArg[1
303c0 5d 29 20 3a 20 30 78 66 66 3b 0a 20 20 7d 65 6c  ]) : 0xff;.  }el
303d0 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  se.#endif..  if(
303e0 20 63 3d 3d 27 77 27 20 26 26 20 73 74 72 6e 63   c=='w' && strnc
303f0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 77 69  mp(azArg[0], "wi
30400 64 74 68 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  dth", n)==0 ){. 
30410 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 61 73     int j;.    as
30420 73 65 72 74 28 20 6e 41 72 67 3c 3d 41 72 72 61  sert( nArg<=Arra
30430 79 53 69 7a 65 28 61 7a 41 72 67 29 20 29 3b 0a  ySize(azArg) );.
30440 20 20 20 20 66 6f 72 28 6a 3d 31 3b 20 6a 3c 6e      for(j=1; j<n
30450 41 72 67 20 26 26 20 6a 3c 41 72 72 61 79 53 69  Arg && j<ArraySi
30460 7a 65 28 70 2d 3e 63 6f 6c 57 69 64 74 68 29 3b  ze(p->colWidth);
30470 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 70 2d 3e   j++){.      p->
30480 63 6f 6c 57 69 64 74 68 5b 6a 2d 31 5d 20 3d 20  colWidth[j-1] = 
30490 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75  (int)integerValu
304a0 65 28 61 7a 41 72 67 5b 6a 5d 29 3b 0a 20 20 20  e(azArg[j]);.   
304b0 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 7b 0a   }.  }else..  {.
304c0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
304d0 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
304e0 75 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d 61 6e 64 20  unknown command 
304f0 6f 72 20 69 6e 76 61 6c 69 64 20 61 72 67 75 6d  or invalid argum
30500 65 6e 74 73 3a 20 22 0a 20 20 20 20 20 20 22 20  ents: ".      " 
30510 5c 22 25 73 5c 22 2e 20 45 6e 74 65 72 20 5c 22  \"%s\". Enter \"
30520 2e 68 65 6c 70 5c 22 20 66 6f 72 20 68 65 6c 70  .help\" for help
30530 5c 6e 22 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a  \n", azArg[0]);.
30540 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 7d 0a      rc = 1;.  }.
30550 0a 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78  .meta_command_ex
30560 69 74 3a 0a 20 20 69 66 28 20 70 2d 3e 6f 75 74  it:.  if( p->out
30570 43 6f 75 6e 74 20 29 7b 0a 20 20 20 20 70 2d 3e  Count ){.    p->
30580 6f 75 74 43 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20  outCount--;.    
30590 69 66 28 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 3d  if( p->outCount=
305a0 3d 30 20 29 20 6f 75 74 70 75 74 5f 72 65 73 65  =0 ) output_rese
305b0 74 28 70 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  t(p);.  }.  retu
305c0 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
305d0 52 65 74 75 72 6e 20 54 52 55 45 20 69 66 20 61  Return TRUE if a
305e0 20 73 65 6d 69 63 6f 6c 6f 6e 20 6f 63 63 75 72   semicolon occur
305f0 73 20 61 6e 79 77 68 65 72 65 20 69 6e 20 74 68  s anywhere in th
30600 65 20 66 69 72 73 74 20 4e 20 63 68 61 72 61 63  e first N charac
30610 74 65 72 73 0a 2a 2a 20 6f 66 20 73 74 72 69 6e  ters.** of strin
30620 67 20 7a 5b 5d 2e 0a 2a 2f 0a 73 74 61 74 69 63  g z[]..*/.static
30630 20 69 6e 74 20 6c 69 6e 65 5f 63 6f 6e 74 61 69   int line_contai
30640 6e 73 5f 73 65 6d 69 63 6f 6c 6f 6e 28 63 6f 6e  ns_semicolon(con
30650 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
30660 4e 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66  N){.  int i;.  f
30670 6f 72 28 69 3d 30 3b 20 69 3c 4e 3b 20 69 2b 2b  or(i=0; i<N; i++
30680 29 7b 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 3b  ){  if( z[i]==';
30690 27 20 29 20 72 65 74 75 72 6e 20 31 3b 20 7d 0a  ' ) return 1; }.
306a0 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
306b0 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65  *.** Test to see
306c0 20 69 66 20 61 20 6c 69 6e 65 20 63 6f 6e 73 69   if a line consi
306d0 73 74 73 20 65 6e 74 69 72 65 6c 79 20 6f 66 20  sts entirely of 
306e0 77 68 69 74 65 73 70 61 63 65 2e 0a 2a 2f 0a 73  whitespace..*/.s
306f0 74 61 74 69 63 20 69 6e 74 20 5f 61 6c 6c 5f 77  tatic int _all_w
30700 68 69 74 65 73 70 61 63 65 28 63 6f 6e 73 74 20  hitespace(const 
30710 63 68 61 72 20 2a 7a 29 7b 0a 20 20 66 6f 72 28  char *z){.  for(
30720 3b 20 2a 7a 3b 20 7a 2b 2b 29 7b 0a 20 20 20 20  ; *z; z++){.    
30730 69 66 28 20 49 73 53 70 61 63 65 28 7a 5b 30 5d  if( IsSpace(z[0]
30740 29 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  ) ) continue;.  
30750 20 20 69 66 28 20 2a 7a 3d 3d 27 2f 27 20 26 26    if( *z=='/' &&
30760 20 7a 5b 31 5d 3d 3d 27 2a 27 20 29 7b 0a 20 20   z[1]=='*' ){.  
30770 20 20 20 20 7a 20 2b 3d 20 32 3b 0a 20 20 20 20      z += 2;.    
30780 20 20 77 68 69 6c 65 28 20 2a 7a 20 26 26 20 28    while( *z && (
30790 2a 7a 21 3d 27 2a 27 20 7c 7c 20 7a 5b 31 5d 21  *z!='*' || z[1]!
307a0 3d 27 2f 27 29 20 29 7b 20 7a 2b 2b 3b 20 7d 0a  ='/') ){ z++; }.
307b0 20 20 20 20 20 20 69 66 28 20 2a 7a 3d 3d 30 20        if( *z==0 
307c0 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
307d0 20 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 63 6f 6e    z++;.      con
307e0 74 69 6e 75 65 3b 0a 20 20 20 20 7d 0a 20 20 20  tinue;.    }.   
307f0 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 26 26 20   if( *z=='-' && 
30800 7a 5b 31 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20  z[1]=='-' ){.   
30810 20 20 20 7a 20 2b 3d 20 32 3b 0a 20 20 20 20 20     z += 2;.     
30820 20 77 68 69 6c 65 28 20 2a 7a 20 26 26 20 2a 7a   while( *z && *z
30830 21 3d 27 5c 6e 27 20 29 7b 20 7a 2b 2b 3b 20 7d  !='\n' ){ z++; }
30840 0a 20 20 20 20 20 20 69 66 28 20 2a 7a 3d 3d 30  .      if( *z==0
30850 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20   ) return 1;.   
30860 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20     continue;.   
30870 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b   }.    return 0;
30880 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b  .  }.  return 1;
30890 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
308a0 20 54 52 55 45 20 69 66 20 74 68 65 20 6c 69 6e   TRUE if the lin
308b0 65 20 74 79 70 65 64 20 69 6e 20 69 73 20 61 6e  e typed in is an
308c0 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 20 74 65 72   SQL command ter
308d0 6d 69 6e 61 74 6f 72 20 6f 74 68 65 72 0a 2a 2a  minator other.**
308e0 20 74 68 61 6e 20 61 20 73 65 6d 69 2d 63 6f 6c   than a semi-col
308f0 6f 6e 2e 20 20 54 68 65 20 53 51 4c 20 53 65 72  on.  The SQL Ser
30900 76 65 72 20 73 74 79 6c 65 20 22 67 6f 22 20 63  ver style "go" c
30910 6f 6d 6d 61 6e 64 20 69 73 20 75 6e 64 65 72 73  ommand is unders
30920 74 6f 6f 64 0a 2a 2a 20 61 73 20 69 73 20 74 68  tood.** as is th
30930 65 20 4f 72 61 63 6c 65 20 22 2f 22 2e 0a 2a 2f  e Oracle "/"..*/
30940 0a 73 74 61 74 69 63 20 69 6e 74 20 6c 69 6e 65  .static int line
30950 5f 69 73 5f 63 6f 6d 6d 61 6e 64 5f 74 65 72 6d  _is_command_term
30960 69 6e 61 74 6f 72 28 63 6f 6e 73 74 20 63 68 61  inator(const cha
30970 72 20 2a 7a 4c 69 6e 65 29 7b 0a 20 20 77 68 69  r *zLine){.  whi
30980 6c 65 28 20 49 73 53 70 61 63 65 28 7a 4c 69 6e  le( IsSpace(zLin
30990 65 5b 30 5d 29 20 29 7b 20 7a 4c 69 6e 65 2b 2b  e[0]) ){ zLine++
309a0 3b 20 7d 3b 0a 20 20 69 66 28 20 7a 4c 69 6e 65  ; };.  if( zLine
309b0 5b 30 5d 3d 3d 27 2f 27 20 26 26 20 5f 61 6c 6c  [0]=='/' && _all
309c0 5f 77 68 69 74 65 73 70 61 63 65 28 26 7a 4c 69  _whitespace(&zLi
309d0 6e 65 5b 31 5d 29 20 29 7b 0a 20 20 20 20 72 65  ne[1]) ){.    re
309e0 74 75 72 6e 20 31 3b 20 20 2f 2a 20 4f 72 61 63  turn 1;  /* Orac
309f0 6c 65 20 2a 2f 0a 20 20 7d 0a 20 20 69 66 28 20  le */.  }.  if( 
30a00 54 6f 4c 6f 77 65 72 28 7a 4c 69 6e 65 5b 30 5d  ToLower(zLine[0]
30a10 29 3d 3d 27 67 27 20 26 26 20 54 6f 4c 6f 77 65  )=='g' && ToLowe
30a20 72 28 7a 4c 69 6e 65 5b 31 5d 29 3d 3d 27 6f 27  r(zLine[1])=='o'
30a30 0a 20 20 20 20 20 20 20 20 20 26 26 20 5f 61 6c  .         && _al
30a40 6c 5f 77 68 69 74 65 73 70 61 63 65 28 26 7a 4c  l_whitespace(&zL
30a50 69 6e 65 5b 32 5d 29 20 29 7b 0a 20 20 20 20 72  ine[2]) ){.    r
30a60 65 74 75 72 6e 20 31 3b 20 20 2f 2a 20 53 51 4c  eturn 1;  /* SQL
30a70 20 53 65 72 76 65 72 20 2a 2f 0a 20 20 7d 0a 20   Server */.  }. 
30a80 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a   return 0;.}../*
30a90 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
30aa0 69 66 20 7a 53 71 6c 20 69 73 20 61 20 63 6f 6d  if zSql is a com
30ab0 70 6c 65 74 65 20 53 51 4c 20 73 74 61 74 65 6d  plete SQL statem
30ac0 65 6e 74 2e 20 20 52 65 74 75 72 6e 20 66 61 6c  ent.  Return fal
30ad0 73 65 20 69 66 20 69 74 0a 2a 2a 20 65 6e 64 73  se if it.** ends
30ae0 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f   in the middle o
30af0 66 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72  f a string liter
30b00 61 6c 20 6f 72 20 43 2d 73 74 79 6c 65 20 63 6f  al or C-style co
30b10 6d 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  mment..*/.static
30b20 20 69 6e 74 20 6c 69 6e 65 5f 69 73 5f 63 6f 6d   int line_is_com
30b30 70 6c 65 74 65 28 63 68 61 72 20 2a 7a 53 71 6c  plete(char *zSql
30b40 2c 20 69 6e 74 20 6e 53 71 6c 29 7b 0a 20 20 69  , int nSql){.  i
30b50 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 7a 53 71  nt rc;.  if( zSq
30b60 6c 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b  l==0 ) return 1;
30b70 0a 20 20 7a 53 71 6c 5b 6e 53 71 6c 5d 20 3d 20  .  zSql[nSql] = 
30b80 27 3b 27 3b 0a 20 20 7a 53 71 6c 5b 6e 53 71 6c  ';';.  zSql[nSql
30b90 2b 31 5d 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20  +1] = 0;.  rc = 
30ba0 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65  sqlite3_complete
30bb0 28 7a 53 71 6c 29 3b 0a 20 20 7a 53 71 6c 5b 6e  (zSql);.  zSql[n
30bc0 53 71 6c 5d 20 3d 20 30 3b 0a 20 20 72 65 74 75  Sql] = 0;.  retu
30bd0 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
30be0 52 75 6e 20 61 20 73 69 6e 67 6c 65 20 6c 69 6e  Run a single lin
30bf0 65 20 6f 66 20 53 51 4c 0a 2a 2f 0a 73 74 61 74  e of SQL.*/.stat
30c00 69 63 20 69 6e 74 20 72 75 6e 4f 6e 65 53 71 6c  ic int runOneSql
30c10 4c 69 6e 65 28 53 68 65 6c 6c 53 74 61 74 65 20  Line(ShellState 
30c20 2a 70 2c 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20  *p, char *zSql, 
30c30 46 49 4c 45 20 2a 69 6e 2c 20 69 6e 74 20 73 74  FILE *in, int st
30c40 61 72 74 6c 69 6e 65 29 7b 0a 20 20 69 6e 74 20  artline){.  int 
30c50 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72  rc;.  char *zErr
30c60 4d 73 67 20 3d 20 30 3b 0a 0a 20 20 6f 70 65 6e  Msg = 0;..  open
30c70 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 69 66 28  _db(p, 0);.  if(
30c80 20 53 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c   ShellHasFlag(p,
30c90 53 48 46 4c 47 5f 42 61 63 6b 73 6c 61 73 68 29  SHFLG_Backslash)
30ca0 20 29 20 72 65 73 6f 6c 76 65 5f 62 61 63 6b 73   ) resolve_backs
30cb0 6c 61 73 68 65 73 28 7a 53 71 6c 29 3b 0a 20 20  lashes(zSql);.  
30cc0 42 45 47 49 4e 5f 54 49 4d 45 52 3b 0a 20 20 72  BEGIN_TIMER;.  r
30cd0 63 20 3d 20 73 68 65 6c 6c 5f 65 78 65 63 28 70  c = shell_exec(p
30ce0 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 73 68 65 6c  ->db, zSql, shel
30cf0 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 70 2c 20 26  l_callback, p, &
30d00 7a 45 72 72 4d 73 67 29 3b 0a 20 20 45 4e 44 5f  zErrMsg);.  END_
30d10 54 49 4d 45 52 3b 0a 20 20 69 66 28 20 72 63 20  TIMER;.  if( rc 
30d20 7c 7c 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20  || zErrMsg ){.  
30d30 20 20 63 68 61 72 20 7a 50 72 65 66 69 78 5b 31    char zPrefix[1
30d40 30 30 5d 3b 0a 20 20 20 20 69 66 28 20 69 6e 21  00];.    if( in!
30d50 3d 30 20 7c 7c 20 21 73 74 64 69 6e 5f 69 73 5f  =0 || !stdin_is_
30d60 69 6e 74 65 72 61 63 74 69 76 65 20 29 7b 0a 20  interactive ){. 
30d70 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
30d80 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 50 72  rintf(sizeof(zPr
30d90 65 66 69 78 29 2c 20 7a 50 72 65 66 69 78 2c 0a  efix), zPrefix,.
30da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30db0 20 20 20 20 20 20 20 22 45 72 72 6f 72 3a 20 6e         "Error: n
30dc0 65 61 72 20 6c 69 6e 65 20 25 64 3a 22 2c 20 73  ear line %d:", s
30dd0 74 61 72 74 6c 69 6e 65 29 3b 0a 20 20 20 20 7d  tartline);.    }
30de0 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69  else{.      sqli
30df0 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
30e00 65 6f 66 28 7a 50 72 65 66 69 78 29 2c 20 7a 50  eof(zPrefix), zP
30e10 72 65 66 69 78 2c 20 22 45 72 72 6f 72 3a 22 29  refix, "Error:")
30e20 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
30e30 7a 45 72 72 4d 73 67 21 3d 30 20 29 7b 0a 20 20  zErrMsg!=0 ){.  
30e40 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
30e50 73 74 64 65 72 72 2c 20 22 25 73 20 25 73 5c 6e  stderr, "%s %s\n
30e60 22 2c 20 7a 50 72 65 66 69 78 2c 20 7a 45 72 72  ", zPrefix, zErr
30e70 4d 73 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  Msg);.      sqli
30e80 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67  te3_free(zErrMsg
30e90 29 3b 0a 20 20 20 20 20 20 7a 45 72 72 4d 73 67  );.      zErrMsg
30ea0 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
30eb0 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
30ec0 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 20 25  tf(stderr, "%s %
30ed0 73 5c 6e 22 2c 20 7a 50 72 65 66 69 78 2c 20 73  s\n", zPrefix, s
30ee0 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d  qlite3_errmsg(p-
30ef0 3e 64 62 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >db));.    }.   
30f00 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 65 6c   return 1;.  }el
30f10 73 65 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46  se if( ShellHasF
30f20 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 43 6f 75  lag(p, SHFLG_Cou
30f30 6e 74 43 68 61 6e 67 65 73 29 20 29 7b 0a 20 20  ntChanges) ){.  
30f40 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
30f50 6f 75 74 2c 20 22 63 68 61 6e 67 65 73 3a 20 25  out, "changes: %
30f60 33 64 20 20 20 74 6f 74 61 6c 5f 63 68 61 6e 67  3d   total_chang
30f70 65 73 3a 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20  es: %d\n",.     
30f80 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63         sqlite3_c
30f90 68 61 6e 67 65 73 28 70 2d 3e 64 62 29 2c 20 73  hanges(p->db), s
30fa0 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
30fb0 6e 67 65 73 28 70 2d 3e 64 62 29 29 3b 0a 20 20  nges(p->db));.  
30fc0 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
30fd0 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 69 6e 70  ../*.** Read inp
30fe0 75 74 20 66 72 6f 6d 20 2a 69 6e 20 61 6e 64 20  ut from *in and 
30ff0 70 72 6f 63 65 73 73 20 69 74 2e 20 20 49 66 20  process it.  If 
31000 2a 69 6e 3d 3d 30 20 74 68 65 6e 20 69 6e 70 75  *in==0 then inpu
31010 74 0a 2a 2a 20 69 73 20 69 6e 74 65 72 61 63 74  t.** is interact
31020 69 76 65 20 2d 20 74 68 65 20 75 73 65 72 20 69  ive - the user i
31030 73 20 74 79 70 69 6e 67 20 69 74 20 69 74 2e 20  s typing it it. 
31040 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 70 75   Otherwise, inpu
31050 74 0a 2a 2a 20 69 73 20 63 6f 6d 69 6e 67 20 66  t.** is coming f
31060 72 6f 6d 20 61 20 66 69 6c 65 20 6f 72 20 64 65  rom a file or de
31070 76 69 63 65 2e 20 20 41 20 70 72 6f 6d 70 74 20  vice.  A prompt 
31080 69 73 20 69 73 73 75 65 64 20 61 6e 64 20 68 69  is issued and hi
31090 73 74 6f 72 79 0a 2a 2a 20 69 73 20 73 61 76 65  story.** is save
310a0 64 20 6f 6e 6c 79 20 69 66 20 69 6e 70 75 74 20  d only if input 
310b0 69 73 20 69 6e 74 65 72 61 63 74 69 76 65 2e 20  is interactive. 
310c0 20 41 6e 20 69 6e 74 65 72 72 75 70 74 20 73 69   An interrupt si
310d0 67 6e 61 6c 20 77 69 6c 6c 0a 2a 2a 20 63 61 75  gnal will.** cau
310e0 73 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  se this routine 
310f0 74 6f 20 65 78 69 74 20 69 6d 6d 65 64 69 61 74  to exit immediat
31100 65 6c 79 2c 20 75 6e 6c 65 73 73 20 69 6e 70 75  ely, unless inpu
31110 74 20 69 73 20 69 6e 74 65 72 61 63 74 69 76 65  t is interactive
31120 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ..**.** Return t
31130 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72  he number of err
31140 6f 72 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ors..*/.static i
31150 6e 74 20 70 72 6f 63 65 73 73 5f 69 6e 70 75 74  nt process_input
31160 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20  (ShellState *p, 
31170 46 49 4c 45 20 2a 69 6e 29 7b 0a 20 20 63 68 61  FILE *in){.  cha
31180 72 20 2a 7a 4c 69 6e 65 20 3d 20 30 3b 20 20 20  r *zLine = 0;   
31190 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67         /* A sing
311a0 6c 65 20 69 6e 70 75 74 20 6c 69 6e 65 20 2a 2f  le input line */
311b0 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d 20  .  char *zSql = 
311c0 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  0;           /* 
311d0 41 63 63 75 6d 75 6c 61 74 65 64 20 53 51 4c 20  Accumulated SQL 
311e0 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  text */.  int nL
311f0 69 6e 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ine;            
31200 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
31210 20 63 75 72 72 65 6e 74 20 6c 69 6e 65 20 2a 2f   current line */
31220 0a 20 20 69 6e 74 20 6e 53 71 6c 20 3d 20 30 3b  .  int nSql = 0;
31230 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
31240 42 79 74 65 73 20 6f 66 20 7a 53 71 6c 5b 5d 20  Bytes of zSql[] 
31250 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  used */.  int nA
31260 6c 6c 6f 63 20 3d 20 30 3b 20 20 20 20 20 20 20  lloc = 0;       
31270 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
31280 20 7a 53 71 6c 5b 5d 20 73 70 61 63 65 20 2a 2f   zSql[] space */
31290 0a 20 20 69 6e 74 20 6e 53 71 6c 50 72 69 6f 72  .  int nSqlPrior
312a0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 2f 2a 20   = 0;        /* 
312b0 42 79 74 65 73 20 6f 66 20 7a 53 71 6c 5b 5d 20  Bytes of zSql[] 
312c0 75 73 65 64 20 62 79 20 70 72 69 6f 72 20 6c 69  used by prior li
312d0 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  ne */.  int rc; 
312e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312f0 20 20 2f 2a 20 45 72 72 6f 72 20 63 6f 64 65 20    /* Error code 
31300 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6e 74 20  */.  int errCnt 
31310 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f  = 0;           /
31320 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
31330 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74  rs seen */.  int
31340 20 6c 69 6e 65 6e 6f 20 3d 20 30 3b 20 20 20 20   lineno = 0;    
31350 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
31360 74 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20 2a 2f  t line number */
31370 0a 20 20 69 6e 74 20 73 74 61 72 74 6c 69 6e 65  .  int startline
31380 20 3d 20 30 3b 20 20 20 20 20 20 20 20 2f 2a 20   = 0;        /* 
31390 4c 69 6e 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  Line number for 
313a0 73 74 61 72 74 20 6f 66 20 63 75 72 72 65 6e 74  start of current
313b0 20 69 6e 70 75 74 20 2a 2f 0a 0a 20 20 77 68 69   input */..  whi
313c0 6c 65 28 20 65 72 72 43 6e 74 3d 3d 30 20 7c 7c  le( errCnt==0 ||
313d0 20 21 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20   !bail_on_error 
313e0 7c 7c 20 28 69 6e 3d 3d 30 20 26 26 20 73 74 64  || (in==0 && std
313f0 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76  in_is_interactiv
31400 65 29 20 29 7b 0a 20 20 20 20 66 66 6c 75 73 68  e) ){.    fflush
31410 28 70 2d 3e 6f 75 74 29 3b 0a 20 20 20 20 7a 4c  (p->out);.    zL
31420 69 6e 65 20 3d 20 6f 6e 65 5f 69 6e 70 75 74 5f  ine = one_input_
31430 6c 69 6e 65 28 69 6e 2c 20 7a 4c 69 6e 65 2c 20  line(in, zLine, 
31440 6e 53 71 6c 3e 30 29 3b 0a 20 20 20 20 69 66 28  nSql>0);.    if(
31450 20 7a 4c 69 6e 65 3d 3d 30 20 29 7b 0a 20 20 20   zLine==0 ){.   
31460 20 20 20 2f 2a 20 45 6e 64 20 6f 66 20 69 6e 70     /* End of inp
31470 75 74 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  ut */.      if( 
31480 69 6e 3d 3d 30 20 26 26 20 73 74 64 69 6e 5f 69  in==0 && stdin_i
31490 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20 29 20  s_interactive ) 
314a0 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 20 20  printf("\n");.  
314b0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
314c0 0a 20 20 20 20 69 66 28 20 73 65 65 6e 49 6e 74  .    if( seenInt
314d0 65 72 72 75 70 74 20 29 7b 0a 20 20 20 20 20 20  errupt ){.      
314e0 69 66 28 20 69 6e 21 3d 30 20 29 20 62 72 65 61  if( in!=0 ) brea
314f0 6b 3b 0a 20 20 20 20 20 20 73 65 65 6e 49 6e 74  k;.      seenInt
31500 65 72 72 75 70 74 20 3d 20 30 3b 0a 20 20 20 20  errupt = 0;.    
31510 7d 0a 20 20 20 20 6c 69 6e 65 6e 6f 2b 2b 3b 0a  }.    lineno++;.
31520 20 20 20 20 69 66 28 20 6e 53 71 6c 3d 3d 30 20      if( nSql==0 
31530 26 26 20 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61  && _all_whitespa
31540 63 65 28 7a 4c 69 6e 65 29 20 29 7b 0a 20 20 20  ce(zLine) ){.   
31550 20 20 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46     if( ShellHasF
31560 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 45 63 68  lag(p, SHFLG_Ech
31570 6f 29 20 29 20 70 72 69 6e 74 66 28 22 25 73 5c  o) ) printf("%s\
31580 6e 22 2c 20 7a 4c 69 6e 65 29 3b 0a 20 20 20 20  n", zLine);.    
31590 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20    continue;.    
315a0 7d 0a 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 20  }.    if( zLine 
315b0 26 26 20 7a 4c 69 6e 65 5b 30 5d 3d 3d 27 2e 27  && zLine[0]=='.'
315c0 20 26 26 20 6e 53 71 6c 3d 3d 30 20 29 7b 0a 20   && nSql==0 ){. 
315d0 20 20 20 20 20 69 66 28 20 53 68 65 6c 6c 48 61       if( ShellHa
315e0 73 46 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 45  sFlag(p, SHFLG_E
315f0 63 68 6f 29 20 29 20 70 72 69 6e 74 66 28 22 25  cho) ) printf("%
31600 73 5c 6e 22 2c 20 7a 4c 69 6e 65 29 3b 0a 20 20  s\n", zLine);.  
31610 20 20 20 20 72 63 20 3d 20 64 6f 5f 6d 65 74 61      rc = do_meta
31620 5f 63 6f 6d 6d 61 6e 64 28 7a 4c 69 6e 65 2c 20  _command(zLine, 
31630 70 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  p);.      if( rc
31640 3d 3d 32 20 29 7b 20 2f 2a 20 65 78 69 74 20 72  ==2 ){ /* exit r
31650 65 71 75 65 73 74 65 64 20 2a 2f 0a 20 20 20 20  equested */.    
31660 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
31670 20 7d 65 6c 73 65 20 69 66 28 20 72 63 20 29 7b   }else if( rc ){
31680 0a 20 20 20 20 20 20 20 20 65 72 72 43 6e 74 2b  .        errCnt+
31690 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  +;.      }.     
316a0 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 7d   continue;.    }
316b0 0a 20 20 20 20 69 66 28 20 6c 69 6e 65 5f 69 73  .    if( line_is
316c0 5f 63 6f 6d 6d 61 6e 64 5f 74 65 72 6d 69 6e 61  _command_termina
316d0 74 6f 72 28 7a 4c 69 6e 65 29 20 26 26 20 6c 69  tor(zLine) && li
316e0 6e 65 5f 69 73 5f 63 6f 6d 70 6c 65 74 65 28 7a  ne_is_complete(z
316f0 53 71 6c 2c 20 6e 53 71 6c 29 20 29 7b 0a 20 20  Sql, nSql) ){.  
31700 20 20 20 20 6d 65 6d 63 70 79 28 7a 4c 69 6e 65      memcpy(zLine
31710 2c 22 3b 22 2c 32 29 3b 0a 20 20 20 20 7d 0a 20  ,";",2);.    }. 
31720 20 20 20 6e 4c 69 6e 65 20 3d 20 73 74 72 6c 65     nLine = strle
31730 6e 33 30 28 7a 4c 69 6e 65 29 3b 0a 20 20 20 20  n30(zLine);.    
31740 69 66 28 20 6e 53 71 6c 2b 6e 4c 69 6e 65 2b 32  if( nSql+nLine+2
31750 3e 3d 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20  >=nAlloc ){.    
31760 20 20 6e 41 6c 6c 6f 63 20 3d 20 6e 53 71 6c 2b    nAlloc = nSql+
31770 6e 4c 69 6e 65 2b 31 30 30 3b 0a 20 20 20 20 20  nLine+100;.     
31780 20 7a 53 71 6c 20 3d 20 72 65 61 6c 6c 6f 63 28   zSql = realloc(
31790 7a 53 71 6c 2c 20 6e 41 6c 6c 6f 63 29 3b 0a 20  zSql, nAlloc);. 
317a0 20 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30       if( zSql==0
317b0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f   ){.        raw_
317c0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
317d0 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65  Error: out of me
317e0 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20  mory\n");.      
317f0 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20    exit(1);.     
31800 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 53 71   }.    }.    nSq
31810 6c 50 72 69 6f 72 20 3d 20 6e 53 71 6c 3b 0a 20  lPrior = nSql;. 
31820 20 20 20 69 66 28 20 6e 53 71 6c 3d 3d 30 20 29     if( nSql==0 )
31830 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20  {.      int i;. 
31840 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a 4c       for(i=0; zL
31850 69 6e 65 5b 69 5d 20 26 26 20 49 73 53 70 61 63  ine[i] && IsSpac
31860 65 28 7a 4c 69 6e 65 5b 69 5d 29 3b 20 69 2b 2b  e(zLine[i]); i++
31870 29 7b 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74  ){}.      assert
31880 28 20 6e 41 6c 6c 6f 63 3e 30 20 26 26 20 7a 53  ( nAlloc>0 && zS
31890 71 6c 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 6d  ql!=0 );.      m
318a0 65 6d 63 70 79 28 7a 53 71 6c 2c 20 7a 4c 69 6e  emcpy(zSql, zLin
318b0 65 2b 69 2c 20 6e 4c 69 6e 65 2b 31 2d 69 29 3b  e+i, nLine+1-i);
318c0 0a 20 20 20 20 20 20 73 74 61 72 74 6c 69 6e 65  .      startline
318d0 20 3d 20 6c 69 6e 65 6e 6f 3b 0a 20 20 20 20 20   = lineno;.     
318e0 20 6e 53 71 6c 20 3d 20 6e 4c 69 6e 65 2d 69 3b   nSql = nLine-i;
318f0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
31900 20 20 7a 53 71 6c 5b 6e 53 71 6c 2b 2b 5d 20 3d    zSql[nSql++] =
31910 20 27 5c 6e 27 3b 0a 20 20 20 20 20 20 6d 65 6d   '\n';.      mem
31920 63 70 79 28 7a 53 71 6c 2b 6e 53 71 6c 2c 20 7a  cpy(zSql+nSql, z
31930 4c 69 6e 65 2c 20 6e 4c 69 6e 65 2b 31 29 3b 0a  Line, nLine+1);.
31940 20 20 20 20 20 20 6e 53 71 6c 20 2b 3d 20 6e 4c        nSql += nL
31950 69 6e 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ine;.    }.    i
31960 66 28 20 6e 53 71 6c 20 26 26 20 6c 69 6e 65 5f  f( nSql && line_
31970 63 6f 6e 74 61 69 6e 73 5f 73 65 6d 69 63 6f 6c  contains_semicol
31980 6f 6e 28 26 7a 53 71 6c 5b 6e 53 71 6c 50 72 69  on(&zSql[nSqlPri
31990 6f 72 5d 2c 20 6e 53 71 6c 2d 6e 53 71 6c 50 72  or], nSql-nSqlPr
319a0 69 6f 72 29 0a 20 20 20 20 20 20 20 20 20 20 20  ior).           
319b0 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 5f       && sqlite3_
319c0 63 6f 6d 70 6c 65 74 65 28 7a 53 71 6c 29 20 29  complete(zSql) )
319d0 7b 0a 20 20 20 20 20 20 65 72 72 43 6e 74 20 2b  {.      errCnt +
319e0 3d 20 72 75 6e 4f 6e 65 53 71 6c 4c 69 6e 65 28  = runOneSqlLine(
319f0 70 2c 20 7a 53 71 6c 2c 20 69 6e 2c 20 73 74 61  p, zSql, in, sta
31a00 72 74 6c 69 6e 65 29 3b 0a 20 20 20 20 20 20 6e  rtline);.      n
31a10 53 71 6c 20 3d 20 30 3b 0a 20 20 20 20 20 20 69  Sql = 0;.      i
31a20 66 28 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 20 29  f( p->outCount )
31a30 7b 0a 20 20 20 20 20 20 20 20 6f 75 74 70 75 74  {.        output
31a40 5f 72 65 73 65 74 28 70 29 3b 0a 20 20 20 20 20  _reset(p);.     
31a50 20 20 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 20 3d     p->outCount =
31a60 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
31a70 7d 65 6c 73 65 20 69 66 28 20 6e 53 71 6c 20 26  }else if( nSql &
31a80 26 20 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61 63  & _all_whitespac
31a90 65 28 7a 53 71 6c 29 20 29 7b 0a 20 20 20 20 20  e(zSql) ){.     
31aa0 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46 6c 61   if( ShellHasFla
31ab0 67 28 70 2c 20 53 48 46 4c 47 5f 45 63 68 6f 29  g(p, SHFLG_Echo)
31ac0 20 29 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22   ) printf("%s\n"
31ad0 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 6e  , zSql);.      n
31ae0 53 71 6c 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  Sql = 0;.    }. 
31af0 20 7d 0a 20 20 69 66 28 20 6e 53 71 6c 20 26 26   }.  if( nSql &&
31b00 20 21 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61 63   !_all_whitespac
31b10 65 28 7a 53 71 6c 29 20 29 7b 0a 20 20 20 20 72  e(zSql) ){.    r
31b20 75 6e 4f 6e 65 53 71 6c 4c 69 6e 65 28 70 2c 20  unOneSqlLine(p, 
31b30 7a 53 71 6c 2c 20 69 6e 2c 20 73 74 61 72 74 6c  zSql, in, startl
31b40 69 6e 65 29 3b 0a 20 20 7d 0a 20 20 66 72 65 65  ine);.  }.  free
31b50 28 7a 53 71 6c 29 3b 0a 20 20 66 72 65 65 28 7a  (zSql);.  free(z
31b60 4c 69 6e 65 29 3b 0a 20 20 72 65 74 75 72 6e 20  Line);.  return 
31b70 65 72 72 43 6e 74 3e 30 3b 0a 7d 0a 0a 2f 2a 0a  errCnt>0;.}../*.
31b80 2a 2a 20 52 65 74 75 72 6e 20 61 20 70 61 74 68  ** Return a path
31b90 6e 61 6d 65 20 77 68 69 63 68 20 69 73 20 74 68  name which is th
31ba0 65 20 75 73 65 72 27 73 20 68 6f 6d 65 20 64 69  e user's home di
31bb0 72 65 63 74 6f 72 79 2e 20 20 41 0a 2a 2a 20 30  rectory.  A.** 0
31bc0 20 72 65 74 75 72 6e 20 69 6e 64 69 63 61 74 65   return indicate
31bd0 73 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f  s an error of so
31be0 6d 65 20 6b 69 6e 64 2e 0a 2a 2f 0a 73 74 61 74  me kind..*/.stat
31bf0 69 63 20 63 68 61 72 20 2a 66 69 6e 64 5f 68 6f  ic char *find_ho
31c00 6d 65 5f 64 69 72 28 69 6e 74 20 63 6c 65 61 72  me_dir(int clear
31c10 46 6c 61 67 29 7b 0a 20 20 73 74 61 74 69 63 20  Flag){.  static 
31c20 63 68 61 72 20 2a 68 6f 6d 65 5f 64 69 72 20 3d  char *home_dir =
31c30 20 4e 55 4c 4c 3b 0a 20 20 69 66 28 20 63 6c 65   NULL;.  if( cle
31c40 61 72 46 6c 61 67 20 29 7b 0a 20 20 20 20 66 72  arFlag ){.    fr
31c50 65 65 28 68 6f 6d 65 5f 64 69 72 29 3b 0a 20 20  ee(home_dir);.  
31c60 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20 30 3b 0a    home_dir = 0;.
31c70 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
31c80 7d 0a 20 20 69 66 28 20 68 6f 6d 65 5f 64 69 72  }.  if( home_dir
31c90 20 29 20 72 65 74 75 72 6e 20 68 6f 6d 65 5f 64   ) return home_d
31ca0 69 72 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  ir;..#if !define
31cb0 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
31cc0 66 69 6e 65 64 28 57 49 4e 33 32 29 20 26 26 20  fined(WIN32) && 
31cd0 21 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f  !defined(_WIN32_
31ce0 57 43 45 29 20 5c 0a 20 20 20 20 20 26 26 20 21  WCE) \.     && !
31cf0 64 65 66 69 6e 65 64 28 5f 5f 52 54 50 5f 5f 29  defined(__RTP__)
31d00 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57 52   && !defined(_WR
31d10 53 5f 4b 45 52 4e 45 4c 29 0a 20 20 7b 0a 20 20  S_KERNEL).  {.  
31d20 20 20 73 74 72 75 63 74 20 70 61 73 73 77 64 20    struct passwd 
31d30 2a 70 77 65 6e 74 3b 0a 20 20 20 20 75 69 64 5f  *pwent;.    uid_
31d40 74 20 75 69 64 20 3d 20 67 65 74 75 69 64 28 29  t uid = getuid()
31d50 3b 0a 20 20 20 20 69 66 28 20 28 70 77 65 6e 74  ;.    if( (pwent
31d60 3d 67 65 74 70 77 75 69 64 28 75 69 64 29 29 20  =getpwuid(uid)) 
31d70 21 3d 20 4e 55 4c 4c 29 20 7b 0a 20 20 20 20 20  != NULL) {.     
31d80 20 68 6f 6d 65 5f 64 69 72 20 3d 20 70 77 65 6e   home_dir = pwen
31d90 74 2d 3e 70 77 5f 64 69 72 3b 0a 20 20 20 20 7d  t->pw_dir;.    }
31da0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .  }.#endif..#if
31db0 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f   defined(_WIN32_
31dc0 57 43 45 29 0a 20 20 2f 2a 20 57 69 6e 64 6f 77  WCE).  /* Window
31dd0 73 20 43 45 20 28 61 72 6d 2d 77 69 6e 63 65 2d  s CE (arm-wince-
31de0 6d 69 6e 67 77 33 32 63 65 2d 67 63 63 29 20 64  mingw32ce-gcc) d
31df0 6f 65 73 20 6e 6f 74 20 70 72 6f 76 69 64 65 20  oes not provide 
31e00 67 65 74 65 6e 76 28 29 0a 20 20 20 2a 2f 0a 20  getenv().   */. 
31e10 20 68 6f 6d 65 5f 64 69 72 20 3d 20 22 2f 22 3b   home_dir = "/";
31e20 0a 23 65 6c 73 65 0a 0a 23 69 66 20 64 65 66 69  .#else..#if defi
31e30 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64  ned(_WIN32) || d
31e40 65 66 69 6e 65 64 28 57 49 4e 33 32 29 0a 20 20  efined(WIN32).  
31e50 69 66 20 28 21 68 6f 6d 65 5f 64 69 72 29 20 7b  if (!home_dir) {
31e60 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20  .    home_dir = 
31e70 67 65 74 65 6e 76 28 22 55 53 45 52 50 52 4f 46  getenv("USERPROF
31e80 49 4c 45 22 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  ILE");.  }.#endi
31e90 66 0a 0a 20 20 69 66 20 28 21 68 6f 6d 65 5f 64  f..  if (!home_d
31ea0 69 72 29 20 7b 0a 20 20 20 20 68 6f 6d 65 5f 64  ir) {.    home_d
31eb0 69 72 20 3d 20 67 65 74 65 6e 76 28 22 48 4f 4d  ir = getenv("HOM
31ec0 45 22 29 3b 0a 20 20 7d 0a 0a 23 69 66 20 64 65  E");.  }..#if de
31ed0 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c  fined(_WIN32) ||
31ee0 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29 0a   defined(WIN32).
31ef0 20 20 69 66 20 28 21 68 6f 6d 65 5f 64 69 72 29    if (!home_dir)
31f00 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 72   {.    char *zDr
31f10 69 76 65 2c 20 2a 7a 50 61 74 68 3b 0a 20 20 20  ive, *zPath;.   
31f20 20 69 6e 74 20 6e 3b 0a 20 20 20 20 7a 44 72 69   int n;.    zDri
31f30 76 65 20 3d 20 67 65 74 65 6e 76 28 22 48 4f 4d  ve = getenv("HOM
31f40 45 44 52 49 56 45 22 29 3b 0a 20 20 20 20 7a 50  EDRIVE");.    zP
31f50 61 74 68 20 3d 20 67 65 74 65 6e 76 28 22 48 4f  ath = getenv("HO
31f60 4d 45 50 41 54 48 22 29 3b 0a 20 20 20 20 69 66  MEPATH");.    if
31f70 28 20 7a 44 72 69 76 65 20 26 26 20 7a 50 61 74  ( zDrive && zPat
31f80 68 20 29 7b 0a 20 20 20 20 20 20 6e 20 3d 20 73  h ){.      n = s
31f90 74 72 6c 65 6e 33 30 28 7a 44 72 69 76 65 29 20  trlen30(zDrive) 
31fa0 2b 20 73 74 72 6c 65 6e 33 30 28 7a 50 61 74 68  + strlen30(zPath
31fb0 29 20 2b 20 31 3b 0a 20 20 20 20 20 20 68 6f 6d  ) + 1;.      hom
31fc0 65 5f 64 69 72 20 3d 20 6d 61 6c 6c 6f 63 28 20  e_dir = malloc( 
31fd0 6e 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 68  n );.      if( h
31fe0 6f 6d 65 5f 64 69 72 3d 3d 30 20 29 20 72 65 74  ome_dir==0 ) ret
31ff0 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 73 71 6c  urn 0;.      sql
32000 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 6e 2c  ite3_snprintf(n,
32010 20 68 6f 6d 65 5f 64 69 72 2c 20 22 25 73 25 73   home_dir, "%s%s
32020 22 2c 20 7a 44 72 69 76 65 2c 20 7a 50 61 74 68  ", zDrive, zPath
32030 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
32040 68 6f 6d 65 5f 64 69 72 3b 0a 20 20 20 20 7d 0a  home_dir;.    }.
32050 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20 22      home_dir = "
32060 63 3a 5c 5c 22 3b 0a 20 20 7d 0a 23 65 6e 64 69  c:\\";.  }.#endi
32070 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 21 5f 57  f..#endif /* !_W
32080 49 4e 33 32 5f 57 43 45 20 2a 2f 0a 0a 20 20 69  IN32_WCE */..  i
32090 66 28 20 68 6f 6d 65 5f 64 69 72 20 29 7b 0a 20  f( home_dir ){. 
320a0 20 20 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c 65     int n = strle
320b0 6e 33 30 28 68 6f 6d 65 5f 64 69 72 29 20 2b 20  n30(home_dir) + 
320c0 31 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 20 3d  1;.    char *z =
320d0 20 6d 61 6c 6c 6f 63 28 20 6e 20 29 3b 0a 20 20   malloc( n );.  
320e0 20 20 69 66 28 20 7a 20 29 20 6d 65 6d 63 70 79    if( z ) memcpy
320f0 28 7a 2c 20 68 6f 6d 65 5f 64 69 72 2c 20 6e 29  (z, home_dir, n)
32100 3b 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d  ;.    home_dir =
32110 20 7a 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72   z;.  }..  retur
32120 6e 20 68 6f 6d 65 5f 64 69 72 3b 0a 7d 0a 0a 2f  n home_dir;.}../
32130 2a 0a 2a 2a 20 52 65 61 64 20 69 6e 70 75 74 20  *.** Read input 
32140 66 72 6f 6d 20 74 68 65 20 66 69 6c 65 20 67 69  from the file gi
32150 76 65 6e 20 62 79 20 73 71 6c 69 74 65 72 63 5f  ven by sqliterc_
32160 6f 76 65 72 72 69 64 65 2e 20 20 4f 72 20 69 66  override.  Or if
32170 20 74 68 61 74 0a 2a 2a 20 70 61 72 61 6d 65 74   that.** paramet
32180 65 72 20 69 73 20 4e 55 4c 4c 2c 20 74 61 6b 65  er is NULL, take
32190 20 69 6e 70 75 74 20 66 72 6f 6d 20 7e 2f 2e 73   input from ~/.s
321a0 71 6c 69 74 65 72 63 0a 2a 2a 0a 2a 2a 20 52 65  qliterc.**.** Re
321b0 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
321c0 20 6f 66 20 65 72 72 6f 72 73 2e 0a 2a 2f 0a 73   of errors..*/.s
321d0 74 61 74 69 63 20 76 6f 69 64 20 70 72 6f 63 65  tatic void proce
321e0 73 73 5f 73 71 6c 69 74 65 72 63 28 0a 20 20 53  ss_sqliterc(.  S
321f0 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 20 20  hellState *p,   
32200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
32210 2a 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  * Configuration 
32220 64 61 74 61 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  data */.  const 
32230 63 68 61 72 20 2a 73 71 6c 69 74 65 72 63 5f 6f  char *sqliterc_o
32240 76 65 72 72 69 64 65 20 20 20 2f 2a 20 4e 61 6d  verride   /* Nam
32250 65 20 6f 66 20 63 6f 6e 66 69 67 20 66 69 6c 65  e of config file
32260 2e 20 4e 55 4c 4c 20 74 6f 20 75 73 65 20 64 65  . NULL to use de
32270 66 61 75 6c 74 20 2a 2f 0a 29 7b 0a 20 20 63 68  fault */.){.  ch
32280 61 72 20 2a 68 6f 6d 65 5f 64 69 72 20 3d 20 4e  ar *home_dir = N
32290 55 4c 4c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  ULL;.  const cha
322a0 72 20 2a 73 71 6c 69 74 65 72 63 20 3d 20 73 71  r *sqliterc = sq
322b0 6c 69 74 65 72 63 5f 6f 76 65 72 72 69 64 65 3b  literc_override;
322c0 0a 20 20 63 68 61 72 20 2a 7a 42 75 66 20 3d 20  .  char *zBuf = 
322d0 30 3b 0a 20 20 46 49 4c 45 20 2a 69 6e 20 3d 20  0;.  FILE *in = 
322e0 4e 55 4c 4c 3b 0a 0a 20 20 69 66 20 28 73 71 6c  NULL;..  if (sql
322f0 69 74 65 72 63 20 3d 3d 20 4e 55 4c 4c 29 20 7b  iterc == NULL) {
32300 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20  .    home_dir = 
32310 66 69 6e 64 5f 68 6f 6d 65 5f 64 69 72 28 30 29  find_home_dir(0)
32320 3b 0a 20 20 20 20 69 66 28 20 68 6f 6d 65 5f 64  ;.    if( home_d
32330 69 72 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  ir==0 ){.      r
32340 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
32350 2c 20 22 2d 2d 20 77 61 72 6e 69 6e 67 3a 20 63  , "-- warning: c
32360 61 6e 6e 6f 74 20 66 69 6e 64 20 68 6f 6d 65 20  annot find home 
32370 64 69 72 65 63 74 6f 72 79 3b 22 0a 20 20 20 20  directory;".    
32380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32390 20 20 22 20 63 61 6e 6e 6f 74 20 72 65 61 64 20    " cannot read 
323a0 7e 2f 2e 73 71 6c 69 74 65 72 63 5c 6e 22 29 3b  ~/.sqliterc\n");
323b0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  .      return;. 
323c0 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
323d0 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 3b 0a 20  _initialize();. 
323e0 20 20 20 7a 42 75 66 20 3d 20 73 71 6c 69 74 65     zBuf = sqlite
323f0 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 2f 2e 73  3_mprintf("%s/.s
32400 71 6c 69 74 65 72 63 22 2c 68 6f 6d 65 5f 64 69  qliterc",home_di
32410 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 72 63  r);.    sqliterc
32420 20 3d 20 7a 42 75 66 3b 0a 20 20 7d 0a 20 20 69   = zBuf;.  }.  i
32430 6e 20 3d 20 66 6f 70 65 6e 28 73 71 6c 69 74 65  n = fopen(sqlite
32440 72 63 2c 22 72 62 22 29 3b 0a 20 20 69 66 28 20  rc,"rb");.  if( 
32450 69 6e 20 29 7b 0a 20 20 20 20 69 66 28 20 73 74  in ){.    if( st
32460 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69  din_is_interacti
32470 76 65 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  ve ){.      utf8
32480 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
32490 2d 2d 20 4c 6f 61 64 69 6e 67 20 72 65 73 6f 75  -- Loading resou
324a0 72 63 65 73 20 66 72 6f 6d 20 25 73 5c 6e 22 2c  rces from %s\n",
324b0 73 71 6c 69 74 65 72 63 29 3b 0a 20 20 20 20 7d  sqliterc);.    }
324c0 0a 20 20 20 20 70 72 6f 63 65 73 73 5f 69 6e 70  .    process_inp
324d0 75 74 28 70 2c 69 6e 29 3b 0a 20 20 20 20 66 63  ut(p,in);.    fc
324e0 6c 6f 73 65 28 69 6e 29 3b 0a 20 20 7d 0a 20 20  lose(in);.  }.  
324f0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 42 75  sqlite3_free(zBu
32500 66 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 68 6f  f);.}../*.** Sho
32510 77 20 61 76 61 69 6c 61 62 6c 65 20 63 6f 6d 6d  w available comm
32520 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73  and line options
32530 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73 74  .*/.static const
32540 20 63 68 61 72 20 7a 4f 70 74 69 6f 6e 73 5b 5d   char zOptions[]
32550 20 3d 0a 20 20 22 20 20 20 2d 61 73 63 69 69 20   =.  "   -ascii 
32560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
32570 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f  t output mode to
32580 20 27 61 73 63 69 69 27 5c 6e 22 0a 20 20 22 20   'ascii'\n".  " 
32590 20 20 2d 62 61 69 6c 20 20 20 20 20 20 20 20 20    -bail         
325a0 20 20 20 20 20 20 20 73 74 6f 70 20 61 66 74 65         stop afte
325b0 72 20 68 69 74 74 69 6e 67 20 61 6e 20 65 72 72  r hitting an err
325c0 6f 72 5c 6e 22 0a 20 20 22 20 20 20 2d 62 61 74  or\n".  "   -bat
325d0 63 68 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ch              
325e0 20 66 6f 72 63 65 20 62 61 74 63 68 20 49 2f 4f   force batch I/O
325f0 5c 6e 22 0a 20 20 22 20 20 20 2d 63 6f 6c 75 6d  \n".  "   -colum
32600 6e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  n              s
32610 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74  et output mode t
32620 6f 20 27 63 6f 6c 75 6d 6e 27 5c 6e 22 0a 20 20  o 'column'\n".  
32630 22 20 20 20 2d 63 6d 64 20 43 4f 4d 4d 41 4e 44  "   -cmd COMMAND
32640 20 20 20 20 20 20 20 20 20 72 75 6e 20 5c 22 43           run \"C
32650 4f 4d 4d 41 4e 44 5c 22 20 62 65 66 6f 72 65 20  OMMAND\" before 
32660 72 65 61 64 69 6e 67 20 73 74 64 69 6e 5c 6e 22  reading stdin\n"
32670 0a 20 20 22 20 20 20 2d 63 73 76 20 20 20 20 20  .  "   -csv     
32680 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
32690 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f 20 27  output mode to '
326a0 63 73 76 27 5c 6e 22 0a 20 20 22 20 20 20 2d 65  csv'\n".  "   -e
326b0 63 68 6f 20 20 20 20 20 20 20 20 20 20 20 20 20  cho             
326c0 20 20 20 70 72 69 6e 74 20 63 6f 6d 6d 61 6e 64     print command
326d0 73 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  s before executi
326e0 6f 6e 5c 6e 22 0a 20 20 22 20 20 20 2d 69 6e 69  on\n".  "   -ini
326f0 74 20 46 49 4c 45 4e 41 4d 45 20 20 20 20 20 20  t FILENAME      
32700 20 72 65 61 64 2f 70 72 6f 63 65 73 73 20 6e 61   read/process na
32710 6d 65 64 20 66 69 6c 65 5c 6e 22 0a 20 20 22 20  med file\n".  " 
32720 20 20 2d 5b 6e 6f 5d 68 65 61 64 65 72 20 20 20    -[no]header   
32730 20 20 20 20 20 20 20 74 75 72 6e 20 68 65 61 64         turn head
32740 65 72 73 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22  ers on or off\n"
32750 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
32760 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
32770 53 33 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  S3) || defined(S
32780 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
32790 53 59 53 35 29 0a 20 20 22 20 20 20 2d 68 65 61  SYS5).  "   -hea
327a0 70 20 53 49 5a 45 20 20 20 20 20 20 20 20 20 20  p SIZE          
327b0 20 53 69 7a 65 20 6f 66 20 68 65 61 70 20 66 6f   Size of heap fo
327c0 72 20 6d 65 6d 73 79 73 33 20 6f 72 20 6d 65 6d  r memsys3 or mem
327d0 73 79 73 35 5c 6e 22 0a 23 65 6e 64 69 66 0a 20  sys5\n".#endif. 
327e0 20 22 20 20 20 2d 68 65 6c 70 20 20 20 20 20 20   "   -help      
327f0 20 20 20 20 20 20 20 20 20 20 73 68 6f 77 20 74            show t
32800 68 69 73 20 6d 65 73 73 61 67 65 5c 6e 22 0a 20  his message\n". 
32810 20 22 20 20 20 2d 68 74 6d 6c 20 20 20 20 20 20   "   -html      
32820 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6f 75            set ou
32830 74 70 75 74 20 6d 6f 64 65 20 74 6f 20 48 54 4d  tput mode to HTM
32840 4c 5c 6e 22 0a 20 20 22 20 20 20 2d 69 6e 74 65  L\n".  "   -inte
32850 72 61 63 74 69 76 65 20 20 20 20 20 20 20 20 20  ractive         
32860 66 6f 72 63 65 20 69 6e 74 65 72 61 63 74 69 76  force interactiv
32870 65 20 49 2f 4f 5c 6e 22 0a 20 20 22 20 20 20 2d  e I/O\n".  "   -
32880 6c 69 6e 65 20 20 20 20 20 20 20 20 20 20 20 20  line            
32890 20 20 20 20 73 65 74 20 6f 75 74 70 75 74 20 6d      set output m
328a0 6f 64 65 20 74 6f 20 27 6c 69 6e 65 27 5c 6e 22  ode to 'line'\n"
328b0 0a 20 20 22 20 20 20 2d 6c 69 73 74 20 20 20 20  .  "   -list    
328c0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
328d0 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f 20 27  output mode to '
328e0 6c 69 73 74 27 5c 6e 22 0a 20 20 22 20 20 20 2d  list'\n".  "   -
328f0 6c 6f 6f 6b 61 73 69 64 65 20 53 49 5a 45 20 4e  lookaside SIZE N
32900 20 20 20 20 75 73 65 20 4e 20 65 6e 74 72 69 65      use N entrie
32910 73 20 6f 66 20 53 5a 20 62 79 74 65 73 20 66 6f  s of SZ bytes fo
32920 72 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f  r lookaside memo
32930 72 79 5c 6e 22 0a 20 20 22 20 20 20 2d 6d 6d 61  ry\n".  "   -mma
32940 70 20 4e 20 20 20 20 20 20 20 20 20 20 20 20 20  p N             
32950 20 64 65 66 61 75 6c 74 20 6d 6d 61 70 20 73 69   default mmap si
32960 7a 65 20 73 65 74 20 74 6f 20 4e 5c 6e 22 0a 23  ze set to N\n".#
32970 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
32980 42 4c 45 5f 4d 55 4c 54 49 50 4c 45 58 0a 20 20  BLE_MULTIPLEX.  
32990 22 20 20 20 2d 6d 75 6c 74 69 70 6c 65 78 20 20  "   -multiplex  
329a0 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c 65 20           enable 
329b0 74 68 65 20 6d 75 6c 74 69 70 6c 65 78 6f 72 20  the multiplexor 
329c0 56 46 53 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20  VFS\n".#endif.  
329d0 22 20 20 20 2d 6e 65 77 6c 69 6e 65 20 53 45 50  "   -newline SEP
329e0 20 20 20 20 20 20 20 20 20 73 65 74 20 6f 75 74           set out
329f0 70 75 74 20 72 6f 77 20 73 65 70 61 72 61 74 6f  put row separato
32a00 72 2e 20 44 65 66 61 75 6c 74 3a 20 27 5c 5c 6e  r. Default: '\\n
32a10 27 5c 6e 22 0a 20 20 22 20 20 20 2d 6e 75 6c 6c  '\n".  "   -null
32a20 76 61 6c 75 65 20 54 45 58 54 20 20 20 20 20 20  value TEXT      
32a30 73 65 74 20 74 65 78 74 20 73 74 72 69 6e 67 20  set text string 
32a40 66 6f 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e  for NULL values.
32a50 20 44 65 66 61 75 6c 74 20 27 27 5c 6e 22 0a 20   Default ''\n". 
32a60 20 22 20 20 20 2d 70 61 67 65 63 61 63 68 65 20   "   -pagecache 
32a70 53 49 5a 45 20 4e 20 20 20 20 75 73 65 20 4e 20  SIZE N    use N 
32a80 73 6c 6f 74 73 20 6f 66 20 53 5a 20 62 79 74 65  slots of SZ byte
32a90 73 20 65 61 63 68 20 66 6f 72 20 70 61 67 65 20  s each for page 
32aa0 63 61 63 68 65 20 6d 65 6d 6f 72 79 5c 6e 22 0a  cache memory\n".
32ab0 20 20 22 20 20 20 2d 71 75 6f 74 65 20 20 20 20    "   -quote    
32ac0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6f             set o
32ad0 75 74 70 75 74 20 6d 6f 64 65 20 74 6f 20 27 71  utput mode to 'q
32ae0 75 6f 74 65 27 5c 6e 22 0a 20 20 22 20 20 20 2d  uote'\n".  "   -
32af0 73 65 70 61 72 61 74 6f 72 20 53 45 50 20 20 20  separator SEP   
32b00 20 20 20 20 73 65 74 20 6f 75 74 70 75 74 20 63      set output c
32b10 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 2e  olumn separator.
32b20 20 44 65 66 61 75 6c 74 3a 20 27 7c 27 5c 6e 22   Default: '|'\n"
32b30 0a 20 20 22 20 20 20 2d 73 74 61 74 73 20 20 20  .  "   -stats   
32b40 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e              prin
32b50 74 20 6d 65 6d 6f 72 79 20 73 74 61 74 73 20 62  t memory stats b
32b60 65 66 6f 72 65 20 65 61 63 68 20 66 69 6e 61 6c  efore each final
32b70 69 7a 65 5c 6e 22 0a 20 20 22 20 20 20 2d 76 65  ize\n".  "   -ve
32b80 72 73 69 6f 6e 20 20 20 20 20 20 20 20 20 20 20  rsion           
32b90 20 20 73 68 6f 77 20 53 51 4c 69 74 65 20 76 65    show SQLite ve
32ba0 72 73 69 6f 6e 5c 6e 22 0a 20 20 22 20 20 20 2d  rsion\n".  "   -
32bb0 76 66 73 20 4e 41 4d 45 20 20 20 20 20 20 20 20  vfs NAME        
32bc0 20 20 20 20 75 73 65 20 4e 41 4d 45 20 61 73 20      use NAME as 
32bd0 74 68 65 20 64 65 66 61 75 6c 74 20 56 46 53 5c  the default VFS\
32be0 6e 22 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  n".#ifdef SQLITE
32bf0 5f 45 4e 41 42 4c 45 5f 56 46 53 54 52 41 43 45  _ENABLE_VFSTRACE
32c00 0a 20 20 22 20 20 20 2d 76 66 73 74 72 61 63 65  .  "   -vfstrace
32c10 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 61 62              enab
32c20 6c 65 20 74 72 61 63 69 6e 67 20 6f 66 20 61 6c  le tracing of al
32c30 6c 20 56 46 53 20 63 61 6c 6c 73 5c 6e 22 0a 23  l VFS calls\n".#
32c40 65 6e 64 69 66 0a 3b 0a 73 74 61 74 69 63 20 76  endif.;.static v
32c50 6f 69 64 20 75 73 61 67 65 28 69 6e 74 20 73 68  oid usage(int sh
32c60 6f 77 44 65 74 61 69 6c 29 7b 0a 20 20 75 74 66  owDetail){.  utf
32c70 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
32c80 0a 20 20 20 20 20 20 22 55 73 61 67 65 3a 20 25  .      "Usage: %
32c90 73 20 5b 4f 50 54 49 4f 4e 53 5d 20 46 49 4c 45  s [OPTIONS] FILE
32ca0 4e 41 4d 45 20 5b 53 51 4c 5d 5c 6e 22 0a 20 20  NAME [SQL]\n".  
32cb0 20 20 20 20 22 46 49 4c 45 4e 41 4d 45 20 69 73      "FILENAME is
32cc0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20   the name of an 
32cd0 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 2e  SQLite database.
32ce0 20 41 20 6e 65 77 20 64 61 74 61 62 61 73 65 20   A new database 
32cf0 69 73 20 63 72 65 61 74 65 64 5c 6e 22 0a 20 20  is created\n".  
32d00 20 20 20 20 22 69 66 20 74 68 65 20 66 69 6c 65      "if the file
32d10 20 64 6f 65 73 20 6e 6f 74 20 70 72 65 76 69 6f   does not previo
32d20 75 73 6c 79 20 65 78 69 73 74 2e 5c 6e 22 2c 20  usly exist.\n", 
32d30 41 72 67 76 30 29 3b 0a 20 20 69 66 28 20 73 68  Argv0);.  if( sh
32d40 6f 77 44 65 74 61 69 6c 20 29 7b 0a 20 20 20 20  owDetail ){.    
32d50 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
32d60 72 72 2c 20 22 4f 50 54 49 4f 4e 53 20 69 6e 63  rr, "OPTIONS inc
32d70 6c 75 64 65 3a 5c 6e 25 73 22 2c 20 7a 4f 70 74  lude:\n%s", zOpt
32d80 69 6f 6e 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ions);.  }else{.
32d90 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
32da0 74 64 65 72 72 2c 20 22 55 73 65 20 74 68 65 20  tderr, "Use the 
32db0 2d 68 65 6c 70 20 6f 70 74 69 6f 6e 20 66 6f 72  -help option for
32dc0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
32dd0 72 6d 61 74 69 6f 6e 5c 6e 22 29 3b 0a 20 20 7d  rmation\n");.  }
32de0 0a 20 20 65 78 69 74 28 31 29 3b 0a 7d 0a 0a 2f  .  exit(1);.}../
32df0 2a 0a 2a 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20  *.** Initialize 
32e00 74 68 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d  the state inform
32e10 61 74 69 6f 6e 20 69 6e 20 64 61 74 61 0a 2a 2f  ation in data.*/
32e20 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d 61 69  .static void mai
32e30 6e 5f 69 6e 69 74 28 53 68 65 6c 6c 53 74 61 74  n_init(ShellStat
32e40 65 20 2a 64 61 74 61 29 20 7b 0a 20 20 6d 65 6d  e *data) {.  mem
32e50 73 65 74 28 64 61 74 61 2c 20 30 2c 20 73 69 7a  set(data, 0, siz
32e60 65 6f 66 28 2a 64 61 74 61 29 29 3b 0a 20 20 64  eof(*data));.  d
32e70 61 74 61 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 20  ata->normalMode 
32e80 3d 20 64 61 74 61 2d 3e 63 4d 6f 64 65 20 3d 20  = data->cMode = 
32e90 64 61 74 61 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44  data->mode = MOD
32ea0 45 5f 4c 69 73 74 3b 0a 20 20 64 61 74 61 2d 3e  E_List;.  data->
32eb0 61 75 74 6f 45 78 70 6c 61 69 6e 20 3d 20 31 3b  autoExplain = 1;
32ec0 0a 20 20 6d 65 6d 63 70 79 28 64 61 74 61 2d 3e  .  memcpy(data->
32ed0 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c 53 45 50  colSeparator,SEP
32ee0 5f 43 6f 6c 75 6d 6e 2c 20 32 29 3b 0a 20 20 6d  _Column, 2);.  m
32ef0 65 6d 63 70 79 28 64 61 74 61 2d 3e 72 6f 77 53  emcpy(data->rowS
32f00 65 70 61 72 61 74 6f 72 2c 53 45 50 5f 52 6f 77  eparator,SEP_Row
32f10 2c 20 32 29 3b 0a 20 20 64 61 74 61 2d 3e 73 68  , 2);.  data->sh
32f20 6f 77 48 65 61 64 65 72 20 3d 20 30 3b 0a 20 20  owHeader = 0;.  
32f30 64 61 74 61 2d 3e 73 68 65 6c 6c 46 6c 67 73 20  data->shellFlgs 
32f40 3d 20 53 48 46 4c 47 5f 4c 6f 6f 6b 61 73 69 64  = SHFLG_Lookasid
32f50 65 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  e;.  sqlite3_con
32f60 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49  fig(SQLITE_CONFI
32f70 47 5f 55 52 49 2c 20 31 29 3b 0a 20 20 73 71 6c  G_URI, 1);.  sql
32f80 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49  ite3_config(SQLI
32f90 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20 73  TE_CONFIG_LOG, s
32fa0 68 65 6c 6c 4c 6f 67 2c 20 64 61 74 61 29 3b 0a  hellLog, data);.
32fb0 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67    sqlite3_config
32fc0 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d  (SQLITE_CONFIG_M
32fd0 55 4c 54 49 54 48 52 45 41 44 29 3b 0a 20 20 73  ULTITHREAD);.  s
32fe0 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
32ff0 73 69 7a 65 6f 66 28 6d 61 69 6e 50 72 6f 6d 70  sizeof(mainPromp
33000 74 29 2c 20 6d 61 69 6e 50 72 6f 6d 70 74 2c 22  t), mainPrompt,"
33010 73 71 6c 69 74 65 3e 20 22 29 3b 0a 20 20 73 71  sqlite> ");.  sq
33020 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
33030 69 7a 65 6f 66 28 63 6f 6e 74 69 6e 75 65 50 72  izeof(continuePr
33040 6f 6d 70 74 29 2c 20 63 6f 6e 74 69 6e 75 65 50  ompt), continueP
33050 72 6f 6d 70 74 2c 22 20 20 20 2e 2e 2e 3e 20 22  rompt,"   ...> "
33060 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70  );.}../*.** Outp
33070 75 74 20 74 65 78 74 20 74 6f 20 74 68 65 20 63  ut text to the c
33080 6f 6e 73 6f 6c 65 20 69 6e 20 61 20 66 6f 6e 74  onsole in a font
33090 20 74 68 61 74 20 61 74 74 72 61 63 74 73 20 65   that attracts e
330a0 78 74 72 61 20 61 74 74 65 6e 74 69 6f 6e 2e 0a  xtra attention..
330b0 2a 2f 0a 23 69 66 64 65 66 20 5f 57 49 4e 33 32  */.#ifdef _WIN32
330c0 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70 72 69  .static void pri
330d0 6e 74 42 6f 6c 64 28 63 6f 6e 73 74 20 63 68 61  ntBold(const cha
330e0 72 20 2a 7a 54 65 78 74 29 7b 0a 20 20 48 41 4e  r *zText){.  HAN
330f0 44 4c 45 20 6f 75 74 20 3d 20 47 65 74 53 74 64  DLE out = GetStd
33100 48 61 6e 64 6c 65 28 53 54 44 5f 4f 55 54 50 55  Handle(STD_OUTPU
33110 54 5f 48 41 4e 44 4c 45 29 3b 0a 20 20 43 4f 4e  T_HANDLE);.  CON
33120 53 4f 4c 45 5f 53 43 52 45 45 4e 5f 42 55 46 46  SOLE_SCREEN_BUFF
33130 45 52 5f 49 4e 46 4f 20 64 65 66 61 75 6c 74 53  ER_INFO defaultS
33140 63 72 65 65 6e 49 6e 66 6f 3b 0a 20 20 47 65 74  creenInfo;.  Get
33150 43 6f 6e 73 6f 6c 65 53 63 72 65 65 6e 42 75 66  ConsoleScreenBuf
33160 66 65 72 49 6e 66 6f 28 6f 75 74 2c 20 26 64 65  ferInfo(out, &de
33170 66 61 75 6c 74 53 63 72 65 65 6e 49 6e 66 6f 29  faultScreenInfo)
33180 3b 0a 20 20 53 65 74 43 6f 6e 73 6f 6c 65 54 65  ;.  SetConsoleTe
33190 78 74 41 74 74 72 69 62 75 74 65 28 6f 75 74 2c  xtAttribute(out,
331a0 0a 20 20 20 20 20 20 20 20 20 46 4f 52 45 47 52  .         FOREGR
331b0 4f 55 4e 44 5f 52 45 44 7c 46 4f 52 45 47 52 4f  OUND_RED|FOREGRO
331c0 55 4e 44 5f 49 4e 54 45 4e 53 49 54 59 0a 20 20  UND_INTENSITY.  
331d0 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 25 73 22  );.  printf("%s"
331e0 2c 20 7a 54 65 78 74 29 3b 0a 20 20 53 65 74 43  , zText);.  SetC
331f0 6f 6e 73 6f 6c 65 54 65 78 74 41 74 74 72 69 62  onsoleTextAttrib
33200 75 74 65 28 6f 75 74 2c 20 64 65 66 61 75 6c 74  ute(out, default
33210 53 63 72 65 65 6e 49 6e 66 6f 2e 77 41 74 74 72  ScreenInfo.wAttr
33220 69 62 75 74 65 73 29 3b 0a 7d 0a 23 65 6c 73 65  ibutes);.}.#else
33230 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70 72 69  .static void pri
33240 6e 74 42 6f 6c 64 28 63 6f 6e 73 74 20 63 68 61  ntBold(const cha
33250 72 20 2a 7a 54 65 78 74 29 7b 0a 20 20 70 72 69  r *zText){.  pri
33260 6e 74 66 28 22 5c 30 33 33 5b 31 6d 25 73 5c 30  ntf("\033[1m%s\0
33270 33 33 5b 30 6d 22 2c 20 7a 54 65 78 74 29 3b 0a  33[0m", zText);.
33280 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
33290 47 65 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  Get the argument
332a0 20 74 6f 20 61 6e 20 2d 2d 6f 70 74 69 6f 6e 2e   to an --option.
332b0 20 20 54 68 72 6f 77 20 61 6e 20 65 72 72 6f 72    Throw an error
332c0 20 61 6e 64 20 64 69 65 20 69 66 20 6e 6f 20 61   and die if no a
332d0 72 67 75 6d 65 6e 74 0a 2a 2a 20 69 73 20 61 76  rgument.** is av
332e0 61 69 6c 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74  ailable..*/.stat
332f0 69 63 20 63 68 61 72 20 2a 63 6d 64 6c 69 6e 65  ic char *cmdline
33300 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 69 6e  _option_value(in
33310 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61  t argc, char **a
33320 72 67 76 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69  rgv, int i){.  i
33330 66 28 20 69 3d 3d 61 72 67 63 20 29 7b 0a 20 20  f( i==argc ){.  
33340 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
33350 64 65 72 72 2c 20 22 25 73 3a 20 45 72 72 6f 72  derr, "%s: Error
33360 3a 20 6d 69 73 73 69 6e 67 20 61 72 67 75 6d 65  : missing argume
33370 6e 74 20 74 6f 20 25 73 5c 6e 22 2c 0a 20 20 20  nt to %s\n",.   
33380 20 20 20 20 20 20 20 20 20 61 72 67 76 5b 30 5d           argv[0]
33390 2c 20 61 72 67 76 5b 61 72 67 63 2d 31 5d 29 3b  , argv[argc-1]);
333a0 0a 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20  .    exit(1);.  
333b0 7d 0a 20 20 72 65 74 75 72 6e 20 61 72 67 76 5b  }.  return argv[
333c0 69 5d 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  i];.}..#ifndef S
333d0 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53 5f 55  QLITE_SHELL_IS_U
333e0 54 46 38 0a 23 20 20 69 66 20 28 64 65 66 69 6e  TF8.#  if (defin
333f0 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65  ed(_WIN32) || de
33400 66 69 6e 65 64 28 57 49 4e 33 32 29 29 20 26 26  fined(WIN32)) &&
33410 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45   defined(_MSC_VE
33420 52 29 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  R).#    define S
33430 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53 5f 55  QLITE_SHELL_IS_U
33440 54 46 38 20 20 20 20 20 20 20 20 20 20 28 30 29  TF8          (0)
33450 0a 23 20 20 65 6c 73 65 0a 23 20 20 20 20 64 65  .#  else.#    de
33460 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 48 45 4c  fine SQLITE_SHEL
33470 4c 5f 49 53 5f 55 54 46 38 20 20 20 20 20 20 20  L_IS_UTF8       
33480 20 20 20 28 31 29 0a 23 20 20 65 6e 64 69 66 0a     (1).#  endif.
33490 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49  #endif..#if SQLI
334a0 54 45 5f 53 48 45 4c 4c 5f 49 53 5f 55 54 46 38  TE_SHELL_IS_UTF8
334b0 0a 69 6e 74 20 53 51 4c 49 54 45 5f 43 44 45 43  .int SQLITE_CDEC
334c0 4c 20 6d 61 69 6e 28 69 6e 74 20 61 72 67 63 2c  L main(int argc,
334d0 20 63 68 61 72 20 2a 2a 61 72 67 76 29 7b 0a 23   char **argv){.#
334e0 65 6c 73 65 0a 69 6e 74 20 53 51 4c 49 54 45 5f  else.int SQLITE_
334f0 43 44 45 43 4c 20 77 6d 61 69 6e 28 69 6e 74 20  CDECL wmain(int 
33500 61 72 67 63 2c 20 77 63 68 61 72 5f 74 20 2a 2a  argc, wchar_t **
33510 77 61 72 67 76 29 7b 0a 20 20 63 68 61 72 20 2a  wargv){.  char *
33520 2a 61 72 67 76 3b 0a 23 65 6e 64 69 66 0a 20 20  *argv;.#endif.  
33530 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20  char *zErrMsg = 
33540 30 3b 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20  0;.  ShellState 
33550 64 61 74 61 3b 0a 20 20 63 6f 6e 73 74 20 63 68  data;.  const ch
33560 61 72 20 2a 7a 49 6e 69 74 46 69 6c 65 20 3d 20  ar *zInitFile = 
33570 30 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  0;.  int i;.  in
33580 74 20 72 63 20 3d 20 30 3b 0a 20 20 69 6e 74 20  t rc = 0;.  int 
33590 77 61 72 6e 49 6e 6d 65 6d 6f 72 79 44 62 20 3d  warnInmemoryDb =
335a0 20 30 3b 0a 20 20 69 6e 74 20 72 65 61 64 53 74   0;.  int readSt
335b0 64 69 6e 20 3d 20 31 3b 0a 20 20 69 6e 74 20 6e  din = 1;.  int n
335c0 43 6d 64 20 3d 20 30 3b 0a 20 20 63 68 61 72 20  Cmd = 0;.  char 
335d0 2a 2a 61 7a 43 6d 64 20 3d 20 30 3b 0a 0a 20 20  **azCmd = 0;..  
335e0 73 65 74 42 69 6e 61 72 79 4d 6f 64 65 28 73 74  setBinaryMode(st
335f0 64 69 6e 2c 20 30 29 3b 0a 20 20 73 65 74 76 62  din, 0);.  setvb
33600 75 66 28 73 74 64 65 72 72 2c 20 30 2c 20 5f 49  uf(stderr, 0, _I
33610 4f 4e 42 46 2c 20 30 29 3b 20 2f 2a 20 4d 61 6b  ONBF, 0); /* Mak
33620 65 20 73 75 72 65 20 73 74 64 65 72 72 20 69 73  e sure stderr is
33630 20 75 6e 62 75 66 66 65 72 65 64 20 2a 2f 0a 20   unbuffered */. 
33640 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61   stdin_is_intera
33650 63 74 69 76 65 20 3d 20 69 73 61 74 74 79 28 30  ctive = isatty(0
33660 29 3b 0a 20 20 73 74 64 6f 75 74 5f 69 73 5f 63  );.  stdout_is_c
33670 6f 6e 73 6f 6c 65 20 3d 20 69 73 61 74 74 79 28  onsole = isatty(
33680 31 29 3b 0a 0a 23 69 66 20 55 53 45 5f 53 59 53  1);..#if USE_SYS
33690 54 45 4d 5f 53 51 4c 49 54 45 2b 30 21 3d 31 0a  TEM_SQLITE+0!=1.
336a0 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28 73 71    if( strncmp(sq
336b0 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29  lite3_sourceid()
336c0 2c 53 51 4c 49 54 45 5f 53 4f 55 52 43 45 5f 49  ,SQLITE_SOURCE_I
336d0 44 2c 36 30 29 21 3d 30 20 29 7b 0a 20 20 20 20  D,60)!=0 ){.    
336e0 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
336f0 72 72 2c 20 22 53 51 4c 69 74 65 20 68 65 61 64  rr, "SQLite head
33700 65 72 20 61 6e 64 20 73 6f 75 72 63 65 20 76 65  er and source ve
33710 72 73 69 6f 6e 20 6d 69 73 6d 61 74 63 68 5c 6e  rsion mismatch\n
33720 25 73 5c 6e 25 73 5c 6e 22 2c 0a 20 20 20 20 20  %s\n%s\n",.     
33730 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73         sqlite3_s
33740 6f 75 72 63 65 69 64 28 29 2c 20 53 51 4c 49 54  ourceid(), SQLIT
33750 45 5f 53 4f 55 52 43 45 5f 49 44 29 3b 0a 20 20  E_SOURCE_ID);.  
33760 20 20 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a 23    exit(1);.  }.#
33770 65 6e 64 69 66 0a 20 20 6d 61 69 6e 5f 69 6e 69  endif.  main_ini
33780 74 28 26 64 61 74 61 29 3b 0a 23 69 66 20 21 53  t(&data);.#if !S
33790 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53 5f 55  QLITE_SHELL_IS_U
337a0 54 46 38 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e  TF8.  sqlite3_in
337b0 69 74 69 61 6c 69 7a 65 28 29 3b 0a 20 20 61 72  itialize();.  ar
337c0 67 76 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c  gv = sqlite3_mal
337d0 6c 6f 63 36 34 28 73 69 7a 65 6f 66 28 61 72 67  loc64(sizeof(arg
337e0 76 5b 30 5d 29 2a 61 72 67 63 29 3b 0a 20 20 69  v[0])*argc);.  i
337f0 66 28 20 61 72 67 76 3d 3d 30 20 29 7b 0a 20 20  f( argv==0 ){.  
33800 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
33810 65 72 72 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d  err, "out of mem
33820 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20 65 78 69  ory\n");.    exi
33830 74 28 31 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 28  t(1);.  }.  for(
33840 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b  i=0; i<argc; i++
33850 29 7b 0a 20 20 20 20 61 72 67 76 5b 69 5d 20 3d  ){.    argv[i] =
33860 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75   sqlite3_win32_u
33870 6e 69 63 6f 64 65 5f 74 6f 5f 75 74 66 38 28 77  nicode_to_utf8(w
33880 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20 69 66  argv[i]);.    if
33890 28 20 61 72 67 76 5b 69 5d 3d 3d 30 20 29 7b 0a  ( argv[i]==0 ){.
338a0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
338b0 28 73 74 64 65 72 72 2c 20 22 6f 75 74 20 6f 66  (stderr, "out of
338c0 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20   memory\n");.   
338d0 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20     exit(1);.    
338e0 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 61  }.  }.#endif.  a
338f0 73 73 65 72 74 28 20 61 72 67 63 3e 3d 31 20 26  ssert( argc>=1 &
33900 26 20 61 72 67 76 20 26 26 20 61 72 67 76 5b 30  & argv && argv[0
33910 5d 20 29 3b 0a 20 20 41 72 67 76 30 20 3d 20 61  ] );.  Argv0 = a
33920 72 67 76 5b 30 5d 3b 0a 0a 20 20 2f 2a 20 4d 61  rgv[0];..  /* Ma
33930 6b 65 20 73 75 72 65 20 77 65 20 68 61 76 65 20  ke sure we have 
33940 61 20 76 61 6c 69 64 20 73 69 67 6e 61 6c 20 68  a valid signal h
33950 61 6e 64 6c 65 72 20 65 61 72 6c 79 2c 20 62 65  andler early, be
33960 66 6f 72 65 20 61 6e 79 74 68 69 6e 67 0a 20 20  fore anything.  
33970 2a 2a 20 65 6c 73 65 20 69 73 20 64 6f 6e 65 2e  ** else is done.
33980 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 49 47  .  */.#ifdef SIG
33990 49 4e 54 0a 20 20 73 69 67 6e 61 6c 28 53 49 47  INT.  signal(SIG
339a0 49 4e 54 2c 20 69 6e 74 65 72 72 75 70 74 5f 68  INT, interrupt_h
339b0 61 6e 64 6c 65 72 29 3b 0a 23 65 6e 64 69 66 0a  andler);.#endif.
339c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 53  .#ifdef SQLITE_S
339d0 48 45 4c 4c 5f 44 42 4e 41 4d 45 5f 50 52 4f 43  HELL_DBNAME_PROC
339e0 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  .  {.    /* If t
339f0 68 65 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f  he SQLITE_SHELL_
33a00 44 42 4e 41 4d 45 5f 50 52 4f 43 20 6d 61 63 72  DBNAME_PROC macr
33a10 6f 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  o is defined, th
33a20 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d  en it is the nam
33a30 65 0a 20 20 20 20 2a 2a 20 6f 66 20 61 20 43 2d  e.    ** of a C-
33a40 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 77 69  function that wi
33a50 6c 6c 20 70 72 6f 76 69 64 65 20 74 68 65 20 6e  ll provide the n
33a60 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ame of the datab
33a70 61 73 65 20 66 69 6c 65 2e 20 20 55 73 65 0a 20  ase file.  Use. 
33a80 20 20 20 2a 2a 20 74 68 69 73 20 63 6f 6d 70 69     ** this compi
33a90 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74  le-time option t
33aa0 6f 20 65 6d 62 65 64 20 74 68 69 73 20 73 68 65  o embed this she
33ab0 6c 6c 20 70 72 6f 67 72 61 6d 20 69 6e 20 6c 61  ll program in la
33ac0 72 67 65 72 0a 20 20 20 20 2a 2a 20 61 70 70 6c  rger.    ** appl
33ad0 69 63 61 74 69 6f 6e 73 2e 20 2a 2f 0a 20 20 20  ications. */.   
33ae0 20 65 78 74 65 72 6e 20 76 6f 69 64 20 53 51 4c   extern void SQL
33af0 49 54 45 5f 53 48 45 4c 4c 5f 44 42 4e 41 4d 45  ITE_SHELL_DBNAME
33b00 5f 50 52 4f 43 28 63 6f 6e 73 74 20 63 68 61 72  _PROC(const char
33b10 2a 2a 29 3b 0a 20 20 20 20 53 51 4c 49 54 45 5f  **);.    SQLITE_
33b20 53 48 45 4c 4c 5f 44 42 4e 41 4d 45 5f 50 52 4f  SHELL_DBNAME_PRO
33b30 43 28 26 64 61 74 61 2e 7a 44 62 46 69 6c 65 6e  C(&data.zDbFilen
33b40 61 6d 65 29 3b 0a 20 20 20 20 77 61 72 6e 49 6e  ame);.    warnIn
33b50 6d 65 6d 6f 72 79 44 62 20 3d 20 30 3b 0a 20 20  memoryDb = 0;.  
33b60 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 44  }.#endif..  /* D
33b70 6f 20 61 6e 20 69 6e 69 74 69 61 6c 20 70 61 73  o an initial pas
33b80 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 63 6f  s through the co
33b90 6d 6d 61 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d  mmand-line argum
33ba0 65 6e 74 20 74 6f 20 6c 6f 63 61 74 65 0a 20 20  ent to locate.  
33bb0 2a 2a 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ** the name of t
33bc0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
33bd0 2c 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  , the name of th
33be0 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
33bf0 20 66 69 6c 65 2c 0a 20 20 2a 2a 20 74 68 65 20   file,.  ** the 
33c00 73 69 7a 65 20 6f 66 20 74 68 65 20 61 6c 74 65  size of the alte
33c10 72 6e 61 74 69 76 65 20 6d 61 6c 6c 6f 63 20 68  rnative malloc h
33c20 65 61 70 2c 0a 20 20 2a 2a 20 61 6e 64 20 74 68  eap,.  ** and th
33c30 65 20 66 69 72 73 74 20 63 6f 6d 6d 61 6e 64 20  e first command 
33c40 74 6f 20 65 78 65 63 75 74 65 2e 0a 20 20 2a 2f  to execute..  */
33c50 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 61 72  .  for(i=1; i<ar
33c60 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 63 68  gc; i++){.    ch
33c70 61 72 20 2a 7a 3b 0a 20 20 20 20 7a 20 3d 20 61  ar *z;.    z = a
33c80 72 67 76 5b 69 5d 3b 0a 20 20 20 20 69 66 28 20  rgv[i];.    if( 
33c90 7a 5b 30 5d 21 3d 27 2d 27 20 29 7b 0a 20 20 20  z[0]!='-' ){.   
33ca0 20 20 20 69 66 28 20 64 61 74 61 2e 7a 44 62 46     if( data.zDbF
33cb0 69 6c 65 6e 61 6d 65 3d 3d 30 20 29 7b 0a 20 20  ilename==0 ){.  
33cc0 20 20 20 20 20 20 64 61 74 61 2e 7a 44 62 46 69        data.zDbFi
33cd0 6c 65 6e 61 6d 65 20 3d 20 7a 3b 0a 20 20 20 20  lename = z;.    
33ce0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
33cf0 20 2f 2a 20 45 78 63 65 73 73 73 20 61 72 67 75   /* Excesss argu
33d00 6d 65 6e 74 73 20 61 72 65 20 69 6e 74 65 72 70  ments are interp
33d10 72 65 74 65 64 20 61 73 20 53 51 4c 20 28 6f 72  reted as SQL (or
33d20 20 64 6f 74 2d 63 6f 6d 6d 61 6e 64 73 29 20 61   dot-commands) a
33d30 6e 64 0a 20 20 20 20 20 20 20 20 2a 2a 20 6d 65  nd.        ** me
33d40 61 6e 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 20  an that nothing 
33d50 69 73 20 72 65 61 64 20 66 72 6f 6d 20 73 74 64  is read from std
33d60 69 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65  in */.        re
33d70 61 64 53 74 64 69 6e 20 3d 20 30 3b 0a 20 20 20  adStdin = 0;.   
33d80 20 20 20 20 20 6e 43 6d 64 2b 2b 3b 0a 20 20 20       nCmd++;.   
33d90 20 20 20 20 20 61 7a 43 6d 64 20 3d 20 72 65 61       azCmd = rea
33da0 6c 6c 6f 63 28 61 7a 43 6d 64 2c 20 73 69 7a 65  lloc(azCmd, size
33db0 6f 66 28 61 7a 43 6d 64 5b 30 5d 29 2a 6e 43 6d  of(azCmd[0])*nCm
33dc0 64 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  d);.        if( 
33dd0 61 7a 43 6d 64 3d 3d 30 20 29 7b 0a 20 20 20 20  azCmd==0 ){.    
33de0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
33df0 28 73 74 64 65 72 72 2c 20 22 6f 75 74 20 6f 66  (stderr, "out of
33e00 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20   memory\n");.   
33e10 20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b 0a         exit(1);.
33e20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
33e30 20 20 61 7a 43 6d 64 5b 6e 43 6d 64 2d 31 5d 20    azCmd[nCmd-1] 
33e40 3d 20 7a 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = z;.      }.   
33e50 20 7d 0a 20 20 20 20 69 66 28 20 7a 5b 31 5d 3d   }.    if( z[1]=
33e60 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20 20 20  ='-' ) z++;.    
33e70 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 73  if( strcmp(z,"-s
33e80 65 70 61 72 61 74 6f 72 22 29 3d 3d 30 0a 20 20  eparator")==0.  
33e90 20 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22     || strcmp(z,"
33ea0 2d 6e 75 6c 6c 76 61 6c 75 65 22 29 3d 3d 30 0a  -nullvalue")==0.
33eb0 20 20 20 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a       || strcmp(z
33ec0 2c 22 2d 6e 65 77 6c 69 6e 65 22 29 3d 3d 30 0a  ,"-newline")==0.
33ed0 20 20 20 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a       || strcmp(z
33ee0 2c 22 2d 63 6d 64 22 29 3d 3d 30 0a 20 20 20 20  ,"-cmd")==0.    
33ef0 29 7b 0a 20 20 20 20 20 20 28 76 6f 69 64 29 63  ){.      (void)c
33f00 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61  mdline_option_va
33f10 6c 75 65 28 61 72 67 63 2c 20 61 72 67 76 2c 20  lue(argc, argv, 
33f20 2b 2b 69 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  ++i);.    }else 
33f30 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 69  if( strcmp(z,"-i
33f40 6e 69 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  nit")==0 ){.    
33f50 20 20 7a 49 6e 69 74 46 69 6c 65 20 3d 20 63 6d    zInitFile = cm
33f60 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c  dline_option_val
33f70 75 65 28 61 72 67 63 2c 20 61 72 67 76 2c 20 2b  ue(argc, argv, +
33f80 2b 69 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  +i);.    }else i
33f90 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 62 61  f( strcmp(z,"-ba
33fa0 74 63 68 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  tch")==0 ){.    
33fb0 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 63 68 65    /* Need to che
33fc0 63 6b 20 66 6f 72 20 62 61 74 63 68 20 6d 6f 64  ck for batch mod
33fd0 65 20 68 65 72 65 20 74 6f 20 73 6f 20 77 65 20  e here to so we 
33fe0 63 61 6e 20 61 76 6f 69 64 20 70 72 69 6e 74 69  can avoid printi
33ff0 6e 67 0a 20 20 20 20 20 20 2a 2a 20 69 6e 66 6f  ng.      ** info
34000 72 6d 61 74 69 6f 6e 61 6c 20 6d 65 73 73 61 67  rmational messag
34010 65 73 20 28 6c 69 6b 65 20 66 72 6f 6d 20 70 72  es (like from pr
34020 6f 63 65 73 73 5f 73 71 6c 69 74 65 72 63 29 20  ocess_sqliterc) 
34030 62 65 66 6f 72 65 0a 20 20 20 20 20 20 2a 2a 20  before.      ** 
34040 77 65 20 64 6f 20 74 68 65 20 61 63 74 75 61 6c  we do the actual
34050 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20 61   processing of a
34060 72 67 75 6d 65 6e 74 73 20 6c 61 74 65 72 20 69  rguments later i
34070 6e 20 61 20 73 65 63 6f 6e 64 20 70 61 73 73 2e  n a second pass.
34080 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
34090 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63  stdin_is_interac
340a0 74 69 76 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65  tive = 0;.    }e
340b0 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
340c0 2c 22 2d 68 65 61 70 22 29 3d 3d 30 20 29 7b 0a  ,"-heap")==0 ){.
340d0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
340e0 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
340f0 33 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  3) || defined(SQ
34100 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
34110 59 53 35 29 0a 20 20 20 20 20 20 63 6f 6e 73 74  YS5).      const
34120 20 63 68 61 72 20 2a 7a 53 69 7a 65 3b 0a 20 20   char *zSize;.  
34130 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36      sqlite3_int6
34140 34 20 73 7a 48 65 61 70 3b 0a 0a 20 20 20 20 20  4 szHeap;..     
34150 20 7a 53 69 7a 65 20 3d 20 63 6d 64 6c 69 6e 65   zSize = cmdline
34160 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72  _option_value(ar
34170 67 63 2c 20 61 72 67 76 2c 20 2b 2b 69 29 3b 0a  gc, argv, ++i);.
34180 20 20 20 20 20 20 73 7a 48 65 61 70 20 3d 20 69        szHeap = i
34190 6e 74 65 67 65 72 56 61 6c 75 65 28 7a 53 69 7a  ntegerValue(zSiz
341a0 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 7a  e);.      if( sz
341b0 48 65 61 70 3e 30 78 37 66 66 66 30 30 30 30 20  Heap>0x7fff0000 
341c0 29 20 73 7a 48 65 61 70 20 3d 20 30 78 37 66 66  ) szHeap = 0x7ff
341d0 66 30 30 30 30 3b 0a 20 20 20 20 20 20 73 71 6c  f0000;.      sql
341e0 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49  ite3_config(SQLI
341f0 54 45 5f 43 4f 4e 46 49 47 5f 48 45 41 50 2c 20  TE_CONFIG_HEAP, 
34200 6d 61 6c 6c 6f 63 28 28 69 6e 74 29 73 7a 48 65  malloc((int)szHe
34210 61 70 29 2c 20 28 69 6e 74 29 73 7a 48 65 61 70  ap), (int)szHeap
34220 2c 20 36 34 29 3b 0a 23 65 6c 73 65 0a 20 20 20  , 64);.#else.   
34230 20 20 20 28 76 6f 69 64 29 63 6d 64 6c 69 6e 65     (void)cmdline
34240 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72  _option_value(ar
34250 67 63 2c 20 61 72 67 76 2c 20 2b 2b 69 29 3b 0a  gc, argv, ++i);.
34260 23 65 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73 65  #endif.    }else
34270 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
34280 70 61 67 65 63 61 63 68 65 22 29 3d 3d 30 20 29  pagecache")==0 )
34290 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 2c 20 73  {.      int n, s
342a0 7a 3b 0a 20 20 20 20 20 20 73 7a 20 3d 20 28 69  z;.      sz = (i
342b0 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75 65 28  nt)integerValue(
342c0 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76  cmdline_option_v
342d0 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c 2b  alue(argc,argv,+
342e0 2b 69 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  +i));.      if( 
342f0 73 7a 3e 37 30 30 30 30 20 29 20 73 7a 20 3d 20  sz>70000 ) sz = 
34300 37 30 30 30 30 3b 0a 20 20 20 20 20 20 69 66 28  70000;.      if(
34310 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20 30 3b 0a   sz<0 ) sz = 0;.
34320 20 20 20 20 20 20 6e 20 3d 20 28 69 6e 74 29 69        n = (int)i
34330 6e 74 65 67 65 72 56 61 6c 75 65 28 63 6d 64 6c  ntegerValue(cmdl
34340 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65  ine_option_value
34350 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29  (argc,argv,++i))
34360 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
34370 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f  config(SQLITE_CO
34380 4e 46 49 47 5f 50 41 47 45 43 41 43 48 45 2c 0a  NFIG_PAGECACHE,.
34390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
343a0 20 20 20 20 28 6e 3e 30 20 26 26 20 73 7a 3e 30      (n>0 && sz>0
343b0 29 20 3f 20 6d 61 6c 6c 6f 63 28 6e 2a 73 7a 29  ) ? malloc(n*sz)
343c0 20 3a 20 30 2c 20 73 7a 2c 20 6e 29 3b 0a 20 20   : 0, sz, n);.  
343d0 20 20 20 20 64 61 74 61 2e 73 68 65 6c 6c 46 6c      data.shellFl
343e0 67 73 20 7c 3d 20 53 48 46 4c 47 5f 50 61 67 65  gs |= SHFLG_Page
343f0 63 61 63 68 65 3b 0a 20 20 20 20 7d 65 6c 73 65  cache;.    }else
34400 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
34410 6c 6f 6f 6b 61 73 69 64 65 22 29 3d 3d 30 20 29  lookaside")==0 )
34420 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 2c 20 73  {.      int n, s
34430 7a 3b 0a 20 20 20 20 20 20 73 7a 20 3d 20 28 69  z;.      sz = (i
34440 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75 65 28  nt)integerValue(
34450 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76  cmdline_option_v
34460 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c 2b  alue(argc,argv,+
34470 2b 69 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  +i));.      if( 
34480 73 7a 3c 30 20 29 20 73 7a 20 3d 20 30 3b 0a 20  sz<0 ) sz = 0;. 
34490 20 20 20 20 20 6e 20 3d 20 28 69 6e 74 29 69 6e       n = (int)in
344a0 74 65 67 65 72 56 61 6c 75 65 28 63 6d 64 6c 69  tegerValue(cmdli
344b0 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28  ne_option_value(
344c0 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b  argc,argv,++i));
344d0 0a 20 20 20 20 20 20 69 66 28 20 6e 3c 30 20 29  .      if( n<0 )
344e0 20 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 71   n = 0;.      sq
344f0 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c  lite3_config(SQL
34500 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 4f 4b 41  ITE_CONFIG_LOOKA
34510 53 49 44 45 2c 20 73 7a 2c 20 6e 29 3b 0a 20 20  SIDE, sz, n);.  
34520 20 20 20 20 69 66 28 20 73 7a 2a 6e 3d 3d 30 20      if( sz*n==0 
34530 29 20 64 61 74 61 2e 73 68 65 6c 6c 46 6c 67 73  ) data.shellFlgs
34540 20 26 3d 20 7e 53 48 46 4c 47 5f 4c 6f 6f 6b 61   &= ~SHFLG_Looka
34550 73 69 64 65 3b 0a 23 69 66 64 65 66 20 53 51 4c  side;.#ifdef SQL
34560 49 54 45 5f 45 4e 41 42 4c 45 5f 56 46 53 54 52  ITE_ENABLE_VFSTR
34570 41 43 45 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ACE.    }else if
34580 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 76 66 73  ( strcmp(z,"-vfs
34590 74 72 61 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20  trace")==0 ){.  
345a0 20 20 20 20 65 78 74 65 72 6e 20 69 6e 74 20 76      extern int v
345b0 66 73 74 72 61 63 65 5f 72 65 67 69 73 74 65 72  fstrace_register
345c0 28 0a 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74  (.         const
345d0 20 63 68 61 72 20 2a 7a 54 72 61 63 65 4e 61 6d   char *zTraceNam
345e0 65 2c 0a 20 20 20 20 20 20 20 20 20 63 6f 6e 73  e,.         cons
345f0 74 20 63 68 61 72 20 2a 7a 4f 6c 64 56 66 73 4e  t char *zOldVfsN
34600 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 69 6e  ame,.         in
34610 74 20 28 2a 78 4f 75 74 29 28 63 6f 6e 73 74 20  t (*xOut)(const 
34620 63 68 61 72 2a 2c 76 6f 69 64 2a 29 2c 0a 20 20  char*,void*),.  
34630 20 20 20 20 20 20 20 76 6f 69 64 20 2a 70 4f 75         void *pOu
34640 74 41 72 67 2c 0a 20 20 20 20 20 20 20 20 20 69  tArg,.         i
34650 6e 74 20 6d 61 6b 65 44 65 66 61 75 6c 74 0a 20  nt makeDefault. 
34660 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 76 66       );.      vf
34670 73 74 72 61 63 65 5f 72 65 67 69 73 74 65 72 28  strace_register(
34680 22 74 72 61 63 65 22 2c 30 2c 28 69 6e 74 28 2a  "trace",0,(int(*
34690 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 76 6f  )(const char*,vo
346a0 69 64 2a 29 29 66 70 75 74 73 2c 73 74 64 65 72  id*))fputs,stder
346b0 72 2c 31 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  r,1);.#endif.#if
346c0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
346d0 45 5f 4d 55 4c 54 49 50 4c 45 58 0a 20 20 20 20  E_MULTIPLEX.    
346e0 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
346f0 28 7a 2c 22 2d 6d 75 6c 74 69 70 6c 65 78 22 29  (z,"-multiplex")
34700 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 65 78 74  ==0 ){.      ext
34710 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
34720 6d 75 6c 74 69 70 6c 65 5f 69 6e 69 74 69 61 6c  multiple_initial
34730 69 7a 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ize(const char*,
34740 69 6e 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  int);.      sqli
34750 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 69 6e  te3_multiplex_in
34760 69 74 69 61 6c 69 7a 65 28 30 2c 20 31 29 3b 0a  itialize(0, 1);.
34770 23 65 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73 65  #endif.    }else
34780 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
34790 6d 6d 61 70 22 29 3d 3d 30 20 29 7b 0a 20 20 20  mmap")==0 ){.   
347a0 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34     sqlite3_int64
347b0 20 73 7a 20 3d 20 69 6e 74 65 67 65 72 56 61 6c   sz = integerVal
347c0 75 65 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f  ue(cmdline_optio
347d0 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72 67  n_value(argc,arg
347e0 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20 73  v,++i));.      s
347f0 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51  qlite3_config(SQ
34800 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50  LITE_CONFIG_MMAP
34810 5f 53 49 5a 45 2c 20 73 7a 2c 20 73 7a 29 3b 0a  _SIZE, sz, sz);.
34820 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
34830 72 63 6d 70 28 7a 2c 22 2d 76 66 73 22 29 3d 3d  rcmp(z,"-vfs")==
34840 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
34850 65 33 5f 76 66 73 20 2a 70 56 66 73 20 3d 20 73  e3_vfs *pVfs = s
34860 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28  qlite3_vfs_find(
34870 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76  cmdline_option_v
34880 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c 2b  alue(argc,argv,+
34890 2b 69 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  +i));.      if( 
348a0 70 56 66 73 20 29 7b 0a 20 20 20 20 20 20 20 20  pVfs ){.        
348b0 73 71 6c 69 74 65 33 5f 76 66 73 5f 72 65 67 69  sqlite3_vfs_regi
348c0 73 74 65 72 28 70 56 66 73 2c 20 31 29 3b 0a 20  ster(pVfs, 1);. 
348d0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
348e0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
348f0 73 74 64 65 72 72 2c 20 22 6e 6f 20 73 75 63 68  stderr, "no such
34900 20 56 46 53 3a 20 5c 22 25 73 5c 22 5c 6e 22 2c   VFS: \"%s\"\n",
34910 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20 20   argv[i]);.     
34920 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20     exit(1);.    
34930 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
34940 69 66 28 20 64 61 74 61 2e 7a 44 62 46 69 6c 65  if( data.zDbFile
34950 6e 61 6d 65 3d 3d 30 20 29 7b 0a 23 69 66 6e 64  name==0 ){.#ifnd
34960 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d  ef SQLITE_OMIT_M
34970 45 4d 4f 52 59 44 42 0a 20 20 20 20 64 61 74 61  EMORYDB.    data
34980 2e 7a 44 62 46 69 6c 65 6e 61 6d 65 20 3d 20 22  .zDbFilename = "
34990 3a 6d 65 6d 6f 72 79 3a 22 3b 0a 20 20 20 20 77  :memory:";.    w
349a0 61 72 6e 49 6e 6d 65 6d 6f 72 79 44 62 20 3d 20  arnInmemoryDb = 
349b0 61 72 67 63 3d 3d 31 3b 0a 23 65 6c 73 65 0a 20  argc==1;.#else. 
349c0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
349d0 74 64 65 72 72 2c 22 25 73 3a 20 45 72 72 6f 72  tderr,"%s: Error
349e0 3a 20 6e 6f 20 64 61 74 61 62 61 73 65 20 66 69  : no database fi
349f0 6c 65 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64  lename specified
34a00 5c 6e 22 2c 20 41 72 67 76 30 29 3b 0a 20 20 20  \n", Argv0);.   
34a10 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6e 64 69   return 1;.#endi
34a20 66 0a 20 20 7d 0a 20 20 64 61 74 61 2e 6f 75 74  f.  }.  data.out
34a30 20 3d 20 73 74 64 6f 75 74 3b 0a 0a 20 20 2f 2a   = stdout;..  /*
34a40 20 47 6f 20 61 68 65 61 64 20 61 6e 64 20 6f 70   Go ahead and op
34a50 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  en the database 
34a60 66 69 6c 65 20 69 66 20 69 74 20 61 6c 72 65 61  file if it alrea
34a70 64 79 20 65 78 69 73 74 73 2e 20 20 49 66 20 74  dy exists.  If t
34a80 68 65 0a 20 20 2a 2a 20 66 69 6c 65 20 64 6f 65  he.  ** file doe
34a90 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 64 65 6c  s not exist, del
34aa0 61 79 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 20  ay opening it.  
34ab0 54 68 69 73 20 70 72 65 76 65 6e 74 73 20 65 6d  This prevents em
34ac0 70 74 79 20 64 61 74 61 62 61 73 65 0a 20 20 2a  pty database.  *
34ad0 2a 20 66 69 6c 65 73 20 66 72 6f 6d 20 62 65 69  * files from bei
34ae0 6e 67 20 63 72 65 61 74 65 64 20 69 66 20 61 20  ng created if a 
34af0 75 73 65 72 20 6d 69 73 74 79 70 65 73 20 74 68  user mistypes th
34b00 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  e database name 
34b10 61 72 67 75 6d 65 6e 74 0a 20 20 2a 2a 20 74 6f  argument.  ** to
34b20 20 74 68 65 20 73 71 6c 69 74 65 20 63 6f 6d 6d   the sqlite comm
34b30 61 6e 64 2d 6c 69 6e 65 20 74 6f 6f 6c 2e 0a 20  and-line tool.. 
34b40 20 2a 2f 0a 20 20 69 66 28 20 61 63 63 65 73 73   */.  if( access
34b50 28 64 61 74 61 2e 7a 44 62 46 69 6c 65 6e 61 6d  (data.zDbFilenam
34b60 65 2c 20 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20  e, 0)==0 ){.    
34b70 6f 70 65 6e 5f 64 62 28 26 64 61 74 61 2c 20 30  open_db(&data, 0
34b80 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 50 72 6f  );.  }..  /* Pro
34b90 63 65 73 73 20 74 68 65 20 69 6e 69 74 69 61 6c  cess the initial
34ba0 69 7a 61 74 69 6f 6e 20 66 69 6c 65 20 69 66 20  ization file if 
34bb0 74 68 65 72 65 20 69 73 20 6f 6e 65 2e 20 20 49  there is one.  I
34bc0 66 20 6e 6f 20 2d 69 6e 69 74 20 6f 70 74 69 6f  f no -init optio
34bd0 6e 0a 20 20 2a 2a 20 69 73 20 67 69 76 65 6e 20  n.  ** is given 
34be0 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c  on the command l
34bf0 69 6e 65 2c 20 6c 6f 6f 6b 20 66 6f 72 20 61 20  ine, look for a 
34c00 66 69 6c 65 20 6e 61 6d 65 64 20 7e 2f 2e 73 71  file named ~/.sq
34c10 6c 69 74 65 72 63 20 61 6e 64 0a 20 20 2a 2a 20  literc and.  ** 
34c20 74 72 79 20 74 6f 20 70 72 6f 63 65 73 73 20 69  try to process i
34c30 74 2e 0a 20 20 2a 2f 0a 20 20 70 72 6f 63 65 73  t..  */.  proces
34c40 73 5f 73 71 6c 69 74 65 72 63 28 26 64 61 74 61  s_sqliterc(&data
34c50 2c 7a 49 6e 69 74 46 69 6c 65 29 3b 0a 0a 20 20  ,zInitFile);..  
34c60 2f 2a 20 4d 61 6b 65 20 61 20 73 65 63 6f 6e 64  /* Make a second
34c70 20 70 61 73 73 20 74 68 72 6f 75 67 68 20 74 68   pass through th
34c80 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 61  e command-line a
34c90 72 67 75 6d 65 6e 74 20 61 6e 64 20 73 65 74 0a  rgument and set.
34ca0 20 20 2a 2a 20 6f 70 74 69 6f 6e 73 2e 20 20 54    ** options.  T
34cb0 68 69 73 20 73 65 63 6f 6e 64 20 70 61 73 73 20  his second pass 
34cc0 69 73 20 64 65 6c 61 79 65 64 20 75 6e 74 69 6c  is delayed until
34cd0 20 61 66 74 65 72 20 74 68 65 20 69 6e 69 74 69   after the initi
34ce0 61 6c 69 7a 61 74 69 6f 6e 0a 20 20 2a 2a 20 66  alization.  ** f
34cf0 69 6c 65 20 69 73 20 70 72 6f 63 65 73 73 65 64  ile is processed
34d00 20 73 6f 20 74 68 61 74 20 74 68 65 20 63 6f 6d   so that the com
34d10 6d 61 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d 65  mand-line argume
34d20 6e 74 73 20 77 69 6c 6c 20 6f 76 65 72 72 69 64  nts will overrid
34d30 65 0a 20 20 2a 2a 20 73 65 74 74 69 6e 67 73 20  e.  ** settings 
34d40 69 6e 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  in the initializ
34d50 61 74 69 6f 6e 20 66 69 6c 65 2e 0a 20 20 2a 2f  ation file..  */
34d60 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 61 72  .  for(i=1; i<ar
34d70 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 63 68  gc; i++){.    ch
34d80 61 72 20 2a 7a 20 3d 20 61 72 67 76 5b 69 5d 3b  ar *z = argv[i];
34d90 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d 21 3d 27  .    if( z[0]!='
34da0 2d 27 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  -' ) continue;. 
34db0 20 20 20 69 66 28 20 7a 5b 31 5d 3d 3d 27 2d 27     if( z[1]=='-'
34dc0 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 20 20 69   ){ z++; }.    i
34dd0 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 69 6e  f( strcmp(z,"-in
34de0 69 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  it")==0 ){.     
34df0 20 69 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 20   i++;.    }else 
34e00 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 68  if( strcmp(z,"-h
34e10 74 6d 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  tml")==0 ){.    
34e20 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f    data.mode = MO
34e30 44 45 5f 48 74 6d 6c 3b 0a 20 20 20 20 7d 65 6c  DE_Html;.    }el
34e40 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
34e50 22 2d 6c 69 73 74 22 29 3d 3d 30 20 29 7b 0a 20  "-list")==0 ){. 
34e60 20 20 20 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d       data.mode =
34e70 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a 20 20 20 20   MODE_List;.    
34e80 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
34e90 28 7a 2c 22 2d 71 75 6f 74 65 22 29 3d 3d 30 20  (z,"-quote")==0 
34ea0 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 6d 6f  ){.      data.mo
34eb0 64 65 20 3d 20 4d 4f 44 45 5f 51 75 6f 74 65 3b  de = MODE_Quote;
34ec0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
34ed0 74 72 63 6d 70 28 7a 2c 22 2d 6c 69 6e 65 22 29  trcmp(z,"-line")
34ee0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74  ==0 ){.      dat
34ef0 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c 69  a.mode = MODE_Li
34f00 6e 65 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ne;.    }else if
34f10 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 63 6f 6c  ( strcmp(z,"-col
34f20 75 6d 6e 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  umn")==0 ){.    
34f30 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f    data.mode = MO
34f40 44 45 5f 43 6f 6c 75 6d 6e 3b 0a 20 20 20 20 7d  DE_Column;.    }
34f50 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
34f60 7a 2c 22 2d 63 73 76 22 29 3d 3d 30 20 29 7b 0a  z,"-csv")==0 ){.
34f70 20 20 20 20 20 20 64 61 74 61 2e 6d 6f 64 65 20        data.mode 
34f80 3d 20 4d 4f 44 45 5f 43 73 76 3b 0a 20 20 20 20  = MODE_Csv;.    
34f90 20 20 6d 65 6d 63 70 79 28 64 61 74 61 2e 63 6f    memcpy(data.co
34fa0 6c 53 65 70 61 72 61 74 6f 72 2c 22 2c 22 2c 32  lSeparator,",",2
34fb0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
34fc0 20 73 74 72 63 6d 70 28 7a 2c 22 2d 61 73 63 69   strcmp(z,"-asci
34fd0 69 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  i")==0 ){.      
34fe0 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45  data.mode = MODE
34ff0 5f 41 73 63 69 69 3b 0a 20 20 20 20 20 20 73 71  _Ascii;.      sq
35000 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
35010 69 7a 65 6f 66 28 64 61 74 61 2e 63 6f 6c 53 65  izeof(data.colSe
35020 70 61 72 61 74 6f 72 29 2c 20 64 61 74 61 2e 63  parator), data.c
35030 6f 6c 53 65 70 61 72 61 74 6f 72 2c 0a 20 20 20  olSeparator,.   
35040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35050 20 20 20 20 53 45 50 5f 55 6e 69 74 29 3b 0a 20      SEP_Unit);. 
35060 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
35070 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 64 61 74  rintf(sizeof(dat
35080 61 2e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 2c  a.rowSeparator),
35090 20 64 61 74 61 2e 72 6f 77 53 65 70 61 72 61 74   data.rowSeparat
350a0 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  or,.            
350b0 20 20 20 20 20 20 20 20 20 20 20 53 45 50 5f 52             SEP_R
350c0 65 63 6f 72 64 29 3b 0a 20 20 20 20 7d 65 6c 73  ecord);.    }els
350d0 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
350e0 2d 73 65 70 61 72 61 74 6f 72 22 29 3d 3d 30 20  -separator")==0 
350f0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
35100 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
35110 28 64 61 74 61 2e 63 6f 6c 53 65 70 61 72 61 74  (data.colSeparat
35120 6f 72 29 2c 20 64 61 74 61 2e 63 6f 6c 53 65 70  or), data.colSep
35130 61 72 61 74 6f 72 2c 0a 20 20 20 20 20 20 20 20  arator,.        
35140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
35150 25 73 22 2c 63 6d 64 6c 69 6e 65 5f 6f 70 74 69  %s",cmdline_opti
35160 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72  on_value(argc,ar
35170 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 7d 65  gv,++i));.    }e
35180 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
35190 2c 22 2d 6e 65 77 6c 69 6e 65 22 29 3d 3d 30 20  ,"-newline")==0 
351a0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
351b0 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
351c0 28 64 61 74 61 2e 72 6f 77 53 65 70 61 72 61 74  (data.rowSeparat
351d0 6f 72 29 2c 20 64 61 74 61 2e 72 6f 77 53 65 70  or), data.rowSep
351e0 61 72 61 74 6f 72 2c 0a 20 20 20 20 20 20 20 20  arator,.        
351f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
35200 25 73 22 2c 63 6d 64 6c 69 6e 65 5f 6f 70 74 69  %s",cmdline_opti
35210 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72  on_value(argc,ar
35220 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 7d 65  gv,++i));.    }e
35230 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
35240 2c 22 2d 6e 75 6c 6c 76 61 6c 75 65 22 29 3d 3d  ,"-nullvalue")==
35250 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
35260 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
35270 6f 66 28 64 61 74 61 2e 6e 75 6c 6c 56 61 6c 75  of(data.nullValu
35280 65 29 2c 20 64 61 74 61 2e 6e 75 6c 6c 56 61 6c  e), data.nullVal
35290 75 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue,.            
352a0 20 20 20 20 20 20 20 20 20 20 20 22 25 73 22 2c             "%s",
352b0 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76  cmdline_option_v
352c0 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c 2b  alue(argc,argv,+
352d0 2b 69 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  +i));.    }else 
352e0 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 68  if( strcmp(z,"-h
352f0 65 61 64 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20  eader")==0 ){.  
35300 20 20 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61      data.showHea
35310 64 65 72 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c  der = 1;.    }el
35320 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
35330 22 2d 6e 6f 68 65 61 64 65 72 22 29 3d 3d 30 20  "-noheader")==0 
35340 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 73 68  ){.      data.sh
35350 6f 77 48 65 61 64 65 72 20 3d 20 30 3b 0a 20 20  owHeader = 0;.  
35360 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
35370 6d 70 28 7a 2c 22 2d 65 63 68 6f 22 29 3d 3d 30  mp(z,"-echo")==0
35380 20 29 7b 0a 20 20 20 20 20 20 53 68 65 6c 6c 53   ){.      ShellS
35390 65 74 46 6c 61 67 28 26 64 61 74 61 2c 20 53 48  etFlag(&data, SH
353a0 46 4c 47 5f 45 63 68 6f 29 3b 0a 20 20 20 20 7d  FLG_Echo);.    }
353b0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
353c0 7a 2c 22 2d 65 71 70 22 29 3d 3d 30 20 29 7b 0a  z,"-eqp")==0 ){.
353d0 20 20 20 20 20 20 64 61 74 61 2e 61 75 74 6f 45        data.autoE
353e0 51 50 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  QP = 1;.    }els
353f0 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
35400 2d 65 71 70 66 75 6c 6c 22 29 3d 3d 30 20 29 7b  -eqpfull")==0 ){
35410 0a 20 20 20 20 20 20 64 61 74 61 2e 61 75 74 6f  .      data.auto
35420 45 51 50 20 3d 20 32 3b 0a 20 20 20 20 7d 65 6c  EQP = 2;.    }el
35430 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
35440 22 2d 73 74 61 74 73 22 29 3d 3d 30 20 29 7b 0a  "-stats")==0 ){.
35450 20 20 20 20 20 20 64 61 74 61 2e 73 74 61 74 73        data.stats
35460 4f 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  On = 1;.    }els
35470 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
35480 2d 73 63 61 6e 73 74 61 74 73 22 29 3d 3d 30 20  -scanstats")==0 
35490 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 73 63  ){.      data.sc
354a0 61 6e 73 74 61 74 73 4f 6e 20 3d 20 31 3b 0a 20  anstatsOn = 1;. 
354b0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
354c0 63 6d 70 28 7a 2c 22 2d 62 61 63 6b 73 6c 61 73  cmp(z,"-backslas
354d0 68 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  h")==0 ){.      
354e0 2f 2a 20 55 6e 64 6f 63 75 6d 65 6e 74 65 64 20  /* Undocumented 
354f0 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74  command-line opt
35500 69 6f 6e 3a 20 2d 62 61 63 6b 73 6c 61 73 68 0a  ion: -backslash.
35510 20 20 20 20 20 20 2a 2a 20 43 61 75 73 65 73 20        ** Causes 
35520 43 2d 73 74 79 6c 65 20 62 61 63 6b 73 6c 61 73  C-style backslas
35530 68 20 65 73 63 61 70 65 73 20 74 6f 20 62 65 20  h escapes to be 
35540 65 76 61 6c 75 61 74 65 64 20 69 6e 20 53 51 4c  evaluated in SQL
35550 20 73 74 61 74 65 6d 65 6e 74 73 0a 20 20 20 20   statements.    
35560 20 20 2a 2a 20 70 72 69 6f 72 20 74 6f 20 73 65    ** prior to se
35570 6e 64 69 6e 67 20 74 68 65 20 53 51 4c 20 69 6e  nding the SQL in
35580 74 6f 20 53 51 4c 69 74 65 2e 20 20 55 73 65 66  to SQLite.  Usef
35590 75 6c 20 66 6f 72 20 69 6e 6a 65 63 74 69 6e 67  ul for injecting
355a0 0a 20 20 20 20 20 20 2a 2a 20 63 72 61 7a 79 20  .      ** crazy 
355b0 62 79 74 65 73 20 69 6e 20 74 68 65 20 6d 69 64  bytes in the mid
355c0 64 6c 65 20 6f 66 20 53 51 4c 20 73 74 61 74 65  dle of SQL state
355d0 6d 65 6e 74 73 20 66 6f 72 20 74 65 73 74 69 6e  ments for testin
355e0 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e  g and debugging.
355f0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
35600 53 68 65 6c 6c 53 65 74 46 6c 61 67 28 26 64 61  ShellSetFlag(&da
35610 74 61 2c 20 53 48 46 4c 47 5f 42 61 63 6b 73 6c  ta, SHFLG_Backsl
35620 61 73 68 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  ash);.    }else 
35630 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 62  if( strcmp(z,"-b
35640 61 69 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ail")==0 ){.    
35650 20 20 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20    bail_on_error 
35660 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 1;.    }else i
35670 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 76 65  f( strcmp(z,"-ve
35680 72 73 69 6f 6e 22 29 3d 3d 30 20 29 7b 0a 20 20  rsion")==0 ){.  
35690 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 20 25      printf("%s %
356a0 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 6c 69  s\n", sqlite3_li
356b0 62 76 65 72 73 69 6f 6e 28 29 2c 20 73 71 6c 69  bversion(), sqli
356c0 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29 29 3b  te3_sourceid());
356d0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b  .      return 0;
356e0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
356f0 74 72 63 6d 70 28 7a 2c 22 2d 69 6e 74 65 72 61  trcmp(z,"-intera
35700 63 74 69 76 65 22 29 3d 3d 30 20 29 7b 0a 20 20  ctive")==0 ){.  
35710 20 20 20 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74      stdin_is_int
35720 65 72 61 63 74 69 76 65 20 3d 20 31 3b 0a 20 20  eractive = 1;.  
35730 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
35740 6d 70 28 7a 2c 22 2d 62 61 74 63 68 22 29 3d 3d  mp(z,"-batch")==
35750 30 20 29 7b 0a 20 20 20 20 20 20 73 74 64 69 6e  0 ){.      stdin
35760 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20  _is_interactive 
35770 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 0;.    }else i
35780 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 68 65  f( strcmp(z,"-he
35790 61 70 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ap")==0 ){.     
357a0 20 69 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 20   i++;.    }else 
357b0 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 70  if( strcmp(z,"-p
357c0 61 67 65 63 61 63 68 65 22 29 3d 3d 30 20 29 7b  agecache")==0 ){
357d0 0a 20 20 20 20 20 20 69 2b 3d 32 3b 0a 20 20 20  .      i+=2;.   
357e0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
357f0 70 28 7a 2c 22 2d 6c 6f 6f 6b 61 73 69 64 65 22  p(z,"-lookaside"
35800 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 2b  )==0 ){.      i+
35810 3d 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  =2;.    }else if
35820 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6d 6d 61  ( strcmp(z,"-mma
35830 70 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  p")==0 ){.      
35840 69 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  i++;.    }else i
35850 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 76 66  f( strcmp(z,"-vf
35860 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  s")==0 ){.      
35870 69 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  i++;.#ifdef SQLI
35880 54 45 5f 45 4e 41 42 4c 45 5f 56 46 53 54 52 41  TE_ENABLE_VFSTRA
35890 43 45 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  CE.    }else if(
358a0 20 73 74 72 63 6d 70 28 7a 2c 22 2d 76 66 73 74   strcmp(z,"-vfst
358b0 72 61 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  race")==0 ){.   
358c0 20 20 20 69 2b 2b 3b 0a 23 65 6e 64 69 66 0a 23     i++;.#endif.#
358d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
358e0 42 4c 45 5f 4d 55 4c 54 49 50 4c 45 58 0a 20 20  BLE_MULTIPLEX.  
358f0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
35900 6d 70 28 7a 2c 22 2d 6d 75 6c 74 69 70 6c 65 78  mp(z,"-multiplex
35910 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  ")==0 ){.      i
35920 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d  ++;.#endif.    }
35930 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
35940 7a 2c 22 2d 68 65 6c 70 22 29 3d 3d 30 20 29 7b  z,"-help")==0 ){
35950 0a 20 20 20 20 20 20 75 73 61 67 65 28 31 29 3b  .      usage(1);
35960 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
35970 74 72 63 6d 70 28 7a 2c 22 2d 63 6d 64 22 29 3d  trcmp(z,"-cmd")=
35980 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 52  =0 ){.      /* R
35990 75 6e 20 63 6f 6d 6d 61 6e 64 73 20 74 68 61 74  un commands that
359a0 20 66 6f 6c 6c 6f 77 20 2d 63 6d 64 20 66 69 72   follow -cmd fir
359b0 73 74 20 61 6e 64 20 73 65 70 61 72 61 74 65 6c  st and separatel
359c0 79 20 66 72 6f 6d 20 63 6f 6d 6d 61 6e 64 73 0a  y from commands.
359d0 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 73 69        ** that si
359e0 6d 70 6c 79 20 61 70 70 65 61 72 20 6f 6e 20 74  mply appear on t
359f0 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 2e  he command-line.
35a00 20 20 54 68 69 73 20 73 65 65 6d 73 20 67 6f 6f    This seems goo
35a10 66 79 2e 20 20 49 74 20 77 6f 75 6c 64 0a 20 20  fy.  It would.  
35a20 20 20 20 20 2a 2a 20 62 65 20 62 65 74 74 65 72      ** be better
35a30 20 69 66 20 61 6c 6c 20 63 6f 6d 6d 61 6e 64 73   if all commands
35a40 20 72 61 6e 20 69 6e 20 74 68 65 20 6f 72 64 65   ran in the orde
35a50 72 20 74 68 61 74 20 74 68 65 79 20 61 70 70 65  r that they appe
35a60 61 72 2e 20 20 42 75 74 0a 20 20 20 20 20 20 2a  ar.  But.      *
35a70 2a 20 77 65 20 72 65 74 61 69 6e 20 74 68 65 20  * we retain the 
35a80 67 6f 6f 66 79 20 62 65 68 61 76 69 6f 72 20 66  goofy behavior f
35a90 6f 72 20 68 69 73 74 6f 72 69 63 61 6c 20 63 6f  or historical co
35aa0 6d 70 61 74 69 62 69 6c 69 74 79 2e 20 2a 2f 0a  mpatibility. */.
35ab0 20 20 20 20 20 20 69 66 28 20 69 3d 3d 61 72 67        if( i==arg
35ac0 63 2d 31 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  c-1 ) break;.   
35ad0 20 20 20 7a 20 3d 20 63 6d 64 6c 69 6e 65 5f 6f     z = cmdline_o
35ae0 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63  ption_value(argc
35af0 2c 61 72 67 76 2c 2b 2b 69 29 3b 0a 20 20 20 20  ,argv,++i);.    
35b00 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 2e 27 20    if( z[0]=='.' 
35b10 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
35b20 64 6f 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 28  do_meta_command(
35b30 7a 2c 20 26 64 61 74 61 29 3b 0a 20 20 20 20 20  z, &data);.     
35b40 20 20 20 69 66 28 20 72 63 20 26 26 20 62 61 69     if( rc && bai
35b50 6c 5f 6f 6e 5f 65 72 72 6f 72 20 29 20 72 65 74  l_on_error ) ret
35b60 75 72 6e 20 72 63 3d 3d 32 20 3f 20 30 20 3a 20  urn rc==2 ? 0 : 
35b70 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  rc;.      }else{
35b80 0a 20 20 20 20 20 20 20 20 6f 70 65 6e 5f 64 62  .        open_db
35b90 28 26 64 61 74 61 2c 20 30 29 3b 0a 20 20 20 20  (&data, 0);.    
35ba0 20 20 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f 65      rc = shell_e
35bb0 78 65 63 28 64 61 74 61 2e 64 62 2c 20 7a 2c 20  xec(data.db, z, 
35bc0 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20  shell_callback, 
35bd0 26 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29  &data, &zErrMsg)
35be0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 45  ;.        if( zE
35bf0 72 72 4d 73 67 21 3d 30 20 29 7b 0a 20 20 20 20  rrMsg!=0 ){.    
35c00 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
35c10 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a  f(stderr,"Error:
35c20 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 29   %s\n", zErrMsg)
35c30 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
35c40 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20 29 20  bail_on_error ) 
35c50 72 65 74 75 72 6e 20 72 63 21 3d 30 20 3f 20 72  return rc!=0 ? r
35c60 63 20 3a 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  c : 1;.        }
35c70 65 6c 73 65 20 69 66 28 20 72 63 21 3d 30 20 29  else if( rc!=0 )
35c80 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38  {.          utf8
35c90 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
35ca0 45 72 72 6f 72 3a 20 75 6e 61 62 6c 65 20 74 6f  Error: unable to
35cb0 20 70 72 6f 63 65 73 73 20 53 51 4c 20 5c 22 25   process SQL \"%
35cc0 73 5c 22 5c 6e 22 2c 20 7a 29 3b 0a 20 20 20 20  s\"\n", z);.    
35cd0 20 20 20 20 20 20 69 66 28 20 62 61 69 6c 5f 6f        if( bail_o
35ce0 6e 5f 65 72 72 6f 72 20 29 20 72 65 74 75 72 6e  n_error ) return
35cf0 20 72 63 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   rc;.        }. 
35d00 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
35d10 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
35d20 6e 74 66 28 73 74 64 65 72 72 2c 22 25 73 3a 20  ntf(stderr,"%s: 
35d30 45 72 72 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20 6f  Error: unknown o
35d40 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 41 72  ption: %s\n", Ar
35d50 67 76 30 2c 20 7a 29 3b 0a 20 20 20 20 20 20 72  gv0, z);.      r
35d60 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
35d70 2c 22 55 73 65 20 2d 68 65 6c 70 20 66 6f 72 20  ,"Use -help for 
35d80 61 20 6c 69 73 74 20 6f 66 20 6f 70 74 69 6f 6e  a list of option
35d90 73 2e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65  s.\n");.      re
35da0 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20  turn 1;.    }.  
35db0 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20 64    data.cMode = d
35dc0 61 74 61 2e 6d 6f 64 65 3b 0a 20 20 7d 0a 0a 20  ata.mode;.  }.. 
35dd0 20 69 66 28 20 21 72 65 61 64 53 74 64 69 6e 20   if( !readStdin 
35de0 29 7b 0a 20 20 20 20 2f 2a 20 52 75 6e 20 61 6c  ){.    /* Run al
35df0 6c 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  l arguments that
35e00 20 64 6f 20 6e 6f 74 20 62 65 67 69 6e 20 77 69   do not begin wi
35e10 74 68 20 27 2d 27 20 61 73 20 69 66 20 74 68 65  th '-' as if the
35e20 79 20 77 65 72 65 20 73 65 70 61 72 61 74 65 0a  y were separate.
35e30 20 20 20 20 2a 2a 20 63 6f 6d 6d 61 6e 64 2d 6c      ** command-l
35e40 69 6e 65 20 69 6e 70 75 74 73 2c 20 65 78 63 65  ine inputs, exce
35e50 70 74 20 66 6f 72 20 74 68 65 20 61 72 67 54 6f  pt for the argTo
35e60 53 6b 69 70 20 61 72 67 75 6d 65 6e 74 20 77 68  Skip argument wh
35e70 69 63 68 20 63 6f 6e 74 61 69 6e 73 0a 20 20 20  ich contains.   
35e80 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65   ** the database
35e90 20 66 69 6c 65 6e 61 6d 65 2e 0a 20 20 20 20 2a   filename..    *
35ea0 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  /.    for(i=0; i
35eb0 3c 6e 43 6d 64 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nCmd; i++){.   
35ec0 20 20 20 69 66 28 20 61 7a 43 6d 64 5b 69 5d 5b     if( azCmd[i][
35ed0 30 5d 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 20  0]=='.' ){.     
35ee0 20 20 20 72 63 20 3d 20 64 6f 5f 6d 65 74 61 5f     rc = do_meta_
35ef0 63 6f 6d 6d 61 6e 64 28 61 7a 43 6d 64 5b 69 5d  command(azCmd[i]
35f00 2c 20 26 64 61 74 61 29 3b 0a 20 20 20 20 20 20  , &data);.      
35f10 20 20 69 66 28 20 72 63 20 29 20 72 65 74 75 72    if( rc ) retur
35f20 6e 20 72 63 3d 3d 32 20 3f 20 30 20 3a 20 72 63  n rc==2 ? 0 : rc
35f30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
35f40 20 20 20 20 20 20 20 6f 70 65 6e 5f 64 62 28 26         open_db(&
35f50 64 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20  data, 0);.      
35f60 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f 65 78 65    rc = shell_exe
35f70 63 28 64 61 74 61 2e 64 62 2c 20 61 7a 43 6d 64  c(data.db, azCmd
35f80 5b 69 5d 2c 20 73 68 65 6c 6c 5f 63 61 6c 6c 62  [i], shell_callb
35f90 61 63 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45 72  ack, &data, &zEr
35fa0 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20 20 69  rMsg);.        i
35fb0 66 28 20 7a 45 72 72 4d 73 67 21 3d 30 20 29 7b  f( zErrMsg!=0 ){
35fc0 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
35fd0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45  printf(stderr,"E
35fe0 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72  rror: %s\n", zEr
35ff0 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20 20 20  rMsg);.         
36000 20 72 65 74 75 72 6e 20 72 63 21 3d 30 20 3f 20   return rc!=0 ? 
36010 72 63 20 3a 20 31 3b 0a 20 20 20 20 20 20 20 20  rc : 1;.        
36020 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d 30 20  }else if( rc!=0 
36030 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66  ){.          utf
36040 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
36050 22 45 72 72 6f 72 3a 20 75 6e 61 62 6c 65 20 74  "Error: unable t
36060 6f 20 70 72 6f 63 65 73 73 20 53 51 4c 3a 20 25  o process SQL: %
36070 73 5c 6e 22 2c 20 61 7a 43 6d 64 5b 69 5d 29 3b  s\n", azCmd[i]);
36080 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
36090 6e 20 72 63 3b 0a 20 20 20 20 20 20 20 20 7d 0a  n rc;.        }.
360a0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
360b0 20 20 66 72 65 65 28 61 7a 43 6d 64 29 3b 0a 20    free(azCmd);. 
360c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52   }else{.    /* R
360d0 75 6e 20 63 6f 6d 6d 61 6e 64 73 20 72 65 63 65  un commands rece
360e0 69 76 65 64 20 66 72 6f 6d 20 73 74 61 6e 64 61  ived from standa
360f0 72 64 20 69 6e 70 75 74 0a 20 20 20 20 2a 2f 0a  rd input.    */.
36100 20 20 20 20 69 66 28 20 73 74 64 69 6e 5f 69 73      if( stdin_is
36110 5f 69 6e 74 65 72 61 63 74 69 76 65 20 29 7b 0a  _interactive ){.
36120 20 20 20 20 20 20 63 68 61 72 20 2a 7a 48 6f 6d        char *zHom
36130 65 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a  e;.      char *z
36140 48 69 73 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20  History = 0;.   
36150 20 20 20 69 6e 74 20 6e 48 69 73 74 6f 72 79 3b     int nHistory;
36160 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28 0a 20  .      printf(. 
36170 20 20 20 20 20 20 20 22 53 51 4c 69 74 65 20 76         "SQLite v
36180 65 72 73 69 6f 6e 20 25 73 20 25 2e 31 39 73 5c  ersion %s %.19s\
36190 6e 22 20 2f 2a 65 78 74 72 61 2d 76 65 72 73 69  n" /*extra-versi
361a0 6f 6e 2d 69 6e 66 6f 2a 2f 0a 20 20 20 20 20 20  on-info*/.      
361b0 20 20 22 45 6e 74 65 72 20 5c 22 2e 68 65 6c 70    "Enter \".help
361c0 5c 22 20 66 6f 72 20 75 73 61 67 65 20 68 69 6e  \" for usage hin
361d0 74 73 2e 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  ts.\n",.        
361e0 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69  sqlite3_libversi
361f0 6f 6e 28 29 2c 20 73 71 6c 69 74 65 33 5f 73 6f  on(), sqlite3_so
36200 75 72 63 65 69 64 28 29 0a 20 20 20 20 20 20 29  urceid().      )
36210 3b 0a 20 20 20 20 20 20 69 66 28 20 77 61 72 6e  ;.      if( warn
36220 49 6e 6d 65 6d 6f 72 79 44 62 20 29 7b 0a 20 20  InmemoryDb ){.  
36230 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 43 6f        printf("Co
36240 6e 6e 65 63 74 65 64 20 74 6f 20 61 20 22 29 3b  nnected to a ");
36250 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 42 6f  .        printBo
36260 6c 64 28 22 74 72 61 6e 73 69 65 6e 74 20 69 6e  ld("transient in
36270 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
36280 22 29 3b 0a 20 20 20 20 20 20 20 20 70 72 69 6e  ");.        prin
36290 74 66 28 22 2e 5c 6e 55 73 65 20 5c 22 2e 6f 70  tf(".\nUse \".op
362a0 65 6e 20 46 49 4c 45 4e 41 4d 45 5c 22 20 74 6f  en FILENAME\" to
362b0 20 72 65 6f 70 65 6e 20 6f 6e 20 61 20 22 0a 20   reopen on a ". 
362c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 70                "p
362d0 65 72 73 69 73 74 65 6e 74 20 64 61 74 61 62 61  ersistent databa
362e0 73 65 2e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d  se.\n");.      }
362f0 0a 20 20 20 20 20 20 7a 48 6f 6d 65 20 3d 20 66  .      zHome = f
36300 69 6e 64 5f 68 6f 6d 65 5f 64 69 72 28 30 29 3b  ind_home_dir(0);
36310 0a 20 20 20 20 20 20 69 66 28 20 7a 48 6f 6d 65  .      if( zHome
36320 20 29 7b 0a 20 20 20 20 20 20 20 20 6e 48 69 73   ){.        nHis
36330 74 6f 72 79 20 3d 20 73 74 72 6c 65 6e 33 30 28  tory = strlen30(
36340 7a 48 6f 6d 65 29 20 2b 20 32 30 3b 0a 20 20 20  zHome) + 20;.   
36350 20 20 20 20 20 69 66 28 20 28 7a 48 69 73 74 6f       if( (zHisto
36360 72 79 20 3d 20 6d 61 6c 6c 6f 63 28 6e 48 69 73  ry = malloc(nHis
36370 74 6f 72 79 29 29 21 3d 30 20 29 7b 0a 20 20 20  tory))!=0 ){.   
36380 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73         sqlite3_s
36390 6e 70 72 69 6e 74 66 28 6e 48 69 73 74 6f 72 79  nprintf(nHistory
363a0 2c 20 7a 48 69 73 74 6f 72 79 2c 22 25 73 2f 2e  , zHistory,"%s/.
363b0 73 71 6c 69 74 65 5f 68 69 73 74 6f 72 79 22 2c  sqlite_history",
363c0 20 7a 48 6f 6d 65 29 3b 0a 20 20 20 20 20 20 20   zHome);.       
363d0 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
363e0 20 69 66 28 20 7a 48 69 73 74 6f 72 79 20 29 7b   if( zHistory ){
363f0 20 73 68 65 6c 6c 5f 72 65 61 64 5f 68 69 73 74   shell_read_hist
36400 6f 72 79 28 7a 48 69 73 74 6f 72 79 29 3b 20 7d  ory(zHistory); }
36410 0a 23 69 66 20 48 41 56 45 5f 52 45 41 44 4c 49  .#if HAVE_READLI
36420 4e 45 20 7c 7c 20 48 41 56 45 5f 45 44 49 54 4c  NE || HAVE_EDITL
36430 49 4e 45 0a 20 20 20 20 20 20 72 6c 5f 61 74 74  INE.      rl_att
36440 65 6d 70 74 65 64 5f 63 6f 6d 70 6c 65 74 69 6f  empted_completio
36450 6e 5f 66 75 6e 63 74 69 6f 6e 20 3d 20 72 65 61  n_function = rea
36460 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65 74 69 6f 6e  dline_completion
36470 3b 0a 23 65 6c 69 66 20 48 41 56 45 5f 4c 49 4e  ;.#elif HAVE_LIN
36480 45 4e 4f 49 53 45 0a 20 20 20 20 20 20 6c 69 6e  ENOISE.      lin
36490 65 6e 6f 69 73 65 53 65 74 43 6f 6d 70 6c 65 74  enoiseSetComplet
364a0 69 6f 6e 43 61 6c 6c 62 61 63 6b 28 6c 69 6e 65  ionCallback(line
364b0 6e 6f 69 73 65 5f 63 6f 6d 70 6c 65 74 69 6f 6e  noise_completion
364c0 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20  );.#endif.      
364d0 72 63 20 3d 20 70 72 6f 63 65 73 73 5f 69 6e 70  rc = process_inp
364e0 75 74 28 26 64 61 74 61 2c 20 30 29 3b 0a 20 20  ut(&data, 0);.  
364f0 20 20 20 20 69 66 28 20 7a 48 69 73 74 6f 72 79      if( zHistory
36500 20 29 7b 0a 20 20 20 20 20 20 20 20 73 68 65 6c   ){.        shel
36510 6c 5f 73 74 69 66 6c 65 5f 68 69 73 74 6f 72 79  l_stifle_history
36520 28 32 30 30 30 29 3b 0a 20 20 20 20 20 20 20 20  (2000);.        
36530 73 68 65 6c 6c 5f 77 72 69 74 65 5f 68 69 73 74  shell_write_hist
36540 6f 72 79 28 7a 48 69 73 74 6f 72 79 29 3b 0a 20  ory(zHistory);. 
36550 20 20 20 20 20 20 20 66 72 65 65 28 7a 48 69 73         free(zHis
36560 74 6f 72 79 29 3b 0a 20 20 20 20 20 20 7d 0a 20  tory);.      }. 
36570 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
36580 72 63 20 3d 20 70 72 6f 63 65 73 73 5f 69 6e 70  rc = process_inp
36590 75 74 28 26 64 61 74 61 2c 20 73 74 64 69 6e 29  ut(&data, stdin)
365a0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 65  ;.    }.  }.  se
365b0 74 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 26 64 61  t_table_name(&da
365c0 74 61 2c 20 30 29 3b 0a 20 20 69 66 28 20 64 61  ta, 0);.  if( da
365d0 74 61 2e 64 62 20 29 7b 0a 20 20 20 20 73 65 73  ta.db ){.    ses
365e0 73 69 6f 6e 5f 63 6c 6f 73 65 5f 61 6c 6c 28 26  sion_close_all(&
365f0 64 61 74 61 29 3b 0a 20 20 20 20 73 71 6c 69 74  data);.    sqlit
36600 65 33 5f 63 6c 6f 73 65 28 64 61 74 61 2e 64 62  e3_close(data.db
36610 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
36620 5f 66 72 65 65 28 64 61 74 61 2e 7a 46 72 65 65  _free(data.zFree
36630 4f 6e 43 6c 6f 73 65 29 3b 0a 20 20 66 69 6e 64  OnClose);.  find
36640 5f 68 6f 6d 65 5f 64 69 72 28 31 29 3b 0a 23 69  _home_dir(1);.#i
36650 66 20 21 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f  f !SQLITE_SHELL_
36660 49 53 5f 55 54 46 38 0a 20 20 66 6f 72 28 69 3d  IS_UTF8.  for(i=
36670 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 20  0; i<argc; i++) 
36680 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 72 67  sqlite3_free(arg
36690 76 5b 69 5d 29 3b 0a 20 20 73 71 6c 69 74 65 33  v[i]);.  sqlite3
366a0 5f 66 72 65 65 28 61 72 67 76 29 3b 0a 23 65 6e  _free(argv);.#en
366b0 64 69 66 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  dif.  return rc;
366c0 0a 7d 0a                                         .}.