/ Hex Artifact Content
Login

Artifact e261e3c2f39edbabfdea00ef8f50adf7b2fd7d84fc6d78d8c2a06b335bd1916f:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66  ******.** This f
0180: 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 63 6f 64  ile contains cod
0190: 65 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  e to implement t
01a0: 68 65 20 22 73 71 6c 69 74 65 22 20 63 6f 6d 6d  he "sqlite" comm
01b0: 61 6e 64 20 6c 69 6e 65 0a 2a 2a 20 75 74 69 6c  and line.** util
01c0: 69 74 79 20 66 6f 72 20 61 63 63 65 73 73 69 6e  ity for accessin
01d0: 67 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  g SQLite databas
01e0: 65 73 2e 0a 2a 2f 0a 23 69 66 20 28 64 65 66 69  es..*/.#if (defi
01f0: 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64  ned(_WIN32) || d
0200: 65 66 69 6e 65 64 28 57 49 4e 33 32 29 29 20 26  efined(WIN32)) &
0210: 26 20 21 64 65 66 69 6e 65 64 28 5f 43 52 54 5f  & !defined(_CRT_
0220: 53 45 43 55 52 45 5f 4e 4f 5f 57 41 52 4e 49 4e  SECURE_NO_WARNIN
0230: 47 53 29 0a 2f 2a 20 54 68 69 73 20 6e 65 65 64  GS)./* This need
0240: 73 20 74 6f 20 63 6f 6d 65 20 62 65 66 6f 72 65  s to come before
0250: 20 61 6e 79 20 69 6e 63 6c 75 64 65 73 20 66 6f   any includes fo
0260: 72 20 4d 53 56 43 20 63 6f 6d 70 69 6c 65 72 20  r MSVC compiler 
0270: 2a 2f 0a 23 64 65 66 69 6e 65 20 5f 43 52 54 5f  */.#define _CRT_
0280: 53 45 43 55 52 45 5f 4e 4f 5f 57 41 52 4e 49 4e  SECURE_NO_WARNIN
0290: 47 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  GS.#endif../*.**
02a0: 20 57 61 72 6e 69 6e 67 20 70 72 61 67 6d 61 73   Warning pragmas
02b0: 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 6d 73 76   copied from msv
02c0: 63 2e 68 20 69 6e 20 74 68 65 20 63 6f 72 65 2e  c.h in the core.
02d0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
02e0: 5f 4d 53 43 5f 56 45 52 29 0a 23 70 72 61 67 6d  _MSC_VER).#pragm
02f0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0300: 65 20 3a 20 34 30 35 34 29 0a 23 70 72 61 67 6d  e : 4054).#pragm
0310: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0320: 65 20 3a 20 34 30 35 35 29 0a 23 70 72 61 67 6d  e : 4055).#pragm
0330: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0340: 65 20 3a 20 34 31 30 30 29 0a 23 70 72 61 67 6d  e : 4100).#pragm
0350: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0360: 65 20 3a 20 34 31 32 37 29 0a 23 70 72 61 67 6d  e : 4127).#pragm
0370: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0380: 65 20 3a 20 34 31 33 30 29 0a 23 70 72 61 67 6d  e : 4130).#pragm
0390: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
03a0: 65 20 3a 20 34 31 35 32 29 0a 23 70 72 61 67 6d  e : 4152).#pragm
03b0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
03c0: 65 20 3a 20 34 31 38 39 29 0a 23 70 72 61 67 6d  e : 4189).#pragm
03d0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
03e0: 65 20 3a 20 34 32 30 36 29 0a 23 70 72 61 67 6d  e : 4206).#pragm
03f0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0400: 65 20 3a 20 34 32 31 30 29 0a 23 70 72 61 67 6d  e : 4210).#pragm
0410: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0420: 65 20 3a 20 34 32 33 32 29 0a 23 70 72 61 67 6d  e : 4232).#pragm
0430: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0440: 65 20 3a 20 34 32 34 34 29 0a 23 70 72 61 67 6d  e : 4244).#pragm
0450: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0460: 65 20 3a 20 34 33 30 35 29 0a 23 70 72 61 67 6d  e : 4305).#pragm
0470: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
0480: 65 20 3a 20 34 33 30 36 29 0a 23 70 72 61 67 6d  e : 4306).#pragm
0490: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
04a0: 65 20 3a 20 34 37 30 32 29 0a 23 70 72 61 67 6d  e : 4702).#pragm
04b0: 61 20 77 61 72 6e 69 6e 67 28 64 69 73 61 62 6c  a warning(disabl
04c0: 65 20 3a 20 34 37 30 36 29 0a 23 65 6e 64 69 66  e : 4706).#endif
04d0: 20 2f 2a 20 64 65 66 69 6e 65 64 28 5f 4d 53 43   /* defined(_MSC
04e0: 5f 56 45 52 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  _VER) */../*.** 
04f0: 4e 6f 20 73 75 70 70 6f 72 74 20 66 6f 72 20 6c  No support for l
0500: 6f 61 64 61 62 6c 65 20 65 78 74 65 6e 73 69 6f  oadable extensio
0510: 6e 73 20 69 6e 20 56 78 57 6f 72 6b 73 2e 0a 2a  ns in VxWorks..*
0520: 2f 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 5f  /.#if (defined(_
0530: 5f 52 54 50 5f 5f 29 20 7c 7c 20 64 65 66 69 6e  _RTP__) || defin
0540: 65 64 28 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 29  ed(_WRS_KERNEL))
0550: 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54   && !SQLITE_OMIT
0560: 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
0570: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
0580: 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
0590: 49 4f 4e 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ION 1.#endif../*
05a0: 0a 2a 2a 20 45 6e 61 62 6c 65 20 6c 61 72 67 65  .** Enable large
05b0: 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 20 66 6f  -file support fo
05c0: 72 20 66 6f 70 65 6e 28 29 20 61 6e 64 20 66 72  r fopen() and fr
05d0: 69 65 6e 64 73 20 6f 6e 20 75 6e 69 78 2e 0a 2a  iends on unix..*
05e0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
05f0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a 23 20 64  _DISABLE_LFS.# d
0600: 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f 46 49 4c  efine _LARGE_FIL
0610: 45 20 20 20 20 20 20 20 31 0a 23 20 69 66 6e 64  E       1.# ifnd
0620: 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  ef _FILE_OFFSET_
0630: 42 49 54 53 0a 23 20 20 20 64 65 66 69 6e 65 20  BITS.#   define 
0640: 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54  _FILE_OFFSET_BIT
0650: 53 20 36 34 0a 23 20 65 6e 64 69 66 0a 23 20 64  S 64.# endif.# d
0660: 65 66 69 6e 65 20 5f 4c 41 52 47 45 46 49 4c 45  efine _LARGEFILE
0670: 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e 64 69 66  _SOURCE 1.#endif
0680: 0a 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c  ..#include <stdl
0690: 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ib.h>.#include <
06a0: 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75  string.h>.#inclu
06b0: 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e  de <stdio.h>.#in
06c0: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
06d0: 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74  .#include "sqlit
06e0: 65 33 2e 68 22 0a 23 69 66 20 53 51 4c 49 54 45  e3.h".#if SQLITE
06f0: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
0700: 54 49 4f 4e 0a 23 20 69 6e 63 6c 75 64 65 20 22  TION.# include "
0710: 73 71 6c 69 74 65 33 75 73 65 72 61 75 74 68 2e  sqlite3userauth.
0720: 68 22 0a 23 65 6e 64 69 66 0a 23 69 6e 63 6c 75  h".#endif.#inclu
0730: 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 69 6e  de <ctype.h>.#in
0740: 63 6c 75 64 65 20 3c 73 74 64 61 72 67 2e 68 3e  clude <stdarg.h>
0750: 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  ..#if !defined(_
0760: 57 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e  WIN32) && !defin
0770: 65 64 28 57 49 4e 33 32 29 0a 23 20 69 6e 63 6c  ed(WIN32).# incl
0780: 75 64 65 20 3c 73 69 67 6e 61 6c 2e 68 3e 0a 23  ude <signal.h>.#
0790: 20 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 52   if !defined(__R
07a0: 54 50 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65  TP__) && !define
07b0: 64 28 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 0a 23  d(_WRS_KERNEL).#
07c0: 20 20 69 6e 63 6c 75 64 65 20 3c 70 77 64 2e 68    include <pwd.h
07d0: 3e 0a 23 20 65 6e 64 69 66 0a 23 20 69 6e 63 6c  >.# endif.# incl
07e0: 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e 0a 23  ude <unistd.h>.#
07f0: 20 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 79   include <sys/ty
0800: 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 23  pes.h>.#endif..#
0810: 69 66 20 48 41 56 45 5f 52 45 41 44 4c 49 4e 45  if HAVE_READLINE
0820: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 72 65 61 64  .# include <read
0830: 6c 69 6e 65 2f 72 65 61 64 6c 69 6e 65 2e 68 3e  line/readline.h>
0840: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 72 65 61 64  .# include <read
0850: 6c 69 6e 65 2f 68 69 73 74 6f 72 79 2e 68 3e 0a  line/history.h>.
0860: 23 65 6e 64 69 66 0a 0a 23 69 66 20 48 41 56 45  #endif..#if HAVE
0870: 5f 45 44 49 54 4c 49 4e 45 0a 23 20 69 6e 63 6c  _EDITLINE.# incl
0880: 75 64 65 20 3c 65 64 69 74 6c 69 6e 65 2f 72 65  ude <editline/re
0890: 61 64 6c 69 6e 65 2e 68 3e 0a 23 65 6e 64 69 66  adline.h>.#endif
08a0: 0a 0a 23 69 66 20 48 41 56 45 5f 45 44 49 54 4c  ..#if HAVE_EDITL
08b0: 49 4e 45 20 7c 7c 20 48 41 56 45 5f 52 45 41 44  INE || HAVE_READ
08c0: 4c 49 4e 45 0a 0a 23 20 64 65 66 69 6e 65 20 73  LINE..# define s
08d0: 68 65 6c 6c 5f 61 64 64 5f 68 69 73 74 6f 72 79  hell_add_history
08e0: 28 58 29 20 61 64 64 5f 68 69 73 74 6f 72 79 28  (X) add_history(
08f0: 58 29 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c  X).# define shel
0900: 6c 5f 72 65 61 64 5f 68 69 73 74 6f 72 79 28 58  l_read_history(X
0910: 29 20 72 65 61 64 5f 68 69 73 74 6f 72 79 28 58  ) read_history(X
0920: 29 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c 6c  ).# define shell
0930: 5f 77 72 69 74 65 5f 68 69 73 74 6f 72 79 28 58  _write_history(X
0940: 29 20 77 72 69 74 65 5f 68 69 73 74 6f 72 79 28  ) write_history(
0950: 58 29 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c  X).# define shel
0960: 6c 5f 73 74 69 66 6c 65 5f 68 69 73 74 6f 72 79  l_stifle_history
0970: 28 58 29 20 73 74 69 66 6c 65 5f 68 69 73 74 6f  (X) stifle_histo
0980: 72 79 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  ry(X).# define s
0990: 68 65 6c 6c 5f 72 65 61 64 6c 69 6e 65 28 58 29  hell_readline(X)
09a0: 20 72 65 61 64 6c 69 6e 65 28 58 29 0a 0a 23 65   readline(X)..#e
09b0: 6c 69 66 20 48 41 56 45 5f 4c 49 4e 45 4e 4f 49  lif HAVE_LINENOI
09c0: 53 45 0a 0a 23 20 69 6e 63 6c 75 64 65 20 22 6c  SE..# include "l
09d0: 69 6e 65 6e 6f 69 73 65 2e 68 22 0a 23 20 64 65  inenoise.h".# de
09e0: 66 69 6e 65 20 73 68 65 6c 6c 5f 61 64 64 5f 68  fine shell_add_h
09f0: 69 73 74 6f 72 79 28 58 29 20 6c 69 6e 65 6e 6f  istory(X) lineno
0a00: 69 73 65 48 69 73 74 6f 72 79 41 64 64 28 58 29  iseHistoryAdd(X)
0a10: 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f  .# define shell_
0a20: 72 65 61 64 5f 68 69 73 74 6f 72 79 28 58 29 20  read_history(X) 
0a30: 6c 69 6e 65 6e 6f 69 73 65 48 69 73 74 6f 72 79  linenoiseHistory
0a40: 4c 6f 61 64 28 58 29 0a 23 20 64 65 66 69 6e 65  Load(X).# define
0a50: 20 73 68 65 6c 6c 5f 77 72 69 74 65 5f 68 69 73   shell_write_his
0a60: 74 6f 72 79 28 58 29 20 6c 69 6e 65 6e 6f 69 73  tory(X) linenois
0a70: 65 48 69 73 74 6f 72 79 53 61 76 65 28 58 29 0a  eHistorySave(X).
0a80: 23 20 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f 73  # define shell_s
0a90: 74 69 66 6c 65 5f 68 69 73 74 6f 72 79 28 58 29  tifle_history(X)
0aa0: 20 6c 69 6e 65 6e 6f 69 73 65 48 69 73 74 6f 72   linenoiseHistor
0ab0: 79 53 65 74 4d 61 78 4c 65 6e 28 58 29 0a 23 20  ySetMaxLen(X).# 
0ac0: 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f 72 65 61  define shell_rea
0ad0: 64 6c 69 6e 65 28 58 29 20 6c 69 6e 65 6e 6f 69  dline(X) linenoi
0ae0: 73 65 28 58 29 0a 0a 23 65 6c 73 65 0a 0a 23 20  se(X)..#else..# 
0af0: 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f 72 65 61  define shell_rea
0b00: 64 5f 68 69 73 74 6f 72 79 28 58 29 0a 23 20 64  d_history(X).# d
0b10: 65 66 69 6e 65 20 73 68 65 6c 6c 5f 77 72 69 74  efine shell_writ
0b20: 65 5f 68 69 73 74 6f 72 79 28 58 29 0a 23 20 64  e_history(X).# d
0b30: 65 66 69 6e 65 20 73 68 65 6c 6c 5f 73 74 69 66  efine shell_stif
0b40: 6c 65 5f 68 69 73 74 6f 72 79 28 58 29 0a 0a 23  le_history(X)..#
0b50: 20 64 65 66 69 6e 65 20 53 48 45 4c 4c 5f 55 53   define SHELL_US
0b60: 45 5f 4c 4f 43 41 4c 5f 47 45 54 4c 49 4e 45 20  E_LOCAL_GETLINE 
0b70: 31 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 20 64  1.#endif...#if d
0b80: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c  efined(_WIN32) |
0b90: 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29  | defined(WIN32)
0ba0: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 69 6f 2e 68  .# include <io.h
0bb0: 3e 0a 23 20 69 6e 63 6c 75 64 65 20 3c 66 63 6e  >.# include <fcn
0bc0: 74 6c 2e 68 3e 0a 23 20 64 65 66 69 6e 65 20 69  tl.h>.# define i
0bd0: 73 61 74 74 79 28 68 29 20 5f 69 73 61 74 74 79  satty(h) _isatty
0be0: 28 68 29 0a 23 20 69 66 6e 64 65 66 20 61 63 63  (h).# ifndef acc
0bf0: 65 73 73 0a 23 20 20 64 65 66 69 6e 65 20 61 63  ess.#  define ac
0c00: 63 65 73 73 28 66 2c 6d 29 20 5f 61 63 63 65 73  cess(f,m) _acces
0c10: 73 28 28 66 29 2c 28 6d 29 29 0a 23 20 65 6e 64  s((f),(m)).# end
0c20: 69 66 0a 23 20 75 6e 64 65 66 20 70 6f 70 65 6e  if.# undef popen
0c30: 0a 23 20 64 65 66 69 6e 65 20 70 6f 70 65 6e 20  .# define popen 
0c40: 5f 70 6f 70 65 6e 0a 23 20 75 6e 64 65 66 20 70  _popen.# undef p
0c50: 63 6c 6f 73 65 0a 23 20 64 65 66 69 6e 65 20 70  close.# define p
0c60: 63 6c 6f 73 65 20 5f 70 63 6c 6f 73 65 0a 23 65  close _pclose.#e
0c70: 6c 73 65 0a 20 2f 2a 20 4d 61 6b 65 20 73 75 72  lse. /* Make sur
0c80: 65 20 69 73 61 74 74 79 28 29 20 68 61 73 20 61  e isatty() has a
0c90: 20 70 72 6f 74 6f 74 79 70 65 2e 20 2a 2f 0a 20   prototype. */. 
0ca0: 65 78 74 65 72 6e 20 69 6e 74 20 69 73 61 74 74  extern int isatt
0cb0: 79 28 69 6e 74 29 3b 0a 0a 23 20 69 66 20 21 64  y(int);..# if !d
0cc0: 65 66 69 6e 65 64 28 5f 5f 52 54 50 5f 5f 29 20  efined(__RTP__) 
0cd0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57 52 53  && !defined(_WRS
0ce0: 5f 4b 45 52 4e 45 4c 29 0a 20 20 2f 2a 20 70 6f  _KERNEL).  /* po
0cf0: 70 65 6e 20 61 6e 64 20 70 63 6c 6f 73 65 20 61  pen and pclose a
0d00: 72 65 20 6e 6f 74 20 43 38 39 20 66 75 6e 63 74  re not C89 funct
0d10: 69 6f 6e 73 20 61 6e 64 20 73 6f 20 61 72 65 0a  ions and so are.
0d20: 20 20 2a 2a 20 73 6f 6d 65 74 69 6d 65 73 20 6f    ** sometimes o
0d30: 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
0d40: 3c 73 74 64 69 6f 2e 68 3e 20 68 65 61 64 65 72  <stdio.h> header
0d50: 20 2a 2f 0a 20 20 20 65 78 74 65 72 6e 20 46 49   */.   extern FI
0d60: 4c 45 20 2a 70 6f 70 65 6e 28 63 6f 6e 73 74 20  LE *popen(const 
0d70: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
0d80: 2a 29 3b 0a 20 20 20 65 78 74 65 72 6e 20 69 6e  *);.   extern in
0d90: 74 20 70 63 6c 6f 73 65 28 46 49 4c 45 2a 29 3b  t pclose(FILE*);
0da0: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
0db0: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 4f  e SQLITE_OMIT_PO
0dc0: 50 45 4e 20 31 0a 23 20 65 6e 64 69 66 0a 23 65  PEN 1.# endif.#e
0dd0: 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
0de0: 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 2f 2a  d(_WIN32_WCE)./*
0df0: 20 57 69 6e 64 6f 77 73 20 43 45 20 28 61 72 6d   Windows CE (arm
0e00: 2d 77 69 6e 63 65 2d 6d 69 6e 67 77 33 32 63 65  -wince-mingw32ce
0e10: 2d 67 63 63 29 20 64 6f 65 73 20 6e 6f 74 20 70  -gcc) does not p
0e20: 72 6f 76 69 64 65 20 69 73 61 74 74 79 28 29 0a  rovide isatty().
0e30: 20 2a 20 74 68 75 73 20 77 65 20 61 6c 77 61 79   * thus we alway
0e40: 73 20 61 73 73 75 6d 65 20 74 68 61 74 20 77 65  s assume that we
0e50: 20 68 61 76 65 20 61 20 63 6f 6e 73 6f 6c 65 2e   have a console.
0e60: 20 54 68 61 74 20 63 61 6e 20 62 65 0a 20 2a 20   That can be. * 
0e70: 6f 76 65 72 72 69 64 64 65 6e 20 77 69 74 68 20  overridden with 
0e80: 74 68 65 20 2d 62 61 74 63 68 20 63 6f 6d 6d 61  the -batch comma
0e90: 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a  nd line option..
0ea0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 61 74   */.#define isat
0eb0: 74 79 28 78 29 20 31 0a 23 65 6e 64 69 66 0a 0a  ty(x) 1.#endif..
0ec0: 2f 2a 20 63 74 79 70 65 20 6d 61 63 72 6f 73 20  /* ctype macros 
0ed0: 74 68 61 74 20 77 6f 72 6b 20 77 69 74 68 20 73  that work with s
0ee0: 69 67 6e 65 64 20 63 68 61 72 61 63 74 65 72 73  igned characters
0ef0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 53 70   */.#define IsSp
0f00: 61 63 65 28 58 29 20 20 69 73 73 70 61 63 65 28  ace(X)  isspace(
0f10: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 58  (unsigned char)X
0f20: 29 0a 23 64 65 66 69 6e 65 20 49 73 44 69 67 69  ).#define IsDigi
0f30: 74 28 58 29 20 20 69 73 64 69 67 69 74 28 28 75  t(X)  isdigit((u
0f40: 6e 73 69 67 6e 65 64 20 63 68 61 72 29 58 29 0a  nsigned char)X).
0f50: 23 64 65 66 69 6e 65 20 54 6f 4c 6f 77 65 72 28  #define ToLower(
0f60: 58 29 20 20 28 63 68 61 72 29 74 6f 6c 6f 77 65  X)  (char)tolowe
0f70: 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
0f80: 29 58 29 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  )X)..#if defined
0f90: 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69  (_WIN32) || defi
0fa0: 6e 65 64 28 57 49 4e 33 32 29 0a 23 69 6e 63 6c  ned(WIN32).#incl
0fb0: 75 64 65 20 3c 77 69 6e 64 6f 77 73 2e 68 3e 0a  ude <windows.h>.
0fc0: 0a 2f 2a 20 73 74 72 69 6e 67 20 63 6f 6e 76 65  ./* string conve
0fd0: 72 73 69 6f 6e 20 72 6f 75 74 69 6e 65 73 20 6f  rsion routines o
0fe0: 6e 6c 79 20 6e 65 65 64 65 64 20 6f 6e 20 57 69  nly needed on Wi
0ff0: 6e 33 32 20 2a 2f 0a 65 78 74 65 72 6e 20 63 68  n32 */.extern ch
1000: 61 72 20 2a 73 71 6c 69 74 65 33 5f 77 69 6e 33  ar *sqlite3_win3
1010: 32 5f 75 6e 69 63 6f 64 65 5f 74 6f 5f 75 74 66  2_unicode_to_utf
1020: 38 28 4c 50 43 57 53 54 52 29 3b 0a 65 78 74 65  8(LPCWSTR);.exte
1030: 72 6e 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  rn char *sqlite3
1040: 5f 77 69 6e 33 32 5f 6d 62 63 73 5f 74 6f 5f 75  _win32_mbcs_to_u
1050: 74 66 38 5f 76 32 28 63 6f 6e 73 74 20 63 68 61  tf8_v2(const cha
1060: 72 20 2a 2c 20 69 6e 74 29 3b 0a 65 78 74 65 72  r *, int);.exter
1070: 6e 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  n char *sqlite3_
1080: 77 69 6e 33 32 5f 75 74 66 38 5f 74 6f 5f 6d 62  win32_utf8_to_mb
1090: 63 73 5f 76 32 28 63 6f 6e 73 74 20 63 68 61 72  cs_v2(const char
10a0: 20 2a 2c 20 69 6e 74 29 3b 0a 65 78 74 65 72 6e   *, int);.extern
10b0: 20 4c 50 57 53 54 52 20 73 71 6c 69 74 65 33 5f   LPWSTR sqlite3_
10c0: 77 69 6e 33 32 5f 75 74 66 38 5f 74 6f 5f 75 6e  win32_utf8_to_un
10d0: 69 63 6f 64 65 28 63 6f 6e 73 74 20 63 68 61 72  icode(const char
10e0: 20 2a 7a 54 65 78 74 29 3b 0a 23 65 6e 64 69 66   *zText);.#endif
10f0: 0a 0a 2f 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c  ../* On Windows,
1100: 20 77 65 20 6e 6f 72 6d 61 6c 6c 79 20 72 75 6e   we normally run
1110: 20 77 69 74 68 20 6f 75 74 70 75 74 20 6d 6f 64   with output mod
1120: 65 20 6f 66 20 54 45 58 54 20 73 6f 20 74 68 61  e of TEXT so tha
1130: 74 20 5c 6e 20 63 68 61 72 61 63 74 65 72 73 0a  t \n characters.
1140: 2a 2a 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ** are automatic
1150: 61 6c 6c 79 20 74 72 61 6e 73 6c 61 74 65 64 20  ally translated 
1160: 69 6e 74 6f 20 5c 72 5c 6e 2e 20 20 48 6f 77 65  into \r\n.  Howe
1170: 76 65 72 2c 20 74 68 69 73 20 62 65 68 61 76 69  ver, this behavi
1180: 6f 72 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62  or needs.** to b
1190: 65 20 64 69 73 61 62 6c 65 64 20 69 6e 20 73 6f  e disabled in so
11a0: 6d 65 20 63 61 73 65 73 20 28 65 78 3a 20 77 68  me cases (ex: wh
11b0: 65 6e 20 67 65 6e 65 72 61 74 69 6e 67 20 43 53  en generating CS
11c0: 56 20 6f 75 74 70 75 74 20 61 6e 64 20 77 68 65  V output and whe
11d0: 6e 0a 2a 2a 20 72 65 6e 64 65 72 69 6e 67 20 71  n.** rendering q
11e0: 75 6f 74 65 64 20 73 74 72 69 6e 67 73 20 74 68  uoted strings th
11f0: 61 74 20 63 6f 6e 74 61 69 6e 20 5c 6e 20 63 68  at contain \n ch
1200: 61 72 61 63 74 65 72 73 29 2e 20 20 54 68 65 20  aracters).  The 
1210: 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 72 6f 75  following.** rou
1220: 74 69 6e 65 73 20 74 61 6b 65 20 63 61 72 65 20  tines take care 
1230: 6f 66 20 74 68 61 74 2e 0a 2a 2f 0a 23 69 66 20  of that..*/.#if 
1240: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
1250: 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  || defined(WIN32
1260: 29 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 65  ).static void se
1270: 74 42 69 6e 61 72 79 4d 6f 64 65 28 46 49 4c 45  tBinaryMode(FILE
1280: 20 2a 66 69 6c 65 2c 20 69 6e 74 20 69 73 4f 75   *file, int isOu
1290: 74 70 75 74 29 7b 0a 20 20 69 66 28 20 69 73 4f  tput){.  if( isO
12a0: 75 74 70 75 74 20 29 20 66 66 6c 75 73 68 28 66  utput ) fflush(f
12b0: 69 6c 65 29 3b 0a 20 20 5f 73 65 74 6d 6f 64 65  ile);.  _setmode
12c0: 28 5f 66 69 6c 65 6e 6f 28 66 69 6c 65 29 2c 20  (_fileno(file), 
12d0: 5f 4f 5f 42 49 4e 41 52 59 29 3b 0a 7d 0a 73 74  _O_BINARY);.}.st
12e0: 61 74 69 63 20 76 6f 69 64 20 73 65 74 54 65 78  atic void setTex
12f0: 74 4d 6f 64 65 28 46 49 4c 45 20 2a 66 69 6c 65  tMode(FILE *file
1300: 2c 20 69 6e 74 20 69 73 4f 75 74 70 75 74 29 7b  , int isOutput){
1310: 0a 20 20 69 66 28 20 69 73 4f 75 74 70 75 74 20  .  if( isOutput 
1320: 29 20 66 66 6c 75 73 68 28 66 69 6c 65 29 3b 0a  ) fflush(file);.
1330: 20 20 5f 73 65 74 6d 6f 64 65 28 5f 66 69 6c 65    _setmode(_file
1340: 6e 6f 28 66 69 6c 65 29 2c 20 5f 4f 5f 54 45 58  no(file), _O_TEX
1350: 54 29 3b 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65  T);.}.#else.# de
1360: 66 69 6e 65 20 73 65 74 42 69 6e 61 72 79 4d 6f  fine setBinaryMo
1370: 64 65 28 58 2c 59 29 0a 23 20 64 65 66 69 6e 65  de(X,Y).# define
1380: 20 73 65 74 54 65 78 74 4d 6f 64 65 28 58 2c 59   setTextMode(X,Y
1390: 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 54 72  ).#endif.../* Tr
13a0: 75 65 20 69 66 20 74 68 65 20 74 69 6d 65 72 20  ue if the timer 
13b0: 69 73 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 73 74  is enabled */.st
13c0: 61 74 69 63 20 69 6e 74 20 65 6e 61 62 6c 65 54  atic int enableT
13d0: 69 6d 65 72 20 3d 20 30 3b 0a 0a 2f 2a 20 52 65  imer = 0;../* Re
13e0: 74 75 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74  turn the current
13f0: 20 77 61 6c 6c 2d 63 6c 6f 63 6b 20 74 69 6d 65   wall-clock time
1400: 20 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c 69 74   */.static sqlit
1410: 65 33 5f 69 6e 74 36 34 20 74 69 6d 65 4f 66 44  e3_int64 timeOfD
1420: 61 79 28 76 6f 69 64 29 7b 0a 20 20 73 74 61 74  ay(void){.  stat
1430: 69 63 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ic sqlite3_vfs *
1440: 63 6c 6f 63 6b 56 66 73 20 3d 20 30 3b 0a 20 20  clockVfs = 0;.  
1450: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 74 3b  sqlite3_int64 t;
1460: 0a 20 20 69 66 28 20 63 6c 6f 63 6b 56 66 73 3d  .  if( clockVfs=
1470: 3d 30 20 29 20 63 6c 6f 63 6b 56 66 73 20 3d 20  =0 ) clockVfs = 
1480: 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64  sqlite3_vfs_find
1490: 28 30 29 3b 0a 20 20 69 66 28 20 63 6c 6f 63 6b  (0);.  if( clock
14a0: 56 66 73 2d 3e 69 56 65 72 73 69 6f 6e 3e 3d 32  Vfs->iVersion>=2
14b0: 20 26 26 20 63 6c 6f 63 6b 56 66 73 2d 3e 78 43   && clockVfs->xC
14c0: 75 72 72 65 6e 74 54 69 6d 65 49 6e 74 36 34 21  urrentTimeInt64!
14d0: 3d 30 20 29 7b 0a 20 20 20 20 63 6c 6f 63 6b 56  =0 ){.    clockV
14e0: 66 73 2d 3e 78 43 75 72 72 65 6e 74 54 69 6d 65  fs->xCurrentTime
14f0: 49 6e 74 36 34 28 63 6c 6f 63 6b 56 66 73 2c 20  Int64(clockVfs, 
1500: 26 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  &t);.  }else{.  
1510: 20 20 64 6f 75 62 6c 65 20 72 3b 0a 20 20 20 20    double r;.    
1520: 63 6c 6f 63 6b 56 66 73 2d 3e 78 43 75 72 72 65  clockVfs->xCurre
1530: 6e 74 54 69 6d 65 28 63 6c 6f 63 6b 56 66 73 2c  ntTime(clockVfs,
1540: 20 26 72 29 3b 0a 20 20 20 20 74 20 3d 20 28 73   &r);.    t = (s
1550: 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 28 72 2a  qlite3_int64)(r*
1560: 38 36 34 30 30 30 30 30 2e 30 29 3b 0a 20 20 7d  86400000.0);.  }
1570: 0a 20 20 72 65 74 75 72 6e 20 74 3b 0a 7d 0a 0a  .  return t;.}..
1580: 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57 49  #if !defined(_WI
1590: 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65 64  N32) && !defined
15a0: 28 57 49 4e 33 32 29 20 26 26 20 21 64 65 66 69  (WIN32) && !defi
15b0: 6e 65 64 28 5f 5f 6d 69 6e 75 78 29 0a 23 69 6e  ned(__minux).#in
15c0: 63 6c 75 64 65 20 3c 73 79 73 2f 74 69 6d 65 2e  clude <sys/time.
15d0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73  h>.#include <sys
15e0: 2f 72 65 73 6f 75 72 63 65 2e 68 3e 0a 0a 2f 2a  /resource.h>../*
15f0: 20 56 78 57 6f 72 6b 73 20 64 6f 65 73 20 6e 6f   VxWorks does no
1600: 74 20 73 75 70 70 6f 72 74 20 67 65 74 72 75 73  t support getrus
1610: 61 67 65 28 29 20 61 73 20 66 61 72 20 61 73 20  age() as far as 
1620: 77 65 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65  we can determine
1630: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
1640: 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 20 7c 7c 20  _WRS_KERNEL) || 
1650: 64 65 66 69 6e 65 64 28 5f 5f 52 54 50 5f 5f 29  defined(__RTP__)
1660: 0a 73 74 72 75 63 74 20 72 75 73 61 67 65 20 7b  .struct rusage {
1670: 0a 20 20 73 74 72 75 63 74 20 74 69 6d 65 76 61  .  struct timeva
1680: 6c 20 72 75 5f 75 74 69 6d 65 3b 20 2f 2a 20 75  l ru_utime; /* u
1690: 73 65 72 20 43 50 55 20 74 69 6d 65 20 75 73 65  ser CPU time use
16a0: 64 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 74 69  d */.  struct ti
16b0: 6d 65 76 61 6c 20 72 75 5f 73 74 69 6d 65 3b 20  meval ru_stime; 
16c0: 2f 2a 20 73 79 73 74 65 6d 20 43 50 55 20 74 69  /* system CPU ti
16d0: 6d 65 20 75 73 65 64 20 2a 2f 0a 7d 3b 0a 23 64  me used */.};.#d
16e0: 65 66 69 6e 65 20 67 65 74 72 75 73 61 67 65 28  efine getrusage(
16f0: 41 2c 42 29 20 6d 65 6d 73 65 74 28 42 2c 30 2c  A,B) memset(B,0,
1700: 73 69 7a 65 6f 66 28 2a 42 29 29 0a 23 65 6e 64  sizeof(*B)).#end
1710: 69 66 0a 0a 2f 2a 20 53 61 76 65 64 20 72 65 73  if../* Saved res
1720: 6f 75 72 63 65 20 69 6e 66 6f 72 6d 61 74 69 6f  ource informatio
1730: 6e 20 66 6f 72 20 74 68 65 20 62 65 67 69 6e 6e  n for the beginn
1740: 69 6e 67 20 6f 66 20 61 6e 20 6f 70 65 72 61 74  ing of an operat
1750: 69 6f 6e 20 2a 2f 0a 73 74 61 74 69 63 20 73 74  ion */.static st
1760: 72 75 63 74 20 72 75 73 61 67 65 20 73 42 65 67  ruct rusage sBeg
1770: 69 6e 3b 20 20 2f 2a 20 43 50 55 20 74 69 6d 65  in;  /* CPU time
1780: 20 61 74 20 73 74 61 72 74 20 2a 2f 0a 73 74 61   at start */.sta
1790: 74 69 63 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  tic sqlite3_int6
17a0: 34 20 69 42 65 67 69 6e 3b 20 20 2f 2a 20 57 61  4 iBegin;  /* Wa
17b0: 6c 6c 2d 63 6c 6f 63 6b 20 74 69 6d 65 20 61 74  ll-clock time at
17c0: 20 73 74 61 72 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   start */../*.**
17d0: 20 42 65 67 69 6e 20 74 69 6d 69 6e 67 20 61 6e   Begin timing an
17e0: 20 6f 70 65 72 61 74 69 6f 6e 0a 2a 2f 0a 73 74   operation.*/.st
17f0: 61 74 69 63 20 76 6f 69 64 20 62 65 67 69 6e 54  atic void beginT
1800: 69 6d 65 72 28 76 6f 69 64 29 7b 0a 20 20 69 66  imer(void){.  if
1810: 28 20 65 6e 61 62 6c 65 54 69 6d 65 72 20 29 7b  ( enableTimer ){
1820: 0a 20 20 20 20 67 65 74 72 75 73 61 67 65 28 52  .    getrusage(R
1830: 55 53 41 47 45 5f 53 45 4c 46 2c 20 26 73 42 65  USAGE_SELF, &sBe
1840: 67 69 6e 29 3b 0a 20 20 20 20 69 42 65 67 69 6e  gin);.    iBegin
1850: 20 3d 20 74 69 6d 65 4f 66 44 61 79 28 29 3b 0a   = timeOfDay();.
1860: 20 20 7d 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e    }.}../* Return
1870: 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
1880: 6f 66 20 74 77 6f 20 74 69 6d 65 5f 73 74 72 75  of two time_stru
1890: 63 74 73 20 69 6e 20 73 65 63 6f 6e 64 73 20 2a  cts in seconds *
18a0: 2f 0a 73 74 61 74 69 63 20 64 6f 75 62 6c 65 20  /.static double 
18b0: 74 69 6d 65 44 69 66 66 28 73 74 72 75 63 74 20  timeDiff(struct 
18c0: 74 69 6d 65 76 61 6c 20 2a 70 53 74 61 72 74 2c  timeval *pStart,
18d0: 20 73 74 72 75 63 74 20 74 69 6d 65 76 61 6c 20   struct timeval 
18e0: 2a 70 45 6e 64 29 7b 0a 20 20 72 65 74 75 72 6e  *pEnd){.  return
18f0: 20 28 70 45 6e 64 2d 3e 74 76 5f 75 73 65 63 20   (pEnd->tv_usec 
1900: 2d 20 70 53 74 61 72 74 2d 3e 74 76 5f 75 73 65  - pStart->tv_use
1910: 63 29 2a 30 2e 30 30 30 30 30 31 20 2b 0a 20 20  c)*0.000001 +.  
1920: 20 20 20 20 20 20 20 28 64 6f 75 62 6c 65 29 28         (double)(
1930: 70 45 6e 64 2d 3e 74 76 5f 73 65 63 20 2d 20 70  pEnd->tv_sec - p
1940: 53 74 61 72 74 2d 3e 74 76 5f 73 65 63 29 3b 0a  Start->tv_sec);.
1950: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  }../*.** Print t
1960: 68 65 20 74 69 6d 69 6e 67 20 72 65 73 75 6c 74  he timing result
1970: 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  s..*/.static voi
1980: 64 20 65 6e 64 54 69 6d 65 72 28 76 6f 69 64 29  d endTimer(void)
1990: 7b 0a 20 20 69 66 28 20 65 6e 61 62 6c 65 54 69  {.  if( enableTi
19a0: 6d 65 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  mer ){.    sqlit
19b0: 65 33 5f 69 6e 74 36 34 20 69 45 6e 64 20 3d 20  e3_int64 iEnd = 
19c0: 74 69 6d 65 4f 66 44 61 79 28 29 3b 0a 20 20 20  timeOfDay();.   
19d0: 20 73 74 72 75 63 74 20 72 75 73 61 67 65 20 73   struct rusage s
19e0: 45 6e 64 3b 0a 20 20 20 20 67 65 74 72 75 73 61  End;.    getrusa
19f0: 67 65 28 52 55 53 41 47 45 5f 53 45 4c 46 2c 20  ge(RUSAGE_SELF, 
1a00: 26 73 45 6e 64 29 3b 0a 20 20 20 20 70 72 69 6e  &sEnd);.    prin
1a10: 74 66 28 22 52 75 6e 20 54 69 6d 65 3a 20 72 65  tf("Run Time: re
1a20: 61 6c 20 25 2e 33 66 20 75 73 65 72 20 25 66 20  al %.3f user %f 
1a30: 73 79 73 20 25 66 5c 6e 22 2c 0a 20 20 20 20 20  sys %f\n",.     
1a40: 20 20 28 69 45 6e 64 20 2d 20 69 42 65 67 69 6e    (iEnd - iBegin
1a50: 29 2a 30 2e 30 30 31 2c 0a 20 20 20 20 20 20 20  )*0.001,.       
1a60: 74 69 6d 65 44 69 66 66 28 26 73 42 65 67 69 6e  timeDiff(&sBegin
1a70: 2e 72 75 5f 75 74 69 6d 65 2c 20 26 73 45 6e 64  .ru_utime, &sEnd
1a80: 2e 72 75 5f 75 74 69 6d 65 29 2c 0a 20 20 20 20  .ru_utime),.    
1a90: 20 20 20 74 69 6d 65 44 69 66 66 28 26 73 42 65     timeDiff(&sBe
1aa0: 67 69 6e 2e 72 75 5f 73 74 69 6d 65 2c 20 26 73  gin.ru_stime, &s
1ab0: 45 6e 64 2e 72 75 5f 73 74 69 6d 65 29 29 3b 0a  End.ru_stime));.
1ac0: 20 20 7d 0a 7d 0a 0a 23 64 65 66 69 6e 65 20 42    }.}..#define B
1ad0: 45 47 49 4e 5f 54 49 4d 45 52 20 62 65 67 69 6e  EGIN_TIMER begin
1ae0: 54 69 6d 65 72 28 29 0a 23 64 65 66 69 6e 65 20  Timer().#define 
1af0: 45 4e 44 5f 54 49 4d 45 52 20 65 6e 64 54 69 6d  END_TIMER endTim
1b00: 65 72 28 29 0a 23 64 65 66 69 6e 65 20 48 41 53  er().#define HAS
1b10: 5f 54 49 4d 45 52 20 31 0a 0a 23 65 6c 69 66 20  _TIMER 1..#elif 
1b20: 28 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29  (defined(_WIN32)
1b30: 20 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33   || defined(WIN3
1b40: 32 29 29 0a 0a 2f 2a 20 53 61 76 65 64 20 72 65  2))../* Saved re
1b50: 73 6f 75 72 63 65 20 69 6e 66 6f 72 6d 61 74 69  source informati
1b60: 6f 6e 20 66 6f 72 20 74 68 65 20 62 65 67 69 6e  on for the begin
1b70: 6e 69 6e 67 20 6f 66 20 61 6e 20 6f 70 65 72 61  ning of an opera
1b80: 74 69 6f 6e 20 2a 2f 0a 73 74 61 74 69 63 20 48  tion */.static H
1b90: 41 4e 44 4c 45 20 68 50 72 6f 63 65 73 73 3b 0a  ANDLE hProcess;.
1ba0: 73 74 61 74 69 63 20 46 49 4c 45 54 49 4d 45 20  static FILETIME 
1bb0: 66 74 4b 65 72 6e 65 6c 42 65 67 69 6e 3b 0a 73  ftKernelBegin;.s
1bc0: 74 61 74 69 63 20 46 49 4c 45 54 49 4d 45 20 66  tatic FILETIME f
1bd0: 74 55 73 65 72 42 65 67 69 6e 3b 0a 73 74 61 74  tUserBegin;.stat
1be0: 69 63 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  ic sqlite3_int64
1bf0: 20 66 74 57 61 6c 6c 42 65 67 69 6e 3b 0a 74 79   ftWallBegin;.ty
1c00: 70 65 64 65 66 20 42 4f 4f 4c 20 28 57 49 4e 41  pedef BOOL (WINA
1c10: 50 49 20 2a 47 45 54 50 52 4f 43 54 49 4d 45 53  PI *GETPROCTIMES
1c20: 29 28 48 41 4e 44 4c 45 2c 20 4c 50 46 49 4c 45  )(HANDLE, LPFILE
1c30: 54 49 4d 45 2c 20 4c 50 46 49 4c 45 54 49 4d 45  TIME, LPFILETIME
1c40: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c60: 20 20 20 20 20 20 4c 50 46 49 4c 45 54 49 4d 45        LPFILETIME
1c70: 2c 20 4c 50 46 49 4c 45 54 49 4d 45 29 3b 0a 73  , LPFILETIME);.s
1c80: 74 61 74 69 63 20 47 45 54 50 52 4f 43 54 49 4d  tatic GETPROCTIM
1c90: 45 53 20 67 65 74 50 72 6f 63 65 73 73 54 69 6d  ES getProcessTim
1ca0: 65 73 41 64 64 72 20 3d 20 4e 55 4c 4c 3b 0a 0a  esAddr = NULL;..
1cb0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
1cc0: 65 65 20 69 66 20 77 65 20 68 61 76 65 20 74 69  ee if we have ti
1cd0: 6d 65 72 20 73 75 70 70 6f 72 74 2e 20 20 52 65  mer support.  Re
1ce0: 74 75 72 6e 20 31 20 69 66 20 6e 65 63 65 73 73  turn 1 if necess
1cf0: 61 72 79 0a 2a 2a 20 73 75 70 70 6f 72 74 20 66  ary.** support f
1d00: 6f 75 6e 64 20 28 6f 72 20 66 6f 75 6e 64 20 70  ound (or found p
1d10: 72 65 76 69 6f 75 73 6c 79 29 2e 0a 2a 2f 0a 73  reviously)..*/.s
1d20: 74 61 74 69 63 20 69 6e 74 20 68 61 73 54 69 6d  tatic int hasTim
1d30: 65 72 28 76 6f 69 64 29 7b 0a 20 20 69 66 28 20  er(void){.  if( 
1d40: 67 65 74 50 72 6f 63 65 73 73 54 69 6d 65 73 41  getProcessTimesA
1d50: 64 64 72 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ddr ){.    retur
1d60: 6e 20 31 3b 0a 20 20 7d 20 65 6c 73 65 20 7b 0a  n 1;.  } else {.
1d70: 20 20 20 20 2f 2a 20 47 65 74 50 72 6f 63 65 73      /* GetProces
1d80: 73 54 69 6d 65 73 28 29 20 69 73 6e 27 74 20 73  sTimes() isn't s
1d90: 75 70 70 6f 72 74 65 64 20 69 6e 20 57 49 4e 39  upported in WIN9
1da0: 35 20 61 6e 64 20 73 6f 6d 65 20 6f 74 68 65 72  5 and some other
1db0: 20 57 69 6e 64 6f 77 73 0a 20 20 20 20 2a 2a 20   Windows.    ** 
1dc0: 76 65 72 73 69 6f 6e 73 2e 20 53 65 65 20 69 66  versions. See if
1dd0: 20 74 68 65 20 76 65 72 73 69 6f 6e 20 77 65 20   the version we 
1de0: 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 68  are running on h
1df0: 61 73 20 69 74 2c 20 61 6e 64 20 69 66 20 69 74  as it, and if it
1e00: 0a 20 20 20 20 2a 2a 20 64 6f 65 73 2c 20 73 61  .    ** does, sa
1e10: 76 65 20 6f 66 66 20 61 20 70 6f 69 6e 74 65 72  ve off a pointer
1e20: 20 74 6f 20 69 74 20 61 6e 64 20 74 68 65 20 63   to it and the c
1e30: 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 68  urrent process h
1e40: 61 6e 64 6c 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  andle..    */.  
1e50: 20 20 68 50 72 6f 63 65 73 73 20 3d 20 47 65 74    hProcess = Get
1e60: 43 75 72 72 65 6e 74 50 72 6f 63 65 73 73 28 29  CurrentProcess()
1e70: 3b 0a 20 20 20 20 69 66 28 20 68 50 72 6f 63 65  ;.    if( hProce
1e80: 73 73 20 29 7b 0a 20 20 20 20 20 20 48 49 4e 53  ss ){.      HINS
1e90: 54 41 4e 43 45 20 68 69 6e 73 74 4c 69 62 20 3d  TANCE hinstLib =
1ea0: 20 4c 6f 61 64 4c 69 62 72 61 72 79 28 54 45 58   LoadLibrary(TEX
1eb0: 54 28 22 4b 65 72 6e 65 6c 33 32 2e 64 6c 6c 22  T("Kernel32.dll"
1ec0: 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 4e 55  ));.      if( NU
1ed0: 4c 4c 20 21 3d 20 68 69 6e 73 74 4c 69 62 20 29  LL != hinstLib )
1ee0: 7b 0a 20 20 20 20 20 20 20 20 67 65 74 50 72 6f  {.        getPro
1ef0: 63 65 73 73 54 69 6d 65 73 41 64 64 72 20 3d 0a  cessTimesAddr =.
1f00: 20 20 20 20 20 20 20 20 20 20 20 20 28 47 45 54              (GET
1f10: 50 52 4f 43 54 49 4d 45 53 29 20 47 65 74 50 72  PROCTIMES) GetPr
1f20: 6f 63 41 64 64 72 65 73 73 28 68 69 6e 73 74 4c  ocAddress(hinstL
1f30: 69 62 2c 20 22 47 65 74 50 72 6f 63 65 73 73 54  ib, "GetProcessT
1f40: 69 6d 65 73 22 29 3b 0a 20 20 20 20 20 20 20 20  imes");.        
1f50: 69 66 28 20 4e 55 4c 4c 20 21 3d 20 67 65 74 50  if( NULL != getP
1f60: 72 6f 63 65 73 73 54 69 6d 65 73 41 64 64 72 20  rocessTimesAddr 
1f70: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ){.          ret
1f80: 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  urn 1;.        }
1f90: 0a 20 20 20 20 20 20 20 20 46 72 65 65 4c 69 62  .        FreeLib
1fa0: 72 61 72 79 28 68 69 6e 73 74 4c 69 62 29 3b 0a  rary(hinstLib);.
1fb0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1fc0: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
1fd0: 0a 2f 2a 0a 2a 2a 20 42 65 67 69 6e 20 74 69 6d  ./*.** Begin tim
1fe0: 69 6e 67 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e  ing an operation
1ff0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
2000: 62 65 67 69 6e 54 69 6d 65 72 28 76 6f 69 64 29  beginTimer(void)
2010: 7b 0a 20 20 69 66 28 20 65 6e 61 62 6c 65 54 69  {.  if( enableTi
2020: 6d 65 72 20 26 26 20 67 65 74 50 72 6f 63 65 73  mer && getProces
2030: 73 54 69 6d 65 73 41 64 64 72 20 29 7b 0a 20 20  sTimesAddr ){.  
2040: 20 20 46 49 4c 45 54 49 4d 45 20 66 74 43 72 65    FILETIME ftCre
2050: 61 74 69 6f 6e 2c 20 66 74 45 78 69 74 3b 0a 20  ation, ftExit;. 
2060: 20 20 20 67 65 74 50 72 6f 63 65 73 73 54 69 6d     getProcessTim
2070: 65 73 41 64 64 72 28 68 50 72 6f 63 65 73 73 2c  esAddr(hProcess,
2080: 26 66 74 43 72 65 61 74 69 6f 6e 2c 26 66 74 45  &ftCreation,&ftE
2090: 78 69 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  xit,.           
20a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 26 66 74               &ft
20b0: 4b 65 72 6e 65 6c 42 65 67 69 6e 2c 26 66 74 55  KernelBegin,&ftU
20c0: 73 65 72 42 65 67 69 6e 29 3b 0a 20 20 20 20 66  serBegin);.    f
20d0: 74 57 61 6c 6c 42 65 67 69 6e 20 3d 20 74 69 6d  tWallBegin = tim
20e0: 65 4f 66 44 61 79 28 29 3b 0a 20 20 7d 0a 7d 0a  eOfDay();.  }.}.
20f0: 0a 2f 2a 20 52 65 74 75 72 6e 20 74 68 65 20 64  ./* Return the d
2100: 69 66 66 65 72 65 6e 63 65 20 6f 66 20 74 77 6f  ifference of two
2110: 20 46 49 4c 45 54 49 4d 45 20 73 74 72 75 63 74   FILETIME struct
2120: 73 20 69 6e 20 73 65 63 6f 6e 64 73 20 2a 2f 0a  s in seconds */.
2130: 73 74 61 74 69 63 20 64 6f 75 62 6c 65 20 74 69  static double ti
2140: 6d 65 44 69 66 66 28 46 49 4c 45 54 49 4d 45 20  meDiff(FILETIME 
2150: 2a 70 53 74 61 72 74 2c 20 46 49 4c 45 54 49 4d  *pStart, FILETIM
2160: 45 20 2a 70 45 6e 64 29 7b 0a 20 20 73 71 6c 69  E *pEnd){.  sqli
2170: 74 65 5f 69 6e 74 36 34 20 69 36 34 53 74 61 72  te_int64 i64Star
2180: 74 20 3d 20 2a 28 28 73 71 6c 69 74 65 5f 69 6e  t = *((sqlite_in
2190: 74 36 34 20 2a 29 20 70 53 74 61 72 74 29 3b 0a  t64 *) pStart);.
21a0: 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69    sqlite_int64 i
21b0: 36 34 45 6e 64 20 3d 20 2a 28 28 73 71 6c 69 74  64End = *((sqlit
21c0: 65 5f 69 6e 74 36 34 20 2a 29 20 70 45 6e 64 29  e_int64 *) pEnd)
21d0: 3b 0a 20 20 72 65 74 75 72 6e 20 28 64 6f 75 62  ;.  return (doub
21e0: 6c 65 29 20 28 28 69 36 34 45 6e 64 20 2d 20 69  le) ((i64End - i
21f0: 36 34 53 74 61 72 74 29 20 2f 20 31 30 30 30 30  64Start) / 10000
2200: 30 30 30 2e 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  000.0);.}../*.**
2210: 20 50 72 69 6e 74 20 74 68 65 20 74 69 6d 69 6e   Print the timin
2220: 67 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 73 74  g results..*/.st
2230: 61 74 69 63 20 76 6f 69 64 20 65 6e 64 54 69 6d  atic void endTim
2240: 65 72 28 76 6f 69 64 29 7b 0a 20 20 69 66 28 20  er(void){.  if( 
2250: 65 6e 61 62 6c 65 54 69 6d 65 72 20 26 26 20 67  enableTimer && g
2260: 65 74 50 72 6f 63 65 73 73 54 69 6d 65 73 41 64  etProcessTimesAd
2270: 64 72 29 7b 0a 20 20 20 20 46 49 4c 45 54 49 4d  dr){.    FILETIM
2280: 45 20 66 74 43 72 65 61 74 69 6f 6e 2c 20 66 74  E ftCreation, ft
2290: 45 78 69 74 2c 20 66 74 4b 65 72 6e 65 6c 45 6e  Exit, ftKernelEn
22a0: 64 2c 20 66 74 55 73 65 72 45 6e 64 3b 0a 20 20  d, ftUserEnd;.  
22b0: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
22c0: 66 74 57 61 6c 6c 45 6e 64 20 3d 20 74 69 6d 65  ftWallEnd = time
22d0: 4f 66 44 61 79 28 29 3b 0a 20 20 20 20 67 65 74  OfDay();.    get
22e0: 50 72 6f 63 65 73 73 54 69 6d 65 73 41 64 64 72  ProcessTimesAddr
22f0: 28 68 50 72 6f 63 65 73 73 2c 26 66 74 43 72 65  (hProcess,&ftCre
2300: 61 74 69 6f 6e 2c 26 66 74 45 78 69 74 2c 26 66  ation,&ftExit,&f
2310: 74 4b 65 72 6e 65 6c 45 6e 64 2c 26 66 74 55 73  tKernelEnd,&ftUs
2320: 65 72 45 6e 64 29 3b 0a 20 20 20 20 70 72 69 6e  erEnd);.    prin
2330: 74 66 28 22 52 75 6e 20 54 69 6d 65 3a 20 72 65  tf("Run Time: re
2340: 61 6c 20 25 2e 33 66 20 75 73 65 72 20 25 66 20  al %.3f user %f 
2350: 73 79 73 20 25 66 5c 6e 22 2c 0a 20 20 20 20 20  sys %f\n",.     
2360: 20 20 28 66 74 57 61 6c 6c 45 6e 64 20 2d 20 66    (ftWallEnd - f
2370: 74 57 61 6c 6c 42 65 67 69 6e 29 2a 30 2e 30 30  tWallBegin)*0.00
2380: 31 2c 0a 20 20 20 20 20 20 20 74 69 6d 65 44 69  1,.       timeDi
2390: 66 66 28 26 66 74 55 73 65 72 42 65 67 69 6e 2c  ff(&ftUserBegin,
23a0: 20 26 66 74 55 73 65 72 45 6e 64 29 2c 0a 20 20   &ftUserEnd),.  
23b0: 20 20 20 20 20 74 69 6d 65 44 69 66 66 28 26 66       timeDiff(&f
23c0: 74 4b 65 72 6e 65 6c 42 65 67 69 6e 2c 20 26 66  tKernelBegin, &f
23d0: 74 4b 65 72 6e 65 6c 45 6e 64 29 29 3b 0a 20 20  tKernelEnd));.  
23e0: 7d 0a 7d 0a 0a 23 64 65 66 69 6e 65 20 42 45 47  }.}..#define BEG
23f0: 49 4e 5f 54 49 4d 45 52 20 62 65 67 69 6e 54 69  IN_TIMER beginTi
2400: 6d 65 72 28 29 0a 23 64 65 66 69 6e 65 20 45 4e  mer().#define EN
2410: 44 5f 54 49 4d 45 52 20 65 6e 64 54 69 6d 65 72  D_TIMER endTimer
2420: 28 29 0a 23 64 65 66 69 6e 65 20 48 41 53 5f 54  ().#define HAS_T
2430: 49 4d 45 52 20 68 61 73 54 69 6d 65 72 28 29 0a  IMER hasTimer().
2440: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 42  .#else.#define B
2450: 45 47 49 4e 5f 54 49 4d 45 52 0a 23 64 65 66 69  EGIN_TIMER.#defi
2460: 6e 65 20 45 4e 44 5f 54 49 4d 45 52 0a 23 64 65  ne END_TIMER.#de
2470: 66 69 6e 65 20 48 41 53 5f 54 49 4d 45 52 20 30  fine HAS_TIMER 0
2480: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55  .#endif../*.** U
2490: 73 65 64 20 74 6f 20 70 72 65 76 65 6e 74 20 77  sed to prevent w
24a0: 61 72 6e 69 6e 67 73 20 61 62 6f 75 74 20 75 6e  arnings about un
24b0: 75 73 65 64 20 70 61 72 61 6d 65 74 65 72 73 0a  used parameters.
24c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
24d0: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
24e0: 76 6f 69 64 29 28 78 29 0a 0a 2f 2a 0a 2a 2a 20  void)(x)../*.** 
24f0: 49 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  If the following
2500: 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
2510: 65 6e 20 63 6f 6d 6d 61 6e 64 20 65 78 65 63 75  en command execu
2520: 74 69 6f 6e 20 73 74 6f 70 73 0a 2a 2a 20 61 74  tion stops.** at
2530: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 77 65 20   an error if we 
2540: 61 72 65 20 6e 6f 74 20 69 6e 74 65 72 61 63 74  are not interact
2550: 69 76 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ive..*/.static i
2560: 6e 74 20 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72  nt bail_on_error
2570: 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 72   = 0;../*.** Thr
2580: 65 61 74 20 73 74 64 69 6e 20 61 73 20 61 6e 20  eat stdin as an 
2590: 69 6e 74 65 72 61 63 74 69 76 65 20 69 6e 70 75  interactive inpu
25a0: 74 20 69 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  t if the followi
25b0: 6e 67 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 69  ng variable.** i
25c0: 73 20 74 72 75 65 2e 20 20 4f 74 68 65 72 77 69  s true.  Otherwi
25d0: 73 65 2c 20 61 73 73 75 6d 65 20 73 74 64 69 6e  se, assume stdin
25e0: 20 69 73 20 63 6f 6e 6e 65 63 74 65 64 20 74 6f   is connected to
25f0: 20 61 20 66 69 6c 65 20 6f 72 20 70 69 70 65 2e   a file or pipe.
2600: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
2610: 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74  tdin_is_interact
2620: 69 76 65 20 3d 20 31 3b 0a 0a 2f 2a 0a 2a 2a 20  ive = 1;../*.** 
2630: 4f 6e 20 57 69 6e 64 6f 77 73 20 73 79 73 74 65  On Windows syste
2640: 6d 73 20 77 65 20 68 61 76 65 20 74 6f 20 6b 6e  ms we have to kn
2650: 6f 77 20 69 66 20 73 74 61 6e 64 61 72 64 20 6f  ow if standard o
2660: 75 74 70 75 74 20 69 73 20 61 20 63 6f 6e 73 6f  utput is a conso
2670: 6c 65 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74  le.** in order t
2680: 6f 20 74 72 61 6e 73 6c 61 74 65 20 55 54 46 2d  o translate UTF-
2690: 38 20 69 6e 74 6f 20 4d 42 43 53 2e 20 20 54 68  8 into MBCS.  Th
26a0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69  e following vari
26b0: 61 62 6c 65 20 69 73 0a 2a 2a 20 74 72 75 65 20  able is.** true 
26c0: 69 66 20 74 72 61 6e 73 6c 61 74 69 6f 6e 20 69  if translation i
26d0: 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73  s required..*/.s
26e0: 74 61 74 69 63 20 69 6e 74 20 73 74 64 6f 75 74  tatic int stdout
26f0: 5f 69 73 5f 63 6f 6e 73 6f 6c 65 20 3d 20 31 3b  _is_console = 1;
2700: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
2710: 6f 77 69 6e 67 20 69 73 20 74 68 65 20 6f 70 65  owing is the ope
2720: 6e 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  n SQLite databas
2730: 65 2e 20 20 57 65 20 6d 61 6b 65 20 61 20 70 6f  e.  We make a po
2740: 69 6e 74 65 72 0a 2a 2a 20 74 6f 20 74 68 69 73  inter.** to this
2750: 20 64 61 74 61 62 61 73 65 20 61 20 73 74 61 74   database a stat
2760: 69 63 20 76 61 72 69 61 62 6c 65 20 73 6f 20 74  ic variable so t
2770: 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 61 63  hat it can be ac
2780: 63 65 73 73 65 64 0a 2a 2a 20 62 79 20 74 68 65  cessed.** by the
2790: 20 53 49 47 49 4e 54 20 68 61 6e 64 6c 65 72 20   SIGINT handler 
27a0: 74 6f 20 69 6e 74 65 72 72 75 70 74 20 64 61 74  to interrupt dat
27b0: 61 62 61 73 65 20 70 72 6f 63 65 73 73 69 6e 67  abase processing
27c0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c 69  ..*/.static sqli
27d0: 74 65 33 20 2a 67 6c 6f 62 61 6c 44 62 20 3d 20  te3 *globalDb = 
27e0: 30 3b 0a 0a 2f 2a 0a 2a 2a 20 54 72 75 65 20 69  0;../*.** True i
27f0: 66 20 61 6e 20 69 6e 74 65 72 72 75 70 74 20 28  f an interrupt (
2800: 43 6f 6e 74 72 6f 6c 2d 43 29 20 68 61 73 20 62  Control-C) has b
2810: 65 65 6e 20 72 65 63 65 69 76 65 64 2e 0a 2a 2f  een received..*/
2820: 0a 73 74 61 74 69 63 20 76 6f 6c 61 74 69 6c 65  .static volatile
2830: 20 69 6e 74 20 73 65 65 6e 49 6e 74 65 72 72 75   int seenInterru
2840: 70 74 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 54  pt = 0;../*.** T
2850: 68 69 73 20 69 73 20 74 68 65 20 6e 61 6d 65 20  his is the name 
2860: 6f 66 20 6f 75 72 20 70 72 6f 67 72 61 6d 2e 20  of our program. 
2870: 49 74 20 69 73 20 73 65 74 20 69 6e 20 6d 61 69  It is set in mai
2880: 6e 28 29 2c 20 75 73 65 64 0a 2a 2a 20 69 6e 20  n(), used.** in 
2890: 61 20 6e 75 6d 62 65 72 20 6f 66 20 6f 74 68 65  a number of othe
28a0: 72 20 70 6c 61 63 65 73 2c 20 6d 6f 73 74 6c 79  r places, mostly
28b0: 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
28c0: 67 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63  ges..*/.static c
28d0: 68 61 72 20 2a 41 72 67 76 30 3b 0a 0a 2f 2a 0a  har *Argv0;../*.
28e0: 2a 2a 20 50 72 6f 6d 70 74 20 73 74 72 69 6e 67  ** Prompt string
28f0: 73 2e 20 49 6e 69 74 69 61 6c 69 7a 65 64 20 69  s. Initialized i
2900: 6e 20 6d 61 69 6e 2e 20 53 65 74 74 61 62 6c 65  n main. Settable
2910: 20 77 69 74 68 0a 2a 2a 20 20 20 2e 70 72 6f 6d   with.**   .prom
2920: 70 74 20 6d 61 69 6e 20 63 6f 6e 74 69 6e 75 65  pt main continue
2930: 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20  .*/.static char 
2940: 6d 61 69 6e 50 72 6f 6d 70 74 5b 32 30 5d 3b 20  mainPrompt[20]; 
2950: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 6c 69 6e      /* First lin
2960: 65 20 70 72 6f 6d 70 74 2e 20 64 65 66 61 75 6c  e prompt. defaul
2970: 74 3a 20 22 73 71 6c 69 74 65 3e 20 22 2a 2f 0a  t: "sqlite> "*/.
2980: 73 74 61 74 69 63 20 63 68 61 72 20 63 6f 6e 74  static char cont
2990: 69 6e 75 65 50 72 6f 6d 70 74 5b 32 30 5d 3b 20  inuePrompt[20]; 
29a0: 2f 2a 20 43 6f 6e 74 69 6e 75 61 74 69 6f 6e 20  /* Continuation 
29b0: 70 72 6f 6d 70 74 2e 20 64 65 66 61 75 6c 74 3a  prompt. default:
29c0: 20 22 20 20 20 2e 2e 2e 3e 20 22 20 2a 2f 0a 0a   "   ...> " */..
29d0: 2f 2a 0a 2a 2a 20 52 65 6e 64 65 72 20 6f 75 74  /*.** Render out
29e0: 70 75 74 20 6c 69 6b 65 20 66 70 72 69 6e 74 66  put like fprintf
29f0: 28 29 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20  ().  Except, if 
2a00: 74 68 65 20 6f 75 74 70 75 74 20 69 73 20 67 6f  the output is go
2a10: 69 6e 67 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f  ing to the.** co
2a20: 6e 73 6f 6c 65 20 61 6e 64 20 69 66 20 74 68 69  nsole and if thi
2a30: 73 20 69 73 20 72 75 6e 6e 69 6e 67 20 6f 6e 20  s is running on 
2a40: 61 20 57 69 6e 64 6f 77 73 20 6d 61 63 68 69 6e  a Windows machin
2a50: 65 2c 20 74 72 61 6e 73 6c 61 74 65 20 74 68 65  e, translate the
2a60: 0a 2a 2a 20 6f 75 74 70 75 74 20 66 72 6f 6d 20  .** output from 
2a70: 55 54 46 2d 38 20 69 6e 74 6f 20 4d 42 43 53 2e  UTF-8 into MBCS.
2a80: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
2a90: 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e  _WIN32) || defin
2aa0: 65 64 28 57 49 4e 33 32 29 0a 76 6f 69 64 20 75  ed(WIN32).void u
2ab0: 74 66 38 5f 70 72 69 6e 74 66 28 46 49 4c 45 20  tf8_printf(FILE 
2ac0: 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  *out, const char
2ad0: 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b   *zFormat, ...){
2ae0: 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20  .  va_list ap;. 
2af0: 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46   va_start(ap, zF
2b00: 6f 72 6d 61 74 29 3b 0a 20 20 69 66 28 20 73 74  ormat);.  if( st
2b10: 64 6f 75 74 5f 69 73 5f 63 6f 6e 73 6f 6c 65 20  dout_is_console 
2b20: 26 26 20 28 6f 75 74 3d 3d 73 74 64 6f 75 74 20  && (out==stdout 
2b30: 7c 7c 20 6f 75 74 3d 3d 73 74 64 65 72 72 29 20  || out==stderr) 
2b40: 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 31 20  ){.    char *z1 
2b50: 3d 20 73 71 6c 69 74 65 33 5f 76 6d 70 72 69 6e  = sqlite3_vmprin
2b60: 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b  tf(zFormat, ap);
2b70: 0a 20 20 20 20 63 68 61 72 20 2a 7a 32 20 3d 20  .    char *z2 = 
2b80: 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75 74  sqlite3_win32_ut
2b90: 66 38 5f 74 6f 5f 6d 62 63 73 5f 76 32 28 7a 31  f8_to_mbcs_v2(z1
2ba0: 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
2bb0: 33 5f 66 72 65 65 28 7a 31 29 3b 0a 20 20 20 20  3_free(z1);.    
2bc0: 66 70 75 74 73 28 7a 32 2c 20 6f 75 74 29 3b 0a  fputs(z2, out);.
2bd0: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
2be0: 28 7a 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  (z2);.  }else{. 
2bf0: 20 20 20 76 66 70 72 69 6e 74 66 28 6f 75 74 2c     vfprintf(out,
2c00: 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20   zFormat, ap);. 
2c10: 20 7d 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b   }.  va_end(ap);
2c20: 0a 7d 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65  .}.#elif !define
2c30: 64 28 75 74 66 38 5f 70 72 69 6e 74 66 29 0a 23  d(utf8_printf).#
2c40: 20 64 65 66 69 6e 65 20 75 74 66 38 5f 70 72 69   define utf8_pri
2c50: 6e 74 66 20 66 70 72 69 6e 74 66 0a 23 65 6e 64  ntf fprintf.#end
2c60: 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 6e 64 65 72  if../*.** Render
2c70: 20 6f 75 74 70 75 74 20 6c 69 6b 65 20 66 70 72   output like fpr
2c80: 69 6e 74 66 28 29 2e 20 20 54 68 69 73 20 73 68  intf().  This sh
2c90: 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64  ould not be used
2ca0: 20 6f 6e 20 61 6e 79 74 68 69 6e 67 20 74 68 61   on anything tha
2cb0: 74 0a 2a 2a 20 69 6e 63 6c 75 64 65 73 20 73 74  t.** includes st
2cc0: 72 69 6e 67 20 66 6f 72 6d 61 74 74 69 6e 67 20  ring formatting 
2cd0: 28 65 2e 67 2e 20 22 25 73 22 29 2e 0a 2a 2f 0a  (e.g. "%s")..*/.
2ce0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 72 61 77  #if !defined(raw
2cf0: 5f 70 72 69 6e 74 66 29 0a 23 20 64 65 66 69 6e  _printf).# defin
2d00: 65 20 72 61 77 5f 70 72 69 6e 74 66 20 66 70 72  e raw_printf fpr
2d10: 69 6e 74 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  intf.#endif../*.
2d20: 2a 2a 20 57 72 69 74 65 20 49 2f 4f 20 74 72 61  ** Write I/O tra
2d30: 63 65 73 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  ces to the follo
2d40: 77 69 6e 67 20 73 74 72 65 61 6d 2e 0a 2a 2f 0a  wing stream..*/.
2d50: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2d60: 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 73 74 61  ABLE_IOTRACE.sta
2d70: 74 69 63 20 46 49 4c 45 20 2a 69 6f 74 72 61 63  tic FILE *iotrac
2d80: 65 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  e = 0;.#endif../
2d90: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
2da0: 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 70 72 69  e works like pri
2db0: 6e 74 66 20 69 6e 20 74 68 61 74 20 69 74 73 20  ntf in that its 
2dc0: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69  first argument i
2dd0: 73 20 61 0a 2a 2a 20 66 6f 72 6d 61 74 20 73 74  s a.** format st
2de0: 72 69 6e 67 20 61 6e 64 20 73 75 62 73 65 71 75  ring and subsequ
2df0: 65 6e 74 20 61 72 67 75 6d 65 6e 74 73 20 61 72  ent arguments ar
2e00: 65 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 73  e values to be s
2e10: 75 62 73 74 69 74 75 74 65 64 0a 2a 2a 20 69 6e  ubstituted.** in
2e20: 20 70 6c 61 63 65 20 6f 66 20 25 20 66 69 65 6c   place of % fiel
2e30: 64 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20  ds.  The result 
2e40: 6f 66 20 66 6f 72 6d 61 74 74 69 6e 67 20 74 68  of formatting th
2e50: 69 73 20 73 74 72 69 6e 67 0a 2a 2a 20 69 73 20  is string.** is 
2e60: 77 72 69 74 74 65 6e 20 74 6f 20 69 6f 74 72 61  written to iotra
2e70: 63 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ce..*/.#ifdef SQ
2e80: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52  LITE_ENABLE_IOTR
2e90: 41 43 45 0a 73 74 61 74 69 63 20 76 6f 69 64 20  ACE.static void 
2ea0: 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 69 6f 74  SQLITE_CDECL iot
2eb0: 72 61 63 65 50 72 69 6e 74 66 28 63 6f 6e 73 74  racePrintf(const
2ec0: 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20   char *zFormat, 
2ed0: 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20  ...){.  va_list 
2ee0: 61 70 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20  ap;.  char *z;. 
2ef0: 20 69 66 28 20 69 6f 74 72 61 63 65 3d 3d 30 20   if( iotrace==0 
2f00: 29 20 72 65 74 75 72 6e 3b 0a 20 20 76 61 5f 73  ) return;.  va_s
2f10: 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74  tart(ap, zFormat
2f20: 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
2f30: 5f 76 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d 61  _vmprintf(zForma
2f40: 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64  t, ap);.  va_end
2f50: 28 61 70 29 3b 0a 20 20 75 74 66 38 5f 70 72 69  (ap);.  utf8_pri
2f60: 6e 74 66 28 69 6f 74 72 61 63 65 2c 20 22 25 73  ntf(iotrace, "%s
2f70: 22 2c 20 7a 29 3b 0a 20 20 73 71 6c 69 74 65 33  ", z);.  sqlite3
2f80: 5f 66 72 65 65 28 7a 29 3b 0a 7d 0a 23 65 6e 64  _free(z);.}.#end
2f90: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74  if../*.** Output
2fa0: 20 73 74 72 69 6e 67 20 7a 55 74 66 20 74 6f 20   string zUtf to 
2fb0: 73 74 72 65 61 6d 20 70 4f 75 74 20 61 73 20 77  stream pOut as w
2fc0: 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 49 66   characters.  If
2fd0: 20 77 20 69 73 20 6e 65 67 61 74 69 76 65 2c 0a   w is negative,.
2fe0: 2a 2a 20 74 68 65 6e 20 72 69 67 68 74 2d 6a 75  ** then right-ju
2ff0: 73 74 69 66 79 20 74 68 65 20 74 65 78 74 2e 20  stify the text. 
3000: 20 57 20 69 73 20 74 68 65 20 77 69 64 74 68 20   W is the width 
3010: 69 6e 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  in UTF-8 charact
3020: 65 72 73 2c 20 6e 6f 74 0a 2a 2a 20 69 6e 20 62  ers, not.** in b
3030: 79 74 65 73 2e 20 20 54 68 69 73 20 69 73 20 64  ytes.  This is d
3040: 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68  ifferent from th
3050: 65 20 25 2a 2e 2a 73 20 73 70 65 63 69 66 69 63  e %*.*s specific
3060: 61 74 69 6f 6e 20 69 6e 20 70 72 69 6e 74 66 0a  ation in printf.
3070: 2a 2a 20 73 69 6e 63 65 20 77 69 74 68 20 25 2a  ** since with %*
3080: 2e 2a 73 20 74 68 65 20 77 69 64 74 68 20 69 73  .*s the width is
3090: 20 6d 65 61 73 75 72 65 64 20 69 6e 20 62 79 74   measured in byt
30a0: 65 73 2c 20 6e 6f 74 20 63 68 61 72 61 63 74 65  es, not characte
30b0: 72 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  rs..*/.static vo
30c0: 69 64 20 75 74 66 38 5f 77 69 64 74 68 5f 70 72  id utf8_width_pr
30d0: 69 6e 74 28 46 49 4c 45 20 2a 70 4f 75 74 2c 20  int(FILE *pOut, 
30e0: 69 6e 74 20 77 2c 20 63 6f 6e 73 74 20 63 68 61  int w, const cha
30f0: 72 20 2a 7a 55 74 66 29 7b 0a 20 20 69 6e 74 20  r *zUtf){.  int 
3100: 69 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e  i;.  int n;.  in
3110: 74 20 61 77 20 3d 20 77 3c 30 20 3f 20 2d 77 20  t aw = w<0 ? -w 
3120: 3a 20 77 3b 0a 20 20 63 68 61 72 20 7a 42 75 66  : w;.  char zBuf
3130: 5b 31 30 30 30 5d 3b 0a 20 20 69 66 28 20 61 77  [1000];.  if( aw
3140: 3e 28 69 6e 74 29 73 69 7a 65 6f 66 28 7a 42 75  >(int)sizeof(zBu
3150: 66 29 2f 33 20 29 20 61 77 20 3d 20 28 69 6e 74  f)/3 ) aw = (int
3160: 29 73 69 7a 65 6f 66 28 7a 42 75 66 29 2f 33 3b  )sizeof(zBuf)/3;
3170: 0a 20 20 66 6f 72 28 69 3d 6e 3d 30 3b 20 7a 55  .  for(i=n=0; zU
3180: 74 66 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20  tf[i]; i++){.   
3190: 20 69 66 28 20 28 7a 55 74 66 5b 69 5d 26 30 78   if( (zUtf[i]&0x
31a0: 63 30 29 21 3d 30 78 38 30 20 29 7b 0a 20 20 20  c0)!=0x80 ){.   
31b0: 20 20 20 6e 2b 2b 3b 0a 20 20 20 20 20 20 69 66     n++;.      if
31c0: 28 20 6e 3d 3d 61 77 20 29 7b 0a 20 20 20 20 20  ( n==aw ){.     
31d0: 20 20 20 64 6f 7b 20 69 2b 2b 3b 20 7d 77 68 69     do{ i++; }whi
31e0: 6c 65 28 20 28 7a 55 74 66 5b 69 5d 26 30 78 63  le( (zUtf[i]&0xc
31f0: 30 29 3d 3d 30 78 38 30 20 29 3b 0a 20 20 20 20  0)==0x80 );.    
3200: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
3210: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69   }.    }.  }.  i
3220: 66 28 20 6e 3e 3d 61 77 20 29 7b 0a 20 20 20 20  f( n>=aw ){.    
3230: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 4f 75 74  utf8_printf(pOut
3240: 2c 20 22 25 2e 2a 73 22 2c 20 69 2c 20 7a 55 74  , "%.*s", i, zUt
3250: 66 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  f);.  }else if( 
3260: 77 3c 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f  w<0 ){.    utf8_
3270: 70 72 69 6e 74 66 28 70 4f 75 74 2c 20 22 25 2a  printf(pOut, "%*
3280: 73 25 73 22 2c 20 61 77 2d 6e 2c 20 22 22 2c 20  s%s", aw-n, "", 
3290: 7a 55 74 66 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  zUtf);.  }else{.
32a0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
32b0: 70 4f 75 74 2c 20 22 25 73 25 2a 73 22 2c 20 7a  pOut, "%s%*s", z
32c0: 55 74 66 2c 20 61 77 2d 6e 2c 20 22 22 29 3b 0a  Utf, aw-n, "");.
32d0: 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 44 65    }.}.../*.** De
32e0: 74 65 72 6d 69 6e 65 73 20 69 66 20 61 20 73 74  termines if a st
32f0: 72 69 6e 67 20 69 73 20 61 20 6e 75 6d 62 65 72  ring is a number
3300: 20 6f 66 20 6e 6f 74 2e 0a 2a 2f 0a 73 74 61 74   of not..*/.stat
3310: 69 63 20 69 6e 74 20 69 73 4e 75 6d 62 65 72 28  ic int isNumber(
3320: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
3330: 6e 74 20 2a 72 65 61 6c 6e 75 6d 29 7b 0a 20 20  nt *realnum){.  
3340: 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 7c 7c 20 2a  if( *z=='-' || *
3350: 7a 3d 3d 27 2b 27 20 29 20 7a 2b 2b 3b 0a 20 20  z=='+' ) z++;.  
3360: 69 66 28 20 21 49 73 44 69 67 69 74 28 2a 7a 29  if( !IsDigit(*z)
3370: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30   ){.    return 0
3380: 3b 0a 20 20 7d 0a 20 20 7a 2b 2b 3b 0a 20 20 69  ;.  }.  z++;.  i
3390: 66 28 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72 65  f( realnum ) *re
33a0: 61 6c 6e 75 6d 20 3d 20 30 3b 0a 20 20 77 68 69  alnum = 0;.  whi
33b0: 6c 65 28 20 49 73 44 69 67 69 74 28 2a 7a 29 20  le( IsDigit(*z) 
33c0: 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 69 66 28 20  ){ z++; }.  if( 
33d0: 2a 7a 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 7a  *z=='.' ){.    z
33e0: 2b 2b 3b 0a 20 20 20 20 69 66 28 20 21 49 73 44  ++;.    if( !IsD
33f0: 69 67 69 74 28 2a 7a 29 20 29 20 72 65 74 75 72  igit(*z) ) retur
3400: 6e 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  n 0;.    while( 
3410: 49 73 44 69 67 69 74 28 2a 7a 29 20 29 7b 20 7a  IsDigit(*z) ){ z
3420: 2b 2b 3b 20 7d 0a 20 20 20 20 69 66 28 20 72 65  ++; }.    if( re
3430: 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d  alnum ) *realnum
3440: 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 1;.  }.  if( 
3450: 2a 7a 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d 3d 27  *z=='e' || *z=='
3460: 45 27 20 29 7b 0a 20 20 20 20 7a 2b 2b 3b 0a 20  E' ){.    z++;. 
3470: 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20 7c     if( *z=='+' |
3480: 7c 20 2a 7a 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b  | *z=='-' ) z++;
3490: 0a 20 20 20 20 69 66 28 20 21 49 73 44 69 67 69  .    if( !IsDigi
34a0: 74 28 2a 7a 29 20 29 20 72 65 74 75 72 6e 20 30  t(*z) ) return 0
34b0: 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 49 73 44  ;.    while( IsD
34c0: 69 67 69 74 28 2a 7a 29 20 29 7b 20 7a 2b 2b 3b  igit(*z) ){ z++;
34d0: 20 7d 0a 20 20 20 20 69 66 28 20 72 65 61 6c 6e   }.    if( realn
34e0: 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20  um ) *realnum = 
34f0: 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  1;.  }.  return 
3500: 2a 7a 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  *z==0;.}../*.** 
3510: 43 6f 6d 70 75 74 65 20 61 20 73 74 72 69 6e 67  Compute a string
3520: 20 6c 65 6e 67 74 68 20 74 68 61 74 20 69 73 20   length that is 
3530: 6c 69 6d 69 74 65 64 20 74 6f 20 77 68 61 74 20  limited to what 
3540: 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e  can be stored in
3550: 0a 2a 2a 20 6c 6f 77 65 72 20 33 30 20 62 69 74  .** lower 30 bit
3560: 73 20 6f 66 20 61 20 33 32 2d 62 69 74 20 73 69  s of a 32-bit si
3570: 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  gned integer..*/
3580: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 74 72 6c  .static int strl
3590: 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 20  en30(const char 
35a0: 2a 7a 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  *z){.  const cha
35b0: 72 20 2a 7a 32 20 3d 20 7a 3b 0a 20 20 77 68 69  r *z2 = z;.  whi
35c0: 6c 65 28 20 2a 7a 32 20 29 7b 20 7a 32 2b 2b 3b  le( *z2 ){ z2++;
35d0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 78 33 66   }.  return 0x3f
35e0: 66 66 66 66 66 66 20 26 20 28 69 6e 74 29 28 7a  ffffff & (int)(z
35f0: 32 20 2d 20 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  2 - z);.}../*.**
3600: 20 52 65 74 75 72 6e 20 74 68 65 20 6c 65 6e 67   Return the leng
3610: 74 68 20 6f 66 20 61 20 73 74 72 69 6e 67 20 69  th of a string i
3620: 6e 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 4d  n characters.  M
3630: 75 6c 74 69 62 79 74 65 20 55 54 46 38 20 63 68  ultibyte UTF8 ch
3640: 61 72 61 63 74 65 72 73 0a 2a 2a 20 63 6f 75 6e  aracters.** coun
3650: 74 20 61 73 20 61 20 73 69 6e 67 6c 65 20 63 68  t as a single ch
3660: 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 73 74 61 74  aracter..*/.stat
3670: 69 63 20 69 6e 74 20 73 74 72 6c 65 6e 43 68 61  ic int strlenCha
3680: 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29  r(const char *z)
3690: 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20  {.  int n = 0;. 
36a0: 20 77 68 69 6c 65 28 20 2a 7a 20 29 7b 0a 20 20   while( *z ){.  
36b0: 20 20 69 66 28 20 28 30 78 63 30 26 2a 28 7a 2b    if( (0xc0&*(z+
36c0: 2b 29 29 21 3d 30 78 38 30 20 29 20 6e 2b 2b 3b  +))!=0x80 ) n++;
36d0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 6e 3b  .  }.  return n;
36e0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72  .}../*.** This r
36f0: 6f 75 74 69 6e 65 20 72 65 61 64 73 20 61 20 6c  outine reads a l
3700: 69 6e 65 20 6f 66 20 74 65 78 74 20 66 72 6f 6d  ine of text from
3710: 20 46 49 4c 45 20 69 6e 2c 20 73 74 6f 72 65 73   FILE in, stores
3720: 0a 2a 2a 20 74 68 65 20 74 65 78 74 20 69 6e 20  .** the text in 
3730: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20  memory obtained 
3740: 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 61 6e  from malloc() an
3750: 64 20 72 65 74 75 72 6e 73 20 61 20 70 6f 69 6e  d returns a poin
3760: 74 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 65  ter.** to the te
3770: 78 74 2e 20 20 4e 55 4c 4c 20 69 73 20 72 65 74  xt.  NULL is ret
3780: 75 72 6e 65 64 20 61 74 20 65 6e 64 20 6f 66 20  urned at end of 
3790: 66 69 6c 65 2c 20 6f 72 20 69 66 20 6d 61 6c 6c  file, or if mall
37a0: 6f 63 28 29 0a 2a 2a 20 66 61 69 6c 73 2e 0a 2a  oc().** fails..*
37b0: 2a 0a 2a 2a 20 49 66 20 7a 4c 69 6e 65 20 69 73  *.** If zLine is
37c0: 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69   not NULL then i
37d0: 74 20 69 73 20 61 20 6d 61 6c 6c 6f 63 65 64 20  t is a malloced 
37e0: 62 75 66 66 65 72 20 72 65 74 75 72 6e 65 64 20  buffer returned 
37f0: 66 72 6f 6d 0a 2a 2a 20 61 20 70 72 65 76 69 6f  from.** a previo
3800: 75 73 20 63 61 6c 6c 20 74 6f 20 74 68 69 73 20  us call to this 
3810: 72 6f 75 74 69 6e 65 20 74 68 61 74 20 6d 61 79  routine that may
3820: 20 62 65 20 72 65 75 73 65 64 2e 0a 2a 2f 0a 73   be reused..*/.s
3830: 74 61 74 69 63 20 63 68 61 72 20 2a 6c 6f 63 61  tatic char *loca
3840: 6c 5f 67 65 74 6c 69 6e 65 28 63 68 61 72 20 2a  l_getline(char *
3850: 7a 4c 69 6e 65 2c 20 46 49 4c 45 20 2a 69 6e 29  zLine, FILE *in)
3860: 7b 0a 20 20 69 6e 74 20 6e 4c 69 6e 65 20 3d 20  {.  int nLine = 
3870: 7a 4c 69 6e 65 3d 3d 30 20 3f 20 30 20 3a 20 31  zLine==0 ? 0 : 1
3880: 30 30 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b  00;.  int n = 0;
3890: 0a 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a  ..  while( 1 ){.
38a0: 20 20 20 20 69 66 28 20 6e 2b 31 30 30 3e 6e 4c      if( n+100>nL
38b0: 69 6e 65 20 29 7b 0a 20 20 20 20 20 20 6e 4c 69  ine ){.      nLi
38c0: 6e 65 20 3d 20 6e 4c 69 6e 65 2a 32 20 2b 20 31  ne = nLine*2 + 1
38d0: 30 30 3b 0a 20 20 20 20 20 20 7a 4c 69 6e 65 20  00;.      zLine 
38e0: 3d 20 72 65 61 6c 6c 6f 63 28 7a 4c 69 6e 65 2c  = realloc(zLine,
38f0: 20 6e 4c 69 6e 65 29 3b 0a 20 20 20 20 20 20 69   nLine);.      i
3900: 66 28 20 7a 4c 69 6e 65 3d 3d 30 20 29 20 72 65  f( zLine==0 ) re
3910: 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 20  turn 0;.    }.  
3920: 20 20 69 66 28 20 66 67 65 74 73 28 26 7a 4c 69    if( fgets(&zLi
3930: 6e 65 5b 6e 5d 2c 20 6e 4c 69 6e 65 20 2d 20 6e  ne[n], nLine - n
3940: 2c 20 69 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  , in)==0 ){.    
3950: 20 20 69 66 28 20 6e 3d 3d 30 20 29 7b 0a 20 20    if( n==0 ){.  
3960: 20 20 20 20 20 20 66 72 65 65 28 7a 4c 69 6e 65        free(zLine
3970: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
3980: 6e 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  n 0;.      }.   
3990: 20 20 20 7a 4c 69 6e 65 5b 6e 5d 20 3d 20 30 3b     zLine[n] = 0;
39a0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
39b0: 20 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 7a    }.    while( z
39c0: 4c 69 6e 65 5b 6e 5d 20 29 20 6e 2b 2b 3b 0a 20  Line[n] ) n++;. 
39d0: 20 20 20 69 66 28 20 6e 3e 30 20 26 26 20 7a 4c     if( n>0 && zL
39e0: 69 6e 65 5b 6e 2d 31 5d 3d 3d 27 5c 6e 27 20 29  ine[n-1]=='\n' )
39f0: 7b 0a 20 20 20 20 20 20 6e 2d 2d 3b 0a 20 20 20  {.      n--;.   
3a00: 20 20 20 69 66 28 20 6e 3e 30 20 26 26 20 7a 4c     if( n>0 && zL
3a10: 69 6e 65 5b 6e 2d 31 5d 3d 3d 27 5c 72 27 20 29  ine[n-1]=='\r' )
3a20: 20 6e 2d 2d 3b 0a 20 20 20 20 20 20 7a 4c 69 6e   n--;.      zLin
3a30: 65 5b 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  e[n] = 0;.      
3a40: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
3a50: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57 49  .#if defined(_WI
3a60: 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  N32) || defined(
3a70: 57 49 4e 33 32 29 0a 20 20 2f 2a 20 46 6f 72 20  WIN32).  /* For 
3a80: 69 6e 74 65 72 61 63 74 69 76 65 20 69 6e 70 75  interactive inpu
3a90: 74 20 6f 6e 20 57 69 6e 64 6f 77 73 20 73 79 73  t on Windows sys
3aa0: 74 65 6d 73 2c 20 74 72 61 6e 73 6c 61 74 65 20  tems, translate 
3ab0: 74 68 65 0a 20 20 2a 2a 20 6d 75 6c 74 69 2d 62  the.  ** multi-b
3ac0: 79 74 65 20 63 68 61 72 61 63 74 65 72 73 65 74  yte characterset
3ad0: 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 74 6f   characters into
3ae0: 20 55 54 46 2d 38 2e 20 2a 2f 0a 20 20 69 66 28   UTF-8. */.  if(
3af0: 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61   stdin_is_intera
3b00: 63 74 69 76 65 20 26 26 20 69 6e 3d 3d 73 74 64  ctive && in==std
3b10: 69 6e 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a  in ){.    char *
3b20: 7a 54 72 61 6e 73 20 3d 20 73 71 6c 69 74 65 33  zTrans = sqlite3
3b30: 5f 77 69 6e 33 32 5f 6d 62 63 73 5f 74 6f 5f 75  _win32_mbcs_to_u
3b40: 74 66 38 5f 76 32 28 7a 4c 69 6e 65 2c 20 30 29  tf8_v2(zLine, 0)
3b50: 3b 0a 20 20 20 20 69 66 28 20 7a 54 72 61 6e 73  ;.    if( zTrans
3b60: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 54   ){.      int nT
3b70: 72 61 6e 73 20 3d 20 73 74 72 6c 65 6e 33 30 28  rans = strlen30(
3b80: 7a 54 72 61 6e 73 29 2b 31 3b 0a 20 20 20 20 20  zTrans)+1;.     
3b90: 20 69 66 28 20 6e 54 72 61 6e 73 3e 6e 4c 69 6e   if( nTrans>nLin
3ba0: 65 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 4c 69  e ){.        zLi
3bb0: 6e 65 20 3d 20 72 65 61 6c 6c 6f 63 28 7a 4c 69  ne = realloc(zLi
3bc0: 6e 65 2c 20 6e 54 72 61 6e 73 29 3b 0a 20 20 20  ne, nTrans);.   
3bd0: 20 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 3d 3d       if( zLine==
3be0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
3bf0: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 54 72 61  qlite3_free(zTra
3c00: 6e 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72  ns);.          r
3c10: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 20  eturn 0;.       
3c20: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
3c30: 20 6d 65 6d 63 70 79 28 7a 4c 69 6e 65 2c 20 7a   memcpy(zLine, z
3c40: 54 72 61 6e 73 2c 20 6e 54 72 61 6e 73 29 3b 0a  Trans, nTrans);.
3c50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
3c60: 65 65 28 7a 54 72 61 6e 73 29 3b 0a 20 20 20 20  ee(zTrans);.    
3c70: 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  }.  }.#endif /* 
3c80: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
3c90: 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  || defined(WIN32
3ca0: 29 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 7a 4c  ) */.  return zL
3cb0: 69 6e 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  ine;.}../*.** Re
3cc0: 74 72 69 65 76 65 20 61 20 73 69 6e 67 6c 65 20  trieve a single 
3cd0: 6c 69 6e 65 20 6f 66 20 69 6e 70 75 74 20 74 65  line of input te
3ce0: 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 69 6e 3d  xt..**.** If in=
3cf0: 3d 30 20 74 68 65 6e 20 72 65 61 64 20 66 72 6f  =0 then read fro
3d00: 6d 20 73 74 61 6e 64 61 72 64 20 69 6e 70 75 74  m standard input
3d10: 20 61 6e 64 20 70 72 6f 6d 70 74 20 62 65 66 6f   and prompt befo
3d20: 72 65 20 65 61 63 68 20 6c 69 6e 65 2e 0a 2a 2a  re each line..**
3d30: 20 49 66 20 69 73 43 6f 6e 74 69 6e 75 61 74 69   If isContinuati
3d40: 6f 6e 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  on is true, then
3d50: 20 61 20 63 6f 6e 74 69 6e 75 61 74 69 6f 6e 20   a continuation 
3d60: 70 72 6f 6d 70 74 20 69 73 20 61 70 70 72 6f 70  prompt is approp
3d70: 72 69 61 74 65 2e 0a 2a 2a 20 49 66 20 69 73 43  riate..** If isC
3d80: 6f 6e 74 69 6e 75 61 74 69 6f 6e 20 69 73 20 7a  ontinuation is z
3d90: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6d 61  ero, then the ma
3da0: 69 6e 20 70 72 6f 6d 70 74 20 73 68 6f 75 6c 64  in prompt should
3db0: 20 62 65 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20   be used..**.** 
3dc0: 49 66 20 7a 50 72 69 6f 72 20 69 73 20 6e 6f 74  If zPrior is not
3dd0: 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20 69 73   NULL then it is
3de0: 20 61 20 62 75 66 66 65 72 20 66 72 6f 6d 20 61   a buffer from a
3df0: 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f 20 74   prior call to t
3e00: 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 74  his.** routine t
3e10: 68 61 74 20 63 61 6e 20 62 65 20 72 65 75 73 65  hat can be reuse
3e20: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 73  d..**.** The res
3e30: 75 6c 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ult is stored in
3e40: 20 73 70 61 63 65 20 6f 62 74 61 69 6e 65 64 20   space obtained 
3e50: 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 61 6e  from malloc() an
3e60: 64 20 6d 75 73 74 20 65 69 74 68 65 72 0a 2a 2a  d must either.**
3e70: 20 62 65 20 66 72 65 65 64 20 62 79 20 74 68 65   be freed by the
3e80: 20 63 61 6c 6c 65 72 20 6f 72 20 65 6c 73 65 20   caller or else 
3e90: 70 61 73 73 65 64 20 62 61 63 6b 20 69 6e 74 6f  passed back into
3ea0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 76 69   this routine vi
3eb0: 61 20 74 68 65 0a 2a 2a 20 7a 50 72 69 6f 72 20  a the.** zPrior 
3ec0: 61 72 67 75 6d 65 6e 74 20 66 6f 72 20 72 65 75  argument for reu
3ed0: 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68  se..*/.static ch
3ee0: 61 72 20 2a 6f 6e 65 5f 69 6e 70 75 74 5f 6c 69  ar *one_input_li
3ef0: 6e 65 28 46 49 4c 45 20 2a 69 6e 2c 20 63 68 61  ne(FILE *in, cha
3f00: 72 20 2a 7a 50 72 69 6f 72 2c 20 69 6e 74 20 69  r *zPrior, int i
3f10: 73 43 6f 6e 74 69 6e 75 61 74 69 6f 6e 29 7b 0a  sContinuation){.
3f20: 20 20 63 68 61 72 20 2a 7a 50 72 6f 6d 70 74 3b    char *zPrompt;
3f30: 0a 20 20 63 68 61 72 20 2a 7a 52 65 73 75 6c 74  .  char *zResult
3f40: 3b 0a 20 20 69 66 28 20 69 6e 21 3d 30 20 29 7b  ;.  if( in!=0 ){
3f50: 0a 20 20 20 20 7a 52 65 73 75 6c 74 20 3d 20 6c  .    zResult = l
3f60: 6f 63 61 6c 5f 67 65 74 6c 69 6e 65 28 7a 50 72  ocal_getline(zPr
3f70: 69 6f 72 2c 20 69 6e 29 3b 0a 20 20 7d 65 6c 73  ior, in);.  }els
3f80: 65 7b 0a 20 20 20 20 7a 50 72 6f 6d 70 74 20 3d  e{.    zPrompt =
3f90: 20 69 73 43 6f 6e 74 69 6e 75 61 74 69 6f 6e 20   isContinuation 
3fa0: 3f 20 63 6f 6e 74 69 6e 75 65 50 72 6f 6d 70 74  ? continuePrompt
3fb0: 20 3a 20 6d 61 69 6e 50 72 6f 6d 70 74 3b 0a 23   : mainPrompt;.#
3fc0: 69 66 20 53 48 45 4c 4c 5f 55 53 45 5f 4c 4f 43  if SHELL_USE_LOC
3fd0: 41 4c 5f 47 45 54 4c 49 4e 45 0a 20 20 20 20 70  AL_GETLINE.    p
3fe0: 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 50 72 6f  rintf("%s", zPro
3ff0: 6d 70 74 29 3b 0a 20 20 20 20 66 66 6c 75 73 68  mpt);.    fflush
4000: 28 73 74 64 6f 75 74 29 3b 0a 20 20 20 20 7a 52  (stdout);.    zR
4010: 65 73 75 6c 74 20 3d 20 6c 6f 63 61 6c 5f 67 65  esult = local_ge
4020: 74 6c 69 6e 65 28 7a 50 72 69 6f 72 2c 20 73 74  tline(zPrior, st
4030: 64 69 6e 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20  din);.#else.    
4040: 66 72 65 65 28 7a 50 72 69 6f 72 29 3b 0a 20 20  free(zPrior);.  
4050: 20 20 7a 52 65 73 75 6c 74 20 3d 20 73 68 65 6c    zResult = shel
4060: 6c 5f 72 65 61 64 6c 69 6e 65 28 7a 50 72 6f 6d  l_readline(zProm
4070: 70 74 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 65  pt);.    if( zRe
4080: 73 75 6c 74 20 26 26 20 2a 7a 52 65 73 75 6c 74  sult && *zResult
4090: 20 29 20 73 68 65 6c 6c 5f 61 64 64 5f 68 69 73   ) shell_add_his
40a0: 74 6f 72 79 28 7a 52 65 73 75 6c 74 29 3b 0a 23  tory(zResult);.#
40b0: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 72 65 74 75  endif.  }.  retu
40c0: 72 6e 20 7a 52 65 73 75 6c 74 3b 0a 7d 0a 2f 2a  rn zResult;.}./*
40d0: 0a 2a 2a 20 41 20 76 61 72 69 61 62 6c 65 20 6c  .** A variable l
40e0: 65 6e 67 74 68 20 73 74 72 69 6e 67 20 74 6f 20  ength string to 
40f0: 77 68 69 63 68 20 6f 6e 65 20 63 61 6e 20 61 70  which one can ap
4100: 70 65 6e 64 20 74 65 78 74 2e 0a 2a 2f 0a 74 79  pend text..*/.ty
4110: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 68 65  pedef struct She
4120: 6c 6c 54 65 78 74 20 53 68 65 6c 6c 54 65 78 74  llText ShellText
4130: 3b 0a 73 74 72 75 63 74 20 53 68 65 6c 6c 54 65  ;.struct ShellTe
4140: 78 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  xt {.  char *z;.
4150: 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 6e    int n;.  int n
4160: 41 6c 6c 6f 63 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  Alloc;.};../*.**
4170: 20 49 6e 69 74 69 61 6c 69 7a 65 20 61 6e 64 20   Initialize and 
4180: 64 65 73 74 72 6f 79 20 61 20 53 68 65 6c 6c 54  destroy a ShellT
4190: 65 78 74 20 6f 62 6a 65 63 74 0a 2a 2f 0a 73 74  ext object.*/.st
41a0: 61 74 69 63 20 76 6f 69 64 20 69 6e 69 74 54 65  atic void initTe
41b0: 78 74 28 53 68 65 6c 6c 54 65 78 74 20 2a 70 29  xt(ShellText *p)
41c0: 7b 0a 20 20 6d 65 6d 73 65 74 28 70 2c 20 30 2c  {.  memset(p, 0,
41d0: 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a 7d 0a   sizeof(*p));.}.
41e0: 73 74 61 74 69 63 20 76 6f 69 64 20 66 72 65 65  static void free
41f0: 54 65 78 74 28 53 68 65 6c 6c 54 65 78 74 20 2a  Text(ShellText *
4200: 70 29 7b 0a 20 20 66 72 65 65 28 70 2d 3e 7a 29  p){.  free(p->z)
4210: 3b 0a 20 20 69 6e 69 74 54 65 78 74 28 70 29 3b  ;.  initText(p);
4220: 0a 7d 0a 0a 2f 2a 20 7a 49 6e 20 69 73 20 65 69  .}../* zIn is ei
4230: 74 68 65 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ther a pointer t
4240: 6f 20 61 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61  o a NULL-termina
4250: 74 65 64 20 73 74 72 69 6e 67 20 69 6e 20 6d 65  ted string in me
4260: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 0a 2a 2a  mory obtained.**
4270: 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2c 20   from malloc(), 
4280: 6f 72 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65  or a NULL pointe
4290: 72 2e 20 54 68 65 20 73 74 72 69 6e 67 20 70 6f  r. The string po
42a0: 69 6e 74 65 64 20 74 6f 20 62 79 20 7a 41 70 70  inted to by zApp
42b0: 65 6e 64 20 69 73 0a 2a 2a 20 61 64 64 65 64 20  end is.** added 
42c0: 74 6f 20 7a 49 6e 2c 20 61 6e 64 20 74 68 65 20  to zIn, and the 
42d0: 72 65 73 75 6c 74 20 72 65 74 75 72 6e 65 64 20  result returned 
42e0: 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e  in memory obtain
42f0: 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ed from malloc()
4300: 2e 0a 2a 2a 20 7a 49 6e 2c 20 69 66 20 69 74 20  ..** zIn, if it 
4310: 77 61 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 73  was not NULL, is
4320: 20 66 72 65 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66   freed..**.** If
4330: 20 74 68 65 20 74 68 69 72 64 20 61 72 67 75 6d   the third argum
4340: 65 6e 74 2c 20 71 75 6f 74 65 2c 20 69 73 20 6e  ent, quote, is n
4350: 6f 74 20 27 5c 30 27 2c 20 74 68 65 6e 20 69 74  ot '\0', then it
4360: 20 69 73 20 75 73 65 64 20 61 73 20 61 0a 2a 2a   is used as a.**
4370: 20 71 75 6f 74 65 20 63 68 61 72 61 63 74 65 72   quote character
4380: 20 66 6f 72 20 7a 41 70 70 65 6e 64 2e 0a 2a 2f   for zAppend..*/
4390: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70  .static void app
43a0: 65 6e 64 54 65 78 74 28 53 68 65 6c 6c 54 65 78  endText(ShellTex
43b0: 74 20 2a 70 2c 20 63 68 61 72 20 63 6f 6e 73 74  t *p, char const
43c0: 20 2a 7a 41 70 70 65 6e 64 2c 20 63 68 61 72 20   *zAppend, char 
43d0: 71 75 6f 74 65 29 7b 0a 20 20 69 6e 74 20 6c 65  quote){.  int le
43e0: 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  n;.  int i;.  in
43f0: 74 20 6e 41 70 70 65 6e 64 20 3d 20 73 74 72 6c  t nAppend = strl
4400: 65 6e 33 30 28 7a 41 70 70 65 6e 64 29 3b 0a 0a  en30(zAppend);..
4410: 20 20 6c 65 6e 20 3d 20 6e 41 70 70 65 6e 64 2b    len = nAppend+
4420: 70 2d 3e 6e 2b 31 3b 0a 20 20 69 66 28 20 71 75  p->n+1;.  if( qu
4430: 6f 74 65 20 29 7b 0a 20 20 20 20 6c 65 6e 20 2b  ote ){.    len +
4440: 3d 20 32 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  = 2;.    for(i=0
4450: 3b 20 69 3c 6e 41 70 70 65 6e 64 3b 20 69 2b 2b  ; i<nAppend; i++
4460: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 41 70  ){.      if( zAp
4470: 70 65 6e 64 5b 69 5d 3d 3d 71 75 6f 74 65 20 29  pend[i]==quote )
4480: 20 6c 65 6e 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20   len++;.    }.  
4490: 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 2b 6c 65  }..  if( p->n+le
44a0: 6e 3e 3d 70 2d 3e 6e 41 6c 6c 6f 63 20 29 7b 0a  n>=p->nAlloc ){.
44b0: 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20      p->nAlloc = 
44c0: 70 2d 3e 6e 41 6c 6c 6f 63 2a 32 20 2b 20 6c 65  p->nAlloc*2 + le
44d0: 6e 20 2b 20 32 30 3b 0a 20 20 20 20 70 2d 3e 7a  n + 20;.    p->z
44e0: 20 3d 20 72 65 61 6c 6c 6f 63 28 70 2d 3e 7a 2c   = realloc(p->z,
44f0: 20 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20 20   p->nAlloc);.   
4500: 20 69 66 28 20 70 2d 3e 7a 3d 3d 30 20 29 7b 0a   if( p->z==0 ){.
4510: 20 20 20 20 20 20 6d 65 6d 73 65 74 28 70 2c 20        memset(p, 
4520: 30 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a  0, sizeof(*p));.
4530: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20        return;.  
4540: 20 20 7d 0a 20 20 7d 0a 0a 20 20 69 66 28 20 71    }.  }..  if( q
4550: 75 6f 74 65 20 29 7b 0a 20 20 20 20 63 68 61 72  uote ){.    char
4560: 20 2a 7a 43 73 72 20 3d 20 70 2d 3e 7a 2b 70 2d   *zCsr = p->z+p-
4570: 3e 6e 3b 0a 20 20 20 20 2a 7a 43 73 72 2b 2b 20  >n;.    *zCsr++ 
4580: 3d 20 71 75 6f 74 65 3b 0a 20 20 20 20 66 6f 72  = quote;.    for
4590: 28 69 3d 30 3b 20 69 3c 6e 41 70 70 65 6e 64 3b  (i=0; i<nAppend;
45a0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 2a 7a 43   i++){.      *zC
45b0: 73 72 2b 2b 20 3d 20 7a 41 70 70 65 6e 64 5b 69  sr++ = zAppend[i
45c0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 41 70  ];.      if( zAp
45d0: 70 65 6e 64 5b 69 5d 3d 3d 71 75 6f 74 65 20 29  pend[i]==quote )
45e0: 20 2a 7a 43 73 72 2b 2b 20 3d 20 71 75 6f 74 65   *zCsr++ = quote
45f0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73  ;.    }.    *zCs
4600: 72 2b 2b 20 3d 20 71 75 6f 74 65 3b 0a 20 20 20  r++ = quote;.   
4610: 20 70 2d 3e 6e 20 3d 20 28 69 6e 74 29 28 7a 43   p->n = (int)(zC
4620: 73 72 20 2d 20 70 2d 3e 7a 29 3b 0a 20 20 20 20  sr - p->z);.    
4630: 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20  *zCsr = '\0';.  
4640: 7d 65 6c 73 65 7b 0a 20 20 20 20 6d 65 6d 63 70  }else{.    memcp
4650: 79 28 70 2d 3e 7a 2b 70 2d 3e 6e 2c 20 7a 41 70  y(p->z+p->n, zAp
4660: 70 65 6e 64 2c 20 6e 41 70 70 65 6e 64 29 3b 0a  pend, nAppend);.
4670: 20 20 20 20 70 2d 3e 6e 20 2b 3d 20 6e 41 70 70      p->n += nApp
4680: 65 6e 64 3b 0a 20 20 20 20 70 2d 3e 7a 5b 70 2d  end;.    p->z[p-
4690: 3e 6e 5d 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 0a  >n] = '\0';.  }.
46a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74  }../*.** Attempt
46b0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
46c0: 20 69 64 65 6e 74 69 66 69 65 72 20 7a 4e 61 6d   identifier zNam
46d0: 65 20 6e 65 65 64 73 20 74 6f 20 62 65 20 71 75  e needs to be qu
46e0: 6f 74 65 64 2c 20 65 69 74 68 65 72 0a 2a 2a 20  oted, either.** 
46f0: 62 65 63 61 75 73 65 20 69 74 20 63 6f 6e 74 61  because it conta
4700: 69 6e 73 20 6e 6f 6e 2d 61 6c 70 68 61 6e 75 6d  ins non-alphanum
4710: 65 72 69 63 20 63 68 61 72 61 63 74 65 72 73 2c  eric characters,
4720: 20 6f 72 20 62 65 63 61 75 73 65 20 69 74 20 69   or because it i
4730: 73 20 61 6e 0a 2a 2a 20 53 51 4c 69 74 65 20 6b  s an.** SQLite k
4740: 65 79 77 6f 72 64 2e 20 20 42 65 20 63 6f 6e 73  eyword.  Be cons
4750: 65 72 76 61 74 69 76 65 20 69 6e 20 74 68 69 73  ervative in this
4760: 20 65 73 74 69 6d 61 74 65 3a 20 20 57 68 65 6e   estimate:  When
4770: 20 69 6e 20 64 6f 75 62 74 20 61 73 73 75 6d 65   in doubt assume
4780: 0a 2a 2a 20 74 68 61 74 20 71 75 6f 74 69 6e 67  .** that quoting
4790: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a   is required..**
47a0: 0a 2a 2a 20 52 65 74 75 72 6e 20 27 22 27 20 69  .** Return '"' i
47b0: 66 20 71 75 6f 74 69 6e 67 20 69 73 20 72 65 71  f quoting is req
47c0: 75 69 72 65 64 2e 20 20 52 65 74 75 72 6e 20 30  uired.  Return 0
47d0: 20 69 66 20 6e 6f 20 71 75 6f 74 69 6e 67 20 69   if no quoting i
47e0: 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73  s required..*/.s
47f0: 74 61 74 69 63 20 63 68 61 72 20 71 75 6f 74 65  tatic char quote
4800: 43 68 61 72 28 63 6f 6e 73 74 20 63 68 61 72 20  Char(const char 
4810: 2a 7a 4e 61 6d 65 29 7b 0a 20 20 2f 2a 20 41 6c  *zName){.  /* Al
4820: 6c 20 53 51 4c 69 74 65 20 6b 65 79 77 6f 72 64  l SQLite keyword
4830: 73 2c 20 69 6e 20 61 6c 70 68 61 62 65 74 69 63  s, in alphabetic
4840: 61 6c 20 6f 72 64 65 72 20 2a 2f 0a 20 20 73 74  al order */.  st
4850: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
4860: 2a 61 7a 4b 65 79 77 6f 72 64 73 5b 5d 20 3d 20  *azKeywords[] = 
4870: 7b 0a 20 20 20 20 22 41 42 4f 52 54 22 2c 20 22  {.    "ABORT", "
4880: 41 43 54 49 4f 4e 22 2c 20 22 41 44 44 22 2c 20  ACTION", "ADD", 
4890: 22 41 46 54 45 52 22 2c 20 22 41 4c 4c 22 2c 20  "AFTER", "ALL", 
48a0: 22 41 4c 54 45 52 22 2c 20 22 41 4e 41 4c 59 5a  "ALTER", "ANALYZ
48b0: 45 22 2c 20 22 41 4e 44 22 2c 20 22 41 53 22 2c  E", "AND", "AS",
48c0: 0a 20 20 20 20 22 41 53 43 22 2c 20 22 41 54 54  .    "ASC", "ATT
48d0: 41 43 48 22 2c 20 22 41 55 54 4f 49 4e 43 52 45  ACH", "AUTOINCRE
48e0: 4d 45 4e 54 22 2c 20 22 42 45 46 4f 52 45 22 2c  MENT", "BEFORE",
48f0: 20 22 42 45 47 49 4e 22 2c 20 22 42 45 54 57 45   "BEGIN", "BETWE
4900: 45 4e 22 2c 20 22 42 59 22 2c 0a 20 20 20 20 22  EN", "BY",.    "
4910: 43 41 53 43 41 44 45 22 2c 20 22 43 41 53 45 22  CASCADE", "CASE"
4920: 2c 20 22 43 41 53 54 22 2c 20 22 43 48 45 43 4b  , "CAST", "CHECK
4930: 22 2c 20 22 43 4f 4c 4c 41 54 45 22 2c 20 22 43  ", "COLLATE", "C
4940: 4f 4c 55 4d 4e 22 2c 20 22 43 4f 4d 4d 49 54 22  OLUMN", "COMMIT"
4950: 2c 0a 20 20 20 20 22 43 4f 4e 46 4c 49 43 54 22  ,.    "CONFLICT"
4960: 2c 20 22 43 4f 4e 53 54 52 41 49 4e 54 22 2c 20  , "CONSTRAINT", 
4970: 22 43 52 45 41 54 45 22 2c 20 22 43 52 4f 53 53  "CREATE", "CROSS
4980: 22 2c 20 22 43 55 52 52 45 4e 54 5f 44 41 54 45  ", "CURRENT_DATE
4990: 22 2c 0a 20 20 20 20 22 43 55 52 52 45 4e 54 5f  ",.    "CURRENT_
49a0: 54 49 4d 45 22 2c 20 22 43 55 52 52 45 4e 54 5f  TIME", "CURRENT_
49b0: 54 49 4d 45 53 54 41 4d 50 22 2c 20 22 44 41 54  TIMESTAMP", "DAT
49c0: 41 42 41 53 45 22 2c 20 22 44 45 46 41 55 4c 54  ABASE", "DEFAULT
49d0: 22 2c 20 22 44 45 46 45 52 52 41 42 4c 45 22 2c  ", "DEFERRABLE",
49e0: 0a 20 20 20 20 22 44 45 46 45 52 52 45 44 22 2c  .    "DEFERRED",
49f0: 20 22 44 45 4c 45 54 45 22 2c 20 22 44 45 53 43   "DELETE", "DESC
4a00: 22 2c 20 22 44 45 54 41 43 48 22 2c 20 22 44 49  ", "DETACH", "DI
4a10: 53 54 49 4e 43 54 22 2c 20 22 44 52 4f 50 22 2c  STINCT", "DROP",
4a20: 20 22 45 41 43 48 22 2c 0a 20 20 20 20 22 45 4c   "EACH",.    "EL
4a30: 53 45 22 2c 20 22 45 4e 44 22 2c 20 22 45 53 43  SE", "END", "ESC
4a40: 41 50 45 22 2c 20 22 45 58 43 45 50 54 22 2c 20  APE", "EXCEPT", 
4a50: 22 45 58 43 4c 55 53 49 56 45 22 2c 20 22 45 58  "EXCLUSIVE", "EX
4a60: 49 53 54 53 22 2c 20 22 45 58 50 4c 41 49 4e 22  ISTS", "EXPLAIN"
4a70: 2c 0a 20 20 20 20 22 46 41 49 4c 22 2c 20 22 46  ,.    "FAIL", "F
4a80: 4f 52 22 2c 20 22 46 4f 52 45 49 47 4e 22 2c 20  OR", "FOREIGN", 
4a90: 22 46 52 4f 4d 22 2c 20 22 46 55 4c 4c 22 2c 20  "FROM", "FULL", 
4aa0: 22 47 4c 4f 42 22 2c 20 22 47 52 4f 55 50 22 2c  "GLOB", "GROUP",
4ab0: 20 22 48 41 56 49 4e 47 22 2c 20 22 49 46 22 2c   "HAVING", "IF",
4ac0: 0a 20 20 20 20 22 49 47 4e 4f 52 45 22 2c 20 22  .    "IGNORE", "
4ad0: 49 4d 4d 45 44 49 41 54 45 22 2c 20 22 49 4e 22  IMMEDIATE", "IN"
4ae0: 2c 20 22 49 4e 44 45 58 22 2c 20 22 49 4e 44 45  , "INDEX", "INDE
4af0: 58 45 44 22 2c 20 22 49 4e 49 54 49 41 4c 4c 59  XED", "INITIALLY
4b00: 22 2c 20 22 49 4e 4e 45 52 22 2c 0a 20 20 20 20  ", "INNER",.    
4b10: 22 49 4e 53 45 52 54 22 2c 20 22 49 4e 53 54 45  "INSERT", "INSTE
4b20: 41 44 22 2c 20 22 49 4e 54 45 52 53 45 43 54 22  AD", "INTERSECT"
4b30: 2c 20 22 49 4e 54 4f 22 2c 20 22 49 53 22 2c 20  , "INTO", "IS", 
4b40: 22 49 53 4e 55 4c 4c 22 2c 20 22 4a 4f 49 4e 22  "ISNULL", "JOIN"
4b50: 2c 20 22 4b 45 59 22 2c 0a 20 20 20 20 22 4c 45  , "KEY",.    "LE
4b60: 46 54 22 2c 20 22 4c 49 4b 45 22 2c 20 22 4c 49  FT", "LIKE", "LI
4b70: 4d 49 54 22 2c 20 22 4d 41 54 43 48 22 2c 20 22  MIT", "MATCH", "
4b80: 4e 41 54 55 52 41 4c 22 2c 20 22 4e 4f 22 2c 20  NATURAL", "NO", 
4b90: 22 4e 4f 54 22 2c 20 22 4e 4f 54 4e 55 4c 4c 22  "NOT", "NOTNULL"
4ba0: 2c 0a 20 20 20 20 22 4e 55 4c 4c 22 2c 20 22 4f  ,.    "NULL", "O
4bb0: 46 22 2c 20 22 4f 46 46 53 45 54 22 2c 20 22 4f  F", "OFFSET", "O
4bc0: 4e 22 2c 20 22 4f 52 22 2c 20 22 4f 52 44 45 52  N", "OR", "ORDER
4bd0: 22 2c 20 22 4f 55 54 45 52 22 2c 20 22 50 4c 41  ", "OUTER", "PLA
4be0: 4e 22 2c 20 22 50 52 41 47 4d 41 22 2c 0a 20 20  N", "PRAGMA",.  
4bf0: 20 20 22 50 52 49 4d 41 52 59 22 2c 20 22 51 55    "PRIMARY", "QU
4c00: 45 52 59 22 2c 20 22 52 41 49 53 45 22 2c 20 22  ERY", "RAISE", "
4c10: 52 45 43 55 52 53 49 56 45 22 2c 20 22 52 45 46  RECURSIVE", "REF
4c20: 45 52 45 4e 43 45 53 22 2c 20 22 52 45 47 45 58  ERENCES", "REGEX
4c30: 50 22 2c 0a 20 20 20 20 22 52 45 49 4e 44 45 58  P",.    "REINDEX
4c40: 22 2c 20 22 52 45 4c 45 41 53 45 22 2c 20 22 52  ", "RELEASE", "R
4c50: 45 4e 41 4d 45 22 2c 20 22 52 45 50 4c 41 43 45  ENAME", "REPLACE
4c60: 22 2c 20 22 52 45 53 54 52 49 43 54 22 2c 20 22  ", "RESTRICT", "
4c70: 52 49 47 48 54 22 2c 0a 20 20 20 20 22 52 4f 4c  RIGHT",.    "ROL
4c80: 4c 42 41 43 4b 22 2c 20 22 52 4f 57 22 2c 20 22  LBACK", "ROW", "
4c90: 53 41 56 45 50 4f 49 4e 54 22 2c 20 22 53 45 4c  SAVEPOINT", "SEL
4ca0: 45 43 54 22 2c 20 22 53 45 54 22 2c 20 22 54 41  ECT", "SET", "TA
4cb0: 42 4c 45 22 2c 20 22 54 45 4d 50 22 2c 0a 20 20  BLE", "TEMP",.  
4cc0: 20 20 22 54 45 4d 50 4f 52 41 52 59 22 2c 20 22    "TEMPORARY", "
4cd0: 54 48 45 4e 22 2c 20 22 54 4f 22 2c 20 22 54 52  THEN", "TO", "TR
4ce0: 41 4e 53 41 43 54 49 4f 4e 22 2c 20 22 54 52 49  ANSACTION", "TRI
4cf0: 47 47 45 52 22 2c 20 22 55 4e 49 4f 4e 22 2c 20  GGER", "UNION", 
4d00: 22 55 4e 49 51 55 45 22 2c 0a 20 20 20 20 22 55  "UNIQUE",.    "U
4d10: 50 44 41 54 45 22 2c 20 22 55 53 49 4e 47 22 2c  PDATE", "USING",
4d20: 20 22 56 41 43 55 55 4d 22 2c 20 22 56 41 4c 55   "VACUUM", "VALU
4d30: 45 53 22 2c 20 22 56 49 45 57 22 2c 20 22 56 49  ES", "VIEW", "VI
4d40: 52 54 55 41 4c 22 2c 20 22 57 48 45 4e 22 2c 20  RTUAL", "WHEN", 
4d50: 22 57 48 45 52 45 22 2c 0a 20 20 20 20 22 57 49  "WHERE",.    "WI
4d60: 54 48 22 2c 20 22 57 49 54 48 4f 55 54 22 2c 0a  TH", "WITHOUT",.
4d70: 20 20 7d 3b 0a 20 20 69 6e 74 20 69 2c 20 6c 77    };.  int i, lw
4d80: 72 2c 20 75 70 72 2c 20 6d 69 64 2c 20 63 3b 0a  r, upr, mid, c;.
4d90: 20 20 69 66 28 20 21 69 73 61 6c 70 68 61 28 28    if( !isalpha((
4da0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 7a 4e  unsigned char)zN
4db0: 61 6d 65 5b 30 5d 29 20 26 26 20 7a 4e 61 6d 65  ame[0]) && zName
4dc0: 5b 30 5d 21 3d 27 5f 27 20 29 20 72 65 74 75 72  [0]!='_' ) retur
4dd0: 6e 20 27 22 27 3b 0a 20 20 66 6f 72 28 69 3d 30  n '"';.  for(i=0
4de0: 3b 20 7a 4e 61 6d 65 5b 69 5d 3b 20 69 2b 2b 29  ; zName[i]; i++)
4df0: 7b 0a 20 20 20 20 69 66 28 20 21 69 73 61 6c 6e  {.    if( !isaln
4e00: 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
4e10: 72 29 7a 4e 61 6d 65 5b 69 5d 29 20 26 26 20 7a  r)zName[i]) && z
4e20: 4e 61 6d 65 5b 69 5d 21 3d 27 5f 27 20 29 20 72  Name[i]!='_' ) r
4e30: 65 74 75 72 6e 20 27 22 27 3b 0a 20 20 7d 0a 20  eturn '"';.  }. 
4e40: 20 6c 77 72 20 3d 20 30 3b 0a 20 20 75 70 72 20   lwr = 0;.  upr 
4e50: 3d 20 73 69 7a 65 6f 66 28 61 7a 4b 65 79 77 6f  = sizeof(azKeywo
4e60: 72 64 73 29 2f 73 69 7a 65 6f 66 28 61 7a 4b 65  rds)/sizeof(azKe
4e70: 79 77 6f 72 64 73 5b 30 5d 29 20 2d 20 31 3b 0a  ywords[0]) - 1;.
4e80: 20 20 77 68 69 6c 65 28 20 6c 77 72 3c 3d 75 70    while( lwr<=up
4e90: 72 20 29 7b 0a 20 20 20 20 6d 69 64 20 3d 20 28  r ){.    mid = (
4ea0: 6c 77 72 2b 75 70 72 29 2f 32 3b 0a 20 20 20 20  lwr+upr)/2;.    
4eb0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 72 69  c = sqlite3_stri
4ec0: 63 6d 70 28 61 7a 4b 65 79 77 6f 72 64 73 5b 6d  cmp(azKeywords[m
4ed0: 69 64 5d 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  id], zName);.   
4ee0: 20 69 66 28 20 63 3d 3d 30 20 29 20 72 65 74 75   if( c==0 ) retu
4ef0: 72 6e 20 27 22 27 3b 0a 20 20 20 20 69 66 28 20  rn '"';.    if( 
4f00: 63 3c 30 20 29 7b 0a 20 20 20 20 20 20 6c 77 72  c<0 ){.      lwr
4f10: 20 3d 20 6d 69 64 2b 31 3b 0a 20 20 20 20 7d 65   = mid+1;.    }e
4f20: 6c 73 65 7b 0a 20 20 20 20 20 20 75 70 72 20 3d  lse{.      upr =
4f30: 20 6d 69 64 2d 31 3b 0a 20 20 20 20 7d 0a 20 20   mid-1;.    }.  
4f40: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
4f50: 0a 2f 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e 63 74  ./*.** SQL funct
4f60: 69 6f 6e 3a 20 20 73 68 65 6c 6c 5f 61 64 64 5f  ion:  shell_add_
4f70: 73 63 68 65 6d 61 28 53 2c 58 29 0a 2a 2a 0a 2a  schema(S,X).**.*
4f80: 2a 20 41 64 64 20 74 68 65 20 73 63 68 65 6d 61  * Add the schema
4f90: 20 6e 61 6d 65 20 58 20 74 6f 20 74 68 65 20 43   name X to the C
4fa0: 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  REATE statement 
4fb0: 69 6e 20 53 20 61 6e 64 20 72 65 74 75 72 6e 20  in S and return 
4fc0: 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 20 45  the result..** E
4fd0: 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  xamples:.**.**  
4fe0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
4ff0: 31 28 78 29 20 20 20 2d 3e 20 20 20 43 52 45 41  1(x)   ->   CREA
5000: 54 45 20 54 41 42 4c 45 20 78 79 7a 2e 74 31 28  TE TABLE xyz.t1(
5010: 78 29 3b 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 20 77  x);.**.** Also w
5020: 6f 72 6b 73 20 6f 6e 0a 2a 2a 0a 2a 2a 20 20 20  orks on.**.**   
5030: 20 43 52 45 41 54 45 20 49 4e 44 45 58 0a 2a 2a   CREATE INDEX.**
5040: 20 20 20 20 43 52 45 41 54 45 20 55 4e 49 51 55      CREATE UNIQU
5050: 45 20 49 4e 44 45 58 0a 2a 2a 20 20 20 20 43 52  E INDEX.**    CR
5060: 45 41 54 45 20 56 49 45 57 0a 2a 2a 20 20 20 20  EATE VIEW.**    
5070: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 0a 2a  CREATE TRIGGER.*
5080: 2a 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54  *    CREATE VIRT
5090: 55 41 4c 20 54 41 42 4c 45 0a 2a 2a 0a 2a 2a 20  UAL TABLE.**.** 
50a0: 54 68 69 73 20 55 44 46 20 69 73 20 75 73 65 64  This UDF is used
50b0: 20 62 79 20 74 68 65 20 2e 73 63 68 65 6d 61 20   by the .schema 
50c0: 63 6f 6d 6d 61 6e 64 20 74 6f 20 69 6e 73 65 72  command to inser
50d0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 6e 61 6d  t the schema nam
50e0: 65 20 6f 66 0a 2a 2a 20 61 74 74 61 63 68 65 64  e of.** attached
50f0: 20 64 61 74 61 62 61 73 65 73 20 69 6e 74 6f 20   databases into 
5100: 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 74 68  the middle of th
5110: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  e sqlite_master.
5120: 73 71 6c 20 66 69 65 6c 64 2e 0a 2a 2f 0a 73 74  sql field..*/.st
5130: 61 74 69 63 20 76 6f 69 64 20 73 68 65 6c 6c 41  atic void shellA
5140: 64 64 53 63 68 65 6d 61 4e 61 6d 65 28 0a 20 20  ddSchemaName(.  
5150: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
5160: 2a 70 43 74 78 2c 0a 20 20 69 6e 74 20 6e 56 61  *pCtx,.  int nVa
5170: 6c 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  l,.  sqlite3_val
5180: 75 65 20 2a 2a 61 70 56 61 6c 0a 29 7b 0a 20 20  ue **apVal.){.  
5190: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
51a0: 72 20 2a 61 50 72 65 66 69 78 5b 5d 20 3d 20 7b  r *aPrefix[] = {
51b0: 0a 20 20 20 20 20 22 54 41 42 4c 45 22 2c 0a 20  .     "TABLE",. 
51c0: 20 20 20 20 22 49 4e 44 45 58 22 2c 0a 20 20 20      "INDEX",.   
51d0: 20 20 22 55 4e 49 51 55 45 20 49 4e 44 45 58 22    "UNIQUE INDEX"
51e0: 2c 0a 20 20 20 20 20 22 56 49 45 57 22 2c 0a 20  ,.     "VIEW",. 
51f0: 20 20 20 20 22 54 52 49 47 47 45 52 22 2c 0a 20      "TRIGGER",. 
5200: 20 20 20 20 22 56 49 52 54 55 41 4c 20 54 41 42      "VIRTUAL TAB
5210: 4c 45 22 0a 20 20 7d 3b 0a 20 20 69 6e 74 20 69  LE".  };.  int i
5220: 20 3d 20 30 3b 0a 20 20 63 6f 6e 73 74 20 63 68   = 0;.  const ch
5230: 61 72 20 2a 7a 49 6e 20 3d 20 28 63 6f 6e 73 74  ar *zIn = (const
5240: 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76   char*)sqlite3_v
5250: 61 6c 75 65 5f 74 65 78 74 28 61 70 56 61 6c 5b  alue_text(apVal[
5260: 30 5d 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  0]);.  const cha
5270: 72 20 2a 7a 53 63 68 65 6d 61 20 3d 20 28 63 6f  r *zSchema = (co
5280: 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
5290: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 70 56  3_value_text(apV
52a0: 61 6c 5b 31 5d 29 3b 0a 20 20 61 73 73 65 72 74  al[1]);.  assert
52b0: 28 20 6e 56 61 6c 3d 3d 32 20 29 3b 0a 20 20 69  ( nVal==2 );.  i
52c0: 66 28 20 7a 49 6e 21 3d 30 20 26 26 20 73 74 72  f( zIn!=0 && str
52d0: 6e 63 6d 70 28 7a 49 6e 2c 20 22 43 52 45 41 54  ncmp(zIn, "CREAT
52e0: 45 20 22 2c 20 37 29 3d 3d 30 20 29 7b 0a 20 20  E ", 7)==0 ){.  
52f0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 28 69 6e    for(i=0; i<(in
5300: 74 29 28 73 69 7a 65 6f 66 28 61 50 72 65 66 69  t)(sizeof(aPrefi
5310: 78 29 2f 73 69 7a 65 6f 66 28 61 50 72 65 66 69  x)/sizeof(aPrefi
5320: 78 5b 30 5d 29 29 3b 20 69 2b 2b 29 7b 0a 20 20  x[0])); i++){.  
5330: 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c      int n = strl
5340: 65 6e 33 30 28 61 50 72 65 66 69 78 5b 69 5d 29  en30(aPrefix[i])
5350: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 6e  ;.      if( strn
5360: 63 6d 70 28 7a 49 6e 2b 37 2c 20 61 50 72 65 66  cmp(zIn+7, aPref
5370: 69 78 5b 69 5d 2c 20 6e 29 3d 3d 30 20 26 26 20  ix[i], n)==0 && 
5380: 7a 49 6e 5b 6e 2b 37 5d 3d 3d 27 20 27 20 29 7b  zIn[n+7]==' ' ){
5390: 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 63 51  .        char cQ
53a0: 75 6f 74 65 20 3d 20 71 75 6f 74 65 43 68 61 72  uote = quoteChar
53b0: 28 7a 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20  (zSchema);.     
53c0: 20 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20     char *z;.    
53d0: 20 20 20 20 69 66 28 20 63 51 75 6f 74 65 20 29      if( cQuote )
53e0: 7b 0a 20 20 20 20 20 20 20 20 20 7a 20 3d 20 73  {.         z = s
53f0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
5400: 25 2e 2a 73 20 5c 22 25 77 5c 22 2e 25 73 22 2c  %.*s \"%w\".%s",
5410: 20 6e 2b 37 2c 20 7a 49 6e 2c 20 7a 53 63 68 65   n+7, zIn, zSche
5420: 6d 61 2c 20 7a 49 6e 2b 6e 2b 38 29 3b 0a 20 20  ma, zIn+n+8);.  
5430: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
5440: 20 20 20 20 20 20 20 7a 20 3d 20 73 71 6c 69 74         z = sqlit
5450: 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 2e 2a 73  e3_mprintf("%.*s
5460: 20 25 73 2e 25 73 22 2c 20 6e 2b 37 2c 20 7a 49   %s.%s", n+7, zI
5470: 6e 2c 20 7a 53 63 68 65 6d 61 2c 20 7a 49 6e 2b  n, zSchema, zIn+
5480: 6e 2b 38 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  n+8);.        }.
5490: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
54a0: 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78  result_text(pCtx
54b0: 2c 20 7a 2c 20 2d 31 2c 20 73 71 6c 69 74 65 33  , z, -1, sqlite3
54c0: 5f 66 72 65 65 29 3b 0a 20 20 20 20 20 20 20 20  _free);.        
54d0: 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a  return;.      }.
54e0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
54f0: 74 65 33 5f 72 65 73 75 6c 74 5f 76 61 6c 75 65  te3_result_value
5500: 28 70 43 74 78 2c 20 61 70 56 61 6c 5b 30 5d 29  (pCtx, apVal[0])
5510: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73  ;.}../*.** The s
5520: 6f 75 72 63 65 20 63 6f 64 65 20 66 6f 72 20 73  ource code for s
5530: 65 76 65 72 61 6c 20 72 75 6e 2d 74 69 6d 65 20  everal run-time 
5540: 6c 6f 61 64 61 62 6c 65 20 65 78 74 65 6e 73 69  loadable extensi
5550: 6f 6e 73 20 69 73 20 69 6e 73 65 72 74 65 64 0a  ons is inserted.
5560: 2a 2a 20 62 65 6c 6f 77 20 62 79 20 74 68 65 20  ** below by the 
5570: 2e 2e 2f 74 6f 6f 6c 2f 6d 6b 73 68 65 6c 6c 63  ../tool/mkshellc
5580: 2e 74 63 6c 20 73 63 72 69 70 74 2e 20 20 42 65  .tcl script.  Be
5590: 66 6f 72 65 20 70 72 6f 63 65 73 73 69 6e 67 20  fore processing 
55a0: 74 68 61 74 20 69 6e 63 6c 75 64 65 64 0a 2a 2a  that included.**
55b0: 20 63 6f 64 65 2c 20 77 65 20 6e 65 65 64 20 74   code, we need t
55c0: 6f 20 6f 76 65 72 72 69 64 65 20 73 6f 6d 65 20  o override some 
55d0: 6d 61 63 72 6f 73 20 74 6f 20 6d 61 6b 65 20 74  macros to make t
55e0: 68 65 20 69 6e 63 6c 75 64 65 64 20 70 72 6f 67  he included prog
55f0: 72 61 6d 20 63 6f 64 65 0a 2a 2a 20 77 6f 72 6b  ram code.** work
5600: 20 68 65 72 65 20 69 6e 20 74 68 65 20 6d 69 64   here in the mid
5610: 64 6c 65 20 6f 66 20 74 68 69 73 20 72 65 67 75  dle of this regu
5620: 6c 61 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  lar program..*/.
5630: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
5640: 58 54 45 4e 53 49 4f 4e 5f 49 4e 49 54 31 0a 23  XTENSION_INIT1.#
5650: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 58  define SQLITE_EX
5660: 54 45 4e 53 49 4f 4e 5f 49 4e 49 54 32 28 58 29  TENSION_INIT2(X)
5670: 20 28 76 6f 69 64 29 28 58 29 0a 0a 49 4e 43 4c   (void)(X)..INCL
5680: 55 44 45 20 2e 2e 2f 65 78 74 2f 6d 69 73 63 2f  UDE ../ext/misc/
5690: 73 68 61 74 68 72 65 65 2e 63 0a 49 4e 43 4c 55  shathree.c.INCLU
56a0: 44 45 20 2e 2e 2f 65 78 74 2f 6d 69 73 63 2f 66  DE ../ext/misc/f
56b0: 69 6c 65 69 6f 2e 63 0a 49 4e 43 4c 55 44 45 20  ileio.c.INCLUDE 
56c0: 2e 2e 2f 65 78 74 2f 6d 69 73 63 2f 63 6f 6d 70  ../ext/misc/comp
56d0: 6c 65 74 69 6f 6e 2e 63 0a 0a 23 69 66 20 64 65  letion.c..#if de
56e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
56f0: 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 2f 2a 0a  BLE_SESSION)./*.
5700: 2a 2a 20 53 74 61 74 65 20 69 6e 66 6f 72 6d 61  ** State informa
5710: 74 69 6f 6e 20 66 6f 72 20 61 20 73 69 6e 67 6c  tion for a singl
5720: 65 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e 0a 2a  e open session.*
5730: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
5740: 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20 4f 70 65   OpenSession Ope
5750: 6e 53 65 73 73 69 6f 6e 3b 0a 73 74 72 75 63 74  nSession;.struct
5760: 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20 7b 0a 20   OpenSession {. 
5770: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
5780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 79 6d            /* Sym
5790: 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74  bolic name for t
57a0: 68 69 73 20 73 65 73 73 69 6f 6e 20 2a 2f 0a 20  his session */. 
57b0: 20 69 6e 74 20 6e 46 69 6c 74 65 72 3b 20 20 20   int nFilter;   
57c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
57d0: 62 65 72 20 6f 66 20 78 46 69 6c 74 65 72 20 72  ber of xFilter r
57e0: 65 6a 65 63 74 69 6f 6e 20 47 4c 4f 42 20 70 61  ejection GLOB pa
57f0: 74 74 65 72 6e 73 20 2a 2f 0a 20 20 63 68 61 72  tterns */.  char
5800: 20 2a 2a 61 7a 46 69 6c 74 65 72 3b 20 20 20 20   **azFilter;    
5810: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
5820: 20 78 46 69 6c 74 65 72 20 72 65 6a 65 63 74 69   xFilter rejecti
5830: 6f 6e 20 47 4c 4f 42 20 70 61 74 74 65 72 6e 73  on GLOB patterns
5840: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 65   */.  sqlite3_se
5850: 73 73 69 6f 6e 20 2a 70 3b 20 20 20 20 20 20 2f  ssion *p;      /
5860: 2a 20 54 68 65 20 6f 70 65 6e 20 73 65 73 73 69  * The open sessi
5870: 6f 6e 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 0a  on */.};.#endif.
5880: 0a 2f 2a 0a 2a 2a 20 53 68 65 6c 6c 20 6f 75 74  ./*.** Shell out
5890: 70 75 74 20 6d 6f 64 65 20 69 6e 66 6f 72 6d 61  put mode informa
58a0: 74 69 6f 6e 20 66 72 6f 6d 20 62 65 66 6f 72 65  tion from before
58b0: 20 22 2e 65 78 70 6c 61 69 6e 20 6f 6e 22 2c 0a   ".explain on",.
58c0: 2a 2a 20 73 61 76 65 64 20 73 6f 20 74 68 61 74  ** saved so that
58d0: 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f   it can be resto
58e0: 72 65 64 20 62 79 20 22 2e 65 78 70 6c 61 69 6e  red by ".explain
58f0: 20 6f 66 66 22 0a 2a 2f 0a 74 79 70 65 64 65 66   off".*/.typedef
5900: 20 73 74 72 75 63 74 20 53 61 76 65 64 4d 6f 64   struct SavedMod
5910: 65 49 6e 66 6f 20 53 61 76 65 64 4d 6f 64 65 49  eInfo SavedModeI
5920: 6e 66 6f 3b 0a 73 74 72 75 63 74 20 53 61 76 65  nfo;.struct Save
5930: 64 4d 6f 64 65 49 6e 66 6f 20 7b 0a 20 20 69 6e  dModeInfo {.  in
5940: 74 20 76 61 6c 69 64 3b 20 20 20 20 20 20 20 20  t valid;        
5950: 20 20 2f 2a 20 49 73 20 74 68 65 72 65 20 6c 65    /* Is there le
5960: 67 69 74 20 64 61 74 61 20 69 6e 20 68 65 72 65  git data in here
5970: 3f 20 2a 2f 0a 20 20 69 6e 74 20 6d 6f 64 65 3b  ? */.  int mode;
5980: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
5990: 64 65 20 70 72 69 6f 72 20 74 6f 20 22 2e 65 78  de prior to ".ex
59a0: 70 6c 61 69 6e 20 6f 6e 22 20 2a 2f 0a 20 20 69  plain on" */.  i
59b0: 6e 74 20 73 68 6f 77 48 65 61 64 65 72 3b 20 20  nt showHeader;  
59c0: 20 20 20 2f 2a 20 54 68 65 20 22 2e 68 65 61 64     /* The ".head
59d0: 65 72 22 20 73 65 74 74 69 6e 67 20 70 72 69 6f  er" setting prio
59e0: 72 20 74 6f 20 22 2e 65 78 70 6c 61 69 6e 20 6f  r to ".explain o
59f0: 6e 22 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6c 57  n" */.  int colW
5a00: 69 64 74 68 5b 31 30 30 5d 3b 20 20 2f 2a 20 43  idth[100];  /* C
5a10: 6f 6c 75 6d 6e 20 77 69 64 74 68 73 20 70 72 69  olumn widths pri
5a20: 6f 72 20 74 6f 20 22 2e 65 78 70 6c 61 69 6e 20  or to ".explain 
5a30: 6f 6e 22 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  on" */.};../*.**
5a40: 20 53 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69   State informati
5a50: 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 64 61 74  on about the dat
5a60: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
5a70: 20 69 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e   is contained in
5a80: 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
5a90: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
5aa0: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 74   structure..*/.t
5ab0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 68  ypedef struct Sh
5ac0: 65 6c 6c 53 74 61 74 65 20 53 68 65 6c 6c 53 74  ellState ShellSt
5ad0: 61 74 65 3b 0a 73 74 72 75 63 74 20 53 68 65 6c  ate;.struct Shel
5ae0: 6c 53 74 61 74 65 20 7b 0a 20 20 73 71 6c 69 74  lState {.  sqlit
5af0: 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
5b00: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
5b10: 65 20 2a 2f 0a 20 20 69 6e 74 20 61 75 74 6f 45  e */.  int autoE
5b20: 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 2f 2a  xplain;       /*
5b30: 20 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 74   Automatically t
5b40: 75 72 6e 20 6f 6e 20 2e 65 78 70 6c 61 69 6e 20  urn on .explain 
5b50: 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 61 75  mode */.  int au
5b60: 74 6f 45 51 50 3b 20 20 20 20 20 20 20 20 20 20  toEQP;          
5b70: 20 2f 2a 20 52 75 6e 20 45 58 50 4c 41 49 4e 20   /* Run EXPLAIN 
5b80: 51 55 45 52 59 20 50 4c 41 4e 20 70 72 69 6f 72  QUERY PLAN prior
5b90: 20 74 6f 20 73 65 61 63 68 20 53 51 4c 20 73 74   to seach SQL st
5ba0: 6d 74 20 2a 2f 0a 20 20 69 6e 74 20 73 74 61 74  mt */.  int stat
5bb0: 73 4f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  sOn;           /
5bc0: 2a 20 54 72 75 65 20 74 6f 20 64 69 73 70 6c 61  * True to displa
5bd0: 79 20 6d 65 6d 6f 72 79 20 73 74 61 74 73 20 62  y memory stats b
5be0: 65 66 6f 72 65 20 65 61 63 68 20 66 69 6e 61 6c  efore each final
5bf0: 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 73 63 61  ize */.  int sca
5c00: 6e 73 74 61 74 73 4f 6e 3b 20 20 20 20 20 20 20  nstatsOn;       
5c10: 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 70 6c  /* True to displ
5c20: 61 79 20 73 63 61 6e 20 73 74 61 74 73 20 62 65  ay scan stats be
5c30: 66 6f 72 65 20 65 61 63 68 20 66 69 6e 61 6c 69  fore each finali
5c40: 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 75 74 43  ze */.  int outC
5c50: 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 2f  ount;          /
5c60: 2a 20 52 65 76 65 72 74 20 74 6f 20 73 74 64 6f  * Revert to stdo
5c70: 75 74 20 77 68 65 6e 20 72 65 61 63 68 69 6e 67  ut when reaching
5c80: 20 7a 65 72 6f 20 2a 2f 0a 20 20 69 6e 74 20 63   zero */.  int c
5c90: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
5ca0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
5cb0: 65 63 6f 72 64 73 20 64 69 73 70 6c 61 79 65 64  ecords displayed
5cc0: 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 46 49 4c   so far */.  FIL
5cd0: 45 20 2a 6f 75 74 3b 20 20 20 20 20 20 20 20 20  E *out;         
5ce0: 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73      /* Write res
5cf0: 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 20 20 46  ults here */.  F
5d00: 49 4c 45 20 2a 74 72 61 63 65 4f 75 74 3b 20 20  ILE *traceOut;  
5d10: 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20        /* Output 
5d20: 66 6f 72 20 73 71 6c 69 74 65 33 5f 74 72 61 63  for sqlite3_trac
5d30: 65 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  e() */.  int nEr
5d40: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
5d50: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
5d60: 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
5d70: 74 20 6d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  t mode;         
5d80: 20 20 20 20 20 2f 2a 20 41 6e 20 6f 75 74 70 75       /* An outpu
5d90: 74 20 6d 6f 64 65 20 73 65 74 74 69 6e 67 20 2a  t mode setting *
5da0: 2f 0a 20 20 69 6e 74 20 63 4d 6f 64 65 3b 20 20  /.  int cMode;  
5db0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 65             /* te
5dc0: 6d 70 6f 72 61 72 79 20 6f 75 74 70 75 74 20 6d  mporary output m
5dd0: 6f 64 65 20 66 6f 72 20 74 68 65 20 63 75 72 72  ode for the curr
5de0: 65 6e 74 20 71 75 65 72 79 20 2a 2f 0a 20 20 69  ent query */.  i
5df0: 6e 74 20 6e 6f 72 6d 61 6c 4d 6f 64 65 3b 20 20  nt normalMode;  
5e00: 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20        /* Output 
5e10: 6d 6f 64 65 20 62 65 66 6f 72 65 20 22 2e 65 78  mode before ".ex
5e20: 70 6c 61 69 6e 20 6f 6e 22 20 2a 2f 0a 20 20 69  plain on" */.  i
5e30: 6e 74 20 77 72 69 74 61 62 6c 65 53 63 68 65 6d  nt writableSchem
5e40: 61 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  a;    /* True if
5e50: 20 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65   PRAGMA writable
5e60: 5f 73 63 68 65 6d 61 3d 4f 4e 20 2a 2f 0a 20 20  _schema=ON */.  
5e70: 69 6e 74 20 73 68 6f 77 48 65 61 64 65 72 3b 20  int showHeader; 
5e80: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
5e90: 6f 20 73 68 6f 77 20 63 6f 6c 75 6d 6e 20 6e 61  o show column na
5ea0: 6d 65 73 20 69 6e 20 4c 69 73 74 20 6f 72 20 43  mes in List or C
5eb0: 6f 6c 75 6d 6e 20 6d 6f 64 65 20 2a 2f 0a 20 20  olumn mode */.  
5ec0: 69 6e 74 20 6e 43 68 65 63 6b 3b 20 20 20 20 20  int nCheck;     
5ed0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
5ee0: 20 6f 66 20 22 2e 63 68 65 63 6b 22 20 63 6f 6d   of ".check" com
5ef0: 6d 61 6e 64 73 20 72 75 6e 20 2a 2f 0a 20 20 75  mands run */.  u
5f00: 6e 73 69 67 6e 65 64 20 73 68 65 6c 6c 46 6c 67  nsigned shellFlg
5f10: 73 3b 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73  s;    /* Various
5f20: 20 66 6c 61 67 73 20 2a 2f 0a 20 20 63 68 61 72   flags */.  char
5f30: 20 2a 7a 44 65 73 74 54 61 62 6c 65 3b 20 20 20   *zDestTable;   
5f40: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 65     /* Name of de
5f50: 73 74 69 6e 61 74 69 6f 6e 20 74 61 62 6c 65 20  stination table 
5f60: 77 68 65 6e 20 4d 4f 44 45 5f 49 6e 73 65 72 74  when MODE_Insert
5f70: 20 2a 2f 0a 20 20 63 68 61 72 20 7a 54 65 73 74   */.  char zTest
5f80: 63 61 73 65 5b 33 30 5d 3b 20 20 20 20 2f 2a 20  case[30];    /* 
5f90: 4e 61 6d 65 20 6f 66 20 63 75 72 72 65 6e 74 20  Name of current 
5fa0: 74 65 73 74 20 63 61 73 65 20 2a 2f 0a 20 20 63  test case */.  c
5fb0: 68 61 72 20 63 6f 6c 53 65 70 61 72 61 74 6f 72  har colSeparator
5fc0: 5b 32 30 5d 3b 20 2f 2a 20 43 6f 6c 75 6d 6e 20  [20]; /* Column 
5fd0: 73 65 70 61 72 61 74 6f 72 20 63 68 61 72 61 63  separator charac
5fe0: 74 65 72 20 66 6f 72 20 73 65 76 65 72 61 6c 20  ter for several 
5ff0: 6d 6f 64 65 73 20 2a 2f 0a 20 20 63 68 61 72 20  modes */.  char 
6000: 72 6f 77 53 65 70 61 72 61 74 6f 72 5b 32 30 5d  rowSeparator[20]
6010: 3b 20 2f 2a 20 52 6f 77 20 73 65 70 61 72 61 74  ; /* Row separat
6020: 6f 72 20 63 68 61 72 61 63 74 65 72 20 66 6f 72  or character for
6030: 20 4d 4f 44 45 5f 41 73 63 69 69 20 2a 2f 0a 20   MODE_Ascii */. 
6040: 20 69 6e 74 20 63 6f 6c 57 69 64 74 68 5b 31 30   int colWidth[10
6050: 30 5d 3b 20 20 20 20 20 2f 2a 20 52 65 71 75 65  0];     /* Reque
6060: 73 74 65 64 20 77 69 64 74 68 20 6f 66 20 65 61  sted width of ea
6070: 63 68 20 63 6f 6c 75 6d 6e 20 77 68 65 6e 20 69  ch column when i
6080: 6e 20 63 6f 6c 75 6d 6e 20 6d 6f 64 65 2a 2f 0a  n column mode*/.
6090: 20 20 69 6e 74 20 61 63 74 75 61 6c 57 69 64 74    int actualWidt
60a0: 68 5b 31 30 30 5d 3b 20 20 2f 2a 20 41 63 74 75  h[100];  /* Actu
60b0: 61 6c 20 77 69 64 74 68 20 6f 66 20 65 61 63 68  al width of each
60c0: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
60d0: 72 20 6e 75 6c 6c 56 61 6c 75 65 5b 32 30 5d 3b  r nullValue[20];
60e0: 20 20 20 20 2f 2a 20 54 68 65 20 74 65 78 74 20      /* The text 
60f0: 74 6f 20 70 72 69 6e 74 20 77 68 65 6e 20 61 20  to print when a 
6100: 4e 55 4c 4c 20 63 6f 6d 65 73 20 62 61 63 6b 20  NULL comes back 
6110: 66 72 6f 6d 0a 20 20 20 20 20 20 20 20 20 20 20  from.           
6120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
6130: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f   the database */
6140: 0a 20 20 63 68 61 72 20 6f 75 74 66 69 6c 65 5b  .  char outfile[
6150: 46 49 4c 45 4e 41 4d 45 5f 4d 41 58 5d 3b 20 2f  FILENAME_MAX]; /
6160: 2a 20 46 69 6c 65 6e 61 6d 65 20 66 6f 72 20 2a  * Filename for *
6170: 6f 75 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  out */.  const c
6180: 68 61 72 20 2a 7a 44 62 46 69 6c 65 6e 61 6d 65  har *zDbFilename
6190: 3b 20 20 20 20 2f 2a 20 6e 61 6d 65 20 6f 66 20  ;    /* name of 
61a0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
61b0: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 46 72  e */.  char *zFr
61c0: 65 65 4f 6e 43 6c 6f 73 65 3b 20 20 20 20 20 20  eeOnClose;      
61d0: 20 20 20 2f 2a 20 46 69 6c 65 6e 61 6d 65 20 74     /* Filename t
61e0: 6f 20 66 72 65 65 20 77 68 65 6e 20 63 6c 6f 73  o free when clos
61f0: 69 6e 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ing */.  const c
6200: 68 61 72 20 2a 7a 56 66 73 3b 20 20 20 20 20 20  har *zVfs;      
6210: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
6220: 56 46 53 20 74 6f 20 75 73 65 20 2a 2f 0a 20 20  VFS to use */.  
6230: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
6240: 74 6d 74 3b 20 20 20 2f 2a 20 43 75 72 72 65 6e  tmt;   /* Curren
6250: 74 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 61  t statement if a
6260: 6e 79 2e 20 2a 2f 0a 20 20 46 49 4c 45 20 2a 70  ny. */.  FILE *p
6270: 4c 6f 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Log;            
6280: 2f 2a 20 57 72 69 74 65 20 6c 6f 67 20 6f 75 74  /* Write log out
6290: 70 75 74 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e  put here */.  in
62a0: 74 20 2a 61 69 49 6e 64 65 6e 74 3b 20 20 20 20  t *aiIndent;    
62b0: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
62c0: 20 69 6e 64 65 6e 74 73 20 75 73 65 64 20 69 6e   indents used in
62d0: 20 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20 2a 2f   MODE_Explain */
62e0: 0a 20 20 69 6e 74 20 6e 49 6e 64 65 6e 74 3b 20  .  int nIndent; 
62f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
6300: 65 20 6f 66 20 61 72 72 61 79 20 61 69 49 6e 64  e of array aiInd
6310: 65 6e 74 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69  ent[] */.  int i
6320: 49 6e 64 65 6e 74 3b 20 20 20 20 20 20 20 20 20  Indent;         
6330: 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 75    /* Index of cu
6340: 72 72 65 6e 74 20 6f 70 20 69 6e 20 61 69 49 6e  rrent op in aiIn
6350: 64 65 6e 74 5b 5d 20 2a 2f 0a 23 69 66 20 64 65  dent[] */.#if de
6360: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
6370: 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 20 20 69  BLE_SESSION).  i
6380: 6e 74 20 6e 53 65 73 73 69 6f 6e 3b 20 20 20 20  nt nSession;    
6390: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
63a0: 65 72 20 6f 66 20 61 63 74 69 76 65 20 73 65 73  er of active ses
63b0: 73 69 6f 6e 73 20 2a 2f 0a 20 20 4f 70 65 6e 53  sions */.  OpenS
63c0: 65 73 73 69 6f 6e 20 61 53 65 73 73 69 6f 6e 5b  ession aSession[
63d0: 34 5d 3b 20 20 2f 2a 20 41 72 72 61 79 20 6f 66  4];  /* Array of
63e0: 20 73 65 73 73 69 6f 6e 73 2e 20 20 5b 30 5d 20   sessions.  [0] 
63f0: 69 73 20 69 6e 20 66 6f 63 75 73 2e 20 2a 2f 0a  is in focus. */.
6400: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
6410: 20 54 68 65 73 65 20 61 72 65 20 74 68 65 20 61   These are the a
6420: 6c 6c 6f 77 65 64 20 73 68 65 6c 6c 46 6c 67 73  llowed shellFlgs
6430: 20 76 61 6c 75 65 73 0a 2a 2f 0a 23 64 65 66 69   values.*/.#defi
6440: 6e 65 20 53 48 46 4c 47 5f 50 61 67 65 63 61 63  ne SHFLG_Pagecac
6450: 68 65 20 20 20 20 20 20 30 78 30 30 30 30 30 30  he      0x000000
6460: 30 31 20 2f 2a 20 54 68 65 20 2d 2d 70 61 67 65  01 /* The --page
6470: 63 61 63 68 65 20 6f 70 74 69 6f 6e 20 69 73 20  cache option is 
6480: 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
6490: 53 48 46 4c 47 5f 4c 6f 6f 6b 61 73 69 64 65 20  SHFLG_Lookaside 
64a0: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 32 20       0x00000002 
64b0: 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d  /* Lookaside mem
64c0: 6f 72 79 20 69 73 20 75 73 65 64 20 2a 2f 0a 23  ory is used */.#
64d0: 64 65 66 69 6e 65 20 53 48 46 4c 47 5f 42 61 63  define SHFLG_Bac
64e0: 6b 73 6c 61 73 68 20 20 20 20 20 20 30 78 30 30  kslash      0x00
64f0: 30 30 30 30 30 34 20 2f 2a 20 54 68 65 20 2d 2d  000004 /* The --
6500: 62 61 63 6b 73 6c 61 73 68 20 6f 70 74 69 6f 6e  backslash option
6510: 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66   is used */.#def
6520: 69 6e 65 20 53 48 46 4c 47 5f 50 72 65 73 65 72  ine SHFLG_Preser
6530: 76 65 52 6f 77 69 64 20 20 30 78 30 30 30 30 30  veRowid  0x00000
6540: 30 30 38 20 2f 2a 20 2e 64 75 6d 70 20 70 72 65  008 /* .dump pre
6550: 73 65 72 76 65 73 20 72 6f 77 69 64 20 76 61 6c  serves rowid val
6560: 75 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ues */.#define S
6570: 48 46 4c 47 5f 4e 65 77 6c 69 6e 65 73 20 20 20  HFLG_Newlines   
6580: 20 20 20 20 30 78 30 30 30 30 30 30 31 30 20 2f      0x00000010 /
6590: 2a 20 2e 64 75 6d 70 20 2d 2d 6e 65 77 6c 69 6e  * .dump --newlin
65a0: 65 20 66 6c 61 67 20 2a 2f 0a 23 64 65 66 69 6e  e flag */.#defin
65b0: 65 20 53 48 46 4c 47 5f 43 6f 75 6e 74 43 68 61  e SHFLG_CountCha
65c0: 6e 67 65 73 20 20 20 30 78 30 30 30 30 30 30 32  nges   0x0000002
65d0: 30 20 2f 2a 20 2e 63 68 61 6e 67 65 73 20 73 65  0 /* .changes se
65e0: 74 74 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  tting */.#define
65f0: 20 53 48 46 4c 47 5f 45 63 68 6f 20 20 20 20 20   SHFLG_Echo     
6600: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 34 30        0x00000040
6610: 20 2f 2a 20 2e 65 63 68 6f 20 6f 72 20 2d 2d 65   /* .echo or --e
6620: 63 68 6f 20 73 65 74 74 69 6e 67 20 2a 2f 0a 0a  cho setting */..
6630: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72  /*.** Macros for
6640: 20 74 65 73 74 69 6e 67 20 61 6e 64 20 73 65 74   testing and set
6650: 74 69 6e 67 20 73 68 65 6c 6c 46 6c 67 73 0a 2a  ting shellFlgs.*
6660: 2f 0a 23 64 65 66 69 6e 65 20 53 68 65 6c 6c 48  /.#define ShellH
6670: 61 73 46 6c 61 67 28 50 2c 58 29 20 20 20 20 28  asFlag(P,X)    (
6680: 28 28 50 29 2d 3e 73 68 65 6c 6c 46 6c 67 73 20  ((P)->shellFlgs 
6690: 26 20 28 58 29 29 21 3d 30 29 0a 23 64 65 66 69  & (X))!=0).#defi
66a0: 6e 65 20 53 68 65 6c 6c 53 65 74 46 6c 61 67 28  ne ShellSetFlag(
66b0: 50 2c 58 29 20 20 20 20 28 28 50 29 2d 3e 73 68  P,X)    ((P)->sh
66c0: 65 6c 6c 46 6c 67 73 7c 3d 28 58 29 29 0a 23 64  ellFlgs|=(X)).#d
66d0: 65 66 69 6e 65 20 53 68 65 6c 6c 43 6c 65 61 72  efine ShellClear
66e0: 46 6c 61 67 28 50 2c 58 29 20 20 28 28 50 29 2d  Flag(P,X)  ((P)-
66f0: 3e 73 68 65 6c 6c 46 6c 67 73 26 3d 28 7e 28 58  >shellFlgs&=(~(X
6700: 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  )))../*.** These
6710: 20 61 72 65 20 74 68 65 20 61 6c 6c 6f 77 65 64   are the allowed
6720: 20 6d 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69   modes..*/.#defi
6730: 6e 65 20 4d 4f 44 45 5f 4c 69 6e 65 20 20 20 20  ne MODE_Line    
6740: 20 30 20 20 2f 2a 20 4f 6e 65 20 63 6f 6c 75 6d   0  /* One colum
6750: 6e 20 70 65 72 20 6c 69 6e 65 2e 20 20 42 6c 61  n per line.  Bla
6760: 6e 6b 20 6c 69 6e 65 20 62 65 74 77 65 65 6e 20  nk line between 
6770: 72 65 63 6f 72 64 73 20 2a 2f 0a 23 64 65 66 69  records */.#defi
6780: 6e 65 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 20 20  ne MODE_Column  
6790: 20 31 20 20 2f 2a 20 4f 6e 65 20 72 65 63 6f 72   1  /* One recor
67a0: 64 20 70 65 72 20 6c 69 6e 65 20 69 6e 20 6e 65  d per line in ne
67b0: 61 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64  at columns */.#d
67c0: 65 66 69 6e 65 20 4d 4f 44 45 5f 4c 69 73 74 20  efine MODE_List 
67d0: 20 20 20 20 32 20 20 2f 2a 20 4f 6e 65 20 72 65      2  /* One re
67e0: 63 6f 72 64 20 70 65 72 20 6c 69 6e 65 20 77 69  cord per line wi
67f0: 74 68 20 61 20 73 65 70 61 72 61 74 6f 72 20 2a  th a separator *
6800: 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 53  /.#define MODE_S
6810: 65 6d 69 20 20 20 20 20 33 20 20 2f 2a 20 53 61  emi     3  /* Sa
6820: 6d 65 20 61 73 20 4d 4f 44 45 5f 4c 69 73 74 20  me as MODE_List 
6830: 62 75 74 20 61 70 70 65 6e 64 20 22 3b 22 20 74  but append ";" t
6840: 6f 20 65 61 63 68 20 6c 69 6e 65 20 2a 2f 0a 23  o each line */.#
6850: 64 65 66 69 6e 65 20 4d 4f 44 45 5f 48 74 6d 6c  define MODE_Html
6860: 20 20 20 20 20 34 20 20 2f 2a 20 47 65 6e 65 72       4  /* Gener
6870: 61 74 65 20 61 6e 20 58 48 54 4d 4c 20 74 61 62  ate an XHTML tab
6880: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f  le */.#define MO
6890: 44 45 5f 49 6e 73 65 72 74 20 20 20 35 20 20 2f  DE_Insert   5  /
68a0: 2a 20 47 65 6e 65 72 61 74 65 20 53 51 4c 20 22  * Generate SQL "
68b0: 69 6e 73 65 72 74 22 20 73 74 61 74 65 6d 65 6e  insert" statemen
68c0: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f  ts */.#define MO
68d0: 44 45 5f 51 75 6f 74 65 20 20 20 20 36 20 20 2f  DE_Quote    6  /
68e0: 2a 20 51 75 6f 74 65 20 76 61 6c 75 65 73 20 61  * Quote values a
68f0: 73 20 66 6f 72 20 53 51 4c 20 2a 2f 0a 23 64 65  s for SQL */.#de
6900: 66 69 6e 65 20 4d 4f 44 45 5f 54 63 6c 20 20 20  fine MODE_Tcl   
6910: 20 20 20 37 20 20 2f 2a 20 47 65 6e 65 72 61 74     7  /* Generat
6920: 65 20 41 4e 53 49 2d 43 20 6f 72 20 54 43 4c 20  e ANSI-C or TCL 
6930: 71 75 6f 74 65 64 20 65 6c 65 6d 65 6e 74 73 20  quoted elements 
6940: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f  */.#define MODE_
6950: 43 73 76 20 20 20 20 20 20 38 20 20 2f 2a 20 51  Csv      8  /* Q
6960: 75 6f 74 65 20 73 74 72 69 6e 67 73 2c 20 6e 75  uote strings, nu
6970: 6d 62 65 72 73 20 61 72 65 20 70 6c 61 69 6e 20  mbers are plain 
6980: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f  */.#define MODE_
6990: 45 78 70 6c 61 69 6e 20 20 39 20 20 2f 2a 20 4c  Explain  9  /* L
69a0: 69 6b 65 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 2c  ike MODE_Column,
69b0: 20 62 75 74 20 64 6f 20 6e 6f 74 20 74 72 75 6e   but do not trun
69c0: 63 61 74 65 20 64 61 74 61 20 2a 2f 0a 23 64 65  cate data */.#de
69d0: 66 69 6e 65 20 4d 4f 44 45 5f 41 73 63 69 69 20  fine MODE_Ascii 
69e0: 20 20 31 30 20 20 2f 2a 20 55 73 65 20 41 53 43    10  /* Use ASC
69f0: 49 49 20 75 6e 69 74 20 61 6e 64 20 72 65 63 6f  II unit and reco
6a00: 72 64 20 73 65 70 61 72 61 74 6f 72 73 20 28 30  rd separators (0
6a10: 78 31 46 2f 30 78 31 45 29 20 2a 2f 0a 23 64 65  x1F/0x1E) */.#de
6a20: 66 69 6e 65 20 4d 4f 44 45 5f 50 72 65 74 74 79  fine MODE_Pretty
6a30: 20 20 31 31 20 20 2f 2a 20 50 72 65 74 74 79 2d    11  /* Pretty-
6a40: 70 72 69 6e 74 20 73 63 68 65 6d 61 73 20 2a 2f  print schemas */
6a50: 0a 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63  ..static const c
6a60: 68 61 72 20 2a 6d 6f 64 65 44 65 73 63 72 5b 5d  har *modeDescr[]
6a70: 20 3d 20 7b 0a 20 20 22 6c 69 6e 65 22 2c 0a 20   = {.  "line",. 
6a80: 20 22 63 6f 6c 75 6d 6e 22 2c 0a 20 20 22 6c 69   "column",.  "li
6a90: 73 74 22 2c 0a 20 20 22 73 65 6d 69 22 2c 0a 20  st",.  "semi",. 
6aa0: 20 22 68 74 6d 6c 22 2c 0a 20 20 22 69 6e 73 65   "html",.  "inse
6ab0: 72 74 22 2c 0a 20 20 22 71 75 6f 74 65 22 2c 0a  rt",.  "quote",.
6ac0: 20 20 22 74 63 6c 22 2c 0a 20 20 22 63 73 76 22    "tcl",.  "csv"
6ad0: 2c 0a 20 20 22 65 78 70 6c 61 69 6e 22 2c 0a 20  ,.  "explain",. 
6ae0: 20 22 61 73 63 69 69 22 2c 0a 20 20 22 70 72 65   "ascii",.  "pre
6af0: 74 74 79 70 72 69 6e 74 22 2c 0a 7d 3b 0a 0a 2f  ttyprint",.};../
6b00: 2a 0a 2a 2a 20 54 68 65 73 65 20 61 72 65 20 74  *.** These are t
6b10: 68 65 20 63 6f 6c 75 6d 6e 2f 72 6f 77 2f 6c 69  he column/row/li
6b20: 6e 65 20 73 65 70 61 72 61 74 6f 72 73 20 75 73  ne separators us
6b30: 65 64 20 62 79 20 74 68 65 20 76 61 72 69 6f 75  ed by the variou
6b40: 73 0a 2a 2a 20 69 6d 70 6f 72 74 2f 65 78 70 6f  s.** import/expo
6b50: 72 74 20 6d 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65  rt modes..*/.#de
6b60: 66 69 6e 65 20 53 45 50 5f 43 6f 6c 75 6d 6e 20  fine SEP_Column 
6b70: 20 20 20 22 7c 22 0a 23 64 65 66 69 6e 65 20 53     "|".#define S
6b80: 45 50 5f 52 6f 77 20 20 20 20 20 20 20 22 5c 6e  EP_Row       "\n
6b90: 22 0a 23 64 65 66 69 6e 65 20 53 45 50 5f 54 61  ".#define SEP_Ta
6ba0: 62 20 20 20 20 20 20 20 22 5c 74 22 0a 23 64 65  b       "\t".#de
6bb0: 66 69 6e 65 20 53 45 50 5f 53 70 61 63 65 20 20  fine SEP_Space  
6bc0: 20 20 20 22 20 22 0a 23 64 65 66 69 6e 65 20 53     " ".#define S
6bd0: 45 50 5f 43 6f 6d 6d 61 20 20 20 20 20 22 2c 22  EP_Comma     ","
6be0: 0a 23 64 65 66 69 6e 65 20 53 45 50 5f 43 72 4c  .#define SEP_CrL
6bf0: 66 20 20 20 20 20 20 22 5c 72 5c 6e 22 0a 23 64  f      "\r\n".#d
6c00: 65 66 69 6e 65 20 53 45 50 5f 55 6e 69 74 20 20  efine SEP_Unit  
6c10: 20 20 20 20 22 5c 78 31 46 22 0a 23 64 65 66 69      "\x1F".#defi
6c20: 6e 65 20 53 45 50 5f 52 65 63 6f 72 64 20 20 20  ne SEP_Record   
6c30: 20 22 5c 78 31 45 22 0a 0a 2f 2a 0a 2a 2a 20 4e   "\x1E"../*.** N
6c40: 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
6c50: 73 20 69 6e 20 61 6e 20 61 72 72 61 79 0a 2a 2f  s in an array.*/
6c60: 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69  .#define ArraySi
6c70: 7a 65 28 58 29 20 20 28 69 6e 74 29 28 73 69 7a  ze(X)  (int)(siz
6c80: 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b  eof(X)/sizeof(X[
6c90: 30 5d 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 61  0]))../*.** A ca
6ca0: 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65 20 73  llback for the s
6cb0: 71 6c 69 74 65 33 5f 6c 6f 67 28 29 20 69 6e 74  qlite3_log() int
6cc0: 65 72 66 61 63 65 2e 0a 2a 2f 0a 73 74 61 74 69  erface..*/.stati
6cd0: 63 20 76 6f 69 64 20 73 68 65 6c 6c 4c 6f 67 28  c void shellLog(
6ce0: 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20  void *pArg, int 
6cf0: 69 45 72 72 43 6f 64 65 2c 20 63 6f 6e 73 74 20  iErrCode, const 
6d00: 63 68 61 72 20 2a 7a 4d 73 67 29 7b 0a 20 20 53  char *zMsg){.  S
6d10: 68 65 6c 6c 53 74 61 74 65 20 2a 70 20 3d 20 28  hellState *p = (
6d20: 53 68 65 6c 6c 53 74 61 74 65 2a 29 70 41 72 67  ShellState*)pArg
6d30: 3b 0a 20 20 69 66 28 20 70 2d 3e 70 4c 6f 67 3d  ;.  if( p->pLog=
6d40: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 75  =0 ) return;.  u
6d50: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 70 4c  tf8_printf(p->pL
6d60: 6f 67 2c 20 22 28 25 64 29 20 25 73 5c 6e 22 2c  og, "(%d) %s\n",
6d70: 20 69 45 72 72 43 6f 64 65 2c 20 7a 4d 73 67 29   iErrCode, zMsg)
6d80: 3b 0a 20 20 66 66 6c 75 73 68 28 70 2d 3e 70 4c  ;.  fflush(p->pL
6d90: 6f 67 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75  og);.}../*.** Ou
6da0: 74 70 75 74 20 74 68 65 20 67 69 76 65 6e 20 73  tput the given s
6db0: 74 72 69 6e 67 20 61 73 20 61 20 68 65 78 2d 65  tring as a hex-e
6dc0: 6e 63 6f 64 65 64 20 62 6c 6f 62 20 28 65 67 2e  ncoded blob (eg.
6dd0: 20 58 27 31 32 33 34 27 20 29 0a 2a 2f 0a 73 74   X'1234' ).*/.st
6de0: 61 74 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74  atic void output
6df0: 5f 68 65 78 5f 62 6c 6f 62 28 46 49 4c 45 20 2a  _hex_blob(FILE *
6e00: 6f 75 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  out, const void 
6e10: 2a 70 42 6c 6f 62 2c 20 69 6e 74 20 6e 42 6c 6f  *pBlob, int nBlo
6e20: 62 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63  b){.  int i;.  c
6e30: 68 61 72 20 2a 7a 42 6c 6f 62 20 3d 20 28 63 68  har *zBlob = (ch
6e40: 61 72 20 2a 29 70 42 6c 6f 62 3b 0a 20 20 72 61  ar *)pBlob;.  ra
6e50: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 58 27  w_printf(out,"X'
6e60: 22 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  ");.  for(i=0; i
6e70: 3c 6e 42 6c 6f 62 3b 20 69 2b 2b 29 7b 20 72 61  <nBlob; i++){ ra
6e80: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 25 30  w_printf(out,"%0
6e90: 32 78 22 2c 7a 42 6c 6f 62 5b 69 5d 26 30 78 66  2x",zBlob[i]&0xf
6ea0: 66 29 3b 20 7d 0a 20 20 72 61 77 5f 70 72 69 6e  f); }.  raw_prin
6eb0: 74 66 28 6f 75 74 2c 22 27 22 29 3b 0a 7d 0a 0a  tf(out,"'");.}..
6ec0: 2f 2a 0a 2a 2a 20 46 69 6e 64 20 61 20 73 74 72  /*.** Find a str
6ed0: 69 6e 67 20 74 68 61 74 20 69 73 20 6e 6f 74 20  ing that is not 
6ee0: 66 6f 75 6e 64 20 61 6e 79 77 68 65 72 65 20 69  found anywhere i
6ef0: 6e 20 7a 5b 5d 2e 20 20 52 65 74 75 72 6e 20 61  n z[].  Return a
6f00: 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 74 6f 20 74   pointer.** to t
6f10: 68 61 74 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a  hat string..**.*
6f20: 2a 20 54 72 79 20 74 6f 20 75 73 65 20 7a 41 20  * Try to use zA 
6f30: 61 6e 64 20 7a 42 20 66 69 72 73 74 2e 20 20 49  and zB first.  I
6f40: 66 20 62 6f 74 68 20 6f 66 20 74 68 6f 73 65 20  f both of those 
6f50: 61 72 65 20 61 6c 72 65 61 64 79 20 66 6f 75 6e  are already foun
6f60: 64 20 69 6e 20 7a 5b 5d 0a 2a 2a 20 74 68 65 6e  d in z[].** then
6f70: 20 6d 61 6b 65 20 75 70 20 73 6f 6d 65 20 73 74   make up some st
6f80: 72 69 6e 67 20 61 6e 64 20 73 74 6f 72 65 20 69  ring and store i
6f90: 74 20 69 6e 20 74 68 65 20 62 75 66 66 65 72 20  t in the buffer 
6fa0: 7a 42 75 66 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  zBuf..*/.static 
6fb0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 75 6e 75 73  const char *unus
6fc0: 65 64 5f 73 74 72 69 6e 67 28 0a 20 20 63 6f 6e  ed_string(.  con
6fd0: 73 74 20 63 68 61 72 20 2a 7a 2c 20 20 20 20 20  st char *z,     
6fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
6ff0: 2a 20 52 65 73 75 6c 74 20 6d 75 73 74 20 6e 6f  * Result must no
7000: 74 20 61 70 70 65 61 72 20 61 6e 79 77 68 65 72  t appear anywher
7010: 65 20 69 6e 20 7a 20 2a 2f 0a 20 20 63 6f 6e 73  e in z */.  cons
7020: 74 20 63 68 61 72 20 2a 7a 41 2c 20 63 6f 6e 73  t char *zA, cons
7030: 74 20 63 68 61 72 20 2a 7a 42 2c 20 20 20 2f 2a  t char *zB,   /*
7040: 20 54 72 79 20 74 68 65 73 65 20 66 69 72 73 74   Try these first
7050: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 75 66   */.  char *zBuf
7060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7070: 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
7080: 20 74 6f 20 73 74 6f 72 65 20 61 20 67 65 6e 65   to store a gene
7090: 72 61 74 65 64 20 73 74 72 69 6e 67 20 2a 2f 0a  rated string */.
70a0: 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 20  ){.  unsigned i 
70b0: 3d 20 30 3b 0a 20 20 69 66 28 20 73 74 72 73 74  = 0;.  if( strst
70c0: 72 28 7a 2c 20 7a 41 29 3d 3d 30 20 29 20 72 65  r(z, zA)==0 ) re
70d0: 74 75 72 6e 20 7a 41 3b 0a 20 20 69 66 28 20 73  turn zA;.  if( s
70e0: 74 72 73 74 72 28 7a 2c 20 7a 42 29 3d 3d 30 20  trstr(z, zB)==0 
70f0: 29 20 72 65 74 75 72 6e 20 7a 42 3b 0a 20 20 64  ) return zB;.  d
7100: 6f 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  o{.    sqlite3_s
7110: 6e 70 72 69 6e 74 66 28 32 30 2c 7a 42 75 66 2c  nprintf(20,zBuf,
7120: 22 28 25 73 25 75 29 22 2c 20 7a 41 2c 20 69 2b  "(%s%u)", zA, i+
7130: 2b 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20 73 74  +);.  }while( st
7140: 72 73 74 72 28 7a 2c 7a 42 75 66 29 21 3d 30 20  rstr(z,zBuf)!=0 
7150: 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 42 75 66  );.  return zBuf
7160: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75  ;.}../*.** Outpu
7170: 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69  t the given stri
7180: 6e 67 20 61 73 20 61 20 71 75 6f 74 65 64 20 73  ng as a quoted s
7190: 74 72 69 6e 67 20 75 73 69 6e 67 20 53 51 4c 20  tring using SQL 
71a0: 71 75 6f 74 69 6e 67 20 63 6f 6e 76 65 6e 74 69  quoting conventi
71b0: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ons..**.** See a
71c0: 6c 73 6f 3a 20 6f 75 74 70 75 74 5f 71 75 6f 74  lso: output_quot
71d0: 65 64 5f 65 73 63 61 70 65 64 5f 73 74 72 69 6e  ed_escaped_strin
71e0: 67 28 29 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  g().*/.static vo
71f0: 69 64 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64  id output_quoted
7200: 5f 73 74 72 69 6e 67 28 46 49 4c 45 20 2a 6f 75  _string(FILE *ou
7210: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  t, const char *z
7220: 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68  ){.  int i;.  ch
7230: 61 72 20 63 3b 0a 20 20 73 65 74 42 69 6e 61 72  ar c;.  setBinar
7240: 79 4d 6f 64 65 28 6f 75 74 2c 20 31 29 3b 0a 20  yMode(out, 1);. 
7250: 20 66 6f 72 28 69 3d 30 3b 20 28 63 20 3d 20 7a   for(i=0; (c = z
7260: 5b 69 5d 29 21 3d 30 20 26 26 20 63 21 3d 27 5c  [i])!=0 && c!='\
7270: 27 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 69 66 28  ''; i++){}.  if(
7280: 20 63 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74 66   c==0 ){.    utf
7290: 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 27 25  8_printf(out,"'%
72a0: 73 27 22 2c 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b  s'",z);.  }else{
72b0: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
72c0: 6f 75 74 2c 20 22 27 22 29 3b 0a 20 20 20 20 77  out, "'");.    w
72d0: 68 69 6c 65 28 20 2a 7a 20 29 7b 0a 20 20 20 20  hile( *z ){.    
72e0: 20 20 66 6f 72 28 69 3d 30 3b 20 28 63 20 3d 20    for(i=0; (c = 
72f0: 7a 5b 69 5d 29 21 3d 30 20 26 26 20 63 21 3d 27  z[i])!=0 && c!='
7300: 5c 27 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20  \''; i++){}.    
7310: 20 20 69 66 28 20 63 3d 3d 27 5c 27 27 20 29 20    if( c=='\'' ) 
7320: 69 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 69  i++;.      if( i
7330: 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38   ){.        utf8
7340: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 2e  _printf(out, "%.
7350: 2a 73 22 2c 20 69 2c 20 7a 29 3b 0a 20 20 20 20  *s", i, z);.    
7360: 20 20 20 20 7a 20 2b 3d 20 69 3b 0a 20 20 20 20      z += i;.    
7370: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63 3d    }.      if( c=
7380: 3d 27 5c 27 27 20 29 7b 0a 20 20 20 20 20 20 20  ='\'' ){.       
7390: 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c   raw_printf(out,
73a0: 20 22 27 22 29 3b 0a 20 20 20 20 20 20 20 20 63   "'");.        c
73b0: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 7d  ontinue;.      }
73c0: 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20  .      if( c==0 
73d0: 29 7b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  ){.        break
73e0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
73f0: 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  z++;.    }.    r
7400: 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
7410: 27 22 29 3b 0a 20 20 7d 0a 20 20 73 65 74 54 65  '");.  }.  setTe
7420: 78 74 4d 6f 64 65 28 6f 75 74 2c 20 31 29 3b 0a  xtMode(out, 1);.
7430: 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20  }../*.** Output 
7440: 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67  the given string
7450: 20 61 73 20 61 20 71 75 6f 74 65 64 20 73 74 72   as a quoted str
7460: 69 6e 67 20 75 73 69 6e 67 20 53 51 4c 20 71 75  ing using SQL qu
7470: 6f 74 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e  oting convention
7480: 73 2e 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c  s..** Additional
7490: 6c 6c 79 20 2c 20 65 73 63 61 70 65 20 74 68 65  lly , escape the
74a0: 20 22 5c 6e 22 20 61 6e 64 20 22 5c 72 22 20 63   "\n" and "\r" c
74b0: 68 61 72 61 63 74 65 72 73 20 73 6f 20 74 68 61  haracters so tha
74c0: 74 20 74 68 65 79 20 64 6f 20 6e 6f 74 0a 2a 2a  t they do not.**
74d0: 20 67 65 74 20 63 6f 72 72 75 70 74 65 64 20 62   get corrupted b
74e0: 79 20 65 6e 64 2d 6f 66 2d 6c 69 6e 65 20 74 72  y end-of-line tr
74f0: 61 6e 73 6c 61 74 69 6f 6e 20 66 61 63 69 6c 69  anslation facili
7500: 74 69 65 73 20 69 6e 20 73 6f 6d 65 20 6f 70 65  ties in some ope
7510: 72 61 74 69 6e 67 0a 2a 2a 20 73 79 73 74 65 6d  rating.** system
7520: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73  s..**.** This is
7530: 20 6c 69 6b 65 20 6f 75 74 70 75 74 5f 71 75 6f   like output_quo
7540: 74 65 64 5f 73 74 72 69 6e 67 28 29 20 62 75 74  ted_string() but
7550: 20 77 69 74 68 20 74 68 65 20 61 64 64 69 74 69   with the additi
7560: 6f 6e 20 6f 66 20 74 68 65 20 5c 72 5c 6e 0a 2a  on of the \r\n.*
7570: 2a 20 65 73 63 61 70 65 20 6d 65 63 68 61 6e 69  * escape mechani
7580: 73 6d 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  sm..*/.static vo
7590: 69 64 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64  id output_quoted
75a0: 5f 65 73 63 61 70 65 64 5f 73 74 72 69 6e 67 28  _escaped_string(
75b0: 46 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74  FILE *out, const
75c0: 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74   char *z){.  int
75d0: 20 69 3b 0a 20 20 63 68 61 72 20 63 3b 0a 20 20   i;.  char c;.  
75e0: 73 65 74 42 69 6e 61 72 79 4d 6f 64 65 28 6f 75  setBinaryMode(ou
75f0: 74 2c 20 31 29 3b 0a 20 20 66 6f 72 28 69 3d 30  t, 1);.  for(i=0
7600: 3b 20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 20  ; (c = z[i])!=0 
7610: 26 26 20 63 21 3d 27 5c 27 27 20 26 26 20 63 21  && c!='\'' && c!
7620: 3d 27 5c 6e 27 20 26 26 20 63 21 3d 27 5c 72 27  ='\n' && c!='\r'
7630: 3b 20 69 2b 2b 29 7b 7d 0a 20 20 69 66 28 20 63  ; i++){}.  if( c
7640: 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f  ==0 ){.    utf8_
7650: 70 72 69 6e 74 66 28 6f 75 74 2c 22 27 25 73 27  printf(out,"'%s'
7660: 22 2c 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ",z);.  }else{. 
7670: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
7680: 4e 4c 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73  NL = 0;.    cons
7690: 74 20 63 68 61 72 20 2a 7a 43 52 20 3d 20 30 3b  t char *zCR = 0;
76a0: 0a 20 20 20 20 69 6e 74 20 6e 4e 4c 20 3d 20 30  .    int nNL = 0
76b0: 3b 0a 20 20 20 20 69 6e 74 20 6e 43 52 20 3d 20  ;.    int nCR = 
76c0: 30 3b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66  0;.    char zBuf
76d0: 31 5b 32 30 5d 2c 20 7a 42 75 66 32 5b 32 30 5d  1[20], zBuf2[20]
76e0: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a  ;.    for(i=0; z
76f0: 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  [i]; i++){.     
7700: 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 5c 6e 27 20   if( z[i]=='\n' 
7710: 29 20 6e 4e 4c 2b 2b 3b 0a 20 20 20 20 20 20 69  ) nNL++;.      i
7720: 66 28 20 7a 5b 69 5d 3d 3d 27 5c 72 27 20 29 20  f( z[i]=='\r' ) 
7730: 6e 43 52 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  nCR++;.    }.   
7740: 20 69 66 28 20 6e 4e 4c 20 29 7b 0a 20 20 20 20   if( nNL ){.    
7750: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74    raw_printf(out
7760: 2c 20 22 72 65 70 6c 61 63 65 28 22 29 3b 0a 20  , "replace(");. 
7770: 20 20 20 20 20 7a 4e 4c 20 3d 20 75 6e 75 73 65       zNL = unuse
7780: 64 5f 73 74 72 69 6e 67 28 7a 2c 20 22 5c 5c 6e  d_string(z, "\\n
7790: 22 2c 20 22 5c 5c 30 31 32 22 2c 20 7a 42 75 66  ", "\\012", zBuf
77a0: 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  1);.    }.    if
77b0: 28 20 6e 43 52 20 29 7b 0a 20 20 20 20 20 20 72  ( nCR ){.      r
77c0: 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
77d0: 72 65 70 6c 61 63 65 28 22 29 3b 0a 20 20 20 20  replace(");.    
77e0: 20 20 7a 43 52 20 3d 20 75 6e 75 73 65 64 5f 73    zCR = unused_s
77f0: 74 72 69 6e 67 28 7a 2c 20 22 5c 5c 72 22 2c 20  tring(z, "\\r", 
7800: 22 5c 5c 30 31 35 22 2c 20 7a 42 75 66 32 29 3b  "\\015", zBuf2);
7810: 0a 20 20 20 20 7d 0a 20 20 20 20 72 61 77 5f 70  .    }.    raw_p
7820: 72 69 6e 74 66 28 6f 75 74 2c 20 22 27 22 29 3b  rintf(out, "'");
7830: 0a 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 20 29  .    while( *z )
7840: 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  {.      for(i=0;
7850: 20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 20 26   (c = z[i])!=0 &
7860: 26 20 63 21 3d 27 5c 6e 27 20 26 26 20 63 21 3d  & c!='\n' && c!=
7870: 27 5c 72 27 20 26 26 20 63 21 3d 27 5c 27 27 3b  '\r' && c!='\'';
7880: 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 69 66   i++){}.      if
7890: 28 20 63 3d 3d 27 5c 27 27 20 29 20 69 2b 2b 3b  ( c=='\'' ) i++;
78a0: 0a 20 20 20 20 20 20 69 66 28 20 69 20 29 7b 0a  .      if( i ){.
78b0: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
78c0: 6e 74 66 28 6f 75 74 2c 20 22 25 2e 2a 73 22 2c  ntf(out, "%.*s",
78d0: 20 69 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20   i, z);.        
78e0: 7a 20 2b 3d 20 69 3b 0a 20 20 20 20 20 20 7d 0a  z += i;.      }.
78f0: 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 5c 27        if( c=='\'
7900: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  ' ){.        raw
7910: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 27 22  _printf(out, "'"
7920: 29 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 74 69  );.        conti
7930: 6e 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  nue;.      }.   
7940: 20 20 20 69 66 28 20 63 3d 3d 30 20 29 7b 0a 20     if( c==0 ){. 
7950: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
7960: 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 2b 2b 3b      }.      z++;
7970: 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 5c  .      if( c=='\
7980: 6e 27 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  n' ){.        ra
7990: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25  w_printf(out, "%
79a0: 73 22 2c 20 7a 4e 4c 29 3b 0a 20 20 20 20 20 20  s", zNL);.      
79b0: 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20    continue;.    
79c0: 20 20 7d 0a 20 20 20 20 20 20 72 61 77 5f 70 72    }.      raw_pr
79d0: 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20  intf(out, "%s", 
79e0: 7a 43 52 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  zCR);.    }.    
79f0: 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  raw_printf(out, 
7a00: 22 27 22 29 3b 0a 20 20 20 20 69 66 28 20 6e 43  "'");.    if( nC
7a10: 52 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  R ){.      raw_p
7a20: 72 69 6e 74 66 28 6f 75 74 2c 20 22 2c 27 25 73  rintf(out, ",'%s
7a30: 27 2c 63 68 61 72 28 31 33 29 29 22 2c 20 7a 43  ',char(13))", zC
7a40: 52 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  R);.    }.    if
7a50: 28 20 6e 4e 4c 20 29 7b 0a 20 20 20 20 20 20 72  ( nNL ){.      r
7a60: 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
7a70: 2c 27 25 73 27 2c 63 68 61 72 28 31 30 29 29 22  ,'%s',char(10))"
7a80: 2c 20 7a 4e 4c 29 3b 0a 20 20 20 20 7d 0a 20 20  , zNL);.    }.  
7a90: 7d 0a 20 20 73 65 74 54 65 78 74 4d 6f 64 65 28  }.  setTextMode(
7aa0: 6f 75 74 2c 20 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  out, 1);.}../*.*
7ab0: 2a 20 4f 75 74 70 75 74 20 74 68 65 20 67 69 76  * Output the giv
7ac0: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 71  en string as a q
7ad0: 75 6f 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20  uoted according 
7ae0: 74 6f 20 43 20 6f 72 20 54 43 4c 20 71 75 6f 74  to C or TCL quot
7af0: 69 6e 67 20 72 75 6c 65 73 2e 0a 2a 2f 0a 73 74  ing rules..*/.st
7b00: 61 74 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74  atic void output
7b10: 5f 63 5f 73 74 72 69 6e 67 28 46 49 4c 45 20 2a  _c_string(FILE *
7b20: 6f 75 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  out, const char 
7b30: 2a 7a 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20  *z){.  unsigned 
7b40: 69 6e 74 20 63 3b 0a 20 20 66 70 75 74 63 28 27  int c;.  fputc('
7b50: 22 27 2c 20 6f 75 74 29 3b 0a 20 20 77 68 69 6c  "', out);.  whil
7b60: 65 28 20 28 63 20 3d 20 2a 28 7a 2b 2b 29 29 21  e( (c = *(z++))!
7b70: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 63 3d  =0 ){.    if( c=
7b80: 3d 27 5c 5c 27 20 29 7b 0a 20 20 20 20 20 20 66  ='\\' ){.      f
7b90: 70 75 74 63 28 63 2c 20 6f 75 74 29 3b 0a 20 20  putc(c, out);.  
7ba0: 20 20 20 20 66 70 75 74 63 28 63 2c 20 6f 75 74      fputc(c, out
7bb0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
7bc0: 20 63 3d 3d 27 22 27 20 29 7b 0a 20 20 20 20 20   c=='"' ){.     
7bd0: 20 66 70 75 74 63 28 27 5c 5c 27 2c 20 6f 75 74   fputc('\\', out
7be0: 29 3b 0a 20 20 20 20 20 20 66 70 75 74 63 28 27  );.      fputc('
7bf0: 22 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65  "', out);.    }e
7c00: 6c 73 65 20 69 66 28 20 63 3d 3d 27 5c 74 27 20  lse if( c=='\t' 
7c10: 29 7b 0a 20 20 20 20 20 20 66 70 75 74 63 28 27  ){.      fputc('
7c20: 5c 5c 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20  \\', out);.     
7c30: 20 66 70 75 74 63 28 27 74 27 2c 20 6f 75 74 29   fputc('t', out)
7c40: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
7c50: 63 3d 3d 27 5c 6e 27 20 29 7b 0a 20 20 20 20 20  c=='\n' ){.     
7c60: 20 66 70 75 74 63 28 27 5c 5c 27 2c 20 6f 75 74   fputc('\\', out
7c70: 29 3b 0a 20 20 20 20 20 20 66 70 75 74 63 28 27  );.      fputc('
7c80: 6e 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65  n', out);.    }e
7c90: 6c 73 65 20 69 66 28 20 63 3d 3d 27 5c 72 27 20  lse if( c=='\r' 
7ca0: 29 7b 0a 20 20 20 20 20 20 66 70 75 74 63 28 27  ){.      fputc('
7cb0: 5c 5c 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20  \\', out);.     
7cc0: 20 66 70 75 74 63 28 27 72 27 2c 20 6f 75 74 29   fputc('r', out)
7cd0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
7ce0: 21 69 73 70 72 69 6e 74 28 63 26 30 78 66 66 29  !isprint(c&0xff)
7cf0: 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
7d00: 69 6e 74 66 28 6f 75 74 2c 20 22 5c 5c 25 30 33  intf(out, "\\%03
7d10: 6f 22 2c 20 63 26 30 78 66 66 29 3b 0a 20 20 20  o", c&0xff);.   
7d20: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 66 70   }else{.      fp
7d30: 75 74 63 28 63 2c 20 6f 75 74 29 3b 0a 20 20 20  utc(c, out);.   
7d40: 20 7d 0a 20 20 7d 0a 20 20 66 70 75 74 63 28 27   }.  }.  fputc('
7d50: 22 27 2c 20 6f 75 74 29 3b 0a 7d 0a 0a 2f 2a 0a  "', out);.}../*.
7d60: 2a 2a 20 4f 75 74 70 75 74 20 74 68 65 20 67 69  ** Output the gi
7d70: 76 65 6e 20 73 74 72 69 6e 67 20 77 69 74 68 20  ven string with 
7d80: 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
7d90: 61 72 65 20 73 70 65 63 69 61 6c 20 74 6f 0a 2a  are special to.*
7da0: 2a 20 48 54 4d 4c 20 65 73 63 61 70 65 64 2e 0a  * HTML escaped..
7db0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f  */.static void o
7dc0: 75 74 70 75 74 5f 68 74 6d 6c 5f 73 74 72 69 6e  utput_html_strin
7dd0: 67 28 46 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e  g(FILE *out, con
7de0: 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69  st char *z){.  i
7df0: 6e 74 20 69 3b 0a 20 20 69 66 28 20 7a 3d 3d 30  nt i;.  if( z==0
7e00: 20 29 20 7a 20 3d 20 22 22 3b 0a 20 20 77 68 69   ) z = "";.  whi
7e10: 6c 65 28 20 2a 7a 20 29 7b 0a 20 20 20 20 66 6f  le( *z ){.    fo
7e20: 72 28 69 3d 30 3b 20 20 20 7a 5b 69 5d 0a 20 20  r(i=0;   z[i].  
7e30: 20 20 20 20 20 20 20 20 20 20 26 26 20 7a 5b 69            && z[i
7e40: 5d 21 3d 27 3c 27 0a 20 20 20 20 20 20 20 20 20  ]!='<'.         
7e50: 20 20 20 26 26 20 7a 5b 69 5d 21 3d 27 26 27 0a     && z[i]!='&'.
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 7a              && z
7e70: 5b 69 5d 21 3d 27 3e 27 0a 20 20 20 20 20 20 20  [i]!='>'.       
7e80: 20 20 20 20 20 26 26 20 7a 5b 69 5d 21 3d 27 5c       && z[i]!='\
7e90: 22 27 0a 20 20 20 20 20 20 20 20 20 20 20 20 26  "'.            &
7ea0: 26 20 7a 5b 69 5d 21 3d 27 5c 27 27 3b 0a 20 20  & z[i]!='\'';.  
7eb0: 20 20 20 20 20 20 69 2b 2b 29 7b 7d 0a 20 20 20        i++){}.   
7ec0: 20 69 66 28 20 69 3e 30 20 29 7b 0a 20 20 20 20   if( i>0 ){.    
7ed0: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75    utf8_printf(ou
7ee0: 74 2c 22 25 2e 2a 73 22 2c 69 2c 7a 29 3b 0a 20  t,"%.*s",i,z);. 
7ef0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 5b 69     }.    if( z[i
7f00: 5d 3d 3d 27 3c 27 20 29 7b 0a 20 20 20 20 20 20  ]=='<' ){.      
7f10: 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22  raw_printf(out,"
7f20: 26 6c 74 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73  &lt;");.    }els
7f30: 65 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 26 27 20  e if( z[i]=='&' 
7f40: 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
7f50: 6e 74 66 28 6f 75 74 2c 22 26 61 6d 70 3b 22 29  ntf(out,"&amp;")
7f60: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
7f70: 7a 5b 69 5d 3d 3d 27 3e 27 20 29 7b 0a 20 20 20  z[i]=='>' ){.   
7f80: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75     raw_printf(ou
7f90: 74 2c 22 26 67 74 3b 22 29 3b 0a 20 20 20 20 7d  t,"&gt;");.    }
7fa0: 65 6c 73 65 20 69 66 28 20 7a 5b 69 5d 3d 3d 27  else if( z[i]=='
7fb0: 5c 22 27 20 29 7b 0a 20 20 20 20 20 20 72 61 77  \"' ){.      raw
7fc0: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 26 71 75  _printf(out,"&qu
7fd0: 6f 74 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ot;");.    }else
7fe0: 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 5c 27 27 20   if( z[i]=='\'' 
7ff0: 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
8000: 6e 74 66 28 6f 75 74 2c 22 26 23 33 39 3b 22 29  ntf(out,"&#39;")
8010: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
8020: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
8030: 20 20 20 20 7a 20 2b 3d 20 69 20 2b 20 31 3b 0a      z += i + 1;.
8040: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20    }.}../*.** If 
8050: 61 20 66 69 65 6c 64 20 63 6f 6e 74 61 69 6e 73  a field contains
8060: 20 61 6e 79 20 63 68 61 72 61 63 74 65 72 20 69   any character i
8070: 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 31  dentified by a 1
8080: 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   in the followin
8090: 67 0a 2a 2a 20 61 72 72 61 79 2c 20 74 68 65 6e  g.** array, then
80a0: 20 74 68 65 20 73 74 72 69 6e 67 20 6d 75 73 74   the string must
80b0: 20 62 65 20 71 75 6f 74 65 64 20 66 6f 72 20 43   be quoted for C
80c0: 53 56 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f  SV..*/.static co
80d0: 6e 73 74 20 63 68 61 72 20 6e 65 65 64 43 73 76  nst char needCsv
80e0: 51 75 6f 74 65 5b 5d 20 3d 20 7b 0a 20 20 31 2c  Quote[] = {.  1,
80f0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
8100: 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c  1, 1,   1, 1, 1,
8110: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a   1, 1, 1, 1, 1,.
8120: 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    1, 1, 1, 1, 1,
8130: 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31   1, 1, 1,   1, 1
8140: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
8150: 20 31 2c 0a 20 20 31 2c 20 30 2c 20 31 2c 20 30   1,.  1, 0, 1, 0
8160: 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 20 20  , 0, 0, 0, 1,   
8170: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
8180: 2c 20 30 2c 20 30 2c 0a 20 20 30 2c 20 30 2c 20  , 0, 0,.  0, 0, 
8190: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
81a0: 2c 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20  ,   0, 0, 0, 0, 
81b0: 30 2c 20 30 2c 20 30 2c 20 30 2c 0a 20 20 30 2c  0, 0, 0, 0,.  0,
81c0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
81d0: 30 2c 20 30 2c 20 20 20 30 2c 20 30 2c 20 30 2c  0, 0,   0, 0, 0,
81e0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 0a   0, 0, 0, 0, 0,.
81f0: 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c    0, 0, 0, 0, 0,
8200: 20 30 2c 20 30 2c 20 30 2c 20 20 20 30 2c 20 30   0, 0, 0,   0, 0
8210: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
8220: 20 30 2c 0a 20 20 30 2c 20 30 2c 20 30 2c 20 30   0,.  0, 0, 0, 0
8230: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 20 20  , 0, 0, 0, 0,   
8240: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
8250: 2c 20 30 2c 20 30 2c 0a 20 20 30 2c 20 30 2c 20  , 0, 0,.  0, 0, 
8260: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
8270: 2c 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20  ,   0, 0, 0, 0, 
8280: 30 2c 20 30 2c 20 30 2c 20 31 2c 0a 20 20 31 2c  0, 0, 0, 1,.  1,
8290: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
82a0: 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c  1, 1,   1, 1, 1,
82b0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a   1, 1, 1, 1, 1,.
82c0: 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    1, 1, 1, 1, 1,
82d0: 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31   1, 1, 1,   1, 1
82e0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
82f0: 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31   1,.  1, 1, 1, 1
8300: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20  , 1, 1, 1, 1,   
8310: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8320: 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20  , 1, 1,.  1, 1, 
8330: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8340: 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20  ,   1, 1, 1, 1, 
8350: 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20 31 2c  1, 1, 1, 1,.  1,
8360: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
8370: 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c  1, 1,   1, 1, 1,
8380: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a   1, 1, 1, 1, 1,.
8390: 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    1, 1, 1, 1, 1,
83a0: 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31   1, 1, 1,   1, 1
83b0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
83c0: 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31   1,.  1, 1, 1, 1
83d0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20  , 1, 1, 1, 1,   
83e0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
83f0: 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20  , 1, 1,.  1, 1, 
8400: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8410: 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20  ,   1, 1, 1, 1, 
8420: 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 7d 3b 0a 0a  1, 1, 1, 1,.};..
8430: 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 61 20 73  /*.** Output a s
8440: 69 6e 67 6c 65 20 74 65 72 6d 20 6f 66 20 43 53  ingle term of CS
8450: 56 2e 20 20 41 63 74 75 61 6c 6c 79 2c 20 70 2d  V.  Actually, p-
8460: 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 20 69 73  >colSeparator is
8470: 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 74 68 65   used for.** the
8480: 20 73 65 70 61 72 61 74 6f 72 2c 20 77 68 69 63   separator, whic
8490: 68 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74  h may or may not
84a0: 20 62 65 20 61 20 63 6f 6d 6d 61 2e 20 20 70 2d   be a comma.  p-
84b0: 3e 6e 75 6c 6c 56 61 6c 75 65 20 69 73 0a 2a 2a  >nullValue is.**
84c0: 20 74 68 65 20 6e 75 6c 6c 20 76 61 6c 75 65 2e   the null value.
84d0: 20 20 53 74 72 69 6e 67 73 20 61 72 65 20 71 75    Strings are qu
84e0: 6f 74 65 64 20 69 66 20 6e 65 63 65 73 73 61 72  oted if necessar
84f0: 79 2e 20 20 54 68 65 20 73 65 70 61 72 61 74 6f  y.  The separato
8500: 72 0a 2a 2a 20 69 73 20 6f 6e 6c 79 20 69 73 73  r.** is only iss
8510: 75 65 64 20 69 66 20 62 53 65 70 20 69 73 20 74  ued if bSep is t
8520: 72 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  rue..*/.static v
8530: 6f 69 64 20 6f 75 74 70 75 74 5f 63 73 76 28 53  oid output_csv(S
8540: 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f  hellState *p, co
8550: 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
8560: 20 62 53 65 70 29 7b 0a 20 20 46 49 4c 45 20 2a   bSep){.  FILE *
8570: 6f 75 74 20 3d 20 70 2d 3e 6f 75 74 3b 0a 20 20  out = p->out;.  
8580: 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
8590: 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c  utf8_printf(out,
85a0: 22 25 73 22 2c 70 2d 3e 6e 75 6c 6c 56 61 6c 75  "%s",p->nullValu
85b0: 65 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  e);.  }else{.   
85c0: 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20   int i;.    int 
85d0: 6e 53 65 70 20 3d 20 73 74 72 6c 65 6e 33 30 28  nSep = strlen30(
85e0: 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29  p->colSeparator)
85f0: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a  ;.    for(i=0; z
8600: 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  [i]; i++){.     
8610: 20 69 66 28 20 6e 65 65 64 43 73 76 51 75 6f 74   if( needCsvQuot
8620: 65 5b 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  e[((unsigned cha
8630: 72 2a 29 7a 29 5b 69 5d 5d 0a 20 20 20 20 20 20  r*)z)[i]].      
8640: 20 20 20 7c 7c 20 28 7a 5b 69 5d 3d 3d 70 2d 3e     || (z[i]==p->
8650: 63 6f 6c 53 65 70 61 72 61 74 6f 72 5b 30 5d 20  colSeparator[0] 
8660: 26 26 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &&.             
8670: 28 6e 53 65 70 3d 3d 31 20 7c 7c 20 6d 65 6d 63  (nSep==1 || memc
8680: 6d 70 28 7a 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  mp(z, p->colSepa
8690: 72 61 74 6f 72 2c 20 6e 53 65 70 29 3d 3d 30 29  rator, nSep)==0)
86a0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 69 20 3d  ) ){.        i =
86b0: 20 30 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   0;.        brea
86c0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
86d0: 0a 20 20 20 20 69 66 28 20 69 3d 3d 30 20 29 7b  .    if( i==0 ){
86e0: 0a 20 20 20 20 20 20 70 75 74 63 28 27 22 27 2c  .      putc('"',
86f0: 20 6f 75 74 29 3b 0a 20 20 20 20 20 20 66 6f 72   out);.      for
8700: 28 69 3d 30 3b 20 7a 5b 69 5d 3b 20 69 2b 2b 29  (i=0; z[i]; i++)
8710: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b  {.        if( z[
8720: 69 5d 3d 3d 27 22 27 20 29 20 70 75 74 63 28 27  i]=='"' ) putc('
8730: 22 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20 20  "', out);.      
8740: 20 20 70 75 74 63 28 7a 5b 69 5d 2c 20 6f 75 74    putc(z[i], out
8750: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
8760: 20 70 75 74 63 28 27 22 27 2c 20 6f 75 74 29 3b   putc('"', out);
8770: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
8780: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75    utf8_printf(ou
8790: 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20  t, "%s", z);.   
87a0: 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 62 53 65   }.  }.  if( bSe
87b0: 70 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72  p ){.    utf8_pr
87c0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
87d0: 22 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  ", p->colSeparat
87e0: 6f 72 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  or);.  }.}../*.*
87f0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 72  * This routine r
8800: 75 6e 73 20 77 68 65 6e 20 74 68 65 20 75 73 65  uns when the use
8810: 72 20 70 72 65 73 73 65 73 20 43 74 72 6c 2d 43  r presses Ctrl-C
8820: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
8830: 69 6e 74 65 72 72 75 70 74 5f 68 61 6e 64 6c 65  interrupt_handle
8840: 72 28 69 6e 74 20 4e 6f 74 55 73 65 64 29 7b 0a  r(int NotUsed){.
8850: 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54    UNUSED_PARAMET
8860: 45 52 28 4e 6f 74 55 73 65 64 29 3b 0a 20 20 73  ER(NotUsed);.  s
8870: 65 65 6e 49 6e 74 65 72 72 75 70 74 2b 2b 3b 0a  eenInterrupt++;.
8880: 20 20 69 66 28 20 73 65 65 6e 49 6e 74 65 72 72    if( seenInterr
8890: 75 70 74 3e 32 20 29 20 65 78 69 74 28 31 29 3b  upt>2 ) exit(1);
88a0: 0a 20 20 69 66 28 20 67 6c 6f 62 61 6c 44 62 20  .  if( globalDb 
88b0: 29 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ) sqlite3_interr
88c0: 75 70 74 28 67 6c 6f 62 61 6c 44 62 29 3b 0a 7d  upt(globalDb);.}
88d0: 0a 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 5f  ..#if (defined(_
88e0: 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e 65  WIN32) || define
88f0: 64 28 57 49 4e 33 32 29 29 20 26 26 20 21 64 65  d(WIN32)) && !de
8900: 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45  fined(_WIN32_WCE
8910: 29 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  )./*.** This rou
8920: 74 69 6e 65 20 72 75 6e 73 20 66 6f 72 20 63 6f  tine runs for co
8930: 6e 73 6f 6c 65 20 65 76 65 6e 74 73 20 28 65 2e  nsole events (e.
8940: 67 2e 20 43 74 72 6c 2d 43 29 20 6f 6e 20 57 69  g. Ctrl-C) on Wi
8950: 6e 33 32 0a 2a 2f 0a 73 74 61 74 69 63 20 42 4f  n32.*/.static BO
8960: 4f 4c 20 57 49 4e 41 50 49 20 43 6f 6e 73 6f 6c  OL WINAPI Consol
8970: 65 43 74 72 6c 48 61 6e 64 6c 65 72 28 0a 20 20  eCtrlHandler(.  
8980: 44 57 4f 52 44 20 64 77 43 74 72 6c 54 79 70 65  DWORD dwCtrlType
8990: 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 43   /* One of the C
89a0: 54 52 4c 5f 2a 5f 45 56 45 4e 54 20 63 6f 6e 73  TRL_*_EVENT cons
89b0: 74 61 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 66  tants */.){.  if
89c0: 28 20 64 77 43 74 72 6c 54 79 70 65 3d 3d 43 54  ( dwCtrlType==CT
89d0: 52 4c 5f 43 5f 45 56 45 4e 54 20 29 7b 0a 20 20  RL_C_EVENT ){.  
89e0: 20 20 69 6e 74 65 72 72 75 70 74 5f 68 61 6e 64    interrupt_hand
89f0: 6c 65 72 28 30 29 3b 0a 20 20 20 20 72 65 74 75  ler(0);.    retu
8a00: 72 6e 20 54 52 55 45 3b 0a 20 20 7d 0a 20 20 72  rn TRUE;.  }.  r
8a10: 65 74 75 72 6e 20 46 41 4c 53 45 3b 0a 7d 0a 23  eturn FALSE;.}.#
8a20: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
8a30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
8a40: 52 49 5a 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 57  RIZATION./*.** W
8a50: 68 65 6e 20 74 68 65 20 22 2e 61 75 74 68 20 4f  hen the ".auth O
8a60: 4e 22 20 69 73 20 73 65 74 2c 20 74 68 65 20 66  N" is set, the f
8a70: 6f 6c 6c 6f 77 69 6e 67 20 61 75 74 68 6f 72 69  ollowing authori
8a80: 7a 65 72 20 63 61 6c 6c 62 61 63 6b 20 69 73 0a  zer callback is.
8a90: 2a 2a 20 69 6e 76 6f 6b 65 64 2e 20 20 49 74 20  ** invoked.  It 
8aa0: 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 53  always returns S
8ab0: 51 4c 49 54 45 5f 4f 4b 2e 0a 2a 2f 0a 73 74 61  QLITE_OK..*/.sta
8ac0: 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 41 75 74  tic int shellAut
8ad0: 68 28 0a 20 20 76 6f 69 64 20 2a 70 43 6c 69 65  h(.  void *pClie
8ae0: 6e 74 44 61 74 61 2c 0a 20 20 69 6e 74 20 6f 70  ntData,.  int op
8af0: 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ,.  const char *
8b00: 7a 41 31 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61  zA1,.  const cha
8b10: 72 20 2a 7a 41 32 2c 0a 20 20 63 6f 6e 73 74 20  r *zA2,.  const 
8b20: 63 68 61 72 20 2a 7a 41 33 2c 0a 20 20 63 6f 6e  char *zA3,.  con
8b30: 73 74 20 63 68 61 72 20 2a 7a 41 34 0a 29 7b 0a  st char *zA4.){.
8b40: 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 20    ShellState *p 
8b50: 3d 20 28 53 68 65 6c 6c 53 74 61 74 65 2a 29 70  = (ShellState*)p
8b60: 43 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 73 74  ClientData;.  st
8b70: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
8b80: 2a 61 7a 41 63 74 69 6f 6e 5b 5d 20 3d 20 7b 20  *azAction[] = { 
8b90: 30 2c 0a 20 20 20 20 20 22 43 52 45 41 54 45 5f  0,.     "CREATE_
8ba0: 49 4e 44 45 58 22 2c 20 20 20 20 20 20 20 20 20  INDEX",         
8bb0: 22 43 52 45 41 54 45 5f 54 41 42 4c 45 22 2c 20  "CREATE_TABLE", 
8bc0: 20 20 20 20 20 20 20 20 22 43 52 45 41 54 45 5f          "CREATE_
8bd0: 54 45 4d 50 5f 49 4e 44 45 58 22 2c 0a 20 20 20  TEMP_INDEX",.   
8be0: 20 20 22 43 52 45 41 54 45 5f 54 45 4d 50 5f 54    "CREATE_TEMP_T
8bf0: 41 42 4c 45 22 2c 20 20 20 20 22 43 52 45 41 54  ABLE",    "CREAT
8c00: 45 5f 54 45 4d 50 5f 54 52 49 47 47 45 52 22 2c  E_TEMP_TRIGGER",
8c10: 20 20 22 43 52 45 41 54 45 5f 54 45 4d 50 5f 56    "CREATE_TEMP_V
8c20: 49 45 57 22 2c 0a 20 20 20 20 20 22 43 52 45 41  IEW",.     "CREA
8c30: 54 45 5f 54 52 49 47 47 45 52 22 2c 20 20 20 20  TE_TRIGGER",    
8c40: 20 20 20 22 43 52 45 41 54 45 5f 56 49 45 57 22     "CREATE_VIEW"
8c50: 2c 20 20 20 20 20 20 20 20 20 20 22 44 45 4c 45  ,          "DELE
8c60: 54 45 22 2c 0a 20 20 20 20 20 22 44 52 4f 50 5f  TE",.     "DROP_
8c70: 49 4e 44 45 58 22 2c 20 20 20 20 20 20 20 20 20  INDEX",         
8c80: 20 20 22 44 52 4f 50 5f 54 41 42 4c 45 22 2c 20    "DROP_TABLE", 
8c90: 20 20 20 20 20 20 20 20 20 20 22 44 52 4f 50 5f            "DROP_
8ca0: 54 45 4d 50 5f 49 4e 44 45 58 22 2c 0a 20 20 20  TEMP_INDEX",.   
8cb0: 20 20 22 44 52 4f 50 5f 54 45 4d 50 5f 54 41 42    "DROP_TEMP_TAB
8cc0: 4c 45 22 2c 20 20 20 20 20 20 22 44 52 4f 50 5f  LE",      "DROP_
8cd0: 54 45 4d 50 5f 54 52 49 47 47 45 52 22 2c 20 20  TEMP_TRIGGER",  
8ce0: 20 20 22 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45    "DROP_TEMP_VIE
8cf0: 57 22 2c 0a 20 20 20 20 20 22 44 52 4f 50 5f 54  W",.     "DROP_T
8d00: 52 49 47 47 45 52 22 2c 20 20 20 20 20 20 20 20  RIGGER",        
8d10: 20 22 44 52 4f 50 5f 56 49 45 57 22 2c 20 20 20   "DROP_VIEW",   
8d20: 20 20 20 20 20 20 20 20 20 22 49 4e 53 45 52 54           "INSERT
8d30: 22 2c 0a 20 20 20 20 20 22 50 52 41 47 4d 41 22  ",.     "PRAGMA"
8d40: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
8d50: 22 52 45 41 44 22 2c 20 20 20 20 20 20 20 20 20  "READ",         
8d60: 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 22          "SELECT"
8d70: 2c 0a 20 20 20 20 20 22 54 52 41 4e 53 41 43 54  ,.     "TRANSACT
8d80: 49 4f 4e 22 2c 20 20 20 20 20 20 20 20 20 20 22  ION",          "
8d90: 55 50 44 41 54 45 22 2c 20 20 20 20 20 20 20 20  UPDATE",        
8da0: 20 20 20 20 20 20 20 22 41 54 54 41 43 48 22 2c         "ATTACH",
8db0: 0a 20 20 20 20 20 22 44 45 54 41 43 48 22 2c 20  .     "DETACH", 
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
8dd0: 4c 54 45 52 5f 54 41 42 4c 45 22 2c 20 20 20 20  LTER_TABLE",    
8de0: 20 20 20 20 20 20 22 52 45 49 4e 44 45 58 22 2c        "REINDEX",
8df0: 0a 20 20 20 20 20 22 41 4e 41 4c 59 5a 45 22 2c  .     "ANALYZE",
8e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
8e10: 52 45 41 54 45 5f 56 54 41 42 4c 45 22 2c 20 20  REATE_VTABLE",  
8e20: 20 20 20 20 20 20 22 44 52 4f 50 5f 56 54 41 42        "DROP_VTAB
8e30: 4c 45 22 2c 0a 20 20 20 20 20 22 46 55 4e 43 54  LE",.     "FUNCT
8e40: 49 4f 4e 22 2c 20 20 20 20 20 20 20 20 20 20 20  ION",           
8e50: 20 20 22 53 41 56 45 50 4f 49 4e 54 22 2c 20 20    "SAVEPOINT",  
8e60: 20 20 20 20 20 20 20 20 20 20 22 52 45 43 55 52            "RECUR
8e70: 53 49 56 45 22 0a 20 20 7d 3b 0a 20 20 69 6e 74  SIVE".  };.  int
8e80: 20 69 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   i;.  const char
8e90: 20 2a 61 7a 5b 34 5d 3b 0a 20 20 61 7a 5b 30 5d   *az[4];.  az[0]
8ea0: 20 3d 20 7a 41 31 3b 0a 20 20 61 7a 5b 31 5d 20   = zA1;.  az[1] 
8eb0: 3d 20 7a 41 32 3b 0a 20 20 61 7a 5b 32 5d 20 3d  = zA2;.  az[2] =
8ec0: 20 7a 41 33 3b 0a 20 20 61 7a 5b 33 5d 20 3d 20   zA3;.  az[3] = 
8ed0: 7a 41 34 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e  zA4;.  utf8_prin
8ee0: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 61 75 74 68  tf(p->out, "auth
8ef0: 6f 72 69 7a 65 72 3a 20 25 73 22 2c 20 61 7a 41  orizer: %s", azA
8f00: 63 74 69 6f 6e 5b 6f 70 5d 29 3b 0a 20 20 66 6f  ction[op]);.  fo
8f10: 72 28 69 3d 30 3b 20 69 3c 34 3b 20 69 2b 2b 29  r(i=0; i<4; i++)
8f20: 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  {.    raw_printf
8f30: 28 70 2d 3e 6f 75 74 2c 20 22 20 22 29 3b 0a 20  (p->out, " ");. 
8f40: 20 20 20 69 66 28 20 61 7a 5b 69 5d 20 29 7b 0a     if( az[i] ){.
8f50: 20 20 20 20 20 20 6f 75 74 70 75 74 5f 63 5f 73        output_c_s
8f60: 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a  tring(p->out, az
8f70: 5b 69 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  [i]);.    }else{
8f80: 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
8f90: 66 28 70 2d 3e 6f 75 74 2c 20 22 4e 55 4c 4c 22  f(p->out, "NULL"
8fa0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  );.    }.  }.  r
8fb0: 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
8fc0: 2c 20 22 5c 6e 22 29 3b 0a 20 20 72 65 74 75 72  , "\n");.  retur
8fd0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23  n SQLITE_OK;.}.#
8fe0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 69  endif../*.** Pri
8ff0: 6e 74 20 61 20 73 63 68 65 6d 61 20 73 74 61 74  nt a schema stat
9000: 65 6d 65 6e 74 2e 20 20 50 61 72 74 20 6f 66 20  ement.  Part of 
9010: 4d 4f 44 45 5f 53 65 6d 69 20 61 6e 64 20 4d 4f  MODE_Semi and MO
9020: 44 45 5f 50 72 65 74 74 79 20 6f 75 74 70 75 74  DE_Pretty output
9030: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
9040: 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 73 6f  tine converts so
9050: 6d 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  me CREATE TABLE 
9060: 73 74 61 74 65 6d 65 6e 74 73 20 66 6f 72 20 73  statements for s
9070: 68 61 64 6f 77 20 74 61 62 6c 65 73 0a 2a 2a 20  hadow tables.** 
9080: 69 6e 20 46 54 53 33 2f 34 2f 35 20 69 6e 74 6f  in FTS3/4/5 into
9090: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46   CREATE TABLE IF
90a0: 20 4e 4f 54 20 45 58 49 53 54 53 20 73 74 61 74   NOT EXISTS stat
90b0: 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 73 74 61 74 69  ements..*/.stati
90c0: 63 20 76 6f 69 64 20 70 72 69 6e 74 53 63 68 65  c void printSche
90d0: 6d 61 4c 69 6e 65 28 46 49 4c 45 20 2a 6f 75 74  maLine(FILE *out
90e0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
90f0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
9100: 69 6c 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74  il){.  if( sqlit
9110: 65 33 5f 73 74 72 67 6c 6f 62 28 22 43 52 45 41  e3_strglob("CREA
9120: 54 45 20 54 41 42 4c 45 20 5b 27 5c 22 5d 2a 22  TE TABLE ['\"]*"
9130: 2c 20 7a 29 3d 3d 30 20 29 7b 0a 20 20 20 20 75  , z)==0 ){.    u
9140: 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  tf8_printf(out, 
9150: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46  "CREATE TABLE IF
9160: 20 4e 4f 54 20 45 58 49 53 54 53 20 25 73 25 73   NOT EXISTS %s%s
9170: 22 2c 20 7a 2b 31 33 2c 20 7a 54 61 69 6c 29 3b  ", z+13, zTail);
9180: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 75 74  .  }else{.    ut
9190: 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  f8_printf(out, "
91a0: 25 73 25 73 22 2c 20 7a 2c 20 7a 54 61 69 6c 29  %s%s", z, zTail)
91b0: 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76  ;.  }.}.static v
91c0: 6f 69 64 20 70 72 69 6e 74 53 63 68 65 6d 61 4c  oid printSchemaL
91d0: 69 6e 65 4e 28 46 49 4c 45 20 2a 6f 75 74 2c 20  ineN(FILE *out, 
91e0: 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 2c 20  char *z, int n, 
91f0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69  const char *zTai
9200: 6c 29 7b 0a 20 20 63 68 61 72 20 63 20 3d 20 7a  l){.  char c = z
9210: 5b 6e 5d 3b 0a 20 20 7a 5b 6e 5d 20 3d 20 30 3b  [n];.  z[n] = 0;
9220: 0a 20 20 70 72 69 6e 74 53 63 68 65 6d 61 4c 69  .  printSchemaLi
9230: 6e 65 28 6f 75 74 2c 20 7a 2c 20 7a 54 61 69 6c  ne(out, z, zTail
9240: 29 3b 0a 20 20 7a 5b 6e 5d 20 3d 20 63 3b 0a 7d  );.  z[n] = c;.}
9250: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ../*.** This is 
9260: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75  the callback rou
9270: 74 69 6e 65 20 74 68 61 74 20 74 68 65 20 73 68  tine that the sh
9280: 65 6c 6c 0a 2a 2a 20 69 6e 76 6f 6b 65 73 20 66  ell.** invokes f
9290: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 61  or each row of a
92a0: 20 71 75 65 72 79 20 72 65 73 75 6c 74 2e 0a 2a   query result..*
92b0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 68 65  /.static int she
92c0: 6c 6c 5f 63 61 6c 6c 62 61 63 6b 28 0a 20 20 76  ll_callback(.  v
92d0: 6f 69 64 20 2a 70 41 72 67 2c 0a 20 20 69 6e 74  oid *pArg,.  int
92e0: 20 6e 41 72 67 2c 20 20 20 20 20 20 20 20 2f 2a   nArg,        /*
92f0: 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   Number of resul
9300: 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 63  t columns */.  c
9310: 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20 20 20 20  har **azArg,    
9320: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
9330: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 2a 2f  result column */
9340: 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 2c  .  char **azCol,
9350: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61      /* Column na
9360: 6d 65 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 69  mes */.  int *ai
9370: 54 79 70 65 20 20 20 20 20 20 2f 2a 20 43 6f 6c  Type      /* Col
9380: 75 6d 6e 20 74 79 70 65 73 20 2a 2f 0a 29 7b 0a  umn types */.){.
9390: 20 20 69 6e 74 20 69 3b 0a 20 20 53 68 65 6c 6c    int i;.  Shell
93a0: 53 74 61 74 65 20 2a 70 20 3d 20 28 53 68 65 6c  State *p = (Shel
93b0: 6c 53 74 61 74 65 2a 29 70 41 72 67 3b 0a 0a 20  lState*)pArg;.. 
93c0: 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20   if( azArg==0 ) 
93d0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 73 77 69 74  return 0;.  swit
93e0: 63 68 28 20 70 2d 3e 63 4d 6f 64 65 20 29 7b 0a  ch( p->cMode ){.
93f0: 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 4c 69      case MODE_Li
9400: 6e 65 3a 20 7b 0a 20 20 20 20 20 20 69 6e 74 20  ne: {.      int 
9410: 77 20 3d 20 35 3b 0a 20 20 20 20 20 20 69 66 28  w = 5;.      if(
9420: 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61   azArg==0 ) brea
9430: 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  k;.      for(i=0
9440: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
9450: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20          int len 
9460: 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a 43 6f 6c  = strlen30(azCol
9470: 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a  [i] ? azCol[i] :
9480: 20 22 22 29 3b 0a 20 20 20 20 20 20 20 20 69 66   "");.        if
9490: 28 20 6c 65 6e 3e 77 20 29 20 77 20 3d 20 6c 65  ( len>w ) w = le
94a0: 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  n;.      }.     
94b0: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3e 30 20   if( p->cnt++>0 
94c0: 29 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d  ) utf8_printf(p-
94d0: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72  >out, "%s", p->r
94e0: 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  owSeparator);.  
94f0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
9500: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
9510: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
9520: 2d 3e 6f 75 74 2c 22 25 2a 73 20 3d 20 25 73 25  ->out,"%*s = %s%
9530: 73 22 2c 20 77 2c 20 61 7a 43 6f 6c 5b 69 5d 2c  s", w, azCol[i],
9540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9550: 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72   azArg[i] ? azAr
9560: 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61  g[i] : p->nullVa
9570: 6c 75 65 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72  lue, p->rowSepar
9580: 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ator);.      }. 
9590: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
95a0: 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f  }.    case MODE_
95b0: 45 78 70 6c 61 69 6e 3a 0a 20 20 20 20 63 61 73  Explain:.    cas
95c0: 65 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3a 20 7b  e MODE_Column: {
95d0: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
95e0: 6e 73 74 20 69 6e 74 20 61 45 78 70 6c 61 69 6e  nst int aExplain
95f0: 57 69 64 74 68 73 5b 5d 20 3d 20 7b 34 2c 20 31  Widths[] = {4, 1
9600: 33 2c 20 34 2c 20 34 2c 20 34 2c 20 31 33 2c 20  3, 4, 4, 4, 13, 
9610: 32 2c 20 31 33 7d 3b 0a 20 20 20 20 20 20 63 6f  2, 13};.      co
9620: 6e 73 74 20 69 6e 74 20 2a 63 6f 6c 57 69 64 74  nst int *colWidt
9630: 68 3b 0a 20 20 20 20 20 20 69 6e 74 20 73 68 6f  h;.      int sho
9640: 77 48 64 72 3b 0a 20 20 20 20 20 20 63 68 61 72  wHdr;.      char
9650: 20 2a 72 6f 77 53 65 70 3b 0a 20 20 20 20 20 20   *rowSep;.      
9660: 69 66 28 20 70 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f  if( p->cMode==MO
9670: 44 45 5f 43 6f 6c 75 6d 6e 20 29 7b 0a 20 20 20  DE_Column ){.   
9680: 20 20 20 20 20 63 6f 6c 57 69 64 74 68 20 3d 20       colWidth = 
9690: 70 2d 3e 63 6f 6c 57 69 64 74 68 3b 0a 20 20 20  p->colWidth;.   
96a0: 20 20 20 20 20 73 68 6f 77 48 64 72 20 3d 20 70       showHdr = p
96b0: 2d 3e 73 68 6f 77 48 65 61 64 65 72 3b 0a 20 20  ->showHeader;.  
96c0: 20 20 20 20 20 20 72 6f 77 53 65 70 20 3d 20 70        rowSep = p
96d0: 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 3b 0a  ->rowSeparator;.
96e0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
96f0: 20 20 20 20 20 63 6f 6c 57 69 64 74 68 20 3d 20       colWidth = 
9700: 61 45 78 70 6c 61 69 6e 57 69 64 74 68 73 3b 0a  aExplainWidths;.
9710: 20 20 20 20 20 20 20 20 73 68 6f 77 48 64 72 20          showHdr 
9720: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 6f 77  = 1;.        row
9730: 53 65 70 20 3d 20 53 45 50 5f 52 6f 77 3b 0a 20  Sep = SEP_Row;. 
9740: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
9750: 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 29 7b 0a   p->cnt++==0 ){.
9760: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b          for(i=0;
9770: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
9780: 20 20 20 20 20 20 20 20 20 69 6e 74 20 77 2c 20           int w, 
9790: 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  n;.          if(
97a0: 20 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e   i<ArraySize(p->
97b0: 63 6f 6c 57 69 64 74 68 29 20 29 7b 0a 20 20 20  colWidth) ){.   
97c0: 20 20 20 20 20 20 20 20 20 77 20 3d 20 63 6f 6c           w = col
97d0: 57 69 64 74 68 5b 69 5d 3b 0a 20 20 20 20 20 20  Width[i];.      
97e0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
97f0: 20 20 20 20 20 20 20 77 20 3d 20 30 3b 0a 20 20         w = 0;.  
9800: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
9810: 20 20 20 20 69 66 28 20 77 3d 3d 30 20 29 7b 0a      if( w==0 ){.
9820: 20 20 20 20 20 20 20 20 20 20 20 20 77 20 3d 20              w = 
9830: 73 74 72 6c 65 6e 43 68 61 72 28 61 7a 43 6f 6c  strlenChar(azCol
9840: 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a  [i] ? azCol[i] :
9850: 20 22 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20   "");.          
9860: 20 20 69 66 28 20 77 3c 31 30 20 29 20 77 20 3d    if( w<10 ) w =
9870: 20 31 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20   10;.           
9880: 20 6e 20 3d 20 73 74 72 6c 65 6e 43 68 61 72 28   n = strlenChar(
9890: 61 7a 41 72 67 20 26 26 20 61 7a 41 72 67 5b 69  azArg && azArg[i
98a0: 5d 20 3f 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70  ] ? azArg[i] : p
98b0: 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20  ->nullValue);.  
98c0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 77 3c            if( w<
98d0: 6e 20 29 20 77 20 3d 20 6e 3b 0a 20 20 20 20 20  n ) w = n;.     
98e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
98f0: 20 69 66 28 20 69 3c 41 72 72 61 79 53 69 7a 65   if( i<ArraySize
9900: 28 70 2d 3e 61 63 74 75 61 6c 57 69 64 74 68 29  (p->actualWidth)
9910: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
9920: 70 2d 3e 61 63 74 75 61 6c 57 69 64 74 68 5b 69  p->actualWidth[i
9930: 5d 20 3d 20 77 3b 0a 20 20 20 20 20 20 20 20 20  ] = w;.         
9940: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28   }.          if(
9950: 20 73 68 6f 77 48 64 72 20 29 7b 0a 20 20 20 20   showHdr ){.    
9960: 20 20 20 20 20 20 20 20 75 74 66 38 5f 77 69 64          utf8_wid
9970: 74 68 5f 70 72 69 6e 74 28 70 2d 3e 6f 75 74 2c  th_print(p->out,
9980: 20 77 2c 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20   w, azCol[i]);. 
9990: 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f             utf8_
99a0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
99b0: 25 73 22 2c 20 69 3d 3d 6e 41 72 67 2d 31 20 3f  %s", i==nArg-1 ?
99c0: 20 72 6f 77 53 65 70 20 3a 20 22 20 20 22 29 3b   rowSep : "  ");
99d0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
99e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
99f0: 66 28 20 73 68 6f 77 48 64 72 20 29 7b 0a 20 20  f( showHdr ){.  
9a00: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b          for(i=0;
9a10: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
9a20: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 77             int w
9a30: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ;.            if
9a40: 28 20 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d  ( i<ArraySize(p-
9a50: 3e 61 63 74 75 61 6c 57 69 64 74 68 29 20 29 7b  >actualWidth) ){
9a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9a70: 77 20 3d 20 70 2d 3e 61 63 74 75 61 6c 57 69 64  w = p->actualWid
9a80: 74 68 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 20  th[i];.         
9a90: 20 20 20 20 20 20 69 66 28 20 77 3c 30 20 29 20        if( w<0 ) 
9aa0: 77 20 3d 20 2d 77 3b 0a 20 20 20 20 20 20 20 20  w = -w;.        
9ab0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
9ac0: 20 20 20 20 20 20 20 20 20 20 77 20 3d 20 31 30            w = 10
9ad0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38              utf8
9af0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
9b00: 25 2d 2a 2e 2a 73 25 73 22 2c 77 2c 77 2c 0a 20  %-*.*s%s",w,w,. 
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b20: 20 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    "-------------
9b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9b50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20  -------------". 
9b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b70: 20 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    "-------------
9b80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9b90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9ba0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 2c 0a  -------------",.
9bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bc0: 20 20 20 20 69 3d 3d 6e 41 72 67 2d 31 20 3f 20      i==nArg-1 ? 
9bd0: 72 6f 77 53 65 70 20 3a 20 22 20 20 22 29 3b 0a  rowSep : "  ");.
9be0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
9bf0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
9c00: 20 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30      if( azArg==0
9c10: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
9c20: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
9c30: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
9c40: 6e 74 20 77 3b 0a 20 20 20 20 20 20 20 20 69 66  nt w;.        if
9c50: 28 20 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d  ( i<ArraySize(p-
9c60: 3e 61 63 74 75 61 6c 57 69 64 74 68 29 20 29 7b  >actualWidth) ){
9c70: 0a 20 20 20 20 20 20 20 20 20 20 20 77 20 3d 20  .           w = 
9c80: 70 2d 3e 61 63 74 75 61 6c 57 69 64 74 68 5b 69  p->actualWidth[i
9c90: 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  ];.        }else
9ca0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 77 20 3d  {.           w =
9cb0: 20 31 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   10;.        }. 
9cc0: 20 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 4d         if( p->cM
9cd0: 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c 61 69  ode==MODE_Explai
9ce0: 6e 20 26 26 20 61 7a 41 72 67 5b 69 5d 20 26 26  n && azArg[i] &&
9cf0: 20 73 74 72 6c 65 6e 43 68 61 72 28 61 7a 41 72   strlenChar(azAr
9d00: 67 5b 69 5d 29 3e 77 20 29 7b 0a 20 20 20 20 20  g[i])>w ){.     
9d10: 20 20 20 20 20 77 20 3d 20 73 74 72 6c 65 6e 43       w = strlenC
9d20: 68 61 72 28 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  har(azArg[i]);. 
9d30: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
9d40: 20 69 66 28 20 69 3d 3d 31 20 26 26 20 70 2d 3e   if( i==1 && p->
9d50: 61 69 49 6e 64 65 6e 74 20 26 26 20 70 2d 3e 70  aiIndent && p->p
9d60: 53 74 6d 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Stmt ){.        
9d70: 20 20 69 66 28 20 70 2d 3e 69 49 6e 64 65 6e 74    if( p->iIndent
9d80: 3c 70 2d 3e 6e 49 6e 64 65 6e 74 20 29 7b 0a 20  <p->nIndent ){. 
9d90: 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f             utf8_
9da0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
9db0: 25 2a 2e 73 22 2c 20 70 2d 3e 61 69 49 6e 64 65  %*.s", p->aiInde
9dc0: 6e 74 5b 70 2d 3e 69 49 6e 64 65 6e 74 5d 2c 20  nt[p->iIndent], 
9dd0: 22 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  "");.          }
9de0: 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 69 49  .          p->iI
9df0: 6e 64 65 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20  ndent++;.       
9e00: 20 7d 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f   }.        utf8_
9e10: 77 69 64 74 68 5f 70 72 69 6e 74 28 70 2d 3e 6f  width_print(p->o
9e20: 75 74 2c 20 77 2c 20 61 7a 41 72 67 5b 69 5d 20  ut, w, azArg[i] 
9e30: 3f 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e  ? azArg[i] : p->
9e40: 6e 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20  nullValue);.    
9e50: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
9e60: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 69 3d  p->out, "%s", i=
9e70: 3d 6e 41 72 67 2d 31 20 3f 20 72 6f 77 53 65 70  =nArg-1 ? rowSep
9e80: 20 3a 20 22 20 20 22 29 3b 0a 20 20 20 20 20 20   : "  ");.      
9e90: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
9ea0: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
9eb0: 44 45 5f 53 65 6d 69 3a 20 7b 20 20 20 2f 2a 20  DE_Semi: {   /* 
9ec0: 2e 73 63 68 65 6d 61 20 61 6e 64 20 2e 66 75 6c  .schema and .ful
9ed0: 6c 73 63 68 65 6d 61 20 6f 75 74 70 75 74 20 2a  lschema output *
9ee0: 2f 0a 20 20 20 20 20 20 70 72 69 6e 74 53 63 68  /.      printSch
9ef0: 65 6d 61 4c 69 6e 65 28 70 2d 3e 6f 75 74 2c 20  emaLine(p->out, 
9f00: 61 7a 41 72 67 5b 30 5d 2c 20 22 3b 5c 6e 22 29  azArg[0], ";\n")
9f10: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
9f20: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
9f30: 44 45 5f 50 72 65 74 74 79 3a 20 7b 20 20 2f 2a  DE_Pretty: {  /*
9f40: 20 2e 73 63 68 65 6d 61 20 61 6e 64 20 2e 66 75   .schema and .fu
9f50: 6c 6c 73 63 68 65 6d 61 20 77 69 74 68 20 2d 2d  llschema with --
9f60: 69 6e 64 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20  indent */.      
9f70: 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20 20 20 69  char *z;.      i
9f80: 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69 6e 74 20  nt j;.      int 
9f90: 6e 50 61 72 65 6e 20 3d 20 30 3b 0a 20 20 20 20  nParen = 0;.    
9fa0: 20 20 63 68 61 72 20 63 45 6e 64 20 3d 20 30 3b    char cEnd = 0;
9fb0: 0a 20 20 20 20 20 20 63 68 61 72 20 63 3b 0a 20  .      char c;. 
9fc0: 20 20 20 20 20 69 6e 74 20 6e 4c 69 6e 65 20 3d       int nLine =
9fd0: 20 30 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   0;.      assert
9fe0: 28 20 6e 41 72 67 3d 3d 31 20 29 3b 0a 20 20 20  ( nArg==1 );.   
9ff0: 20 20 20 69 66 28 20 61 7a 41 72 67 5b 30 5d 3d     if( azArg[0]=
a000: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
a010: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74    if( sqlite3_st
a020: 72 6c 69 6b 65 28 22 43 52 45 41 54 45 20 56 49  rlike("CREATE VI
a030: 45 57 25 22 2c 20 61 7a 41 72 67 5b 30 5d 2c 20  EW%", azArg[0], 
a040: 30 29 3d 3d 30 0a 20 20 20 20 20 20 20 7c 7c 20  0)==0.       || 
a050: 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28  sqlite3_strlike(
a060: 22 43 52 45 41 54 45 20 54 52 49 47 25 22 2c 20  "CREATE TRIG%", 
a070: 61 7a 41 72 67 5b 30 5d 2c 20 30 29 3d 3d 30 0a  azArg[0], 0)==0.
a080: 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20        ){.       
a090: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
a0a0: 6f 75 74 2c 20 22 25 73 3b 5c 6e 22 2c 20 61 7a  out, "%s;\n", az
a0b0: 41 72 67 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[0]);.       
a0c0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
a0d0: 20 20 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65        z = sqlite
a0e0: 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
a0f0: 61 7a 41 72 67 5b 30 5d 29 3b 0a 20 20 20 20 20  azArg[0]);.     
a100: 20 6a 20 3d 20 30 3b 0a 20 20 20 20 20 20 66 6f   j = 0;.      fo
a110: 72 28 69 3d 30 3b 20 49 73 53 70 61 63 65 28 7a  r(i=0; IsSpace(z
a120: 5b 69 5d 29 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20  [i]); i++){}.   
a130: 20 20 20 66 6f 72 28 3b 20 28 63 20 3d 20 7a 5b     for(; (c = z[
a140: 69 5d 29 21 3d 30 3b 20 69 2b 2b 29 7b 0a 20 20  i])!=0; i++){.  
a150: 20 20 20 20 20 20 69 66 28 20 49 73 53 70 61 63        if( IsSpac
a160: 65 28 63 29 20 29 7b 0a 20 20 20 20 20 20 20 20  e(c) ){.        
a170: 20 20 69 66 28 20 7a 5b 6a 2d 31 5d 3d 3d 27 5c    if( z[j-1]=='\
a180: 72 27 20 29 20 7a 5b 6a 2d 31 5d 20 3d 20 27 5c  r' ) z[j-1] = '\
a190: 6e 27 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  n';.          if
a1a0: 28 20 49 73 53 70 61 63 65 28 7a 5b 6a 2d 31 5d  ( IsSpace(z[j-1]
a1b0: 29 20 7c 7c 20 7a 5b 6a 2d 31 5d 3d 3d 27 28 27  ) || z[j-1]=='('
a1c0: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
a1d0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28       }else if( (
a1e0: 63 3d 3d 27 28 27 20 7c 7c 20 63 3d 3d 27 29 27  c=='(' || c==')'
a1f0: 29 20 26 26 20 6a 3e 30 20 26 26 20 49 73 53 70  ) && j>0 && IsSp
a200: 61 63 65 28 7a 5b 6a 2d 31 5d 29 20 29 7b 0a 20  ace(z[j-1]) ){. 
a210: 20 20 20 20 20 20 20 20 20 6a 2d 2d 3b 0a 20 20           j--;.  
a220: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
a230: 7a 5b 6a 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20  z[j++] = c;.    
a240: 20 20 7d 0a 20 20 20 20 20 20 77 68 69 6c 65 28    }.      while(
a250: 20 6a 3e 30 20 26 26 20 49 73 53 70 61 63 65 28   j>0 && IsSpace(
a260: 7a 5b 6a 2d 31 5d 29 20 29 7b 20 6a 2d 2d 3b 20  z[j-1]) ){ j--; 
a270: 7d 0a 20 20 20 20 20 20 7a 5b 6a 5d 20 3d 20 30  }.      z[j] = 0
a280: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 6c  ;.      if( strl
a290: 65 6e 33 30 28 7a 29 3e 3d 37 39 20 29 7b 0a 20  en30(z)>=79 ){. 
a2a0: 20 20 20 20 20 20 20 66 6f 72 28 69 3d 6a 3d 30         for(i=j=0
a2b0: 3b 20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 3b  ; (c = z[i])!=0;
a2c0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
a2d0: 20 69 66 28 20 63 3d 3d 63 45 6e 64 20 29 7b 0a   if( c==cEnd ){.
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 63 45 6e 64              cEnd
a2f0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
a300: 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 22 27  }else if( c=='"'
a310: 20 7c 7c 20 63 3d 3d 27 5c 27 27 20 7c 7c 20 63   || c=='\'' || c
a320: 3d 3d 27 60 27 20 29 7b 0a 20 20 20 20 20 20 20  =='`' ){.       
a330: 20 20 20 20 20 63 45 6e 64 20 3d 20 63 3b 0a 20       cEnd = c;. 
a340: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69           }else i
a350: 66 28 20 63 3d 3d 27 5b 27 20 29 7b 0a 20 20 20  f( c=='[' ){.   
a360: 20 20 20 20 20 20 20 20 20 63 45 6e 64 20 3d 20           cEnd = 
a370: 27 5d 27 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ']';.          }
a380: 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 28 27 20  else if( c=='(' 
a390: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ){.            n
a3a0: 50 61 72 65 6e 2b 2b 3b 0a 20 20 20 20 20 20 20  Paren++;.       
a3b0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
a3c0: 27 29 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ')' ){.         
a3d0: 20 20 20 6e 50 61 72 65 6e 2d 2d 3b 0a 20 20 20     nParen--;.   
a3e0: 20 20 20 20 20 20 20 20 20 69 66 28 20 6e 4c 69           if( nLi
a3f0: 6e 65 3e 30 20 26 26 20 6e 50 61 72 65 6e 3d 3d  ne>0 && nParen==
a400: 30 20 26 26 20 6a 3e 30 20 29 7b 0a 20 20 20 20  0 && j>0 ){.    
a410: 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 53            printS
a420: 63 68 65 6d 61 4c 69 6e 65 4e 28 70 2d 3e 6f 75  chemaLineN(p->ou
a430: 74 2c 20 7a 2c 20 6a 2c 20 22 5c 6e 22 29 3b 0a  t, z, j, "\n");.
a440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6a 20                j 
a450: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20  = 0;.           
a460: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20   }.          }. 
a470: 20 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20           z[j++] 
a480: 3d 20 63 3b 0a 20 20 20 20 20 20 20 20 20 20 69  = c;.          i
a490: 66 28 20 6e 50 61 72 65 6e 3d 3d 31 20 26 26 20  f( nParen==1 && 
a4a0: 28 63 3d 3d 27 28 27 20 7c 7c 20 63 3d 3d 27 2c  (c=='(' || c==',
a4b0: 27 20 7c 7c 20 63 3d 3d 27 5c 6e 27 29 20 29 7b  ' || c=='\n') ){
a4c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
a4d0: 20 63 3d 3d 27 5c 6e 27 20 29 20 6a 2d 2d 3b 0a   c=='\n' ) j--;.
a4e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e              prin
a4f0: 74 53 63 68 65 6d 61 4c 69 6e 65 4e 28 70 2d 3e  tSchemaLineN(p->
a500: 6f 75 74 2c 20 7a 2c 20 6a 2c 20 22 5c 6e 20 20  out, z, j, "\n  
a510: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
a520: 6a 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  j = 0;.         
a530: 20 20 20 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20     nLine++;.    
a540: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 49          while( I
a550: 73 53 70 61 63 65 28 7a 5b 69 2b 31 5d 29 20 29  sSpace(z[i+1]) )
a560: 7b 20 69 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20  { i++; }.       
a570: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
a580: 20 20 20 20 20 20 20 7a 5b 6a 5d 20 3d 20 30 3b         z[j] = 0;
a590: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
a5a0: 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 70  rintSchemaLine(p
a5b0: 2d 3e 6f 75 74 2c 20 7a 2c 20 22 3b 5c 6e 22 29  ->out, z, ";\n")
a5c0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
a5d0: 66 72 65 65 28 7a 29 3b 0a 20 20 20 20 20 20 62  free(z);.      b
a5e0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
a5f0: 63 61 73 65 20 4d 4f 44 45 5f 4c 69 73 74 3a 20  case MODE_List: 
a600: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63  {.      if( p->c
a610: 6e 74 2b 2b 3d 3d 30 20 26 26 20 70 2d 3e 73 68  nt++==0 && p->sh
a620: 6f 77 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20  owHeader ){.    
a630: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
a640: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
a650: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
a660: 28 70 2d 3e 6f 75 74 2c 22 25 73 25 73 22 2c 61  (p->out,"%s%s",a
a670: 7a 43 6f 6c 5b 69 5d 2c 0a 20 20 20 20 20 20 20  zCol[i],.       
a680: 20 20 20 20 20 20 20 20 20 20 20 69 3d 3d 6e 41             i==nA
a690: 72 67 2d 31 20 3f 20 70 2d 3e 72 6f 77 53 65 70  rg-1 ? p->rowSep
a6a0: 61 72 61 74 6f 72 20 3a 20 70 2d 3e 63 6f 6c 53  arator : p->colS
a6b0: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
a6c0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
a6d0: 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20     if( azArg==0 
a6e0: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 66  ) break;.      f
a6f0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
a700: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 68  i++){.        ch
a710: 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 5d  ar *z = azArg[i]
a720: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 3d  ;.        if( z=
a730: 3d 30 20 29 20 7a 20 3d 20 70 2d 3e 6e 75 6c 6c  =0 ) z = p->null
a740: 56 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 75  Value;.        u
a750: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
a760: 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20  t, "%s", z);.   
a770: 20 20 20 20 20 69 66 28 20 69 3c 6e 41 72 67 2d       if( i<nArg-
a780: 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  1 ){.          u
a790: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
a7a0: 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53  t, "%s", p->colS
a7b0: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
a7c0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
a7d0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
a7e0: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d  p->out, "%s", p-
a7f0: 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a  >rowSeparator);.
a800: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
a810: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
a820: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
a830: 44 45 5f 48 74 6d 6c 3a 20 7b 0a 20 20 20 20 20  DE_Html: {.     
a840: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30   if( p->cnt++==0
a850: 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65   && p->showHeade
a860: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  r ){.        raw
a870: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
a880: 3c 54 52 3e 22 29 3b 0a 20 20 20 20 20 20 20 20  <TR>");.        
a890: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
a8a0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
a8b0: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
a8c0: 75 74 2c 22 3c 54 48 3e 22 29 3b 0a 20 20 20 20  ut,"<TH>");.    
a8d0: 20 20 20 20 20 20 6f 75 74 70 75 74 5f 68 74 6d        output_htm
a8e0: 6c 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c  l_string(p->out,
a8f0: 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20   azCol[i]);.    
a900: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
a910: 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 48 3e 5c 6e  (p->out,"</TH>\n
a920: 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ");.        }.  
a930: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
a940: 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 52 3e 5c 6e  (p->out,"</TR>\n
a950: 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ");.      }.    
a960: 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29    if( azArg==0 )
a970: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 72 61   break;.      ra
a980: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
a990: 22 3c 54 52 3e 22 29 3b 0a 20 20 20 20 20 20 66  "<TR>");.      f
a9a0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
a9b0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 72 61  i++){.        ra
a9c0: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
a9d0: 22 3c 54 44 3e 22 29 3b 0a 20 20 20 20 20 20 20  "<TD>");.       
a9e0: 20 6f 75 74 70 75 74 5f 68 74 6d 6c 5f 73 74 72   output_html_str
a9f0: 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72  ing(p->out, azAr
aa00: 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69 5d 20  g[i] ? azArg[i] 
aa10: 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b  : p->nullValue);
aa20: 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
aa30: 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 44  ntf(p->out,"</TD
aa40: 3e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >\n");.      }. 
aa50: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
aa60: 70 2d 3e 6f 75 74 2c 22 3c 2f 54 52 3e 5c 6e 22  p->out,"</TR>\n"
aa70: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
aa80: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d      }.    case M
aa90: 4f 44 45 5f 54 63 6c 3a 20 7b 0a 20 20 20 20 20  ODE_Tcl: {.     
aaa0: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30   if( p->cnt++==0
aab0: 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65   && p->showHeade
aac0: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72  r ){.        for
aad0: 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
aae0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75  +){.          ou
aaf0: 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d  tput_c_string(p-
ab00: 3e 6f 75 74 2c 61 7a 43 6f 6c 5b 69 5d 20 3f 20  >out,azCol[i] ? 
ab10: 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b 0a  azCol[i] : "");.
ab20: 20 20 20 20 20 20 20 20 20 20 69 66 28 69 3c 6e            if(i<n
ab30: 41 72 67 2d 31 29 20 75 74 66 38 5f 70 72 69 6e  Arg-1) utf8_prin
ab40: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c  tf(p->out, "%s",
ab50: 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72   p->colSeparator
ab60: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
ab70: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
ab80: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70  (p->out, "%s", p
ab90: 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b  ->rowSeparator);
aba0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
abb0: 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72  f( azArg==0 ) br
abc0: 65 61 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  eak;.      for(i
abd0: 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
abe0: 7b 0a 20 20 20 20 20 20 20 20 6f 75 74 70 75 74  {.        output
abf0: 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  _c_string(p->out
ac00: 2c 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41  , azArg[i] ? azA
ac10: 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56  rg[i] : p->nullV
ac20: 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20 69  alue);.        i
ac30: 66 28 69 3c 6e 41 72 67 2d 31 29 20 75 74 66 38  f(i<nArg-1) utf8
ac40: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
ac50: 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  "%s", p->colSepa
ac60: 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a  rator);.      }.
ac70: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
ac80: 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20  f(p->out, "%s", 
ac90: 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29  p->rowSeparator)
aca0: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
acb0: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
acc0: 44 45 5f 43 73 76 3a 20 7b 0a 20 20 20 20 20 20  DE_Csv: {.      
acd0: 73 65 74 42 69 6e 61 72 79 4d 6f 64 65 28 70 2d  setBinaryMode(p-
ace0: 3e 6f 75 74 2c 20 31 29 3b 0a 20 20 20 20 20 20  >out, 1);.      
acf0: 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20  if( p->cnt++==0 
ad00: 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72  && p->showHeader
ad10: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
ad20: 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
ad30: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74  ){.          out
ad40: 70 75 74 5f 63 73 76 28 70 2c 20 61 7a 43 6f 6c  put_csv(p, azCol
ad50: 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a  [i] ? azCol[i] :
ad60: 20 22 22 2c 20 69 3c 6e 41 72 67 2d 31 29 3b 0a   "", i<nArg-1);.
ad70: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ad80: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
ad90: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72  >out, "%s", p->r
ada0: 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  owSeparator);.  
adb0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
adc0: 6e 41 72 67 3e 30 20 29 7b 0a 20 20 20 20 20 20  nArg>0 ){.      
add0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
ade0: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
adf0: 20 20 20 6f 75 74 70 75 74 5f 63 73 76 28 70 2c     output_csv(p,
ae00: 20 61 7a 41 72 67 5b 69 5d 2c 20 69 3c 6e 41 72   azArg[i], i<nAr
ae10: 67 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  g-1);.        }.
ae20: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
ae30: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
ae40: 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  , p->rowSeparato
ae50: 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  r);.      }.    
ae60: 20 20 73 65 74 54 65 78 74 4d 6f 64 65 28 70 2d    setTextMode(p-
ae70: 3e 6f 75 74 2c 20 31 29 3b 0a 20 20 20 20 20 20  >out, 1);.      
ae80: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
ae90: 20 63 61 73 65 20 4d 4f 44 45 5f 49 6e 73 65 72   case MODE_Inser
aea0: 74 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20 61  t: {.      if( a
aeb0: 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b  zArg==0 ) break;
aec0: 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
aed0: 74 66 28 70 2d 3e 6f 75 74 2c 22 49 4e 53 45 52  tf(p->out,"INSER
aee0: 54 20 49 4e 54 4f 20 25 73 22 2c 70 2d 3e 7a 44  T INTO %s",p->zD
aef0: 65 73 74 54 61 62 6c 65 29 3b 0a 20 20 20 20 20  estTable);.     
af00: 20 69 66 28 20 70 2d 3e 73 68 6f 77 48 65 61 64   if( p->showHead
af10: 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  er ){.        ra
af20: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
af30: 22 28 22 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  "(");.        fo
af40: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
af50: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ++){.          i
af60: 66 28 20 69 3e 30 20 29 20 72 61 77 5f 70 72 69  f( i>0 ) raw_pri
af70: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2c 22 29  ntf(p->out, ",")
af80: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
af90: 71 75 6f 74 65 43 68 61 72 28 61 7a 43 6f 6c 5b  quoteChar(azCol[
afa0: 69 5d 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  i]) ){.         
afb0: 20 20 20 63 68 61 72 20 2a 7a 20 3d 20 73 71 6c     char *z = sql
afc0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22  ite3_mprintf("\"
afd0: 25 77 5c 22 22 2c 20 61 7a 43 6f 6c 5b 69 5d 29  %w\"", azCol[i])
afe0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 74  ;.            ut
aff0: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
b000: 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20  , "%s", z);.    
b010: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
b020: 66 72 65 65 28 7a 29 3b 0a 20 20 20 20 20 20 20  free(z);.       
b030: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
b040: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
b050: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 61  (p->out, "%s", a
b060: 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zCol[i]);.      
b070: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
b080: 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
b090: 74 66 28 70 2d 3e 6f 75 74 2c 22 29 22 29 3b 0a  tf(p->out,")");.
b0a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 2d        }.      p-
b0b0: 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 66 6f  >cnt++;.      fo
b0c0: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
b0d0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  ++){.        raw
b0e0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
b0f0: 69 3e 30 20 3f 20 22 2c 22 20 3a 20 22 20 56 41  i>0 ? "," : " VA
b100: 4c 55 45 53 28 22 29 3b 0a 20 20 20 20 20 20 20  LUES(");.       
b110: 20 69 66 28 20 28 61 7a 41 72 67 5b 69 5d 3d 3d   if( (azArg[i]==
b120: 30 29 20 7c 7c 20 28 61 69 54 79 70 65 20 26 26  0) || (aiType &&
b130: 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49   aiType[i]==SQLI
b140: 54 45 5f 4e 55 4c 4c 29 20 29 7b 0a 20 20 20 20  TE_NULL) ){.    
b150: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
b160: 66 28 70 2d 3e 6f 75 74 2c 22 4e 55 4c 4c 22 29  f(p->out,"NULL")
b170: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
b180: 69 66 28 20 61 69 54 79 70 65 20 26 26 20 61 69  if( aiType && ai
b190: 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f  Type[i]==SQLITE_
b1a0: 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 20 20  TEXT ){.        
b1b0: 20 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46 6c    if( ShellHasFl
b1c0: 61 67 28 70 2c 20 53 48 46 4c 47 5f 4e 65 77 6c  ag(p, SHFLG_Newl
b1d0: 69 6e 65 73 29 20 29 7b 0a 20 20 20 20 20 20 20  ines) ){.       
b1e0: 20 20 20 20 20 6f 75 74 70 75 74 5f 71 75 6f 74       output_quot
b1f0: 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  ed_string(p->out
b200: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
b210: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
b220: 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74            output
b230: 5f 71 75 6f 74 65 64 5f 65 73 63 61 70 65 64 5f  _quoted_escaped_
b240: 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61  string(p->out, a
b250: 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zArg[i]);.      
b260: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65      }.        }e
b270: 6c 73 65 20 69 66 28 20 61 69 54 79 70 65 20 26  lse if( aiType &
b280: 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c  & aiType[i]==SQL
b290: 49 54 45 5f 49 4e 54 45 47 45 52 20 29 7b 0a 20  ITE_INTEGER ){. 
b2a0: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
b2b0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22  intf(p->out,"%s"
b2c0: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
b2d0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61       }else if( a
b2e0: 69 54 79 70 65 20 26 26 20 61 69 54 79 70 65 5b  iType && aiType[
b2f0: 69 5d 3d 3d 53 51 4c 49 54 45 5f 46 4c 4f 41 54  i]==SQLITE_FLOAT
b300: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63 68   ){.          ch
b310: 61 72 20 7a 5b 35 30 5d 3b 0a 20 20 20 20 20 20  ar z[50];.      
b320: 20 20 20 20 64 6f 75 62 6c 65 20 72 20 3d 20 73      double r = s
b330: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
b340: 75 62 6c 65 28 70 2d 3e 70 53 74 6d 74 2c 20 69  uble(p->pStmt, i
b350: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
b360: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 35 30  ite3_snprintf(50
b370: 2c 7a 2c 22 25 21 2e 32 30 67 22 2c 20 72 29 3b  ,z,"%!.20g", r);
b380: 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
b390: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
b3a0: 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20  s", z);.        
b3b0: 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79 70 65  }else if( aiType
b3c0: 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53   && aiType[i]==S
b3d0: 51 4c 49 54 45 5f 42 4c 4f 42 20 26 26 20 70 2d  QLITE_BLOB && p-
b3e0: 3e 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 20 20  >pStmt ){.      
b3f0: 20 20 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a      const void *
b400: 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f  pBlob = sqlite3_
b410: 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 2d 3e 70  column_blob(p->p
b420: 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20  Stmt, i);.      
b430: 20 20 20 20 69 6e 74 20 6e 42 6c 6f 62 20 3d 20      int nBlob = 
b440: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
b450: 79 74 65 73 28 70 2d 3e 70 53 74 6d 74 2c 20 69  ytes(p->pStmt, i
b460: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74  );.          out
b470: 70 75 74 5f 68 65 78 5f 62 6c 6f 62 28 70 2d 3e  put_hex_blob(p->
b480: 6f 75 74 2c 20 70 42 6c 6f 62 2c 20 6e 42 6c 6f  out, pBlob, nBlo
b490: 62 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  b);.        }els
b4a0: 65 20 69 66 28 20 69 73 4e 75 6d 62 65 72 28 61  e if( isNumber(a
b4b0: 7a 41 72 67 5b 69 5d 2c 20 30 29 20 29 7b 0a 20  zArg[i], 0) ){. 
b4c0: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
b4d0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22  intf(p->out,"%s"
b4e0: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
b4f0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 53       }else if( S
b500: 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c 20 53  hellHasFlag(p, S
b510: 48 46 4c 47 5f 4e 65 77 6c 69 6e 65 73 29 20 29  HFLG_Newlines) )
b520: 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74 70  {.          outp
b530: 75 74 5f 71 75 6f 74 65 64 5f 73 74 72 69 6e 67  ut_quoted_string
b540: 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69  (p->out, azArg[i
b550: 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ]);.        }els
b560: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74  e{.          out
b570: 70 75 74 5f 71 75 6f 74 65 64 5f 65 73 63 61 70  put_quoted_escap
b580: 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  ed_string(p->out
b590: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
b5a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
b5b0: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
b5c0: 70 2d 3e 6f 75 74 2c 22 29 3b 5c 6e 22 29 3b 0a  p->out,");\n");.
b5d0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
b5e0: 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45   }.    case MODE
b5f0: 5f 51 75 6f 74 65 3a 20 7b 0a 20 20 20 20 20 20  _Quote: {.      
b600: 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 62  if( azArg==0 ) b
b610: 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20  reak;.      if( 
b620: 70 2d 3e 63 6e 74 3d 3d 30 20 26 26 20 70 2d 3e  p->cnt==0 && p->
b630: 73 68 6f 77 48 65 61 64 65 72 20 29 7b 0a 20 20  showHeader ){.  
b640: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
b650: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
b660: 20 20 20 20 20 20 20 69 66 28 20 69 3e 30 20 29         if( i>0 )
b670: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
b680: 75 74 2c 20 22 2c 22 29 3b 0a 20 20 20 20 20 20  ut, ",");.      
b690: 20 20 20 20 6f 75 74 70 75 74 5f 71 75 6f 74 65      output_quote
b6a0: 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c  d_string(p->out,
b6b0: 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20   azCol[i]);.    
b6c0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 61      }.        ra
b6d0: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
b6e0: 22 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20  "\n");.      }. 
b6f0: 20 20 20 20 20 70 2d 3e 63 6e 74 2b 2b 3b 0a 20       p->cnt++;. 
b700: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
b710: 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
b720: 20 20 20 20 69 66 28 20 69 3e 30 20 29 20 72 61      if( i>0 ) ra
b730: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
b740: 20 22 2c 22 29 3b 0a 20 20 20 20 20 20 20 20 69   ",");.        i
b750: 66 28 20 28 61 7a 41 72 67 5b 69 5d 3d 3d 30 29  f( (azArg[i]==0)
b760: 20 7c 7c 20 28 61 69 54 79 70 65 20 26 26 20 61   || (aiType && a
b770: 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45  iType[i]==SQLITE
b780: 5f 4e 55 4c 4c 29 20 29 7b 0a 20 20 20 20 20 20  _NULL) ){.      
b790: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
b7a0: 70 2d 3e 6f 75 74 2c 22 4e 55 4c 4c 22 29 3b 0a  p->out,"NULL");.
b7b0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
b7c0: 28 20 61 69 54 79 70 65 20 26 26 20 61 69 54 79  ( aiType && aiTy
b7d0: 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 54 45  pe[i]==SQLITE_TE
b7e0: 58 54 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  XT ){.          
b7f0: 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 73 74  output_quoted_st
b800: 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41  ring(p->out, azA
b810: 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[i]);.        
b820: 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79 70 65  }else if( aiType
b830: 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53   && aiType[i]==S
b840: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 29 7b  QLITE_INTEGER ){
b850: 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
b860: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
b870: 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  s", azArg[i]);. 
b880: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
b890: 20 61 69 54 79 70 65 20 26 26 20 61 69 54 79 70   aiType && aiTyp
b8a0: 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 46 4c 4f  e[i]==SQLITE_FLO
b8b0: 41 54 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  AT ){.          
b8c0: 63 68 61 72 20 7a 5b 35 30 5d 3b 0a 20 20 20 20  char z[50];.    
b8d0: 20 20 20 20 20 20 64 6f 75 62 6c 65 20 72 20 3d        double r =
b8e0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
b8f0: 64 6f 75 62 6c 65 28 70 2d 3e 70 53 74 6d 74 2c  double(p->pStmt,
b900: 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   i);.          s
b910: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
b920: 35 30 2c 7a 2c 22 25 21 2e 32 30 67 22 2c 20 72  50,z,"%!.20g", r
b930: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77  );.          raw
b940: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
b950: 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20  "%s", z);.      
b960: 20 20 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79    }else if( aiTy
b970: 70 65 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d  pe && aiType[i]=
b980: 3d 53 51 4c 49 54 45 5f 42 4c 4f 42 20 26 26 20  =SQLITE_BLOB && 
b990: 70 2d 3e 70 53 74 6d 74 20 29 7b 0a 20 20 20 20  p->pStmt ){.    
b9a0: 20 20 20 20 20 20 63 6f 6e 73 74 20 76 6f 69 64        const void
b9b0: 20 2a 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65   *pBlob = sqlite
b9c0: 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 2d  3_column_blob(p-
b9d0: 3e 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20  >pStmt, i);.    
b9e0: 20 20 20 20 20 20 69 6e 74 20 6e 42 6c 6f 62 20        int nBlob 
b9f0: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
ba00: 5f 62 79 74 65 73 28 70 2d 3e 70 53 74 6d 74 2c  _bytes(p->pStmt,
ba10: 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f   i);.          o
ba20: 75 74 70 75 74 5f 68 65 78 5f 62 6c 6f 62 28 70  utput_hex_blob(p
ba30: 2d 3e 6f 75 74 2c 20 70 42 6c 6f 62 2c 20 6e 42  ->out, pBlob, nB
ba40: 6c 6f 62 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  lob);.        }e
ba50: 6c 73 65 20 69 66 28 20 69 73 4e 75 6d 62 65 72  lse if( isNumber
ba60: 28 61 7a 41 72 67 5b 69 5d 2c 20 30 29 20 29 7b  (azArg[i], 0) ){
ba70: 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
ba80: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
ba90: 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  s", azArg[i]);. 
baa0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
bab0: 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f 71          output_q
bac0: 75 6f 74 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e  uoted_string(p->
bad0: 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a  out, azArg[i]);.
bae0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
baf0: 7d 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  }.      raw_prin
bb00: 74 66 28 70 2d 3e 6f 75 74 2c 22 5c 6e 22 29 3b  tf(p->out,"\n");
bb10: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
bb20: 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44    }.    case MOD
bb30: 45 5f 41 73 63 69 69 3a 20 7b 0a 20 20 20 20 20  E_Ascii: {.     
bb40: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30   if( p->cnt++==0
bb50: 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65   && p->showHeade
bb60: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72  r ){.        for
bb70: 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
bb80: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66  +){.          if
bb90: 28 20 69 3e 30 20 29 20 75 74 66 38 5f 70 72 69  ( i>0 ) utf8_pri
bba0: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
bbb0: 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  , p->colSeparato
bbc0: 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 75 74  r);.          ut
bbd0: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
bbe0: 2c 22 25 73 22 2c 61 7a 43 6f 6c 5b 69 5d 20 3f  ,"%s",azCol[i] ?
bbf0: 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b   azCol[i] : "");
bc00: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
bc10: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
bc20: 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e  ->out, "%s", p->
bc30: 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20  rowSeparator);. 
bc40: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
bc50: 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61   azArg==0 ) brea
bc60: 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  k;.      for(i=0
bc70: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
bc80: 20 20 20 20 20 20 20 20 69 66 28 20 69 3e 30 20          if( i>0 
bc90: 29 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d  ) utf8_printf(p-
bca0: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63  >out, "%s", p->c
bcb0: 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  olSeparator);.  
bcc0: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
bcd0: 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22 2c 61 7a  f(p->out,"%s",az
bce0: 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69  Arg[i] ? azArg[i
bcf0: 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65  ] : p->nullValue
bd00: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
bd10: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
bd20: 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f  out, "%s", p->ro
bd30: 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20  wSeparator);.   
bd40: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
bd50: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
bd60: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73  }../*.** This is
bd70: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f   the callback ro
bd80: 75 74 69 6e 65 20 74 68 61 74 20 74 68 65 20 53  utine that the S
bd90: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 0a 2a 2a  QLite library.**
bda0: 20 69 6e 76 6f 6b 65 73 20 66 6f 72 20 65 61 63   invokes for eac
bdb0: 68 20 72 6f 77 20 6f 66 20 61 20 71 75 65 72 79  h row of a query
bdc0: 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74   result..*/.stat
bdd0: 69 63 20 69 6e 74 20 63 61 6c 6c 62 61 63 6b 28  ic int callback(
bde0: 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20  void *pArg, int 
bdf0: 6e 41 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 41  nArg, char **azA
be00: 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  rg, char **azCol
be10: 29 7b 0a 20 20 2f 2a 20 73 69 6e 63 65 20 77 65  ){.  /* since we
be20: 20 64 6f 6e 27 74 20 68 61 76 65 20 74 79 70 65   don't have type
be30: 20 69 6e 66 6f 2c 20 63 61 6c 6c 20 74 68 65 20   info, call the 
be40: 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 20 77  shell_callback w
be50: 69 74 68 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65  ith a NULL value
be60: 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 73 68 65   */.  return she
be70: 6c 6c 5f 63 61 6c 6c 62 61 63 6b 28 70 41 72 67  ll_callback(pArg
be80: 2c 20 6e 41 72 67 2c 20 61 7a 41 72 67 2c 20 61  , nArg, azArg, a
be90: 7a 43 6f 6c 2c 20 4e 55 4c 4c 29 3b 0a 7d 0a 0a  zCol, NULL);.}..
bea0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  /*.** This is th
beb0: 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69  e callback routi
bec0: 6e 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ne from sqlite3_
bed0: 65 78 65 63 28 29 20 74 68 61 74 20 61 70 70 65  exec() that appe
bee0: 6e 64 73 20 61 6c 6c 0a 2a 2a 20 6f 75 74 70 75  nds all.** outpu
bef0: 74 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f  t onto the end o
bf00: 66 20 61 20 53 68 65 6c 6c 54 65 78 74 20 6f 62  f a ShellText ob
bf10: 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ject..*/.static 
bf20: 69 6e 74 20 63 61 70 74 75 72 65 4f 75 74 70 75  int captureOutpu
bf30: 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a  tCallback(void *
bf40: 70 41 72 67 2c 20 69 6e 74 20 6e 41 72 67 2c 20  pArg, int nArg, 
bf50: 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20 63 68  char **azArg, ch
bf60: 61 72 20 2a 2a 61 7a 29 7b 0a 20 20 53 68 65 6c  ar **az){.  Shel
bf70: 6c 54 65 78 74 20 2a 70 20 3d 20 28 53 68 65 6c  lText *p = (Shel
bf80: 6c 54 65 78 74 2a 29 70 41 72 67 3b 0a 20 20 69  lText*)pArg;.  i
bf90: 6e 74 20 69 3b 0a 20 20 55 4e 55 53 45 44 5f 50  nt i;.  UNUSED_P
bfa0: 41 52 41 4d 45 54 45 52 28 61 7a 29 3b 0a 20 20  ARAMETER(az);.  
bfb0: 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 72  if( azArg==0 ) r
bfc0: 65 74 75 72 6e 20 30 3b 0a 20 20 69 66 28 20 70  eturn 0;.  if( p
bfd0: 2d 3e 6e 20 29 20 61 70 70 65 6e 64 54 65 78 74  ->n ) appendText
bfe0: 28 70 2c 20 22 7c 22 2c 20 30 29 3b 0a 20 20 66  (p, "|", 0);.  f
bff0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
c000: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 20  i++){.    if( i 
c010: 29 20 61 70 70 65 6e 64 54 65 78 74 28 70 2c 20  ) appendText(p, 
c020: 22 2c 22 2c 20 30 29 3b 0a 20 20 20 20 69 66 28  ",", 0);.    if(
c030: 20 61 7a 41 72 67 5b 69 5d 20 29 20 61 70 70 65   azArg[i] ) appe
c040: 6e 64 54 65 78 74 28 70 2c 20 61 7a 41 72 67 5b  ndText(p, azArg[
c050: 69 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65  i], 0);.  }.  re
c060: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
c070: 20 47 65 6e 65 72 61 74 65 20 61 6e 20 61 70 70   Generate an app
c080: 72 6f 70 72 69 61 74 65 20 53 45 4c 46 54 45 53  ropriate SELFTES
c090: 54 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d  T table in the m
c0a0: 61 69 6e 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f  ain database..*/
c0b0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 72 65  .static void cre
c0c0: 61 74 65 53 65 6c 66 74 65 73 74 54 61 62 6c 65  ateSelftestTable
c0d0: 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b  (ShellState *p){
c0e0: 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67  .  char *zErrMsg
c0f0: 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f   = 0;.  sqlite3_
c100: 65 78 65 63 28 70 2d 3e 64 62 2c 0a 20 20 20 20  exec(p->db,.    
c110: 22 53 41 56 45 50 4f 49 4e 54 20 73 65 6c 66 74  "SAVEPOINT selft
c120: 65 73 74 5f 69 6e 69 74 3b 5c 6e 22 0a 20 20 20  est_init;\n".   
c130: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49   "CREATE TABLE I
c140: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 73 65 6c  F NOT EXISTS sel
c150: 66 74 65 73 74 28 5c 6e 22 0a 20 20 20 20 22 20  ftest(\n".    " 
c160: 20 74 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49   tno INTEGER PRI
c170: 4d 41 52 59 20 4b 45 59 2c 5c 6e 22 20 20 20 2f  MARY KEY,\n"   /
c180: 2a 20 54 65 73 74 20 6e 75 6d 62 65 72 20 2a 2f  * Test number */
c190: 0a 20 20 20 20 22 20 20 6f 70 20 54 45 58 54 2c  .    "  op TEXT,
c1a0: 5c 6e 22 20 20 20 20 20 20 20 20 20 20 20 20 20  \n"             
c1b0: 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 6f        /* Operato
c1c0: 72 3a 20 20 6d 65 6d 6f 20 72 75 6e 20 2a 2f 0a  r:  memo run */.
c1d0: 20 20 20 20 22 20 20 63 6d 64 20 54 45 58 54 2c      "  cmd TEXT,
c1e0: 5c 6e 22 20 20 20 20 20 20 20 20 20 20 20 20 20  \n"             
c1f0: 20 20 20 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20       /* Command 
c200: 74 65 78 74 20 2a 2f 0a 20 20 20 20 22 20 20 61  text */.    "  a
c210: 6e 73 20 54 45 58 54 5c 6e 22 20 20 20 20 20 20  ns TEXT\n"      
c220: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c230: 44 65 73 69 72 65 64 20 61 6e 73 77 65 72 20 2a  Desired answer *
c240: 2f 0a 20 20 20 20 22 29 3b 22 0a 20 20 20 20 22  /.    ");".    "
c250: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
c260: 45 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 28  E [_shell$self](
c270: 6f 70 2c 63 6d 64 2c 61 6e 73 29 3b 5c 6e 22 0a  op,cmd,ans);\n".
c280: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
c290: 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 28 72   [_shell$self](r
c2a0: 6f 77 69 64 2c 6f 70 2c 63 6d 64 29 5c 6e 22 0a  owid,op,cmd)\n".
c2b0: 20 20 20 20 22 20 20 56 41 4c 55 45 53 28 63 6f      "  VALUES(co
c2c0: 61 6c 65 73 63 65 28 28 53 45 4c 45 43 54 20 28  alesce((SELECT (
c2d0: 6d 61 78 28 74 6e 6f 29 2b 31 30 30 29 2f 31 30  max(tno)+100)/10
c2e0: 20 46 52 4f 4d 20 73 65 6c 66 74 65 73 74 29 2c   FROM selftest),
c2f0: 31 30 29 2c 5c 6e 22 0a 20 20 20 20 22 20 20 20  10),\n".    "   
c300: 20 20 20 20 20 20 27 6d 65 6d 6f 27 2c 27 54 65        'memo','Te
c310: 73 74 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  sts generated by
c320: 20 2d 2d 69 6e 69 74 27 29 3b 5c 6e 22 0a 20 20   --init');\n".  
c330: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 5b    "INSERT INTO [
c340: 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 5c 6e 22 0a  _shell$self]\n".
c350: 20 20 20 20 22 20 20 53 45 4c 45 43 54 20 27 72      "  SELECT 'r
c360: 75 6e 27 2c 5c 6e 22 0a 20 20 20 20 22 20 20 20  un',\n".    "   
c370: 20 27 53 45 4c 45 43 54 20 68 65 78 28 73 68 61   'SELECT hex(sha
c380: 33 5f 71 75 65 72 79 28 27 27 53 45 4c 45 43 54  3_query(''SELECT
c390: 20 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e   type,name,tbl_n
c3a0: 61 6d 65 2c 73 71 6c 20 22 0a 20 20 20 20 20 20  ame,sql ".      
c3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3c0: 20 20 20 20 20 20 20 20 20 20 20 22 46 52 4f 4d             "FROM
c3d0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 4f   sqlite_master O
c3e0: 52 44 45 52 20 42 59 20 32 27 27 2c 32 32 34 29  RDER BY 2'',224)
c3f0: 29 27 2c 5c 6e 22 0a 20 20 20 20 22 20 20 20 20  )',\n".    "    
c400: 68 65 78 28 73 68 61 33 5f 71 75 65 72 79 28 27  hex(sha3_query('
c410: 53 45 4c 45 43 54 20 74 79 70 65 2c 6e 61 6d 65  SELECT type,name
c420: 2c 74 62 6c 5f 6e 61 6d 65 2c 73 71 6c 20 22 0a  ,tbl_name,sql ".
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c440: 20 20 20 20 20 20 20 20 20 20 22 46 52 4f 4d 20            "FROM 
c450: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 4f 52  sqlite_master OR
c460: 44 45 52 20 42 59 20 32 27 2c 32 32 34 29 29 3b  DER BY 2',224));
c470: 5c 6e 22 0a 20 20 20 20 22 49 4e 53 45 52 54 20  \n".    "INSERT 
c480: 49 4e 54 4f 20 5b 5f 73 68 65 6c 6c 24 73 65 6c  INTO [_shell$sel
c490: 66 5d 5c 6e 22 0a 20 20 20 20 22 20 20 53 45 4c  f]\n".    "  SEL
c4a0: 45 43 54 20 27 72 75 6e 27 2c 22 0a 20 20 20 20  ECT 'run',".    
c4b0: 22 20 20 20 20 27 53 45 4c 45 43 54 20 68 65 78  "    'SELECT hex
c4c0: 28 73 68 61 33 5f 71 75 65 72 79 28 27 27 53 45  (sha3_query(''SE
c4d0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5c 22 27 20  LECT * FROM \"' 
c4e0: 7c 7c 22 0a 20 20 20 20 22 20 20 20 20 20 20 20  ||".    "       
c4f0: 20 70 72 69 6e 74 66 28 27 25 77 27 2c 6e 61 6d   printf('%w',nam
c500: 65 29 20 7c 7c 20 27 5c 22 20 4e 4f 54 20 49 4e  e) || '\" NOT IN
c510: 44 45 58 45 44 27 27 2c 32 32 34 29 29 27 2c 5c  DEXED'',224))',\
c520: 6e 22 0a 20 20 20 20 22 20 20 20 20 68 65 78 28  n".    "    hex(
c530: 73 68 61 33 5f 71 75 65 72 79 28 70 72 69 6e 74  sha3_query(print
c540: 66 28 27 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  f('SELECT * FROM
c550: 20 5c 22 25 77 5c 22 20 4e 4f 54 20 49 4e 44 45   \"%w\" NOT INDE
c560: 58 45 44 27 2c 6e 61 6d 65 29 2c 32 32 34 29 29  XED',name),224))
c570: 5c 6e 22 0a 20 20 20 20 22 20 20 46 52 4f 4d 20  \n".    "  FROM 
c580: 28 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 53 45  (\n".    "    SE
c590: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
c5a0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 5c 6e 22 0a  qlite_master\n".
c5b0: 20 20 20 20 22 20 20 20 20 20 57 48 45 52 45 20      "     WHERE 
c5c0: 74 79 70 65 3d 27 74 61 62 6c 65 27 5c 6e 22 0a  type='table'\n".
c5d0: 20 20 20 20 22 20 20 20 20 20 20 20 41 4e 44 20      "       AND 
c5e0: 6e 61 6d 65 3c 3e 27 73 65 6c 66 74 65 73 74 27  name<>'selftest'
c5f0: 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20 20 20  \n".    "       
c600: 41 4e 44 20 63 6f 61 6c 65 73 63 65 28 72 6f 6f  AND coalesce(roo
c610: 74 70 61 67 65 2c 30 29 3e 30 5c 6e 22 0a 20 20  tpage,0)>0\n".  
c620: 20 20 22 20 20 29 5c 6e 22 0a 20 20 20 20 22 20    "  )\n".    " 
c630: 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 3b 5c 6e  ORDER BY name;\n
c640: 22 0a 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e  ".    "INSERT IN
c650: 54 4f 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d  TO [_shell$self]
c660: 5c 6e 22 0a 20 20 20 20 22 20 20 56 41 4c 55 45  \n".    "  VALUE
c670: 53 28 27 72 75 6e 27 2c 27 50 52 41 47 4d 41 20  S('run','PRAGMA 
c680: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 27  integrity_check'
c690: 2c 27 6f 6b 27 29 3b 5c 6e 22 0a 20 20 20 20 22  ,'ok');\n".    "
c6a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 65 6c 66  INSERT INTO self
c6b0: 74 65 73 74 28 74 6e 6f 2c 6f 70 2c 63 6d 64 2c  test(tno,op,cmd,
c6c0: 61 6e 73 29 22 0a 20 20 20 20 22 20 20 53 45 4c  ans)".    "  SEL
c6d0: 45 43 54 20 72 6f 77 69 64 2a 31 30 2c 6f 70 2c  ECT rowid*10,op,
c6e0: 63 6d 64 2c 61 6e 73 20 46 52 4f 4d 20 5b 5f 73  cmd,ans FROM [_s
c6f0: 68 65 6c 6c 24 73 65 6c 66 5d 3b 5c 6e 22 0a 20  hell$self];\n". 
c700: 20 20 20 22 44 52 4f 50 20 54 41 42 4c 45 20 5b     "DROP TABLE [
c710: 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 3b 22 0a 20  _shell$self];". 
c720: 20 20 20 2c 30 2c 30 2c 26 7a 45 72 72 4d 73 67     ,0,0,&zErrMsg
c730: 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 4d 73 67  );.  if( zErrMsg
c740: 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69   ){.    utf8_pri
c750: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53 45 4c  ntf(stderr, "SEL
c760: 46 54 45 53 54 20 69 6e 69 74 69 61 6c 69 7a 61  FTEST initializa
c770: 74 69 6f 6e 20 66 61 69 6c 75 72 65 3a 20 25 73  tion failure: %s
c780: 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20  \n", zErrMsg);. 
c790: 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
c7a0: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20  zErrMsg);.  }.  
c7b0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e  sqlite3_exec(p->
c7c0: 64 62 2c 20 22 52 45 4c 45 41 53 45 20 73 65 6c  db, "RELEASE sel
c7d0: 66 74 65 73 74 5f 69 6e 69 74 22 2c 30 2c 30 2c  ftest_init",0,0,
c7e0: 30 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 53 65  0);.}.../*.** Se
c7f0: 74 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f  t the destinatio
c800: 6e 20 74 61 62 6c 65 20 66 69 65 6c 64 20 6f 66  n table field of
c810: 20 74 68 65 20 53 68 65 6c 6c 53 74 61 74 65 20   the ShellState 
c820: 73 74 72 75 63 74 75 72 65 20 74 6f 0a 2a 2a 20  structure to.** 
c830: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
c840: 74 61 62 6c 65 20 67 69 76 65 6e 2e 20 20 45 73  table given.  Es
c850: 63 61 70 65 20 61 6e 79 20 71 75 6f 74 65 20 63  cape any quote c
c860: 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65  haracters in the
c870: 0a 2a 2a 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a  .** table name..
c880: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73  */.static void s
c890: 65 74 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 53 68  et_table_name(Sh
c8a0: 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f 6e  ellState *p, con
c8b0: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 7b  st char *zName){
c8c0: 0a 20 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 63  .  int i, n;.  c
c8d0: 68 61 72 20 63 51 75 6f 74 65 3b 0a 20 20 63 68  har cQuote;.  ch
c8e0: 61 72 20 2a 7a 3b 0a 0a 20 20 69 66 28 20 70 2d  ar *z;..  if( p-
c8f0: 3e 7a 44 65 73 74 54 61 62 6c 65 20 29 7b 0a 20  >zDestTable ){. 
c900: 20 20 20 66 72 65 65 28 70 2d 3e 7a 44 65 73 74     free(p->zDest
c910: 54 61 62 6c 65 29 3b 0a 20 20 20 20 70 2d 3e 7a  Table);.    p->z
c920: 44 65 73 74 54 61 62 6c 65 20 3d 20 30 3b 0a 20  DestTable = 0;. 
c930: 20 7d 0a 20 20 69 66 28 20 7a 4e 61 6d 65 3d 3d   }.  if( zName==
c940: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 63 51  0 ) return;.  cQ
c950: 75 6f 74 65 20 3d 20 71 75 6f 74 65 43 68 61 72  uote = quoteChar
c960: 28 7a 4e 61 6d 65 29 3b 0a 20 20 6e 20 3d 20 73  (zName);.  n = s
c970: 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a  trlen30(zName);.
c980: 20 20 69 66 28 20 63 51 75 6f 74 65 20 29 20 6e    if( cQuote ) n
c990: 20 2b 3d 20 6e 2b 32 3b 0a 20 20 7a 20 3d 20 70   += n+2;.  z = p
c9a0: 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20 3d 20 6d  ->zDestTable = m
c9b0: 61 6c 6c 6f 63 28 20 6e 2b 31 20 29 3b 0a 20 20  alloc( n+1 );.  
c9c0: 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
c9d0: 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
c9e0: 72 2c 22 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66  r,"Error: out of
c9f0: 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20   memory\n");.   
ca00: 20 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a 20 20   exit(1);.  }.  
ca10: 6e 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 51 75  n = 0;.  if( cQu
ca20: 6f 74 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d 20 63  ote ) z[n++] = c
ca30: 51 75 6f 74 65 3b 0a 20 20 66 6f 72 28 69 3d 30  Quote;.  for(i=0
ca40: 3b 20 7a 4e 61 6d 65 5b 69 5d 3b 20 69 2b 2b 29  ; zName[i]; i++)
ca50: 7b 0a 20 20 20 20 7a 5b 6e 2b 2b 5d 20 3d 20 7a  {.    z[n++] = z
ca60: 4e 61 6d 65 5b 69 5d 3b 0a 20 20 20 20 69 66 28  Name[i];.    if(
ca70: 20 7a 4e 61 6d 65 5b 69 5d 3d 3d 63 51 75 6f 74   zName[i]==cQuot
ca80: 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d 20 63 51 75  e ) z[n++] = cQu
ca90: 6f 74 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63  ote;.  }.  if( c
caa0: 51 75 6f 74 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d  Quote ) z[n++] =
cab0: 20 63 51 75 6f 74 65 3b 0a 20 20 7a 5b 6e 5d 20   cQuote;.  z[n] 
cac0: 3d 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45  = 0;.}.../*.** E
cad0: 78 65 63 75 74 65 20 61 20 71 75 65 72 79 20 73  xecute a query s
cae0: 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 77 69  tatement that wi
caf0: 6c 6c 20 67 65 6e 65 72 61 74 65 20 53 51 4c 20  ll generate SQL 
cb00: 6f 75 74 70 75 74 2e 20 20 50 72 69 6e 74 0a 2a  output.  Print.*
cb10: 2a 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  * the result col
cb20: 75 6d 6e 73 2c 20 63 6f 6d 6d 61 2d 73 65 70 61  umns, comma-sepa
cb30: 72 61 74 65 64 2c 20 6f 6e 20 61 20 6c 69 6e 65  rated, on a line
cb40: 20 61 6e 64 20 74 68 65 6e 20 61 64 64 20 61 0a   and then add a.
cb50: 2a 2a 20 73 65 6d 69 63 6f 6c 6f 6e 20 74 65 72  ** semicolon ter
cb60: 6d 69 6e 61 74 6f 72 20 74 6f 20 74 68 65 20 65  minator to the e
cb70: 6e 64 20 6f 66 20 74 68 61 74 20 6c 69 6e 65 2e  nd of that line.
cb80: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 6e 75  .**.** If the nu
cb90: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
cba0: 69 73 20 31 20 61 6e 64 20 74 68 61 74 20 63 6f  is 1 and that co
cbb0: 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 74 65  lumn contains te
cbc0: 78 74 20 22 2d 2d 22 0a 2a 2a 20 74 68 65 6e 20  xt "--".** then 
cbd0: 77 72 69 74 65 20 74 68 65 20 73 65 6d 69 63 6f  write the semico
cbe0: 6c 6f 6e 20 6f 6e 20 61 20 73 65 70 61 72 61 74  lon on a separat
cbf0: 65 20 6c 69 6e 65 2e 20 20 54 68 61 74 20 77 61  e line.  That wa
cc00: 79 2c 20 69 66 20 61 0a 2a 2a 20 22 2d 2d 22 20  y, if a.** "--" 
cc10: 63 6f 6d 6d 65 6e 74 20 6f 63 63 75 72 73 20 61  comment occurs a
cc20: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
cc30: 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 20   statement, the 
cc40: 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 77 6f 6e 27 74  comment.** won't
cc50: 20 63 6f 6e 73 75 6d 65 20 74 68 65 20 73 65 6d   consume the sem
cc60: 69 63 6f 6c 6f 6e 20 74 65 72 6d 69 6e 61 74 6f  icolon terminato
cc70: 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  r..*/.static int
cc80: 20 72 75 6e 5f 74 61 62 6c 65 5f 64 75 6d 70 5f   run_table_dump_
cc90: 71 75 65 72 79 28 0a 20 20 53 68 65 6c 6c 53 74  query(.  ShellSt
cca0: 61 74 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20  ate *p,         
ccb0: 20 20 2f 2a 20 51 75 65 72 79 20 63 6f 6e 74 65    /* Query conte
ccc0: 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  xt */.  const ch
ccd0: 61 72 20 2a 7a 53 65 6c 65 63 74 2c 20 20 20 20  ar *zSelect,    
cce0: 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65   /* SELECT state
ccf0: 6d 65 6e 74 20 74 6f 20 65 78 74 72 61 63 74 20  ment to extract 
cd00: 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e  content */.  con
cd10: 73 74 20 63 68 61 72 20 2a 7a 46 69 72 73 74 52  st char *zFirstR
cd20: 6f 77 20 20 20 20 2f 2a 20 50 72 69 6e 74 20 62  ow    /* Print b
cd30: 65 66 6f 72 65 20 66 69 72 73 74 20 72 6f 77 2c  efore first row,
cd40: 20 69 66 20 6e 6f 74 20 4e 55 4c 4c 20 2a 2f 0a   if not NULL */.
cd50: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
cd60: 74 20 2a 70 53 65 6c 65 63 74 3b 0a 20 20 69 6e  t *pSelect;.  in
cd70: 74 20 72 63 3b 0a 20 20 69 6e 74 20 6e 52 65 73  t rc;.  int nRes
cd80: 75 6c 74 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  ult;.  int i;.  
cd90: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20  const char *z;. 
cda0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
cdb0: 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
cdc0: 7a 53 65 6c 65 63 74 2c 20 2d 31 2c 20 26 70 53  zSelect, -1, &pS
cdd0: 65 6c 65 63 74 2c 20 30 29 3b 0a 20 20 69 66 28  elect, 0);.  if(
cde0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc!=SQLITE_OK |
cdf0: 7c 20 21 70 53 65 6c 65 63 74 20 29 7b 0a 20 20  | !pSelect ){.  
ce00: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
ce10: 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 20 45 52 52  >out, "/**** ERR
ce20: 4f 52 3a 20 28 25 64 29 20 25 73 20 2a 2a 2a 2a  OR: (%d) %s ****
ce30: 2a 2f 5c 6e 22 2c 20 72 63 2c 0a 20 20 20 20 20  */\n", rc,.     
ce40: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
ce50: 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29  e3_errmsg(p->db)
ce60: 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26 30  );.    if( (rc&0
ce70: 78 66 66 29 21 3d 53 51 4c 49 54 45 5f 43 4f 52  xff)!=SQLITE_COR
ce80: 52 55 50 54 20 29 20 70 2d 3e 6e 45 72 72 2b 2b  RUPT ) p->nErr++
ce90: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b  ;.    return rc;
cea0: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
ceb0: 74 65 33 5f 73 74 65 70 28 70 53 65 6c 65 63 74  te3_step(pSelect
cec0: 29 3b 0a 20 20 6e 52 65 73 75 6c 74 20 3d 20 73  );.  nResult = s
ced0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
cee0: 75 6e 74 28 70 53 65 6c 65 63 74 29 3b 0a 20 20  unt(pSelect);.  
cef0: 77 68 69 6c 65 28 20 72 63 3d 3d 53 51 4c 49 54  while( rc==SQLIT
cf00: 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69 66 28  E_ROW ){.    if(
cf10: 20 7a 46 69 72 73 74 52 6f 77 20 29 7b 0a 20 20   zFirstRow ){.  
cf20: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
cf30: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 46  p->out, "%s", zF
cf40: 69 72 73 74 52 6f 77 29 3b 0a 20 20 20 20 20 20  irstRow);.      
cf50: 7a 46 69 72 73 74 52 6f 77 20 3d 20 30 3b 0a 20  zFirstRow = 0;. 
cf60: 20 20 20 7d 0a 20 20 20 20 7a 20 3d 20 28 63 6f     }.    z = (co
cf70: 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
cf80: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53  3_column_text(pS
cf90: 65 6c 65 63 74 2c 20 30 29 3b 0a 20 20 20 20 75  elect, 0);.    u
cfa0: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
cfb0: 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20 20  t, "%s", z);.   
cfc0: 20 66 6f 72 28 69 3d 31 3b 20 69 3c 6e 52 65 73   for(i=1; i<nRes
cfd0: 75 6c 74 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ult; i++){.     
cfe0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
cff0: 6f 75 74 2c 20 22 2c 25 73 22 2c 20 73 71 6c 69  out, ",%s", sqli
d000: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
d010: 70 53 65 6c 65 63 74 2c 20 69 29 29 3b 0a 20 20  pSelect, i));.  
d020: 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 3d 3d 30    }.    if( z==0
d030: 20 29 20 7a 20 3d 20 22 22 3b 0a 20 20 20 20 77   ) z = "";.    w
d040: 68 69 6c 65 28 20 7a 5b 30 5d 20 26 26 20 28 7a  hile( z[0] && (z
d050: 5b 30 5d 21 3d 27 2d 27 20 7c 7c 20 7a 5b 31 5d  [0]!='-' || z[1]
d060: 21 3d 27 2d 27 29 20 29 20 7a 2b 2b 3b 0a 20 20  !='-') ) z++;.  
d070: 20 20 69 66 28 20 7a 5b 30 5d 20 29 7b 0a 20 20    if( z[0] ){.  
d080: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
d090: 2d 3e 6f 75 74 2c 20 22 5c 6e 3b 5c 6e 22 29 3b  ->out, "\n;\n");
d0a0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
d0b0: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
d0c0: 6f 75 74 2c 20 22 3b 5c 6e 22 29 3b 0a 20 20 20  out, ";\n");.   
d0d0: 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69   }.    rc = sqli
d0e0: 74 65 33 5f 73 74 65 70 28 70 53 65 6c 65 63 74  te3_step(pSelect
d0f0: 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  );.  }.  rc = sq
d100: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
d110: 53 65 6c 65 63 74 29 3b 0a 20 20 69 66 28 20 72  Select);.  if( r
d120: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
d130: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
d140: 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 20 45  p->out, "/**** E
d150: 52 52 4f 52 3a 20 28 25 64 29 20 25 73 20 2a 2a  RROR: (%d) %s **
d160: 2a 2a 2a 2f 5c 6e 22 2c 20 72 63 2c 0a 20 20 20  ***/\n", rc,.   
d170: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
d180: 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64  ite3_errmsg(p->d
d190: 62 29 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63  b));.    if( (rc
d1a0: 26 30 78 66 66 29 21 3d 53 51 4c 49 54 45 5f 43  &0xff)!=SQLITE_C
d1b0: 4f 52 52 55 50 54 20 29 20 70 2d 3e 6e 45 72 72  ORRUPT ) p->nErr
d1c0: 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  ++;.  }.  return
d1d0: 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c   rc;.}../*.** Al
d1e0: 6c 6f 63 61 74 65 20 73 70 61 63 65 20 61 6e 64  locate space and
d1f0: 20 73 61 76 65 20 6f 66 66 20 63 75 72 72 65 6e   save off curren
d200: 74 20 65 72 72 6f 72 20 73 74 72 69 6e 67 2e 0a  t error string..
d210: 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a  */.static char *
d220: 73 61 76 65 5f 65 72 72 5f 6d 73 67 28 0a 20 20  save_err_msg(.  
d230: 73 71 6c 69 74 65 33 20 2a 64 62 20 20 20 20 20  sqlite3 *db     
d240: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
d250: 73 65 20 74 6f 20 71 75 65 72 79 20 2a 2f 0a 29  se to query */.)
d260: 7b 0a 20 20 69 6e 74 20 6e 45 72 72 4d 73 67 20  {.  int nErrMsg 
d270: 3d 20 31 2b 73 74 72 6c 65 6e 33 30 28 73 71 6c  = 1+strlen30(sql
d280: 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 29  ite3_errmsg(db))
d290: 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  ;.  char *zErrMs
d2a0: 67 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  g = sqlite3_mall
d2b0: 6f 63 36 34 28 6e 45 72 72 4d 73 67 29 3b 0a 20  oc64(nErrMsg);. 
d2c0: 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a   if( zErrMsg ){.
d2d0: 20 20 20 20 6d 65 6d 63 70 79 28 7a 45 72 72 4d      memcpy(zErrM
d2e0: 73 67 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  sg, sqlite3_errm
d2f0: 73 67 28 64 62 29 2c 20 6e 45 72 72 4d 73 67 29  sg(db), nErrMsg)
d300: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a  ;.  }.  return z
d310: 45 72 72 4d 73 67 3b 0a 7d 0a 0a 23 69 66 64 65  ErrMsg;.}..#ifde
d320: 66 20 5f 5f 6c 69 6e 75 78 5f 5f 0a 2f 2a 0a 2a  f __linux__./*.*
d330: 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 69 73  * Attempt to dis
d340: 70 6c 61 79 20 49 2f 4f 20 73 74 61 74 73 20 6f  play I/O stats o
d350: 6e 20 4c 69 6e 75 78 20 75 73 69 6e 67 20 2f 70  n Linux using /p
d360: 72 6f 63 2f 50 49 44 2f 69 6f 0a 2a 2f 0a 73 74  roc/PID/io.*/.st
d370: 61 74 69 63 20 76 6f 69 64 20 64 69 73 70 6c 61  atic void displa
d380: 79 4c 69 6e 75 78 49 6f 53 74 61 74 73 28 46 49  yLinuxIoStats(FI
d390: 4c 45 20 2a 6f 75 74 29 7b 0a 20 20 46 49 4c 45  LE *out){.  FILE
d3a0: 20 2a 69 6e 3b 0a 20 20 63 68 61 72 20 7a 5b 32   *in;.  char z[2
d3b0: 30 30 5d 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  00];.  sqlite3_s
d3c0: 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a  nprintf(sizeof(z
d3d0: 29 2c 20 7a 2c 20 22 2f 70 72 6f 63 2f 25 64 2f  ), z, "/proc/%d/
d3e0: 69 6f 22 2c 20 67 65 74 70 69 64 28 29 29 3b 0a  io", getpid());.
d3f0: 20 20 69 6e 20 3d 20 66 6f 70 65 6e 28 7a 2c 20    in = fopen(z, 
d400: 22 72 62 22 29 3b 0a 20 20 69 66 28 20 69 6e 3d  "rb");.  if( in=
d410: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 77  =0 ) return;.  w
d420: 68 69 6c 65 28 20 66 67 65 74 73 28 7a 2c 20 73  hile( fgets(z, s
d430: 69 7a 65 6f 66 28 7a 29 2c 20 69 6e 29 21 3d 30  izeof(z), in)!=0
d440: 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
d450: 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 0a 20 20  onst struct {.  
d460: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
d470: 7a 50 61 74 74 65 72 6e 3b 0a 20 20 20 20 20 20  zPattern;.      
d480: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 65 73  const char *zDes
d490: 63 3b 0a 20 20 20 20 7d 20 61 54 72 61 6e 73 5b  c;.    } aTrans[
d4a0: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 72  ] = {.      { "r
d4b0: 63 68 61 72 3a 20 22 2c 20 20 20 20 20 20 20 20  char: ",        
d4c0: 20 20 20 20 20 20 20 20 20 20 22 42 79 74 65 73            "Bytes
d4d0: 20 72 65 63 65 69 76 65 64 20 62 79 20 72 65 61   received by rea
d4e0: 64 28 29 3a 22 20 7d 2c 0a 20 20 20 20 20 20 7b  d():" },.      {
d4f0: 20 22 77 63 68 61 72 3a 20 22 2c 20 20 20 20 20   "wchar: ",     
d500: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42 79               "By
d510: 74 65 73 20 73 65 6e 74 20 74 6f 20 77 72 69 74  tes sent to writ
d520: 65 28 29 3a 22 20 20 20 20 7d 2c 0a 20 20 20 20  e():"    },.    
d530: 20 20 7b 20 22 73 79 73 63 72 3a 20 22 2c 20 20    { "syscr: ",  
d540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d550: 22 52 65 61 64 28 29 20 73 79 73 74 65 6d 20 63  "Read() system c
d560: 61 6c 6c 73 3a 22 20 20 20 20 20 20 7d 2c 0a 20  alls:"      },. 
d570: 20 20 20 20 20 7b 20 22 73 79 73 63 77 3a 20 22       { "syscw: "
d580: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
d590: 20 20 20 22 57 72 69 74 65 28 29 20 73 79 73 74     "Write() syst
d5a0: 65 6d 20 63 61 6c 6c 73 3a 22 20 20 20 20 20 7d  em calls:"     }
d5b0: 2c 0a 20 20 20 20 20 20 7b 20 22 72 65 61 64 5f  ,.      { "read_
d5c0: 62 79 74 65 73 3a 20 22 2c 20 20 20 20 20 20 20  bytes: ",       
d5d0: 20 20 20 20 20 20 22 42 79 74 65 73 20 72 65 61        "Bytes rea
d5e0: 64 20 66 72 6f 6d 20 73 74 6f 72 61 67 65 3a 22  d from storage:"
d5f0: 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 77 72    },.      { "wr
d600: 69 74 65 5f 62 79 74 65 73 3a 20 22 2c 20 20 20  ite_bytes: ",   
d610: 20 20 20 20 20 20 20 20 20 22 42 79 74 65 73 20           "Bytes 
d620: 77 72 69 74 74 65 6e 20 74 6f 20 73 74 6f 72 61  written to stora
d630: 67 65 3a 22 20 7d 2c 0a 20 20 20 20 20 20 7b 20  ge:" },.      { 
d640: 22 63 61 6e 63 65 6c 6c 65 64 5f 77 72 69 74 65  "cancelled_write
d650: 5f 62 79 74 65 73 3a 20 22 2c 20 20 22 43 61 6e  _bytes: ",  "Can
d660: 63 65 6c 6c 65 64 20 77 72 69 74 65 20 62 79 74  celled write byt
d670: 65 73 3a 22 20 20 20 20 7d 2c 0a 20 20 20 20 7d  es:"    },.    }
d680: 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  ;.    int i;.   
d690: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61   for(i=0; i<Arra
d6a0: 79 53 69 7a 65 28 61 54 72 61 6e 73 29 3b 20 69  ySize(aTrans); i
d6b0: 2b 2b 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e  ++){.      int n
d6c0: 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 61   = (int)strlen(a
d6d0: 54 72 61 6e 73 5b 69 5d 2e 7a 50 61 74 74 65 72  Trans[i].zPatter
d6e0: 6e 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 74  n);.      if( st
d6f0: 72 6e 63 6d 70 28 61 54 72 61 6e 73 5b 69 5d 2e  rncmp(aTrans[i].
d700: 7a 50 61 74 74 65 72 6e 2c 20 7a 2c 20 6e 29 3d  zPattern, z, n)=
d710: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74  =0 ){.        ut
d720: 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  f8_printf(out, "
d730: 25 2d 33 36 73 20 25 73 22 2c 20 61 54 72 61 6e  %-36s %s", aTran
d740: 73 5b 69 5d 2e 7a 44 65 73 63 2c 20 26 7a 5b 6e  s[i].zDesc, &z[n
d750: 5d 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  ]);.        brea
d760: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
d770: 0a 20 20 7d 0a 20 20 66 63 6c 6f 73 65 28 69 6e  .  }.  fclose(in
d780: 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  );.}.#endif../*.
d790: 2a 2a 20 44 69 73 70 6c 61 79 20 61 20 73 69 6e  ** Display a sin
d7a0: 67 6c 65 20 6c 69 6e 65 20 6f 66 20 73 74 61 74  gle line of stat
d7b0: 75 73 20 75 73 69 6e 67 20 36 34 2d 62 69 74 20  us using 64-bit 
d7c0: 76 61 6c 75 65 73 2e 0a 2a 2f 0a 73 74 61 74 69  values..*/.stati
d7d0: 63 20 76 6f 69 64 20 64 69 73 70 6c 61 79 53 74  c void displaySt
d7e0: 61 74 4c 69 6e 65 28 0a 20 20 53 68 65 6c 6c 53  atLine(.  ShellS
d7f0: 74 61 74 65 20 2a 70 2c 20 20 20 20 20 20 20 20  tate *p,        
d800: 20 20 20 20 2f 2a 20 54 68 65 20 73 68 65 6c 6c      /* The shell
d810: 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 63 68   context */.  ch
d820: 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 20 20 20 20  ar *zLabel,     
d830: 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 62 65 6c          /* Label
d840: 20 66 6f 72 20 74 68 69 73 20 6f 6e 65 20 6c 69   for this one li
d850: 6e 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 46  ne */.  char *zF
d860: 6f 72 6d 61 74 2c 20 20 20 20 20 20 20 20 20 20  ormat,          
d870: 20 20 2f 2a 20 46 6f 72 6d 61 74 20 66 6f 72 20    /* Format for 
d880: 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  the result */.  
d890: 69 6e 74 20 69 53 74 61 74 75 73 43 74 72 6c 2c  int iStatusCtrl,
d8a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
d8b0: 63 68 20 73 74 61 74 75 73 20 74 6f 20 64 69 73  ch status to dis
d8c0: 70 6c 61 79 20 2a 2f 0a 20 20 69 6e 74 20 62 52  play */.  int bR
d8d0: 65 73 65 74 20 20 20 20 20 20 20 20 20 20 20 20  eset            
d8e0: 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 72      /* True to r
d8f0: 65 73 65 74 20 74 68 65 20 73 74 61 74 73 20 2a  eset the stats *
d900: 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 69  /.){.  sqlite3_i
d910: 6e 74 36 34 20 69 43 75 72 20 3d 20 2d 31 3b 0a  nt64 iCur = -1;.
d920: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
d930: 69 48 69 77 74 72 20 3d 20 2d 31 3b 0a 20 20 69  iHiwtr = -1;.  i
d940: 6e 74 20 69 2c 20 6e 50 65 72 63 65 6e 74 3b 0a  nt i, nPercent;.
d950: 20 20 63 68 61 72 20 7a 4c 69 6e 65 5b 32 30 30    char zLine[200
d960: 5d 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 61  ];.  sqlite3_sta
d970: 74 75 73 36 34 28 69 53 74 61 74 75 73 43 74 72  tus64(iStatusCtr
d980: 6c 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77 74  l, &iCur, &iHiwt
d990: 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 66 6f  r, bReset);.  fo
d9a0: 72 28 69 3d 30 2c 20 6e 50 65 72 63 65 6e 74 3d  r(i=0, nPercent=
d9b0: 30 3b 20 7a 46 6f 72 6d 61 74 5b 69 5d 3b 20 69  0; zFormat[i]; i
d9c0: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 7a 46 6f  ++){.    if( zFo
d9d0: 72 6d 61 74 5b 69 5d 3d 3d 27 25 27 20 29 20 6e  rmat[i]=='%' ) n
d9e0: 50 65 72 63 65 6e 74 2b 2b 3b 0a 20 20 7d 0a 20  Percent++;.  }. 
d9f0: 20 69 66 28 20 6e 50 65 72 63 65 6e 74 3e 31 20   if( nPercent>1 
da00: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ){.    sqlite3_s
da10: 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a  nprintf(sizeof(z
da20: 4c 69 6e 65 29 2c 20 7a 4c 69 6e 65 2c 20 7a 46  Line), zLine, zF
da30: 6f 72 6d 61 74 2c 20 69 43 75 72 2c 20 69 48 69  ormat, iCur, iHi
da40: 77 74 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  wtr);.  }else{. 
da50: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
da60: 6e 74 66 28 73 69 7a 65 6f 66 28 7a 4c 69 6e 65  ntf(sizeof(zLine
da70: 29 2c 20 7a 4c 69 6e 65 2c 20 7a 46 6f 72 6d 61  ), zLine, zForma
da80: 74 2c 20 69 48 69 77 74 72 29 3b 0a 20 20 7d 0a  t, iHiwtr);.  }.
da90: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
daa0: 6f 75 74 2c 20 22 25 2d 33 36 73 20 25 73 5c 6e  out, "%-36s %s\n
dab0: 22 2c 20 7a 4c 61 62 65 6c 2c 20 7a 4c 69 6e 65  ", zLabel, zLine
dac0: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 70  );.}../*.** Disp
dad0: 6c 61 79 20 6d 65 6d 6f 72 79 20 73 74 61 74 73  lay memory stats
dae0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
daf0: 64 69 73 70 6c 61 79 5f 73 74 61 74 73 28 0a 20  display_stats(. 
db00: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20   sqlite3 *db,   
db10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
db20: 44 61 74 61 62 61 73 65 20 74 6f 20 71 75 65 72  Database to quer
db30: 79 20 2a 2f 0a 20 20 53 68 65 6c 6c 53 74 61 74  y */.  ShellStat
db40: 65 20 2a 70 41 72 67 2c 20 20 20 20 20 20 20 20  e *pArg,        
db50: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
db60: 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 2f 0a 20   ShellState */. 
db70: 20 69 6e 74 20 62 52 65 73 65 74 20 20 20 20 20   int bReset     
db80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
db90: 54 72 75 65 20 74 6f 20 72 65 73 65 74 20 74 68  True to reset th
dba0: 65 20 73 74 61 74 73 20 2a 2f 0a 29 7b 0a 20 20  e stats */.){.  
dbb0: 69 6e 74 20 69 43 75 72 3b 0a 20 20 69 6e 74 20  int iCur;.  int 
dbc0: 69 48 69 77 74 72 3b 0a 0a 20 20 69 66 28 20 70  iHiwtr;..  if( p
dbd0: 41 72 67 20 26 26 20 70 41 72 67 2d 3e 6f 75 74  Arg && pArg->out
dbe0: 20 29 7b 0a 20 20 20 20 64 69 73 70 6c 61 79 53   ){.    displayS
dbf0: 74 61 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 4d  tatLine(pArg, "M
dc00: 65 6d 6f 72 79 20 55 73 65 64 3a 22 2c 0a 20 20  emory Used:",.  
dc10: 20 20 20 20 20 22 25 6c 6c 64 20 28 6d 61 78 20       "%lld (max 
dc20: 25 6c 6c 64 29 20 62 79 74 65 73 22 2c 20 53 51  %lld) bytes", SQ
dc30: 4c 49 54 45 5f 53 54 41 54 55 53 5f 4d 45 4d 4f  LITE_STATUS_MEMO
dc40: 52 59 5f 55 53 45 44 2c 20 62 52 65 73 65 74 29  RY_USED, bReset)
dc50: 3b 0a 20 20 20 20 64 69 73 70 6c 61 79 53 74 61  ;.    displaySta
dc60: 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 4e 75 6d  tLine(pArg, "Num
dc70: 62 65 72 20 6f 66 20 4f 75 74 73 74 61 6e 64 69  ber of Outstandi
dc80: 6e 67 20 41 6c 6c 6f 63 61 74 69 6f 6e 73 3a 22  ng Allocations:"
dc90: 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c 64 20 28  ,.       "%lld (
dca0: 6d 61 78 20 25 6c 6c 64 29 22 2c 20 53 51 4c 49  max %lld)", SQLI
dcb0: 54 45 5f 53 54 41 54 55 53 5f 4d 41 4c 4c 4f 43  TE_STATUS_MALLOC
dcc0: 5f 43 4f 55 4e 54 2c 20 62 52 65 73 65 74 29 3b  _COUNT, bReset);
dcd0: 0a 20 20 20 20 69 66 28 20 70 41 72 67 2d 3e 73  .    if( pArg->s
dce0: 68 65 6c 6c 46 6c 67 73 20 26 20 53 48 46 4c 47  hellFlgs & SHFLG
dcf0: 5f 50 61 67 65 63 61 63 68 65 20 29 7b 0a 20 20  _Pagecache ){.  
dd00: 20 20 20 20 64 69 73 70 6c 61 79 53 74 61 74 4c      displayStatL
dd10: 69 6e 65 28 70 41 72 67 2c 20 22 4e 75 6d 62 65  ine(pArg, "Numbe
dd20: 72 20 6f 66 20 50 63 61 63 68 65 20 50 61 67 65  r of Pcache Page
dd30: 73 20 55 73 65 64 3a 22 2c 0a 20 20 20 20 20 20  s Used:",.      
dd40: 20 20 20 22 25 6c 6c 64 20 28 6d 61 78 20 25 6c     "%lld (max %l
dd50: 6c 64 29 20 70 61 67 65 73 22 2c 20 53 51 4c 49  ld) pages", SQLI
dd60: 54 45 5f 53 54 41 54 55 53 5f 50 41 47 45 43 41  TE_STATUS_PAGECA
dd70: 43 48 45 5f 55 53 45 44 2c 20 62 52 65 73 65 74  CHE_USED, bReset
dd80: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 69 73  );.    }.    dis
dd90: 70 6c 61 79 53 74 61 74 4c 69 6e 65 28 70 41 72  playStatLine(pAr
dda0: 67 2c 20 22 4e 75 6d 62 65 72 20 6f 66 20 50 63  g, "Number of Pc
ddb0: 61 63 68 65 20 4f 76 65 72 66 6c 6f 77 20 42 79  ache Overflow By
ddc0: 74 65 73 3a 22 2c 0a 20 20 20 20 20 20 20 22 25  tes:",.       "%
ddd0: 6c 6c 64 20 28 6d 61 78 20 25 6c 6c 64 29 20 62  lld (max %lld) b
dde0: 79 74 65 73 22 2c 20 53 51 4c 49 54 45 5f 53 54  ytes", SQLITE_ST
ddf0: 41 54 55 53 5f 50 41 47 45 43 41 43 48 45 5f 4f  ATUS_PAGECACHE_O
de00: 56 45 52 46 4c 4f 57 2c 20 62 52 65 73 65 74 29  VERFLOW, bReset)
de10: 3b 0a 20 20 20 20 64 69 73 70 6c 61 79 53 74 61  ;.    displaySta
de20: 74 4c 69 6e 65 28 70 41 72 67 2c 20 22 4c 61 72  tLine(pArg, "Lar
de30: 67 65 73 74 20 41 6c 6c 6f 63 61 74 69 6f 6e 3a  gest Allocation:
de40: 22 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c 64 20  ",.       "%lld 
de50: 62 79 74 65 73 22 2c 20 53 51 4c 49 54 45 5f 53  bytes", SQLITE_S
de60: 54 41 54 55 53 5f 4d 41 4c 4c 4f 43 5f 53 49 5a  TATUS_MALLOC_SIZ
de70: 45 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20  E, bReset);.    
de80: 64 69 73 70 6c 61 79 53 74 61 74 4c 69 6e 65 28  displayStatLine(
de90: 70 41 72 67 2c 20 22 4c 61 72 67 65 73 74 20 50  pArg, "Largest P
dea0: 63 61 63 68 65 20 41 6c 6c 6f 63 61 74 69 6f 6e  cache Allocation
deb0: 3a 22 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c 64  :",.       "%lld
dec0: 20 62 79 74 65 73 22 2c 20 53 51 4c 49 54 45 5f   bytes", SQLITE_
ded0: 53 54 41 54 55 53 5f 50 41 47 45 43 41 43 48 45  STATUS_PAGECACHE
dee0: 5f 53 49 5a 45 2c 20 62 52 65 73 65 74 29 3b 0a  _SIZE, bReset);.
def0: 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41  #ifdef YYTRACKMA
df00: 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 20 20  XSTACKDEPTH.    
df10: 64 69 73 70 6c 61 79 53 74 61 74 4c 69 6e 65 28  displayStatLine(
df20: 70 41 72 67 2c 20 22 44 65 65 70 65 73 74 20 50  pArg, "Deepest P
df30: 61 72 73 65 72 20 53 74 61 63 6b 3a 22 2c 0a 20  arser Stack:",. 
df40: 20 20 20 20 20 20 22 25 6c 6c 64 20 28 6d 61 78        "%lld (max
df50: 20 25 6c 6c 64 29 22 2c 20 53 51 4c 49 54 45 5f   %lld)", SQLITE_
df60: 53 54 41 54 55 53 5f 50 41 52 53 45 52 5f 53 54  STATUS_PARSER_ST
df70: 41 43 4b 2c 20 62 52 65 73 65 74 29 3b 0a 23 65  ACK, bReset);.#e
df80: 6e 64 69 66 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ndif.  }..  if( 
df90: 70 41 72 67 20 26 26 20 70 41 72 67 2d 3e 6f 75  pArg && pArg->ou
dfa0: 74 20 26 26 20 64 62 20 29 7b 0a 20 20 20 20 69  t && db ){.    i
dfb0: 66 28 20 70 41 72 67 2d 3e 73 68 65 6c 6c 46 6c  f( pArg->shellFl
dfc0: 67 73 20 26 20 53 48 46 4c 47 5f 4c 6f 6f 6b 61  gs & SHFLG_Looka
dfd0: 73 69 64 65 20 29 7b 0a 20 20 20 20 20 20 69 48  side ){.      iH
dfe0: 69 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31  iwtr = iCur = -1
dff0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
e000: 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51  db_status(db, SQ
e010: 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f  LITE_DBSTATUS_LO
e020: 4f 4b 41 53 49 44 45 5f 55 53 45 44 2c 0a 20 20  OKASIDE_USED,.  
e030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e040: 20 20 20 20 20 20 26 69 43 75 72 2c 20 26 69 48        &iCur, &iH
e050: 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20  iwtr, bReset);. 
e060: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
e070: 70 41 72 67 2d 3e 6f 75 74 2c 0a 20 20 20 20 20  pArg->out,.     
e080: 20 20 20 20 20 20 20 20 20 22 4c 6f 6f 6b 61 73           "Lookas
e090: 69 64 65 20 53 6c 6f 74 73 20 55 73 65 64 3a 20  ide Slots Used: 
e0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25                 %
e0b0: 64 20 28 6d 61 78 20 25 64 29 5c 6e 22 2c 0a 20  d (max %d)\n",. 
e0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 43 75               iCu
e0d0: 72 2c 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20  r, iHiwtr);.    
e0e0: 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61    sqlite3_db_sta
e0f0: 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44  tus(db, SQLITE_D
e100: 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44  BSTATUS_LOOKASID
e110: 45 5f 48 49 54 2c 0a 20 20 20 20 20 20 20 20 20  E_HIT,.         
e120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26                 &
e130: 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62  iCur, &iHiwtr, b
e140: 52 65 73 65 74 29 3b 0a 20 20 20 20 20 20 72 61  Reset);.      ra
e150: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
e160: 75 74 2c 20 22 53 75 63 63 65 73 73 66 75 6c 20  ut, "Successful 
e170: 6c 6f 6f 6b 61 73 69 64 65 20 61 74 74 65 6d 70  lookaside attemp
e180: 74 73 3a 20 20 20 20 20 20 20 25 64 5c 6e 22 2c  ts:       %d\n",
e190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
e1a0: 48 69 77 74 72 29 3b 0a 20 20 20 20 20 20 73 71  Hiwtr);.      sq
e1b0: 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28  lite3_db_status(
e1c0: 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41  db, SQLITE_DBSTA
e1d0: 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49  TUS_LOOKASIDE_MI
e1e0: 53 53 5f 53 49 5a 45 2c 0a 20 20 20 20 20 20 20  SS_SIZE,.       
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e200: 20 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c   &iCur, &iHiwtr,
e210: 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20 20 20   bReset);.      
e220: 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  raw_printf(pArg-
e230: 3e 6f 75 74 2c 20 22 4c 6f 6f 6b 61 73 69 64 65  >out, "Lookaside
e240: 20 66 61 69 6c 75 72 65 73 20 64 75 65 20 74 6f   failures due to
e250: 20 73 69 7a 65 3a 20 20 20 20 20 20 25 64 5c 6e   size:      %d\n
e260: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
e270: 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20 20 20   iHiwtr);.      
e280: 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75  sqlite3_db_statu
e290: 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53  s(db, SQLITE_DBS
e2a0: 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f  TATUS_LOOKASIDE_
e2b0: 4d 49 53 53 5f 46 55 4c 4c 2c 0a 20 20 20 20 20  MISS_FULL,.     
e2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2d0: 20 20 20 26 69 43 75 72 2c 20 26 69 48 69 77 74     &iCur, &iHiwt
e2e0: 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20  r, bReset);.    
e2f0: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72    raw_printf(pAr
e300: 67 2d 3e 6f 75 74 2c 20 22 4c 6f 6f 6b 61 73 69  g->out, "Lookasi
e310: 64 65 20 66 61 69 6c 75 72 65 73 20 64 75 65 20  de failures due 
e320: 74 6f 20 4f 4f 4d 3a 20 20 20 20 20 20 20 25 64  to OOM:       %d
e330: 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
e340: 20 20 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20     iHiwtr);.    
e350: 7d 0a 20 20 20 20 69 48 69 77 74 72 20 3d 20 69  }.    iHiwtr = i
e360: 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71  Cur = -1;.    sq
e370: 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28  lite3_db_status(
e380: 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41  db, SQLITE_DBSTA
e390: 54 55 53 5f 43 41 43 48 45 5f 55 53 45 44 2c 20  TUS_CACHE_USED, 
e3a0: 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20  &iCur, &iHiwtr, 
e3b0: 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77  bReset);.    raw
e3c0: 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
e3d0: 74 2c 20 22 50 61 67 65 72 20 48 65 61 70 20 55  t, "Pager Heap U
e3e0: 73 61 67 65 3a 20 20 20 20 20 20 20 20 20 20 20  sage:           
e3f0: 20 20 20 20 20 20 20 20 20 25 64 20 62 79 74 65           %d byte
e400: 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  s\n",.          
e410: 20 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69    iCur);.    iHi
e420: 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b  wtr = iCur = -1;
e430: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
e440: 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54  status(db, SQLIT
e450: 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45  E_DBSTATUS_CACHE
e460: 5f 48 49 54 2c 20 26 69 43 75 72 2c 20 26 69 48  _HIT, &iCur, &iH
e470: 69 77 74 72 2c 20 31 29 3b 0a 20 20 20 20 72 61  iwtr, 1);.    ra
e480: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
e490: 75 74 2c 20 22 50 61 67 65 20 63 61 63 68 65 20  ut, "Page cache 
e4a0: 68 69 74 73 3a 20 20 20 20 20 20 20 20 20 20 20  hits:           
e4b0: 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c            %d\n",
e4c0: 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69 77   iCur);.    iHiw
e4d0: 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a  tr = iCur = -1;.
e4e0: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
e4f0: 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45  tatus(db, SQLITE
e500: 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f  _DBSTATUS_CACHE_
e510: 4d 49 53 53 2c 20 26 69 43 75 72 2c 20 26 69 48  MISS, &iCur, &iH
e520: 69 77 74 72 2c 20 31 29 3b 0a 20 20 20 20 72 61  iwtr, 1);.    ra
e530: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
e540: 75 74 2c 20 22 50 61 67 65 20 63 61 63 68 65 20  ut, "Page cache 
e550: 6d 69 73 73 65 73 3a 20 20 20 20 20 20 20 20 20  misses:         
e560: 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c            %d\n",
e570: 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69 77   iCur);.    iHiw
e580: 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a  tr = iCur = -1;.
e590: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
e5a0: 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45  tatus(db, SQLITE
e5b0: 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f  _DBSTATUS_CACHE_
e5c0: 57 52 49 54 45 2c 20 26 69 43 75 72 2c 20 26 69  WRITE, &iCur, &i
e5d0: 48 69 77 74 72 2c 20 31 29 3b 0a 20 20 20 20 72  Hiwtr, 1);.    r
e5e0: 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
e5f0: 6f 75 74 2c 20 22 50 61 67 65 20 63 61 63 68 65  out, "Page cache
e600: 20 77 72 69 74 65 73 3a 20 20 20 20 20 20 20 20   writes:        
e610: 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22             %d\n"
e620: 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69  , iCur);.    iHi
e630: 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b  wtr = iCur = -1;
e640: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
e650: 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54  status(db, SQLIT
e660: 45 5f 44 42 53 54 41 54 55 53 5f 53 43 48 45 4d  E_DBSTATUS_SCHEM
e670: 41 5f 55 53 45 44 2c 20 26 69 43 75 72 2c 20 26  A_USED, &iCur, &
e680: 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b  iHiwtr, bReset);
e690: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
e6a0: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 53 63 68 65  pArg->out, "Sche
e6b0: 6d 61 20 48 65 61 70 20 55 73 61 67 65 3a 20 20  ma Heap Usage:  
e6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6d0: 20 25 64 20 62 79 74 65 73 5c 6e 22 2c 0a 20 20   %d bytes\n",.  
e6e0: 20 20 20 20 20 20 20 20 20 20 69 43 75 72 29 3b            iCur);
e6f0: 0a 20 20 20 20 69 48 69 77 74 72 20 3d 20 69 43  .    iHiwtr = iC
e700: 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c  ur = -1;.    sql
e710: 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64  ite3_db_status(d
e720: 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54  b, SQLITE_DBSTAT
e730: 55 53 5f 53 54 4d 54 5f 55 53 45 44 2c 20 26 69  US_STMT_USED, &i
e740: 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52  Cur, &iHiwtr, bR
e750: 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70  eset);.    raw_p
e760: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
e770: 20 22 53 74 61 74 65 6d 65 6e 74 20 48 65 61 70   "Statement Heap
e780: 2f 4c 6f 6f 6b 61 73 69 64 65 20 55 73 61 67 65  /Lookaside Usage
e790: 3a 20 20 20 20 20 20 25 64 20 62 79 74 65 73 5c  :      %d bytes\
e7a0: 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n",.            
e7b0: 69 43 75 72 29 3b 0a 20 20 7d 0a 0a 20 20 69 66  iCur);.  }..  if
e7c0: 28 20 70 41 72 67 20 26 26 20 70 41 72 67 2d 3e  ( pArg && pArg->
e7d0: 6f 75 74 20 26 26 20 64 62 20 26 26 20 70 41 72  out && db && pAr
e7e0: 67 2d 3e 70 53 74 6d 74 20 29 7b 0a 20 20 20 20  g->pStmt ){.    
e7f0: 69 43 75 72 20 3d 20 73 71 6c 69 74 65 33 5f 73  iCur = sqlite3_s
e800: 74 6d 74 5f 73 74 61 74 75 73 28 70 41 72 67 2d  tmt_status(pArg-
e810: 3e 70 53 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53  >pStmt, SQLITE_S
e820: 54 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c 53 43  TMTSTATUS_FULLSC
e830: 41 4e 5f 53 54 45 50 2c 0a 20 20 20 20 20 20 20  AN_STEP,.       
e840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e850: 20 20 20 20 20 20 20 20 62 52 65 73 65 74 29 3b          bReset);
e860: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
e870: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 46 75 6c 6c  pArg->out, "Full
e880: 73 63 61 6e 20 53 74 65 70 73 3a 20 20 20 20 20  scan Steps:     
e890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8a0: 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20   %d\n", iCur);. 
e8b0: 20 20 20 69 43 75 72 20 3d 20 73 71 6c 69 74 65     iCur = sqlite
e8c0: 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 70 41  3_stmt_status(pA
e8d0: 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51 4c 49 54  rg->pStmt, SQLIT
e8e0: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52  E_STMTSTATUS_SOR
e8f0: 54 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20  T, bReset);.    
e900: 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  raw_printf(pArg-
e910: 3e 6f 75 74 2c 20 22 53 6f 72 74 20 4f 70 65 72  >out, "Sort Oper
e920: 61 74 69 6f 6e 73 3a 20 20 20 20 20 20 20 20 20  ations:         
e930: 20 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e              %d\n
e940: 22 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69 43  ", iCur);.    iC
e950: 75 72 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d  ur = sqlite3_stm
e960: 74 5f 73 74 61 74 75 73 28 70 41 72 67 2d 3e 70  t_status(pArg->p
e970: 53 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53 54 4d  Stmt, SQLITE_STM
e980: 54 53 54 41 54 55 53 5f 41 55 54 4f 49 4e 44 45  TSTATUS_AUTOINDE
e990: 58 2c 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72  X,bReset);.    r
e9a0: 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
e9b0: 6f 75 74 2c 20 22 41 75 74 6f 69 6e 64 65 78 20  out, "Autoindex 
e9c0: 49 6e 73 65 72 74 73 3a 20 20 20 20 20 20 20 20  Inserts:        
e9d0: 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22             %d\n"
e9e0: 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69 43 75  , iCur);.    iCu
e9f0: 72 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  r = sqlite3_stmt
ea00: 5f 73 74 61 74 75 73 28 70 41 72 67 2d 3e 70 53  _status(pArg->pS
ea10: 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53 54 4d 54  tmt, SQLITE_STMT
ea20: 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 2c 20  STATUS_VM_STEP, 
ea30: 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77  bReset);.    raw
ea40: 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
ea50: 74 2c 20 22 56 69 72 74 75 61 6c 20 4d 61 63 68  t, "Virtual Mach
ea60: 69 6e 65 20 53 74 65 70 73 3a 20 20 20 20 20 20  ine Steps:      
ea70: 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20           %d\n", 
ea80: 69 43 75 72 29 3b 0a 20 20 7d 0a 0a 23 69 66 64  iCur);.  }..#ifd
ea90: 65 66 20 5f 5f 6c 69 6e 75 78 5f 5f 0a 20 20 64  ef __linux__.  d
eaa0: 69 73 70 6c 61 79 4c 69 6e 75 78 49 6f 53 74 61  isplayLinuxIoSta
eab0: 74 73 28 70 41 72 67 2d 3e 6f 75 74 29 3b 0a 23  ts(pArg->out);.#
eac0: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 44 6f 20 6e  endif..  /* Do n
ead0: 6f 74 20 72 65 6d 6f 76 65 20 74 68 69 73 20 6d  ot remove this m
eae0: 61 63 68 69 6e 65 20 72 65 61 64 61 62 6c 65 20  achine readable 
eaf0: 63 6f 6d 6d 65 6e 74 3a 20 65 78 74 72 61 2d 73  comment: extra-s
eb00: 74 61 74 73 2d 6f 75 74 70 75 74 2d 68 65 72 65  tats-output-here
eb10: 20 2a 2f 0a 0a 20 20 72 65 74 75 72 6e 20 30 3b   */..  return 0;
eb20: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 70 6c 61  .}../*.** Displa
eb30: 79 20 73 63 61 6e 20 73 74 61 74 73 2e 0a 2a 2f  y scan stats..*/
eb40: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 64 69 73  .static void dis
eb50: 70 6c 61 79 5f 73 63 61 6e 73 74 61 74 73 28 0a  play_scanstats(.
eb60: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20    sqlite3 *db,  
eb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb80: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74 6f    /* Database to
eb90: 20 71 75 65 72 79 20 2a 2f 0a 20 20 53 68 65 6c   query */.  Shel
eba0: 6c 53 74 61 74 65 20 2a 70 41 72 67 20 20 20 20  lState *pArg    
ebb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
ebc0: 6f 69 6e 74 65 72 20 74 6f 20 53 68 65 6c 6c 53  ointer to ShellS
ebd0: 74 61 74 65 20 2a 2f 0a 29 7b 0a 23 69 66 6e 64  tate */.){.#ifnd
ebe0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
ebf0: 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
ec00: 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  .  UNUSED_PARAME
ec10: 54 45 52 28 64 62 29 3b 0a 20 20 55 4e 55 53 45  TER(db);.  UNUSE
ec20: 44 5f 50 41 52 41 4d 45 54 45 52 28 70 41 72 67  D_PARAMETER(pArg
ec30: 29 3b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 69  );.#else.  int i
ec40: 2c 20 6b 2c 20 6e 2c 20 6d 78 3b 0a 20 20 72 61  , k, n, mx;.  ra
ec50: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
ec60: 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 20 73 63  ut, "-------- sc
ec70: 61 6e 73 74 61 74 73 20 2d 2d 2d 2d 2d 2d 2d 2d  anstats --------
ec80: 5c 6e 22 29 3b 0a 20 20 6d 78 20 3d 20 30 3b 0a  \n");.  mx = 0;.
ec90: 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 3d 6d 78    for(k=0; k<=mx
eca0: 3b 20 6b 2b 2b 29 7b 0a 20 20 20 20 64 6f 75 62  ; k++){.    doub
ecb0: 6c 65 20 72 45 73 74 4c 6f 6f 70 20 3d 20 31 2e  le rEstLoop = 1.
ecc0: 30 3b 0a 20 20 20 20 66 6f 72 28 69 3d 6e 3d 30  0;.    for(i=n=0
ecd0: 3b 20 31 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ; 1; i++){.     
ece0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
ecf0: 20 3d 20 70 41 72 67 2d 3e 70 53 74 6d 74 3b 0a   = pArg->pStmt;.
ed00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
ed10: 74 36 34 20 6e 4c 6f 6f 70 2c 20 6e 56 69 73 69  t64 nLoop, nVisi
ed20: 74 3b 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20  t;.      double 
ed30: 72 45 73 74 3b 0a 20 20 20 20 20 20 69 6e 74 20  rEst;.      int 
ed40: 69 53 69 64 3b 0a 20 20 20 20 20 20 63 6f 6e 73  iSid;.      cons
ed50: 74 20 63 68 61 72 20 2a 7a 45 78 70 6c 61 69 6e  t char *zExplain
ed60: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
ed70: 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61  te3_stmt_scansta
ed80: 74 75 73 28 70 2c 20 69 2c 20 53 51 4c 49 54 45  tus(p, i, SQLITE
ed90: 5f 53 43 41 4e 53 54 41 54 5f 4e 4c 4f 4f 50 2c  _SCANSTAT_NLOOP,
eda0: 20 28 76 6f 69 64 2a 29 26 6e 4c 6f 6f 70 29 20   (void*)&nLoop) 
edb0: 29 7b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  ){.        break
edc0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
edd0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61  sqlite3_stmt_sca
ede0: 6e 73 74 61 74 75 73 28 70 2c 20 69 2c 20 53 51  nstatus(p, i, SQ
edf0: 4c 49 54 45 5f 53 43 41 4e 53 54 41 54 5f 53 45  LITE_SCANSTAT_SE
ee00: 4c 45 43 54 49 44 2c 20 28 76 6f 69 64 2a 29 26  LECTID, (void*)&
ee10: 69 53 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28  iSid);.      if(
ee20: 20 69 53 69 64 3e 6d 78 20 29 20 6d 78 20 3d 20   iSid>mx ) mx = 
ee30: 69 53 69 64 3b 0a 20 20 20 20 20 20 69 66 28 20  iSid;.      if( 
ee40: 69 53 69 64 21 3d 6b 20 29 20 63 6f 6e 74 69 6e  iSid!=k ) contin
ee50: 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 3d  ue;.      if( n=
ee60: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 45  =0 ){.        rE
ee70: 73 74 4c 6f 6f 70 20 3d 20 28 64 6f 75 62 6c 65  stLoop = (double
ee80: 29 6e 4c 6f 6f 70 3b 0a 20 20 20 20 20 20 20 20  )nLoop;.        
ee90: 69 66 28 20 6b 3e 30 20 29 20 72 61 77 5f 70 72  if( k>0 ) raw_pr
eea0: 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20  intf(pArg->out, 
eeb0: 22 2d 2d 2d 2d 2d 2d 2d 2d 20 73 75 62 71 75 65  "-------- subque
eec0: 72 79 20 25 64 20 2d 2d 2d 2d 2d 2d 2d 5c 6e 22  ry %d -------\n"
eed0: 2c 20 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , k);.      }.  
eee0: 20 20 20 20 6e 2b 2b 3b 0a 20 20 20 20 20 20 73      n++;.      s
eef0: 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e  qlite3_stmt_scan
ef00: 73 74 61 74 75 73 28 70 2c 20 69 2c 20 53 51 4c  status(p, i, SQL
ef10: 49 54 45 5f 53 43 41 4e 53 54 41 54 5f 4e 56 49  ITE_SCANSTAT_NVI
ef20: 53 49 54 2c 20 28 76 6f 69 64 2a 29 26 6e 56 69  SIT, (void*)&nVi
ef30: 73 69 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  sit);.      sqli
ef40: 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61  te3_stmt_scansta
ef50: 74 75 73 28 70 2c 20 69 2c 20 53 51 4c 49 54 45  tus(p, i, SQLITE
ef60: 5f 53 43 41 4e 53 54 41 54 5f 45 53 54 2c 20 28  _SCANSTAT_EST, (
ef70: 76 6f 69 64 2a 29 26 72 45 73 74 29 3b 0a 20 20  void*)&rEst);.  
ef80: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74      sqlite3_stmt
ef90: 5f 73 63 61 6e 73 74 61 74 75 73 28 70 2c 20 69  _scanstatus(p, i
efa0: 2c 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41  , SQLITE_SCANSTA
efb0: 54 5f 45 58 50 4c 41 49 4e 2c 20 28 76 6f 69 64  T_EXPLAIN, (void
efc0: 2a 29 26 7a 45 78 70 6c 61 69 6e 29 3b 0a 20 20  *)&zExplain);.  
efd0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
efe0: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4c 6f 6f 70  pArg->out, "Loop
eff0: 20 25 32 64 3a 20 25 73 5c 6e 22 2c 20 6e 2c 20   %2d: %s\n", n, 
f000: 7a 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20 20 20  zExplain);.     
f010: 20 72 45 73 74 4c 6f 6f 70 20 2a 3d 20 72 45 73   rEstLoop *= rEs
f020: 74 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  t;.      raw_pri
f030: 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 0a 20  ntf(pArg->out,. 
f040: 20 20 20 20 20 20 20 20 20 22 20 20 20 20 20 20           "      
f050: 20 20 20 6e 4c 6f 6f 70 3d 25 2d 38 6c 6c 64 20     nLoop=%-8lld 
f060: 6e 52 6f 77 3d 25 2d 38 6c 6c 64 20 65 73 74 52  nRow=%-8lld estR
f070: 6f 77 3d 25 2d 38 6c 6c 64 20 65 73 74 52 6f 77  ow=%-8lld estRow
f080: 2f 4c 6f 6f 70 3d 25 2d 38 67 5c 6e 22 2c 0a 20  /Loop=%-8g\n",. 
f090: 20 20 20 20 20 20 20 20 20 6e 4c 6f 6f 70 2c 20           nLoop, 
f0a0: 6e 56 69 73 69 74 2c 20 28 73 71 6c 69 74 65 33  nVisit, (sqlite3
f0b0: 5f 69 6e 74 36 34 29 28 72 45 73 74 4c 6f 6f 70  _int64)(rEstLoop
f0c0: 2b 30 2e 35 29 2c 20 72 45 73 74 0a 20 20 20 20  +0.5), rEst.    
f0d0: 20 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20    );.    }.  }. 
f0e0: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67   raw_printf(pArg
f0f0: 2d 3e 6f 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d  ->out, "--------
f100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
f110: 2d 2d 2d 5c 6e 22 29 3b 0a 23 65 6e 64 69 66 0a  ---\n");.#endif.
f120: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65 74  }../*.** Paramet
f130: 65 72 20 61 7a 41 72 72 61 79 20 70 6f 69 6e 74  er azArray point
f140: 73 20 74 6f 20 61 20 7a 65 72 6f 2d 74 65 72 6d  s to a zero-term
f150: 69 6e 61 74 65 64 20 61 72 72 61 79 20 6f 66 20  inated array of 
f160: 73 74 72 69 6e 67 73 2e 20 7a 53 74 72 0a 2a 2a  strings. zStr.**
f170: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 73 69 6e   points to a sin
f180: 67 6c 65 20 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  gle nul-terminat
f190: 65 64 20 73 74 72 69 6e 67 2e 20 52 65 74 75 72  ed string. Retur
f1a0: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 7a 53  n non-zero if zS
f1b0: 74 72 0a 2a 2a 20 69 73 20 65 71 75 61 6c 2c 20  tr.** is equal, 
f1c0: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 73 74 72  according to str
f1d0: 63 6d 70 28 29 2c 20 74 6f 20 61 6e 79 20 6f 66  cmp(), to any of
f1e0: 20 74 68 65 20 73 74 72 69 6e 67 73 20 69 6e 20   the strings in 
f1f0: 74 68 65 20 61 72 72 61 79 2e 0a 2a 2a 20 4f 74  the array..** Ot
f200: 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20  herwise, return 
f210: 7a 65 72 6f 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  zero..*/.static 
f220: 69 6e 74 20 73 74 72 5f 69 6e 5f 61 72 72 61 79  int str_in_array
f230: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74  (const char *zSt
f240: 72 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a  r, const char **
f250: 61 7a 41 72 72 61 79 29 7b 0a 20 20 69 6e 74 20  azArray){.  int 
f260: 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 61 7a  i;.  for(i=0; az
f270: 41 72 72 61 79 5b 69 5d 3b 20 69 2b 2b 29 7b 0a  Array[i]; i++){.
f280: 20 20 20 20 69 66 28 20 30 3d 3d 73 74 72 63 6d      if( 0==strcm
f290: 70 28 7a 53 74 72 2c 20 61 7a 41 72 72 61 79 5b  p(zStr, azArray[
f2a0: 69 5d 29 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  i]) ) return 1;.
f2b0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
f2c0: 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70  }../*.** If comp
f2d0: 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 20 70  iled statement p
f2e0: 53 71 6c 20 61 70 70 65 61 72 73 20 74 6f 20 62  Sql appears to b
f2f0: 65 20 61 6e 20 45 58 50 4c 41 49 4e 20 73 74 61  e an EXPLAIN sta
f300: 74 65 6d 65 6e 74 2c 20 61 6c 6c 6f 63 61 74 65  tement, allocate
f310: 0a 2a 2a 20 61 6e 64 20 70 6f 70 75 6c 61 74 65  .** and populate
f320: 20 74 68 65 20 53 68 65 6c 6c 53 74 61 74 65 2e   the ShellState.
f330: 61 69 49 6e 64 65 6e 74 5b 5d 20 61 72 72 61 79  aiIndent[] array
f340: 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72   with the number
f350: 20 6f 66 0a 2a 2a 20 73 70 61 63 65 73 20 65 61   of.** spaces ea
f360: 63 68 20 6f 70 63 6f 64 65 20 73 68 6f 75 6c 64  ch opcode should
f370: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 65 66   be indented bef
f380: 6f 72 65 20 69 74 20 69 73 20 6f 75 74 70 75 74  ore it is output
f390: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 64 65  ..**.** The inde
f3a0: 6e 74 69 6e 67 20 72 75 6c 65 73 20 61 72 65 3a  nting rules are:
f3b0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 2a 20 46 6f 72  .**.**     * For
f3c0: 20 65 61 63 68 20 22 4e 65 78 74 22 2c 20 22 50   each "Next", "P
f3d0: 72 65 76 22 2c 20 22 56 4e 65 78 74 22 20 6f 72  rev", "VNext" or
f3e0: 20 22 56 50 72 65 76 22 20 69 6e 73 74 72 75 63   "VPrev" instruc
f3f0: 74 69 6f 6e 2c 20 69 6e 64 65 6e 74 0a 2a 2a 20  tion, indent.** 
f400: 20 20 20 20 20 20 61 6c 6c 20 6f 70 63 6f 64 65        all opcode
f410: 73 20 74 68 61 74 20 6f 63 63 75 72 20 62 65 74  s that occur bet
f420: 77 65 65 6e 20 74 68 65 20 70 32 20 6a 75 6d 70  ween the p2 jump
f430: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 61 6e 64   destination and
f440: 20 74 68 65 20 6f 70 63 6f 64 65 0a 2a 2a 20 20   the opcode.**  
f450: 20 20 20 20 20 69 74 73 65 6c 66 20 62 79 20 32       itself by 2
f460: 20 73 70 61 63 65 73 2e 0a 2a 2a 0a 2a 2a 20 20   spaces..**.**  
f470: 20 20 20 2a 20 46 6f 72 20 65 61 63 68 20 22 47     * For each "G
f480: 6f 74 6f 22 2c 20 69 66 20 74 68 65 20 6a 75 6d  oto", if the jum
f490: 70 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 73  p destination is
f4a0: 20 65 61 72 6c 69 65 72 20 69 6e 20 74 68 65 20   earlier in the 
f4b0: 70 72 6f 67 72 61 6d 0a 2a 2a 20 20 20 20 20 20  program.**      
f4c0: 20 61 6e 64 20 65 6e 64 73 20 6f 6e 20 6f 6e 65   and ends on one
f4d0: 20 6f 66 3a 0a 2a 2a 20 20 20 20 20 20 20 20 20   of:.**         
f4e0: 20 59 69 65 6c 64 20 20 53 65 65 6b 47 74 20 20   Yield  SeekGt  
f4f0: 53 65 65 6b 4c 74 20 20 52 6f 77 53 65 74 52 65  SeekLt  RowSetRe
f500: 61 64 20 20 52 65 77 69 6e 64 0a 2a 2a 20 20 20  ad  Rewind.**   
f510: 20 20 20 20 6f 72 20 69 66 20 74 68 65 20 50 31      or if the P1
f520: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6f 6e   parameter is on
f530: 65 20 69 6e 73 74 65 61 64 20 6f 66 20 7a 65 72  e instead of zer
f540: 6f 2c 0a 2a 2a 20 20 20 20 20 20 20 74 68 65 6e  o,.**       then
f550: 20 69 6e 64 65 6e 74 20 61 6c 6c 20 6f 70 63 6f   indent all opco
f560: 64 65 73 20 62 65 74 77 65 65 6e 20 74 68 65 20  des between the 
f570: 65 61 72 6c 69 65 72 20 69 6e 73 74 72 75 63 74  earlier instruct
f580: 69 6f 6e 0a 2a 2a 20 20 20 20 20 20 20 61 6e 64  ion.**       and
f590: 20 22 47 6f 74 6f 22 20 62 79 20 32 20 73 70 61   "Goto" by 2 spa
f5a0: 63 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ces..*/.static v
f5b0: 6f 69 64 20 65 78 70 6c 61 69 6e 5f 64 61 74 61  oid explain_data
f5c0: 5f 70 72 65 70 61 72 65 28 53 68 65 6c 6c 53 74  _prepare(ShellSt
f5d0: 61 74 65 20 2a 70 2c 20 73 71 6c 69 74 65 33 5f  ate *p, sqlite3_
f5e0: 73 74 6d 74 20 2a 70 53 71 6c 29 7b 0a 20 20 63  stmt *pSql){.  c
f5f0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b  onst char *zSql;
f600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f610: 2a 20 54 68 65 20 74 65 78 74 20 6f 66 20 74 68  * The text of th
f620: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
f630: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
f640: 2a 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *z;             
f650: 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20       /* Used to 
f660: 63 68 65 63 6b 20 69 66 20 74 68 69 73 20 69 73  check if this is
f670: 20 61 6e 20 45 58 50 4c 41 49 4e 20 2a 2f 0a 20   an EXPLAIN */. 
f680: 20 69 6e 74 20 2a 61 62 59 69 65 6c 64 20 3d 20   int *abYield = 
f690: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0;              
f6a0: 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 70 20 69   /* True if op i
f6b0: 73 20 61 6e 20 4f 50 5f 59 69 65 6c 64 20 2a 2f  s an OP_Yield */
f6c0: 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 20 3d 20  .  int nAlloc = 
f6d0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0;              
f6e0: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
f6f0: 73 69 7a 65 20 6f 66 20 70 2d 3e 61 69 49 6e 64  size of p->aiInd
f700: 65 6e 74 5b 5d 2c 20 61 62 59 69 65 6c 64 20 2a  ent[], abYield *
f710: 2f 0a 20 20 69 6e 74 20 69 4f 70 3b 20 20 20 20  /.  int iOp;    
f720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f730: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
f740: 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 2d 3e  operation in p->
f750: 61 69 49 6e 64 65 6e 74 5b 5d 20 2a 2f 0a 0a 20  aiIndent[] */.. 
f760: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 4e   const char *azN
f770: 65 78 74 5b 5d 20 3d 20 7b 20 22 4e 65 78 74 22  ext[] = { "Next"
f780: 2c 20 22 50 72 65 76 22 2c 20 22 56 50 72 65 76  , "Prev", "VPrev
f790: 22 2c 20 22 56 4e 65 78 74 22 2c 20 22 53 6f 72  ", "VNext", "Sor
f7a0: 74 65 72 4e 65 78 74 22 2c 0a 20 20 20 20 20 20  terNext",.      
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7c0: 20 20 20 20 20 22 4e 65 78 74 49 66 4f 70 65 6e       "NextIfOpen
f7d0: 22 2c 20 22 50 72 65 76 49 66 4f 70 65 6e 22 2c  ", "PrevIfOpen",
f7e0: 20 30 20 7d 3b 0a 20 20 63 6f 6e 73 74 20 63 68   0 };.  const ch
f7f0: 61 72 20 2a 61 7a 59 69 65 6c 64 5b 5d 20 3d 20  ar *azYield[] = 
f800: 7b 20 22 59 69 65 6c 64 22 2c 20 22 53 65 65 6b  { "Yield", "Seek
f810: 4c 54 22 2c 20 22 53 65 65 6b 47 54 22 2c 20 22  LT", "SeekGT", "
f820: 52 6f 77 53 65 74 52 65 61 64 22 2c 0a 20 20 20  RowSetRead",.   
f830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f840: 20 20 20 20 20 20 20 20 20 22 52 65 77 69 6e 64           "Rewind
f850: 22 2c 20 30 20 7d 3b 0a 20 20 63 6f 6e 73 74 20  ", 0 };.  const 
f860: 63 68 61 72 20 2a 61 7a 47 6f 74 6f 5b 5d 20 3d  char *azGoto[] =
f870: 20 7b 20 22 47 6f 74 6f 22 2c 20 30 20 7d 3b 0a   { "Goto", 0 };.
f880: 0a 20 20 2f 2a 20 54 72 79 20 74 6f 20 66 69 67  .  /* Try to fig
f890: 75 72 65 20 6f 75 74 20 69 66 20 74 68 69 73 20  ure out if this 
f8a0: 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 45 58 50  is really an EXP
f8b0: 4c 41 49 4e 20 73 74 61 74 65 6d 65 6e 74 2e 20  LAIN statement. 
f8c0: 49 66 20 74 68 69 73 0a 20 20 2a 2a 20 63 61 6e  If this.  ** can
f8d0: 6e 6f 74 20 62 65 20 76 65 72 69 66 69 65 64 2c  not be verified,
f8e0: 20 72 65 74 75 72 6e 20 65 61 72 6c 79 2e 20 20   return early.  
f8f0: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
f900: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53  _column_count(pS
f910: 71 6c 29 21 3d 38 20 29 7b 0a 20 20 20 20 70 2d  ql)!=8 ){.    p-
f920: 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64 65  >cMode = p->mode
f930: 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20  ;.    return;.  
f940: 7d 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74  }.  zSql = sqlit
f950: 65 33 5f 73 71 6c 28 70 53 71 6c 29 3b 0a 20 20  e3_sql(pSql);.  
f960: 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 20 72 65  if( zSql==0 ) re
f970: 74 75 72 6e 3b 0a 20 20 66 6f 72 28 7a 3d 7a 53  turn;.  for(z=zS
f980: 71 6c 3b 20 2a 7a 3d 3d 27 20 27 20 7c 7c 20 2a  ql; *z==' ' || *
f990: 7a 3d 3d 27 5c 74 27 20 7c 7c 20 2a 7a 3d 3d 27  z=='\t' || *z=='
f9a0: 5c 6e 27 20 7c 7c 20 2a 7a 3d 3d 27 5c 66 27 20  \n' || *z=='\f' 
f9b0: 7c 7c 20 2a 7a 3d 3d 27 5c 72 27 3b 20 7a 2b 2b  || *z=='\r'; z++
f9c0: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
f9d0: 5f 73 74 72 6e 69 63 6d 70 28 7a 2c 20 22 65 78  _strnicmp(z, "ex
f9e0: 70 6c 61 69 6e 22 2c 20 37 29 20 29 7b 0a 20 20  plain", 7) ){.  
f9f0: 20 20 70 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e    p->cMode = p->
fa00: 6d 6f 64 65 3b 0a 20 20 20 20 72 65 74 75 72 6e  mode;.    return
fa10: 3b 0a 20 20 7d 0a 0a 20 20 66 6f 72 28 69 4f 70  ;.  }..  for(iOp
fa20: 3d 30 3b 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d  =0; SQLITE_ROW==
fa30: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 71  sqlite3_step(pSq
fa40: 6c 29 3b 20 69 4f 70 2b 2b 29 7b 0a 20 20 20 20  l); iOp++){.    
fa50: 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 69  int i;.    int i
fa60: 41 64 64 72 20 3d 20 73 71 6c 69 74 65 33 5f 63  Addr = sqlite3_c
fa70: 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 71 6c 2c 20  olumn_int(pSql, 
fa80: 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68  0);.    const ch
fa90: 61 72 20 2a 7a 4f 70 20 3d 20 28 63 6f 6e 73 74  ar *zOp = (const
faa0: 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63   char*)sqlite3_c
fab0: 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c  olumn_text(pSql,
fac0: 20 31 29 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 74   1);..    /* Set
fad0: 20 70 32 20 74 6f 20 74 68 65 20 50 32 20 66 69   p2 to the P2 fi
fae0: 65 6c 64 20 6f 66 20 74 68 65 20 63 75 72 72 65  eld of the curre
faf0: 6e 74 20 6f 70 63 6f 64 65 2e 20 54 68 65 6e 2c  nt opcode. Then,
fb00: 20 61 73 73 75 6d 69 6e 67 20 74 68 61 74 0a 20   assuming that. 
fb10: 20 20 20 2a 2a 20 70 32 20 69 73 20 61 6e 20 69     ** p2 is an i
fb20: 6e 73 74 72 75 63 74 69 6f 6e 20 61 64 64 72 65  nstruction addre
fb30: 73 73 2c 20 73 65 74 20 76 61 72 69 61 62 6c 65  ss, set variable
fb40: 20 70 32 6f 70 20 74 6f 20 74 68 65 20 69 6e 64   p2op to the ind
fb50: 65 78 20 6f 66 20 74 68 61 74 0a 20 20 20 20 2a  ex of that.    *
fb60: 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  * instruction in
fb70: 20 74 68 65 20 61 69 49 6e 64 65 6e 74 5b 5d 20   the aiIndent[] 
fb80: 61 72 72 61 79 2e 20 70 32 20 61 6e 64 20 70 32  array. p2 and p2
fb90: 6f 70 20 6d 61 79 20 62 65 20 64 69 66 66 65 72  op may be differ
fba0: 65 6e 74 20 69 66 0a 20 20 20 20 2a 2a 20 74 68  ent if.    ** th
fbb0: 65 20 63 75 72 72 65 6e 74 20 69 6e 73 74 72 75  e current instru
fbc0: 63 74 69 6f 6e 20 69 73 20 70 61 72 74 20 6f 66  ction is part of
fbd0: 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 67   a sub-program g
fbe0: 65 6e 65 72 61 74 65 64 20 62 79 20 61 6e 0a 20  enerated by an. 
fbf0: 20 20 20 2a 2a 20 53 51 4c 20 74 72 69 67 67 65     ** SQL trigge
fc00: 72 20 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79  r or foreign key
fc10: 2e 20 20 2a 2f 0a 20 20 20 20 69 6e 74 20 70 32  .  */.    int p2
fc20: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
fc30: 6e 5f 69 6e 74 28 70 53 71 6c 2c 20 33 29 3b 0a  n_int(pSql, 3);.
fc40: 20 20 20 20 69 6e 74 20 70 32 6f 70 20 3d 20 28      int p2op = (
fc50: 70 32 20 2b 20 28 69 4f 70 2d 69 41 64 64 72 29  p2 + (iOp-iAddr)
fc60: 29 3b 0a 0a 20 20 20 20 2f 2a 20 47 72 6f 77 20  );..    /* Grow 
fc70: 74 68 65 20 70 2d 3e 61 69 49 6e 64 65 6e 74 20  the p->aiIndent 
fc80: 61 72 72 61 79 20 61 73 20 72 65 71 75 69 72 65  array as require
fc90: 64 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 4f 70  d */.    if( iOp
fca0: 3e 3d 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20  >=nAlloc ){.    
fcb0: 20 20 69 66 28 20 69 4f 70 3d 3d 30 20 29 7b 0a    if( iOp==0 ){.
fcc0: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 66 75          /* Do fu
fcd0: 72 74 68 65 72 20 76 65 72 66 69 63 61 74 69 6f  rther verficatio
fce0: 6e 20 74 68 61 74 20 74 68 69 73 20 69 73 20 65  n that this is e
fcf0: 78 70 6c 61 69 6e 20 6f 75 74 70 75 74 2e 20 20  xplain output.  
fd00: 41 62 6f 72 74 20 69 66 0a 20 20 20 20 20 20 20  Abort if.       
fd10: 20 2a 2a 20 69 74 20 69 73 20 6e 6f 74 20 2a 2f   ** it is not */
fd20: 0a 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20  .        static 
fd30: 63 6f 6e 73 74 20 63 68 61 72 20 2a 65 78 70 6c  const char *expl
fd40: 61 69 6e 43 6f 6c 73 5b 5d 20 3d 20 7b 0a 20 20  ainCols[] = {.  
fd50: 20 20 20 20 20 20 20 20 20 22 61 64 64 72 22 2c           "addr",
fd60: 20 22 6f 70 63 6f 64 65 22 2c 20 22 70 31 22 2c   "opcode", "p1",
fd70: 20 22 70 32 22 2c 20 22 70 33 22 2c 20 22 70 34   "p2", "p3", "p4
fd80: 22 2c 20 22 70 35 22 2c 20 22 63 6f 6d 6d 65 6e  ", "p5", "commen
fd90: 74 22 20 7d 3b 0a 20 20 20 20 20 20 20 20 69 6e  t" };.        in
fda0: 74 20 6a 6a 3b 0a 20 20 20 20 20 20 20 20 66 6f  t jj;.        fo
fdb0: 72 28 6a 6a 3d 30 3b 20 6a 6a 3c 41 72 72 61 79  r(jj=0; jj<Array
fdc0: 53 69 7a 65 28 65 78 70 6c 61 69 6e 43 6f 6c 73  Size(explainCols
fdd0: 29 3b 20 6a 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  ); jj++){.      
fde0: 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 73      if( strcmp(s
fdf0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
fe00: 6d 65 28 70 53 71 6c 2c 6a 6a 29 2c 65 78 70 6c  me(pSql,jj),expl
fe10: 61 69 6e 43 6f 6c 73 5b 6a 6a 5d 29 21 3d 30 20  ainCols[jj])!=0 
fe20: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ){.            p
fe30: 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64  ->cMode = p->mod
fe40: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  e;.            s
fe50: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70 53 71  qlite3_reset(pSq
fe60: 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  l);.            
fe70: 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
fe80: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
fe90: 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 41 6c 6c      }.      nAll
fea0: 6f 63 20 2b 3d 20 31 30 30 3b 0a 20 20 20 20 20  oc += 100;.     
feb0: 20 70 2d 3e 61 69 49 6e 64 65 6e 74 20 3d 20 28   p->aiIndent = (
fec0: 69 6e 74 2a 29 73 71 6c 69 74 65 33 5f 72 65 61  int*)sqlite3_rea
fed0: 6c 6c 6f 63 36 34 28 70 2d 3e 61 69 49 6e 64 65  lloc64(p->aiInde
fee0: 6e 74 2c 20 6e 41 6c 6c 6f 63 2a 73 69 7a 65 6f  nt, nAlloc*sizeo
fef0: 66 28 69 6e 74 29 29 3b 0a 20 20 20 20 20 20 61  f(int));.      a
ff00: 62 59 69 65 6c 64 20 3d 20 28 69 6e 74 2a 29 73  bYield = (int*)s
ff10: 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 36 34  qlite3_realloc64
ff20: 28 61 62 59 69 65 6c 64 2c 20 6e 41 6c 6c 6f 63  (abYield, nAlloc
ff30: 2a 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0a 20  *sizeof(int));. 
ff40: 20 20 20 7d 0a 20 20 20 20 61 62 59 69 65 6c 64     }.    abYield
ff50: 5b 69 4f 70 5d 20 3d 20 73 74 72 5f 69 6e 5f 61  [iOp] = str_in_a
ff60: 72 72 61 79 28 7a 4f 70 2c 20 61 7a 59 69 65 6c  rray(zOp, azYiel
ff70: 64 29 3b 0a 20 20 20 20 70 2d 3e 61 69 49 6e 64  d);.    p->aiInd
ff80: 65 6e 74 5b 69 4f 70 5d 20 3d 20 30 3b 0a 20 20  ent[iOp] = 0;.  
ff90: 20 20 70 2d 3e 6e 49 6e 64 65 6e 74 20 3d 20 69    p->nIndent = i
ffa0: 4f 70 2b 31 3b 0a 0a 20 20 20 20 69 66 28 20 73  Op+1;..    if( s
ffb0: 74 72 5f 69 6e 5f 61 72 72 61 79 28 7a 4f 70 2c  tr_in_array(zOp,
ffc0: 20 61 7a 4e 65 78 74 29 20 29 7b 0a 20 20 20 20   azNext) ){.    
ffd0: 20 20 66 6f 72 28 69 3d 70 32 6f 70 3b 20 69 3c    for(i=p2op; i<
ffe0: 69 4f 70 3b 20 69 2b 2b 29 20 70 2d 3e 61 69 49  iOp; i++) p->aiI
fff0: 6e 64 65 6e 74 5b 69 5d 20 2b 3d 20 32 3b 0a 20  ndent[i] += 2;. 
10000 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 74 72     }.    if( str
10010 5f 69 6e 5f 61 72 72 61 79 28 7a 4f 70 2c 20 61  _in_array(zOp, a
10020 7a 47 6f 74 6f 29 20 26 26 20 70 32 6f 70 3c 70  zGoto) && p2op<p
10030 2d 3e 6e 49 6e 64 65 6e 74 0a 20 20 20 20 20 26  ->nIndent.     &
10040 26 20 28 61 62 59 69 65 6c 64 5b 70 32 6f 70 5d  & (abYield[p2op]
10050 20 7c 7c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   || sqlite3_colu
10060 6d 6e 5f 69 6e 74 28 70 53 71 6c 2c 20 32 29 29  mn_int(pSql, 2))
10070 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 66 6f  .    ){.      fo
10080 72 28 69 3d 70 32 6f 70 3b 20 69 3c 69 4f 70 3b  r(i=p2op; i<iOp;
10090 20 69 2b 2b 29 20 70 2d 3e 61 69 49 6e 64 65 6e   i++) p->aiInden
100a0 74 5b 69 5d 20 2b 3d 20 32 3b 0a 20 20 20 20 7d  t[i] += 2;.    }
100b0 0a 20 20 7d 0a 0a 20 20 70 2d 3e 69 49 6e 64 65  .  }..  p->iInde
100c0 6e 74 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  nt = 0;.  sqlite
100d0 33 5f 66 72 65 65 28 61 62 59 69 65 6c 64 29 3b  3_free(abYield);
100e0 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  .  sqlite3_reset
100f0 28 70 53 71 6c 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  (pSql);.}../*.**
10100 20 46 72 65 65 20 74 68 65 20 61 72 72 61 79 20   Free the array 
10110 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 65 78 70  allocated by exp
10120 6c 61 69 6e 5f 64 61 74 61 5f 70 72 65 70 61 72  lain_data_prepar
10130 65 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  e()..*/.static v
10140 6f 69 64 20 65 78 70 6c 61 69 6e 5f 64 61 74 61  oid explain_data
10150 5f 64 65 6c 65 74 65 28 53 68 65 6c 6c 53 74 61  _delete(ShellSta
10160 74 65 20 2a 70 29 7b 0a 20 20 73 71 6c 69 74 65  te *p){.  sqlite
10170 33 5f 66 72 65 65 28 70 2d 3e 61 69 49 6e 64 65  3_free(p->aiInde
10180 6e 74 29 3b 0a 20 20 70 2d 3e 61 69 49 6e 64 65  nt);.  p->aiInde
10190 6e 74 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 49 6e  nt = 0;.  p->nIn
101a0 64 65 6e 74 20 3d 20 30 3b 0a 20 20 70 2d 3e 69  dent = 0;.  p->i
101b0 49 6e 64 65 6e 74 20 3d 20 30 3b 0a 7d 0a 0a 2f  Indent = 0;.}../
101c0 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 61 6e 64  *.** Disable and
101d0 20 72 65 73 74 6f 72 65 20 2e 77 68 65 72 65 74   restore .wheret
101e0 72 61 63 65 20 61 6e 64 20 2e 73 65 6c 65 63 74  race and .select
101f0 74 72 61 63 65 20 73 65 74 74 69 6e 67 73 2e 0a  trace settings..
10200 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
10210 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20  QLITE_DEBUG) && 
10220 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
10230 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
10240 45 29 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71  E).extern int sq
10250 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63 65  lite3SelectTrace
10260 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 73 61 76  ;.static int sav
10270 65 64 53 65 6c 65 63 74 54 72 61 63 65 3b 0a 23  edSelectTrace;.#
10280 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
10290 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
102a0 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
102b0 45 5f 45 4e 41 42 4c 45 5f 57 48 45 52 45 54 52  E_ENABLE_WHERETR
102c0 41 43 45 29 0a 65 78 74 65 72 6e 20 69 6e 74 20  ACE).extern int 
102d0 73 71 6c 69 74 65 33 57 68 65 72 65 54 72 61 63  sqlite3WhereTrac
102e0 65 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 73 61  e;.static int sa
102f0 76 65 64 57 68 65 72 65 54 72 61 63 65 3b 0a 23  vedWhereTrace;.#
10300 65 6e 64 69 66 0a 73 74 61 74 69 63 20 76 6f 69  endif.static voi
10310 64 20 64 69 73 61 62 6c 65 5f 64 65 62 75 67 5f  d disable_debug_
10320 74 72 61 63 65 5f 6d 6f 64 65 73 28 76 6f 69 64  trace_modes(void
10330 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ){.#if defined(S
10340 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20  QLITE_DEBUG) && 
10350 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
10360 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
10370 45 29 0a 20 20 73 61 76 65 64 53 65 6c 65 63 74  E).  savedSelect
10380 54 72 61 63 65 20 3d 20 73 71 6c 69 74 65 33 53  Trace = sqlite3S
10390 65 6c 65 63 74 54 72 61 63 65 3b 0a 20 20 73 71  electTrace;.  sq
103a0 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63 65  lite3SelectTrace
103b0 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 23 69 66   = 0;.#endif.#if
103c0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
103d0 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65  DEBUG) && define
103e0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
103f0 57 48 45 52 45 54 52 41 43 45 29 0a 20 20 73 61  WHERETRACE).  sa
10400 76 65 64 57 68 65 72 65 54 72 61 63 65 20 3d 20  vedWhereTrace = 
10410 73 71 6c 69 74 65 33 57 68 65 72 65 54 72 61 63  sqlite3WhereTrac
10420 65 3b 0a 20 20 73 71 6c 69 74 65 33 57 68 65 72  e;.  sqlite3Wher
10430 65 54 72 61 63 65 20 3d 20 30 3b 0a 23 65 6e 64  eTrace = 0;.#end
10440 69 66 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64  if.}.static void
10450 20 72 65 73 74 6f 72 65 5f 64 65 62 75 67 5f 74   restore_debug_t
10460 72 61 63 65 5f 6d 6f 64 65 73 28 76 6f 69 64 29  race_modes(void)
10470 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  {.#if defined(SQ
10480 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64  LITE_DEBUG) && d
10490 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
104a0 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45  ABLE_SELECTTRACE
104b0 29 0a 20 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ).  sqlite3Selec
104c0 74 54 72 61 63 65 20 3d 20 73 61 76 65 64 53 65  tTrace = savedSe
104d0 6c 65 63 74 54 72 61 63 65 3b 0a 23 65 6e 64 69  lectTrace;.#endi
104e0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
104f0 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64  LITE_DEBUG) && d
10500 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
10510 41 42 4c 45 5f 57 48 45 52 45 54 52 41 43 45 29  ABLE_WHERETRACE)
10520 0a 20 20 73 71 6c 69 74 65 33 57 68 65 72 65 54  .  sqlite3WhereT
10530 72 61 63 65 20 3d 20 73 61 76 65 64 57 68 65 72  race = savedWher
10540 65 54 72 61 63 65 3b 0a 23 65 6e 64 69 66 0a 7d  eTrace;.#endif.}
10550 0a 0a 2f 2a 0a 2a 2a 20 52 75 6e 20 61 20 70 72  ../*.** Run a pr
10560 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
10570 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
10580 65 78 65 63 5f 70 72 65 70 61 72 65 64 5f 73 74  exec_prepared_st
10590 6d 74 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65  mt(.  ShellState
105a0 20 2a 70 41 72 67 2c 20 20 20 20 20 20 20 20 20   *pArg,         
105b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105c0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
105d0 72 20 74 6f 20 53 68 65 6c 6c 53 74 61 74 65 20  r to ShellState 
105e0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  */.  sqlite3_stm
105f0 74 20 2a 70 53 74 6d 74 2c 20 20 20 20 20 20 20  t *pStmt,       
10600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10610 20 20 20 20 20 20 2f 2a 20 53 74 61 74 6d 65 6e        /* Statmen
10620 74 20 74 6f 20 72 75 6e 20 2a 2f 0a 20 20 69 6e  t to run */.  in
10630 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76  t (*xCallback)(v
10640 6f 69 64 2a 2c 69 6e 74 2c 63 68 61 72 2a 2a 2c  oid*,int,char**,
10650 63 68 61 72 2a 2a 2c 69 6e 74 2a 29 20 20 20 2f  char**,int*)   /
10660 2a 20 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74  * Callback funct
10670 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  ion */.){.  int 
10680 72 63 3b 0a 0a 20 20 2f 2a 20 70 65 72 66 6f 72  rc;..  /* perfor
10690 6d 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70  m the first step
106a0 2e 20 20 74 68 69 73 20 77 69 6c 6c 20 74 65 6c  .  this will tel
106b0 6c 20 75 73 20 69 66 20 77 65 0a 20 20 2a 2a 20  l us if we.  ** 
106c0 68 61 76 65 20 61 20 72 65 73 75 6c 74 20 73 65  have a result se
106d0 74 20 6f 72 20 6e 6f 74 20 61 6e 64 20 68 6f 77  t or not and how
106e0 20 77 69 64 65 20 69 74 20 69 73 2e 0a 20 20 2a   wide it is..  *
106f0 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
10700 5f 73 74 65 70 28 70 53 74 6d 74 29 3b 0a 20 20  _step(pStmt);.  
10710 2f 2a 20 69 66 20 77 65 20 68 61 76 65 20 61 20  /* if we have a 
10720 72 65 73 75 6c 74 20 73 65 74 2e 2e 2e 20 2a 2f  result set... */
10730 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 52 4f  .  if( SQLITE_RO
10740 57 20 3d 3d 20 72 63 20 29 7b 0a 20 20 20 20 2f  W == rc ){.    /
10750 2a 20 69 66 20 77 65 20 68 61 76 65 20 61 20 63  * if we have a c
10760 61 6c 6c 62 61 63 6b 2e 2e 2e 20 2a 2f 0a 20 20  allback... */.  
10770 20 20 69 66 28 20 78 43 61 6c 6c 62 61 63 6b 20    if( xCallback 
10780 29 7b 0a 20 20 20 20 20 20 2f 2a 20 61 6c 6c 6f  ){.      /* allo
10790 63 61 74 65 20 73 70 61 63 65 20 66 6f 72 20 63  cate space for c
107a0 6f 6c 20 6e 61 6d 65 20 70 74 72 2c 20 76 61 6c  ol name ptr, val
107b0 75 65 20 70 74 72 2c 20 61 6e 64 20 74 79 70 65  ue ptr, and type
107c0 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 6e 43   */.      int nC
107d0 6f 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  ol = sqlite3_col
107e0 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  umn_count(pStmt)
107f0 3b 0a 20 20 20 20 20 20 76 6f 69 64 20 2a 70 44  ;.      void *pD
10800 61 74 61 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61  ata = sqlite3_ma
10810 6c 6c 6f 63 36 34 28 33 2a 6e 43 6f 6c 2a 73 69  lloc64(3*nCol*si
10820 7a 65 6f 66 28 63 6f 6e 73 74 20 63 68 61 72 2a  zeof(const char*
10830 29 20 2b 20 31 29 3b 0a 20 20 20 20 20 20 69 66  ) + 1);.      if
10840 28 20 21 70 44 61 74 61 20 29 7b 0a 20 20 20 20  ( !pData ){.    
10850 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
10860 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20 7d 65 6c  NOMEM;.      }el
10870 73 65 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72  se{.        char
10880 20 2a 2a 61 7a 43 6f 6c 73 20 3d 20 28 63 68 61   **azCols = (cha
10890 72 20 2a 2a 29 70 44 61 74 61 3b 20 20 20 20 20  r **)pData;     
108a0 20 2f 2a 20 4e 61 6d 65 73 20 6f 66 20 72 65 73   /* Names of res
108b0 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  ult columns */. 
108c0 20 20 20 20 20 20 20 63 68 61 72 20 2a 2a 61 7a         char **az
108d0 56 61 6c 73 20 3d 20 26 61 7a 43 6f 6c 73 5b 6e  Vals = &azCols[n
108e0 43 6f 6c 5d 3b 20 20 20 20 20 20 20 2f 2a 20 52  Col];       /* R
108f0 65 73 75 6c 74 73 20 2a 2f 0a 20 20 20 20 20 20  esults */.      
10900 20 20 69 6e 74 20 2a 61 69 54 79 70 65 73 20 3d    int *aiTypes =
10910 20 28 69 6e 74 20 2a 29 26 61 7a 56 61 6c 73 5b   (int *)&azVals[
10920 6e 43 6f 6c 5d 3b 20 2f 2a 20 52 65 73 75 6c 74  nCol]; /* Result
10930 20 74 79 70 65 73 20 2a 2f 0a 20 20 20 20 20 20   types */.      
10940 20 20 69 6e 74 20 69 2c 20 78 3b 0a 20 20 20 20    int i, x;.    
10950 20 20 20 20 61 73 73 65 72 74 28 73 69 7a 65 6f      assert(sizeo
10960 66 28 69 6e 74 29 20 3c 3d 20 73 69 7a 65 6f 66  f(int) <= sizeof
10970 28 63 68 61 72 20 2a 29 29 3b 0a 20 20 20 20 20  (char *));.     
10980 20 20 20 2f 2a 20 73 61 76 65 20 6f 66 66 20 70     /* save off p
10990 74 72 73 20 74 6f 20 63 6f 6c 75 6d 6e 20 6e 61  trs to column na
109a0 6d 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 66  mes */.        f
109b0 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20  or(i=0; i<nCol; 
109c0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
109d0 61 7a 43 6f 6c 73 5b 69 5d 20 3d 20 28 63 68 61  azCols[i] = (cha
109e0 72 20 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  r *)sqlite3_colu
109f0 6d 6e 5f 6e 61 6d 65 28 70 53 74 6d 74 2c 20 69  mn_name(pStmt, i
10a00 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
10a10 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
10a20 20 20 20 2f 2a 20 65 78 74 72 61 63 74 20 74 68     /* extract th
10a30 65 20 64 61 74 61 20 61 6e 64 20 64 61 74 61 20  e data and data 
10a40 74 79 70 65 73 20 2a 2f 0a 20 20 20 20 20 20 20  types */.       
10a50 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43     for(i=0; i<nC
10a60 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; i++){.      
10a70 20 20 20 20 20 20 61 69 54 79 70 65 73 5b 69 5d        aiTypes[i]
10a80 20 3d 20 78 20 3d 20 73 71 6c 69 74 65 33 5f 63   = x = sqlite3_c
10a90 6f 6c 75 6d 6e 5f 74 79 70 65 28 70 53 74 6d 74  olumn_type(pStmt
10aa0 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , i);.          
10ab0 20 20 69 66 28 20 78 3d 3d 53 51 4c 49 54 45 5f    if( x==SQLITE_
10ac0 42 4c 4f 42 20 26 26 20 70 41 72 67 20 26 26 20  BLOB && pArg && 
10ad0 70 41 72 67 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f 44  pArg->cMode==MOD
10ae0 45 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20  E_Insert ){.    
10af0 20 20 20 20 20 20 20 20 20 20 61 7a 56 61 6c 73            azVals
10b00 5b 69 5d 20 3d 20 22 22 3b 0a 20 20 20 20 20 20  [i] = "";.      
10b10 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
10b20 20 20 20 20 20 20 20 20 20 20 20 61 7a 56 61 6c             azVal
10b30 73 5b 69 5d 20 3d 20 28 63 68 61 72 2a 29 73 71  s[i] = (char*)sq
10b40 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
10b50 74 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20  t(pStmt, i);.   
10b60 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
10b70 20 20 20 20 20 20 20 69 66 28 20 21 61 7a 56 61         if( !azVa
10b80 6c 73 5b 69 5d 20 26 26 20 28 61 69 54 79 70 65  ls[i] && (aiType
10b90 73 5b 69 5d 21 3d 53 51 4c 49 54 45 5f 4e 55 4c  s[i]!=SQLITE_NUL
10ba0 4c 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  L) ){.          
10bb0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
10bc0 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20 20 20 20  NOMEM;.         
10bd0 20 20 20 20 20 62 72 65 61 6b 3b 20 2f 2a 20 66       break; /* f
10be0 72 6f 6d 20 66 6f 72 20 2a 2f 0a 20 20 20 20 20  rom for */.     
10bf0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
10c00 20 20 20 7d 20 2f 2a 20 65 6e 64 20 66 6f 72 20     } /* end for 
10c10 2a 2f 0a 0a 20 20 20 20 20 20 20 20 20 20 2f 2a  */..          /*
10c20 20 69 66 20 64 61 74 61 20 61 6e 64 20 74 79 70   if data and typ
10c30 65 73 20 65 78 74 72 61 63 74 65 64 20 73 75 63  es extracted suc
10c40 63 65 73 73 66 75 6c 6c 79 2e 2e 2e 20 2a 2f 0a  cessfully... */.
10c50 20 20 20 20 20 20 20 20 20 20 69 66 28 20 53 51            if( SQ
10c60 4c 49 54 45 5f 52 4f 57 20 3d 3d 20 72 63 20 29  LITE_ROW == rc )
10c70 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {.            /*
10c80 20 63 61 6c 6c 20 74 68 65 20 73 75 70 70 6c 69   call the suppli
10c90 65 64 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68  ed callback with
10ca0 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20   the result row 
10cb0 64 61 74 61 20 2a 2f 0a 20 20 20 20 20 20 20 20  data */.        
10cc0 20 20 20 20 69 66 28 20 78 43 61 6c 6c 62 61 63      if( xCallbac
10cd0 6b 28 70 41 72 67 2c 20 6e 43 6f 6c 2c 20 61 7a  k(pArg, nCol, az
10ce0 56 61 6c 73 2c 20 61 7a 43 6f 6c 73 2c 20 61 69  Vals, azCols, ai
10cf0 54 79 70 65 73 29 20 29 7b 0a 20 20 20 20 20 20  Types) ){.      
10d00 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
10d10 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 20  ITE_ABORT;.     
10d20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
10d30 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
10d40 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53   sqlite3_step(pS
10d50 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  tmt);.          
10d60 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a    }.          }.
10d70 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65 28          } while(
10d80 20 53 51 4c 49 54 45 5f 52 4f 57 20 3d 3d 20 72   SQLITE_ROW == r
10d90 63 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  c );.        sql
10da0 69 74 65 33 5f 66 72 65 65 28 70 44 61 74 61 29  ite3_free(pData)
10db0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
10dc0 6c 73 65 7b 0a 20 20 20 20 20 20 64 6f 7b 0a 20  lse{.      do{. 
10dd0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
10de0 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3b  te3_step(pStmt);
10df0 0a 20 20 20 20 20 20 7d 20 77 68 69 6c 65 28 20  .      } while( 
10e00 72 63 20 3d 3d 20 53 51 4c 49 54 45 5f 52 4f 57  rc == SQLITE_ROW
10e10 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a   );.    }.  }.}.
10e20 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61  ./*.** Execute a
10e30 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 73 65   statement or se
10e40 74 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 2e  t of statements.
10e50 20 20 50 72 69 6e 74 0a 2a 2a 20 61 6e 79 20 72    Print.** any r
10e60 65 73 75 6c 74 20 72 6f 77 73 2f 63 6f 6c 75 6d  esult rows/colum
10e70 6e 73 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ns depending on 
10e80 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 64 65  the current mode
10e90 0a 2a 2a 20 73 65 74 20 76 69 61 20 74 68 65 20  .** set via the 
10ea0 73 75 70 70 6c 69 65 64 20 63 61 6c 6c 62 61 63  supplied callbac
10eb0 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73  k..**.** This is
10ec0 20 76 65 72 79 20 73 69 6d 69 6c 61 72 20 74 6f   very similar to
10ed0 20 53 51 4c 69 74 65 27 73 20 62 75 69 6c 74 2d   SQLite's built-
10ee0 69 6e 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  in sqlite3_exec(
10ef0 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 65 78  ).** function ex
10f00 63 65 70 74 20 69 74 20 74 61 6b 65 73 20 61 20  cept it takes a 
10f10 73 6c 69 67 68 74 6c 79 20 64 69 66 66 65 72 65  slightly differe
10f20 6e 74 20 63 61 6c 6c 62 61 63 6b 0a 2a 2a 20 61  nt callback.** a
10f30 6e 64 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61  nd callback data
10f40 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
10f50 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 5f 65  atic int shell_e
10f60 78 65 63 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  xec(.  sqlite3 *
10f70 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  db,             
10f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f90 20 2f 2a 20 41 6e 20 6f 70 65 6e 20 64 61 74 61   /* An open data
10fa0 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
10fb0 63 68 61 72 20 2a 7a 53 71 6c 2c 20 20 20 20 20  char *zSql,     
10fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fd0 20 20 20 20 2f 2a 20 53 51 4c 20 74 6f 20 62 65      /* SQL to be
10fe0 20 65 76 61 6c 75 61 74 65 64 20 2a 2f 0a 20 20   evaluated */.  
10ff0 69 6e 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29  int (*xCallback)
11000 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 68 61 72 2a  (void*,int,char*
11010 2a 2c 63 68 61 72 2a 2a 2c 69 6e 74 2a 29 2c 20  *,char**,int*), 
11020 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 75    /* Callback fu
11030 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 20 20  nction */.      
11040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11060 20 20 20 20 20 20 2f 2a 20 28 6e 6f 74 20 74 68        /* (not th
11070 65 20 73 61 6d 65 20 61 73 20 73 71 6c 69 74 65  e same as sqlite
11080 33 5f 65 78 65 63 29 20 2a 2f 0a 20 20 53 68 65  3_exec) */.  She
11090 6c 6c 53 74 61 74 65 20 2a 70 41 72 67 2c 20 20  llState *pArg,  
110a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110b0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
110c0 72 20 74 6f 20 53 68 65 6c 6c 53 74 61 74 65 20  r to ShellState 
110d0 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
110e0 72 4d 73 67 20 20 20 20 20 20 20 20 20 20 20 20  rMsg            
110f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11100 2a 20 45 72 72 6f 72 20 6d 73 67 20 77 72 69 74  * Error msg writ
11110 74 65 6e 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20  ten here */.){. 
11120 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
11130 53 74 6d 74 20 3d 20 4e 55 4c 4c 3b 20 20 20 20  Stmt = NULL;    
11140 20 2f 2a 20 53 74 61 74 65 6d 65 6e 74 20 74 6f   /* Statement to
11150 20 65 78 65 63 75 74 65 2e 20 2a 2f 0a 20 20 69   execute. */.  i
11160 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  nt rc = SQLITE_O
11170 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  K;             /
11180 2a 20 52 65 74 75 72 6e 20 43 6f 64 65 20 2a 2f  * Return Code */
11190 0a 20 20 69 6e 74 20 72 63 32 3b 0a 20 20 63 6f  .  int rc2;.  co
111a0 6e 73 74 20 63 68 61 72 20 2a 7a 4c 65 66 74 6f  nst char *zLefto
111b0 76 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ver;          /*
111c0 20 54 61 69 6c 20 6f 66 20 75 6e 70 72 6f 63 65   Tail of unproce
111d0 73 73 65 64 20 53 51 4c 20 2a 2f 0a 0a 20 20 69  ssed SQL */..  i
111e0 66 28 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20  f( pzErrMsg ){. 
111f0 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 4e     *pzErrMsg = N
11200 55 4c 4c 3b 0a 20 20 7d 0a 0a 20 20 77 68 69 6c  ULL;.  }..  whil
11210 65 28 20 7a 53 71 6c 5b 30 5d 20 26 26 20 28 53  e( zSql[0] && (S
11220 51 4c 49 54 45 5f 4f 4b 20 3d 3d 20 72 63 29 20  QLITE_OK == rc) 
11230 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
11240 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 6d 74 53  nst char *zStmtS
11250 71 6c 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  ql;.    rc = sql
11260 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
11270 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70  db, zSql, -1, &p
11280 53 74 6d 74 2c 20 26 7a 4c 65 66 74 6f 76 65 72  Stmt, &zLeftover
11290 29 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54  );.    if( SQLIT
112a0 45 5f 4f 4b 20 21 3d 20 72 63 20 29 7b 0a 20 20  E_OK != rc ){.  
112b0 20 20 20 20 69 66 28 20 70 7a 45 72 72 4d 73 67      if( pzErrMsg
112c0 20 29 7b 0a 20 20 20 20 20 20 20 20 2a 70 7a 45   ){.        *pzE
112d0 72 72 4d 73 67 20 3d 20 73 61 76 65 5f 65 72 72  rrMsg = save_err
112e0 5f 6d 73 67 28 64 62 29 3b 0a 20 20 20 20 20 20  _msg(db);.      
112f0 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
11300 20 20 20 69 66 28 20 21 70 53 74 6d 74 20 29 7b     if( !pStmt ){
11310 0a 20 20 20 20 20 20 20 20 2f 2a 20 74 68 69 73  .        /* this
11320 20 68 61 70 70 65 6e 73 20 66 6f 72 20 61 20 63   happens for a c
11330 6f 6d 6d 65 6e 74 20 6f 72 20 77 68 69 74 65 2d  omment or white-
11340 73 70 61 63 65 20 2a 2f 0a 20 20 20 20 20 20 20  space */.       
11350 20 7a 53 71 6c 20 3d 20 7a 4c 65 66 74 6f 76 65   zSql = zLeftove
11360 72 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  r;.        while
11370 28 20 49 73 53 70 61 63 65 28 7a 53 71 6c 5b 30  ( IsSpace(zSql[0
11380 5d 29 20 29 20 7a 53 71 6c 2b 2b 3b 0a 20 20 20  ]) ) zSql++;.   
11390 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20       continue;. 
113a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 53 74       }.      zSt
113b0 6d 74 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f  mtSql = sqlite3_
113c0 73 71 6c 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  sql(pStmt);.    
113d0 20 20 69 66 28 20 7a 53 74 6d 74 53 71 6c 3d 3d    if( zStmtSql==
113e0 30 20 29 20 7a 53 74 6d 74 53 71 6c 20 3d 20 22  0 ) zStmtSql = "
113f0 22 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  ";.      while( 
11400 49 73 53 70 61 63 65 28 7a 53 74 6d 74 53 71 6c  IsSpace(zStmtSql
11410 5b 30 5d 29 20 29 20 7a 53 74 6d 74 53 71 6c 2b  [0]) ) zStmtSql+
11420 2b 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 73 61 76  +;..      /* sav
11430 65 20 6f 66 66 20 74 68 65 20 70 72 65 70 61 72  e off the prepar
11440 65 64 20 73 74 61 74 6d 65 6e 74 20 68 61 6e 64  ed statment hand
11450 6c 65 20 61 6e 64 20 72 65 73 65 74 20 72 6f 77  le and reset row
11460 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20   count */.      
11470 69 66 28 20 70 41 72 67 20 29 7b 0a 20 20 20 20  if( pArg ){.    
11480 20 20 20 20 70 41 72 67 2d 3e 70 53 74 6d 74 20      pArg->pStmt 
11490 3d 20 70 53 74 6d 74 3b 0a 20 20 20 20 20 20 20  = pStmt;.       
114a0 20 70 41 72 67 2d 3e 63 6e 74 20 3d 20 30 3b 0a   pArg->cnt = 0;.
114b0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
114c0 2a 20 65 63 68 6f 20 74 68 65 20 73 71 6c 20 73  * echo the sql s
114d0 74 61 74 65 6d 65 6e 74 20 69 66 20 65 63 68 6f  tatement if echo
114e0 20 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28   on */.      if(
114f0 20 70 41 72 67 20 26 26 20 53 68 65 6c 6c 48 61   pArg && ShellHa
11500 73 46 6c 61 67 28 70 41 72 67 2c 20 53 48 46 4c  sFlag(pArg, SHFL
11510 47 5f 45 63 68 6f 29 20 29 7b 0a 20 20 20 20 20  G_Echo) ){.     
11520 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
11530 41 72 67 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e 22  Arg->out, "%s\n"
11540 2c 20 7a 53 74 6d 74 53 71 6c 20 3f 20 7a 53 74  , zStmtSql ? zSt
11550 6d 74 53 71 6c 20 3a 20 7a 53 71 6c 29 3b 0a 20  mtSql : zSql);. 
11560 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
11570 20 53 68 6f 77 20 74 68 65 20 45 58 50 4c 41 49   Show the EXPLAI
11580 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 69 66 20  N QUERY PLAN if 
11590 2e 65 71 70 20 69 73 20 6f 6e 20 2a 2f 0a 20 20  .eqp is on */.  
115a0 20 20 20 20 69 66 28 20 70 41 72 67 20 26 26 20      if( pArg && 
115b0 70 41 72 67 2d 3e 61 75 74 6f 45 51 50 20 26 26  pArg->autoEQP &&
115c0 20 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65   sqlite3_strlike
115d0 28 22 45 58 50 4c 41 49 4e 25 22 2c 7a 53 74 6d  ("EXPLAIN%",zStm
115e0 74 53 71 6c 2c 30 29 21 3d 30 20 29 7b 0a 20 20  tSql,0)!=0 ){.  
115f0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74        sqlite3_st
11600 6d 74 20 2a 70 45 78 70 6c 61 69 6e 3b 0a 20 20  mt *pExplain;.  
11610 20 20 20 20 20 20 63 68 61 72 20 2a 7a 45 51 50        char *zEQP
11620 3b 0a 20 20 20 20 20 20 20 20 64 69 73 61 62 6c  ;.        disabl
11630 65 5f 64 65 62 75 67 5f 74 72 61 63 65 5f 6d 6f  e_debug_trace_mo
11640 64 65 73 28 29 3b 0a 20 20 20 20 20 20 20 20 7a  des();.        z
11650 45 51 50 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  EQP = sqlite3_mp
11660 72 69 6e 74 66 28 22 45 58 50 4c 41 49 4e 20 51  rintf("EXPLAIN Q
11670 55 45 52 59 20 50 4c 41 4e 20 25 73 22 2c 20 7a  UERY PLAN %s", z
11680 53 74 6d 74 53 71 6c 29 3b 0a 20 20 20 20 20 20  StmtSql);.      
11690 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
116a0 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20 7a 45  repare_v2(db, zE
116b0 51 50 2c 20 2d 31 2c 20 26 70 45 78 70 6c 61 69  QP, -1, &pExplai
116c0 6e 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 69  n, 0);.        i
116d0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
116e0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 77 68   ){.          wh
116f0 69 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65  ile( sqlite3_ste
11700 70 28 70 45 78 70 6c 61 69 6e 29 3d 3d 53 51 4c  p(pExplain)==SQL
11710 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20  ITE_ROW ){.     
11720 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
11730 66 28 70 41 72 67 2d 3e 6f 75 74 2c 22 2d 2d 45  f(pArg->out,"--E
11740 51 50 2d 2d 20 25 64 2c 22 2c 73 71 6c 69 74 65  QP-- %d,",sqlite
11750 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 45 78  3_column_int(pEx
11760 70 6c 61 69 6e 2c 20 30 29 29 3b 0a 20 20 20 20  plain, 0));.    
11770 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
11780 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 22 25 64  tf(pArg->out,"%d
11790 2c 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ,", sqlite3_colu
117a0 6d 6e 5f 69 6e 74 28 70 45 78 70 6c 61 69 6e 2c  mn_int(pExplain,
117b0 20 31 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20   1));.          
117c0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72    raw_printf(pAr
117d0 67 2d 3e 6f 75 74 2c 22 25 64 2c 22 2c 20 73 71  g->out,"%d,", sq
117e0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
117f0 28 70 45 78 70 6c 61 69 6e 2c 20 32 29 29 3b 0a  (pExplain, 2));.
11800 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38              utf8
11810 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
11820 74 2c 22 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65  t,"%s\n", sqlite
11830 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 45  3_column_text(pE
11840 78 70 6c 61 69 6e 2c 20 33 29 29 3b 0a 20 20 20  xplain, 3));.   
11850 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
11860 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
11870 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 45 78 70  e3_finalize(pExp
11880 6c 61 69 6e 29 3b 0a 20 20 20 20 20 20 20 20 73  lain);.        s
11890 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 51 50  qlite3_free(zEQP
118a0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
118b0 41 72 67 2d 3e 61 75 74 6f 45 51 50 3e 3d 32 20  Arg->autoEQP>=2 
118c0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
118d0 41 6c 73 6f 20 64 6f 20 61 6e 20 45 58 50 4c 41  Also do an EXPLA
118e0 49 4e 20 66 6f 72 20 22 2e 65 71 70 20 66 75 6c  IN for ".eqp ful
118f0 6c 22 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20  l" mode */.     
11900 20 20 20 20 20 7a 45 51 50 20 3d 20 73 71 6c 69       zEQP = sqli
11910 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 45 58 50  te3_mprintf("EXP
11920 4c 41 49 4e 20 25 73 22 2c 20 7a 53 74 6d 74 53  LAIN %s", zStmtS
11930 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72  ql);.          r
11940 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
11950 61 72 65 5f 76 32 28 64 62 2c 20 7a 45 51 50 2c  are_v2(db, zEQP,
11960 20 2d 31 2c 20 26 70 45 78 70 6c 61 69 6e 2c 20   -1, &pExplain, 
11970 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  0);.          if
11980 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
11990 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ){.            p
119a0 41 72 67 2d 3e 63 4d 6f 64 65 20 3d 20 4d 4f 44  Arg->cMode = MOD
119b0 45 5f 45 78 70 6c 61 69 6e 3b 0a 20 20 20 20 20  E_Explain;.     
119c0 20 20 20 20 20 20 20 65 78 70 6c 61 69 6e 5f 64         explain_d
119d0 61 74 61 5f 70 72 65 70 61 72 65 28 70 41 72 67  ata_prepare(pArg
119e0 2c 20 70 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20  , pExplain);.   
119f0 20 20 20 20 20 20 20 20 20 65 78 65 63 5f 70 72           exec_pr
11a00 65 70 61 72 65 64 5f 73 74 6d 74 28 70 41 72 67  epared_stmt(pArg
11a10 2c 20 70 45 78 70 6c 61 69 6e 2c 20 78 43 61 6c  , pExplain, xCal
11a20 6c 62 61 63 6b 29 3b 0a 20 20 20 20 20 20 20 20  lback);.        
11a30 20 20 20 20 65 78 70 6c 61 69 6e 5f 64 61 74 61      explain_data
11a40 5f 64 65 6c 65 74 65 28 70 41 72 67 29 3b 0a 20  _delete(pArg);. 
11a50 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
11a60 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e       sqlite3_fin
11a70 61 6c 69 7a 65 28 70 45 78 70 6c 61 69 6e 29 3b  alize(pExplain);
11a80 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
11a90 65 33 5f 66 72 65 65 28 7a 45 51 50 29 3b 0a 20  e3_free(zEQP);. 
11aa0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
11ab0 20 72 65 73 74 6f 72 65 5f 64 65 62 75 67 5f 74   restore_debug_t
11ac0 72 61 63 65 5f 6d 6f 64 65 73 28 29 3b 0a 20 20  race_modes();.  
11ad0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28      }..      if(
11ae0 20 70 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20   pArg ){.       
11af0 20 70 41 72 67 2d 3e 63 4d 6f 64 65 20 3d 20 70   pArg->cMode = p
11b00 41 72 67 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20 20  Arg->mode;.     
11b10 20 20 20 69 66 28 20 70 41 72 67 2d 3e 61 75 74     if( pArg->aut
11b20 6f 45 78 70 6c 61 69 6e 0a 20 20 20 20 20 20 20  oExplain.       
11b30 20 20 26 26 20 73 71 6c 69 74 65 33 5f 63 6f 6c    && sqlite3_col
11b40 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  umn_count(pStmt)
11b50 3d 3d 38 0a 20 20 20 20 20 20 20 20 20 26 26 20  ==8.         && 
11b60 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28  sqlite3_strlike(
11b70 22 45 58 50 4c 41 49 4e 25 22 2c 20 7a 53 74 6d  "EXPLAIN%", zStm
11b80 74 53 71 6c 2c 30 29 3d 3d 30 0a 20 20 20 20 20  tSql,0)==0.     
11b90 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20     ){.          
11ba0 70 41 72 67 2d 3e 63 4d 6f 64 65 20 3d 20 4d 4f  pArg->cMode = MO
11bb0 44 45 5f 45 78 70 6c 61 69 6e 3b 0a 20 20 20 20  DE_Explain;.    
11bc0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f      }..        /
11bd0 2a 20 49 66 20 74 68 65 20 73 68 65 6c 6c 20 69  * If the shell i
11be0 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 22  s currently in "
11bf0 2e 65 78 70 6c 61 69 6e 22 20 6d 6f 64 65 2c 20  .explain" mode, 
11c00 67 61 74 68 65 72 20 74 68 65 20 65 78 74 72 61  gather the extra
11c10 0a 20 20 20 20 20 20 20 20 2a 2a 20 64 61 74 61  .        ** data
11c20 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 64 64   required to add
11c30 20 69 6e 64 65 6e 74 73 20 74 6f 20 74 68 65 20   indents to the 
11c40 6f 75 74 70 75 74 2e 2a 2f 0a 20 20 20 20 20 20  output.*/.      
11c50 20 20 69 66 28 20 70 41 72 67 2d 3e 63 4d 6f 64    if( pArg->cMod
11c60 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20  e==MODE_Explain 
11c70 29 7b 0a 20 20 20 20 20 20 20 20 20 20 65 78 70  ){.          exp
11c80 6c 61 69 6e 5f 64 61 74 61 5f 70 72 65 70 61 72  lain_data_prepar
11c90 65 28 70 41 72 67 2c 20 70 53 74 6d 74 29 3b 0a  e(pArg, pStmt);.
11ca0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
11cb0 7d 0a 0a 20 20 20 20 20 20 65 78 65 63 5f 70 72  }..      exec_pr
11cc0 65 70 61 72 65 64 5f 73 74 6d 74 28 70 41 72 67  epared_stmt(pArg
11cd0 2c 20 70 53 74 6d 74 2c 20 78 43 61 6c 6c 62 61  , pStmt, xCallba
11ce0 63 6b 29 3b 0a 20 20 20 20 20 20 65 78 70 6c 61  ck);.      expla
11cf0 69 6e 5f 64 61 74 61 5f 64 65 6c 65 74 65 28 70  in_data_delete(p
11d00 41 72 67 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  Arg);..      /* 
11d10 70 72 69 6e 74 20 75 73 61 67 65 20 73 74 61 74  print usage stat
11d20 73 20 69 66 20 73 74 61 74 73 20 6f 6e 20 2a 2f  s if stats on */
11d30 0a 20 20 20 20 20 20 69 66 28 20 70 41 72 67 20  .      if( pArg 
11d40 26 26 20 70 41 72 67 2d 3e 73 74 61 74 73 4f 6e  && pArg->statsOn
11d50 20 29 7b 0a 20 20 20 20 20 20 20 20 64 69 73 70   ){.        disp
11d60 6c 61 79 5f 73 74 61 74 73 28 64 62 2c 20 70 41  lay_stats(db, pA
11d70 72 67 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a  rg, 0);.      }.
11d80 0a 20 20 20 20 20 20 2f 2a 20 70 72 69 6e 74 20  .      /* print 
11d90 6c 6f 6f 70 2d 63 6f 75 6e 74 65 72 73 20 69 66  loop-counters if
11da0 20 72 65 71 75 69 72 65 64 20 2a 2f 0a 20 20 20   required */.   
11db0 20 20 20 69 66 28 20 70 41 72 67 20 26 26 20 70     if( pArg && p
11dc0 41 72 67 2d 3e 73 63 61 6e 73 74 61 74 73 4f 6e  Arg->scanstatsOn
11dd0 20 29 7b 0a 20 20 20 20 20 20 20 20 64 69 73 70   ){.        disp
11de0 6c 61 79 5f 73 63 61 6e 73 74 61 74 73 28 64 62  lay_scanstats(db
11df0 2c 20 70 41 72 67 29 3b 0a 20 20 20 20 20 20 7d  , pArg);.      }
11e00 0a 0a 20 20 20 20 20 20 2f 2a 20 46 69 6e 61 6c  ..      /* Final
11e10 69 7a 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ize the statemen
11e20 74 20 6a 75 73 74 20 65 78 65 63 75 74 65 64 2e  t just executed.
11e30 20 49 66 20 74 68 69 73 20 66 61 69 6c 73 2c 20   If this fails, 
11e40 73 61 76 65 20 61 0a 20 20 20 20 20 20 2a 2a 20  save a.      ** 
11e50 63 6f 70 79 20 6f 66 20 74 68 65 20 65 72 72 6f  copy of the erro
11e60 72 20 6d 65 73 73 61 67 65 2e 20 4f 74 68 65 72  r message. Other
11e70 77 69 73 65 2c 20 73 65 74 20 7a 53 71 6c 20 74  wise, set zSql t
11e80 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 0a 20  o point to the. 
11e90 20 20 20 20 20 2a 2a 20 6e 65 78 74 20 73 74 61       ** next sta
11ea0 74 65 6d 65 6e 74 20 74 6f 20 65 78 65 63 75 74  tement to execut
11eb0 65 2e 20 2a 2f 0a 20 20 20 20 20 20 72 63 32 20  e. */.      rc2 
11ec0 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  = sqlite3_finali
11ed0 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20  ze(pStmt);.     
11ee0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
11ef0 4e 4f 4d 45 4d 20 29 20 72 63 20 3d 20 72 63 32  NOMEM ) rc = rc2
11f00 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
11f10 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
11f20 20 20 20 20 20 7a 53 71 6c 20 3d 20 7a 4c 65 66       zSql = zLef
11f30 74 6f 76 65 72 3b 0a 20 20 20 20 20 20 20 20 77  tover;.        w
11f40 68 69 6c 65 28 20 49 73 53 70 61 63 65 28 7a 53  hile( IsSpace(zS
11f50 71 6c 5b 30 5d 29 20 29 20 7a 53 71 6c 2b 2b 3b  ql[0]) ) zSql++;
11f60 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
11f70 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20   pzErrMsg ){.   
11f80 20 20 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d       *pzErrMsg =
11f90 20 73 61 76 65 5f 65 72 72 5f 6d 73 67 28 64 62   save_err_msg(db
11fa0 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  );.      }..    
11fb0 20 20 2f 2a 20 63 6c 65 61 72 20 73 61 76 65 64    /* clear saved
11fc0 20 73 74 6d 74 20 68 61 6e 64 6c 65 20 2a 2f 0a   stmt handle */.
11fd0 20 20 20 20 20 20 69 66 28 20 70 41 72 67 20 29        if( pArg )
11fe0 7b 0a 20 20 20 20 20 20 20 20 70 41 72 67 2d 3e  {.        pArg->
11ff0 70 53 74 6d 74 20 3d 20 4e 55 4c 4c 3b 0a 20 20  pStmt = NULL;.  
12000 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 20      }.    }.  } 
12010 2f 2a 20 65 6e 64 20 77 68 69 6c 65 20 2a 2f 0a  /* end while */.
12020 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
12030 0a 2f 2a 0a 2a 2a 20 52 65 6c 65 61 73 65 20 6d  ./*.** Release m
12040 65 6d 6f 72 79 20 70 72 65 76 69 6f 75 73 6c 79  emory previously
12050 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 74 61   allocated by ta
12060 62 6c 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 29 2e  bleColumnList().
12070 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
12080 66 72 65 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 63  freeColumnList(c
12090 68 61 72 20 2a 2a 61 7a 43 6f 6c 29 7b 0a 20 20  har **azCol){.  
120a0 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 31  int i;.  for(i=1
120b0 3b 20 61 7a 43 6f 6c 5b 69 5d 3b 20 69 2b 2b 29  ; azCol[i]; i++)
120c0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  {.    sqlite3_fr
120d0 65 65 28 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20  ee(azCol[i]);.  
120e0 7d 0a 20 20 2f 2a 20 61 7a 43 6f 6c 5b 30 5d 20  }.  /* azCol[0] 
120f0 69 73 20 61 20 73 74 61 74 69 63 20 73 74 72 69  is a static stri
12100 6e 67 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ng */.  sqlite3_
12110 66 72 65 65 28 61 7a 43 6f 6c 29 3b 0a 7d 0a 0a  free(azCol);.}..
12120 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 6c  /*.** Return a l
12130 69 73 74 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ist of pointers 
12140 74 6f 20 73 74 72 69 6e 67 73 20 77 68 69 63 68  to strings which
12150 20 61 72 65 20 74 68 65 20 6e 61 6d 65 73 20 6f   are the names o
12160 66 20 61 6c 6c 0a 2a 2a 20 63 6f 6c 75 6d 6e 73  f all.** columns
12170 20 69 6e 20 74 61 62 6c 65 20 7a 54 61 62 2e 20   in table zTab. 
12180 20 20 54 68 65 20 6d 65 6d 6f 72 79 20 74 6f 20    The memory to 
12190 68 6f 6c 64 20 74 68 65 20 6e 61 6d 65 73 20 69  hold the names i
121a0 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  s dynamically.**
121b0 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 6d   allocated and m
121c0 75 73 74 20 62 65 20 72 65 6c 65 61 73 65 64 20  ust be released 
121d0 62 79 20 74 68 65 20 63 61 6c 6c 65 72 20 75 73  by the caller us
121e0 69 6e 67 20 61 20 73 75 62 73 65 71 75 65 6e 74  ing a subsequent
121f0 20 63 61 6c 6c 0a 2a 2a 20 74 6f 20 66 72 65 65   call.** to free
12200 43 6f 6c 75 6d 6e 4c 69 73 74 28 29 2e 0a 2a 2a  ColumnList()..**
12210 0a 2a 2a 20 54 68 65 20 61 7a 43 6f 6c 5b 30 5d  .** The azCol[0]
12220 20 65 6e 74 72 79 20 69 73 20 75 73 75 61 6c 6c   entry is usuall
12230 79 20 4e 55 4c 4c 2e 20 20 48 6f 77 65 76 65 72  y NULL.  However
12240 2c 20 69 66 20 7a 54 61 62 20 63 6f 6e 74 61 69  , if zTab contai
12250 6e 73 20 61 20 72 6f 77 69 64 0a 2a 2a 20 76 61  ns a rowid.** va
12260 6c 75 65 20 74 68 61 74 20 6e 65 65 64 73 20 74  lue that needs t
12270 6f 20 62 65 20 70 72 65 73 65 72 76 65 64 2c 20  o be preserved, 
12280 74 68 65 6e 20 61 7a 43 6f 6c 5b 30 5d 20 69 73  then azCol[0] is
12290 20 66 69 6c 6c 65 64 20 69 6e 20 77 69 74 68 20   filled in with 
122a0 74 68 65 0a 2a 2a 20 6e 61 6d 65 20 6f 66 20 74  the.** name of t
122b0 68 65 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 2e  he rowid column.
122c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  .**.** The first
122d0 20 72 65 67 75 6c 61 72 20 63 6f 6c 75 6d 6e 20   regular column 
122e0 69 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  in the table is 
122f0 61 7a 43 6f 6c 5b 31 5d 2e 20 20 54 68 65 20 6c  azCol[1].  The l
12300 69 73 74 20 69 73 20 74 65 72 6d 69 6e 61 74 65  ist is terminate
12310 64 0a 2a 2a 20 62 79 20 61 6e 20 65 6e 74 72 79  d.** by an entry
12320 20 77 69 74 68 20 61 7a 43 6f 6c 5b 69 5d 3d 3d   with azCol[i]==
12330 30 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61  0..*/.static cha
12340 72 20 2a 2a 74 61 62 6c 65 43 6f 6c 75 6d 6e 4c  r **tableColumnL
12350 69 73 74 28 53 68 65 6c 6c 53 74 61 74 65 20 2a  ist(ShellState *
12360 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  p, const char *z
12370 54 61 62 29 7b 0a 20 20 63 68 61 72 20 2a 2a 61  Tab){.  char **a
12380 7a 43 6f 6c 20 3d 20 30 3b 0a 20 20 73 71 6c 69  zCol = 0;.  sqli
12390 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
123a0 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
123b0 20 69 6e 74 20 6e 43 6f 6c 20 3d 20 30 3b 0a 20   int nCol = 0;. 
123c0 20 69 6e 74 20 6e 41 6c 6c 6f 63 20 3d 20 30 3b   int nAlloc = 0;
123d0 0a 20 20 69 6e 74 20 6e 50 4b 20 3d 20 30 3b 20  .  int nPK = 0; 
123e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
123f0 6f 66 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  of PRIMARY KEY c
12400 6f 6c 75 6d 6e 73 20 73 65 65 6e 20 2a 2f 0a 20  olumns seen */. 
12410 20 69 6e 74 20 69 73 49 50 4b 20 3d 20 30 3b 20   int isIPK = 0; 
12420 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f      /* True if o
12430 6e 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  ne PRIMARY KEY c
12440 6f 6c 75 6d 6e 20 6f 66 20 74 79 70 65 20 49 4e  olumn of type IN
12450 54 45 47 45 52 20 2a 2f 0a 20 20 69 6e 74 20 70  TEGER */.  int p
12460 72 65 73 65 72 76 65 52 6f 77 69 64 20 3d 20 53  reserveRowid = S
12470 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c 20 53  hellHasFlag(p, S
12480 48 46 4c 47 5f 50 72 65 73 65 72 76 65 52 6f 77  HFLG_PreserveRow
12490 69 64 29 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  id);.  int rc;..
124a0 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
124b0 5f 6d 70 72 69 6e 74 66 28 22 50 52 41 47 4d 41  _mprintf("PRAGMA
124c0 20 74 61 62 6c 65 5f 69 6e 66 6f 3d 25 51 22 2c   table_info=%Q",
124d0 20 7a 54 61 62 29 3b 0a 20 20 72 63 20 3d 20 73   zTab);.  rc = s
124e0 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
124f0 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d  2(p->db, zSql, -
12500 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20  1, &pStmt, 0);. 
12510 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53   sqlite3_free(zS
12520 71 6c 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ql);.  if( rc ) 
12530 72 65 74 75 72 6e 20 30 3b 0a 20 20 77 68 69 6c  return 0;.  whil
12540 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  e( sqlite3_step(
12550 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52  pStmt)==SQLITE_R
12560 4f 57 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 43  OW ){.    if( nC
12570 6f 6c 3e 3d 6e 41 6c 6c 6f 63 2d 32 20 29 7b 0a  ol>=nAlloc-2 ){.
12580 20 20 20 20 20 20 6e 41 6c 6c 6f 63 20 3d 20 6e        nAlloc = n
12590 41 6c 6c 6f 63 2a 32 20 2b 20 6e 43 6f 6c 20 2b  Alloc*2 + nCol +
125a0 20 31 30 3b 0a 20 20 20 20 20 20 61 7a 43 6f 6c   10;.      azCol
125b0 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c   = sqlite3_reall
125c0 6f 63 28 61 7a 43 6f 6c 2c 20 6e 41 6c 6c 6f 63  oc(azCol, nAlloc
125d0 2a 73 69 7a 65 6f 66 28 61 7a 43 6f 6c 5b 30 5d  *sizeof(azCol[0]
125e0 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 61 7a  ));.      if( az
125f0 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Col==0 ){.      
12600 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
12610 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75 74  err, "Error: out
12620 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a   of memory\n");.
12630 20 20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b          exit(1);
12640 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
12650 20 20 20 61 7a 43 6f 6c 5b 2b 2b 6e 43 6f 6c 5d     azCol[++nCol]
12660 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
12670 74 66 28 22 25 73 22 2c 20 73 71 6c 69 74 65 33  tf("%s", sqlite3
12680 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
12690 6d 74 2c 20 31 29 29 3b 0a 20 20 20 20 69 66 28  mt, 1));.    if(
126a0 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
126b0 69 6e 74 28 70 53 74 6d 74 2c 20 35 29 20 29 7b  int(pStmt, 5) ){
126c0 0a 20 20 20 20 20 20 6e 50 4b 2b 2b 3b 0a 20 20  .      nPK++;.  
126d0 20 20 20 20 69 66 28 20 6e 50 4b 3d 3d 31 0a 20      if( nPK==1. 
126e0 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
126f0 5f 73 74 72 69 63 6d 70 28 28 63 6f 6e 73 74 20  _stricmp((const 
12700 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f  char*)sqlite3_co
12710 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c  lumn_text(pStmt,
12720 32 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  2),.            
12730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
12740 4e 54 45 47 45 52 22 29 3d 3d 30 0a 20 20 20 20  NTEGER")==0.    
12750 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 73 49    ){.        isI
12760 50 4b 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65  PK = 1;.      }e
12770 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 73 49  lse{.        isI
12780 50 4b 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  PK = 0;.      }.
12790 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
127a0 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
127b0 6d 74 29 3b 0a 20 20 69 66 28 20 61 7a 43 6f 6c  mt);.  if( azCol
127c0 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
127d0 20 20 61 7a 43 6f 6c 5b 30 5d 20 3d 20 30 3b 0a    azCol[0] = 0;.
127e0 20 20 61 7a 43 6f 6c 5b 6e 43 6f 6c 2b 31 5d 20    azCol[nCol+1] 
127f0 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 64  = 0;..  /* The d
12800 65 63 69 73 69 6f 6e 20 6f 66 20 77 68 65 74 68  ecision of wheth
12810 65 72 20 6f 72 20 6e 6f 74 20 61 20 72 6f 77 69  er or not a rowi
12820 64 20 72 65 61 6c 6c 79 20 6e 65 65 64 73 20 74  d really needs t
12830 6f 20 62 65 20 70 72 65 73 65 72 76 65 64 0a 20  o be preserved. 
12840 20 2a 2a 20 69 73 20 74 72 69 63 6b 79 2e 20 20   ** is tricky.  
12850 57 65 20 6e 65 76 65 72 20 6e 65 65 64 20 74 6f  We never need to
12860 20 70 72 65 73 65 72 76 65 20 61 20 72 6f 77 69   preserve a rowi
12870 64 20 66 6f 72 20 61 20 57 49 54 48 4f 55 54 20  d for a WITHOUT 
12880 52 4f 57 49 44 20 74 61 62 6c 65 0a 20 20 2a 2a  ROWID table.  **
12890 20 6f 72 20 61 20 74 61 62 6c 65 20 77 69 74 68   or a table with
128a0 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d   an INTEGER PRIM
128b0 41 52 59 20 4b 45 59 2e 20 20 57 65 20 61 72 65  ARY KEY.  We are
128c0 20 75 6e 61 62 6c 65 20 74 6f 20 70 72 65 73 65   unable to prese
128d0 72 76 65 0a 20 20 2a 2a 20 72 6f 77 69 64 73 20  rve.  ** rowids 
128e0 6f 6e 20 74 61 62 6c 65 73 20 77 68 65 72 65 20  on tables where 
128f0 74 68 65 20 72 6f 77 69 64 20 69 73 20 69 6e 61  the rowid is ina
12900 63 63 65 73 73 69 62 6c 65 20 62 65 63 61 75 73  ccessible becaus
12910 65 20 74 68 65 72 65 20 61 72 65 20 6f 74 68 65  e there are othe
12920 72 0a 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 20 69  r.  ** columns i
12930 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
12940 64 20 22 72 6f 77 69 64 22 2c 20 22 5f 72 6f 77  d "rowid", "_row
12950 69 64 5f 22 2c 20 61 6e 64 20 22 6f 69 64 22 2e  id_", and "oid".
12960 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 72 65 73  .  */.  if( pres
12970 65 72 76 65 52 6f 77 69 64 20 26 26 20 69 73 49  erveRowid && isI
12980 50 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  PK ){.    /* If 
12990 61 20 73 69 6e 67 6c 65 20 50 52 49 4d 41 52 59  a single PRIMARY
129a0 20 4b 45 59 20 63 6f 6c 75 6d 6e 20 77 69 74 68   KEY column with
129b0 20 74 79 70 65 20 49 4e 54 45 47 45 52 20 77 61   type INTEGER wa
129c0 73 20 73 65 65 6e 2c 20 74 68 65 6e 20 69 74 0a  s seen, then it.
129d0 20 20 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20      ** might be 
129e0 61 6e 20 61 6c 69 73 65 20 66 6f 72 20 74 68 65  an alise for the
129f0 20 52 4f 57 49 44 2e 20 20 42 75 74 20 69 74 20   ROWID.  But it 
12a00 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20  might also be a 
12a10 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a 20 20  WITHOUT ROWID.  
12a20 20 20 2a 2a 20 74 61 62 6c 65 20 6f 72 20 61 20    ** table or a 
12a30 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
12a40 4b 45 59 20 44 45 53 43 20 63 6f 6c 75 6d 6e 2c  KEY DESC column,
12a50 20 6e 65 69 74 68 65 72 20 6f 66 20 77 68 69 63   neither of whic
12a60 68 20 61 72 65 0a 20 20 20 20 2a 2a 20 52 4f 57  h are.    ** ROW
12a70 49 44 20 61 6c 69 61 73 65 73 2e 20 20 54 6f 20  ID aliases.  To 
12a80 64 69 73 74 69 6e 67 75 69 73 68 20 74 68 65 73  distinguish thes
12a90 65 20 63 61 73 65 73 2c 20 63 68 65 63 6b 20 74  e cases, check t
12aa0 6f 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20  o see if.    ** 
12ab0 74 68 65 72 65 20 69 73 20 61 20 22 70 6b 22 20  there is a "pk" 
12ac0 65 6e 74 72 79 20 69 6e 20 22 50 52 41 47 4d 41  entry in "PRAGMA
12ad0 20 69 6e 64 65 78 5f 6c 69 73 74 22 2e 20 20 54   index_list".  T
12ae0 68 65 72 65 20 77 69 6c 6c 20 62 65 0a 20 20 20  here will be.   
12af0 20 2a 2a 20 6e 6f 20 22 70 6b 22 20 69 6e 64 65   ** no "pk" inde
12b00 78 20 69 66 20 74 68 65 20 50 52 49 4d 41 52 59  x if the PRIMARY
12b10 20 4b 45 59 20 72 65 61 6c 6c 79 20 69 73 20 61   KEY really is a
12b20 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
12b30 52 4f 57 49 44 2e 0a 20 20 20 20 2a 2f 0a 20 20  ROWID..    */.  
12b40 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
12b50 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c 45 43 54  _mprintf("SELECT
12b60 20 31 20 46 52 4f 4d 20 70 72 61 67 6d 61 5f 69   1 FROM pragma_i
12b70 6e 64 65 78 5f 6c 69 73 74 28 25 51 29 22 0a 20  ndex_list(%Q)". 
12b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b90 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52            " WHER
12ba0 45 20 6f 72 69 67 69 6e 3d 27 70 6b 27 22 2c 20  E origin='pk'", 
12bb0 7a 54 61 62 29 3b 0a 20 20 20 20 72 63 20 3d 20  zTab);.    rc = 
12bc0 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
12bd0 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20  v2(p->db, zSql, 
12be0 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a  -1, &pStmt, 0);.
12bf0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
12c00 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66 28 20  (zSql);.    if( 
12c10 72 63 20 29 7b 0a 20 20 20 20 20 20 66 72 65 65  rc ){.      free
12c20 43 6f 6c 75 6d 6e 4c 69 73 74 28 61 7a 43 6f 6c  ColumnList(azCol
12c30 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
12c40 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20  0;.    }.    rc 
12c50 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  = sqlite3_step(p
12c60 53 74 6d 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  Stmt);.    sqlit
12c70 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d  e3_finalize(pStm
12c80 74 29 3b 0a 20 20 20 20 70 72 65 73 65 72 76 65  t);.    preserve
12c90 52 6f 77 69 64 20 3d 20 72 63 3d 3d 53 51 4c 49  Rowid = rc==SQLI
12ca0 54 45 5f 52 4f 57 3b 0a 20 20 7d 0a 20 20 69 66  TE_ROW;.  }.  if
12cb0 28 20 70 72 65 73 65 72 76 65 52 6f 77 69 64 20  ( preserveRowid 
12cc0 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70  ){.    /* Only p
12cd0 72 65 73 65 72 76 65 20 74 68 65 20 72 6f 77 69  reserve the rowi
12ce0 64 20 69 66 20 77 65 20 63 61 6e 20 66 69 6e 64  d if we can find
12cf0 20 61 20 6e 61 6d 65 20 74 6f 20 75 73 65 20 66   a name to use f
12d00 6f 72 20 74 68 65 0a 20 20 20 20 2a 2a 20 72 6f  or the.    ** ro
12d10 77 69 64 20 2a 2f 0a 20 20 20 20 73 74 61 74 69  wid */.    stati
12d20 63 20 63 68 61 72 20 2a 61 7a 52 6f 77 69 64 5b  c char *azRowid[
12d30 5d 20 3d 20 7b 20 22 72 6f 77 69 64 22 2c 20 22  ] = { "rowid", "
12d40 5f 72 6f 77 69 64 5f 22 2c 20 22 6f 69 64 22 20  _rowid_", "oid" 
12d50 7d 3b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 3b  };.    int i, j;
12d60 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c  .    for(j=0; j<
12d70 33 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 66  3; j++){.      f
12d80 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 43 6f 6c 3b  or(i=1; i<=nCol;
12d90 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
12da0 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63  f( sqlite3_stric
12db0 6d 70 28 61 7a 52 6f 77 69 64 5b 6a 5d 2c 61 7a  mp(azRowid[j],az
12dc0 43 6f 6c 5b 69 5d 29 3d 3d 30 20 29 20 62 72 65  Col[i])==0 ) bre
12dd0 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
12de0 20 20 69 66 28 20 69 3e 6e 43 6f 6c 20 29 7b 0a    if( i>nCol ){.
12df0 20 20 20 20 20 20 20 20 2f 2a 20 41 74 20 74 68          /* At th
12e00 69 73 20 70 6f 69 6e 74 2c 20 77 65 20 6b 6e 6f  is point, we kno
12e10 77 20 74 68 61 74 20 61 7a 52 6f 77 69 64 5b 6a  w that azRowid[j
12e20 5d 20 69 73 20 6e 6f 74 20 74 68 65 20 6e 61 6d  ] is not the nam
12e30 65 20 6f 66 20 61 6e 79 0a 20 20 20 20 20 20 20  e of any.       
12e40 20 2a 2a 20 6f 72 64 69 6e 61 72 79 20 63 6f 6c   ** ordinary col
12e50 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65  umn in the table
12e60 2e 20 20 56 65 72 69 66 79 20 74 68 61 74 20 61  .  Verify that a
12e70 7a 52 6f 77 69 64 5b 6a 5d 20 69 73 20 61 20 76  zRowid[j] is a v
12e80 61 6c 69 64 0a 20 20 20 20 20 20 20 20 2a 2a 20  alid.        ** 
12e90 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 72 6f 77  name for the row
12ea0 69 64 20 62 65 66 6f 72 65 20 61 64 64 69 6e 67  id before adding
12eb0 20 69 74 20 74 6f 20 61 7a 43 6f 6c 5b 30 5d 2e   it to azCol[0].
12ec0 20 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a    WITHOUT ROWID.
12ed0 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65          ** table
12ee0 73 20 77 69 6c 6c 20 66 61 69 6c 20 74 68 69 73  s will fail this
12ef0 20 6c 61 73 74 20 63 68 65 63 6b 20 2a 2f 0a 20   last check */. 
12f00 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
12f10 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
12f20 5f 6d 65 74 61 64 61 74 61 28 70 2d 3e 64 62 2c  _metadata(p->db,
12f30 30 2c 7a 54 61 62 2c 61 7a 52 6f 77 69 64 5b 6a  0,zTab,azRowid[j
12f40 5d 2c 30 2c 30 2c 30 2c 30 2c 30 29 3b 0a 20 20  ],0,0,0,0,0);.  
12f50 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
12f60 4c 49 54 45 5f 4f 4b 20 29 20 61 7a 43 6f 6c 5b  LITE_OK ) azCol[
12f70 30 5d 20 3d 20 61 7a 52 6f 77 69 64 5b 6a 5d 3b  0] = azRowid[j];
12f80 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
12f90 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
12fa0 7d 0a 20 20 72 65 74 75 72 6e 20 61 7a 43 6f 6c  }.  return azCol
12fb0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 6f 67 67 6c  ;.}../*.** Toggl
12fc0 65 20 74 68 65 20 72 65 76 65 72 73 65 5f 75 6e  e the reverse_un
12fd0 6f 72 64 65 72 65 64 5f 73 65 6c 65 63 74 73 20  ordered_selects 
12fe0 73 65 74 74 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74  setting..*/.stat
12ff0 69 63 20 76 6f 69 64 20 74 6f 67 67 6c 65 53 65  ic void toggleSe
13000 6c 65 63 74 4f 72 64 65 72 28 73 71 6c 69 74 65  lectOrder(sqlite
13010 33 20 2a 64 62 29 7b 0a 20 20 73 71 6c 69 74 65  3 *db){.  sqlite
13020 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20  3_stmt *pStmt = 
13030 30 3b 0a 20 20 69 6e 74 20 69 53 65 74 74 69 6e  0;.  int iSettin
13040 67 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a 53  g = 0;.  char zS
13050 74 6d 74 5b 31 30 30 5d 3b 0a 20 20 73 71 6c 69  tmt[100];.  sqli
13060 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 64  te3_prepare_v2(d
13070 62 2c 20 22 50 52 41 47 4d 41 20 72 65 76 65 72  b, "PRAGMA rever
13080 73 65 5f 75 6e 6f 72 64 65 72 65 64 5f 73 65 6c  se_unordered_sel
13090 65 63 74 73 22 2c 20 2d 31 2c 20 26 70 53 74 6d  ects", -1, &pStm
130a0 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 73 71 6c  t, 0);.  if( sql
130b0 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29  ite3_step(pStmt)
130c0 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a  ==SQLITE_ROW ){.
130d0 20 20 20 20 69 53 65 74 74 69 6e 67 20 3d 20 73      iSetting = s
130e0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
130f0 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 7d  t(pStmt, 0);.  }
13100 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
13110 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 73 71  ize(pStmt);.  sq
13120 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
13130 69 7a 65 6f 66 28 7a 53 74 6d 74 29 2c 20 7a 53  izeof(zStmt), zS
13140 74 6d 74 2c 0a 20 20 20 20 20 20 20 22 50 52 41  tmt,.       "PRA
13150 47 4d 41 20 72 65 76 65 72 73 65 5f 75 6e 6f 72  GMA reverse_unor
13160 64 65 72 65 64 5f 73 65 6c 65 63 74 73 28 25 64  dered_selects(%d
13170 29 22 2c 20 21 69 53 65 74 74 69 6e 67 29 3b 0a  )", !iSetting);.
13180 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64    sqlite3_exec(d
13190 62 2c 20 7a 53 74 6d 74 2c 20 30 2c 20 30 2c 20  b, zStmt, 0, 0, 
131a0 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  0);.}../*.** Thi
131b0 73 20 69 73 20 61 20 64 69 66 66 65 72 65 6e 74  s is a different
131c0 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e   callback routin
131d0 65 20 75 73 65 64 20 66 6f 72 20 64 75 6d 70 69  e used for dumpi
131e0 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  ng the database.
131f0 0a 2a 2a 20 45 61 63 68 20 72 6f 77 20 72 65 63  .** Each row rec
13200 65 69 76 65 64 20 62 79 20 74 68 69 73 20 63 61  eived by this ca
13210 6c 6c 62 61 63 6b 20 63 6f 6e 73 69 73 74 73 20  llback consists 
13220 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2c  of a table name,
13230 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 79  .** the table ty
13240 70 65 20 28 22 69 6e 64 65 78 22 20 6f 72 20 22  pe ("index" or "
13250 74 61 62 6c 65 22 29 20 61 6e 64 20 53 51 4c 20  table") and SQL 
13260 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 74 61  to create the ta
13270 62 6c 65 2e 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ble..** This rou
13280 74 69 6e 65 20 73 68 6f 75 6c 64 20 70 72 69 6e  tine should prin
13290 74 20 74 65 78 74 20 73 75 66 66 69 63 69 65 6e  t text sufficien
132a0 74 20 74 6f 20 72 65 63 72 65 61 74 65 20 74 68  t to recreate th
132b0 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74  e table..*/.stat
132c0 69 63 20 69 6e 74 20 64 75 6d 70 5f 63 61 6c 6c  ic int dump_call
132d0 62 61 63 6b 28 76 6f 69 64 20 2a 70 41 72 67 2c  back(void *pArg,
132e0 20 69 6e 74 20 6e 41 72 67 2c 20 63 68 61 72 20   int nArg, char 
132f0 2a 2a 61 7a 41 72 67 2c 20 63 68 61 72 20 2a 2a  **azArg, char **
13300 61 7a 4e 6f 74 55 73 65 64 29 7b 0a 20 20 69 6e  azNotUsed){.  in
13310 74 20 72 63 3b 0a 20 20 63 6f 6e 73 74 20 63 68  t rc;.  const ch
13320 61 72 20 2a 7a 54 61 62 6c 65 3b 0a 20 20 63 6f  ar *zTable;.  co
13330 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  nst char *zType;
13340 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
13350 53 71 6c 3b 0a 20 20 53 68 65 6c 6c 53 74 61 74  Sql;.  ShellStat
13360 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53 74 61  e *p = (ShellSta
13370 74 65 20 2a 29 70 41 72 67 3b 0a 0a 20 20 55 4e  te *)pArg;..  UN
13380 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 61  USED_PARAMETER(a
13390 7a 4e 6f 74 55 73 65 64 29 3b 0a 20 20 69 66 28  zNotUsed);.  if(
133a0 20 6e 41 72 67 21 3d 33 20 7c 7c 20 61 7a 41 72   nArg!=3 || azAr
133b0 67 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  g==0 ) return 0;
133c0 0a 20 20 7a 54 61 62 6c 65 20 3d 20 61 7a 41 72  .  zTable = azAr
133d0 67 5b 30 5d 3b 0a 20 20 7a 54 79 70 65 20 3d 20  g[0];.  zType = 
133e0 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 7a 53 71 6c  azArg[1];.  zSql
133f0 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a 0a 20 20   = azArg[2];..  
13400 69 66 28 20 73 74 72 63 6d 70 28 7a 54 61 62 6c  if( strcmp(zTabl
13410 65 2c 20 22 73 71 6c 69 74 65 5f 73 65 71 75 65  e, "sqlite_seque
13420 6e 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  nce")==0 ){.    
13430 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
13440 74 2c 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20  t, "DELETE FROM 
13450 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b  sqlite_sequence;
13460 5c 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  \n");.  }else if
13470 28 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f  ( sqlite3_strglo
13480 62 28 22 73 71 6c 69 74 65 5f 73 74 61 74 3f 22  b("sqlite_stat?"
13490 2c 20 7a 54 61 62 6c 65 29 3d 3d 30 20 29 7b 0a  , zTable)==0 ){.
134a0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
134b0 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45 20  ->out, "ANALYZE 
134c0 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c 6e  sqlite_master;\n
134d0 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
134e0 73 74 72 6e 63 6d 70 28 7a 54 61 62 6c 65 2c 20  strncmp(zTable, 
134f0 22 73 71 6c 69 74 65 5f 22 2c 20 37 29 3d 3d 30  "sqlite_", 7)==0
13500 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30   ){.    return 0
13510 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  ;.  }else if( st
13520 72 6e 63 6d 70 28 7a 53 71 6c 2c 20 22 43 52 45  rncmp(zSql, "CRE
13530 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
13540 45 22 2c 20 32 30 29 3d 3d 30 20 29 7b 0a 20 20  E", 20)==0 ){.  
13550 20 20 63 68 61 72 20 2a 7a 49 6e 73 3b 0a 20 20    char *zIns;.  
13560 20 20 69 66 28 20 21 70 2d 3e 77 72 69 74 61 62    if( !p->writab
13570 6c 65 53 63 68 65 6d 61 20 29 7b 0a 20 20 20 20  leSchema ){.    
13580 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
13590 6f 75 74 2c 20 22 50 52 41 47 4d 41 20 77 72 69  out, "PRAGMA wri
135a0 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b  table_schema=ON;
135b0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 70 2d 3e 77  \n");.      p->w
135c0 72 69 74 61 62 6c 65 53 63 68 65 6d 61 20 3d 20  ritableSchema = 
135d0 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 49 6e  1;.    }.    zIn
135e0 73 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  s = sqlite3_mpri
135f0 6e 74 66 28 0a 20 20 20 20 20 20 20 22 49 4e 53  ntf(.       "INS
13600 45 52 54 20 49 4e 54 4f 20 73 71 6c 69 74 65 5f  ERT INTO sqlite_
13610 6d 61 73 74 65 72 28 74 79 70 65 2c 6e 61 6d 65  master(type,name
13620 2c 74 62 6c 5f 6e 61 6d 65 2c 72 6f 6f 74 70 61  ,tbl_name,rootpa
13630 67 65 2c 73 71 6c 29 22 0a 20 20 20 20 20 20 20  ge,sql)".       
13640 22 56 41 4c 55 45 53 28 27 74 61 62 6c 65 27 2c  "VALUES('table',
13650 27 25 71 27 2c 27 25 71 27 2c 30 2c 27 25 71 27  '%q','%q',0,'%q'
13660 29 3b 22 2c 0a 20 20 20 20 20 20 20 7a 54 61 62  );",.       zTab
13670 6c 65 2c 20 7a 54 61 62 6c 65 2c 20 7a 53 71 6c  le, zTable, zSql
13680 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
13690 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e  tf(p->out, "%s\n
136a0 22 2c 20 7a 49 6e 73 29 3b 0a 20 20 20 20 73 71  ", zIns);.    sq
136b0 6c 69 74 65 33 5f 66 72 65 65 28 7a 49 6e 73 29  lite3_free(zIns)
136c0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  ;.    return 0;.
136d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 72 69    }else{.    pri
136e0 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 70 2d 3e  ntSchemaLine(p->
136f0 6f 75 74 2c 20 7a 53 71 6c 2c 20 22 3b 5c 6e 22  out, zSql, ";\n"
13700 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 73 74  );.  }..  if( st
13710 72 63 6d 70 28 7a 54 79 70 65 2c 20 22 74 61 62  rcmp(zType, "tab
13720 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 53  le")==0 ){.    S
13730 68 65 6c 6c 54 65 78 74 20 73 53 65 6c 65 63 74  hellText sSelect
13740 3b 0a 20 20 20 20 53 68 65 6c 6c 54 65 78 74 20  ;.    ShellText 
13750 73 54 61 62 6c 65 3b 0a 20 20 20 20 63 68 61 72  sTable;.    char
13760 20 2a 2a 61 7a 43 6f 6c 3b 0a 20 20 20 20 69 6e   **azCol;.    in
13770 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 2a 73  t i;.    char *s
13780 61 76 65 64 44 65 73 74 54 61 62 6c 65 3b 0a 20  avedDestTable;. 
13790 20 20 20 69 6e 74 20 73 61 76 65 64 4d 6f 64 65     int savedMode
137a0 3b 0a 0a 20 20 20 20 61 7a 43 6f 6c 20 3d 20 74  ;..    azCol = t
137b0 61 62 6c 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 70  ableColumnList(p
137c0 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20 69  , zTable);.    i
137d0 66 28 20 61 7a 43 6f 6c 3d 3d 30 20 29 7b 0a 20  f( azCol==0 ){. 
137e0 20 20 20 20 20 70 2d 3e 6e 45 72 72 2b 2b 3b 0a       p->nErr++;.
137f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a        return 0;.
13800 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 41 6c      }..    /* Al
13810 77 61 79 73 20 71 75 6f 74 65 20 74 68 65 20 74  ways quote the t
13820 61 62 6c 65 20 6e 61 6d 65 2c 20 65 76 65 6e 20  able name, even 
13830 69 66 20 69 74 20 61 70 70 65 61 72 73 20 74 6f  if it appears to
13840 20 62 65 20 70 75 72 65 20 61 73 63 69 69 2c 0a   be pure ascii,.
13850 20 20 20 20 2a 2a 20 69 6e 20 63 61 73 65 20 69      ** in case i
13860 74 20 69 73 20 61 20 6b 65 79 77 6f 72 64 2e 20  t is a keyword. 
13870 45 78 3a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  Ex:  INSERT INTO
13880 20 22 74 61 62 6c 65 22 20 2e 2e 2e 20 2a 2f 0a   "table" ... */.
13890 20 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 54      initText(&sT
138a0 61 62 6c 65 29 3b 0a 20 20 20 20 61 70 70 65 6e  able);.    appen
138b0 64 54 65 78 74 28 26 73 54 61 62 6c 65 2c 20 7a  dText(&sTable, z
138c0 54 61 62 6c 65 2c 20 71 75 6f 74 65 43 68 61 72  Table, quoteChar
138d0 28 7a 54 61 62 6c 65 29 29 3b 0a 20 20 20 20 2f  (zTable));.    /
138e0 2a 20 49 66 20 70 72 65 73 65 72 76 69 6e 67 20  * If preserving 
138f0 74 68 65 20 72 6f 77 69 64 2c 20 61 64 64 20 61  the rowid, add a
13900 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 66 74   column list aft
13910 65 72 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  er the table nam
13920 65 2e 0a 20 20 20 20 2a 2a 20 49 6e 20 6f 74 68  e..    ** In oth
13930 65 72 20 77 6f 72 64 73 3a 20 20 22 49 4e 53 45  er words:  "INSE
13940 52 54 20 49 4e 54 4f 20 74 61 62 28 72 6f 77 69  RT INTO tab(rowi
13950 64 2c 61 2c 62 2c 63 2c 2e 2e 2e 29 20 56 41 4c  d,a,b,c,...) VAL
13960 55 45 53 28 2e 2e 2e 29 22 0a 20 20 20 20 2a 2a  UES(...)".    **
13970 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
13980 75 73 75 61 6c 20 22 49 4e 53 45 52 54 20 49 4e  usual "INSERT IN
13990 54 4f 20 74 61 62 20 56 41 4c 55 45 53 28 2e 2e  TO tab VALUES(..
139a0 2e 29 22 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  .)"..    */.    
139b0 69 66 28 20 61 7a 43 6f 6c 5b 30 5d 20 29 7b 0a  if( azCol[0] ){.
139c0 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
139d0 28 26 73 54 61 62 6c 65 2c 20 22 28 22 2c 20 30  (&sTable, "(", 0
139e0 29 3b 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54  );.      appendT
139f0 65 78 74 28 26 73 54 61 62 6c 65 2c 20 61 7a 43  ext(&sTable, azC
13a00 6f 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20  ol[0], 0);.     
13a10 20 66 6f 72 28 69 3d 31 3b 20 61 7a 43 6f 6c 5b   for(i=1; azCol[
13a20 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  i]; i++){.      
13a30 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 54    appendText(&sT
13a40 61 62 6c 65 2c 20 22 2c 22 2c 20 30 29 3b 0a 20  able, ",", 0);. 
13a50 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
13a60 74 28 26 73 54 61 62 6c 65 2c 20 61 7a 43 6f 6c  t(&sTable, azCol
13a70 5b 69 5d 2c 20 71 75 6f 74 65 43 68 61 72 28 61  [i], quoteChar(a
13a80 7a 43 6f 6c 5b 69 5d 29 29 3b 0a 20 20 20 20 20  zCol[i]));.     
13a90 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54   }.      appendT
13aa0 65 78 74 28 26 73 54 61 62 6c 65 2c 20 22 29 22  ext(&sTable, ")"
13ab0 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  , 0);.    }..   
13ac0 20 2f 2a 20 42 75 69 6c 64 20 61 6e 20 61 70 70   /* Build an app
13ad0 72 6f 70 72 69 61 74 65 20 53 45 4c 45 43 54 20  ropriate SELECT 
13ae0 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 20  statement */.   
13af0 20 69 6e 69 74 54 65 78 74 28 26 73 53 65 6c 65   initText(&sSele
13b00 63 74 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54  ct);.    appendT
13b10 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 53  ext(&sSelect, "S
13b20 45 4c 45 43 54 20 22 2c 20 30 29 3b 0a 20 20 20  ELECT ", 0);.   
13b30 20 69 66 28 20 61 7a 43 6f 6c 5b 30 5d 20 29 7b   if( azCol[0] ){
13b40 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78  .      appendTex
13b50 74 28 26 73 53 65 6c 65 63 74 2c 20 61 7a 43 6f  t(&sSelect, azCo
13b60 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20  l[0], 0);.      
13b70 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c  appendText(&sSel
13b80 65 63 74 2c 20 22 2c 22 2c 20 30 29 3b 0a 20 20  ect, ",", 0);.  
13b90 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b    }.    for(i=1;
13ba0 20 61 7a 43 6f 6c 5b 69 5d 3b 20 69 2b 2b 29 7b   azCol[i]; i++){
13bb0 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78  .      appendTex
13bc0 74 28 26 73 53 65 6c 65 63 74 2c 20 61 7a 43 6f  t(&sSelect, azCo
13bd0 6c 5b 69 5d 2c 20 71 75 6f 74 65 43 68 61 72 28  l[i], quoteChar(
13be0 61 7a 43 6f 6c 5b 69 5d 29 29 3b 0a 20 20 20 20  azCol[i]));.    
13bf0 20 20 69 66 28 20 61 7a 43 6f 6c 5b 69 2b 31 5d    if( azCol[i+1]
13c00 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65   ){.        appe
13c10 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c  ndText(&sSelect,
13c20 20 22 2c 22 2c 20 30 29 3b 0a 20 20 20 20 20 20   ",", 0);.      
13c30 7d 0a 20 20 20 20 7d 0a 20 20 20 20 66 72 65 65  }.    }.    free
13c40 43 6f 6c 75 6d 6e 4c 69 73 74 28 61 7a 43 6f 6c  ColumnList(azCol
13c50 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54 65 78  );.    appendTex
13c60 74 28 26 73 53 65 6c 65 63 74 2c 20 22 20 46 52  t(&sSelect, " FR
13c70 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 61 70  OM ", 0);.    ap
13c80 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63  pendText(&sSelec
13c90 74 2c 20 7a 54 61 62 6c 65 2c 20 71 75 6f 74 65  t, zTable, quote
13ca0 43 68 61 72 28 7a 54 61 62 6c 65 29 29 3b 0a 0a  Char(zTable));..
13cb0 20 20 20 20 73 61 76 65 64 44 65 73 74 54 61 62      savedDestTab
13cc0 6c 65 20 3d 20 70 2d 3e 7a 44 65 73 74 54 61 62  le = p->zDestTab
13cd0 6c 65 3b 0a 20 20 20 20 73 61 76 65 64 4d 6f 64  le;.    savedMod
13ce0 65 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20 20  e = p->mode;.   
13cf0 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20 3d   p->zDestTable =
13d00 20 73 54 61 62 6c 65 2e 7a 3b 0a 20 20 20 20 70   sTable.z;.    p
13d10 2d 3e 6d 6f 64 65 20 3d 20 70 2d 3e 63 4d 6f 64  ->mode = p->cMod
13d20 65 20 3d 20 4d 4f 44 45 5f 49 6e 73 65 72 74 3b  e = MODE_Insert;
13d30 0a 20 20 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f  .    rc = shell_
13d40 65 78 65 63 28 70 2d 3e 64 62 2c 20 73 53 65 6c  exec(p->db, sSel
13d50 65 63 74 2e 7a 2c 20 73 68 65 6c 6c 5f 63 61 6c  ect.z, shell_cal
13d60 6c 62 61 63 6b 2c 20 70 2c 20 30 29 3b 0a 20 20  lback, p, 0);.  
13d70 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d    if( (rc&0xff)=
13d80 3d 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20  =SQLITE_CORRUPT 
13d90 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
13da0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a  ntf(p->out, "/**
13db0 2a 2a 2a 2a 20 43 4f 52 52 55 50 54 49 4f 4e 20  **** CORRUPTION 
13dc0 45 52 52 4f 52 20 2a 2a 2a 2a 2a 2a 2a 2f 5c 6e  ERROR *******/\n
13dd0 22 29 3b 0a 20 20 20 20 20 20 74 6f 67 67 6c 65  ");.      toggle
13de0 53 65 6c 65 63 74 4f 72 64 65 72 28 70 2d 3e 64  SelectOrder(p->d
13df0 62 29 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f  b);.      shell_
13e00 65 78 65 63 28 70 2d 3e 64 62 2c 20 73 53 65 6c  exec(p->db, sSel
13e10 65 63 74 2e 7a 2c 20 73 68 65 6c 6c 5f 63 61 6c  ect.z, shell_cal
13e20 6c 62 61 63 6b 2c 20 70 2c 20 30 29 3b 0a 20 20  lback, p, 0);.  
13e30 20 20 20 20 74 6f 67 67 6c 65 53 65 6c 65 63 74      toggleSelect
13e40 4f 72 64 65 72 28 70 2d 3e 64 62 29 3b 0a 20 20  Order(p->db);.  
13e50 20 20 7d 0a 20 20 20 20 70 2d 3e 7a 44 65 73 74    }.    p->zDest
13e60 54 61 62 6c 65 20 3d 20 73 61 76 65 64 44 65 73  Table = savedDes
13e70 74 54 61 62 6c 65 3b 0a 20 20 20 20 70 2d 3e 6d  tTable;.    p->m
13e80 6f 64 65 20 3d 20 73 61 76 65 64 4d 6f 64 65 3b  ode = savedMode;
13e90 0a 20 20 20 20 66 72 65 65 54 65 78 74 28 26 73  .    freeText(&s
13ea0 54 61 62 6c 65 29 3b 0a 20 20 20 20 66 72 65 65  Table);.    free
13eb0 54 65 78 74 28 26 73 53 65 6c 65 63 74 29 3b 0a  Text(&sSelect);.
13ec0 20 20 20 20 69 66 28 20 72 63 20 29 20 70 2d 3e      if( rc ) p->
13ed0 6e 45 72 72 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65  nErr++;.  }.  re
13ee0 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
13ef0 20 52 75 6e 20 7a 51 75 65 72 79 2e 20 20 55 73   Run zQuery.  Us
13f00 65 20 64 75 6d 70 5f 63 61 6c 6c 62 61 63 6b 28  e dump_callback(
13f10 29 20 61 73 20 74 68 65 20 63 61 6c 6c 62 61 63  ) as the callbac
13f20 6b 20 72 6f 75 74 69 6e 65 20 73 6f 20 74 68 61  k routine so tha
13f30 74 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  t.** the content
13f40 73 20 6f 66 20 74 68 65 20 71 75 65 72 79 20 61  s of the query a
13f50 72 65 20 6f 75 74 70 75 74 20 61 73 20 53 51 4c  re output as SQL
13f60 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
13f70 2a 2a 20 49 66 20 77 65 20 67 65 74 20 61 20 53  ** If we get a S
13f80 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72  QLITE_CORRUPT er
13f90 72 6f 72 2c 20 72 65 72 75 6e 20 74 68 65 20 71  ror, rerun the q
13fa0 75 65 72 79 20 61 66 74 65 72 20 61 70 70 65 6e  uery after appen
13fb0 64 69 6e 67 0a 2a 2a 20 22 4f 52 44 45 52 20 42  ding.** "ORDER B
13fc0 59 20 72 6f 77 69 64 20 44 45 53 43 22 20 74 6f  Y rowid DESC" to
13fd0 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 61   the end..*/.sta
13fe0 74 69 63 20 69 6e 74 20 72 75 6e 5f 73 63 68 65  tic int run_sche
13ff0 6d 61 5f 64 75 6d 70 5f 71 75 65 72 79 28 0a 20  ma_dump_query(. 
14000 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 0a   ShellState *p,.
14010 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 51    const char *zQ
14020 75 65 72 79 0a 29 7b 0a 20 20 69 6e 74 20 72 63  uery.){.  int rc
14030 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20 3d  ;.  char *zErr =
14040 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
14050 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a  e3_exec(p->db, z
14060 51 75 65 72 79 2c 20 64 75 6d 70 5f 63 61 6c 6c  Query, dump_call
14070 62 61 63 6b 2c 20 70 2c 20 26 7a 45 72 72 29 3b  back, p, &zErr);
14080 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
14090 45 5f 43 4f 52 52 55 50 54 20 29 7b 0a 20 20 20  E_CORRUPT ){.   
140a0 20 63 68 61 72 20 2a 7a 51 32 3b 0a 20 20 20 20   char *zQ2;.    
140b0 69 6e 74 20 6c 65 6e 20 3d 20 73 74 72 6c 65 6e  int len = strlen
140c0 33 30 28 7a 51 75 65 72 79 29 3b 0a 20 20 20 20  30(zQuery);.    
140d0 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
140e0 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 43 4f 52 52  t, "/****** CORR
140f0 55 50 54 49 4f 4e 20 45 52 52 4f 52 20 2a 2a 2a  UPTION ERROR ***
14100 2a 2a 2a 2a 2f 5c 6e 22 29 3b 0a 20 20 20 20 69  ****/\n");.    i
14110 66 28 20 7a 45 72 72 20 29 7b 0a 20 20 20 20 20  f( zErr ){.     
14120 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
14130 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 25 73  out, "/****** %s
14140 20 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20 7a 45 72   ******/\n", zEr
14150 72 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  r);.      sqlite
14160 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a 20 20  3_free(zErr);.  
14170 20 20 20 20 7a 45 72 72 20 3d 20 30 3b 0a 20 20      zErr = 0;.  
14180 20 20 7d 0a 20 20 20 20 7a 51 32 20 3d 20 6d 61    }.    zQ2 = ma
14190 6c 6c 6f 63 28 20 6c 65 6e 2b 31 30 30 20 29 3b  lloc( len+100 );
141a0 0a 20 20 20 20 69 66 28 20 7a 51 32 3d 3d 30 20  .    if( zQ2==0 
141b0 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20  ) return rc;.   
141c0 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
141d0 66 28 6c 65 6e 2b 31 30 30 2c 20 7a 51 32 2c 20  f(len+100, zQ2, 
141e0 22 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77  "%s ORDER BY row
141f0 69 64 20 44 45 53 43 22 2c 20 7a 51 75 65 72 79  id DESC", zQuery
14200 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
14210 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  te3_exec(p->db, 
14220 7a 51 32 2c 20 64 75 6d 70 5f 63 61 6c 6c 62 61  zQ2, dump_callba
14230 63 6b 2c 20 70 2c 20 26 7a 45 72 72 29 3b 0a 20  ck, p, &zErr);. 
14240 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
14250 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
14260 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20  ->out, "/****** 
14270 45 52 52 4f 52 3a 20 25 73 20 2a 2a 2a 2a 2a 2a  ERROR: %s ******
14280 2f 5c 6e 22 2c 20 7a 45 72 72 29 3b 0a 20 20 20  /\n", zErr);.   
14290 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
142a0 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
142b0 54 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  T;.    }.    sql
142c0 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b  ite3_free(zErr);
142d0 0a 20 20 20 20 66 72 65 65 28 7a 51 32 29 3b 0a  .    free(zQ2);.
142e0 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
142f0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 78 74 20 6f  .}../*.** Text o
14300 66 20 61 20 68 65 6c 70 20 6d 65 73 73 61 67 65  f a help message
14310 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20  .*/.static char 
14320 7a 48 65 6c 70 5b 5d 20 3d 0a 23 69 66 6e 64 65  zHelp[] =.#ifnde
14330 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
14340 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 22 2e  THORIZATION.  ".
14350 61 75 74 68 20 4f 4e 7c 4f 46 46 20 20 20 20 20  auth ON|OFF     
14360 20 20 20 20 20 20 53 68 6f 77 20 61 75 74 68 6f        Show autho
14370 72 69 7a 65 72 20 63 61 6c 6c 62 61 63 6b 73 5c  rizer callbacks\
14380 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 62 61  n".#endif.  ".ba
14390 63 6b 75 70 20 3f 44 42 3f 20 46 49 4c 45 20 20  ckup ?DB? FILE  
143a0 20 20 20 20 42 61 63 6b 75 70 20 44 42 20 28 64      Backup DB (d
143b0 65 66 61 75 6c 74 20 5c 22 6d 61 69 6e 5c 22 29  efault \"main\")
143c0 20 74 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e   to FILE\n".  ".
143d0 62 61 69 6c 20 6f 6e 7c 6f 66 66 20 20 20 20 20  bail on|off     
143e0 20 20 20 20 20 20 53 74 6f 70 20 61 66 74 65 72        Stop after
143f0 20 68 69 74 74 69 6e 67 20 61 6e 20 65 72 72 6f   hitting an erro
14400 72 2e 20 20 44 65 66 61 75 6c 74 20 4f 46 46 5c  r.  Default OFF\
14410 6e 22 0a 20 20 22 2e 62 69 6e 61 72 79 20 6f 6e  n".  ".binary on
14420 7c 6f 66 66 20 20 20 20 20 20 20 20 20 54 75 72  |off         Tur
14430 6e 20 62 69 6e 61 72 79 20 6f 75 74 70 75 74 20  n binary output 
14440 6f 6e 20 6f 72 20 6f 66 66 2e 20 20 44 65 66 61  on or off.  Defa
14450 75 6c 74 20 4f 46 46 5c 6e 22 0a 20 20 22 2e 63  ult OFF\n".  ".c
14460 64 20 44 49 52 45 43 54 4f 52 59 20 20 20 20 20  d DIRECTORY     
14470 20 20 20 20 20 43 68 61 6e 67 65 20 74 68 65 20       Change the 
14480 77 6f 72 6b 69 6e 67 20 64 69 72 65 63 74 6f 72  working director
14490 79 20 74 6f 20 44 49 52 45 43 54 4f 52 59 5c 6e  y to DIRECTORY\n
144a0 22 0a 20 20 22 2e 63 68 61 6e 67 65 73 20 6f 6e  ".  ".changes on
144b0 7c 6f 66 66 20 20 20 20 20 20 20 20 53 68 6f 77  |off        Show
144c0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
144d0 63 68 61 6e 67 65 64 20 62 79 20 53 51 4c 5c 6e  changed by SQL\n
144e0 22 0a 20 20 22 2e 63 68 65 63 6b 20 47 4c 4f 42  ".  ".check GLOB
144f0 20 20 20 20 20 20 20 20 20 20 20 20 46 61 69 6c              Fail
14500 20 69 66 20 6f 75 74 70 75 74 20 73 69 6e 63 65   if output since
14510 20 2e 74 65 73 74 63 61 73 65 20 64 6f 65 73 20   .testcase does 
14520 6e 6f 74 20 6d 61 74 63 68 5c 6e 22 0a 20 20 22  not match\n".  "
14530 2e 63 6c 6f 6e 65 20 4e 45 57 44 42 20 20 20 20  .clone NEWDB    
14540 20 20 20 20 20 20 20 43 6c 6f 6e 65 20 64 61 74         Clone dat
14550 61 20 69 6e 74 6f 20 4e 45 57 44 42 20 66 72 6f  a into NEWDB fro
14560 6d 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 64  m the existing d
14570 61 74 61 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64  atabase\n".  ".d
14580 61 74 61 62 61 73 65 73 20 20 20 20 20 20 20 20  atabases        
14590 20 20 20 20 20 4c 69 73 74 20 6e 61 6d 65 73 20       List names 
145a0 61 6e 64 20 66 69 6c 65 73 20 6f 66 20 61 74 74  and files of att
145b0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 5c  ached databases\
145c0 6e 22 0a 20 20 22 2e 64 62 69 6e 66 6f 20 3f 44  n".  ".dbinfo ?D
145d0 42 3f 20 20 20 20 20 20 20 20 20 20 20 53 68 6f  B?           Sho
145e0 77 20 73 74 61 74 75 73 20 69 6e 66 6f 72 6d 61  w status informa
145f0 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 64  tion about the d
14600 61 74 61 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64  atabase\n".  ".d
14610 75 6d 70 20 3f 54 41 42 4c 45 3f 20 2e 2e 2e 20  ump ?TABLE? ... 
14620 20 20 20 20 20 44 75 6d 70 20 74 68 65 20 64 61       Dump the da
14630 74 61 62 61 73 65 20 69 6e 20 61 6e 20 53 51 4c  tabase in an SQL
14640 20 74 65 78 74 20 66 6f 72 6d 61 74 5c 6e 22 0a   text format\n".
14650 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20    "             
14660 20 20 20 20 20 20 20 20 20 20 20 20 49 66 20 54              If T
14670 41 42 4c 45 20 73 70 65 63 69 66 69 65 64 2c 20  ABLE specified, 
14680 6f 6e 6c 79 20 64 75 6d 70 20 74 61 62 6c 65 73  only dump tables
14690 20 6d 61 74 63 68 69 6e 67 5c 6e 22 0a 20 20 22   matching\n".  "
146a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146b0 20 20 20 20 20 20 20 20 20 4c 49 4b 45 20 70 61           LIKE pa
146c0 74 74 65 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a  ttern TABLE.\n".
146d0 20 20 22 2e 65 63 68 6f 20 6f 6e 7c 6f 66 66 20    ".echo on|off 
146e0 20 20 20 20 20 20 20 20 20 20 54 75 72 6e 20 63            Turn c
146f0 6f 6d 6d 61 6e 64 20 65 63 68 6f 20 6f 6e 20 6f  ommand echo on o
14700 72 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 65 71 70  r off\n".  ".eqp
14710 20 6f 6e 7c 6f 66 66 7c 66 75 6c 6c 20 20 20 20   on|off|full    
14720 20 20 20 45 6e 61 62 6c 65 20 6f 72 20 64 69 73     Enable or dis
14730 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 45  able automatic E
14740 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
14750 4e 5c 6e 22 0a 20 20 22 2e 65 78 69 74 20 20 20  N\n".  ".exit   
14760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
14770 78 69 74 20 74 68 69 73 20 70 72 6f 67 72 61 6d  xit this program
14780 5c 6e 22 0a 2f 2a 20 42 65 63 61 75 73 65 20 65  \n"./* Because e
14790 78 70 6c 61 69 6e 20 6d 6f 64 65 20 63 6f 6d 65  xplain mode come
147a0 73 20 6f 6e 20 61 75 74 6f 6d 61 74 69 63 61 6c  s on automatical
147b0 6c 79 20 6e 6f 77 2c 20 74 68 65 20 22 2e 65 78  ly now, the ".ex
147c0 70 6c 61 69 6e 22 20 6d 6f 64 65 0a 2a 2a 20 69  plain" mode.** i
147d0 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74  s removed from t
147e0 68 65 20 68 65 6c 70 20 73 63 72 65 65 6e 2e 20  he help screen. 
147f0 20 49 74 20 69 73 20 73 74 69 6c 6c 20 73 75 70   It is still sup
14800 70 6f 72 74 65 64 20 66 6f 72 20 6c 65 67 61 63  ported for legac
14810 79 2c 20 68 6f 77 65 76 65 72 20 2a 2f 0a 2f 2a  y, however */./*
14820 22 2e 65 78 70 6c 61 69 6e 20 3f 6f 6e 7c 6f 66  ".explain ?on|of
14830 66 7c 61 75 74 6f 3f 20 54 75 72 6e 20 45 58 50  f|auto? Turn EXP
14840 4c 41 49 4e 20 6f 75 74 70 75 74 20 6d 6f 64 65  LAIN output mode
14850 20 6f 6e 20 6f 72 20 6f 66 66 20 6f 72 20 74 6f   on or off or to
14860 20 61 75 74 6f 6d 61 74 69 63 5c 6e 22 2a 2f 0a   automatic\n"*/.
14870 20 20 22 2e 66 75 6c 6c 73 63 68 65 6d 61 20 3f    ".fullschema ?
14880 2d 2d 69 6e 64 65 6e 74 3f 20 53 68 6f 77 20 73  --indent? Show s
14890 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20 63 6f  chema and the co
148a0 6e 74 65 6e 74 20 6f 66 20 73 71 6c 69 74 65 5f  ntent of sqlite_
148b0 73 74 61 74 20 74 61 62 6c 65 73 5c 6e 22 0a 20  stat tables\n". 
148c0 20 22 2e 68 65 61 64 65 72 73 20 6f 6e 7c 6f 66   ".headers on|of
148d0 66 20 20 20 20 20 20 20 20 54 75 72 6e 20 64 69  f        Turn di
148e0 73 70 6c 61 79 20 6f 66 20 68 65 61 64 65 72 73  splay of headers
148f0 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 20 20   on or off\n".  
14900 22 2e 68 65 6c 70 20 20 20 20 20 20 20 20 20 20  ".help          
14910 20 20 20 20 20 20 20 20 53 68 6f 77 20 74 68 69          Show thi
14920 73 20 6d 65 73 73 61 67 65 5c 6e 22 0a 20 20 22  s message\n".  "
14930 2e 69 6d 70 6f 72 74 20 46 49 4c 45 20 54 41 42  .import FILE TAB
14940 4c 45 20 20 20 20 20 49 6d 70 6f 72 74 20 64 61  LE     Import da
14950 74 61 20 66 72 6f 6d 20 46 49 4c 45 20 69 6e 74  ta from FILE int
14960 6f 20 54 41 42 4c 45 5c 6e 22 0a 23 69 66 6e 64  o TABLE\n".#ifnd
14970 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
14980 45 53 54 5f 43 4f 4e 54 52 4f 4c 0a 20 20 22 2e  EST_CONTROL.  ".
14990 69 6d 70 6f 73 74 65 72 20 49 4e 44 45 58 20 54  imposter INDEX T
149a0 41 42 4c 45 20 20 43 72 65 61 74 65 20 69 6d 70  ABLE  Create imp
149b0 6f 73 74 65 72 20 74 61 62 6c 65 20 54 41 42 4c  oster table TABL
149c0 45 20 6f 6e 20 69 6e 64 65 78 20 49 4e 44 45 58  E on index INDEX
149d0 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 69  \n".#endif.  ".i
149e0 6e 64 65 78 65 73 20 3f 54 41 42 4c 45 3f 20 20  ndexes ?TABLE?  
149f0 20 20 20 20 20 53 68 6f 77 20 6e 61 6d 65 73 20       Show names 
14a00 6f 66 20 61 6c 6c 20 69 6e 64 65 78 65 73 5c 6e  of all indexes\n
14a10 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
14a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 66                If
14a30 20 54 41 42 4c 45 20 73 70 65 63 69 66 69 65 64   TABLE specified
14a40 2c 20 6f 6e 6c 79 20 73 68 6f 77 20 69 6e 64 65  , only show inde
14a50 78 65 73 20 66 6f 72 20 74 61 62 6c 65 73 5c 6e  xes for tables\n
14a60 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
14a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61                ma
14a80 74 63 68 69 6e 67 20 4c 49 4b 45 20 70 61 74 74  tching LIKE patt
14a90 65 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a 23 69  ern TABLE.\n".#i
14aa0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
14ab0 4c 45 5f 49 4f 54 52 41 43 45 0a 20 20 22 2e 69  LE_IOTRACE.  ".i
14ac0 6f 74 72 61 63 65 20 46 49 4c 45 20 20 20 20 20  otrace FILE     
14ad0 20 20 20 20 20 45 6e 61 62 6c 65 20 49 2f 4f 20       Enable I/O 
14ae0 64 69 61 67 6e 6f 73 74 69 63 20 6c 6f 67 67 69  diagnostic loggi
14af0 6e 67 20 74 6f 20 46 49 4c 45 5c 6e 22 0a 23 65  ng to FILE\n".#e
14b00 6e 64 69 66 0a 20 20 22 2e 6c 69 6d 69 74 20 3f  ndif.  ".limit ?
14b10 4c 49 4d 49 54 3f 20 3f 56 41 4c 3f 20 20 20 44  LIMIT? ?VAL?   D
14b20 69 73 70 6c 61 79 20 6f 72 20 63 68 61 6e 67 65  isplay or change
14b30 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 6e   the value of an
14b40 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5c 6e 22   SQLITE_LIMIT\n"
14b50 0a 20 20 22 2e 6c 69 6e 74 20 4f 50 54 49 4f 4e  .  ".lint OPTION
14b60 53 20 20 20 20 20 20 20 20 20 20 52 65 70 6f 72  S          Repor
14b70 74 20 70 6f 74 65 6e 74 69 61 6c 20 73 63 68 65  t potential sche
14b80 6d 61 20 69 73 73 75 65 73 2e 20 4f 70 74 69 6f  ma issues. Optio
14b90 6e 73 3a 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  ns:\n".  "      
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bb0 20 20 20 66 6b 65 79 2d 69 6e 64 65 78 65 73 20     fkey-indexes 
14bc0 20 20 20 20 46 69 6e 64 20 6d 69 73 73 69 6e 67      Find missing
14bd0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 6e 64   foreign key ind
14be0 65 78 65 73 5c 6e 22 0a 23 69 66 6e 64 65 66 20  exes\n".#ifndef 
14bf0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44  SQLITE_OMIT_LOAD
14c00 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 22 2e 6c  _EXTENSION.  ".l
14c10 6f 61 64 20 46 49 4c 45 20 3f 45 4e 54 52 59 3f  oad FILE ?ENTRY?
14c20 20 20 20 20 20 4c 6f 61 64 20 61 6e 20 65 78 74       Load an ext
14c30 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72 79 5c 6e  ension library\n
14c40 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 6c 6f 67  ".#endif.  ".log
14c50 20 46 49 4c 45 7c 6f 66 66 20 20 20 20 20 20 20   FILE|off       
14c60 20 20 20 54 75 72 6e 20 6c 6f 67 67 69 6e 67 20     Turn logging 
14c70 6f 6e 20 6f 72 20 6f 66 66 2e 20 20 46 49 4c 45  on or off.  FILE
14c80 20 63 61 6e 20 62 65 20 73 74 64 65 72 72 2f 73   can be stderr/s
14c90 74 64 6f 75 74 5c 6e 22 0a 20 20 22 2e 6d 6f 64  tdout\n".  ".mod
14ca0 65 20 4d 4f 44 45 20 3f 54 41 42 4c 45 3f 20 20  e MODE ?TABLE?  
14cb0 20 20 20 53 65 74 20 6f 75 74 70 75 74 20 6d 6f     Set output mo
14cc0 64 65 20 77 68 65 72 65 20 4d 4f 44 45 20 69 73  de where MODE is
14cd0 20 6f 6e 65 20 6f 66 3a 5c 6e 22 0a 20 20 22 20   one of:\n".  " 
14ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cf0 20 20 20 20 20 20 20 20 61 73 63 69 69 20 20 20          ascii   
14d00 20 43 6f 6c 75 6d 6e 73 2f 72 6f 77 73 20 64 65   Columns/rows de
14d10 6c 69 6d 69 74 65 64 20 62 79 20 30 78 31 46 20  limited by 0x1F 
14d20 61 6e 64 20 30 78 31 45 5c 6e 22 0a 20 20 22 20  and 0x1E\n".  " 
14d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d40 20 20 20 20 20 20 20 20 63 73 76 20 20 20 20 20          csv     
14d50 20 43 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64   Comma-separated
14d60 20 76 61 6c 75 65 73 5c 6e 22 0a 20 20 22 20 20   values\n".  "  
14d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d80 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 20 20 20         column   
14d90 4c 65 66 74 2d 61 6c 69 67 6e 65 64 20 63 6f 6c  Left-aligned col
14da0 75 6d 6e 73 2e 20 20 28 53 65 65 20 2e 77 69 64  umns.  (See .wid
14db0 74 68 29 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  th)\n".  "      
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dd0 20 20 20 68 74 6d 6c 20 20 20 20 20 48 54 4d 4c     html     HTML
14de0 20 3c 74 61 62 6c 65 3e 20 63 6f 64 65 5c 6e 22   <table> code\n"
14df0 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20  .  "            
14e00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
14e10 65 72 74 20 20 20 53 51 4c 20 69 6e 73 65 72 74  ert   SQL insert
14e20 20 73 74 61 74 65 6d 65 6e 74 73 20 66 6f 72 20   statements for 
14e30 54 41 42 4c 45 5c 6e 22 0a 20 20 22 20 20 20 20  TABLE\n".  "    
14e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e50 20 20 20 20 20 6c 69 6e 65 20 20 20 20 20 4f 6e       line     On
14e60 65 20 76 61 6c 75 65 20 70 65 72 20 6c 69 6e 65  e value per line
14e70 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20  \n".  "         
14e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e90 6c 69 73 74 20 20 20 20 20 56 61 6c 75 65 73 20  list     Values 
14ea0 64 65 6c 69 6d 69 74 65 64 20 62 79 20 5c 22 7c  delimited by \"|
14eb0 5c 22 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20  \"\n".  "       
14ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ed0 20 20 71 75 6f 74 65 20 20 20 20 45 73 63 61 70    quote    Escap
14ee0 65 20 61 6e 73 77 65 72 73 20 61 73 20 66 6f 72  e answers as for
14ef0 20 53 51 4c 5c 6e 22 0a 20 20 22 20 20 20 20 20   SQL\n".  "     
14f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f10 20 20 20 20 74 61 62 73 20 20 20 20 20 54 61 62      tabs     Tab
14f20 2d 73 65 70 61 72 61 74 65 64 20 76 61 6c 75 65  -separated value
14f30 73 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20  s\n".  "        
14f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f50 20 74 63 6c 20 20 20 20 20 20 54 43 4c 20 6c 69   tcl      TCL li
14f60 73 74 20 65 6c 65 6d 65 6e 74 73 5c 6e 22 0a 20  st elements\n". 
14f70 20 22 2e 6e 75 6c 6c 76 61 6c 75 65 20 53 54 52   ".nullvalue STR
14f80 49 4e 47 20 20 20 20 20 20 55 73 65 20 53 54 52  ING      Use STR
14f90 49 4e 47 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  ING in place of 
14fa0 4e 55 4c 4c 20 76 61 6c 75 65 73 5c 6e 22 0a 20  NULL values\n". 
14fb0 20 22 2e 6f 6e 63 65 20 46 49 4c 45 4e 41 4d 45   ".once FILENAME
14fc0 20 20 20 20 20 20 20 20 20 4f 75 74 70 75 74 20           Output 
14fd0 66 6f 72 20 74 68 65 20 6e 65 78 74 20 53 51 4c  for the next SQL
14fe0 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 20 74 6f   command only to
14ff0 20 46 49 4c 45 4e 41 4d 45 5c 6e 22 0a 20 20 22   FILENAME\n".  "
15000 2e 6f 70 65 6e 20 3f 4f 50 54 49 4f 4e 53 3f 20  .open ?OPTIONS? 
15010 3f 46 49 4c 45 3f 20 43 6c 6f 73 65 20 65 78 69  ?FILE? Close exi
15020 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 61  sting database a
15030 6e 64 20 72 65 6f 70 65 6e 20 46 49 4c 45 5c 6e  nd reopen FILE\n
15040 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
15050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 68                Th
15060 65 20 2d 2d 6e 65 77 20 6f 70 74 69 6f 6e 20 73  e --new option s
15070 74 61 72 74 73 20 77 69 74 68 20 61 6e 20 65 6d  tarts with an em
15080 70 74 79 20 66 69 6c 65 5c 6e 22 0a 20 20 22 2e  pty file\n".  ".
15090 6f 75 74 70 75 74 20 3f 46 49 4c 45 4e 41 4d 45  output ?FILENAME
150a0 3f 20 20 20 20 20 53 65 6e 64 20 6f 75 74 70 75  ?     Send outpu
150b0 74 20 74 6f 20 46 49 4c 45 4e 41 4d 45 20 6f 72  t to FILENAME or
150c0 20 73 74 64 6f 75 74 5c 6e 22 0a 20 20 22 2e 70   stdout\n".  ".p
150d0 72 69 6e 74 20 53 54 52 49 4e 47 2e 2e 2e 20 20  rint STRING...  
150e0 20 20 20 20 20 50 72 69 6e 74 20 6c 69 74 65 72       Print liter
150f0 61 6c 20 53 54 52 49 4e 47 5c 6e 22 0a 20 20 22  al STRING\n".  "
15100 2e 70 72 6f 6d 70 74 20 4d 41 49 4e 20 43 4f 4e  .prompt MAIN CON
15110 54 49 4e 55 45 20 20 52 65 70 6c 61 63 65 20 74  TINUE  Replace t
15120 68 65 20 73 74 61 6e 64 61 72 64 20 70 72 6f 6d  he standard prom
15130 70 74 73 5c 6e 22 0a 20 20 22 2e 71 75 69 74 20  pts\n".  ".quit 
15140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15150 20 45 78 69 74 20 74 68 69 73 20 70 72 6f 67 72   Exit this progr
15160 61 6d 5c 6e 22 0a 20 20 22 2e 72 65 61 64 20 46  am\n".  ".read F
15170 49 4c 45 4e 41 4d 45 20 20 20 20 20 20 20 20 20  ILENAME         
15180 45 78 65 63 75 74 65 20 53 51 4c 20 69 6e 20 46  Execute SQL in F
15190 49 4c 45 4e 41 4d 45 5c 6e 22 0a 20 20 22 2e 72  ILENAME\n".  ".r
151a0 65 73 74 6f 72 65 20 3f 44 42 3f 20 46 49 4c 45  estore ?DB? FILE
151b0 20 20 20 20 20 52 65 73 74 6f 72 65 20 63 6f 6e       Restore con
151c0 74 65 6e 74 20 6f 66 20 44 42 20 28 64 65 66 61  tent of DB (defa
151d0 75 6c 74 20 5c 22 6d 61 69 6e 5c 22 29 20 66 72  ult \"main\") fr
151e0 6f 6d 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e 73  om FILE\n".  ".s
151f0 61 76 65 20 46 49 4c 45 20 20 20 20 20 20 20 20  ave FILE        
15200 20 20 20 20 20 57 72 69 74 65 20 69 6e 2d 6d 65       Write in-me
15210 6d 6f 72 79 20 64 61 74 61 62 61 73 65 20 69 6e  mory database in
15220 74 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e 73  to FILE\n".  ".s
15230 63 61 6e 73 74 61 74 73 20 6f 6e 7c 6f 66 66 20  canstats on|off 
15240 20 20 20 20 20 54 75 72 6e 20 73 71 6c 69 74 65       Turn sqlite
15250 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74 75  3_stmt_scanstatu
15260 73 28 29 20 6d 65 74 72 69 63 73 20 6f 6e 20 6f  s() metrics on o
15270 72 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 73 63 68  r off\n".  ".sch
15280 65 6d 61 20 3f 50 41 54 54 45 52 4e 3f 20 20 20  ema ?PATTERN?   
15290 20 20 20 53 68 6f 77 20 74 68 65 20 43 52 45 41     Show the CREA
152a0 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 6d 61  TE statements ma
152b0 74 63 68 69 6e 67 20 50 41 54 54 45 52 4e 5c 6e  tching PATTERN\n
152c0 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
152e0 64 64 20 2d 2d 69 6e 64 65 6e 74 20 66 6f 72 20  dd --indent for 
152f0 70 72 65 74 74 79 2d 70 72 69 6e 74 69 6e 67 5c  pretty-printing\
15300 6e 22 0a 20 20 22 2e 73 65 6c 66 74 65 73 74 20  n".  ".selftest 
15310 3f 2d 2d 69 6e 69 74 3f 20 20 20 20 20 52 75 6e  ?--init?     Run
15320 20 74 65 73 74 73 20 64 65 66 69 6e 65 64 20 69   tests defined i
15330 6e 20 74 68 65 20 53 45 4c 46 54 45 53 54 20 74  n the SELFTEST t
15340 61 62 6c 65 5c 6e 22 0a 20 20 22 2e 73 65 70 61  able\n".  ".sepa
15350 72 61 74 6f 72 20 43 4f 4c 20 3f 52 4f 57 3f 20  rator COL ?ROW? 
15360 20 20 43 68 61 6e 67 65 20 74 68 65 20 63 6f 6c    Change the col
15370 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 20 61 6e  umn separator an
15380 64 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 74 68 65  d optionally the
15390 20 72 6f 77 5c 6e 22 0a 20 20 22 20 20 20 20 20   row\n".  "     
153a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153b0 20 20 20 20 73 65 70 61 72 61 74 6f 72 20 66 6f      separator fo
153c0 72 20 62 6f 74 68 20 74 68 65 20 6f 75 74 70 75  r both the outpu
153d0 74 20 6d 6f 64 65 20 61 6e 64 20 2e 69 6d 70 6f  t mode and .impo
153e0 72 74 5c 6e 22 0a 23 69 66 20 64 65 66 69 6e 65  rt\n".#if define
153f0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
15400 53 45 53 53 49 4f 4e 29 0a 20 20 22 2e 73 65 73  SESSION).  ".ses
15410 73 69 6f 6e 20 43 4d 44 20 2e 2e 2e 20 20 20 20  sion CMD ...    
15420 20 20 20 43 72 65 61 74 65 20 6f 72 20 63 6f 6e     Create or con
15430 74 72 6f 6c 20 73 65 73 73 69 6f 6e 73 5c 6e 22  trol sessions\n"
15440 0a 23 65 6e 64 69 66 0a 20 20 22 2e 73 68 61 33  .#endif.  ".sha3
15450 73 75 6d 20 3f 4f 50 54 49 4f 4e 53 2e 2e 2e 3f  sum ?OPTIONS...?
15460 20 20 43 6f 6d 70 75 74 65 20 61 20 53 48 41 33    Compute a SHA3
15470 20 68 61 73 68 20 6f 66 20 64 61 74 61 62 61 73   hash of databas
15480 65 20 63 6f 6e 74 65 6e 74 5c 6e 22 0a 20 20 22  e content\n".  "
15490 2e 73 68 65 6c 6c 20 43 4d 44 20 41 52 47 53 2e  .shell CMD ARGS.
154a0 2e 2e 20 20 20 20 20 52 75 6e 20 43 4d 44 20 41  ..     Run CMD A
154b0 52 47 53 2e 2e 2e 20 69 6e 20 61 20 73 79 73 74  RGS... in a syst
154c0 65 6d 20 73 68 65 6c 6c 5c 6e 22 0a 20 20 22 2e  em shell\n".  ".
154d0 73 68 6f 77 20 20 20 20 20 20 20 20 20 20 20 20  show            
154e0 20 20 20 20 20 20 53 68 6f 77 20 74 68 65 20 63        Show the c
154f0 75 72 72 65 6e 74 20 76 61 6c 75 65 73 20 66 6f  urrent values fo
15500 72 20 76 61 72 69 6f 75 73 20 73 65 74 74 69 6e  r various settin
15510 67 73 5c 6e 22 0a 20 20 22 2e 73 74 61 74 73 20  gs\n".  ".stats 
15520 3f 6f 6e 7c 6f 66 66 3f 20 20 20 20 20 20 20 20  ?on|off?        
15530 53 68 6f 77 20 73 74 61 74 73 20 6f 72 20 74 75  Show stats or tu
15540 72 6e 20 73 74 61 74 73 20 6f 6e 20 6f 72 20 6f  rn stats on or o
15550 66 66 5c 6e 22 0a 20 20 22 2e 73 79 73 74 65 6d  ff\n".  ".system
15560 20 43 4d 44 20 41 52 47 53 2e 2e 2e 20 20 20 20   CMD ARGS...    
15570 52 75 6e 20 43 4d 44 20 41 52 47 53 2e 2e 2e 20  Run CMD ARGS... 
15580 69 6e 20 61 20 73 79 73 74 65 6d 20 73 68 65 6c  in a system shel
15590 6c 5c 6e 22 0a 20 20 22 2e 74 61 62 6c 65 73 20  l\n".  ".tables 
155a0 3f 54 41 42 4c 45 3f 20 20 20 20 20 20 20 20 4c  ?TABLE?        L
155b0 69 73 74 20 6e 61 6d 65 73 20 6f 66 20 74 61 62  ist names of tab
155c0 6c 65 73 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  les\n".  "      
155d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155e0 20 20 20 49 66 20 54 41 42 4c 45 20 73 70 65 63     If TABLE spec
155f0 69 66 69 65 64 2c 20 6f 6e 6c 79 20 6c 69 73 74  ified, only list
15600 20 74 61 62 6c 65 73 20 6d 61 74 63 68 69 6e 67   tables matching
15610 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20  \n".  "         
15620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15630 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 54 41 42  LIKE pattern TAB
15640 4c 45 2e 5c 6e 22 0a 20 20 22 2e 74 65 73 74 63  LE.\n".  ".testc
15650 61 73 65 20 4e 41 4d 45 20 20 20 20 20 20 20 20  ase NAME        
15660 20 42 65 67 69 6e 20 72 65 64 69 72 65 63 74 69   Begin redirecti
15670 6e 67 20 6f 75 74 70 75 74 20 74 6f 20 27 74 65  ng output to 'te
15680 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 27 5c  stcase-out.txt'\
15690 6e 22 0a 20 20 22 2e 74 69 6d 65 6f 75 74 20 4d  n".  ".timeout M
156a0 53 20 20 20 20 20 20 20 20 20 20 20 20 54 72 79  S            Try
156b0 20 6f 70 65 6e 69 6e 67 20 6c 6f 63 6b 65 64 20   opening locked 
156c0 74 61 62 6c 65 73 20 66 6f 72 20 4d 53 20 6d 69  tables for MS mi
156d0 6c 6c 69 73 65 63 6f 6e 64 73 5c 6e 22 0a 20 20  lliseconds\n".  
156e0 22 2e 74 69 6d 65 72 20 6f 6e 7c 6f 66 66 20 20  ".timer on|off  
156f0 20 20 20 20 20 20 20 20 54 75 72 6e 20 53 51 4c          Turn SQL
15700 20 74 69 6d 65 72 20 6f 6e 20 6f 72 20 6f 66 66   timer on or off
15710 5c 6e 22 0a 20 20 22 2e 74 72 61 63 65 20 46 49  \n".  ".trace FI
15720 4c 45 7c 6f 66 66 20 20 20 20 20 20 20 20 4f 75  LE|off        Ou
15730 74 70 75 74 20 65 61 63 68 20 53 51 4c 20 73 74  tput each SQL st
15740 61 74 65 6d 65 6e 74 20 61 73 20 69 74 20 69 73  atement as it is
15750 20 72 75 6e 5c 6e 22 0a 20 20 22 2e 76 66 73 69   run\n".  ".vfsi
15760 6e 66 6f 20 3f 41 55 58 3f 20 20 20 20 20 20 20  nfo ?AUX?       
15770 20 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62    Information ab
15780 6f 75 74 20 74 68 65 20 74 6f 70 2d 6c 65 76 65  out the top-leve
15790 6c 20 56 46 53 5c 6e 22 0a 20 20 22 2e 76 66 73  l VFS\n".  ".vfs
157a0 6c 69 73 74 20 20 20 20 20 20 20 20 20 20 20 20  list            
157b0 20 20 20 4c 69 73 74 20 61 6c 6c 20 61 76 61 69     List all avai
157c0 6c 61 62 6c 65 20 56 46 53 65 73 5c 6e 22 0a 20  lable VFSes\n". 
157d0 20 22 2e 76 66 73 6e 61 6d 65 20 3f 41 55 58 3f   ".vfsname ?AUX?
157e0 20 20 20 20 20 20 20 20 20 50 72 69 6e 74 20 74           Print t
157f0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 56  he name of the V
15800 46 53 20 73 74 61 63 6b 5c 6e 22 0a 20 20 22 2e  FS stack\n".  ".
15810 77 69 64 74 68 20 4e 55 4d 31 20 4e 55 4d 32 20  width NUM1 NUM2 
15820 2e 2e 2e 20 20 20 53 65 74 20 63 6f 6c 75 6d 6e  ...   Set column
15830 20 77 69 64 74 68 73 20 66 6f 72 20 5c 22 63 6f   widths for \"co
15840 6c 75 6d 6e 5c 22 20 6d 6f 64 65 5c 6e 22 0a 20  lumn\" mode\n". 
15850 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20   "              
15860 20 20 20 20 20 20 20 20 20 20 20 4e 65 67 61 74             Negat
15870 69 76 65 20 76 61 6c 75 65 73 20 72 69 67 68 74  ive values right
15880 2d 6a 75 73 74 69 66 79 5c 6e 22 0a 3b 0a 0a 23  -justify\n".;..#
15890 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
158a0 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e  E_ENABLE_SESSION
158b0 29 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 68 65  )./*.** Print he
158c0 6c 70 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  lp information f
158d0 6f 72 20 74 68 65 20 22 2e 73 65 73 73 69 6f 6e  or the ".session
158e0 73 22 20 63 6f 6d 6d 61 6e 64 0a 2a 2f 0a 76 6f  s" command.*/.vo
158f0 69 64 20 73 65 73 73 69 6f 6e 5f 68 65 6c 70 28  id session_help(
15900 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a  ShellState *p){.
15910 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
15920 6f 75 74 2c 0a 20 20 20 20 22 2e 73 65 73 73 69  out,.    ".sessi
15930 6f 6e 20 3f 4e 41 4d 45 3f 20 53 55 42 43 4f 4d  on ?NAME? SUBCOM
15940 4d 41 4e 44 20 3f 41 52 47 53 2e 2e 2e 3f 5c 6e  MAND ?ARGS...?\n
15950 22 0a 20 20 20 20 22 49 66 20 3f 4e 41 4d 45 3f  ".    "If ?NAME?
15960 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 68 65   is omitted, the
15970 20 66 69 72 73 74 20 64 65 66 69 6e 65 64 20 73   first defined s
15980 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 2e 5c  ession is used.\
15990 6e 22 0a 20 20 20 20 22 53 75 62 63 6f 6d 6d 61  n".    "Subcomma
159a0 6e 64 73 3a 5c 6e 22 0a 20 20 20 20 22 20 20 20  nds:\n".    "   
159b0 61 74 74 61 63 68 20 54 41 42 4c 45 20 20 20 20  attach TABLE    
159c0 20 20 20 20 20 20 20 20 20 41 74 74 61 63 68 20           Attach 
159d0 54 41 42 4c 45 5c 6e 22 0a 20 20 20 20 22 20 20  TABLE\n".    "  
159e0 20 63 68 61 6e 67 65 73 65 74 20 46 49 4c 45 20   changeset FILE 
159f0 20 20 20 20 20 20 20 20 20 20 57 72 69 74 65 20            Write 
15a00 61 20 63 68 61 6e 67 65 73 65 74 20 69 6e 74 6f  a changeset into
15a10 20 46 49 4c 45 5c 6e 22 0a 20 20 20 20 22 20 20   FILE\n".    "  
15a20 20 63 6c 6f 73 65 20 20 20 20 20 20 20 20 20 20   close          
15a30 20 20 20 20 20 20 20 20 20 20 43 6c 6f 73 65 20            Close 
15a40 6f 6e 65 20 73 65 73 73 69 6f 6e 5c 6e 22 0a 20  one session\n". 
15a50 20 20 20 22 20 20 20 65 6e 61 62 6c 65 20 3f 42     "   enable ?B
15a60 4f 4f 4c 45 41 4e 3f 20 20 20 20 20 20 20 20 20  OOLEAN?         
15a70 53 65 74 20 6f 72 20 71 75 65 72 79 20 74 68 65  Set or query the
15a80 20 65 6e 61 62 6c 65 20 62 69 74 5c 6e 22 0a 20   enable bit\n". 
15a90 20 20 20 22 20 20 20 66 69 6c 74 65 72 20 47 4c     "   filter GL
15aa0 4f 42 2e 2e 2e 20 20 20 20 20 20 20 20 20 20 20  OB...           
15ab0 52 65 6a 65 63 74 20 74 61 62 6c 65 73 20 6d 61  Reject tables ma
15ac0 74 63 68 69 6e 67 20 47 4c 4f 42 73 5c 6e 22 0a  tching GLOBs\n".
15ad0 20 20 20 20 22 20 20 20 69 6e 64 69 72 65 63 74      "   indirect
15ae0 20 3f 42 4f 4f 4c 45 41 4e 3f 20 20 20 20 20 20   ?BOOLEAN?      
15af0 20 4d 61 72 6b 20 6f 72 20 71 75 65 72 79 20 74   Mark or query t
15b00 68 65 20 69 6e 64 69 72 65 63 74 20 73 74 61 74  he indirect stat
15b10 75 73 5c 6e 22 0a 20 20 20 20 22 20 20 20 69 73  us\n".    "   is
15b20 65 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20  empty           
15b30 20 20 20 20 20 20 20 51 75 65 72 79 20 77 68 65         Query whe
15b40 74 68 65 72 20 74 68 65 20 73 65 73 73 69 6f 6e  ther the session
15b50 20 69 73 20 65 6d 70 74 79 5c 6e 22 0a 20 20 20   is empty\n".   
15b60 20 22 20 20 20 6c 69 73 74 20 20 20 20 20 20 20   "   list       
15b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 69                Li
15b80 73 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  st currently ope
15b90 6e 20 73 65 73 73 69 6f 6e 20 6e 61 6d 65 73 5c  n session names\
15ba0 6e 22 0a 20 20 20 20 22 20 20 20 6f 70 65 6e 20  n".    "   open 
15bb0 44 42 20 4e 41 4d 45 20 20 20 20 20 20 20 20 20  DB NAME         
15bc0 20 20 20 20 4f 70 65 6e 20 61 20 6e 65 77 20 73      Open a new s
15bd0 65 73 73 69 6f 6e 20 6f 6e 20 44 42 5c 6e 22 0a  ession on DB\n".
15be0 20 20 20 20 22 20 20 20 70 61 74 63 68 73 65 74      "   patchset
15bf0 20 46 49 4c 45 20 20 20 20 20 20 20 20 20 20 20   FILE           
15c00 20 57 72 69 74 65 20 61 20 70 61 74 63 68 73 65   Write a patchse
15c10 74 20 69 6e 74 6f 20 46 49 4c 45 5c 6e 22 0a 20  t into FILE\n". 
15c20 20 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f   );.}.#endif.../
15c30 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72 65  * Forward refere
15c40 6e 63 65 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e  nce */.static in
15c50 74 20 70 72 6f 63 65 73 73 5f 69 6e 70 75 74 28  t process_input(
15c60 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 46  ShellState *p, F
15c70 49 4c 45 20 2a 69 6e 29 3b 0a 0a 2f 2a 0a 2a 2a  ILE *in);../*.**
15c80 20 52 65 61 64 20 74 68 65 20 63 6f 6e 74 65 6e   Read the conten
15c90 74 20 6f 66 20 66 69 6c 65 20 7a 4e 61 6d 65 20  t of file zName 
15ca0 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61  into memory obta
15cb0 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
15cc0 33 5f 6d 61 6c 6c 6f 63 36 34 28 29 0a 2a 2a 20  3_malloc64().** 
15cd0 61 6e 64 20 72 65 74 75 72 6e 20 61 20 70 6f 69  and return a poi
15ce0 6e 74 65 72 20 74 6f 20 74 68 65 20 62 75 66 66  nter to the buff
15cf0 65 72 2e 20 54 68 65 20 63 61 6c 6c 65 72 20 69  er. The caller i
15d00 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  s responsible fo
15d10 72 20 66 72 65 65 69 6e 67 0a 2a 2a 20 74 68 65  r freeing.** the
15d20 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 0a 2a 2a 20 49   memory..**.** I
15d30 66 20 70 61 72 61 6d 65 74 65 72 20 70 6e 42 79  f parameter pnBy
15d40 74 65 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  te is not NULL, 
15d50 28 2a 70 6e 42 79 74 65 29 20 69 73 20 73 65 74  (*pnByte) is set
15d60 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
15d70 66 20 62 79 74 65 73 0a 2a 2a 20 72 65 61 64 2e  f bytes.** read.
15d80 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 63 6f 6e 76 65  .**.** For conve
15d90 6e 69 65 6e 63 65 2c 20 61 20 6e 75 6c 2d 74 65  nience, a nul-te
15da0 72 6d 69 6e 61 74 6f 72 20 62 79 74 65 20 69 73  rminator byte is
15db0 20 61 6c 77 61 79 73 20 61 70 70 65 6e 64 65 64   always appended
15dc0 20 74 6f 20 74 68 65 20 64 61 74 61 20 72 65 61   to the data rea
15dd0 64 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 66 69  d.** from the fi
15de0 6c 65 20 62 65 66 6f 72 65 20 74 68 65 20 62 75  le before the bu
15df0 66 66 65 72 20 69 73 20 72 65 74 75 72 6e 65 64  ffer is returned
15e00 2e 20 54 68 69 73 20 62 79 74 65 20 69 73 20 6e  . This byte is n
15e10 6f 74 20 69 6e 63 6c 75 64 65 64 20 69 6e 0a 2a  ot included in.*
15e20 2a 20 74 68 65 20 66 69 6e 61 6c 20 76 61 6c 75  * the final valu
15e30 65 20 6f 66 20 28 2a 70 6e 42 79 74 65 29 2c 20  e of (*pnByte), 
15e40 69 66 20 61 70 70 6c 69 63 61 62 6c 65 2e 0a 2a  if applicable..*
15e50 2a 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20 72 65 74  *.** NULL is ret
15e60 75 72 6e 65 64 20 69 66 20 61 6e 79 20 65 72 72  urned if any err
15e70 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
15e80 64 2e 20 54 68 65 20 66 69 6e 61 6c 20 76 61 6c  d. The final val
15e90 75 65 20 6f 66 20 2a 70 6e 42 79 74 65 0a 2a 2a  ue of *pnByte.**
15ea0 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20 69 6e   is undefined in
15eb0 20 74 68 69 73 20 63 61 73 65 2e 0a 2a 2f 0a 73   this case..*/.s
15ec0 74 61 74 69 63 20 63 68 61 72 20 2a 72 65 61 64  tatic char *read
15ed0 46 69 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 20  File(const char 
15ee0 2a 7a 4e 61 6d 65 2c 20 69 6e 74 20 2a 70 6e 42  *zName, int *pnB
15ef0 79 74 65 29 7b 0a 20 20 46 49 4c 45 20 2a 69 6e  yte){.  FILE *in
15f00 20 3d 20 66 6f 70 65 6e 28 7a 4e 61 6d 65 2c 20   = fopen(zName, 
15f10 22 72 62 22 29 3b 0a 20 20 6c 6f 6e 67 20 6e 49  "rb");.  long nI
15f20 6e 3b 0a 20 20 73 69 7a 65 5f 74 20 6e 52 65 61  n;.  size_t nRea
15f30 64 3b 0a 20 20 63 68 61 72 20 2a 70 42 75 66 3b  d;.  char *pBuf;
15f40 0a 20 20 69 66 28 20 69 6e 3d 3d 30 20 29 20 72  .  if( in==0 ) r
15f50 65 74 75 72 6e 20 30 3b 0a 20 20 66 73 65 65 6b  eturn 0;.  fseek
15f60 28 69 6e 2c 20 30 2c 20 53 45 45 4b 5f 45 4e 44  (in, 0, SEEK_END
15f70 29 3b 0a 20 20 6e 49 6e 20 3d 20 66 74 65 6c 6c  );.  nIn = ftell
15f80 28 69 6e 29 3b 0a 20 20 72 65 77 69 6e 64 28 69  (in);.  rewind(i
15f90 6e 29 3b 0a 20 20 70 42 75 66 20 3d 20 73 71 6c  n);.  pBuf = sql
15fa0 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 20 6e  ite3_malloc64( n
15fb0 49 6e 2b 31 20 29 3b 0a 20 20 69 66 28 20 70 42  In+1 );.  if( pB
15fc0 75 66 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  uf==0 ) return 0
15fd0 3b 0a 20 20 6e 52 65 61 64 20 3d 20 66 72 65 61  ;.  nRead = frea
15fe0 64 28 70 42 75 66 2c 20 6e 49 6e 2c 20 31 2c 20  d(pBuf, nIn, 1, 
15ff0 69 6e 29 3b 0a 20 20 66 63 6c 6f 73 65 28 69 6e  in);.  fclose(in
16000 29 3b 0a 20 20 69 66 28 20 6e 52 65 61 64 21 3d  );.  if( nRead!=
16010 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  1 ){.    sqlite3
16020 5f 66 72 65 65 28 70 42 75 66 29 3b 0a 20 20 20  _free(pBuf);.   
16030 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
16040 20 70 42 75 66 5b 6e 49 6e 5d 20 3d 20 30 3b 0a   pBuf[nIn] = 0;.
16050 20 20 69 66 28 20 70 6e 42 79 74 65 20 29 20 2a    if( pnByte ) *
16060 70 6e 42 79 74 65 20 3d 20 6e 49 6e 3b 0a 20 20  pnByte = nIn;.  
16070 72 65 74 75 72 6e 20 70 42 75 66 3b 0a 7d 0a 0a  return pBuf;.}..
16080 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
16090 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f  TE_ENABLE_SESSIO
160a0 4e 29 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61  N)./*.** Close a
160b0 20 73 69 6e 67 6c 65 20 4f 70 65 6e 53 65 73 73   single OpenSess
160c0 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 72  ion object and r
160d0 65 6c 65 61 73 65 20 61 6c 6c 20 6f 66 20 69 74  elease all of it
160e0 73 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20  s associated.** 
160f0 72 65 73 6f 75 72 63 65 73 2e 0a 2a 2f 0a 73 74  resources..*/.st
16100 61 74 69 63 20 76 6f 69 64 20 73 65 73 73 69 6f  atic void sessio
16110 6e 5f 63 6c 6f 73 65 28 4f 70 65 6e 53 65 73 73  n_close(OpenSess
16120 69 6f 6e 20 2a 70 53 65 73 73 69 6f 6e 29 7b 0a  ion *pSession){.
16130 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74    int i;.  sqlit
16140 65 33 73 65 73 73 69 6f 6e 5f 64 65 6c 65 74 65  e3session_delete
16150 28 70 53 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20  (pSession->p);. 
16160 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 53   sqlite3_free(pS
16170 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 29 3b 0a  ession->zName);.
16180 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 53 65    for(i=0; i<pSe
16190 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 3b 20  ssion->nFilter; 
161a0 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i++){.    sqlite
161b0 33 5f 66 72 65 65 28 70 53 65 73 73 69 6f 6e 2d  3_free(pSession-
161c0 3e 61 7a 46 69 6c 74 65 72 5b 69 5d 29 3b 0a 20  >azFilter[i]);. 
161d0 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65   }.  sqlite3_fre
161e0 65 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69  e(pSession->azFi
161f0 6c 74 65 72 29 3b 0a 20 20 6d 65 6d 73 65 74 28  lter);.  memset(
16200 70 53 65 73 73 69 6f 6e 2c 20 30 2c 20 73 69 7a  pSession, 0, siz
16210 65 6f 66 28 4f 70 65 6e 53 65 73 73 69 6f 6e 29  eof(OpenSession)
16220 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  );.}.#endif../*.
16230 2a 2a 20 43 6c 6f 73 65 20 61 6c 6c 20 4f 70 65  ** Close all Ope
16240 6e 53 65 73 73 69 6f 6e 20 6f 62 6a 65 63 74 73  nSession objects
16250 20 61 6e 64 20 72 65 6c 65 61 73 65 20 61 6c 6c   and release all
16260 20 61 73 73 6f 63 69 61 74 65 64 20 72 65 73 6f   associated reso
16270 75 72 63 65 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  urces..*/.#if de
16280 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
16290 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 73 74 61  BLE_SESSION).sta
162a0 74 69 63 20 76 6f 69 64 20 73 65 73 73 69 6f 6e  tic void session
162b0 5f 63 6c 6f 73 65 5f 61 6c 6c 28 53 68 65 6c 6c  _close_all(Shell
162c0 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 69 6e 74  State *p){.  int
162d0 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   i;.  for(i=0; i
162e0 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69 2b  <p->nSession; i+
162f0 2b 29 7b 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f  +){.    session_
16300 63 6c 6f 73 65 28 26 70 2d 3e 61 53 65 73 73 69  close(&p->aSessi
16310 6f 6e 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 70 2d  on[i]);.  }.  p-
16320 3e 6e 53 65 73 73 69 6f 6e 20 3d 20 30 3b 0a 7d  >nSession = 0;.}
16330 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
16340 73 65 73 73 69 6f 6e 5f 63 6c 6f 73 65 5f 61 6c  session_close_al
16350 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  l(X).#endif../*.
16360 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** Implementatio
16370 6e 20 6f 66 20 74 68 65 20 78 46 69 6c 74 65 72  n of the xFilter
16380 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
16390 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e 2e 20 20   open session.  
163a0 4f 6d 69 74 0a 2a 2a 20 61 6e 79 20 74 61 62 6c  Omit.** any tabl
163b0 65 73 20 6e 61 6d 65 64 20 62 79 20 22 2e 73 65  es named by ".se
163c0 73 73 69 6f 6e 20 66 69 6c 74 65 72 22 20 62 75  ssion filter" bu
163d0 74 20 6c 65 74 20 61 6c 6c 20 6f 74 68 65 72 20  t let all other 
163e0 74 61 62 6c 65 20 74 68 72 6f 75 67 68 2e 0a 2a  table through..*
163f0 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
16400 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53  LITE_ENABLE_SESS
16410 49 4f 4e 29 0a 73 74 61 74 69 63 20 69 6e 74 20  ION).static int 
16420 73 65 73 73 69 6f 6e 5f 66 69 6c 74 65 72 28 76  session_filter(v
16430 6f 69 64 20 2a 70 43 74 78 2c 20 63 6f 6e 73 74  oid *pCtx, const
16440 20 63 68 61 72 20 2a 7a 54 61 62 29 7b 0a 20 20   char *zTab){.  
16450 4f 70 65 6e 53 65 73 73 69 6f 6e 20 2a 70 53 65  OpenSession *pSe
16460 73 73 69 6f 6e 20 3d 20 28 4f 70 65 6e 53 65 73  ssion = (OpenSes
16470 73 69 6f 6e 2a 29 70 43 74 78 3b 0a 20 20 69 6e  sion*)pCtx;.  in
16480 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  t i;.  for(i=0; 
16490 69 3c 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c  i<pSession->nFil
164a0 74 65 72 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  ter; i++){.    i
164b0 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c  f( sqlite3_strgl
164c0 6f 62 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46  ob(pSession->azF
164d0 69 6c 74 65 72 5b 69 5d 2c 20 7a 54 61 62 29 3d  ilter[i], zTab)=
164e0 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
164f0 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d   }.  return 1;.}
16500 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
16510 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74  ake sure the dat
16520 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2e 20 20  abase is open.  
16530 49 66 20 69 74 20 69 73 20 6e 6f 74 2c 20 74 68  If it is not, th
16540 65 6e 20 6f 70 65 6e 20 69 74 2e 20 20 49 66 0a  en open it.  If.
16550 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
16560 66 61 69 6c 73 20 74 6f 20 6f 70 65 6e 2c 20 70  fails to open, p
16570 72 69 6e 74 20 61 6e 20 65 72 72 6f 72 20 6d 65  rint an error me
16580 73 73 61 67 65 20 61 6e 64 20 65 78 69 74 2e 0a  ssage and exit..
16590 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f  */.static void o
165a0 70 65 6e 5f 64 62 28 53 68 65 6c 6c 53 74 61 74  pen_db(ShellStat
165b0 65 20 2a 70 2c 20 69 6e 74 20 6b 65 65 70 41 6c  e *p, int keepAl
165c0 69 76 65 29 7b 0a 20 20 69 66 28 20 70 2d 3e 64  ive){.  if( p->d
165d0 62 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  b==0 ){.    sqli
165e0 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
165f0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6f 70  ;.    sqlite3_op
16600 65 6e 28 70 2d 3e 7a 44 62 46 69 6c 65 6e 61 6d  en(p->zDbFilenam
16610 65 2c 20 26 70 2d 3e 64 62 29 3b 0a 20 20 20 20  e, &p->db);.    
16620 67 6c 6f 62 61 6c 44 62 20 3d 20 70 2d 3e 64 62  globalDb = p->db
16630 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 3d  ;.    if( p->db=
16640 3d 30 20 7c 7c 20 53 51 4c 49 54 45 5f 4f 4b 21  =0 || SQLITE_OK!
16650 3d 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65  =sqlite3_errcode
16660 28 70 2d 3e 64 62 29 20 29 7b 0a 20 20 20 20 20  (p->db) ){.     
16670 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
16680 65 72 72 2c 22 45 72 72 6f 72 3a 20 75 6e 61 62  err,"Error: unab
16690 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62  le to open datab
166a0 61 73 65 20 5c 22 25 73 5c 22 3a 20 25 73 5c 6e  ase \"%s\": %s\n
166b0 22 2c 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  ",.          p->
166c0 7a 44 62 46 69 6c 65 6e 61 6d 65 2c 20 73 71 6c  zDbFilename, sql
166d0 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64  ite3_errmsg(p->d
166e0 62 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6b  b));.      if( k
166f0 65 65 70 41 6c 69 76 65 20 29 20 72 65 74 75 72  eepAlive ) retur
16700 6e 3b 0a 20 20 20 20 20 20 65 78 69 74 28 31 29  n;.      exit(1)
16710 3b 0a 20 20 20 20 7d 0a 23 69 66 6e 64 65 66 20  ;.    }.#ifndef 
16720 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44  SQLITE_OMIT_LOAD
16730 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 20 20 73  _EXTENSION.    s
16740 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f  qlite3_enable_lo
16750 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 70 2d 3e  ad_extension(p->
16760 64 62 2c 20 31 29 3b 0a 23 65 6e 64 69 66 0a 20  db, 1);.#endif. 
16770 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 69     sqlite3_filei
16780 6f 5f 69 6e 69 74 28 70 2d 3e 64 62 2c 20 30 2c  o_init(p->db, 0,
16790 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
167a0 5f 73 68 61 74 68 72 65 65 5f 69 6e 69 74 28 70  _shathree_init(p
167b0 2d 3e 64 62 2c 20 30 2c 20 30 29 3b 0a 20 20 20  ->db, 0, 0);.   
167c0 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74   sqlite3_complet
167d0 69 6f 6e 5f 69 6e 69 74 28 70 2d 3e 64 62 2c 20  ion_init(p->db, 
167e0 30 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  0, 0);.    sqlit
167f0 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
16800 6f 6e 28 70 2d 3e 64 62 2c 20 22 73 68 65 6c 6c  on(p->db, "shell
16810 5f 61 64 64 5f 73 63 68 65 6d 61 22 2c 20 32 2c  _add_schema", 2,
16820 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c   SQLITE_UTF8, 0,
16830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16840 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68 65               she
16850 6c 6c 41 64 64 53 63 68 65 6d 61 4e 61 6d 65 2c  llAddSchemaName,
16860 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 7d 0a 0a 23   0, 0);.  }.}..#
16870 69 66 20 48 41 56 45 5f 52 45 41 44 4c 49 4e 45  if HAVE_READLINE
16880 20 7c 7c 20 48 41 56 45 5f 45 44 49 54 4c 49 4e   || HAVE_EDITLIN
16890 45 0a 2f 2a 0a 2a 2a 20 52 65 61 64 6c 69 6e 65  E./*.** Readline
168a0 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 63 61 6c 6c   completion call
168b0 62 61 63 6b 73 0a 2a 2f 0a 73 74 61 74 69 63 20  backs.*/.static 
168c0 63 68 61 72 20 2a 72 65 61 64 6c 69 6e 65 5f 63  char *readline_c
168d0 6f 6d 70 6c 65 74 69 6f 6e 5f 67 65 6e 65 72 61  ompletion_genera
168e0 74 6f 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  tor(const char *
168f0 74 65 78 74 2c 20 69 6e 74 20 73 74 61 74 65 29  text, int state)
16900 7b 0a 20 20 73 74 61 74 69 63 20 73 71 6c 69 74  {.  static sqlit
16910 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d  e3_stmt *pStmt =
16920 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 52 65 74   0;.  char *zRet
16930 3b 0a 20 20 69 66 28 20 73 74 61 74 65 3d 3d 30  ;.  if( state==0
16940 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 53   ){.    char *zS
16950 71 6c 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  ql;.    sqlite3_
16960 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
16970 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  .    zSql = sqli
16980 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c  te3_mprintf("SEL
16990 45 43 54 20 44 49 53 54 49 4e 43 54 20 63 61 6e  ECT DISTINCT can
169a0 64 69 64 61 74 65 20 43 4f 4c 4c 41 54 45 20 6e  didate COLLATE n
169b0 6f 63 61 73 65 22 0a 20 20 20 20 20 20 20 20 20  ocase".         
169c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169d0 20 20 22 20 20 46 52 4f 4d 20 63 6f 6d 70 6c 65    "  FROM comple
169e0 74 69 6f 6e 28 25 51 29 20 4f 52 44 45 52 20 42  tion(%Q) ORDER B
169f0 59 20 31 22 2c 20 74 65 78 74 29 3b 0a 20 20 20  Y 1", text);.   
16a00 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
16a10 5f 76 32 28 67 6c 6f 62 61 6c 44 62 2c 20 7a 53  _v2(globalDb, zS
16a20 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20  ql, -1, &pStmt, 
16a30 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
16a40 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 7d 0a  free(zSql);.  }.
16a50 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74    if( sqlite3_st
16a60 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  ep(pStmt)==SQLIT
16a70 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 7a 52 65  E_ROW ){.    zRe
16a80 74 20 3d 20 73 74 72 64 75 70 28 28 63 6f 6e 73  t = strdup((cons
16a90 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  t char*)sqlite3_
16aa0 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d  column_text(pStm
16ab0 74 2c 20 30 29 29 3b 0a 20 20 7d 65 6c 73 65 7b  t, 0));.  }else{
16ac0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  .    sqlite3_fin
16ad0 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
16ae0 20 20 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 20    pStmt = 0;.   
16af0 20 7a 52 65 74 20 3d 20 30 3b 0a 20 20 7d 0a 20   zRet = 0;.  }. 
16b00 20 72 65 74 75 72 6e 20 7a 52 65 74 3b 0a 7d 0a   return zRet;.}.
16b10 73 74 61 74 69 63 20 63 68 61 72 20 2a 2a 72 65  static char **re
16b20 61 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65 74 69 6f  adline_completio
16b30 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54  n(const char *zT
16b40 65 78 74 2c 20 69 6e 74 20 69 53 74 61 72 74 2c  ext, int iStart,
16b50 20 69 6e 74 20 69 45 6e 64 29 7b 0a 20 20 72 6c   int iEnd){.  rl
16b60 5f 61 74 74 65 6d 70 74 65 64 5f 63 6f 6d 70 6c  _attempted_compl
16b70 65 74 69 6f 6e 5f 6f 76 65 72 20 3d 20 31 3b 0a  etion_over = 1;.
16b80 20 20 72 65 74 75 72 6e 20 72 6c 5f 63 6f 6d 70    return rl_comp
16b90 6c 65 74 69 6f 6e 5f 6d 61 74 63 68 65 73 28 7a  letion_matches(z
16ba0 54 65 78 74 2c 20 72 65 61 64 6c 69 6e 65 5f 63  Text, readline_c
16bb0 6f 6d 70 6c 65 74 69 6f 6e 5f 67 65 6e 65 72 61  ompletion_genera
16bc0 74 6f 72 29 3b 0a 7d 0a 0a 23 65 6c 69 66 20 48  tor);.}..#elif H
16bd0 41 56 45 5f 4c 49 4e 45 4e 4f 49 53 45 0a 2f 2a  AVE_LINENOISE./*
16be0 0a 2a 2a 20 4c 69 6e 65 6e 6f 69 73 65 20 63 6f  .** Linenoise co
16bf0 6d 70 6c 65 74 69 6f 6e 20 63 61 6c 6c 62 61 63  mpletion callbac
16c00 6b 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  k.*/.static void
16c10 20 6c 69 6e 65 6e 6f 69 73 65 5f 63 6f 6d 70 6c   linenoise_compl
16c20 65 74 69 6f 6e 28 63 6f 6e 73 74 20 63 68 61 72  etion(const char
16c30 20 2a 7a 4c 69 6e 65 2c 20 6c 69 6e 65 6e 6f 69   *zLine, linenoi
16c40 73 65 43 6f 6d 70 6c 65 74 69 6f 6e 73 20 2a 6c  seCompletions *l
16c50 63 29 7b 0a 20 20 69 6e 74 20 6e 4c 69 6e 65 20  c){.  int nLine 
16c60 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 4c  = (int)strlen(zL
16c70 69 6e 65 29 3b 0a 20 20 69 6e 74 20 69 2c 20 69  ine);.  int i, i
16c80 53 74 61 72 74 3b 0a 20 20 73 71 6c 69 74 65 33  Start;.  sqlite3
16c90 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30  _stmt *pStmt = 0
16ca0 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a  ;.  char *zSql;.
16cb0 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30 30    char zBuf[1000
16cc0 5d 3b 0a 0a 20 20 69 66 28 20 6e 4c 69 6e 65 3e  ];..  if( nLine>
16cd0 73 69 7a 65 6f 66 28 7a 42 75 66 29 2d 33 30 20  sizeof(zBuf)-30 
16ce0 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20  ) return;.  if( 
16cf0 7a 4c 69 6e 65 5b 30 5d 3d 3d 27 2e 27 20 29 20  zLine[0]=='.' ) 
16d00 72 65 74 75 72 6e 3b 0a 20 20 66 6f 72 28 69 3d  return;.  for(i=
16d10 6e 4c 69 6e 65 2d 31 3b 20 69 3e 3d 30 20 26 26  nLine-1; i>=0 &&
16d20 20 28 69 73 61 6c 6e 75 6d 28 7a 4c 69 6e 65 5b   (isalnum(zLine[
16d30 69 5d 29 20 7c 7c 20 7a 4c 69 6e 65 5b 69 5d 3d  i]) || zLine[i]=
16d40 3d 27 5f 27 29 3b 20 69 2d 2d 29 7b 7d 0a 20 20  ='_'); i--){}.  
16d50 69 66 28 20 69 3d 3d 6e 4c 69 6e 65 2d 31 20 29  if( i==nLine-1 )
16d60 20 72 65 74 75 72 6e 3b 0a 20 20 69 53 74 61 72   return;.  iStar
16d70 74 20 3d 20 69 2b 31 3b 0a 20 20 6d 65 6d 63 70  t = i+1;.  memcp
16d80 79 28 7a 42 75 66 2c 20 7a 4c 69 6e 65 2c 20 69  y(zBuf, zLine, i
16d90 53 74 61 72 74 29 3b 0a 20 20 7a 53 71 6c 20 3d  Start);.  zSql =
16da0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
16db0 28 22 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43  ("SELECT DISTINC
16dc0 54 20 63 61 6e 64 69 64 61 74 65 20 43 4f 4c 4c  T candidate COLL
16dd0 41 54 45 20 6e 6f 63 61 73 65 22 0a 20 20 20 20  ATE nocase".    
16de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16df0 20 20 20 20 20 22 20 20 46 52 4f 4d 20 63 6f 6d       "  FROM com
16e00 70 6c 65 74 69 6f 6e 28 25 51 2c 25 51 29 20 4f  pletion(%Q,%Q) O
16e10 52 44 45 52 20 42 59 20 31 22 2c 0a 20 20 20 20  RDER BY 1",.    
16e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e30 20 20 20 20 20 26 7a 4c 69 6e 65 5b 69 53 74 61       &zLine[iSta
16e40 72 74 5d 2c 20 7a 4c 69 6e 65 29 3b 0a 20 20 73  rt], zLine);.  s
16e50 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
16e60 32 28 67 6c 6f 62 61 6c 44 62 2c 20 7a 53 71 6c  2(globalDb, zSql
16e70 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29  , -1, &pStmt, 0)
16e80 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
16e90 28 7a 53 71 6c 29 3b 0a 20 20 73 71 6c 69 74 65  (zSql);.  sqlite
16ea0 33 5f 65 78 65 63 28 67 6c 6f 62 61 6c 44 62 2c  3_exec(globalDb,
16eb0 20 22 50 52 41 47 4d 41 20 70 61 67 65 5f 63 6f   "PRAGMA page_co
16ec0 75 6e 74 22 2c 20 30 2c 20 30 2c 20 30 29 3b 20  unt", 0, 0, 0); 
16ed0 2f 2a 20 4c 6f 61 64 20 74 68 65 20 73 63 68 65  /* Load the sche
16ee0 6d 61 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20 73  ma */.  while( s
16ef0 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d  qlite3_step(pStm
16f00 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  t)==SQLITE_ROW )
16f10 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
16f20 20 2a 7a 43 6f 6d 70 6c 65 74 69 6f 6e 20 3d 20   *zCompletion = 
16f30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
16f40 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
16f50 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20  (pStmt, 0);.    
16f60 69 6e 74 20 6e 43 6f 6d 70 6c 65 74 69 6f 6e 20  int nCompletion 
16f70 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
16f80 5f 62 79 74 65 73 28 70 53 74 6d 74 2c 20 30 29  _bytes(pStmt, 0)
16f90 3b 0a 20 20 20 20 69 66 28 20 69 53 74 61 72 74  ;.    if( iStart
16fa0 2b 6e 43 6f 6d 70 6c 65 74 69 6f 6e 20 3c 20 73  +nCompletion < s
16fb0 69 7a 65 6f 66 28 7a 42 75 66 29 2d 31 20 29 7b  izeof(zBuf)-1 ){
16fc0 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 7a 42  .      memcpy(zB
16fd0 75 66 2b 69 53 74 61 72 74 2c 20 7a 43 6f 6d 70  uf+iStart, zComp
16fe0 6c 65 74 69 6f 6e 2c 20 6e 43 6f 6d 70 6c 65 74  letion, nComplet
16ff0 69 6f 6e 2b 31 29 3b 0a 20 20 20 20 20 20 6c 69  ion+1);.      li
17000 6e 65 6e 6f 69 73 65 41 64 64 43 6f 6d 70 6c 65  nenoiseAddComple
17010 74 69 6f 6e 28 6c 63 2c 20 7a 42 75 66 29 3b 0a  tion(lc, zBuf);.
17020 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
17030 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
17040 6d 74 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  mt);.}.#endif../
17050 2a 0a 2a 2a 20 44 6f 20 43 2d 6c 61 6e 67 75 61  *.** Do C-langua
17060 67 65 20 73 74 79 6c 65 20 64 65 71 75 6f 74 69  ge style dequoti
17070 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 5c 61 20  ng..**.**    \a 
17080 20 20 20 2d 3e 20 61 6c 61 72 6d 0a 2a 2a 20 20     -> alarm.**  
17090 20 20 5c 62 20 20 20 20 2d 3e 20 62 61 63 6b 73    \b    -> backs
170a0 70 61 63 65 0a 2a 2a 20 20 20 20 5c 74 20 20 20  pace.**    \t   
170b0 20 2d 3e 20 74 61 62 0a 2a 2a 20 20 20 20 5c 6e   -> tab.**    \n
170c0 20 20 20 20 2d 3e 20 6e 65 77 6c 69 6e 65 0a 2a      -> newline.*
170d0 2a 20 20 20 20 5c 76 20 20 20 20 2d 3e 20 76 65  *    \v    -> ve
170e0 72 74 69 63 61 6c 20 74 61 62 0a 2a 2a 20 20 20  rtical tab.**   
170f0 20 5c 66 20 20 20 20 2d 3e 20 66 6f 72 6d 20 66   \f    -> form f
17100 65 65 64 0a 2a 2a 20 20 20 20 5c 72 20 20 20 20  eed.**    \r    
17110 2d 3e 20 63 61 72 72 69 61 67 65 20 72 65 74 75  -> carriage retu
17120 72 6e 0a 2a 2a 20 20 20 20 5c 73 20 20 20 20 2d  rn.**    \s    -
17130 3e 20 73 70 61 63 65 0a 2a 2a 20 20 20 20 5c 22  > space.**    \"
17140 20 20 20 20 2d 3e 20 22 0a 2a 2a 20 20 20 20 5c      -> ".**    \
17150 27 20 20 20 20 2d 3e 20 27 0a 2a 2a 20 20 20 20  '    -> '.**    
17160 5c 5c 20 20 20 20 2d 3e 20 62 61 63 6b 73 6c 61  \\    -> backsla
17170 73 68 0a 2a 2a 20 20 20 20 5c 4e 4e 4e 20 20 2d  sh.**    \NNN  -
17180 3e 20 61 73 63 69 69 20 63 68 61 72 61 63 74 65  > ascii characte
17190 72 20 4e 4e 4e 20 69 6e 20 6f 63 74 61 6c 0a 2a  r NNN in octal.*
171a0 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65  /.static void re
171b0 73 6f 6c 76 65 5f 62 61 63 6b 73 6c 61 73 68 65  solve_backslashe
171c0 73 28 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e  s(char *z){.  in
171d0 74 20 69 2c 20 6a 3b 0a 20 20 63 68 61 72 20 63  t i, j;.  char c
171e0 3b 0a 20 20 77 68 69 6c 65 28 20 2a 7a 20 26 26  ;.  while( *z &&
171f0 20 2a 7a 21 3d 27 5c 5c 27 20 29 20 7a 2b 2b 3b   *z!='\\' ) z++;
17200 0a 20 20 66 6f 72 28 69 3d 6a 3d 30 3b 20 28 63  .  for(i=j=0; (c
17210 20 3d 20 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b   = z[i])!=0; i++
17220 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  , j++){.    if( 
17230 63 3d 3d 27 5c 5c 27 20 26 26 20 7a 5b 69 2b 31  c=='\\' && z[i+1
17240 5d 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 63 20  ]!=0 ){.      c 
17250 3d 20 7a 5b 2b 2b 69 5d 3b 0a 20 20 20 20 20 20  = z[++i];.      
17260 69 66 28 20 63 3d 3d 27 61 27 20 29 7b 0a 20 20  if( c=='a' ){.  
17270 20 20 20 20 20 20 63 20 3d 20 27 5c 61 27 3b 0a        c = '\a';.
17280 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
17290 63 3d 3d 27 62 27 20 29 7b 0a 20 20 20 20 20 20  c=='b' ){.      
172a0 20 20 63 20 3d 20 27 5c 62 27 3b 0a 20 20 20 20    c = '\b';.    
172b0 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27    }else if( c=='
172c0 74 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20  t' ){.        c 
172d0 3d 20 27 5c 74 27 3b 0a 20 20 20 20 20 20 7d 65  = '\t';.      }e
172e0 6c 73 65 20 69 66 28 20 63 3d 3d 27 6e 27 20 29  lse if( c=='n' )
172f0 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27 5c  {.        c = '\
17300 6e 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  n';.      }else 
17310 69 66 28 20 63 3d 3d 27 76 27 20 29 7b 0a 20 20  if( c=='v' ){.  
17320 20 20 20 20 20 20 63 20 3d 20 27 5c 76 27 3b 0a        c = '\v';.
17330 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
17340 63 3d 3d 27 66 27 20 29 7b 0a 20 20 20 20 20 20  c=='f' ){.      
17350 20 20 63 20 3d 20 27 5c 66 27 3b 0a 20 20 20 20    c = '\f';.    
17360 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27    }else if( c=='
17370 72 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20  r' ){.        c 
17380 3d 20 27 5c 72 27 3b 0a 20 20 20 20 20 20 7d 65  = '\r';.      }e
17390 6c 73 65 20 69 66 28 20 63 3d 3d 27 22 27 20 29  lse if( c=='"' )
173a0 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27 22  {.        c = '"
173b0 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  ';.      }else i
173c0 66 28 20 63 3d 3d 27 5c 27 27 20 29 7b 0a 20 20  f( c=='\'' ){.  
173d0 20 20 20 20 20 20 63 20 3d 20 27 5c 27 27 3b 0a        c = '\'';.
173e0 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
173f0 63 3d 3d 27 5c 5c 27 20 29 7b 0a 20 20 20 20 20  c=='\\' ){.     
17400 20 20 20 63 20 3d 20 27 5c 5c 27 3b 0a 20 20 20     c = '\\';.   
17410 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3e 3d     }else if( c>=
17420 27 30 27 20 26 26 20 63 3c 3d 27 37 27 20 29 7b  '0' && c<='7' ){
17430 0a 20 20 20 20 20 20 20 20 63 20 2d 3d 20 27 30  .        c -= '0
17440 27 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a  ';.        if( z
17450 5b 69 2b 31 5d 3e 3d 27 30 27 20 26 26 20 7a 5b  [i+1]>='0' && z[
17460 69 2b 31 5d 3c 3d 27 37 27 20 29 7b 0a 20 20 20  i+1]<='7' ){.   
17470 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20         i++;.    
17480 20 20 20 20 20 20 63 20 3d 20 28 63 3c 3c 33 29        c = (c<<3)
17490 20 2b 20 7a 5b 69 5d 20 2d 20 27 30 27 3b 0a 20   + z[i] - '0';. 
174a0 20 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b 69           if( z[i
174b0 2b 31 5d 3e 3d 27 30 27 20 26 26 20 7a 5b 69 2b  +1]>='0' && z[i+
174c0 31 5d 3c 3d 27 37 27 20 29 7b 0a 20 20 20 20 20  1]<='7' ){.     
174d0 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20         i++;.    
174e0 20 20 20 20 20 20 20 20 63 20 3d 20 28 63 3c 3c          c = (c<<
174f0 33 29 20 2b 20 7a 5b 69 5d 20 2d 20 27 30 27 3b  3) + z[i] - '0';
17500 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
17510 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
17520 20 20 20 7d 0a 20 20 20 20 7a 5b 6a 5d 20 3d 20     }.    z[j] = 
17530 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6a 3c 69  c;.  }.  if( j<i
17540 20 29 20 7a 5b 6a 5d 20 3d 20 30 3b 0a 7d 0a 0a   ) z[j] = 0;.}..
17550 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
17560 20 76 61 6c 75 65 20 6f 66 20 61 20 68 65 78 61   value of a hexa
17570 64 65 63 69 6d 61 6c 20 64 69 67 69 74 2e 20 20  decimal digit.  
17580 52 65 74 75 72 6e 20 2d 31 20 69 66 20 74 68 65  Return -1 if the
17590 20 69 6e 70 75 74 0a 2a 2a 20 69 73 20 6e 6f 74   input.** is not
175a0 20 61 20 68 65 78 20 64 69 67 69 74 2e 0a 2a 2f   a hex digit..*/
175b0 0a 73 74 61 74 69 63 20 69 6e 74 20 68 65 78 44  .static int hexD
175c0 69 67 69 74 56 61 6c 75 65 28 63 68 61 72 20 63  igitValue(char c
175d0 29 7b 0a 20 20 69 66 28 20 63 3e 3d 27 30 27 20  ){.  if( c>='0' 
175e0 26 26 20 63 3c 3d 27 39 27 20 29 20 72 65 74 75  && c<='9' ) retu
175f0 72 6e 20 63 20 2d 20 27 30 27 3b 0a 20 20 69 66  rn c - '0';.  if
17600 28 20 63 3e 3d 27 61 27 20 26 26 20 63 3c 3d 27  ( c>='a' && c<='
17610 66 27 20 29 20 72 65 74 75 72 6e 20 63 20 2d 20  f' ) return c - 
17620 27 61 27 20 2b 20 31 30 3b 0a 20 20 69 66 28 20  'a' + 10;.  if( 
17630 63 3e 3d 27 41 27 20 26 26 20 63 3c 3d 27 46 27  c>='A' && c<='F'
17640 20 29 20 72 65 74 75 72 6e 20 63 20 2d 20 27 41   ) return c - 'A
17650 27 20 2b 20 31 30 3b 0a 20 20 72 65 74 75 72 6e  ' + 10;.  return
17660 20 2d 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e   -1;.}../*.** In
17670 74 65 72 70 72 65 74 20 7a 41 72 67 20 61 73 20  terpret zArg as 
17680 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
17690 2c 20 70 6f 73 73 69 62 6c 79 20 77 69 74 68 20  , possibly with 
176a0 73 75 66 66 69 78 65 73 2e 0a 2a 2f 0a 73 74 61  suffixes..*/.sta
176b0 74 69 63 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  tic sqlite3_int6
176c0 34 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 63  4 integerValue(c
176d0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67 29  onst char *zArg)
176e0 7b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  {.  sqlite3_int6
176f0 34 20 76 20 3d 20 30 3b 0a 20 20 73 74 61 74 69  4 v = 0;.  stati
17700 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 7b  c const struct {
17710 20 63 68 61 72 20 2a 7a 53 75 66 66 69 78 3b 20   char *zSuffix; 
17720 69 6e 74 20 69 4d 75 6c 74 3b 20 7d 20 61 4d 75  int iMult; } aMu
17730 6c 74 5b 5d 20 3d 20 7b 0a 20 20 20 20 7b 20 22  lt[] = {.    { "
17740 4b 69 42 22 2c 20 31 30 32 34 20 7d 2c 0a 20 20  KiB", 1024 },.  
17750 20 20 7b 20 22 4d 69 42 22 2c 20 31 30 32 34 2a    { "MiB", 1024*
17760 31 30 32 34 20 7d 2c 0a 20 20 20 20 7b 20 22 47  1024 },.    { "G
17770 69 42 22 2c 20 31 30 32 34 2a 31 30 32 34 2a 31  iB", 1024*1024*1
17780 30 32 34 20 7d 2c 0a 20 20 20 20 7b 20 22 4b 42  024 },.    { "KB
17790 22 2c 20 20 31 30 30 30 20 7d 2c 0a 20 20 20 20  ",  1000 },.    
177a0 7b 20 22 4d 42 22 2c 20 20 31 30 30 30 30 30 30  { "MB",  1000000
177b0 20 7d 2c 0a 20 20 20 20 7b 20 22 47 42 22 2c 20   },.    { "GB", 
177c0 20 31 30 30 30 30 30 30 30 30 30 20 7d 2c 0a 20   1000000000 },. 
177d0 20 20 20 7b 20 22 4b 22 2c 20 20 20 31 30 30 30     { "K",   1000
177e0 20 7d 2c 0a 20 20 20 20 7b 20 22 4d 22 2c 20 20   },.    { "M",  
177f0 20 31 30 30 30 30 30 30 20 7d 2c 0a 20 20 20 20   1000000 },.    
17800 7b 20 22 47 22 2c 20 20 20 31 30 30 30 30 30 30  { "G",   1000000
17810 30 30 30 20 7d 2c 0a 20 20 7d 3b 0a 20 20 69 6e  000 },.  };.  in
17820 74 20 69 3b 0a 20 20 69 6e 74 20 69 73 4e 65 67  t i;.  int isNeg
17830 20 3d 20 30 3b 0a 20 20 69 66 28 20 7a 41 72 67   = 0;.  if( zArg
17840 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  [0]=='-' ){.    
17850 69 73 4e 65 67 20 3d 20 31 3b 0a 20 20 20 20 7a  isNeg = 1;.    z
17860 41 72 67 2b 2b 3b 0a 20 20 7d 65 6c 73 65 20 69  Arg++;.  }else i
17870 66 28 20 7a 41 72 67 5b 30 5d 3d 3d 27 2b 27 20  f( zArg[0]=='+' 
17880 29 7b 0a 20 20 20 20 7a 41 72 67 2b 2b 3b 0a 20  ){.    zArg++;. 
17890 20 7d 0a 20 20 69 66 28 20 7a 41 72 67 5b 30 5d   }.  if( zArg[0]
178a0 3d 3d 27 30 27 20 26 26 20 7a 41 72 67 5b 31 5d  =='0' && zArg[1]
178b0 3d 3d 27 78 27 20 29 7b 0a 20 20 20 20 69 6e 74  =='x' ){.    int
178c0 20 78 3b 0a 20 20 20 20 7a 41 72 67 20 2b 3d 20   x;.    zArg += 
178d0 32 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 78  2;.    while( (x
178e0 20 3d 20 68 65 78 44 69 67 69 74 56 61 6c 75 65   = hexDigitValue
178f0 28 7a 41 72 67 5b 30 5d 29 29 3e 3d 30 20 29 7b  (zArg[0]))>=0 ){
17900 0a 20 20 20 20 20 20 76 20 3d 20 28 76 3c 3c 34  .      v = (v<<4
17910 29 20 2b 20 78 3b 0a 20 20 20 20 20 20 7a 41 72  ) + x;.      zAr
17920 67 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  g++;.    }.  }el
17930 73 65 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 49  se{.    while( I
17940 73 44 69 67 69 74 28 7a 41 72 67 5b 30 5d 29 20  sDigit(zArg[0]) 
17950 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 76 2a 31  ){.      v = v*1
17960 30 20 2b 20 7a 41 72 67 5b 30 5d 20 2d 20 27 30  0 + zArg[0] - '0
17970 27 3b 0a 20 20 20 20 20 20 7a 41 72 67 2b 2b 3b  ';.      zArg++;
17980 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66 6f 72  .    }.  }.  for
17990 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a  (i=0; i<ArraySiz
179a0 65 28 61 4d 75 6c 74 29 3b 20 69 2b 2b 29 7b 0a  e(aMult); i++){.
179b0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
179c0 73 74 72 69 63 6d 70 28 61 4d 75 6c 74 5b 69 5d  stricmp(aMult[i]
179d0 2e 7a 53 75 66 66 69 78 2c 20 7a 41 72 67 29 3d  .zSuffix, zArg)=
179e0 3d 30 20 29 7b 0a 20 20 20 20 20 20 76 20 2a 3d  =0 ){.      v *=
179f0 20 61 4d 75 6c 74 5b 69 5d 2e 69 4d 75 6c 74 3b   aMult[i].iMult;
17a00 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
17a10 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
17a20 20 69 73 4e 65 67 3f 20 2d 76 20 3a 20 76 3b 0a   isNeg? -v : v;.
17a30 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  }../*.** Interpr
17a40 65 74 20 7a 41 72 67 20 61 73 20 65 69 74 68 65  et zArg as eithe
17a50 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  r an integer or 
17a60 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e  a boolean value.
17a70 20 20 52 65 74 75 72 6e 20 31 20 6f 72 20 30 0a    Return 1 or 0.
17a80 2a 2a 20 66 6f 72 20 54 52 55 45 20 61 6e 64 20  ** for TRUE and 
17a90 46 41 4c 53 45 2e 20 20 52 65 74 75 72 6e 20 74  FALSE.  Return t
17aa0 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
17ab0 20 69 66 20 61 70 70 72 6f 70 72 69 61 74 65 2e   if appropriate.
17ac0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 62  .*/.static int b
17ad0 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 63 6f 6e 73  ooleanValue(cons
17ae0 74 20 63 68 61 72 20 2a 7a 41 72 67 29 7b 0a 20  t char *zArg){. 
17af0 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 7a 41   int i;.  if( zA
17b00 72 67 5b 30 5d 3d 3d 27 30 27 20 26 26 20 7a 41  rg[0]=='0' && zA
17b10 72 67 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a 20 20  rg[1]=='x' ){.  
17b20 20 20 66 6f 72 28 69 3d 32 3b 20 68 65 78 44 69    for(i=2; hexDi
17b30 67 69 74 56 61 6c 75 65 28 7a 41 72 67 5b 69 5d  gitValue(zArg[i]
17b40 29 3e 3d 30 3b 20 69 2b 2b 29 7b 7d 0a 20 20 7d  )>=0; i++){}.  }
17b50 65 6c 73 65 7b 0a 20 20 20 20 66 6f 72 28 69 3d  else{.    for(i=
17b60 30 3b 20 7a 41 72 67 5b 69 5d 3e 3d 27 30 27 20  0; zArg[i]>='0' 
17b70 26 26 20 7a 41 72 67 5b 69 5d 3c 3d 27 39 27 3b  && zArg[i]<='9';
17b80 20 69 2b 2b 29 7b 7d 0a 20 20 7d 0a 20 20 69 66   i++){}.  }.  if
17b90 28 20 69 3e 30 20 26 26 20 7a 41 72 67 5b 69 5d  ( i>0 && zArg[i]
17ba0 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 28 69 6e  ==0 ) return (in
17bb0 74 29 28 69 6e 74 65 67 65 72 56 61 6c 75 65 28  t)(integerValue(
17bc0 7a 41 72 67 29 20 26 20 30 78 66 66 66 66 66 66  zArg) & 0xffffff
17bd0 66 66 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  ff);.  if( sqlit
17be0 65 33 5f 73 74 72 69 63 6d 70 28 7a 41 72 67 2c  e3_stricmp(zArg,
17bf0 20 22 6f 6e 22 29 3d 3d 30 20 7c 7c 20 73 71 6c   "on")==0 || sql
17c00 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 41 72  ite3_stricmp(zAr
17c10 67 2c 22 79 65 73 22 29 3d 3d 30 20 29 7b 0a 20  g,"yes")==0 ){. 
17c20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
17c30 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73  .  if( sqlite3_s
17c40 74 72 69 63 6d 70 28 7a 41 72 67 2c 20 22 6f 66  tricmp(zArg, "of
17c50 66 22 29 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65  f")==0 || sqlite
17c60 33 5f 73 74 72 69 63 6d 70 28 7a 41 72 67 2c 22  3_stricmp(zArg,"
17c70 6e 6f 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72  no")==0 ){.    r
17c80 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 75  eturn 0;.  }.  u
17c90 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
17ca0 72 2c 20 22 45 52 52 4f 52 3a 20 4e 6f 74 20 61  r, "ERROR: Not a
17cb0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
17cc0 5c 22 25 73 5c 22 2e 20 41 73 73 75 6d 69 6e 67  \"%s\". Assuming
17cd0 20 5c 22 6e 6f 5c 22 2e 5c 6e 22 2c 0a 20 20 20   \"no\".\n",.   
17ce0 20 20 20 20 20 20 20 7a 41 72 67 29 3b 0a 20 20         zArg);.  
17cf0 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a  return 0;.}../*.
17d00 2a 2a 20 53 65 74 20 6f 72 20 63 6c 65 61 72 20  ** Set or clear 
17d10 61 20 73 68 65 6c 6c 20 66 6c 61 67 20 61 63 63  a shell flag acc
17d20 6f 72 64 69 6e 67 20 74 6f 20 61 20 62 6f 6f 6c  ording to a bool
17d30 65 61 6e 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74  ean value..*/.st
17d40 61 74 69 63 20 76 6f 69 64 20 73 65 74 4f 72 43  atic void setOrC
17d50 6c 65 61 72 46 6c 61 67 28 53 68 65 6c 6c 53 74  learFlag(ShellSt
17d60 61 74 65 20 2a 70 2c 20 75 6e 73 69 67 6e 65 64  ate *p, unsigned
17d70 20 6d 46 6c 61 67 2c 20 63 6f 6e 73 74 20 63 68   mFlag, const ch
17d80 61 72 20 2a 7a 41 72 67 29 7b 0a 20 20 69 66 28  ar *zArg){.  if(
17d90 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 7a 41   booleanValue(zA
17da0 72 67 29 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c  rg) ){.    Shell
17db0 53 65 74 46 6c 61 67 28 70 2c 20 6d 46 6c 61 67  SetFlag(p, mFlag
17dc0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
17dd0 53 68 65 6c 6c 43 6c 65 61 72 46 6c 61 67 28 70  ShellClearFlag(p
17de0 2c 20 6d 46 6c 61 67 29 3b 0a 20 20 7d 0a 7d 0a  , mFlag);.  }.}.
17df0 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 6e 20  ./*.** Close an 
17e00 6f 75 74 70 75 74 20 66 69 6c 65 2c 20 61 73 73  output file, ass
17e10 75 6d 69 6e 67 20 69 74 20 69 73 20 6e 6f 74 20  uming it is not 
17e20 73 74 64 65 72 72 20 6f 72 20 73 74 64 6f 75 74  stderr or stdout
17e30 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
17e40 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73  output_file_clos
17e50 65 28 46 49 4c 45 20 2a 66 29 7b 0a 20 20 69 66  e(FILE *f){.  if
17e60 28 20 66 20 26 26 20 66 21 3d 73 74 64 6f 75 74  ( f && f!=stdout
17e70 20 26 26 20 66 21 3d 73 74 64 65 72 72 20 29 20   && f!=stderr ) 
17e80 66 63 6c 6f 73 65 28 66 29 3b 0a 7d 0a 0a 2f 2a  fclose(f);.}../*
17e90 0a 2a 2a 20 54 72 79 20 74 6f 20 6f 70 65 6e 20  .** Try to open 
17ea0 61 6e 20 6f 75 74 70 75 74 20 66 69 6c 65 2e 20  an output file. 
17eb0 20 20 54 68 65 20 6e 61 6d 65 73 20 22 73 74 64    The names "std
17ec0 6f 75 74 22 20 61 6e 64 20 22 73 74 64 65 72 72  out" and "stderr
17ed0 22 20 61 72 65 0a 2a 2a 20 72 65 63 6f 67 6e 69  " are.** recogni
17ee0 7a 65 64 20 61 6e 64 20 64 6f 20 74 68 65 20 72  zed and do the r
17ef0 69 67 68 74 20 74 68 69 6e 67 2e 20 20 4e 55 4c  ight thing.  NUL
17f00 4c 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66  L is returned if
17f10 20 74 68 65 20 6f 75 74 70 75 74 0a 2a 2a 20 66   the output.** f
17f20 69 6c 65 6e 61 6d 65 20 69 73 20 22 6f 66 66 22  ilename is "off"
17f30 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 46 49 4c 45  ..*/.static FILE
17f40 20 2a 6f 75 74 70 75 74 5f 66 69 6c 65 5f 6f 70   *output_file_op
17f50 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  en(const char *z
17f60 46 69 6c 65 29 7b 0a 20 20 46 49 4c 45 20 2a 66  File){.  FILE *f
17f70 3b 0a 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a  ;.  if( strcmp(z
17f80 46 69 6c 65 2c 22 73 74 64 6f 75 74 22 29 3d 3d  File,"stdout")==
17f90 30 20 29 7b 0a 20 20 20 20 66 20 3d 20 73 74 64  0 ){.    f = std
17fa0 6f 75 74 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  out;.  }else if(
17fb0 20 73 74 72 63 6d 70 28 7a 46 69 6c 65 2c 20 22   strcmp(zFile, "
17fc0 73 74 64 65 72 72 22 29 3d 3d 30 20 29 7b 0a 20  stderr")==0 ){. 
17fd0 20 20 20 66 20 3d 20 73 74 64 65 72 72 3b 0a 20     f = stderr;. 
17fe0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
17ff0 70 28 7a 46 69 6c 65 2c 20 22 6f 66 66 22 29 3d  p(zFile, "off")=
18000 3d 30 20 29 7b 0a 20 20 20 20 66 20 3d 20 30 3b  =0 ){.    f = 0;
18010 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 20  .  }else{.    f 
18020 3d 20 66 6f 70 65 6e 28 7a 46 69 6c 65 2c 20 22  = fopen(zFile, "
18030 77 62 22 29 3b 0a 20 20 20 20 69 66 28 20 66 3d  wb");.    if( f=
18040 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  =0 ){.      utf8
18050 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
18060 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f  "Error: cannot o
18070 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a  pen \"%s\"\n", z
18080 46 69 6c 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  File);.    }.  }
18090 0a 20 20 72 65 74 75 72 6e 20 66 3b 0a 7d 0a 0a  .  return f;.}..
180a0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
180b0 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 29 0a  ITE_UNTESTABLE).
180c0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
180d0 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 29 20  ITE_OMIT_TRACE) 
180e0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
180f0 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
18100 5f 50 4f 49 4e 54 29 0a 2f 2a 0a 2a 2a 20 41 20  _POINT)./*.** A 
18110 72 6f 75 74 69 6e 65 20 66 6f 72 20 68 61 6e 64  routine for hand
18120 6c 69 6e 67 20 6f 75 74 70 75 74 20 66 72 6f 6d  ling output from
18130 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29   sqlite3_trace()
18140 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
18150 73 71 6c 5f 74 72 61 63 65 5f 63 61 6c 6c 62 61  sql_trace_callba
18160 63 6b 28 0a 20 20 75 6e 73 69 67 6e 65 64 20 6d  ck(.  unsigned m
18170 54 79 70 65 2c 0a 20 20 76 6f 69 64 20 2a 70 41  Type,.  void *pA
18180 72 67 2c 0a 20 20 76 6f 69 64 20 2a 70 50 2c 0a  rg,.  void *pP,.
18190 20 20 76 6f 69 64 20 2a 70 58 0a 29 7b 0a 20 20    void *pX.){.  
181a0 46 49 4c 45 20 2a 66 20 3d 20 28 46 49 4c 45 2a  FILE *f = (FILE*
181b0 29 70 41 72 67 3b 0a 20 20 55 4e 55 53 45 44 5f  )pArg;.  UNUSED_
181c0 50 41 52 41 4d 45 54 45 52 28 6d 54 79 70 65 29  PARAMETER(mType)
181d0 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ;.  UNUSED_PARAM
181e0 45 54 45 52 28 70 50 29 3b 0a 20 20 69 66 28 20  ETER(pP);.  if( 
181f0 66 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  f ){.    const c
18200 68 61 72 20 2a 7a 20 3d 20 28 63 6f 6e 73 74 20  har *z = (const 
18210 63 68 61 72 2a 29 70 58 3b 0a 20 20 20 20 69 6e  char*)pX;.    in
18220 74 20 69 20 3d 20 28 69 6e 74 29 73 74 72 6c 65  t i = (int)strle
18230 6e 28 7a 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  n(z);.    while(
18240 20 69 3e 30 20 26 26 20 7a 5b 69 2d 31 5d 3d 3d   i>0 && z[i-1]==
18250 27 3b 27 20 29 7b 20 69 2d 2d 3b 20 7d 0a 20 20  ';' ){ i--; }.  
18260 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 66 2c    utf8_printf(f,
18270 20 22 25 2e 2a 73 3b 5c 6e 22 2c 20 69 2c 20 7a   "%.*s;\n", i, z
18280 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
18290 30 3b 0a 7d 0a 23 65 6e 64 69 66 0a 23 65 6e 64  0;.}.#endif.#end
182a0 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6e 6f 2d 6f  if../*.** A no-o
182b0 70 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72  p routine that r
182c0 75 6e 73 20 77 69 74 68 20 74 68 65 20 22 2e 62  uns with the ".b
182d0 72 65 61 6b 70 6f 69 6e 74 22 20 64 6f 63 2d 63  reakpoint" doc-c
182e0 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 69 73  ommand.  This is
182f0 0a 2a 2a 20 61 20 75 73 65 66 75 6c 20 73 70 6f  .** a useful spo
18300 74 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67  t to set a debug
18310 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a  ger breakpoint..
18320 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74  */.static void t
18330 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 28 76  est_breakpoint(v
18340 6f 69 64 29 7b 0a 20 20 73 74 61 74 69 63 20 69  oid){.  static i
18350 6e 74 20 6e 43 61 6c 6c 20 3d 20 30 3b 0a 20 20  nt nCall = 0;.  
18360 6e 43 61 6c 6c 2b 2b 3b 0a 7d 0a 0a 2f 2a 0a 2a  nCall++;.}../*.*
18370 2a 20 41 6e 20 6f 62 6a 65 63 74 20 75 73 65 64  * An object used
18380 20 74 6f 20 72 65 61 64 20 61 20 43 53 56 20 61   to read a CSV a
18390 6e 64 20 6f 74 68 65 72 20 66 69 6c 65 73 20 66  nd other files f
183a0 6f 72 20 69 6d 70 6f 72 74 2e 0a 2a 2f 0a 74 79  or import..*/.ty
183b0 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6d 70  pedef struct Imp
183c0 6f 72 74 43 74 78 20 49 6d 70 6f 72 74 43 74 78  ortCtx ImportCtx
183d0 3b 0a 73 74 72 75 63 74 20 49 6d 70 6f 72 74 43  ;.struct ImportC
183e0 74 78 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  tx {.  const cha
183f0 72 20 2a 7a 46 69 6c 65 3b 20 20 2f 2a 20 4e 61  r *zFile;  /* Na
18400 6d 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20  me of the input 
18410 66 69 6c 65 20 2a 2f 0a 20 20 46 49 4c 45 20 2a  file */.  FILE *
18420 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  in;           /*
18430 20 52 65 61 64 20 74 68 65 20 43 53 56 20 74 65   Read the CSV te
18440 78 74 20 66 72 6f 6d 20 74 68 69 73 20 69 6e 70  xt from this inp
18450 75 74 20 73 74 72 65 61 6d 20 2a 2f 0a 20 20 63  ut stream */.  c
18460 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 20  har *z;         
18470 20 20 20 2f 2a 20 41 63 63 75 6d 75 6c 61 74 65     /* Accumulate
18480 64 20 74 65 78 74 20 66 6f 72 20 61 20 66 69 65  d text for a fie
18490 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20  ld */.  int n;  
184a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
184b0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
184c0 6e 20 7a 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c  n z */.  int nAl
184d0 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  loc;         /* 
184e0 53 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  Space allocated 
184f0 66 6f 72 20 7a 5b 5d 20 2a 2f 0a 20 20 69 6e 74  for z[] */.  int
18500 20 6e 4c 69 6e 65 3b 20 20 20 20 20 20 20 20 20   nLine;         
18510 20 2f 2a 20 43 75 72 72 65 6e 74 20 6c 69 6e 65   /* Current line
18520 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 69 6e 74   number */.  int
18530 20 62 4e 6f 74 46 69 72 73 74 3b 20 20 20 20 20   bNotFirst;     
18540 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 6e 65 20   /* True if one 
18550 6f 72 20 6d 6f 72 65 20 62 79 74 65 73 20 61 6c  or more bytes al
18560 72 65 61 64 79 20 72 65 61 64 20 2a 2f 0a 20 20  ready read */.  
18570 69 6e 74 20 63 54 65 72 6d 3b 20 20 20 20 20 20  int cTerm;      
18580 20 20 20 20 2f 2a 20 43 68 61 72 61 63 74 65 72      /* Character
18590 20 74 68 61 74 20 74 65 72 6d 69 6e 61 74 65 64   that terminated
185a0 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
185b0 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20   field */.  int 
185c0 63 43 6f 6c 53 65 70 3b 20 20 20 20 20 20 20 20  cColSep;        
185d0 2f 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 20 73 65  /* The column se
185e0 70 61 72 61 74 6f 72 20 63 68 61 72 61 63 74 65  parator characte
185f0 72 2e 20 20 28 55 73 75 61 6c 6c 79 20 22 2c 22  r.  (Usually ","
18600 29 20 2a 2f 0a 20 20 69 6e 74 20 63 52 6f 77 53  ) */.  int cRowS
18610 65 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ep;        /* Th
18620 65 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 20  e row separator 
18630 63 68 61 72 61 63 74 65 72 2e 20 20 28 55 73 75  character.  (Usu
18640 61 6c 6c 79 20 22 5c 6e 22 29 20 2a 2f 0a 7d 3b  ally "\n") */.};
18650 0a 0a 2f 2a 20 41 70 70 65 6e 64 20 61 20 73 69  ../* Append a si
18660 6e 67 6c 65 20 62 79 74 65 20 74 6f 20 7a 5b 5d  ngle byte to z[]
18670 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20   */.static void 
18680 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68  import_append_ch
18690 61 72 28 49 6d 70 6f 72 74 43 74 78 20 2a 70 2c  ar(ImportCtx *p,
186a0 20 69 6e 74 20 63 29 7b 0a 20 20 69 66 28 20 70   int c){.  if( p
186b0 2d 3e 6e 2b 31 3e 3d 70 2d 3e 6e 41 6c 6c 6f 63  ->n+1>=p->nAlloc
186c0 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f   ){.    p->nAllo
186d0 63 20 2b 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 20 2b  c += p->nAlloc +
186e0 20 31 30 30 3b 0a 20 20 20 20 70 2d 3e 7a 20 3d   100;.    p->z =
186f0 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63   sqlite3_realloc
18700 36 34 28 70 2d 3e 7a 2c 20 70 2d 3e 6e 41 6c 6c  64(p->z, p->nAll
18710 6f 63 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  oc);.    if( p->
18720 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61  z==0 ){.      ra
18730 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
18740 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c   "out of memory\
18750 6e 22 29 3b 0a 20 20 20 20 20 20 65 78 69 74 28  n");.      exit(
18760 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  1);.    }.  }.  
18770 70 2d 3e 7a 5b 70 2d 3e 6e 2b 2b 5d 20 3d 20 28  p->z[p->n++] = (
18780 63 68 61 72 29 63 3b 0a 7d 0a 0a 2f 2a 20 52 65  char)c;.}../* Re
18790 61 64 20 61 20 73 69 6e 67 6c 65 20 66 69 65 6c  ad a single fiel
187a0 64 20 6f 66 20 43 53 56 20 74 65 78 74 2e 20 20  d of CSV text.  
187b0 43 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20  Compatible with 
187c0 72 66 63 34 31 38 30 20 61 6e 64 20 65 78 74 65  rfc4180 and exte
187d0 6e 64 65 64 0a 2a 2a 20 77 69 74 68 20 74 68 65  nded.** with the
187e0 20 6f 70 74 69 6f 6e 20 6f 66 20 68 61 76 69 6e   option of havin
187f0 67 20 61 20 73 65 70 61 72 61 74 6f 72 20 6f 74  g a separator ot
18800 68 65 72 20 74 68 61 6e 20 22 2c 22 2e 0a 2a 2a  her than ","..**
18810 0a 2a 2a 20 20 20 2b 20 20 49 6e 70 75 74 20 63  .**   +  Input c
18820 6f 6d 65 73 20 66 72 6f 6d 20 70 2d 3e 69 6e 2e  omes from p->in.
18830 0a 2a 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 72  .**   +  Store r
18840 65 73 75 6c 74 73 20 69 6e 20 70 2d 3e 7a 20 6f  esults in p->z o
18850 66 20 6c 65 6e 67 74 68 20 70 2d 3e 6e 2e 20 20  f length p->n.  
18860 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 70 2d  Space to hold p-
18870 3e 7a 20 63 6f 6d 65 73 0a 2a 2a 20 20 20 20 20  >z comes.**     
18880 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
18890 6c 6c 6f 63 36 34 28 29 2e 0a 2a 2a 20 20 20 2b  lloc64()..**   +
188a0 20 20 55 73 65 20 70 2d 3e 63 53 65 70 20 61 73    Use p->cSep as
188b0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 73 65 70 61   the column sepa
188c0 72 61 74 6f 72 2e 20 20 54 68 65 20 64 65 66 61  rator.  The defa
188d0 75 6c 74 20 69 73 20 22 2c 22 2e 0a 2a 2a 20 20  ult is ","..**  
188e0 20 2b 20 20 55 73 65 20 70 2d 3e 72 53 65 70 20   +  Use p->rSep 
188f0 61 73 20 74 68 65 20 72 6f 77 20 73 65 70 61 72  as the row separ
18900 61 74 6f 72 2e 20 20 54 68 65 20 64 65 66 61 75  ator.  The defau
18910 6c 74 20 69 73 20 22 5c 6e 22 2e 0a 2a 2a 20 20  lt is "\n"..**  
18920 20 2b 20 20 4b 65 65 70 20 74 72 61 63 6b 20 6f   +  Keep track o
18930 66 20 74 68 65 20 6c 69 6e 65 20 6e 75 6d 62 65  f the line numbe
18940 72 20 69 6e 20 70 2d 3e 6e 4c 69 6e 65 2e 0a 2a  r in p->nLine..*
18950 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 74 68 65  *   +  Store the
18960 20 63 68 61 72 61 63 74 65 72 20 74 68 61 74 20   character that 
18970 74 65 72 6d 69 6e 61 74 65 73 20 74 68 65 20 66  terminates the f
18980 69 65 6c 64 20 69 6e 20 70 2d 3e 63 54 65 72 6d  ield in p->cTerm
18990 2e 20 20 53 74 6f 72 65 0a 2a 2a 20 20 20 20 20  .  Store.**     
189a0 20 45 4f 46 20 6f 6e 20 65 6e 64 2d 6f 66 2d 66   EOF on end-of-f
189b0 69 6c 65 2e 0a 2a 2a 20 20 20 2b 20 20 52 65 70  ile..**   +  Rep
189c0 6f 72 74 20 73 79 6e 74 61 78 20 65 72 72 6f 72  ort syntax error
189d0 73 20 6f 6e 20 73 74 64 65 72 72 0a 2a 2f 0a 73  s on stderr.*/.s
189e0 74 61 74 69 63 20 63 68 61 72 20 2a 53 51 4c 49  tatic char *SQLI
189f0 54 45 5f 43 44 45 43 4c 20 63 73 76 5f 72 65 61  TE_CDECL csv_rea
18a00 64 5f 6f 6e 65 5f 66 69 65 6c 64 28 49 6d 70 6f  d_one_field(Impo
18a10 72 74 43 74 78 20 2a 70 29 7b 0a 20 20 69 6e 74  rtCtx *p){.  int
18a20 20 63 3b 0a 20 20 69 6e 74 20 63 53 65 70 20 3d   c;.  int cSep =
18a30 20 70 2d 3e 63 43 6f 6c 53 65 70 3b 0a 20 20 69   p->cColSep;.  i
18a40 6e 74 20 72 53 65 70 20 3d 20 70 2d 3e 63 52 6f  nt rSep = p->cRo
18a50 77 53 65 70 3b 0a 20 20 70 2d 3e 6e 20 3d 20 30  wSep;.  p->n = 0
18a60 3b 0a 20 20 63 20 3d 20 66 67 65 74 63 28 70 2d  ;.  c = fgetc(p-
18a70 3e 69 6e 29 3b 0a 20 20 69 66 28 20 63 3d 3d 45  >in);.  if( c==E
18a80 4f 46 20 7c 7c 20 73 65 65 6e 49 6e 74 65 72 72  OF || seenInterr
18a90 75 70 74 20 29 7b 0a 20 20 20 20 70 2d 3e 63 54  upt ){.    p->cT
18aa0 65 72 6d 20 3d 20 45 4f 46 3b 0a 20 20 20 20 72  erm = EOF;.    r
18ab0 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69  eturn 0;.  }.  i
18ac0 66 28 20 63 3d 3d 27 22 27 20 29 7b 0a 20 20 20  f( c=='"' ){.   
18ad0 20 69 6e 74 20 70 63 2c 20 70 70 63 3b 0a 20 20   int pc, ppc;.  
18ae0 20 20 69 6e 74 20 73 74 61 72 74 4c 69 6e 65 20    int startLine 
18af0 3d 20 70 2d 3e 6e 4c 69 6e 65 3b 0a 20 20 20 20  = p->nLine;.    
18b00 69 6e 74 20 63 51 75 6f 74 65 20 3d 20 63 3b 0a  int cQuote = c;.
18b10 20 20 20 20 70 63 20 3d 20 70 70 63 20 3d 20 30      pc = ppc = 0
18b20 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 31 20 29  ;.    while( 1 )
18b30 7b 0a 20 20 20 20 20 20 63 20 3d 20 66 67 65 74  {.      c = fget
18b40 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 20 20 20 20  c(p->in);.      
18b50 69 66 28 20 63 3d 3d 72 53 65 70 20 29 20 70 2d  if( c==rSep ) p-
18b60 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20 20 20  >nLine++;.      
18b70 69 66 28 20 63 3d 3d 63 51 75 6f 74 65 20 29 7b  if( c==cQuote ){
18b80 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 63 3d  .        if( pc=
18b90 3d 63 51 75 6f 74 65 20 29 7b 0a 20 20 20 20 20  =cQuote ){.     
18ba0 20 20 20 20 20 70 63 20 3d 20 30 3b 0a 20 20 20       pc = 0;.   
18bb0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
18bc0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
18bd0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 63 3d   }.      if( (c=
18be0 3d 63 53 65 70 20 26 26 20 70 63 3d 3d 63 51 75  =cSep && pc==cQu
18bf0 6f 74 65 29 0a 20 20 20 20 20 20 20 7c 7c 20 28  ote).       || (
18c00 63 3d 3d 72 53 65 70 20 26 26 20 70 63 3d 3d 63  c==rSep && pc==c
18c10 51 75 6f 74 65 29 0a 20 20 20 20 20 20 20 7c 7c  Quote).       ||
18c20 20 28 63 3d 3d 72 53 65 70 20 26 26 20 70 63 3d   (c==rSep && pc=
18c30 3d 27 5c 72 27 20 26 26 20 70 70 63 3d 3d 63 51  ='\r' && ppc==cQ
18c40 75 6f 74 65 29 0a 20 20 20 20 20 20 20 7c 7c 20  uote).       || 
18c50 28 63 3d 3d 45 4f 46 20 26 26 20 70 63 3d 3d 63  (c==EOF && pc==c
18c60 51 75 6f 74 65 29 0a 20 20 20 20 20 20 29 7b 0a  Quote).      ){.
18c70 20 20 20 20 20 20 20 20 64 6f 7b 20 70 2d 3e 6e          do{ p->n
18c80 2d 2d 3b 20 7d 77 68 69 6c 65 28 20 70 2d 3e 7a  --; }while( p->z
18c90 5b 70 2d 3e 6e 5d 21 3d 63 51 75 6f 74 65 20 29  [p->n]!=cQuote )
18ca0 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 63 54 65  ;.        p->cTe
18cb0 72 6d 20 3d 20 63 3b 0a 20 20 20 20 20 20 20 20  rm = c;.        
18cc0 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
18cd0 20 20 20 20 20 69 66 28 20 70 63 3d 3d 63 51 75       if( pc==cQu
18ce0 6f 74 65 20 26 26 20 63 21 3d 27 5c 72 27 20 29  ote && c!='\r' )
18cf0 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  {.        utf8_p
18d00 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25  rintf(stderr, "%
18d10 73 3a 25 64 3a 20 75 6e 65 73 63 61 70 65 64 20  s:%d: unescaped 
18d20 25 63 20 63 68 61 72 61 63 74 65 72 5c 6e 22 2c  %c character\n",
18d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18d40 20 70 2d 3e 7a 46 69 6c 65 2c 20 70 2d 3e 6e 4c   p->zFile, p->nL
18d50 69 6e 65 2c 20 63 51 75 6f 74 65 29 3b 0a 20 20  ine, cQuote);.  
18d60 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
18d70 63 3d 3d 45 4f 46 20 29 7b 0a 20 20 20 20 20 20  c==EOF ){.      
18d80 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
18d90 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20 75 6e  derr, "%s:%d: un
18da0 74 65 72 6d 69 6e 61 74 65 64 20 25 63 2d 71 75  terminated %c-qu
18db0 6f 74 65 64 20 66 69 65 6c 64 5c 6e 22 2c 0a 20  oted field\n",. 
18dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
18dd0 2d 3e 7a 46 69 6c 65 2c 20 73 74 61 72 74 4c 69  ->zFile, startLi
18de0 6e 65 2c 20 63 51 75 6f 74 65 29 3b 0a 20 20 20  ne, cQuote);.   
18df0 20 20 20 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20       p->cTerm = 
18e00 63 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  c;.        break
18e10 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
18e20 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68  import_append_ch
18e30 61 72 28 70 2c 20 63 29 3b 0a 20 20 20 20 20 20  ar(p, c);.      
18e40 70 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  ppc = pc;.      
18e50 70 63 20 3d 20 63 3b 0a 20 20 20 20 7d 0a 20 20  pc = c;.    }.  
18e60 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 49 66  }else{.    /* If
18e70 20 74 68 69 73 20 69 73 20 74 68 65 20 66 69 72   this is the fir
18e80 73 74 20 66 69 65 6c 64 20 62 65 69 6e 67 20 70  st field being p
18e90 61 72 73 65 64 20 61 6e 64 20 69 74 20 62 65 67  arsed and it beg
18ea0 69 6e 73 20 77 69 74 68 20 74 68 65 0a 20 20 20  ins with the.   
18eb0 20 2a 2a 20 55 54 46 2d 38 20 42 4f 4d 20 20 28   ** UTF-8 BOM  (
18ec0 30 78 45 46 20 42 42 20 42 46 29 20 74 68 65 6e  0xEF BB BF) then
18ed0 20 73 6b 69 70 20 74 68 65 20 42 4f 4d 20 2a 2f   skip the BOM */
18ee0 0a 20 20 20 20 69 66 28 20 28 63 26 30 78 66 66  .    if( (c&0xff
18ef0 29 3d 3d 30 78 65 66 20 26 26 20 70 2d 3e 62 4e  )==0xef && p->bN
18f00 6f 74 46 69 72 73 74 3d 3d 30 20 29 7b 0a 20 20  otFirst==0 ){.  
18f10 20 20 20 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e      import_appen
18f20 64 5f 63 68 61 72 28 70 2c 20 63 29 3b 0a 20 20  d_char(p, c);.  
18f30 20 20 20 20 63 20 3d 20 66 67 65 74 63 28 70 2d      c = fgetc(p-
18f40 3e 69 6e 29 3b 0a 20 20 20 20 20 20 69 66 28 20  >in);.      if( 
18f50 28 63 26 30 78 66 66 29 3d 3d 30 78 62 62 20 29  (c&0xff)==0xbb )
18f60 7b 0a 20 20 20 20 20 20 20 20 69 6d 70 6f 72 74  {.        import
18f70 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 70 2c 20  _append_char(p, 
18f80 63 29 3b 0a 20 20 20 20 20 20 20 20 63 20 3d 20  c);.        c = 
18f90 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20  fgetc(p->in);.  
18fa0 20 20 20 20 20 20 69 66 28 20 28 63 26 30 78 66        if( (c&0xf
18fb0 66 29 3d 3d 30 78 62 66 20 29 7b 0a 20 20 20 20  f)==0xbf ){.    
18fc0 20 20 20 20 20 20 70 2d 3e 62 4e 6f 74 46 69 72        p->bNotFir
18fd0 73 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  st = 1;.        
18fe0 20 20 70 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20 20    p->n = 0;.    
18ff0 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 73 76        return csv
19000 5f 72 65 61 64 5f 6f 6e 65 5f 66 69 65 6c 64 28  _read_one_field(
19010 70 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  p);.        }.  
19020 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
19030 77 68 69 6c 65 28 20 63 21 3d 45 4f 46 20 26 26  while( c!=EOF &&
19040 20 63 21 3d 63 53 65 70 20 26 26 20 63 21 3d 72   c!=cSep && c!=r
19050 53 65 70 20 29 7b 0a 20 20 20 20 20 20 69 6d 70  Sep ){.      imp
19060 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28  ort_append_char(
19070 70 2c 20 63 29 3b 0a 20 20 20 20 20 20 63 20 3d  p, c);.      c =
19080 20 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20   fgetc(p->in);. 
19090 20 20 20 7d 0a 20 20 20 20 69 66 28 20 63 3d 3d     }.    if( c==
190a0 72 53 65 70 20 29 7b 0a 20 20 20 20 20 20 70 2d  rSep ){.      p-
190b0 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20 20 20  >nLine++;.      
190c0 69 66 28 20 70 2d 3e 6e 3e 30 20 26 26 20 70 2d  if( p->n>0 && p-
190d0 3e 7a 5b 70 2d 3e 6e 2d 31 5d 3d 3d 27 5c 72 27  >z[p->n-1]=='\r'
190e0 20 29 20 70 2d 3e 6e 2d 2d 3b 0a 20 20 20 20 7d   ) p->n--;.    }
190f0 0a 20 20 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20  .    p->cTerm = 
19100 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e  c;.  }.  if( p->
19110 7a 20 29 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 20 3d  z ) p->z[p->n] =
19120 20 30 3b 0a 20 20 70 2d 3e 62 4e 6f 74 46 69 72   0;.  p->bNotFir
19130 73 74 20 3d 20 31 3b 0a 20 20 72 65 74 75 72 6e  st = 1;.  return
19140 20 70 2d 3e 7a 3b 0a 7d 0a 0a 2f 2a 20 52 65 61   p->z;.}../* Rea
19150 64 20 61 20 73 69 6e 67 6c 65 20 66 69 65 6c 64  d a single field
19160 20 6f 66 20 41 53 43 49 49 20 64 65 6c 69 6d 69   of ASCII delimi
19170 74 65 64 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  ted text..**.** 
19180 20 20 2b 20 20 49 6e 70 75 74 20 63 6f 6d 65 73    +  Input comes
19190 20 66 72 6f 6d 20 70 2d 3e 69 6e 2e 0a 2a 2a 20   from p->in..** 
191a0 20 20 2b 20 20 53 74 6f 72 65 20 72 65 73 75 6c    +  Store resul
191b0 74 73 20 69 6e 20 70 2d 3e 7a 20 6f 66 20 6c 65  ts in p->z of le
191c0 6e 67 74 68 20 70 2d 3e 6e 2e 20 20 53 70 61 63  ngth p->n.  Spac
191d0 65 20 74 6f 20 68 6f 6c 64 20 70 2d 3e 7a 20 63  e to hold p->z c
191e0 6f 6d 65 73 0a 2a 2a 20 20 20 20 20 20 66 72 6f  omes.**      fro
191f0 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
19200 36 34 28 29 2e 0a 2a 2a 20 20 20 2b 20 20 55 73  64()..**   +  Us
19210 65 20 70 2d 3e 63 53 65 70 20 61 73 20 74 68 65  e p->cSep as the
19220 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f   column separato
19230 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  r.  The default 
19240 69 73 20 22 5c 78 31 46 22 2e 0a 2a 2a 20 20 20  is "\x1F"..**   
19250 2b 20 20 55 73 65 20 70 2d 3e 72 53 65 70 20 61  +  Use p->rSep a
19260 73 20 74 68 65 20 72 6f 77 20 73 65 70 61 72 61  s the row separa
19270 74 6f 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c  tor.  The defaul
19280 74 20 69 73 20 22 5c 78 31 45 22 2e 0a 2a 2a 20  t is "\x1E"..** 
19290 20 20 2b 20 20 4b 65 65 70 20 74 72 61 63 6b 20    +  Keep track 
192a0 6f 66 20 74 68 65 20 72 6f 77 20 6e 75 6d 62 65  of the row numbe
192b0 72 20 69 6e 20 70 2d 3e 6e 4c 69 6e 65 2e 0a 2a  r in p->nLine..*
192c0 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 74 68 65  *   +  Store the
192d0 20 63 68 61 72 61 63 74 65 72 20 74 68 61 74 20   character that 
192e0 74 65 72 6d 69 6e 61 74 65 73 20 74 68 65 20 66  terminates the f
192f0 69 65 6c 64 20 69 6e 20 70 2d 3e 63 54 65 72 6d  ield in p->cTerm
19300 2e 20 20 53 74 6f 72 65 0a 2a 2a 20 20 20 20 20  .  Store.**     
19310 20 45 4f 46 20 6f 6e 20 65 6e 64 2d 6f 66 2d 66   EOF on end-of-f
19320 69 6c 65 2e 0a 2a 2a 20 20 20 2b 20 20 52 65 70  ile..**   +  Rep
19330 6f 72 74 20 73 79 6e 74 61 78 20 65 72 72 6f 72  ort syntax error
19340 73 20 6f 6e 20 73 74 64 65 72 72 0a 2a 2f 0a 73  s on stderr.*/.s
19350 74 61 74 69 63 20 63 68 61 72 20 2a 53 51 4c 49  tatic char *SQLI
19360 54 45 5f 43 44 45 43 4c 20 61 73 63 69 69 5f 72  TE_CDECL ascii_r
19370 65 61 64 5f 6f 6e 65 5f 66 69 65 6c 64 28 49 6d  ead_one_field(Im
19380 70 6f 72 74 43 74 78 20 2a 70 29 7b 0a 20 20 69  portCtx *p){.  i
19390 6e 74 20 63 3b 0a 20 20 69 6e 74 20 63 53 65 70  nt c;.  int cSep
193a0 20 3d 20 70 2d 3e 63 43 6f 6c 53 65 70 3b 0a 20   = p->cColSep;. 
193b0 20 69 6e 74 20 72 53 65 70 20 3d 20 70 2d 3e 63   int rSep = p->c
193c0 52 6f 77 53 65 70 3b 0a 20 20 70 2d 3e 6e 20 3d  RowSep;.  p->n =
193d0 20 30 3b 0a 20 20 63 20 3d 20 66 67 65 74 63 28   0;.  c = fgetc(
193e0 70 2d 3e 69 6e 29 3b 0a 20 20 69 66 28 20 63 3d  p->in);.  if( c=
193f0 3d 45 4f 46 20 7c 7c 20 73 65 65 6e 49 6e 74 65  =EOF || seenInte
19400 72 72 75 70 74 20 29 7b 0a 20 20 20 20 70 2d 3e  rrupt ){.    p->
19410 63 54 65 72 6d 20 3d 20 45 4f 46 3b 0a 20 20 20  cTerm = EOF;.   
19420 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
19430 20 77 68 69 6c 65 28 20 63 21 3d 45 4f 46 20 26   while( c!=EOF &
19440 26 20 63 21 3d 63 53 65 70 20 26 26 20 63 21 3d  & c!=cSep && c!=
19450 72 53 65 70 20 29 7b 0a 20 20 20 20 69 6d 70 6f  rSep ){.    impo
19460 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 70  rt_append_char(p
19470 2c 20 63 29 3b 0a 20 20 20 20 63 20 3d 20 66 67  , c);.    c = fg
19480 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 7d 0a  etc(p->in);.  }.
19490 20 20 69 66 28 20 63 3d 3d 72 53 65 70 20 29 7b    if( c==rSep ){
194a0 0a 20 20 20 20 70 2d 3e 6e 4c 69 6e 65 2b 2b 3b  .    p->nLine++;
194b0 0a 20 20 7d 0a 20 20 70 2d 3e 63 54 65 72 6d 20  .  }.  p->cTerm 
194c0 3d 20 63 3b 0a 20 20 69 66 28 20 70 2d 3e 7a 20  = c;.  if( p->z 
194d0 29 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 20 3d 20 30  ) p->z[p->n] = 0
194e0 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 7a 3b  ;.  return p->z;
194f0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  .}../*.** Try to
19500 20 74 72 61 6e 73 66 65 72 20 64 61 74 61 20 66   transfer data f
19510 6f 72 20 74 61 62 6c 65 20 7a 54 61 62 6c 65 2e  or table zTable.
19520 20 20 49 66 20 61 6e 20 65 72 72 6f 72 20 69 73    If an error is
19530 20 73 65 65 6e 20 77 68 69 6c 65 0a 2a 2a 20 6d   seen while.** m
19540 6f 76 69 6e 67 20 66 6f 72 77 61 72 64 2c 20 74  oving forward, t
19550 72 79 20 74 6f 20 67 6f 20 62 61 63 6b 77 61 72  ry to go backwar
19560 64 73 2e 20 20 54 68 65 20 62 61 63 6b 77 61 72  ds.  The backwar
19570 64 73 20 6d 6f 76 65 6d 65 6e 74 20 77 6f 6e 27  ds movement won'
19580 74 0a 2a 2a 20 77 6f 72 6b 20 66 6f 72 20 57 49  t.** work for WI
19590 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
195a0 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  es..*/.static vo
195b0 69 64 20 74 72 79 54 6f 43 6c 6f 6e 65 44 61 74  id tryToCloneDat
195c0 61 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20  a(.  ShellState 
195d0 2a 70 2c 0a 20 20 73 71 6c 69 74 65 33 20 2a 6e  *p,.  sqlite3 *n
195e0 65 77 44 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68  ewDb,.  const ch
195f0 61 72 20 2a 7a 54 61 62 6c 65 0a 29 7b 0a 20 20  ar *zTable.){.  
19600 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 51  sqlite3_stmt *pQ
19610 75 65 72 79 20 3d 20 30 3b 0a 20 20 73 71 6c 69  uery = 0;.  sqli
19620 74 65 33 5f 73 74 6d 74 20 2a 70 49 6e 73 65 72  te3_stmt *pInser
19630 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a  t = 0;.  char *z
19640 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 63 68 61  Query = 0;.  cha
19650 72 20 2a 7a 49 6e 73 65 72 74 20 3d 20 30 3b 0a  r *zInsert = 0;.
19660 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
19670 69 2c 20 6a 2c 20 6e 3b 0a 20 20 69 6e 74 20 6e  i, j, n;.  int n
19680 54 61 62 6c 65 20 3d 20 28 69 6e 74 29 73 74 72  Table = (int)str
19690 6c 65 6e 28 7a 54 61 62 6c 65 29 3b 0a 20 20 69  len(zTable);.  i
196a0 6e 74 20 6b 20 3d 20 30 3b 0a 20 20 69 6e 74 20  nt k = 0;.  int 
196b0 63 6e 74 20 3d 20 30 3b 0a 20 20 63 6f 6e 73 74  cnt = 0;.  const
196c0 20 69 6e 74 20 73 70 69 6e 52 61 74 65 20 3d 20   int spinRate = 
196d0 31 30 30 30 30 3b 0a 0a 20 20 7a 51 75 65 72 79  10000;..  zQuery
196e0 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
196f0 74 66 28 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  tf("SELECT * FRO
19700 4d 20 5c 22 25 77 5c 22 22 2c 20 7a 54 61 62 6c  M \"%w\"", zTabl
19710 65 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  e);.  rc = sqlit
19720 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d  e3_prepare_v2(p-
19730 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20 2d 31 2c  >db, zQuery, -1,
19740 20 26 70 51 75 65 72 79 2c 20 30 29 3b 0a 20 20   &pQuery, 0);.  
19750 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 75 74  if( rc ){.    ut
19760 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
19770 2c 20 22 45 72 72 6f 72 20 25 64 3a 20 25 73 20  , "Error %d: %s 
19780 6f 6e 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20  on [%s]\n",.    
19790 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
197a0 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
197b0 28 70 2d 3e 64 62 29 2c 20 73 71 6c 69 74 65 33  (p->db), sqlite3
197c0 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 2c 0a  _errmsg(p->db),.
197d0 20 20 20 20 20 20 20 20 20 20 20 20 7a 51 75 65              zQue
197e0 72 79 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e  ry);.    goto en
197f0 64 5f 64 61 74 61 5f 78 66 65 72 3b 0a 20 20 7d  d_data_xfer;.  }
19800 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63  .  n = sqlite3_c
19810 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 51 75 65  olumn_count(pQue
19820 72 79 29 3b 0a 20 20 7a 49 6e 73 65 72 74 20 3d  ry);.  zInsert =
19830 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36   sqlite3_malloc6
19840 34 28 32 30 30 20 2b 20 6e 54 61 62 6c 65 20 2b  4(200 + nTable +
19850 20 6e 2a 33 29 3b 0a 20 20 69 66 28 20 7a 49 6e   n*3);.  if( zIn
19860 73 65 72 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72  sert==0 ){.    r
19870 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
19880 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  , "out of memory
19890 5c 6e 22 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65  \n");.    goto e
198a0 6e 64 5f 64 61 74 61 5f 78 66 65 72 3b 0a 20 20  nd_data_xfer;.  
198b0 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72  }.  sqlite3_snpr
198c0 69 6e 74 66 28 32 30 30 2b 6e 54 61 62 6c 65 2c  intf(200+nTable,
198d0 7a 49 6e 73 65 72 74 2c 0a 20 20 20 20 20 20 20  zInsert,.       
198e0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 4e 53              "INS
198f0 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 20 49 4e  ERT OR IGNORE IN
19900 54 4f 20 5c 22 25 73 5c 22 20 56 41 4c 55 45 53  TO \"%s\" VALUES
19910 28 3f 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20  (?", zTable);.  
19920 69 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28  i = (int)strlen(
19930 7a 49 6e 73 65 72 74 29 3b 0a 20 20 66 6f 72 28  zInsert);.  for(
19940 6a 3d 31 3b 20 6a 3c 6e 3b 20 6a 2b 2b 29 7b 0a  j=1; j<n; j++){.
19950 20 20 20 20 6d 65 6d 63 70 79 28 7a 49 6e 73 65      memcpy(zInse
19960 72 74 2b 69 2c 20 22 2c 3f 22 2c 20 32 29 3b 0a  rt+i, ",?", 2);.
19970 20 20 20 20 69 20 2b 3d 20 32 3b 0a 20 20 7d 0a      i += 2;.  }.
19980 20 20 6d 65 6d 63 70 79 28 7a 49 6e 73 65 72 74    memcpy(zInsert
19990 2b 69 2c 20 22 29 3b 22 2c 20 33 29 3b 0a 20 20  +i, ");", 3);.  
199a0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
199b0 70 61 72 65 5f 76 32 28 6e 65 77 44 62 2c 20 7a  pare_v2(newDb, z
199c0 49 6e 73 65 72 74 2c 20 2d 31 2c 20 26 70 49 6e  Insert, -1, &pIn
199d0 73 65 72 74 2c 20 30 29 3b 0a 20 20 69 66 28 20  sert, 0);.  if( 
199e0 72 63 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70  rc ){.    utf8_p
199f0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
19a00 72 72 6f 72 20 25 64 3a 20 25 73 20 6f 6e 20 5b  rror %d: %s on [
19a10 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  %s]\n",.        
19a20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65      sqlite3_exte
19a30 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 6e 65 77  nded_errcode(new
19a40 44 62 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  Db), sqlite3_err
19a50 6d 73 67 28 6e 65 77 44 62 29 2c 0a 20 20 20 20  msg(newDb),.    
19a60 20 20 20 20 20 20 20 20 7a 51 75 65 72 79 29 3b          zQuery);
19a70 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 64 61  .    goto end_da
19a80 74 61 5f 78 66 65 72 3b 0a 20 20 7d 0a 20 20 66  ta_xfer;.  }.  f
19a90 6f 72 28 6b 3d 30 3b 20 6b 3c 32 3b 20 6b 2b 2b  or(k=0; k<2; k++
19aa0 29 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 72  ){.    while( (r
19ab0 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70  c = sqlite3_step
19ac0 28 70 51 75 65 72 79 29 29 3d 3d 53 51 4c 49 54  (pQuery))==SQLIT
19ad0 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 66  E_ROW ){.      f
19ae0 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
19af0 29 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74 63  ){.        switc
19b00 68 28 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  h( sqlite3_colum
19b10 6e 5f 74 79 70 65 28 70 51 75 65 72 79 2c 20 69  n_type(pQuery, i
19b20 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63  ) ){.          c
19b30 61 73 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3a  ase SQLITE_NULL:
19b40 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73   {.            s
19b50 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c  qlite3_bind_null
19b60 28 70 49 6e 73 65 72 74 2c 20 69 2b 31 29 3b 0a  (pInsert, i+1);.
19b70 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
19b80 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  k;.          }. 
19b90 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
19ba0 4c 49 54 45 5f 49 4e 54 45 47 45 52 3a 20 7b 0a  LITE_INTEGER: {.
19bb0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
19bc0 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 70  te3_bind_int64(p
19bd0 49 6e 73 65 72 74 2c 20 69 2b 31 2c 20 73 71 6c  Insert, i+1, sql
19be0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
19bf0 34 28 70 51 75 65 72 79 2c 69 29 29 3b 0a 20 20  4(pQuery,i));.  
19c00 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
19c10 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
19c20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49         case SQLI
19c30 54 45 5f 46 4c 4f 41 54 3a 20 7b 0a 20 20 20 20  TE_FLOAT: {.    
19c40 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
19c50 62 69 6e 64 5f 64 6f 75 62 6c 65 28 70 49 6e 73  bind_double(pIns
19c60 65 72 74 2c 20 69 2b 31 2c 20 73 71 6c 69 74 65  ert, i+1, sqlite
19c70 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28  3_column_double(
19c80 70 51 75 65 72 79 2c 69 29 29 3b 0a 20 20 20 20  pQuery,i));.    
19c90 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
19ca0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
19cb0 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
19cc0 5f 54 45 58 54 3a 20 7b 0a 20 20 20 20 20 20 20  _TEXT: {.       
19cd0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e       sqlite3_bin
19ce0 64 5f 74 65 78 74 28 70 49 6e 73 65 72 74 2c 20  d_text(pInsert, 
19cf0 69 2b 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20  i+1,.           
19d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d10 20 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73    (const char*)s
19d20 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
19d30 78 74 28 70 51 75 65 72 79 2c 69 29 2c 0a 20 20  xt(pQuery,i),.  
19d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d50 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20 53             -1, S
19d60 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
19d70 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
19d80 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
19d90 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
19da0 49 54 45 5f 42 4c 4f 42 3a 20 7b 0a 20 20 20 20  ITE_BLOB: {.    
19db0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
19dc0 62 69 6e 64 5f 62 6c 6f 62 28 70 49 6e 73 65 72  bind_blob(pInser
19dd0 74 2c 20 69 2b 31 2c 20 73 71 6c 69 74 65 33 5f  t, i+1, sqlite3_
19de0 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 51 75 65  column_blob(pQue
19df0 72 79 2c 69 29 2c 0a 20 20 20 20 20 20 20 20 20  ry,i),.         
19e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d     sqlite3_colum
19e30 6e 5f 62 79 74 65 73 28 70 51 75 65 72 79 2c 69  n_bytes(pQuery,i
19e40 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
19e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
19e70 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
19e80 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
19e90 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
19ea0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20        }.      } 
19eb0 2f 2a 20 45 6e 64 20 66 6f 72 20 2a 2f 0a 20 20  /* End for */.  
19ec0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
19ed0 5f 73 74 65 70 28 70 49 6e 73 65 72 74 29 3b 0a  _step(pInsert);.
19ee0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
19ef0 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63 21 3d 53  LITE_OK && rc!=S
19f00 51 4c 49 54 45 5f 52 4f 57 20 26 26 20 72 63 21  QLITE_ROW && rc!
19f10 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a  =SQLITE_DONE ){.
19f20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
19f30 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
19f40 6f 72 20 25 64 3a 20 25 73 5c 6e 22 2c 20 73 71  or %d: %s\n", sq
19f50 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65  lite3_extended_e
19f60 72 72 63 6f 64 65 28 6e 65 77 44 62 29 2c 0a 20  rrcode(newDb),. 
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f80 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65         sqlite3_e
19f90 72 72 6d 73 67 28 6e 65 77 44 62 29 29 3b 0a 20  rrmsg(newDb));. 
19fa0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
19fb0 69 74 65 33 5f 72 65 73 65 74 28 70 49 6e 73 65  ite3_reset(pInse
19fc0 72 74 29 3b 0a 20 20 20 20 20 20 63 6e 74 2b 2b  rt);.      cnt++
19fd0 3b 0a 20 20 20 20 20 20 69 66 28 20 28 63 6e 74  ;.      if( (cnt
19fe0 25 73 70 69 6e 52 61 74 65 29 3d 3d 30 20 29 7b  %spinRate)==0 ){
19ff0 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28  .        printf(
1a000 22 25 63 5c 62 22 2c 20 22 7c 2f 2d 5c 5c 22 5b  "%c\b", "|/-\\"[
1a010 28 63 6e 74 2f 73 70 69 6e 52 61 74 65 29 25 34  (cnt/spinRate)%4
1a020 5d 29 3b 0a 20 20 20 20 20 20 20 20 66 66 6c 75  ]);.        fflu
1a030 73 68 28 73 74 64 6f 75 74 29 3b 0a 20 20 20 20  sh(stdout);.    
1a040 20 20 7d 0a 20 20 20 20 7d 20 2f 2a 20 45 6e 64    }.    } /* End
1a050 20 77 68 69 6c 65 20 2a 2f 0a 20 20 20 20 69 66   while */.    if
1a060 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc==SQLITE_DON
1a070 45 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 73  E ) break;.    s
1a080 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
1a090 70 51 75 65 72 79 29 3b 0a 20 20 20 20 73 71 6c  pQuery);.    sql
1a0a0 69 74 65 33 5f 66 72 65 65 28 7a 51 75 65 72 79  ite3_free(zQuery
1a0b0 29 3b 0a 20 20 20 20 7a 51 75 65 72 79 20 3d 20  );.    zQuery = 
1a0c0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
1a0d0 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5c  "SELECT * FROM \
1a0e0 22 25 77 5c 22 20 4f 52 44 45 52 20 42 59 20 72  "%w\" ORDER BY r
1a0f0 6f 77 69 64 20 44 45 53 43 3b 22 2c 0a 20 20 20  owid DESC;",.   
1a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a110 20 20 20 20 20 20 20 20 20 20 7a 54 61 62 6c 65            zTable
1a120 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
1a130 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70  te3_prepare_v2(p
1a140 2d 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20 2d 31  ->db, zQuery, -1
1a150 2c 20 26 70 51 75 65 72 79 2c 20 30 29 3b 0a 20  , &pQuery, 0);. 
1a160 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
1a170 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
1a180 74 64 65 72 72 2c 20 22 57 61 72 6e 69 6e 67 3a  tderr, "Warning:
1a190 20 63 61 6e 6e 6f 74 20 73 74 65 70 20 5c 22 25   cannot step \"%
1a1a0 73 5c 22 20 62 61 63 6b 77 61 72 64 73 22 2c 20  s\" backwards", 
1a1b0 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20 20 20 62  zTable);.      b
1a1c0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  reak;.    }.  } 
1a1d0 2f 2a 20 45 6e 64 20 66 6f 72 28 6b 3d 30 2e 2e  /* End for(k=0..
1a1e0 2e 29 20 2a 2f 0a 0a 65 6e 64 5f 64 61 74 61 5f  .) */..end_data_
1a1f0 78 66 65 72 3a 0a 20 20 73 71 6c 69 74 65 33 5f  xfer:.  sqlite3_
1a200 66 69 6e 61 6c 69 7a 65 28 70 51 75 65 72 79 29  finalize(pQuery)
1a210 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  ;.  sqlite3_fina
1a220 6c 69 7a 65 28 70 49 6e 73 65 72 74 29 3b 0a 20  lize(pInsert);. 
1a230 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 51   sqlite3_free(zQ
1a240 75 65 72 79 29 3b 0a 20 20 73 71 6c 69 74 65 33  uery);.  sqlite3
1a250 5f 66 72 65 65 28 7a 49 6e 73 65 72 74 29 3b 0a  _free(zInsert);.
1a260 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  }.../*.** Try to
1a270 20 74 72 61 6e 73 66 65 72 20 61 6c 6c 20 72 6f   transfer all ro
1a280 77 73 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  ws of the schema
1a290 20 74 68 61 74 20 6d 61 74 63 68 20 7a 57 68 65   that match zWhe
1a2a0 72 65 2e 20 20 46 6f 72 0a 2a 2a 20 65 61 63 68  re.  For.** each
1a2b0 20 72 6f 77 2c 20 69 6e 76 6f 6b 65 20 78 46 6f   row, invoke xFo
1a2c0 72 45 61 63 68 28 29 20 6f 6e 20 74 68 65 20 6f  rEach() on the o
1a2d0 62 6a 65 63 74 20 64 65 66 69 6e 65 64 20 62 79  bject defined by
1a2e0 20 74 68 61 74 20 72 6f 77 2e 0a 2a 2a 20 49 66   that row..** If
1a2f0 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63   an error is enc
1a300 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 6d  ountered while m
1a310 6f 76 69 6e 67 20 66 6f 72 77 61 72 64 20 74 68  oving forward th
1a320 72 6f 75 67 68 20 74 68 65 0a 2a 2a 20 73 71 6c  rough the.** sql
1a330 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
1a340 2c 20 74 72 79 20 61 67 61 69 6e 20 6d 6f 76 69  , try again movi
1a350 6e 67 20 62 61 63 6b 77 61 72 64 73 2e 0a 2a 2f  ng backwards..*/
1a360 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 72 79  .static void try
1a370 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28 0a 20  ToCloneSchema(. 
1a380 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 0a   ShellState *p,.
1a390 20 20 73 71 6c 69 74 65 33 20 2a 6e 65 77 44 62    sqlite3 *newDb
1a3a0 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ,.  const char *
1a3b0 7a 57 68 65 72 65 2c 0a 20 20 76 6f 69 64 20 28  zWhere,.  void (
1a3c0 2a 78 46 6f 72 45 61 63 68 29 28 53 68 65 6c 6c  *xForEach)(Shell
1a3d0 53 74 61 74 65 2a 2c 73 71 6c 69 74 65 33 2a 2c  State*,sqlite3*,
1a3e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 0a 29 7b 0a  const char*).){.
1a3f0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
1a400 70 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 63 68  pQuery = 0;.  ch
1a410 61 72 20 2a 7a 51 75 65 72 79 20 3d 20 30 3b 0a  ar *zQuery = 0;.
1a420 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 6f 6e 73    int rc;.  cons
1a430 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
1a440 2a 7a 4e 61 6d 65 3b 0a 20 20 63 6f 6e 73 74 20  *zName;.  const 
1a450 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 7a  unsigned char *z
1a460 53 71 6c 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72  Sql;.  char *zEr
1a470 72 4d 73 67 20 3d 20 30 3b 0a 0a 20 20 7a 51 75  rMsg = 0;..  zQu
1a480 65 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ery = sqlite3_mp
1a490 72 69 6e 74 66 28 22 53 45 4c 45 43 54 20 6e 61  rintf("SELECT na
1a4a0 6d 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c  me, sql FROM sql
1a4b0 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20  ite_master".    
1a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4d0 20 20 20 20 20 20 20 22 20 57 48 45 52 45 20 25         " WHERE %
1a4e0 73 22 2c 20 7a 57 68 65 72 65 29 3b 0a 20 20 72  s", zWhere);.  r
1a4f0 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
1a500 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 51  are_v2(p->db, zQ
1a510 75 65 72 79 2c 20 2d 31 2c 20 26 70 51 75 65 72  uery, -1, &pQuer
1a520 79 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63 20  y, 0);.  if( rc 
1a530 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  ){.    utf8_prin
1a540 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
1a550 72 3a 20 28 25 64 29 20 25 73 20 6f 6e 20 5b 25  r: (%d) %s on [%
1a560 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  s]\n",.         
1a570 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
1a580 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
1a590 6f 64 65 28 70 2d 3e 64 62 29 2c 20 73 71 6c 69  ode(p->db), sqli
1a5a0 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62  te3_errmsg(p->db
1a5b0 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
1a5c0 20 20 20 20 20 20 20 7a 51 75 65 72 79 29 3b 0a         zQuery);.
1a5d0 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 73 63 68      goto end_sch
1a5e0 65 6d 61 5f 78 66 65 72 3b 0a 20 20 7d 0a 20 20  ema_xfer;.  }.  
1a5f0 77 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c  while( (rc = sql
1a600 69 74 65 33 5f 73 74 65 70 28 70 51 75 65 72 79  ite3_step(pQuery
1a610 29 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  ))==SQLITE_ROW )
1a620 7b 0a 20 20 20 20 7a 4e 61 6d 65 20 3d 20 73 71  {.    zName = sq
1a630 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
1a640 74 28 70 51 75 65 72 79 2c 20 30 29 3b 0a 20 20  t(pQuery, 0);.  
1a650 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
1a660 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 51 75  _column_text(pQu
1a670 65 72 79 2c 20 31 29 3b 0a 20 20 20 20 70 72 69  ery, 1);.    pri
1a680 6e 74 66 28 22 25 73 2e 2e 2e 20 22 2c 20 7a 4e  ntf("%s... ", zN
1a690 61 6d 65 29 3b 20 66 66 6c 75 73 68 28 73 74 64  ame); fflush(std
1a6a0 6f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  out);.    sqlite
1a6b0 33 5f 65 78 65 63 28 6e 65 77 44 62 2c 20 28 63  3_exec(newDb, (c
1a6c0 6f 6e 73 74 20 63 68 61 72 2a 29 7a 53 71 6c 2c  onst char*)zSql,
1a6d0 20 30 2c 20 30 2c 20 26 7a 45 72 72 4d 73 67 29   0, 0, &zErrMsg)
1a6e0 3b 0a 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73  ;.    if( zErrMs
1a6f0 67 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  g ){.      utf8_
1a700 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1a710 45 72 72 6f 72 3a 20 25 73 5c 6e 53 51 4c 3a 20  Error: %s\nSQL: 
1a720 5b 25 73 5d 5c 6e 22 2c 20 7a 45 72 72 4d 73 67  [%s]\n", zErrMsg
1a730 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 73  , zSql);.      s
1a740 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72  qlite3_free(zErr
1a750 4d 73 67 29 3b 0a 20 20 20 20 20 20 7a 45 72 72  Msg);.      zErr
1a760 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  Msg = 0;.    }. 
1a770 20 20 20 69 66 28 20 78 46 6f 72 45 61 63 68 20     if( xForEach 
1a780 29 7b 0a 20 20 20 20 20 20 78 46 6f 72 45 61 63  ){.      xForEac
1a790 68 28 70 2c 20 6e 65 77 44 62 2c 20 28 63 6f 6e  h(p, newDb, (con
1a7a0 73 74 20 63 68 61 72 2a 29 7a 4e 61 6d 65 29 3b  st char*)zName);
1a7b0 0a 20 20 20 20 7d 0a 20 20 20 20 70 72 69 6e 74  .    }.    print
1a7c0 66 28 22 64 6f 6e 65 5c 6e 22 29 3b 0a 20 20 7d  f("done\n");.  }
1a7d0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
1a7e0 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 73 71  E_DONE ){.    sq
1a7f0 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
1a800 51 75 65 72 79 29 3b 0a 20 20 20 20 73 71 6c 69  Query);.    sqli
1a810 74 65 33 5f 66 72 65 65 28 7a 51 75 65 72 79 29  te3_free(zQuery)
1a820 3b 0a 20 20 20 20 7a 51 75 65 72 79 20 3d 20 73  ;.    zQuery = s
1a830 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
1a840 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 73 71 6c  SELECT name, sql
1a850 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
1a860 74 65 72 22 0a 20 20 20 20 20 20 20 20 20 20 20  ter".           
1a870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a880 20 20 22 20 57 48 45 52 45 20 25 73 20 4f 52 44    " WHERE %s ORD
1a890 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43  ER BY rowid DESC
1a8a0 22 2c 20 7a 57 68 65 72 65 29 3b 0a 20 20 20 20  ", zWhere);.    
1a8b0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
1a8c0 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a  pare_v2(p->db, z
1a8d0 51 75 65 72 79 2c 20 2d 31 2c 20 26 70 51 75 65  Query, -1, &pQue
1a8e0 72 79 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20  ry, 0);.    if( 
1a8f0 72 63 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  rc ){.      utf8
1a900 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1a910 22 45 72 72 6f 72 3a 20 28 25 64 29 20 25 73 20  "Error: (%d) %s 
1a920 6f 6e 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20  on [%s]\n",.    
1a930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a940 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64    sqlite3_extend
1a950 65 64 5f 65 72 72 63 6f 64 65 28 70 2d 3e 64 62  ed_errcode(p->db
1a960 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ), sqlite3_errms
1a970 67 28 70 2d 3e 64 62 29 2c 0a 20 20 20 20 20 20  g(p->db),.      
1a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a990 7a 51 75 65 72 79 29 3b 0a 20 20 20 20 20 20 67  zQuery);.      g
1a9a0 6f 74 6f 20 65 6e 64 5f 73 63 68 65 6d 61 5f 78  oto end_schema_x
1a9b0 66 65 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77  fer;.    }.    w
1a9c0 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c 69  hile( (rc = sqli
1a9d0 74 65 33 5f 73 74 65 70 28 70 51 75 65 72 79 29  te3_step(pQuery)
1a9e0 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b  )==SQLITE_ROW ){
1a9f0 0a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 73  .      zName = s
1aa00 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
1aa10 78 74 28 70 51 75 65 72 79 2c 20 30 29 3b 0a 20  xt(pQuery, 0);. 
1aa20 20 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69       zSql = sqli
1aa30 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
1aa40 70 51 75 65 72 79 2c 20 31 29 3b 0a 20 20 20 20  pQuery, 1);.    
1aa50 20 20 70 72 69 6e 74 66 28 22 25 73 2e 2e 2e 20    printf("%s... 
1aa60 22 2c 20 7a 4e 61 6d 65 29 3b 20 66 66 6c 75 73  ", zName); fflus
1aa70 68 28 73 74 64 6f 75 74 29 3b 0a 20 20 20 20 20  h(stdout);.     
1aa80 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 6e 65   sqlite3_exec(ne
1aa90 77 44 62 2c 20 28 63 6f 6e 73 74 20 63 68 61 72  wDb, (const char
1aaa0 2a 29 7a 53 71 6c 2c 20 30 2c 20 30 2c 20 26 7a  *)zSql, 0, 0, &z
1aab0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 69  ErrMsg);.      i
1aac0 66 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20  f( zErrMsg ){.  
1aad0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
1aae0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
1aaf0 3a 20 25 73 5c 6e 53 51 4c 3a 20 5b 25 73 5d 5c  : %s\nSQL: [%s]\
1ab00 6e 22 2c 20 7a 45 72 72 4d 73 67 2c 20 7a 53 71  n", zErrMsg, zSq
1ab10 6c 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  l);.        sqli
1ab20 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67  te3_free(zErrMsg
1ab30 29 3b 0a 20 20 20 20 20 20 20 20 7a 45 72 72 4d  );.        zErrM
1ab40 73 67 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  sg = 0;.      }.
1ab50 20 20 20 20 20 20 69 66 28 20 78 46 6f 72 45 61        if( xForEa
1ab60 63 68 20 29 7b 0a 20 20 20 20 20 20 20 20 78 46  ch ){.        xF
1ab70 6f 72 45 61 63 68 28 70 2c 20 6e 65 77 44 62 2c  orEach(p, newDb,
1ab80 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a 4e   (const char*)zN
1ab90 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ame);.      }.  
1aba0 20 20 20 20 70 72 69 6e 74 66 28 22 64 6f 6e 65      printf("done
1abb0 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  \n");.    }.  }.
1abc0 65 6e 64 5f 73 63 68 65 6d 61 5f 78 66 65 72 3a  end_schema_xfer:
1abd0 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
1abe0 69 7a 65 28 70 51 75 65 72 79 29 3b 0a 20 20 73  ize(pQuery);.  s
1abf0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 51 75 65  qlite3_free(zQue
1ac00 72 79 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70  ry);.}../*.** Op
1ac10 65 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61 73  en a new databas
1ac20 65 20 66 69 6c 65 20 6e 61 6d 65 64 20 22 7a 4e  e file named "zN
1ac30 65 77 44 62 22 2e 20 20 54 72 79 20 74 6f 20 72  ewDb".  Try to r
1ac40 65 63 6f 76 65 72 20 61 73 20 6d 75 63 68 20 69  ecover as much i
1ac50 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 61 73  nformation.** as
1ac60 20 70 6f 73 73 69 62 6c 65 20 6f 75 74 20 6f 66   possible out of
1ac70 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1ac80 73 65 20 28 77 68 69 63 68 20 6d 69 67 68 74 20  se (which might 
1ac90 62 65 20 63 6f 72 72 75 70 74 29 20 61 6e 64 20  be corrupt) and 
1aca0 77 72 69 74 65 20 69 74 0a 2a 2a 20 69 6e 74 6f  write it.** into
1acb0 20 7a 4e 65 77 44 62 2e 0a 2a 2f 0a 73 74 61 74   zNewDb..*/.stat
1acc0 69 63 20 76 6f 69 64 20 74 72 79 54 6f 43 6c 6f  ic void tryToClo
1acd0 6e 65 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  ne(ShellState *p
1ace0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  , const char *zN
1acf0 65 77 44 62 29 7b 0a 20 20 69 6e 74 20 72 63 3b  ewDb){.  int rc;
1ad00 0a 20 20 73 71 6c 69 74 65 33 20 2a 6e 65 77 44  .  sqlite3 *newD
1ad10 62 20 3d 20 30 3b 0a 20 20 69 66 28 20 61 63 63  b = 0;.  if( acc
1ad20 65 73 73 28 7a 4e 65 77 44 62 2c 30 29 3d 3d 30  ess(zNewDb,0)==0
1ad30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69   ){.    utf8_pri
1ad40 6e 74 66 28 73 74 64 65 72 72 2c 20 22 46 69 6c  ntf(stderr, "Fil
1ad50 65 20 5c 22 25 73 5c 22 20 61 6c 72 65 61 64 79  e \"%s\" already
1ad60 20 65 78 69 73 74 73 2e 5c 6e 22 2c 20 7a 4e 65   exists.\n", zNe
1ad70 77 44 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  wDb);.    return
1ad80 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
1ad90 69 74 65 33 5f 6f 70 65 6e 28 7a 4e 65 77 44 62  ite3_open(zNewDb
1ada0 2c 20 26 6e 65 77 44 62 29 3b 0a 20 20 69 66 28  , &newDb);.  if(
1adb0 20 72 63 20 29 7b 0a 20 20 20 20 75 74 66 38 5f   rc ){.    utf8_
1adc0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1add0 43 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 6f 75  Cannot create ou
1ade0 74 70 75 74 20 64 61 74 61 62 61 73 65 3a 20 25  tput database: %
1adf0 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  s\n",.          
1ae00 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67    sqlite3_errmsg
1ae10 28 6e 65 77 44 62 29 29 3b 0a 20 20 7d 65 6c 73  (newDb));.  }els
1ae20 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65  e{.    sqlite3_e
1ae30 78 65 63 28 70 2d 3e 64 62 2c 20 22 50 52 41 47  xec(p->db, "PRAG
1ae40 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
1ae50 6d 61 3d 4f 4e 3b 22 2c 20 30 2c 20 30 2c 20 30  ma=ON;", 0, 0, 0
1ae60 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65  );.    sqlite3_e
1ae70 78 65 63 28 6e 65 77 44 62 2c 20 22 42 45 47 49  xec(newDb, "BEGI
1ae80 4e 20 45 58 43 4c 55 53 49 56 45 3b 22 2c 20 30  N EXCLUSIVE;", 0
1ae90 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 74 72 79  , 0, 0);.    try
1aea0 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28 70 2c  ToCloneSchema(p,
1aeb0 20 6e 65 77 44 62 2c 20 22 74 79 70 65 3d 27 74   newDb, "type='t
1aec0 61 62 6c 65 27 22 2c 20 74 72 79 54 6f 43 6c 6f  able'", tryToClo
1aed0 6e 65 44 61 74 61 29 3b 0a 20 20 20 20 74 72 79  neData);.    try
1aee0 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28 70 2c  ToCloneSchema(p,
1aef0 20 6e 65 77 44 62 2c 20 22 74 79 70 65 21 3d 27   newDb, "type!='
1af00 74 61 62 6c 65 27 22 2c 20 30 29 3b 0a 20 20 20  table'", 0);.   
1af10 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 6e 65   sqlite3_exec(ne
1af20 77 44 62 2c 20 22 43 4f 4d 4d 49 54 3b 22 2c 20  wDb, "COMMIT;", 
1af30 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 73 71  0, 0, 0);.    sq
1af40 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
1af50 2c 20 22 50 52 41 47 4d 41 20 77 72 69 74 61 62  , "PRAGMA writab
1af60 6c 65 5f 73 63 68 65 6d 61 3d 4f 46 46 3b 22 2c  le_schema=OFF;",
1af70 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20   0, 0, 0);.  }. 
1af80 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 6e   sqlite3_close(n
1af90 65 77 44 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  ewDb);.}../*.** 
1afa0 43 68 61 6e 67 65 20 74 68 65 20 6f 75 74 70 75  Change the outpu
1afb0 74 20 66 69 6c 65 20 62 61 63 6b 20 74 6f 20 73  t file back to s
1afc0 74 64 6f 75 74 0a 2a 2f 0a 73 74 61 74 69 63 20  tdout.*/.static 
1afd0 76 6f 69 64 20 6f 75 74 70 75 74 5f 72 65 73 65  void output_rese
1afe0 74 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29  t(ShellState *p)
1aff0 7b 0a 20 20 69 66 28 20 70 2d 3e 6f 75 74 66 69  {.  if( p->outfi
1b000 6c 65 5b 30 5d 3d 3d 27 7c 27 20 29 7b 0a 23 69  le[0]=='|' ){.#i
1b010 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1b020 54 5f 50 4f 50 45 4e 0a 20 20 20 20 70 63 6c 6f  T_POPEN.    pclo
1b030 73 65 28 70 2d 3e 6f 75 74 29 3b 0a 23 65 6e 64  se(p->out);.#end
1b040 69 66 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  if.  }else{.    
1b050 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73  output_file_clos
1b060 65 28 70 2d 3e 6f 75 74 29 3b 0a 20 20 7d 0a 20  e(p->out);.  }. 
1b070 20 70 2d 3e 6f 75 74 66 69 6c 65 5b 30 5d 20 3d   p->outfile[0] =
1b080 20 30 3b 0a 20 20 70 2d 3e 6f 75 74 20 3d 20 73   0;.  p->out = s
1b090 74 64 6f 75 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  tdout;.}../*.** 
1b0a0 52 75 6e 20 61 6e 20 53 51 4c 20 63 6f 6d 6d 61  Run an SQL comma
1b0b0 6e 64 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68  nd and return th
1b0c0 65 20 73 69 6e 67 6c 65 20 69 6e 74 65 67 65 72  e single integer
1b0d0 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74   result..*/.stat
1b0e0 69 63 20 69 6e 74 20 64 62 5f 69 6e 74 28 53 68  ic int db_int(Sh
1b0f0 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f 6e  ellState *p, con
1b100 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 29 7b 0a  st char *zSql){.
1b110 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
1b120 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 65 73  pStmt;.  int res
1b130 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f   = 0;.  sqlite3_
1b140 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62  prepare_v2(p->db
1b150 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74  , zSql, -1, &pSt
1b160 6d 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 53  mt, 0);.  if( pS
1b170 74 6d 74 20 26 26 20 73 71 6c 69 74 65 33 5f 73  tmt && sqlite3_s
1b180 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49  tep(pStmt)==SQLI
1b190 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 72 65  TE_ROW ){.    re
1b1a0 73 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  s = sqlite3_colu
1b1b0 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c 30 29 3b  mn_int(pStmt,0);
1b1c0 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66  .  }.  sqlite3_f
1b1d0 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a  inalize(pStmt);.
1b1e0 20 20 72 65 74 75 72 6e 20 72 65 73 3b 0a 7d 0a    return res;.}.
1b1f0 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61  ./*.** Convert a
1b200 20 32 2d 62 79 74 65 20 6f 72 20 34 2d 62 79 74   2-byte or 4-byt
1b210 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
1b220 65 67 65 72 20 69 6e 74 6f 20 61 20 6e 61 74 69  eger into a nati
1b230 76 65 20 69 6e 74 65 67 65 72 0a 2a 2f 0a 73 74  ve integer.*/.st
1b240 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 69 6e  atic unsigned in
1b250 74 20 67 65 74 32 62 79 74 65 49 6e 74 28 75 6e  t get2byteInt(un
1b260 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61 29 7b  signed char *a){
1b270 0a 20 20 72 65 74 75 72 6e 20 28 61 5b 30 5d 3c  .  return (a[0]<
1b280 3c 38 29 20 2b 20 61 5b 31 5d 3b 0a 7d 0a 73 74  <8) + a[1];.}.st
1b290 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 69 6e  atic unsigned in
1b2a0 74 20 67 65 74 34 62 79 74 65 49 6e 74 28 75 6e  t get4byteInt(un
1b2b0 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61 29 7b  signed char *a){
1b2c0 0a 20 20 72 65 74 75 72 6e 20 28 61 5b 30 5d 3c  .  return (a[0]<
1b2d0 3c 32 34 29 20 2b 20 28 61 5b 31 5d 3c 3c 31 36  <24) + (a[1]<<16
1b2e0 29 20 2b 20 28 61 5b 32 5d 3c 3c 38 29 20 2b 20  ) + (a[2]<<8) + 
1b2f0 61 5b 33 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  a[3];.}../*.** I
1b300 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
1b310 20 74 68 65 20 22 2e 69 6e 66 6f 22 20 63 6f 6d   the ".info" com
1b320 6d 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75  mand..**.** Retu
1b330 72 6e 20 31 20 6f 6e 20 65 72 72 6f 72 2c 20 32  rn 1 on error, 2
1b340 20 74 6f 20 65 78 69 74 2c 20 61 6e 64 20 30 20   to exit, and 0 
1b350 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2f 0a 73 74  otherwise..*/.st
1b360 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 5f 64  atic int shell_d
1b370 62 69 6e 66 6f 5f 63 6f 6d 6d 61 6e 64 28 53 68  binfo_command(Sh
1b380 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 69 6e 74  ellState *p, int
1b390 20 6e 41 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a   nArg, char **az
1b3a0 41 72 67 29 7b 0a 20 20 73 74 61 74 69 63 20 63  Arg){.  static c
1b3b0 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 20 63 6f  onst struct { co
1b3c0 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  nst char *zName;
1b3d0 20 69 6e 74 20 6f 66 73 74 3b 20 7d 20 61 46 69   int ofst; } aFi
1b3e0 65 6c 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b  eld[] = {.     {
1b3f0 20 22 66 69 6c 65 20 63 68 61 6e 67 65 20 63 6f   "file change co
1b400 75 6e 74 65 72 3a 22 2c 20 20 32 34 20 20 7d 2c  unter:",  24  },
1b410 0a 20 20 20 20 20 7b 20 22 64 61 74 61 62 61 73  .     { "databas
1b420 65 20 70 61 67 65 20 63 6f 75 6e 74 3a 22 2c 20  e page count:", 
1b430 20 32 38 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22   28  },.     { "
1b440 66 72 65 65 6c 69 73 74 20 70 61 67 65 20 63 6f  freelist page co
1b450 75 6e 74 3a 22 2c 20 20 33 36 20 20 7d 2c 0a 20  unt:",  36  },. 
1b460 20 20 20 20 7b 20 22 73 63 68 65 6d 61 20 63 6f      { "schema co
1b470 6f 6b 69 65 3a 22 2c 20 20 20 20 20 20 20 20 34  okie:",        4
1b480 30 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 63  0  },.     { "sc
1b490 68 65 6d 61 20 66 6f 72 6d 61 74 3a 22 2c 20 20  hema format:",  
1b4a0 20 20 20 20 20 20 34 34 20 20 7d 2c 0a 20 20 20        44  },.   
1b4b0 20 20 7b 20 22 64 65 66 61 75 6c 74 20 63 61 63    { "default cac
1b4c0 68 65 20 73 69 7a 65 3a 22 2c 20 20 20 34 38 20  he size:",   48 
1b4d0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 61 75 74 6f   },.     { "auto
1b4e0 76 61 63 75 75 6d 20 74 6f 70 20 72 6f 6f 74 3a  vacuum top root:
1b4f0 22 2c 20 20 35 32 20 20 7d 2c 0a 20 20 20 20 20  ",  52  },.     
1b500 7b 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76  { "incremental v
1b510 61 63 75 75 6d 3a 22 2c 20 20 20 36 34 20 20 7d  acuum:",   64  }
1b520 2c 0a 20 20 20 20 20 7b 20 22 74 65 78 74 20 65  ,.     { "text e
1b530 6e 63 6f 64 69 6e 67 3a 22 2c 20 20 20 20 20 20  ncoding:",      
1b540 20 20 35 36 20 20 7d 2c 0a 20 20 20 20 20 7b 20    56  },.     { 
1b550 22 75 73 65 72 20 76 65 72 73 69 6f 6e 3a 22 2c  "user version:",
1b560 20 20 20 20 20 20 20 20 20 36 30 20 20 7d 2c 0a           60  },.
1b570 20 20 20 20 20 7b 20 22 61 70 70 6c 69 63 61 74       { "applicat
1b580 69 6f 6e 20 69 64 3a 22 2c 20 20 20 20 20 20 20  ion id:",       
1b590 36 38 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73  68  },.     { "s
1b5a0 6f 66 74 77 61 72 65 20 76 65 72 73 69 6f 6e 3a  oftware version:
1b5b0 22 2c 20 20 20 20 20 39 36 20 20 7d 2c 0a 20 20  ",     96  },.  
1b5c0 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  };.  static cons
1b5d0 74 20 73 74 72 75 63 74 20 7b 20 63 6f 6e 73 74  t struct { const
1b5e0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 63 6f   char *zName; co
1b5f0 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20  nst char *zSql; 
1b600 7d 20 61 51 75 65 72 79 5b 5d 20 3d 20 7b 0a 20  } aQuery[] = {. 
1b610 20 20 20 20 7b 20 22 6e 75 6d 62 65 72 20 6f 66      { "number of
1b620 20 74 61 62 6c 65 73 3a 22 2c 0a 20 20 20 20 20   tables:",.     
1b630 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28    "SELECT count(
1b640 2a 29 20 46 52 4f 4d 20 25 73 20 57 48 45 52 45  *) FROM %s WHERE
1b650 20 74 79 70 65 3d 27 74 61 62 6c 65 27 22 20 7d   type='table'" }
1b660 2c 0a 20 20 20 20 20 7b 20 22 6e 75 6d 62 65 72  ,.     { "number
1b670 20 6f 66 20 69 6e 64 65 78 65 73 3a 22 2c 0a 20   of indexes:",. 
1b680 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f        "SELECT co
1b690 75 6e 74 28 2a 29 20 46 52 4f 4d 20 25 73 20 57  unt(*) FROM %s W
1b6a0 48 45 52 45 20 74 79 70 65 3d 27 69 6e 64 65 78  HERE type='index
1b6b0 27 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 6e 75  '" },.     { "nu
1b6c0 6d 62 65 72 20 6f 66 20 74 72 69 67 67 65 72 73  mber of triggers
1b6d0 3a 22 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45  :",.       "SELE
1b6e0 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
1b6f0 20 25 73 20 57 48 45 52 45 20 74 79 70 65 3d 27   %s WHERE type='
1b700 74 72 69 67 67 65 72 27 22 20 7d 2c 0a 20 20 20  trigger'" },.   
1b710 20 20 7b 20 22 6e 75 6d 62 65 72 20 6f 66 20 76    { "number of v
1b720 69 65 77 73 3a 22 2c 0a 20 20 20 20 20 20 20 22  iews:",.       "
1b730 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
1b740 46 52 4f 4d 20 25 73 20 57 48 45 52 45 20 74 79  FROM %s WHERE ty
1b750 70 65 3d 27 76 69 65 77 27 22 20 7d 2c 0a 20 20  pe='view'" },.  
1b760 20 20 20 7b 20 22 73 63 68 65 6d 61 20 73 69 7a     { "schema siz
1b770 65 3a 22 2c 0a 20 20 20 20 20 20 20 22 53 45 4c  e:",.       "SEL
1b780 45 43 54 20 74 6f 74 61 6c 28 6c 65 6e 67 74 68  ECT total(length
1b790 28 73 71 6c 29 29 20 46 52 4f 4d 20 25 73 22 20  (sql)) FROM %s" 
1b7a0 7d 2c 0a 20 20 7d 3b 0a 20 20 69 6e 74 20 69 3b  },.  };.  int i;
1b7b0 0a 20 20 63 68 61 72 20 2a 7a 53 63 68 65 6d 61  .  char *zSchema
1b7c0 54 61 62 3b 0a 20 20 63 68 61 72 20 2a 7a 44 62  Tab;.  char *zDb
1b7d0 20 3d 20 6e 41 72 67 3e 3d 32 20 3f 20 61 7a 41   = nArg>=2 ? azA
1b7e0 72 67 5b 31 5d 20 3a 20 22 6d 61 69 6e 22 3b 0a  rg[1] : "main";.
1b7f0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
1b800 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 75 6e 73  pStmt = 0;.  uns
1b810 69 67 6e 65 64 20 63 68 61 72 20 61 48 64 72 5b  igned char aHdr[
1b820 31 30 30 5d 3b 0a 20 20 6f 70 65 6e 5f 64 62 28  100];.  open_db(
1b830 70 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 2d 3e  p, 0);.  if( p->
1b840 64 62 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31  db==0 ) return 1
1b850 3b 0a 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ;.  sqlite3_prep
1b860 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 22 53 45  are_v2(p->db,"SE
1b870 4c 45 43 54 20 64 61 74 61 20 46 52 4f 4d 20 73  LECT data FROM s
1b880 71 6c 69 74 65 5f 64 62 70 61 67 65 28 3f 31 29  qlite_dbpage(?1)
1b890 20 57 48 45 52 45 20 70 67 6e 6f 3d 31 22 2c 0a   WHERE pgno=1",.
1b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8b0 20 20 20 20 20 2d 31 2c 20 26 70 53 74 6d 74 2c       -1, &pStmt,
1b8c0 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 62   0);.  sqlite3_b
1b8d0 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20  ind_text(pStmt, 
1b8e0 31 2c 20 7a 44 62 2c 20 2d 31 2c 20 53 51 4c 49  1, zDb, -1, SQLI
1b8f0 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 69 66  TE_STATIC);.  if
1b900 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  ( sqlite3_step(p
1b910 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  Stmt)==SQLITE_RO
1b920 57 0a 20 20 20 26 26 20 73 71 6c 69 74 65 33 5f  W.   && sqlite3_
1b930 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 70 53 74  column_bytes(pSt
1b940 6d 74 2c 30 29 3e 31 30 30 0a 20 20 29 7b 0a 20  mt,0)>100.  ){. 
1b950 20 20 20 6d 65 6d 63 70 79 28 61 48 64 72 2c 20     memcpy(aHdr, 
1b960 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
1b970 6c 6f 62 28 70 53 74 6d 74 2c 30 29 2c 20 31 30  lob(pStmt,0), 10
1b980 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
1b990 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
1b9a0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 61  .  }else{.    ra
1b9b0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
1b9c0 20 22 75 6e 61 62 6c 65 20 74 6f 20 72 65 61 64   "unable to read
1b9d0 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72   database header
1b9e0 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  \n");.    sqlite
1b9f0 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
1ba00 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b  );.    return 1;
1ba10 0a 20 20 7d 0a 20 20 69 20 3d 20 67 65 74 32 62  .  }.  i = get2b
1ba20 79 74 65 49 6e 74 28 61 48 64 72 2b 31 36 29 3b  yteInt(aHdr+16);
1ba30 0a 20 20 69 66 28 20 69 3d 3d 31 20 29 20 69 20  .  if( i==1 ) i 
1ba40 3d 20 36 35 35 33 36 3b 0a 20 20 75 74 66 38 5f  = 65536;.  utf8_
1ba50 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
1ba60 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22 64 61  %-20s %d\n", "da
1ba70 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65  tabase page size
1ba80 3a 22 2c 20 69 29 3b 0a 20 20 75 74 66 38 5f 70  :", i);.  utf8_p
1ba90 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
1baa0 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22 77 72 69  -20s %d\n", "wri
1bab0 74 65 20 66 6f 72 6d 61 74 3a 22 2c 20 61 48 64  te format:", aHd
1bac0 72 5b 31 38 5d 29 3b 0a 20 20 75 74 66 38 5f 70  r[18]);.  utf8_p
1bad0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
1bae0 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22 72 65 61  -20s %d\n", "rea
1baf0 64 20 66 6f 72 6d 61 74 3a 22 2c 20 61 48 64 72  d format:", aHdr
1bb00 5b 31 39 5d 29 3b 0a 20 20 75 74 66 38 5f 70 72  [19]);.  utf8_pr
1bb10 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d  intf(p->out, "%-
1bb20 32 30 73 20 25 64 5c 6e 22 2c 20 22 72 65 73 65  20s %d\n", "rese
1bb30 72 76 65 64 20 62 79 74 65 73 3a 22 2c 20 61 48  rved bytes:", aH
1bb40 64 72 5b 32 30 5d 29 3b 0a 20 20 66 6f 72 28 69  dr[20]);.  for(i
1bb50 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28  =0; i<ArraySize(
1bb60 61 46 69 65 6c 64 29 3b 20 69 2b 2b 29 7b 0a 20  aField); i++){. 
1bb70 20 20 20 69 6e 74 20 6f 66 73 74 20 3d 20 61 46     int ofst = aF
1bb80 69 65 6c 64 5b 69 5d 2e 6f 66 73 74 3b 0a 20 20  ield[i].ofst;.  
1bb90 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 76    unsigned int v
1bba0 61 6c 20 3d 20 67 65 74 34 62 79 74 65 49 6e 74  al = get4byteInt
1bbb0 28 61 48 64 72 20 2b 20 6f 66 73 74 29 3b 0a 20  (aHdr + ofst);. 
1bbc0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
1bbd0 2d 3e 6f 75 74 2c 20 22 25 2d 32 30 73 20 25 75  ->out, "%-20s %u
1bbe0 22 2c 20 61 46 69 65 6c 64 5b 69 5d 2e 7a 4e 61  ", aField[i].zNa
1bbf0 6d 65 2c 20 76 61 6c 29 3b 0a 20 20 20 20 73 77  me, val);.    sw
1bc00 69 74 63 68 28 20 6f 66 73 74 20 29 7b 0a 20 20  itch( ofst ){.  
1bc10 20 20 20 20 63 61 73 65 20 35 36 3a 20 7b 0a 20      case 56: {. 
1bc20 20 20 20 20 20 20 20 69 66 28 20 76 61 6c 3d 3d         if( val==
1bc30 31 20 29 20 72 61 77 5f 70 72 69 6e 74 66 28 70  1 ) raw_printf(p
1bc40 2d 3e 6f 75 74 2c 20 22 20 28 75 74 66 38 29 22  ->out, " (utf8)"
1bc50 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 76  );.        if( v
1bc60 61 6c 3d 3d 32 20 29 20 72 61 77 5f 70 72 69 6e  al==2 ) raw_prin
1bc70 74 66 28 70 2d 3e 6f 75 74 2c 20 22 20 28 75 74  tf(p->out, " (ut
1bc80 66 31 36 6c 65 29 22 29 3b 0a 20 20 20 20 20 20  f16le)");.      
1bc90 20 20 69 66 28 20 76 61 6c 3d 3d 33 20 29 20 72    if( val==3 ) r
1bca0 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
1bcb0 2c 20 22 20 28 75 74 66 31 36 62 65 29 22 29 3b  , " (utf16be)");
1bcc0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1bcd0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
1bce0 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 7d  >out, "\n");.  }
1bcf0 0a 20 20 69 66 28 20 7a 44 62 3d 3d 30 20 29 7b  .  if( zDb==0 ){
1bd00 0a 20 20 20 20 7a 53 63 68 65 6d 61 54 61 62 20  .    zSchemaTab 
1bd10 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
1bd20 66 28 22 6d 61 69 6e 2e 73 71 6c 69 74 65 5f 6d  f("main.sqlite_m
1bd30 61 73 74 65 72 22 29 3b 0a 20 20 7d 65 6c 73 65  aster");.  }else
1bd40 20 69 66 28 20 73 74 72 63 6d 70 28 7a 44 62 2c   if( strcmp(zDb,
1bd50 22 74 65 6d 70 22 29 3d 3d 30 20 29 7b 0a 20 20  "temp")==0 ){.  
1bd60 20 20 7a 53 63 68 65 6d 61 54 61 62 20 3d 20 73    zSchemaTab = s
1bd70 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
1bd80 25 73 22 2c 20 22 73 71 6c 69 74 65 5f 74 65 6d  %s", "sqlite_tem
1bd90 70 5f 6d 61 73 74 65 72 22 29 3b 0a 20 20 7d 65  p_master");.  }e
1bda0 6c 73 65 7b 0a 20 20 20 20 7a 53 63 68 65 6d 61  lse{.    zSchema
1bdb0 54 61 62 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  Tab = sqlite3_mp
1bdc0 72 69 6e 74 66 28 22 5c 22 25 77 5c 22 2e 73 71  rintf("\"%w\".sq
1bdd0 6c 69 74 65 5f 6d 61 73 74 65 72 22 2c 20 7a 44  lite_master", zD
1bde0 62 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d  b);.  }.  for(i=
1bdf0 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28 61  0; i<ArraySize(a
1be00 51 75 65 72 79 29 3b 20 69 2b 2b 29 7b 0a 20 20  Query); i++){.  
1be10 20 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d 20 73    char *zSql = s
1be20 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61  qlite3_mprintf(a
1be30 51 75 65 72 79 5b 69 5d 2e 7a 53 71 6c 2c 20 7a  Query[i].zSql, z
1be40 53 63 68 65 6d 61 54 61 62 29 3b 0a 20 20 20 20  SchemaTab);.    
1be50 69 6e 74 20 76 61 6c 20 3d 20 64 62 5f 69 6e 74  int val = db_int
1be60 28 70 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 73  (p, zSql);.    s
1be70 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
1be80 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
1be90 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 32 30  tf(p->out, "%-20
1bea0 73 20 25 64 5c 6e 22 2c 20 61 51 75 65 72 79 5b  s %d\n", aQuery[
1beb0 69 5d 2e 7a 4e 61 6d 65 2c 20 76 61 6c 29 3b 0a  i].zName, val);.
1bec0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72    }.  sqlite3_fr
1bed0 65 65 28 7a 53 63 68 65 6d 61 54 61 62 29 3b 0a  ee(zSchemaTab);.
1bee0 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
1bef0 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 63  *.** Print the c
1bf00 75 72 72 65 6e 74 20 73 71 6c 69 74 65 33 5f 65  urrent sqlite3_e
1bf10 72 72 6d 73 67 28 29 20 76 61 6c 75 65 20 74 6f  rrmsg() value to
1bf20 20 73 74 64 65 72 72 20 61 6e 64 20 72 65 74 75   stderr and retu
1bf30 72 6e 20 31 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  rn 1..*/.static 
1bf40 69 6e 74 20 73 68 65 6c 6c 44 61 74 61 62 61 73  int shellDatabas
1bf50 65 45 72 72 6f 72 28 73 71 6c 69 74 65 33 20 2a  eError(sqlite3 *
1bf60 64 62 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  db){.  const cha
1bf70 72 20 2a 7a 45 72 72 20 3d 20 73 71 6c 69 74 65  r *zErr = sqlite
1bf80 33 5f 65 72 72 6d 73 67 28 64 62 29 3b 0a 20 20  3_errmsg(db);.  
1bf90 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
1bfa0 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e  rr, "Error: %s\n
1bfb0 22 2c 20 7a 45 72 72 29 3b 0a 20 20 72 65 74 75  ", zErr);.  retu
1bfc0 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  rn 1;.}../*.** P
1bfd0 72 69 6e 74 20 61 6e 20 6f 75 74 2d 6f 66 2d 6d  rint an out-of-m
1bfe0 65 6d 6f 72 79 20 6d 65 73 73 61 67 65 20 74 6f  emory message to
1bff0 20 73 74 64 65 72 72 20 61 6e 64 20 72 65 74 75   stderr and retu
1c000 72 6e 20 31 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  rn 1..*/.static 
1c010 69 6e 74 20 73 68 65 6c 6c 4e 6f 6d 65 6d 45 72  int shellNomemEr
1c020 72 6f 72 28 76 6f 69 64 29 7b 0a 20 20 72 61 77  ror(void){.  raw
1c030 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1c040 22 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66 20 6d  "Error: out of m
1c050 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 72 65 74  emory\n");.  ret
1c060 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 1;.}../*.** 
1c070 43 6f 6d 70 61 72 65 20 74 68 65 20 70 61 74 74  Compare the patt
1c080 65 72 6e 20 69 6e 20 7a 47 6c 6f 62 5b 5d 20 61  ern in zGlob[] a
1c090 67 61 69 6e 73 74 20 74 68 65 20 74 65 78 74 20  gainst the text 
1c0a0 69 6e 20 7a 5b 5d 2e 20 20 52 65 74 75 72 6e 20  in z[].  Return 
1c0b0 54 52 55 45 0a 2a 2a 20 69 66 20 74 68 65 79 20  TRUE.** if they 
1c0c0 6d 61 74 63 68 20 61 6e 64 20 46 41 4c 53 45 20  match and FALSE 
1c0d0 28 30 29 20 69 66 20 74 68 65 79 20 64 6f 20 6e  (0) if they do n
1c0e0 6f 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20  ot match..**.** 
1c0f0 47 6c 6f 62 62 69 6e 67 20 72 75 6c 65 73 3a 0a  Globbing rules:.
1c100 2a 2a 0a 2a 2a 20 20 20 20 20 20 27 2a 27 20 20  **.**      '*'  
1c110 20 20 20 20 20 4d 61 74 63 68 65 73 20 61 6e 79       Matches any
1c120 20 73 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72   sequence of zer
1c130 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61 72 61 63  o or more charac
1c140 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ters..**.**     
1c150 20 27 3f 27 20 20 20 20 20 20 20 4d 61 74 63 68   '?'       Match
1c160 65 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 63  es exactly one c
1c170 68 61 72 61 63 74 65 72 2e 0a 2a 2a 0a 2a 2a 20  haracter..**.** 
1c180 20 20 20 20 5b 2e 2e 2e 5d 20 20 20 20 20 20 4d      [...]      M
1c190 61 74 63 68 65 73 20 6f 6e 65 20 63 68 61 72 61  atches one chara
1c1a0 63 74 65 72 20 66 72 6f 6d 20 74 68 65 20 65 6e  cter from the en
1c1b0 63 6c 6f 73 65 64 20 6c 69 73 74 20 6f 66 0a 2a  closed list of.*
1c1c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1c1d0 20 63 68 61 72 61 63 74 65 72 73 2e 0a 2a 2a 0a   characters..**.
1c1e0 2a 2a 20 20 20 20 20 5b 5e 2e 2e 2e 5d 20 20 20  **     [^...]   
1c1f0 20 20 4d 61 74 63 68 65 73 20 6f 6e 65 20 63 68    Matches one ch
1c200 61 72 61 63 74 65 72 20 6e 6f 74 20 69 6e 20 74  aracter not in t
1c210 68 65 20 65 6e 63 6c 6f 73 65 64 20 6c 69 73 74  he enclosed list
1c220 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 27 23 27  ..**.**      '#'
1c230 20 20 20 20 20 20 20 4d 61 74 63 68 65 73 20 61         Matches a
1c240 6e 79 20 73 65 71 75 65 6e 63 65 20 6f 66 20 6f  ny sequence of o
1c250 6e 65 20 6f 72 20 6d 6f 72 65 20 64 69 67 69 74  ne or more digit
1c260 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 20 20 20  s with an.**    
1c270 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 74 69              opti
1c280 6f 6e 61 6c 20 2b 20 6f 72 20 2d 20 73 69 67 6e  onal + or - sign
1c290 20 69 6e 20 66 72 6f 6e 74 0a 2a 2a 0a 2a 2a 20   in front.**.** 
1c2a0 20 20 20 20 20 27 20 27 20 20 20 20 20 20 20 41       ' '       A
1c2b0 6e 79 20 73 70 61 6e 20 6f 66 20 77 68 69 74 65  ny span of white
1c2c0 73 70 61 63 65 20 6d 61 74 63 68 65 73 20 61 6e  space matches an
1c2d0 79 20 6f 74 68 65 72 20 73 70 61 6e 20 6f 66 0a  y other span of.
1c2e0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1c2f0 20 20 77 68 69 74 65 73 70 61 63 65 2e 0a 2a 2a    whitespace..**
1c300 0a 2a 2a 20 45 78 74 72 61 20 77 68 69 74 65 73  .** Extra whites
1c310 70 61 63 65 20 61 74 20 74 68 65 20 65 6e 64 20  pace at the end 
1c320 6f 66 20 7a 5b 5d 20 69 73 20 69 67 6e 6f 72 65  of z[] is ignore
1c330 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
1c340 20 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28 63   testcase_glob(c
1c350 6f 6e 73 74 20 63 68 61 72 20 2a 7a 47 6c 6f 62  onst char *zGlob
1c360 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29  , const char *z)
1c370 7b 0a 20 20 69 6e 74 20 63 2c 20 63 32 3b 0a 20  {.  int c, c2;. 
1c380 20 69 6e 74 20 69 6e 76 65 72 74 3b 0a 20 20 69   int invert;.  i
1c390 6e 74 20 73 65 65 6e 3b 0a 0a 20 20 77 68 69 6c  nt seen;..  whil
1c3a0 65 28 20 28 63 20 3d 20 28 2a 28 7a 47 6c 6f 62  e( (c = (*(zGlob
1c3b0 2b 2b 29 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  ++)))!=0 ){.    
1c3c0 69 66 28 20 49 73 53 70 61 63 65 28 63 29 20 29  if( IsSpace(c) )
1c3d0 7b 0a 20 20 20 20 20 20 69 66 28 20 21 49 73 53  {.      if( !IsS
1c3e0 70 61 63 65 28 2a 7a 29 20 29 20 72 65 74 75 72  pace(*z) ) retur
1c3f0 6e 20 30 3b 0a 20 20 20 20 20 20 77 68 69 6c 65  n 0;.      while
1c400 28 20 49 73 53 70 61 63 65 28 2a 7a 47 6c 6f 62  ( IsSpace(*zGlob
1c410 29 20 29 20 7a 47 6c 6f 62 2b 2b 3b 0a 20 20 20  ) ) zGlob++;.   
1c420 20 20 20 77 68 69 6c 65 28 20 49 73 53 70 61 63     while( IsSpac
1c430 65 28 2a 7a 29 20 29 20 7a 2b 2b 3b 0a 20 20 20  e(*z) ) z++;.   
1c440 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 2a   }else if( c=='*
1c450 27 20 29 7b 0a 20 20 20 20 20 20 77 68 69 6c 65  ' ){.      while
1c460 28 20 28 63 3d 28 2a 28 7a 47 6c 6f 62 2b 2b 29  ( (c=(*(zGlob++)
1c470 29 29 20 3d 3d 20 27 2a 27 20 7c 7c 20 63 3d 3d  )) == '*' || c==
1c480 27 3f 27 20 29 7b 0a 20 20 20 20 20 20 20 20 69  '?' ){.        i
1c490 66 28 20 63 3d 3d 27 3f 27 20 26 26 20 28 2a 28  f( c=='?' && (*(
1c4a0 7a 2b 2b 29 29 3d 3d 30 20 29 20 72 65 74 75 72  z++))==0 ) retur
1c4b0 6e 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  n 0;.      }.   
1c4c0 20 20 20 69 66 28 20 63 3d 3d 30 20 29 7b 0a 20     if( c==0 ){. 
1c4d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
1c4e0 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
1c4f0 20 63 3d 3d 27 5b 27 20 29 7b 0a 20 20 20 20 20   c=='[' ){.     
1c500 20 20 20 77 68 69 6c 65 28 20 2a 7a 20 26 26 20     while( *z && 
1c510 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28 7a 47  testcase_glob(zG
1c520 6c 6f 62 2d 31 2c 7a 29 3d 3d 30 20 29 7b 0a 20  lob-1,z)==0 ){. 
1c530 20 20 20 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20           z++;.  
1c540 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1c550 72 65 74 75 72 6e 20 28 2a 7a 29 21 3d 30 3b 0a  return (*z)!=0;.
1c560 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 77 68        }.      wh
1c570 69 6c 65 28 20 28 63 32 20 3d 20 28 2a 28 7a 2b  ile( (c2 = (*(z+
1c580 2b 29 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  +)))!=0 ){.     
1c590 20 20 20 77 68 69 6c 65 28 20 63 32 21 3d 63 20     while( c2!=c 
1c5a0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63 32 20  ){.          c2 
1c5b0 3d 20 2a 28 7a 2b 2b 29 3b 0a 20 20 20 20 20 20  = *(z++);.      
1c5c0 20 20 20 20 69 66 28 20 63 32 3d 3d 30 20 29 20      if( c2==0 ) 
1c5d0 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20  return 0;.      
1c5e0 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
1c5f0 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28 7a 47  testcase_glob(zG
1c600 6c 6f 62 2c 7a 29 20 29 20 72 65 74 75 72 6e 20  lob,z) ) return 
1c610 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  1;.      }.     
1c620 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d   return 0;.    }
1c630 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 3f 27 20  else if( c=='?' 
1c640 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 2a 28  ){.      if( (*(
1c650 7a 2b 2b 29 29 3d 3d 30 20 29 20 72 65 74 75 72  z++))==0 ) retur
1c660 6e 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  n 0;.    }else i
1c670 66 28 20 63 3d 3d 27 5b 27 20 29 7b 0a 20 20 20  f( c=='[' ){.   
1c680 20 20 20 69 6e 74 20 70 72 69 6f 72 5f 63 20 3d     int prior_c =
1c690 20 30 3b 0a 20 20 20 20 20 20 73 65 65 6e 20 3d   0;.      seen =
1c6a0 20 30 3b 0a 20 20 20 20 20 20 69 6e 76 65 72 74   0;.      invert
1c6b0 20 3d 20 30 3b 0a 20 20 20 20 20 20 63 20 3d 20   = 0;.      c = 
1c6c0 2a 28 7a 2b 2b 29 3b 0a 20 20 20 20 20 20 69 66  *(z++);.      if
1c6d0 28 20 63 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  ( c==0 ) return 
1c6e0 30 3b 0a 20 20 20 20 20 20 63 32 20 3d 20 2a 28  0;.      c2 = *(
1c6f0 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20 20 20  zGlob++);.      
1c700 69 66 28 20 63 32 3d 3d 27 5e 27 20 29 7b 0a 20  if( c2=='^' ){. 
1c710 20 20 20 20 20 20 20 69 6e 76 65 72 74 20 3d 20         invert = 
1c720 31 3b 0a 20 20 20 20 20 20 20 20 63 32 20 3d 20  1;.        c2 = 
1c730 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20  *(zGlob++);.    
1c740 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63 32    }.      if( c2
1c750 3d 3d 27 5d 27 20 29 7b 0a 20 20 20 20 20 20 20  ==']' ){.       
1c760 20 69 66 28 20 63 3d 3d 27 5d 27 20 29 20 73 65   if( c==']' ) se
1c770 65 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  en = 1;.        
1c780 63 32 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b  c2 = *(zGlob++);
1c790 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 77  .      }.      w
1c7a0 68 69 6c 65 28 20 63 32 20 26 26 20 63 32 21 3d  hile( c2 && c2!=
1c7b0 27 5d 27 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ']' ){.        i
1c7c0 66 28 20 63 32 3d 3d 27 2d 27 20 26 26 20 7a 47  f( c2=='-' && zG
1c7d0 6c 6f 62 5b 30 5d 21 3d 27 5d 27 20 26 26 20 7a  lob[0]!=']' && z
1c7e0 47 6c 6f 62 5b 30 5d 21 3d 30 20 26 26 20 70 72  Glob[0]!=0 && pr
1c7f0 69 6f 72 5f 63 3e 30 20 29 7b 0a 20 20 20 20 20  ior_c>0 ){.     
1c800 20 20 20 20 20 63 32 20 3d 20 2a 28 7a 47 6c 6f       c2 = *(zGlo
1c810 62 2b 2b 29 3b 0a 20 20 20 20 20 20 20 20 20 20  b++);.          
1c820 69 66 28 20 63 3e 3d 70 72 69 6f 72 5f 63 20 26  if( c>=prior_c &
1c830 26 20 63 3c 3d 63 32 20 29 20 73 65 65 6e 20 3d  & c<=c2 ) seen =
1c840 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72   1;.          pr
1c850 69 6f 72 5f 63 20 3d 20 30 3b 0a 20 20 20 20 20  ior_c = 0;.     
1c860 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1c870 20 20 20 20 69 66 28 20 63 3d 3d 63 32 20 29 7b      if( c==c2 ){
1c880 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 65  .            see
1c890 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  n = 1;.         
1c8a0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 70 72 69   }.          pri
1c8b0 6f 72 5f 63 20 3d 20 63 32 3b 0a 20 20 20 20 20  or_c = c2;.     
1c8c0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 63 32 20     }.        c2 
1c8d0 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20  = *(zGlob++);.  
1c8e0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
1c8f0 63 32 3d 3d 30 20 7c 7c 20 28 73 65 65 6e 20 5e  c2==0 || (seen ^
1c900 20 69 6e 76 65 72 74 29 3d 3d 30 20 29 20 72 65   invert)==0 ) re
1c910 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 65 6c 73  turn 0;.    }els
1c920 65 20 69 66 28 20 63 3d 3d 27 23 27 20 29 7b 0a  e if( c=='#' ){.
1c930 20 20 20 20 20 20 69 66 28 20 28 7a 5b 30 5d 3d        if( (z[0]=
1c940 3d 27 2d 27 20 7c 7c 20 7a 5b 30 5d 3d 3d 27 2b  ='-' || z[0]=='+
1c950 27 29 20 26 26 20 49 73 44 69 67 69 74 28 7a 5b  ') && IsDigit(z[
1c960 31 5d 29 20 29 20 7a 2b 2b 3b 0a 20 20 20 20 20  1]) ) z++;.     
1c970 20 69 66 28 20 21 49 73 44 69 67 69 74 28 7a 5b   if( !IsDigit(z[
1c980 30 5d 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  0]) ) return 0;.
1c990 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 20        z++;.     
1c9a0 20 77 68 69 6c 65 28 20 49 73 44 69 67 69 74 28   while( IsDigit(
1c9b0 7a 5b 30 5d 29 20 29 7b 20 7a 2b 2b 3b 20 7d 0a  z[0]) ){ z++; }.
1c9c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1c9d0 20 69 66 28 20 63 21 3d 28 2a 28 7a 2b 2b 29 29   if( c!=(*(z++))
1c9e0 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20   ) return 0;.   
1c9f0 20 7d 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28 20   }.  }.  while( 
1ca00 49 73 53 70 61 63 65 28 2a 7a 29 20 29 7b 20 7a  IsSpace(*z) ){ z
1ca10 2b 2b 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20 2a  ++; }.  return *
1ca20 7a 3d 3d 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  z==0;.}.../*.** 
1ca30 43 6f 6d 70 61 72 65 20 74 68 65 20 73 74 72 69  Compare the stri
1ca40 6e 67 20 61 73 20 61 20 63 6f 6d 6d 61 6e 64 2d  ng as a command-
1ca50 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 77 69 74 68  line option with
1ca60 20 65 69 74 68 65 72 20 6f 6e 65 20 6f 72 20 74   either one or t
1ca70 77 6f 0a 2a 2a 20 69 6e 69 74 69 61 6c 20 22 2d  wo.** initial "-
1ca80 22 20 63 68 61 72 61 63 74 65 72 73 2e 0a 2a 2f  " characters..*/
1ca90 0a 73 74 61 74 69 63 20 69 6e 74 20 6f 70 74 69  .static int opti
1caa0 6f 6e 4d 61 74 63 68 28 63 6f 6e 73 74 20 63 68  onMatch(const ch
1cab0 61 72 20 2a 7a 53 74 72 2c 20 63 6f 6e 73 74 20  ar *zStr, const 
1cac0 63 68 61 72 20 2a 7a 4f 70 74 29 7b 0a 20 20 69  char *zOpt){.  i
1cad0 66 28 20 7a 53 74 72 5b 30 5d 21 3d 27 2d 27 20  f( zStr[0]!='-' 
1cae0 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7a 53  ) return 0;.  zS
1caf0 74 72 2b 2b 3b 0a 20 20 69 66 28 20 7a 53 74 72  tr++;.  if( zStr
1cb00 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 53 74 72 2b  [0]=='-' ) zStr+
1cb10 2b 3b 0a 20 20 72 65 74 75 72 6e 20 73 74 72 63  +;.  return strc
1cb20 6d 70 28 7a 53 74 72 2c 20 7a 4f 70 74 29 3d 3d  mp(zStr, zOpt)==
1cb30 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 6c 65  0;.}../*.** Dele
1cb40 74 65 20 61 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e  te a file..*/.in
1cb50 74 20 73 68 65 6c 6c 44 65 6c 65 74 65 46 69 6c  t shellDeleteFil
1cb60 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46  e(const char *zF
1cb70 69 6c 65 6e 61 6d 65 29 7b 0a 20 20 69 6e 74 20  ilename){.  int 
1cb80 72 63 3b 0a 23 69 66 64 65 66 20 5f 57 49 4e 33  rc;.#ifdef _WIN3
1cb90 32 0a 20 20 77 63 68 61 72 5f 74 20 2a 7a 20 3d  2.  wchar_t *z =
1cba0 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75   sqlite3_win32_u
1cbb0 74 66 38 5f 74 6f 5f 75 6e 69 63 6f 64 65 28 7a  tf8_to_unicode(z
1cbc0 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 72 63 20  Filename);.  rc 
1cbd0 3d 20 5f 77 75 6e 6c 69 6e 6b 28 7a 29 3b 0a 20  = _wunlink(z);. 
1cbe0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29   sqlite3_free(z)
1cbf0 3b 0a 23 65 6c 73 65 0a 20 20 72 63 20 3d 20 75  ;.#else.  rc = u
1cc00 6e 6c 69 6e 6b 28 7a 46 69 6c 65 6e 61 6d 65 29  nlink(zFilename)
1cc10 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  ;.#endif.  retur
1cc20 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  n rc;.}.../*.** 
1cc30 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  The implementati
1cc40 6f 6e 20 6f 66 20 53 51 4c 20 73 63 61 6c 61 72  on of SQL scalar
1cc50 20 66 75 6e 63 74 69 6f 6e 20 66 6b 65 79 5f 63   function fkey_c
1cc60 6f 6c 6c 61 74 65 5f 63 6c 61 75 73 65 28 29 2c  ollate_clause(),
1cc70 20 75 73 65 64 0a 2a 2a 20 62 79 20 74 68 65 20   used.** by the 
1cc80 22 2e 6c 69 6e 74 20 66 6b 65 79 2d 69 6e 64 65  ".lint fkey-inde
1cc90 78 65 73 22 20 63 6f 6d 6d 61 6e 64 2e 20 54 68  xes" command. Th
1cca0 69 73 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69  is scalar functi
1ccb0 6f 6e 20 69 73 20 61 6c 77 61 79 73 0a 2a 2a 20  on is always.** 
1ccc0 63 61 6c 6c 65 64 20 77 69 74 68 20 66 6f 75 72  called with four
1ccd0 20 61 72 67 75 6d 65 6e 74 73 20 2d 20 74 68 65   arguments - the
1cce0 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20 6e 61   parent table na
1ccf0 6d 65 2c 20 74 68 65 20 70 61 72 65 6e 74 20 63  me, the parent c
1cd00 6f 6c 75 6d 6e 20 6e 61 6d 65 2c 0a 2a 2a 20 74  olumn name,.** t
1cd10 68 65 20 63 68 69 6c 64 20 74 61 62 6c 65 20 6e  he child table n
1cd20 61 6d 65 20 61 6e 64 20 74 68 65 20 63 68 69 6c  ame and the chil
1cd30 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 2a  d column name..*
1cd40 2a 0a 2a 2a 20 20 20 66 6b 65 79 5f 63 6f 6c 6c  *.**   fkey_coll
1cd50 61 74 65 5f 63 6c 61 75 73 65 28 27 70 61 72 65  ate_clause('pare
1cd60 6e 74 2d 74 61 62 27 2c 20 27 70 61 72 65 6e 74  nt-tab', 'parent
1cd70 2d 63 6f 6c 27 2c 20 27 63 68 69 6c 64 2d 74 61  -col', 'child-ta
1cd80 62 27 2c 20 27 63 68 69 6c 64 2d 63 6f 6c 27 29  b', 'child-col')
1cd90 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
1cda0 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61   of the named ta
1cdb0 62 6c 65 73 20 6f 72 20 63 6f 6c 75 6d 6e 73 20  bles or columns 
1cdc0 64 6f 20 6e 6f 74 20 65 78 69 73 74 2c 20 74 68  do not exist, th
1cdd0 69 73 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 72  is function.** r
1cde0 65 74 75 72 6e 73 20 61 6e 20 65 6d 70 74 79 20  eturns an empty 
1cdf0 73 74 72 69 6e 67 2e 20 41 6e 20 65 6d 70 74 79  string. An empty
1ce00 20 73 74 72 69 6e 67 20 69 73 20 61 6c 73 6f 20   string is also 
1ce10 72 65 74 75 72 6e 65 64 20 69 66 20 62 6f 74 68  returned if both
1ce20 20 74 61 62 6c 65 73 0a 2a 2a 20 61 6e 64 20 63   tables.** and c
1ce30 6f 6c 75 6d 6e 73 20 65 78 69 73 74 20 62 75 74  olumns exist but
1ce40 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 64   have the same d
1ce50 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
1ce60 20 73 65 71 75 65 6e 63 65 2e 20 4f 72 2c 0a 2a   sequence. Or,.*
1ce70 2a 20 69 66 20 62 6f 74 68 20 65 78 69 73 74 20  * if both exist 
1ce80 62 75 74 20 74 68 65 20 64 65 66 61 75 6c 74 20  but the default 
1ce90 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
1cea0 63 65 73 20 61 72 65 20 64 69 66 66 65 72 65 6e  ces are differen
1ceb0 74 2c 20 74 68 69 73 0a 2a 2a 20 66 75 6e 63 74  t, this.** funct
1cec0 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
1ced0 73 74 72 69 6e 67 20 22 20 43 4f 4c 4c 41 54 45  string " COLLATE
1cee0 20 3c 70 61 72 65 6e 74 2d 63 6f 6c 6c 61 74 69   <parent-collati
1cef0 6f 6e 3e 22 2c 20 77 68 65 72 65 0a 2a 2a 20 3c  on>", where.** <
1cf00 70 61 72 65 6e 74 2d 63 6f 6c 6c 61 74 69 6f 6e  parent-collation
1cf10 3e 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  > is the default
1cf20 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
1cf30 6e 63 65 20 6f 66 20 74 68 65 20 70 61 72 65 6e  nce of the paren
1cf40 74 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 73 74 61  t column..*/.sta
1cf50 74 69 63 20 76 6f 69 64 20 73 68 65 6c 6c 46 6b  tic void shellFk
1cf60 65 79 43 6f 6c 6c 61 74 65 43 6c 61 75 73 65 28  eyCollateClause(
1cf70 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
1cf80 78 74 20 2a 70 43 74 78 2c 0a 20 20 69 6e 74 20  xt *pCtx,.  int 
1cf90 6e 56 61 6c 2c 0a 20 20 73 71 6c 69 74 65 33 5f  nVal,.  sqlite3_
1cfa0 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 0a 29 7b  value **apVal.){
1cfb0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
1cfc0 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
1cfd0 5f 64 62 5f 68 61 6e 64 6c 65 28 70 43 74 78 29  _db_handle(pCtx)
1cfe0 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
1cff0 7a 50 61 72 65 6e 74 3b 0a 20 20 63 6f 6e 73 74  zParent;.  const
1d000 20 63 68 61 72 20 2a 7a 50 61 72 65 6e 74 43 6f   char *zParentCo
1d010 6c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  l;.  const char 
1d020 2a 7a 50 61 72 65 6e 74 53 65 71 3b 0a 20 20 63  *zParentSeq;.  c
1d030 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 68 69 6c  onst char *zChil
1d040 64 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  d;.  const char 
1d050 2a 7a 43 68 69 6c 64 43 6f 6c 3b 0a 20 20 63 6f  *zChildCol;.  co
1d060 6e 73 74 20 63 68 61 72 20 2a 7a 43 68 69 6c 64  nst char *zChild
1d070 53 65 71 20 3d 20 30 3b 20 20 2f 2a 20 49 6e 69  Seq = 0;  /* Ini
1d080 74 69 61 6c 69 7a 65 20 74 6f 20 61 76 6f 69 64  tialize to avoid
1d090 20 66 61 6c 73 65 2d 70 6f 73 69 74 69 76 65 20   false-positive 
1d0a0 77 61 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  warning */.  int
1d0b0 20 72 63 3b 0a 0a 20 20 61 73 73 65 72 74 28 20   rc;..  assert( 
1d0c0 6e 56 61 6c 3d 3d 34 20 29 3b 0a 20 20 7a 50 61  nVal==4 );.  zPa
1d0d0 72 65 6e 74 20 3d 20 28 63 6f 6e 73 74 20 63 68  rent = (const ch
1d0e0 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
1d0f0 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 30 5d 29  e_text(apVal[0])
1d100 3b 0a 20 20 7a 50 61 72 65 6e 74 43 6f 6c 20 3d  ;.  zParentCol =
1d110 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
1d120 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
1d130 28 61 70 56 61 6c 5b 31 5d 29 3b 0a 20 20 7a 43  (apVal[1]);.  zC
1d140 68 69 6c 64 20 3d 20 28 63 6f 6e 73 74 20 63 68  hild = (const ch
1d150 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
1d160 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 32 5d 29  e_text(apVal[2])
1d170 3b 0a 20 20 7a 43 68 69 6c 64 43 6f 6c 20 3d 20  ;.  zChildCol = 
1d180 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
1d190 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
1d1a0 61 70 56 61 6c 5b 33 5d 29 3b 0a 0a 20 20 73 71  apVal[3]);..  sq
1d1b0 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
1d1c0 74 28 70 43 74 78 2c 20 22 22 2c 20 2d 31 2c 20  t(pCtx, "", -1, 
1d1d0 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
1d1e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 74    rc = sqlite3_t
1d1f0 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61  able_column_meta
1d200 64 61 74 61 28 0a 20 20 20 20 20 20 64 62 2c 20  data(.      db, 
1d210 22 6d 61 69 6e 22 2c 20 7a 50 61 72 65 6e 74 2c  "main", zParent,
1d220 20 7a 50 61 72 65 6e 74 43 6f 6c 2c 20 30 2c 20   zParentCol, 0, 
1d230 26 7a 50 61 72 65 6e 74 53 65 71 2c 20 30 2c 20  &zParentSeq, 0, 
1d240 30 2c 20 30 0a 20 20 29 3b 0a 20 20 69 66 28 20  0, 0.  );.  if( 
1d250 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1d260 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1d270 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d  3_table_column_m
1d280 65 74 61 64 61 74 61 28 0a 20 20 20 20 20 20 20  etadata(.       
1d290 20 64 62 2c 20 22 6d 61 69 6e 22 2c 20 7a 43 68   db, "main", zCh
1d2a0 69 6c 64 2c 20 7a 43 68 69 6c 64 43 6f 6c 2c 20  ild, zChildCol, 
1d2b0 30 2c 20 26 7a 43 68 69 6c 64 53 65 71 2c 20 30  0, &zChildSeq, 0
1d2c0 2c 20 30 2c 20 30 0a 20 20 20 20 29 3b 0a 20 20  , 0, 0.    );.  
1d2d0 7d 0a 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  }..  if( rc==SQL
1d2e0 49 54 45 5f 4f 4b 20 26 26 20 73 71 6c 69 74 65  ITE_OK && sqlite
1d2f0 33 5f 73 74 72 69 63 6d 70 28 7a 50 61 72 65 6e  3_stricmp(zParen
1d300 74 53 65 71 2c 20 7a 43 68 69 6c 64 53 65 71 29  tSeq, zChildSeq)
1d310 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 20   ){.    char *z 
1d320 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
1d330 66 28 22 20 43 4f 4c 4c 41 54 45 20 25 73 22 2c  f(" COLLATE %s",
1d340 20 7a 50 61 72 65 6e 74 53 65 71 29 3b 0a 20 20   zParentSeq);.  
1d350 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
1d360 5f 74 65 78 74 28 70 43 74 78 2c 20 7a 2c 20 2d  _text(pCtx, z, -
1d370 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  1, SQLITE_TRANSI
1d380 45 4e 54 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  ENT);.    sqlite
1d390 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 7d 0a 7d  3_free(z);.  }.}
1d3a0 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6d 70  .../*.** The imp
1d3b0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 64  lementation of d
1d3c0 6f 74 2d 63 6f 6d 6d 61 6e 64 20 22 2e 6c 69 6e  ot-command ".lin
1d3d0 74 20 66 6b 65 79 2d 69 6e 64 65 78 65 73 22 2e  t fkey-indexes".
1d3e0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 6c  .*/.static int l
1d3f0 69 6e 74 46 6b 65 79 49 6e 64 65 78 65 73 28 0a  intFkeyIndexes(.
1d400 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 53    ShellState *pS
1d410 74 61 74 65 2c 20 20 20 20 20 20 20 20 20 20 20  tate,           
1d420 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 73 68 65    /* Current she
1d430 6c 6c 20 74 6f 6f 6c 20 73 74 61 74 65 20 2a 2f  ll tool state */
1d440 0a 20 20 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c  .  char **azArg,
1d450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d460 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 61     /* Array of a
1d470 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20  rguments passed 
1d480 74 6f 20 64 6f 74 20 63 6f 6d 6d 61 6e 64 20 2a  to dot command *
1d490 2f 0a 20 20 69 6e 74 20 6e 41 72 67 20 20 20 20  /.  int nArg    
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1d4c0 20 65 6e 74 72 69 65 73 20 69 6e 20 61 7a 41 72   entries in azAr
1d4d0 67 5b 5d 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69  g[] */.){.  sqli
1d4e0 74 65 33 20 2a 64 62 20 3d 20 70 53 74 61 74 65  te3 *db = pState
1d4f0 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 44  ->db;       /* D
1d500 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 74  atabase handle t
1d510 6f 20 71 75 65 72 79 20 22 6d 61 69 6e 22 20 64  o query "main" d
1d520 62 20 6f 66 20 2a 2f 0a 20 20 46 49 4c 45 20 2a  b of */.  FILE *
1d530 6f 75 74 20 3d 20 70 53 74 61 74 65 2d 3e 6f 75  out = pState->ou
1d540 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72  t;        /* Str
1d550 65 61 6d 20 74 6f 20 77 72 69 74 65 20 6e 6f 6e  eam to write non
1d560 2d 65 72 72 6f 72 20 6f 75 74 70 75 74 20 74 6f  -error output to
1d570 20 2a 2f 0a 20 20 69 6e 74 20 62 56 65 72 62 6f   */.  int bVerbo
1d580 73 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  se = 0;         
1d590 20 20 20 20 20 20 2f 2a 20 49 66 20 2d 76 65 72        /* If -ver
1d5a0 62 6f 73 65 20 69 73 20 70 72 65 73 65 6e 74 20  bose is present 
1d5b0 2a 2f 0a 20 20 69 6e 74 20 62 47 72 6f 75 70 42  */.  int bGroupB
1d5c0 79 50 61 72 65 6e 74 20 3d 20 30 3b 20 20 20 20  yParent = 0;    
1d5d0 20 20 20 20 20 2f 2a 20 49 66 20 2d 67 72 6f 75       /* If -grou
1d5e0 70 62 79 70 61 72 65 6e 74 20 69 73 20 70 72 65  pbyparent is pre
1d5f0 73 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  sent */.  int i;
1d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d610 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 20            /* To 
1d620 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20  iterate through 
1d630 61 7a 41 72 67 5b 5d 20 2a 2f 0a 20 20 63 6f 6e  azArg[] */.  con
1d640 73 74 20 63 68 61 72 20 2a 7a 49 6e 64 65 6e 74  st char *zIndent
1d650 20 3d 20 22 22 3b 20 20 20 20 20 20 20 2f 2a 20   = "";       /* 
1d660 48 6f 77 20 6d 75 63 68 20 74 6f 20 69 6e 64 65  How much to inde
1d670 6e 74 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  nt CREATE INDEX 
1d680 62 79 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  by */.  int rc; 
1d690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6a0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
1d6b0 6e 20 63 6f 64 65 20 2a 2f 0a 20 20 73 71 6c 69  n code */.  sqli
1d6c0 74 65 33 5f 73 74 6d 74 20 2a 70 53 71 6c 20 3d  te3_stmt *pSql =
1d6d0 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43   0;         /* C
1d6e0 6f 6d 70 69 6c 65 64 20 76 65 72 73 69 6f 6e 20  ompiled version 
1d6f0 6f 66 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  of SQL statement
1d700 20 62 65 6c 6f 77 20 2a 2f 0a 0a 20 20 2f 2a 0a   below */..  /*.
1d710 20 20 2a 2a 20 54 68 69 73 20 53 45 4c 45 43 54    ** This SELECT
1d720 20 73 74 61 74 65 6d 65 6e 74 20 72 65 74 75 72   statement retur
1d730 6e 73 20 6f 6e 65 20 72 6f 77 20 66 6f 72 20 65  ns one row for e
1d740 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ach foreign key 
1d750 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 2a 2a 20  constraint.  ** 
1d760 69 6e 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66  in the schema of
1d770 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1d780 73 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e 20 76  se. The column v
1d790 61 6c 75 65 73 20 61 72 65 3a 0a 20 20 2a 2a 0a  alues are:.  **.
1d7a0 20 20 2a 2a 20 30 2e 20 54 68 65 20 74 65 78 74    ** 0. The text
1d7b0 20 6f 66 20 61 6e 20 53 51 4c 20 73 74 61 74 65   of an SQL state
1d7c0 6d 65 6e 74 20 73 69 6d 69 6c 61 72 20 74 6f 3a  ment similar to:
1d7d0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 20  .  **.  **      
1d7e0 22 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50  "EXPLAIN QUERY P
1d7f0 4c 41 4e 20 53 45 4c 45 43 54 20 72 6f 77 69 64  LAN SELECT rowid
1d800 20 46 52 4f 4d 20 63 68 69 6c 64 5f 74 61 62 6c   FROM child_tabl
1d810 65 20 57 48 45 52 45 20 63 68 69 6c 64 5f 6b 65  e WHERE child_ke
1d820 79 3d 3f 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  y=?".  **.  **  
1d830 20 20 54 68 69 73 20 69 73 20 74 68 65 20 73 61    This is the sa
1d840 6d 65 20 53 45 4c 45 43 54 20 74 68 61 74 20 74  me SELECT that t
1d850 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  he foreign keys 
1d860 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6e  implementation n
1d870 65 65 64 73 0a 20 20 2a 2a 20 20 20 20 74 6f 20  eeds.  **    to 
1d880 72 75 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 20 6f  run internally o
1d890 6e 20 63 68 69 6c 64 20 74 61 62 6c 65 73 2e 20  n child tables. 
1d8a0 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69  If there is an i
1d8b0 6e 64 65 78 20 74 68 61 74 20 63 61 6e 0a 20 20  ndex that can.  
1d8c0 2a 2a 20 20 20 20 62 65 20 75 73 65 64 20 74 6f  **    be used to
1d8d0 20 6f 70 74 69 6d 69 7a 65 20 74 68 69 73 20 71   optimize this q
1d8e0 75 65 72 79 2c 20 74 68 65 6e 20 69 74 20 63 61  uery, then it ca
1d8f0 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 62  n also be used b
1d900 79 20 74 68 65 20 46 4b 0a 20 20 2a 2a 20 20 20  y the FK.  **   
1d910 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
1d920 74 6f 20 6f 70 74 69 6d 69 7a 65 20 44 45 4c 45  to optimize DELE
1d930 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  TE or UPDATE sta
1d940 74 65 6d 65 6e 74 73 20 6f 6e 20 74 68 65 20 70  tements on the p
1d950 61 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 74 61  arent.  **    ta
1d960 62 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 31  ble..  **.  ** 1
1d970 2e 20 41 20 47 4c 4f 42 20 70 61 74 74 65 72 6e  . A GLOB pattern
1d980 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 73 71   suitable for sq
1d990 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62 28 29 2e  lite3_strglob().
1d9a0 20 49 66 20 74 68 65 20 70 6c 61 6e 20 6f 75 74   If the plan out
1d9b0 70 75 74 20 62 79 0a 20 20 2a 2a 20 20 20 20 74  put by.  **    t
1d9c0 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  he EXPLAIN QUERY
1d9d0 20 50 4c 41 4e 20 63 6f 6d 6d 61 6e 64 20 6d 61   PLAN command ma
1d9e0 74 63 68 65 73 20 74 68 69 73 20 70 61 74 74 65  tches this patte
1d9f0 72 6e 2c 20 74 68 65 6e 20 74 68 65 20 73 63 68  rn, then the sch
1da00 65 6d 61 0a 20 20 2a 2a 20 20 20 20 63 6f 6e 74  ema.  **    cont
1da10 61 69 6e 73 20 61 6e 20 69 6e 64 65 78 20 74 68  ains an index th
1da20 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  at can be used t
1da30 6f 20 6f 70 74 69 6d 69 7a 65 20 74 68 65 20 71  o optimize the q
1da40 75 65 72 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  uery..  **.  ** 
1da50 32 2e 20 48 75 6d 61 6e 20 72 65 61 64 61 62 6c  2. Human readabl
1da60 65 20 74 65 78 74 20 74 68 61 74 20 64 65 73 63  e text that desc
1da70 72 69 62 65 73 20 74 68 65 20 63 68 69 6c 64 20  ribes the child 
1da80 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
1da90 73 2e 20 65 2e 67 2e 0a 20 20 2a 2a 0a 20 20 2a  s. e.g..  **.  *
1daa0 2a 20 20 20 20 20 20 20 22 63 68 69 6c 64 5f 74  *       "child_t
1dab0 61 62 6c 65 28 63 68 69 6c 64 5f 6b 65 79 31 2c  able(child_key1,
1dac0 20 63 68 69 6c 64 5f 6b 65 79 32 29 22 0a 20 20   child_key2)".  
1dad0 2a 2a 0a 20 20 2a 2a 20 33 2e 20 48 75 6d 61 6e  **.  ** 3. Human
1dae0 20 72 65 61 64 61 62 6c 65 20 74 65 78 74 20 74   readable text t
1daf0 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
1db00 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20 61  e parent table a
1db10 6e 64 20 63 6f 6c 75 6d 6e 73 2e 20 65 2e 67 2e  nd columns. e.g.
1db20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 20  .  **.  **      
1db30 20 22 70 61 72 65 6e 74 5f 74 61 62 6c 65 28 70   "parent_table(p
1db40 61 72 65 6e 74 5f 6b 65 79 31 2c 20 70 61 72 65  arent_key1, pare
1db50 6e 74 5f 6b 65 79 32 29 22 0a 20 20 2a 2a 0a 20  nt_key2)".  **. 
1db60 20 2a 2a 20 34 2e 20 41 20 66 75 6c 6c 20 43 52   ** 4. A full CR
1db70 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65  EATE INDEX state
1db80 6d 65 6e 74 20 66 6f 72 20 61 6e 20 69 6e 64 65  ment for an inde
1db90 78 20 74 68 61 74 20 63 6f 75 6c 64 20 62 65 20  x that could be 
1dba0 75 73 65 64 20 74 6f 0a 20 20 2a 2a 20 20 20 20  used to.  **    
1dbb0 6f 70 74 69 6d 69 7a 65 20 44 45 4c 45 54 45 20  optimize DELETE 
1dbc0 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
1dbd0 65 6e 74 73 20 6f 6e 20 74 68 65 20 70 61 72 65  ents on the pare
1dbe0 6e 74 20 74 61 62 6c 65 2e 20 65 2e 67 2e 0a 20  nt table. e.g.. 
1dbf0 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 20 20 22   **.  **       "
1dc00 43 52 45 41 54 45 20 49 4e 44 45 58 20 63 68 69  CREATE INDEX chi
1dc10 6c 64 5f 74 61 62 6c 65 5f 63 68 69 6c 64 5f 6b  ld_table_child_k
1dc20 65 79 20 4f 4e 20 63 68 69 6c 64 5f 74 61 62 6c  ey ON child_tabl
1dc30 65 28 63 68 69 6c 64 5f 6b 65 79 29 22 0a 20 20  e(child_key)".  
1dc40 2a 2a 0a 20 20 2a 2a 20 35 2e 20 54 68 65 20 6e  **.  ** 5. The n
1dc50 61 6d 65 20 6f 66 20 74 68 65 20 70 61 72 65 6e  ame of the paren
1dc60 74 20 74 61 62 6c 65 2e 0a 20 20 2a 2a 0a 20 20  t table..  **.  
1dc70 2a 2a 20 54 68 65 73 65 20 73 69 78 20 76 61 6c  ** These six val
1dc80 75 65 73 20 61 72 65 20 75 73 65 64 20 62 79 20  ues are used by 
1dc90 74 68 65 20 43 20 6c 6f 67 69 63 20 62 65 6c 6f  the C logic belo
1dca0 77 20 74 6f 20 67 65 6e 65 72 61 74 65 20 74 68  w to generate th
1dcb0 65 20 72 65 70 6f 72 74 2e 0a 20 20 2a 2f 0a 20  e report..  */. 
1dcc0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71   const char *zSq
1dcd0 6c 20 3d 0a 20 20 22 53 45 4c 45 43 54 20 22 0a  l =.  "SELECT ".
1dce0 20 20 20 20 22 20 20 20 20 20 27 45 58 50 4c 41      "     'EXPLA
1dcf0 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 53 45  IN QUERY PLAN SE
1dd00 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20  LECT rowid FROM 
1dd10 27 20 7c 7c 20 71 75 6f 74 65 28 73 2e 6e 61 6d  ' || quote(s.nam
1dd20 65 29 20 7c 7c 20 27 20 57 48 45 52 45 20 27 22  e) || ' WHERE '"
1dd30 0a 20 20 20 20 22 20 20 7c 7c 20 67 72 6f 75 70  .    "  || group
1dd40 5f 63 6f 6e 63 61 74 28 71 75 6f 74 65 28 73 2e  _concat(quote(s.
1dd50 6e 61 6d 65 29 20 7c 7c 20 27 2e 27 20 7c 7c 20  name) || '.' || 
1dd60 71 75 6f 74 65 28 66 2e 5b 66 72 6f 6d 5d 29 20  quote(f.[from]) 
1dd70 7c 7c 20 27 3d 3f 27 20 22 0a 20 20 20 20 22 20  || '=?' ".    " 
1dd80 20 7c 7c 20 66 6b 65 79 5f 63 6f 6c 6c 61 74 65   || fkey_collate
1dd90 5f 63 6c 61 75 73 65 28 22 0a 20 20 20 20 22 20  _clause(".    " 
1dda0 20 20 20 20 20 20 66 2e 5b 74 61 62 6c 65 5d 2c        f.[table],
1ddb0 20 43 4f 41 4c 45 53 43 45 28 66 2e 5b 74 6f 5d   COALESCE(f.[to]
1ddc0 2c 20 70 2e 5b 6e 61 6d 65 5d 29 2c 20 73 2e 6e  , p.[name]), s.n
1ddd0 61 6d 65 2c 20 66 2e 5b 66 72 6f 6d 5d 29 2c 27  ame, f.[from]),'
1dde0 20 41 4e 44 20 27 29 22 0a 20 20 20 20 22 2c 20   AND ')".    ", 
1ddf0 22 0a 20 20 20 20 22 20 20 20 20 20 27 53 45 41  ".    "     'SEA
1de00 52 43 48 20 54 41 42 4c 45 20 27 20 7c 7c 20 73  RCH TABLE ' || s
1de10 2e 6e 61 6d 65 20 7c 7c 20 27 20 55 53 49 4e 47  .name || ' USING
1de20 20 43 4f 56 45 52 49 4e 47 20 49 4e 44 45 58 2a   COVERING INDEX*
1de30 28 27 22 0a 20 20 20 20 22 20 20 7c 7c 20 67 72  ('".    "  || gr
1de40 6f 75 70 5f 63 6f 6e 63 61 74 28 27 2a 3d 3f 27  oup_concat('*=?'
1de50 2c 20 27 20 41 4e 44 20 27 29 20 7c 7c 20 27 29  , ' AND ') || ')
1de60 27 22 0a 20 20 20 20 22 2c 20 22 0a 20 20 20 20  '".    ", ".    
1de70 22 20 20 20 20 20 73 2e 6e 61 6d 65 20 20 7c 7c  "     s.name  ||
1de80 20 27 28 27 20 7c 7c 20 67 72 6f 75 70 5f 63 6f   '(' || group_co
1de90 6e 63 61 74 28 66 2e 5b 66 72 6f 6d 5d 2c 20 20  ncat(f.[from],  
1dea0 27 2c 20 27 29 20 7c 7c 20 27 29 27 22 0a 20 20  ', ') || ')'".  
1deb0 20 20 22 2c 20 22 0a 20 20 20 20 22 20 20 20 20    ", ".    "    
1dec0 20 66 2e 5b 74 61 62 6c 65 5d 20 7c 7c 20 27 28   f.[table] || '(
1ded0 27 20 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61  ' || group_conca
1dee0 74 28 43 4f 41 4c 45 53 43 45 28 66 2e 5b 74 6f  t(COALESCE(f.[to
1def0 5d 2c 20 70 2e 5b 6e 61 6d 65 5d 29 29 20 7c 7c  ], p.[name])) ||
1df00 20 27 29 27 22 0a 20 20 20 20 22 2c 20 22 0a 20   ')'".    ", ". 
1df10 20 20 20 22 20 20 20 20 20 27 43 52 45 41 54 45     "     'CREATE
1df20 20 49 4e 44 45 58 20 27 20 7c 7c 20 71 75 6f 74   INDEX ' || quot
1df30 65 28 73 2e 6e 61 6d 65 20 7c 7c 27 5f 27 7c 7c  e(s.name ||'_'||
1df40 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 66 2e   group_concat(f.
1df50 5b 66 72 6f 6d 5d 2c 20 27 5f 27 29 29 22 0a 20  [from], '_'))". 
1df60 20 20 20 22 20 20 7c 7c 20 27 20 4f 4e 20 27 20     "  || ' ON ' 
1df70 7c 7c 20 71 75 6f 74 65 28 73 2e 6e 61 6d 65 29  || quote(s.name)
1df80 20 7c 7c 20 27 28 27 22 0a 20 20 20 20 22 20 20   || '('".    "  
1df90 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  || group_concat(
1dfa0 71 75 6f 74 65 28 66 2e 5b 66 72 6f 6d 5d 29 20  quote(f.[from]) 
1dfb0 7c 7c 22 0a 20 20 20 20 22 20 20 20 20 20 20 20  ||".    "       
1dfc0 20 66 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63 6c   fkey_collate_cl
1dfd0 61 75 73 65 28 22 0a 20 20 20 20 22 20 20 20 20  ause(".    "    
1dfe0 20 20 20 20 20 20 66 2e 5b 74 61 62 6c 65 5d 2c        f.[table],
1dff0 20 43 4f 41 4c 45 53 43 45 28 66 2e 5b 74 6f 5d   COALESCE(f.[to]
1e000 2c 20 70 2e 5b 6e 61 6d 65 5d 29 2c 20 73 2e 6e  , p.[name]), s.n
1e010 61 6d 65 2c 20 66 2e 5b 66 72 6f 6d 5d 29 2c 20  ame, f.[from]), 
1e020 27 2c 20 27 29 22 0a 20 20 20 20 22 20 20 7c 7c  ', ')".    "  ||
1e030 20 27 29 3b 27 22 0a 20 20 20 20 22 2c 20 22 0a   ');'".    ", ".
1e040 20 20 20 20 22 20 20 20 20 20 66 2e 5b 74 61 62      "     f.[tab
1e050 6c 65 5d 20 22 0a 20 20 20 20 22 46 52 4f 4d 20  le] ".    "FROM 
1e060 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 41 53  sqlite_master AS
1e070 20 73 2c 20 70 72 61 67 6d 61 5f 66 6f 72 65 69   s, pragma_forei
1e080 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 73 2e 6e 61  gn_key_list(s.na
1e090 6d 65 29 20 41 53 20 66 20 22 0a 20 20 20 20 22  me) AS f ".    "
1e0a0 4c 45 46 54 20 4a 4f 49 4e 20 70 72 61 67 6d 61  LEFT JOIN pragma
1e0b0 5f 74 61 62 6c 65 5f 69 6e 66 6f 20 41 53 20 70  _table_info AS p
1e0c0 20 4f 4e 20 28 70 6b 2d 31 3d 73 65 71 20 41 4e   ON (pk-1=seq AN
1e0d0 44 20 70 2e 61 72 67 3d 66 2e 5b 74 61 62 6c 65  D p.arg=f.[table
1e0e0 5d 29 20 22 0a 20 20 20 20 22 47 52 4f 55 50 20  ]) ".    "GROUP 
1e0f0 42 59 20 73 2e 6e 61 6d 65 2c 20 66 2e 69 64 20  BY s.name, f.id 
1e100 22 0a 20 20 20 20 22 4f 52 44 45 52 20 42 59 20  ".    "ORDER BY 
1e110 28 43 41 53 45 20 57 48 45 4e 20 3f 20 54 48 45  (CASE WHEN ? THE
1e120 4e 20 66 2e 5b 74 61 62 6c 65 5d 20 45 4c 53 45  N f.[table] ELSE
1e130 20 73 2e 6e 61 6d 65 20 45 4e 44 29 22 0a 20 20   s.name END)".  
1e140 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
1e150 7a 47 6c 6f 62 49 50 4b 20 3d 20 22 53 45 41 52  zGlobIPK = "SEAR
1e160 43 48 20 54 41 42 4c 45 20 2a 20 55 53 49 4e 47  CH TABLE * USING
1e170 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
1e180 20 4b 45 59 20 28 72 6f 77 69 64 3d 3f 29 22 3b   KEY (rowid=?)";
1e190 0a 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 6e  ..  for(i=2; i<n
1e1a0 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  Arg; i++){.    i
1e1b0 6e 74 20 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c  nt n = (int)strl
1e1c0 65 6e 28 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20  en(azArg[i]);.  
1e1d0 20 20 69 66 28 20 6e 3e 31 20 26 26 20 73 71 6c    if( n>1 && sql
1e1e0 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 28 22 2d  ite3_strnicmp("-
1e1f0 76 65 72 62 6f 73 65 22 2c 20 61 7a 41 72 67 5b  verbose", azArg[
1e200 69 5d 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  i], n)==0 ){.   
1e210 20 20 20 62 56 65 72 62 6f 73 65 20 3d 20 31 3b     bVerbose = 1;
1e220 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20  .    }.    else 
1e230 69 66 28 20 6e 3e 31 20 26 26 20 73 71 6c 69 74  if( n>1 && sqlit
1e240 65 33 5f 73 74 72 6e 69 63 6d 70 28 22 2d 67 72  e3_strnicmp("-gr
1e250 6f 75 70 62 79 70 61 72 65 6e 74 22 2c 20 61 7a  oupbyparent", az
1e260 41 72 67 5b 69 5d 2c 20 6e 29 3d 3d 30 20 29 7b  Arg[i], n)==0 ){
1e270 0a 20 20 20 20 20 20 62 47 72 6f 75 70 42 79 50  .      bGroupByP
1e280 61 72 65 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20  arent = 1;.     
1e290 20 7a 49 6e 64 65 6e 74 20 3d 20 22 20 20 20 20   zIndent = "    
1e2a0 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73  ";.    }.    els
1e2b0 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  e{.      raw_pri
1e2c0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
1e2d0 67 65 3a 20 25 73 20 25 73 20 3f 2d 76 65 72 62  ge: %s %s ?-verb
1e2e0 6f 73 65 3f 20 3f 2d 67 72 6f 75 70 62 79 70 61  ose? ?-groupbypa
1e2f0 72 65 6e 74 3f 5c 6e 22 2c 0a 20 20 20 20 20 20  rent?\n",.      
1e300 20 20 20 20 61 7a 41 72 67 5b 30 5d 2c 20 61 7a      azArg[0], az
1e310 41 72 67 5b 31 5d 0a 20 20 20 20 20 20 29 3b 0a  Arg[1].      );.
1e320 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
1e330 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
1e340 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73  .  }..  /* Regis
1e350 74 65 72 20 74 68 65 20 66 6b 65 79 5f 63 6f 6c  ter the fkey_col
1e360 6c 61 74 65 5f 63 6c 61 75 73 65 28 29 20 53 51  late_clause() SQ
1e370 4c 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  L function */.  
1e380 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
1e390 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
1e3a0 20 22 66 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63   "fkey_collate_c
1e3b0 6c 61 75 73 65 22 2c 20 34 2c 20 53 51 4c 49 54  lause", 4, SQLIT
1e3c0 45 5f 55 54 46 38 2c 0a 20 20 20 20 20 20 30 2c  E_UTF8,.      0,
1e3d0 20 73 68 65 6c 6c 46 6b 65 79 43 6f 6c 6c 61 74   shellFkeyCollat
1e3e0 65 43 6c 61 75 73 65 2c 20 30 2c 20 30 0a 20 20  eClause, 0, 0.  
1e3f0 29 3b 0a 0a 0a 20 20 69 66 28 20 72 63 3d 3d 53  );...  if( rc==S
1e400 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1e410 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
1e420 70 61 72 65 5f 76 32 28 64 62 2c 20 7a 53 71 6c  pare_v2(db, zSql
1e430 2c 20 2d 31 2c 20 26 70 53 71 6c 2c 20 30 29 3b  , -1, &pSql, 0);
1e440 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53  .  }.  if( rc==S
1e450 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1e460 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
1e470 28 70 53 71 6c 2c 20 31 2c 20 62 47 72 6f 75 70  (pSql, 1, bGroup
1e480 42 79 50 61 72 65 6e 74 29 3b 0a 20 20 7d 0a 0a  ByParent);.  }..
1e490 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1e4a0 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 6e 74 20 72  _OK ){.    int r
1e4b0 63 32 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 50  c2;.    char *zP
1e4c0 72 65 76 20 3d 20 30 3b 0a 20 20 20 20 77 68 69  rev = 0;.    whi
1e4d0 6c 65 28 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d  le( SQLITE_ROW==
1e4e0 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 71  sqlite3_step(pSq
1e4f0 6c 29 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  l) ){.      int 
1e500 72 65 73 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20  res = -1;.      
1e510 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 45  sqlite3_stmt *pE
1e520 78 70 6c 61 69 6e 20 3d 20 30 3b 0a 20 20 20 20  xplain = 0;.    
1e530 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
1e540 51 50 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  QP = (const char
1e550 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
1e560 5f 74 65 78 74 28 70 53 71 6c 2c 20 30 29 3b 0a  _text(pSql, 0);.
1e570 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
1e580 20 2a 7a 47 6c 6f 62 20 3d 20 28 63 6f 6e 73 74   *zGlob = (const
1e590 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63   char*)sqlite3_c
1e5a0 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c  olumn_text(pSql,
1e5b0 20 31 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74   1);.      const
1e5c0 20 63 68 61 72 20 2a 7a 46 72 6f 6d 20 3d 20 28   char *zFrom = (
1e5d0 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
1e5e0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
1e5f0 70 53 71 6c 2c 20 32 29 3b 0a 20 20 20 20 20 20  pSql, 2);.      
1e600 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 72  const char *zTar
1e610 67 65 74 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  get = (const cha
1e620 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  r*)sqlite3_colum
1e630 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20 33 29 3b  n_text(pSql, 3);
1e640 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
1e650 72 20 2a 7a 43 49 20 3d 20 28 63 6f 6e 73 74 20  r *zCI = (const 
1e660 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f  char*)sqlite3_co
1e670 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20  lumn_text(pSql, 
1e680 34 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  4);.      const 
1e690 63 68 61 72 20 2a 7a 50 61 72 65 6e 74 20 3d 20  char *zParent = 
1e6a0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
1e6b0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
1e6c0 28 70 53 71 6c 2c 20 35 29 3b 0a 0a 20 20 20 20  (pSql, 5);..    
1e6d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
1e6e0 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20 7a 45  repare_v2(db, zE
1e6f0 51 50 2c 20 2d 31 2c 20 26 70 45 78 70 6c 61 69  QP, -1, &pExplai
1e700 6e 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  n, 0);.      if(
1e710 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1e720 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66   break;.      if
1e730 28 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d 73 71  ( SQLITE_ROW==sq
1e740 6c 69 74 65 33 5f 73 74 65 70 28 70 45 78 70 6c  lite3_step(pExpl
1e750 61 69 6e 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ain) ){.        
1e760 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 6c 61  const char *zPla
1e770 6e 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  n = (const char*
1e780 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  )sqlite3_column_
1e790 74 65 78 74 28 70 45 78 70 6c 61 69 6e 2c 20 33  text(pExplain, 3
1e7a0 29 3b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  );.        res =
1e7b0 20 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   (.             
1e7c0 20 30 3d 3d 73 71 6c 69 74 65 33 5f 73 74 72 67   0==sqlite3_strg
1e7d0 6c 6f 62 28 7a 47 6c 6f 62 2c 20 7a 50 6c 61 6e  lob(zGlob, zPlan
1e7e0 29 0a 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20  ).           || 
1e7f0 30 3d 3d 73 71 6c 69 74 65 33 5f 73 74 72 67 6c  0==sqlite3_strgl
1e800 6f 62 28 7a 47 6c 6f 62 49 50 4b 2c 20 7a 50 6c  ob(zGlobIPK, zPl
1e810 61 6e 29 0a 20 20 20 20 20 20 20 20 29 3b 0a 20  an).        );. 
1e820 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63 20       }.      rc 
1e830 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  = sqlite3_finali
1e840 7a 65 28 70 45 78 70 6c 61 69 6e 29 3b 0a 20 20  ze(pExplain);.  
1e850 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1e860 54 45 5f 4f 4b 20 29 20 62 72 65 61 6b 3b 0a 0a  TE_OK ) break;..
1e870 20 20 20 20 20 20 69 66 28 20 72 65 73 3c 30 20        if( res<0 
1e880 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  ){.        raw_p
1e890 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
1e8a0 72 72 6f 72 3a 20 69 6e 74 65 72 6e 61 6c 20 65  rror: internal e
1e8b0 72 72 6f 72 22 29 3b 0a 20 20 20 20 20 20 20 20  rror");.        
1e8c0 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 65 6c  break;.      }el
1e8d0 73 65 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  se{.        if( 
1e8e0 62 47 72 6f 75 70 42 79 50 61 72 65 6e 74 0a 20  bGroupByParent. 
1e8f0 20 20 20 20 20 20 20 26 26 20 28 62 56 65 72 62         && (bVerb
1e900 6f 73 65 20 7c 7c 20 72 65 73 3d 3d 30 29 0a 20  ose || res==0). 
1e910 20 20 20 20 20 20 20 26 26 20 28 7a 50 72 65 76         && (zPrev
1e920 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f 73  ==0 || sqlite3_s
1e930 74 72 69 63 6d 70 28 7a 50 61 72 65 6e 74 2c 20  tricmp(zParent, 
1e940 7a 50 72 65 76 29 29 0a 20 20 20 20 20 20 20 20  zPrev)).        
1e950 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77  ){.          raw
1e960 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 2d 2d  _printf(out, "--
1e970 20 50 61 72 65 6e 74 20 74 61 62 6c 65 20 25 73   Parent table %s
1e980 5c 6e 22 2c 20 7a 50 61 72 65 6e 74 29 3b 0a 20  \n", zParent);. 
1e990 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1e9a0 5f 66 72 65 65 28 7a 50 72 65 76 29 3b 0a 20 20  _free(zPrev);.  
1e9b0 20 20 20 20 20 20 20 20 7a 50 72 65 76 20 3d 20          zPrev = 
1e9c0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
1e9d0 22 25 73 22 2c 20 7a 50 61 72 65 6e 74 29 3b 0a  "%s", zParent);.
1e9e0 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
1e9f0 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b     if( res==0 ){
1ea00 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
1ea10 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 25 73  rintf(out, "%s%s
1ea20 20 2d 2d 3e 20 25 73 5c 6e 22 2c 20 7a 49 6e 64   --> %s\n", zInd
1ea30 65 6e 74 2c 20 7a 43 49 2c 20 7a 54 61 72 67 65  ent, zCI, zTarge
1ea40 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  t);.        }els
1ea50 65 20 69 66 28 20 62 56 65 72 62 6f 73 65 20 29  e if( bVerbose )
1ea60 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f  {.          raw_
1ea70 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 2f  printf(out, "%s/
1ea80 2a 20 6e 6f 20 65 78 74 72 61 20 69 6e 64 65 78  * no extra index
1ea90 65 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  es required for 
1eaa0 25 73 20 2d 3e 20 25 73 20 2a 2f 5c 6e 22 2c 0a  %s -> %s */\n",.
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 49                zI
1eac0 6e 64 65 6e 74 2c 20 7a 46 72 6f 6d 2c 20 7a 54  ndent, zFrom, zT
1ead0 61 72 67 65 74 0a 20 20 20 20 20 20 20 20 20 20  arget.          
1eae0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
1eaf0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
1eb00 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 50 72 65  qlite3_free(zPre
1eb10 76 29 3b 0a 0a 20 20 20 20 69 66 28 20 72 63 21  v);..    if( rc!
1eb20 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1eb30 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
1eb40 74 64 65 72 72 2c 20 22 25 73 5c 6e 22 2c 20 73  tderr, "%s\n", s
1eb50 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62  qlite3_errmsg(db
1eb60 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 72  ));.    }..    r
1eb70 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e  c2 = sqlite3_fin
1eb80 61 6c 69 7a 65 28 70 53 71 6c 29 3b 0a 20 20 20  alize(pSql);.   
1eb90 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1eba0 4f 4b 20 26 26 20 72 63 32 21 3d 53 51 4c 49 54  OK && rc2!=SQLIT
1ebb0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63  E_OK ){.      rc
1ebc0 20 3d 20 72 63 32 3b 0a 20 20 20 20 20 20 72 61   = rc2;.      ra
1ebd0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
1ebe0 20 22 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33   "%s\n", sqlite3
1ebf0 5f 65 72 72 6d 73 67 28 64 62 29 29 3b 0a 20 20  _errmsg(db));.  
1ec00 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1ec10 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
1ec20 72 72 2c 20 22 25 73 5c 6e 22 2c 20 73 71 6c 69  rr, "%s\n", sqli
1ec30 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 29 3b  te3_errmsg(db));
1ec40 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 72  .  }..  return r
1ec50 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c  c;.}../*.** Impl
1ec60 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 2e  ementation of ".
1ec70 6c 69 6e 74 22 20 64 6f 74 20 63 6f 6d 6d 61 6e  lint" dot comman
1ec80 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
1ec90 20 6c 69 6e 74 44 6f 74 43 6f 6d 6d 61 6e 64 28   lintDotCommand(
1eca0 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  .  ShellState *p
1ecb0 53 74 61 74 65 2c 20 20 20 20 20 20 20 20 20 20  State,          
1ecc0 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 73 68     /* Current sh
1ecd0 65 6c 6c 20 74 6f 6f 6c 20 73 74 61 74 65 20 2a  ell tool state *
1ece0 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 41 72 67  /.  char **azArg
1ecf0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1ed00 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
1ed10 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64  arguments passed
1ed20 20 74 6f 20 64 6f 74 20 63 6f 6d 6d 61 6e 64 20   to dot command 
1ed30 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 20 20 20  */.  int nArg   
1ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed50 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1ed60 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 7a 41  f entries in azA
1ed70 72 67 5b 5d 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  rg[] */.){.  int
1ed80 20 6e 3b 0a 20 20 6e 20 3d 20 28 6e 41 72 67 3e   n;.  n = (nArg>
1ed90 3d 32 20 3f 20 28 69 6e 74 29 73 74 72 6c 65 6e  =2 ? (int)strlen
1eda0 28 61 7a 41 72 67 5b 31 5d 29 20 3a 20 30 29 3b  (azArg[1]) : 0);
1edb0 0a 20 20 69 66 28 20 6e 3c 31 20 7c 7c 20 73 71  .  if( n<1 || sq
1edc0 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 28 61  lite3_strnicmp(a
1edd0 7a 41 72 67 5b 31 5d 2c 20 22 66 6b 65 79 2d 69  zArg[1], "fkey-i
1ede0 6e 64 65 78 65 73 22 2c 20 6e 29 20 29 20 67 6f  ndexes", n) ) go
1edf0 74 6f 20 75 73 61 67 65 3b 0a 20 20 72 65 74 75  to usage;.  retu
1ee00 72 6e 20 6c 69 6e 74 46 6b 65 79 49 6e 64 65 78  rn lintFkeyIndex
1ee10 65 73 28 70 53 74 61 74 65 2c 20 61 7a 41 72 67  es(pState, azArg
1ee20 2c 20 6e 41 72 67 29 3b 0a 0a 20 75 73 61 67 65  , nArg);.. usage
1ee30 3a 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73  :.  raw_printf(s
1ee40 74 64 65 72 72 2c 20 22 55 73 61 67 65 20 25 73  tderr, "Usage %s
1ee50 20 73 75 62 2d 63 6f 6d 6d 61 6e 64 20 3f 73 77   sub-command ?sw
1ee60 69 74 63 68 65 73 2e 2e 2e 3f 5c 6e 22 2c 20 61  itches...?\n", a
1ee70 7a 41 72 67 5b 30 5d 29 3b 0a 20 20 72 61 77 5f  zArg[0]);.  raw_
1ee80 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1ee90 57 68 65 72 65 20 73 75 62 2d 63 6f 6d 6d 61 6e  Where sub-comman
1eea0 64 73 20 61 72 65 3a 5c 6e 22 29 3b 0a 20 20 72  ds are:\n");.  r
1eeb0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
1eec0 2c 20 22 20 20 20 20 66 6b 65 79 2d 69 6e 64 65  , "    fkey-inde
1eed0 78 65 73 5c 6e 22 29 3b 0a 20 20 72 65 74 75 72  xes\n");.  retur
1eee0 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  n SQLITE_ERROR;.
1eef0 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 61 6e 20  }.../*.** If an 
1ef00 69 6e 70 75 74 20 6c 69 6e 65 20 62 65 67 69 6e  input line begin
1ef10 73 20 77 69 74 68 20 22 2e 22 20 74 68 65 6e 20  s with "." then 
1ef20 69 6e 76 6f 6b 65 20 74 68 69 73 20 72 6f 75 74  invoke this rout
1ef30 69 6e 65 20 74 6f 0a 2a 2a 20 70 72 6f 63 65 73  ine to.** proces
1ef40 73 20 74 68 61 74 20 6c 69 6e 65 2e 0a 2a 2a 0a  s that line..**.
1ef50 2a 2a 20 52 65 74 75 72 6e 20 31 20 6f 6e 20 65  ** Return 1 on e
1ef60 72 72 6f 72 2c 20 32 20 74 6f 20 65 78 69 74 2c  rror, 2 to exit,
1ef70 20 61 6e 64 20 30 20 6f 74 68 65 72 77 69 73 65   and 0 otherwise
1ef80 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
1ef90 64 6f 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 28  do_meta_command(
1efa0 63 68 61 72 20 2a 7a 4c 69 6e 65 2c 20 53 68 65  char *zLine, She
1efb0 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 69  llState *p){.  i
1efc0 6e 74 20 68 20 3d 20 31 3b 0a 20 20 69 6e 74 20  nt h = 1;.  int 
1efd0 6e 41 72 67 20 3d 20 30 3b 0a 20 20 69 6e 74 20  nArg = 0;.  int 
1efe0 6e 2c 20 63 3b 0a 20 20 69 6e 74 20 72 63 20 3d  n, c;.  int rc =
1eff0 20 30 3b 0a 20 20 63 68 61 72 20 2a 61 7a 41 72   0;.  char *azAr
1f000 67 5b 35 30 5d 3b 0a 0a 20 20 2f 2a 20 50 61 72  g[50];..  /* Par
1f010 73 65 20 74 68 65 20 69 6e 70 75 74 20 6c 69 6e  se the input lin
1f020 65 20 69 6e 74 6f 20 74 6f 6b 65 6e 73 2e 0a 20  e into tokens.. 
1f030 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20 7a 4c 69   */.  while( zLi
1f040 6e 65 5b 68 5d 20 26 26 20 6e 41 72 67 3c 41 72  ne[h] && nArg<Ar
1f050 72 61 79 53 69 7a 65 28 61 7a 41 72 67 29 20 29  raySize(azArg) )
1f060 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 49 73 53  {.    while( IsS
1f070 70 61 63 65 28 7a 4c 69 6e 65 5b 68 5d 29 20 29  pace(zLine[h]) )
1f080 7b 20 68 2b 2b 3b 20 7d 0a 20 20 20 20 69 66 28  { h++; }.    if(
1f090 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 30 20 29 20 62   zLine[h]==0 ) b
1f0a0 72 65 61 6b 3b 0a 20 20 20 20 69 66 28 20 7a 4c  reak;.    if( zL
1f0b0 69 6e 65 5b 68 5d 3d 3d 27 5c 27 27 20 7c 7c 20  ine[h]=='\'' || 
1f0c0 7a 4c 69 6e 65 5b 68 5d 3d 3d 27 22 27 20 29 7b  zLine[h]=='"' ){
1f0d0 0a 20 20 20 20 20 20 69 6e 74 20 64 65 6c 69 6d  .      int delim
1f0e0 20 3d 20 7a 4c 69 6e 65 5b 68 2b 2b 5d 3b 0a 20   = zLine[h++];. 
1f0f0 20 20 20 20 20 61 7a 41 72 67 5b 6e 41 72 67 2b       azArg[nArg+
1f100 2b 5d 20 3d 20 26 7a 4c 69 6e 65 5b 68 5d 3b 0a  +] = &zLine[h];.
1f110 20 20 20 20 20 20 77 68 69 6c 65 28 20 7a 4c 69        while( zLi
1f120 6e 65 5b 68 5d 20 26 26 20 7a 4c 69 6e 65 5b 68  ne[h] && zLine[h
1f130 5d 21 3d 64 65 6c 69 6d 20 29 7b 0a 20 20 20 20  ]!=delim ){.    
1f140 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 5b 68 5d      if( zLine[h]
1f150 3d 3d 27 5c 5c 27 20 26 26 20 64 65 6c 69 6d 3d  =='\\' && delim=
1f160 3d 27 22 27 20 26 26 20 7a 4c 69 6e 65 5b 68 2b  ='"' && zLine[h+
1f170 31 5d 21 3d 30 20 29 20 68 2b 2b 3b 0a 20 20 20  1]!=0 ) h++;.   
1f180 20 20 20 20 20 68 2b 2b 3b 0a 20 20 20 20 20 20       h++;.      
1f190 7d 0a 20 20 20 20 20 20 69 66 28 20 7a 4c 69 6e  }.      if( zLin
1f1a0 65 5b 68 5d 3d 3d 64 65 6c 69 6d 20 29 7b 0a 20  e[h]==delim ){. 
1f1b0 20 20 20 20 20 20 20 7a 4c 69 6e 65 5b 68 2b 2b         zLine[h++
1f1c0 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  ] = 0;.      }. 
1f1d0 20 20 20 20 20 69 66 28 20 64 65 6c 69 6d 3d 3d       if( delim==
1f1e0 27 22 27 20 29 20 72 65 73 6f 6c 76 65 5f 62 61  '"' ) resolve_ba
1f1f0 63 6b 73 6c 61 73 68 65 73 28 61 7a 41 72 67 5b  ckslashes(azArg[
1f200 6e 41 72 67 2d 31 5d 29 3b 0a 20 20 20 20 7d 65  nArg-1]);.    }e
1f210 6c 73 65 7b 0a 20 20 20 20 20 20 61 7a 41 72 67  lse{.      azArg
1f220 5b 6e 41 72 67 2b 2b 5d 20 3d 20 26 7a 4c 69 6e  [nArg++] = &zLin
1f230 65 5b 68 5d 3b 0a 20 20 20 20 20 20 77 68 69 6c  e[h];.      whil
1f240 65 28 20 7a 4c 69 6e 65 5b 68 5d 20 26 26 20 21  e( zLine[h] && !
1f250 49 73 53 70 61 63 65 28 7a 4c 69 6e 65 5b 68 5d  IsSpace(zLine[h]
1f260 29 20 29 7b 20 68 2b 2b 3b 20 7d 0a 20 20 20 20  ) ){ h++; }.    
1f270 20 20 69 66 28 20 7a 4c 69 6e 65 5b 68 5d 20 29    if( zLine[h] )
1f280 20 7a 4c 69 6e 65 5b 68 2b 2b 5d 20 3d 20 30 3b   zLine[h++] = 0;
1f290 0a 20 20 20 20 20 20 72 65 73 6f 6c 76 65 5f 62  .      resolve_b
1f2a0 61 63 6b 73 6c 61 73 68 65 73 28 61 7a 41 72 67  ackslashes(azArg
1f2b0 5b 6e 41 72 67 2d 31 5d 29 3b 0a 20 20 20 20 7d  [nArg-1]);.    }
1f2c0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 50 72 6f 63 65  .  }..  /* Proce
1f2d0 73 73 20 74 68 65 20 69 6e 70 75 74 20 6c 69 6e  ss the input lin
1f2e0 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 6e 41  e..  */.  if( nA
1f2f0 72 67 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  rg==0 ) return 0
1f300 3b 20 2f 2a 20 6e 6f 20 74 6f 6b 65 6e 73 2c 20  ; /* no tokens, 
1f310 6e 6f 20 65 72 72 6f 72 20 2a 2f 0a 20 20 6e 20  no error */.  n 
1f320 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a 41 72 67  = strlen30(azArg
1f330 5b 30 5d 29 3b 0a 20 20 63 20 3d 20 61 7a 41 72  [0]);.  c = azAr
1f340 67 5b 30 5d 5b 30 5d 3b 0a 0a 23 69 66 6e 64 65  g[0][0];..#ifnde
1f350 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
1f360 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 69 66  THORIZATION.  if
1f370 28 20 63 3d 3d 27 61 27 20 26 26 20 73 74 72 6e  ( c=='a' && strn
1f380 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 61  cmp(azArg[0], "a
1f390 75 74 68 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  uth", n)==0 ){. 
1f3a0 20 20 20 69 66 28 20 6e 41 72 67 21 3d 32 20 29     if( nArg!=2 )
1f3b0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
1f3c0 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
1f3d0 65 3a 20 2e 61 75 74 68 20 4f 4e 7c 4f 46 46 5c  e: .auth ON|OFF\
1f3e0 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
1f3f0 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65  1;.      goto me
1f400 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
1f410 0a 20 20 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f  .    }.    open_
1f420 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 69 66  db(p, 0);.    if
1f430 28 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61  ( booleanValue(a
1f440 7a 41 72 67 5b 31 5d 29 20 29 7b 0a 20 20 20 20  zArg[1]) ){.    
1f450 20 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75    sqlite3_set_au
1f460 74 68 6f 72 69 7a 65 72 28 70 2d 3e 64 62 2c 20  thorizer(p->db, 
1f470 73 68 65 6c 6c 41 75 74 68 2c 20 70 29 3b 0a 20  shellAuth, p);. 
1f480 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1f490 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74 68  sqlite3_set_auth
1f4a0 6f 72 69 7a 65 72 28 70 2d 3e 64 62 2c 20 30 2c  orizer(p->db, 0,
1f4b0 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c   0);.    }.  }el
1f4c0 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  se.#endif..  if(
1f4d0 20 28 63 3d 3d 27 62 27 20 26 26 20 6e 3e 3d 33   (c=='b' && n>=3
1f4e0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
1f4f0 67 5b 30 5d 2c 20 22 62 61 63 6b 75 70 22 2c 20  g[0], "backup", 
1f500 6e 29 3d 3d 30 29 0a 20 20 20 7c 7c 20 28 63 3d  n)==0).   || (c=
1f510 3d 27 73 27 20 26 26 20 6e 3e 3d 33 20 26 26 20  ='s' && n>=3 && 
1f520 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
1f530 2c 20 22 73 61 76 65 22 2c 20 6e 29 3d 3d 30 29  , "save", n)==0)
1f540 0a 20 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20  .  ){.    const 
1f550 63 68 61 72 20 2a 7a 44 65 73 74 46 69 6c 65 20  char *zDestFile 
1f560 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  = 0;.    const c
1f570 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b 0a 20 20  har *zDb = 0;.  
1f580 20 20 73 71 6c 69 74 65 33 20 2a 70 44 65 73 74    sqlite3 *pDest
1f590 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 61  ;.    sqlite3_ba
1f5a0 63 6b 75 70 20 2a 70 42 61 63 6b 75 70 3b 0a 20  ckup *pBackup;. 
1f5b0 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 66 6f     int j;.    fo
1f5c0 72 28 6a 3d 31 3b 20 6a 3c 6e 41 72 67 3b 20 6a  r(j=1; j<nArg; j
1f5d0 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  ++){.      const
1f5e0 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67   char *z = azArg
1f5f0 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  [j];.      if( z
1f600 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  [0]=='-' ){.    
1f610 20 20 20 20 77 68 69 6c 65 28 20 7a 5b 30 5d 3d      while( z[0]=
1f620 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20 20 20  ='-' ) z++;.    
1f630 20 20 20 20 2f 2a 20 4e 6f 20 6f 70 74 69 6f 6e      /* No option
1f640 73 20 74 6f 20 70 72 6f 63 65 73 73 20 61 74 20  s to process at 
1f650 74 68 69 73 20 74 69 6d 65 20 2a 2f 0a 20 20 20  this time */.   
1f660 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
1f670 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
1f680 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6f 70  err, "unknown op
1f690 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 61 7a 41  tion: %s\n", azA
1f6a0 72 67 5b 6a 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[j]);.        
1f6b0 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20    return 1;.    
1f6c0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
1f6d0 65 20 69 66 28 20 7a 44 65 73 74 46 69 6c 65 3d  e if( zDestFile=
1f6e0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 44  =0 ){.        zD
1f6f0 65 73 74 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b  estFile = azArg[
1f700 6a 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  j];.      }else 
1f710 69 66 28 20 7a 44 62 3d 3d 30 20 29 7b 0a 20 20  if( zDb==0 ){.  
1f720 20 20 20 20 20 20 7a 44 62 20 3d 20 7a 44 65 73        zDb = zDes
1f730 74 46 69 6c 65 3b 0a 20 20 20 20 20 20 20 20 7a  tFile;.        z
1f740 44 65 73 74 46 69 6c 65 20 3d 20 61 7a 41 72 67  DestFile = azArg
1f750 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  [j];.      }else
1f760 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
1f770 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 74 6f  intf(stderr, "to
1f780 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e 74 73  o many arguments
1f790 20 74 6f 20 2e 62 61 63 6b 75 70 5c 6e 22 29 3b   to .backup\n");
1f7a0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
1f7b0 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  1;.      }.    }
1f7c0 0a 20 20 20 20 69 66 28 20 7a 44 65 73 74 46 69  .    if( zDestFi
1f7d0 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  le==0 ){.      r
1f7e0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
1f7f0 2c 20 22 6d 69 73 73 69 6e 67 20 46 49 4c 45 4e  , "missing FILEN
1f800 41 4d 45 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20  AME argument on 
1f810 2e 62 61 63 6b 75 70 5c 6e 22 29 3b 0a 20 20 20  .backup\n");.   
1f820 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
1f830 20 7d 0a 20 20 20 20 69 66 28 20 7a 44 62 3d 3d   }.    if( zDb==
1f840 30 20 29 20 7a 44 62 20 3d 20 22 6d 61 69 6e 22  0 ) zDb = "main"
1f850 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
1f860 65 33 5f 6f 70 65 6e 28 7a 44 65 73 74 46 69 6c  e3_open(zDestFil
1f870 65 2c 20 26 70 44 65 73 74 29 3b 0a 20 20 20 20  e, &pDest);.    
1f880 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1f890 4b 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  K ){.      utf8_
1f8a0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1f8b0 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70  Error: cannot op
1f8c0 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 44  en \"%s\"\n", zD
1f8d0 65 73 74 46 69 6c 65 29 3b 0a 20 20 20 20 20 20  estFile);.      
1f8e0 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 44  sqlite3_close(pD
1f8f0 65 73 74 29 3b 0a 20 20 20 20 20 20 72 65 74 75  est);.      retu
1f900 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rn 1;.    }.    
1f910 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20  open_db(p, 0);. 
1f920 20 20 20 70 42 61 63 6b 75 70 20 3d 20 73 71 6c     pBackup = sql
1f930 69 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69 74  ite3_backup_init
1f940 28 70 44 65 73 74 2c 20 22 6d 61 69 6e 22 2c 20  (pDest, "main", 
1f950 70 2d 3e 64 62 2c 20 7a 44 62 29 3b 0a 20 20 20  p->db, zDb);.   
1f960 20 69 66 28 20 70 42 61 63 6b 75 70 3d 3d 30 20   if( pBackup==0 
1f970 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
1f980 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
1f990 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69  ror: %s\n", sqli
1f9a0 74 65 33 5f 65 72 72 6d 73 67 28 70 44 65 73 74  te3_errmsg(pDest
1f9b0 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ));.      sqlite
1f9c0 33 5f 63 6c 6f 73 65 28 70 44 65 73 74 29 3b 0a  3_close(pDest);.
1f9d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
1f9e0 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c 65 28      }.    while(
1f9f0 20 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 5f    (rc = sqlite3_
1fa00 62 61 63 6b 75 70 5f 73 74 65 70 28 70 42 61 63  backup_step(pBac
1fa10 6b 75 70 2c 31 30 30 29 29 3d 3d 53 51 4c 49 54  kup,100))==SQLIT
1fa20 45 5f 4f 4b 20 29 7b 7d 0a 20 20 20 20 73 71 6c  E_OK ){}.    sql
1fa30 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69  ite3_backup_fini
1fa40 73 68 28 70 42 61 63 6b 75 70 29 3b 0a 20 20 20  sh(pBackup);.   
1fa50 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1fa60 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 72 63  DONE ){.      rc
1fa70 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
1fa80 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
1fa90 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
1faa0 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65  r: %s\n", sqlite
1fab0 33 5f 65 72 72 6d 73 67 28 70 44 65 73 74 29 29  3_errmsg(pDest))
1fac0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
1fad0 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
1fae0 33 5f 63 6c 6f 73 65 28 70 44 65 73 74 29 3b 0a  3_close(pDest);.
1faf0 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
1fb00 3d 3d 27 62 27 20 26 26 20 6e 3e 3d 33 20 26 26  =='b' && n>=3 &&
1fb10 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
1fb20 5d 2c 20 22 62 61 69 6c 22 2c 20 6e 29 3d 3d 30  ], "bail", n)==0
1fb30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   ){.    if( nArg
1fb40 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 62 61 69  ==2 ){.      bai
1fb50 6c 5f 6f 6e 5f 65 72 72 6f 72 20 3d 20 62 6f 6f  l_on_error = boo
1fb60 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b  leanValue(azArg[
1fb70 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  1]);.    }else{.
1fb80 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
1fb90 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
1fba0 20 2e 62 61 69 6c 20 6f 6e 7c 6f 66 66 5c 6e 22   .bail on|off\n"
1fbb0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
1fbc0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
1fbd0 20 20 69 66 28 20 63 3d 3d 27 62 27 20 26 26 20    if( c=='b' && 
1fbe0 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28  n>=3 && strncmp(
1fbf0 61 7a 41 72 67 5b 30 5d 2c 20 22 62 69 6e 61 72  azArg[0], "binar
1fc00 79 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  y", n)==0 ){.   
1fc10 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a   if( nArg==2 ){.
1fc20 20 20 20 20 20 20 69 66 28 20 62 6f 6f 6c 65 61        if( boolea
1fc30 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29  nValue(azArg[1])
1fc40 20 29 7b 0a 20 20 20 20 20 20 20 20 73 65 74 42   ){.        setB
1fc50 69 6e 61 72 79 4d 6f 64 65 28 70 2d 3e 6f 75 74  inaryMode(p->out
1fc60 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  , 1);.      }els
1fc70 65 7b 0a 20 20 20 20 20 20 20 20 73 65 74 54 65  e{.        setTe
1fc80 78 74 4d 6f 64 65 28 70 2d 3e 6f 75 74 2c 20 31  xtMode(p->out, 1
1fc90 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
1fca0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
1fcb0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1fcc0 55 73 61 67 65 3a 20 2e 62 69 6e 61 72 79 20 6f  Usage: .binary o
1fcd0 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20  n|off\n");.     
1fce0 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20   rc = 1;.    }. 
1fcf0 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
1fd00 3d 27 63 27 20 26 26 20 73 74 72 63 6d 70 28 61  ='c' && strcmp(a
1fd10 7a 41 72 67 5b 30 5d 2c 22 63 64 22 29 3d 3d 30  zArg[0],"cd")==0
1fd20 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   ){.    if( nArg
1fd30 3d 3d 32 20 29 7b 0a 23 69 66 20 64 65 66 69 6e  ==2 ){.#if defin
1fd40 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65  ed(_WIN32) || de
1fd50 66 69 6e 65 64 28 57 49 4e 33 32 29 0a 20 20 20  fined(WIN32).   
1fd60 20 20 20 77 63 68 61 72 5f 74 20 2a 7a 20 3d 20     wchar_t *z = 
1fd70 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75 74  sqlite3_win32_ut
1fd80 66 38 5f 74 6f 5f 75 6e 69 63 6f 64 65 28 61 7a  f8_to_unicode(az
1fd90 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 72  Arg[1]);.      r
1fda0 63 20 3d 20 21 53 65 74 43 75 72 72 65 6e 74 44  c = !SetCurrentD
1fdb0 69 72 65 63 74 6f 72 79 57 28 7a 29 3b 0a 20 20  irectoryW(z);.  
1fdc0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
1fdd0 28 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 20  (z);.#else.     
1fde0 20 72 63 20 3d 20 63 68 64 69 72 28 61 7a 41 72   rc = chdir(azAr
1fdf0 67 5b 31 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20  g[1]);.#endif.  
1fe00 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
1fe10 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
1fe20 66 28 73 74 64 65 72 72 2c 20 22 43 61 6e 6e 6f  f(stderr, "Canno
1fe30 74 20 63 68 61 6e 67 65 20 74 6f 20 64 69 72 65  t change to dire
1fe40 63 74 6f 72 79 20 5c 22 25 73 5c 22 5c 6e 22 2c  ctory \"%s\"\n",
1fe50 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
1fe60 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
1fe70 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
1fe80 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
1fe90 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
1fea0 2e 63 64 20 44 49 52 45 43 54 4f 52 59 5c 6e 22  .cd DIRECTORY\n"
1feb0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
1fec0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
1fed0 20 20 2f 2a 20 54 68 65 20 75 6e 64 6f 63 75 6d    /* The undocum
1fee0 65 6e 74 65 64 20 22 2e 62 72 65 61 6b 70 6f 69  ented ".breakpoi
1fef0 6e 74 22 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73  nt" command caus
1ff00 65 73 20 61 20 63 61 6c 6c 20 74 6f 20 74 68 65  es a call to the
1ff10 20 6e 6f 2d 6f 70 0a 20 20 2a 2a 20 72 6f 75 74   no-op.  ** rout
1ff20 69 6e 65 20 6e 61 6d 65 64 20 74 65 73 74 5f 62  ine named test_b
1ff30 72 65 61 6b 70 6f 69 6e 74 28 29 2e 0a 20 20 2a  reakpoint()..  *
1ff40 2f 0a 20 20 69 66 28 20 63 3d 3d 27 62 27 20 26  /.  if( c=='b' &
1ff50 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d  & n>=3 && strncm
1ff60 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 62 72 65  p(azArg[0], "bre
1ff70 61 6b 70 6f 69 6e 74 22 2c 20 6e 29 3d 3d 30 20  akpoint", n)==0 
1ff80 29 7b 0a 20 20 20 20 74 65 73 74 5f 62 72 65 61  ){.    test_brea
1ff90 6b 70 6f 69 6e 74 28 29 3b 0a 20 20 7d 65 6c 73  kpoint();.  }els
1ffa0 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 63 27 20  e..  if( c=='c' 
1ffb0 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63  && n>=3 && strnc
1ffc0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 63 68  mp(azArg[0], "ch
1ffd0 61 6e 67 65 73 22 2c 20 6e 29 3d 3d 30 20 29 7b  anges", n)==0 ){
1ffe0 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32  .    if( nArg==2
1fff0 20 29 7b 0a 20 20 20 20 20 20 73 65 74 4f 72 43   ){.      setOrC
20000 6c 65 61 72 46 6c 61 67 28 70 2c 20 53 48 46 4c  learFlag(p, SHFL
20010 47 5f 43 6f 75 6e 74 43 68 61 6e 67 65 73 2c 20  G_CountChanges, 
20020 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d  azArg[1]);.    }
20030 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
20040 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
20050 55 73 61 67 65 3a 20 2e 63 68 61 6e 67 65 73 20  Usage: .changes 
20060 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20  on|off\n");.    
20070 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a    rc = 1;.    }.
20080 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 20 43 61    }else..  /* Ca
20090 6e 63 65 6c 20 6f 75 74 70 75 74 20 72 65 64 69  ncel output redi
200a0 72 65 63 74 69 6f 6e 2c 20 69 66 20 69 74 20 69  rection, if it i
200b0 73 20 63 75 72 72 65 6e 74 6c 79 20 73 65 74 20  s currently set 
200c0 28 62 79 20 2e 74 65 73 74 63 61 73 65 29 0a 20  (by .testcase). 
200d0 20 2a 2a 20 54 68 65 6e 20 72 65 61 64 20 74 68   ** Then read th
200e0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
200f0 20 74 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78   testcase-out.tx
20100 74 20 66 69 6c 65 20 61 6e 64 20 63 6f 6d 70 61  t file and compa
20110 72 65 20 61 67 61 69 6e 73 74 0a 20 20 2a 2a 20  re against.  ** 
20120 61 7a 41 72 67 5b 31 5d 2e 20 20 49 66 20 74 68  azArg[1].  If th
20130 65 72 65 20 61 72 65 20 64 69 66 66 65 72 65 6e  ere are differen
20140 63 65 73 2c 20 72 65 70 6f 72 74 20 61 6e 20 65  ces, report an e
20150 72 72 6f 72 20 61 6e 64 20 65 78 69 74 2e 0a 20  rror and exit.. 
20160 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27 63 27   */.  if( c=='c'
20170 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e   && n>=3 && strn
20180 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 63  cmp(azArg[0], "c
20190 68 65 63 6b 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  heck", n)==0 ){.
201a0 20 20 20 20 63 68 61 72 20 2a 7a 52 65 73 20 3d      char *zRes =
201b0 20 30 3b 0a 20 20 20 20 6f 75 74 70 75 74 5f 72   0;.    output_r
201c0 65 73 65 74 28 70 29 3b 0a 20 20 20 20 69 66 28  eset(p);.    if(
201d0 20 6e 41 72 67 21 3d 32 20 29 7b 0a 20 20 20 20   nArg!=2 ){.    
201e0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
201f0 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 63 68  err, "Usage: .ch
20200 65 63 6b 20 47 4c 4f 42 2d 50 41 54 54 45 52 4e  eck GLOB-PATTERN
20210 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
20220 20 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   2;.    }else if
20230 28 20 28 7a 52 65 73 20 3d 20 72 65 61 64 46 69  ( (zRes = readFi
20240 6c 65 28 22 74 65 73 74 63 61 73 65 2d 6f 75 74  le("testcase-out
20250 2e 74 78 74 22 2c 20 30 29 29 3d 3d 30 20 29 7b  .txt", 0))==0 ){
20260 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
20270 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
20280 3a 20 63 61 6e 6e 6f 74 20 72 65 61 64 20 27 74  : cannot read 't
20290 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 27  estcase-out.txt'
202a0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
202b0 20 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   2;.    }else if
202c0 28 20 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28  ( testcase_glob(
202d0 61 7a 41 72 67 5b 31 5d 2c 7a 52 65 73 29 3d 3d  azArg[1],zRes)==
202e0 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  0 ){.      utf8_
202f0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 0a 20  printf(stderr,. 
20300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20310 22 74 65 73 74 63 61 73 65 2d 25 73 20 46 41 49  "testcase-%s FAI
20320 4c 45 44 5c 6e 20 45 78 70 65 63 74 65 64 3a 20  LED\n Expected: 
20330 5b 25 73 5d 5c 6e 20 20 20 20 20 20 47 6f 74 3a  [%s]\n      Got:
20340 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20   [%s]\n",.      
20350 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e 7a 54             p->zT
20360 65 73 74 63 61 73 65 2c 20 61 7a 41 72 67 5b 31  estcase, azArg[1
20370 5d 2c 20 7a 52 65 73 29 3b 0a 20 20 20 20 20 20  ], zRes);.      
20380 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  rc = 1;.    }els
20390 65 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  e{.      utf8_pr
203a0 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 74 65  intf(stdout, "te
203b0 73 74 63 61 73 65 2d 25 73 20 6f 6b 5c 6e 22 2c  stcase-%s ok\n",
203c0 20 70 2d 3e 7a 54 65 73 74 63 61 73 65 29 3b 0a   p->zTestcase);.
203d0 20 20 20 20 20 20 70 2d 3e 6e 43 68 65 63 6b 2b        p->nCheck+
203e0 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  +;.    }.    sql
203f0 69 74 65 33 5f 66 72 65 65 28 7a 52 65 73 29 3b  ite3_free(zRes);
20400 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
20410 63 3d 3d 27 63 27 20 26 26 20 73 74 72 6e 63 6d  c=='c' && strncm
20420 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 63 6c 6f  p(azArg[0], "clo
20430 6e 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  ne", n)==0 ){.  
20440 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b    if( nArg==2 ){
20450 0a 20 20 20 20 20 20 74 72 79 54 6f 43 6c 6f 6e  .      tryToClon
20460 65 28 70 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a  e(p, azArg[1]);.
20470 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
20480 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
20490 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 63 6c 6f  rr, "Usage: .clo
204a0 6e 65 20 46 49 4c 45 4e 41 4d 45 5c 6e 22 29 3b  ne FILENAME\n");
204b0 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
204c0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
204d0 69 66 28 20 63 3d 3d 27 64 27 20 26 26 20 6e 3e  if( c=='d' && n>
204e0 31 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  1 && strncmp(azA
204f0 72 67 5b 30 5d 2c 20 22 64 61 74 61 62 61 73 65  rg[0], "database
20500 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  s", n)==0 ){.   
20510 20 53 68 65 6c 6c 53 74 61 74 65 20 64 61 74 61   ShellState data
20520 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72  ;.    char *zErr
20530 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 6f 70 65  Msg = 0;.    ope
20540 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20  n_db(p, 0);.    
20550 6d 65 6d 63 70 79 28 26 64 61 74 61 2c 20 70 2c  memcpy(&data, p,
20560 20 73 69 7a 65 6f 66 28 64 61 74 61 29 29 3b 0a   sizeof(data));.
20570 20 20 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61      data.showHea
20580 64 65 72 20 3d 20 30 3b 0a 20 20 20 20 64 61 74  der = 0;.    dat
20590 61 2e 63 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d  a.cMode = data.m
205a0 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b  ode = MODE_List;
205b0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
205c0 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 64 61 74  rintf(sizeof(dat
205d0 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c  a.colSeparator),
205e0 64 61 74 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f  data.colSeparato
205f0 72 2c 22 3a 20 22 29 3b 0a 20 20 20 20 64 61 74  r,": ");.    dat
20600 61 2e 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 73  a.cnt = 0;.    s
20610 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64  qlite3_exec(p->d
20620 62 2c 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c  b, "SELECT name,
20630 20 66 69 6c 65 20 46 52 4f 4d 20 70 72 61 67 6d   file FROM pragm
20640 61 5f 64 61 74 61 62 61 73 65 5f 6c 69 73 74 22  a_database_list"
20650 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
20660 20 20 20 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61     callback, &da
20670 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20  ta, &zErrMsg);. 
20680 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29     if( zErrMsg )
20690 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
206a0 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f  ntf(stderr,"Erro
206b0 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73  r: %s\n", zErrMs
206c0 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  g);.      sqlite
206d0 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b  3_free(zErrMsg);
206e0 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
206f0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
20700 69 66 28 20 63 3d 3d 27 64 27 20 26 26 20 73 74  if( c=='d' && st
20710 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
20720 22 64 62 69 6e 66 6f 22 2c 20 6e 29 3d 3d 30 20  "dbinfo", n)==0 
20730 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 68 65 6c  ){.    rc = shel
20740 6c 5f 64 62 69 6e 66 6f 5f 63 6f 6d 6d 61 6e 64  l_dbinfo_command
20750 28 70 2c 20 6e 41 72 67 2c 20 61 7a 41 72 67 29  (p, nArg, azArg)
20760 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  ;.  }else..  if(
20770 20 63 3d 3d 27 64 27 20 26 26 20 73 74 72 6e 63   c=='d' && strnc
20780 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 64 75  mp(azArg[0], "du
20790 6d 70 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  mp", n)==0 ){.  
207a0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c    const char *zL
207b0 69 6b 65 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74  ike = 0;.    int
207c0 20 69 3b 0a 20 20 20 20 69 6e 74 20 73 61 76 65   i;.    int save
207d0 64 53 68 6f 77 48 65 61 64 65 72 20 3d 20 70 2d  dShowHeader = p-
207e0 3e 73 68 6f 77 48 65 61 64 65 72 3b 0a 20 20 20  >showHeader;.   
207f0 20 53 68 65 6c 6c 43 6c 65 61 72 46 6c 61 67 28   ShellClearFlag(
20800 70 2c 20 53 48 46 4c 47 5f 50 72 65 73 65 72 76  p, SHFLG_Preserv
20810 65 52 6f 77 69 64 7c 53 48 46 4c 47 5f 4e 65 77  eRowid|SHFLG_New
20820 6c 69 6e 65 73 29 3b 0a 20 20 20 20 66 6f 72 28  lines);.    for(
20830 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=1; i<nArg; i++
20840 29 7b 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41  ){.      if( azA
20850 72 67 5b 69 5d 5b 30 5d 3d 3d 27 2d 27 20 29 7b  rg[i][0]=='-' ){
20860 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63  .        const c
20870 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69  har *z = azArg[i
20880 5d 2b 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ]+1;.        if(
20890 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b   z[0]=='-' ) z++
208a0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74  ;.        if( st
208b0 72 63 6d 70 28 7a 2c 22 70 72 65 73 65 72 76 65  rcmp(z,"preserve
208c0 2d 72 6f 77 69 64 73 22 29 3d 3d 30 20 29 7b 0a  -rowids")==0 ){.
208d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
208e0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
208f0 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72            raw_pr
20900 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 54 68  intf(stderr, "Th
20910 65 20 2d 2d 70 72 65 73 65 72 76 65 2d 72 6f 77  e --preserve-row
20920 69 64 73 20 6f 70 74 69 6f 6e 20 69 73 20 6e 6f  ids option is no
20930 74 20 63 6f 6d 70 61 74 69 62 6c 65 22 0a 20 20  t compatible".  
20940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20950 20 20 20 20 20 20 20 20 20 20 20 22 20 77 69 74             " wit
20960 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  h SQLITE_OMIT_VI
20970 52 54 55 41 4c 54 41 42 4c 45 5c 6e 22 29 3b 0a  RTUALTABLE\n");.
20980 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 31            rc = 1
20990 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
209a0 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
209b0 69 74 3b 0a 23 65 6c 73 65 0a 20 20 20 20 20 20  it;.#else.      
209c0 20 20 20 20 53 68 65 6c 6c 53 65 74 46 6c 61 67      ShellSetFlag
209d0 28 70 2c 20 53 48 46 4c 47 5f 50 72 65 73 65 72  (p, SHFLG_Preser
209e0 76 65 52 6f 77 69 64 29 3b 0a 23 65 6e 64 69 66  veRowid);.#endif
209f0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 20  .        }else. 
20a00 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d         if( strcm
20a10 70 28 7a 2c 22 6e 65 77 6c 69 6e 65 73 22 29 3d  p(z,"newlines")=
20a20 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
20a30 53 68 65 6c 6c 53 65 74 46 6c 61 67 28 70 2c 20  ShellSetFlag(p, 
20a40 53 48 46 4c 47 5f 4e 65 77 6c 69 6e 65 73 29 3b  SHFLG_Newlines);
20a50 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 20  .        }else. 
20a60 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
20a70 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
20a80 64 65 72 72 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f  derr, "Unknown o
20a90 70 74 69 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20  ption \"%s\" on 
20aa0 5c 22 2e 64 75 6d 70 5c 22 5c 6e 22 2c 20 61 7a  \".dump\"\n", az
20ab0 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[i]);.       
20ac0 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
20ad0 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
20ae0 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
20af0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
20b00 73 65 20 69 66 28 20 7a 4c 69 6b 65 20 29 7b 0a  se if( zLike ){.
20b10 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
20b20 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
20b30 65 3a 20 2e 64 75 6d 70 20 3f 2d 2d 70 72 65 73  e: .dump ?--pres
20b40 65 72 76 65 2d 72 6f 77 69 64 73 3f 20 22 0a 20  erve-rowids? ". 
20b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b60 20 20 20 20 20 20 20 20 20 20 22 3f 2d 2d 6e 65            "?--ne
20b70 77 6c 69 6e 65 73 3f 20 3f 4c 49 4b 45 2d 50 41  wlines? ?LIKE-PA
20b80 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20 20  TTERN?\n");.    
20b90 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
20ba0 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
20bb0 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
20bc0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
20bd0 20 7a 4c 69 6b 65 20 3d 20 61 7a 41 72 67 5b 69   zLike = azArg[i
20be0 5d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ];.      }.    }
20bf0 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20  .    open_db(p, 
20c00 30 29 3b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20  0);.    /* When 
20c10 70 6c 61 79 69 6e 67 20 62 61 63 6b 20 61 20 22  playing back a "
20c20 64 75 6d 70 22 2c 20 74 68 65 20 63 6f 6e 74 65  dump", the conte
20c30 6e 74 20 6d 69 67 68 74 20 61 70 70 65 61 72 20  nt might appear 
20c40 69 6e 20 61 6e 20 6f 72 64 65 72 0a 20 20 20 20  in an order.    
20c50 2a 2a 20 77 68 69 63 68 20 63 61 75 73 65 73 20  ** which causes 
20c60 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
20c70 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
20c80 73 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64  s to be violated
20c90 2e 0a 20 20 20 20 2a 2a 20 53 6f 20 64 69 73 61  ..    ** So disa
20ca0 62 6c 65 20 66 6f 72 65 69 67 6e 2d 6b 65 79 20  ble foreign-key 
20cb0 63 6f 6e 73 74 72 61 69 6e 74 20 65 6e 66 6f 72  constraint enfor
20cc0 63 65 6d 65 6e 74 20 74 6f 20 70 72 65 76 65 6e  cement to preven
20cd0 74 20 70 72 6f 62 6c 65 6d 73 2e 20 2a 2f 0a 20  t problems. */. 
20ce0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
20cf0 3e 6f 75 74 2c 20 22 50 52 41 47 4d 41 20 66 6f  >out, "PRAGMA fo
20d00 72 65 69 67 6e 5f 6b 65 79 73 3d 4f 46 46 3b 5c  reign_keys=OFF;\
20d10 6e 22 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69  n");.    raw_pri
20d20 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 42 45 47  ntf(p->out, "BEG
20d30 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 5c  IN TRANSACTION;\
20d40 6e 22 29 3b 0a 20 20 20 20 70 2d 3e 77 72 69 74  n");.    p->writ
20d50 61 62 6c 65 53 63 68 65 6d 61 20 3d 20 30 3b 0a  ableSchema = 0;.
20d60 20 20 20 20 70 2d 3e 73 68 6f 77 48 65 61 64 65      p->showHeade
20d70 72 20 3d 20 30 3b 0a 20 20 20 20 2f 2a 20 53 65  r = 0;.    /* Se
20d80 74 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d  t writable_schem
20d90 61 3d 4f 4e 20 73 69 6e 63 65 20 64 6f 69 6e 67  a=ON since doing
20da0 20 73 6f 20 66 6f 72 63 65 73 20 53 51 4c 69 74   so forces SQLit
20db0 65 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 0a  e to initialize.
20dc0 20 20 20 20 2a 2a 20 61 73 20 6d 75 63 68 20 6f      ** as much o
20dd0 66 20 74 68 65 20 73 63 68 65 6d 61 20 61 73 20  f the schema as 
20de0 69 74 20 63 61 6e 20 65 76 65 6e 20 69 66 20 74  it can even if t
20df0 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
20e00 20 74 61 62 6c 65 20 69 73 0a 20 20 20 20 2a 2a   table is.    **
20e10 20 63 6f 72 72 75 70 74 2e 20 2a 2f 0a 20 20 20   corrupt. */.   
20e20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d   sqlite3_exec(p-
20e30 3e 64 62 2c 20 22 53 41 56 45 50 4f 49 4e 54 20  >db, "SAVEPOINT 
20e40 64 75 6d 70 3b 20 50 52 41 47 4d 41 20 77 72 69  dump; PRAGMA wri
20e50 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 22  table_schema=ON"
20e60 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  , 0, 0, 0);.    
20e70 70 2d 3e 6e 45 72 72 20 3d 20 30 3b 0a 20 20 20  p->nErr = 0;.   
20e80 20 69 66 28 20 7a 4c 69 6b 65 3d 3d 30 20 29 7b   if( zLike==0 ){
20e90 0a 20 20 20 20 20 20 72 75 6e 5f 73 63 68 65 6d  .      run_schem
20ea0 61 5f 64 75 6d 70 5f 71 75 65 72 79 28 70 2c 0a  a_dump_query(p,.
20eb0 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20          "SELECT 
20ec0 6e 61 6d 65 2c 20 74 79 70 65 2c 20 73 71 6c 20  name, type, sql 
20ed0 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
20ee0 65 72 20 22 0a 20 20 20 20 20 20 20 20 22 57 48  er ".        "WH
20ef0 45 52 45 20 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c  ERE sql NOT NULL
20f00 20 41 4e 44 20 74 79 70 65 3d 3d 27 74 61 62 6c   AND type=='tabl
20f10 65 27 20 41 4e 44 20 6e 61 6d 65 21 3d 27 73 71  e' AND name!='sq
20f20 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 27 22 0a  lite_sequence'".
20f30 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72        );.      r
20f40 75 6e 5f 73 63 68 65 6d 61 5f 64 75 6d 70 5f 71  un_schema_dump_q
20f50 75 65 72 79 28 70 2c 0a 20 20 20 20 20 20 20 20  uery(p,.        
20f60 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 74 79  "SELECT name, ty
20f70 70 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c  pe, sql FROM sql
20f80 69 74 65 5f 6d 61 73 74 65 72 20 22 0a 20 20 20  ite_master ".   
20f90 20 20 20 20 20 22 57 48 45 52 45 20 6e 61 6d 65       "WHERE name
20fa0 3d 3d 27 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  =='sqlite_sequen
20fb0 63 65 27 22 0a 20 20 20 20 20 20 29 3b 0a 20 20  ce'".      );.  
20fc0 20 20 20 20 72 75 6e 5f 74 61 62 6c 65 5f 64 75      run_table_du
20fd0 6d 70 5f 71 75 65 72 79 28 70 2c 0a 20 20 20 20  mp_query(p,.    
20fe0 20 20 20 20 22 53 45 4c 45 43 54 20 73 71 6c 20      "SELECT sql 
20ff0 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
21000 65 72 20 22 0a 20 20 20 20 20 20 20 20 22 57 48  er ".        "WH
21010 45 52 45 20 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c  ERE sql NOT NULL
21020 20 41 4e 44 20 74 79 70 65 20 49 4e 20 28 27 69   AND type IN ('i
21030 6e 64 65 78 27 2c 27 74 72 69 67 67 65 72 27 2c  ndex','trigger',
21040 27 76 69 65 77 27 29 22 2c 20 30 0a 20 20 20 20  'view')", 0.    
21050 20 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a    );.    }else{.
21060 20 20 20 20 20 20 63 68 61 72 20 2a 7a 53 71 6c        char *zSql
21070 3b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 73  ;.      zSql = s
21080 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 0a  qlite3_mprintf(.
21090 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20          "SELECT 
210a0 6e 61 6d 65 2c 20 74 79 70 65 2c 20 73 71 6c 20  name, type, sql 
210b0 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
210c0 65 72 20 22 0a 20 20 20 20 20 20 20 20 22 57 48  er ".        "WH
210d0 45 52 45 20 74 62 6c 5f 6e 61 6d 65 20 4c 49 4b  ERE tbl_name LIK
210e0 45 20 25 51 20 41 4e 44 20 74 79 70 65 3d 3d 27  E %Q AND type=='
210f0 74 61 62 6c 65 27 22 0a 20 20 20 20 20 20 20 20  table'".        
21100 22 20 20 41 4e 44 20 73 71 6c 20 4e 4f 54 20 4e  "  AND sql NOT N
21110 55 4c 4c 22 2c 20 7a 4c 69 6b 65 29 3b 0a 20 20  ULL", zLike);.  
21120 20 20 20 20 72 75 6e 5f 73 63 68 65 6d 61 5f 64      run_schema_d
21130 75 6d 70 5f 71 75 65 72 79 28 70 2c 7a 53 71 6c  ump_query(p,zSql
21140 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
21150 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20  _free(zSql);.   
21160 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65     zSql = sqlite
21170 33 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20 20 20  3_mprintf(.     
21180 20 20 20 22 53 45 4c 45 43 54 20 73 71 6c 20 46     "SELECT sql F
21190 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
211a0 72 20 22 0a 20 20 20 20 20 20 20 20 22 57 48 45  r ".        "WHE
211b0 52 45 20 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c 22  RE sql NOT NULL"
211c0 0a 20 20 20 20 20 20 20 20 22 20 20 41 4e 44 20  .        "  AND 
211d0 74 79 70 65 20 49 4e 20 28 27 69 6e 64 65 78 27  type IN ('index'
211e0 2c 27 74 72 69 67 67 65 72 27 2c 27 76 69 65 77  ,'trigger','view
211f0 27 29 22 0a 20 20 20 20 20 20 20 20 22 20 20 41  ')".        "  A
21200 4e 44 20 74 62 6c 5f 6e 61 6d 65 20 4c 49 4b 45  ND tbl_name LIKE
21210 20 25 51 22 2c 20 7a 4c 69 6b 65 29 3b 0a 20 20   %Q", zLike);.  
21220 20 20 20 20 72 75 6e 5f 74 61 62 6c 65 5f 64 75      run_table_du
21230 6d 70 5f 71 75 65 72 79 28 70 2c 20 7a 53 71 6c  mp_query(p, zSql
21240 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
21250 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a  te3_free(zSql);.
21260 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
21270 3e 77 72 69 74 61 62 6c 65 53 63 68 65 6d 61 20  >writableSchema 
21280 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
21290 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 50 52 41  ntf(p->out, "PRA
212a0 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68  GMA writable_sch
212b0 65 6d 61 3d 4f 46 46 3b 5c 6e 22 29 3b 0a 20 20  ema=OFF;\n");.  
212c0 20 20 20 20 70 2d 3e 77 72 69 74 61 62 6c 65 53      p->writableS
212d0 63 68 65 6d 61 20 3d 20 30 3b 0a 20 20 20 20 7d  chema = 0;.    }
212e0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65  .    sqlite3_exe
212f0 63 28 70 2d 3e 64 62 2c 20 22 50 52 41 47 4d 41  c(p->db, "PRAGMA
21300 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61   writable_schema
21310 3d 4f 46 46 3b 22 2c 20 30 2c 20 30 2c 20 30 29  =OFF;", 0, 0, 0)
21320 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78  ;.    sqlite3_ex
21330 65 63 28 70 2d 3e 64 62 2c 20 22 52 45 4c 45 41  ec(p->db, "RELEA
21340 53 45 20 64 75 6d 70 3b 22 2c 20 30 2c 20 30 2c  SE dump;", 0, 0,
21350 20 30 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69   0);.    raw_pri
21360 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e 6e  ntf(p->out, p->n
21370 45 72 72 20 3f 20 22 52 4f 4c 4c 42 41 43 4b 3b  Err ? "ROLLBACK;
21380 20 2d 2d 20 64 75 65 20 74 6f 20 65 72 72 6f 72   -- due to error
21390 73 5c 6e 22 20 3a 20 22 43 4f 4d 4d 49 54 3b 5c  s\n" : "COMMIT;\
213a0 6e 22 29 3b 0a 20 20 20 20 70 2d 3e 73 68 6f 77  n");.    p->show
213b0 48 65 61 64 65 72 20 3d 20 73 61 76 65 64 53 68  Header = savedSh
213c0 6f 77 48 65 61 64 65 72 3b 0a 20 20 7d 65 6c 73  owHeader;.  }els
213d0 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 65 27 20  e..  if( c=='e' 
213e0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
213f0 5b 30 5d 2c 20 22 65 63 68 6f 22 2c 20 6e 29 3d  [0], "echo", n)=
21400 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41  =0 ){.    if( nA
21410 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 73  rg==2 ){.      s
21420 65 74 4f 72 43 6c 65 61 72 46 6c 61 67 28 70 2c  etOrClearFlag(p,
21430 20 53 48 46 4c 47 5f 45 63 68 6f 2c 20 61 7a 41   SHFLG_Echo, azA
21440 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73  rg[1]);.    }els
21450 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  e{.      raw_pri
21460 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
21470 67 65 3a 20 2e 65 63 68 6f 20 6f 6e 7c 6f 66 66  ge: .echo on|off
21480 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
21490 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
214a0 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 65 27 20  e..  if( c=='e' 
214b0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
214c0 5b 30 5d 2c 20 22 65 71 70 22 2c 20 6e 29 3d 3d  [0], "eqp", n)==
214d0 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72  0 ){.    if( nAr
214e0 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 69 66  g==2 ){.      if
214f0 28 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 31  ( strcmp(azArg[1
21500 5d 2c 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a  ],"full")==0 ){.
21510 20 20 20 20 20 20 20 20 70 2d 3e 61 75 74 6f 45          p->autoE
21520 51 50 20 3d 20 32 3b 0a 20 20 20 20 20 20 7d 65  QP = 2;.      }e
21530 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e  lse{.        p->
21540 61 75 74 6f 45 51 50 20 3d 20 62 6f 6f 6c 65 61  autoEQP = boolea
21550 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29  nValue(azArg[1])
21560 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
21570 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  lse{.      raw_p
21580 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
21590 73 61 67 65 3a 20 2e 65 71 70 20 6f 6e 7c 6f 66  sage: .eqp on|of
215a0 66 7c 66 75 6c 6c 5c 6e 22 29 3b 0a 20 20 20 20  f|full\n");.    
215b0 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a    rc = 1;.    }.
215c0 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
215d0 3d 3d 27 65 27 20 26 26 20 73 74 72 6e 63 6d 70  =='e' && strncmp
215e0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 65 78 69 74  (azArg[0], "exit
215f0 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
21600 69 66 28 20 6e 41 72 67 3e 31 20 26 26 20 28 72  if( nArg>1 && (r
21610 63 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72  c = (int)integer
21620 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 29  Value(azArg[1]))
21630 21 3d 30 20 29 20 65 78 69 74 28 72 63 29 3b 0a  !=0 ) exit(rc);.
21640 20 20 20 20 72 63 20 3d 20 32 3b 0a 20 20 7d 65      rc = 2;.  }e
21650 6c 73 65 0a 0a 20 20 2f 2a 20 54 68 65 20 22 2e  lse..  /* The ".
21660 65 78 70 6c 61 69 6e 22 20 63 6f 6d 6d 61 6e 64  explain" command
21670 20 69 73 20 61 75 74 6f 6d 61 74 69 63 20 6e 6f   is automatic no
21680 77 2e 20 20 49 74 20 69 73 20 6c 61 72 67 65 6c  w.  It is largel
21690 79 20 70 6f 69 6e 74 6c 65 73 73 2e 20 20 49 74  y pointless.  It
216a0 0a 20 20 2a 2a 20 72 65 74 61 69 6e 65 64 20 70  .  ** retained p
216b0 75 72 65 6c 79 20 66 6f 72 20 62 61 63 6b 77 61  urely for backwa
216c0 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  rds compatibilit
216d0 79 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27 65  y */.  if( c=='e
216e0 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
216f0 72 67 5b 30 5d 2c 20 22 65 78 70 6c 61 69 6e 22  rg[0], "explain"
21700 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  , n)==0 ){.    i
21710 6e 74 20 76 61 6c 20 3d 20 31 3b 0a 20 20 20 20  nt val = 1;.    
21720 69 66 28 20 6e 41 72 67 3e 3d 32 20 29 7b 0a 20  if( nArg>=2 ){. 
21730 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
21740 61 7a 41 72 67 5b 31 5d 2c 22 61 75 74 6f 22 29  azArg[1],"auto")
21750 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 76  ==0 ){.        v
21760 61 6c 20 3d 20 39 39 3b 0a 20 20 20 20 20 20 7d  al = 99;.      }
21770 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 76 61  else{.        va
21780 6c 20 3d 20 20 62 6f 6f 6c 65 61 6e 56 61 6c 75  l =  booleanValu
21790 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  e(azArg[1]);.   
217a0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
217b0 66 28 20 76 61 6c 3d 3d 31 20 26 26 20 70 2d 3e  f( val==1 && p->
217c0 6d 6f 64 65 21 3d 4d 4f 44 45 5f 45 78 70 6c 61  mode!=MODE_Expla
217d0 69 6e 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6e  in ){.      p->n
217e0 6f 72 6d 61 6c 4d 6f 64 65 20 3d 20 70 2d 3e 6d  ormalMode = p->m
217f0 6f 64 65 3b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f  ode;.      p->mo
21800 64 65 20 3d 20 4d 4f 44 45 5f 45 78 70 6c 61 69  de = MODE_Explai
21810 6e 3b 0a 20 20 20 20 20 20 70 2d 3e 61 75 74 6f  n;.      p->auto
21820 45 78 70 6c 61 69 6e 20 3d 20 30 3b 0a 20 20 20  Explain = 0;.   
21830 20 7d 65 6c 73 65 20 69 66 28 20 76 61 6c 3d 3d   }else if( val==
21840 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  0 ){.      if( p
21850 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78 70  ->mode==MODE_Exp
21860 6c 61 69 6e 20 29 20 70 2d 3e 6d 6f 64 65 20 3d  lain ) p->mode =
21870 20 70 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 3b 0a   p->normalMode;.
21880 20 20 20 20 20 20 70 2d 3e 61 75 74 6f 45 78 70        p->autoExp
21890 6c 61 69 6e 20 3d 20 30 3b 0a 20 20 20 20 7d 65  lain = 0;.    }e
218a0 6c 73 65 20 69 66 28 20 76 61 6c 3d 3d 39 39 20  lse if( val==99 
218b0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  ){.      if( p->
218c0 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c 61  mode==MODE_Expla
218d0 69 6e 20 29 20 70 2d 3e 6d 6f 64 65 20 3d 20 70  in ) p->mode = p
218e0 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 3b 0a 20 20  ->normalMode;.  
218f0 20 20 20 20 70 2d 3e 61 75 74 6f 45 78 70 6c 61      p->autoExpla
21900 69 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  in = 1;.    }.  
21910 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
21920 27 66 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'f' && strncmp(a
21930 7a 41 72 67 5b 30 5d 2c 20 22 66 75 6c 6c 73 63  zArg[0], "fullsc
21940 68 65 6d 61 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  hema", n)==0 ){.
21950 20 20 20 20 53 68 65 6c 6c 53 74 61 74 65 20 64      ShellState d
21960 61 74 61 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a  ata;.    char *z
21970 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
21980 69 6e 74 20 64 6f 53 74 61 74 73 20 3d 20 30 3b  int doStats = 0;
21990 0a 20 20 20 20 6d 65 6d 63 70 79 28 26 64 61 74  .    memcpy(&dat
219a0 61 2c 20 70 2c 20 73 69 7a 65 6f 66 28 64 61 74  a, p, sizeof(dat
219b0 61 29 29 3b 0a 20 20 20 20 64 61 74 61 2e 73 68  a));.    data.sh
219c0 6f 77 48 65 61 64 65 72 20 3d 20 30 3b 0a 20 20  owHeader = 0;.  
219d0 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20 64    data.cMode = d
219e0 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f  ata.mode = MODE_
219f0 53 65 6d 69 3b 0a 20 20 20 20 69 66 28 20 6e 41  Semi;.    if( nA
21a00 72 67 3d 3d 32 20 26 26 20 6f 70 74 69 6f 6e 4d  rg==2 && optionM
21a10 61 74 63 68 28 61 7a 41 72 67 5b 31 5d 2c 20 22  atch(azArg[1], "
21a20 69 6e 64 65 6e 74 22 29 20 29 7b 0a 20 20 20 20  indent") ){.    
21a30 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20 64    data.cMode = d
21a40 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f  ata.mode = MODE_
21a50 50 72 65 74 74 79 3b 0a 20 20 20 20 20 20 6e 41  Pretty;.      nA
21a60 72 67 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  rg = 1;.    }.  
21a70 20 20 69 66 28 20 6e 41 72 67 21 3d 31 20 29 7b    if( nArg!=1 ){
21a80 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
21a90 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
21aa0 3a 20 2e 66 75 6c 6c 73 63 68 65 6d 61 20 3f 2d  : .fullschema ?-
21ab0 2d 69 6e 64 65 6e 74 3f 5c 6e 22 29 3b 0a 20 20  -indent?\n");.  
21ac0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
21ad0 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
21ae0 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a  and_exit;.    }.
21af0 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
21b00 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
21b10 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 0a  te3_exec(p->db,.
21b20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 73         "SELECT s
21b30 71 6c 20 46 52 4f 4d 22 0a 20 20 20 20 20 20 20  ql FROM".       
21b40 22 20 20 28 53 45 4c 45 43 54 20 73 71 6c 20 73  "  (SELECT sql s
21b50 71 6c 2c 20 74 79 70 65 20 74 79 70 65 2c 20 74  ql, type type, t
21b60 62 6c 5f 6e 61 6d 65 20 74 62 6c 5f 6e 61 6d 65  bl_name tbl_name
21b70 2c 20 6e 61 6d 65 20 6e 61 6d 65 2c 20 72 6f 77  , name name, row
21b80 69 64 20 78 22 0a 20 20 20 20 20 20 20 22 20 20  id x".       "  
21b90 20 20 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d     FROM sqlite_m
21ba0 61 73 74 65 72 20 55 4e 49 4f 4e 20 41 4c 4c 22  aster UNION ALL"
21bb0 0a 20 20 20 20 20 20 20 22 20 20 20 53 45 4c 45  .       "   SELE
21bc0 43 54 20 73 71 6c 2c 20 74 79 70 65 2c 20 74 62  CT sql, type, tb
21bd0 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c 20 72 6f  l_name, name, ro
21be0 77 69 64 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  wid FROM sqlite_
21bf0 74 65 6d 70 5f 6d 61 73 74 65 72 29 20 22 0a 20  temp_master) ". 
21c00 20 20 20 20 20 20 22 57 48 45 52 45 20 74 79 70        "WHERE typ
21c10 65 21 3d 27 6d 65 74 61 27 20 41 4e 44 20 73 71  e!='meta' AND sq
21c20 6c 20 4e 4f 54 4e 55 4c 4c 20 41 4e 44 20 6e 61  l NOTNULL AND na
21c30 6d 65 20 4e 4f 54 20 4c 49 4b 45 20 27 73 71 6c  me NOT LIKE 'sql
21c40 69 74 65 5f 25 27 20 22 0a 20 20 20 20 20 20 20  ite_%' ".       
21c50 22 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22  "ORDER BY rowid"
21c60 2c 0a 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63  ,.       callbac
21c70 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d  k, &data, &zErrM
21c80 73 67 0a 20 20 20 20 29 3b 0a 20 20 20 20 69 66  sg.    );.    if
21c90 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
21ca0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
21cb0 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
21cc0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21cd0 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64  _prepare_v2(p->d
21ce0 62 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  b,.             
21cf0 20 20 22 53 45 4c 45 43 54 20 72 6f 77 69 64 20    "SELECT rowid 
21d00 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
21d10 65 72 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  er".            
21d20 20 20 20 22 20 57 48 45 52 45 20 6e 61 6d 65 20     " WHERE name 
21d30 47 4c 4f 42 20 27 73 71 6c 69 74 65 5f 73 74 61  GLOB 'sqlite_sta
21d40 74 5b 31 33 34 5d 27 22 2c 0a 20 20 20 20 20 20  t[134]'",.      
21d50 20 20 20 20 20 20 20 20 20 2d 31 2c 20 26 70 53           -1, &pS
21d60 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 64  tmt, 0);.      d
21d70 6f 53 74 61 74 73 20 3d 20 73 71 6c 69 74 65 33  oStats = sqlite3
21d80 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51  _step(pStmt)==SQ
21d90 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 20 20 20 20  LITE_ROW;.      
21da0 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
21db0 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 7d 0a 20  (pStmt);.    }. 
21dc0 20 20 20 69 66 28 20 64 6f 53 74 61 74 73 3d 3d     if( doStats==
21dd0 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  0 ){.      raw_p
21de0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f  rintf(p->out, "/
21df0 2a 20 4e 6f 20 53 54 41 54 20 74 61 62 6c 65 73  * No STAT tables
21e00 20 61 76 61 69 6c 61 62 6c 65 20 2a 2f 5c 6e 22   available */\n"
21e10 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
21e20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
21e30 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45 20  ->out, "ANALYZE 
21e40 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c 6e  sqlite_master;\n
21e50 22 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ");.      sqlite
21e60 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 53  3_exec(p->db, "S
21e70 45 4c 45 43 54 20 27 41 4e 41 4c 59 5a 45 20 73  ELECT 'ANALYZE s
21e80 71 6c 69 74 65 5f 6d 61 73 74 65 72 27 22 2c 0a  qlite_master'",.
21e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ea0 20 20 20 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61     callback, &da
21eb0 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20  ta, &zErrMsg);. 
21ec0 20 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20       data.cMode 
21ed0 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f  = data.mode = MO
21ee0 44 45 5f 49 6e 73 65 72 74 3b 0a 20 20 20 20 20  DE_Insert;.     
21ef0 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62 6c 65   data.zDestTable
21f00 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 31   = "sqlite_stat1
21f10 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f 65  ";.      shell_e
21f20 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45 4c 45  xec(p->db, "SELE
21f30 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
21f40 5f 73 74 61 74 31 22 2c 0a 20 20 20 20 20 20 20  _stat1",.       
21f50 20 20 20 20 20 20 20 20 20 20 73 68 65 6c 6c 5f            shell_
21f60 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c  callback, &data,
21f70 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20  &zErrMsg);.     
21f80 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62 6c 65   data.zDestTable
21f90 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 33   = "sqlite_stat3
21fa0 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f 65  ";.      shell_e
21fb0 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45 4c 45  xec(p->db, "SELE
21fc0 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
21fd0 5f 73 74 61 74 33 22 2c 0a 20 20 20 20 20 20 20  _stat3",.       
21fe0 20 20 20 20 20 20 20 20 20 20 73 68 65 6c 6c 5f            shell_
21ff0 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c  callback, &data,
22000 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20  &zErrMsg);.     
22010 20 64 61 74 61 2e 7a 44 65 73 74 54 61 62 6c 65   data.zDestTable
22020 20 3d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 34   = "sqlite_stat4
22030 22 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f 65  ";.      shell_e
22040 78 65 63 28 70 2d 3e 64 62 2c 20 22 53 45 4c 45  xec(p->db, "SELE
22050 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
22060 5f 73 74 61 74 34 22 2c 0a 20 20 20 20 20 20 20  _stat4",.       
22070 20 20 20 20 20 20 20 20 20 20 73 68 65 6c 6c 5f            shell_
22080 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c  callback, &data,
22090 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20   &zErrMsg);.    
220a0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
220b0 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45 20 73 71  out, "ANALYZE sq
220c0 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c 6e 22 29  lite_master;\n")
220d0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
220e0 0a 20 20 69 66 28 20 63 3d 3d 27 68 27 20 26 26  .  if( c=='h' &&
220f0 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
22100 5d 2c 20 22 68 65 61 64 65 72 73 22 2c 20 6e 29  ], "headers", n)
22110 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
22120 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg==2 ){.      
22130 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 3d 20  p->showHeader = 
22140 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41  booleanValue(azA
22150 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73  rg[1]);.    }els
22160 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  e{.      raw_pri
22170 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
22180 67 65 3a 20 2e 68 65 61 64 65 72 73 20 6f 6e 7c  ge: .headers on|
22190 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  off\n");.      r
221a0 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  c = 1;.    }.  }
221b0 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
221c0 68 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  h' && strncmp(az
221d0 41 72 67 5b 30 5d 2c 20 22 68 65 6c 70 22 2c 20  Arg[0], "help", 
221e0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74 66  n)==0 ){.    utf
221f0 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
22200 20 22 25 73 22 2c 20 7a 48 65 6c 70 29 3b 0a 20   "%s", zHelp);. 
22210 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
22220 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='i' && strncmp(
22230 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6d 70 6f 72  azArg[0], "impor
22240 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  t", n)==0 ){.   
22250 20 63 68 61 72 20 2a 7a 54 61 62 6c 65 3b 20 20   char *zTable;  
22260 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22270 49 6e 73 65 72 74 20 64 61 74 61 20 69 6e 74 6f  Insert data into
22280 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
22290 20 20 20 63 68 61 72 20 2a 7a 46 69 6c 65 3b 20     char *zFile; 
222a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
222b0 2a 20 4e 61 6d 65 20 6f 66 20 66 69 6c 65 20 74  * Name of file t
222c0 6f 20 65 78 74 72 61 20 63 6f 6e 74 65 6e 74 20  o extra content 
222d0 66 72 6f 6d 20 2a 2f 0a 20 20 20 20 73 71 6c 69  from */.    sqli
222e0 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20  te3_stmt *pStmt 
222f0 3d 20 4e 55 4c 4c 3b 20 2f 2a 20 41 20 73 74 61  = NULL; /* A sta
22300 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 20 20 69 6e  tement */.    in
22310 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  t nCol;         
22320 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
22330 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
22340 6e 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  n the table */. 
22350 20 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20     int nByte;   
22360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22370 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
22380 73 20 69 6e 20 61 6e 20 53 51 4c 20 73 74 72 69  s in an SQL stri
22390 6e 67 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 2c  ng */.    int i,
223a0 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   j;             
223b0 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
223c0 75 6e 74 65 72 73 20 2a 2f 0a 20 20 20 20 69 6e  unters */.    in
223d0 74 20 6e 65 65 64 43 6f 6d 6d 69 74 3b 20 20 20  t needCommit;   
223e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
223f0 65 20 74 6f 20 43 4f 4d 4d 49 54 20 6f 72 20 52  e to COMMIT or R
22400 4f 4c 4c 42 41 43 4b 20 61 74 20 65 6e 64 20 2a  OLLBACK at end *
22410 2f 0a 20 20 20 20 69 6e 74 20 6e 53 65 70 3b 20  /.    int nSep; 
22420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22430 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
22440 79 74 65 73 20 69 6e 20 70 2d 3e 63 6f 6c 53 65  ytes in p->colSe
22450 70 61 72 61 74 6f 72 5b 5d 20 2a 2f 0a 20 20 20  parator[] */.   
22460 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20 20 20   char *zSql;    
22470 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22480 41 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  An SQL statement
22490 20 2a 2f 0a 20 20 20 20 49 6d 70 6f 72 74 43 74   */.    ImportCt
224a0 78 20 73 43 74 78 3b 20 20 20 20 20 20 20 20 20  x sCtx;         
224b0 20 20 20 20 2f 2a 20 52 65 61 64 65 72 20 63 6f      /* Reader co
224c0 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 63 68 61  ntext */.    cha
224d0 72 20 2a 28 53 51 4c 49 54 45 5f 43 44 45 43 4c  r *(SQLITE_CDECL
224e0 20 2a 78 52 65 61 64 29 28 49 6d 70 6f 72 74 43   *xRead)(ImportC
224f0 74 78 2a 29 3b 20 2f 2a 20 46 75 6e 63 20 74 6f  tx*); /* Func to
22500 20 72 65 61 64 20 6f 6e 65 20 76 61 6c 75 65 20   read one value 
22510 2a 2f 0a 20 20 20 20 69 6e 74 20 28 53 51 4c 49  */.    int (SQLI
22520 54 45 5f 43 44 45 43 4c 20 2a 78 43 6c 6f 73 65  TE_CDECL *xClose
22530 72 29 28 46 49 4c 45 2a 29 3b 20 20 20 20 20 20  r)(FILE*);      
22540 2f 2a 20 46 75 6e 63 20 74 6f 20 63 6c 6f 73 65  /* Func to close
22550 20 66 69 6c 65 20 2a 2f 0a 0a 20 20 20 20 69 66   file */..    if
22560 28 20 6e 41 72 67 21 3d 33 20 29 7b 0a 20 20 20  ( nArg!=3 ){.   
22570 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
22580 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 69  derr, "Usage: .i
22590 6d 70 6f 72 74 20 46 49 4c 45 20 54 41 42 4c 45  mport FILE TABLE
225a0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  \n");.      goto
225b0 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
225c0 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 46  it;.    }.    zF
225d0 69 6c 65 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a  ile = azArg[1];.
225e0 20 20 20 20 7a 54 61 62 6c 65 20 3d 20 61 7a 41      zTable = azA
225f0 72 67 5b 32 5d 3b 0a 20 20 20 20 73 65 65 6e 49  rg[2];.    seenI
22600 6e 74 65 72 72 75 70 74 20 3d 20 30 3b 0a 20 20  nterrupt = 0;.  
22610 20 20 6d 65 6d 73 65 74 28 26 73 43 74 78 2c 20    memset(&sCtx, 
22620 30 2c 20 73 69 7a 65 6f 66 28 73 43 74 78 29 29  0, sizeof(sCtx))
22630 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  ;.    open_db(p,
22640 20 30 29 3b 0a 20 20 20 20 6e 53 65 70 20 3d 20   0);.    nSep = 
22650 73 74 72 6c 65 6e 33 30 28 70 2d 3e 63 6f 6c 53  strlen30(p->colS
22660 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 69  eparator);.    i
22670 66 28 20 6e 53 65 70 3d 3d 30 20 29 7b 0a 20 20  f( nSep==0 ){.  
22680 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
22690 74 64 65 72 72 2c 0a 20 20 20 20 20 20 20 20 20  tderr,.         
226a0 20 20 20 20 20 20 20 20 22 45 72 72 6f 72 3a 20          "Error: 
226b0 6e 6f 6e 2d 6e 75 6c 6c 20 63 6f 6c 75 6d 6e 20  non-null column 
226c0 73 65 70 61 72 61 74 6f 72 20 72 65 71 75 69 72  separator requir
226d0 65 64 20 66 6f 72 20 69 6d 70 6f 72 74 5c 6e 22  ed for import\n"
226e0 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
226f0 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  1;.    }.    if(
22700 20 6e 53 65 70 3e 31 20 29 7b 0a 20 20 20 20 20   nSep>1 ){.     
22710 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
22720 72 72 2c 20 22 45 72 72 6f 72 3a 20 6d 75 6c 74  rr, "Error: mult
22730 69 2d 63 68 61 72 61 63 74 65 72 20 63 6f 6c 75  i-character colu
22740 6d 6e 20 73 65 70 61 72 61 74 6f 72 73 20 6e 6f  mn separators no
22750 74 20 61 6c 6c 6f 77 65 64 22 0a 20 20 20 20 20  t allowed".     
22760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22770 20 22 20 66 6f 72 20 69 6d 70 6f 72 74 5c 6e 22   " for import\n"
22780 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
22790 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 53 65  1;.    }.    nSe
227a0 70 20 3d 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e  p = strlen30(p->
227b0 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20  rowSeparator);. 
227c0 20 20 20 69 66 28 20 6e 53 65 70 3d 3d 30 20 29     if( nSep==0 )
227d0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
227e0 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
227f0 72 3a 20 6e 6f 6e 2d 6e 75 6c 6c 20 72 6f 77 20  r: non-null row 
22800 73 65 70 61 72 61 74 6f 72 20 72 65 71 75 69 72  separator requir
22810 65 64 20 66 6f 72 20 69 6d 70 6f 72 74 5c 6e 22  ed for import\n"
22820 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
22830 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  1;.    }.    if(
22840 20 6e 53 65 70 3d 3d 32 20 26 26 20 70 2d 3e 6d   nSep==2 && p->m
22850 6f 64 65 3d 3d 4d 4f 44 45 5f 43 73 76 20 26 26  ode==MODE_Csv &&
22860 20 73 74 72 63 6d 70 28 70 2d 3e 72 6f 77 53 65   strcmp(p->rowSe
22870 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 43 72 4c  parator, SEP_CrL
22880 66 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f  f)==0 ){.      /
22890 2a 20 57 68 65 6e 20 69 6d 70 6f 72 74 69 6e 67  * When importing
228a0 20 43 53 56 20 28 6f 6e 6c 79 29 2c 20 69 66 20   CSV (only), if 
228b0 74 68 65 20 72 6f 77 20 73 65 70 61 72 61 74 6f  the row separato
228c0 72 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 0a  r is set to the.
228d0 20 20 20 20 20 20 2a 2a 20 64 65 66 61 75 6c 74        ** default
228e0 20 6f 75 74 70 75 74 20 72 6f 77 20 73 65 70 61   output row sepa
228f0 72 61 74 6f 72 2c 20 63 68 61 6e 67 65 20 69 74  rator, change it
22900 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74 20   to the default 
22910 69 6e 70 75 74 0a 20 20 20 20 20 20 2a 2a 20 72  input.      ** r
22920 6f 77 20 73 65 70 61 72 61 74 6f 72 2e 20 20 54  ow separator.  T
22930 68 69 73 20 61 76 6f 69 64 73 20 68 61 76 69 6e  his avoids havin
22940 67 20 74 6f 20 6d 61 69 6e 74 61 69 6e 20 64 69  g to maintain di
22950 66 66 65 72 65 6e 74 20 69 6e 70 75 74 0a 20 20  fferent input.  
22960 20 20 20 20 2a 2a 20 61 6e 64 20 6f 75 74 70 75      ** and outpu
22970 74 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 73  t row separators
22980 2e 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  . */.      sqlit
22990 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
229a0 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74  of(p->rowSeparat
229b0 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72  or), p->rowSepar
229c0 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29 3b 0a  ator, SEP_Row);.
229d0 20 20 20 20 20 20 6e 53 65 70 20 3d 20 73 74 72        nSep = str
229e0 6c 65 6e 33 30 28 70 2d 3e 72 6f 77 53 65 70 61  len30(p->rowSepa
229f0 72 61 74 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  rator);.    }.  
22a00 20 20 69 66 28 20 6e 53 65 70 3e 31 20 29 7b 0a    if( nSep>1 ){.
22a10 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
22a20 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
22a30 20 6d 75 6c 74 69 2d 63 68 61 72 61 63 74 65 72   multi-character
22a40 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 73 20   row separators 
22a50 6e 6f 74 20 61 6c 6c 6f 77 65 64 22 0a 20 20 20  not allowed".   
22a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a70 20 20 20 22 20 66 6f 72 20 69 6d 70 6f 72 74 5c     " for import\
22a80 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  n");.      retur
22a90 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  n 1;.    }.    s
22aa0 43 74 78 2e 7a 46 69 6c 65 20 3d 20 7a 46 69 6c  Ctx.zFile = zFil
22ab0 65 3b 0a 20 20 20 20 73 43 74 78 2e 6e 4c 69 6e  e;.    sCtx.nLin
22ac0 65 20 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 73  e = 1;.    if( s
22ad0 43 74 78 2e 7a 46 69 6c 65 5b 30 5d 3d 3d 27 7c  Ctx.zFile[0]=='|
22ae0 27 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  ' ){.#ifdef SQLI
22af0 54 45 5f 4f 4d 49 54 5f 50 4f 50 45 4e 0a 20 20  TE_OMIT_POPEN.  
22b00 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
22b10 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 70  tderr, "Error: p
22b20 69 70 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70  ipes are not sup
22b30 70 6f 72 74 65 64 20 69 6e 20 74 68 69 73 20 4f  ported in this O
22b40 53 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74  S\n");.      ret
22b50 75 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20 20 20  urn 1;.#else.   
22b60 20 20 20 73 43 74 78 2e 69 6e 20 3d 20 70 6f 70     sCtx.in = pop
22b70 65 6e 28 73 43 74 78 2e 7a 46 69 6c 65 2b 31 2c  en(sCtx.zFile+1,
22b80 20 22 72 22 29 3b 0a 20 20 20 20 20 20 73 43 74   "r");.      sCt
22b90 78 2e 7a 46 69 6c 65 20 3d 20 22 3c 70 69 70 65  x.zFile = "<pipe
22ba0 3e 22 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73 65  >";.      xClose
22bb0 72 20 3d 20 70 63 6c 6f 73 65 3b 0a 23 65 6e 64  r = pclose;.#end
22bc0 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  if.    }else{.  
22bd0 20 20 20 20 73 43 74 78 2e 69 6e 20 3d 20 66 6f      sCtx.in = fo
22be0 70 65 6e 28 73 43 74 78 2e 7a 46 69 6c 65 2c 20  pen(sCtx.zFile, 
22bf0 22 72 62 22 29 3b 0a 20 20 20 20 20 20 78 43 6c  "rb");.      xCl
22c00 6f 73 65 72 20 3d 20 66 63 6c 6f 73 65 3b 0a 20  oser = fclose;. 
22c10 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e     }.    if( p->
22c20 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 41 73 63 69 69  mode==MODE_Ascii
22c30 20 29 7b 0a 20 20 20 20 20 20 78 52 65 61 64 20   ){.      xRead 
22c40 3d 20 61 73 63 69 69 5f 72 65 61 64 5f 6f 6e 65  = ascii_read_one
22c50 5f 66 69 65 6c 64 3b 0a 20 20 20 20 7d 65 6c 73  _field;.    }els
22c60 65 7b 0a 20 20 20 20 20 20 78 52 65 61 64 20 3d  e{.      xRead =
22c70 20 63 73 76 5f 72 65 61 64 5f 6f 6e 65 5f 66 69   csv_read_one_fi
22c80 65 6c 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  eld;.    }.    i
22c90 66 28 20 73 43 74 78 2e 69 6e 3d 3d 30 20 29 7b  f( sCtx.in==0 ){
22ca0 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
22cb0 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
22cc0 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c  r: cannot open \
22cd0 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c 65 29  "%s\"\n", zFile)
22ce0 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31  ;.      return 1
22cf0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 43 74 78  ;.    }.    sCtx
22d00 2e 63 43 6f 6c 53 65 70 20 3d 20 70 2d 3e 63 6f  .cColSep = p->co
22d10 6c 53 65 70 61 72 61 74 6f 72 5b 30 5d 3b 0a 20  lSeparator[0];. 
22d20 20 20 20 73 43 74 78 2e 63 52 6f 77 53 65 70 20     sCtx.cRowSep 
22d30 3d 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  = p->rowSeparato
22d40 72 5b 30 5d 3b 0a 20 20 20 20 7a 53 71 6c 20 3d  r[0];.    zSql =
22d50 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
22d60 28 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  ("SELECT * FROM 
22d70 25 73 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20  %s", zTable);.  
22d80 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b    if( zSql==0 ){
22d90 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
22da0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
22db0 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c  : out of memory\
22dc0 6e 22 29 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73  n");.      xClos
22dd0 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20  er(sCtx.in);.   
22de0 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
22df0 20 7d 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 73   }.    nByte = s
22e00 74 72 6c 65 6e 33 30 28 7a 53 71 6c 29 3b 0a 20  trlen30(zSql);. 
22e10 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
22e20 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62  prepare_v2(p->db
22e30 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74  , zSql, -1, &pSt
22e40 6d 74 2c 20 30 29 3b 0a 20 20 20 20 69 6d 70 6f  mt, 0);.    impo
22e50 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 26  rt_append_char(&
22e60 73 43 74 78 2c 20 30 29 3b 20 20 20 20 2f 2a 20  sCtx, 0);    /* 
22e70 54 6f 20 65 6e 73 75 72 65 20 73 43 74 78 2e 7a  To ensure sCtx.z
22e80 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f   is allocated */
22e90 0a 20 20 20 20 69 66 28 20 72 63 20 26 26 20 73  .    if( rc && s
22ea0 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62 28 22  qlite3_strglob("
22eb0 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 2a  no such table: *
22ec0 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
22ed0 67 28 70 2d 3e 64 62 29 29 3d 3d 30 20 29 7b 0a  g(p->db))==0 ){.
22ee0 20 20 20 20 20 20 63 68 61 72 20 2a 7a 43 72 65        char *zCre
22ef0 61 74 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ate = sqlite3_mp
22f00 72 69 6e 74 66 28 22 43 52 45 41 54 45 20 54 41  rintf("CREATE TA
22f10 42 4c 45 20 25 73 22 2c 20 7a 54 61 62 6c 65 29  BLE %s", zTable)
22f20 3b 0a 20 20 20 20 20 20 63 68 61 72 20 63 53 65  ;.      char cSe
22f30 70 20 3d 20 27 28 27 3b 0a 20 20 20 20 20 20 77  p = '(';.      w
22f40 68 69 6c 65 28 20 78 52 65 61 64 28 26 73 43 74  hile( xRead(&sCt
22f50 78 29 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 43  x) ){.        zC
22f60 72 65 61 74 65 20 3d 20 73 71 6c 69 74 65 33 5f  reate = sqlite3_
22f70 6d 70 72 69 6e 74 66 28 22 25 7a 25 63 5c 6e 20  mprintf("%z%c\n 
22f80 20 5c 22 25 77 5c 22 20 54 45 58 54 22 2c 20 7a   \"%w\" TEXT", z
22f90 43 72 65 61 74 65 2c 20 63 53 65 70 2c 20 73 43  Create, cSep, sC
22fa0 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 63  tx.z);.        c
22fb0 53 65 70 20 3d 20 27 2c 27 3b 0a 20 20 20 20 20  Sep = ',';.     
22fc0 20 20 20 69 66 28 20 73 43 74 78 2e 63 54 65 72     if( sCtx.cTer
22fd0 6d 21 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70 20  m!=sCtx.cColSep 
22fe0 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d  ) break;.      }
22ff0 0a 20 20 20 20 20 20 69 66 28 20 63 53 65 70 3d  .      if( cSep=
23000 3d 27 28 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='(' ){.        
23010 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 43 72  sqlite3_free(zCr
23020 65 61 74 65 29 3b 0a 20 20 20 20 20 20 20 20 73  eate);.        s
23030 71 6c 69 74 65 33 5f 66 72 65 65 28 73 43 74 78  qlite3_free(sCtx
23040 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 78 43 6c  .z);.        xCl
23050 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20  oser(sCtx.in);. 
23060 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
23070 74 66 28 73 74 64 65 72 72 2c 22 25 73 3a 20 65  tf(stderr,"%s: e
23080 6d 70 74 79 20 66 69 6c 65 5c 6e 22 2c 20 73 43  mpty file\n", sC
23090 74 78 2e 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20  tx.zFile);.     
230a0 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
230b0 20 20 20 7d 0a 20 20 20 20 20 20 7a 43 72 65 61     }.      zCrea
230c0 74 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  te = sqlite3_mpr
230d0 69 6e 74 66 28 22 25 7a 5c 6e 29 22 2c 20 7a 43  intf("%z\n)", zC
230e0 72 65 61 74 65 29 3b 0a 20 20 20 20 20 20 72 63  reate);.      rc
230f0 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
23100 70 2d 3e 64 62 2c 20 7a 43 72 65 61 74 65 2c 20  p->db, zCreate, 
23110 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  0, 0, 0);.      
23120 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 43 72  sqlite3_free(zCr
23130 65 61 74 65 29 3b 0a 20 20 20 20 20 20 69 66 28  eate);.      if(
23140 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 75   rc ){.        u
23150 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
23160 72 2c 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  r, "CREATE TABLE
23170 20 25 73 28 2e 2e 2e 29 20 66 61 69 6c 65 64 3a   %s(...) failed:
23180 20 25 73 5c 6e 22 2c 20 7a 54 61 62 6c 65 2c 0a   %s\n", zTable,.
23190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231a0 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70  sqlite3_errmsg(p
231b0 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 20 20  ->db));.        
231c0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73 43 74  sqlite3_free(sCt
231d0 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 78 43  x.z);.        xC
231e0 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a  loser(sCtx.in);.
231f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
23200 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
23210 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
23220 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a  pare_v2(p->db, z
23230 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c  Sql, -1, &pStmt,
23240 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73   0);.    }.    s
23250 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
23260 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b  );.    if( rc ){
23270 0a 20 20 20 20 20 20 69 66 20 28 70 53 74 6d 74  .      if (pStmt
23280 29 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  ) sqlite3_finali
23290 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20  ze(pStmt);.     
232a0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
232b0 65 72 72 2c 22 45 72 72 6f 72 3a 20 25 73 5c 6e  err,"Error: %s\n
232c0 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
232d0 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20  g(p->db));.     
232e0 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e   xCloser(sCtx.in
232f0 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
23300 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 43 6f  1;.    }.    nCo
23310 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  l = sqlite3_colu
23320 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 3b  mn_count(pStmt);
23330 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  .    sqlite3_fin
23340 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
23350 20 20 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 20    pStmt = 0;.   
23360 20 69 66 28 20 6e 43 6f 6c 3d 3d 30 20 29 20 72   if( nCol==0 ) r
23370 65 74 75 72 6e 20 30 3b 20 2f 2a 20 6e 6f 20 63  eturn 0; /* no c
23380 6f 6c 75 6d 6e 73 2c 20 6e 6f 20 65 72 72 6f 72  olumns, no error
23390 20 2a 2f 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73   */.    zSql = s
233a0 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28  qlite3_malloc64(
233b0 20 6e 42 79 74 65 2a 32 20 2b 20 32 30 20 2b 20   nByte*2 + 20 + 
233c0 6e 43 6f 6c 2a 32 20 29 3b 0a 20 20 20 20 69 66  nCol*2 );.    if
233d0 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
233e0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
233f0 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75  derr, "Error: ou
23400 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b  t of memory\n");
23410 0a 20 20 20 20 20 20 78 43 6c 6f 73 65 72 28 73  .      xCloser(s
23420 43 74 78 2e 69 6e 29 3b 0a 20 20 20 20 20 20 72  Ctx.in);.      r
23430 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
23440 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
23450 6e 74 66 28 6e 42 79 74 65 2b 32 30 2c 20 7a 53  ntf(nByte+20, zS
23460 71 6c 2c 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  ql, "INSERT INTO
23470 20 5c 22 25 77 5c 22 20 56 41 4c 55 45 53 28 3f   \"%w\" VALUES(?
23480 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20  ", zTable);.    
23490 6a 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 53 71  j = strlen30(zSq
234a0 6c 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b  l);.    for(i=1;
234b0 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20   i<nCol; i++){. 
234c0 20 20 20 20 20 7a 53 71 6c 5b 6a 2b 2b 5d 20 3d       zSql[j++] =
234d0 20 27 2c 27 3b 0a 20 20 20 20 20 20 7a 53 71 6c   ',';.      zSql
234e0 5b 6a 2b 2b 5d 20 3d 20 27 3f 27 3b 0a 20 20 20  [j++] = '?';.   
234f0 20 7d 0a 20 20 20 20 7a 53 71 6c 5b 6a 2b 2b 5d   }.    zSql[j++]
23500 20 3d 20 27 29 27 3b 0a 20 20 20 20 7a 53 71 6c   = ')';.    zSql
23510 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20 20 72 63 20  [j] = 0;.    rc 
23520 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
23530 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c  e_v2(p->db, zSql
23540 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29  , -1, &pStmt, 0)
23550 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
23560 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66  ee(zSql);.    if
23570 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 75 74  ( rc ){.      ut
23580 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
23590 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c  , "Error: %s\n",
235a0 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
235b0 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 69  p->db));.      i
235c0 66 20 28 70 53 74 6d 74 29 20 73 71 6c 69 74 65  f (pStmt) sqlite
235d0 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
235e0 29 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73 65 72  );.      xCloser
235f0 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20 20 20  (sCtx.in);.     
23600 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
23610 0a 20 20 20 20 6e 65 65 64 43 6f 6d 6d 69 74 20  .    needCommit 
23620 3d 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75  = sqlite3_get_au
23630 74 6f 63 6f 6d 6d 69 74 28 70 2d 3e 64 62 29 3b  tocommit(p->db);
23640 0a 20 20 20 20 69 66 28 20 6e 65 65 64 43 6f 6d  .    if( needCom
23650 6d 69 74 20 29 20 73 71 6c 69 74 65 33 5f 65 78  mit ) sqlite3_ex
23660 65 63 28 70 2d 3e 64 62 2c 20 22 42 45 47 49 4e  ec(p->db, "BEGIN
23670 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20  ", 0, 0, 0);.   
23680 20 64 6f 7b 0a 20 20 20 20 20 20 69 6e 74 20 73   do{.      int s
23690 74 61 72 74 4c 69 6e 65 20 3d 20 73 43 74 78 2e  tartLine = sCtx.
236a0 6e 4c 69 6e 65 3b 0a 20 20 20 20 20 20 66 6f 72  nLine;.      for
236b0 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b  (i=0; i<nCol; i+
236c0 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72  +){.        char
236d0 20 2a 7a 20 3d 20 78 52 65 61 64 28 26 73 43 74   *z = xRead(&sCt
236e0 78 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 0a 20  x);.        /*. 
236f0 20 20 20 20 20 20 20 2a 2a 20 44 69 64 20 77 65         ** Did we
23700 20 72 65 61 63 68 20 65 6e 64 2d 6f 66 2d 66 69   reach end-of-fi
23710 6c 65 20 62 65 66 6f 72 65 20 66 69 6e 64 69 6e  le before findin
23720 67 20 61 6e 79 20 63 6f 6c 75 6d 6e 73 3f 0a 20  g any columns?. 
23730 20 20 20 20 20 20 20 2a 2a 20 49 66 20 73 6f 2c         ** If so,
23740 20 73 74 6f 70 20 69 6e 73 74 65 61 64 20 6f 66   stop instead of
23750 20 4e 55 4c 4c 20 66 69 6c 6c 69 6e 67 20 74 68   NULL filling th
23760 65 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75  e remaining colu
23770 6d 6e 73 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  mns..        */.
23780 20 20 20 20 20 20 20 20 69 66 28 20 7a 3d 3d 30          if( z==0
23790 20 26 26 20 69 3d 3d 30 20 29 20 62 72 65 61 6b   && i==0 ) break
237a0 3b 0a 20 20 20 20 20 20 20 20 2f 2a 0a 20 20 20  ;.        /*.   
237b0 20 20 20 20 20 2a 2a 20 44 69 64 20 77 65 20 72       ** Did we r
237c0 65 61 63 68 20 65 6e 64 2d 6f 66 2d 66 69 6c 65  each end-of-file
237d0 20 4f 52 20 65 6e 64 2d 6f 66 2d 6c 69 6e 65 20   OR end-of-line 
237e0 62 65 66 6f 72 65 20 66 69 6e 64 69 6e 67 20 61  before finding a
237f0 6e 79 0a 20 20 20 20 20 20 20 20 2a 2a 20 63 6f  ny.        ** co
23800 6c 75 6d 6e 73 20 69 6e 20 41 53 43 49 49 20 6d  lumns in ASCII m
23810 6f 64 65 3f 20 20 49 66 20 73 6f 2c 20 73 74 6f  ode?  If so, sto
23820 70 20 69 6e 73 74 65 61 64 20 6f 66 20 4e 55 4c  p instead of NUL
23830 4c 20 66 69 6c 6c 69 6e 67 0a 20 20 20 20 20 20  L filling.      
23840 20 20 2a 2a 20 74 68 65 20 72 65 6d 61 69 6e 69    ** the remaini
23850 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 20 20 20 20  ng columns..    
23860 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69      */.        i
23870 66 28 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45  f( p->mode==MODE
23880 5f 41 73 63 69 69 20 26 26 20 28 7a 3d 3d 30 20  _Ascii && (z==0 
23890 7c 7c 20 7a 5b 30 5d 3d 3d 30 29 20 26 26 20 69  || z[0]==0) && i
238a0 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
238b0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e       sqlite3_bin
238c0 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69 2b  d_text(pStmt, i+
238d0 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
238e0 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
238f0 20 20 20 20 20 69 66 28 20 69 3c 6e 43 6f 6c 2d       if( i<nCol-
23900 31 20 26 26 20 73 43 74 78 2e 63 54 65 72 6d 21  1 && sCtx.cTerm!
23910 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70 20 29 7b  =sCtx.cColSep ){
23920 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
23930 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
23940 25 73 3a 25 64 3a 20 65 78 70 65 63 74 65 64 20  %s:%d: expected 
23950 25 64 20 63 6f 6c 75 6d 6e 73 20 62 75 74 20 66  %d columns but f
23960 6f 75 6e 64 20 25 64 20 2d 20 22 0a 20 20 20 20  ound %d - ".    
23970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23980 20 20 20 20 20 20 22 66 69 6c 6c 69 6e 67 20 74        "filling t
23990 68 65 20 72 65 73 74 20 77 69 74 68 20 4e 55 4c  he rest with NUL
239a0 4c 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  L\n",.          
239b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239c0 73 43 74 78 2e 7a 46 69 6c 65 2c 20 73 74 61 72  sCtx.zFile, star
239d0 74 4c 69 6e 65 2c 20 6e 43 6f 6c 2c 20 69 2b 31  tLine, nCol, i+1
239e0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 20 2b  );.          i +
239f0 3d 20 32 3b 0a 20 20 20 20 20 20 20 20 20 20 77  = 2;.          w
23a00 68 69 6c 65 28 20 69 3c 3d 6e 43 6f 6c 20 29 7b  hile( i<=nCol ){
23a10 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75   sqlite3_bind_nu
23a20 6c 6c 28 70 53 74 6d 74 2c 20 69 29 3b 20 69 2b  ll(pStmt, i); i+
23a30 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20  +; }.        }. 
23a40 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
23a50 20 73 43 74 78 2e 63 54 65 72 6d 3d 3d 73 43 74   sCtx.cTerm==sCt
23a60 78 2e 63 43 6f 6c 53 65 70 20 29 7b 0a 20 20 20  x.cColSep ){.   
23a70 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
23a80 20 20 20 78 52 65 61 64 28 26 73 43 74 78 29 3b     xRead(&sCtx);
23a90 0a 20 20 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a  .          i++;.
23aa0 20 20 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20          }while( 
23ab0 73 43 74 78 2e 63 54 65 72 6d 3d 3d 73 43 74 78  sCtx.cTerm==sCtx
23ac0 2e 63 43 6f 6c 53 65 70 20 29 3b 0a 20 20 20 20  .cColSep );.    
23ad0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
23ae0 73 74 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20  stderr, "%s:%d: 
23af0 65 78 70 65 63 74 65 64 20 25 64 20 63 6f 6c 75  expected %d colu
23b00 6d 6e 73 20 62 75 74 20 66 6f 75 6e 64 20 25 64  mns but found %d
23b10 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20   - ".           
23b20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 65 78               "ex
23b30 74 72 61 73 20 69 67 6e 6f 72 65 64 5c 6e 22 2c  tras ignored\n",
23b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23b50 20 20 20 20 20 20 20 20 20 73 43 74 78 2e 7a 46           sCtx.zF
23b60 69 6c 65 2c 20 73 74 61 72 74 4c 69 6e 65 2c 20  ile, startLine, 
23b70 6e 43 6f 6c 2c 20 69 29 3b 0a 20 20 20 20 20 20  nCol, i);.      
23b80 7d 0a 20 20 20 20 20 20 69 66 28 20 69 3e 3d 6e  }.      if( i>=n
23b90 43 6f 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 73  Col ){.        s
23ba0 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d  qlite3_step(pStm
23bb0 74 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  t);.        rc =
23bc0 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70   sqlite3_reset(p
23bd0 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 69  Stmt);.        i
23be0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
23bf0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74   ){.          ut
23c00 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
23c10 2c 20 22 25 73 3a 25 64 3a 20 49 4e 53 45 52 54  , "%s:%d: INSERT
23c20 20 66 61 69 6c 65 64 3a 20 25 73 5c 6e 22 2c 20   failed: %s\n", 
23c30 73 43 74 78 2e 7a 46 69 6c 65 2c 0a 20 20 20 20  sCtx.zFile,.    
23c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c50 20 20 73 74 61 72 74 4c 69 6e 65 2c 20 73 71 6c    startLine, sql
23c60 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64  ite3_errmsg(p->d
23c70 62 29 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  b));.        }. 
23c80 20 20 20 20 20 7d 0a 20 20 20 20 7d 77 68 69 6c       }.    }whil
23c90 65 28 20 73 43 74 78 2e 63 54 65 72 6d 21 3d 45  e( sCtx.cTerm!=E
23ca0 4f 46 20 29 3b 0a 0a 20 20 20 20 78 43 6c 6f 73  OF );..    xClos
23cb0 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20  er(sCtx.in);.   
23cc0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73 43   sqlite3_free(sC
23cd0 74 78 2e 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74  tx.z);.    sqlit
23ce0 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d  e3_finalize(pStm
23cf0 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 65 64  t);.    if( need
23d00 43 6f 6d 6d 69 74 20 29 20 73 71 6c 69 74 65 33  Commit ) sqlite3
23d10 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 43 4f  _exec(p->db, "CO
23d20 4d 4d 49 54 22 2c 20 30 2c 20 30 2c 20 30 29 3b  MMIT", 0, 0, 0);
23d30 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e 64 65  .  }else..#ifnde
23d40 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
23d50 42 4c 45 0a 20 20 69 66 28 20 63 3d 3d 27 69 27  BLE.  if( c=='i'
23d60 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
23d70 67 5b 30 5d 2c 20 22 69 6d 70 6f 73 74 65 72 22  g[0], "imposter"
23d80 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63  , n)==0 ){.    c
23d90 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 20 20 63  har *zSql;.    c
23da0 68 61 72 20 2a 7a 43 6f 6c 6c 69 73 74 20 3d 20  har *zCollist = 
23db0 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  0;.    sqlite3_s
23dc0 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 20 20  tmt *pStmt;.    
23dd0 69 6e 74 20 74 6e 75 6d 20 3d 20 30 3b 0a 20 20  int tnum = 0;.  
23de0 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 66 28    int i;.    if(
23df0 20 6e 41 72 67 21 3d 33 20 29 7b 0a 20 20 20 20   nArg!=3 ){.    
23e00 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
23e10 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 69  derr, "Usage: .i
23e20 6d 70 6f 73 74 65 72 20 49 4e 44 45 58 20 49 4d  mposter INDEX IM
23e30 50 4f 53 54 45 52 5c 6e 22 29 3b 0a 20 20 20 20  POSTER\n");.    
23e40 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
23e50 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
23e60 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20  d_exit;.    }.  
23e70 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
23e80 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  .    zSql = sqli
23e90 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c  te3_mprintf("SEL
23ea0 45 43 54 20 72 6f 6f 74 70 61 67 65 20 46 52 4f  ECT rootpage FRO
23eb0 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22  M sqlite_master"
23ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 22 20 57 48              " WH
23ee0 45 52 45 20 6e 61 6d 65 3d 27 25 71 27 20 41 4e  ERE name='%q' AN
23ef0 44 20 74 79 70 65 3d 27 69 6e 64 65 78 27 22 2c  D type='index'",
23f00 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
23f10 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
23f20 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20  v2(p->db, zSql, 
23f30 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a  -1, &pStmt, 0);.
23f40 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
23f50 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66 28 20  (zSql);.    if( 
23f60 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74  sqlite3_step(pSt
23f70 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20  mt)==SQLITE_ROW 
23f80 29 7b 0a 20 20 20 20 20 20 74 6e 75 6d 20 3d 20  ){.      tnum = 
23f90 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
23fa0 6e 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20  nt(pStmt, 0);.  
23fb0 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
23fc0 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
23fd0 0a 20 20 20 20 69 66 28 20 74 6e 75 6d 3d 3d 30  .    if( tnum==0
23fe0 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
23ff0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6e  rintf(stderr, "n
24000 6f 20 73 75 63 68 20 69 6e 64 65 78 3a 20 5c 22  o such index: \"
24010 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72 67 5b 31  %s\"\n", azArg[1
24020 5d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ]);.      rc = 1
24030 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
24040 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
24050 20 20 20 20 7d 0a 20 20 20 20 7a 53 71 6c 20 3d      }.    zSql =
24060 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
24070 28 22 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78  ("PRAGMA index_x
24080 69 6e 66 6f 3d 27 25 71 27 22 2c 20 61 7a 41 72  info='%q'", azAr
24090 67 5b 31 5d 29 3b 0a 20 20 20 20 72 63 20 3d 20  g[1]);.    rc = 
240a0 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
240b0 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20  v2(p->db, zSql, 
240c0 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a  -1, &pStmt, 0);.
240d0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
240e0 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 20 3d 20  (zSql);.    i = 
240f0 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 73 71  0;.    while( sq
24100 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74  lite3_step(pStmt
24110 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b  )==SQLITE_ROW ){
24120 0a 20 20 20 20 20 20 63 68 61 72 20 7a 4c 61 62  .      char zLab
24130 65 6c 5b 32 30 5d 3b 0a 20 20 20 20 20 20 63 6f  el[20];.      co
24140 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 20 3d  nst char *zCol =
24150 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
24160 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
24170 74 28 70 53 74 6d 74 2c 32 29 3b 0a 20 20 20 20  t(pStmt,2);.    
24180 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28    i++;.      if(
24190 20 7a 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20 20   zCol==0 ){.    
241a0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
241b0 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74  column_int(pStmt
241c0 2c 31 29 3d 3d 2d 31 20 29 7b 0a 20 20 20 20 20  ,1)==-1 ){.     
241d0 20 20 20 20 20 7a 43 6f 6c 20 3d 20 22 5f 52 4f       zCol = "_RO
241e0 57 49 44 5f 22 3b 0a 20 20 20 20 20 20 20 20 7d  WID_";.        }
241f0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
24200 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
24210 28 73 69 7a 65 6f 66 28 7a 4c 61 62 65 6c 29 2c  (sizeof(zLabel),
24220 7a 4c 61 62 65 6c 2c 22 65 78 70 72 25 64 22 2c  zLabel,"expr%d",
24230 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 43  i);.          zC
24240 6f 6c 20 3d 20 7a 4c 61 62 65 6c 3b 0a 20 20 20  ol = zLabel;.   
24250 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
24260 20 20 20 20 20 69 66 28 20 7a 43 6f 6c 6c 69 73       if( zCollis
24270 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  t==0 ){.        
24280 7a 43 6f 6c 6c 69 73 74 20 3d 20 73 71 6c 69 74  zCollist = sqlit
24290 65 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22 25 77  e3_mprintf("\"%w
242a0 5c 22 22 2c 20 7a 43 6f 6c 29 3b 0a 20 20 20 20  \"", zCol);.    
242b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
242c0 20 7a 43 6f 6c 6c 69 73 74 20 3d 20 73 71 6c 69   zCollist = sqli
242d0 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 7a 2c  te3_mprintf("%z,
242e0 5c 22 25 77 5c 22 22 2c 20 7a 43 6f 6c 6c 69 73  \"%w\"", zCollis
242f0 74 2c 20 7a 43 6f 6c 29 3b 0a 20 20 20 20 20 20  t, zCol);.      
24300 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
24310 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
24320 6d 74 29 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20  mt);.    zSql = 
24330 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
24340 0a 20 20 20 20 20 20 20 20 20 20 22 43 52 45 41  .          "CREA
24350 54 45 20 54 41 42 4c 45 20 5c 22 25 77 5c 22 28  TE TABLE \"%w\"(
24360 25 73 2c 50 52 49 4d 41 52 59 20 4b 45 59 28 25  %s,PRIMARY KEY(%
24370 73 29 29 57 49 54 48 4f 55 54 20 52 4f 57 49 44  s))WITHOUT ROWID
24380 22 2c 0a 20 20 20 20 20 20 20 20 20 20 61 7a 41  ",.          azA
24390 72 67 5b 32 5d 2c 20 7a 43 6f 6c 6c 69 73 74 2c  rg[2], zCollist,
243a0 20 7a 43 6f 6c 6c 69 73 74 29 3b 0a 20 20 20 20   zCollist);.    
243b0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 43 6f  sqlite3_free(zCo
243c0 6c 6c 69 73 74 29 3b 0a 20 20 20 20 72 63 20 3d  llist);.    rc =
243d0 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
243e0 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
243f0 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52 2c 20  TCTRL_IMPOSTER, 
24400 70 2d 3e 64 62 2c 20 22 6d 61 69 6e 22 2c 20 31  p->db, "main", 1
24410 2c 20 74 6e 75 6d 29 3b 0a 20 20 20 20 69 66 28  , tnum);.    if(
24420 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
24430 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
24440 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c  ite3_exec(p->db,
24450 20 7a 53 71 6c 2c 20 30 2c 20 30 2c 20 30 29 3b   zSql, 0, 0, 0);
24460 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74  .      sqlite3_t
24470 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
24480 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d 50 4f  TE_TESTCTRL_IMPO
24490 53 54 45 52 2c 20 70 2d 3e 64 62 2c 20 22 6d 61  STER, p->db, "ma
244a0 69 6e 22 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  in", 0, 0);.    
244b0 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
244c0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
244d0 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 20 69  stderr, "Error i
244e0 6e 20 5b 25 73 5d 3a 20 25 73 5c 6e 22 2c 20 7a  n [%s]: %s\n", z
244f0 53 71 6c 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  Sql, sqlite3_err
24500 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20  msg(p->db));.   
24510 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
24520 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
24530 64 6f 75 74 2c 20 22 25 73 3b 5c 6e 22 2c 20 7a  dout, "%s;\n", z
24540 53 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 72 61  Sql);.        ra
24550 77 5f 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c  w_printf(stdout,
24560 0a 20 20 20 20 20 20 20 20 20 20 20 22 57 41 52  .           "WAR
24570 4e 49 4e 47 3a 20 77 72 69 74 69 6e 67 20 74 6f  NING: writing to
24580 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62   an imposter tab
24590 6c 65 20 77 69 6c 6c 20 63 6f 72 72 75 70 74 20  le will corrupt 
245a0 74 68 65 20 69 6e 64 65 78 21 5c 6e 22 0a 20 20  the index!\n".  
245b0 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 7d        );.      }
245c0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
245d0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
245e0 65 72 72 2c 20 22 53 51 4c 49 54 45 5f 54 45 53  err, "SQLITE_TES
245f0 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52 20 72  TCTRL_IMPOSTER r
24600 65 74 75 72 6e 73 20 25 64 5c 6e 22 2c 20 72 63  eturns %d\n", rc
24610 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
24620 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
24630 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20  e3_free(zSql);. 
24640 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a   }else.#endif /*
24650 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
24660 5f 4f 4d 49 54 5f 54 45 53 54 5f 43 4f 4e 54 52  _OMIT_TEST_CONTR
24670 4f 4c 29 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53  OL) */..#ifdef S
24680 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54  QLITE_ENABLE_IOT
24690 52 41 43 45 0a 20 20 69 66 28 20 63 3d 3d 27 69  RACE.  if( c=='i
246a0 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
246b0 72 67 5b 30 5d 2c 20 22 69 6f 74 72 61 63 65 22  rg[0], "iotrace"
246c0 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 53  , n)==0 ){.    S
246d0 51 4c 49 54 45 5f 41 50 49 20 65 78 74 65 72 6e  QLITE_API extern
246e0 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44   void (SQLITE_CD
246f0 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72  ECL *sqlite3IoTr
24700 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a  ace)(const char*
24710 2c 20 2e 2e 2e 29 3b 0a 20 20 20 20 69 66 28 20  , ...);.    if( 
24720 69 6f 74 72 61 63 65 20 26 26 20 69 6f 74 72 61  iotrace && iotra
24730 63 65 21 3d 73 74 64 6f 75 74 20 29 20 66 63 6c  ce!=stdout ) fcl
24740 6f 73 65 28 69 6f 74 72 61 63 65 29 3b 0a 20 20  ose(iotrace);.  
24750 20 20 69 6f 74 72 61 63 65 20 3d 20 30 3b 0a 20    iotrace = 0;. 
24760 20 20 20 69 66 28 20 6e 41 72 67 3c 32 20 29 7b     if( nArg<2 ){
24770 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 49 6f  .      sqlite3Io
24780 54 72 61 63 65 20 3d 20 30 3b 0a 20 20 20 20 7d  Trace = 0;.    }
24790 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
247a0 61 7a 41 72 67 5b 31 5d 2c 20 22 2d 22 29 3d 3d  azArg[1], "-")==
247b0 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
247c0 65 33 49 6f 54 72 61 63 65 20 3d 20 69 6f 74 72  e3IoTrace = iotr
247d0 61 63 65 50 72 69 6e 74 66 3b 0a 20 20 20 20 20  acePrintf;.     
247e0 20 69 6f 74 72 61 63 65 20 3d 20 73 74 64 6f 75   iotrace = stdou
247f0 74 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  t;.    }else{.  
24800 20 20 20 20 69 6f 74 72 61 63 65 20 3d 20 66 6f      iotrace = fo
24810 70 65 6e 28 61 7a 41 72 67 5b 31 5d 2c 20 22 77  pen(azArg[1], "w
24820 22 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 6f  ");.      if( io
24830 74 72 61 63 65 3d 3d 30 20 29 7b 0a 20 20 20 20  trace==0 ){.    
24840 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
24850 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
24860 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73  cannot open \"%s
24870 5c 22 5c 6e 22 2c 20 61 7a 41 72 67 5b 31 5d 29  \"\n", azArg[1])
24880 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
24890 33 49 6f 54 72 61 63 65 20 3d 20 30 3b 0a 20 20  3IoTrace = 0;.  
248a0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
248b0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
248c0 20 20 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63     sqlite3IoTrac
248d0 65 20 3d 20 69 6f 74 72 61 63 65 50 72 69 6e 74  e = iotracePrint
248e0 66 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  f;.      }.    }
248f0 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
24900 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 26 26  .  if( c=='l' &&
24910 20 6e 3e 3d 35 20 26 26 20 73 74 72 6e 63 6d 70   n>=5 && strncmp
24920 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6c 69 6d 69  (azArg[0], "limi
24930 74 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  ts", n)==0 ){.  
24940 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73    static const s
24950 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 63  truct {.       c
24960 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 69 6d 69  onst char *zLimi
24970 74 4e 61 6d 65 3b 20 20 20 2f 2a 20 4e 61 6d 65  tName;   /* Name
24980 20 6f 66 20 61 20 6c 69 6d 69 74 20 2a 2f 0a 20   of a limit */. 
24990 20 20 20 20 20 20 69 6e 74 20 6c 69 6d 69 74 43        int limitC
249a0 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
249b0 2f 2a 20 49 6e 74 65 67 65 72 20 63 6f 64 65 20  /* Integer code 
249c0 66 6f 72 20 74 68 61 74 20 6c 69 6d 69 74 20 2a  for that limit *
249d0 2f 0a 20 20 20 20 7d 20 61 4c 69 6d 69 74 5b 5d  /.    } aLimit[]
249e0 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 6c 65   = {.      { "le
249f0 6e 67 74 68 22 2c 20 20 20 20 20 20 20 20 20 20  ngth",          
24a00 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d        SQLITE_LIM
24a10 49 54 5f 4c 45 4e 47 54 48 20 20 20 20 20 20 20  IT_LENGTH       
24a20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
24a30 20 20 20 20 20 20 7b 20 22 73 71 6c 5f 6c 65 6e        { "sql_len
24a40 67 74 68 22 2c 20 20 20 20 20 20 20 20 20 20 20  gth",           
24a50 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 53 51   SQLITE_LIMIT_SQ
24a60 4c 5f 4c 45 4e 47 54 48 20 20 20 20 20 20 20 20  L_LENGTH        
24a70 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
24a80 20 7b 20 22 63 6f 6c 75 6d 6e 22 2c 20 20 20 20   { "column",    
24a90 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
24aa0 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 20  TE_LIMIT_COLUMN 
24ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ac0 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 65     },.      { "e
24ad0 78 70 72 5f 64 65 70 74 68 22 2c 20 20 20 20 20  xpr_depth",     
24ae0 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49         SQLITE_LI
24af0 4d 49 54 5f 45 58 50 52 5f 44 45 50 54 48 20 20  MIT_EXPR_DEPTH  
24b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
24b10 0a 20 20 20 20 20 20 7b 20 22 63 6f 6d 70 6f 75  .      { "compou
24b20 6e 64 5f 73 65 6c 65 63 74 22 2c 20 20 20 20 20  nd_select",     
24b30 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43    SQLITE_LIMIT_C
24b40 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 20 20  OMPOUND_SELECT  
24b50 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
24b60 20 20 7b 20 22 76 64 62 65 5f 6f 70 22 2c 20 20    { "vdbe_op",  
24b70 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
24b80 49 54 45 5f 4c 49 4d 49 54 5f 56 44 42 45 5f 4f  ITE_LIMIT_VDBE_O
24b90 50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  P               
24ba0 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
24bb0 66 75 6e 63 74 69 6f 6e 5f 61 72 67 22 2c 20 20  function_arg",  
24bc0 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c          SQLITE_L
24bd0 49 4d 49 54 5f 46 55 4e 43 54 49 4f 4e 5f 41 52  IMIT_FUNCTION_AR
24be0 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  G              }
24bf0 2c 0a 20 20 20 20 20 20 7b 20 22 61 74 74 61 63  ,.      { "attac
24c00 68 65 64 22 2c 20 20 20 20 20 20 20 20 20 20 20  hed",           
24c10 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f     SQLITE_LIMIT_
24c20 41 54 54 41 43 48 45 44 20 20 20 20 20 20 20 20  ATTACHED        
24c30 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
24c40 20 20 20 7b 20 22 6c 69 6b 65 5f 70 61 74 74 65     { "like_patte
24c50 72 6e 5f 6c 65 6e 67 74 68 22 2c 20 20 20 53 51  rn_length",   SQ
24c60 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 49 4b 45 5f  LITE_LIMIT_LIKE_
24c70 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48 20 20  PATTERN_LENGTH  
24c80 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
24c90 22 76 61 72 69 61 62 6c 65 5f 6e 75 6d 62 65 72  "variable_number
24ca0 22 2c 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f  ",       SQLITE_
24cb0 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c 45 5f 4e  LIMIT_VARIABLE_N
24cc0 55 4d 42 45 52 20 20 20 20 20 20 20 20 20 20 20  UMBER           
24cd0 7d 2c 0a 20 20 20 20 20 20 7b 20 22 74 72 69 67  },.      { "trig
24ce0 67 65 72 5f 64 65 70 74 68 22 2c 20 20 20 20 20  ger_depth",     
24cf0 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54      SQLITE_LIMIT
24d00 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 20 20  _TRIGGER_DEPTH  
24d10 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
24d20 20 20 20 20 7b 20 22 77 6f 72 6b 65 72 5f 74 68      { "worker_th
24d30 72 65 61 64 73 22 2c 20 20 20 20 20 20 20 20 53  reads",        S
24d40 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b  QLITE_LIMIT_WORK
24d50 45 52 5f 54 48 52 45 41 44 53 20 20 20 20 20 20  ER_THREADS      
24d60 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7d 3b 0a        },.    };.
24d70 20 20 20 20 69 6e 74 20 69 2c 20 6e 32 3b 0a 20      int i, n2;. 
24d80 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29     open_db(p, 0)
24d90 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d  ;.    if( nArg==
24da0 31 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69  1 ){.      for(i
24db0 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28  =0; i<ArraySize(
24dc0 61 4c 69 6d 69 74 29 3b 20 69 2b 2b 29 7b 0a 20  aLimit); i++){. 
24dd0 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25         printf("%
24de0 32 30 73 20 25 64 5c 6e 22 2c 20 61 4c 69 6d 69  20s %d\n", aLimi
24df0 74 5b 69 5d 2e 7a 4c 69 6d 69 74 4e 61 6d 65 2c  t[i].zLimitName,
24e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24e10 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 70 2d  sqlite3_limit(p-
24e20 3e 64 62 2c 20 61 4c 69 6d 69 74 5b 69 5d 2e 6c  >db, aLimit[i].l
24e30 69 6d 69 74 43 6f 64 65 2c 20 2d 31 29 29 3b 0a  imitCode, -1));.
24e40 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
24e50 65 20 69 66 28 20 6e 41 72 67 3e 33 20 29 7b 0a  e if( nArg>3 ){.
24e60 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
24e70 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
24e80 20 2e 6c 69 6d 69 74 20 4e 41 4d 45 20 3f 4e 45   .limit NAME ?NE
24e90 57 2d 56 41 4c 55 45 3f 5c 6e 22 29 3b 0a 20 20  W-VALUE?\n");.  
24ea0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
24eb0 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
24ec0 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 65  and_exit;.    }e
24ed0 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  lse{.      int i
24ee0 4c 69 6d 69 74 20 3d 20 2d 31 3b 0a 20 20 20 20  Limit = -1;.    
24ef0 20 20 6e 32 20 3d 20 73 74 72 6c 65 6e 33 30 28    n2 = strlen30(
24f00 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20  azArg[1]);.     
24f10 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61   for(i=0; i<Arra
24f20 79 53 69 7a 65 28 61 4c 69 6d 69 74 29 3b 20 69  ySize(aLimit); i
24f30 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
24f40 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
24f50 70 28 61 4c 69 6d 69 74 5b 69 5d 2e 7a 4c 69 6d  p(aLimit[i].zLim
24f60 69 74 4e 61 6d 65 2c 20 61 7a 41 72 67 5b 31 5d  itName, azArg[1]
24f70 2c 20 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  , n2)==0 ){.    
24f80 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74        if( iLimit
24f90 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  <0 ){.          
24fa0 20 20 69 4c 69 6d 69 74 20 3d 20 69 3b 0a 20 20    iLimit = i;.  
24fb0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
24fc0 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f             utf8_
24fd0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
24fe0 61 6d 62 69 67 75 6f 75 73 20 6c 69 6d 69 74 3a  ambiguous limit:
24ff0 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72   \"%s\"\n", azAr
25000 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 20  g[1]);.         
25010 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
25020 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
25030 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
25040 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
25050 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
25060 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c 30 20     if( iLimit<0 
25070 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
25080 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
25090 75 6e 6b 6e 6f 77 6e 20 6c 69 6d 69 74 3a 20 5c  unknown limit: \
250a0 22 25 73 5c 22 5c 6e 22 0a 20 20 20 20 20 20 20  "%s\"\n".       
250b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250c0 20 22 65 6e 74 65 72 20 5c 22 2e 6c 69 6d 69 74   "enter \".limit
250d0 73 5c 22 20 77 69 74 68 20 6e 6f 20 61 72 67 75  s\" with no argu
250e0 6d 65 6e 74 73 20 66 6f 72 20 61 20 6c 69 73 74  ments for a list
250f0 2e 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  .\n",.          
25100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
25110 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20  zArg[1]);.      
25120 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
25130 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
25140 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20  and_exit;.      
25150 7d 0a 20 20 20 20 20 20 69 66 28 20 6e 41 72 67  }.      if( nArg
25160 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==3 ){.        s
25170 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 70 2d 3e  qlite3_limit(p->
25180 64 62 2c 20 61 4c 69 6d 69 74 5b 69 4c 69 6d 69  db, aLimit[iLimi
25190 74 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c 0a 20 20  t].limitCode,.  
251a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251b0 20 20 20 20 28 69 6e 74 29 69 6e 74 65 67 65 72      (int)integer
251c0 56 61 6c 75 65 28 61 7a 41 72 67 5b 32 5d 29 29  Value(azArg[2]))
251d0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
251e0 70 72 69 6e 74 66 28 22 25 32 30 73 20 25 64 5c  printf("%20s %d\
251f0 6e 22 2c 20 61 4c 69 6d 69 74 5b 69 4c 69 6d 69  n", aLimit[iLimi
25200 74 5d 2e 7a 4c 69 6d 69 74 4e 61 6d 65 2c 0a 20  t].zLimitName,. 
25210 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
25220 74 65 33 5f 6c 69 6d 69 74 28 70 2d 3e 64 62 2c  te3_limit(p->db,
25230 20 61 4c 69 6d 69 74 5b 69 4c 69 6d 69 74 5d 2e   aLimit[iLimit].
25240 6c 69 6d 69 74 43 6f 64 65 2c 20 2d 31 29 29 3b  limitCode, -1));
25250 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
25260 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 26 26 20    if( c=='l' && 
25270 6e 3e 32 20 26 26 20 73 74 72 6e 63 6d 70 28 61  n>2 && strncmp(a
25280 7a 41 72 67 5b 30 5d 2c 20 22 6c 69 6e 74 22 2c  zArg[0], "lint",
25290 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 6f 70   n)==0 ){.    op
252a0 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20  en_db(p, 0);.   
252b0 20 6c 69 6e 74 44 6f 74 43 6f 6d 6d 61 6e 64 28   lintDotCommand(
252c0 70 2c 20 61 7a 41 72 67 2c 20 6e 41 72 67 29 3b  p, azArg, nArg);
252d0 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e 64 65  .  }else..#ifnde
252e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f  f SQLITE_OMIT_LO
252f0 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 69  AD_EXTENSION.  i
25300 66 28 20 63 3d 3d 27 6c 27 20 26 26 20 73 74 72  f( c=='l' && str
25310 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
25320 6c 6f 61 64 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  load", n)==0 ){.
25330 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
25340 7a 46 69 6c 65 2c 20 2a 7a 50 72 6f 63 3b 0a 20  zFile, *zProc;. 
25350 20 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67     char *zErrMsg
25360 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 6e 41   = 0;.    if( nA
25370 72 67 3c 32 20 29 7b 0a 20 20 20 20 20 20 72 61  rg<2 ){.      ra
25380 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
25390 20 22 55 73 61 67 65 3a 20 2e 6c 6f 61 64 20 46   "Usage: .load F
253a0 49 4c 45 20 3f 45 4e 54 52 59 50 4f 49 4e 54 3f  ILE ?ENTRYPOINT?
253b0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
253c0 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
253d0 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
253e0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 46 69 6c  ;.    }.    zFil
253f0 65 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20  e = azArg[1];.  
25400 20 20 7a 50 72 6f 63 20 3d 20 6e 41 72 67 3e 3d    zProc = nArg>=
25410 33 20 3f 20 61 7a 41 72 67 5b 32 5d 20 3a 20 30  3 ? azArg[2] : 0
25420 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  ;.    open_db(p,
25430 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71   0);.    rc = sq
25440 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e  lite3_load_exten
25450 73 69 6f 6e 28 70 2d 3e 64 62 2c 20 7a 46 69 6c  sion(p->db, zFil
25460 65 2c 20 7a 50 72 6f 63 2c 20 26 7a 45 72 72 4d  e, zProc, &zErrM
25470 73 67 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  sg);.    if( rc!
25480 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
25490 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
254a0 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
254b0 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 29 3b  %s\n", zErrMsg);
254c0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
254d0 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20 20  ree(zErrMsg);.  
254e0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
254f0 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  }.  }else.#endif
25500 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 26  ..  if( c=='l' &
25510 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
25520 30 5d 2c 20 22 6c 6f 67 22 2c 20 6e 29 3d 3d 30  0], "log", n)==0
25530 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   ){.    if( nArg
25540 21 3d 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77  !=2 ){.      raw
25550 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
25560 22 55 73 61 67 65 3a 20 2e 6c 6f 67 20 46 49 4c  "Usage: .log FIL
25570 45 4e 41 4d 45 5c 6e 22 29 3b 0a 20 20 20 20 20  ENAME\n");.     
25580 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c   rc = 1;.    }el
25590 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  se{.      const 
255a0 63 68 61 72 20 2a 7a 46 69 6c 65 20 3d 20 61 7a  char *zFile = az
255b0 41 72 67 5b 31 5d 3b 0a 20 20 20 20 20 20 6f 75  Arg[1];.      ou
255c0 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73 65 28  tput_file_close(
255d0 70 2d 3e 70 4c 6f 67 29 3b 0a 20 20 20 20 20 20  p->pLog);.      
255e0 70 2d 3e 70 4c 6f 67 20 3d 20 6f 75 74 70 75 74  p->pLog = output
255f0 5f 66 69 6c 65 5f 6f 70 65 6e 28 7a 46 69 6c 65  _file_open(zFile
25600 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
25610 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6d 27 20 26  ..  if( c=='m' &
25620 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
25630 30 5d 2c 20 22 6d 6f 64 65 22 2c 20 6e 29 3d 3d  0], "mode", n)==
25640 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  0 ){.    const c
25650 68 61 72 20 2a 7a 4d 6f 64 65 20 3d 20 6e 41 72  har *zMode = nAr
25660 67 3e 3d 32 20 3f 20 61 7a 41 72 67 5b 31 5d 20  g>=2 ? azArg[1] 
25670 3a 20 22 22 3b 0a 20 20 20 20 69 6e 74 20 6e 32  : "";.    int n2
25680 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a   = (int)strlen(z
25690 4d 6f 64 65 29 3b 0a 20 20 20 20 69 6e 74 20 63  Mode);.    int c
256a0 32 20 3d 20 7a 4d 6f 64 65 5b 30 5d 3b 0a 20 20  2 = zMode[0];.  
256b0 20 20 69 66 28 20 63 32 3d 3d 27 6c 27 20 26 26    if( c2=='l' &&
256c0 20 6e 32 3e 32 20 26 26 20 73 74 72 6e 63 6d 70   n2>2 && strncmp
256d0 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 69 6e 65 73  (azArg[1],"lines
256e0 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ",n2)==0 ){.    
256f0 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45    p->mode = MODE
25700 5f 4c 69 6e 65 3b 0a 20 20 20 20 20 20 73 71 6c  _Line;.      sql
25710 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
25720 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72  zeof(p->rowSepar
25730 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70  ator), p->rowSep
25740 61 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29  arator, SEP_Row)
25750 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
25760 63 32 3d 3d 27 63 27 20 26 26 20 73 74 72 6e 63  c2=='c' && strnc
25770 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 63 6f 6c  mp(azArg[1],"col
25780 75 6d 6e 73 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a  umns",n2)==0 ){.
25790 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20        p->mode = 
257a0 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3b 0a 20 20 20  MODE_Column;.   
257b0 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
257c0 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f  ntf(sizeof(p->ro
257d0 77 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e  wSeparator), p->
257e0 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45  rowSeparator, SE
257f0 50 5f 52 6f 77 29 3b 0a 20 20 20 20 7d 65 6c 73  P_Row);.    }els
25800 65 20 69 66 28 20 63 32 3d 3d 27 6c 27 20 26 26  e if( c2=='l' &&
25810 20 6e 32 3e 32 20 26 26 20 73 74 72 6e 63 6d 70   n2>2 && strncmp
25820 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 69 73 74 22  (azArg[1],"list"
25830 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ,n2)==0 ){.     
25840 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f   p->mode = MODE_
25850 4c 69 73 74 3b 0a 20 20 20 20 20 20 73 71 6c 69  List;.      sqli
25860 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
25870 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61  eof(p->colSepara
25880 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  tor), p->colSepa
25890 72 61 74 6f 72 2c 20 53 45 50 5f 43 6f 6c 75 6d  rator, SEP_Colum
258a0 6e 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  n);.      sqlite
258b0 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
258c0 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  f(p->rowSeparato
258d0 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61  r), p->rowSepara
258e0 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29 3b 0a 20  tor, SEP_Row);. 
258f0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32 3d     }else if( c2=
25900 3d 27 68 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='h' && strncmp(
25910 61 7a 41 72 67 5b 31 5d 2c 22 68 74 6d 6c 22 2c  azArg[1],"html",
25920 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  n2)==0 ){.      
25930 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 48  p->mode = MODE_H
25940 74 6d 6c 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  tml;.    }else i
25950 66 28 20 63 32 3d 3d 27 74 27 20 26 26 20 73 74  f( c2=='t' && st
25960 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22  rncmp(azArg[1],"
25970 74 63 6c 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20  tcl",n2)==0 ){. 
25980 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d       p->mode = M
25990 4f 44 45 5f 54 63 6c 3b 0a 20 20 20 20 20 20 73  ODE_Tcl;.      s
259a0 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
259b0 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70  sizeof(p->colSep
259c0 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53  arator), p->colS
259d0 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 53 70  eparator, SEP_Sp
259e0 61 63 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ace);.      sqli
259f0 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
25a00 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72 61  eof(p->rowSepara
25a10 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61  tor), p->rowSepa
25a20 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77 29 3b  rator, SEP_Row);
25a30 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63  .    }else if( c
25a40 32 3d 3d 27 63 27 20 26 26 20 73 74 72 6e 63 6d  2=='c' && strncm
25a50 70 28 61 7a 41 72 67 5b 31 5d 2c 22 63 73 76 22  p(azArg[1],"csv"
25a60 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ,n2)==0 ){.     
25a70 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f   p->mode = MODE_
25a80 43 73 76 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Csv;.      sqlit
25a90 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
25aa0 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  of(p->colSeparat
25ab0 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72  or), p->colSepar
25ac0 61 74 6f 72 2c 20 53 45 50 5f 43 6f 6d 6d 61 29  ator, SEP_Comma)
25ad0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
25ae0 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28  snprintf(sizeof(
25af0 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29  p->rowSeparator)
25b00 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  , p->rowSeparato
25b10 72 2c 20 53 45 50 5f 43 72 4c 66 29 3b 0a 20 20  r, SEP_CrLf);.  
25b20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32 3d 3d    }else if( c2==
25b30 27 74 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  't' && strncmp(a
25b40 7a 41 72 67 5b 31 5d 2c 22 74 61 62 73 22 2c 6e  zArg[1],"tabs",n
25b50 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70  2)==0 ){.      p
25b60 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c 69  ->mode = MODE_Li
25b70 73 74 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  st;.      sqlite
25b80 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
25b90 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  f(p->colSeparato
25ba0 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61  r), p->colSepara
25bb0 74 6f 72 2c 20 53 45 50 5f 54 61 62 29 3b 0a 20  tor, SEP_Tab);. 
25bc0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32 3d     }else if( c2=
25bd0 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='i' && strncmp(
25be0 61 7a 41 72 67 5b 31 5d 2c 22 69 6e 73 65 72 74  azArg[1],"insert
25bf0 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ",n2)==0 ){.    
25c00 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45    p->mode = MODE
25c10 5f 49 6e 73 65 72 74 3b 0a 20 20 20 20 20 20 73  _Insert;.      s
25c20 65 74 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 70 2c  et_table_name(p,
25c30 20 6e 41 72 67 3e 3d 33 20 3f 20 61 7a 41 72 67   nArg>=3 ? azArg
25c40 5b 32 5d 20 3a 20 22 74 61 62 6c 65 22 29 3b 0a  [2] : "table");.
25c50 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32      }else if( c2
25c60 3d 3d 27 71 27 20 26 26 20 73 74 72 6e 63 6d 70  =='q' && strncmp
25c70 28 61 7a 41 72 67 5b 31 5d 2c 22 71 75 6f 74 65  (azArg[1],"quote
25c80 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ",n2)==0 ){.    
25c90 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45    p->mode = MODE
25ca0 5f 51 75 6f 74 65 3b 0a 20 20 20 20 7d 65 6c 73  _Quote;.    }els
25cb0 65 20 69 66 28 20 63 32 3d 3d 27 61 27 20 26 26  e if( c2=='a' &&
25cc0 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31   strncmp(azArg[1
25cd0 5d 2c 22 61 73 63 69 69 22 2c 6e 32 29 3d 3d 30  ],"ascii",n2)==0
25ce0 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64   ){.      p->mod
25cf0 65 20 3d 20 4d 4f 44 45 5f 41 73 63 69 69 3b 0a  e = MODE_Ascii;.
25d00 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
25d10 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d  printf(sizeof(p-
25d20 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c 20  >colSeparator), 
25d30 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c  p->colSeparator,
25d40 20 53 45 50 5f 55 6e 69 74 29 3b 0a 20 20 20 20   SEP_Unit);.    
25d50 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
25d60 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77  tf(sizeof(p->row
25d70 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72  Separator), p->r
25d80 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50  owSeparator, SEP
25d90 5f 52 65 63 6f 72 64 29 3b 0a 20 20 20 20 7d 65  _Record);.    }e
25da0 6c 73 65 20 69 66 28 20 6e 41 72 67 3d 3d 31 20  lse if( nArg==1 
25db0 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
25dc0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 63 75 72  ntf(p->out, "cur
25dd0 72 65 6e 74 20 6f 75 74 70 75 74 20 6d 6f 64 65  rent output mode
25de0 3a 20 25 73 5c 6e 22 2c 20 6d 6f 64 65 44 65 73  : %s\n", modeDes
25df0 63 72 5b 70 2d 3e 6d 6f 64 65 5d 29 3b 0a 20 20  cr[p->mode]);.  
25e00 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
25e10 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
25e20 2c 20 22 45 72 72 6f 72 3a 20 6d 6f 64 65 20 73  , "Error: mode s
25e30 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a  hould be one of:
25e40 20 22 0a 20 20 20 20 20 20 20 20 20 22 61 73 63   ".         "asc
25e50 69 69 20 63 6f 6c 75 6d 6e 20 63 73 76 20 68 74  ii column csv ht
25e60 6d 6c 20 69 6e 73 65 72 74 20 6c 69 6e 65 20 6c  ml insert line l
25e70 69 73 74 20 71 75 6f 74 65 20 74 61 62 73 20 74  ist quote tabs t
25e80 63 6c 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  cl\n");.      rc
25e90 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 1;.    }.    
25ea0 70 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f  p->cMode = p->mo
25eb0 64 65 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69  de;.  }else..  i
25ec0 66 28 20 63 3d 3d 27 6e 27 20 26 26 20 73 74 72  f( c=='n' && str
25ed0 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
25ee0 6e 75 6c 6c 76 61 6c 75 65 22 2c 20 6e 29 3d 3d  nullvalue", n)==
25ef0 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72  0 ){.    if( nAr
25f00 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 73 71  g==2 ){.      sq
25f10 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
25f20 69 7a 65 6f 66 28 70 2d 3e 6e 75 6c 6c 56 61 6c  izeof(p->nullVal
25f30 75 65 29 2c 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75  ue), p->nullValu
25f40 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
25f50 20 20 20 20 20 20 20 20 20 20 22 25 2e 2a 73 22            "%.*s"
25f60 2c 20 28 69 6e 74 29 41 72 72 61 79 53 69 7a 65  , (int)ArraySize
25f70 28 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 2d 31  (p->nullValue)-1
25f80 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  , azArg[1]);.   
25f90 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61   }else{.      ra
25fa0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
25fb0 20 22 55 73 61 67 65 3a 20 2e 6e 75 6c 6c 76 61   "Usage: .nullva
25fc0 6c 75 65 20 53 54 52 49 4e 47 5c 6e 22 29 3b 0a  lue STRING\n");.
25fd0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
25fe0 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
25ff0 66 28 20 63 3d 3d 27 6f 27 20 26 26 20 73 74 72  f( c=='o' && str
26000 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
26010 6f 70 65 6e 22 2c 20 6e 29 3d 3d 30 20 26 26 20  open", n)==0 && 
26020 6e 3e 3d 32 20 29 7b 0a 20 20 20 20 63 68 61 72  n>=2 ){.    char
26030 20 2a 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 3b 20   *zNewFilename; 
26040 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
26050 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
26060 20 6f 70 65 6e 20 2a 2f 0a 20 20 20 20 69 6e 74   open */.    int
26070 20 69 4e 61 6d 65 20 3d 20 31 3b 20 20 20 20 20   iName = 1;     
26080 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 61 7a    /* Index in az
26090 41 72 67 5b 5d 20 6f 66 20 74 68 65 20 66 69 6c  Arg[] of the fil
260a0 65 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74  ename */.    int
260b0 20 6e 65 77 46 6c 61 67 20 3d 20 30 3b 20 20 20   newFlag = 0;   
260c0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 65 6c    /* True to del
260d0 65 74 65 20 66 69 6c 65 20 62 65 66 6f 72 65 20  ete file before 
260e0 6f 70 65 6e 69 6e 67 20 2a 2f 0a 20 20 20 20 2f  opening */.    /
260f0 2a 20 43 6c 6f 73 65 20 74 68 65 20 65 78 69 73  * Close the exis
26100 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 2a 2f  ting database */
26110 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 63 6c 6f  .    session_clo
26120 73 65 5f 61 6c 6c 28 70 29 3b 0a 20 20 20 20 73  se_all(p);.    s
26130 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 2d 3e  qlite3_close(p->
26140 64 62 29 3b 0a 20 20 20 20 70 2d 3e 64 62 20 3d  db);.    p->db =
26150 20 30 3b 0a 20 20 20 20 70 2d 3e 7a 44 62 46 69   0;.    p->zDbFi
26160 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a 20 20 20 20  lename = 0;.    
26170 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 2d 3e  sqlite3_free(p->
26180 7a 46 72 65 65 4f 6e 43 6c 6f 73 65 29 3b 0a 20  zFreeOnClose);. 
26190 20 20 20 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f     p->zFreeOnClo
261a0 73 65 20 3d 20 30 3b 0a 20 20 20 20 2f 2a 20 43  se = 0;.    /* C
261b0 68 65 63 6b 20 66 6f 72 20 63 6f 6d 6d 61 6e 64  heck for command
261c0 2d 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 20  -line arguments 
261d0 2a 2f 0a 20 20 20 20 66 6f 72 28 69 4e 61 6d 65  */.    for(iName
261e0 3d 31 3b 20 69 4e 61 6d 65 3c 6e 41 72 67 20 26  =1; iName<nArg &
261f0 26 20 61 7a 41 72 67 5b 69 4e 61 6d 65 5d 5b 30  & azArg[iName][0
26200 5d 3d 3d 27 2d 27 3b 20 69 4e 61 6d 65 2b 2b 29  ]=='-'; iName++)
26210 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
26220 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 4e  ar *z = azArg[iN
26230 61 6d 65 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  ame];.      if( 
26240 6f 70 74 69 6f 6e 4d 61 74 63 68 28 7a 2c 22 6e  optionMatch(z,"n
26250 65 77 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ew") ){.        
26260 6e 65 77 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20  newFlag = 1;.   
26270 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b 30     }else if( z[0
26280 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20  ]=='-' ){.      
26290 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
262a0 64 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6f  derr, "unknown o
262b0 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 7a 29  ption: %s\n", z)
262c0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31  ;.        rc = 1
262d0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d  ;.        goto m
262e0 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
262f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
26300 20 20 20 20 2f 2a 20 49 66 20 61 20 66 69 6c 65      /* If a file
26310 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65  name is specifie
26320 64 2c 20 74 72 79 20 74 6f 20 6f 70 65 6e 20 69  d, try to open i
26330 74 20 66 69 72 73 74 20 2a 2f 0a 20 20 20 20 7a  t first */.    z
26340 4e 65 77 46 69 6c 65 6e 61 6d 65 20 3d 20 6e 41  NewFilename = nA
26350 72 67 3e 69 4e 61 6d 65 20 3f 20 73 71 6c 69 74  rg>iName ? sqlit
26360 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c  e3_mprintf("%s",
26370 20 61 7a 41 72 67 5b 69 4e 61 6d 65 5d 29 20 3a   azArg[iName]) :
26380 20 30 3b 0a 20 20 20 20 69 66 28 20 7a 4e 65 77   0;.    if( zNew
26390 46 69 6c 65 6e 61 6d 65 20 29 7b 0a 20 20 20 20  Filename ){.    
263a0 20 20 69 66 28 20 6e 65 77 46 6c 61 67 20 29 20    if( newFlag ) 
263b0 73 68 65 6c 6c 44 65 6c 65 74 65 46 69 6c 65 28  shellDeleteFile(
263c0 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 29 3b 0a 20  zNewFilename);. 
263d0 20 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c 65 6e       p->zDbFilen
263e0 61 6d 65 20 3d 20 7a 4e 65 77 46 69 6c 65 6e 61  ame = zNewFilena
263f0 6d 65 3b 0a 20 20 20 20 20 20 6f 70 65 6e 5f 64  me;.      open_d
26400 62 28 70 2c 20 31 29 3b 0a 20 20 20 20 20 20 69  b(p, 1);.      i
26410 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29 7b 0a 20  f( p->db==0 ){. 
26420 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
26430 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
26440 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 27  r: cannot open '
26450 25 73 27 5c 6e 22 2c 20 7a 4e 65 77 46 69 6c 65  %s'\n", zNewFile
26460 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 73  name);.        s
26470 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 4e 65 77  qlite3_free(zNew
26480 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 20 20 20  Filename);.     
26490 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
264a0 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f 73 65 20  p->zFreeOnClose 
264b0 3d 20 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 3b 0a  = zNewFilename;.
264c0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
264d0 20 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29    if( p->db==0 )
264e0 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 20 61 20  {.      /* As a 
264f0 66 61 6c 6c 2d 62 61 63 6b 20 6f 70 65 6e 20 61  fall-back open a
26500 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 20 2a   TEMP database *
26510 2f 0a 20 20 20 20 20 20 70 2d 3e 7a 44 62 46 69  /.      p->zDbFi
26520 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a 20 20 20 20  lename = 0;.    
26530 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
26540 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
26550 20 20 69 66 28 20 63 3d 3d 27 6f 27 0a 20 20 20    if( c=='o'.   
26560 26 26 20 28 73 74 72 6e 63 6d 70 28 61 7a 41 72  && (strncmp(azAr
26570 67 5b 30 5d 2c 20 22 6f 75 74 70 75 74 22 2c 20  g[0], "output", 
26580 6e 29 3d 3d 30 20 7c 7c 20 73 74 72 6e 63 6d 70  n)==0 || strncmp
26590 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6f 6e 63 65  (azArg[0], "once
265a0 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 29 7b 0a 20  ", n)==0).  ){. 
265b0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
265c0 46 69 6c 65 20 3d 20 6e 41 72 67 3e 3d 32 20 3f  File = nArg>=2 ?
265d0 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 73 74 64   azArg[1] : "std
265e0 6f 75 74 22 3b 0a 20 20 20 20 69 66 28 20 6e 41  out";.    if( nA
265f0 72 67 3e 32 20 29 7b 0a 20 20 20 20 20 20 75 74  rg>2 ){.      ut
26600 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
26610 2c 20 22 55 73 61 67 65 3a 20 2e 25 73 20 46 49  , "Usage: .%s FI
26620 4c 45 5c 6e 22 2c 20 61 7a 41 72 67 5b 30 5d 29  LE\n", azArg[0])
26630 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
26640 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
26650 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
26660 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 3e 31 20    }.    if( n>1 
26670 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
26680 5b 30 5d 2c 20 22 6f 6e 63 65 22 2c 20 6e 29 3d  [0], "once", n)=
26690 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  =0 ){.      if( 
266a0 6e 41 72 67 3c 32 20 29 7b 0a 20 20 20 20 20 20  nArg<2 ){.      
266b0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
266c0 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 6f 6e  err, "Usage: .on
266d0 63 65 20 46 49 4c 45 5c 6e 22 29 3b 0a 20 20 20  ce FILE\n");.   
266e0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
266f0 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
26700 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
26710 20 20 20 7d 0a 20 20 20 20 20 20 70 2d 3e 6f 75     }.      p->ou
26720 74 43 6f 75 6e 74 20 3d 20 32 3b 0a 20 20 20 20  tCount = 2;.    
26730 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e  }else{.      p->
26740 6f 75 74 43 6f 75 6e 74 20 3d 20 30 3b 0a 20 20  outCount = 0;.  
26750 20 20 7d 0a 20 20 20 20 6f 75 74 70 75 74 5f 72    }.    output_r
26760 65 73 65 74 28 70 29 3b 0a 20 20 20 20 69 66 28  eset(p);.    if(
26770 20 7a 46 69 6c 65 5b 30 5d 3d 3d 27 7c 27 20 29   zFile[0]=='|' )
26780 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
26790 4f 4d 49 54 5f 50 4f 50 45 4e 0a 20 20 20 20 20  OMIT_POPEN.     
267a0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
267b0 72 72 2c 20 22 45 72 72 6f 72 3a 20 70 69 70 65  rr, "Error: pipe
267c0 73 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72  s are not suppor
267d0 74 65 64 20 69 6e 20 74 68 69 73 20 4f 53 5c 6e  ted in this OS\n
267e0 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
267f0 3b 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d  ;.      p->out =
26800 20 73 74 64 6f 75 74 3b 0a 23 65 6c 73 65 0a 20   stdout;.#else. 
26810 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 70 6f       p->out = po
26820 70 65 6e 28 7a 46 69 6c 65 20 2b 20 31 2c 20 22  pen(zFile + 1, "
26830 77 22 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  w");.      if( p
26840 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ->out==0 ){.    
26850 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
26860 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 63  stderr,"Error: c
26870 61 6e 6e 6f 74 20 6f 70 65 6e 20 70 69 70 65 20  annot open pipe 
26880 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c 65  \"%s\"\n", zFile
26890 20 2b 20 31 29 3b 0a 20 20 20 20 20 20 20 20 70   + 1);.        p
268a0 2d 3e 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a  ->out = stdout;.
268b0 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
268c0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
268d0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
268e0 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e  rintf(sizeof(p->
268f0 6f 75 74 66 69 6c 65 29 2c 20 70 2d 3e 6f 75 74  outfile), p->out
26900 66 69 6c 65 2c 20 22 25 73 22 2c 20 7a 46 69 6c  file, "%s", zFil
26910 65 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64  e);.      }.#end
26920 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  if.    }else{.  
26930 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 6f 75 74      p->out = out
26940 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 7a 46  put_file_open(zF
26950 69 6c 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ile);.      if( 
26960 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20  p->out==0 ){.   
26970 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
26980 7a 46 69 6c 65 2c 22 6f 66 66 22 29 21 3d 30 20  zFile,"off")!=0 
26990 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66  ){.          utf
269a0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
269b0 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 77  "Error: cannot w
269c0 72 69 74 65 20 74 6f 20 5c 22 25 73 5c 22 5c 6e  rite to \"%s\"\n
269d0 22 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20  ", zFile);.     
269e0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 2d 3e     }.        p->
269f0 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a 20 20  out = stdout;.  
26a00 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
26a10 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
26a20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
26a30 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e  rintf(sizeof(p->
26a40 6f 75 74 66 69 6c 65 29 2c 20 70 2d 3e 6f 75 74  outfile), p->out
26a50 66 69 6c 65 2c 20 22 25 73 22 2c 20 7a 46 69 6c  file, "%s", zFil
26a60 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
26a70 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
26a80 20 63 3d 3d 27 70 27 20 26 26 20 6e 3e 3d 33 20   c=='p' && n>=3 
26a90 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
26aa0 5b 30 5d 2c 20 22 70 72 69 6e 74 22 2c 20 6e 29  [0], "print", n)
26ab0 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  ==0 ){.    int i
26ac0 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b 20 69  ;.    for(i=1; i
26ad0 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
26ae0 20 20 20 69 66 28 20 69 3e 31 20 29 20 72 61 77     if( i>1 ) raw
26af0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
26b00 22 20 22 29 3b 0a 20 20 20 20 20 20 75 74 66 38  " ");.      utf8
26b10 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
26b20 22 25 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b  "%s", azArg[i]);
26b30 0a 20 20 20 20 7d 0a 20 20 20 20 72 61 77 5f 70  .    }.    raw_p
26b40 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c  rintf(p->out, "\
26b50 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20  n");.  }else..  
26b60 69 66 28 20 63 3d 3d 27 70 27 20 26 26 20 73 74  if( c=='p' && st
26b70 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
26b80 22 70 72 6f 6d 70 74 22 2c 20 6e 29 3d 3d 30 20  "prompt", n)==0 
26b90 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 20  ){.    if( nArg 
26ba0 3e 3d 20 32 29 20 7b 0a 20 20 20 20 20 20 73 74  >= 2) {.      st
26bb0 72 6e 63 70 79 28 6d 61 69 6e 50 72 6f 6d 70 74  rncpy(mainPrompt
26bc0 2c 61 7a 41 72 67 5b 31 5d 2c 28 69 6e 74 29 41  ,azArg[1],(int)A
26bd0 72 72 61 79 53 69 7a 65 28 6d 61 69 6e 50 72 6f  rraySize(mainPro
26be0 6d 70 74 29 2d 31 29 3b 0a 20 20 20 20 7d 0a 20  mpt)-1);.    }. 
26bf0 20 20 20 69 66 28 20 6e 41 72 67 20 3e 3d 20 33     if( nArg >= 3
26c00 29 20 7b 0a 20 20 20 20 20 20 73 74 72 6e 63 70  ) {.      strncp
26c10 79 28 63 6f 6e 74 69 6e 75 65 50 72 6f 6d 70 74  y(continuePrompt
26c20 2c 61 7a 41 72 67 5b 32 5d 2c 28 69 6e 74 29 41  ,azArg[2],(int)A
26c30 72 72 61 79 53 69 7a 65 28 63 6f 6e 74 69 6e 75  rraySize(continu
26c40 65 50 72 6f 6d 70 74 29 2d 31 29 3b 0a 20 20 20  ePrompt)-1);.   
26c50 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66   }.  }else..  if
26c60 28 20 63 3d 3d 27 71 27 20 26 26 20 73 74 72 6e  ( c=='q' && strn
26c70 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 71  cmp(azArg[0], "q
26c80 75 69 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  uit", n)==0 ){. 
26c90 20 20 20 72 63 20 3d 20 32 3b 0a 20 20 7d 65 6c     rc = 2;.  }el
26ca0 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 72 27  se..  if( c=='r'
26cb0 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e   && n>=3 && strn
26cc0 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 72  cmp(azArg[0], "r
26cd0 65 61 64 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ead", n)==0 ){. 
26ce0 20 20 20 46 49 4c 45 20 2a 61 6c 74 3b 0a 20 20     FILE *alt;.  
26cf0 20 20 69 66 28 20 6e 41 72 67 21 3d 32 20 29 7b    if( nArg!=2 ){
26d00 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
26d10 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
26d20 3a 20 2e 72 65 61 64 20 46 49 4c 45 5c 6e 22 29  : .read FILE\n")
26d30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
26d40 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
26d50 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
26d60 20 20 7d 0a 20 20 20 20 61 6c 74 20 3d 20 66 6f    }.    alt = fo
26d70 70 65 6e 28 61 7a 41 72 67 5b 31 5d 2c 20 22 72  pen(azArg[1], "r
26d80 62 22 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 74  b");.    if( alt
26d90 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66  ==0 ){.      utf
26da0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
26db0 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f  "Error: cannot o
26dc0 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61  pen \"%s\"\n", a
26dd0 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20  zArg[1]);.      
26de0 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  rc = 1;.    }els
26df0 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 70 72  e{.      rc = pr
26e00 6f 63 65 73 73 5f 69 6e 70 75 74 28 70 2c 20 61  ocess_input(p, a
26e10 6c 74 29 3b 0a 20 20 20 20 20 20 66 63 6c 6f 73  lt);.      fclos
26e20 65 28 61 6c 74 29 3b 0a 20 20 20 20 7d 0a 20 20  e(alt);.    }.  
26e30 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
26e40 27 72 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73  'r' && n>=3 && s
26e50 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
26e60 20 22 72 65 73 74 6f 72 65 22 2c 20 6e 29 3d 3d   "restore", n)==
26e70 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  0 ){.    const c
26e80 68 61 72 20 2a 7a 53 72 63 46 69 6c 65 3b 0a 20  har *zSrcFile;. 
26e90 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
26ea0 44 62 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  Db;.    sqlite3 
26eb0 2a 70 53 72 63 3b 0a 20 20 20 20 73 71 6c 69 74  *pSrc;.    sqlit
26ec0 65 33 5f 62 61 63 6b 75 70 20 2a 70 42 61 63 6b  e3_backup *pBack
26ed0 75 70 3b 0a 20 20 20 20 69 6e 74 20 6e 54 69 6d  up;.    int nTim
26ee0 65 6f 75 74 20 3d 20 30 3b 0a 0a 20 20 20 20 69  eout = 0;..    i
26ef0 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20  f( nArg==2 ){.  
26f00 20 20 20 20 7a 53 72 63 46 69 6c 65 20 3d 20 61      zSrcFile = a
26f10 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 20 20 7a  zArg[1];.      z
26f20 44 62 20 3d 20 22 6d 61 69 6e 22 3b 0a 20 20 20  Db = "main";.   
26f30 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67 3d   }else if( nArg=
26f40 3d 33 20 29 7b 0a 20 20 20 20 20 20 7a 53 72 63  =3 ){.      zSrc
26f50 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b 32 5d 3b  File = azArg[2];
26f60 0a 20 20 20 20 20 20 7a 44 62 20 3d 20 61 7a 41  .      zDb = azA
26f70 72 67 5b 31 5d 3b 0a 20 20 20 20 7d 65 6c 73 65  rg[1];.    }else
26f80 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
26f90 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
26fa0 65 3a 20 2e 72 65 73 74 6f 72 65 20 3f 44 42 3f  e: .restore ?DB?
26fb0 20 46 49 4c 45 5c 6e 22 29 3b 0a 20 20 20 20 20   FILE\n");.     
26fc0 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67   rc = 1;.      g
26fd0 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
26fe0 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20  _exit;.    }.   
26ff0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70   rc = sqlite3_op
27000 65 6e 28 7a 53 72 63 46 69 6c 65 2c 20 26 70 53  en(zSrcFile, &pS
27010 72 63 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  rc);.    if( rc!
27020 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
27030 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
27040 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
27050 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73  cannot open \"%s
27060 5c 22 5c 6e 22 2c 20 7a 53 72 63 46 69 6c 65 29  \"\n", zSrcFile)
27070 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
27080 63 6c 6f 73 65 28 70 53 72 63 29 3b 0a 20 20 20  close(pSrc);.   
27090 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
270a0 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70   }.    open_db(p
270b0 2c 20 30 29 3b 0a 20 20 20 20 70 42 61 63 6b 75  , 0);.    pBacku
270c0 70 20 3d 20 73 71 6c 69 74 65 33 5f 62 61 63 6b  p = sqlite3_back
270d0 75 70 5f 69 6e 69 74 28 70 2d 3e 64 62 2c 20 7a  up_init(p->db, z
270e0 44 62 2c 20 70 53 72 63 2c 20 22 6d 61 69 6e 22  Db, pSrc, "main"
270f0 29 3b 0a 20 20 20 20 69 66 28 20 70 42 61 63 6b  );.    if( pBack
27100 75 70 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75  up==0 ){.      u
27110 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
27120 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22  r, "Error: %s\n"
27130 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
27140 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20  (p->db));.      
27150 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 53  sqlite3_close(pS
27160 72 63 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  rc);.      retur
27170 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77  n 1;.    }.    w
27180 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c 69  hile( (rc = sqli
27190 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70 28  te3_backup_step(
271a0 70 42 61 63 6b 75 70 2c 31 30 30 29 29 3d 3d 53  pBackup,100))==S
271b0 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 20 20  QLITE_OK.       
271c0 20 20 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45     || rc==SQLITE
271d0 5f 42 55 53 59 20 20 29 7b 0a 20 20 20 20 20 20  _BUSY  ){.      
271e0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
271f0 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 69  USY ){.        i
27200 66 28 20 6e 54 69 6d 65 6f 75 74 2b 2b 20 3e 3d  f( nTimeout++ >=
27210 20 33 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20   3 ) break;.    
27220 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6c 65 65      sqlite3_slee
27230 70 28 31 30 30 29 3b 0a 20 20 20 20 20 20 7d 0a  p(100);.      }.
27240 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
27250 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28  3_backup_finish(
27260 70 42 61 63 6b 75 70 29 3b 0a 20 20 20 20 69 66  pBackup);.    if
27270 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc==SQLITE_DON
27280 45 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  E ){.      rc = 
27290 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
272a0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
272b0 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4c   || rc==SQLITE_L
272c0 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 72  OCKED ){.      r
272d0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
272e0 2c 20 22 45 72 72 6f 72 3a 20 73 6f 75 72 63 65  , "Error: source
272f0 20 64 61 74 61 62 61 73 65 20 69 73 20 62 75 73   database is bus
27300 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20  y\n");.      rc 
27310 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 1;.    }else{.
27320 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
27330 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
27340 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33  : %s\n", sqlite3
27350 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b  _errmsg(p->db));
27360 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
27370 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
27380 5f 63 6c 6f 73 65 28 70 53 72 63 29 3b 0a 20 20  _close(pSrc);.  
27390 7d 65 6c 73 65 0a 0a 0a 20 20 69 66 28 20 63 3d  }else...  if( c=
273a0 3d 27 73 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='s' && strncmp(
273b0 61 7a 41 72 67 5b 30 5d 2c 20 22 73 63 61 6e 73  azArg[0], "scans
273c0 74 61 74 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  tats", n)==0 ){.
273d0 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20      if( nArg==2 
273e0 29 7b 0a 20 20 20 20 20 20 70 2d 3e 73 63 61 6e  ){.      p->scan
273f0 73 74 61 74 73 4f 6e 20 3d 20 62 6f 6f 6c 65 61  statsOn = boolea
27400 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29  nValue(azArg[1])
27410 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
27420 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
27430 4e 53 54 41 54 55 53 0a 20 20 20 20 20 20 72 61  NSTATUS.      ra
27440 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
27450 20 22 57 61 72 6e 69 6e 67 3a 20 2e 73 63 61 6e   "Warning: .scan
27460 73 74 61 74 73 20 6e 6f 74 20 61 76 61 69 6c 61  stats not availa
27470 62 6c 65 20 69 6e 20 74 68 69 73 20 62 75 69 6c  ble in this buil
27480 64 2e 5c 6e 22 29 3b 0a 23 65 6e 64 69 66 0a 20  d.\n");.#endif. 
27490 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
274a0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
274b0 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 63 61 6e  r, "Usage: .scan
274c0 73 74 61 74 73 20 6f 6e 7c 6f 66 66 5c 6e 22 29  stats on|off\n")
274d0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
274e0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
274f0 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 73   if( c=='s' && s
27500 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
27510 20 22 73 63 68 65 6d 61 22 2c 20 6e 29 3d 3d 30   "schema", n)==0
27520 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c 54 65 78   ){.    ShellTex
27530 74 20 73 53 65 6c 65 63 74 3b 0a 20 20 20 20 53  t sSelect;.    S
27540 68 65 6c 6c 53 74 61 74 65 20 64 61 74 61 3b 0a  hellState data;.
27550 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73      char *zErrMs
27560 67 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74  g = 0;.    const
27570 20 63 68 61 72 20 2a 7a 44 69 76 20 3d 20 30 3b   char *zDiv = 0;
27580 0a 20 20 20 20 69 6e 74 20 69 53 63 68 65 6d 61  .    int iSchema
27590 20 3d 20 30 3b 0a 0a 20 20 20 20 6f 70 65 6e 5f   = 0;..    open_
275a0 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 6d 65  db(p, 0);.    me
275b0 6d 63 70 79 28 26 64 61 74 61 2c 20 70 2c 20 73  mcpy(&data, p, s
275c0 69 7a 65 6f 66 28 64 61 74 61 29 29 3b 0a 20 20  izeof(data));.  
275d0 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61 64 65    data.showHeade
275e0 72 20 3d 20 30 3b 0a 20 20 20 20 64 61 74 61 2e  r = 0;.    data.
275f0 63 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64  cMode = data.mod
27600 65 20 3d 20 4d 4f 44 45 5f 53 65 6d 69 3b 0a 20  e = MODE_Semi;. 
27610 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 53 65     initText(&sSe
27620 6c 65 63 74 29 3b 0a 20 20 20 20 69 66 28 20 6e  lect);.    if( n
27630 41 72 67 3e 3d 32 20 26 26 20 6f 70 74 69 6f 6e  Arg>=2 && option
27640 4d 61 74 63 68 28 61 7a 41 72 67 5b 31 5d 2c 20  Match(azArg[1], 
27650 22 69 6e 64 65 6e 74 22 29 20 29 7b 0a 20 20 20  "indent") ){.   
27660 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20     data.cMode = 
27670 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45  data.mode = MODE
27680 5f 50 72 65 74 74 79 3b 0a 20 20 20 20 20 20 6e  _Pretty;.      n
27690 41 72 67 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28  Arg--;.      if(
276a0 20 6e 41 72 67 3d 3d 32 20 29 20 61 7a 41 72 67   nArg==2 ) azArg
276b0 5b 31 5d 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a  [1] = azArg[2];.
276c0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 41      }.    if( nA
276d0 72 67 3d 3d 32 20 26 26 20 61 7a 41 72 67 5b 31  rg==2 && azArg[1
276e0 5d 5b 30 5d 21 3d 27 2d 27 20 29 7b 0a 20 20 20  ][0]!='-' ){.   
276f0 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20     int i;.      
27700 66 6f 72 28 69 3d 30 3b 20 61 7a 41 72 67 5b 31  for(i=0; azArg[1
27710 5d 5b 69 5d 3b 20 69 2b 2b 29 20 61 7a 41 72 67  ][i]; i++) azArg
27720 5b 31 5d 5b 69 5d 20 3d 20 54 6f 4c 6f 77 65 72  [1][i] = ToLower
27730 28 61 7a 41 72 67 5b 31 5d 5b 69 5d 29 3b 0a 20  (azArg[1][i]);. 
27740 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
27750 61 7a 41 72 67 5b 31 5d 2c 22 73 71 6c 69 74 65  azArg[1],"sqlite
27760 5f 6d 61 73 74 65 72 22 29 3d 3d 30 20 29 7b 0a  _master")==0 ){.
27770 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 6e 65          char *ne
27780 77 5f 61 72 67 76 5b 32 5d 2c 20 2a 6e 65 77 5f  w_argv[2], *new_
27790 63 6f 6c 76 5b 32 5d 3b 0a 20 20 20 20 20 20 20  colv[2];.       
277a0 20 6e 65 77 5f 61 72 67 76 5b 30 5d 20 3d 20 22   new_argv[0] = "
277b0 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c  CREATE TABLE sql
277c0 69 74 65 5f 6d 61 73 74 65 72 20 28 5c 6e 22 0a  ite_master (\n".
277d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277e0 20 20 20 20 20 20 22 20 20 74 79 70 65 20 74 65        "  type te
277f0 78 74 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20 20  xt,\n".         
27800 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20               "  
27810 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20  name text,\n".  
27820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27830 20 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65 20      "  tbl_name 
27840 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 20 20  text,\n".       
27850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
27860 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67    rootpage integ
27870 65 72 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20 20  er,\n".         
27880 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20               "  
27890 73 71 6c 20 74 65 78 74 5c 6e 22 0a 20 20 20 20  sql text\n".    
278a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278b0 20 20 22 29 22 3b 0a 20 20 20 20 20 20 20 20 6e    ")";.        n
278c0 65 77 5f 61 72 67 76 5b 31 5d 20 3d 20 30 3b 0a  ew_argv[1] = 0;.
278d0 20 20 20 20 20 20 20 20 6e 65 77 5f 63 6f 6c 76          new_colv
278e0 5b 30 5d 20 3d 20 22 73 71 6c 22 3b 0a 20 20 20  [0] = "sql";.   
278f0 20 20 20 20 20 6e 65 77 5f 63 6f 6c 76 5b 31 5d       new_colv[1]
27900 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 63 61   = 0;.        ca
27910 6c 6c 62 61 63 6b 28 26 64 61 74 61 2c 20 31 2c  llback(&data, 1,
27920 20 6e 65 77 5f 61 72 67 76 2c 20 6e 65 77 5f 63   new_argv, new_c
27930 6f 6c 76 29 3b 0a 20 20 20 20 20 20 20 20 72 63  olv);.        rc
27940 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
27950 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
27960 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 73  rcmp(azArg[1],"s
27970 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
27980 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  r")==0 ){.      
27990 20 20 63 68 61 72 20 2a 6e 65 77 5f 61 72 67 76    char *new_argv
279a0 5b 32 5d 2c 20 2a 6e 65 77 5f 63 6f 6c 76 5b 32  [2], *new_colv[2
279b0 5d 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 61  ];.        new_a
279c0 72 67 76 5b 30 5d 20 3d 20 22 43 52 45 41 54 45  rgv[0] = "CREATE
279d0 20 54 45 4d 50 20 54 41 42 4c 45 20 73 71 6c 69   TEMP TABLE sqli
279e0 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 28  te_temp_master (
279f0 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  \n".            
27a00 20 20 20 20 20 20 20 20 20 20 22 20 20 74 79 70            "  typ
27a10 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20  e text,\n".     
27a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a30 20 22 20 20 6e 61 6d 65 20 74 65 78 74 2c 5c 6e   "  name text,\n
27a40 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
27a50 20 20 20 20 20 20 20 20 22 20 20 74 62 6c 5f 6e          "  tbl_n
27a60 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20  ame text,\n".   
27a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a80 20 20 20 22 20 20 72 6f 6f 74 70 61 67 65 20 69     "  rootpage i
27a90 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20 20 20 20  nteger,\n".     
27aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ab0 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e 22 0a   "  sql text\n".
27ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ad0 20 20 20 20 20 20 22 29 22 3b 0a 20 20 20 20 20        ")";.     
27ae0 20 20 20 6e 65 77 5f 61 72 67 76 5b 31 5d 20 3d     new_argv[1] =
27af0 20 30 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f   0;.        new_
27b00 63 6f 6c 76 5b 30 5d 20 3d 20 22 73 71 6c 22 3b  colv[0] = "sql";
27b10 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 63 6f 6c  .        new_col
27b20 76 5b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  v[1] = 0;.      
27b30 20 20 63 61 6c 6c 62 61 63 6b 28 26 64 61 74 61    callback(&data
27b40 2c 20 31 2c 20 6e 65 77 5f 61 72 67 76 2c 20 6e  , 1, new_argv, n
27b50 65 77 5f 63 6f 6c 76 29 3b 0a 20 20 20 20 20 20  ew_colv);.      
27b60 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
27b70 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
27b80 20 20 20 20 20 20 20 7a 44 69 76 20 3d 20 22 28         zDiv = "(
27b90 22 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ";.      }.    }
27ba0 65 6c 73 65 20 69 66 28 20 6e 41 72 67 3d 3d 31  else if( nArg==1
27bb0 20 29 7b 0a 20 20 20 20 20 20 7a 44 69 76 20 3d   ){.      zDiv =
27bc0 20 22 28 22 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   "(";.    }else{
27bd0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
27be0 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
27bf0 3a 20 2e 73 63 68 65 6d 61 20 3f 2d 2d 69 6e 64  : .schema ?--ind
27c00 65 6e 74 3f 20 3f 4c 49 4b 45 2d 50 41 54 54 45  ent? ?LIKE-PATTE
27c10 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  RN?\n");.      r
27c20 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74  c = 1;.      got
27c30 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
27c40 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  xit;.    }.    i
27c50 66 28 20 7a 44 69 76 20 29 7b 0a 20 20 20 20 20  f( zDiv ){.     
27c60 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
27c70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  Stmt = 0;.      
27c80 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
27c90 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 22  pare_v2(p->db, "
27ca0 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
27cb0 20 70 72 61 67 6d 61 5f 64 61 74 61 62 61 73 65   pragma_database
27cc0 5f 6c 69 73 74 22 2c 0a 20 20 20 20 20 20 20 20  _list",.        
27cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ce0 20 20 20 20 20 20 2d 31 2c 20 26 70 53 74 6d 74        -1, &pStmt
27cf0 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
27d00 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74  rc ){.        ut
27d10 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
27d20 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c  , "Error: %s\n",
27d30 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
27d40 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 20  p->db));.       
27d50 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
27d60 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20  e(pStmt);.      
27d70 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
27d80 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
27d90 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20  and_exit;.      
27da0 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65  }.      appendTe
27db0 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 53 45  xt(&sSelect, "SE
27dc0 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 22 2c 20  LECT sql FROM", 
27dd0 30 29 3b 0a 20 20 20 20 20 20 69 53 63 68 65 6d  0);.      iSchem
27de0 61 20 3d 20 30 3b 0a 20 20 20 20 20 20 77 68 69  a = 0;.      whi
27df0 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70  le( sqlite3_step
27e00 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f  (pStmt)==SQLITE_
27e10 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 20 20 63  ROW ){.        c
27e20 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
27e30 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
27e40 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
27e50 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20  t(pStmt, 0);.   
27e60 20 20 20 20 20 63 68 61 72 20 7a 53 63 4e 75 6d       char zScNum
27e70 5b 33 30 5d 3b 0a 20 20 20 20 20 20 20 20 73 71  [30];.        sq
27e80 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
27e90 69 7a 65 6f 66 28 7a 53 63 4e 75 6d 29 2c 20 7a  izeof(zScNum), z
27ea0 53 63 4e 75 6d 2c 20 22 25 64 22 2c 20 2b 2b 69  ScNum, "%d", ++i
27eb0 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20 20 20  Schema);.       
27ec0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
27ed0 6c 65 63 74 2c 20 7a 44 69 76 2c 20 30 29 3b 0a  lect, zDiv, 0);.
27ee0 20 20 20 20 20 20 20 20 7a 44 69 76 20 3d 20 22          zDiv = "
27ef0 20 55 4e 49 4f 4e 20 41 4c 4c 20 22 3b 0a 20 20   UNION ALL ";.  
27f00 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70        if( strcmp
27f10 28 7a 44 62 2c 20 22 6d 61 69 6e 22 29 21 3d 30  (zDb, "main")!=0
27f20 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70   ){.          ap
27f30 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63  pendText(&sSelec
27f40 74 2c 20 22 53 45 4c 45 43 54 20 73 68 65 6c 6c  t, "SELECT shell
27f50 5f 61 64 64 5f 73 63 68 65 6d 61 28 73 71 6c 2c  _add_schema(sql,
27f60 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  ", 0);.         
27f70 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65   appendText(&sSe
27f80 6c 65 63 74 2c 20 7a 44 62 2c 20 27 22 27 29 3b  lect, zDb, '"');
27f90 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e  .          appen
27fa0 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20  dText(&sSelect, 
27fb0 22 29 20 41 53 20 73 71 6c 2c 20 74 79 70 65 2c  ") AS sql, type,
27fc0 20 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c   tbl_name, name,
27fd0 20 72 6f 77 69 64 2c 22 2c 20 30 29 3b 0a 20 20   rowid,", 0);.  
27fe0 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65          appendTe
27ff0 78 74 28 26 73 53 65 6c 65 63 74 2c 20 7a 53 63  xt(&sSelect, zSc
28000 4e 75 6d 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  Num, 0);.       
28010 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
28020 53 65 6c 65 63 74 2c 20 22 20 41 53 20 73 6e 75  Select, " AS snu
28030 6d 2c 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  m, ", 0);.      
28040 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
28050 73 53 65 6c 65 63 74 2c 20 7a 44 62 2c 20 27 5c  sSelect, zDb, '\
28060 27 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  '');.          a
28070 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
28080 63 74 2c 20 22 20 41 53 20 73 6e 61 6d 65 20 46  ct, " AS sname F
28090 52 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 20  ROM ", 0);.     
280a0 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
280b0 26 73 53 65 6c 65 63 74 2c 20 7a 44 62 2c 20 27  &sSelect, zDb, '
280c0 22 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  "');.          a
280d0 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
280e0 63 74 2c 20 22 2e 73 71 6c 69 74 65 5f 6d 61 73  ct, ".sqlite_mas
280f0 74 65 72 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  ter", 0);.      
28100 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
28110 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
28120 53 65 6c 65 63 74 2c 20 22 53 45 4c 45 43 54 20  Select, "SELECT 
28130 73 71 6c 2c 20 74 79 70 65 2c 20 74 62 6c 5f 6e  sql, type, tbl_n
28140 61 6d 65 2c 20 6e 61 6d 65 2c 20 72 6f 77 69 64  ame, name, rowid
28150 2c 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  , ", 0);.       
28160 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
28170 53 65 6c 65 63 74 2c 20 7a 53 63 4e 75 6d 2c 20  Select, zScNum, 
28180 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 70  0);.          ap
28190 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63  pendText(&sSelec
281a0 74 2c 20 22 20 41 53 20 73 6e 75 6d 2c 20 27 6d  t, " AS snum, 'm
281b0 61 69 6e 27 20 41 53 20 73 6e 61 6d 65 20 46 52  ain' AS sname FR
281c0 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
281d0 22 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ",0);.        }.
281e0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
281f0 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
28200 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 61 70 70  Stmt);.      app
28210 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74  endText(&sSelect
28220 2c 20 22 29 20 57 48 45 52 45 20 22 2c 20 30 29  , ") WHERE ", 0)
28230 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 41 72 67  ;.      if( nArg
28240 3e 31 20 29 7b 0a 20 20 20 20 20 20 20 20 63 68  >1 ){.        ch
28250 61 72 20 2a 7a 51 61 72 67 20 3d 20 73 71 6c 69  ar *zQarg = sqli
28260 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 51 22  te3_mprintf("%Q"
28270 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  , azArg[1]);.   
28280 20 20 20 20 20 69 66 28 20 73 74 72 63 68 72 28       if( strchr(
28290 61 7a 41 72 67 5b 31 5d 2c 20 27 2e 27 29 20 29  azArg[1], '.') )
282a0 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 65  {.          appe
282b0 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c  ndText(&sSelect,
282c0 20 22 6c 6f 77 65 72 28 70 72 69 6e 74 66 28 27   "lower(printf('
282d0 25 73 2e 25 73 27 2c 73 6e 61 6d 65 2c 74 62 6c  %s.%s',sname,tbl
282e0 5f 6e 61 6d 65 29 29 22 2c 20 30 29 3b 0a 20 20  _name))", 0);.  
282f0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
28300 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
28310 74 28 26 73 53 65 6c 65 63 74 2c 20 22 6c 6f 77  t(&sSelect, "low
28320 65 72 28 74 62 6c 5f 6e 61 6d 65 29 22 2c 20 30  er(tbl_name)", 0
28330 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
28340 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
28350 26 73 53 65 6c 65 63 74 2c 20 73 74 72 63 68 72  &sSelect, strchr
28360 28 61 7a 41 72 67 5b 31 5d 2c 20 27 2a 27 29 20  (azArg[1], '*') 
28370 3f 20 22 20 47 4c 4f 42 20 22 20 3a 20 22 20 4c  ? " GLOB " : " L
28380 49 4b 45 20 22 2c 20 30 29 3b 0a 20 20 20 20 20  IKE ", 0);.     
28390 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
283a0 53 65 6c 65 63 74 2c 20 7a 51 61 72 67 2c 20 30  Select, zQarg, 0
283b0 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  );.        appen
283c0 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20  dText(&sSelect, 
283d0 22 20 41 4e 44 20 22 2c 20 30 29 3b 0a 20 20 20  " AND ", 0);.   
283e0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
283f0 65 28 7a 51 61 72 67 29 3b 0a 20 20 20 20 20 20  e(zQarg);.      
28400 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65  }.      appendTe
28410 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 74 79  xt(&sSelect, "ty
28420 70 65 21 3d 27 6d 65 74 61 27 20 41 4e 44 20 73  pe!='meta' AND s
28430 71 6c 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 22 0a  ql IS NOT NULL".
28440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28450 20 20 20 20 20 20 20 20 20 20 20 22 20 4f 52 44             " ORD
28460 45 52 20 42 59 20 73 6e 75 6d 2c 20 72 6f 77 69  ER BY snum, rowi
28470 64 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 72 63  d", 0);.      rc
28480 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
28490 70 2d 3e 64 62 2c 20 73 53 65 6c 65 63 74 2e 7a  p->db, sSelect.z
284a0 2c 20 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74  , callback, &dat
284b0 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20  a, &zErrMsg);.  
284c0 20 20 20 20 66 72 65 65 54 65 78 74 28 26 73 53      freeText(&sS
284d0 65 6c 65 63 74 29 3b 0a 20 20 20 20 7d 0a 20 20  elect);.    }.  
284e0 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b    if( zErrMsg ){
284f0 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
28500 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72  tf(stderr,"Error
28510 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67  : %s\n", zErrMsg
28520 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
28530 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a  _free(zErrMsg);.
28540 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
28550 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 20 21    }else if( rc !
28560 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  = SQLITE_OK ){. 
28570 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
28580 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 71  stderr,"Error: q
28590 75 65 72 79 69 6e 67 20 73 63 68 65 6d 61 20 69  uerying schema i
285a0 6e 66 6f 72 6d 61 74 69 6f 6e 5c 6e 22 29 3b 0a  nformation\n");.
285b0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
285c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
285d0 63 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  c = 0;.    }.  }
285e0 65 6c 73 65 0a 0a 23 69 66 20 64 65 66 69 6e 65  else..#if define
285f0 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
28600 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
28610 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54  E_ENABLE_SELECTT
28620 52 41 43 45 29 0a 20 20 69 66 28 20 63 3d 3d 27  RACE).  if( c=='
28630 73 27 20 26 26 20 6e 3d 3d 31 31 20 26 26 20 73  s' && n==11 && s
28640 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
28650 20 22 73 65 6c 65 63 74 74 72 61 63 65 22 2c 20   "selecttrace", 
28660 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  n)==0 ){.    sql
28670 69 74 65 33 53 65 6c 65 63 74 54 72 61 63 65 20  ite3SelectTrace 
28680 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61  = (int)integerVa
28690 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  lue(azArg[1]);. 
286a0 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 23   }else.#endif..#
286b0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
286c0 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e  E_ENABLE_SESSION
286d0 29 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26  ).  if( c=='s' &
286e0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
286f0 30 5d 2c 22 73 65 73 73 69 6f 6e 22 2c 6e 29 3d  0],"session",n)=
28700 3d 30 20 26 26 20 6e 3e 3d 33 20 29 7b 0a 20 20  =0 && n>=3 ){.  
28710 20 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20 2a 70    OpenSession *p
28720 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e 61 53  Session = &p->aS
28730 65 73 73 69 6f 6e 5b 30 5d 3b 0a 20 20 20 20 63  ession[0];.    c
28740 68 61 72 20 2a 2a 61 7a 43 6d 64 20 3d 20 26 61  har **azCmd = &a
28750 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 69 6e 74  zArg[1];.    int
28760 20 69 53 65 73 20 3d 20 30 3b 0a 20 20 20 20 69   iSes = 0;.    i
28770 6e 74 20 6e 43 6d 64 20 3d 20 6e 41 72 67 20 2d  nt nCmd = nArg -
28780 20 31 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   1;.    int i;. 
28790 20 20 20 69 66 28 20 6e 41 72 67 3c 3d 31 20 29     if( nArg<=1 )
287a0 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79   goto session_sy
287b0 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20  ntax_error;.    
287c0 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20  open_db(p, 0);. 
287d0 20 20 20 69 66 28 20 6e 41 72 67 3e 3d 33 20 29     if( nArg>=3 )
287e0 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 53 65 73  {.      for(iSes
287f0 3d 30 3b 20 69 53 65 73 3c 70 2d 3e 6e 53 65 73  =0; iSes<p->nSes
28800 73 69 6f 6e 3b 20 69 53 65 73 2b 2b 29 7b 0a 20  sion; iSes++){. 
28810 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d         if( strcm
28820 70 28 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 69 53  p(p->aSession[iS
28830 65 73 5d 2e 7a 4e 61 6d 65 2c 20 61 7a 41 72 67  es].zName, azArg
28840 5b 31 5d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  [1])==0 ) break;
28850 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
28860 66 28 20 69 53 65 73 3c 70 2d 3e 6e 53 65 73 73  f( iSes<p->nSess
28870 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ion ){.        p
28880 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e 61 53  Session = &p->aS
28890 65 73 73 69 6f 6e 5b 69 53 65 73 5d 3b 0a 20 20  ession[iSes];.  
288a0 20 20 20 20 20 20 61 7a 43 6d 64 2b 2b 3b 0a 20        azCmd++;. 
288b0 20 20 20 20 20 20 20 6e 43 6d 64 2d 2d 3b 0a 20         nCmd--;. 
288c0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
288d0 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d 20 26      pSession = &
288e0 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 30 5d 3b 0a  p->aSession[0];.
288f0 20 20 20 20 20 20 20 20 69 53 65 73 20 3d 20 30          iSes = 0
28900 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
28910 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e  .    /* .session
28920 20 61 74 74 61 63 68 20 54 41 42 4c 45 0a 20 20   attach TABLE.  
28930 20 20 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    ** Invoke the 
28940 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 61  sqlite3session_a
28950 74 74 61 63 68 28 29 20 69 6e 74 65 72 66 61 63  ttach() interfac
28960 65 20 74 6f 20 61 74 74 61 63 68 20 61 20 70 61  e to attach a pa
28970 72 74 69 63 75 6c 61 72 0a 20 20 20 20 2a 2a 20  rticular.    ** 
28980 74 61 62 6c 65 20 73 6f 20 74 68 61 74 20 69 74  table so that it
28990 20 69 73 20 6e 65 76 65 72 20 66 69 6c 74 65 72   is never filter
289a0 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ed..    */.    i
289b0 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b  f( strcmp(azCmd[
289c0 30 5d 2c 22 61 74 74 61 63 68 22 29 3d 3d 30 20  0],"attach")==0 
289d0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d  ){.      if( nCm
289e0 64 21 3d 32 20 29 20 67 6f 74 6f 20 73 65 73 73  d!=2 ) goto sess
289f0 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72  ion_syntax_error
28a00 3b 0a 20 20 20 20 20 20 69 66 28 20 70 53 65 73  ;.      if( pSes
28a10 73 69 6f 6e 2d 3e 70 3d 3d 30 20 29 7b 0a 20 20  sion->p==0 ){.  
28a20 20 20 20 20 20 20 73 65 73 73 69 6f 6e 5f 6e 6f        session_no
28a30 74 5f 6f 70 65 6e 3a 0a 20 20 20 20 20 20 20 20  t_open:.        
28a40 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
28a50 72 2c 20 22 45 52 52 4f 52 3a 20 4e 6f 20 73 65  r, "ERROR: No se
28a60 73 73 69 6f 6e 73 20 61 72 65 20 6f 70 65 6e 5c  ssions are open\
28a70 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  n");.      }else
28a80 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
28a90 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 61 74  qlite3session_at
28aa0 74 61 63 68 28 70 53 65 73 73 69 6f 6e 2d 3e 70  tach(pSession->p
28ab0 2c 20 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20 20 20  , azCmd[1]);.   
28ac0 20 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20       if( rc ){. 
28ad0 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69           raw_pri
28ae0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 52 52  ntf(stderr, "ERR
28af0 4f 52 3a 20 73 71 6c 69 74 65 33 73 65 73 73 69  OR: sqlite3sessi
28b00 6f 6e 5f 61 74 74 61 63 68 28 29 20 72 65 74 75  on_attach() retu
28b10 72 6e 73 20 25 64 5c 6e 22 2c 20 72 63 29 3b 0a  rns %d\n", rc);.
28b20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 30            rc = 0
28b30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
28b40 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20    }.    }else.. 
28b50 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 63     /* .session c
28b60 68 61 6e 67 65 73 65 74 20 46 49 4c 45 0a 20 20  hangeset FILE.  
28b70 20 20 2a 2a 20 2e 73 65 73 73 69 6f 6e 20 70 61    ** .session pa
28b80 74 63 68 73 65 74 20 46 49 4c 45 0a 20 20 20 20  tchset FILE.    
28b90 2a 2a 20 57 72 69 74 65 20 61 20 63 68 61 6e 67  ** Write a chang
28ba0 65 73 65 74 20 6f 72 20 70 61 74 63 68 73 65 74  eset or patchset
28bb0 20 69 6e 74 6f 20 61 20 66 69 6c 65 2e 20 20 54   into a file.  T
28bc0 68 65 20 66 69 6c 65 20 69 73 20 6f 76 65 72 77  he file is overw
28bd0 72 69 74 74 65 6e 2e 0a 20 20 20 20 2a 2f 0a 20  ritten..    */. 
28be0 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a     if( strcmp(az
28bf0 43 6d 64 5b 30 5d 2c 22 63 68 61 6e 67 65 73 65  Cmd[0],"changese
28c00 74 22 29 3d 3d 30 20 7c 7c 20 73 74 72 63 6d 70  t")==0 || strcmp
28c10 28 61 7a 43 6d 64 5b 30 5d 2c 22 70 61 74 63 68  (azCmd[0],"patch
28c20 73 65 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  set")==0 ){.    
28c30 20 20 46 49 4c 45 20 2a 6f 75 74 20 3d 20 30 3b    FILE *out = 0;
28c40 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 21  .      if( nCmd!
28c50 3d 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f  =2 ) goto sessio
28c60 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a  n_syntax_error;.
28c70 20 20 20 20 20 20 69 66 28 20 70 53 65 73 73 69        if( pSessi
28c80 6f 6e 2d 3e 70 3d 3d 30 20 29 20 67 6f 74 6f 20  on->p==0 ) goto 
28c90 73 65 73 73 69 6f 6e 5f 6e 6f 74 5f 6f 70 65 6e  session_not_open
28ca0 3b 0a 20 20 20 20 20 20 6f 75 74 20 3d 20 66 6f  ;.      out = fo
28cb0 70 65 6e 28 61 7a 43 6d 64 5b 31 5d 2c 20 22 77  pen(azCmd[1], "w
28cc0 62 22 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f  b");.      if( o
28cd0 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ut==0 ){.       
28ce0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
28cf0 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 63 61 6e  err, "ERROR: can
28d00 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73 5c 22 20  not open \"%s\" 
28d10 66 6f 72 20 77 72 69 74 69 6e 67 5c 6e 22 2c 20  for writing\n", 
28d20 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20 20 20 20 20  azCmd[1]);.     
28d30 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
28d40 69 6e 74 20 73 7a 43 68 6e 67 3b 0a 20 20 20 20  int szChng;.    
28d50 20 20 20 20 76 6f 69 64 20 2a 70 43 68 6e 67 3b      void *pChng;
28d60 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 7a 43  .        if( azC
28d70 6d 64 5b 30 5d 5b 30 5d 3d 3d 27 63 27 20 29 7b  md[0][0]=='c' ){
28d80 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
28d90 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 63  sqlite3session_c
28da0 68 61 6e 67 65 73 65 74 28 70 53 65 73 73 69 6f  hangeset(pSessio
28db0 6e 2d 3e 70 2c 20 26 73 7a 43 68 6e 67 2c 20 26  n->p, &szChng, &
28dc0 70 43 68 6e 67 29 3b 0a 20 20 20 20 20 20 20 20  pChng);.        
28dd0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
28de0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 73 65 73   rc = sqlite3ses
28df0 73 69 6f 6e 5f 70 61 74 63 68 73 65 74 28 70 53  sion_patchset(pS
28e00 65 73 73 69 6f 6e 2d 3e 70 2c 20 26 73 7a 43 68  ession->p, &szCh
28e10 6e 67 2c 20 26 70 43 68 6e 67 29 3b 0a 20 20 20  ng, &pChng);.   
28e20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
28e30 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20  f( rc ){.       
28e40 20 20 20 70 72 69 6e 74 66 28 22 45 72 72 6f 72     printf("Error
28e50 3a 20 65 72 72 6f 72 20 63 6f 64 65 20 25 64 5c  : error code %d\
28e60 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 20  n", rc);.       
28e70 20 20 20 72 63 20 3d 20 30 3b 0a 20 20 20 20 20     rc = 0;.     
28e80 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
28e90 20 70 43 68 6e 67 0a 20 20 20 20 20 20 20 20 20   pChng.         
28ea0 20 26 26 20 66 77 72 69 74 65 28 70 43 68 6e 67   && fwrite(pChng
28eb0 2c 20 73 7a 43 68 6e 67 2c 20 31 2c 20 6f 75 74  , szChng, 1, out
28ec0 29 21 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=1 ){.        
28ed0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
28ee0 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 46 61 69  err, "ERROR: Fai
28ef0 6c 65 64 20 74 6f 20 77 72 69 74 65 20 65 6e 74  led to write ent
28f00 69 72 65 20 25 64 2d 62 79 74 65 20 6f 75 74 70  ire %d-byte outp
28f10 75 74 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  ut\n",.         
28f20 20 20 20 20 20 20 20 20 20 73 7a 43 68 6e 67 29           szChng)
28f30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
28f40 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
28f50 28 70 43 68 6e 67 29 3b 0a 20 20 20 20 20 20 20  (pChng);.       
28f60 20 66 63 6c 6f 73 65 28 6f 75 74 29 3b 0a 20 20   fclose(out);.  
28f70 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a      }.    }else.
28f80 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e  .    /* .session
28f90 20 63 6c 6f 73 65 0a 20 20 20 20 2a 2a 20 43 6c   close.    ** Cl
28fa0 6f 73 65 20 74 68 65 20 69 64 65 6e 74 69 66 69  ose the identifi
28fb0 65 64 20 73 65 73 73 69 6f 6e 0a 20 20 20 20 2a  ed session.    *
28fc0 2f 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d 70  /.    if( strcmp
28fd0 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 63 6c 6f 73  (azCmd[0], "clos
28fe0 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  e")==0 ){.      
28ff0 69 66 28 20 6e 43 6d 64 21 3d 31 20 29 20 67 6f  if( nCmd!=1 ) go
29000 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79 6e 74 61  to session_synta
29010 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 69  x_error;.      i
29020 66 28 20 70 2d 3e 6e 53 65 73 73 69 6f 6e 20 29  f( p->nSession )
29030 7b 0a 20 20 20 20 20 20 20 20 73 65 73 73 69 6f  {.        sessio
29040 6e 5f 63 6c 6f 73 65 28 70 53 65 73 73 69 6f 6e  n_close(pSession
29050 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 61 53  );.        p->aS
29060 65 73 73 69 6f 6e 5b 69 53 65 73 5d 20 3d 20 70  ession[iSes] = p
29070 2d 3e 61 53 65 73 73 69 6f 6e 5b 2d 2d 70 2d 3e  ->aSession[--p->
29080 6e 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20 20 20  nSession];.     
29090 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20   }.    }else..  
290a0 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 65 6e    /* .session en
290b0 61 62 6c 65 20 3f 42 4f 4f 4c 45 41 4e 3f 0a 20  able ?BOOLEAN?. 
290c0 20 20 20 2a 2a 20 51 75 65 72 79 20 6f 72 20 73     ** Query or s
290d0 65 74 20 74 68 65 20 65 6e 61 62 6c 65 20 66 6c  et the enable fl
290e0 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  ag.    */.    if
290f0 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30  ( strcmp(azCmd[0
29100 5d 2c 20 22 65 6e 61 62 6c 65 22 29 3d 3d 30 20  ], "enable")==0 
29110 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b  ){.      int ii;
29120 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 3e  .      if( nCmd>
29130 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  2 ) goto session
29140 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
29150 20 20 20 20 20 69 69 20 3d 20 6e 43 6d 64 3d 3d       ii = nCmd==
29160 31 20 3f 20 2d 31 20 3a 20 62 6f 6f 6c 65 61 6e  1 ? -1 : boolean
29170 56 61 6c 75 65 28 61 7a 43 6d 64 5b 31 5d 29 3b  Value(azCmd[1]);
29180 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53  .      if( p->nS
29190 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  ession ){.      
291a0 20 20 69 69 20 3d 20 73 71 6c 69 74 65 33 73 65    ii = sqlite3se
291b0 73 73 69 6f 6e 5f 65 6e 61 62 6c 65 28 70 53 65  ssion_enable(pSe
291c0 73 73 69 6f 6e 2d 3e 70 2c 20 69 69 29 3b 0a 20  ssion->p, ii);. 
291d0 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
291e0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 73 65 73 73  tf(p->out, "sess
291f0 69 6f 6e 20 25 73 20 65 6e 61 62 6c 65 20 66 6c  ion %s enable fl
29200 61 67 20 3d 20 25 64 5c 6e 22 2c 0a 20 20 20 20  ag = %d\n",.    
29210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29220 70 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 2c  pSession->zName,
29230 20 69 69 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20   ii);.      }.  
29240 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20    }else..    /* 
29250 2e 73 65 73 73 69 6f 6e 20 66 69 6c 74 65 72 20  .session filter 
29260 47 4c 4f 42 20 2e 2e 2e 2e 0a 20 20 20 20 2a 2a  GLOB .....    **
29270 20 53 65 74 20 61 20 6c 69 73 74 20 6f 66 20 47   Set a list of G
29280 4c 4f 42 20 70 61 74 74 65 72 6e 73 20 6f 66 20  LOB patterns of 
29290 74 61 62 6c 65 20 6e 61 6d 65 73 20 74 6f 20 62  table names to b
292a0 65 20 65 78 63 6c 75 64 65 64 2e 0a 20 20 20 20  e excluded..    
292b0 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d  */.    if( strcm
292c0 70 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 66 69 6c  p(azCmd[0], "fil
292d0 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ter")==0 ){.    
292e0 20 20 69 6e 74 20 69 69 2c 20 6e 42 79 74 65 3b    int ii, nByte;
292f0 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 3c  .      if( nCmd<
29300 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  2 ) goto session
29310 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
29320 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53 65 73       if( p->nSes
29330 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  sion ){.        
29340 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 53 65  for(ii=0; ii<pSe
29350 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 3b 20  ssion->nFilter; 
29360 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
29370 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 53   sqlite3_free(pS
29380 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72  ession->azFilter
29390 5b 69 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d  [ii]);.        }
293a0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
293b0 5f 66 72 65 65 28 70 53 65 73 73 69 6f 6e 2d 3e  _free(pSession->
293c0 61 7a 46 69 6c 74 65 72 29 3b 0a 20 20 20 20 20  azFilter);.     
293d0 20 20 20 6e 42 79 74 65 20 3d 20 73 69 7a 65 6f     nByte = sizeo
293e0 66 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69  f(pSession->azFi
293f0 6c 74 65 72 5b 30 5d 29 2a 28 6e 43 6d 64 2d 31  lter[0])*(nCmd-1
29400 29 3b 0a 20 20 20 20 20 20 20 20 70 53 65 73 73  );.        pSess
29410 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72 20 3d 20  ion->azFilter = 
29420 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 20  sqlite3_malloc( 
29430 6e 42 79 74 65 20 29 3b 0a 20 20 20 20 20 20 20  nByte );.       
29440 20 69 66 28 20 70 53 65 73 73 69 6f 6e 2d 3e 61   if( pSession->a
29450 7a 46 69 6c 74 65 72 3d 3d 30 20 29 7b 0a 20 20  zFilter==0 ){.  
29460 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
29470 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
29480 72 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79  r: out or memory
29490 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  \n");.          
294a0 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20 20 20  exit(1);.       
294b0 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69   }.        for(i
294c0 69 3d 31 3b 20 69 69 3c 6e 43 6d 64 3b 20 69 69  i=1; ii<nCmd; ii
294d0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  ++){.          p
294e0 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65  Session->azFilte
294f0 72 5b 69 69 2d 31 5d 20 3d 20 73 71 6c 69 74 65  r[ii-1] = sqlite
29500 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
29510 61 7a 43 6d 64 5b 69 69 5d 29 3b 0a 20 20 20 20  azCmd[ii]);.    
29520 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 53      }.        pS
29530 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 20  ession->nFilter 
29540 3d 20 69 69 2d 31 3b 0a 20 20 20 20 20 20 7d 0a  = ii-1;.      }.
29550 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f      }else..    /
29560 2a 20 2e 73 65 73 73 69 6f 6e 20 69 6e 64 69 72  * .session indir
29570 65 63 74 20 3f 42 4f 4f 4c 45 41 4e 3f 0a 20 20  ect ?BOOLEAN?.  
29580 20 20 2a 2a 20 51 75 65 72 79 20 6f 72 20 73 65    ** Query or se
29590 74 20 74 68 65 20 69 6e 64 69 72 65 63 74 20 66  t the indirect f
295a0 6c 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  lag.    */.    i
295b0 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b  f( strcmp(azCmd[
295c0 30 5d 2c 20 22 69 6e 64 69 72 65 63 74 22 29 3d  0], "indirect")=
295d0 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
295e0 69 69 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43  ii;.      if( nC
295f0 6d 64 3e 32 20 29 20 67 6f 74 6f 20 73 65 73 73  md>2 ) goto sess
29600 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72  ion_syntax_error
29610 3b 0a 20 20 20 20 20 20 69 69 20 3d 20 6e 43 6d  ;.      ii = nCm
29620 64 3d 3d 31 20 3f 20 2d 31 20 3a 20 62 6f 6f 6c  d==1 ? -1 : bool
29630 65 61 6e 56 61 6c 75 65 28 61 7a 43 6d 64 5b 31  eanValue(azCmd[1
29640 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d  ]);.      if( p-
29650 3e 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20  >nSession ){.   
29660 20 20 20 20 20 69 69 20 3d 20 73 71 6c 69 74 65       ii = sqlite
29670 33 73 65 73 73 69 6f 6e 5f 69 6e 64 69 72 65 63  3session_indirec
29680 74 28 70 53 65 73 73 69 6f 6e 2d 3e 70 2c 20 69  t(pSession->p, i
29690 69 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38  i);.        utf8
296a0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
296b0 22 73 65 73 73 69 6f 6e 20 25 73 20 69 6e 64 69  "session %s indi
296c0 72 65 63 74 20 66 6c 61 67 20 3d 20 25 64 5c 6e  rect flag = %d\n
296d0 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
296e0 20 20 20 20 20 20 20 70 53 65 73 73 69 6f 6e 2d         pSession-
296f0 3e 7a 4e 61 6d 65 2c 20 69 69 29 3b 0a 20 20 20  >zName, ii);.   
29700 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a     }.    }else..
29710 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20      /* .session 
29720 69 73 65 6d 70 74 79 0a 20 20 20 20 2a 2a 20 44  isempty.    ** D
29730 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the 
29740 73 65 73 73 69 6f 6e 20 69 73 20 65 6d 70 74 79  session is empty
29750 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
29760 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c  strcmp(azCmd[0],
29770 20 22 69 73 65 6d 70 74 79 22 29 3d 3d 30 20 29   "isempty")==0 )
29780 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a  {.      int ii;.
29790 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 21 3d        if( nCmd!=
297a0 31 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  1 ) goto session
297b0 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
297c0 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53 65 73       if( p->nSes
297d0 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  sion ){.        
297e0 69 69 20 3d 20 73 71 6c 69 74 65 33 73 65 73 73  ii = sqlite3sess
297f0 69 6f 6e 5f 69 73 65 6d 70 74 79 28 70 53 65 73  ion_isempty(pSes
29800 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20 20 20 20  sion->p);.      
29810 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
29820 3e 6f 75 74 2c 20 22 73 65 73 73 69 6f 6e 20 25  >out, "session %
29830 73 20 69 73 65 6d 70 74 79 20 66 6c 61 67 20 3d  s isempty flag =
29840 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20   %d\n",.        
29850 20 20 20 20 20 20 20 20 20 20 20 20 70 53 65 73              pSes
29860 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 2c 20 69 69 29  sion->zName, ii)
29870 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
29880 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73  lse..    /* .ses
29890 73 69 6f 6e 20 6c 69 73 74 0a 20 20 20 20 2a 2a  sion list.    **
298a0 20 4c 69 73 74 20 61 6c 6c 20 63 75 72 72 65 6e   List all curren
298b0 74 6c 79 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e  tly open session
298c0 73 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  s.    */.    if(
298d0 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d   strcmp(azCmd[0]
298e0 2c 22 6c 69 73 74 22 29 3d 3d 30 20 29 7b 0a 20  ,"list")==0 ){. 
298f0 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
29900 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69 2b 2b  p->nSession; i++
29910 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
29920 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
29930 25 64 20 25 73 5c 6e 22 2c 20 69 2c 20 70 2d 3e  %d %s\n", i, p->
29940 61 53 65 73 73 69 6f 6e 5b 69 5d 2e 7a 4e 61 6d  aSession[i].zNam
29950 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
29960 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73  }else..    /* .s
29970 65 73 73 69 6f 6e 20 6f 70 65 6e 20 44 42 20 4e  ession open DB N
29980 41 4d 45 0a 20 20 20 20 2a 2a 20 4f 70 65 6e 20  AME.    ** Open 
29990 61 20 6e 65 77 20 73 65 73 73 69 6f 6e 20 63 61  a new session ca
299a0 6c 6c 65 64 20 4e 41 4d 45 20 6f 6e 20 74 68 65  lled NAME on the
299b0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
299c0 73 65 20 44 42 2e 0a 20 20 20 20 2a 2a 20 44 42  se DB..    ** DB
299d0 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 22 6d 61   is normally "ma
299e0 69 6e 22 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  in"..    */.    
299f0 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64  if( strcmp(azCmd
29a00 5b 30 5d 2c 22 6f 70 65 6e 22 29 3d 3d 30 20 29  [0],"open")==0 )
29a10 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4e  {.      char *zN
29a20 61 6d 65 3b 0a 20 20 20 20 20 20 69 66 28 20 6e  ame;.      if( n
29a30 43 6d 64 21 3d 33 20 29 20 67 6f 74 6f 20 73 65  Cmd!=3 ) goto se
29a40 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72  ssion_syntax_err
29a50 6f 72 3b 0a 20 20 20 20 20 20 7a 4e 61 6d 65 20  or;.      zName 
29a60 3d 20 61 7a 43 6d 64 5b 32 5d 3b 0a 20 20 20 20  = azCmd[2];.    
29a70 20 20 69 66 28 20 7a 4e 61 6d 65 5b 30 5d 3d 3d    if( zName[0]==
29a80 30 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  0 ) goto session
29a90 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
29aa0 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
29ab0 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69 2b 2b  p->nSession; i++
29ac0 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  ){.        if( s
29ad0 74 72 63 6d 70 28 70 2d 3e 61 53 65 73 73 69 6f  trcmp(p->aSessio
29ae0 6e 5b 69 5d 2e 7a 4e 61 6d 65 2c 7a 4e 61 6d 65  n[i].zName,zName
29af0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
29b00 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
29b10 64 65 72 72 2c 20 22 53 65 73 73 69 6f 6e 20 5c  derr, "Session \
29b20 22 25 73 5c 22 20 61 6c 72 65 61 64 79 20 65 78  "%s\" already ex
29b30 69 73 74 73 5c 6e 22 2c 20 7a 4e 61 6d 65 29 3b  ists\n", zName);
29b40 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
29b50 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
29b60 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
29b70 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70     }.      if( p
29b80 2d 3e 6e 53 65 73 73 69 6f 6e 3e 3d 41 72 72 61  ->nSession>=Arra
29b90 79 53 69 7a 65 28 70 2d 3e 61 53 65 73 73 69 6f  ySize(p->aSessio
29ba0 6e 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  n) ){.        ra
29bb0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
29bc0 20 22 4d 61 78 69 6d 75 6d 20 6f 66 20 25 64 20   "Maximum of %d 
29bd0 73 65 73 73 69 6f 6e 73 5c 6e 22 2c 20 41 72 72  sessions\n", Arr
29be0 61 79 53 69 7a 65 28 70 2d 3e 61 53 65 73 73 69  aySize(p->aSessi
29bf0 6f 6e 29 29 3b 0a 20 20 20 20 20 20 20 20 67 6f  on));.        go
29c00 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
29c10 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  exit;.      }.  
29c20 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d 20 26      pSession = &
29c30 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 70 2d 3e 6e  p->aSession[p->n
29c40 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20 20 20 20  Session];.      
29c50 72 63 20 3d 20 73 71 6c 69 74 65 33 73 65 73 73  rc = sqlite3sess
29c60 69 6f 6e 5f 63 72 65 61 74 65 28 70 2d 3e 64 62  ion_create(p->db
29c70 2c 20 61 7a 43 6d 64 5b 31 5d 2c 20 26 70 53 65  , azCmd[1], &pSe
29c80 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20 20 20  ssion->p);.     
29c90 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
29ca0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
29cb0 64 65 72 72 2c 20 22 43 61 6e 6e 6f 74 20 6f 70  derr, "Cannot op
29cc0 65 6e 20 73 65 73 73 69 6f 6e 3a 20 65 72 72 6f  en session: erro
29cd0 72 20 63 6f 64 65 3d 25 64 5c 6e 22 2c 20 72 63  r code=%d\n", rc
29ce0 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
29cf0 30 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  0;.        goto 
29d00 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
29d10 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
29d20 20 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74   pSession->nFilt
29d30 65 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 71  er = 0;.      sq
29d40 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 74 61 62  lite3session_tab
29d50 6c 65 5f 66 69 6c 74 65 72 28 70 53 65 73 73 69  le_filter(pSessi
29d60 6f 6e 2d 3e 70 2c 20 73 65 73 73 69 6f 6e 5f 66  on->p, session_f
29d70 69 6c 74 65 72 2c 20 70 53 65 73 73 69 6f 6e 29  ilter, pSession)
29d80 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 65 73 73  ;.      p->nSess
29d90 69 6f 6e 2b 2b 3b 0a 20 20 20 20 20 20 70 53 65  ion++;.      pSe
29da0 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 20 3d 20 73  ssion->zName = s
29db0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
29dc0 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  %s", zName);.   
29dd0 20 7d 65 6c 73 65 0a 20 20 20 20 2f 2a 20 49 66   }else.    /* If
29de0 20 6e 6f 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65   no command name
29df0 20 6d 61 74 63 68 65 73 2c 20 73 68 6f 77 20 61   matches, show a
29e00 20 73 79 6e 74 61 78 20 65 72 72 6f 72 20 2a 2f   syntax error */
29e10 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 73 79 6e  .    session_syn
29e20 74 61 78 5f 65 72 72 6f 72 3a 0a 20 20 20 20 73  tax_error:.    s
29e30 65 73 73 69 6f 6e 5f 68 65 6c 70 28 70 29 3b 0a  ession_help(p);.
29e40 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a    }else.#endif..
29e50 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
29e60 42 55 47 0a 20 20 2f 2a 20 55 6e 64 6f 63 75 6d  BUG.  /* Undocum
29e70 65 6e 74 65 64 20 63 6f 6d 6d 61 6e 64 73 20 66  ented commands f
29e80 6f 72 20 69 6e 74 65 72 6e 61 6c 20 74 65 73 74  or internal test
29e90 69 6e 67 2e 20 20 53 75 62 6a 65 63 74 20 74 6f  ing.  Subject to
29ea0 20 63 68 61 6e 67 65 0a 20 20 2a 2a 20 77 69 74   change.  ** wit
29eb0 68 6f 75 74 20 6e 6f 74 69 63 65 2e 20 2a 2f 0a  hout notice. */.
29ec0 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20    if( c=='s' && 
29ed0 6e 3e 3d 31 30 20 26 26 20 73 74 72 6e 63 6d 70  n>=10 && strncmp
29ee0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 65 6c 66  (azArg[0], "self
29ef0 74 65 73 74 2d 22 2c 20 39 29 3d 3d 30 20 29 7b  test-", 9)==0 ){
29f00 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d 70  .    if( strncmp
29f10 28 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22 62 6f  (azArg[0]+9, "bo
29f20 6f 6c 65 61 6e 22 2c 20 6e 2d 39 29 3d 3d 30 20  olean", n-9)==0 
29f30 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c 20  ){.      int i, 
29f40 76 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31  v;.      for(i=1
29f50 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
29f60 20 20 20 20 20 20 20 20 76 20 3d 20 62 6f 6f 6c          v = bool
29f70 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 69  eanValue(azArg[i
29f80 5d 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38  ]);.        utf8
29f90 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
29fa0 22 25 73 3a 20 25 64 20 30 78 25 78 5c 6e 22 2c  "%s: %d 0x%x\n",
29fb0 20 61 7a 41 72 67 5b 69 5d 2c 20 76 2c 20 76 29   azArg[i], v, v)
29fc0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
29fd0 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28      if( strncmp(
29fe0 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22 69 6e 74  azArg[0]+9, "int
29ff0 65 67 65 72 22 2c 20 6e 2d 39 29 3d 3d 30 20 29  eger", n-9)==0 )
2a000 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 20 73  {.      int i; s
2a010 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 76 3b 0a  qlite3_int64 v;.
2a020 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b 20 69        for(i=1; i
2a030 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
2a040 20 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32       char zBuf[2
2a050 30 30 5d 3b 0a 20 20 20 20 20 20 20 20 76 20 3d  00];.        v =
2a060 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a   integerValue(az
2a070 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[i]);.       
2a080 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2a090 66 28 73 69 7a 65 6f 66 28 7a 42 75 66 29 2c 7a  f(sizeof(zBuf),z
2a0a0 42 75 66 2c 22 25 73 3a 20 25 6c 6c 64 20 30 78  Buf,"%s: %lld 0x
2a0b0 25 6c 6c 78 5c 6e 22 2c 20 61 7a 41 72 67 5b 69  %llx\n", azArg[i
2a0c0 5d 2c 76 2c 76 29 3b 0a 20 20 20 20 20 20 20 20  ],v,v);.        
2a0d0 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
2a0e0 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66 29 3b  ut, "%s", zBuf);
2a0f0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
2a100 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20   }else.#endif.. 
2a110 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 6e   if( c=='s' && n
2a120 3e 3d 34 20 26 26 20 73 74 72 6e 63 6d 70 28 61  >=4 && strncmp(a
2a130 7a 41 72 67 5b 30 5d 2c 22 73 65 6c 66 74 65 73  zArg[0],"selftes
2a140 74 22 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  t",n)==0 ){.    
2a150 69 6e 74 20 62 49 73 49 6e 69 74 20 3d 20 30 3b  int bIsInit = 0;
2a160 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
2a170 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 74   to initialize t
2a180 68 65 20 53 45 4c 46 54 45 53 54 20 74 61 62 6c  he SELFTEST tabl
2a190 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 56 65  e */.    int bVe
2a1a0 72 62 6f 73 65 20 3d 20 30 3b 20 20 20 20 20 20  rbose = 0;      
2a1b0 20 20 2f 2a 20 56 65 72 62 6f 73 65 20 6f 75 74    /* Verbose out
2a1c0 70 75 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62  put */.    int b
2a1d0 53 65 6c 66 74 65 73 74 45 78 69 73 74 73 3b 20  SelftestExists; 
2a1e0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 53      /* True if S
2a1f0 45 4c 46 54 45 53 54 20 61 6c 72 65 61 64 79 20  ELFTEST already 
2a200 65 78 69 73 74 73 20 2a 2f 0a 20 20 20 20 69 6e  exists */.    in
2a210 74 20 69 2c 20 6b 3b 20 20 20 20 20 20 20 20 20  t i, k;         
2a220 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
2a230 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 20 20 69  ounters */.    i
2a240 6e 74 20 6e 54 65 73 74 20 3d 20 30 3b 20 20 20  nt nTest = 0;   
2a250 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
2a260 72 20 6f 66 20 74 65 73 74 73 20 72 75 6e 73 20  r of tests runs 
2a270 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 45 72 72 20  */.    int nErr 
2a280 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
2a290 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
2a2a0 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 20 20  ors seen */.    
2a2b0 53 68 65 6c 6c 54 65 78 74 20 73 74 72 3b 20 20  ShellText str;  
2a2c0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 73 77           /* Answ
2a2d0 65 72 20 66 6f 72 20 61 20 71 75 65 72 79 20 2a  er for a query *
2a2e0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74  /.    sqlite3_st
2a2f0 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 20 2f  mt *pStmt = 0; /
2a300 2a 20 51 75 65 72 79 20 61 67 61 69 6e 73 74 20  * Query against 
2a310 74 68 65 20 53 45 4c 46 54 45 53 54 20 74 61 62  the SELFTEST tab
2a320 6c 65 20 2a 2f 0a 0a 20 20 20 20 6f 70 65 6e 5f  le */..    open_
2a330 64 62 28 70 2c 30 29 3b 0a 20 20 20 20 66 6f 72  db(p,0);.    for
2a340 28 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=1; i<nArg; i+
2a350 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  +){.      const 
2a360 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b  char *z = azArg[
2a370 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 5b  i];.      if( z[
2a380 30 5d 3d 3d 27 2d 27 20 26 26 20 7a 5b 31 5d 3d  0]=='-' && z[1]=
2a390 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20 20 20  ='-' ) z++;.    
2a3a0 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22    if( strcmp(z,"
2a3b0 2d 69 6e 69 74 22 29 3d 3d 30 20 29 7b 0a 20 20  -init")==0 ){.  
2a3c0 20 20 20 20 20 20 62 49 73 49 6e 69 74 20 3d 20        bIsInit = 
2a3d0 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 0a 20  1;.      }else. 
2a3e0 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
2a3f0 7a 2c 22 2d 76 22 29 3d 3d 30 20 29 7b 0a 20 20  z,"-v")==0 ){.  
2a400 20 20 20 20 20 20 62 56 65 72 62 6f 73 65 2b 2b        bVerbose++
2a410 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20  ;.      }else.  
2a420 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 75 74      {.        ut
2a430 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
2a440 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f  , "Unknown optio
2a450 6e 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22 25 73  n \"%s\" on \"%s
2a460 5c 22 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  \"\n",.         
2a470 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67             azArg
2a480 5b 69 5d 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a  [i], azArg[0]);.
2a490 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
2a4a0 74 66 28 73 74 64 65 72 72 2c 20 22 53 68 6f 75  tf(stderr, "Shou
2a4b0 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20 2d 2d  ld be one of: --
2a4c0 69 6e 69 74 20 2d 76 5c 6e 22 29 3b 0a 20 20 20  init -v\n");.   
2a4d0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2a4e0 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
2a4f0 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
2a500 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
2a510 66 28 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  f( sqlite3_table
2a520 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61  _column_metadata
2a530 28 70 2d 3e 64 62 2c 22 6d 61 69 6e 22 2c 22 73  (p->db,"main","s
2a540 65 6c 66 74 65 73 74 22 2c 30 2c 30 2c 30 2c 30  elftest",0,0,0,0
2a550 2c 30 2c 30 29 0a 20 20 20 20 20 20 20 20 20 20  ,0,0).          
2a560 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
2a570 0a 20 20 20 20 20 20 62 53 65 6c 66 74 65 73 74  .      bSelftest
2a580 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20 20 20  Exists = 0;.    
2a590 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 62 53 65  }else{.      bSe
2a5a0 6c 66 74 65 73 74 45 78 69 73 74 73 20 3d 20 31  lftestExists = 1
2a5b0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
2a5c0 62 49 73 49 6e 69 74 20 29 7b 0a 20 20 20 20 20  bIsInit ){.     
2a5d0 20 63 72 65 61 74 65 53 65 6c 66 74 65 73 74 54   createSelftestT
2a5e0 61 62 6c 65 28 70 29 3b 0a 20 20 20 20 20 20 62  able(p);.      b
2a5f0 53 65 6c 66 74 65 73 74 45 78 69 73 74 73 20 3d  SelftestExists =
2a600 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 6e   1;.    }.    in
2a610 69 74 54 65 78 74 28 26 73 74 72 29 3b 0a 20 20  itText(&str);.  
2a620 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 74    appendText(&st
2a630 72 2c 20 22 78 22 2c 20 30 29 3b 0a 20 20 20 20  r, "x", 0);.    
2a640 66 6f 72 28 6b 3d 62 53 65 6c 66 74 65 73 74 45  for(k=bSelftestE
2a650 78 69 73 74 73 3b 20 6b 3e 3d 30 3b 20 6b 2d 2d  xists; k>=0; k--
2a660 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6b 3d 3d  ){.      if( k==
2a670 31 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  1 ){.        rc 
2a680 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
2a690 65 5f 76 32 28 70 2d 3e 64 62 2c 0a 20 20 20 20  e_v2(p->db,.    
2a6a0 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20          "SELECT 
2a6b0 74 6e 6f 2c 6f 70 2c 63 6d 64 2c 61 6e 73 20 46  tno,op,cmd,ans F
2a6c0 52 4f 4d 20 73 65 6c 66 74 65 73 74 20 4f 52 44  ROM selftest ORD
2a6d0 45 52 20 42 59 20 74 6e 6f 22 2c 0a 20 20 20 20  ER BY tno",.    
2a6e0 20 20 20 20 20 20 20 20 2d 31 2c 20 26 70 53 74          -1, &pSt
2a6f0 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 65  mt, 0);.      }e
2a700 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 63 20  lse{.        rc 
2a710 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
2a720 65 5f 76 32 28 70 2d 3e 64 62 2c 0a 20 20 20 20  e_v2(p->db,.    
2a730 20 20 20 20 20 20 22 56 41 4c 55 45 53 28 30 2c        "VALUES(0,
2a740 27 6d 65 6d 6f 27 2c 27 4d 69 73 73 69 6e 67 20  'memo','Missing 
2a750 53 45 4c 46 54 45 53 54 20 74 61 62 6c 65 20 2d  SELFTEST table -
2a760 20 64 65 66 61 75 6c 74 20 63 68 65 63 6b 73 20   default checks 
2a770 6f 6e 6c 79 27 2c 27 27 29 2c 22 0a 20 20 20 20  only',''),".    
2a780 20 20 20 20 20 20 22 20 20 20 20 20 20 28 31 2c        "      (1,
2a790 27 72 75 6e 27 2c 27 50 52 41 47 4d 41 20 69 6e  'run','PRAGMA in
2a7a0 74 65 67 72 69 74 79 5f 63 68 65 63 6b 27 2c 27  tegrity_check','
2a7b0 6f 6b 27 29 22 2c 0a 20 20 20 20 20 20 20 20 20  ok')",.         
2a7c0 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b   -1, &pStmt, 0);
2a7d0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
2a7e0 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20  f( rc ){.       
2a7f0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
2a800 72 72 2c 20 22 45 72 72 6f 72 20 71 75 65 72 79  rr, "Error query
2a810 69 6e 67 20 74 68 65 20 73 65 6c 66 74 65 73 74  ing the selftest
2a820 20 74 61 62 6c 65 5c 6e 22 29 3b 0a 20 20 20 20   table\n");.    
2a830 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2a840 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61      sqlite3_fina
2a850 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20  lize(pStmt);.   
2a860 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
2a870 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
2a880 20 20 20 7d 0a 20 20 20 20 20 20 66 6f 72 28 69     }.      for(i
2a890 3d 31 3b 20 73 71 6c 69 74 65 33 5f 73 74 65 70  =1; sqlite3_step
2a8a0 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f  (pStmt)==SQLITE_
2a8b0 52 4f 57 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ROW; i++){.     
2a8c0 20 20 20 69 6e 74 20 74 6e 6f 20 3d 20 73 71 6c     int tno = sql
2a8d0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28  ite3_column_int(
2a8e0 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20  pStmt, 0);.     
2a8f0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
2a900 4f 70 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  Op = (const char
2a910 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
2a920 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31 29 3b  _text(pStmt, 1);
2a930 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63  .        const c
2a940 68 61 72 20 2a 7a 53 71 6c 20 3d 20 28 63 6f 6e  har *zSql = (con
2a950 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
2a960 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
2a970 6d 74 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20  mt, 2);.        
2a980 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 6e 73  const char *zAns
2a990 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
2a9a0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
2a9b0 65 78 74 28 70 53 74 6d 74 2c 20 33 29 3b 0a 0a  ext(pStmt, 3);..
2a9c0 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20          k = 0;. 
2a9d0 20 20 20 20 20 20 20 69 66 28 20 62 56 65 72 62         if( bVerb
2a9e0 6f 73 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 20  ose>0 ){.       
2a9f0 20 20 20 63 68 61 72 20 2a 7a 51 75 6f 74 65 20     char *zQuote 
2aa00 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
2aa10 66 28 22 25 71 22 2c 20 7a 53 71 6c 29 3b 0a 20  f("%q", zSql);. 
2aa20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28           printf(
2aa30 22 25 64 3a 20 25 73 20 25 73 5c 6e 22 2c 20 74  "%d: %s %s\n", t
2aa40 6e 6f 2c 20 7a 4f 70 2c 20 7a 53 71 6c 29 3b 0a  no, zOp, zSql);.
2aa50 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
2aa60 33 5f 66 72 65 65 28 7a 51 75 6f 74 65 29 3b 0a  3_free(zQuote);.
2aa70 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2aa80 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 4f 70    if( strcmp(zOp
2aa90 2c 22 6d 65 6d 6f 22 29 3d 3d 30 20 29 7b 0a 20  ,"memo")==0 ){. 
2aaa0 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
2aab0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
2aac0 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20  \n", zSql);.    
2aad0 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20 20      }else.      
2aae0 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 4f 70    if( strcmp(zOp
2aaf0 2c 22 72 75 6e 22 29 3d 3d 30 20 29 7b 0a 20 20  ,"run")==0 ){.  
2ab00 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 45          char *zE
2ab10 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 20  rrMsg = 0;.     
2ab20 20 20 20 20 20 73 74 72 2e 6e 20 3d 20 30 3b 0a       str.n = 0;.
2ab30 20 20 20 20 20 20 20 20 20 20 73 74 72 2e 7a 5b            str.z[
2ab40 30 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  0] = 0;.        
2ab50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
2ab60 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c  xec(p->db, zSql,
2ab70 20 63 61 70 74 75 72 65 4f 75 74 70 75 74 43 61   captureOutputCa
2ab80 6c 6c 62 61 63 6b 2c 20 26 73 74 72 2c 20 26 7a  llback, &str, &z
2ab90 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20  ErrMsg);.       
2aba0 20 20 20 6e 54 65 73 74 2b 2b 3b 0a 20 20 20 20     nTest++;.    
2abb0 20 20 20 20 20 20 69 66 28 20 62 56 65 72 62 6f        if( bVerbo
2abc0 73 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  se ){.          
2abd0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
2abe0 3e 6f 75 74 2c 20 22 52 65 73 75 6c 74 3a 20 25  >out, "Result: %
2abf0 73 5c 6e 22 2c 20 73 74 72 2e 7a 29 3b 0a 20 20  s\n", str.z);.  
2ac00 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2ac10 20 20 20 20 69 66 28 20 72 63 20 7c 7c 20 7a 45      if( rc || zE
2ac20 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20 20 20  rrMsg ){.       
2ac30 20 20 20 20 20 6e 45 72 72 2b 2b 3b 0a 20 20 20       nErr++;.   
2ac40 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b           rc = 1;
2ac50 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66  .            utf
2ac60 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
2ac70 20 22 25 64 3a 20 65 72 72 6f 72 2d 63 6f 64 65   "%d: error-code
2ac80 2d 25 64 3a 20 25 73 5c 6e 22 2c 20 74 6e 6f 2c  -%d: %s\n", tno,
2ac90 20 72 63 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20   rc, zErrMsg);. 
2aca0 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
2acb0 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29  e3_free(zErrMsg)
2acc0 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
2acd0 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 41 6e  e if( strcmp(zAn
2ace0 73 2c 73 74 72 2e 7a 29 21 3d 30 20 29 7b 0a 20  s,str.z)!=0 ){. 
2acf0 20 20 20 20 20 20 20 20 20 20 20 6e 45 72 72 2b             nErr+
2ad00 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  +;.            r
2ad10 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  c = 1;.         
2ad20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
2ad30 2d 3e 6f 75 74 2c 20 22 25 64 3a 20 45 78 70 65  ->out, "%d: Expe
2ad40 63 74 65 64 3a 20 5b 25 73 5d 5c 6e 22 2c 20 74  cted: [%s]\n", t
2ad50 6e 6f 2c 20 7a 41 6e 73 29 3b 0a 20 20 20 20 20  no, zAns);.     
2ad60 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
2ad70 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 3a 20  tf(p->out, "%d: 
2ad80 20 20 20 20 20 47 6f 74 3a 20 5b 25 73 5d 5c 6e       Got: [%s]\n
2ad90 22 2c 20 74 6e 6f 2c 20 73 74 72 2e 7a 29 3b 0a  ", tno, str.z);.
2ada0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2adb0 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20 20      }else.      
2adc0 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74    {.          ut
2add0 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
2ade0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 55  ,.            "U
2adf0 6e 6b 6e 6f 77 6e 20 6f 70 65 72 61 74 69 6f 6e  nknown operation
2ae00 20 5c 22 25 73 5c 22 20 6f 6e 20 73 65 6c 66 74   \"%s\" on selft
2ae10 65 73 74 20 6c 69 6e 65 20 25 64 5c 6e 22 2c 20  est line %d\n", 
2ae20 7a 4f 70 2c 20 74 6e 6f 29 3b 0a 20 20 20 20 20  zOp, tno);.     
2ae30 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2ae40 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
2ae50 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20        }.      } 
2ae60 2f 2a 20 45 6e 64 20 6c 6f 6f 70 20 6f 76 65 72  /* End loop over
2ae70 20 72 6f 77 73 20 6f 66 20 63 6f 6e 74 65 6e 74   rows of content
2ae80 20 66 72 6f 6d 20 53 45 4c 46 54 45 53 54 20 2a   from SELFTEST *
2ae90 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  /.      sqlite3_
2aea0 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
2aeb0 0a 20 20 20 20 7d 20 2f 2a 20 45 6e 64 20 6c 6f  .    } /* End lo
2aec0 6f 70 20 6f 76 65 72 20 6b 20 2a 2f 0a 20 20 20  op over k */.   
2aed0 20 66 72 65 65 54 65 78 74 28 26 73 74 72 29 3b   freeText(&str);
2aee0 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
2aef0 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 65 72 72  (p->out, "%d err
2af00 6f 72 73 20 6f 75 74 20 6f 66 20 25 64 20 74 65  ors out of %d te
2af10 73 74 73 5c 6e 22 2c 20 6e 45 72 72 2c 20 6e 54  sts\n", nErr, nT
2af20 65 73 74 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20  est);.  }else.. 
2af30 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 73   if( c=='s' && s
2af40 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
2af50 20 22 73 65 70 61 72 61 74 6f 72 22 2c 20 6e 29   "separator", n)
2af60 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
2af70 41 72 67 3c 32 20 7c 7c 20 6e 41 72 67 3e 33 20  Arg<2 || nArg>3 
2af80 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
2af90 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
2afa0 67 65 3a 20 2e 73 65 70 61 72 61 74 6f 72 20 43  ge: .separator C
2afb0 4f 4c 20 3f 52 4f 57 3f 5c 6e 22 29 3b 0a 20 20  OL ?ROW?\n");.  
2afc0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2afd0 7d 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e 3d  }.    if( nArg>=
2afe0 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  2 ){.      sqlit
2aff0 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
2b000 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  of(p->colSeparat
2b010 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72  or), p->colSepar
2b020 61 74 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20  ator,.          
2b030 20 20 20 20 20 20 20 20 20 20 20 20 20 22 25 2e               "%.
2b040 2a 73 22 2c 20 28 69 6e 74 29 41 72 72 61 79 53  *s", (int)ArrayS
2b050 69 7a 65 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61  ize(p->colSepara
2b060 74 6f 72 29 2d 31 2c 20 61 7a 41 72 67 5b 31 5d  tor)-1, azArg[1]
2b070 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
2b080 20 6e 41 72 67 3e 3d 33 20 29 7b 0a 20 20 20 20   nArg>=3 ){.    
2b090 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
2b0a0 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77  tf(sizeof(p->row
2b0b0 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72  Separator), p->r
2b0c0 6f 77 53 65 70 61 72 61 74 6f 72 2c 0a 20 20 20  owSeparator,.   
2b0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0e0 20 20 20 20 22 25 2e 2a 73 22 2c 20 28 69 6e 74      "%.*s", (int
2b0f0 29 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 72 6f  )ArraySize(p->ro
2b100 77 53 65 70 61 72 61 74 6f 72 29 2d 31 2c 20 61  wSeparator)-1, a
2b110 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20 7d 0a  zArg[2]);.    }.
2b120 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
2b130 3d 3d 27 73 27 20 26 26 20 6e 3e 3d 34 20 26 26  =='s' && n>=4 &&
2b140 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
2b150 5d 2c 22 73 68 61 33 73 75 6d 22 2c 6e 29 3d 3d  ],"sha3sum",n)==
2b160 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  0 ){.    const c
2b170 68 61 72 20 2a 7a 4c 69 6b 65 20 3d 20 30 3b 20  har *zLike = 0; 
2b180 20 20 2f 2a 20 57 68 69 63 68 20 74 61 62 6c 65    /* Which table
2b190 20 74 6f 20 63 68 65 63 6b 73 75 6d 2e 20 30 20   to checksum. 0 
2b1a0 6d 65 61 6e 73 20 65 76 65 72 79 74 68 69 6e 67  means everything
2b1b0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20 20   */.    int i;  
2b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1d0 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
2b1e0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 62 53 63 68   */.    int bSch
2b1f0 65 6d 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ema = 0;        
2b200 20 2f 2a 20 41 6c 73 6f 20 68 61 73 68 20 74 68   /* Also hash th
2b210 65 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 20 20  e schema */.    
2b220 69 6e 74 20 62 53 65 70 61 72 61 74 65 20 3d 20  int bSeparate = 
2b230 30 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68  0;       /* Hash
2b240 20 65 61 63 68 20 74 61 62 6c 65 20 73 65 70 61   each table sepa
2b250 72 61 74 65 6c 79 20 2a 2f 0a 20 20 20 20 69 6e  rately */.    in
2b260 74 20 69 53 69 7a 65 20 3d 20 32 32 34 3b 20 20  t iSize = 224;  
2b270 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 61         /* Hash a
2b280 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20  lgorithm to use 
2b290 2a 2f 0a 20 20 20 20 69 6e 74 20 62 44 65 62 75  */.    int bDebu
2b2a0 67 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  g = 0;          
2b2b0 2f 2a 20 4f 6e 6c 79 20 73 68 6f 77 20 74 68 65  /* Only show the
2b2c0 20 71 75 65 72 79 20 74 68 61 74 20 77 6f 75 6c   query that woul
2b2d0 64 20 68 61 76 65 20 72 75 6e 20 2a 2f 0a 20 20  d have run */.  
2b2e0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
2b2f0 70 53 74 6d 74 3b 20 20 20 20 20 2f 2a 20 46 6f  pStmt;     /* Fo
2b300 72 20 71 75 65 72 79 69 6e 67 20 74 61 62 6c 65  r querying table
2b310 73 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 20 20 63  s names */.    c
2b320 68 61 72 20 2a 7a 53 71 6c 3b 20 20 20 20 20 20  har *zSql;      
2b330 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 74          /* SQL t
2b340 6f 20 62 65 20 72 75 6e 20 2a 2f 0a 20 20 20 20  o be run */.    
2b350 63 68 61 72 20 2a 7a 53 65 70 3b 20 20 20 20 20  char *zSep;     
2b360 20 20 20 20 20 20 20 20 20 2f 2a 20 53 65 70 61           /* Sepa
2b370 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 53 68 65  rator */.    She
2b380 6c 6c 54 65 78 74 20 73 53 71 6c 3b 20 20 20 20  llText sSql;    
2b390 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74        /* Complet
2b3a0 65 20 53 51 4c 20 66 6f 72 20 74 68 65 20 71 75  e SQL for the qu
2b3b0 65 72 79 20 74 6f 20 72 75 6e 20 74 68 65 20 68  ery to run the h
2b3c0 61 73 68 20 2a 2f 0a 20 20 20 20 53 68 65 6c 6c  ash */.    Shell
2b3d0 54 65 78 74 20 73 51 75 65 72 79 3b 20 20 20 20  Text sQuery;    
2b3e0 20 20 20 20 2f 2a 20 53 65 74 20 6f 66 20 71 75      /* Set of qu
2b3f0 65 72 69 65 73 20 75 73 65 64 20 74 6f 20 72 65  eries used to re
2b400 61 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 2a  ad all content *
2b410 2f 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  /.    open_db(p,
2b420 20 30 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31   0);.    for(i=1
2b430 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
2b440 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
2b450 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 5d 3b 0a   *z = azArg[i];.
2b460 20 20 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d 3d        if( z[0]==
2b470 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  '-' ){.        z
2b480 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ++;.        if( 
2b490 7a 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b  z[0]=='-' ) z++;
2b4a0 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72  .        if( str
2b4b0 63 6d 70 28 7a 2c 22 73 63 68 65 6d 61 22 29 3d  cmp(z,"schema")=
2b4c0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
2b4d0 62 53 63 68 65 6d 61 20 3d 20 31 3b 0a 20 20 20  bSchema = 1;.   
2b4e0 20 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20       }else.     
2b4f0 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c     if( strcmp(z,
2b500 22 73 68 61 33 2d 32 32 34 22 29 3d 3d 30 20 7c  "sha3-224")==0 |
2b510 7c 20 73 74 72 63 6d 70 28 7a 2c 22 73 68 61 33  | strcmp(z,"sha3
2b520 2d 32 35 36 22 29 3d 3d 30 0a 20 20 20 20 20 20  -256")==0.      
2b530 20 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22     || strcmp(z,"
2b540 73 68 61 33 2d 33 38 34 22 29 3d 3d 30 20 7c 7c  sha3-384")==0 ||
2b550 20 73 74 72 63 6d 70 28 7a 2c 22 73 68 61 33 2d   strcmp(z,"sha3-
2b560 35 31 32 22 29 3d 3d 30 0a 20 20 20 20 20 20 20  512")==0.       
2b570 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 53   ){.          iS
2b580 69 7a 65 20 3d 20 61 74 6f 69 28 26 7a 5b 35 5d  ize = atoi(&z[5]
2b590 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
2b5a0 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72  .        if( str
2b5b0 63 6d 70 28 7a 2c 22 64 65 62 75 67 22 29 3d 3d  cmp(z,"debug")==
2b5c0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62  0 ){.          b
2b5d0 44 65 62 75 67 20 3d 20 31 3b 0a 20 20 20 20 20  Debug = 1;.     
2b5e0 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20 20 20     }else.       
2b5f0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66   {.          utf
2b600 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
2b610 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f 6e   "Unknown option
2b620 20 5c 22 25 73 5c 22 20 6f 6e 20 5c 22 25 73 5c   \"%s\" on \"%s\
2b630 22 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  "\n",.          
2b640 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72              azAr
2b650 67 5b 69 5d 2c 20 61 7a 41 72 67 5b 30 5d 29 3b  g[i], azArg[0]);
2b660 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
2b670 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53  rintf(stderr, "S
2b680 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a  hould be one of:
2b690 20 2d 2d 73 63 68 65 6d 61 22 0a 20 20 20 20 20   --schema".     
2b6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6b0 20 20 20 20 20 20 20 20 22 20 2d 2d 73 68 61 33          " --sha3
2b6c0 2d 32 32 34 20 2d 2d 73 68 61 33 2d 32 35 35 20  -224 --sha3-255 
2b6d0 2d 2d 73 68 61 33 2d 33 38 34 20 2d 2d 73 68 61  --sha3-384 --sha
2b6e0 33 2d 35 31 32 5c 6e 22 29 3b 0a 20 20 20 20 20  3-512\n");.     
2b6f0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
2b700 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
2b710 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
2b720 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
2b730 65 6c 73 65 20 69 66 28 20 7a 4c 69 6b 65 20 29  else if( zLike )
2b740 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
2b750 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
2b760 61 67 65 3a 20 2e 73 68 61 33 73 75 6d 20 3f 4f  age: .sha3sum ?O
2b770 50 54 49 4f 4e 53 3f 20 3f 4c 49 4b 45 2d 50 41  PTIONS? ?LIKE-PA
2b780 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20 20  TTERN?\n");.    
2b790 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2b7a0 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
2b7b0 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
2b7c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
2b7d0 20 7a 4c 69 6b 65 20 3d 20 7a 3b 0a 20 20 20 20   zLike = z;.    
2b7e0 20 20 20 20 62 53 65 70 61 72 61 74 65 20 3d 20      bSeparate = 
2b7f0 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  1;.        if( s
2b800 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28 22  qlite3_strlike("
2b810 73 71 6c 69 74 65 5f 25 22 2c 20 7a 4c 69 6b 65  sqlite_%", zLike
2b820 2c 20 30 29 3d 3d 30 20 29 20 62 53 63 68 65 6d  , 0)==0 ) bSchem
2b830 61 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  a = 1;.      }. 
2b840 20 20 20 7d 0a 20 20 20 20 69 66 28 20 62 53 63     }.    if( bSc
2b850 68 65 6d 61 20 29 7b 0a 20 20 20 20 20 20 7a 53  hema ){.      zS
2b860 71 6c 20 3d 20 22 53 45 4c 45 43 54 20 6c 6f 77  ql = "SELECT low
2b870 65 72 28 6e 61 6d 65 29 20 46 52 4f 4d 20 73 71  er(name) FROM sq
2b880 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20  lite_master".   
2b890 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52            " WHER
2b8a0 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 20 41  E type='table' A
2b8b0 4e 44 20 63 6f 61 6c 65 73 63 65 28 72 6f 6f 74  ND coalesce(root
2b8c0 70 61 67 65 2c 30 29 3e 31 22 0a 20 20 20 20 20  page,0)>1".     
2b8d0 20 20 20 20 20 20 20 20 22 20 55 4e 49 4f 4e 20          " UNION 
2b8e0 41 4c 4c 20 53 45 4c 45 43 54 20 27 73 71 6c 69  ALL SELECT 'sqli
2b8f0 74 65 5f 6d 61 73 74 65 72 27 22 0a 20 20 20 20  te_master'".    
2b900 20 20 20 20 20 20 20 20 20 22 20 4f 52 44 45 52           " ORDER
2b910 20 42 59 20 31 20 63 6f 6c 6c 61 74 65 20 6e 6f   BY 1 collate no
2b920 63 61 73 65 22 3b 0a 20 20 20 20 7d 65 6c 73 65  case";.    }else
2b930 7b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 22  {.      zSql = "
2b940 53 45 4c 45 43 54 20 6c 6f 77 65 72 28 6e 61 6d  SELECT lower(nam
2b950 65 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  e) FROM sqlite_m
2b960 61 73 74 65 72 22 0a 20 20 20 20 20 20 20 20 20  aster".         
2b970 20 20 20 20 22 20 57 48 45 52 45 20 74 79 70 65      " WHERE type
2b980 3d 27 74 61 62 6c 65 27 20 41 4e 44 20 63 6f 61  ='table' AND coa
2b990 6c 65 73 63 65 28 72 6f 6f 74 70 61 67 65 2c 30  lesce(rootpage,0
2b9a0 29 3e 31 22 0a 20 20 20 20 20 20 20 20 20 20 20  )>1".           
2b9b0 20 20 22 20 41 4e 44 20 6e 61 6d 65 20 4e 4f 54    " AND name NOT
2b9c0 20 4c 49 4b 45 20 27 73 71 6c 69 74 65 5f 25 27   LIKE 'sqlite_%'
2b9d0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22  ".             "
2b9e0 20 4f 52 44 45 52 20 42 59 20 31 20 63 6f 6c 6c   ORDER BY 1 coll
2b9f0 61 74 65 20 6e 6f 63 61 73 65 22 3b 0a 20 20 20  ate nocase";.   
2ba00 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 70   }.    sqlite3_p
2ba10 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c  repare_v2(p->db,
2ba20 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d   zSql, -1, &pStm
2ba30 74 2c 20 30 29 3b 0a 20 20 20 20 69 6e 69 74 54  t, 0);.    initT
2ba40 65 78 74 28 26 73 51 75 65 72 79 29 3b 0a 20 20  ext(&sQuery);.  
2ba50 20 20 69 6e 69 74 54 65 78 74 28 26 73 53 71 6c    initText(&sSql
2ba60 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54 65 78  );.    appendTex
2ba70 74 28 26 73 53 71 6c 2c 20 22 57 49 54 48 20 5b  t(&sSql, "WITH [
2ba80 73 68 61 33 73 75 6d 24 71 75 65 72 79 5d 28 61  sha3sum$query](a
2ba90 2c 62 29 20 41 53 28 22 2c 30 29 3b 0a 20 20 20  ,b) AS(",0);.   
2baa0 20 7a 53 65 70 20 3d 20 22 56 41 4c 55 45 53 28   zSep = "VALUES(
2bab0 22 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 53 51  ";.    while( SQ
2bac0 4c 49 54 45 5f 52 4f 57 3d 3d 73 71 6c 69 74 65  LITE_ROW==sqlite
2bad0 33 5f 73 74 65 70 28 70 53 74 6d 74 29 20 29 7b  3_step(pStmt) ){
2bae0 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
2baf0 72 20 2a 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74  r *zTab = (const
2bb00 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63   char*)sqlite3_c
2bb10 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74  olumn_text(pStmt
2bb20 2c 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  ,0);.      if( z
2bb30 4c 69 6b 65 20 26 26 20 73 71 6c 69 74 65 33 5f  Like && sqlite3_
2bb40 73 74 72 6c 69 6b 65 28 7a 4c 69 6b 65 2c 20 7a  strlike(zLike, z
2bb50 54 61 62 2c 20 30 29 21 3d 30 20 29 20 63 6f 6e  Tab, 0)!=0 ) con
2bb60 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 28  tinue;.      if(
2bb70 20 73 74 72 6e 63 6d 70 28 7a 54 61 62 2c 20 22   strncmp(zTab, "
2bb80 73 71 6c 69 74 65 5f 22 2c 37 29 21 3d 30 20 29  sqlite_",7)!=0 )
2bb90 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  {.        append
2bba0 54 65 78 74 28 26 73 51 75 65 72 79 2c 22 53 45  Text(&sQuery,"SE
2bbb0 4c 45 43 54 20 2a 20 46 52 4f 4d 20 22 2c 20 30  LECT * FROM ", 0
2bbc0 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  );.        appen
2bbd0 64 54 65 78 74 28 26 73 51 75 65 72 79 2c 7a 54  dText(&sQuery,zT
2bbe0 61 62 2c 27 22 27 29 3b 0a 20 20 20 20 20 20 20  ab,'"');.       
2bbf0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 51 75   appendText(&sQu
2bc00 65 72 79 2c 22 20 4e 4f 54 20 49 4e 44 45 58 45  ery," NOT INDEXE
2bc10 44 3b 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  D;", 0);.      }
2bc20 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
2bc30 7a 54 61 62 2c 20 22 73 71 6c 69 74 65 5f 6d 61  zTab, "sqlite_ma
2bc40 73 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20  ster")==0 ){.   
2bc50 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
2bc60 26 73 51 75 65 72 79 2c 22 53 45 4c 45 43 54 20  &sQuery,"SELECT 
2bc70 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61  type,name,tbl_na
2bc80 6d 65 2c 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69  me,sql FROM sqli
2bc90 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20 20  te_master".     
2bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bcb0 20 20 20 20 20 20 22 20 4f 52 44 45 52 20 42 59        " ORDER BY
2bcc0 20 6e 61 6d 65 3b 22 2c 20 30 29 3b 0a 20 20 20   name;", 0);.   
2bcd0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
2bce0 63 6d 70 28 7a 54 61 62 2c 20 22 73 71 6c 69 74  cmp(zTab, "sqlit
2bcf0 65 5f 73 65 71 75 65 6e 63 65 22 29 3d 3d 30 20  e_sequence")==0 
2bd00 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  ){.        appen
2bd10 64 54 65 78 74 28 26 73 51 75 65 72 79 2c 22 53  dText(&sQuery,"S
2bd20 45 4c 45 43 54 20 6e 61 6d 65 2c 73 65 71 20 46  ELECT name,seq F
2bd30 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65  ROM sqlite_seque
2bd40 6e 63 65 22 0a 20 20 20 20 20 20 20 20 20 20 20  nce".           
2bd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd60 22 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 3b  " ORDER BY name;
2bd70 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ", 0);.      }el
2bd80 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 54  se if( strcmp(zT
2bd90 61 62 2c 20 22 73 71 6c 69 74 65 5f 73 74 61 74  ab, "sqlite_stat
2bda0 31 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  1")==0 ){.      
2bdb0 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 51    appendText(&sQ
2bdc0 75 65 72 79 2c 22 53 45 4c 45 43 54 20 74 62 6c  uery,"SELECT tbl
2bdd0 2c 69 64 78 2c 73 74 61 74 20 46 52 4f 4d 20 73  ,idx,stat FROM s
2bde0 71 6c 69 74 65 5f 73 74 61 74 31 22 0a 20 20 20  qlite_stat1".   
2bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be00 20 20 20 20 20 20 20 20 22 20 4f 52 44 45 52 20          " ORDER 
2be10 42 59 20 74 62 6c 2c 69 64 78 3b 22 2c 20 30 29  BY tbl,idx;", 0)
2be20 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
2be30 28 20 73 74 72 63 6d 70 28 7a 54 61 62 2c 20 22  ( strcmp(zTab, "
2be40 73 71 6c 69 74 65 5f 73 74 61 74 33 22 29 3d 3d  sqlite_stat3")==
2be50 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c  0.             |
2be60 7c 20 73 74 72 63 6d 70 28 7a 54 61 62 2c 20 22  | strcmp(zTab, "
2be70 73 71 6c 69 74 65 5f 73 74 61 74 34 22 29 3d 3d  sqlite_stat4")==
2be80 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70  0 ){.        app
2be90 65 6e 64 54 65 78 74 28 26 73 51 75 65 72 79 2c  endText(&sQuery,
2bea0 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
2beb0 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61  ", 0);.        a
2bec0 70 70 65 6e 64 54 65 78 74 28 26 73 51 75 65 72  ppendText(&sQuer
2bed0 79 2c 20 7a 54 61 62 2c 20 30 29 3b 0a 20 20 20  y, zTab, 0);.   
2bee0 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
2bef0 26 73 51 75 65 72 79 2c 20 22 20 4f 52 44 45 52  &sQuery, " ORDER
2bf00 20 42 59 20 74 62 6c 2c 20 69 64 78 2c 20 72 6f   BY tbl, idx, ro
2bf10 77 69 64 3b 5c 6e 22 2c 20 30 29 3b 0a 20 20 20  wid;\n", 0);.   
2bf20 20 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e     }.      appen
2bf30 64 54 65 78 74 28 26 73 53 71 6c 2c 20 7a 53 65  dText(&sSql, zSe
2bf40 70 2c 20 30 29 3b 0a 20 20 20 20 20 20 61 70 70  p, 0);.      app
2bf50 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c 20 73  endText(&sSql, s
2bf60 51 75 65 72 79 2e 7a 2c 20 27 5c 27 27 29 3b 0a  Query.z, '\'');.
2bf70 20 20 20 20 20 20 73 51 75 65 72 79 2e 6e 20 3d        sQuery.n =
2bf80 20 30 3b 0a 20 20 20 20 20 20 61 70 70 65 6e 64   0;.      append
2bf90 54 65 78 74 28 26 73 53 71 6c 2c 20 22 2c 22 2c  Text(&sSql, ",",
2bfa0 20 30 29 3b 0a 20 20 20 20 20 20 61 70 70 65 6e   0);.      appen
2bfb0 64 54 65 78 74 28 26 73 53 71 6c 2c 20 7a 54 61  dText(&sSql, zTa
2bfc0 62 2c 20 27 5c 27 27 29 3b 0a 20 20 20 20 20 20  b, '\'');.      
2bfd0 7a 53 65 70 20 3d 20 22 29 2c 28 22 3b 0a 20 20  zSep = "),(";.  
2bfe0 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
2bff0 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
2c000 0a 20 20 20 20 69 66 28 20 62 53 65 70 61 72 61  .    if( bSepara
2c010 74 65 20 29 7b 0a 20 20 20 20 20 20 7a 53 71 6c  te ){.      zSql
2c020 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
2c030 74 66 28 0a 20 20 20 20 20 20 20 20 20 20 22 25  tf(.          "%
2c040 73 29 29 22 0a 20 20 20 20 20 20 20 20 20 20 22  s))".          "
2c050 20 53 45 4c 45 43 54 20 6c 6f 77 65 72 28 68 65   SELECT lower(he
2c060 78 28 73 68 61 33 5f 71 75 65 72 79 28 61 2c 25  x(sha3_query(a,%
2c070 64 29 29 29 20 41 53 20 68 61 73 68 2c 20 62 20  d))) AS hash, b 
2c080 41 53 20 6c 61 62 65 6c 22 0a 20 20 20 20 20 20  AS label".      
2c090 20 20 20 20 22 20 20 20 46 52 4f 4d 20 5b 73 68      "   FROM [sh
2c0a0 61 33 73 75 6d 24 71 75 65 72 79 5d 22 2c 0a 20  a3sum$query]",. 
2c0b0 20 20 20 20 20 20 20 20 20 73 53 71 6c 2e 7a 2c           sSql.z,
2c0c0 20 69 53 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c   iSize);.    }el
2c0d0 73 65 7b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d  se{.      zSql =
2c0e0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
2c0f0 28 0a 20 20 20 20 20 20 20 20 20 20 22 25 73 29  (.          "%s)
2c100 29 22 0a 20 20 20 20 20 20 20 20 20 20 22 20 53  )".          " S
2c110 45 4c 45 43 54 20 6c 6f 77 65 72 28 68 65 78 28  ELECT lower(hex(
2c120 73 68 61 33 5f 71 75 65 72 79 28 67 72 6f 75 70  sha3_query(group
2c130 5f 63 6f 6e 63 61 74 28 61 2c 27 27 29 2c 25 64  _concat(a,''),%d
2c140 29 29 29 20 41 53 20 68 61 73 68 22 0a 20 20 20  ))) AS hash".   
2c150 20 20 20 20 20 20 20 22 20 20 20 46 52 4f 4d 20         "   FROM 
2c160 5b 73 68 61 33 73 75 6d 24 71 75 65 72 79 5d 22  [sha3sum$query]"
2c170 2c 0a 20 20 20 20 20 20 20 20 20 20 73 53 71 6c  ,.          sSql
2c180 2e 7a 2c 20 69 53 69 7a 65 29 3b 0a 20 20 20 20  .z, iSize);.    
2c190 7d 0a 20 20 20 20 66 72 65 65 54 65 78 74 28 26  }.    freeText(&
2c1a0 73 51 75 65 72 79 29 3b 0a 20 20 20 20 66 72 65  sQuery);.    fre
2c1b0 65 54 65 78 74 28 26 73 53 71 6c 29 3b 0a 20 20  eText(&sSql);.  
2c1c0 20 20 69 66 28 20 62 44 65 62 75 67 20 29 7b 0a    if( bDebug ){.
2c1d0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
2c1e0 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e 22  f(p->out, "%s\n"
2c1f0 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 7d 65 6c  , zSql);.    }el
2c200 73 65 7b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f  se{.      shell_
2c210 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53 71 6c  exec(p->db, zSql
2c220 2c 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b  , shell_callback
2c230 2c 20 70 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  , p, 0);.    }. 
2c240 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
2c250 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a  zSql);.  }else..
2c260 20 20 69 66 28 20 63 3d 3d 27 73 27 0a 20 20 20    if( c=='s'.   
2c270 26 26 20 28 73 74 72 6e 63 6d 70 28 61 7a 41 72  && (strncmp(azAr
2c280 67 5b 30 5d 2c 20 22 73 68 65 6c 6c 22 2c 20 6e  g[0], "shell", n
2c290 29 3d 3d 30 20 7c 7c 20 73 74 72 6e 63 6d 70 28  )==0 || strncmp(
2c2a0 61 7a 41 72 67 5b 30 5d 2c 22 73 79 73 74 65 6d  azArg[0],"system
2c2b0 22 2c 6e 29 3d 3d 30 29 0a 20 20 29 7b 0a 20 20  ",n)==0).  ){.  
2c2c0 20 20 63 68 61 72 20 2a 7a 43 6d 64 3b 0a 20 20    char *zCmd;.  
2c2d0 20 20 69 6e 74 20 69 2c 20 78 3b 0a 20 20 20 20    int i, x;.    
2c2e0 69 66 28 20 6e 41 72 67 3c 32 20 29 7b 0a 20 20  if( nArg<2 ){.  
2c2f0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
2c300 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
2c310 73 79 73 74 65 6d 20 43 4f 4d 4d 41 4e 44 5c 6e  system COMMAND\n
2c320 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
2c330 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
2c340 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
2c350 20 20 20 20 7d 0a 20 20 20 20 7a 43 6d 64 20 3d      }.    zCmd =
2c360 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
2c370 28 73 74 72 63 68 72 28 61 7a 41 72 67 5b 31 5d  (strchr(azArg[1]
2c380 2c 27 20 27 29 3d 3d 30 3f 22 25 73 22 3a 22 5c  ,' ')==0?"%s":"\
2c390 22 25 73 5c 22 22 2c 20 61 7a 41 72 67 5b 31 5d  "%s\"", azArg[1]
2c3a0 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 32 3b 20  );.    for(i=2; 
2c3b0 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
2c3c0 20 20 20 20 7a 43 6d 64 20 3d 20 73 71 6c 69 74      zCmd = sqlit
2c3d0 65 33 5f 6d 70 72 69 6e 74 66 28 73 74 72 63 68  e3_mprintf(strch
2c3e0 72 28 61 7a 41 72 67 5b 69 5d 2c 27 20 27 29 3d  r(azArg[i],' ')=
2c3f0 3d 30 3f 22 25 7a 20 25 73 22 3a 22 25 7a 20 5c  =0?"%z %s":"%z \
2c400 22 25 73 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  "%s\"",.        
2c410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c420 20 20 20 20 20 7a 43 6d 64 2c 20 61 7a 41 72 67       zCmd, azArg
2c430 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  [i]);.    }.    
2c440 78 20 3d 20 73 79 73 74 65 6d 28 7a 43 6d 64 29  x = system(zCmd)
2c450 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
2c460 65 65 28 7a 43 6d 64 29 3b 0a 20 20 20 20 69 66  ee(zCmd);.    if
2c470 28 20 78 20 29 20 72 61 77 5f 70 72 69 6e 74 66  ( x ) raw_printf
2c480 28 73 74 64 65 72 72 2c 20 22 53 79 73 74 65 6d  (stderr, "System
2c490 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e 73   command returns
2c4a0 20 25 64 5c 6e 22 2c 20 78 29 3b 0a 20 20 7d 65   %d\n", x);.  }e
2c4b0 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73  lse..  if( c=='s
2c4c0 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
2c4d0 72 67 5b 30 5d 2c 20 22 73 68 6f 77 22 2c 20 6e  rg[0], "show", n
2c4e0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74  )==0 ){.    stat
2c4f0 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  ic const char *a
2c500 7a 42 6f 6f 6c 5b 5d 20 3d 20 7b 20 22 6f 66 66  zBool[] = { "off
2c510 22 2c 20 22 6f 6e 22 2c 20 22 66 75 6c 6c 22 2c  ", "on", "full",
2c520 20 22 75 6e 6b 22 20 7d 3b 0a 20 20 20 20 69 6e   "unk" };.    in
2c530 74 20 69 3b 0a 20 20 20 20 69 66 28 20 6e 41 72  t i;.    if( nAr
2c540 67 21 3d 31 20 29 7b 0a 20 20 20 20 20 20 72 61  g!=1 ){.      ra
2c550 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
2c560 20 22 55 73 61 67 65 3a 20 2e 73 68 6f 77 5c 6e   "Usage: .show\n
2c570 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
2c580 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
2c590 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
2c5a0 20 20 20 20 7d 0a 20 20 20 20 75 74 66 38 5f 70      }.    utf8_p
2c5b0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
2c5c0 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 65  12.12s: %s\n","e
2c5d0 63 68 6f 22 2c 0a 20 20 20 20 20 20 20 20 20 20  cho",.          
2c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5f0 20 20 20 20 20 20 20 20 61 7a 42 6f 6f 6c 5b 53          azBool[S
2c600 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c 20 53  hellHasFlag(p, S
2c610 48 46 4c 47 5f 45 63 68 6f 29 5d 29 3b 0a 20 20  HFLG_Echo)]);.  
2c620 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
2c630 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73 3a 20  >out, "%12.12s: 
2c640 25 73 5c 6e 22 2c 22 65 71 70 22 2c 20 61 7a 42  %s\n","eqp", azB
2c650 6f 6f 6c 5b 70 2d 3e 61 75 74 6f 45 51 50 26 33  ool[p->autoEQP&3
2c660 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69  ]);.    utf8_pri
2c670 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32  ntf(p->out, "%12
2c680 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 65 78 70  .12s: %s\n","exp
2c690 6c 61 69 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  lain",.         
2c6a0 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78  p->mode==MODE_Ex
2c6b0 70 6c 61 69 6e 20 3f 20 22 6f 6e 22 20 3a 20 70  plain ? "on" : p
2c6c0 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e 20 3f 20  ->autoExplain ? 
2c6d0 22 61 75 74 6f 22 20 3a 20 22 6f 66 66 22 29 3b  "auto" : "off");
2c6e0 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
2c6f0 28 70 2d 3e 6f 75 74 2c 22 25 31 32 2e 31 32 73  (p->out,"%12.12s
2c700 3a 20 25 73 5c 6e 22 2c 22 68 65 61 64 65 72 73  : %s\n","headers
2c710 22 2c 20 61 7a 42 6f 6f 6c 5b 70 2d 3e 73 68 6f  ", azBool[p->sho
2c720 77 48 65 61 64 65 72 21 3d 30 5d 29 3b 0a 20 20  wHeader!=0]);.  
2c730 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
2c740 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73 3a 20  >out, "%12.12s: 
2c750 25 73 5c 6e 22 2c 22 6d 6f 64 65 22 2c 20 6d 6f  %s\n","mode", mo
2c760 64 65 44 65 73 63 72 5b 70 2d 3e 6d 6f 64 65 5d  deDescr[p->mode]
2c770 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
2c780 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e  tf(p->out, "%12.
2c790 31 32 73 3a 20 22 2c 20 22 6e 75 6c 6c 76 61 6c  12s: ", "nullval
2c7a0 75 65 22 29 3b 0a 20 20 20 20 20 20 6f 75 74 70  ue");.      outp
2c7b0 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f  ut_c_string(p->o
2c7c0 75 74 2c 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65  ut, p->nullValue
2c7d0 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  );.      raw_pri
2c7e0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22  ntf(p->out, "\n"
2c7f0 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
2c800 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31 32 2e 31  tf(p->out,"%12.1
2c810 32 73 3a 20 25 73 5c 6e 22 2c 22 6f 75 74 70 75  2s: %s\n","outpu
2c820 74 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t",.            
2c830 73 74 72 6c 65 6e 33 30 28 70 2d 3e 6f 75 74 66  strlen30(p->outf
2c840 69 6c 65 29 20 3f 20 70 2d 3e 6f 75 74 66 69 6c  ile) ? p->outfil
2c850 65 20 3a 20 22 73 74 64 6f 75 74 22 29 3b 0a 20  e : "stdout");. 
2c860 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
2c870 2d 3e 6f 75 74 2c 22 25 31 32 2e 31 32 73 3a 20  ->out,"%12.12s: 
2c880 22 2c 20 22 63 6f 6c 73 65 70 61 72 61 74 6f 72  ", "colseparator
2c890 22 29 3b 0a 20 20 20 20 20 20 6f 75 74 70 75 74  ");.      output
2c8a0 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  _c_string(p->out
2c8b0 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  , p->colSeparato
2c8c0 72 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72  r);.      raw_pr
2c8d0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e  intf(p->out, "\n
2c8e0 22 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69  ");.    utf8_pri
2c8f0 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31 32 2e  ntf(p->out,"%12.
2c900 31 32 73 3a 20 22 2c 20 22 72 6f 77 73 65 70 61  12s: ", "rowsepa
2c910 72 61 74 6f 72 22 29 3b 0a 20 20 20 20 20 20 6f  rator");.      o
2c920 75 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 70  utput_c_string(p
2c930 2d 3e 6f 75 74 2c 20 70 2d 3e 72 6f 77 53 65 70  ->out, p->rowSep
2c940 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 72  arator);.      r
2c950 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
2c960 2c 20 22 5c 6e 22 29 3b 0a 20 20 20 20 75 74 66  , "\n");.    utf
2c970 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
2c980 20 22 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22   "%12.12s: %s\n"
2c990 2c 22 73 74 61 74 73 22 2c 20 61 7a 42 6f 6f 6c  ,"stats", azBool
2c9a0 5b 70 2d 3e 73 74 61 74 73 4f 6e 21 3d 30 5d 29  [p->statsOn!=0])
2c9b0 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  ;.    utf8_print
2c9c0 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31  f(p->out, "%12.1
2c9d0 32 73 3a 20 22 2c 20 22 77 69 64 74 68 22 29 3b  2s: ", "width");
2c9e0 0a 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 69 3c  .    for (i=0;i<
2c9f0 28 69 6e 74 29 41 72 72 61 79 53 69 7a 65 28 70  (int)ArraySize(p
2ca00 2d 3e 63 6f 6c 57 69 64 74 68 29 20 26 26 20 70  ->colWidth) && p
2ca10 2d 3e 63 6f 6c 57 69 64 74 68 5b 69 5d 20 21 3d  ->colWidth[i] !=
2ca20 20 30 3b 69 2b 2b 29 20 7b 0a 20 20 20 20 20 20   0;i++) {.      
2ca30 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
2ca40 74 2c 20 22 25 64 20 22 2c 20 70 2d 3e 63 6f 6c  t, "%d ", p->col
2ca50 57 69 64 74 68 5b 69 5d 29 3b 0a 20 20 20 20 7d  Width[i]);.    }
2ca60 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
2ca70 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20  p->out, "\n");. 
2ca80 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
2ca90 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73 3a  ->out, "%12.12s:
2caa0 20 25 73 5c 6e 22 2c 20 22 66 69 6c 65 6e 61 6d   %s\n", "filenam
2cab0 65 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  e",.            
2cac0 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c 65 6e 61      p->zDbFilena
2cad0 6d 65 20 3f 20 70 2d 3e 7a 44 62 46 69 6c 65 6e  me ? p->zDbFilen
2cae0 61 6d 65 20 3a 20 22 22 29 3b 0a 20 20 7d 65 6c  ame : "");.  }el
2caf0 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73 27  se..  if( c=='s'
2cb00 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
2cb10 67 5b 30 5d 2c 20 22 73 74 61 74 73 22 2c 20 6e  g[0], "stats", n
2cb20 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
2cb30 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20  nArg==2 ){.     
2cb40 20 70 2d 3e 73 74 61 74 73 4f 6e 20 3d 20 62 6f   p->statsOn = bo
2cb50 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67  oleanValue(azArg
2cb60 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  [1]);.    }else 
2cb70 69 66 28 20 6e 41 72 67 3d 3d 31 20 29 7b 0a 20  if( nArg==1 ){. 
2cb80 20 20 20 20 20 64 69 73 70 6c 61 79 5f 73 74 61       display_sta
2cb90 74 73 28 70 2d 3e 64 62 2c 20 70 2c 20 30 29 3b  ts(p->db, p, 0);
2cba0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2cbb0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
2cbc0 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 74  err, "Usage: .st
2cbd0 61 74 73 20 3f 6f 6e 7c 6f 66 66 3f 5c 6e 22 29  ats ?on|off?\n")
2cbe0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
2cbf0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
2cc00 20 69 66 28 20 28 63 3d 3d 27 74 27 20 26 26 20   if( (c=='t' && 
2cc10 6e 3e 31 20 26 26 20 73 74 72 6e 63 6d 70 28 61  n>1 && strncmp(a
2cc20 7a 41 72 67 5b 30 5d 2c 20 22 74 61 62 6c 65 73  zArg[0], "tables
2cc30 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 20 7c 7c 20  ", n)==0).   || 
2cc40 28 63 3d 3d 27 69 27 20 26 26 20 28 73 74 72 6e  (c=='i' && (strn
2cc50 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69  cmp(azArg[0], "i
2cc60 6e 64 69 63 65 73 22 2c 20 6e 29 3d 3d 30 0a 20  ndices", n)==0. 
2cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc80 7c 7c 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  || strncmp(azArg
2cc90 5b 30 5d 2c 20 22 69 6e 64 65 78 65 73 22 2c 20  [0], "indexes", 
2cca0 6e 29 3d 3d 30 29 20 29 0a 20 20 29 7b 0a 20 20  n)==0) ).  ){.  
2ccb0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
2ccc0 70 53 74 6d 74 3b 0a 20 20 20 20 63 68 61 72 20  pStmt;.    char 
2ccd0 2a 2a 61 7a 52 65 73 75 6c 74 3b 0a 20 20 20 20  **azResult;.    
2cce0 69 6e 74 20 6e 52 6f 77 2c 20 6e 41 6c 6c 6f 63  int nRow, nAlloc
2ccf0 3b 0a 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20  ;.    int ii;.  
2cd00 20 20 53 68 65 6c 6c 54 65 78 74 20 73 3b 0a 20    ShellText s;. 
2cd10 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 29 3b     initText(&s);
2cd20 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20  .    open_db(p, 
2cd30 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  0);.    rc = sql
2cd40 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
2cd50 70 2d 3e 64 62 2c 20 22 50 52 41 47 4d 41 20 64  p->db, "PRAGMA d
2cd60 61 74 61 62 61 73 65 5f 6c 69 73 74 22 2c 20 2d  atabase_list", -
2cd70 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20  1, &pStmt, 0);. 
2cd80 20 20 20 69 66 28 20 72 63 20 29 20 72 65 74 75     if( rc ) retu
2cd90 72 6e 20 73 68 65 6c 6c 44 61 74 61 62 61 73 65  rn shellDatabase
2cda0 45 72 72 6f 72 28 70 2d 3e 64 62 29 3b 0a 0a 20  Error(p->db);.. 
2cdb0 20 20 20 69 66 28 20 6e 41 72 67 3e 32 20 26 26     if( nArg>2 &&
2cdc0 20 63 3d 3d 27 69 27 20 29 7b 0a 20 20 20 20 20   c=='i' ){.     
2cdd0 20 2f 2a 20 49 74 20 69 73 20 61 6e 20 68 69 73   /* It is an his
2cde0 74 6f 72 69 63 61 6c 20 61 63 63 69 64 65 6e 74  torical accident
2cdf0 20 74 68 61 74 20 74 68 65 20 2e 69 6e 64 65 78   that the .index
2ce00 65 73 20 63 6f 6d 6d 61 6e 64 20 73 68 6f 77 73  es command shows
2ce10 20 61 6e 20 65 72 72 6f 72 0a 20 20 20 20 20 20   an error.      
2ce20 2a 2a 20 77 68 65 6e 20 63 61 6c 6c 65 64 20 77  ** when called w
2ce30 69 74 68 20 74 68 65 20 77 72 6f 6e 67 20 6e 75  ith the wrong nu
2ce40 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
2ce50 73 20 77 68 65 72 65 61 73 20 74 68 65 20 2e 74  s whereas the .t
2ce60 61 62 6c 65 73 0a 20 20 20 20 20 20 2a 2a 20 63  ables.      ** c
2ce70 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 2e  ommand does not.
2ce80 20 2a 2f 0a 20 20 20 20 20 20 72 61 77 5f 70 72   */.      raw_pr
2ce90 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
2cea0 61 67 65 3a 20 2e 69 6e 64 65 78 65 73 20 3f 4c  age: .indexes ?L
2ceb0 49 4b 45 2d 50 41 54 54 45 52 4e 3f 5c 6e 22 29  IKE-PATTERN?\n")
2cec0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
2ced0 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
2cee0 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
2cef0 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 69 3d 30    }.    for(ii=0
2cf00 3b 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  ; sqlite3_step(p
2cf10 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  Stmt)==SQLITE_RO
2cf20 57 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  W; ii++){.      
2cf30 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 4e  const char *zDbN
2cf40 61 6d 65 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  ame = (const cha
2cf50 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  r*)sqlite3_colum
2cf60 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 31 29  n_text(pStmt, 1)
2cf70 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 44 62 4e  ;.      if( zDbN
2cf80 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  ame==0 ) continu
2cf90 65 3b 0a 20 20 20 20 20 20 69 66 28 20 73 2e 7a  e;.      if( s.z
2cfa0 20 26 26 20 73 2e 7a 5b 30 5d 20 29 20 61 70 70   && s.z[0] ) app
2cfb0 65 6e 64 54 65 78 74 28 26 73 2c 20 22 20 55 4e  endText(&s, " UN
2cfc0 49 4f 4e 20 41 4c 4c 20 22 2c 20 30 29 3b 0a 20  ION ALL ", 0);. 
2cfd0 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
2cfe0 5f 73 74 72 69 63 6d 70 28 7a 44 62 4e 61 6d 65  _stricmp(zDbName
2cff0 2c 20 22 6d 61 69 6e 22 29 3d 3d 30 20 29 7b 0a  , "main")==0 ){.
2d000 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65          appendTe
2d010 78 74 28 26 73 2c 20 22 53 45 4c 45 43 54 20 6e  xt(&s, "SELECT n
2d020 61 6d 65 20 46 52 4f 4d 20 22 2c 20 30 29 3b 0a  ame FROM ", 0);.
2d030 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
2d040 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28       appendText(
2d050 26 73 2c 20 22 53 45 4c 45 43 54 20 22 2c 20 30  &s, "SELECT ", 0
2d060 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  );.        appen
2d070 64 54 65 78 74 28 26 73 2c 20 7a 44 62 4e 61 6d  dText(&s, zDbNam
2d080 65 2c 20 27 5c 27 27 29 3b 0a 20 20 20 20 20 20  e, '\'');.      
2d090 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c    appendText(&s,
2d0a0 20 22 7c 7c 27 2e 27 7c 7c 6e 61 6d 65 20 46 52   "||'.'||name FR
2d0b0 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  OM ", 0);.      
2d0c0 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65  }.      appendTe
2d0d0 78 74 28 26 73 2c 20 7a 44 62 4e 61 6d 65 2c 20  xt(&s, zDbName, 
2d0e0 27 22 27 29 3b 0a 20 20 20 20 20 20 61 70 70 65  '"');.      appe
2d0f0 6e 64 54 65 78 74 28 26 73 2c 20 22 2e 73 71 6c  ndText(&s, ".sql
2d100 69 74 65 5f 6d 61 73 74 65 72 20 22 2c 20 30 29  ite_master ", 0)
2d110 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27  ;.      if( c=='
2d120 74 27 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70  t' ){.        ap
2d130 70 65 6e 64 54 65 78 74 28 26 73 2c 22 20 57 48  pendText(&s," WH
2d140 45 52 45 20 74 79 70 65 20 49 4e 20 28 27 74 61  ERE type IN ('ta
2d150 62 6c 65 27 2c 27 76 69 65 77 27 29 22 0a 20 20  ble','view')".  
2d160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d170 20 20 20 20 22 20 20 20 41 4e 44 20 6e 61 6d 65      "   AND name
2d180 20 4e 4f 54 20 4c 49 4b 45 20 27 73 71 6c 69 74   NOT LIKE 'sqlit
2d190 65 5f 25 27 22 0a 20 20 20 20 20 20 20 20 20 20  e_%'".          
2d1a0 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20 20              "   
2d1b0 41 4e 44 20 6e 61 6d 65 20 4c 49 4b 45 20 3f 31  AND name LIKE ?1
2d1c0 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ", 0);.      }el
2d1d0 73 65 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65  se{.        appe
2d1e0 6e 64 54 65 78 74 28 26 73 2c 22 20 57 48 45 52  ndText(&s," WHER
2d1f0 45 20 74 79 70 65 3d 27 69 6e 64 65 78 27 22 0a  E type='index'".
2d200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d210 20 20 20 20 20 20 22 20 20 20 41 4e 44 20 74 62        "   AND tb
2d220 6c 5f 6e 61 6d 65 20 4c 49 4b 45 20 3f 31 22 2c  l_name LIKE ?1",
2d230 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   0);.      }.   
2d240 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69   }.    rc = sqli
2d250 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
2d260 6d 74 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54  mt);.    appendT
2d270 65 78 74 28 26 73 2c 20 22 20 4f 52 44 45 52 20  ext(&s, " ORDER 
2d280 42 59 20 31 22 2c 20 30 29 3b 0a 20 20 20 20 72  BY 1", 0);.    r
2d290 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
2d2a0 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 73 2e  are_v2(p->db, s.
2d2b0 7a 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30  z, -1, &pStmt, 0
2d2c0 29 3b 0a 20 20 20 20 66 72 65 65 54 65 78 74 28  );.    freeText(
2d2d0 26 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  &s);.    if( rc 
2d2e0 29 20 72 65 74 75 72 6e 20 73 68 65 6c 6c 44 61  ) return shellDa
2d2f0 74 61 62 61 73 65 45 72 72 6f 72 28 70 2d 3e 64  tabaseError(p->d
2d300 62 29 3b 0a 0a 20 20 20 20 2f 2a 20 52 75 6e 20  b);..    /* Run 
2d310 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
2d320 74 20 70 72 65 70 61 72 65 64 20 62 79 20 74 68  t prepared by th
2d330 65 20 61 62 6f 76 65 20 62 6c 6f 63 6b 2e 20 53  e above block. S
2d340 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 73  tore the results
2d350 0a 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 61 72  .    ** as an ar
2d360 72 61 79 20 6f 66 20 6e 75 6c 2d 74 65 72 6d 69  ray of nul-termi
2d370 6e 61 74 65 64 20 73 74 72 69 6e 67 73 20 69 6e  nated strings in
2d380 20 61 7a 52 65 73 75 6c 74 5b 5d 2e 20 20 2a 2f   azResult[].  */
2d390 0a 20 20 20 20 6e 52 6f 77 20 3d 20 6e 41 6c 6c  .    nRow = nAll
2d3a0 6f 63 20 3d 20 30 3b 0a 20 20 20 20 61 7a 52 65  oc = 0;.    azRe
2d3b0 73 75 6c 74 20 3d 20 30 3b 0a 20 20 20 20 69 66  sult = 0;.    if
2d3c0 28 20 6e 41 72 67 3e 31 20 29 7b 0a 20 20 20 20  ( nArg>1 ){.    
2d3d0 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
2d3e0 65 78 74 28 70 53 74 6d 74 2c 20 31 2c 20 61 7a  ext(pStmt, 1, az
2d3f0 41 72 67 5b 31 5d 2c 20 2d 31 2c 20 53 51 4c 49  Arg[1], -1, SQLI
2d400 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
2d410 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2d420 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
2d430 74 28 70 53 74 6d 74 2c 20 31 2c 20 22 25 22 2c  t(pStmt, 1, "%",
2d440 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54 41 54   -1, SQLITE_STAT
2d450 49 43 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77  IC);.    }.    w
2d460 68 69 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74  hile( sqlite3_st
2d470 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  ep(pStmt)==SQLIT
2d480 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 69  E_ROW ){.      i
2d490 66 28 20 6e 52 6f 77 3e 3d 6e 41 6c 6c 6f 63 20  f( nRow>=nAlloc 
2d4a0 29 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20  ){.        char 
2d4b0 2a 2a 61 7a 4e 65 77 3b 0a 20 20 20 20 20 20 20  **azNew;.       
2d4c0 20 69 6e 74 20 6e 32 20 3d 20 6e 41 6c 6c 6f 63   int n2 = nAlloc
2d4d0 2a 32 20 2b 20 31 30 3b 0a 20 20 20 20 20 20 20  *2 + 10;.       
2d4e0 20 61 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65 33   azNew = sqlite3
2d4f0 5f 72 65 61 6c 6c 6f 63 36 34 28 61 7a 52 65 73  _realloc64(azRes
2d500 75 6c 74 2c 20 73 69 7a 65 6f 66 28 61 7a 52 65  ult, sizeof(azRe
2d510 73 75 6c 74 5b 30 5d 29 2a 6e 32 29 3b 0a 20 20  sult[0])*n2);.  
2d520 20 20 20 20 20 20 69 66 28 20 61 7a 4e 65 77 3d        if( azNew=
2d530 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
2d540 72 63 20 3d 20 73 68 65 6c 6c 4e 6f 6d 65 6d 45  rc = shellNomemE
2d550 72 72 6f 72 28 29 3b 0a 20 20 20 20 20 20 20 20  rror();.        
2d560 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
2d570 20 7d 0a 20 20 20 20 20 20 20 20 6e 41 6c 6c 6f   }.        nAllo
2d580 63 20 3d 20 6e 32 3b 0a 20 20 20 20 20 20 20 20  c = n2;.        
2d590 61 7a 52 65 73 75 6c 74 20 3d 20 61 7a 4e 65 77  azResult = azNew
2d5a0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
2d5b0 61 7a 52 65 73 75 6c 74 5b 6e 52 6f 77 5d 20 3d  azResult[nRow] =
2d5c0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
2d5d0 28 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 63  ("%s", sqlite3_c
2d5e0 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74  olumn_text(pStmt
2d5f0 2c 20 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28  , 0));.      if(
2d600 20 30 3d 3d 61 7a 52 65 73 75 6c 74 5b 6e 52 6f   0==azResult[nRo
2d610 77 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  w] ){.        rc
2d620 20 3d 20 73 68 65 6c 6c 4e 6f 6d 65 6d 45 72 72   = shellNomemErr
2d630 6f 72 28 29 3b 0a 20 20 20 20 20 20 20 20 62 72  or();.        br
2d640 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
2d650 20 20 20 6e 52 6f 77 2b 2b 3b 0a 20 20 20 20 7d     nRow++;.    }
2d660 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
2d670 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29  _finalize(pStmt)
2d680 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
2d690 20 20 20 20 20 72 63 20 3d 20 73 68 65 6c 6c 44       rc = shellD
2d6a0 61 74 61 62 61 73 65 45 72 72 6f 72 28 70 2d 3e  atabaseError(p->
2d6b0 64 62 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  db);.    }..    
2d6c0 2f 2a 20 50 72 65 74 74 79 2d 70 72 69 6e 74 20  /* Pretty-print 
2d6d0 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
2d6e0 61 72 72 61 79 20 61 7a 52 65 73 75 6c 74 5b 5d  array azResult[]
2d6f0 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20 2a   to the output *
2d700 2f 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 30 20  /.    if( rc==0 
2d710 26 26 20 6e 52 6f 77 3e 30 20 29 7b 0a 20 20 20  && nRow>0 ){.   
2d720 20 20 20 69 6e 74 20 6c 65 6e 2c 20 6d 61 78 6c     int len, maxl
2d730 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 6e  en = 0;.      in
2d740 74 20 69 2c 20 6a 3b 0a 20 20 20 20 20 20 69 6e  t i, j;.      in
2d750 74 20 6e 50 72 69 6e 74 43 6f 6c 2c 20 6e 50 72  t nPrintCol, nPr
2d760 69 6e 74 52 6f 77 3b 0a 20 20 20 20 20 20 66 6f  intRow;.      fo
2d770 72 28 69 3d 30 3b 20 69 3c 6e 52 6f 77 3b 20 69  r(i=0; i<nRow; i
2d780 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 6c 65 6e  ++){.        len
2d790 20 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a 52 65   = strlen30(azRe
2d7a0 73 75 6c 74 5b 69 5d 29 3b 0a 20 20 20 20 20 20  sult[i]);.      
2d7b0 20 20 69 66 28 20 6c 65 6e 3e 6d 61 78 6c 65 6e    if( len>maxlen
2d7c0 20 29 20 6d 61 78 6c 65 6e 20 3d 20 6c 65 6e 3b   ) maxlen = len;
2d7d0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e  .      }.      n
2d7e0 50 72 69 6e 74 43 6f 6c 20 3d 20 38 30 2f 28 6d  PrintCol = 80/(m
2d7f0 61 78 6c 65 6e 2b 32 29 3b 0a 20 20 20 20 20 20  axlen+2);.      
2d800 69 66 28 20 6e 50 72 69 6e 74 43 6f 6c 3c 31 20  if( nPrintCol<1 
2d810 29 20 6e 50 72 69 6e 74 43 6f 6c 20 3d 20 31 3b  ) nPrintCol = 1;
2d820 0a 20 20 20 20 20 20 6e 50 72 69 6e 74 52 6f 77  .      nPrintRow
2d830 20 3d 20 28 6e 52 6f 77 20 2b 20 6e 50 72 69 6e   = (nRow + nPrin
2d840 74 43 6f 6c 20 2d 20 31 29 2f 6e 50 72 69 6e 74  tCol - 1)/nPrint
2d850 43 6f 6c 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  Col;.      for(i
2d860 3d 30 3b 20 69 3c 6e 50 72 69 6e 74 52 6f 77 3b  =0; i<nPrintRow;
2d870 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 66   i++){.        f
2d880 6f 72 28 6a 3d 69 3b 20 6a 3c 6e 52 6f 77 3b 20  or(j=i; j<nRow; 
2d890 6a 2b 3d 6e 50 72 69 6e 74 52 6f 77 29 7b 0a 20  j+=nPrintRow){. 
2d8a0 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a           char *z
2d8b0 53 70 20 3d 20 6a 3c 6e 50 72 69 6e 74 52 6f 77  Sp = j<nPrintRow
2d8c0 20 3f 20 22 22 20 3a 20 22 20 20 22 3b 0a 20 20   ? "" : "  ";.  
2d8d0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
2d8e0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 25  ntf(p->out, "%s%
2d8f0 2d 2a 73 22 2c 20 7a 53 70 2c 20 6d 61 78 6c 65  -*s", zSp, maxle
2d900 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n,.             
2d910 20 20 20 20 20 20 20 20 20 61 7a 52 65 73 75 6c           azResul
2d920 74 5b 6a 5d 20 3f 20 61 7a 52 65 73 75 6c 74 5b  t[j] ? azResult[
2d930 6a 5d 3a 22 22 29 3b 0a 20 20 20 20 20 20 20 20  j]:"");.        
2d940 7d 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  }.        raw_pr
2d950 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e  intf(p->out, "\n
2d960 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ");.      }.    
2d970 7d 0a 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b  }..    for(ii=0;
2d980 20 69 69 3c 6e 52 6f 77 3b 20 69 69 2b 2b 29 20   ii<nRow; ii++) 
2d990 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 7a 52  sqlite3_free(azR
2d9a0 65 73 75 6c 74 5b 69 69 5d 29 3b 0a 20 20 20 20  esult[ii]);.    
2d9b0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 7a 52  sqlite3_free(azR
2d9c0 65 73 75 6c 74 29 3b 0a 20 20 7d 65 6c 73 65 0a  esult);.  }else.
2d9d0 0a 20 20 2f 2a 20 42 65 67 69 6e 20 72 65 64 69  .  /* Begin redi
2d9e0 72 65 63 74 69 6e 67 20 6f 75 74 70 75 74 20 74  recting output t
2d9f0 6f 20 74 68 65 20 66 69 6c 65 20 22 74 65 73 74  o the file "test
2da00 63 61 73 65 2d 6f 75 74 2e 74 78 74 22 20 2a 2f  case-out.txt" */
2da10 0a 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26  .  if( c=='t' &&
2da20 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 30 5d   strcmp(azArg[0]
2da30 2c 22 74 65 73 74 63 61 73 65 22 29 3d 3d 30 20  ,"testcase")==0 
2da40 29 7b 0a 20 20 20 20 6f 75 74 70 75 74 5f 72 65  ){.    output_re
2da50 73 65 74 28 70 29 3b 0a 20 20 20 20 70 2d 3e 6f  set(p);.    p->o
2da60 75 74 20 3d 20 6f 75 74 70 75 74 5f 66 69 6c 65  ut = output_file
2da70 5f 6f 70 65 6e 28 22 74 65 73 74 63 61 73 65 2d  _open("testcase-
2da80 6f 75 74 2e 74 78 74 22 29 3b 0a 20 20 20 20 69  out.txt");.    i
2da90 66 28 20 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a  f( p->out==0 ){.
2daa0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
2dab0 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
2dac0 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 27 74 65   cannot open 'te
2dad0 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 27 5c  stcase-out.txt'\
2dae0 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  n");.    }.    i
2daf0 66 28 20 6e 41 72 67 3e 3d 32 20 29 7b 0a 20 20  f( nArg>=2 ){.  
2db00 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
2db10 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 7a  intf(sizeof(p->z
2db20 54 65 73 74 63 61 73 65 29 2c 20 70 2d 3e 7a 54  Testcase), p->zT
2db30 65 73 74 63 61 73 65 2c 20 22 25 73 22 2c 20 61  estcase, "%s", a
2db40 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65  zArg[1]);.    }e
2db50 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
2db60 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
2db70 6f 66 28 70 2d 3e 7a 54 65 73 74 63 61 73 65 29  of(p->zTestcase)
2db80 2c 20 70 2d 3e 7a 54 65 73 74 63 61 73 65 2c 20  , p->zTestcase, 
2db90 22 3f 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  "?");.    }.  }e
2dba0 6c 73 65 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  lse..#ifndef SQL
2dbb0 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20  ITE_UNTESTABLE. 
2dbc0 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26 20 6e   if( c=='t' && n
2dbd0 3e 3d 38 20 26 26 20 73 74 72 6e 63 6d 70 28 61  >=8 && strncmp(a
2dbe0 7a 41 72 67 5b 30 5d 2c 20 22 74 65 73 74 63 74  zArg[0], "testct
2dbf0 72 6c 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  rl", n)==0 ){.  
2dc00 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73    static const s
2dc10 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 63  truct {.       c
2dc20 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 72 6c  onst char *zCtrl
2dc30 4e 61 6d 65 3b 20 20 20 2f 2a 20 4e 61 6d 65 20  Name;   /* Name 
2dc40 6f 66 20 61 20 74 65 73 74 2d 63 6f 6e 74 72 6f  of a test-contro
2dc50 6c 20 6f 70 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  l option */.    
2dc60 20 20 20 69 6e 74 20 63 74 72 6c 43 6f 64 65 3b     int ctrlCode;
2dc70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
2dc80 6e 74 65 67 65 72 20 63 6f 64 65 20 66 6f 72 20  nteger code for 
2dc90 74 68 61 74 20 6f 70 74 69 6f 6e 20 2a 2f 0a 20  that option */. 
2dca0 20 20 20 7d 20 61 43 74 72 6c 5b 5d 20 3d 20 7b     } aCtrl[] = {
2dcb0 0a 20 20 20 20 20 20 7b 20 22 61 6c 77 61 79 73  .      { "always
2dcc0 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
2dcd0 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52    SQLITE_TESTCTR
2dce0 4c 5f 41 4c 57 41 59 53 20 20 20 20 20 20 20 20  L_ALWAYS        
2dcf0 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
2dd00 20 20 7b 20 22 61 73 73 65 72 74 22 2c 20 20 20    { "assert",   
2dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
2dd20 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 41 53 53  ITE_TESTCTRL_ASS
2dd30 45 52 54 20 20 20 20 20 20 20 20 20 20 20 20 20  ERT             
2dd40 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
2dd50 62 65 6e 69 67 6e 5f 6d 61 6c 6c 6f 63 5f 68 6f  benign_malloc_ho
2dd60 6f 6b 73 22 2c 20 20 20 53 51 4c 49 54 45 5f 54  oks",   SQLITE_T
2dd70 45 53 54 43 54 52 4c 5f 42 45 4e 49 47 4e 5f 4d  ESTCTRL_BENIGN_M
2dd80 41 4c 4c 4f 43 5f 48 4f 4f 4b 53 20 20 20 20 7d  ALLOC_HOOKS    }
2dd90 2c 0a 20 20 20 20 20 20 7b 20 22 62 69 74 76 65  ,.      { "bitve
2dda0 63 5f 74 65 73 74 22 2c 20 20 20 20 20 20 20 20  c_test",        
2ddb0 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54     SQLITE_TESTCT
2ddc0 52 4c 5f 42 49 54 56 45 43 5f 54 45 53 54 20 20  RL_BITVEC_TEST  
2ddd0 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
2dde0 20 20 20 7b 20 22 62 79 74 65 6f 72 64 65 72 22     { "byteorder"
2ddf0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ,             SQ
2de00 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 42 59  LITE_TESTCTRL_BY
2de10 54 45 4f 52 44 45 52 20 20 20 20 20 20 20 20 20  TEORDER         
2de20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
2de30 22 66 61 75 6c 74 5f 69 6e 73 74 61 6c 6c 22 2c  "fault_install",
2de40 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
2de50 54 45 53 54 43 54 52 4c 5f 46 41 55 4c 54 5f 49  TESTCTRL_FAULT_I
2de60 4e 53 54 41 4c 4c 20 20 20 20 20 20 20 20 20 20  NSTALL          
2de70 7d 2c 0a 20 20 20 20 20 20 7b 20 22 69 6d 70 6f  },.      { "impo
2de80 73 74 65 72 22 2c 20 20 20 20 20 20 20 20 20 20  ster",          
2de90 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43      SQLITE_TESTC
2dea0 54 52 4c 5f 49 4d 50 4f 53 54 45 52 20 20 20 20  TRL_IMPOSTER    
2deb0 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
2dec0 20 20 20 20 7b 20 22 69 73 6b 65 79 77 6f 72 64      { "iskeyword
2ded0 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 53  ",             S
2dee0 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 49  QLITE_TESTCTRL_I
2def0 53 4b 45 59 57 4f 52 44 20 20 20 20 20 20 20 20  SKEYWORD        
2df00 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
2df10 20 22 6e 65 76 65 72 5f 63 6f 72 72 75 70 74 22   "never_corrupt"
2df20 2c 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45  ,         SQLITE
2df30 5f 54 45 53 54 43 54 52 4c 5f 4e 45 56 45 52 5f  _TESTCTRL_NEVER_
2df40 43 4f 52 52 55 50 54 20 20 20 20 20 20 20 20 20  CORRUPT         
2df50 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 6f 70 74   },.      { "opt
2df60 69 6d 69 7a 61 74 69 6f 6e 73 22 2c 20 20 20 20  imizations",    
2df70 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54       SQLITE_TEST
2df80 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f  CTRL_OPTIMIZATIO
2df90 4e 53 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20  NS          },. 
2dfa0 20 20 20 20 20 7b 20 22 70 65 6e 64 69 6e 67 5f       { "pending_
2dfb0 62 79 74 65 22 2c 20 20 20 20 20 20 20 20 20 20  byte",          
2dfc0 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
2dfd0 50 45 4e 44 49 4e 47 5f 42 59 54 45 20 20 20 20  PENDING_BYTE    
2dfe0 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
2dff0 7b 20 22 70 72 6e 67 5f 72 65 73 65 74 22 2c 20  { "prng_reset", 
2e000 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
2e010 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e 47 5f  E_TESTCTRL_PRNG_
2e020 52 45 53 45 54 20 20 20 20 20 20 20 20 20 20 20  RESET           
2e030 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 70 72    },.      { "pr
2e040 6e 67 5f 72 65 73 74 6f 72 65 22 2c 20 20 20 20  ng_restore",    
2e050 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53        SQLITE_TES
2e060 54 43 54 52 4c 5f 50 52 4e 47 5f 52 45 53 54 4f  TCTRL_PRNG_RESTO
2e070 52 45 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a  RE           },.
2e080 20 20 20 20 20 20 7b 20 22 70 72 6e 67 5f 73 61        { "prng_sa
2e090 76 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ve",            
2e0a0 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
2e0b0 5f 50 52 4e 47 5f 53 41 56 45 20 20 20 20 20 20  _PRNG_SAVE      
2e0c0 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
2e0d0 20 7b 20 22 72 65 73 65 72 76 65 22 2c 20 20 20   { "reserve",   
2e0e0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
2e0f0 54 45 5f 54 45 53 54 43 54 52 4c 5f 52 45 53 45  TE_TESTCTRL_RESE
2e100 52 56 45 20 20 20 20 20 20 20 20 20 20 20 20 20  RVE             
2e110 20 20 20 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20     },.    };.   
2e120 20 69 6e 74 20 74 65 73 74 63 74 72 6c 20 3d 20   int testctrl = 
2e130 2d 31 3b 0a 20 20 20 20 69 6e 74 20 72 63 32 20  -1;.    int rc2 
2e140 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 69 2c 20  = 0;.    int i, 
2e150 6e 32 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28  n2;.    open_db(
2e160 70 2c 20 30 29 3b 0a 20 20 20 20 63 6f 6e 73 74  p, 0);.    const
2e170 20 63 68 61 72 20 2a 7a 43 6d 64 20 3d 20 6e 41   char *zCmd = nA
2e180 72 67 3e 3d 32 20 3f 20 61 7a 41 72 67 5b 31 5d  rg>=2 ? azArg[1]
2e190 20 3a 20 22 68 65 6c 70 22 3b 0a 0a 20 20 20 20   : "help";..    
2e1a0 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  /* The argument 
2e1b0 63 61 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62  can optionally b
2e1c0 65 67 69 6e 20 77 69 74 68 20 22 2d 22 20 6f 72  egin with "-" or
2e1d0 20 22 2d 2d 22 20 2a 2f 0a 20 20 20 20 69 66 28   "--" */.    if(
2e1e0 20 7a 43 6d 64 5b 30 5d 3d 3d 27 2d 27 20 26 26   zCmd[0]=='-' &&
2e1f0 20 7a 43 6d 64 5b 31 5d 20 29 7b 0a 20 20 20 20   zCmd[1] ){.    
2e200 20 20 7a 43 6d 64 2b 2b 3b 0a 20 20 20 20 20 20    zCmd++;.      
2e210 69 66 28 20 7a 43 6d 64 5b 30 5d 3d 3d 27 2d 27  if( zCmd[0]=='-'
2e220 20 26 26 20 7a 43 6d 64 5b 31 5d 20 29 20 7a 43   && zCmd[1] ) zC
2e230 6d 64 2b 2b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  md++;.    }..   
2e240 20 2f 2a 20 2d 2d 68 65 6c 70 20 6c 69 73 74 73   /* --help lists
2e250 20 61 6c 6c 20 74 65 73 74 2d 63 6f 6e 74 72 6f   all test-contro
2e260 6c 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 74  ls */.    if( st
2e270 72 63 6d 70 28 7a 43 6d 64 2c 22 68 65 6c 70 22  rcmp(zCmd,"help"
2e280 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74  )==0 ){.      ut
2e290 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
2e2a0 2c 20 22 41 76 61 69 6c 61 62 6c 65 20 74 65 73  , "Available tes
2e2b0 74 2d 63 6f 6e 74 72 6f 6c 73 3a 5c 6e 22 29 3b  t-controls:\n");
2e2c0 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
2e2d0 69 3c 41 72 72 61 79 53 69 7a 65 28 61 43 74 72  i<ArraySize(aCtr
2e2e0 6c 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  l); i++){.      
2e2f0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
2e300 3e 6f 75 74 2c 20 22 20 20 2e 74 65 73 74 63 74  >out, "  .testct
2e310 72 6c 20 25 73 5c 6e 22 2c 20 61 43 74 72 6c 5b  rl %s\n", aCtrl[
2e320 69 5d 2e 7a 43 74 72 6c 4e 61 6d 65 29 3b 0a 20  i].zCtrlName);. 
2e330 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63 20       }.      rc 
2e340 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  = 1;.      goto 
2e350 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
2e360 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  t;.    }..    /*
2e370 20 63 6f 6e 76 65 72 74 20 74 65 73 74 63 74 72   convert testctr
2e380 6c 20 74 65 78 74 20 6f 70 74 69 6f 6e 20 74 6f  l text option to
2e390 20 76 61 6c 75 65 2e 20 61 6c 6c 6f 77 20 61 6e   value. allow an
2e3a0 79 20 75 6e 69 71 75 65 20 70 72 65 66 69 78 0a  y unique prefix.
2e3b0 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 6f 70      ** of the op
2e3c0 74 69 6f 6e 20 6e 61 6d 65 2c 20 6f 72 20 61 20  tion name, or a 
2e3d0 6e 75 6d 65 72 69 63 61 6c 20 76 61 6c 75 65 2e  numerical value.
2e3e0 20 2a 2f 0a 20 20 20 20 6e 32 20 3d 20 73 74 72   */.    n2 = str
2e3f0 6c 65 6e 33 30 28 7a 43 6d 64 29 3b 0a 20 20 20  len30(zCmd);.   
2e400 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61   for(i=0; i<Arra
2e410 79 53 69 7a 65 28 61 43 74 72 6c 29 3b 20 69 2b  ySize(aCtrl); i+
2e420 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 74  +){.      if( st
2e430 72 6e 63 6d 70 28 7a 43 6d 64 2c 20 61 43 74 72  rncmp(zCmd, aCtr
2e440 6c 5b 69 5d 2e 7a 43 74 72 6c 4e 61 6d 65 2c 20  l[i].zCtrlName, 
2e450 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  n2)==0 ){.      
2e460 20 20 69 66 28 20 74 65 73 74 63 74 72 6c 3c 30    if( testctrl<0
2e470 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 74 65   ){.          te
2e480 73 74 63 74 72 6c 20 3d 20 61 43 74 72 6c 5b 69  stctrl = aCtrl[i
2e490 5d 2e 63 74 72 6c 43 6f 64 65 3b 0a 20 20 20 20  ].ctrlCode;.    
2e4a0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2e4b0 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
2e4c0 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
2e4d0 20 61 6d 62 69 67 75 6f 75 73 20 74 65 73 74 2d   ambiguous test-
2e4e0 63 6f 6e 74 72 6f 6c 3a 20 5c 22 25 73 5c 22 5c  control: \"%s\"\
2e4f0 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n".             
2e500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e510 20 22 55 73 65 20 5c 22 2e 74 65 73 74 63 74 72   "Use \".testctr
2e520 6c 20 2d 2d 68 65 6c 70 5c 22 20 66 6f 72 20 68  l --help\" for h
2e530 65 6c 70 5c 6e 22 2c 20 7a 43 6d 64 29 3b 0a 20  elp\n", zCmd);. 
2e540 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b           rc = 1;
2e550 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
2e560 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
2e570 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
2e580 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
2e590 66 28 20 74 65 73 74 63 74 72 6c 3c 30 20 29 20  f( testctrl<0 ) 
2e5a0 74 65 73 74 63 74 72 6c 20 3d 20 28 69 6e 74 29  testctrl = (int)
2e5b0 69 6e 74 65 67 65 72 56 61 6c 75 65 28 7a 43 6d  integerValue(zCm
2e5c0 64 29 3b 0a 20 20 20 20 69 66 28 20 28 74 65 73  d);.    if( (tes
2e5d0 74 63 74 72 6c 3c 53 51 4c 49 54 45 5f 54 45 53  tctrl<SQLITE_TES
2e5e0 54 43 54 52 4c 5f 46 49 52 53 54 29 20 7c 7c 20  TCTRL_FIRST) || 
2e5f0 28 74 65 73 74 63 74 72 6c 3e 53 51 4c 49 54 45  (testctrl>SQLITE
2e600 5f 54 45 53 54 43 54 52 4c 5f 4c 41 53 54 29 20  _TESTCTRL_LAST) 
2e610 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
2e620 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72  intf(stderr,"Err
2e630 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20 74 65 73 74  or: unknown test
2e640 2d 63 6f 6e 74 72 6f 6c 3a 20 25 73 5c 6e 22 0a  -control: %s\n".
2e650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e660 20 20 20 20 20 20 20 20 20 22 55 73 65 20 5c 22           "Use \"
2e670 2e 74 65 73 74 63 74 72 6c 20 2d 2d 68 65 6c 70  .testctrl --help
2e680 5c 22 20 66 6f 72 20 68 65 6c 70 5c 6e 22 2c 20  \" for help\n", 
2e690 7a 43 6d 64 29 3b 0a 20 20 20 20 7d 65 6c 73 65  zCmd);.    }else
2e6a0 7b 0a 20 20 20 20 20 20 73 77 69 74 63 68 28 74  {.      switch(t
2e6b0 65 73 74 63 74 72 6c 29 7b 0a 0a 20 20 20 20 20  estctrl){..     
2e6c0 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 74 65     /* sqlite3_te
2e6d0 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74 2c 20  st_control(int, 
2e6e0 64 62 2c 20 69 6e 74 29 20 2a 2f 0a 20 20 20 20  db, int) */.    
2e6f0 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
2e700 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a  TESTCTRL_OPTIMIZ
2e710 41 54 49 4f 4e 53 3a 0a 20 20 20 20 20 20 20 20  ATIONS:.        
2e720 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54  case SQLITE_TEST
2e730 43 54 52 4c 5f 52 45 53 45 52 56 45 3a 0a 20 20  CTRL_RESERVE:.  
2e740 20 20 20 20 20 20 20 20 69 66 28 20 6e 41 72 67          if( nArg
2e750 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==3 ){.         
2e760 20 20 20 69 6e 74 20 6f 70 74 20 3d 20 28 69 6e     int opt = (in
2e770 74 29 73 74 72 74 6f 6c 28 61 7a 41 72 67 5b 32  t)strtol(azArg[2
2e780 5d 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  ], 0, 0);.      
2e790 20 20 20 20 20 20 72 63 32 20 3d 20 73 71 6c 69        rc2 = sqli
2e7a0 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
2e7b0 28 74 65 73 74 63 74 72 6c 2c 20 70 2d 3e 64 62  (testctrl, p->db
2e7c0 2c 20 6f 70 74 29 3b 0a 20 20 20 20 20 20 20 20  , opt);.        
2e7d0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
2e7e0 2d 3e 6f 75 74 2c 20 22 25 64 20 28 30 78 25 30  ->out, "%d (0x%0
2e7f0 38 78 29 5c 6e 22 2c 20 72 63 32 2c 20 72 63 32  8x)\n", rc2, rc2
2e800 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  );.          } e
2e810 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  lse {.          
2e820 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
2e830 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 74 65 73  derr,"Error: tes
2e840 74 63 74 72 6c 20 25 73 20 74 61 6b 65 73 20 61  tctrl %s takes a
2e850 20 73 69 6e 67 6c 65 20 69 6e 74 20 6f 70 74 69   single int opti
2e860 6f 6e 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  on\n",.         
2e870 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67             azArg
2e880 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [1]);.          
2e890 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  }.          brea
2e8a0 6b 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 73  k;..        /* s
2e8b0 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
2e8c0 72 6f 6c 28 69 6e 74 29 20 2a 2f 0a 20 20 20 20  rol(int) */.    
2e8d0 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
2e8e0 54 45 53 54 43 54 52 4c 5f 50 52 4e 47 5f 53 41  TESTCTRL_PRNG_SA
2e8f0 56 45 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65  VE:.        case
2e900 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
2e910 5f 50 52 4e 47 5f 52 45 53 54 4f 52 45 3a 0a 20  _PRNG_RESTORE:. 
2e920 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49         case SQLI
2e930 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e 47  TE_TESTCTRL_PRNG
2e940 5f 52 45 53 45 54 3a 0a 20 20 20 20 20 20 20 20  _RESET:.        
2e950 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54  case SQLITE_TEST
2e960 43 54 52 4c 5f 42 59 54 45 4f 52 44 45 52 3a 0a  CTRL_BYTEORDER:.
2e970 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6e 41            if( nA
2e980 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 20  rg==2 ){.       
2e990 20 20 20 20 20 72 63 32 20 3d 20 73 71 6c 69 74       rc2 = sqlit
2e9a0 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
2e9b0 74 65 73 74 63 74 72 6c 29 3b 0a 20 20 20 20 20  testctrl);.     
2e9c0 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
2e9d0 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 28 30  f(p->out, "%d (0
2e9e0 78 25 30 38 78 29 5c 6e 22 2c 20 72 63 32 2c 20  x%08x)\n", rc2, 
2e9f0 72 63 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  rc2);.          
2ea00 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20  } else {.       
2ea10 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
2ea20 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20  (stderr,"Error: 
2ea30 74 65 73 74 63 74 72 6c 20 25 73 20 74 61 6b 65  testctrl %s take
2ea40 73 20 6e 6f 20 6f 70 74 69 6f 6e 73 5c 6e 22 2c  s no options\n",
2ea50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ea60 20 20 20 20 20 20 20 20 20 61 7a 41 72 67 5b 31           azArg[1
2ea70 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ]);.          }.
2ea80 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
2ea90 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c  ..        /* sql
2eaa0 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
2eab0 6c 28 69 6e 74 2c 20 75 69 6e 74 29 20 2a 2f 0a  l(int, uint) */.
2eac0 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
2ead0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 45 4e  ITE_TESTCTRL_PEN
2eae0 44 49 4e 47 5f 42 59 54 45 3a 0a 20 20 20 20 20  DING_BYTE:.     
2eaf0 20 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 33       if( nArg==3
2eb00 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
2eb10 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 74  unsigned int opt
2eb20 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 69 6e 74   = (unsigned int
2eb30 29 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a  )integerValue(az
2eb40 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[2]);.       
2eb50 20 20 20 20 20 72 63 32 20 3d 20 73 71 6c 69 74       rc2 = sqlit
2eb60 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
2eb70 74 65 73 74 63 74 72 6c 2c 20 6f 70 74 29 3b 0a  testctrl, opt);.
2eb80 20 20 20 20 20 20 20 20 20 20 20 20 72 61 77 5f              raw_
2eb90 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2eba0 25 64 20 28 30 78 25 30 38 78 29 5c 6e 22 2c 20  %d (0x%08x)\n", 
2ebb0 72 63 32 2c 20 72 63 32 29 3b 0a 20 20 20 20 20  rc2, rc2);.     
2ebc0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
2ebd0 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
2ebe0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72  rintf(stderr,"Er
2ebf0 72 6f 72 3a 20 74 65 73 74 63 74 72 6c 20 25 73  ror: testctrl %s
2ec00 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65 20   takes a single 
2ec10 75 6e 73 69 67 6e 65 64 22 0a 20 20 20 20 20 20  unsigned".      
2ec20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec30 20 20 20 20 20 22 20 69 6e 74 20 6f 70 74 69 6f       " int optio
2ec40 6e 5c 6e 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b  n\n", azArg[1]);
2ec50 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
2ec60 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20         break;.. 
2ec70 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65         /* sqlite
2ec80 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69  3_test_control(i
2ec90 6e 74 2c 20 69 6e 74 29 20 2a 2f 0a 20 20 20 20  nt, int) */.    
2eca0 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
2ecb0 54 45 53 54 43 54 52 4c 5f 41 53 53 45 52 54 3a  TESTCTRL_ASSERT:
2ecc0 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51  .        case SQ
2ecd0 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 41 4c  LITE_TESTCTRL_AL
2ece0 57 41 59 53 3a 0a 20 20 20 20 20 20 20 20 63 61  WAYS:.        ca
2ecf0 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  se SQLITE_TESTCT
2ed00 52 4c 5f 4e 45 56 45 52 5f 43 4f 52 52 55 50 54  RL_NEVER_CORRUPT
2ed10 3a 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  :.          if( 
2ed20 6e 41 72 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20  nArg==3 ){.     
2ed30 20 20 20 20 20 20 20 69 6e 74 20 6f 70 74 20 3d         int opt =
2ed40 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a   booleanValue(az
2ed50 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[2]);.       
2ed60 20 20 20 20 20 72 63 32 20 3d 20 73 71 6c 69 74       rc2 = sqlit
2ed70 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
2ed80 74 65 73 74 63 74 72 6c 2c 20 6f 70 74 29 3b 0a  testctrl, opt);.
2ed90 20 20 20 20 20 20 20 20 20 20 20 20 72 61 77 5f              raw_
2eda0 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2edb0 25 64 20 28 30 78 25 30 38 78 29 5c 6e 22 2c 20  %d (0x%08x)\n", 
2edc0 72 63 32 2c 20 72 63 32 29 3b 0a 20 20 20 20 20  rc2, rc2);.     
2edd0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
2ede0 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
2edf0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72  rintf(stderr,"Er
2ee00 72 6f 72 3a 20 74 65 73 74 63 74 72 6c 20 25 73  ror: testctrl %s
2ee10 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65 20   takes a single 
2ee20 69 6e 74 20 6f 70 74 69 6f 6e 5c 6e 22 2c 0a 20  int option\n",. 
2ee30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee40 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67             azArg
2ee50 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [1]);.          
2ee60 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  }.          brea
2ee70 6b 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 73  k;..        /* s
2ee80 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
2ee90 72 6f 6c 28 69 6e 74 2c 20 63 68 61 72 20 2a 29  rol(int, char *)
2eea0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
2eeb0 45 5f 4e 5f 4b 45 59 57 4f 52 44 0a 20 20 20 20  E_N_KEYWORD.    
2eec0 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
2eed0 54 45 53 54 43 54 52 4c 5f 49 53 4b 45 59 57 4f  TESTCTRL_ISKEYWO
2eee0 52 44 3a 0a 20 20 20 20 20 20 20 20 20 20 69 66  RD:.          if
2eef0 28 20 6e 41 72 67 3d 3d 33 20 29 7b 0a 20 20 20  ( nArg==3 ){.   
2ef00 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
2ef10 68 61 72 20 2a 6f 70 74 20 3d 20 61 7a 41 72 67  har *opt = azArg
2ef20 5b 32 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20  [2];.           
2ef30 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74   rc2 = sqlite3_t
2ef40 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74  est_control(test
2ef50 63 74 72 6c 2c 20 6f 70 74 29 3b 0a 20 20 20 20  ctrl, opt);.    
2ef60 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
2ef70 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 28  tf(p->out, "%d (
2ef80 30 78 25 30 38 78 29 5c 6e 22 2c 20 72 63 32 2c  0x%08x)\n", rc2,
2ef90 20 72 63 32 29 3b 0a 20 20 20 20 20 20 20 20 20   rc2);.         
2efa0 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
2efb0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
2efc0 66 28 73 74 64 65 72 72 2c 0a 20 20 20 20 20 20  f(stderr,.      
2efd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2efe0 20 20 22 45 72 72 6f 72 3a 20 74 65 73 74 63 74    "Error: testct
2eff0 72 6c 20 25 73 20 74 61 6b 65 73 20 61 20 73 69  rl %s takes a si
2f000 6e 67 6c 65 20 63 68 61 72 20 2a 20 6f 70 74 69  ngle char * opti
2f010 6f 6e 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  on\n",.         
2f020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
2f030 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20  zArg[1]);.      
2f040 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
2f050 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20  break;.#endif.. 
2f060 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49         case SQLI
2f070 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d 50 4f  TE_TESTCTRL_IMPO
2f080 53 54 45 52 3a 0a 20 20 20 20 20 20 20 20 20 20  STER:.          
2f090 69 66 28 20 6e 41 72 67 3d 3d 35 20 29 7b 0a 20  if( nArg==5 ){. 
2f0a0 20 20 20 20 20 20 20 20 20 20 20 72 63 32 20 3d             rc2 =
2f0b0 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
2f0c0 6e 74 72 6f 6c 28 74 65 73 74 63 74 72 6c 2c 20  ntrol(testctrl, 
2f0d0 70 2d 3e 64 62 2c 0a 20 20 20 20 20 20 20 20 20  p->db,.         
2f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0f0 20 61 7a 41 72 67 5b 32 5d 2c 0a 20 20 20 20 20   azArg[2],.     
2f100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f110 20 20 20 20 20 69 6e 74 65 67 65 72 56 61 6c 75       integerValu
2f120 65 28 61 7a 41 72 67 5b 33 5d 29 2c 0a 20 20 20  e(azArg[3]),.   
2f130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f140 20 20 20 20 20 20 20 69 6e 74 65 67 65 72 56 61         integerVa
2f150 6c 75 65 28 61 7a 41 72 67 5b 34 5d 29 29 3b 0a  lue(azArg[4]));.
2f160 20 20 20 20 20 20 20 20 20 20 20 20 72 61 77 5f              raw_
2f170 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2f180 25 64 20 28 30 78 25 30 38 78 29 5c 6e 22 2c 20  %d (0x%08x)\n", 
2f190 72 63 32 2c 20 72 63 32 29 3b 0a 20 20 20 20 20  rc2, rc2);.     
2f1a0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
2f1b0 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
2f1c0 74 66 28 73 74 64 65 72 72 2c 22 55 73 61 67 65  tf(stderr,"Usage
2f1d0 3a 20 2e 74 65 73 74 63 74 72 6c 20 69 6d 70 6f  : .testctrl impo
2f1e0 73 74 65 72 20 64 62 4e 61 6d 65 20 6f 6e 6f 66  ster dbName onof
2f1f0 66 20 74 6e 75 6d 5c 6e 22 29 3b 0a 20 20 20 20  f tnum\n");.    
2f200 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2f210 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20    break;..      
2f220 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45    case SQLITE_TE
2f230 53 54 43 54 52 4c 5f 42 49 54 56 45 43 5f 54 45  STCTRL_BITVEC_TE
2f240 53 54 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65  ST:.        case
2f250 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
2f260 5f 46 41 55 4c 54 5f 49 4e 53 54 41 4c 4c 3a 0a  _FAULT_INSTALL:.
2f270 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
2f280 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 42 45 4e  ITE_TESTCTRL_BEN
2f290 49 47 4e 5f 4d 41 4c 4c 4f 43 5f 48 4f 4f 4b 53  IGN_MALLOC_HOOKS
2f2a0 3a 0a 20 20 20 20 20 20 20 20 64 65 66 61 75 6c  :.        defaul
2f2b0 74 3a 0a 20 20 20 20 20 20 20 20 20 20 75 74 66  t:.          utf
2f2c0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
2f2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f2e0 20 20 20 20 20 20 20 22 45 72 72 6f 72 3a 20 43         "Error: C
2f2f0 4c 49 20 73 75 70 70 6f 72 74 20 66 6f 72 20 74  LI support for t
2f300 65 73 74 63 74 72 6c 20 25 73 20 6e 6f 74 20 69  estctrl %s not i
2f310 6d 70 6c 65 6d 65 6e 74 65 64 5c 6e 22 2c 0a 20  mplemented\n",. 
2f320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f330 20 20 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b 0a       azArg[1]);.
2f340 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
2f350 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
2f360 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a   }else.#endif /*
2f370 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2f380 5f 55 4e 54 45 53 54 41 42 4c 45 29 20 2a 2f 0a  _UNTESTABLE) */.
2f390 0a 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26  .  if( c=='t' &&
2f3a0 20 6e 3e 34 20 26 26 20 73 74 72 6e 63 6d 70 28   n>4 && strncmp(
2f3b0 61 7a 41 72 67 5b 30 5d 2c 20 22 74 69 6d 65 6f  azArg[0], "timeo
2f3c0 75 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  ut", n)==0 ){.  
2f3d0 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
2f3e0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73  .    sqlite3_bus
2f3f0 79 5f 74 69 6d 65 6f 75 74 28 70 2d 3e 64 62 2c  y_timeout(p->db,
2f400 20 6e 41 72 67 3e 3d 32 20 3f 20 28 69 6e 74 29   nArg>=2 ? (int)
2f410 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41  integerValue(azA
2f420 72 67 5b 31 5d 29 20 3a 20 30 29 3b 0a 20 20 7d  rg[1]) : 0);.  }
2f430 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
2f440 74 27 20 26 26 20 6e 3e 3d 35 20 26 26 20 73 74  t' && n>=5 && st
2f450 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
2f460 22 74 69 6d 65 72 22 2c 20 6e 29 3d 3d 30 20 29  "timer", n)==0 )
2f470 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d  {.    if( nArg==
2f480 32 20 29 7b 0a 20 20 20 20 20 20 65 6e 61 62 6c  2 ){.      enabl
2f490 65 54 69 6d 65 72 20 3d 20 62 6f 6f 6c 65 61 6e  eTimer = boolean
2f4a0 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b  Value(azArg[1]);
2f4b0 0a 20 20 20 20 20 20 69 66 28 20 65 6e 61 62 6c  .      if( enabl
2f4c0 65 54 69 6d 65 72 20 26 26 20 21 48 41 53 5f 54  eTimer && !HAS_T
2f4d0 49 4d 45 52 20 29 7b 0a 20 20 20 20 20 20 20 20  IMER ){.        
2f4e0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
2f4f0 72 2c 20 22 45 72 72 6f 72 3a 20 74 69 6d 65 72  r, "Error: timer
2f500 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f   not available o
2f510 6e 20 74 68 69 73 20 73 79 73 74 65 6d 2e 5c 6e  n this system.\n
2f520 22 29 3b 0a 20 20 20 20 20 20 20 20 65 6e 61 62  ");.        enab
2f530 6c 65 54 69 6d 65 72 20 3d 20 30 3b 0a 20 20 20  leTimer = 0;.   
2f540 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
2f550 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
2f560 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
2f570 20 2e 74 69 6d 65 72 20 6f 6e 7c 6f 66 66 5c 6e   .timer on|off\n
2f580 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
2f590 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
2f5a0 0a 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26  .  if( c=='t' &&
2f5b0 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
2f5c0 5d 2c 20 22 74 72 61 63 65 22 2c 20 6e 29 3d 3d  ], "trace", n)==
2f5d0 30 20 29 7b 0a 20 20 20 20 6f 70 65 6e 5f 64 62  0 ){.    open_db
2f5e0 28 70 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20  (p, 0);.    if( 
2f5f0 6e 41 72 67 21 3d 32 20 29 7b 0a 20 20 20 20 20  nArg!=2 ){.     
2f600 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
2f610 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 74 72 61  rr, "Usage: .tra
2f620 63 65 20 46 49 4c 45 7c 6f 66 66 5c 6e 22 29 3b  ce FILE|off\n");
2f630 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
2f640 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
2f650 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
2f660 20 7d 0a 20 20 20 20 6f 75 74 70 75 74 5f 66 69   }.    output_fi
2f670 6c 65 5f 63 6c 6f 73 65 28 70 2d 3e 74 72 61 63  le_close(p->trac
2f680 65 4f 75 74 29 3b 0a 20 20 20 20 70 2d 3e 74 72  eOut);.    p->tr
2f690 61 63 65 4f 75 74 20 3d 20 6f 75 74 70 75 74 5f  aceOut = output_
2f6a0 66 69 6c 65 5f 6f 70 65 6e 28 61 7a 41 72 67 5b  file_open(azArg[
2f6b0 31 5d 29 3b 0a 23 69 66 20 21 64 65 66 69 6e 65  1]);.#if !define
2f6c0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
2f6d0 41 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64  ACE) && !defined
2f6e0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f  (SQLITE_OMIT_FLO
2f6f0 41 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 20 20 20  ATING_POINT).   
2f700 20 69 66 28 20 70 2d 3e 74 72 61 63 65 4f 75 74   if( p->traceOut
2f710 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
2f720 69 74 65 33 5f 74 72 61 63 65 5f 76 32 28 70 2d  ite3_trace_v2(p-
2f730 3e 64 62 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20  >db, 0, 0, 0);. 
2f740 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2f750 73 71 6c 69 74 65 33 5f 74 72 61 63 65 5f 76 32  sqlite3_trace_v2
2f760 28 70 2d 3e 64 62 2c 20 53 51 4c 49 54 45 5f 54  (p->db, SQLITE_T
2f770 52 41 43 45 5f 53 54 4d 54 2c 20 73 71 6c 5f 74  RACE_STMT, sql_t
2f780 72 61 63 65 5f 63 61 6c 6c 62 61 63 6b 2c 70 2d  race_callback,p-
2f790 3e 74 72 61 63 65 4f 75 74 29 3b 0a 20 20 20 20  >traceOut);.    
2f7a0 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65  }.#endif.  }else
2f7b0 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 55 53 45  ..#if SQLITE_USE
2f7c0 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
2f7d0 0a 20 20 69 66 28 20 63 3d 3d 27 75 27 20 26 26  .  if( c=='u' &&
2f7e0 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
2f7f0 5d 2c 20 22 75 73 65 72 22 2c 20 6e 29 3d 3d 30  ], "user", n)==0
2f800 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   ){.    if( nArg
2f810 3c 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  <2 ){.      raw_
2f820 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2f830 55 73 61 67 65 3a 20 2e 75 73 65 72 20 53 55 42  Usage: .user SUB
2f840 43 4f 4d 4d 41 4e 44 20 2e 2e 2e 5c 6e 22 29 3b  COMMAND ...\n");
2f850 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
2f860 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
2f870 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
2f880 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70   }.    open_db(p
2f890 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 73 74  , 0);.    if( st
2f8a0 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 6c  rcmp(azArg[1],"l
2f8b0 6f 67 69 6e 22 29 3d 3d 30 20 29 7b 0a 20 20 20  ogin")==0 ){.   
2f8c0 20 20 20 69 66 28 20 6e 41 72 67 21 3d 34 20 29     if( nArg!=4 )
2f8d0 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
2f8e0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
2f8f0 61 67 65 3a 20 2e 75 73 65 72 20 6c 6f 67 69 6e  age: .user login
2f900 20 55 53 45 52 20 50 41 53 53 57 4f 52 44 5c 6e   USER PASSWORD\n
2f910 22 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  ");.        rc =
2f920 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   1;.        goto
2f930 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
2f940 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  it;.      }.    
2f950 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 75    rc = sqlite3_u
2f960 73 65 72 5f 61 75 74 68 65 6e 74 69 63 61 74 65  ser_authenticate
2f970 28 70 2d 3e 64 62 2c 20 61 7a 41 72 67 5b 32 5d  (p->db, azArg[2]
2f980 2c 20 61 7a 41 72 67 5b 33 5d 2c 0a 20 20 20 20  , azArg[3],.    
2f990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9b0 28 69 6e 74 29 73 74 72 6c 65 6e 28 61 7a 41 72  (int)strlen(azAr
2f9c0 67 5b 33 5d 29 29 3b 0a 20 20 20 20 20 20 69 66  g[3]));.      if
2f9d0 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20  ( rc ){.        
2f9e0 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
2f9f0 72 72 2c 20 22 41 75 74 68 65 6e 74 69 63 61 74  rr, "Authenticat
2fa00 69 6f 6e 20 66 61 69 6c 65 64 20 66 6f 72 20 75  ion failed for u
2fa10 73 65 72 20 25 73 5c 6e 22 2c 20 61 7a 41 72 67  ser %s\n", azArg
2fa20 5b 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 72 63  [2]);.        rc
2fa30 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 1;.      }.  
2fa40 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
2fa50 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 61 64 64  mp(azArg[1],"add
2fa60 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  ")==0 ){.      i
2fa70 66 28 20 6e 41 72 67 21 3d 35 20 29 7b 0a 20 20  f( nArg!=5 ){.  
2fa80 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
2fa90 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
2faa0 20 2e 75 73 65 72 20 61 64 64 20 55 53 45 52 20   .user add USER 
2fab0 50 41 53 53 57 4f 52 44 20 49 53 41 44 4d 49 4e  PASSWORD ISADMIN
2fac0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 72 63  \n");.        rc
2fad0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f   = 1;.        go
2fae0 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
2faf0 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  exit;.      }.  
2fb00 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2fb10 5f 75 73 65 72 5f 61 64 64 28 70 2d 3e 64 62 2c  _user_add(p->db,
2fb20 20 61 7a 41 72 67 5b 32 5d 2c 0a 20 20 20 20 20   azArg[2],.     
2fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb40 20 20 20 20 20 20 20 61 7a 41 72 67 5b 33 5d 2c         azArg[3],
2fb50 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 61 7a 41   (int)strlen(azA
2fb60 72 67 5b 33 5d 29 2c 0a 20 20 20 20 20 20 20 20  rg[3]),.        
2fb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb80 20 20 20 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65      booleanValue
2fb90 28 61 7a 41 72 67 5b 34 5d 29 29 3b 0a 20 20 20  (azArg[4]));.   
2fba0 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
2fbb0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
2fbc0 73 74 64 65 72 72 2c 20 22 55 73 65 72 2d 41 64  stderr, "User-Ad
2fbd0 64 20 66 61 69 6c 65 64 3a 20 25 64 5c 6e 22 2c  d failed: %d\n",
2fbe0 20 72 63 29 3b 0a 20 20 20 20 20 20 20 20 72 63   rc);.        rc
2fbf0 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 1;.      }.  
2fc00 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
2fc10 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 65 64 69  mp(azArg[1],"edi
2fc20 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  t")==0 ){.      
2fc30 69 66 28 20 6e 41 72 67 21 3d 35 20 29 7b 0a 20  if( nArg!=5 ){. 
2fc40 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
2fc50 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
2fc60 3a 20 2e 75 73 65 72 20 65 64 69 74 20 55 53 45  : .user edit USE
2fc70 52 20 50 41 53 53 57 4f 52 44 20 49 53 41 44 4d  R PASSWORD ISADM
2fc80 49 4e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  IN\n");.        
2fc90 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  rc = 1;.        
2fca0 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
2fcb0 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a  d_exit;.      }.
2fcc0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2fcd0 65 33 5f 75 73 65 72 5f 63 68 61 6e 67 65 28 70  e3_user_change(p
2fce0 2d 3e 64 62 2c 20 61 7a 41 72 67 5b 32 5d 2c 0a  ->db, azArg[2],.
2fcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a                az
2fd10 41 72 67 5b 33 5d 2c 20 28 69 6e 74 29 73 74 72  Arg[3], (int)str
2fd20 6c 65 6e 28 61 7a 41 72 67 5b 33 5d 29 2c 0a 20  len(azArg[3]),. 
2fd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd40 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
2fd50 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b  leanValue(azArg[
2fd60 34 5d 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  4]));.      if( 
2fd70 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  rc ){.        ra
2fd80 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
2fd90 20 22 55 73 65 72 2d 45 64 69 74 20 66 61 69 6c   "User-Edit fail
2fda0 65 64 3a 20 25 64 5c 6e 22 2c 20 72 63 29 3b 0a  ed: %d\n", rc);.
2fdb0 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
2fdc0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
2fdd0 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 41  e if( strcmp(azA
2fde0 72 67 5b 31 5d 2c 22 64 65 6c 65 74 65 22 29 3d  rg[1],"delete")=
2fdf0 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  =0 ){.      if( 
2fe00 6e 41 72 67 21 3d 33 20 29 7b 0a 20 20 20 20 20  nArg!=3 ){.     
2fe10 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
2fe20 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 75  derr, "Usage: .u
2fe30 73 65 72 20 64 65 6c 65 74 65 20 55 53 45 52 5c  ser delete USER\
2fe40 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  n");.        rc 
2fe50 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  = 1;.        got
2fe60 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
2fe70 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  xit;.      }.   
2fe80 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
2fe90 75 73 65 72 5f 64 65 6c 65 74 65 28 70 2d 3e 64  user_delete(p->d
2fea0 62 2c 20 61 7a 41 72 67 5b 32 5d 29 3b 0a 20 20  b, azArg[2]);.  
2feb0 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
2fec0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
2fed0 28 73 74 64 65 72 72 2c 20 22 55 73 65 72 2d 44  (stderr, "User-D
2fee0 65 6c 65 74 65 20 66 61 69 6c 65 64 3a 20 25 64  elete failed: %d
2fef0 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20 20  \n", rc);.      
2ff00 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
2ff10 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
2ff20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
2ff30 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 75  derr, "Usage: .u
2ff40 73 65 72 20 6c 6f 67 69 6e 7c 61 64 64 7c 65 64  ser login|add|ed
2ff50 69 74 7c 64 65 6c 65 74 65 20 2e 2e 2e 5c 6e 22  it|delete ...\n"
2ff60 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
2ff70 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61  .      goto meta
2ff80 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
2ff90 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e     }.  }else.#en
2ffa0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53  dif /* SQLITE_US
2ffb0 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
2ffc0 4e 20 2a 2f 0a 0a 20 20 69 66 28 20 63 3d 3d 27  N */..  if( c=='
2ffd0 76 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  v' && strncmp(az
2ffe0 41 72 67 5b 30 5d 2c 20 22 76 65 72 73 69 6f 6e  Arg[0], "version
2fff0 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
30000 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
30010 75 74 2c 20 22 53 51 4c 69 74 65 20 25 73 20 25  ut, "SQLite %s %
30020 73 5c 6e 22 20 2f 2a 65 78 74 72 61 2d 76 65 72  s\n" /*extra-ver
30030 73 69 6f 6e 2d 69 6e 66 6f 2a 2f 2c 0a 20 20 20  sion-info*/,.   
30040 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 62       sqlite3_lib
30050 76 65 72 73 69 6f 6e 28 29 2c 20 73 71 6c 69 74  version(), sqlit
30060 65 33 5f 73 6f 75 72 63 65 69 64 28 29 29 3b 0a  e3_sourceid());.
30070 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
30080 3d 3d 27 76 27 20 26 26 20 73 74 72 6e 63 6d 70  =='v' && strncmp
30090 28 61 7a 41 72 67 5b 30 5d 2c 20 22 76 66 73 69  (azArg[0], "vfsi
300a0 6e 66 6f 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  nfo", n)==0 ){. 
300b0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
300c0 44 62 4e 61 6d 65 20 3d 20 6e 41 72 67 3d 3d 32  DbName = nArg==2
300d0 20 3f 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 6d   ? azArg[1] : "m
300e0 61 69 6e 22 3b 0a 20 20 20 20 73 71 6c 69 74 65  ain";.    sqlite
300f0 33 5f 76 66 73 20 2a 70 56 66 73 20 3d 20 30 3b  3_vfs *pVfs = 0;
30100 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 20 29  .    if( p->db )
30110 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
30120 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 70 2d 3e  file_control(p->
30130 64 62 2c 20 7a 44 62 4e 61 6d 65 2c 20 53 51 4c  db, zDbName, SQL
30140 49 54 45 5f 46 43 4e 54 4c 5f 56 46 53 5f 50 4f  ITE_FCNTL_VFS_PO
30150 49 4e 54 45 52 2c 20 26 70 56 66 73 29 3b 0a 20  INTER, &pVfs);. 
30160 20 20 20 20 20 69 66 28 20 70 56 66 73 20 29 7b       if( pVfs ){
30170 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
30180 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76 66  intf(p->out, "vf
30190 73 2e 7a 4e 61 6d 65 20 20 20 20 20 20 3d 20 5c  s.zName      = \
301a0 22 25 73 5c 22 5c 6e 22 2c 20 70 56 66 73 2d 3e  "%s\"\n", pVfs->
301b0 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20  zName);.        
301c0 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
301d0 74 2c 20 22 76 66 73 2e 69 56 65 72 73 69 6f 6e  t, "vfs.iVersion
301e0 20 20 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73     = %d\n", pVfs
301f0 2d 3e 69 56 65 72 73 69 6f 6e 29 3b 0a 20 20 20  ->iVersion);.   
30200 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
30210 70 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 73 7a 4f  p->out, "vfs.szO
30220 73 46 69 6c 65 20 20 20 3d 20 25 64 5c 6e 22 2c  sFile   = %d\n",
30230 20 70 56 66 73 2d 3e 73 7a 4f 73 46 69 6c 65 29   pVfs->szOsFile)
30240 3b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  ;.        raw_pr
30250 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76 66  intf(p->out, "vf
30260 73 2e 6d 78 50 61 74 68 6e 61 6d 65 20 3d 20 25  s.mxPathname = %
30270 64 5c 6e 22 2c 20 70 56 66 73 2d 3e 6d 78 50 61  d\n", pVfs->mxPa
30280 74 68 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d  thname);.      }
30290 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
302a0 20 20 69 66 28 20 63 3d 3d 27 76 27 20 26 26 20    if( c=='v' && 
302b0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
302c0 2c 20 22 76 66 73 6c 69 73 74 22 2c 20 6e 29 3d  , "vfslist", n)=
302d0 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
302e0 33 5f 76 66 73 20 2a 70 56 66 73 3b 0a 20 20 20  3_vfs *pVfs;.   
302f0 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 43   sqlite3_vfs *pC
30300 75 72 72 65 6e 74 20 3d 20 30 3b 0a 20 20 20 20  urrent = 0;.    
30310 69 66 28 20 70 2d 3e 64 62 20 29 7b 0a 20 20 20  if( p->db ){.   
30320 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f     sqlite3_file_
30330 63 6f 6e 74 72 6f 6c 28 70 2d 3e 64 62 2c 20 22  control(p->db, "
30340 6d 61 69 6e 22 2c 20 53 51 4c 49 54 45 5f 46 43  main", SQLITE_FC
30350 4e 54 4c 5f 56 46 53 5f 50 4f 49 4e 54 45 52 2c  NTL_VFS_POINTER,
30360 20 26 70 43 75 72 72 65 6e 74 29 3b 0a 20 20 20   &pCurrent);.   
30370 20 7d 0a 20 20 20 20 66 6f 72 28 70 56 66 73 3d   }.    for(pVfs=
30380 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64  sqlite3_vfs_find
30390 28 30 29 3b 20 70 56 66 73 3b 20 70 56 66 73 3d  (0); pVfs; pVfs=
303a0 70 56 66 73 2d 3e 70 4e 65 78 74 29 7b 0a 20 20  pVfs->pNext){.  
303b0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
303c0 70 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 7a 4e 61  p->out, "vfs.zNa
303d0 6d 65 20 20 20 20 20 20 3d 20 5c 22 25 73 5c 22  me      = \"%s\"
303e0 25 73 5c 6e 22 2c 20 70 56 66 73 2d 3e 7a 4e 61  %s\n", pVfs->zNa
303f0 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70  me,.           p
30400 56 66 73 3d 3d 70 43 75 72 72 65 6e 74 20 3f 20  Vfs==pCurrent ? 
30410 22 20 20 3c 2d 2d 2d 20 43 55 52 52 45 4e 54 22  "  <--- CURRENT"
30420 20 3a 20 22 22 29 3b 0a 20 20 20 20 20 20 72 61   : "");.      ra
30430 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
30440 20 22 76 66 73 2e 69 56 65 72 73 69 6f 6e 20 20   "vfs.iVersion  
30450 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73 2d 3e   = %d\n", pVfs->
30460 69 56 65 72 73 69 6f 6e 29 3b 0a 20 20 20 20 20  iVersion);.     
30470 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
30480 75 74 2c 20 22 76 66 73 2e 73 7a 4f 73 46 69 6c  ut, "vfs.szOsFil
30490 65 20 20 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66  e   = %d\n", pVf
304a0 73 2d 3e 73 7a 4f 73 46 69 6c 65 29 3b 0a 20 20  s->szOsFile);.  
304b0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
304c0 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 6d 78 50 61  ->out, "vfs.mxPa
304d0 74 68 6e 61 6d 65 20 3d 20 25 64 5c 6e 22 2c 20  thname = %d\n", 
304e0 70 56 66 73 2d 3e 6d 78 50 61 74 68 6e 61 6d 65  pVfs->mxPathname
304f0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 56 66  );.      if( pVf
30500 73 2d 3e 70 4e 65 78 74 20 29 7b 0a 20 20 20 20  s->pNext ){.    
30510 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
30520 2d 3e 6f 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d  ->out, "--------
30530 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30540 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 29 3b  -----------\n");
30550 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
30560 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
30570 3d 27 76 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='v' && strncmp(
30580 61 7a 41 72 67 5b 30 5d 2c 20 22 76 66 73 6e 61  azArg[0], "vfsna
30590 6d 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  me", n)==0 ){.  
305a0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
305b0 62 4e 61 6d 65 20 3d 20 6e 41 72 67 3d 3d 32 20  bName = nArg==2 
305c0 3f 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 6d 61  ? azArg[1] : "ma
305d0 69 6e 22 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a  in";.    char *z
305e0 56 66 73 4e 61 6d 65 20 3d 20 30 3b 0a 20 20 20  VfsName = 0;.   
305f0 20 69 66 28 20 70 2d 3e 64 62 20 29 7b 0a 20 20   if( p->db ){.  
30600 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65      sqlite3_file
30610 5f 63 6f 6e 74 72 6f 6c 28 70 2d 3e 64 62 2c 20  _control(p->db, 
30620 7a 44 62 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f  zDbName, SQLITE_
30630 46 43 4e 54 4c 5f 56 46 53 4e 41 4d 45 2c 20 26  FCNTL_VFSNAME, &
30640 7a 56 66 73 4e 61 6d 65 29 3b 0a 20 20 20 20 20  zVfsName);.     
30650 20 69 66 28 20 7a 56 66 73 4e 61 6d 65 20 29 7b   if( zVfsName ){
30660 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
30670 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
30680 5c 6e 22 2c 20 7a 56 66 73 4e 61 6d 65 29 3b 0a  \n", zVfsName);.
30690 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
306a0 66 72 65 65 28 7a 56 66 73 4e 61 6d 65 29 3b 0a  free(zVfsName);.
306b0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
306c0 7d 65 6c 73 65 0a 0a 23 69 66 20 64 65 66 69 6e  }else..#if defin
306d0 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
306e0 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
306f0 54 45 5f 45 4e 41 42 4c 45 5f 57 48 45 52 45 54  TE_ENABLE_WHERET
30700 52 41 43 45 29 0a 20 20 69 66 28 20 63 3d 3d 27  RACE).  if( c=='
30710 77 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  w' && strncmp(az
30720 41 72 67 5b 30 5d 2c 20 22 77 68 65 72 65 74 72  Arg[0], "wheretr
30730 61 63 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ace", n)==0 ){. 
30740 20 20 20 73 71 6c 69 74 65 33 57 68 65 72 65 54     sqlite3WhereT
30750 72 61 63 65 20 3d 20 6e 41 72 67 3e 3d 32 20 3f  race = nArg>=2 ?
30760 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a   booleanValue(az
30770 41 72 67 5b 31 5d 29 20 3a 20 30 78 66 66 3b 0a  Arg[1]) : 0xff;.
30780 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a    }else.#endif..
30790 20 20 69 66 28 20 63 3d 3d 27 77 27 20 26 26 20    if( c=='w' && 
307a0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
307b0 2c 20 22 77 69 64 74 68 22 2c 20 6e 29 3d 3d 30  , "width", n)==0
307c0 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a 3b 0a 20   ){.    int j;. 
307d0 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67 3c     assert( nArg<
307e0 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 41 72 67  =ArraySize(azArg
307f0 29 20 29 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 31  ) );.    for(j=1
30800 3b 20 6a 3c 6e 41 72 67 20 26 26 20 6a 3c 41 72  ; j<nArg && j<Ar
30810 72 61 79 53 69 7a 65 28 70 2d 3e 63 6f 6c 57 69  raySize(p->colWi
30820 64 74 68 29 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  dth); j++){.    
30830 20 20 70 2d 3e 63 6f 6c 57 69 64 74 68 5b 6a 2d    p->colWidth[j-
30840 31 5d 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65  1] = (int)intege
30850 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 6a 5d 29  rValue(azArg[j])
30860 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
30870 0a 20 20 7b 0a 20 20 20 20 75 74 66 38 5f 70 72  .  {.    utf8_pr
30880 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
30890 72 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6d  ror: unknown com
308a0 6d 61 6e 64 20 6f 72 20 69 6e 76 61 6c 69 64 20  mand or invalid 
308b0 61 72 67 75 6d 65 6e 74 73 3a 20 22 0a 20 20 20  arguments: ".   
308c0 20 20 20 22 20 5c 22 25 73 5c 22 2e 20 45 6e 74     " \"%s\". Ent
308d0 65 72 20 5c 22 2e 68 65 6c 70 5c 22 20 66 6f 72  er \".help\" for
308e0 20 68 65 6c 70 5c 6e 22 2c 20 61 7a 41 72 67 5b   help\n", azArg[
308f0 30 5d 29 3b 0a 20 20 20 20 72 63 20 3d 20 31 3b  0]);.    rc = 1;
30900 0a 20 20 7d 0a 0a 6d 65 74 61 5f 63 6f 6d 6d 61  .  }..meta_comma
30910 6e 64 5f 65 78 69 74 3a 0a 20 20 69 66 28 20 70  nd_exit:.  if( p
30920 2d 3e 6f 75 74 43 6f 75 6e 74 20 29 7b 0a 20 20  ->outCount ){.  
30930 20 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 2d 2d 3b    p->outCount--;
30940 0a 20 20 20 20 69 66 28 20 70 2d 3e 6f 75 74 43  .    if( p->outC
30950 6f 75 6e 74 3d 3d 30 20 29 20 6f 75 74 70 75 74  ount==0 ) output
30960 5f 72 65 73 65 74 28 70 29 3b 0a 20 20 7d 0a 20  _reset(p);.  }. 
30970 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
30980 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52 55 45  *.** Return TRUE
30990 20 69 66 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 20   if a semicolon 
309a0 6f 63 63 75 72 73 20 61 6e 79 77 68 65 72 65 20  occurs anywhere 
309b0 69 6e 20 74 68 65 20 66 69 72 73 74 20 4e 20 63  in the first N c
309c0 68 61 72 61 63 74 65 72 73 0a 2a 2a 20 6f 66 20  haracters.** of 
309d0 73 74 72 69 6e 67 20 7a 5b 5d 2e 0a 2a 2f 0a 73  string z[]..*/.s
309e0 74 61 74 69 63 20 69 6e 74 20 6c 69 6e 65 5f 63  tatic int line_c
309f0 6f 6e 74 61 69 6e 73 5f 73 65 6d 69 63 6f 6c 6f  ontains_semicolo
30a00 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  n(const char *z,
30a10 20 69 6e 74 20 4e 29 7b 0a 20 20 69 6e 74 20 69   int N){.  int i
30a20 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e  ;.  for(i=0; i<N
30a30 3b 20 69 2b 2b 29 7b 20 20 69 66 28 20 7a 5b 69  ; i++){  if( z[i
30a40 5d 3d 3d 27 3b 27 20 29 20 72 65 74 75 72 6e 20  ]==';' ) return 
30a50 31 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  1; }.  return 0;
30a60 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74  .}../*.** Test t
30a70 6f 20 73 65 65 20 69 66 20 61 20 6c 69 6e 65 20  o see if a line 
30a80 63 6f 6e 73 69 73 74 73 20 65 6e 74 69 72 65 6c  consists entirel
30a90 79 20 6f 66 20 77 68 69 74 65 73 70 61 63 65 2e  y of whitespace.
30aa0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 5f  .*/.static int _
30ab0 61 6c 6c 5f 77 68 69 74 65 73 70 61 63 65 28 63  all_whitespace(c
30ac0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20  onst char *z){. 
30ad0 20 66 6f 72 28 3b 20 2a 7a 3b 20 7a 2b 2b 29 7b   for(; *z; z++){
30ae0 0a 20 20 20 20 69 66 28 20 49 73 53 70 61 63 65  .    if( IsSpace
30af0 28 7a 5b 30 5d 29 20 29 20 63 6f 6e 74 69 6e 75  (z[0]) ) continu
30b00 65 3b 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27  e;.    if( *z=='
30b10 2f 27 20 26 26 20 7a 5b 31 5d 3d 3d 27 2a 27 20  /' && z[1]=='*' 
30b20 29 7b 0a 20 20 20 20 20 20 7a 20 2b 3d 20 32 3b  ){.      z += 2;
30b30 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 2a 7a  .      while( *z
30b40 20 26 26 20 28 2a 7a 21 3d 27 2a 27 20 7c 7c 20   && (*z!='*' || 
30b50 7a 5b 31 5d 21 3d 27 2f 27 29 20 29 7b 20 7a 2b  z[1]!='/') ){ z+
30b60 2b 3b 20 7d 0a 20 20 20 20 20 20 69 66 28 20 2a  +; }.      if( *
30b70 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  z==0 ) return 0;
30b80 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20  .      z++;.    
30b90 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20    continue;.    
30ba0 7d 0a 20 20 20 20 69 66 28 20 2a 7a 3d 3d 27 2d  }.    if( *z=='-
30bb0 27 20 26 26 20 7a 5b 31 5d 3d 3d 27 2d 27 20 29  ' && z[1]=='-' )
30bc0 7b 0a 20 20 20 20 20 20 7a 20 2b 3d 20 32 3b 0a  {.      z += 2;.
30bd0 20 20 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 20        while( *z 
30be0 26 26 20 2a 7a 21 3d 27 5c 6e 27 20 29 7b 20 7a  && *z!='\n' ){ z
30bf0 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 69 66 28 20  ++; }.      if( 
30c00 2a 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31  *z==0 ) return 1
30c10 3b 0a 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65  ;.      continue
30c20 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
30c30 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75  rn 0;.  }.  retu
30c40 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  rn 1;.}../*.** R
30c50 65 74 75 72 6e 20 54 52 55 45 20 69 66 20 74 68  eturn TRUE if th
30c60 65 20 6c 69 6e 65 20 74 79 70 65 64 20 69 6e 20  e line typed in 
30c70 69 73 20 61 6e 20 53 51 4c 20 63 6f 6d 6d 61 6e  is an SQL comman
30c80 64 20 74 65 72 6d 69 6e 61 74 6f 72 20 6f 74 68  d terminator oth
30c90 65 72 0a 2a 2a 20 74 68 61 6e 20 61 20 73 65 6d  er.** than a sem
30ca0 69 2d 63 6f 6c 6f 6e 2e 20 20 54 68 65 20 53 51  i-colon.  The SQ
30cb0 4c 20 53 65 72 76 65 72 20 73 74 79 6c 65 20 22  L Server style "
30cc0 67 6f 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75  go" command is u
30cd0 6e 64 65 72 73 74 6f 6f 64 0a 2a 2a 20 61 73 20  nderstood.** as 
30ce0 69 73 20 74 68 65 20 4f 72 61 63 6c 65 20 22 2f  is the Oracle "/
30cf0 22 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  "..*/.static int
30d00 20 6c 69 6e 65 5f 69 73 5f 63 6f 6d 6d 61 6e 64   line_is_command
30d10 5f 74 65 72 6d 69 6e 61 74 6f 72 28 63 6f 6e 73  _terminator(cons
30d20 74 20 63 68 61 72 20 2a 7a 4c 69 6e 65 29 7b 0a  t char *zLine){.
30d30 20 20 77 68 69 6c 65 28 20 49 73 53 70 61 63 65    while( IsSpace
30d40 28 7a 4c 69 6e 65 5b 30 5d 29 20 29 7b 20 7a 4c  (zLine[0]) ){ zL
30d50 69 6e 65 2b 2b 3b 20 7d 3b 0a 20 20 69 66 28 20  ine++; };.  if( 
30d60 7a 4c 69 6e 65 5b 30 5d 3d 3d 27 2f 27 20 26 26  zLine[0]=='/' &&
30d70 20 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61 63 65   _all_whitespace
30d80 28 26 7a 4c 69 6e 65 5b 31 5d 29 20 29 7b 0a 20  (&zLine[1]) ){. 
30d90 20 20 20 72 65 74 75 72 6e 20 31 3b 20 20 2f 2a     return 1;  /*
30da0 20 4f 72 61 63 6c 65 20 2a 2f 0a 20 20 7d 0a 20   Oracle */.  }. 
30db0 20 69 66 28 20 54 6f 4c 6f 77 65 72 28 7a 4c 69   if( ToLower(zLi
30dc0 6e 65 5b 30 5d 29 3d 3d 27 67 27 20 26 26 20 54  ne[0])=='g' && T
30dd0 6f 4c 6f 77 65 72 28 7a 4c 69 6e 65 5b 31 5d 29  oLower(zLine[1])
30de0 3d 3d 27 6f 27 0a 20 20 20 20 20 20 20 20 20 26  =='o'.         &
30df0 26 20 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61 63  & _all_whitespac
30e00 65 28 26 7a 4c 69 6e 65 5b 32 5d 29 20 29 7b 0a  e(&zLine[2]) ){.
30e10 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 20 2f      return 1;  /
30e20 2a 20 53 51 4c 20 53 65 72 76 65 72 20 2a 2f 0a  * SQL Server */.
30e30 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
30e40 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
30e50 74 72 75 65 20 69 66 20 7a 53 71 6c 20 69 73 20  true if zSql is 
30e60 61 20 63 6f 6d 70 6c 65 74 65 20 53 51 4c 20 73  a complete SQL s
30e70 74 61 74 65 6d 65 6e 74 2e 20 20 52 65 74 75 72  tatement.  Retur
30e80 6e 20 66 61 6c 73 65 20 69 66 20 69 74 0a 2a 2a  n false if it.**
30e90 20 65 6e 64 73 20 69 6e 20 74 68 65 20 6d 69 64   ends in the mid
30ea0 64 6c 65 20 6f 66 20 61 20 73 74 72 69 6e 67 20  dle of a string 
30eb0 6c 69 74 65 72 61 6c 20 6f 72 20 43 2d 73 74 79  literal or C-sty
30ec0 6c 65 20 63 6f 6d 6d 65 6e 74 2e 0a 2a 2f 0a 73  le comment..*/.s
30ed0 74 61 74 69 63 20 69 6e 74 20 6c 69 6e 65 5f 69  tatic int line_i
30ee0 73 5f 63 6f 6d 70 6c 65 74 65 28 63 68 61 72 20  s_complete(char 
30ef0 2a 7a 53 71 6c 2c 20 69 6e 74 20 6e 53 71 6c 29  *zSql, int nSql)
30f00 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66  {.  int rc;.  if
30f10 28 20 7a 53 71 6c 3d 3d 30 20 29 20 72 65 74 75  ( zSql==0 ) retu
30f20 72 6e 20 31 3b 0a 20 20 7a 53 71 6c 5b 6e 53 71  rn 1;.  zSql[nSq
30f30 6c 5d 20 3d 20 27 3b 27 3b 0a 20 20 7a 53 71 6c  l] = ';';.  zSql
30f40 5b 6e 53 71 6c 2b 31 5d 20 3d 20 30 3b 0a 20 20  [nSql+1] = 0;.  
30f50 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6d  rc = sqlite3_com
30f60 70 6c 65 74 65 28 7a 53 71 6c 29 3b 0a 20 20 7a  plete(zSql);.  z
30f70 53 71 6c 5b 6e 53 71 6c 5d 20 3d 20 30 3b 0a 20  Sql[nSql] = 0;. 
30f80 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
30f90 2a 0a 2a 2a 20 52 75 6e 20 61 20 73 69 6e 67 6c  *.** Run a singl
30fa0 65 20 6c 69 6e 65 20 6f 66 20 53 51 4c 0a 2a 2f  e line of SQL.*/
30fb0 0a 73 74 61 74 69 63 20 69 6e 74 20 72 75 6e 4f  .static int runO
30fc0 6e 65 53 71 6c 4c 69 6e 65 28 53 68 65 6c 6c 53  neSqlLine(ShellS
30fd0 74 61 74 65 20 2a 70 2c 20 63 68 61 72 20 2a 7a  tate *p, char *z
30fe0 53 71 6c 2c 20 46 49 4c 45 20 2a 69 6e 2c 20 69  Sql, FILE *in, i
30ff0 6e 74 20 73 74 61 72 74 6c 69 6e 65 29 7b 0a 20  nt startline){. 
31000 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20   int rc;.  char 
31010 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 0a 20  *zErrMsg = 0;.. 
31020 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a   open_db(p, 0);.
31030 20 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46 6c    if( ShellHasFl
31040 61 67 28 70 2c 53 48 46 4c 47 5f 42 61 63 6b 73  ag(p,SHFLG_Backs
31050 6c 61 73 68 29 20 29 20 72 65 73 6f 6c 76 65 5f  lash) ) resolve_
31060 62 61 63 6b 73 6c 61 73 68 65 73 28 7a 53 71 6c  backslashes(zSql
31070 29 3b 0a 20 20 42 45 47 49 4e 5f 54 49 4d 45 52  );.  BEGIN_TIMER
31080 3b 0a 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f 65  ;.  rc = shell_e
31090 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c  xec(p->db, zSql,
310a0 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c   shell_callback,
310b0 20 70 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20   p, &zErrMsg);. 
310c0 20 45 4e 44 5f 54 49 4d 45 52 3b 0a 20 20 69 66   END_TIMER;.  if
310d0 28 20 72 63 20 7c 7c 20 7a 45 72 72 4d 73 67 20  ( rc || zErrMsg 
310e0 29 7b 0a 20 20 20 20 63 68 61 72 20 7a 50 72 65  ){.    char zPre
310f0 66 69 78 5b 31 30 30 5d 3b 0a 20 20 20 20 69 66  fix[100];.    if
31100 28 20 69 6e 21 3d 30 20 7c 7c 20 21 73 74 64 69  ( in!=0 || !stdi
31110 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76 65  n_is_interactive
31120 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
31130 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
31140 66 28 7a 50 72 65 66 69 78 29 2c 20 7a 50 72 65  f(zPrefix), zPre
31150 66 69 78 2c 0a 20 20 20 20 20 20 20 20 20 20 20  fix,.           
31160 20 20 20 20 20 20 20 20 20 20 20 20 22 45 72 72              "Err
31170 6f 72 3a 20 6e 65 61 72 20 6c 69 6e 65 20 25 64  or: near line %d
31180 3a 22 2c 20 73 74 61 72 74 6c 69 6e 65 29 3b 0a  :", startline);.
31190 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
311a0 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
311b0 66 28 73 69 7a 65 6f 66 28 7a 50 72 65 66 69 78  f(sizeof(zPrefix
311c0 29 2c 20 7a 50 72 65 66 69 78 2c 20 22 45 72 72  ), zPrefix, "Err
311d0 6f 72 3a 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20  or:");.    }.   
311e0 20 69 66 28 20 7a 45 72 72 4d 73 67 21 3d 30 20   if( zErrMsg!=0 
311f0 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
31200 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73  intf(stderr, "%s
31210 20 25 73 5c 6e 22 2c 20 7a 50 72 65 66 69 78 2c   %s\n", zPrefix,
31220 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20   zErrMsg);.     
31230 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45   sqlite3_free(zE
31240 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 7a 45  rrMsg);.      zE
31250 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 7d  rrMsg = 0;.    }
31260 65 6c 73 65 7b 0a 20 20 20 20 20 20 75 74 66 38  else{.      utf8
31270 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
31280 22 25 73 20 25 73 5c 6e 22 2c 20 7a 50 72 65 66  "%s %s\n", zPref
31290 69 78 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  ix, sqlite3_errm
312a0 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20  sg(p->db));.    
312b0 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a  }.    return 1;.
312c0 20 20 7d 65 6c 73 65 20 69 66 28 20 53 68 65 6c    }else if( Shel
312d0 6c 48 61 73 46 6c 61 67 28 70 2c 20 53 48 46 4c  lHasFlag(p, SHFL
312e0 47 5f 43 6f 75 6e 74 43 68 61 6e 67 65 73 29 20  G_CountChanges) 
312f0 29 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74  ){.    raw_print
31300 66 28 70 2d 3e 6f 75 74 2c 20 22 63 68 61 6e 67  f(p->out, "chang
31310 65 73 3a 20 25 33 64 20 20 20 74 6f 74 61 6c 5f  es: %3d   total_
31320 63 68 61 6e 67 65 73 3a 20 25 64 5c 6e 22 2c 0a  changes: %d\n",.
31330 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
31340 74 65 33 5f 63 68 61 6e 67 65 73 28 70 2d 3e 64  te3_changes(p->d
31350 62 29 2c 20 73 71 6c 69 74 65 33 5f 74 6f 74 61  b), sqlite3_tota
31360 6c 5f 63 68 61 6e 67 65 73 28 70 2d 3e 64 62 29  l_changes(p->db)
31370 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
31380 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 61  0;.}.../*.** Rea
31390 64 20 69 6e 70 75 74 20 66 72 6f 6d 20 2a 69 6e  d input from *in
313a0 20 61 6e 64 20 70 72 6f 63 65 73 73 20 69 74 2e   and process it.
313b0 20 20 49 66 20 2a 69 6e 3d 3d 30 20 74 68 65 6e    If *in==0 then
313c0 20 69 6e 70 75 74 0a 2a 2a 20 69 73 20 69 6e 74   input.** is int
313d0 65 72 61 63 74 69 76 65 20 2d 20 74 68 65 20 75  eractive - the u
313e0 73 65 72 20 69 73 20 74 79 70 69 6e 67 20 69 74  ser is typing it
313f0 20 69 74 2e 20 20 4f 74 68 65 72 77 69 73 65 2c   it.  Otherwise,
31400 20 69 6e 70 75 74 0a 2a 2a 20 69 73 20 63 6f 6d   input.** is com
31410 69 6e 67 20 66 72 6f 6d 20 61 20 66 69 6c 65 20  ing from a file 
31420 6f 72 20 64 65 76 69 63 65 2e 20 20 41 20 70 72  or device.  A pr
31430 6f 6d 70 74 20 69 73 20 69 73 73 75 65 64 20 61  ompt is issued a
31440 6e 64 20 68 69 73 74 6f 72 79 0a 2a 2a 20 69 73  nd history.** is
31450 20 73 61 76 65 64 20 6f 6e 6c 79 20 69 66 20 69   saved only if i
31460 6e 70 75 74 20 69 73 20 69 6e 74 65 72 61 63 74  nput is interact
31470 69 76 65 2e 20 20 41 6e 20 69 6e 74 65 72 72 75  ive.  An interru
31480 70 74 20 73 69 67 6e 61 6c 20 77 69 6c 6c 0a 2a  pt signal will.*
31490 2a 20 63 61 75 73 65 20 74 68 69 73 20 72 6f 75  * cause this rou
314a0 74 69 6e 65 20 74 6f 20 65 78 69 74 20 69 6d 6d  tine to exit imm
314b0 65 64 69 61 74 65 6c 79 2c 20 75 6e 6c 65 73 73  ediately, unless
314c0 20 69 6e 70 75 74 20 69 73 20 69 6e 74 65 72 61   input is intera
314d0 63 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 52 65 74  ctive..**.** Ret
314e0 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
314f0 66 20 65 72 72 6f 72 73 2e 0a 2a 2f 0a 73 74 61  f errors..*/.sta
31500 74 69 63 20 69 6e 74 20 70 72 6f 63 65 73 73 5f  tic int process_
31510 69 6e 70 75 74 28 53 68 65 6c 6c 53 74 61 74 65  input(ShellState
31520 20 2a 70 2c 20 46 49 4c 45 20 2a 69 6e 29 7b 0a   *p, FILE *in){.
31530 20 20 63 68 61 72 20 2a 7a 4c 69 6e 65 20 3d 20    char *zLine = 
31540 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  0;          /* A
31550 20 73 69 6e 67 6c 65 20 69 6e 70 75 74 20 6c 69   single input li
31560 6e 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53  ne */.  char *zS
31570 71 6c 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ql = 0;         
31580 20 20 2f 2a 20 41 63 63 75 6d 75 6c 61 74 65 64    /* Accumulated
31590 20 53 51 4c 20 74 65 78 74 20 2a 2f 0a 20 20 69   SQL text */.  i
315a0 6e 74 20 6e 4c 69 6e 65 3b 20 20 20 20 20 20 20  nt nLine;       
315b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
315c0 74 68 20 6f 66 20 63 75 72 72 65 6e 74 20 6c 69  th of current li
315d0 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 71 6c  ne */.  int nSql
315e0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
315f0 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 7a 53    /* Bytes of zS
31600 71 6c 5b 5d 20 75 73 65 64 20 2a 2f 0a 20 20 69  ql[] used */.  i
31610 6e 74 20 6e 41 6c 6c 6f 63 20 3d 20 30 3b 20 20  nt nAlloc = 0;  
31620 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
31630 63 61 74 65 64 20 7a 53 71 6c 5b 5d 20 73 70 61  cated zSql[] spa
31640 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 71 6c  ce */.  int nSql
31650 50 72 69 6f 72 20 3d 20 30 3b 20 20 20 20 20 20  Prior = 0;      
31660 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 7a 53    /* Bytes of zS
31670 71 6c 5b 5d 20 75 73 65 64 20 62 79 20 70 72 69  ql[] used by pri
31680 6f 72 20 6c 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  or line */.  int
31690 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
316a0 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20         /* Error 
316b0 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 72  code */.  int er
316c0 72 43 6e 74 20 3d 20 30 3b 20 20 20 20 20 20 20  rCnt = 0;       
316d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
316e0 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
316f0 20 20 69 6e 74 20 6c 69 6e 65 6e 6f 20 3d 20 30    int lineno = 0
31700 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
31710 75 72 72 65 6e 74 20 6c 69 6e 65 20 6e 75 6d 62  urrent line numb
31720 65 72 20 2a 2f 0a 20 20 69 6e 74 20 73 74 61 72  er */.  int star
31730 74 6c 69 6e 65 20 3d 20 30 3b 20 20 20 20 20 20  tline = 0;      
31740 20 20 2f 2a 20 4c 69 6e 65 20 6e 75 6d 62 65 72    /* Line number
31750 20 66 6f 72 20 73 74 61 72 74 20 6f 66 20 63 75   for start of cu
31760 72 72 65 6e 74 20 69 6e 70 75 74 20 2a 2f 0a 0a  rrent input */..
31770 20 20 77 68 69 6c 65 28 20 65 72 72 43 6e 74 3d    while( errCnt=
31780 3d 30 20 7c 7c 20 21 62 61 69 6c 5f 6f 6e 5f 65  =0 || !bail_on_e
31790 72 72 6f 72 20 7c 7c 20 28 69 6e 3d 3d 30 20 26  rror || (in==0 &
317a0 26 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72  & stdin_is_inter
317b0 61 63 74 69 76 65 29 20 29 7b 0a 20 20 20 20 66  active) ){.    f
317c0 66 6c 75 73 68 28 70 2d 3e 6f 75 74 29 3b 0a 20  flush(p->out);. 
317d0 20 20 20 7a 4c 69 6e 65 20 3d 20 6f 6e 65 5f 69     zLine = one_i
317e0 6e 70 75 74 5f 6c 69 6e 65 28 69 6e 2c 20 7a 4c  nput_line(in, zL
317f0 69 6e 65 2c 20 6e 53 71 6c 3e 30 29 3b 0a 20 20  ine, nSql>0);.  
31800 20 20 69 66 28 20 7a 4c 69 6e 65 3d 3d 30 20 29    if( zLine==0 )
31810 7b 0a 20 20 20 20 20 20 2f 2a 20 45 6e 64 20 6f  {.      /* End o
31820 66 20 69 6e 70 75 74 20 2a 2f 0a 20 20 20 20 20  f input */.     
31830 20 69 66 28 20 69 6e 3d 3d 30 20 26 26 20 73 74   if( in==0 && st
31840 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69  din_is_interacti
31850 76 65 20 29 20 70 72 69 6e 74 66 28 22 5c 6e 22  ve ) printf("\n"
31860 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
31870 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 65      }.    if( se
31880 65 6e 49 6e 74 65 72 72 75 70 74 20 29 7b 0a 20  enInterrupt ){. 
31890 20 20 20 20 20 69 66 28 20 69 6e 21 3d 30 20 29       if( in!=0 )
318a0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 73 65   break;.      se
318b0 65 6e 49 6e 74 65 72 72 75 70 74 20 3d 20 30 3b  enInterrupt = 0;
318c0 0a 20 20 20 20 7d 0a 20 20 20 20 6c 69 6e 65 6e  .    }.    linen
318d0 6f 2b 2b 3b 0a 20 20 20 20 69 66 28 20 6e 53 71  o++;.    if( nSq
318e0 6c 3d 3d 30 20 26 26 20 5f 61 6c 6c 5f 77 68 69  l==0 && _all_whi
318f0 74 65 73 70 61 63 65 28 7a 4c 69 6e 65 29 20 29  tespace(zLine) )
31900 7b 0a 20 20 20 20 20 20 69 66 28 20 53 68 65 6c  {.      if( Shel
31910 6c 48 61 73 46 6c 61 67 28 70 2c 20 53 48 46 4c  lHasFlag(p, SHFL
31920 47 5f 45 63 68 6f 29 20 29 20 70 72 69 6e 74 66  G_Echo) ) printf
31930 28 22 25 73 5c 6e 22 2c 20 7a 4c 69 6e 65 29 3b  ("%s\n", zLine);
31940 0a 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b  .      continue;
31950 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a  .    }.    if( z
31960 4c 69 6e 65 20 26 26 20 7a 4c 69 6e 65 5b 30 5d  Line && zLine[0]
31970 3d 3d 27 2e 27 20 26 26 20 6e 53 71 6c 3d 3d 30  =='.' && nSql==0
31980 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 53 68   ){.      if( Sh
31990 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c 20 53 48  ellHasFlag(p, SH
319a0 46 4c 47 5f 45 63 68 6f 29 20 29 20 70 72 69 6e  FLG_Echo) ) prin
319b0 74 66 28 22 25 73 5c 6e 22 2c 20 7a 4c 69 6e 65  tf("%s\n", zLine
319c0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 64 6f  );.      rc = do
319d0 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 28 7a 4c  _meta_command(zL
319e0 69 6e 65 2c 20 70 29 3b 0a 20 20 20 20 20 20 69  ine, p);.      i
319f0 66 28 20 72 63 3d 3d 32 20 29 7b 20 2f 2a 20 65  f( rc==2 ){ /* e
31a00 78 69 74 20 72 65 71 75 65 73 74 65 64 20 2a 2f  xit requested */
31a10 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
31a20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
31a30 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 65 72  rc ){.        er
31a40 72 43 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a  rCnt++;.      }.
31a50 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a        continue;.
31a60 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6c 69      }.    if( li
31a70 6e 65 5f 69 73 5f 63 6f 6d 6d 61 6e 64 5f 74 65  ne_is_command_te
31a80 72 6d 69 6e 61 74 6f 72 28 7a 4c 69 6e 65 29 20  rminator(zLine) 
31a90 26 26 20 6c 69 6e 65 5f 69 73 5f 63 6f 6d 70 6c  && line_is_compl
31aa0 65 74 65 28 7a 53 71 6c 2c 20 6e 53 71 6c 29 20  ete(zSql, nSql) 
31ab0 29 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28  ){.      memcpy(
31ac0 7a 4c 69 6e 65 2c 22 3b 22 2c 32 29 3b 0a 20 20  zLine,";",2);.  
31ad0 20 20 7d 0a 20 20 20 20 6e 4c 69 6e 65 20 3d 20    }.    nLine = 
31ae0 73 74 72 6c 65 6e 33 30 28 7a 4c 69 6e 65 29 3b  strlen30(zLine);
31af0 0a 20 20 20 20 69 66 28 20 6e 53 71 6c 2b 6e 4c  .    if( nSql+nL
31b00 69 6e 65 2b 32 3e 3d 6e 41 6c 6c 6f 63 20 29 7b  ine+2>=nAlloc ){
31b10 0a 20 20 20 20 20 20 6e 41 6c 6c 6f 63 20 3d 20  .      nAlloc = 
31b20 6e 53 71 6c 2b 6e 4c 69 6e 65 2b 31 30 30 3b 0a  nSql+nLine+100;.
31b30 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 72 65 61        zSql = rea
31b40 6c 6c 6f 63 28 7a 53 71 6c 2c 20 6e 41 6c 6c 6f  lloc(zSql, nAllo
31b50 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 53  c);.      if( zS
31b60 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ql==0 ){.       
31b70 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
31b80 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75 74 20  rr, "Error: out 
31b90 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20  of memory\n");. 
31ba0 20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b 0a         exit(1);.
31bb0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
31bc0 20 20 6e 53 71 6c 50 72 69 6f 72 20 3d 20 6e 53    nSqlPrior = nS
31bd0 71 6c 3b 0a 20 20 20 20 69 66 28 20 6e 53 71 6c  ql;.    if( nSql
31be0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ==0 ){.      int
31bf0 20 69 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d   i;.      for(i=
31c00 30 3b 20 7a 4c 69 6e 65 5b 69 5d 20 26 26 20 49  0; zLine[i] && I
31c10 73 53 70 61 63 65 28 7a 4c 69 6e 65 5b 69 5d 29  sSpace(zLine[i])
31c20 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 61  ; i++){}.      a
31c30 73 73 65 72 74 28 20 6e 41 6c 6c 6f 63 3e 30 20  ssert( nAlloc>0 
31c40 26 26 20 7a 53 71 6c 21 3d 30 20 29 3b 0a 20 20  && zSql!=0 );.  
31c50 20 20 20 20 6d 65 6d 63 70 79 28 7a 53 71 6c 2c      memcpy(zSql,
31c60 20 7a 4c 69 6e 65 2b 69 2c 20 6e 4c 69 6e 65 2b   zLine+i, nLine+
31c70 31 2d 69 29 3b 0a 20 20 20 20 20 20 73 74 61 72  1-i);.      star
31c80 74 6c 69 6e 65 20 3d 20 6c 69 6e 65 6e 6f 3b 0a  tline = lineno;.
31c90 20 20 20 20 20 20 6e 53 71 6c 20 3d 20 6e 4c 69        nSql = nLi
31ca0 6e 65 2d 69 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ne-i;.    }else{
31cb0 0a 20 20 20 20 20 20 7a 53 71 6c 5b 6e 53 71 6c  .      zSql[nSql
31cc0 2b 2b 5d 20 3d 20 27 5c 6e 27 3b 0a 20 20 20 20  ++] = '\n';.    
31cd0 20 20 6d 65 6d 63 70 79 28 7a 53 71 6c 2b 6e 53    memcpy(zSql+nS
31ce0 71 6c 2c 20 7a 4c 69 6e 65 2c 20 6e 4c 69 6e 65  ql, zLine, nLine
31cf0 2b 31 29 3b 0a 20 20 20 20 20 20 6e 53 71 6c 20  +1);.      nSql 
31d00 2b 3d 20 6e 4c 69 6e 65 3b 0a 20 20 20 20 7d 0a  += nLine;.    }.
31d10 20 20 20 20 69 66 28 20 6e 53 71 6c 20 26 26 20      if( nSql && 
31d20 6c 69 6e 65 5f 63 6f 6e 74 61 69 6e 73 5f 73 65  line_contains_se
31d30 6d 69 63 6f 6c 6f 6e 28 26 7a 53 71 6c 5b 6e 53  micolon(&zSql[nS
31d40 71 6c 50 72 69 6f 72 5d 2c 20 6e 53 71 6c 2d 6e  qlPrior], nSql-n
31d50 53 71 6c 50 72 69 6f 72 29 0a 20 20 20 20 20 20  SqlPrior).      
31d60 20 20 20 20 20 20 20 20 20 20 26 26 20 73 71 6c            && sql
31d70 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 28 7a 53  ite3_complete(zS
31d80 71 6c 29 20 29 7b 0a 20 20 20 20 20 20 65 72 72  ql) ){.      err
31d90 43 6e 74 20 2b 3d 20 72 75 6e 4f 6e 65 53 71 6c  Cnt += runOneSql
31da0 4c 69 6e 65 28 70 2c 20 7a 53 71 6c 2c 20 69 6e  Line(p, zSql, in
31db0 2c 20 73 74 61 72 74 6c 69 6e 65 29 3b 0a 20 20  , startline);.  
31dc0 20 20 20 20 6e 53 71 6c 20 3d 20 30 3b 0a 20 20      nSql = 0;.  
31dd0 20 20 20 20 69 66 28 20 70 2d 3e 6f 75 74 43 6f      if( p->outCo
31de0 75 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 6f  unt ){.        o
31df0 75 74 70 75 74 5f 72 65 73 65 74 28 70 29 3b 0a  utput_reset(p);.
31e00 20 20 20 20 20 20 20 20 70 2d 3e 6f 75 74 43 6f          p->outCo
31e10 75 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  unt = 0;.      }
31e20 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6e  .    }else if( n
31e30 53 71 6c 20 26 26 20 5f 61 6c 6c 5f 77 68 69 74  Sql && _all_whit
31e40 65 73 70 61 63 65 28 7a 53 71 6c 29 20 29 7b 0a  espace(zSql) ){.
31e50 20 20 20 20 20 20 69 66 28 20 53 68 65 6c 6c 48        if( ShellH
31e60 61 73 46 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f  asFlag(p, SHFLG_
31e70 45 63 68 6f 29 20 29 20 70 72 69 6e 74 66 28 22  Echo) ) printf("
31e80 25 73 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20  %s\n", zSql);.  
31e90 20 20 20 20 6e 53 71 6c 20 3d 20 30 3b 0a 20 20      nSql = 0;.  
31ea0 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 6e 53    }.  }.  if( nS
31eb0 71 6c 20 26 26 20 21 5f 61 6c 6c 5f 77 68 69 74  ql && !_all_whit
31ec0 65 73 70 61 63 65 28 7a 53 71 6c 29 20 29 7b 0a  espace(zSql) ){.
31ed0 20 20 20 20 72 75 6e 4f 6e 65 53 71 6c 4c 69 6e      runOneSqlLin
31ee0 65 28 70 2c 20 7a 53 71 6c 2c 20 69 6e 2c 20 73  e(p, zSql, in, s
31ef0 74 61 72 74 6c 69 6e 65 29 3b 0a 20 20 7d 0a 20  tartline);.  }. 
31f00 20 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 66   free(zSql);.  f
31f10 72 65 65 28 7a 4c 69 6e 65 29 3b 0a 20 20 72 65  ree(zLine);.  re
31f20 74 75 72 6e 20 65 72 72 43 6e 74 3e 30 3b 0a 7d  turn errCnt>0;.}
31f30 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61  ../*.** Return a
31f40 20 70 61 74 68 6e 61 6d 65 20 77 68 69 63 68 20   pathname which 
31f50 69 73 20 74 68 65 20 75 73 65 72 27 73 20 68 6f  is the user's ho
31f60 6d 65 20 64 69 72 65 63 74 6f 72 79 2e 20 20 41  me directory.  A
31f70 0a 2a 2a 20 30 20 72 65 74 75 72 6e 20 69 6e 64  .** 0 return ind
31f80 69 63 61 74 65 73 20 61 6e 20 65 72 72 6f 72 20  icates an error 
31f90 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 2a 2f  of some kind..*/
31fa0 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 66 69  .static char *fi
31fb0 6e 64 5f 68 6f 6d 65 5f 64 69 72 28 69 6e 74 20  nd_home_dir(int 
31fc0 63 6c 65 61 72 46 6c 61 67 29 7b 0a 20 20 73 74  clearFlag){.  st
31fd0 61 74 69 63 20 63 68 61 72 20 2a 68 6f 6d 65 5f  atic char *home_
31fe0 64 69 72 20 3d 20 4e 55 4c 4c 3b 0a 20 20 69 66  dir = NULL;.  if
31ff0 28 20 63 6c 65 61 72 46 6c 61 67 20 29 7b 0a 20  ( clearFlag ){. 
32000 20 20 20 66 72 65 65 28 68 6f 6d 65 5f 64 69 72     free(home_dir
32010 29 3b 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20  );.    home_dir 
32020 3d 20 30 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  = 0;.    return 
32030 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 68 6f 6d  0;.  }.  if( hom
32040 65 5f 64 69 72 20 29 20 72 65 74 75 72 6e 20 68  e_dir ) return h
32050 6f 6d 65 5f 64 69 72 3b 0a 0a 23 69 66 20 21 64  ome_dir;..#if !d
32060 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 26  efined(_WIN32) &
32070 26 20 21 64 65 66 69 6e 65 64 28 57 49 4e 33 32  & !defined(WIN32
32080 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57  ) && !defined(_W
32090 49 4e 33 32 5f 57 43 45 29 20 5c 0a 20 20 20 20  IN32_WCE) \.    
320a0 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 52   && !defined(__R
320b0 54 50 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65  TP__) && !define
320c0 64 28 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 0a 20  d(_WRS_KERNEL). 
320d0 20 7b 0a 20 20 20 20 73 74 72 75 63 74 20 70 61   {.    struct pa
320e0 73 73 77 64 20 2a 70 77 65 6e 74 3b 0a 20 20 20  sswd *pwent;.   
320f0 20 75 69 64 5f 74 20 75 69 64 20 3d 20 67 65 74   uid_t uid = get
32100 75 69 64 28 29 3b 0a 20 20 20 20 69 66 28 20 28  uid();.    if( (
32110 70 77 65 6e 74 3d 67 65 74 70 77 75 69 64 28 75  pwent=getpwuid(u
32120 69 64 29 29 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a  id)) != NULL) {.
32130 20 20 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d        home_dir =
32140 20 70 77 65 6e 74 2d 3e 70 77 5f 64 69 72 3b 0a   pwent->pw_dir;.
32150 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
32160 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57  ..#if defined(_W
32170 49 4e 33 32 5f 57 43 45 29 0a 20 20 2f 2a 20 57  IN32_WCE).  /* W
32180 69 6e 64 6f 77 73 20 43 45 20 28 61 72 6d 2d 77  indows CE (arm-w
32190 69 6e 63 65 2d 6d 69 6e 67 77 33 32 63 65 2d 67  ince-mingw32ce-g
321a0 63 63 29 20 64 6f 65 73 20 6e 6f 74 20 70 72 6f  cc) does not pro
321b0 76 69 64 65 20 67 65 74 65 6e 76 28 29 0a 20 20  vide getenv().  
321c0 20 2a 2f 0a 20 20 68 6f 6d 65 5f 64 69 72 20 3d   */.  home_dir =
321d0 20 22 2f 22 3b 0a 23 65 6c 73 65 0a 0a 23 69 66   "/";.#else..#if
321e0 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29   defined(_WIN32)
321f0 20 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33   || defined(WIN3
32200 32 29 0a 20 20 69 66 20 28 21 68 6f 6d 65 5f 64  2).  if (!home_d
32210 69 72 29 20 7b 0a 20 20 20 20 68 6f 6d 65 5f 64  ir) {.    home_d
32220 69 72 20 3d 20 67 65 74 65 6e 76 28 22 55 53 45  ir = getenv("USE
32230 52 50 52 4f 46 49 4c 45 22 29 3b 0a 20 20 7d 0a  RPROFILE");.  }.
32240 23 65 6e 64 69 66 0a 0a 20 20 69 66 20 28 21 68  #endif..  if (!h
32250 6f 6d 65 5f 64 69 72 29 20 7b 0a 20 20 20 20 68  ome_dir) {.    h
32260 6f 6d 65 5f 64 69 72 20 3d 20 67 65 74 65 6e 76  ome_dir = getenv
32270 28 22 48 4f 4d 45 22 29 3b 0a 20 20 7d 0a 0a 23  ("HOME");.  }..#
32280 69 66 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33  if defined(_WIN3
32290 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 57 49  2) || defined(WI
322a0 4e 33 32 29 0a 20 20 69 66 20 28 21 68 6f 6d 65  N32).  if (!home
322b0 5f 64 69 72 29 20 7b 0a 20 20 20 20 63 68 61 72  _dir) {.    char
322c0 20 2a 7a 44 72 69 76 65 2c 20 2a 7a 50 61 74 68   *zDrive, *zPath
322d0 3b 0a 20 20 20 20 69 6e 74 20 6e 3b 0a 20 20 20  ;.    int n;.   
322e0 20 7a 44 72 69 76 65 20 3d 20 67 65 74 65 6e 76   zDrive = getenv
322f0 28 22 48 4f 4d 45 44 52 49 56 45 22 29 3b 0a 20  ("HOMEDRIVE");. 
32300 20 20 20 7a 50 61 74 68 20 3d 20 67 65 74 65 6e     zPath = geten
32310 76 28 22 48 4f 4d 45 50 41 54 48 22 29 3b 0a 20  v("HOMEPATH");. 
32320 20 20 20 69 66 28 20 7a 44 72 69 76 65 20 26 26     if( zDrive &&
32330 20 7a 50 61 74 68 20 29 7b 0a 20 20 20 20 20 20   zPath ){.      
32340 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 44 72  n = strlen30(zDr
32350 69 76 65 29 20 2b 20 73 74 72 6c 65 6e 33 30 28  ive) + strlen30(
32360 7a 50 61 74 68 29 20 2b 20 31 3b 0a 20 20 20 20  zPath) + 1;.    
32370 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20 6d 61 6c    home_dir = mal
32380 6c 6f 63 28 20 6e 20 29 3b 0a 20 20 20 20 20 20  loc( n );.      
32390 69 66 28 20 68 6f 6d 65 5f 64 69 72 3d 3d 30 20  if( home_dir==0 
323a0 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
323b0 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
323c0 74 66 28 6e 2c 20 68 6f 6d 65 5f 64 69 72 2c 20  tf(n, home_dir, 
323d0 22 25 73 25 73 22 2c 20 7a 44 72 69 76 65 2c 20  "%s%s", zDrive, 
323e0 7a 50 61 74 68 29 3b 0a 20 20 20 20 20 20 72 65  zPath);.      re
323f0 74 75 72 6e 20 68 6f 6d 65 5f 64 69 72 3b 0a 20  turn home_dir;. 
32400 20 20 20 7d 0a 20 20 20 20 68 6f 6d 65 5f 64 69     }.    home_di
32410 72 20 3d 20 22 63 3a 5c 5c 22 3b 0a 20 20 7d 0a  r = "c:\\";.  }.
32420 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f  #endif..#endif /
32430 2a 20 21 5f 57 49 4e 33 32 5f 57 43 45 20 2a 2f  * !_WIN32_WCE */
32440 0a 0a 20 20 69 66 28 20 68 6f 6d 65 5f 64 69 72  ..  if( home_dir
32450 20 29 7b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20   ){.    int n = 
32460 73 74 72 6c 65 6e 33 30 28 68 6f 6d 65 5f 64 69  strlen30(home_di
32470 72 29 20 2b 20 31 3b 0a 20 20 20 20 63 68 61 72  r) + 1;.    char
32480 20 2a 7a 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e 20   *z = malloc( n 
32490 29 3b 0a 20 20 20 20 69 66 28 20 7a 20 29 20 6d  );.    if( z ) m
324a0 65 6d 63 70 79 28 7a 2c 20 68 6f 6d 65 5f 64 69  emcpy(z, home_di
324b0 72 2c 20 6e 29 3b 0a 20 20 20 20 68 6f 6d 65 5f  r, n);.    home_
324c0 64 69 72 20 3d 20 7a 3b 0a 20 20 7d 0a 0a 20 20  dir = z;.  }..  
324d0 72 65 74 75 72 6e 20 68 6f 6d 65 5f 64 69 72 3b  return home_dir;
324e0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 69  .}../*.** Read i
324f0 6e 70 75 74 20 66 72 6f 6d 20 74 68 65 20 66 69  nput from the fi
32500 6c 65 20 67 69 76 65 6e 20 62 79 20 73 71 6c 69  le given by sqli
32510 74 65 72 63 5f 6f 76 65 72 72 69 64 65 2e 20 20  terc_override.  
32520 4f 72 20 69 66 20 74 68 61 74 0a 2a 2a 20 70 61  Or if that.** pa
32530 72 61 6d 65 74 65 72 20 69 73 20 4e 55 4c 4c 2c  rameter is NULL,
32540 20 74 61 6b 65 20 69 6e 70 75 74 20 66 72 6f 6d   take input from
32550 20 7e 2f 2e 73 71 6c 69 74 65 72 63 0a 2a 2a 0a   ~/.sqliterc.**.
32560 2a 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  ** Returns the n
32570 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 2e  umber of errors.
32580 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
32590 70 72 6f 63 65 73 73 5f 73 71 6c 69 74 65 72 63  process_sqliterc
325a0 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a  (.  ShellState *
325b0 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p,              
325c0 20 20 20 20 2f 2a 20 43 6f 6e 66 69 67 75 72 61      /* Configura
325d0 74 69 6f 6e 20 64 61 74 61 20 2a 2f 0a 20 20 63  tion data */.  c
325e0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
325f0 65 72 63 5f 6f 76 65 72 72 69 64 65 20 20 20 2f  erc_override   /
32600 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6e 66 69 67  * Name of config
32610 20 66 69 6c 65 2e 20 4e 55 4c 4c 20 74 6f 20 75   file. NULL to u
32620 73 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 29 7b  se default */.){
32630 0a 20 20 63 68 61 72 20 2a 68 6f 6d 65 5f 64 69  .  char *home_di
32640 72 20 3d 20 4e 55 4c 4c 3b 0a 20 20 63 6f 6e 73  r = NULL;.  cons
32650 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 72 63  t char *sqliterc
32660 20 3d 20 73 71 6c 69 74 65 72 63 5f 6f 76 65 72   = sqliterc_over
32670 72 69 64 65 3b 0a 20 20 63 68 61 72 20 2a 7a 42  ride;.  char *zB
32680 75 66 20 3d 20 30 3b 0a 20 20 46 49 4c 45 20 2a  uf = 0;.  FILE *
32690 69 6e 20 3d 20 4e 55 4c 4c 3b 0a 0a 20 20 69 66  in = NULL;..  if
326a0 20 28 73 71 6c 69 74 65 72 63 20 3d 3d 20 4e 55   (sqliterc == NU
326b0 4c 4c 29 20 7b 0a 20 20 20 20 68 6f 6d 65 5f 64  LL) {.    home_d
326c0 69 72 20 3d 20 66 69 6e 64 5f 68 6f 6d 65 5f 64  ir = find_home_d
326d0 69 72 28 30 29 3b 0a 20 20 20 20 69 66 28 20 68  ir(0);.    if( h
326e0 6f 6d 65 5f 64 69 72 3d 3d 30 20 29 7b 0a 20 20  ome_dir==0 ){.  
326f0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
32700 74 64 65 72 72 2c 20 22 2d 2d 20 77 61 72 6e 69  tderr, "-- warni
32710 6e 67 3a 20 63 61 6e 6e 6f 74 20 66 69 6e 64 20  ng: cannot find 
32720 68 6f 6d 65 20 64 69 72 65 63 74 6f 72 79 3b 22  home directory;"
32730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32740 20 20 20 20 20 20 20 22 20 63 61 6e 6e 6f 74 20         " cannot 
32750 72 65 61 64 20 7e 2f 2e 73 71 6c 69 74 65 72 63  read ~/.sqliterc
32760 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75  \n");.      retu
32770 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  rn;.    }.    sq
32780 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
32790 28 29 3b 0a 20 20 20 20 7a 42 75 66 20 3d 20 73  ();.    zBuf = s
327a0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
327b0 25 73 2f 2e 73 71 6c 69 74 65 72 63 22 2c 68 6f  %s/.sqliterc",ho
327c0 6d 65 5f 64 69 72 29 3b 0a 20 20 20 20 73 71 6c  me_dir);.    sql
327d0 69 74 65 72 63 20 3d 20 7a 42 75 66 3b 0a 20 20  iterc = zBuf;.  
327e0 7d 0a 20 20 69 6e 20 3d 20 66 6f 70 65 6e 28 73  }.  in = fopen(s
327f0 71 6c 69 74 65 72 63 2c 22 72 62 22 29 3b 0a 20  qliterc,"rb");. 
32800 20 69 66 28 20 69 6e 20 29 7b 0a 20 20 20 20 69   if( in ){.    i
32810 66 28 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65  f( stdin_is_inte
32820 72 61 63 74 69 76 65 20 29 7b 0a 20 20 20 20 20  ractive ){.     
32830 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
32840 65 72 72 2c 22 2d 2d 20 4c 6f 61 64 69 6e 67 20  err,"-- Loading 
32850 72 65 73 6f 75 72 63 65 73 20 66 72 6f 6d 20 25  resources from %
32860 73 5c 6e 22 2c 73 71 6c 69 74 65 72 63 29 3b 0a  s\n",sqliterc);.
32870 20 20 20 20 7d 0a 20 20 20 20 70 72 6f 63 65 73      }.    proces
32880 73 5f 69 6e 70 75 74 28 70 2c 69 6e 29 3b 0a 20  s_input(p,in);. 
32890 20 20 20 66 63 6c 6f 73 65 28 69 6e 29 3b 0a 20     fclose(in);. 
328a0 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65   }.  sqlite3_fre
328b0 65 28 7a 42 75 66 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  e(zBuf);.}../*.*
328c0 2a 20 53 68 6f 77 20 61 76 61 69 6c 61 62 6c 65  * Show available
328d0 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70   command line op
328e0 74 69 6f 6e 73 0a 2a 2f 0a 73 74 61 74 69 63 20  tions.*/.static 
328f0 63 6f 6e 73 74 20 63 68 61 72 20 7a 4f 70 74 69  const char zOpti
32900 6f 6e 73 5b 5d 20 3d 0a 20 20 22 20 20 20 2d 61  ons[] =.  "   -a
32910 73 63 69 69 20 20 20 20 20 20 20 20 20 20 20 20  scii            
32920 20 20 20 73 65 74 20 6f 75 74 70 75 74 20 6d 6f     set output mo
32930 64 65 20 74 6f 20 27 61 73 63 69 69 27 5c 6e 22  de to 'ascii'\n"
32940 0a 20 20 22 20 20 20 2d 62 61 69 6c 20 20 20 20  .  "   -bail    
32950 20 20 20 20 20 20 20 20 20 20 20 20 73 74 6f 70              stop
32960 20 61 66 74 65 72 20 68 69 74 74 69 6e 67 20 61   after hitting a
32970 6e 20 65 72 72 6f 72 5c 6e 22 0a 20 20 22 20 20  n error\n".  "  
32980 20 2d 62 61 74 63 68 20 20 20 20 20 20 20 20 20   -batch         
32990 20 20 20 20 20 20 66 6f 72 63 65 20 62 61 74 63        force batc
329a0 68 20 49 2f 4f 5c 6e 22 0a 20 20 22 20 20 20 2d  h I/O\n".  "   -
329b0 63 6f 6c 75 6d 6e 20 20 20 20 20 20 20 20 20 20  column          
329c0 20 20 20 20 73 65 74 20 6f 75 74 70 75 74 20 6d      set output m
329d0 6f 64 65 20 74 6f 20 27 63 6f 6c 75 6d 6e 27 5c  ode to 'column'\
329e0 6e 22 0a 20 20 22 20 20 20 2d 63 6d 64 20 43 4f  n".  "   -cmd CO
329f0 4d 4d 41 4e 44 20 20 20 20 20 20 20 20 20 72 75  MMAND         ru
32a00 6e 20 5c 22 43 4f 4d 4d 41 4e 44 5c 22 20 62 65  n \"COMMAND\" be
32a10 66 6f 72 65 20 72 65 61 64 69 6e 67 20 73 74 64  fore reading std
32a20 69 6e 5c 6e 22 0a 20 20 22 20 20 20 2d 63 73 76  in\n".  "   -csv
32a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a40 20 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65   set output mode
32a50 20 74 6f 20 27 63 73 76 27 5c 6e 22 0a 20 20 22   to 'csv'\n".  "
32a60 20 20 20 2d 65 63 68 6f 20 20 20 20 20 20 20 20     -echo        
32a70 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 63 6f          print co
32a80 6d 6d 61 6e 64 73 20 62 65 66 6f 72 65 20 65 78  mmands before ex
32a90 65 63 75 74 69 6f 6e 5c 6e 22 0a 20 20 22 20 20  ecution\n".  "  
32aa0 20 2d 69 6e 69 74 20 46 49 4c 45 4e 41 4d 45 20   -init FILENAME 
32ab0 20 20 20 20 20 20 72 65 61 64 2f 70 72 6f 63 65        read/proce
32ac0 73 73 20 6e 61 6d 65 64 20 66 69 6c 65 5c 6e 22  ss named file\n"
32ad0 0a 20 20 22 20 20 20 2d 5b 6e 6f 5d 68 65 61 64  .  "   -[no]head
32ae0 65 72 20 20 20 20 20 20 20 20 20 20 74 75 72 6e  er          turn
32af0 20 68 65 61 64 65 72 73 20 6f 6e 20 6f 72 20 6f   headers on or o
32b00 66 66 5c 6e 22 0a 23 69 66 20 64 65 66 69 6e 65  ff\n".#if define
32b10 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
32b20 4d 45 4d 53 59 53 33 29 20 7c 7c 20 64 65 66 69  MEMSYS3) || defi
32b30 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
32b40 45 5f 4d 45 4d 53 59 53 35 29 0a 20 20 22 20 20  E_MEMSYS5).  "  
32b50 20 2d 68 65 61 70 20 53 49 5a 45 20 20 20 20 20   -heap SIZE     
32b60 20 20 20 20 20 20 53 69 7a 65 20 6f 66 20 68 65        Size of he
32b70 61 70 20 66 6f 72 20 6d 65 6d 73 79 73 33 20 6f  ap for memsys3 o
32b80 72 20 6d 65 6d 73 79 73 35 5c 6e 22 0a 23 65 6e  r memsys5\n".#en
32b90 64 69 66 0a 20 20 22 20 20 20 2d 68 65 6c 70 20  dif.  "   -help 
32ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
32bb0 68 6f 77 20 74 68 69 73 20 6d 65 73 73 61 67 65  how this message
32bc0 5c 6e 22 0a 20 20 22 20 20 20 2d 68 74 6d 6c 20  \n".  "   -html 
32bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
32be0 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74  et output mode t
32bf0 6f 20 48 54 4d 4c 5c 6e 22 0a 20 20 22 20 20 20  o HTML\n".  "   
32c00 2d 69 6e 74 65 72 61 63 74 69 76 65 20 20 20 20  -interactive    
32c10 20 20 20 20 20 66 6f 72 63 65 20 69 6e 74 65 72       force inter
32c20 61 63 74 69 76 65 20 49 2f 4f 5c 6e 22 0a 20 20  active I/O\n".  
32c30 22 20 20 20 2d 6c 69 6e 65 20 20 20 20 20 20 20  "   -line       
32c40 20 20 20 20 20 20 20 20 20 73 65 74 20 6f 75 74           set out
32c50 70 75 74 20 6d 6f 64 65 20 74 6f 20 27 6c 69 6e  put mode to 'lin
32c60 65 27 5c 6e 22 0a 20 20 22 20 20 20 2d 6c 69 73  e'\n".  "   -lis
32c70 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t               
32c80 20 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65   set output mode
32c90 20 74 6f 20 27 6c 69 73 74 27 5c 6e 22 0a 20 20   to 'list'\n".  
32ca0 22 20 20 20 2d 6c 6f 6f 6b 61 73 69 64 65 20 53  "   -lookaside S
32cb0 49 5a 45 20 4e 20 20 20 20 75 73 65 20 4e 20 65  IZE N    use N e
32cc0 6e 74 72 69 65 73 20 6f 66 20 53 5a 20 62 79 74  ntries of SZ byt
32cd0 65 73 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  es for lookaside
32ce0 20 6d 65 6d 6f 72 79 5c 6e 22 0a 20 20 22 20 20   memory\n".  "  
32cf0 20 2d 6d 6d 61 70 20 4e 20 20 20 20 20 20 20 20   -mmap N        
32d00 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 6d 6d        default mm
32d10 61 70 20 73 69 7a 65 20 73 65 74 20 74 6f 20 4e  ap size set to N
32d20 5c 6e 22 0a 23 69 66 64 65 66 20 53 51 4c 49 54  \n".#ifdef SQLIT
32d30 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54 49 50 4c  E_ENABLE_MULTIPL
32d40 45 58 0a 20 20 22 20 20 20 2d 6d 75 6c 74 69 70  EX.  "   -multip
32d50 6c 65 78 20 20 20 20 20 20 20 20 20 20 20 65 6e  lex           en
32d60 61 62 6c 65 20 74 68 65 20 6d 75 6c 74 69 70 6c  able the multipl
32d70 65 78 6f 72 20 56 46 53 5c 6e 22 0a 23 65 6e 64  exor VFS\n".#end
32d80 69 66 0a 20 20 22 20 20 20 2d 6e 65 77 6c 69 6e  if.  "   -newlin
32d90 65 20 53 45 50 20 20 20 20 20 20 20 20 20 73 65  e SEP         se
32da0 74 20 6f 75 74 70 75 74 20 72 6f 77 20 73 65 70  t output row sep
32db0 61 72 61 74 6f 72 2e 20 44 65 66 61 75 6c 74 3a  arator. Default:
32dc0 20 27 5c 5c 6e 27 5c 6e 22 0a 20 20 22 20 20 20   '\\n'\n".  "   
32dd0 2d 6e 75 6c 6c 76 61 6c 75 65 20 54 45 58 54 20  -nullvalue TEXT 
32de0 20 20 20 20 20 73 65 74 20 74 65 78 74 20 73 74       set text st
32df0 72 69 6e 67 20 66 6f 72 20 4e 55 4c 4c 20 76 61  ring for NULL va
32e00 6c 75 65 73 2e 20 44 65 66 61 75 6c 74 20 27 27  lues. Default ''
32e10 5c 6e 22 0a 20 20 22 20 20 20 2d 70 61 67 65 63  \n".  "   -pagec
32e20 61 63 68 65 20 53 49 5a 45 20 4e 20 20 20 20 75  ache SIZE N    u
32e30 73 65 20 4e 20 73 6c 6f 74 73 20 6f 66 20 53 5a  se N slots of SZ
32e40 20 62 79 74 65 73 20 65 61 63 68 20 66 6f 72 20   bytes each for 
32e50 70 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72  page cache memor
32e60 79 5c 6e 22 0a 20 20 22 20 20 20 2d 71 75 6f 74  y\n".  "   -quot
32e70 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
32e80 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20  set output mode 
32e90 74 6f 20 27 71 75 6f 74 65 27 5c 6e 22 0a 20 20  to 'quote'\n".  
32ea0 22 20 20 20 2d 73 65 70 61 72 61 74 6f 72 20 53  "   -separator S
32eb0 45 50 20 20 20 20 20 20 20 73 65 74 20 6f 75 74  EP       set out
32ec0 70 75 74 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72  put column separ
32ed0 61 74 6f 72 2e 20 44 65 66 61 75 6c 74 3a 20 27  ator. Default: '
32ee0 7c 27 5c 6e 22 0a 20 20 22 20 20 20 2d 73 74 61  |'\n".  "   -sta
32ef0 74 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ts              
32f00 20 70 72 69 6e 74 20 6d 65 6d 6f 72 79 20 73 74   print memory st
32f10 61 74 73 20 62 65 66 6f 72 65 20 65 61 63 68 20  ats before each 
32f20 66 69 6e 61 6c 69 7a 65 5c 6e 22 0a 20 20 22 20  finalize\n".  " 
32f30 20 20 2d 76 65 72 73 69 6f 6e 20 20 20 20 20 20    -version      
32f40 20 20 20 20 20 20 20 73 68 6f 77 20 53 51 4c 69         show SQLi
32f50 74 65 20 76 65 72 73 69 6f 6e 5c 6e 22 0a 20 20  te version\n".  
32f60 22 20 20 20 2d 76 66 73 20 4e 41 4d 45 20 20 20  "   -vfs NAME   
32f70 20 20 20 20 20 20 20 20 20 75 73 65 20 4e 41 4d           use NAM
32f80 45 20 61 73 20 74 68 65 20 64 65 66 61 75 6c 74  E as the default
32f90 20 56 46 53 5c 6e 22 0a 23 69 66 64 65 66 20 53   VFS\n".#ifdef S
32fa0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 56 46 53  QLITE_ENABLE_VFS
32fb0 54 52 41 43 45 0a 20 20 22 20 20 20 2d 76 66 73  TRACE.  "   -vfs
32fc0 74 72 61 63 65 20 20 20 20 20 20 20 20 20 20 20  trace           
32fd0 20 65 6e 61 62 6c 65 20 74 72 61 63 69 6e 67 20   enable tracing 
32fe0 6f 66 20 61 6c 6c 20 56 46 53 20 63 61 6c 6c 73  of all VFS calls
32ff0 5c 6e 22 0a 23 65 6e 64 69 66 0a 3b 0a 73 74 61  \n".#endif.;.sta
33000 74 69 63 20 76 6f 69 64 20 75 73 61 67 65 28 69  tic void usage(i
33010 6e 74 20 73 68 6f 77 44 65 74 61 69 6c 29 7b 0a  nt showDetail){.
33020 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
33030 64 65 72 72 2c 0a 20 20 20 20 20 20 22 55 73 61  derr,.      "Usa
33040 67 65 3a 20 25 73 20 5b 4f 50 54 49 4f 4e 53 5d  ge: %s [OPTIONS]
33050 20 46 49 4c 45 4e 41 4d 45 20 5b 53 51 4c 5d 5c   FILENAME [SQL]\
33060 6e 22 0a 20 20 20 20 20 20 22 46 49 4c 45 4e 41  n".      "FILENA
33070 4d 45 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  ME is the name o
33080 66 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74 61  f an SQLite data
33090 62 61 73 65 2e 20 41 20 6e 65 77 20 64 61 74 61  base. A new data
330a0 62 61 73 65 20 69 73 20 63 72 65 61 74 65 64 5c  base is created\
330b0 6e 22 0a 20 20 20 20 20 20 22 69 66 20 74 68 65  n".      "if the
330c0 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 70   file does not p
330d0 72 65 76 69 6f 75 73 6c 79 20 65 78 69 73 74 2e  reviously exist.
330e0 5c 6e 22 2c 20 41 72 67 76 30 29 3b 0a 20 20 69  \n", Argv0);.  i
330f0 66 28 20 73 68 6f 77 44 65 74 61 69 6c 20 29 7b  f( showDetail ){
33100 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
33110 28 73 74 64 65 72 72 2c 20 22 4f 50 54 49 4f 4e  (stderr, "OPTION
33120 53 20 69 6e 63 6c 75 64 65 3a 5c 6e 25 73 22 2c  S include:\n%s",
33130 20 7a 4f 70 74 69 6f 6e 73 29 3b 0a 20 20 7d 65   zOptions);.  }e
33140 6c 73 65 7b 0a 20 20 20 20 72 61 77 5f 70 72 69  lse{.    raw_pri
33150 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 65  ntf(stderr, "Use
33160 20 74 68 65 20 2d 68 65 6c 70 20 6f 70 74 69 6f   the -help optio
33170 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  n for additional
33180 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 5c 6e 22 29   information\n")
33190 3b 0a 20 20 7d 0a 20 20 65 78 69 74 28 31 29 3b  ;.  }.  exit(1);
331a0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61  .}../*.** Initia
331b0 6c 69 7a 65 20 74 68 65 20 73 74 61 74 65 20 69  lize the state i
331c0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 64 61  nformation in da
331d0 74 61 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  ta.*/.static voi
331e0 64 20 6d 61 69 6e 5f 69 6e 69 74 28 53 68 65 6c  d main_init(Shel
331f0 6c 53 74 61 74 65 20 2a 64 61 74 61 29 20 7b 0a  lState *data) {.
33200 20 20 6d 65 6d 73 65 74 28 64 61 74 61 2c 20 30    memset(data, 0
33210 2c 20 73 69 7a 65 6f 66 28 2a 64 61 74 61 29 29  , sizeof(*data))
33220 3b 0a 20 20 64 61 74 61 2d 3e 6e 6f 72 6d 61 6c  ;.  data->normal
33230 4d 6f 64 65 20 3d 20 64 61 74 61 2d 3e 63 4d 6f  Mode = data->cMo
33240 64 65 20 3d 20 64 61 74 61 2d 3e 6d 6f 64 65 20  de = data->mode 
33250 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a 20 20 64  = MODE_List;.  d
33260 61 74 61 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e  ata->autoExplain
33270 20 3d 20 31 3b 0a 20 20 6d 65 6d 63 70 79 28 64   = 1;.  memcpy(d
33280 61 74 61 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  ata->colSeparato
33290 72 2c 53 45 50 5f 43 6f 6c 75 6d 6e 2c 20 32 29  r,SEP_Column, 2)
332a0 3b 0a 20 20 6d 65 6d 63 70 79 28 64 61 74 61 2d  ;.  memcpy(data-
332b0 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 53 45  >rowSeparator,SE
332c0 50 5f 52 6f 77 2c 20 32 29 3b 0a 20 20 64 61 74  P_Row, 2);.  dat
332d0 61 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 3d 20  a->showHeader = 
332e0 30 3b 0a 20 20 64 61 74 61 2d 3e 73 68 65 6c 6c  0;.  data->shell
332f0 46 6c 67 73 20 3d 20 53 48 46 4c 47 5f 4c 6f 6f  Flgs = SHFLG_Loo
33300 6b 61 73 69 64 65 3b 0a 20 20 73 71 6c 69 74 65  kaside;.  sqlite
33310 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f  3_config(SQLITE_
33320 43 4f 4e 46 49 47 5f 55 52 49 2c 20 31 29 3b 0a  CONFIG_URI, 1);.
33330 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67    sqlite3_config
33340 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c  (SQLITE_CONFIG_L
33350 4f 47 2c 20 73 68 65 6c 6c 4c 6f 67 2c 20 64 61  OG, shellLog, da
33360 74 61 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  ta);.  sqlite3_c
33370 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e  onfig(SQLITE_CON
33380 46 49 47 5f 4d 55 4c 54 49 54 48 52 45 41 44 29  FIG_MULTITHREAD)
33390 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72  ;.  sqlite3_snpr
333a0 69 6e 74 66 28 73 69 7a 65 6f 66 28 6d 61 69 6e  intf(sizeof(main
333b0 50 72 6f 6d 70 74 29 2c 20 6d 61 69 6e 50 72 6f  Prompt), mainPro
333c0 6d 70 74 2c 22 73 71 6c 69 74 65 3e 20 22 29 3b  mpt,"sqlite> ");
333d0 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69  .  sqlite3_snpri
333e0 6e 74 66 28 73 69 7a 65 6f 66 28 63 6f 6e 74 69  ntf(sizeof(conti
333f0 6e 75 65 50 72 6f 6d 70 74 29 2c 20 63 6f 6e 74  nuePrompt), cont
33400 69 6e 75 65 50 72 6f 6d 70 74 2c 22 20 20 20 2e  inuePrompt,"   .
33410 2e 2e 3e 20 22 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ..> ");.}../*.**
33420 20 4f 75 74 70 75 74 20 74 65 78 74 20 74 6f 20   Output text to 
33430 74 68 65 20 63 6f 6e 73 6f 6c 65 20 69 6e 20 61  the console in a
33440 20 66 6f 6e 74 20 74 68 61 74 20 61 74 74 72 61   font that attra
33450 63 74 73 20 65 78 74 72 61 20 61 74 74 65 6e 74  cts extra attent
33460 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 5f  ion..*/.#ifdef _
33470 57 49 4e 33 32 0a 73 74 61 74 69 63 20 76 6f 69  WIN32.static voi
33480 64 20 70 72 69 6e 74 42 6f 6c 64 28 63 6f 6e 73  d printBold(cons
33490 74 20 63 68 61 72 20 2a 7a 54 65 78 74 29 7b 0a  t char *zText){.
334a0 20 20 48 41 4e 44 4c 45 20 6f 75 74 20 3d 20 47    HANDLE out = G
334b0 65 74 53 74 64 48 61 6e 64 6c 65 28 53 54 44 5f  etStdHandle(STD_
334c0 4f 55 54 50 55 54 5f 48 41 4e 44 4c 45 29 3b 0a  OUTPUT_HANDLE);.
334d0 20 20 43 4f 4e 53 4f 4c 45 5f 53 43 52 45 45 4e    CONSOLE_SCREEN
334e0 5f 42 55 46 46 45 52 5f 49 4e 46 4f 20 64 65 66  _BUFFER_INFO def
334f0 61 75 6c 74 53 63 72 65 65 6e 49 6e 66 6f 3b 0a  aultScreenInfo;.
33500 20 20 47 65 74 43 6f 6e 73 6f 6c 65 53 63 72 65    GetConsoleScre
33510 65 6e 42 75 66 66 65 72 49 6e 66 6f 28 6f 75 74  enBufferInfo(out
33520 2c 20 26 64 65 66 61 75 6c 74 53 63 72 65 65 6e  , &defaultScreen
33530 49 6e 66 6f 29 3b 0a 20 20 53 65 74 43 6f 6e 73  Info);.  SetCons
33540 6f 6c 65 54 65 78 74 41 74 74 72 69 62 75 74 65  oleTextAttribute
33550 28 6f 75 74 2c 0a 20 20 20 20 20 20 20 20 20 46  (out,.         F
33560 4f 52 45 47 52 4f 55 4e 44 5f 52 45 44 7c 46 4f  OREGROUND_RED|FO
33570 52 45 47 52 4f 55 4e 44 5f 49 4e 54 45 4e 53 49  REGROUND_INTENSI
33580 54 59 0a 20 20 29 3b 0a 20 20 70 72 69 6e 74 66  TY.  );.  printf
33590 28 22 25 73 22 2c 20 7a 54 65 78 74 29 3b 0a 20  ("%s", zText);. 
335a0 20 53 65 74 43 6f 6e 73 6f 6c 65 54 65 78 74 41   SetConsoleTextA
335b0 74 74 72 69 62 75 74 65 28 6f 75 74 2c 20 64 65  ttribute(out, de
335c0 66 61 75 6c 74 53 63 72 65 65 6e 49 6e 66 6f 2e  faultScreenInfo.
335d0 77 41 74 74 72 69 62 75 74 65 73 29 3b 0a 7d 0a  wAttributes);.}.
335e0 23 65 6c 73 65 0a 73 74 61 74 69 63 20 76 6f 69  #else.static voi
335f0 64 20 70 72 69 6e 74 42 6f 6c 64 28 63 6f 6e 73  d printBold(cons
33600 74 20 63 68 61 72 20 2a 7a 54 65 78 74 29 7b 0a  t char *zText){.
33610 20 20 70 72 69 6e 74 66 28 22 5c 30 33 33 5b 31    printf("\033[1
33620 6d 25 73 5c 30 33 33 5b 30 6d 22 2c 20 7a 54 65  m%s\033[0m", zTe
33630 78 74 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  xt);.}.#endif../
33640 2a 0a 2a 2a 20 47 65 74 20 74 68 65 20 61 72 67  *.** Get the arg
33650 75 6d 65 6e 74 20 74 6f 20 61 6e 20 2d 2d 6f 70  ument to an --op
33660 74 69 6f 6e 2e 20 20 54 68 72 6f 77 20 61 6e 20  tion.  Throw an 
33670 65 72 72 6f 72 20 61 6e 64 20 64 69 65 20 69 66  error and die if
33680 20 6e 6f 20 61 72 67 75 6d 65 6e 74 0a 2a 2a 20   no argument.** 
33690 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2f  is available..*/
336a0 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 63 6d  .static char *cm
336b0 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c  dline_option_val
336c0 75 65 28 69 6e 74 20 61 72 67 63 2c 20 63 68 61  ue(int argc, cha
336d0 72 20 2a 2a 61 72 67 76 2c 20 69 6e 74 20 69 29  r **argv, int i)
336e0 7b 0a 20 20 69 66 28 20 69 3d 3d 61 72 67 63 20  {.  if( i==argc 
336f0 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  ){.    utf8_prin
33700 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 3a 20  tf(stderr, "%s: 
33710 45 72 72 6f 72 3a 20 6d 69 73 73 69 6e 67 20 61  Error: missing a
33720 72 67 75 6d 65 6e 74 20 74 6f 20 25 73 5c 6e 22  rgument to %s\n"
33730 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 72  ,.            ar
33740 67 76 5b 30 5d 2c 20 61 72 67 76 5b 61 72 67 63  gv[0], argv[argc
33750 2d 31 5d 29 3b 0a 20 20 20 20 65 78 69 74 28 31  -1]);.    exit(1
33760 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
33770 61 72 67 76 5b 69 5d 3b 0a 7d 0a 0a 23 69 66 6e  argv[i];.}..#ifn
33780 64 65 66 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c  def SQLITE_SHELL
33790 5f 49 53 5f 55 54 46 38 0a 23 20 20 69 66 20 28  _IS_UTF8.#  if (
337a0 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
337b0 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  || defined(WIN32
337c0 29 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 4d  )) && defined(_M
337d0 53 43 5f 56 45 52 29 0a 23 20 20 20 20 64 65 66  SC_VER).#    def
337e0 69 6e 65 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c  ine SQLITE_SHELL
337f0 5f 49 53 5f 55 54 46 38 20 20 20 20 20 20 20 20  _IS_UTF8        
33800 20 20 28 30 29 0a 23 20 20 65 6c 73 65 0a 23 20    (0).#  else.# 
33810 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
33820 5f 53 48 45 4c 4c 5f 49 53 5f 55 54 46 38 20 20  _SHELL_IS_UTF8  
33830 20 20 20 20 20 20 20 20 28 31 29 0a 23 20 20 65          (1).#  e
33840 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 23 69 66  ndif.#endif..#if
33850 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53   SQLITE_SHELL_IS
33860 5f 55 54 46 38 0a 69 6e 74 20 53 51 4c 49 54 45  _UTF8.int SQLITE
33870 5f 43 44 45 43 4c 20 6d 61 69 6e 28 69 6e 74 20  _CDECL main(int 
33880 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67  argc, char **arg
33890 76 29 7b 0a 23 65 6c 73 65 0a 69 6e 74 20 53 51  v){.#else.int SQ
338a0 4c 49 54 45 5f 43 44 45 43 4c 20 77 6d 61 69 6e  LITE_CDECL wmain
338b0 28 69 6e 74 20 61 72 67 63 2c 20 77 63 68 61 72  (int argc, wchar
338c0 5f 74 20 2a 2a 77 61 72 67 76 29 7b 0a 20 20 63  _t **wargv){.  c
338d0 68 61 72 20 2a 2a 61 72 67 76 3b 0a 23 65 6e 64  har **argv;.#end
338e0 69 66 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  if.  char *zErrM
338f0 73 67 20 3d 20 30 3b 0a 20 20 53 68 65 6c 6c 53  sg = 0;.  ShellS
33900 74 61 74 65 20 64 61 74 61 3b 0a 20 20 63 6f 6e  tate data;.  con
33910 73 74 20 63 68 61 72 20 2a 7a 49 6e 69 74 46 69  st char *zInitFi
33920 6c 65 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69 3b  le = 0;.  int i;
33930 0a 20 20 69 6e 74 20 72 63 20 3d 20 30 3b 0a 20  .  int rc = 0;. 
33940 20 69 6e 74 20 77 61 72 6e 49 6e 6d 65 6d 6f 72   int warnInmemor
33950 79 44 62 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72  yDb = 0;.  int r
33960 65 61 64 53 74 64 69 6e 20 3d 20 31 3b 0a 20 20  eadStdin = 1;.  
33970 69 6e 74 20 6e 43 6d 64 20 3d 20 30 3b 0a 20 20  int nCmd = 0;.  
33980 63 68 61 72 20 2a 2a 61 7a 43 6d 64 20 3d 20 30  char **azCmd = 0
33990 3b 0a 0a 20 20 73 65 74 42 69 6e 61 72 79 4d 6f  ;..  setBinaryMo
339a0 64 65 28 73 74 64 69 6e 2c 20 30 29 3b 0a 20 20  de(stdin, 0);.  
339b0 73 65 74 76 62 75 66 28 73 74 64 65 72 72 2c 20  setvbuf(stderr, 
339c0 30 2c 20 5f 49 4f 4e 42 46 2c 20 30 29 3b 20 2f  0, _IONBF, 0); /
339d0 2a 20 4d 61 6b 65 20 73 75 72 65 20 73 74 64 65  * Make sure stde
339e0 72 72 20 69 73 20 75 6e 62 75 66 66 65 72 65 64  rr is unbuffered
339f0 20 2a 2f 0a 20 20 73 74 64 69 6e 5f 69 73 5f 69   */.  stdin_is_i
33a00 6e 74 65 72 61 63 74 69 76 65 20 3d 20 69 73 61  nteractive = isa
33a10 74 74 79 28 30 29 3b 0a 20 20 73 74 64 6f 75 74  tty(0);.  stdout
33a20 5f 69 73 5f 63 6f 6e 73 6f 6c 65 20 3d 20 69 73  _is_console = is
33a30 61 74 74 79 28 31 29 3b 0a 0a 23 69 66 20 55 53  atty(1);..#if US
33a40 45 5f 53 59 53 54 45 4d 5f 53 51 4c 49 54 45 2b  E_SYSTEM_SQLITE+
33a50 30 21 3d 31 0a 20 20 69 66 28 20 73 74 72 6e 63  0!=1.  if( strnc
33a60 6d 70 28 73 71 6c 69 74 65 33 5f 73 6f 75 72 63  mp(sqlite3_sourc
33a70 65 69 64 28 29 2c 53 51 4c 49 54 45 5f 53 4f 55  eid(),SQLITE_SOU
33a80 52 43 45 5f 49 44 2c 36 30 29 21 3d 30 20 29 7b  RCE_ID,60)!=0 ){
33a90 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
33aa0 28 73 74 64 65 72 72 2c 20 22 53 51 4c 69 74 65  (stderr, "SQLite
33ab0 20 68 65 61 64 65 72 20 61 6e 64 20 73 6f 75 72   header and sour
33ac0 63 65 20 76 65 72 73 69 6f 6e 20 6d 69 73 6d 61  ce version misma
33ad0 74 63 68 5c 6e 25 73 5c 6e 25 73 5c 6e 22 2c 0a  tch\n%s\n%s\n",.
33ae0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
33af0 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 20  te3_sourceid(), 
33b00 53 51 4c 49 54 45 5f 53 4f 55 52 43 45 5f 49 44  SQLITE_SOURCE_ID
33b10 29 3b 0a 20 20 20 20 65 78 69 74 28 31 29 3b 0a  );.    exit(1);.
33b20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 6d 61 69    }.#endif.  mai
33b30 6e 5f 69 6e 69 74 28 26 64 61 74 61 29 3b 0a 23  n_init(&data);.#
33b40 69 66 20 21 53 51 4c 49 54 45 5f 53 48 45 4c 4c  if !SQLITE_SHELL
33b50 5f 49 53 5f 55 54 46 38 0a 20 20 73 71 6c 69 74  _IS_UTF8.  sqlit
33b60 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 3b  e3_initialize();
33b70 0a 20 20 61 72 67 76 20 3d 20 73 71 6c 69 74 65  .  argv = sqlite
33b80 33 5f 6d 61 6c 6c 6f 63 36 34 28 73 69 7a 65 6f  3_malloc64(sizeo
33b90 66 28 61 72 67 76 5b 30 5d 29 2a 61 72 67 63 29  f(argv[0])*argc)
33ba0 3b 0a 20 20 69 66 28 20 61 72 67 76 3d 3d 30 20  ;.  if( argv==0 
33bb0 29 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74  ){.    raw_print
33bc0 66 28 73 74 64 65 72 72 2c 20 22 6f 75 74 20 6f  f(stderr, "out o
33bd0 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20  f memory\n");.  
33be0 20 20 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a 20    exit(1);.  }. 
33bf0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63   for(i=0; i<argc
33c00 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 72 67 76  ; i++){.    argv
33c10 5b 69 5d 20 3d 20 73 71 6c 69 74 65 33 5f 77 69  [i] = sqlite3_wi
33c20 6e 33 32 5f 75 6e 69 63 6f 64 65 5f 74 6f 5f 75  n32_unicode_to_u
33c30 74 66 38 28 77 61 72 67 76 5b 69 5d 29 3b 0a 20  tf8(wargv[i]);. 
33c40 20 20 20 69 66 28 20 61 72 67 76 5b 69 5d 3d 3d     if( argv[i]==
33c50 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  0 ){.      raw_p
33c60 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6f  rintf(stderr, "o
33c70 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29  ut of memory\n")
33c80 3b 0a 20 20 20 20 20 20 65 78 69 74 28 31 29 3b  ;.      exit(1);
33c90 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
33ca0 66 0a 20 20 61 73 73 65 72 74 28 20 61 72 67 63  f.  assert( argc
33cb0 3e 3d 31 20 26 26 20 61 72 67 76 20 26 26 20 61  >=1 && argv && a
33cc0 72 67 76 5b 30 5d 20 29 3b 0a 20 20 41 72 67 76  rgv[0] );.  Argv
33cd0 30 20 3d 20 61 72 67 76 5b 30 5d 3b 0a 0a 20 20  0 = argv[0];..  
33ce0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 77 65 20  /* Make sure we 
33cf0 68 61 76 65 20 61 20 76 61 6c 69 64 20 73 69 67  have a valid sig
33d00 6e 61 6c 20 68 61 6e 64 6c 65 72 20 65 61 72 6c  nal handler earl
33d10 79 2c 20 62 65 66 6f 72 65 20 61 6e 79 74 68 69  y, before anythi
33d20 6e 67 0a 20 20 2a 2a 20 65 6c 73 65 20 69 73 20  ng.  ** else is 
33d30 64 6f 6e 65 2e 0a 20 20 2a 2f 0a 23 69 66 64 65  done..  */.#ifde
33d40 66 20 53 49 47 49 4e 54 0a 20 20 73 69 67 6e 61  f SIGINT.  signa
33d50 6c 28 53 49 47 49 4e 54 2c 20 69 6e 74 65 72 72  l(SIGINT, interr
33d60 75 70 74 5f 68 61 6e 64 6c 65 72 29 3b 0a 23 65  upt_handler);.#e
33d70 6c 69 66 20 28 64 65 66 69 6e 65 64 28 5f 57 49  lif (defined(_WI
33d80 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  N32) || defined(
33d90 57 49 4e 33 32 29 29 20 26 26 20 21 64 65 66 69  WIN32)) && !defi
33da0 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a  ned(_WIN32_WCE).
33db0 20 20 53 65 74 43 6f 6e 73 6f 6c 65 43 74 72 6c    SetConsoleCtrl
33dc0 48 61 6e 64 6c 65 72 28 43 6f 6e 73 6f 6c 65 43  Handler(ConsoleC
33dd0 74 72 6c 48 61 6e 64 6c 65 72 2c 20 54 52 55 45  trlHandler, TRUE
33de0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
33df0 66 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 44  f SQLITE_SHELL_D
33e00 42 4e 41 4d 45 5f 50 52 4f 43 0a 20 20 7b 0a 20  BNAME_PROC.  {. 
33e10 20 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c     /* If the SQL
33e20 49 54 45 5f 53 48 45 4c 4c 5f 44 42 4e 41 4d 45  ITE_SHELL_DBNAME
33e30 5f 50 52 4f 43 20 6d 61 63 72 6f 20 69 73 20 64  _PROC macro is d
33e40 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 69 74 20  efined, then it 
33e50 69 73 20 74 68 65 20 6e 61 6d 65 0a 20 20 20 20  is the name.    
33e60 2a 2a 20 6f 66 20 61 20 43 2d 66 75 6e 63 74 69  ** of a C-functi
33e70 6f 6e 20 74 68 61 74 20 77 69 6c 6c 20 70 72 6f  on that will pro
33e80 76 69 64 65 20 74 68 65 20 6e 61 6d 65 20 6f 66  vide the name of
33e90 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
33ea0 6c 65 2e 20 20 55 73 65 0a 20 20 20 20 2a 2a 20  le.  Use.    ** 
33eb0 74 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  this compile-tim
33ec0 65 20 6f 70 74 69 6f 6e 20 74 6f 20 65 6d 62 65  e option to embe
33ed0 64 20 74 68 69 73 20 73 68 65 6c 6c 20 70 72 6f  d this shell pro
33ee0 67 72 61 6d 20 69 6e 20 6c 61 72 67 65 72 0a 20  gram in larger. 
33ef0 20 20 20 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f     ** applicatio
33f00 6e 73 2e 20 2a 2f 0a 20 20 20 20 65 78 74 65 72  ns. */.    exter
33f10 6e 20 76 6f 69 64 20 53 51 4c 49 54 45 5f 53 48  n void SQLITE_SH
33f20 45 4c 4c 5f 44 42 4e 41 4d 45 5f 50 52 4f 43 28  ELL_DBNAME_PROC(
33f30 63 6f 6e 73 74 20 63 68 61 72 2a 2a 29 3b 0a 20  const char**);. 
33f40 20 20 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f     SQLITE_SHELL_
33f50 44 42 4e 41 4d 45 5f 50 52 4f 43 28 26 64 61 74  DBNAME_PROC(&dat
33f60 61 2e 7a 44 62 46 69 6c 65 6e 61 6d 65 29 3b 0a  a.zDbFilename);.
33f70 20 20 20 20 77 61 72 6e 49 6e 6d 65 6d 6f 72 79      warnInmemory
33f80 44 62 20 3d 20 30 3b 0a 20 20 7d 0a 23 65 6e 64  Db = 0;.  }.#end
33f90 69 66 0a 0a 20 20 2f 2a 20 44 6f 20 61 6e 20 69  if..  /* Do an i
33fa0 6e 69 74 69 61 6c 20 70 61 73 73 20 74 68 72 6f  nitial pass thro
33fb0 75 67 68 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d  ugh the command-
33fc0 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  line argument to
33fd0 20 6c 6f 63 61 74 65 0a 20 20 2a 2a 20 74 68 65   locate.  ** the
33fe0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74   name of the dat
33ff0 61 62 61 73 65 20 66 69 6c 65 2c 20 74 68 65 20  abase file, the 
34000 6e 61 6d 65 20 6f 66 20 74 68 65 20 69 6e 69 74  name of the init
34010 69 61 6c 69 7a 61 74 69 6f 6e 20 66 69 6c 65 2c  ialization file,
34020 0a 20 20 2a 2a 20 74 68 65 20 73 69 7a 65 20 6f  .  ** the size o
34030 66 20 74 68 65 20 61 6c 74 65 72 6e 61 74 69 76  f the alternativ
34040 65 20 6d 61 6c 6c 6f 63 20 68 65 61 70 2c 0a 20  e malloc heap,. 
34050 20 2a 2a 20 61 6e 64 20 74 68 65 20 66 69 72 73   ** and the firs
34060 74 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 78 65  t command to exe
34070 63 75 74 65 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72  cute..  */.  for
34080 28 69 3d 31 3b 20 69 3c 61 72 67 63 3b 20 69 2b  (i=1; i<argc; i+
34090 2b 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 3b  +){.    char *z;
340a0 0a 20 20 20 20 7a 20 3d 20 61 72 67 76 5b 69 5d  .    z = argv[i]
340b0 3b 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d 21 3d  ;.    if( z[0]!=
340c0 27 2d 27 20 29 7b 0a 20 20 20 20 20 20 69 66 28  '-' ){.      if(
340d0 20 64 61 74 61 2e 7a 44 62 46 69 6c 65 6e 61 6d   data.zDbFilenam
340e0 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  e==0 ){.        
340f0 64 61 74 61 2e 7a 44 62 46 69 6c 65 6e 61 6d 65  data.zDbFilename
34100 20 3d 20 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = z;.      }els
34110 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 45 78  e{.        /* Ex
34120 63 65 73 73 73 20 61 72 67 75 6d 65 6e 74 73 20  cesss arguments 
34130 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20  are interpreted 
34140 61 73 20 53 51 4c 20 28 6f 72 20 64 6f 74 2d 63  as SQL (or dot-c
34150 6f 6d 6d 61 6e 64 73 29 20 61 6e 64 0a 20 20 20  ommands) and.   
34160 20 20 20 20 20 2a 2a 20 6d 65 61 6e 20 74 68 61       ** mean tha
34170 74 20 6e 6f 74 68 69 6e 67 20 69 73 20 72 65 61  t nothing is rea
34180 64 20 66 72 6f 6d 20 73 74 64 69 6e 20 2a 2f 0a  d from stdin */.
34190 20 20 20 20 20 20 20 20 72 65 61 64 53 74 64 69          readStdi
341a0 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 6e  n = 0;.        n
341b0 43 6d 64 2b 2b 3b 0a 20 20 20 20 20 20 20 20 61  Cmd++;.        a
341c0 7a 43 6d 64 20 3d 20 72 65 61 6c 6c 6f 63 28 61  zCmd = realloc(a
341d0 7a 43 6d 64 2c 20 73 69 7a 65 6f 66 28 61 7a 43  zCmd, sizeof(azC
341e0 6d 64 5b 30 5d 29 2a 6e 43 6d 64 29 3b 0a 20 20  md[0])*nCmd);.  
341f0 20 20 20 20 20 20 69 66 28 20 61 7a 43 6d 64 3d        if( azCmd=
34200 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
34210 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
34220 72 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  r, "out of memor
34230 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20  y\n");.         
34240 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20 20   exit(1);.      
34250 20 20 7d 0a 20 20 20 20 20 20 20 20 61 7a 43 6d    }.        azCm
34260 64 5b 6e 43 6d 64 2d 31 5d 20 3d 20 7a 3b 0a 20  d[nCmd-1] = z;. 
34270 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
34280 20 69 66 28 20 7a 5b 31 5d 3d 3d 27 2d 27 20 29   if( z[1]=='-' )
34290 20 7a 2b 2b 3b 0a 20 20 20 20 69 66 28 20 73 74   z++;.    if( st
342a0 72 63 6d 70 28 7a 2c 22 2d 73 65 70 61 72 61 74  rcmp(z,"-separat
342b0 6f 72 22 29 3d 3d 30 0a 20 20 20 20 20 7c 7c 20  or")==0.     || 
342c0 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 75 6c 6c 76  strcmp(z,"-nullv
342d0 61 6c 75 65 22 29 3d 3d 30 0a 20 20 20 20 20 7c  alue")==0.     |
342e0 7c 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 65 77  | strcmp(z,"-new
342f0 6c 69 6e 65 22 29 3d 3d 30 0a 20 20 20 20 20 7c  line")==0.     |
34300 7c 20 73 74 72 63 6d 70 28 7a 2c 22 2d 63 6d 64  | strcmp(z,"-cmd
34310 22 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20  ")==0.    ){.   
34320 20 20 20 28 76 6f 69 64 29 63 6d 64 6c 69 6e 65     (void)cmdline
34330 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72  _option_value(ar
34340 67 63 2c 20 61 72 67 76 2c 20 2b 2b 69 29 3b 0a  gc, argv, ++i);.
34350 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
34360 72 63 6d 70 28 7a 2c 22 2d 69 6e 69 74 22 29 3d  rcmp(z,"-init")=
34370 3d 30 20 29 7b 0a 20 20 20 20 20 20 7a 49 6e 69  =0 ){.      zIni
34380 74 46 69 6c 65 20 3d 20 63 6d 64 6c 69 6e 65 5f  tFile = cmdline_
34390 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67  option_value(arg
343a0 63 2c 20 61 72 67 76 2c 20 2b 2b 69 29 3b 0a 20  c, argv, ++i);. 
343b0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
343c0 63 6d 70 28 7a 2c 22 2d 62 61 74 63 68 22 29 3d  cmp(z,"-batch")=
343d0 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4e  =0 ){.      /* N
343e0 65 65 64 20 74 6f 20 63 68 65 63 6b 20 66 6f 72  eed to check for
343f0 20 62 61 74 63 68 20 6d 6f 64 65 20 68 65 72 65   batch mode here
34400 20 74 6f 20 73 6f 20 77 65 20 63 61 6e 20 61 76   to so we can av
34410 6f 69 64 20 70 72 69 6e 74 69 6e 67 0a 20 20 20  oid printing.   
34420 20 20 20 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f     ** informatio
34430 6e 61 6c 20 6d 65 73 73 61 67 65 73 20 28 6c 69  nal messages (li
34440 6b 65 20 66 72 6f 6d 20 70 72 6f 63 65 73 73 5f  ke from process_
34450 73 71 6c 69 74 65 72 63 29 20 62 65 66 6f 72 65  sqliterc) before
34460 0a 20 20 20 20 20 20 2a 2a 20 77 65 20 64 6f 20  .      ** we do 
34470 74 68 65 20 61 63 74 75 61 6c 20 70 72 6f 63 65  the actual proce
34480 73 73 69 6e 67 20 6f 66 20 61 72 67 75 6d 65 6e  ssing of argumen
34490 74 73 20 6c 61 74 65 72 20 69 6e 20 61 20 73 65  ts later in a se
344a0 63 6f 6e 64 20 70 61 73 73 2e 0a 20 20 20 20 20  cond pass..     
344b0 20 2a 2f 0a 20 20 20 20 20 20 73 74 64 69 6e 5f   */.      stdin_
344c0 69 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20 3d  is_interactive =
344d0 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   0;.    }else if
344e0 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 68 65 61  ( strcmp(z,"-hea
344f0 70 22 29 3d 3d 30 20 29 7b 0a 23 69 66 20 64 65  p")==0 ){.#if de
34500 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
34510 42 4c 45 5f 4d 45 4d 53 59 53 33 29 20 7c 7c 20  BLE_MEMSYS3) || 
34520 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
34530 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 29 0a 20  NABLE_MEMSYS5). 
34540 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
34550 2a 7a 53 69 7a 65 3b 0a 20 20 20 20 20 20 73 71  *zSize;.      sq
34560 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 48 65  lite3_int64 szHe
34570 61 70 3b 0a 0a 20 20 20 20 20 20 7a 53 69 7a 65  ap;..      zSize
34580 20 3d 20 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f   = cmdline_optio
34590 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 20 61 72  n_value(argc, ar
345a0 67 76 2c 20 2b 2b 69 29 3b 0a 20 20 20 20 20 20  gv, ++i);.      
345b0 73 7a 48 65 61 70 20 3d 20 69 6e 74 65 67 65 72  szHeap = integer
345c0 56 61 6c 75 65 28 7a 53 69 7a 65 29 3b 0a 20 20  Value(zSize);.  
345d0 20 20 20 20 69 66 28 20 73 7a 48 65 61 70 3e 30      if( szHeap>0
345e0 78 37 66 66 66 30 30 30 30 20 29 20 73 7a 48 65  x7fff0000 ) szHe
345f0 61 70 20 3d 20 30 78 37 66 66 66 30 30 30 30 3b  ap = 0x7fff0000;
34600 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63  .      sqlite3_c
34610 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e  onfig(SQLITE_CON
34620 46 49 47 5f 48 45 41 50 2c 20 6d 61 6c 6c 6f 63  FIG_HEAP, malloc
34630 28 28 69 6e 74 29 73 7a 48 65 61 70 29 2c 20 28  ((int)szHeap), (
34640 69 6e 74 29 73 7a 48 65 61 70 2c 20 36 34 29 3b  int)szHeap, 64);
34650 0a 23 65 6c 73 65 0a 20 20 20 20 20 20 28 76 6f  .#else.      (vo
34660 69 64 29 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f  id)cmdline_optio
34670 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 20 61 72  n_value(argc, ar
34680 67 76 2c 20 2b 2b 69 29 3b 0a 23 65 6e 64 69 66  gv, ++i);.#endif
34690 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
346a0 74 72 63 6d 70 28 7a 2c 22 2d 70 61 67 65 63 61  trcmp(z,"-pageca
346b0 63 68 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  che")==0 ){.    
346c0 20 20 69 6e 74 20 6e 2c 20 73 7a 3b 0a 20 20 20    int n, sz;.   
346d0 20 20 20 73 7a 20 3d 20 28 69 6e 74 29 69 6e 74     sz = (int)int
346e0 65 67 65 72 56 61 6c 75 65 28 63 6d 64 6c 69 6e  egerValue(cmdlin
346f0 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61  e_option_value(a
34700 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a  rgc,argv,++i));.
34710 20 20 20 20 20 20 69 66 28 20 73 7a 3e 37 30 30        if( sz>700
34720 30 30 20 29 20 73 7a 20 3d 20 37 30 30 30 30 3b  00 ) sz = 70000;
34730 0a 20 20 20 20 20 20 69 66 28 20 73 7a 3c 30 20  .      if( sz<0 
34740 29 20 73 7a 20 3d 20 30 3b 0a 20 20 20 20 20 20  ) sz = 0;.      
34750 6e 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72  n = (int)integer
34760 56 61 6c 75 65 28 63 6d 64 6c 69 6e 65 5f 6f 70  Value(cmdline_op
34770 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c  tion_value(argc,
34780 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20  argv,++i));.    
34790 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67    sqlite3_config
347a0 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 50  (SQLITE_CONFIG_P
347b0 41 47 45 43 41 43 48 45 2c 0a 20 20 20 20 20 20  AGECACHE,.      
347c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e                (n
347d0 3e 30 20 26 26 20 73 7a 3e 30 29 20 3f 20 6d 61  >0 && sz>0) ? ma
347e0 6c 6c 6f 63 28 6e 2a 73 7a 29 20 3a 20 30 2c 20  lloc(n*sz) : 0, 
347f0 73 7a 2c 20 6e 29 3b 0a 20 20 20 20 20 20 64 61  sz, n);.      da
34800 74 61 2e 73 68 65 6c 6c 46 6c 67 73 20 7c 3d 20  ta.shellFlgs |= 
34810 53 48 46 4c 47 5f 50 61 67 65 63 61 63 68 65 3b  SHFLG_Pagecache;
34820 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
34830 74 72 63 6d 70 28 7a 2c 22 2d 6c 6f 6f 6b 61 73  trcmp(z,"-lookas
34840 69 64 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ide")==0 ){.    
34850 20 20 69 6e 74 20 6e 2c 20 73 7a 3b 0a 20 20 20    int n, sz;.   
34860 20 20 20 73 7a 20 3d 20 28 69 6e 74 29 69 6e 74     sz = (int)int
34870 65 67 65 72 56 61 6c 75 65 28 63 6d 64 6c 69 6e  egerValue(cmdlin
34880 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61  e_option_value(a
34890 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a  rgc,argv,++i));.
348a0 20 20 20 20 20 20 69 66 28 20 73 7a 3c 30 20 29        if( sz<0 )
348b0 20 73 7a 20 3d 20 30 3b 0a 20 20 20 20 20 20 6e   sz = 0;.      n
348c0 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56   = (int)integerV
348d0 61 6c 75 65 28 63 6d 64 6c 69 6e 65 5f 6f 70 74  alue(cmdline_opt
348e0 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61  ion_value(argc,a
348f0 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20  rgv,++i));.     
34900 20 69 66 28 20 6e 3c 30 20 29 20 6e 20 3d 20 30   if( n<0 ) n = 0
34910 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
34920 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f  config(SQLITE_CO
34930 4e 46 49 47 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20  NFIG_LOOKASIDE, 
34940 73 7a 2c 20 6e 29 3b 0a 20 20 20 20 20 20 69 66  sz, n);.      if
34950 28 20 73 7a 2a 6e 3d 3d 30 20 29 20 64 61 74 61  ( sz*n==0 ) data
34960 2e 73 68 65 6c 6c 46 6c 67 73 20 26 3d 20 7e 53  .shellFlgs &= ~S
34970 48 46 4c 47 5f 4c 6f 6f 6b 61 73 69 64 65 3b 0a  HFLG_Lookaside;.
34980 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
34990 41 42 4c 45 5f 56 46 53 54 52 41 43 45 0a 20 20  ABLE_VFSTRACE.  
349a0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
349b0 6d 70 28 7a 2c 22 2d 76 66 73 74 72 61 63 65 22  mp(z,"-vfstrace"
349c0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 65 78  )==0 ){.      ex
349d0 74 65 72 6e 20 69 6e 74 20 76 66 73 74 72 61 63  tern int vfstrac
349e0 65 5f 72 65 67 69 73 74 65 72 28 0a 20 20 20 20  e_register(.    
349f0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
34a00 2a 7a 54 72 61 63 65 4e 61 6d 65 2c 0a 20 20 20  *zTraceName,.   
34a10 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
34a20 20 2a 7a 4f 6c 64 56 66 73 4e 61 6d 65 2c 0a 20   *zOldVfsName,. 
34a30 20 20 20 20 20 20 20 20 69 6e 74 20 28 2a 78 4f          int (*xO
34a40 75 74 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ut)(const char*,
34a50 76 6f 69 64 2a 29 2c 0a 20 20 20 20 20 20 20 20  void*),.        
34a60 20 76 6f 69 64 20 2a 70 4f 75 74 41 72 67 2c 0a   void *pOutArg,.
34a70 20 20 20 20 20 20 20 20 20 69 6e 74 20 6d 61 6b           int mak
34a80 65 44 65 66 61 75 6c 74 0a 20 20 20 20 20 20 29  eDefault.      )
34a90 3b 0a 20 20 20 20 20 20 76 66 73 74 72 61 63 65  ;.      vfstrace
34aa0 5f 72 65 67 69 73 74 65 72 28 22 74 72 61 63 65  _register("trace
34ab0 22 2c 30 2c 28 69 6e 74 28 2a 29 28 63 6f 6e 73  ",0,(int(*)(cons
34ac0 74 20 63 68 61 72 2a 2c 76 6f 69 64 2a 29 29 66  t char*,void*))f
34ad0 70 75 74 73 2c 73 74 64 65 72 72 2c 31 29 3b 0a  puts,stderr,1);.
34ae0 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
34af0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54  LITE_ENABLE_MULT
34b00 49 50 4c 45 58 0a 20 20 20 20 7d 65 6c 73 65 20  IPLEX.    }else 
34b10 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6d  if( strcmp(z,"-m
34b20 75 6c 74 69 70 6c 65 78 22 29 3d 3d 30 20 29 7b  ultiplex")==0 ){
34b30 0a 20 20 20 20 20 20 65 78 74 65 72 6e 20 69 6e  .      extern in
34b40 74 20 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70  t sqlite3_multip
34b50 6c 65 5f 69 6e 69 74 69 61 6c 69 7a 65 28 63 6f  le_initialize(co
34b60 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
34b70 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75        sqlite3_mu
34b80 6c 74 69 70 6c 65 78 5f 69 6e 69 74 69 61 6c 69  ltiplex_initiali
34b90 7a 65 28 30 2c 20 31 29 3b 0a 23 65 6e 64 69 66  ze(0, 1);.#endif
34ba0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
34bb0 74 72 63 6d 70 28 7a 2c 22 2d 6d 6d 61 70 22 29  trcmp(z,"-mmap")
34bc0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
34bd0 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 20 3d 20  ite3_int64 sz = 
34be0 69 6e 74 65 67 65 72 56 61 6c 75 65 28 63 6d 64  integerValue(cmd
34bf0 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75  line_option_valu
34c00 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29  e(argc,argv,++i)
34c10 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
34c20 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43  _config(SQLITE_C
34c30 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53 49 5a 45 2c  ONFIG_MMAP_SIZE,
34c40 20 73 7a 2c 20 73 7a 29 3b 0a 20 20 20 20 7d 65   sz, sz);.    }e
34c50 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
34c60 2c 22 2d 76 66 73 22 29 3d 3d 30 20 29 7b 0a 20  ,"-vfs")==0 ){. 
34c70 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73       sqlite3_vfs
34c80 20 2a 70 56 66 73 20 3d 20 73 71 6c 69 74 65 33   *pVfs = sqlite3
34c90 5f 76 66 73 5f 66 69 6e 64 28 63 6d 64 6c 69 6e  _vfs_find(cmdlin
34ca0 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61  e_option_value(a
34cb0 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a  rgc,argv,++i));.
34cc0 20 20 20 20 20 20 69 66 28 20 70 56 66 73 20 29        if( pVfs )
34cd0 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
34ce0 33 5f 76 66 73 5f 72 65 67 69 73 74 65 72 28 70  3_vfs_register(p
34cf0 56 66 73 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d  Vfs, 1);.      }
34d00 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 75 74  else{.        ut
34d10 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
34d20 2c 20 22 6e 6f 20 73 75 63 68 20 56 46 53 3a 20  , "no such VFS: 
34d30 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 72 67 76 5b  \"%s\"\n", argv[
34d40 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 65 78 69  i]);.        exi
34d50 74 28 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  t(1);.      }.  
34d60 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 64 61    }.  }.  if( da
34d70 74 61 2e 7a 44 62 46 69 6c 65 6e 61 6d 65 3d 3d  ta.zDbFilename==
34d80 30 20 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c  0 ){.#ifndef SQL
34d90 49 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44  ITE_OMIT_MEMORYD
34da0 42 0a 20 20 20 20 64 61 74 61 2e 7a 44 62 46 69  B.    data.zDbFi
34db0 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72  lename = ":memor
34dc0 79 3a 22 3b 0a 20 20 20 20 77 61 72 6e 49 6e 6d  y:";.    warnInm
34dd0 65 6d 6f 72 79 44 62 20 3d 20 61 72 67 63 3d 3d  emoryDb = argc==
34de0 31 3b 0a 23 65 6c 73 65 0a 20 20 20 20 75 74 66  1;.#else.    utf
34df0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
34e00 22 25 73 3a 20 45 72 72 6f 72 3a 20 6e 6f 20 64  "%s: Error: no d
34e10 61 74 61 62 61 73 65 20 66 69 6c 65 6e 61 6d 65  atabase filename
34e20 20 73 70 65 63 69 66 69 65 64 5c 6e 22 2c 20 41   specified\n", A
34e30 72 67 76 30 29 3b 0a 20 20 20 20 72 65 74 75 72  rgv0);.    retur
34e40 6e 20 31 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a  n 1;.#endif.  }.
34e50 20 20 64 61 74 61 2e 6f 75 74 20 3d 20 73 74 64    data.out = std
34e60 6f 75 74 3b 0a 0a 20 20 2f 2a 20 47 6f 20 61 68  out;..  /* Go ah
34e70 65 61 64 20 61 6e 64 20 6f 70 65 6e 20 74 68 65  ead and open the
34e80 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
34e90 66 20 69 74 20 61 6c 72 65 61 64 79 20 65 78 69  f it already exi
34ea0 73 74 73 2e 20 20 49 66 20 74 68 65 0a 20 20 2a  sts.  If the.  *
34eb0 2a 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20  * file does not 
34ec0 65 78 69 73 74 2c 20 64 65 6c 61 79 20 6f 70 65  exist, delay ope
34ed0 6e 69 6e 67 20 69 74 2e 20 20 54 68 69 73 20 70  ning it.  This p
34ee0 72 65 76 65 6e 74 73 20 65 6d 70 74 79 20 64 61  revents empty da
34ef0 74 61 62 61 73 65 0a 20 20 2a 2a 20 66 69 6c 65  tabase.  ** file
34f00 73 20 66 72 6f 6d 20 62 65 69 6e 67 20 63 72 65  s from being cre
34f10 61 74 65 64 20 69 66 20 61 20 75 73 65 72 20 6d  ated if a user m
34f20 69 73 74 79 70 65 73 20 74 68 65 20 64 61 74 61  istypes the data
34f30 62 61 73 65 20 6e 61 6d 65 20 61 72 67 75 6d 65  base name argume
34f40 6e 74 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 73  nt.  ** to the s
34f50 71 6c 69 74 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69  qlite command-li
34f60 6e 65 20 74 6f 6f 6c 2e 0a 20 20 2a 2f 0a 20 20  ne tool..  */.  
34f70 69 66 28 20 61 63 63 65 73 73 28 64 61 74 61 2e  if( access(data.
34f80 7a 44 62 46 69 6c 65 6e 61 6d 65 2c 20 30 29 3d  zDbFilename, 0)=
34f90 3d 30 20 29 7b 0a 20 20 20 20 6f 70 65 6e 5f 64  =0 ){.    open_d
34fa0 62 28 26 64 61 74 61 2c 20 30 29 3b 0a 20 20 7d  b(&data, 0);.  }
34fb0 0a 0a 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 74  ..  /* Process t
34fc0 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
34fd0 6e 20 66 69 6c 65 20 69 66 20 74 68 65 72 65 20  n file if there 
34fe0 69 73 20 6f 6e 65 2e 20 20 49 66 20 6e 6f 20 2d  is one.  If no -
34ff0 69 6e 69 74 20 6f 70 74 69 6f 6e 0a 20 20 2a 2a  init option.  **
35000 20 69 73 20 67 69 76 65 6e 20 6f 6e 20 74 68 65   is given on the
35010 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 6c   command line, l
35020 6f 6f 6b 20 66 6f 72 20 61 20 66 69 6c 65 20 6e  ook for a file n
35030 61 6d 65 64 20 7e 2f 2e 73 71 6c 69 74 65 72 63  amed ~/.sqliterc
35040 20 61 6e 64 0a 20 20 2a 2a 20 74 72 79 20 74 6f   and.  ** try to
35050 20 70 72 6f 63 65 73 73 20 69 74 2e 0a 20 20 2a   process it..  *
35060 2f 0a 20 20 70 72 6f 63 65 73 73 5f 73 71 6c 69  /.  process_sqli
35070 74 65 72 63 28 26 64 61 74 61 2c 7a 49 6e 69 74  terc(&data,zInit
35080 46 69 6c 65 29 3b 0a 0a 20 20 2f 2a 20 4d 61 6b  File);..  /* Mak
35090 65 20 61 20 73 65 63 6f 6e 64 20 70 61 73 73 20  e a second pass 
350a0 74 68 72 6f 75 67 68 20 74 68 65 20 63 6f 6d 6d  through the comm
350b0 61 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d 65 6e  and-line argumen
350c0 74 20 61 6e 64 20 73 65 74 0a 20 20 2a 2a 20 6f  t and set.  ** o
350d0 70 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 73 65  ptions.  This se
350e0 63 6f 6e 64 20 70 61 73 73 20 69 73 20 64 65 6c  cond pass is del
350f0 61 79 65 64 20 75 6e 74 69 6c 20 61 66 74 65 72  ayed until after
35100 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
35110 69 6f 6e 0a 20 20 2a 2a 20 66 69 6c 65 20 69 73  ion.  ** file is
35120 20 70 72 6f 63 65 73 73 65 64 20 73 6f 20 74 68   processed so th
35130 61 74 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  at the command-l
35140 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 20 77 69  ine arguments wi
35150 6c 6c 20 6f 76 65 72 72 69 64 65 0a 20 20 2a 2a  ll override.  **
35160 20 73 65 74 74 69 6e 67 73 20 69 6e 20 74 68 65   settings in the
35170 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
35180 66 69 6c 65 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72  file..  */.  for
35190 28 69 3d 31 3b 20 69 3c 61 72 67 63 3b 20 69 2b  (i=1; i<argc; i+
351a0 2b 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 20  +){.    char *z 
351b0 3d 20 61 72 67 76 5b 69 5d 3b 0a 20 20 20 20 69  = argv[i];.    i
351c0 66 28 20 7a 5b 30 5d 21 3d 27 2d 27 20 29 20 63  f( z[0]!='-' ) c
351d0 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 69 66 28  ontinue;.    if(
351e0 20 7a 5b 31 5d 3d 3d 27 2d 27 20 29 7b 20 7a 2b   z[1]=='-' ){ z+
351f0 2b 3b 20 7d 0a 20 20 20 20 69 66 28 20 73 74 72  +; }.    if( str
35200 63 6d 70 28 7a 2c 22 2d 69 6e 69 74 22 29 3d 3d  cmp(z,"-init")==
35210 30 20 29 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a  0 ){.      i++;.
35220 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
35230 72 63 6d 70 28 7a 2c 22 2d 68 74 6d 6c 22 29 3d  rcmp(z,"-html")=
35240 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61  =0 ){.      data
35250 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 48 74 6d  .mode = MODE_Htm
35260 6c 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  l;.    }else if(
35270 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6c 69 73 74   strcmp(z,"-list
35280 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64  ")==0 ){.      d
35290 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f  ata.mode = MODE_
352a0 4c 69 73 74 3b 0a 20 20 20 20 7d 65 6c 73 65 20  List;.    }else 
352b0 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 71  if( strcmp(z,"-q
352c0 75 6f 74 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  uote")==0 ){.   
352d0 20 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d     data.mode = M
352e0 4f 44 45 5f 51 75 6f 74 65 3b 0a 20 20 20 20 7d  ODE_Quote;.    }
352f0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
35300 7a 2c 22 2d 6c 69 6e 65 22 29 3d 3d 30 20 29 7b  z,"-line")==0 ){
35310 0a 20 20 20 20 20 20 64 61 74 61 2e 6d 6f 64 65  .      data.mode
35320 20 3d 20 4d 4f 44 45 5f 4c 69 6e 65 3b 0a 20 20   = MODE_Line;.  
35330 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
35340 6d 70 28 7a 2c 22 2d 63 6f 6c 75 6d 6e 22 29 3d  mp(z,"-column")=
35350 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61  =0 ){.      data
35360 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 43 6f 6c  .mode = MODE_Col
35370 75 6d 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  umn;.    }else i
35380 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 63 73  f( strcmp(z,"-cs
35390 76 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  v")==0 ){.      
353a0 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45  data.mode = MODE
353b0 5f 43 73 76 3b 0a 20 20 20 20 20 20 6d 65 6d 63  _Csv;.      memc
353c0 70 79 28 64 61 74 61 2e 63 6f 6c 53 65 70 61 72  py(data.colSepar
353d0 61 74 6f 72 2c 22 2c 22 2c 32 29 3b 0a 20 20 20  ator,",",2);.   
353e0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
353f0 70 28 7a 2c 22 2d 61 73 63 69 69 22 29 3d 3d 30  p(z,"-ascii")==0
35400 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 6d   ){.      data.m
35410 6f 64 65 20 3d 20 4d 4f 44 45 5f 41 73 63 69 69  ode = MODE_Ascii
35420 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
35430 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28  snprintf(sizeof(
35440 64 61 74 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f  data.colSeparato
35450 72 29 2c 20 64 61 74 61 2e 63 6f 6c 53 65 70 61  r), data.colSepa
35460 72 61 74 6f 72 2c 0a 20 20 20 20 20 20 20 20 20  rator,.         
35470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 45                SE
35480 50 5f 55 6e 69 74 29 3b 0a 20 20 20 20 20 20 73  P_Unit);.      s
35490 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
354a0 73 69 7a 65 6f 66 28 64 61 74 61 2e 72 6f 77 53  sizeof(data.rowS
354b0 65 70 61 72 61 74 6f 72 29 2c 20 64 61 74 61 2e  eparator), data.
354c0 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 0a 20 20  rowSeparator,.  
354d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354e0 20 20 20 20 20 53 45 50 5f 52 65 63 6f 72 64 29       SEP_Record)
354f0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
35500 73 74 72 63 6d 70 28 7a 2c 22 2d 73 65 70 61 72  strcmp(z,"-separ
35510 61 74 6f 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20  ator")==0 ){.   
35520 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
35530 6e 74 66 28 73 69 7a 65 6f 66 28 64 61 74 61 2e  ntf(sizeof(data.
35540 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c 20 64  colSeparator), d
35550 61 74 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72  ata.colSeparator
35560 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
35570 20 20 20 20 20 20 20 20 20 22 25 73 22 2c 63 6d           "%s",cm
35580 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c  dline_option_val
35590 75 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69  ue(argc,argv,++i
355a0 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ));.    }else if
355b0 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 65 77  ( strcmp(z,"-new
355c0 6c 69 6e 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  line")==0 ){.   
355d0 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
355e0 6e 74 66 28 73 69 7a 65 6f 66 28 64 61 74 61 2e  ntf(sizeof(data.
355f0 72 6f 77 53 65 70 61 72 61 74 6f 72 29 2c 20 64  rowSeparator), d
35600 61 74 61 2e 72 6f 77 53 65 70 61 72 61 74 6f 72  ata.rowSeparator
35610 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
35620 20 20 20 20 20 20 20 20 20 22 25 73 22 2c 63 6d           "%s",cm
35630 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c  dline_option_val
35640 75 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69  ue(argc,argv,++i
35650 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ));.    }else if
35660 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 75 6c  ( strcmp(z,"-nul
35670 6c 76 61 6c 75 65 22 29 3d 3d 30 20 29 7b 0a 20  lvalue")==0 ){. 
35680 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
35690 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 64 61 74  rintf(sizeof(dat
356a0 61 2e 6e 75 6c 6c 56 61 6c 75 65 29 2c 20 64 61  a.nullValue), da
356b0 74 61 2e 6e 75 6c 6c 56 61 6c 75 65 2c 0a 20 20  ta.nullValue,.  
356c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356d0 20 20 20 20 20 22 25 73 22 2c 63 6d 64 6c 69 6e       "%s",cmdlin
356e0 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61  e_option_value(a
356f0 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a  rgc,argv,++i));.
35700 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
35710 72 63 6d 70 28 7a 2c 22 2d 68 65 61 64 65 72 22  rcmp(z,"-header"
35720 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61  )==0 ){.      da
35730 74 61 2e 73 68 6f 77 48 65 61 64 65 72 20 3d 20  ta.showHeader = 
35740 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  1;.    }else if(
35750 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 6f 68 65   strcmp(z,"-nohe
35760 61 64 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20  ader")==0 ){.   
35770 20 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61 64     data.showHead
35780 65 72 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73  er = 0;.    }els
35790 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
357a0 2d 65 63 68 6f 22 29 3d 3d 30 20 29 7b 0a 20 20  -echo")==0 ){.  
357b0 20 20 20 20 53 68 65 6c 6c 53 65 74 46 6c 61 67      ShellSetFlag
357c0 28 26 64 61 74 61 2c 20 53 48 46 4c 47 5f 45 63  (&data, SHFLG_Ec
357d0 68 6f 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ho);.    }else i
357e0 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 65 71  f( strcmp(z,"-eq
357f0 70 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  p")==0 ){.      
35800 64 61 74 61 2e 61 75 74 6f 45 51 50 20 3d 20 31  data.autoEQP = 1
35810 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
35820 73 74 72 63 6d 70 28 7a 2c 22 2d 65 71 70 66 75  strcmp(z,"-eqpfu
35830 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ll")==0 ){.     
35840 20 64 61 74 61 2e 61 75 74 6f 45 51 50 20 3d 20   data.autoEQP = 
35850 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  2;.    }else if(
35860 20 73 74 72 63 6d 70 28 7a 2c 22 2d 73 74 61 74   strcmp(z,"-stat
35870 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  s")==0 ){.      
35880 64 61 74 61 2e 73 74 61 74 73 4f 6e 20 3d 20 31  data.statsOn = 1
35890 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
358a0 73 74 72 63 6d 70 28 7a 2c 22 2d 73 63 61 6e 73  strcmp(z,"-scans
358b0 74 61 74 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20  tats")==0 ){.   
358c0 20 20 20 64 61 74 61 2e 73 63 61 6e 73 74 61 74     data.scanstat
358d0 73 4f 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c  sOn = 1;.    }el
358e0 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
358f0 22 2d 62 61 63 6b 73 6c 61 73 68 22 29 3d 3d 30  "-backslash")==0
35900 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 55 6e 64   ){.      /* Und
35910 6f 63 75 6d 65 6e 74 65 64 20 63 6f 6d 6d 61 6e  ocumented comman
35920 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 3a 20 2d  d-line option: -
35930 62 61 63 6b 73 6c 61 73 68 0a 20 20 20 20 20 20  backslash.      
35940 2a 2a 20 43 61 75 73 65 73 20 43 2d 73 74 79 6c  ** Causes C-styl
35950 65 20 62 61 63 6b 73 6c 61 73 68 20 65 73 63 61  e backslash esca
35960 70 65 73 20 74 6f 20 62 65 20 65 76 61 6c 75 61  pes to be evalua
35970 74 65 64 20 69 6e 20 53 51 4c 20 73 74 61 74 65  ted in SQL state
35980 6d 65 6e 74 73 0a 20 20 20 20 20 20 2a 2a 20 70  ments.      ** p
35990 72 69 6f 72 20 74 6f 20 73 65 6e 64 69 6e 67 20  rior to sending 
359a0 74 68 65 20 53 51 4c 20 69 6e 74 6f 20 53 51 4c  the SQL into SQL
359b0 69 74 65 2e 20 20 55 73 65 66 75 6c 20 66 6f 72  ite.  Useful for
359c0 20 69 6e 6a 65 63 74 69 6e 67 0a 20 20 20 20 20   injecting.     
359d0 20 2a 2a 20 63 72 61 7a 79 20 62 79 74 65 73 20   ** crazy bytes 
359e0 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66  in the middle of
359f0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
35a00 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20  for testing and 
35a10 64 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 20  debugging..     
35a20 20 2a 2f 0a 20 20 20 20 20 20 53 68 65 6c 6c 53   */.      ShellS
35a30 65 74 46 6c 61 67 28 26 64 61 74 61 2c 20 53 48  etFlag(&data, SH
35a40 46 4c 47 5f 42 61 63 6b 73 6c 61 73 68 29 3b 0a  FLG_Backslash);.
35a50 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
35a60 72 63 6d 70 28 7a 2c 22 2d 62 61 69 6c 22 29 3d  rcmp(z,"-bail")=
35a70 3d 30 20 29 7b 0a 20 20 20 20 20 20 62 61 69 6c  =0 ){.      bail
35a80 5f 6f 6e 5f 65 72 72 6f 72 20 3d 20 31 3b 0a 20  _on_error = 1;. 
35a90 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
35aa0 63 6d 70 28 7a 2c 22 2d 76 65 72 73 69 6f 6e 22  cmp(z,"-version"
35ab0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 72  )==0 ){.      pr
35ac0 69 6e 74 66 28 22 25 73 20 25 73 5c 6e 22 2c 20  intf("%s %s\n", 
35ad0 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69  sqlite3_libversi
35ae0 6f 6e 28 29 2c 20 73 71 6c 69 74 65 33 5f 73 6f  on(), sqlite3_so
35af0 75 72 63 65 69 64 28 29 29 3b 0a 20 20 20 20 20  urceid());.     
35b00 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d   return 0;.    }
35b10 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
35b20 7a 2c 22 2d 69 6e 74 65 72 61 63 74 69 76 65 22  z,"-interactive"
35b30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 74  )==0 ){.      st
35b40 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69  din_is_interacti
35b50 76 65 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  ve = 1;.    }els
35b60 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
35b70 2d 62 61 74 63 68 22 29 3d 3d 30 20 29 7b 0a 20  -batch")==0 ){. 
35b80 20 20 20 20 20 73 74 64 69 6e 5f 69 73 5f 69 6e       stdin_is_in
35b90 74 65 72 61 63 74 69 76 65 20 3d 20 30 3b 0a 20  teractive = 0;. 
35ba0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
35bb0 63 6d 70 28 7a 2c 22 2d 68 65 61 70 22 29 3d 3d  cmp(z,"-heap")==
35bc0 30 20 29 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a  0 ){.      i++;.
35bd0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
35be0 72 63 6d 70 28 7a 2c 22 2d 70 61 67 65 63 61 63  rcmp(z,"-pagecac
35bf0 68 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  he")==0 ){.     
35c00 20 69 2b 3d 32 3b 0a 20 20 20 20 7d 65 6c 73 65   i+=2;.    }else
35c10 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
35c20 6c 6f 6f 6b 61 73 69 64 65 22 29 3d 3d 30 20 29  lookaside")==0 )
35c30 7b 0a 20 20 20 20 20 20 69 2b 3d 32 3b 0a 20 20  {.      i+=2;.  
35c40 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
35c50 6d 70 28 7a 2c 22 2d 6d 6d 61 70 22 29 3d 3d 30  mp(z,"-mmap")==0
35c60 20 29 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 20   ){.      i++;. 
35c70 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
35c80 63 6d 70 28 7a 2c 22 2d 76 66 73 22 29 3d 3d 30  cmp(z,"-vfs")==0
35c90 20 29 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 23   ){.      i++;.#
35ca0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
35cb0 42 4c 45 5f 56 46 53 54 52 41 43 45 0a 20 20 20  BLE_VFSTRACE.   
35cc0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
35cd0 70 28 7a 2c 22 2d 76 66 73 74 72 61 63 65 22 29  p(z,"-vfstrace")
35ce0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 2b 2b  ==0 ){.      i++
35cf0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
35d00 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 55  SQLITE_ENABLE_MU
35d10 4c 54 49 50 4c 45 58 0a 20 20 20 20 7d 65 6c 73  LTIPLEX.    }els
35d20 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
35d30 2d 6d 75 6c 74 69 70 6c 65 78 22 29 3d 3d 30 20  -multiplex")==0 
35d40 29 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 23 65  ){.      i++;.#e
35d50 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73 65 20 69  ndif.    }else i
35d60 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 68 65  f( strcmp(z,"-he
35d70 6c 70 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  lp")==0 ){.     
35d80 20 75 73 61 67 65 28 31 29 3b 0a 20 20 20 20 7d   usage(1);.    }
35d90 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
35da0 7a 2c 22 2d 63 6d 64 22 29 3d 3d 30 20 29 7b 0a  z,"-cmd")==0 ){.
35db0 20 20 20 20 20 20 2f 2a 20 52 75 6e 20 63 6f 6d        /* Run com
35dc0 6d 61 6e 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f  mands that follo
35dd0 77 20 2d 63 6d 64 20 66 69 72 73 74 20 61 6e 64  w -cmd first and
35de0 20 73 65 70 61 72 61 74 65 6c 79 20 66 72 6f 6d   separately from
35df0 20 63 6f 6d 6d 61 6e 64 73 0a 20 20 20 20 20 20   commands.      
35e00 2a 2a 20 74 68 61 74 20 73 69 6d 70 6c 79 20 61  ** that simply a
35e10 70 70 65 61 72 20 6f 6e 20 74 68 65 20 63 6f 6d  ppear on the com
35e20 6d 61 6e 64 2d 6c 69 6e 65 2e 20 20 54 68 69 73  mand-line.  This
35e30 20 73 65 65 6d 73 20 67 6f 6f 66 79 2e 20 20 49   seems goofy.  I
35e40 74 20 77 6f 75 6c 64 0a 20 20 20 20 20 20 2a 2a  t would.      **
35e50 20 62 65 20 62 65 74 74 65 72 20 69 66 20 61 6c   be better if al
35e60 6c 20 63 6f 6d 6d 61 6e 64 73 20 72 61 6e 20 69  l commands ran i
35e70 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 61 74  n the order that
35e80 20 74 68 65 79 20 61 70 70 65 61 72 2e 20 20 42   they appear.  B
35e90 75 74 0a 20 20 20 20 20 20 2a 2a 20 77 65 20 72  ut.      ** we r
35ea0 65 74 61 69 6e 20 74 68 65 20 67 6f 6f 66 79 20  etain the goofy 
35eb0 62 65 68 61 76 69 6f 72 20 66 6f 72 20 68 69 73  behavior for his
35ec0 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61 74 69 62  torical compatib
35ed0 69 6c 69 74 79 2e 20 2a 2f 0a 20 20 20 20 20 20  ility. */.      
35ee0 69 66 28 20 69 3d 3d 61 72 67 63 2d 31 20 29 20  if( i==argc-1 ) 
35ef0 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7a 20 3d  break;.      z =
35f00 20 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f   cmdline_option_
35f10 76 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c  value(argc,argv,
35f20 2b 2b 69 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ++i);.      if( 
35f30 7a 5b 30 5d 3d 3d 27 2e 27 20 29 7b 0a 20 20 20  z[0]=='.' ){.   
35f40 20 20 20 20 20 72 63 20 3d 20 64 6f 5f 6d 65 74       rc = do_met
35f50 61 5f 63 6f 6d 6d 61 6e 64 28 7a 2c 20 26 64 61  a_command(z, &da
35f60 74 61 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ta);.        if(
35f70 20 72 63 20 26 26 20 62 61 69 6c 5f 6f 6e 5f 65   rc && bail_on_e
35f80 72 72 6f 72 20 29 20 72 65 74 75 72 6e 20 72 63  rror ) return rc
35f90 3d 3d 32 20 3f 20 30 20 3a 20 72 63 3b 0a 20 20  ==2 ? 0 : rc;.  
35fa0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
35fb0 20 20 20 6f 70 65 6e 5f 64 62 28 26 64 61 74 61     open_db(&data
35fc0 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 72 63  , 0);.        rc
35fd0 20 3d 20 73 68 65 6c 6c 5f 65 78 65 63 28 64 61   = shell_exec(da
35fe0 74 61 2e 64 62 2c 20 7a 2c 20 73 68 65 6c 6c 5f  ta.db, z, shell_
35ff0 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c  callback, &data,
36000 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20   &zErrMsg);.    
36010 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67 21      if( zErrMsg!
36020 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
36030 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
36040 72 72 2c 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22  rr,"Error: %s\n"
36050 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  , zErrMsg);.    
36060 20 20 20 20 20 20 69 66 28 20 62 61 69 6c 5f 6f        if( bail_o
36070 6e 5f 65 72 72 6f 72 20 29 20 72 65 74 75 72 6e  n_error ) return
36080 20 72 63 21 3d 30 20 3f 20 72 63 20 3a 20 31 3b   rc!=0 ? rc : 1;
36090 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69  .        }else i
360a0 66 28 20 72 63 21 3d 30 20 29 7b 0a 20 20 20 20  f( rc!=0 ){.    
360b0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
360c0 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a  f(stderr,"Error:
360d0 20 75 6e 61 62 6c 65 20 74 6f 20 70 72 6f 63 65   unable to proce
360e0 73 73 20 53 51 4c 20 5c 22 25 73 5c 22 5c 6e 22  ss SQL \"%s\"\n"
360f0 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , z);.          
36100 69 66 28 20 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f  if( bail_on_erro
36110 72 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 20  r ) return rc;. 
36120 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
36130 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
36140 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
36150 64 65 72 72 2c 22 25 73 3a 20 45 72 72 6f 72 3a  derr,"%s: Error:
36160 20 75 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f 6e 3a   unknown option:
36170 20 25 73 5c 6e 22 2c 20 41 72 67 76 30 2c 20 7a   %s\n", Argv0, z
36180 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  );.      raw_pri
36190 6e 74 66 28 73 74 64 65 72 72 2c 22 55 73 65 20  ntf(stderr,"Use 
361a0 2d 68 65 6c 70 20 66 6f 72 20 61 20 6c 69 73 74  -help for a list
361b0 20 6f 66 20 6f 70 74 69 6f 6e 73 2e 5c 6e 22 29   of options.\n")
361c0 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31  ;.      return 1
361d0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 61 74 61  ;.    }.    data
361e0 2e 63 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d 6f  .cMode = data.mo
361f0 64 65 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 21  de;.  }..  if( !
36200 72 65 61 64 53 74 64 69 6e 20 29 7b 0a 20 20 20  readStdin ){.   
36210 20 2f 2a 20 52 75 6e 20 61 6c 6c 20 61 72 67 75   /* Run all argu
36220 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 6e 6f  ments that do no
36230 74 20 62 65 67 69 6e 20 77 69 74 68 20 27 2d 27  t begin with '-'
36240 20 61 73 20 69 66 20 74 68 65 79 20 77 65 72 65   as if they were
36250 20 73 65 70 61 72 61 74 65 0a 20 20 20 20 2a 2a   separate.    **
36260 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 69 6e   command-line in
36270 70 75 74 73 2c 20 65 78 63 65 70 74 20 66 6f 72  puts, except for
36280 20 74 68 65 20 61 72 67 54 6f 53 6b 69 70 20 61   the argToSkip a
36290 72 67 75 6d 65 6e 74 20 77 68 69 63 68 20 63 6f  rgument which co
362a0 6e 74 61 69 6e 73 0a 20 20 20 20 2a 2a 20 74 68  ntains.    ** th
362b0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 6e  e database filen
362c0 61 6d 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ame..    */.    
362d0 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6d 64 3b  for(i=0; i<nCmd;
362e0 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28   i++){.      if(
362f0 20 61 7a 43 6d 64 5b 69 5d 5b 30 5d 3d 3d 27 2e   azCmd[i][0]=='.
36300 27 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  ' ){.        rc 
36310 3d 20 64 6f 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e  = do_meta_comman
36320 64 28 61 7a 43 6d 64 5b 69 5d 2c 20 26 64 61 74  d(azCmd[i], &dat
36330 61 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  a);.        if( 
36340 72 63 20 29 20 72 65 74 75 72 6e 20 72 63 3d 3d  rc ) return rc==
36350 32 20 3f 20 30 20 3a 20 72 63 3b 0a 20 20 20 20  2 ? 0 : rc;.    
36360 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
36370 20 6f 70 65 6e 5f 64 62 28 26 64 61 74 61 2c 20   open_db(&data, 
36380 30 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  0);.        rc =
36390 20 73 68 65 6c 6c 5f 65 78 65 63 28 64 61 74 61   shell_exec(data
363a0 2e 64 62 2c 20 61 7a 43 6d 64 5b 69 5d 2c 20 73  .db, azCmd[i], s
363b0 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26  hell_callback, &
363c0 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b  data, &zErrMsg);
363d0 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 45 72  .        if( zEr
363e0 72 4d 73 67 21 3d 30 20 29 7b 0a 20 20 20 20 20  rMsg!=0 ){.     
363f0 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
36400 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20  (stderr,"Error: 
36410 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 29 3b  %s\n", zErrMsg);
36420 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
36430 6e 20 72 63 21 3d 30 20 3f 20 72 63 20 3a 20 31  n rc!=0 ? rc : 1
36440 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
36450 69 66 28 20 72 63 21 3d 30 20 29 7b 0a 20 20 20  if( rc!=0 ){.   
36460 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
36470 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72  tf(stderr,"Error
36480 3a 20 75 6e 61 62 6c 65 20 74 6f 20 70 72 6f 63  : unable to proc
36490 65 73 73 20 53 51 4c 3a 20 25 73 5c 6e 22 2c 20  ess SQL: %s\n", 
364a0 61 7a 43 6d 64 5b 69 5d 29 3b 0a 20 20 20 20 20  azCmd[i]);.     
364b0 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a       return rc;.
364c0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
364d0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 66 72 65 65  }.    }.    free
364e0 28 61 7a 43 6d 64 29 3b 0a 20 20 7d 65 6c 73 65  (azCmd);.  }else
364f0 7b 0a 20 20 20 20 2f 2a 20 52 75 6e 20 63 6f 6d  {.    /* Run com
36500 6d 61 6e 64 73 20 72 65 63 65 69 76 65 64 20 66  mands received f
36510 72 6f 6d 20 73 74 61 6e 64 61 72 64 20 69 6e 70  rom standard inp
36520 75 74 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  ut.    */.    if
36530 28 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72  ( stdin_is_inter
36540 61 63 74 69 76 65 20 29 7b 0a 20 20 20 20 20 20  active ){.      
36550 63 68 61 72 20 2a 7a 48 6f 6d 65 3b 0a 20 20 20  char *zHome;.   
36560 20 20 20 63 68 61 72 20 2a 7a 48 69 73 74 6f 72     char *zHistor
36570 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 6e 74  y = 0;.      int
36580 20 6e 48 69 73 74 6f 72 79 3b 0a 20 20 20 20 20   nHistory;.     
36590 20 70 72 69 6e 74 66 28 0a 20 20 20 20 20 20 20   printf(.       
365a0 20 22 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e   "SQLite version
365b0 20 25 73 20 25 2e 31 39 73 5c 6e 22 20 2f 2a 65   %s %.19s\n" /*e
365c0 78 74 72 61 2d 76 65 72 73 69 6f 6e 2d 69 6e 66  xtra-version-inf
365d0 6f 2a 2f 0a 20 20 20 20 20 20 20 20 22 45 6e 74  o*/.        "Ent
365e0 65 72 20 5c 22 2e 68 65 6c 70 5c 22 20 66 6f 72  er \".help\" for
365f0 20 75 73 61 67 65 20 68 69 6e 74 73 2e 5c 6e 22   usage hints.\n"
36600 2c 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ,.        sqlite
36610 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 2c 20  3_libversion(), 
36620 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64  sqlite3_sourceid
36630 28 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  ().      );.    
36640 20 20 69 66 28 20 77 61 72 6e 49 6e 6d 65 6d 6f    if( warnInmemo
36650 72 79 44 62 20 29 7b 0a 20 20 20 20 20 20 20 20  ryDb ){.        
36660 70 72 69 6e 74 66 28 22 43 6f 6e 6e 65 63 74 65  printf("Connecte
36670 64 20 74 6f 20 61 20 22 29 3b 0a 20 20 20 20 20  d to a ");.     
36680 20 20 20 70 72 69 6e 74 42 6f 6c 64 28 22 74 72     printBold("tr
36690 61 6e 73 69 65 6e 74 20 69 6e 2d 6d 65 6d 6f 72  ansient in-memor
366a0 79 20 64 61 74 61 62 61 73 65 22 29 3b 0a 20 20  y database");.  
366b0 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 2e 5c        printf(".\
366c0 6e 55 73 65 20 5c 22 2e 6f 70 65 6e 20 46 49 4c  nUse \".open FIL
366d0 45 4e 41 4d 45 5c 22 20 74 6f 20 72 65 6f 70 65  ENAME\" to reope
366e0 6e 20 6f 6e 20 61 20 22 0a 20 20 20 20 20 20 20  n on a ".       
366f0 20 20 20 20 20 20 20 20 22 70 65 72 73 69 73 74          "persist
36700 65 6e 74 20 64 61 74 61 62 61 73 65 2e 5c 6e 22  ent database.\n"
36710 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
36720 20 7a 48 6f 6d 65 20 3d 20 66 69 6e 64 5f 68 6f   zHome = find_ho
36730 6d 65 5f 64 69 72 28 30 29 3b 0a 20 20 20 20 20  me_dir(0);.     
36740 20 69 66 28 20 7a 48 6f 6d 65 20 29 7b 0a 20 20   if( zHome ){.  
36750 20 20 20 20 20 20 6e 48 69 73 74 6f 72 79 20 3d        nHistory =
36760 20 73 74 72 6c 65 6e 33 30 28 7a 48 6f 6d 65 29   strlen30(zHome)
36770 20 2b 20 32 30 3b 0a 20 20 20 20 20 20 20 20 69   + 20;.        i
36780 66 28 20 28 7a 48 69 73 74 6f 72 79 20 3d 20 6d  f( (zHistory = m
36790 61 6c 6c 6f 63 28 6e 48 69 73 74 6f 72 79 29 29  alloc(nHistory))
367a0 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
367b0 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
367c0 66 28 6e 48 69 73 74 6f 72 79 2c 20 7a 48 69 73  f(nHistory, zHis
367d0 74 6f 72 79 2c 22 25 73 2f 2e 73 71 6c 69 74 65  tory,"%s/.sqlite
367e0 5f 68 69 73 74 6f 72 79 22 2c 20 7a 48 6f 6d 65  _history", zHome
367f0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
36800 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 7a     }.      if( z
36810 48 69 73 74 6f 72 79 20 29 7b 20 73 68 65 6c 6c  History ){ shell
36820 5f 72 65 61 64 5f 68 69 73 74 6f 72 79 28 7a 48  _read_history(zH
36830 69 73 74 6f 72 79 29 3b 20 7d 0a 23 69 66 20 48  istory); }.#if H
36840 41 56 45 5f 52 45 41 44 4c 49 4e 45 20 7c 7c 20  AVE_READLINE || 
36850 48 41 56 45 5f 45 44 49 54 4c 49 4e 45 0a 20 20  HAVE_EDITLINE.  
36860 20 20 20 20 72 6c 5f 61 74 74 65 6d 70 74 65 64      rl_attempted
36870 5f 63 6f 6d 70 6c 65 74 69 6f 6e 5f 66 75 6e 63  _completion_func
36880 74 69 6f 6e 20 3d 20 72 65 61 64 6c 69 6e 65 5f  tion = readline_
36890 63 6f 6d 70 6c 65 74 69 6f 6e 3b 0a 23 65 6c 69  completion;.#eli
368a0 66 20 48 41 56 45 5f 4c 49 4e 45 4e 4f 49 53 45  f HAVE_LINENOISE
368b0 0a 20 20 20 20 20 20 6c 69 6e 65 6e 6f 69 73 65  .      linenoise
368c0 53 65 74 43 6f 6d 70 6c 65 74 69 6f 6e 43 61 6c  SetCompletionCal
368d0 6c 62 61 63 6b 28 6c 69 6e 65 6e 6f 69 73 65 5f  lback(linenoise_
368e0 63 6f 6d 70 6c 65 74 69 6f 6e 29 3b 0a 23 65 6e  completion);.#en
368f0 64 69 66 0a 20 20 20 20 20 20 72 63 20 3d 20 70  dif.      rc = p
36900 72 6f 63 65 73 73 5f 69 6e 70 75 74 28 26 64 61  rocess_input(&da
36910 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66  ta, 0);.      if
36920 28 20 7a 48 69 73 74 6f 72 79 20 29 7b 0a 20 20  ( zHistory ){.  
36930 20 20 20 20 20 20 73 68 65 6c 6c 5f 73 74 69 66        shell_stif
36940 6c 65 5f 68 69 73 74 6f 72 79 28 32 30 30 30 29  le_history(2000)
36950 3b 0a 20 20 20 20 20 20 20 20 73 68 65 6c 6c 5f  ;.        shell_
36960 77 72 69 74 65 5f 68 69 73 74 6f 72 79 28 7a 48  write_history(zH
36970 69 73 74 6f 72 79 29 3b 0a 20 20 20 20 20 20 20  istory);.       
36980 20 66 72 65 65 28 7a 48 69 73 74 6f 72 79 29 3b   free(zHistory);
36990 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
369a0 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 70  se{.      rc = p
369b0 72 6f 63 65 73 73 5f 69 6e 70 75 74 28 26 64 61  rocess_input(&da
369c0 74 61 2c 20 73 74 64 69 6e 29 3b 0a 20 20 20 20  ta, stdin);.    
369d0 7d 0a 20 20 7d 0a 20 20 73 65 74 5f 74 61 62 6c  }.  }.  set_tabl
369e0 65 5f 6e 61 6d 65 28 26 64 61 74 61 2c 20 30 29  e_name(&data, 0)
369f0 3b 0a 20 20 69 66 28 20 64 61 74 61 2e 64 62 20  ;.  if( data.db 
36a00 29 7b 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 63  ){.    session_c
36a10 6c 6f 73 65 5f 61 6c 6c 28 26 64 61 74 61 29 3b  lose_all(&data);
36a20 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f  .    sqlite3_clo
36a30 73 65 28 64 61 74 61 2e 64 62 29 3b 0a 20 20 7d  se(data.db);.  }
36a40 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
36a50 64 61 74 61 2e 7a 46 72 65 65 4f 6e 43 6c 6f 73  data.zFreeOnClos
36a60 65 29 3b 0a 20 20 66 69 6e 64 5f 68 6f 6d 65 5f  e);.  find_home_
36a70 64 69 72 28 31 29 3b 0a 23 69 66 20 21 53 51 4c  dir(1);.#if !SQL
36a80 49 54 45 5f 53 48 45 4c 4c 5f 49 53 5f 55 54 46  ITE_SHELL_IS_UTF
36a90 38 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61  8.  for(i=0; i<a
36aa0 72 67 63 3b 20 69 2b 2b 29 20 73 71 6c 69 74 65  rgc; i++) sqlite
36ab0 33 5f 66 72 65 65 28 61 72 67 76 5b 69 5d 29 3b  3_free(argv[i]);
36ac0 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
36ad0 61 72 67 76 29 3b 0a 23 65 6e 64 69 66 0a 20 20  argv);.#endif.  
36ae0 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a           return rc;.}.