/ Hex Artifact Content
Login

Artifact e0d3ef676265771a001446906765dd89617df2cece3249b08b1dcd24ba296f63:


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 43 6f 6e 73 74 72 75 63 74  ./*.** Construct
4f60: 20 61 20 66 61 6b 65 20 43 52 45 41 54 45 20 54   a fake CREATE T
4f70: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 28  ABLE statement (
4f80: 6f 72 20 61 74 20 6c 65 61 73 74 20 74 68 65 20  or at least the 
4f90: 70 61 72 74 20 74 68 61 74 20 63 6f 6d 65 73 0a  part that comes.
4fa0: 2a 2a 20 61 66 74 65 72 20 74 68 65 20 22 43 52  ** after the "CR
4fb0: 45 41 54 45 20 54 41 42 4c 45 22 20 6b 65 79 77  EATE TABLE" keyw
4fc0: 6f 72 64 73 29 20 74 68 61 74 20 64 65 73 63 72  ords) that descr
4fd0: 69 62 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 73  ibes the columns
4fe0: 20 6f 66 0a 2a 2a 20 74 68 65 20 76 69 65 77 2c   of.** the view,
4ff0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2c 20   virtual table, 
5000: 6f 72 20 74 61 62 6c 65 20 76 61 6c 75 65 64 20  or table valued 
5010: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 69  function zName i
5020: 6e 20 7a 53 63 68 65 6d 61 2e 0a 2a 2f 0a 73 74  n zSchema..*/.st
5030: 61 74 69 63 20 63 68 61 72 20 2a 73 68 65 6c 6c  atic char *shell
5040: 46 61 6b 65 43 72 54 61 62 28 0a 20 20 73 71 6c  FakeCrTab(.  sql
5050: 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20  ite3 *db,       
5060: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
5070: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
5080: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 76  containing the v
5090: 74 61 62 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  tab */.  const c
50a0: 68 61 72 20 2a 7a 53 63 68 65 6d 61 2c 20 20 20  har *zSchema,   
50b0: 20 2f 2a 20 53 63 68 65 6d 61 20 6f 66 20 74 68   /* Schema of th
50c0: 65 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  e database holdi
50d0: 6e 67 20 74 68 65 20 76 74 61 62 20 2a 2f 0a 20  ng the vtab */. 
50e0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
50f0: 6d 65 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  me       /* The 
5100: 6e 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74  name of the virt
5110: 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 29 7b 0a  ual table */.){.
5120: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
5130: 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61  pStmt = 0;.  cha
5140: 72 20 2a 7a 53 71 6c 3b 0a 20 20 53 68 65 6c 6c  r *zSql;.  Shell
5150: 54 65 78 74 20 73 3b 0a 20 20 63 68 61 72 20 63  Text s;.  char c
5160: 51 75 6f 74 65 3b 0a 20 20 63 68 61 72 20 2a 7a  Quote;.  char *z
5170: 44 69 76 20 3d 20 22 28 22 3b 0a 0a 20 20 7a 53  Div = "(";..  zS
5180: 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
5190: 69 6e 74 66 28 22 50 52 41 47 4d 41 20 5c 22 25  intf("PRAGMA \"%
51a0: 77 5c 22 2e 74 61 62 6c 65 5f 69 6e 66 6f 3d 25  w\".table_info=%
51b0: 51 3b 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  Q;",.           
51c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 53                zS
51d0: 63 68 65 6d 61 20 3f 20 7a 53 63 68 65 6d 61 20  chema ? zSchema 
51e0: 3a 20 22 6d 61 69 6e 22 2c 20 7a 4e 61 6d 65 29  : "main", zName)
51f0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ;.  sqlite3_prep
5200: 61 72 65 5f 76 32 28 64 62 2c 20 7a 53 71 6c 2c  are_v2(db, zSql,
5210: 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b   -1, &pStmt, 0);
5220: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
5230: 7a 53 71 6c 29 3b 0a 20 20 69 6e 69 74 54 65 78  zSql);.  initTex
5240: 74 28 26 73 29 3b 0a 20 20 69 66 28 20 7a 53 63  t(&s);.  if( zSc
5250: 68 65 6d 61 20 29 7b 0a 20 20 20 20 63 51 75 6f  hema ){.    cQuo
5260: 74 65 20 3d 20 71 75 6f 74 65 43 68 61 72 28 7a  te = quoteChar(z
5270: 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 69 66 28  Schema);.    if(
5280: 20 63 51 75 6f 74 65 20 26 26 20 73 71 6c 69 74   cQuote && sqlit
5290: 65 33 5f 73 74 72 69 63 6d 70 28 7a 53 63 68 65  e3_stricmp(zSche
52a0: 6d 61 2c 22 74 65 6d 70 22 29 3d 3d 30 20 29 20  ma,"temp")==0 ) 
52b0: 63 51 75 6f 74 65 20 3d 20 30 3b 0a 20 20 20 20  cQuote = 0;.    
52c0: 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c 20 7a  appendText(&s, z
52d0: 53 63 68 65 6d 61 2c 20 63 51 75 6f 74 65 29 3b  Schema, cQuote);
52e0: 0a 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28  .    appendText(
52f0: 26 73 2c 20 22 2e 22 2c 20 30 29 3b 0a 20 20 7d  &s, ".", 0);.  }
5300: 0a 20 20 63 51 75 6f 74 65 20 3d 20 71 75 6f 74  .  cQuote = quot
5310: 65 43 68 61 72 28 7a 4e 61 6d 65 29 3b 0a 20 20  eChar(zName);.  
5320: 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c 20 7a  appendText(&s, z
5330: 4e 61 6d 65 2c 20 63 51 75 6f 74 65 29 3b 0a 20  Name, cQuote);. 
5340: 20 77 68 69 6c 65 28 20 73 71 6c 69 74 65 33 5f   while( sqlite3_
5350: 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c  step(pStmt)==SQL
5360: 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 63  ITE_ROW ){.    c
5370: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 20  onst char *zCol 
5380: 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73  = (const char*)s
5390: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
53a0: 78 74 28 70 53 74 6d 74 2c 20 31 29 3b 0a 20 20  xt(pStmt, 1);.  
53b0: 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c    appendText(&s,
53c0: 20 7a 44 69 76 2c 20 30 29 3b 0a 20 20 20 20 7a   zDiv, 0);.    z
53d0: 44 69 76 20 3d 20 22 2c 22 3b 0a 20 20 20 20 63  Div = ",";.    c
53e0: 51 75 6f 74 65 20 3d 20 71 75 6f 74 65 43 68 61  Quote = quoteCha
53f0: 72 28 7a 43 6f 6c 29 3b 0a 20 20 20 20 61 70 70  r(zCol);.    app
5400: 65 6e 64 54 65 78 74 28 26 73 2c 20 7a 43 6f 6c  endText(&s, zCol
5410: 2c 20 63 51 75 6f 74 65 29 3b 0a 20 20 7d 0a 20  , cQuote);.  }. 
5420: 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c 20   appendText(&s, 
5430: 22 29 22 2c 20 30 29 3b 0a 0a 20 20 73 71 6c 69  ")", 0);..  sqli
5440: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
5450: 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 73 2e  mt);.  return s.
5460: 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 20  z;.}../*.** SQL 
5470: 66 75 6e 63 74 69 6f 6e 3a 20 20 73 68 65 6c 6c  function:  shell
5480: 5f 61 64 64 5f 73 63 68 65 6d 61 28 53 2c 58 29  _add_schema(S,X)
5490: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 73  .**.** Add the s
54a0: 63 68 65 6d 61 20 6e 61 6d 65 20 58 20 74 6f 20  chema name X to 
54b0: 74 68 65 20 43 52 45 41 54 45 20 73 74 61 74 65  the CREATE state
54c0: 6d 65 6e 74 20 69 6e 20 53 20 61 6e 64 20 72 65  ment in S and re
54d0: 74 75 72 6e 20 74 68 65 20 72 65 73 75 6c 74 2e  turn the result.
54e0: 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a  .** Examples:.**
54f0: 0a 2a 2a 20 20 20 20 43 52 45 41 54 45 20 54 41  .**    CREATE TA
5500: 42 4c 45 20 74 31 28 78 29 20 20 20 2d 3e 20 20  BLE t1(x)   ->  
5510: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 79   CREATE TABLE xy
5520: 7a 2e 74 31 28 78 29 3b 0a 2a 2a 0a 2a 2a 20 41  z.t1(x);.**.** A
5530: 6c 73 6f 20 77 6f 72 6b 73 20 6f 6e 0a 2a 2a 0a  lso works on.**.
5540: 2a 2a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  **    CREATE IND
5550: 45 58 0a 2a 2a 20 20 20 20 43 52 45 41 54 45 20  EX.**    CREATE 
5560: 55 4e 49 51 55 45 20 49 4e 44 45 58 0a 2a 2a 20  UNIQUE INDEX.** 
5570: 20 20 20 43 52 45 41 54 45 20 56 49 45 57 0a 2a     CREATE VIEW.*
5580: 2a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  *    CREATE TRIG
5590: 47 45 52 0a 2a 2a 20 20 20 20 43 52 45 41 54 45  GER.**    CREATE
55a0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 0a 2a   VIRTUAL TABLE.*
55b0: 2a 0a 2a 2a 20 54 68 69 73 20 55 44 46 20 69 73  *.** This UDF is
55c0: 20 75 73 65 64 20 62 79 20 74 68 65 20 2e 73 63   used by the .sc
55d0: 68 65 6d 61 20 63 6f 6d 6d 61 6e 64 20 74 6f 20  hema command to 
55e0: 69 6e 73 65 72 74 20 74 68 65 20 73 63 68 65 6d  insert the schem
55f0: 61 20 6e 61 6d 65 20 6f 66 0a 2a 2a 20 61 74 74  a name of.** att
5600: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20  ached databases 
5610: 69 6e 74 6f 20 74 68 65 20 6d 69 64 64 6c 65 20  into the middle 
5620: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  of the sqlite_ma
5630: 73 74 65 72 2e 73 71 6c 20 66 69 65 6c 64 2e 0a  ster.sql field..
5640: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73  */.static void s
5650: 68 65 6c 6c 41 64 64 53 63 68 65 6d 61 4e 61 6d  hellAddSchemaNam
5660: 65 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  e(.  sqlite3_con
5670: 74 65 78 74 20 2a 70 43 74 78 2c 0a 20 20 69 6e  text *pCtx,.  in
5680: 74 20 6e 56 61 6c 2c 0a 20 20 73 71 6c 69 74 65  t nVal,.  sqlite
5690: 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 0a  3_value **apVal.
56a0: 29 7b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  ){.  static cons
56b0: 74 20 63 68 61 72 20 2a 61 50 72 65 66 69 78 5b  t char *aPrefix[
56c0: 5d 20 3d 20 7b 0a 20 20 20 20 20 22 54 41 42 4c  ] = {.     "TABL
56d0: 45 22 2c 0a 20 20 20 20 20 22 49 4e 44 45 58 22  E",.     "INDEX"
56e0: 2c 0a 20 20 20 20 20 22 55 4e 49 51 55 45 20 49  ,.     "UNIQUE I
56f0: 4e 44 45 58 22 2c 0a 20 20 20 20 20 22 56 49 45  NDEX",.     "VIE
5700: 57 22 2c 0a 20 20 20 20 20 22 54 52 49 47 47 45  W",.     "TRIGGE
5710: 52 22 2c 0a 20 20 20 20 20 22 56 49 52 54 55 41  R",.     "VIRTUA
5720: 4c 20 54 41 42 4c 45 22 0a 20 20 7d 3b 0a 20 20  L TABLE".  };.  
5730: 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 63 6f 6e  int i = 0;.  con
5740: 73 74 20 63 68 61 72 20 2a 7a 49 6e 20 3d 20 28  st char *zIn = (
5750: 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
5760: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61  te3_value_text(a
5770: 70 56 61 6c 5b 30 5d 29 3b 0a 20 20 63 6f 6e 73  pVal[0]);.  cons
5780: 74 20 63 68 61 72 20 2a 7a 53 63 68 65 6d 61 20  t char *zSchema 
5790: 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73  = (const char*)s
57a0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
57b0: 74 28 61 70 56 61 6c 5b 31 5d 29 3b 0a 20 20 73  t(apVal[1]);.  s
57c0: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 73 71 6c  qlite3 *db = sql
57d0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 64 62 5f  ite3_context_db_
57e0: 68 61 6e 64 6c 65 28 70 43 74 78 29 3b 0a 20 20  handle(pCtx);.  
57f0: 69 66 28 20 7a 49 6e 21 3d 30 20 26 26 20 73 74  if( zIn!=0 && st
5800: 72 6e 63 6d 70 28 7a 49 6e 2c 20 22 43 52 45 41  rncmp(zIn, "CREA
5810: 54 45 20 22 2c 20 37 29 3d 3d 30 20 29 7b 0a 20  TE ", 7)==0 ){. 
5820: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 28 69     for(i=0; i<(i
5830: 6e 74 29 28 73 69 7a 65 6f 66 28 61 50 72 65 66  nt)(sizeof(aPref
5840: 69 78 29 2f 73 69 7a 65 6f 66 28 61 50 72 65 66  ix)/sizeof(aPref
5850: 69 78 5b 30 5d 29 29 3b 20 69 2b 2b 29 7b 0a 20  ix[0])); i++){. 
5860: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 74 72       int n = str
5870: 6c 65 6e 33 30 28 61 50 72 65 66 69 78 5b 69 5d  len30(aPrefix[i]
5880: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 74 72  );.      if( str
5890: 6e 63 6d 70 28 7a 49 6e 2b 37 2c 20 61 50 72 65  ncmp(zIn+7, aPre
58a0: 66 69 78 5b 69 5d 2c 20 6e 29 3d 3d 30 20 26 26  fix[i], n)==0 &&
58b0: 20 7a 49 6e 5b 6e 2b 37 5d 3d 3d 27 20 27 20 29   zIn[n+7]==' ' )
58c0: 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a  {.        char *
58d0: 7a 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69  z = 0;.        i
58e0: 66 28 20 7a 53 63 68 65 6d 61 20 29 7b 0a 20 20  f( zSchema ){.  
58f0: 20 20 20 20 20 20 20 20 63 68 61 72 20 63 51 75          char cQu
5900: 6f 74 65 20 3d 20 71 75 6f 74 65 43 68 61 72 28  ote = quoteChar(
5910: 7a 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20 20  zSchema);.      
5920: 20 20 20 20 69 66 28 20 63 51 75 6f 74 65 20 26      if( cQuote &
5930: 26 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d  & sqlite3_stricm
5940: 70 28 7a 53 63 68 65 6d 61 2c 22 74 65 6d 70 22  p(zSchema,"temp"
5950: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
5960: 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f      z = sqlite3_
5970: 6d 70 72 69 6e 74 66 28 22 25 2e 2a 73 20 5c 22  mprintf("%.*s \"
5980: 25 77 5c 22 2e 25 73 22 2c 20 6e 2b 37 2c 20 7a  %w\".%s", n+7, z
5990: 49 6e 2c 20 7a 53 63 68 65 6d 61 2c 20 7a 49 6e  In, zSchema, zIn
59a0: 2b 6e 2b 38 29 3b 0a 20 20 20 20 20 20 20 20 20  +n+8);.         
59b0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
59c0: 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f      z = sqlite3_
59d0: 6d 70 72 69 6e 74 66 28 22 25 2e 2a 73 20 25 73  mprintf("%.*s %s
59e0: 2e 25 73 22 2c 20 6e 2b 37 2c 20 7a 49 6e 2c 20  .%s", n+7, zIn, 
59f0: 7a 53 63 68 65 6d 61 2c 20 7a 49 6e 2b 6e 2b 38  zSchema, zIn+n+8
5a00: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
5a10: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
5a20: 20 69 66 28 20 61 50 72 65 66 69 78 5b 69 5d 5b   if( aPrefix[i][
5a30: 30 5d 3d 3d 27 56 27 20 29 7b 0a 20 20 20 20 20  0]=='V' ){.     
5a40: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
5a50: 2a 7a 4e 61 6d 65 20 3d 20 28 63 6f 6e 73 74 20  *zName = (const 
5a60: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
5a70: 6c 75 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 32  lue_text(apVal[2
5a80: 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  ]);.          if
5a90: 28 20 7a 3d 3d 30 20 29 20 7a 20 3d 20 73 71 6c  ( z==0 ) z = sql
5aa0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
5ab0: 22 2c 20 7a 49 6e 29 3b 0a 20 20 20 20 20 20 20  ", zIn);.       
5ac0: 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d     z = sqlite3_m
5ad0: 70 72 69 6e 74 66 28 22 25 7a 5c 6e 2f 2a 20 25  printf("%z\n/* %
5ae0: 7a 20 2a 2f 22 2c 20 7a 2c 0a 20 20 20 20 20 20  z */", z,.      
5af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b00: 20 20 20 20 20 20 20 20 73 68 65 6c 6c 46 61 6b          shellFak
5b10: 65 43 72 54 61 62 28 64 62 2c 20 7a 53 63 68 65  eCrTab(db, zSche
5b20: 6d 61 2c 20 7a 4e 61 6d 65 29 29 3b 0a 20 20 20  ma, zName));.   
5b30: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
5b40: 66 28 20 7a 20 29 7b 0a 20 20 20 20 20 20 20 20  f( z ){.        
5b50: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
5b60: 5f 74 65 78 74 28 70 43 74 78 2c 20 7a 2c 20 2d  _text(pCtx, z, -
5b70: 31 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29  1, sqlite3_free)
5b80: 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ;.          retu
5b90: 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
5ba0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
5bb0: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
5bc0: 5f 76 61 6c 75 65 28 70 43 74 78 2c 20 61 70 56  _value(pCtx, apV
5bd0: 61 6c 5b 30 5d 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  al[0]);.}../*.**
5be0: 20 54 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65   The source code
5bf0: 20 66 6f 72 20 73 65 76 65 72 61 6c 20 72 75 6e   for several run
5c00: 2d 74 69 6d 65 20 6c 6f 61 64 61 62 6c 65 20 65  -time loadable e
5c10: 78 74 65 6e 73 69 6f 6e 73 20 69 73 20 69 6e 73  xtensions is ins
5c20: 65 72 74 65 64 0a 2a 2a 20 62 65 6c 6f 77 20 62  erted.** below b
5c30: 79 20 74 68 65 20 2e 2e 2f 74 6f 6f 6c 2f 6d 6b  y the ../tool/mk
5c40: 73 68 65 6c 6c 63 2e 74 63 6c 20 73 63 72 69 70  shellc.tcl scrip
5c50: 74 2e 20 20 42 65 66 6f 72 65 20 70 72 6f 63 65  t.  Before proce
5c60: 73 73 69 6e 67 20 74 68 61 74 20 69 6e 63 6c 75  ssing that inclu
5c70: 64 65 64 0a 2a 2a 20 63 6f 64 65 2c 20 77 65 20  ded.** code, we 
5c80: 6e 65 65 64 20 74 6f 20 6f 76 65 72 72 69 64 65  need to override
5c90: 20 73 6f 6d 65 20 6d 61 63 72 6f 73 20 74 6f 20   some macros to 
5ca0: 6d 61 6b 65 20 74 68 65 20 69 6e 63 6c 75 64 65  make the include
5cb0: 64 20 70 72 6f 67 72 61 6d 20 63 6f 64 65 0a 2a  d program code.*
5cc0: 2a 20 77 6f 72 6b 20 68 65 72 65 20 69 6e 20 74  * work here in t
5cd0: 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 74 68 69  he middle of thi
5ce0: 73 20 72 65 67 75 6c 61 72 20 70 72 6f 67 72 61  s regular progra
5cf0: 6d 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  m..*/.#define SQ
5d00: 4c 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e 5f 49  LITE_EXTENSION_I
5d10: 4e 49 54 31 0a 23 64 65 66 69 6e 65 20 53 51 4c  NIT1.#define SQL
5d20: 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e 5f 49 4e  ITE_EXTENSION_IN
5d30: 49 54 32 28 58 29 20 28 76 6f 69 64 29 28 58 29  IT2(X) (void)(X)
5d40: 0a 0a 49 4e 43 4c 55 44 45 20 2e 2e 2f 65 78 74  ..INCLUDE ../ext
5d50: 2f 6d 69 73 63 2f 73 68 61 74 68 72 65 65 2e 63  /misc/shathree.c
5d60: 0a 49 4e 43 4c 55 44 45 20 2e 2e 2f 65 78 74 2f  .INCLUDE ../ext/
5d70: 6d 69 73 63 2f 66 69 6c 65 69 6f 2e 63 0a 49 4e  misc/fileio.c.IN
5d80: 43 4c 55 44 45 20 2e 2e 2f 65 78 74 2f 6d 69 73  CLUDE ../ext/mis
5d90: 63 2f 63 6f 6d 70 6c 65 74 69 6f 6e 2e 63 0a 49  c/completion.c.I
5da0: 4e 43 4c 55 44 45 20 2e 2e 2f 65 78 74 2f 65 78  NCLUDE ../ext/ex
5db0: 70 65 72 74 2f 73 71 6c 69 74 65 33 65 78 70 65  pert/sqlite3expe
5dc0: 72 74 2e 68 0a 49 4e 43 4c 55 44 45 20 2e 2e 2f  rt.h.INCLUDE ../
5dd0: 65 78 74 2f 65 78 70 65 72 74 2f 73 71 6c 69 74  ext/expert/sqlit
5de0: 65 33 65 78 70 65 72 74 2e 63 0a 0a 23 69 66 20  e3expert.c..#if 
5df0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
5e00: 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 2f  NABLE_SESSION)./
5e10: 2a 0a 2a 2a 20 53 74 61 74 65 20 69 6e 66 6f 72  *.** State infor
5e20: 6d 61 74 69 6f 6e 20 66 6f 72 20 61 20 73 69 6e  mation for a sin
5e30: 67 6c 65 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e  gle open session
5e40: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
5e50: 63 74 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20 4f  ct OpenSession O
5e60: 70 65 6e 53 65 73 73 69 6f 6e 3b 0a 73 74 72 75  penSession;.stru
5e70: 63 74 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20 7b  ct OpenSession {
5e80: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
5e90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
5ea0: 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72  ymbolic name for
5eb0: 20 74 68 69 73 20 73 65 73 73 69 6f 6e 20 2a 2f   this session */
5ec0: 0a 20 20 69 6e 74 20 6e 46 69 6c 74 65 72 3b 20  .  int nFilter; 
5ed0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
5ee0: 75 6d 62 65 72 20 6f 66 20 78 46 69 6c 74 65 72  umber of xFilter
5ef0: 20 72 65 6a 65 63 74 69 6f 6e 20 47 4c 4f 42 20   rejection GLOB 
5f00: 70 61 74 74 65 72 6e 73 20 2a 2f 0a 20 20 63 68  patterns */.  ch
5f10: 61 72 20 2a 2a 61 7a 46 69 6c 74 65 72 3b 20 20  ar **azFilter;  
5f20: 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
5f30: 6f 66 20 78 46 69 6c 74 65 72 20 72 65 6a 65 63  of xFilter rejec
5f40: 74 69 6f 6e 20 47 4c 4f 42 20 70 61 74 74 65 72  tion GLOB patter
5f50: 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ns */.  sqlite3_
5f60: 73 65 73 73 69 6f 6e 20 2a 70 3b 20 20 20 20 20  session *p;     
5f70: 20 2f 2a 20 54 68 65 20 6f 70 65 6e 20 73 65 73   /* The open ses
5f80: 73 69 6f 6e 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69  sion */.};.#endi
5f90: 66 0a 0a 2f 2a 0a 2a 2a 20 53 68 65 6c 6c 20 6f  f../*.** Shell o
5fa0: 75 74 70 75 74 20 6d 6f 64 65 20 69 6e 66 6f 72  utput mode infor
5fb0: 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 62 65 66 6f  mation from befo
5fc0: 72 65 20 22 2e 65 78 70 6c 61 69 6e 20 6f 6e 22  re ".explain on"
5fd0: 2c 0a 2a 2a 20 73 61 76 65 64 20 73 6f 20 74 68  ,.** saved so th
5fe0: 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
5ff0: 74 6f 72 65 64 20 62 79 20 22 2e 65 78 70 6c 61  tored by ".expla
6000: 69 6e 20 6f 66 66 22 0a 2a 2f 0a 74 79 70 65 64  in off".*/.typed
6010: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 64 4d  ef struct SavedM
6020: 6f 64 65 49 6e 66 6f 20 53 61 76 65 64 4d 6f 64  odeInfo SavedMod
6030: 65 49 6e 66 6f 3b 0a 73 74 72 75 63 74 20 53 61  eInfo;.struct Sa
6040: 76 65 64 4d 6f 64 65 49 6e 66 6f 20 7b 0a 20 20  vedModeInfo {.  
6050: 69 6e 74 20 76 61 6c 69 64 3b 20 20 20 20 20 20  int valid;      
6060: 20 20 20 20 2f 2a 20 49 73 20 74 68 65 72 65 20      /* Is there 
6070: 6c 65 67 69 74 20 64 61 74 61 20 69 6e 20 68 65  legit data in he
6080: 72 65 3f 20 2a 2f 0a 20 20 69 6e 74 20 6d 6f 64  re? */.  int mod
6090: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
60a0: 4d 6f 64 65 20 70 72 69 6f 72 20 74 6f 20 22 2e  Mode prior to ".
60b0: 65 78 70 6c 61 69 6e 20 6f 6e 22 20 2a 2f 0a 20  explain on" */. 
60c0: 20 69 6e 74 20 73 68 6f 77 48 65 61 64 65 72 3b   int showHeader;
60d0: 20 20 20 20 20 2f 2a 20 54 68 65 20 22 2e 68 65       /* The ".he
60e0: 61 64 65 72 22 20 73 65 74 74 69 6e 67 20 70 72  ader" setting pr
60f0: 69 6f 72 20 74 6f 20 22 2e 65 78 70 6c 61 69 6e  ior to ".explain
6100: 20 6f 6e 22 20 2a 2f 0a 20 20 69 6e 74 20 63 6f   on" */.  int co
6110: 6c 57 69 64 74 68 5b 31 30 30 5d 3b 20 20 2f 2a  lWidth[100];  /*
6120: 20 43 6f 6c 75 6d 6e 20 77 69 64 74 68 73 20 70   Column widths p
6130: 72 69 6f 72 20 74 6f 20 22 2e 65 78 70 6c 61 69  rior to ".explai
6140: 6e 20 6f 6e 22 20 2a 2f 0a 7d 3b 0a 0a 74 79 70  n on" */.};..typ
6150: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 65  edef struct Expe
6160: 72 74 49 6e 66 6f 20 45 78 70 65 72 74 49 6e 66  rtInfo ExpertInf
6170: 6f 3b 0a 73 74 72 75 63 74 20 45 78 70 65 72 74  o;.struct Expert
6180: 49 6e 66 6f 20 7b 0a 20 20 73 71 6c 69 74 65 33  Info {.  sqlite3
6190: 65 78 70 65 72 74 20 2a 70 45 78 70 65 72 74 3b  expert *pExpert;
61a0: 0a 20 20 69 6e 74 20 62 56 65 72 62 6f 73 65 3b  .  int bVerbose;
61b0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 61 74 65  .};../*.** State
61c0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
61d0: 75 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ut the database 
61e0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6f  connection is co
61f0: 6e 74 61 69 6e 65 64 20 69 6e 20 61 6e 0a 2a 2a  ntained in an.**
6200: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
6210: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
6220: 74 75 72 65 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  ture..*/.typedef
6230: 20 73 74 72 75 63 74 20 53 68 65 6c 6c 53 74 61   struct ShellSta
6240: 74 65 20 53 68 65 6c 6c 53 74 61 74 65 3b 0a 73  te ShellState;.s
6250: 74 72 75 63 74 20 53 68 65 6c 6c 53 74 61 74 65  truct ShellState
6260: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
6270: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
6280: 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  he database */. 
6290: 20 69 6e 74 20 61 75 74 6f 45 78 70 6c 61 69 6e   int autoExplain
62a0: 3b 20 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 6d  ;       /* Autom
62b0: 61 74 69 63 61 6c 6c 79 20 74 75 72 6e 20 6f 6e  atically turn on
62c0: 20 2e 65 78 70 6c 61 69 6e 20 6d 6f 64 65 20 2a   .explain mode *
62d0: 2f 0a 20 20 69 6e 74 20 61 75 74 6f 45 51 50 3b  /.  int autoEQP;
62e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 75             /* Ru
62f0: 6e 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  n EXPLAIN QUERY 
6300: 50 4c 41 4e 20 70 72 69 6f 72 20 74 6f 20 73 65  PLAN prior to se
6310: 61 63 68 20 53 51 4c 20 73 74 6d 74 20 2a 2f 0a  ach SQL stmt */.
6320: 20 20 69 6e 74 20 73 74 61 74 73 4f 6e 3b 20 20    int statsOn;  
6330: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
6340: 20 74 6f 20 64 69 73 70 6c 61 79 20 6d 65 6d 6f   to display memo
6350: 72 79 20 73 74 61 74 73 20 62 65 66 6f 72 65 20  ry stats before 
6360: 65 61 63 68 20 66 69 6e 61 6c 69 7a 65 20 2a 2f  each finalize */
6370: 0a 20 20 69 6e 74 20 73 63 61 6e 73 74 61 74 73  .  int scanstats
6380: 4f 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75  On;       /* Tru
6390: 65 20 74 6f 20 64 69 73 70 6c 61 79 20 73 63 61  e to display sca
63a0: 6e 20 73 74 61 74 73 20 62 65 66 6f 72 65 20 65  n stats before e
63b0: 61 63 68 20 66 69 6e 61 6c 69 7a 65 20 2a 2f 0a  ach finalize */.
63c0: 20 20 69 6e 74 20 6f 75 74 43 6f 75 6e 74 3b 20    int outCount; 
63d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 76 65           /* Reve
63e0: 72 74 20 74 6f 20 73 74 64 6f 75 74 20 77 68 65  rt to stdout whe
63f0: 6e 20 72 65 61 63 68 69 6e 67 20 7a 65 72 6f 20  n reaching zero 
6400: 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20  */.  int cnt;   
6410: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
6420: 75 6d 62 65 72 20 6f 66 20 72 65 63 6f 72 64 73  umber of records
6430: 20 64 69 73 70 6c 61 79 65 64 20 73 6f 20 66 61   displayed so fa
6440: 72 20 2a 2f 0a 20 20 46 49 4c 45 20 2a 6f 75 74  r */.  FILE *out
6450: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
6460: 20 57 72 69 74 65 20 72 65 73 75 6c 74 73 20 68   Write results h
6470: 65 72 65 20 2a 2f 0a 20 20 46 49 4c 45 20 2a 74  ere */.  FILE *t
6480: 72 61 63 65 4f 75 74 3b 20 20 20 20 20 20 20 20  raceOut;        
6490: 2f 2a 20 4f 75 74 70 75 74 20 66 6f 72 20 73 71  /* Output for sq
64a0: 6c 69 74 65 33 5f 74 72 61 63 65 28 29 20 2a 2f  lite3_trace() */
64b0: 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
64c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
64d0: 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65  ber of errors se
64e0: 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6d 6f 64 65  en */.  int mode
64f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
6500: 2a 20 41 6e 20 6f 75 74 70 75 74 20 6d 6f 64 65  * An output mode
6510: 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 69 6e   setting */.  in
6520: 74 20 63 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  t cMode;        
6530: 20 20 20 20 20 2f 2a 20 74 65 6d 70 6f 72 61 72       /* temporar
6540: 79 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 66 6f  y output mode fo
6550: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 71 75  r the current qu
6560: 65 72 79 20 2a 2f 0a 20 20 69 6e 74 20 6e 6f 72  ery */.  int nor
6570: 6d 61 6c 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  malMode;        
6580: 2f 2a 20 4f 75 74 70 75 74 20 6d 6f 64 65 20 62  /* Output mode b
6590: 65 66 6f 72 65 20 22 2e 65 78 70 6c 61 69 6e 20  efore ".explain 
65a0: 6f 6e 22 20 2a 2f 0a 20 20 69 6e 74 20 77 72 69  on" */.  int wri
65b0: 74 61 62 6c 65 53 63 68 65 6d 61 3b 20 20 20 20  tableSchema;    
65c0: 2f 2a 20 54 72 75 65 20 69 66 20 50 52 41 47 4d  /* True if PRAGM
65d0: 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d  A writable_schem
65e0: 61 3d 4f 4e 20 2a 2f 0a 20 20 69 6e 74 20 73 68  a=ON */.  int sh
65f0: 6f 77 48 65 61 64 65 72 3b 20 20 20 20 20 20 20  owHeader;       
6600: 20 2f 2a 20 54 72 75 65 20 74 6f 20 73 68 6f 77   /* True to show
6610: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e   column names in
6620: 20 4c 69 73 74 20 6f 72 20 43 6f 6c 75 6d 6e 20   List or Column 
6630: 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43  mode */.  int nC
6640: 68 65 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  heck;           
6650: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 22 2e   /* Number of ".
6660: 63 68 65 63 6b 22 20 63 6f 6d 6d 61 6e 64 73 20  check" commands 
6670: 72 75 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  run */.  unsigne
6680: 64 20 73 68 65 6c 6c 46 6c 67 73 3b 20 20 20 20  d shellFlgs;    
6690: 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73  /* Various flags
66a0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 65 73   */.  char *zDes
66b0: 74 54 61 62 6c 65 3b 20 20 20 20 20 20 2f 2a 20  tTable;      /* 
66c0: 4e 61 6d 65 20 6f 66 20 64 65 73 74 69 6e 61 74  Name of destinat
66d0: 69 6f 6e 20 74 61 62 6c 65 20 77 68 65 6e 20 4d  ion table when M
66e0: 4f 44 45 5f 49 6e 73 65 72 74 20 2a 2f 0a 20 20  ODE_Insert */.  
66f0: 63 68 61 72 20 7a 54 65 73 74 63 61 73 65 5b 33  char zTestcase[3
6700: 30 5d 3b 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  0];    /* Name o
6710: 66 20 63 75 72 72 65 6e 74 20 74 65 73 74 20 63  f current test c
6720: 61 73 65 20 2a 2f 0a 20 20 63 68 61 72 20 63 6f  ase */.  char co
6730: 6c 53 65 70 61 72 61 74 6f 72 5b 32 30 5d 3b 20  lSeparator[20]; 
6740: 2f 2a 20 43 6f 6c 75 6d 6e 20 73 65 70 61 72 61  /* Column separa
6750: 74 6f 72 20 63 68 61 72 61 63 74 65 72 20 66 6f  tor character fo
6760: 72 20 73 65 76 65 72 61 6c 20 6d 6f 64 65 73 20  r several modes 
6770: 2a 2f 0a 20 20 63 68 61 72 20 72 6f 77 53 65 70  */.  char rowSep
6780: 61 72 61 74 6f 72 5b 32 30 5d 3b 20 2f 2a 20 52  arator[20]; /* R
6790: 6f 77 20 73 65 70 61 72 61 74 6f 72 20 63 68 61  ow separator cha
67a0: 72 61 63 74 65 72 20 66 6f 72 20 4d 4f 44 45 5f  racter for MODE_
67b0: 41 73 63 69 69 20 2a 2f 0a 20 20 69 6e 74 20 63  Ascii */.  int c
67c0: 6f 6c 57 69 64 74 68 5b 31 30 30 5d 3b 20 20 20  olWidth[100];   
67d0: 20 20 2f 2a 20 52 65 71 75 65 73 74 65 64 20 77    /* Requested w
67e0: 69 64 74 68 20 6f 66 20 65 61 63 68 20 63 6f 6c  idth of each col
67f0: 75 6d 6e 20 77 68 65 6e 20 69 6e 20 63 6f 6c 75  umn when in colu
6800: 6d 6e 20 6d 6f 64 65 2a 2f 0a 20 20 69 6e 74 20  mn mode*/.  int 
6810: 61 63 74 75 61 6c 57 69 64 74 68 5b 31 30 30 5d  actualWidth[100]
6820: 3b 20 20 2f 2a 20 41 63 74 75 61 6c 20 77 69 64  ;  /* Actual wid
6830: 74 68 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  th of each colum
6840: 6e 20 2a 2f 0a 20 20 63 68 61 72 20 6e 75 6c 6c  n */.  char null
6850: 56 61 6c 75 65 5b 32 30 5d 3b 20 20 20 20 2f 2a  Value[20];    /*
6860: 20 54 68 65 20 74 65 78 74 20 74 6f 20 70 72 69   The text to pri
6870: 6e 74 20 77 68 65 6e 20 61 20 4e 55 4c 4c 20 63  nt when a NULL c
6880: 6f 6d 65 73 20 62 61 63 6b 20 66 72 6f 6d 0a 20  omes back from. 
6890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68a0: 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 64          ** the d
68b0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 68 61  atabase */.  cha
68c0: 72 20 6f 75 74 66 69 6c 65 5b 46 49 4c 45 4e 41  r outfile[FILENA
68d0: 4d 45 5f 4d 41 58 5d 3b 20 2f 2a 20 46 69 6c 65  ME_MAX]; /* File
68e0: 6e 61 6d 65 20 66 6f 72 20 2a 6f 75 74 20 2a 2f  name for *out */
68f0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
6900: 44 62 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 2f  DbFilename;    /
6910: 2a 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61  * name of the da
6920: 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20  tabase file */. 
6930: 20 63 68 61 72 20 2a 7a 46 72 65 65 4f 6e 43 6c   char *zFreeOnCl
6940: 6f 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ose;         /* 
6950: 46 69 6c 65 6e 61 6d 65 20 74 6f 20 66 72 65 65  Filename to free
6960: 20 77 68 65 6e 20 63 6c 6f 73 69 6e 67 20 2a 2f   when closing */
6970: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
6980: 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Vfs;           /
6990: 2a 20 4e 61 6d 65 20 6f 66 20 56 46 53 20 74 6f  * Name of VFS to
69a0: 20 75 73 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65   use */.  sqlite
69b0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 20 20  3_stmt *pStmt;  
69c0: 20 2f 2a 20 43 75 72 72 65 6e 74 20 73 74 61 74   /* Current stat
69d0: 65 6d 65 6e 74 20 69 66 20 61 6e 79 2e 20 2a 2f  ement if any. */
69e0: 0a 20 20 46 49 4c 45 20 2a 70 4c 6f 67 3b 20 20  .  FILE *pLog;  
69f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69            /* Wri
6a00: 74 65 20 6c 6f 67 20 6f 75 74 70 75 74 20 68 65  te log output he
6a10: 72 65 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 69 49  re */.  int *aiI
6a20: 6e 64 65 6e 74 3b 20 20 20 20 20 20 20 20 20 2f  ndent;         /
6a30: 2a 20 41 72 72 61 79 20 6f 66 20 69 6e 64 65 6e  * Array of inden
6a40: 74 73 20 75 73 65 64 20 69 6e 20 4d 4f 44 45 5f  ts used in MODE_
6a50: 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 69 6e 74  Explain */.  int
6a60: 20 6e 49 6e 64 65 6e 74 3b 20 20 20 20 20 20 20   nIndent;       
6a70: 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 61      /* Size of a
6a80: 72 72 61 79 20 61 69 49 6e 64 65 6e 74 5b 5d 20  rray aiIndent[] 
6a90: 2a 2f 0a 20 20 69 6e 74 20 69 49 6e 64 65 6e 74  */.  int iIndent
6aa0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
6ab0: 6e 64 65 78 20 6f 66 20 63 75 72 72 65 6e 74 20  ndex of current 
6ac0: 6f 70 20 69 6e 20 61 69 49 6e 64 65 6e 74 5b 5d  op in aiIndent[]
6ad0: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
6ae0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45  SQLITE_ENABLE_SE
6af0: 53 53 49 4f 4e 29 0a 20 20 69 6e 74 20 6e 53 65  SSION).  int nSe
6b00: 73 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  ssion;          
6b10: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
6b20: 61 63 74 69 76 65 20 73 65 73 73 69 6f 6e 73 20  active sessions 
6b30: 2a 2f 0a 20 20 4f 70 65 6e 53 65 73 73 69 6f 6e  */.  OpenSession
6b40: 20 61 53 65 73 73 69 6f 6e 5b 34 5d 3b 20 20 2f   aSession[4];  /
6b50: 2a 20 41 72 72 61 79 20 6f 66 20 73 65 73 73 69  * Array of sessi
6b60: 6f 6e 73 2e 20 20 5b 30 5d 20 69 73 20 69 6e 20  ons.  [0] is in 
6b70: 66 6f 63 75 73 2e 20 2a 2f 0a 23 65 6e 64 69 66  focus. */.#endif
6b80: 0a 20 20 45 78 70 65 72 74 49 6e 66 6f 20 65 78  .  ExpertInfo ex
6b90: 70 65 72 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  pert;        /* 
6ba0: 56 61 6c 69 64 20 69 66 20 70 72 65 76 69 6f 75  Valid if previou
6bb0: 73 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 22 2e  s command was ".
6bc0: 65 78 70 65 72 74 20 4f 50 54 2e 2e 2e 22 20 2a  expert OPT..." *
6bd0: 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
6be0: 20 76 61 6c 75 65 73 20 66 6f 72 20 53 68 65 6c   values for Shel
6bf0: 6c 53 74 61 74 65 2e 61 75 74 6f 45 51 50 0a 2a  lState.autoEQP.*
6c00: 2f 0a 23 64 65 66 69 6e 65 20 41 55 54 4f 45 51  /.#define AUTOEQ
6c10: 50 5f 6f 66 66 20 20 20 20 20 20 30 0a 23 64 65  P_off      0.#de
6c20: 66 69 6e 65 20 41 55 54 4f 45 51 50 5f 6f 6e 20  fine AUTOEQP_on 
6c30: 20 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20        1.#define 
6c40: 41 55 54 4f 45 51 50 5f 74 72 69 67 67 65 72 20  AUTOEQP_trigger 
6c50: 20 32 0a 23 64 65 66 69 6e 65 20 41 55 54 4f 45   2.#define AUTOE
6c60: 51 50 5f 66 75 6c 6c 20 20 20 20 20 33 0a 0a 2f  QP_full     3../
6c70: 2a 0a 2a 2a 20 54 68 65 73 65 20 61 72 65 20 74  *.** These are t
6c80: 68 65 20 61 6c 6c 6f 77 65 64 20 73 68 65 6c 6c  he allowed shell
6c90: 46 6c 67 73 20 76 61 6c 75 65 73 0a 2a 2f 0a 23  Flgs values.*/.#
6ca0: 64 65 66 69 6e 65 20 53 48 46 4c 47 5f 50 61 67  define SHFLG_Pag
6cb0: 65 63 61 63 68 65 20 20 20 20 20 20 30 78 30 30  ecache      0x00
6cc0: 30 30 30 30 30 31 20 2f 2a 20 54 68 65 20 2d 2d  000001 /* The --
6cd0: 70 61 67 65 63 61 63 68 65 20 6f 70 74 69 6f 6e  pagecache option
6ce0: 20 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66   is used */.#def
6cf0: 69 6e 65 20 53 48 46 4c 47 5f 4c 6f 6f 6b 61 73  ine SHFLG_Lookas
6d00: 69 64 65 20 20 20 20 20 20 30 78 30 30 30 30 30  ide      0x00000
6d10: 30 30 32 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65  002 /* Lookaside
6d20: 20 6d 65 6d 6f 72 79 20 69 73 20 75 73 65 64 20   memory is used 
6d30: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 48 46 4c 47  */.#define SHFLG
6d40: 5f 42 61 63 6b 73 6c 61 73 68 20 20 20 20 20 20  _Backslash      
6d50: 30 78 30 30 30 30 30 30 30 34 20 2f 2a 20 54 68  0x00000004 /* Th
6d60: 65 20 2d 2d 62 61 63 6b 73 6c 61 73 68 20 6f 70  e --backslash op
6d70: 74 69 6f 6e 20 69 73 20 75 73 65 64 20 2a 2f 0a  tion is used */.
6d80: 23 64 65 66 69 6e 65 20 53 48 46 4c 47 5f 50 72  #define SHFLG_Pr
6d90: 65 73 65 72 76 65 52 6f 77 69 64 20 20 30 78 30  eserveRowid  0x0
6da0: 30 30 30 30 30 30 38 20 2f 2a 20 2e 64 75 6d 70  0000008 /* .dump
6db0: 20 70 72 65 73 65 72 76 65 73 20 72 6f 77 69 64   preserves rowid
6dc0: 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66 69   values */.#defi
6dd0: 6e 65 20 53 48 46 4c 47 5f 4e 65 77 6c 69 6e 65  ne SHFLG_Newline
6de0: 73 20 20 20 20 20 20 20 30 78 30 30 30 30 30 30  s       0x000000
6df0: 31 30 20 2f 2a 20 2e 64 75 6d 70 20 2d 2d 6e 65  10 /* .dump --ne
6e00: 77 6c 69 6e 65 20 66 6c 61 67 20 2a 2f 0a 23 64  wline flag */.#d
6e10: 65 66 69 6e 65 20 53 48 46 4c 47 5f 43 6f 75 6e  efine SHFLG_Coun
6e20: 74 43 68 61 6e 67 65 73 20 20 20 30 78 30 30 30  tChanges   0x000
6e30: 30 30 30 32 30 20 2f 2a 20 2e 63 68 61 6e 67 65  00020 /* .change
6e40: 73 20 73 65 74 74 69 6e 67 20 2a 2f 0a 23 64 65  s setting */.#de
6e50: 66 69 6e 65 20 53 48 46 4c 47 5f 45 63 68 6f 20  fine SHFLG_Echo 
6e60: 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 30            0x0000
6e70: 30 30 34 30 20 2f 2a 20 2e 65 63 68 6f 20 6f 72  0040 /* .echo or
6e80: 20 2d 2d 65 63 68 6f 20 73 65 74 74 69 6e 67 20   --echo setting 
6e90: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  */../*.** Macros
6ea0: 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64   for testing and
6eb0: 20 73 65 74 74 69 6e 67 20 73 68 65 6c 6c 46 6c   setting shellFl
6ec0: 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 68  gs.*/.#define Sh
6ed0: 65 6c 6c 48 61 73 46 6c 61 67 28 50 2c 58 29 20  ellHasFlag(P,X) 
6ee0: 20 20 20 28 28 28 50 29 2d 3e 73 68 65 6c 6c 46     (((P)->shellF
6ef0: 6c 67 73 20 26 20 28 58 29 29 21 3d 30 29 0a 23  lgs & (X))!=0).#
6f00: 64 65 66 69 6e 65 20 53 68 65 6c 6c 53 65 74 46  define ShellSetF
6f10: 6c 61 67 28 50 2c 58 29 20 20 20 20 28 28 50 29  lag(P,X)    ((P)
6f20: 2d 3e 73 68 65 6c 6c 46 6c 67 73 7c 3d 28 58 29  ->shellFlgs|=(X)
6f30: 29 0a 23 64 65 66 69 6e 65 20 53 68 65 6c 6c 43  ).#define ShellC
6f40: 6c 65 61 72 46 6c 61 67 28 50 2c 58 29 20 20 28  learFlag(P,X)  (
6f50: 28 50 29 2d 3e 73 68 65 6c 6c 46 6c 67 73 26 3d  (P)->shellFlgs&=
6f60: 28 7e 28 58 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 54  (~(X)))../*.** T
6f70: 68 65 73 65 20 61 72 65 20 74 68 65 20 61 6c 6c  hese are the all
6f80: 6f 77 65 64 20 6d 6f 64 65 73 2e 0a 2a 2f 0a 23  owed modes..*/.#
6f90: 64 65 66 69 6e 65 20 4d 4f 44 45 5f 4c 69 6e 65  define MODE_Line
6fa0: 20 20 20 20 20 30 20 20 2f 2a 20 4f 6e 65 20 63       0  /* One c
6fb0: 6f 6c 75 6d 6e 20 70 65 72 20 6c 69 6e 65 2e 20  olumn per line. 
6fc0: 20 42 6c 61 6e 6b 20 6c 69 6e 65 20 62 65 74 77   Blank line betw
6fd0: 65 65 6e 20 72 65 63 6f 72 64 73 20 2a 2f 0a 23  een records */.#
6fe0: 64 65 66 69 6e 65 20 4d 4f 44 45 5f 43 6f 6c 75  define MODE_Colu
6ff0: 6d 6e 20 20 20 31 20 20 2f 2a 20 4f 6e 65 20 72  mn   1  /* One r
7000: 65 63 6f 72 64 20 70 65 72 20 6c 69 6e 65 20 69  ecord per line i
7010: 6e 20 6e 65 61 74 20 63 6f 6c 75 6d 6e 73 20 2a  n neat columns *
7020: 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 4c  /.#define MODE_L
7030: 69 73 74 20 20 20 20 20 32 20 20 2f 2a 20 4f 6e  ist     2  /* On
7040: 65 20 72 65 63 6f 72 64 20 70 65 72 20 6c 69 6e  e record per lin
7050: 65 20 77 69 74 68 20 61 20 73 65 70 61 72 61 74  e with a separat
7060: 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f  or */.#define MO
7070: 44 45 5f 53 65 6d 69 20 20 20 20 20 33 20 20 2f  DE_Semi     3  /
7080: 2a 20 53 61 6d 65 20 61 73 20 4d 4f 44 45 5f 4c  * Same as MODE_L
7090: 69 73 74 20 62 75 74 20 61 70 70 65 6e 64 20 22  ist but append "
70a0: 3b 22 20 74 6f 20 65 61 63 68 20 6c 69 6e 65 20  ;" to each line 
70b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f  */.#define MODE_
70c0: 48 74 6d 6c 20 20 20 20 20 34 20 20 2f 2a 20 47  Html     4  /* G
70d0: 65 6e 65 72 61 74 65 20 61 6e 20 58 48 54 4d 4c  enerate an XHTML
70e0: 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
70f0: 65 20 4d 4f 44 45 5f 49 6e 73 65 72 74 20 20 20  e MODE_Insert   
7100: 35 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 53  5  /* Generate S
7110: 51 4c 20 22 69 6e 73 65 72 74 22 20 73 74 61 74  QL "insert" stat
7120: 65 6d 65 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  ements */.#defin
7130: 65 20 4d 4f 44 45 5f 51 75 6f 74 65 20 20 20 20  e MODE_Quote    
7140: 36 20 20 2f 2a 20 51 75 6f 74 65 20 76 61 6c 75  6  /* Quote valu
7150: 65 73 20 61 73 20 66 6f 72 20 53 51 4c 20 2a 2f  es as for SQL */
7160: 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 54 63  .#define MODE_Tc
7170: 6c 20 20 20 20 20 20 37 20 20 2f 2a 20 47 65 6e  l      7  /* Gen
7180: 65 72 61 74 65 20 41 4e 53 49 2d 43 20 6f 72 20  erate ANSI-C or 
7190: 54 43 4c 20 71 75 6f 74 65 64 20 65 6c 65 6d 65  TCL quoted eleme
71a0: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  nts */.#define M
71b0: 4f 44 45 5f 43 73 76 20 20 20 20 20 20 38 20 20  ODE_Csv      8  
71c0: 2f 2a 20 51 75 6f 74 65 20 73 74 72 69 6e 67 73  /* Quote strings
71d0: 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 70 6c  , numbers are pl
71e0: 61 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ain */.#define M
71f0: 4f 44 45 5f 45 78 70 6c 61 69 6e 20 20 39 20 20  ODE_Explain  9  
7200: 2f 2a 20 4c 69 6b 65 20 4d 4f 44 45 5f 43 6f 6c  /* Like MODE_Col
7210: 75 6d 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  umn, but do not 
7220: 74 72 75 6e 63 61 74 65 20 64 61 74 61 20 2a 2f  truncate data */
7230: 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 41 73  .#define MODE_As
7240: 63 69 69 20 20 20 31 30 20 20 2f 2a 20 55 73 65  cii   10  /* Use
7250: 20 41 53 43 49 49 20 75 6e 69 74 20 61 6e 64 20   ASCII unit and 
7260: 72 65 63 6f 72 64 20 73 65 70 61 72 61 74 6f 72  record separator
7270: 73 20 28 30 78 31 46 2f 30 78 31 45 29 20 2a 2f  s (0x1F/0x1E) */
7280: 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 50 72  .#define MODE_Pr
7290: 65 74 74 79 20 20 31 31 20 20 2f 2a 20 50 72 65  etty  11  /* Pre
72a0: 74 74 79 2d 70 72 69 6e 74 20 73 63 68 65 6d 61  tty-print schema
72b0: 73 20 2a 2f 0a 0a 73 74 61 74 69 63 20 63 6f 6e  s */..static con
72c0: 73 74 20 63 68 61 72 20 2a 6d 6f 64 65 44 65 73  st char *modeDes
72d0: 63 72 5b 5d 20 3d 20 7b 0a 20 20 22 6c 69 6e 65  cr[] = {.  "line
72e0: 22 2c 0a 20 20 22 63 6f 6c 75 6d 6e 22 2c 0a 20  ",.  "column",. 
72f0: 20 22 6c 69 73 74 22 2c 0a 20 20 22 73 65 6d 69   "list",.  "semi
7300: 22 2c 0a 20 20 22 68 74 6d 6c 22 2c 0a 20 20 22  ",.  "html",.  "
7310: 69 6e 73 65 72 74 22 2c 0a 20 20 22 71 75 6f 74  insert",.  "quot
7320: 65 22 2c 0a 20 20 22 74 63 6c 22 2c 0a 20 20 22  e",.  "tcl",.  "
7330: 63 73 76 22 2c 0a 20 20 22 65 78 70 6c 61 69 6e  csv",.  "explain
7340: 22 2c 0a 20 20 22 61 73 63 69 69 22 2c 0a 20 20  ",.  "ascii",.  
7350: 22 70 72 65 74 74 79 70 72 69 6e 74 22 2c 0a 7d  "prettyprint",.}
7360: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 61  ;../*.** These a
7370: 72 65 20 74 68 65 20 63 6f 6c 75 6d 6e 2f 72 6f  re the column/ro
7380: 77 2f 6c 69 6e 65 20 73 65 70 61 72 61 74 6f 72  w/line separator
7390: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 76 61  s used by the va
73a0: 72 69 6f 75 73 0a 2a 2a 20 69 6d 70 6f 72 74 2f  rious.** import/
73b0: 65 78 70 6f 72 74 20 6d 6f 64 65 73 2e 0a 2a 2f  export modes..*/
73c0: 0a 23 64 65 66 69 6e 65 20 53 45 50 5f 43 6f 6c  .#define SEP_Col
73d0: 75 6d 6e 20 20 20 20 22 7c 22 0a 23 64 65 66 69  umn    "|".#defi
73e0: 6e 65 20 53 45 50 5f 52 6f 77 20 20 20 20 20 20  ne SEP_Row      
73f0: 20 22 5c 6e 22 0a 23 64 65 66 69 6e 65 20 53 45   "\n".#define SE
7400: 50 5f 54 61 62 20 20 20 20 20 20 20 22 5c 74 22  P_Tab       "\t"
7410: 0a 23 64 65 66 69 6e 65 20 53 45 50 5f 53 70 61  .#define SEP_Spa
7420: 63 65 20 20 20 20 20 22 20 22 0a 23 64 65 66 69  ce     " ".#defi
7430: 6e 65 20 53 45 50 5f 43 6f 6d 6d 61 20 20 20 20  ne SEP_Comma    
7440: 20 22 2c 22 0a 23 64 65 66 69 6e 65 20 53 45 50   ",".#define SEP
7450: 5f 43 72 4c 66 20 20 20 20 20 20 22 5c 72 5c 6e  _CrLf      "\r\n
7460: 22 0a 23 64 65 66 69 6e 65 20 53 45 50 5f 55 6e  ".#define SEP_Un
7470: 69 74 20 20 20 20 20 20 22 5c 78 31 46 22 0a 23  it      "\x1F".#
7480: 64 65 66 69 6e 65 20 53 45 50 5f 52 65 63 6f 72  define SEP_Recor
7490: 64 20 20 20 20 22 5c 78 31 45 22 0a 0a 2f 2a 0a  d    "\x1E"../*.
74a0: 2a 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65  ** Number of ele
74b0: 6d 65 6e 74 73 20 69 6e 20 61 6e 20 61 72 72 61  ments in an arra
74c0: 79 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72 72  y.*/.#define Arr
74d0: 61 79 53 69 7a 65 28 58 29 20 20 28 69 6e 74 29  aySize(X)  (int)
74e0: 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f  (sizeof(X)/sizeo
74f0: 66 28 58 5b 30 5d 29 29 0a 0a 2f 2a 0a 2a 2a 20  f(X[0]))../*.** 
7500: 41 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74  A callback for t
7510: 68 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  he sqlite3_log()
7520: 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 73   interface..*/.s
7530: 74 61 74 69 63 20 76 6f 69 64 20 73 68 65 6c 6c  tatic void shell
7540: 4c 6f 67 28 76 6f 69 64 20 2a 70 41 72 67 2c 20  Log(void *pArg, 
7550: 69 6e 74 20 69 45 72 72 43 6f 64 65 2c 20 63 6f  int iErrCode, co
7560: 6e 73 74 20 63 68 61 72 20 2a 7a 4d 73 67 29 7b  nst char *zMsg){
7570: 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  .  ShellState *p
7580: 20 3d 20 28 53 68 65 6c 6c 53 74 61 74 65 2a 29   = (ShellState*)
7590: 70 41 72 67 3b 0a 20 20 69 66 28 20 70 2d 3e 70  pArg;.  if( p->p
75a0: 4c 6f 67 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b  Log==0 ) return;
75b0: 0a 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70  .  utf8_printf(p
75c0: 2d 3e 70 4c 6f 67 2c 20 22 28 25 64 29 20 25 73  ->pLog, "(%d) %s
75d0: 5c 6e 22 2c 20 69 45 72 72 43 6f 64 65 2c 20 7a  \n", iErrCode, z
75e0: 4d 73 67 29 3b 0a 20 20 66 66 6c 75 73 68 28 70  Msg);.  fflush(p
75f0: 2d 3e 70 4c 6f 67 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  ->pLog);.}../*.*
7600: 2a 20 4f 75 74 70 75 74 20 74 68 65 20 67 69 76  * Output the giv
7610: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 68  en string as a h
7620: 65 78 2d 65 6e 63 6f 64 65 64 20 62 6c 6f 62 20  ex-encoded blob 
7630: 28 65 67 2e 20 58 27 31 32 33 34 27 20 29 0a 2a  (eg. X'1234' ).*
7640: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f 75  /.static void ou
7650: 74 70 75 74 5f 68 65 78 5f 62 6c 6f 62 28 46 49  tput_hex_blob(FI
7660: 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 76  LE *out, const v
7670: 6f 69 64 20 2a 70 42 6c 6f 62 2c 20 69 6e 74 20  oid *pBlob, int 
7680: 6e 42 6c 6f 62 29 7b 0a 20 20 69 6e 74 20 69 3b  nBlob){.  int i;
7690: 0a 20 20 63 68 61 72 20 2a 7a 42 6c 6f 62 20 3d  .  char *zBlob =
76a0: 20 28 63 68 61 72 20 2a 29 70 42 6c 6f 62 3b 0a   (char *)pBlob;.
76b0: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74    raw_printf(out
76c0: 2c 22 58 27 22 29 3b 0a 20 20 66 6f 72 28 69 3d  ,"X'");.  for(i=
76d0: 30 3b 20 69 3c 6e 42 6c 6f 62 3b 20 69 2b 2b 29  0; i<nBlob; i++)
76e0: 7b 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74  { raw_printf(out
76f0: 2c 22 25 30 32 78 22 2c 7a 42 6c 6f 62 5b 69 5d  ,"%02x",zBlob[i]
7700: 26 30 78 66 66 29 3b 20 7d 0a 20 20 72 61 77 5f  &0xff); }.  raw_
7710: 70 72 69 6e 74 66 28 6f 75 74 2c 22 27 22 29 3b  printf(out,"'");
7720: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46 69 6e 64 20 61  .}../*.** Find a
7730: 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
7740: 6e 6f 74 20 66 6f 75 6e 64 20 61 6e 79 77 68 65  not found anywhe
7750: 72 65 20 69 6e 20 7a 5b 5d 2e 20 20 52 65 74 75  re in z[].  Retu
7760: 72 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a 2a 20  rn a pointer.** 
7770: 74 6f 20 74 68 61 74 20 73 74 72 69 6e 67 2e 0a  to that string..
7780: 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 75 73 65  **.** Try to use
7790: 20 7a 41 20 61 6e 64 20 7a 42 20 66 69 72 73 74   zA and zB first
77a0: 2e 20 20 49 66 20 62 6f 74 68 20 6f 66 20 74 68  .  If both of th
77b0: 6f 73 65 20 61 72 65 20 61 6c 72 65 61 64 79 20  ose are already 
77c0: 66 6f 75 6e 64 20 69 6e 20 7a 5b 5d 0a 2a 2a 20  found in z[].** 
77d0: 74 68 65 6e 20 6d 61 6b 65 20 75 70 20 73 6f 6d  then make up som
77e0: 65 20 73 74 72 69 6e 67 20 61 6e 64 20 73 74 6f  e string and sto
77f0: 72 65 20 69 74 20 69 6e 20 74 68 65 20 62 75 66  re it in the buf
7800: 66 65 72 20 7a 42 75 66 2e 0a 2a 2f 0a 73 74 61  fer zBuf..*/.sta
7810: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
7820: 75 6e 75 73 65 64 5f 73 74 72 69 6e 67 28 0a 20  unused_string(. 
7830: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
7840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7850: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6d 75 73     /* Result mus
7860: 74 20 6e 6f 74 20 61 70 70 65 61 72 20 61 6e 79  t not appear any
7870: 77 68 65 72 65 20 69 6e 20 7a 20 2a 2f 0a 20 20  where in z */.  
7880: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 2c 20  const char *zA, 
7890: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 42 2c 20  const char *zB, 
78a0: 20 20 2f 2a 20 54 72 79 20 74 68 65 73 65 20 66    /* Try these f
78b0: 69 72 73 74 20 2a 2f 0a 20 20 63 68 61 72 20 2a  irst */.  char *
78c0: 7a 42 75 66 20 20 20 20 20 20 20 20 20 20 20 20  zBuf            
78d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
78e0: 70 61 63 65 20 74 6f 20 73 74 6f 72 65 20 61 20  pace to store a 
78f0: 67 65 6e 65 72 61 74 65 64 20 73 74 72 69 6e 67  generated string
7900: 20 2a 2f 0a 29 7b 0a 20 20 75 6e 73 69 67 6e 65   */.){.  unsigne
7910: 64 20 69 20 3d 20 30 3b 0a 20 20 69 66 28 20 73  d i = 0;.  if( s
7920: 74 72 73 74 72 28 7a 2c 20 7a 41 29 3d 3d 30 20  trstr(z, zA)==0 
7930: 29 20 72 65 74 75 72 6e 20 7a 41 3b 0a 20 20 69  ) return zA;.  i
7940: 66 28 20 73 74 72 73 74 72 28 7a 2c 20 7a 42 29  f( strstr(z, zB)
7950: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 7a 42 3b  ==0 ) return zB;
7960: 0a 20 20 64 6f 7b 0a 20 20 20 20 73 71 6c 69 74  .  do{.    sqlit
7970: 65 33 5f 73 6e 70 72 69 6e 74 66 28 32 30 2c 7a  e3_snprintf(20,z
7980: 42 75 66 2c 22 28 25 73 25 75 29 22 2c 20 7a 41  Buf,"(%s%u)", zA
7990: 2c 20 69 2b 2b 29 3b 0a 20 20 7d 77 68 69 6c 65  , i++);.  }while
79a0: 28 20 73 74 72 73 74 72 28 7a 2c 7a 42 75 66 29  ( strstr(z,zBuf)
79b0: 21 3d 30 20 29 3b 0a 20 20 72 65 74 75 72 6e 20  !=0 );.  return 
79c0: 7a 42 75 66 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f  zBuf;.}../*.** O
79d0: 75 74 70 75 74 20 74 68 65 20 67 69 76 65 6e 20  utput the given 
79e0: 73 74 72 69 6e 67 20 61 73 20 61 20 71 75 6f 74  string as a quot
79f0: 65 64 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20  ed string using 
7a00: 53 51 4c 20 71 75 6f 74 69 6e 67 20 63 6f 6e 76  SQL quoting conv
7a10: 65 6e 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53  entions..**.** S
7a20: 65 65 20 61 6c 73 6f 3a 20 6f 75 74 70 75 74 5f  ee also: output_
7a30: 71 75 6f 74 65 64 5f 65 73 63 61 70 65 64 5f 73  quoted_escaped_s
7a40: 74 72 69 6e 67 28 29 0a 2a 2f 0a 73 74 61 74 69  tring().*/.stati
7a50: 63 20 76 6f 69 64 20 6f 75 74 70 75 74 5f 71 75  c void output_qu
7a60: 6f 74 65 64 5f 73 74 72 69 6e 67 28 46 49 4c 45  oted_string(FILE
7a70: 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 63 68 61   *out, const cha
7a80: 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a  r *z){.  int i;.
7a90: 20 20 63 68 61 72 20 63 3b 0a 20 20 73 65 74 42    char c;.  setB
7aa0: 69 6e 61 72 79 4d 6f 64 65 28 6f 75 74 2c 20 31  inaryMode(out, 1
7ab0: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 28 63  );.  for(i=0; (c
7ac0: 20 3d 20 7a 5b 69 5d 29 21 3d 30 20 26 26 20 63   = z[i])!=0 && c
7ad0: 21 3d 27 5c 27 27 3b 20 69 2b 2b 29 7b 7d 0a 20  !='\''; i++){}. 
7ae0: 20 69 66 28 20 63 3d 3d 30 20 29 7b 0a 20 20 20   if( c==0 ){.   
7af0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74   utf8_printf(out
7b00: 2c 22 27 25 73 27 22 2c 7a 29 3b 0a 20 20 7d 65  ,"'%s'",z);.  }e
7b10: 6c 73 65 7b 0a 20 20 20 20 72 61 77 5f 70 72 69  lse{.    raw_pri
7b20: 6e 74 66 28 6f 75 74 2c 20 22 27 22 29 3b 0a 20  ntf(out, "'");. 
7b30: 20 20 20 77 68 69 6c 65 28 20 2a 7a 20 29 7b 0a     while( *z ){.
7b40: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 28        for(i=0; (
7b50: 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 20 26 26 20  c = z[i])!=0 && 
7b60: 63 21 3d 27 5c 27 27 3b 20 69 2b 2b 29 7b 7d 0a  c!='\''; i++){}.
7b70: 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 5c 27        if( c=='\'
7b80: 27 20 29 20 69 2b 2b 3b 0a 20 20 20 20 20 20 69  ' ) i++;.      i
7b90: 66 28 20 69 20 29 7b 0a 20 20 20 20 20 20 20 20  f( i ){.        
7ba0: 75 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c  utf8_printf(out,
7bb0: 20 22 25 2e 2a 73 22 2c 20 69 2c 20 7a 29 3b 0a   "%.*s", i, z);.
7bc0: 20 20 20 20 20 20 20 20 7a 20 2b 3d 20 69 3b 0a          z += i;.
7bd0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
7be0: 28 20 63 3d 3d 27 5c 27 27 20 29 7b 0a 20 20 20  ( c=='\'' ){.   
7bf0: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
7c00: 6f 75 74 2c 20 22 27 22 29 3b 0a 20 20 20 20 20  out, "'");.     
7c10: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20     continue;.   
7c20: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63     }.      if( c
7c30: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 62  ==0 ){.        b
7c40: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
7c50: 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20      z++;.    }. 
7c60: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75     raw_printf(ou
7c70: 74 2c 20 22 27 22 29 3b 0a 20 20 7d 0a 20 20 73  t, "'");.  }.  s
7c80: 65 74 54 65 78 74 4d 6f 64 65 28 6f 75 74 2c 20  etTextMode(out, 
7c90: 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74  1);.}../*.** Out
7ca0: 70 75 74 20 74 68 65 20 67 69 76 65 6e 20 73 74  put the given st
7cb0: 72 69 6e 67 20 61 73 20 61 20 71 75 6f 74 65 64  ring as a quoted
7cc0: 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 53 51   string using SQ
7cd0: 4c 20 71 75 6f 74 69 6e 67 20 63 6f 6e 76 65 6e  L quoting conven
7ce0: 74 69 6f 6e 73 2e 0a 2a 2a 20 41 64 64 69 74 69  tions..** Additi
7cf0: 6f 6e 61 6c 6c 6c 79 20 2c 20 65 73 63 61 70 65  onallly , escape
7d00: 20 74 68 65 20 22 5c 6e 22 20 61 6e 64 20 22 5c   the "\n" and "\
7d10: 72 22 20 63 68 61 72 61 63 74 65 72 73 20 73 6f  r" characters so
7d20: 20 74 68 61 74 20 74 68 65 79 20 64 6f 20 6e 6f   that they do no
7d30: 74 0a 2a 2a 20 67 65 74 20 63 6f 72 72 75 70 74  t.** get corrupt
7d40: 65 64 20 62 79 20 65 6e 64 2d 6f 66 2d 6c 69 6e  ed by end-of-lin
7d50: 65 20 74 72 61 6e 73 6c 61 74 69 6f 6e 20 66 61  e translation fa
7d60: 63 69 6c 69 74 69 65 73 20 69 6e 20 73 6f 6d 65  cilities in some
7d70: 20 6f 70 65 72 61 74 69 6e 67 0a 2a 2a 20 73 79   operating.** sy
7d80: 73 74 65 6d 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  stems..**.** Thi
7d90: 73 20 69 73 20 6c 69 6b 65 20 6f 75 74 70 75 74  s is like output
7da0: 5f 71 75 6f 74 65 64 5f 73 74 72 69 6e 67 28 29  _quoted_string()
7db0: 20 62 75 74 20 77 69 74 68 20 74 68 65 20 61 64   but with the ad
7dc0: 64 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 5c 72  dition of the \r
7dd0: 5c 6e 0a 2a 2a 20 65 73 63 61 70 65 20 6d 65 63  \n.** escape mec
7de0: 68 61 6e 69 73 6d 2e 0a 2a 2f 0a 73 74 61 74 69  hanism..*/.stati
7df0: 63 20 76 6f 69 64 20 6f 75 74 70 75 74 5f 71 75  c void output_qu
7e00: 6f 74 65 64 5f 65 73 63 61 70 65 64 5f 73 74 72  oted_escaped_str
7e10: 69 6e 67 28 46 49 4c 45 20 2a 6f 75 74 2c 20 63  ing(FILE *out, c
7e20: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20  onst char *z){. 
7e30: 20 69 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 63   int i;.  char c
7e40: 3b 0a 20 20 73 65 74 42 69 6e 61 72 79 4d 6f 64  ;.  setBinaryMod
7e50: 65 28 6f 75 74 2c 20 31 29 3b 0a 20 20 66 6f 72  e(out, 1);.  for
7e60: 28 69 3d 30 3b 20 28 63 20 3d 20 7a 5b 69 5d 29  (i=0; (c = z[i])
7e70: 21 3d 30 20 26 26 20 63 21 3d 27 5c 27 27 20 26  !=0 && c!='\'' &
7e80: 26 20 63 21 3d 27 5c 6e 27 20 26 26 20 63 21 3d  & c!='\n' && c!=
7e90: 27 5c 72 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 69  '\r'; i++){}.  i
7ea0: 66 28 20 63 3d 3d 30 20 29 7b 0a 20 20 20 20 75  f( c==0 ){.    u
7eb0: 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22  tf8_printf(out,"
7ec0: 27 25 73 27 22 2c 7a 29 3b 0a 20 20 7d 65 6c 73  '%s'",z);.  }els
7ed0: 65 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  e{.    const cha
7ee0: 72 20 2a 7a 4e 4c 20 3d 20 30 3b 0a 20 20 20 20  r *zNL = 0;.    
7ef0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 52 20  const char *zCR 
7f00: 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 6e 4e 4c  = 0;.    int nNL
7f10: 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 6e 43   = 0;.    int nC
7f20: 52 20 3d 20 30 3b 0a 20 20 20 20 63 68 61 72 20  R = 0;.    char 
7f30: 7a 42 75 66 31 5b 32 30 5d 2c 20 7a 42 75 66 32  zBuf1[20], zBuf2
7f40: 5b 32 30 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d  [20];.    for(i=
7f50: 30 3b 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20  0; z[i]; i++){. 
7f60: 20 20 20 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27       if( z[i]=='
7f70: 5c 6e 27 20 29 20 6e 4e 4c 2b 2b 3b 0a 20 20 20  \n' ) nNL++;.   
7f80: 20 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 5c 72     if( z[i]=='\r
7f90: 27 20 29 20 6e 43 52 2b 2b 3b 0a 20 20 20 20 7d  ' ) nCR++;.    }
7fa0: 0a 20 20 20 20 69 66 28 20 6e 4e 4c 20 29 7b 0a  .    if( nNL ){.
7fb0: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
7fc0: 28 6f 75 74 2c 20 22 72 65 70 6c 61 63 65 28 22  (out, "replace("
7fd0: 29 3b 0a 20 20 20 20 20 20 7a 4e 4c 20 3d 20 75  );.      zNL = u
7fe0: 6e 75 73 65 64 5f 73 74 72 69 6e 67 28 7a 2c 20  nused_string(z, 
7ff0: 22 5c 5c 6e 22 2c 20 22 5c 5c 30 31 32 22 2c 20  "\\n", "\\012", 
8000: 7a 42 75 66 31 29 3b 0a 20 20 20 20 7d 0a 20 20  zBuf1);.    }.  
8010: 20 20 69 66 28 20 6e 43 52 20 29 7b 0a 20 20 20    if( nCR ){.   
8020: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75     raw_printf(ou
8030: 74 2c 20 22 72 65 70 6c 61 63 65 28 22 29 3b 0a  t, "replace(");.
8040: 20 20 20 20 20 20 7a 43 52 20 3d 20 75 6e 75 73        zCR = unus
8050: 65 64 5f 73 74 72 69 6e 67 28 7a 2c 20 22 5c 5c  ed_string(z, "\\
8060: 72 22 2c 20 22 5c 5c 30 31 35 22 2c 20 7a 42 75  r", "\\015", zBu
8070: 66 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  f2);.    }.    r
8080: 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
8090: 27 22 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  '");.    while( 
80a0: 2a 7a 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28  *z ){.      for(
80b0: 69 3d 30 3b 20 28 63 20 3d 20 7a 5b 69 5d 29 21  i=0; (c = z[i])!
80c0: 3d 30 20 26 26 20 63 21 3d 27 5c 6e 27 20 26 26  =0 && c!='\n' &&
80d0: 20 63 21 3d 27 5c 72 27 20 26 26 20 63 21 3d 27   c!='\r' && c!='
80e0: 5c 27 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20  \''; i++){}.    
80f0: 20 20 69 66 28 20 63 3d 3d 27 5c 27 27 20 29 20    if( c=='\'' ) 
8100: 69 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 69  i++;.      if( i
8110: 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38   ){.        utf8
8120: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 2e  _printf(out, "%.
8130: 2a 73 22 2c 20 69 2c 20 7a 29 3b 0a 20 20 20 20  *s", i, z);.    
8140: 20 20 20 20 7a 20 2b 3d 20 69 3b 0a 20 20 20 20      z += i;.    
8150: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63 3d    }.      if( c=
8160: 3d 27 5c 27 27 20 29 7b 0a 20 20 20 20 20 20 20  ='\'' ){.       
8170: 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c   raw_printf(out,
8180: 20 22 27 22 29 3b 0a 20 20 20 20 20 20 20 20 63   "'");.        c
8190: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 7d  ontinue;.      }
81a0: 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20  .      if( c==0 
81b0: 29 7b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  ){.        break
81c0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
81d0: 7a 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 63  z++;.      if( c
81e0: 3d 3d 27 5c 6e 27 20 29 7b 0a 20 20 20 20 20 20  =='\n' ){.      
81f0: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74    raw_printf(out
8200: 2c 20 22 25 73 22 2c 20 7a 4e 4c 29 3b 0a 20 20  , "%s", zNL);.  
8210: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a        continue;.
8220: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 61        }.      ra
8230: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25  w_printf(out, "%
8240: 73 22 2c 20 7a 43 52 29 3b 0a 20 20 20 20 7d 0a  s", zCR);.    }.
8250: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f      raw_printf(o
8260: 75 74 2c 20 22 27 22 29 3b 0a 20 20 20 20 69 66  ut, "'");.    if
8270: 28 20 6e 43 52 20 29 7b 0a 20 20 20 20 20 20 72  ( nCR ){.      r
8280: 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
8290: 2c 27 25 73 27 2c 63 68 61 72 28 31 33 29 29 22  ,'%s',char(13))"
82a0: 2c 20 7a 43 52 29 3b 0a 20 20 20 20 7d 0a 20 20  , zCR);.    }.  
82b0: 20 20 69 66 28 20 6e 4e 4c 20 29 7b 0a 20 20 20    if( nNL ){.   
82c0: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75     raw_printf(ou
82d0: 74 2c 20 22 2c 27 25 73 27 2c 63 68 61 72 28 31  t, ",'%s',char(1
82e0: 30 29 29 22 2c 20 7a 4e 4c 29 3b 0a 20 20 20 20  0))", zNL);.    
82f0: 7d 0a 20 20 7d 0a 20 20 73 65 74 54 65 78 74 4d  }.  }.  setTextM
8300: 6f 64 65 28 6f 75 74 2c 20 31 29 3b 0a 7d 0a 0a  ode(out, 1);.}..
8310: 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 74 68 65  /*.** Output the
8320: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
8330: 20 61 20 71 75 6f 74 65 64 20 61 63 63 6f 72 64   a quoted accord
8340: 69 6e 67 20 74 6f 20 43 20 6f 72 20 54 43 4c 20  ing to C or TCL 
8350: 71 75 6f 74 69 6e 67 20 72 75 6c 65 73 2e 0a 2a  quoting rules..*
8360: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f 75  /.static void ou
8370: 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 46 49  tput_c_string(FI
8380: 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 63  LE *out, const c
8390: 68 61 72 20 2a 7a 29 7b 0a 20 20 75 6e 73 69 67  har *z){.  unsig
83a0: 6e 65 64 20 69 6e 74 20 63 3b 0a 20 20 66 70 75  ned int c;.  fpu
83b0: 74 63 28 27 22 27 2c 20 6f 75 74 29 3b 0a 20 20  tc('"', out);.  
83c0: 77 68 69 6c 65 28 20 28 63 20 3d 20 2a 28 7a 2b  while( (c = *(z+
83d0: 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  +))!=0 ){.    if
83e0: 28 20 63 3d 3d 27 5c 5c 27 20 29 7b 0a 20 20 20  ( c=='\\' ){.   
83f0: 20 20 20 66 70 75 74 63 28 63 2c 20 6f 75 74 29     fputc(c, out)
8400: 3b 0a 20 20 20 20 20 20 66 70 75 74 63 28 63 2c  ;.      fputc(c,
8410: 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65   out);.    }else
8420: 20 69 66 28 20 63 3d 3d 27 22 27 20 29 7b 0a 20   if( c=='"' ){. 
8430: 20 20 20 20 20 66 70 75 74 63 28 27 5c 5c 27 2c       fputc('\\',
8440: 20 6f 75 74 29 3b 0a 20 20 20 20 20 20 66 70 75   out);.      fpu
8450: 74 63 28 27 22 27 2c 20 6f 75 74 29 3b 0a 20 20  tc('"', out);.  
8460: 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27    }else if( c=='
8470: 5c 74 27 20 29 7b 0a 20 20 20 20 20 20 66 70 75  \t' ){.      fpu
8480: 74 63 28 27 5c 5c 27 2c 20 6f 75 74 29 3b 0a 20  tc('\\', out);. 
8490: 20 20 20 20 20 66 70 75 74 63 28 27 74 27 2c 20       fputc('t', 
84a0: 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  out);.    }else 
84b0: 69 66 28 20 63 3d 3d 27 5c 6e 27 20 29 7b 0a 20  if( c=='\n' ){. 
84c0: 20 20 20 20 20 66 70 75 74 63 28 27 5c 5c 27 2c       fputc('\\',
84d0: 20 6f 75 74 29 3b 0a 20 20 20 20 20 20 66 70 75   out);.      fpu
84e0: 74 63 28 27 6e 27 2c 20 6f 75 74 29 3b 0a 20 20  tc('n', out);.  
84f0: 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27    }else if( c=='
8500: 5c 72 27 20 29 7b 0a 20 20 20 20 20 20 66 70 75  \r' ){.      fpu
8510: 74 63 28 27 5c 5c 27 2c 20 6f 75 74 29 3b 0a 20  tc('\\', out);. 
8520: 20 20 20 20 20 66 70 75 74 63 28 27 72 27 2c 20       fputc('r', 
8530: 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  out);.    }else 
8540: 69 66 28 20 21 69 73 70 72 69 6e 74 28 63 26 30  if( !isprint(c&0
8550: 78 66 66 29 20 29 7b 0a 20 20 20 20 20 20 72 61  xff) ){.      ra
8560: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 5c  w_printf(out, "\
8570: 5c 25 30 33 6f 22 2c 20 63 26 30 78 66 66 29 3b  \%03o", c&0xff);
8580: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
8590: 20 20 66 70 75 74 63 28 63 2c 20 6f 75 74 29 3b    fputc(c, out);
85a0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66 70 75  .    }.  }.  fpu
85b0: 74 63 28 27 22 27 2c 20 6f 75 74 29 3b 0a 7d 0a  tc('"', out);.}.
85c0: 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 74 68  ./*.** Output th
85d0: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 77  e given string w
85e0: 69 74 68 20 63 68 61 72 61 63 74 65 72 73 20 74  ith characters t
85f0: 68 61 74 20 61 72 65 20 73 70 65 63 69 61 6c 20  hat are special 
8600: 74 6f 0a 2a 2a 20 48 54 4d 4c 20 65 73 63 61 70  to.** HTML escap
8610: 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ed..*/.static vo
8620: 69 64 20 6f 75 74 70 75 74 5f 68 74 6d 6c 5f 73  id output_html_s
8630: 74 72 69 6e 67 28 46 49 4c 45 20 2a 6f 75 74 2c  tring(FILE *out,
8640: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b   const char *z){
8650: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20  .  int i;.  if( 
8660: 7a 3d 3d 30 20 29 20 7a 20 3d 20 22 22 3b 0a 20  z==0 ) z = "";. 
8670: 20 77 68 69 6c 65 28 20 2a 7a 20 29 7b 0a 20 20   while( *z ){.  
8680: 20 20 66 6f 72 28 69 3d 30 3b 20 20 20 7a 5b 69    for(i=0;   z[i
8690: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ].            &&
86a0: 20 7a 5b 69 5d 21 3d 27 3c 27 0a 20 20 20 20 20   z[i]!='<'.     
86b0: 20 20 20 20 20 20 20 26 26 20 7a 5b 69 5d 21 3d         && z[i]!=
86c0: 27 26 27 0a 20 20 20 20 20 20 20 20 20 20 20 20  '&'.            
86d0: 26 26 20 7a 5b 69 5d 21 3d 27 3e 27 0a 20 20 20  && z[i]!='>'.   
86e0: 20 20 20 20 20 20 20 20 20 26 26 20 7a 5b 69 5d           && z[i]
86f0: 21 3d 27 5c 22 27 0a 20 20 20 20 20 20 20 20 20  !='\"'.         
8700: 20 20 20 26 26 20 7a 5b 69 5d 21 3d 27 5c 27 27     && z[i]!='\''
8710: 3b 0a 20 20 20 20 20 20 20 20 69 2b 2b 29 7b 7d  ;.        i++){}
8720: 0a 20 20 20 20 69 66 28 20 69 3e 30 20 29 7b 0a  .    if( i>0 ){.
8730: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
8740: 66 28 6f 75 74 2c 22 25 2e 2a 73 22 2c 69 2c 7a  f(out,"%.*s",i,z
8750: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
8760: 20 7a 5b 69 5d 3d 3d 27 3c 27 20 29 7b 0a 20 20   z[i]=='<' ){.  
8770: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f      raw_printf(o
8780: 75 74 2c 22 26 6c 74 3b 22 29 3b 0a 20 20 20 20  ut,"&lt;");.    
8790: 7d 65 6c 73 65 20 69 66 28 20 7a 5b 69 5d 3d 3d  }else if( z[i]==
87a0: 27 26 27 20 29 7b 0a 20 20 20 20 20 20 72 61 77  '&' ){.      raw
87b0: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 26 61 6d  _printf(out,"&am
87c0: 70 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  p;");.    }else 
87d0: 69 66 28 20 7a 5b 69 5d 3d 3d 27 3e 27 20 29 7b  if( z[i]=='>' ){
87e0: 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
87f0: 66 28 6f 75 74 2c 22 26 67 74 3b 22 29 3b 0a 20  f(out,"&gt;");. 
8800: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b 69     }else if( z[i
8810: 5d 3d 3d 27 5c 22 27 20 29 7b 0a 20 20 20 20 20  ]=='\"' ){.     
8820: 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c   raw_printf(out,
8830: 22 26 71 75 6f 74 3b 22 29 3b 0a 20 20 20 20 7d  "&quot;");.    }
8840: 65 6c 73 65 20 69 66 28 20 7a 5b 69 5d 3d 3d 27  else if( z[i]=='
8850: 5c 27 27 20 29 7b 0a 20 20 20 20 20 20 72 61 77  \'' ){.      raw
8860: 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 26 23 33  _printf(out,"&#3
8870: 39 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  9;");.    }else{
8880: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
8890: 20 20 7d 0a 20 20 20 20 7a 20 2b 3d 20 69 20 2b    }.    z += i +
88a0: 20 31 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a   1;.  }.}../*.**
88b0: 20 49 66 20 61 20 66 69 65 6c 64 20 63 6f 6e 74   If a field cont
88c0: 61 69 6e 73 20 61 6e 79 20 63 68 61 72 61 63 74  ains any charact
88d0: 65 72 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  er identified by
88e0: 20 61 20 31 20 69 6e 20 74 68 65 20 66 6f 6c 6c   a 1 in the foll
88f0: 6f 77 69 6e 67 0a 2a 2a 20 61 72 72 61 79 2c 20  owing.** array, 
8900: 74 68 65 6e 20 74 68 65 20 73 74 72 69 6e 67 20  then the string 
8910: 6d 75 73 74 20 62 65 20 71 75 6f 74 65 64 20 66  must be quoted f
8920: 6f 72 20 43 53 56 2e 0a 2a 2f 0a 73 74 61 74 69  or CSV..*/.stati
8930: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 6e 65 65  c const char nee
8940: 64 43 73 76 51 75 6f 74 65 5b 5d 20 3d 20 7b 0a  dCsvQuote[] = {.
8950: 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    1, 1, 1, 1, 1,
8960: 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31   1, 1, 1,   1, 1
8970: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
8980: 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31   1,.  1, 1, 1, 1
8990: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20  , 1, 1, 1, 1,   
89a0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
89b0: 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20 30 2c 20  , 1, 1,.  1, 0, 
89c0: 31 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31  1, 0, 0, 0, 0, 1
89d0: 2c 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20  ,   0, 0, 0, 0, 
89e0: 30 2c 20 30 2c 20 30 2c 20 30 2c 0a 20 20 30 2c  0, 0, 0, 0,.  0,
89f0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
8a00: 30 2c 20 30 2c 20 20 20 30 2c 20 30 2c 20 30 2c  0, 0,   0, 0, 0,
8a10: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 0a   0, 0, 0, 0, 0,.
8a20: 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c    0, 0, 0, 0, 0,
8a30: 20 30 2c 20 30 2c 20 30 2c 20 20 20 30 2c 20 30   0, 0, 0,   0, 0
8a40: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
8a50: 20 30 2c 0a 20 20 30 2c 20 30 2c 20 30 2c 20 30   0,.  0, 0, 0, 0
8a60: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 20 20  , 0, 0, 0, 0,   
8a70: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
8a80: 2c 20 30 2c 20 30 2c 0a 20 20 30 2c 20 30 2c 20  , 0, 0,.  0, 0, 
8a90: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
8aa0: 2c 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20  ,   0, 0, 0, 0, 
8ab0: 30 2c 20 30 2c 20 30 2c 20 30 2c 0a 20 20 30 2c  0, 0, 0, 0,.  0,
8ac0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
8ad0: 30 2c 20 30 2c 20 20 20 30 2c 20 30 2c 20 30 2c  0, 0,   0, 0, 0,
8ae0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 0a   0, 0, 0, 0, 1,.
8af0: 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    1, 1, 1, 1, 1,
8b00: 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31   1, 1, 1,   1, 1
8b10: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
8b20: 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31   1,.  1, 1, 1, 1
8b30: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20  , 1, 1, 1, 1,   
8b40: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8b50: 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20  , 1, 1,.  1, 1, 
8b60: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8b70: 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20  ,   1, 1, 1, 1, 
8b80: 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20 31 2c  1, 1, 1, 1,.  1,
8b90: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
8ba0: 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c  1, 1,   1, 1, 1,
8bb0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a   1, 1, 1, 1, 1,.
8bc0: 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    1, 1, 1, 1, 1,
8bd0: 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31   1, 1, 1,   1, 1
8be0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
8bf0: 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31   1,.  1, 1, 1, 1
8c00: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20  , 1, 1, 1, 1,   
8c10: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8c20: 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20  , 1, 1,.  1, 1, 
8c30: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
8c40: 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20  ,   1, 1, 1, 1, 
8c50: 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20 31 2c  1, 1, 1, 1,.  1,
8c60: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
8c70: 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c  1, 1,   1, 1, 1,
8c80: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a   1, 1, 1, 1, 1,.
8c90: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74  };../*.** Output
8ca0: 20 61 20 73 69 6e 67 6c 65 20 74 65 72 6d 20 6f   a single term o
8cb0: 66 20 43 53 56 2e 20 20 41 63 74 75 61 6c 6c 79  f CSV.  Actually
8cc0: 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  , p->colSeparato
8cd0: 72 20 69 73 20 75 73 65 64 20 66 6f 72 0a 2a 2a  r is used for.**
8ce0: 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 2c 20   the separator, 
8cf0: 77 68 69 63 68 20 6d 61 79 20 6f 72 20 6d 61 79  which may or may
8d00: 20 6e 6f 74 20 62 65 20 61 20 63 6f 6d 6d 61 2e   not be a comma.
8d10: 20 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 20 69    p->nullValue i
8d20: 73 0a 2a 2a 20 74 68 65 20 6e 75 6c 6c 20 76 61  s.** the null va
8d30: 6c 75 65 2e 20 20 53 74 72 69 6e 67 73 20 61 72  lue.  Strings ar
8d40: 65 20 71 75 6f 74 65 64 20 69 66 20 6e 65 63 65  e quoted if nece
8d50: 73 73 61 72 79 2e 20 20 54 68 65 20 73 65 70 61  ssary.  The sepa
8d60: 72 61 74 6f 72 0a 2a 2a 20 69 73 20 6f 6e 6c 79  rator.** is only
8d70: 20 69 73 73 75 65 64 20 69 66 20 62 53 65 70 20   issued if bSep 
8d80: 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 73 74 61 74  is true..*/.stat
8d90: 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74 5f 63  ic void output_c
8da0: 73 76 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  sv(ShellState *p
8db0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
8dc0: 20 69 6e 74 20 62 53 65 70 29 7b 0a 20 20 46 49   int bSep){.  FI
8dd0: 4c 45 20 2a 6f 75 74 20 3d 20 70 2d 3e 6f 75 74  LE *out = p->out
8de0: 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a  ;.  if( z==0 ){.
8df0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
8e00: 6f 75 74 2c 22 25 73 22 2c 70 2d 3e 6e 75 6c 6c  out,"%s",p->null
8e10: 56 61 6c 75 65 29 3b 0a 20 20 7d 65 6c 73 65 7b  Value);.  }else{
8e20: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
8e30: 69 6e 74 20 6e 53 65 70 20 3d 20 73 74 72 6c 65  int nSep = strle
8e40: 6e 33 30 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61  n30(p->colSepara
8e50: 74 6f 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  tor);.    for(i=
8e60: 30 3b 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20  0; z[i]; i++){. 
8e70: 20 20 20 20 20 69 66 28 20 6e 65 65 64 43 73 76       if( needCsv
8e80: 51 75 6f 74 65 5b 28 28 75 6e 73 69 67 6e 65 64  Quote[((unsigned
8e90: 20 63 68 61 72 2a 29 7a 29 5b 69 5d 5d 0a 20 20   char*)z)[i]].  
8ea0: 20 20 20 20 20 20 20 7c 7c 20 28 7a 5b 69 5d 3d         || (z[i]=
8eb0: 3d 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72  =p->colSeparator
8ec0: 5b 30 5d 20 26 26 0a 20 20 20 20 20 20 20 20 20  [0] &&.         
8ed0: 20 20 20 20 28 6e 53 65 70 3d 3d 31 20 7c 7c 20      (nSep==1 || 
8ee0: 6d 65 6d 63 6d 70 28 7a 2c 20 70 2d 3e 63 6f 6c  memcmp(z, p->col
8ef0: 53 65 70 61 72 61 74 6f 72 2c 20 6e 53 65 70 29  Separator, nSep)
8f00: 3d 3d 30 29 29 20 29 7b 0a 20 20 20 20 20 20 20  ==0)) ){.       
8f10: 20 69 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20   i = 0;.        
8f20: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
8f30: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69 3d 3d     }.    if( i==
8f40: 30 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20  0 ){.      char 
8f50: 2a 7a 51 75 6f 74 65 64 20 3d 20 73 71 6c 69 74  *zQuoted = sqlit
8f60: 65 33 5f 6d 70 72 69 6e 74 66 28 22 5c 22 25 77  e3_mprintf("\"%w
8f70: 5c 22 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 75  \"", z);.      u
8f80: 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  tf8_printf(out, 
8f90: 22 25 73 22 2c 20 7a 51 75 6f 74 65 64 29 3b 0a  "%s", zQuoted);.
8fa0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
8fb0: 65 65 28 7a 51 75 6f 74 65 64 29 3b 0a 20 20 20  ee(zQuoted);.   
8fc0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 75 74   }else{.      ut
8fd0: 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  f8_printf(out, "
8fe0: 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20  %s", z);.    }. 
8ff0: 20 7d 0a 20 20 69 66 28 20 62 53 65 70 20 29 7b   }.  if( bSep ){
9000: 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
9010: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70  (p->out, "%s", p
9020: 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b  ->colSeparator);
9030: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  .  }.}../*.** Th
9040: 69 73 20 72 6f 75 74 69 6e 65 20 72 75 6e 73 20  is routine runs 
9050: 77 68 65 6e 20 74 68 65 20 75 73 65 72 20 70 72  when the user pr
9060: 65 73 73 65 73 20 43 74 72 6c 2d 43 0a 2a 2f 0a  esses Ctrl-C.*/.
9070: 73 74 61 74 69 63 20 76 6f 69 64 20 69 6e 74 65  static void inte
9080: 72 72 75 70 74 5f 68 61 6e 64 6c 65 72 28 69 6e  rrupt_handler(in
9090: 74 20 4e 6f 74 55 73 65 64 29 7b 0a 20 20 55 4e  t NotUsed){.  UN
90a0: 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 4e  USED_PARAMETER(N
90b0: 6f 74 55 73 65 64 29 3b 0a 20 20 73 65 65 6e 49  otUsed);.  seenI
90c0: 6e 74 65 72 72 75 70 74 2b 2b 3b 0a 20 20 69 66  nterrupt++;.  if
90d0: 28 20 73 65 65 6e 49 6e 74 65 72 72 75 70 74 3e  ( seenInterrupt>
90e0: 32 20 29 20 65 78 69 74 28 31 29 3b 0a 20 20 69  2 ) exit(1);.  i
90f0: 66 28 20 67 6c 6f 62 61 6c 44 62 20 29 20 73 71  f( globalDb ) sq
9100: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
9110: 67 6c 6f 62 61 6c 44 62 29 3b 0a 7d 0a 0a 23 69  globalDb);.}..#i
9120: 66 20 28 64 65 66 69 6e 65 64 28 5f 57 49 4e 33  f (defined(_WIN3
9130: 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 57 49  2) || defined(WI
9140: 4e 33 32 29 29 20 26 26 20 21 64 65 66 69 6e 65  N32)) && !define
9150: 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 2f 2a  d(_WIN32_WCE)./*
9160: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
9170: 20 72 75 6e 73 20 66 6f 72 20 63 6f 6e 73 6f 6c   runs for consol
9180: 65 20 65 76 65 6e 74 73 20 28 65 2e 67 2e 20 43  e events (e.g. C
9190: 74 72 6c 2d 43 29 20 6f 6e 20 57 69 6e 33 32 0a  trl-C) on Win32.
91a0: 2a 2f 0a 73 74 61 74 69 63 20 42 4f 4f 4c 20 57  */.static BOOL W
91b0: 49 4e 41 50 49 20 43 6f 6e 73 6f 6c 65 43 74 72  INAPI ConsoleCtr
91c0: 6c 48 61 6e 64 6c 65 72 28 0a 20 20 44 57 4f 52  lHandler(.  DWOR
91d0: 44 20 64 77 43 74 72 6c 54 79 70 65 20 2f 2a 20  D dwCtrlType /* 
91e0: 4f 6e 65 20 6f 66 20 74 68 65 20 43 54 52 4c 5f  One of the CTRL_
91f0: 2a 5f 45 56 45 4e 54 20 63 6f 6e 73 74 61 6e 74  *_EVENT constant
9200: 73 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 64 77  s */.){.  if( dw
9210: 43 74 72 6c 54 79 70 65 3d 3d 43 54 52 4c 5f 43  CtrlType==CTRL_C
9220: 5f 45 56 45 4e 54 20 29 7b 0a 20 20 20 20 69 6e  _EVENT ){.    in
9230: 74 65 72 72 75 70 74 5f 68 61 6e 64 6c 65 72 28  terrupt_handler(
9240: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
9250: 52 55 45 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  RUE;.  }.  retur
9260: 6e 20 46 41 4c 53 45 3b 0a 7d 0a 23 65 6e 64 69  n FALSE;.}.#endi
9270: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
9280: 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
9290: 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20  TION./*.** When 
92a0: 74 68 65 20 22 2e 61 75 74 68 20 4f 4e 22 20 69  the ".auth ON" i
92b0: 73 20 73 65 74 2c 20 74 68 65 20 66 6f 6c 6c 6f  s set, the follo
92c0: 77 69 6e 67 20 61 75 74 68 6f 72 69 7a 65 72 20  wing authorizer 
92d0: 63 61 6c 6c 62 61 63 6b 20 69 73 0a 2a 2a 20 69  callback is.** i
92e0: 6e 76 6f 6b 65 64 2e 20 20 49 74 20 61 6c 77 61  nvoked.  It alwa
92f0: 79 73 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54  ys returns SQLIT
9300: 45 5f 4f 4b 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  E_OK..*/.static 
9310: 69 6e 74 20 73 68 65 6c 6c 41 75 74 68 28 0a 20  int shellAuth(. 
9320: 20 76 6f 69 64 20 2a 70 43 6c 69 65 6e 74 44 61   void *pClientDa
9330: 74 61 2c 0a 20 20 69 6e 74 20 6f 70 2c 0a 20 20  ta,.  int op,.  
9340: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 31 2c  const char *zA1,
9350: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
9360: 41 32 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  A2,.  const char
9370: 20 2a 7a 41 33 2c 0a 20 20 63 6f 6e 73 74 20 63   *zA3,.  const c
9380: 68 61 72 20 2a 7a 41 34 0a 29 7b 0a 20 20 53 68  har *zA4.){.  Sh
9390: 65 6c 6c 53 74 61 74 65 20 2a 70 20 3d 20 28 53  ellState *p = (S
93a0: 68 65 6c 6c 53 74 61 74 65 2a 29 70 43 6c 69 65  hellState*)pClie
93b0: 6e 74 44 61 74 61 3b 0a 20 20 73 74 61 74 69 63  ntData;.  static
93c0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 41   const char *azA
93d0: 63 74 69 6f 6e 5b 5d 20 3d 20 7b 20 30 2c 0a 20  ction[] = { 0,. 
93e0: 20 20 20 20 22 43 52 45 41 54 45 5f 49 4e 44 45      "CREATE_INDE
93f0: 58 22 2c 20 20 20 20 20 20 20 20 20 22 43 52 45  X",         "CRE
9400: 41 54 45 5f 54 41 42 4c 45 22 2c 20 20 20 20 20  ATE_TABLE",     
9410: 20 20 20 20 22 43 52 45 41 54 45 5f 54 45 4d 50      "CREATE_TEMP
9420: 5f 49 4e 44 45 58 22 2c 0a 20 20 20 20 20 22 43  _INDEX",.     "C
9430: 52 45 41 54 45 5f 54 45 4d 50 5f 54 41 42 4c 45  REATE_TEMP_TABLE
9440: 22 2c 20 20 20 20 22 43 52 45 41 54 45 5f 54 45  ",    "CREATE_TE
9450: 4d 50 5f 54 52 49 47 47 45 52 22 2c 20 20 22 43  MP_TRIGGER",  "C
9460: 52 45 41 54 45 5f 54 45 4d 50 5f 56 49 45 57 22  REATE_TEMP_VIEW"
9470: 2c 0a 20 20 20 20 20 22 43 52 45 41 54 45 5f 54  ,.     "CREATE_T
9480: 52 49 47 47 45 52 22 2c 20 20 20 20 20 20 20 22  RIGGER",       "
9490: 43 52 45 41 54 45 5f 56 49 45 57 22 2c 20 20 20  CREATE_VIEW",   
94a0: 20 20 20 20 20 20 20 22 44 45 4c 45 54 45 22 2c         "DELETE",
94b0: 0a 20 20 20 20 20 22 44 52 4f 50 5f 49 4e 44 45  .     "DROP_INDE
94c0: 58 22 2c 20 20 20 20 20 20 20 20 20 20 20 22 44  X",           "D
94d0: 52 4f 50 5f 54 41 42 4c 45 22 2c 20 20 20 20 20  ROP_TABLE",     
94e0: 20 20 20 20 20 20 22 44 52 4f 50 5f 54 45 4d 50        "DROP_TEMP
94f0: 5f 49 4e 44 45 58 22 2c 0a 20 20 20 20 20 22 44  _INDEX",.     "D
9500: 52 4f 50 5f 54 45 4d 50 5f 54 41 42 4c 45 22 2c  ROP_TEMP_TABLE",
9510: 20 20 20 20 20 20 22 44 52 4f 50 5f 54 45 4d 50        "DROP_TEMP
9520: 5f 54 52 49 47 47 45 52 22 2c 20 20 20 20 22 44  _TRIGGER",    "D
9530: 52 4f 50 5f 54 45 4d 50 5f 56 49 45 57 22 2c 0a  ROP_TEMP_VIEW",.
9540: 20 20 20 20 20 22 44 52 4f 50 5f 54 52 49 47 47       "DROP_TRIGG
9550: 45 52 22 2c 20 20 20 20 20 20 20 20 20 22 44 52  ER",         "DR
9560: 4f 50 5f 56 49 45 57 22 2c 20 20 20 20 20 20 20  OP_VIEW",       
9570: 20 20 20 20 20 22 49 4e 53 45 52 54 22 2c 0a 20       "INSERT",. 
9580: 20 20 20 20 22 50 52 41 47 4d 41 22 2c 20 20 20      "PRAGMA",   
9590: 20 20 20 20 20 20 20 20 20 20 20 20 22 52 45 41              "REA
95a0: 44 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  D",             
95b0: 20 20 20 20 22 53 45 4c 45 43 54 22 2c 0a 20 20      "SELECT",.  
95c0: 20 20 20 22 54 52 41 4e 53 41 43 54 49 4f 4e 22     "TRANSACTION"
95d0: 2c 20 20 20 20 20 20 20 20 20 20 22 55 50 44 41  ,          "UPDA
95e0: 54 45 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  TE",            
95f0: 20 20 20 22 41 54 54 41 43 48 22 2c 0a 20 20 20     "ATTACH",.   
9600: 20 20 22 44 45 54 41 43 48 22 2c 20 20 20 20 20    "DETACH",     
9610: 20 20 20 20 20 20 20 20 20 20 22 41 4c 54 45 52            "ALTER
9620: 5f 54 41 42 4c 45 22 2c 20 20 20 20 20 20 20 20  _TABLE",        
9630: 20 20 22 52 45 49 4e 44 45 58 22 2c 0a 20 20 20    "REINDEX",.   
9640: 20 20 22 41 4e 41 4c 59 5a 45 22 2c 20 20 20 20    "ANALYZE",    
9650: 20 20 20 20 20 20 20 20 20 20 22 43 52 45 41 54            "CREAT
9660: 45 5f 56 54 41 42 4c 45 22 2c 20 20 20 20 20 20  E_VTABLE",      
9670: 20 20 22 44 52 4f 50 5f 56 54 41 42 4c 45 22 2c    "DROP_VTABLE",
9680: 0a 20 20 20 20 20 22 46 55 4e 43 54 49 4f 4e 22  .     "FUNCTION"
9690: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53  ,             "S
96a0: 41 56 45 50 4f 49 4e 54 22 2c 20 20 20 20 20 20  AVEPOINT",      
96b0: 20 20 20 20 20 20 22 52 45 43 55 52 53 49 56 45        "RECURSIVE
96c0: 22 0a 20 20 7d 3b 0a 20 20 69 6e 74 20 69 3b 0a  ".  };.  int i;.
96d0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a    const char *az
96e0: 5b 34 5d 3b 0a 20 20 61 7a 5b 30 5d 20 3d 20 7a  [4];.  az[0] = z
96f0: 41 31 3b 0a 20 20 61 7a 5b 31 5d 20 3d 20 7a 41  A1;.  az[1] = zA
9700: 32 3b 0a 20 20 61 7a 5b 32 5d 20 3d 20 7a 41 33  2;.  az[2] = zA3
9710: 3b 0a 20 20 61 7a 5b 33 5d 20 3d 20 7a 41 34 3b  ;.  az[3] = zA4;
9720: 0a 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70  .  utf8_printf(p
9730: 2d 3e 6f 75 74 2c 20 22 61 75 74 68 6f 72 69 7a  ->out, "authoriz
9740: 65 72 3a 20 25 73 22 2c 20 61 7a 41 63 74 69 6f  er: %s", azActio
9750: 6e 5b 6f 70 5d 29 3b 0a 20 20 66 6f 72 28 69 3d  n[op]);.  for(i=
9760: 30 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20  0; i<4; i++){.  
9770: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
9780: 6f 75 74 2c 20 22 20 22 29 3b 0a 20 20 20 20 69  out, " ");.    i
9790: 66 28 20 61 7a 5b 69 5d 20 29 7b 0a 20 20 20 20  f( az[i] ){.    
97a0: 20 20 6f 75 74 70 75 74 5f 63 5f 73 74 72 69 6e    output_c_strin
97b0: 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 5b 69 5d 29  g(p->out, az[i])
97c0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
97d0: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
97e0: 3e 6f 75 74 2c 20 22 4e 55 4c 4c 22 29 3b 0a 20  >out, "NULL");. 
97f0: 20 20 20 7d 0a 20 20 7d 0a 20 20 72 61 77 5f 70     }.  }.  raw_p
9800: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c  rintf(p->out, "\
9810: 6e 22 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51  n");.  return SQ
9820: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69  LITE_OK;.}.#endi
9830: 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 61  f../*.** Print a
9840: 20 73 63 68 65 6d 61 20 73 74 61 74 65 6d 65 6e   schema statemen
9850: 74 2e 20 20 50 61 72 74 20 6f 66 20 4d 4f 44 45  t.  Part of MODE
9860: 5f 53 65 6d 69 20 61 6e 64 20 4d 4f 44 45 5f 50  _Semi and MODE_P
9870: 72 65 74 74 79 20 6f 75 74 70 75 74 2e 0a 2a 2a  retty output..**
9880: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
9890: 20 63 6f 6e 76 65 72 74 73 20 73 6f 6d 65 20 43   converts some C
98a0: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
98b0: 65 6d 65 6e 74 73 20 66 6f 72 20 73 68 61 64 6f  ements for shado
98c0: 77 20 74 61 62 6c 65 73 0a 2a 2a 20 69 6e 20 46  w tables.** in F
98d0: 54 53 33 2f 34 2f 35 20 69 6e 74 6f 20 43 52 45  TS3/4/5 into CRE
98e0: 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54  ATE TABLE IF NOT
98f0: 20 45 58 49 53 54 53 20 73 74 61 74 65 6d 65 6e   EXISTS statemen
9900: 74 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ts..*/.static vo
9910: 69 64 20 70 72 69 6e 74 53 63 68 65 6d 61 4c 69  id printSchemaLi
9920: 6e 65 28 46 49 4c 45 20 2a 6f 75 74 2c 20 63 6f  ne(FILE *out, co
9930: 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 63 6f 6e  nst char *z, con
9940: 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 29 7b  st char *zTail){
9950: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73  .  if( sqlite3_s
9960: 74 72 67 6c 6f 62 28 22 43 52 45 41 54 45 20 54  trglob("CREATE T
9970: 41 42 4c 45 20 5b 27 5c 22 5d 2a 22 2c 20 7a 29  ABLE ['\"]*", z)
9980: 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f  ==0 ){.    utf8_
9990: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 43 52 45  printf(out, "CRE
99a0: 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54  ATE TABLE IF NOT
99b0: 20 45 58 49 53 54 53 20 25 73 25 73 22 2c 20 7a   EXISTS %s%s", z
99c0: 2b 31 33 2c 20 7a 54 61 69 6c 29 3b 0a 20 20 7d  +13, zTail);.  }
99d0: 65 6c 73 65 7b 0a 20 20 20 20 75 74 66 38 5f 70  else{.    utf8_p
99e0: 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 25 73  rintf(out, "%s%s
99f0: 22 2c 20 7a 2c 20 7a 54 61 69 6c 29 3b 0a 20 20  ", z, zTail);.  
9a00: 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  }.}.static void 
9a10: 70 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 4e  printSchemaLineN
9a20: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 63 68 61 72  (FILE *out, char
9a30: 20 2a 7a 2c 20 69 6e 74 20 6e 2c 20 63 6f 6e 73   *z, int n, cons
9a40: 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 29 7b 0a  t char *zTail){.
9a50: 20 20 63 68 61 72 20 63 20 3d 20 7a 5b 6e 5d 3b    char c = z[n];
9a60: 0a 20 20 7a 5b 6e 5d 20 3d 20 30 3b 0a 20 20 70  .  z[n] = 0;.  p
9a70: 72 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 6f  rintSchemaLine(o
9a80: 75 74 2c 20 7a 2c 20 7a 54 61 69 6c 29 3b 0a 20  ut, z, zTail);. 
9a90: 20 7a 5b 6e 5d 20 3d 20 63 3b 0a 7d 0a 0a 2f 2a   z[n] = c;.}../*
9aa0: 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20  .** This is the 
9ab0: 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65  callback routine
9ac0: 20 74 68 61 74 20 74 68 65 20 73 68 65 6c 6c 0a   that the shell.
9ad0: 2a 2a 20 69 6e 76 6f 6b 65 73 20 66 6f 72 20 65  ** invokes for e
9ae0: 61 63 68 20 72 6f 77 20 6f 66 20 61 20 71 75 65  ach row of a que
9af0: 72 79 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74  ry result..*/.st
9b00: 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 5f 63  atic int shell_c
9b10: 61 6c 6c 62 61 63 6b 28 0a 20 20 76 6f 69 64 20  allback(.  void 
9b20: 2a 70 41 72 67 2c 0a 20 20 69 6e 74 20 6e 41 72  *pArg,.  int nAr
9b30: 67 2c 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  g,        /* Num
9b40: 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f  ber of result co
9b50: 6c 75 6d 6e 73 20 2a 2f 0a 20 20 63 68 61 72 20  lumns */.  char 
9b60: 2a 2a 61 7a 41 72 67 2c 20 20 20 20 2f 2a 20 54  **azArg,    /* T
9b70: 65 78 74 20 6f 66 20 65 61 63 68 20 72 65 73 75  ext of each resu
9b80: 6c 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  lt column */.  c
9b90: 68 61 72 20 2a 2a 61 7a 43 6f 6c 2c 20 20 20 20  har **azCol,    
9ba0: 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  /* Column names 
9bb0: 2a 2f 0a 20 20 69 6e 74 20 2a 61 69 54 79 70 65  */.  int *aiType
9bc0: 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
9bd0: 74 79 70 65 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e  types */.){.  in
9be0: 74 20 69 3b 0a 20 20 53 68 65 6c 6c 53 74 61 74  t i;.  ShellStat
9bf0: 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53 74 61  e *p = (ShellSta
9c00: 74 65 2a 29 70 41 72 67 3b 0a 0a 20 20 69 66 28  te*)pArg;..  if(
9c10: 20 61 7a 41 72 67 3d 3d 30 20 29 20 72 65 74 75   azArg==0 ) retu
9c20: 72 6e 20 30 3b 0a 20 20 73 77 69 74 63 68 28 20  rn 0;.  switch( 
9c30: 70 2d 3e 63 4d 6f 64 65 20 29 7b 0a 20 20 20 20  p->cMode ){.    
9c40: 63 61 73 65 20 4d 4f 44 45 5f 4c 69 6e 65 3a 20  case MODE_Line: 
9c50: 7b 0a 20 20 20 20 20 20 69 6e 74 20 77 20 3d 20  {.      int w = 
9c60: 35 3b 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41  5;.      if( azA
9c70: 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  rg==0 ) break;. 
9c80: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
9c90: 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
9ca0: 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 73 74      int len = st
9cb0: 72 6c 65 6e 33 30 28 61 7a 43 6f 6c 5b 69 5d 20  rlen30(azCol[i] 
9cc0: 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 29  ? azCol[i] : "")
9cd0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6c 65  ;.        if( le
9ce0: 6e 3e 77 20 29 20 77 20 3d 20 6c 65 6e 3b 0a 20  n>w ) w = len;. 
9cf0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
9d00: 20 70 2d 3e 63 6e 74 2b 2b 3e 30 20 29 20 75 74   p->cnt++>0 ) ut
9d10: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
9d20: 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53 65  , "%s", p->rowSe
9d30: 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20  parator);.      
9d40: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
9d50: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 75   i++){.        u
9d60: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
9d70: 74 2c 22 25 2a 73 20 3d 20 25 73 25 73 22 2c 20  t,"%*s = %s%s", 
9d80: 77 2c 20 61 7a 43 6f 6c 5b 69 5d 2c 0a 20 20 20  w, azCol[i],.   
9d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41               azA
9da0: 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69 5d  rg[i] ? azArg[i]
9db0: 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 2c   : p->nullValue,
9dc0: 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72   p->rowSeparator
9dd0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
9de0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
9df0: 20 20 63 61 73 65 20 4d 4f 44 45 5f 45 78 70 6c    case MODE_Expl
9e00: 61 69 6e 3a 0a 20 20 20 20 63 61 73 65 20 4d 4f  ain:.    case MO
9e10: 44 45 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 20  DE_Column: {.   
9e20: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
9e30: 69 6e 74 20 61 45 78 70 6c 61 69 6e 57 69 64 74  int aExplainWidt
9e40: 68 73 5b 5d 20 3d 20 7b 34 2c 20 31 33 2c 20 34  hs[] = {4, 13, 4
9e50: 2c 20 34 2c 20 34 2c 20 31 33 2c 20 32 2c 20 31  , 4, 4, 13, 2, 1
9e60: 33 7d 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  3};.      const 
9e70: 69 6e 74 20 2a 63 6f 6c 57 69 64 74 68 3b 0a 20  int *colWidth;. 
9e80: 20 20 20 20 20 69 6e 74 20 73 68 6f 77 48 64 72       int showHdr
9e90: 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 72 6f  ;.      char *ro
9ea0: 77 53 65 70 3b 0a 20 20 20 20 20 20 69 66 28 20  wSep;.      if( 
9eb0: 70 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f 44 45 5f 43  p->cMode==MODE_C
9ec0: 6f 6c 75 6d 6e 20 29 7b 0a 20 20 20 20 20 20 20  olumn ){.       
9ed0: 20 63 6f 6c 57 69 64 74 68 20 3d 20 70 2d 3e 63   colWidth = p->c
9ee0: 6f 6c 57 69 64 74 68 3b 0a 20 20 20 20 20 20 20  olWidth;.       
9ef0: 20 73 68 6f 77 48 64 72 20 3d 20 70 2d 3e 73 68   showHdr = p->sh
9f00: 6f 77 48 65 61 64 65 72 3b 0a 20 20 20 20 20 20  owHeader;.      
9f10: 20 20 72 6f 77 53 65 70 20 3d 20 70 2d 3e 72 6f    rowSep = p->ro
9f20: 77 53 65 70 61 72 61 74 6f 72 3b 0a 20 20 20 20  wSeparator;.    
9f30: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
9f40: 20 63 6f 6c 57 69 64 74 68 20 3d 20 61 45 78 70   colWidth = aExp
9f50: 6c 61 69 6e 57 69 64 74 68 73 3b 0a 20 20 20 20  lainWidths;.    
9f60: 20 20 20 20 73 68 6f 77 48 64 72 20 3d 20 31 3b      showHdr = 1;
9f70: 0a 20 20 20 20 20 20 20 20 72 6f 77 53 65 70 20  .        rowSep 
9f80: 3d 20 53 45 50 5f 52 6f 77 3b 0a 20 20 20 20 20  = SEP_Row;.     
9f90: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e   }.      if( p->
9fa0: 63 6e 74 2b 2b 3d 3d 30 20 29 7b 0a 20 20 20 20  cnt++==0 ){.    
9fb0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
9fc0: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
9fd0: 20 20 20 20 20 69 6e 74 20 77 2c 20 6e 3b 0a 20       int w, n;. 
9fe0: 20 20 20 20 20 20 20 20 20 69 66 28 20 69 3c 41           if( i<A
9ff0: 72 72 61 79 53 69 7a 65 28 70 2d 3e 63 6f 6c 57  rraySize(p->colW
a000: 69 64 74 68 29 20 29 7b 0a 20 20 20 20 20 20 20  idth) ){.       
a010: 20 20 20 20 20 77 20 3d 20 63 6f 6c 57 69 64 74       w = colWidt
a020: 68 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  h[i];.          
a030: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
a040: 20 20 20 77 20 3d 20 30 3b 0a 20 20 20 20 20 20     w = 0;.      
a050: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
a060: 69 66 28 20 77 3d 3d 30 20 29 7b 0a 20 20 20 20  if( w==0 ){.    
a070: 20 20 20 20 20 20 20 20 77 20 3d 20 73 74 72 6c          w = strl
a080: 65 6e 43 68 61 72 28 61 7a 43 6f 6c 5b 69 5d 20  enChar(azCol[i] 
a090: 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 29  ? azCol[i] : "")
a0a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ;.            if
a0b0: 28 20 77 3c 31 30 20 29 20 77 20 3d 20 31 30 3b  ( w<10 ) w = 10;
a0c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
a0d0: 20 73 74 72 6c 65 6e 43 68 61 72 28 61 7a 41 72   strlenChar(azAr
a0e0: 67 20 26 26 20 61 7a 41 72 67 5b 69 5d 20 3f 20  g && azArg[i] ? 
a0f0: 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75  azArg[i] : p->nu
a100: 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20 20 20  llValue);.      
a110: 20 20 20 20 20 20 69 66 28 20 77 3c 6e 20 29 20        if( w<n ) 
a120: 77 20 3d 20 6e 3b 0a 20 20 20 20 20 20 20 20 20  w = n;.         
a130: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28   }.          if(
a140: 20 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e   i<ArraySize(p->
a150: 61 63 74 75 61 6c 57 69 64 74 68 29 20 29 7b 0a  actualWidth) ){.
a160: 20 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e 61              p->a
a170: 63 74 75 61 6c 57 69 64 74 68 5b 69 5d 20 3d 20  ctualWidth[i] = 
a180: 77 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  w;.          }. 
a190: 20 20 20 20 20 20 20 20 20 69 66 28 20 73 68 6f           if( sho
a1a0: 77 48 64 72 20 29 7b 0a 20 20 20 20 20 20 20 20  wHdr ){.        
a1b0: 20 20 20 20 75 74 66 38 5f 77 69 64 74 68 5f 70      utf8_width_p
a1c0: 72 69 6e 74 28 70 2d 3e 6f 75 74 2c 20 77 2c 20  rint(p->out, w, 
a1d0: 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20 20  azCol[i]);.     
a1e0: 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
a1f0: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c  tf(p->out, "%s",
a200: 20 69 3d 3d 6e 41 72 67 2d 31 20 3f 20 72 6f 77   i==nArg-1 ? row
a210: 53 65 70 20 3a 20 22 20 20 22 29 3b 0a 20 20 20  Sep : "  ");.   
a220: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
a230: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 73   }.        if( s
a240: 68 6f 77 48 64 72 20 29 7b 0a 20 20 20 20 20 20  howHdr ){.      
a250: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
a260: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
a270: 20 20 20 20 20 20 20 69 6e 74 20 77 3b 0a 20 20         int w;.  
a280: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69 3c            if( i<
a290: 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 63 74  ArraySize(p->act
a2a0: 75 61 6c 57 69 64 74 68 29 20 29 7b 0a 20 20 20  ualWidth) ){.   
a2b0: 20 20 20 20 20 20 20 20 20 20 20 20 77 20 3d 20              w = 
a2c0: 70 2d 3e 61 63 74 75 61 6c 57 69 64 74 68 5b 69  p->actualWidth[i
a2d0: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ];.             
a2e0: 20 20 69 66 28 20 77 3c 30 20 29 20 77 20 3d 20    if( w<0 ) w = 
a2f0: 2d 77 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  -w;.            
a300: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
a310: 20 20 20 20 20 20 77 20 3d 20 31 30 3b 0a 20 20        w = 10;.  
a320: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
a330: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
a340: 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 2d 2a 2e  ntf(p->out,"%-*.
a350: 2a 73 25 73 22 2c 77 2c 77 2c 0a 20 20 20 20 20  *s%s",w,w,.     
a360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
a370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a3a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20 20 20 20  ---------".     
a3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
a3c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a3d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a3e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
a3f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 2c 0a 20 20 20 20  ---------",.    
a400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a410: 69 3d 3d 6e 41 72 67 2d 31 20 3f 20 72 6f 77 53  i==nArg-1 ? rowS
a420: 65 70 20 3a 20 22 20 20 22 29 3b 0a 20 20 20 20  ep : "  ");.    
a430: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
a440: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
a450: 69 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 62  if( azArg==0 ) b
a460: 72 65 61 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28  reak;.      for(
a470: 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
a480: 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 77  ){.        int w
a490: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 3c  ;.        if( i<
a4a0: 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 63 74  ArraySize(p->act
a4b0: 75 61 6c 57 69 64 74 68 29 20 29 7b 0a 20 20 20  ualWidth) ){.   
a4c0: 20 20 20 20 20 20 20 20 77 20 3d 20 70 2d 3e 61          w = p->a
a4d0: 63 74 75 61 6c 57 69 64 74 68 5b 69 5d 3b 0a 20  ctualWidth[i];. 
a4e0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
a4f0: 20 20 20 20 20 20 20 20 20 77 20 3d 20 31 30 3b           w = 10;
a500: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
a510: 20 20 20 69 66 28 20 70 2d 3e 63 4d 6f 64 65 3d     if( p->cMode=
a520: 3d 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20 26 26  =MODE_Explain &&
a530: 20 61 7a 41 72 67 5b 69 5d 20 26 26 20 73 74 72   azArg[i] && str
a540: 6c 65 6e 43 68 61 72 28 61 7a 41 72 67 5b 69 5d  lenChar(azArg[i]
a550: 29 3e 77 20 29 7b 0a 20 20 20 20 20 20 20 20 20  )>w ){.         
a560: 20 77 20 3d 20 73 74 72 6c 65 6e 43 68 61 72 28   w = strlenChar(
a570: 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20  azArg[i]);.     
a580: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
a590: 20 69 3d 3d 31 20 26 26 20 70 2d 3e 61 69 49 6e   i==1 && p->aiIn
a5a0: 64 65 6e 74 20 26 26 20 70 2d 3e 70 53 74 6d 74  dent && p->pStmt
a5b0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66   ){.          if
a5c0: 28 20 70 2d 3e 69 49 6e 64 65 6e 74 3c 70 2d 3e  ( p->iIndent<p->
a5d0: 6e 49 6e 64 65 6e 74 20 29 7b 0a 20 20 20 20 20  nIndent ){.     
a5e0: 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
a5f0: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2a 2e 73  tf(p->out, "%*.s
a600: 22 2c 20 70 2d 3e 61 69 49 6e 64 65 6e 74 5b 70  ", p->aiIndent[p
a610: 2d 3e 69 49 6e 64 65 6e 74 5d 2c 20 22 22 29 3b  ->iIndent], "");
a620: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
a630: 20 20 20 20 20 20 20 70 2d 3e 69 49 6e 64 65 6e         p->iInden
a640: 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t++;.        }. 
a650: 20 20 20 20 20 20 20 75 74 66 38 5f 77 69 64 74         utf8_widt
a660: 68 5f 70 72 69 6e 74 28 70 2d 3e 6f 75 74 2c 20  h_print(p->out, 
a670: 77 2c 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a  w, azArg[i] ? az
a680: 41 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c  Arg[i] : p->null
a690: 56 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20  Value);.        
a6a0: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
a6b0: 75 74 2c 20 22 25 73 22 2c 20 69 3d 3d 6e 41 72  ut, "%s", i==nAr
a6c0: 67 2d 31 20 3f 20 72 6f 77 53 65 70 20 3a 20 22  g-1 ? rowSep : "
a6d0: 20 20 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20    ");.      }.  
a6e0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
a6f0: 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 53  .    case MODE_S
a700: 65 6d 69 3a 20 7b 20 20 20 2f 2a 20 2e 73 63 68  emi: {   /* .sch
a710: 65 6d 61 20 61 6e 64 20 2e 66 75 6c 6c 73 63 68  ema and .fullsch
a720: 65 6d 61 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20  ema output */.  
a730: 20 20 20 20 70 72 69 6e 74 53 63 68 65 6d 61 4c      printSchemaL
a740: 69 6e 65 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72  ine(p->out, azAr
a750: 67 5b 30 5d 2c 20 22 3b 5c 6e 22 29 3b 0a 20 20  g[0], ";\n");.  
a760: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
a770: 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 50  .    case MODE_P
a780: 72 65 74 74 79 3a 20 7b 20 20 2f 2a 20 2e 73 63  retty: {  /* .sc
a790: 68 65 6d 61 20 61 6e 64 20 2e 66 75 6c 6c 73 63  hema and .fullsc
a7a0: 68 65 6d 61 20 77 69 74 68 20 2d 2d 69 6e 64 65  hema with --inde
a7b0: 6e 74 20 2a 2f 0a 20 20 20 20 20 20 63 68 61 72  nt */.      char
a7c0: 20 2a 7a 3b 0a 20 20 20 20 20 20 69 6e 74 20 6a   *z;.      int j
a7d0: 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 50 61 72  ;.      int nPar
a7e0: 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 63 68  en = 0;.      ch
a7f0: 61 72 20 63 45 6e 64 20 3d 20 30 3b 0a 20 20 20  ar cEnd = 0;.   
a800: 20 20 20 63 68 61 72 20 63 3b 0a 20 20 20 20 20     char c;.     
a810: 20 69 6e 74 20 6e 4c 69 6e 65 20 3d 20 30 3b 0a   int nLine = 0;.
a820: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41        assert( nA
a830: 72 67 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 69  rg==1 );.      i
a840: 66 28 20 61 7a 41 72 67 5b 30 5d 3d 3d 30 20 29  f( azArg[0]==0 )
a850: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66   break;.      if
a860: 28 20 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b  ( sqlite3_strlik
a870: 65 28 22 43 52 45 41 54 45 20 56 49 45 57 25 22  e("CREATE VIEW%"
a880: 2c 20 61 7a 41 72 67 5b 30 5d 2c 20 30 29 3d 3d  , azArg[0], 0)==
a890: 30 0a 20 20 20 20 20 20 20 7c 7c 20 73 71 6c 69  0.       || sqli
a8a0: 74 65 33 5f 73 74 72 6c 69 6b 65 28 22 43 52 45  te3_strlike("CRE
a8b0: 41 54 45 20 54 52 49 47 25 22 2c 20 61 7a 41 72  ATE TRIG%", azAr
a8c0: 67 5b 30 5d 2c 20 30 29 3d 3d 30 0a 20 20 20 20  g[0], 0)==0.    
a8d0: 20 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66    ){.        utf
a8e0: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
a8f0: 20 22 25 73 3b 5c 6e 22 2c 20 61 7a 41 72 67 5b   "%s;\n", azArg[
a900: 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65  0]);.        bre
a910: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
a920: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70    z = sqlite3_mp
a930: 72 69 6e 74 66 28 22 25 73 22 2c 20 61 7a 41 72  rintf("%s", azAr
a940: 67 5b 30 5d 29 3b 0a 20 20 20 20 20 20 6a 20 3d  g[0]);.      j =
a950: 20 30 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d   0;.      for(i=
a960: 30 3b 20 49 73 53 70 61 63 65 28 7a 5b 69 5d 29  0; IsSpace(z[i])
a970: 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 66  ; i++){}.      f
a980: 6f 72 28 3b 20 28 63 20 3d 20 7a 5b 69 5d 29 21  or(; (c = z[i])!
a990: 3d 30 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  =0; i++){.      
a9a0: 20 20 69 66 28 20 49 73 53 70 61 63 65 28 63 29    if( IsSpace(c)
a9b0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66   ){.          if
a9c0: 28 20 7a 5b 6a 2d 31 5d 3d 3d 27 5c 72 27 20 29  ( z[j-1]=='\r' )
a9d0: 20 7a 5b 6a 2d 31 5d 20 3d 20 27 5c 6e 27 3b 0a   z[j-1] = '\n';.
a9e0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 49 73            if( Is
a9f0: 53 70 61 63 65 28 7a 5b 6a 2d 31 5d 29 20 7c 7c  Space(z[j-1]) ||
aa00: 20 7a 5b 6a 2d 31 5d 3d 3d 27 28 27 20 29 20 63   z[j-1]=='(' ) c
aa10: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
aa20: 20 7d 65 6c 73 65 20 69 66 28 20 28 63 3d 3d 27   }else if( (c=='
aa30: 28 27 20 7c 7c 20 63 3d 3d 27 29 27 29 20 26 26  (' || c==')') &&
aa40: 20 6a 3e 30 20 26 26 20 49 73 53 70 61 63 65 28   j>0 && IsSpace(
aa50: 7a 5b 6a 2d 31 5d 29 20 29 7b 0a 20 20 20 20 20  z[j-1]) ){.     
aa60: 20 20 20 20 20 6a 2d 2d 3b 0a 20 20 20 20 20 20       j--;.      
aa70: 20 20 7d 0a 20 20 20 20 20 20 20 20 7a 5b 6a 2b    }.        z[j+
aa80: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 0a  +] = c;.      }.
aa90: 20 20 20 20 20 20 77 68 69 6c 65 28 20 6a 3e 30        while( j>0
aaa0: 20 26 26 20 49 73 53 70 61 63 65 28 7a 5b 6a 2d   && IsSpace(z[j-
aab0: 31 5d 29 20 29 7b 20 6a 2d 2d 3b 20 7d 0a 20 20  1]) ){ j--; }.  
aac0: 20 20 20 20 7a 5b 6a 5d 20 3d 20 30 3b 0a 20 20      z[j] = 0;.  
aad0: 20 20 20 20 69 66 28 20 73 74 72 6c 65 6e 33 30      if( strlen30
aae0: 28 7a 29 3e 3d 37 39 20 29 7b 0a 20 20 20 20 20  (z)>=79 ){.     
aaf0: 20 20 20 66 6f 72 28 69 3d 6a 3d 30 3b 20 28 63     for(i=j=0; (c
ab00: 20 3d 20 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b   = z[i])!=0; i++
ab10: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
ab20: 20 63 3d 3d 63 45 6e 64 20 29 7b 0a 20 20 20 20   c==cEnd ){.    
ab30: 20 20 20 20 20 20 20 20 63 45 6e 64 20 3d 20 30          cEnd = 0
ab40: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
ab50: 65 20 69 66 28 20 63 3d 3d 27 22 27 20 7c 7c 20  e if( c=='"' || 
ab60: 63 3d 3d 27 5c 27 27 20 7c 7c 20 63 3d 3d 27 60  c=='\'' || c=='`
ab70: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ' ){.           
ab80: 20 63 45 6e 64 20 3d 20 63 3b 0a 20 20 20 20 20   cEnd = c;.     
ab90: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63       }else if( c
aba0: 3d 3d 27 5b 27 20 29 7b 0a 20 20 20 20 20 20 20  =='[' ){.       
abb0: 20 20 20 20 20 63 45 6e 64 20 3d 20 27 5d 27 3b       cEnd = ']';
abc0: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
abd0: 20 69 66 28 20 63 3d 3d 27 28 27 20 29 7b 0a 20   if( c=='(' ){. 
abe0: 20 20 20 20 20 20 20 20 20 20 20 6e 50 61 72 65             nPare
abf0: 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  n++;.          }
ac00: 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 29 27 20  else if( c==')' 
ac10: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ){.            n
ac20: 50 61 72 65 6e 2d 2d 3b 0a 20 20 20 20 20 20 20  Paren--;.       
ac30: 20 20 20 20 20 69 66 28 20 6e 4c 69 6e 65 3e 30       if( nLine>0
ac40: 20 26 26 20 6e 50 61 72 65 6e 3d 3d 30 20 26 26   && nParen==0 &&
ac50: 20 6a 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20   j>0 ){.        
ac60: 20 20 20 20 20 20 70 72 69 6e 74 53 63 68 65 6d        printSchem
ac70: 61 4c 69 6e 65 4e 28 70 2d 3e 6f 75 74 2c 20 7a  aLineN(p->out, z
ac80: 2c 20 6a 2c 20 22 5c 6e 22 29 3b 0a 20 20 20 20  , j, "\n");.    
ac90: 20 20 20 20 20 20 20 20 20 20 6a 20 3d 20 30 3b            j = 0;
aca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
acb0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
acc0: 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 63 3b       z[j++] = c;
acd0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6e  .          if( n
ace0: 50 61 72 65 6e 3d 3d 31 20 26 26 20 28 63 3d 3d  Paren==1 && (c==
acf0: 27 28 27 20 7c 7c 20 63 3d 3d 27 2c 27 20 7c 7c  '(' || c==',' ||
ad00: 20 63 3d 3d 27 5c 6e 27 29 20 29 7b 0a 20 20 20   c=='\n') ){.   
ad10: 20 20 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d           if( c==
ad20: 27 5c 6e 27 20 29 20 6a 2d 2d 3b 0a 20 20 20 20  '\n' ) j--;.    
ad30: 20 20 20 20 20 20 20 20 70 72 69 6e 74 53 63 68          printSch
ad40: 65 6d 61 4c 69 6e 65 4e 28 70 2d 3e 6f 75 74 2c  emaLineN(p->out,
ad50: 20 7a 2c 20 6a 2c 20 22 5c 6e 20 20 22 29 3b 0a   z, j, "\n  ");.
ad60: 20 20 20 20 20 20 20 20 20 20 20 20 6a 20 3d 20              j = 
ad70: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  0;.            n
ad80: 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20 20 20 20 20  Line++;.        
ad90: 20 20 20 20 77 68 69 6c 65 28 20 49 73 53 70 61      while( IsSpa
ada0: 63 65 28 7a 5b 69 2b 31 5d 29 20 29 7b 20 69 2b  ce(z[i+1]) ){ i+
adb0: 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d  +; }.          }
adc0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
add0: 20 20 20 7a 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20     z[j] = 0;.   
ade0: 20 20 20 7d 0a 20 20 20 20 20 20 70 72 69 6e 74     }.      print
adf0: 53 63 68 65 6d 61 4c 69 6e 65 28 70 2d 3e 6f 75  SchemaLine(p->ou
ae00: 74 2c 20 7a 2c 20 22 3b 5c 6e 22 29 3b 0a 20 20  t, z, ";\n");.  
ae10: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
ae20: 28 7a 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  (z);.      break
ae30: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  ;.    }.    case
ae40: 20 4d 4f 44 45 5f 4c 69 73 74 3a 20 7b 0a 20 20   MODE_List: {.  
ae50: 20 20 20 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b      if( p->cnt++
ae60: 3d 3d 30 20 26 26 20 70 2d 3e 73 68 6f 77 48 65  ==0 && p->showHe
ae70: 61 64 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20  ader ){.        
ae80: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
ae90: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
aea0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
aeb0: 6f 75 74 2c 22 25 73 25 73 22 2c 61 7a 43 6f 6c  out,"%s%s",azCol
aec0: 5b 69 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20  [i],.           
aed0: 20 20 20 20 20 20 20 69 3d 3d 6e 41 72 67 2d 31         i==nArg-1
aee0: 20 3f 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74   ? p->rowSeparat
aef0: 6f 72 20 3a 20 70 2d 3e 63 6f 6c 53 65 70 61 72  or : p->colSepar
af00: 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d  ator);.        }
af10: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
af20: 66 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72  f( azArg==0 ) br
af30: 65 61 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  eak;.      for(i
af40: 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
af50: 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a  {.        char *
af60: 7a 20 3d 20 61 7a 41 72 67 5b 69 5d 3b 0a 20 20  z = azArg[i];.  
af70: 20 20 20 20 20 20 69 66 28 20 7a 3d 3d 30 20 29        if( z==0 )
af80: 20 7a 20 3d 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75   z = p->nullValu
af90: 65 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  e;.        utf8_
afa0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
afb0: 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20  %s", z);.       
afc0: 20 69 66 28 20 69 3c 6e 41 72 67 2d 31 20 29 7b   if( i<nArg-1 ){
afd0: 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
afe0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
aff0: 25 73 22 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72  %s", p->colSepar
b000: 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d  ator);.        }
b010: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
b020: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
b030: 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77  ut, "%s", p->row
b040: 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20  Separator);.    
b050: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
b060: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
b070: 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 48  .    case MODE_H
b080: 74 6d 6c 3a 20 7b 0a 20 20 20 20 20 20 69 66 28  tml: {.      if(
b090: 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26 20   p->cnt++==0 && 
b0a0: 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 29 7b  p->showHeader ){
b0b0: 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
b0c0: 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 54 52 3e  ntf(p->out,"<TR>
b0d0: 22 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  ");.        for(
b0e0: 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
b0f0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77  ){.          raw
b100: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
b110: 3c 54 48 3e 22 29 3b 0a 20 20 20 20 20 20 20 20  <TH>");.        
b120: 20 20 6f 75 74 70 75 74 5f 68 74 6d 6c 5f 73 74    output_html_st
b130: 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 43  ring(p->out, azC
b140: 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  ol[i]);.        
b150: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
b160: 6f 75 74 2c 22 3c 2f 54 48 3e 5c 6e 22 29 3b 0a  out,"</TH>\n");.
b170: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
b180: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
b190: 6f 75 74 2c 22 3c 2f 54 52 3e 5c 6e 22 29 3b 0a  out,"</TR>\n");.
b1a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
b1b0: 28 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65  ( azArg==0 ) bre
b1c0: 61 6b 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72  ak;.      raw_pr
b1d0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 54 52  intf(p->out,"<TR
b1e0: 3e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  >");.      for(i
b1f0: 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
b200: 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
b210: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 54 44  intf(p->out,"<TD
b220: 3e 22 29 3b 0a 20 20 20 20 20 20 20 20 6f 75 74  >");.        out
b230: 70 75 74 5f 68 74 6d 6c 5f 73 74 72 69 6e 67 28  put_html_string(
b240: 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d  p->out, azArg[i]
b250: 20 3f 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d   ? azArg[i] : p-
b260: 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 20  >nullValue);.   
b270: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
b280: 70 2d 3e 6f 75 74 2c 22 3c 2f 54 44 3e 5c 6e 22  p->out,"</TD>\n"
b290: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
b2a0: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
b2b0: 75 74 2c 22 3c 2f 54 52 3e 5c 6e 22 29 3b 0a 20  ut,"</TR>\n");. 
b2c0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
b2d0: 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f  }.    case MODE_
b2e0: 54 63 6c 3a 20 7b 0a 20 20 20 20 20 20 69 66 28  Tcl: {.      if(
b2f0: 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26 20   p->cnt++==0 && 
b300: 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 29 7b  p->showHeader ){
b310: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30  .        for(i=0
b320: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
b330: 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74            output
b340: 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74  _c_string(p->out
b350: 2c 61 7a 43 6f 6c 5b 69 5d 20 3f 20 61 7a 43 6f  ,azCol[i] ? azCo
b360: 6c 5b 69 5d 20 3a 20 22 22 29 3b 0a 20 20 20 20  l[i] : "");.    
b370: 20 20 20 20 20 20 69 66 28 69 3c 6e 41 72 67 2d        if(i<nArg-
b380: 31 29 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70  1) utf8_printf(p
b390: 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e  ->out, "%s", p->
b3a0: 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20  colSeparator);. 
b3b0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
b3c0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
b3d0: 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f  out, "%s", p->ro
b3e0: 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20  wSeparator);.   
b3f0: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 61     }.      if( a
b400: 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b  zArg==0 ) break;
b410: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
b420: 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
b430: 20 20 20 20 20 20 6f 75 74 70 75 74 5f 63 5f 73        output_c_s
b440: 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a  tring(p->out, az
b450: 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69  Arg[i] ? azArg[i
b460: 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65  ] : p->nullValue
b470: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 69 3c  );.        if(i<
b480: 6e 41 72 67 2d 31 29 20 75 74 66 38 5f 70 72 69  nArg-1) utf8_pri
b490: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
b4a0: 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  , p->colSeparato
b4b0: 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  r);.      }.    
b4c0: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
b4d0: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72  >out, "%s", p->r
b4e0: 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  owSeparator);.  
b4f0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
b500: 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 43  .    case MODE_C
b510: 73 76 3a 20 7b 0a 20 20 20 20 20 20 73 65 74 42  sv: {.      setB
b520: 69 6e 61 72 79 4d 6f 64 65 28 70 2d 3e 6f 75 74  inaryMode(p->out
b530: 2c 20 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 1);.      if( 
b540: 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26 20 70  p->cnt++==0 && p
b550: 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 29 7b 0a  ->showHeader ){.
b560: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b          for(i=0;
b570: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
b580: 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f           output_
b590: 63 73 76 28 70 2c 20 61 7a 43 6f 6c 5b 69 5d 20  csv(p, azCol[i] 
b5a0: 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 2c  ? azCol[i] : "",
b5b0: 20 69 3c 6e 41 72 67 2d 31 29 3b 0a 20 20 20 20   i<nArg-1);.    
b5c0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 75 74      }.        ut
b5d0: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
b5e0: 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53 65  , "%s", p->rowSe
b5f0: 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20  parator);.      
b600: 7d 0a 20 20 20 20 20 20 69 66 28 20 6e 41 72 67  }.      if( nArg
b610: 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f  >0 ){.        fo
b620: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
b630: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6f  ++){.          o
b640: 75 74 70 75 74 5f 63 73 76 28 70 2c 20 61 7a 41  utput_csv(p, azA
b650: 72 67 5b 69 5d 2c 20 69 3c 6e 41 72 67 2d 31 29  rg[i], i<nArg-1)
b660: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
b670: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
b680: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d  p->out, "%s", p-
b690: 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a  >rowSeparator);.
b6a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 65        }.      se
b6b0: 74 54 65 78 74 4d 6f 64 65 28 70 2d 3e 6f 75 74  tTextMode(p->out
b6c0: 2c 20 31 29 3b 0a 20 20 20 20 20 20 62 72 65 61  , 1);.      brea
b6d0: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  k;.    }.    cas
b6e0: 65 20 4d 4f 44 45 5f 49 6e 73 65 72 74 3a 20 7b  e MODE_Insert: {
b6f0: 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41 72 67  .      if( azArg
b700: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
b710: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
b720: 2d 3e 6f 75 74 2c 22 49 4e 53 45 52 54 20 49 4e  ->out,"INSERT IN
b730: 54 4f 20 25 73 22 2c 70 2d 3e 7a 44 65 73 74 54  TO %s",p->zDestT
b740: 61 62 6c 65 29 3b 0a 20 20 20 20 20 20 69 66 28  able);.      if(
b750: 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 29   p->showHeader )
b760: 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
b770: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 28 22 29  intf(p->out,"(")
b780: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d  ;.        for(i=
b790: 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
b7a0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69  .          if( i
b7b0: 3e 30 20 29 20 72 61 77 5f 70 72 69 6e 74 66 28  >0 ) raw_printf(
b7c0: 70 2d 3e 6f 75 74 2c 20 22 2c 22 29 3b 0a 20 20  p->out, ",");.  
b7d0: 20 20 20 20 20 20 20 20 69 66 28 20 71 75 6f 74          if( quot
b7e0: 65 43 68 61 72 28 61 7a 43 6f 6c 5b 69 5d 29 20  eChar(azCol[i]) 
b7f0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ){.            c
b800: 68 61 72 20 2a 7a 20 3d 20 73 71 6c 69 74 65 33  har *z = sqlite3
b810: 5f 6d 70 72 69 6e 74 66 28 22 5c 22 25 77 5c 22  _mprintf("\"%w\"
b820: 22 2c 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20  ", azCol[i]);.  
b830: 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
b840: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
b850: 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20  s", z);.        
b860: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
b870: 28 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  (z);.          }
b880: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
b890: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
b8a0: 6f 75 74 2c 20 22 25 73 22 2c 20 61 7a 43 6f 6c  out, "%s", azCol
b8b0: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [i]);.          
b8c0: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
b8d0: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
b8e0: 2d 3e 6f 75 74 2c 22 29 22 29 3b 0a 20 20 20 20  ->out,")");.    
b8f0: 20 20 7d 0a 20 20 20 20 20 20 70 2d 3e 63 6e 74    }.      p->cnt
b900: 2b 2b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  ++;.      for(i=
b910: 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
b920: 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
b930: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 69 3e 30 20  ntf(p->out, i>0 
b940: 3f 20 22 2c 22 20 3a 20 22 20 56 41 4c 55 45 53  ? "," : " VALUES
b950: 28 22 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  (");.        if(
b960: 20 28 61 7a 41 72 67 5b 69 5d 3d 3d 30 29 20 7c   (azArg[i]==0) |
b970: 7c 20 28 61 69 54 79 70 65 20 26 26 20 61 69 54  | (aiType && aiT
b980: 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 4e  ype[i]==SQLITE_N
b990: 55 4c 4c 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ULL) ){.        
b9a0: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
b9b0: 3e 6f 75 74 2c 22 4e 55 4c 4c 22 29 3b 0a 20 20  >out,"NULL");.  
b9c0: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
b9d0: 61 69 54 79 70 65 20 26 26 20 61 69 54 79 70 65  aiType && aiType
b9e0: 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  [i]==SQLITE_TEXT
b9f0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66   ){.          if
ba00: 28 20 53 68 65 6c 6c 48 61 73 46 6c 61 67 28 70  ( ShellHasFlag(p
ba10: 2c 20 53 48 46 4c 47 5f 4e 65 77 6c 69 6e 65 73  , SHFLG_Newlines
ba20: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ) ){.           
ba30: 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 73   output_quoted_s
ba40: 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a  tring(p->out, az
ba50: 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[i]);.       
ba60: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
ba70: 20 20 20 20 20 20 6f 75 74 70 75 74 5f 71 75 6f        output_quo
ba80: 74 65 64 5f 65 73 63 61 70 65 64 5f 73 74 72 69  ted_escaped_stri
ba90: 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67  ng(p->out, azArg
baa0: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [i]);.          
bab0: 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  }.        }else 
bac0: 69 66 28 20 61 69 54 79 70 65 20 26 26 20 61 69  if( aiType && ai
bad0: 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f  Type[i]==SQLITE_
bae0: 49 4e 54 45 47 45 52 20 29 7b 0a 20 20 20 20 20  INTEGER ){.     
baf0: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
bb00: 28 70 2d 3e 6f 75 74 2c 22 25 73 22 2c 20 61 7a  (p->out,"%s", az
bb10: 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[i]);.       
bb20: 20 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79 70   }else if( aiTyp
bb30: 65 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d  e && aiType[i]==
bb40: 53 51 4c 49 54 45 5f 46 4c 4f 41 54 20 29 7b 0a  SQLITE_FLOAT ){.
bb50: 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 7a            char z
bb60: 5b 35 30 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  [50];.          
bb70: 64 6f 75 62 6c 65 20 72 20 3d 20 73 71 6c 69 74  double r = sqlit
bb80: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65  e3_column_double
bb90: 28 70 2d 3e 70 53 74 6d 74 2c 20 69 29 3b 0a 20  (p->pStmt, i);. 
bba0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
bbb0: 5f 73 6e 70 72 69 6e 74 66 28 35 30 2c 7a 2c 22  _snprintf(50,z,"
bbc0: 25 21 2e 32 30 67 22 2c 20 72 29 3b 0a 20 20 20  %!.20g", r);.   
bbd0: 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
bbe0: 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20  f(p->out, "%s", 
bbf0: 7a 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  z);.        }els
bc00: 65 20 69 66 28 20 61 69 54 79 70 65 20 26 26 20  e if( aiType && 
bc10: 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54  aiType[i]==SQLIT
bc20: 45 5f 42 4c 4f 42 20 26 26 20 70 2d 3e 70 53 74  E_BLOB && p->pSt
bc30: 6d 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  mt ){.          
bc40: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 42 6c 6f  const void *pBlo
bc50: 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  b = sqlite3_colu
bc60: 6d 6e 5f 62 6c 6f 62 28 70 2d 3e 70 53 74 6d 74  mn_blob(p->pStmt
bc70: 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , i);.          
bc80: 69 6e 74 20 6e 42 6c 6f 62 20 3d 20 73 71 6c 69  int nBlob = sqli
bc90: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
bca0: 28 70 2d 3e 70 53 74 6d 74 2c 20 69 29 3b 0a 20  (p->pStmt, i);. 
bcb0: 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f           output_
bcc0: 68 65 78 5f 62 6c 6f 62 28 70 2d 3e 6f 75 74 2c  hex_blob(p->out,
bcd0: 20 70 42 6c 6f 62 2c 20 6e 42 6c 6f 62 29 3b 0a   pBlob, nBlob);.
bce0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
bcf0: 28 20 69 73 4e 75 6d 62 65 72 28 61 7a 41 72 67  ( isNumber(azArg
bd00: 5b 69 5d 2c 20 30 29 20 29 7b 0a 20 20 20 20 20  [i], 0) ){.     
bd10: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
bd20: 28 70 2d 3e 6f 75 74 2c 22 25 73 22 2c 20 61 7a  (p->out,"%s", az
bd30: 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[i]);.       
bd40: 20 7d 65 6c 73 65 20 69 66 28 20 53 68 65 6c 6c   }else if( Shell
bd50: 48 61 73 46 6c 61 67 28 70 2c 20 53 48 46 4c 47  HasFlag(p, SHFLG
bd60: 5f 4e 65 77 6c 69 6e 65 73 29 20 29 7b 0a 20 20  _Newlines) ){.  
bd70: 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f 71          output_q
bd80: 75 6f 74 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e  uoted_string(p->
bd90: 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a  out, azArg[i]);.
bda0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
bdb0: 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f           output_
bdc0: 71 75 6f 74 65 64 5f 65 73 63 61 70 65 64 5f 73  quoted_escaped_s
bdd0: 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a  tring(p->out, az
bde0: 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[i]);.       
bdf0: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
be00: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
be10: 75 74 2c 22 29 3b 5c 6e 22 29 3b 0a 20 20 20 20  ut,");\n");.    
be20: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
be30: 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 51 75 6f     case MODE_Quo
be40: 74 65 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20  te: {.      if( 
be50: 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b  azArg==0 ) break
be60: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63  ;.      if( p->c
be70: 6e 74 3d 3d 30 20 26 26 20 70 2d 3e 73 68 6f 77  nt==0 && p->show
be80: 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20 20 20  Header ){.      
be90: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
bea0: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
beb0: 20 20 20 69 66 28 20 69 3e 30 20 29 20 72 61 77     if( i>0 ) raw
bec0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
bed0: 22 2c 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ",");.          
bee0: 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 73 74  output_quoted_st
bef0: 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 43  ring(p->out, azC
bf00: 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  ol[i]);.        
bf10: 7d 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  }.        raw_pr
bf20: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 5c 6e 22  intf(p->out,"\n"
bf30: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
bf40: 20 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 20   p->cnt++;.     
bf50: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67   for(i=0; i<nArg
bf60: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
bf70: 69 66 28 20 69 3e 30 20 29 20 72 61 77 5f 70 72  if( i>0 ) raw_pr
bf80: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2c 22  intf(p->out, ","
bf90: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  );.        if( (
bfa0: 61 7a 41 72 67 5b 69 5d 3d 3d 30 29 20 7c 7c 20  azArg[i]==0) || 
bfb0: 28 61 69 54 79 70 65 20 26 26 20 61 69 54 79 70  (aiType && aiTyp
bfc0: 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 4e 55 4c  e[i]==SQLITE_NUL
bfd0: 4c 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  L) ){.          
bfe0: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
bff0: 75 74 2c 22 4e 55 4c 4c 22 29 3b 0a 20 20 20 20  ut,"NULL");.    
c000: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61 69      }else if( ai
c010: 54 79 70 65 20 26 26 20 61 69 54 79 70 65 5b 69  Type && aiType[i
c020: 5d 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54 20 29  ]==SQLITE_TEXT )
c030: 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74 70  {.          outp
c040: 75 74 5f 71 75 6f 74 65 64 5f 73 74 72 69 6e 67  ut_quoted_string
c050: 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69  (p->out, azArg[i
c060: 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ]);.        }els
c070: 65 20 69 66 28 20 61 69 54 79 70 65 20 26 26 20  e if( aiType && 
c080: 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54  aiType[i]==SQLIT
c090: 45 5f 49 4e 54 45 47 45 52 20 29 7b 0a 20 20 20  E_INTEGER ){.   
c0a0: 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
c0b0: 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22 2c 20  tf(p->out,"%s", 
c0c0: 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20  azArg[i]);.     
c0d0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61 69 54     }else if( aiT
c0e0: 79 70 65 20 26 26 20 61 69 54 79 70 65 5b 69 5d  ype && aiType[i]
c0f0: 3d 3d 53 51 4c 49 54 45 5f 46 4c 4f 41 54 20 29  ==SQLITE_FLOAT )
c100: 7b 0a 20 20 20 20 20 20 20 20 20 20 63 68 61 72  {.          char
c110: 20 7a 5b 35 30 5d 3b 0a 20 20 20 20 20 20 20 20   z[50];.        
c120: 20 20 64 6f 75 62 6c 65 20 72 20 3d 20 73 71 6c    double r = sql
c130: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  ite3_column_doub
c140: 6c 65 28 70 2d 3e 70 53 74 6d 74 2c 20 69 29 3b  le(p->pStmt, i);
c150: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
c160: 65 33 5f 73 6e 70 72 69 6e 74 66 28 35 30 2c 7a  e3_snprintf(50,z
c170: 2c 22 25 21 2e 32 30 67 22 2c 20 72 29 3b 0a 20  ,"%!.20g", r);. 
c180: 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69           raw_pri
c190: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
c1a0: 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  , z);.        }e
c1b0: 6c 73 65 20 69 66 28 20 61 69 54 79 70 65 20 26  lse if( aiType &
c1c0: 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c  & aiType[i]==SQL
c1d0: 49 54 45 5f 42 4c 4f 42 20 26 26 20 70 2d 3e 70  ITE_BLOB && p->p
c1e0: 53 74 6d 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Stmt ){.        
c1f0: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 42    const void *pB
c200: 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  lob = sqlite3_co
c210: 6c 75 6d 6e 5f 62 6c 6f 62 28 70 2d 3e 70 53 74  lumn_blob(p->pSt
c220: 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20  mt, i);.        
c230: 20 20 69 6e 74 20 6e 42 6c 6f 62 20 3d 20 73 71    int nBlob = sq
c240: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
c250: 65 73 28 70 2d 3e 70 53 74 6d 74 2c 20 69 29 3b  es(p->pStmt, i);
c260: 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75  .          outpu
c270: 74 5f 68 65 78 5f 62 6c 6f 62 28 70 2d 3e 6f 75  t_hex_blob(p->ou
c280: 74 2c 20 70 42 6c 6f 62 2c 20 6e 42 6c 6f 62 29  t, pBlob, nBlob)
c290: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
c2a0: 69 66 28 20 69 73 4e 75 6d 62 65 72 28 61 7a 41  if( isNumber(azA
c2b0: 72 67 5b 69 5d 2c 20 30 29 20 29 7b 0a 20 20 20  rg[i], 0) ){.   
c2c0: 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
c2d0: 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22 2c 20  tf(p->out,"%s", 
c2e0: 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20  azArg[i]);.     
c2f0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
c300: 20 20 20 20 6f 75 74 70 75 74 5f 71 75 6f 74 65      output_quote
c310: 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c  d_string(p->out,
c320: 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20   azArg[i]);.    
c330: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
c340: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
c350: 2d 3e 6f 75 74 2c 22 5c 6e 22 29 3b 0a 20 20 20  ->out,"\n");.   
c360: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
c370: 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 41 73      case MODE_As
c380: 63 69 69 3a 20 7b 0a 20 20 20 20 20 20 69 66 28  cii: {.      if(
c390: 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26 20   p->cnt++==0 && 
c3a0: 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 29 7b  p->showHeader ){
c3b0: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30  .        for(i=0
c3c0: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
c3d0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69 3e            if( i>
c3e0: 30 20 29 20 75 74 66 38 5f 70 72 69 6e 74 66 28  0 ) utf8_printf(
c3f0: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d  p->out, "%s", p-
c400: 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a  >colSeparator);.
c410: 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
c420: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73  rintf(p->out,"%s
c430: 22 2c 61 7a 43 6f 6c 5b 69 5d 20 3f 20 61 7a 43  ",azCol[i] ? azC
c440: 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b 0a 20 20 20  ol[i] : "");.   
c450: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 75       }.        u
c460: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
c470: 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53  t, "%s", p->rowS
c480: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
c490: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41   }.      if( azA
c4a0: 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  rg==0 ) break;. 
c4b0: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
c4c0: 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
c4d0: 20 20 20 20 69 66 28 20 69 3e 30 20 29 20 75 74      if( i>0 ) ut
c4e0: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
c4f0: 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53 65  , "%s", p->colSe
c500: 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20  parator);.      
c510: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
c520: 3e 6f 75 74 2c 22 25 73 22 2c 61 7a 41 72 67 5b  >out,"%s",azArg[
c530: 69 5d 20 3f 20 61 7a 41 72 67 5b 69 5d 20 3a 20  i] ? azArg[i] : 
c540: 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b 0a 20  p->nullValue);. 
c550: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 75 74 66       }.      utf
c560: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
c570: 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53 65 70   "%s", p->rowSep
c580: 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 62  arator);.      b
c590: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
c5a0: 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
c5b0: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65  *.** This is the
c5c0: 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e   callback routin
c5d0: 65 20 74 68 61 74 20 74 68 65 20 53 51 4c 69 74  e that the SQLit
c5e0: 65 20 6c 69 62 72 61 72 79 0a 2a 2a 20 69 6e 76  e library.** inv
c5f0: 6f 6b 65 73 20 66 6f 72 20 65 61 63 68 20 72 6f  okes for each ro
c600: 77 20 6f 66 20 61 20 71 75 65 72 79 20 72 65 73  w of a query res
c610: 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ult..*/.static i
c620: 6e 74 20 63 61 6c 6c 62 61 63 6b 28 76 6f 69 64  nt callback(void
c630: 20 2a 70 41 72 67 2c 20 69 6e 74 20 6e 41 72 67   *pArg, int nArg
c640: 2c 20 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20  , char **azArg, 
c650: 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 29 7b 0a 20  char **azCol){. 
c660: 20 2f 2a 20 73 69 6e 63 65 20 77 65 20 64 6f 6e   /* since we don
c670: 27 74 20 68 61 76 65 20 74 79 70 65 20 69 6e 66  't have type inf
c680: 6f 2c 20 63 61 6c 6c 20 74 68 65 20 73 68 65 6c  o, call the shel
c690: 6c 5f 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20  l_callback with 
c6a0: 61 20 4e 55 4c 4c 20 76 61 6c 75 65 20 2a 2f 0a  a NULL value */.
c6b0: 20 20 72 65 74 75 72 6e 20 73 68 65 6c 6c 5f 63    return shell_c
c6c0: 61 6c 6c 62 61 63 6b 28 70 41 72 67 2c 20 6e 41  allback(pArg, nA
c6d0: 72 67 2c 20 61 7a 41 72 67 2c 20 61 7a 43 6f 6c  rg, azArg, azCol
c6e0: 2c 20 4e 55 4c 4c 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  , NULL);.}../*.*
c6f0: 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63 61  * This is the ca
c700: 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65 20 66  llback routine f
c710: 72 6f 6d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  rom sqlite3_exec
c720: 28 29 20 74 68 61 74 20 61 70 70 65 6e 64 73 20  () that appends 
c730: 61 6c 6c 0a 2a 2a 20 6f 75 74 70 75 74 20 6f 6e  all.** output on
c740: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 61 20  to the end of a 
c750: 53 68 65 6c 6c 54 65 78 74 20 6f 62 6a 65 63 74  ShellText object
c760: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
c770: 63 61 70 74 75 72 65 4f 75 74 70 75 74 43 61 6c  captureOutputCal
c780: 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 41 72 67  lback(void *pArg
c790: 2c 20 69 6e 74 20 6e 41 72 67 2c 20 63 68 61 72  , int nArg, char
c7a0: 20 2a 2a 61 7a 41 72 67 2c 20 63 68 61 72 20 2a   **azArg, char *
c7b0: 2a 61 7a 29 7b 0a 20 20 53 68 65 6c 6c 54 65 78  *az){.  ShellTex
c7c0: 74 20 2a 70 20 3d 20 28 53 68 65 6c 6c 54 65 78  t *p = (ShellTex
c7d0: 74 2a 29 70 41 72 67 3b 0a 20 20 69 6e 74 20 69  t*)pArg;.  int i
c7e0: 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ;.  UNUSED_PARAM
c7f0: 45 54 45 52 28 61 7a 29 3b 0a 20 20 69 66 28 20  ETER(az);.  if( 
c800: 61 7a 41 72 67 3d 3d 30 20 29 20 72 65 74 75 72  azArg==0 ) retur
c810: 6e 20 30 3b 0a 20 20 69 66 28 20 70 2d 3e 6e 20  n 0;.  if( p->n 
c820: 29 20 61 70 70 65 6e 64 54 65 78 74 28 70 2c 20  ) appendText(p, 
c830: 22 7c 22 2c 20 30 29 3b 0a 20 20 66 6f 72 28 69  "|", 0);.  for(i
c840: 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
c850: 7b 0a 20 20 20 20 69 66 28 20 69 20 29 20 61 70  {.    if( i ) ap
c860: 70 65 6e 64 54 65 78 74 28 70 2c 20 22 2c 22 2c  pendText(p, ",",
c870: 20 30 29 3b 0a 20 20 20 20 69 66 28 20 61 7a 41   0);.    if( azA
c880: 72 67 5b 69 5d 20 29 20 61 70 70 65 6e 64 54 65  rg[i] ) appendTe
c890: 78 74 28 70 2c 20 61 7a 41 72 67 5b 69 5d 2c 20  xt(p, azArg[i], 
c8a0: 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  0);.  }.  return
c8b0: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e   0;.}../*.** Gen
c8c0: 65 72 61 74 65 20 61 6e 20 61 70 70 72 6f 70 72  erate an appropr
c8d0: 69 61 74 65 20 53 45 4c 46 54 45 53 54 20 74 61  iate SELFTEST ta
c8e0: 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ble in the main 
c8f0: 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 73 74 61  database..*/.sta
c900: 74 69 63 20 76 6f 69 64 20 63 72 65 61 74 65 53  tic void createS
c910: 65 6c 66 74 65 73 74 54 61 62 6c 65 28 53 68 65  elftestTable(She
c920: 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 63  llState *p){.  c
c930: 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30  har *zErrMsg = 0
c940: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63  ;.  sqlite3_exec
c950: 28 70 2d 3e 64 62 2c 0a 20 20 20 20 22 53 41 56  (p->db,.    "SAV
c960: 45 50 4f 49 4e 54 20 73 65 6c 66 74 65 73 74 5f  EPOINT selftest_
c970: 69 6e 69 74 3b 5c 6e 22 0a 20 20 20 20 22 43 52  init;\n".    "CR
c980: 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f  EATE TABLE IF NO
c990: 54 20 45 58 49 53 54 53 20 73 65 6c 66 74 65 73  T EXISTS selftes
c9a0: 74 28 5c 6e 22 0a 20 20 20 20 22 20 20 74 6e 6f  t(\n".    "  tno
c9b0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
c9c0: 20 4b 45 59 2c 5c 6e 22 20 20 20 2f 2a 20 54 65   KEY,\n"   /* Te
c9d0: 73 74 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  st number */.   
c9e0: 20 22 20 20 6f 70 20 54 45 58 54 2c 5c 6e 22 20   "  op TEXT,\n" 
c9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca00: 20 20 2f 2a 20 4f 70 65 72 61 74 6f 72 3a 20 20    /* Operator:  
ca10: 6d 65 6d 6f 20 72 75 6e 20 2a 2f 0a 20 20 20 20  memo run */.    
ca20: 22 20 20 63 6d 64 20 54 45 58 54 2c 5c 6e 22 20  "  cmd TEXT,\n" 
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca40: 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 74 65 78 74   /* Command text
ca50: 20 2a 2f 0a 20 20 20 20 22 20 20 61 6e 73 20 54   */.    "  ans T
ca60: 45 58 54 5c 6e 22 20 20 20 20 20 20 20 20 20 20  EXT\n"          
ca70: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 73 69           /* Desi
ca80: 72 65 64 20 61 6e 73 77 65 72 20 2a 2f 0a 20 20  red answer */.  
ca90: 20 20 22 29 3b 22 0a 20 20 20 20 22 43 52 45 41    ");".    "CREA
caa0: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 5b 5f  TE TEMP TABLE [_
cab0: 73 68 65 6c 6c 24 73 65 6c 66 5d 28 6f 70 2c 63  shell$self](op,c
cac0: 6d 64 2c 61 6e 73 29 3b 5c 6e 22 0a 20 20 20 20  md,ans);\n".    
cad0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 5b 5f 73  "INSERT INTO [_s
cae0: 68 65 6c 6c 24 73 65 6c 66 5d 28 72 6f 77 69 64  hell$self](rowid
caf0: 2c 6f 70 2c 63 6d 64 29 5c 6e 22 0a 20 20 20 20  ,op,cmd)\n".    
cb00: 22 20 20 56 41 4c 55 45 53 28 63 6f 61 6c 65 73  "  VALUES(coales
cb10: 63 65 28 28 53 45 4c 45 43 54 20 28 6d 61 78 28  ce((SELECT (max(
cb20: 74 6e 6f 29 2b 31 30 30 29 2f 31 30 20 46 52 4f  tno)+100)/10 FRO
cb30: 4d 20 73 65 6c 66 74 65 73 74 29 2c 31 30 29 2c  M selftest),10),
cb40: 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 20 20 20  \n".    "       
cb50: 20 20 27 6d 65 6d 6f 27 2c 27 54 65 73 74 73 20    'memo','Tests 
cb60: 67 65 6e 65 72 61 74 65 64 20 62 79 20 2d 2d 69  generated by --i
cb70: 6e 69 74 27 29 3b 5c 6e 22 0a 20 20 20 20 22 49  nit');\n".    "I
cb80: 4e 53 45 52 54 20 49 4e 54 4f 20 5b 5f 73 68 65  NSERT INTO [_she
cb90: 6c 6c 24 73 65 6c 66 5d 5c 6e 22 0a 20 20 20 20  ll$self]\n".    
cba0: 22 20 20 53 45 4c 45 43 54 20 27 72 75 6e 27 2c  "  SELECT 'run',
cbb0: 5c 6e 22 0a 20 20 20 20 22 20 20 20 20 27 53 45  \n".    "    'SE
cbc0: 4c 45 43 54 20 68 65 78 28 73 68 61 33 5f 71 75  LECT hex(sha3_qu
cbd0: 65 72 79 28 27 27 53 45 4c 45 43 54 20 74 79 70  ery(''SELECT typ
cbe0: 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65 2c  e,name,tbl_name,
cbf0: 73 71 6c 20 22 0a 20 20 20 20 20 20 20 20 20 20  sql ".          
cc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc10: 20 20 20 20 20 20 20 22 46 52 4f 4d 20 73 71 6c         "FROM sql
cc20: 69 74 65 5f 6d 61 73 74 65 72 20 4f 52 44 45 52  ite_master ORDER
cc30: 20 42 59 20 32 27 27 2c 32 32 34 29 29 27 2c 5c   BY 2'',224))',\
cc40: 6e 22 0a 20 20 20 20 22 20 20 20 20 68 65 78 28  n".    "    hex(
cc50: 73 68 61 33 5f 71 75 65 72 79 28 27 53 45 4c 45  sha3_query('SELE
cc60: 43 54 20 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c  CT type,name,tbl
cc70: 5f 6e 61 6d 65 2c 73 71 6c 20 22 0a 20 20 20 20  _name,sql ".    
cc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc90: 20 20 20 20 20 20 22 46 52 4f 4d 20 73 71 6c 69        "FROM sqli
cca0: 74 65 5f 6d 61 73 74 65 72 20 4f 52 44 45 52 20  te_master ORDER 
ccb0: 42 59 20 32 27 2c 32 32 34 29 29 3b 5c 6e 22 0a  BY 2',224));\n".
ccc0: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
ccd0: 20 5b 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 5c 6e   [_shell$self]\n
cce0: 22 0a 20 20 20 20 22 20 20 53 45 4c 45 43 54 20  ".    "  SELECT 
ccf0: 27 72 75 6e 27 2c 22 0a 20 20 20 20 22 20 20 20  'run',".    "   
cd00: 20 27 53 45 4c 45 43 54 20 68 65 78 28 73 68 61   'SELECT hex(sha
cd10: 33 5f 71 75 65 72 79 28 27 27 53 45 4c 45 43 54  3_query(''SELECT
cd20: 20 2a 20 46 52 4f 4d 20 5c 22 27 20 7c 7c 22 0a   * FROM \"' ||".
cd30: 20 20 20 20 22 20 20 20 20 20 20 20 20 70 72 69      "        pri
cd40: 6e 74 66 28 27 25 77 27 2c 6e 61 6d 65 29 20 7c  ntf('%w',name) |
cd50: 7c 20 27 5c 22 20 4e 4f 54 20 49 4e 44 45 58 45  | '\" NOT INDEXE
cd60: 44 27 27 2c 32 32 34 29 29 27 2c 5c 6e 22 0a 20  D'',224))',\n". 
cd70: 20 20 20 22 20 20 20 20 68 65 78 28 73 68 61 33     "    hex(sha3
cd80: 5f 71 75 65 72 79 28 70 72 69 6e 74 66 28 27 53  _query(printf('S
cd90: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5c 22 25  ELECT * FROM \"%
cda0: 77 5c 22 20 4e 4f 54 20 49 4e 44 45 58 45 44 27  w\" NOT INDEXED'
cdb0: 2c 6e 61 6d 65 29 2c 32 32 34 29 29 5c 6e 22 0a  ,name),224))\n".
cdc0: 20 20 20 20 22 20 20 46 52 4f 4d 20 28 5c 6e 22      "  FROM (\n"
cdd0: 0a 20 20 20 20 22 20 20 20 20 53 45 4c 45 43 54  .    "    SELECT
cde0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
cdf0: 65 5f 6d 61 73 74 65 72 5c 6e 22 0a 20 20 20 20  e_master\n".    
ce00: 22 20 20 20 20 20 57 48 45 52 45 20 74 79 70 65  "     WHERE type
ce10: 3d 27 74 61 62 6c 65 27 5c 6e 22 0a 20 20 20 20  ='table'\n".    
ce20: 22 20 20 20 20 20 20 20 41 4e 44 20 6e 61 6d 65  "       AND name
ce30: 3c 3e 27 73 65 6c 66 74 65 73 74 27 5c 6e 22 0a  <>'selftest'\n".
ce40: 20 20 20 20 22 20 20 20 20 20 20 20 41 4e 44 20      "       AND 
ce50: 63 6f 61 6c 65 73 63 65 28 72 6f 6f 74 70 61 67  coalesce(rootpag
ce60: 65 2c 30 29 3e 30 5c 6e 22 0a 20 20 20 20 22 20  e,0)>0\n".    " 
ce70: 20 29 5c 6e 22 0a 20 20 20 20 22 20 4f 52 44 45   )\n".    " ORDE
ce80: 52 20 42 59 20 6e 61 6d 65 3b 5c 6e 22 0a 20 20  R BY name;\n".  
ce90: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 5b    "INSERT INTO [
cea0: 5f 73 68 65 6c 6c 24 73 65 6c 66 5d 5c 6e 22 0a  _shell$self]\n".
ceb0: 20 20 20 20 22 20 20 56 41 4c 55 45 53 28 27 72      "  VALUES('r
cec0: 75 6e 27 2c 27 50 52 41 47 4d 41 20 69 6e 74 65  un','PRAGMA inte
ced0: 67 72 69 74 79 5f 63 68 65 63 6b 27 2c 27 6f 6b  grity_check','ok
cee0: 27 29 3b 5c 6e 22 0a 20 20 20 20 22 49 4e 53 45  ');\n".    "INSE
cef0: 52 54 20 49 4e 54 4f 20 73 65 6c 66 74 65 73 74  RT INTO selftest
cf00: 28 74 6e 6f 2c 6f 70 2c 63 6d 64 2c 61 6e 73 29  (tno,op,cmd,ans)
cf10: 22 0a 20 20 20 20 22 20 20 53 45 4c 45 43 54 20  ".    "  SELECT 
cf20: 72 6f 77 69 64 2a 31 30 2c 6f 70 2c 63 6d 64 2c  rowid*10,op,cmd,
cf30: 61 6e 73 20 46 52 4f 4d 20 5b 5f 73 68 65 6c 6c  ans FROM [_shell
cf40: 24 73 65 6c 66 5d 3b 5c 6e 22 0a 20 20 20 20 22  $self];\n".    "
cf50: 44 52 4f 50 20 54 41 42 4c 45 20 5b 5f 73 68 65  DROP TABLE [_she
cf60: 6c 6c 24 73 65 6c 66 5d 3b 22 0a 20 20 20 20 2c  ll$self];".    ,
cf70: 30 2c 30 2c 26 7a 45 72 72 4d 73 67 29 3b 0a 20  0,0,&zErrMsg);. 
cf80: 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a   if( zErrMsg ){.
cf90: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
cfa0: 73 74 64 65 72 72 2c 20 22 53 45 4c 46 54 45 53  stderr, "SELFTES
cfb0: 54 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  T initialization
cfc0: 20 66 61 69 6c 75 72 65 3a 20 25 73 5c 6e 22 2c   failure: %s\n",
cfd0: 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 73   zErrMsg);.    s
cfe0: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72  qlite3_free(zErr
cff0: 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  Msg);.  }.  sqli
d000: 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  te3_exec(p->db, 
d010: 22 52 45 4c 45 41 53 45 20 73 65 6c 66 74 65 73  "RELEASE selftes
d020: 74 5f 69 6e 69 74 22 2c 30 2c 30 2c 30 29 3b 0a  t_init",0,0,0);.
d030: 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68  }.../*.** Set th
d040: 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 74 61  e destination ta
d050: 62 6c 65 20 66 69 65 6c 64 20 6f 66 20 74 68 65  ble field of the
d060: 20 53 68 65 6c 6c 53 74 61 74 65 20 73 74 72 75   ShellState stru
d070: 63 74 75 72 65 20 74 6f 0a 2a 2a 20 74 68 65 20  cture to.** the 
d080: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
d090: 65 20 67 69 76 65 6e 2e 20 20 45 73 63 61 70 65  e given.  Escape
d0a0: 20 61 6e 79 20 71 75 6f 74 65 20 63 68 61 72 61   any quote chara
d0b0: 63 74 65 72 73 20 69 6e 20 74 68 65 0a 2a 2a 20  cters in the.** 
d0c0: 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 2a 2f 0a 73  table name..*/.s
d0d0: 74 61 74 69 63 20 76 6f 69 64 20 73 65 74 5f 74  tatic void set_t
d0e0: 61 62 6c 65 5f 6e 61 6d 65 28 53 68 65 6c 6c 53  able_name(ShellS
d0f0: 74 61 74 65 20 2a 70 2c 20 63 6f 6e 73 74 20 63  tate *p, const c
d100: 68 61 72 20 2a 7a 4e 61 6d 65 29 7b 0a 20 20 69  har *zName){.  i
d110: 6e 74 20 69 2c 20 6e 3b 0a 20 20 63 68 61 72 20  nt i, n;.  char 
d120: 63 51 75 6f 74 65 3b 0a 20 20 63 68 61 72 20 2a  cQuote;.  char *
d130: 7a 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 7a 44 65  z;..  if( p->zDe
d140: 73 74 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 66  stTable ){.    f
d150: 72 65 65 28 70 2d 3e 7a 44 65 73 74 54 61 62 6c  ree(p->zDestTabl
d160: 65 29 3b 0a 20 20 20 20 70 2d 3e 7a 44 65 73 74  e);.    p->zDest
d170: 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 7d 0a 20  Table = 0;.  }. 
d180: 20 69 66 28 20 7a 4e 61 6d 65 3d 3d 30 20 29 20   if( zName==0 ) 
d190: 72 65 74 75 72 6e 3b 0a 20 20 63 51 75 6f 74 65  return;.  cQuote
d1a0: 20 3d 20 71 75 6f 74 65 43 68 61 72 28 7a 4e 61   = quoteChar(zNa
d1b0: 6d 65 29 3b 0a 20 20 6e 20 3d 20 73 74 72 6c 65  me);.  n = strle
d1c0: 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 20 20 69 66  n30(zName);.  if
d1d0: 28 20 63 51 75 6f 74 65 20 29 20 6e 20 2b 3d 20  ( cQuote ) n += 
d1e0: 6e 2b 32 3b 0a 20 20 7a 20 3d 20 70 2d 3e 7a 44  n+2;.  z = p->zD
d1f0: 65 73 74 54 61 62 6c 65 20 3d 20 6d 61 6c 6c 6f  estTable = mallo
d200: 63 28 20 6e 2b 31 20 29 3b 0a 20 20 69 66 28 20  c( n+1 );.  if( 
d210: 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 72 61 77 5f  z==0 ){.    raw_
d220: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45  printf(stderr,"E
d230: 72 72 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d  rror: out of mem
d240: 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20 65 78 69  ory\n");.    exi
d250: 74 28 31 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20  t(1);.  }.  n = 
d260: 30 3b 0a 20 20 69 66 28 20 63 51 75 6f 74 65 20  0;.  if( cQuote 
d270: 29 20 7a 5b 6e 2b 2b 5d 20 3d 20 63 51 75 6f 74  ) z[n++] = cQuot
d280: 65 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 7a 4e  e;.  for(i=0; zN
d290: 61 6d 65 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20  ame[i]; i++){.  
d2a0: 20 20 7a 5b 6e 2b 2b 5d 20 3d 20 7a 4e 61 6d 65    z[n++] = zName
d2b0: 5b 69 5d 3b 0a 20 20 20 20 69 66 28 20 7a 4e 61  [i];.    if( zNa
d2c0: 6d 65 5b 69 5d 3d 3d 63 51 75 6f 74 65 20 29 20  me[i]==cQuote ) 
d2d0: 7a 5b 6e 2b 2b 5d 20 3d 20 63 51 75 6f 74 65 3b  z[n++] = cQuote;
d2e0: 0a 20 20 7d 0a 20 20 69 66 28 20 63 51 75 6f 74  .  }.  if( cQuot
d2f0: 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d 20 63 51 75  e ) z[n++] = cQu
d300: 6f 74 65 3b 0a 20 20 7a 5b 6e 5d 20 3d 20 30 3b  ote;.  z[n] = 0;
d310: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75  .}.../*.** Execu
d320: 74 65 20 61 20 71 75 65 72 79 20 73 74 61 74 65  te a query state
d330: 6d 65 6e 74 20 74 68 61 74 20 77 69 6c 6c 20 67  ment that will g
d340: 65 6e 65 72 61 74 65 20 53 51 4c 20 6f 75 74 70  enerate SQL outp
d350: 75 74 2e 20 20 50 72 69 6e 74 0a 2a 2a 20 74 68  ut.  Print.** th
d360: 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73  e result columns
d370: 2c 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65  , comma-separate
d380: 64 2c 20 6f 6e 20 61 20 6c 69 6e 65 20 61 6e 64  d, on a line and
d390: 20 74 68 65 6e 20 61 64 64 20 61 0a 2a 2a 20 73   then add a.** s
d3a0: 65 6d 69 63 6f 6c 6f 6e 20 74 65 72 6d 69 6e 61  emicolon termina
d3b0: 74 6f 72 20 74 6f 20 74 68 65 20 65 6e 64 20 6f  tor to the end o
d3c0: 66 20 74 68 61 74 20 6c 69 6e 65 2e 0a 2a 2a 0a  f that line..**.
d3d0: 2a 2a 20 49 66 20 74 68 65 20 6e 75 6d 62 65 72  ** If the number
d3e0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 73 20 31   of columns is 1
d3f0: 20 61 6e 64 20 74 68 61 74 20 63 6f 6c 75 6d 6e   and that column
d400: 20 63 6f 6e 74 61 69 6e 73 20 74 65 78 74 20 22   contains text "
d410: 2d 2d 22 0a 2a 2a 20 74 68 65 6e 20 77 72 69 74  --".** then writ
d420: 65 20 74 68 65 20 73 65 6d 69 63 6f 6c 6f 6e 20  e the semicolon 
d430: 6f 6e 20 61 20 73 65 70 61 72 61 74 65 20 6c 69  on a separate li
d440: 6e 65 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69  ne.  That way, i
d450: 66 20 61 0a 2a 2a 20 22 2d 2d 22 20 63 6f 6d 6d  f a.** "--" comm
d460: 65 6e 74 20 6f 63 63 75 72 73 20 61 74 20 74 68  ent occurs at th
d470: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 73 74 61  e end of the sta
d480: 74 65 6d 65 6e 74 2c 20 74 68 65 20 63 6f 6d 6d  tement, the comm
d490: 65 6e 74 0a 2a 2a 20 77 6f 6e 27 74 20 63 6f 6e  ent.** won't con
d4a0: 73 75 6d 65 20 74 68 65 20 73 65 6d 69 63 6f 6c  sume the semicol
d4b0: 6f 6e 20 74 65 72 6d 69 6e 61 74 6f 72 2e 0a 2a  on terminator..*
d4c0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 72 75 6e  /.static int run
d4d0: 5f 74 61 62 6c 65 5f 64 75 6d 70 5f 71 75 65 72  _table_dump_quer
d4e0: 79 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20  y(.  ShellState 
d4f0: 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  *p,           /*
d500: 20 51 75 65 72 79 20 63 6f 6e 74 65 78 74 20 2a   Query context *
d510: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
d520: 7a 53 65 6c 65 63 74 2c 20 20 20 20 20 2f 2a 20  zSelect,     /* 
d530: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
d540: 20 74 6f 20 65 78 74 72 61 63 74 20 63 6f 6e 74   to extract cont
d550: 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ent */.  const c
d560: 68 61 72 20 2a 7a 46 69 72 73 74 52 6f 77 20 20  har *zFirstRow  
d570: 20 20 2f 2a 20 50 72 69 6e 74 20 62 65 66 6f 72    /* Print befor
d580: 65 20 66 69 72 73 74 20 72 6f 77 2c 20 69 66 20  e first row, if 
d590: 6e 6f 74 20 4e 55 4c 4c 20 2a 2f 0a 29 7b 0a 20  not NULL */.){. 
d5a0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
d5b0: 53 65 6c 65 63 74 3b 0a 20 20 69 6e 74 20 72 63  Select;.  int rc
d5c0: 3b 0a 20 20 69 6e 74 20 6e 52 65 73 75 6c 74 3b  ;.  int nResult;
d5d0: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 6f 6e 73  .  int i;.  cons
d5e0: 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 72 63 20  t char *z;.  rc 
d5f0: 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
d600: 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53 65 6c  e_v2(p->db, zSel
d610: 65 63 74 2c 20 2d 31 2c 20 26 70 53 65 6c 65 63  ect, -1, &pSelec
d620: 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63 21  t, 0);.  if( rc!
d630: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 21 70  =SQLITE_OK || !p
d640: 53 65 6c 65 63 74 20 29 7b 0a 20 20 20 20 75 74  Select ){.    ut
d650: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
d660: 2c 20 22 2f 2a 2a 2a 2a 20 45 52 52 4f 52 3a 20  , "/**** ERROR: 
d670: 28 25 64 29 20 25 73 20 2a 2a 2a 2a 2a 2f 5c 6e  (%d) %s *****/\n
d680: 22 2c 20 72 63 2c 0a 20 20 20 20 20 20 20 20 20  ", rc,.         
d690: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65         sqlite3_e
d6a0: 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20  rrmsg(p->db));. 
d6b0: 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29     if( (rc&0xff)
d6c0: 21 3d 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  !=SQLITE_CORRUPT
d6d0: 20 29 20 70 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20   ) p->nErr++;.  
d6e0: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 7d    return rc;.  }
d6f0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
d700: 73 74 65 70 28 70 53 65 6c 65 63 74 29 3b 0a 20  step(pSelect);. 
d710: 20 6e 52 65 73 75 6c 74 20 3d 20 73 71 6c 69 74   nResult = sqlit
d720: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
d730: 70 53 65 6c 65 63 74 29 3b 0a 20 20 77 68 69 6c  pSelect);.  whil
d740: 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 52 4f  e( rc==SQLITE_RO
d750: 57 20 29 7b 0a 20 20 20 20 69 66 28 20 7a 46 69  W ){.    if( zFi
d760: 72 73 74 52 6f 77 20 29 7b 0a 20 20 20 20 20 20  rstRow ){.      
d770: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
d780: 75 74 2c 20 22 25 73 22 2c 20 7a 46 69 72 73 74  ut, "%s", zFirst
d790: 52 6f 77 29 3b 0a 20 20 20 20 20 20 7a 46 69 72  Row);.      zFir
d7a0: 73 74 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 7d  stRow = 0;.    }
d7b0: 0a 20 20 20 20 7a 20 3d 20 28 63 6f 6e 73 74 20  .    z = (const 
d7c0: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f  char*)sqlite3_co
d7d0: 6c 75 6d 6e 5f 74 65 78 74 28 70 53 65 6c 65 63  lumn_text(pSelec
d7e0: 74 2c 20 30 29 3b 0a 20 20 20 20 75 74 66 38 5f  t, 0);.    utf8_
d7f0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
d800: 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 66 6f 72  %s", z);.    for
d810: 28 69 3d 31 3b 20 69 3c 6e 52 65 73 75 6c 74 3b  (i=1; i<nResult;
d820: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 75 74 66   i++){.      utf
d830: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
d840: 20 22 2c 25 73 22 2c 20 73 71 6c 69 74 65 33 5f   ",%s", sqlite3_
d850: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 65 6c  column_text(pSel
d860: 65 63 74 2c 20 69 29 29 3b 0a 20 20 20 20 7d 0a  ect, i));.    }.
d870: 20 20 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 7a      if( z==0 ) z
d880: 20 3d 20 22 22 3b 0a 20 20 20 20 77 68 69 6c 65   = "";.    while
d890: 28 20 7a 5b 30 5d 20 26 26 20 28 7a 5b 30 5d 21  ( z[0] && (z[0]!
d8a0: 3d 27 2d 27 20 7c 7c 20 7a 5b 31 5d 21 3d 27 2d  ='-' || z[1]!='-
d8b0: 27 29 20 29 20 7a 2b 2b 3b 0a 20 20 20 20 69 66  ') ) z++;.    if
d8c0: 28 20 7a 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ( z[0] ){.      
d8d0: 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
d8e0: 74 2c 20 22 5c 6e 3b 5c 6e 22 29 3b 0a 20 20 20  t, "\n;\n");.   
d8f0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61   }else{.      ra
d900: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
d910: 20 22 3b 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20   ";\n");.    }. 
d920: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
d930: 73 74 65 70 28 70 53 65 6c 65 63 74 29 3b 0a 20  step(pSelect);. 
d940: 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
d950: 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 65 6c 65  3_finalize(pSele
d960: 63 74 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  ct);.  if( rc!=S
d970: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
d980: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
d990: 75 74 2c 20 22 2f 2a 2a 2a 2a 20 45 52 52 4f 52  ut, "/**** ERROR
d9a0: 3a 20 28 25 64 29 20 25 73 20 2a 2a 2a 2a 2a 2f  : (%d) %s *****/
d9b0: 5c 6e 22 2c 20 72 63 2c 0a 20 20 20 20 20 20 20  \n", rc,.       
d9c0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d9d0: 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b  _errmsg(p->db));
d9e0: 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78 66  .    if( (rc&0xf
d9f0: 66 29 21 3d 53 51 4c 49 54 45 5f 43 4f 52 52 55  f)!=SQLITE_CORRU
da00: 50 54 20 29 20 70 2d 3e 6e 45 72 72 2b 2b 3b 0a  PT ) p->nErr++;.
da10: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
da20: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  .}../*.** Alloca
da30: 74 65 20 73 70 61 63 65 20 61 6e 64 20 73 61 76  te space and sav
da40: 65 20 6f 66 66 20 63 75 72 72 65 6e 74 20 65 72  e off current er
da50: 72 6f 72 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73  ror string..*/.s
da60: 74 61 74 69 63 20 63 68 61 72 20 2a 73 61 76 65  tatic char *save
da70: 5f 65 72 72 5f 6d 73 67 28 0a 20 20 73 71 6c 69  _err_msg(.  sqli
da80: 74 65 33 20 2a 64 62 20 20 20 20 20 20 20 20 20  te3 *db         
da90: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74     /* Database t
daa0: 6f 20 71 75 65 72 79 20 2a 2f 0a 29 7b 0a 20 20  o query */.){.  
dab0: 69 6e 74 20 6e 45 72 72 4d 73 67 20 3d 20 31 2b  int nErrMsg = 1+
dac0: 73 74 72 6c 65 6e 33 30 28 73 71 6c 69 74 65 33  strlen30(sqlite3
dad0: 5f 65 72 72 6d 73 67 28 64 62 29 29 3b 0a 20 20  _errmsg(db));.  
dae0: 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20  char *zErrMsg = 
daf0: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34  sqlite3_malloc64
db00: 28 6e 45 72 72 4d 73 67 29 3b 0a 20 20 69 66 28  (nErrMsg);.  if(
db10: 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20   zErrMsg ){.    
db20: 6d 65 6d 63 70 79 28 7a 45 72 72 4d 73 67 2c 20  memcpy(zErrMsg, 
db30: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64  sqlite3_errmsg(d
db40: 62 29 2c 20 6e 45 72 72 4d 73 67 29 3b 0a 20 20  b), nErrMsg);.  
db50: 7d 0a 20 20 72 65 74 75 72 6e 20 7a 45 72 72 4d  }.  return zErrM
db60: 73 67 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 5f 5f  sg;.}..#ifdef __
db70: 6c 69 6e 75 78 5f 5f 0a 2f 2a 0a 2a 2a 20 41 74  linux__./*.** At
db80: 74 65 6d 70 74 20 74 6f 20 64 69 73 70 6c 61 79  tempt to display
db90: 20 49 2f 4f 20 73 74 61 74 73 20 6f 6e 20 4c 69   I/O stats on Li
dba0: 6e 75 78 20 75 73 69 6e 67 20 2f 70 72 6f 63 2f  nux using /proc/
dbb0: 50 49 44 2f 69 6f 0a 2a 2f 0a 73 74 61 74 69 63  PID/io.*/.static
dbc0: 20 76 6f 69 64 20 64 69 73 70 6c 61 79 4c 69 6e   void displayLin
dbd0: 75 78 49 6f 53 74 61 74 73 28 46 49 4c 45 20 2a  uxIoStats(FILE *
dbe0: 6f 75 74 29 7b 0a 20 20 46 49 4c 45 20 2a 69 6e  out){.  FILE *in
dbf0: 3b 0a 20 20 63 68 61 72 20 7a 5b 32 30 30 5d 3b  ;.  char z[200];
dc00: 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69  .  sqlite3_snpri
dc10: 6e 74 66 28 73 69 7a 65 6f 66 28 7a 29 2c 20 7a  ntf(sizeof(z), z
dc20: 2c 20 22 2f 70 72 6f 63 2f 25 64 2f 69 6f 22 2c  , "/proc/%d/io",
dc30: 20 67 65 74 70 69 64 28 29 29 3b 0a 20 20 69 6e   getpid());.  in
dc40: 20 3d 20 66 6f 70 65 6e 28 7a 2c 20 22 72 62 22   = fopen(z, "rb"
dc50: 29 3b 0a 20 20 69 66 28 20 69 6e 3d 3d 30 20 29  );.  if( in==0 )
dc60: 20 72 65 74 75 72 6e 3b 0a 20 20 77 68 69 6c 65   return;.  while
dc70: 28 20 66 67 65 74 73 28 7a 2c 20 73 69 7a 65 6f  ( fgets(z, sizeo
dc80: 66 28 7a 29 2c 20 69 6e 29 21 3d 30 20 29 7b 0a  f(z), in)!=0 ){.
dc90: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
dca0: 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
dcb0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 61 74  const char *zPat
dcc0: 74 65 72 6e 3b 0a 20 20 20 20 20 20 63 6f 6e 73  tern;.      cons
dcd0: 74 20 63 68 61 72 20 2a 7a 44 65 73 63 3b 0a 20  t char *zDesc;. 
dce0: 20 20 20 7d 20 61 54 72 61 6e 73 5b 5d 20 3d 20     } aTrans[] = 
dcf0: 7b 0a 20 20 20 20 20 20 7b 20 22 72 63 68 61 72  {.      { "rchar
dd00: 3a 20 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  : ",            
dd10: 20 20 20 20 20 20 22 42 79 74 65 73 20 72 65 63        "Bytes rec
dd20: 65 69 76 65 64 20 62 79 20 72 65 61 64 28 29 3a  eived by read():
dd30: 22 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 77 63  " },.      { "wc
dd40: 68 61 72 3a 20 22 2c 20 20 20 20 20 20 20 20 20  har: ",         
dd50: 20 20 20 20 20 20 20 20 20 22 42 79 74 65 73 20           "Bytes 
dd60: 73 65 6e 74 20 74 6f 20 77 72 69 74 65 28 29 3a  sent to write():
dd70: 22 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20  "    },.      { 
dd80: 22 73 79 73 63 72 3a 20 22 2c 20 20 20 20 20 20  "syscr: ",      
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 22 52 65 61              "Rea
dda0: 64 28 29 20 73 79 73 74 65 6d 20 63 61 6c 6c 73  d() system calls
ddb0: 3a 22 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  :"      },.     
ddc0: 20 7b 20 22 73 79 73 63 77 3a 20 22 2c 20 20 20   { "syscw: ",   
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
dde0: 57 72 69 74 65 28 29 20 73 79 73 74 65 6d 20 63  Write() system c
ddf0: 61 6c 6c 73 3a 22 20 20 20 20 20 7d 2c 0a 20 20  alls:"     },.  
de00: 20 20 20 20 7b 20 22 72 65 61 64 5f 62 79 74 65      { "read_byte
de10: 73 3a 20 22 2c 20 20 20 20 20 20 20 20 20 20 20  s: ",           
de20: 20 20 22 42 79 74 65 73 20 72 65 61 64 20 66 72    "Bytes read fr
de30: 6f 6d 20 73 74 6f 72 61 67 65 3a 22 20 20 7d 2c  om storage:"  },
de40: 0a 20 20 20 20 20 20 7b 20 22 77 72 69 74 65 5f  .      { "write_
de50: 62 79 74 65 73 3a 20 22 2c 20 20 20 20 20 20 20  bytes: ",       
de60: 20 20 20 20 20 22 42 79 74 65 73 20 77 72 69 74       "Bytes writ
de70: 74 65 6e 20 74 6f 20 73 74 6f 72 61 67 65 3a 22  ten to storage:"
de80: 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 63 61 6e   },.      { "can
de90: 63 65 6c 6c 65 64 5f 77 72 69 74 65 5f 62 79 74  celled_write_byt
dea0: 65 73 3a 20 22 2c 20 20 22 43 61 6e 63 65 6c 6c  es: ",  "Cancell
deb0: 65 64 20 77 72 69 74 65 20 62 79 74 65 73 3a 22  ed write bytes:"
dec0: 20 20 20 20 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20      },.    };.  
ded0: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72    int i;.    for
dee0: 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a  (i=0; i<ArraySiz
def0: 65 28 61 54 72 61 6e 73 29 3b 20 69 2b 2b 29 7b  e(aTrans); i++){
df00: 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 28  .      int n = (
df10: 69 6e 74 29 73 74 72 6c 65 6e 28 61 54 72 61 6e  int)strlen(aTran
df20: 73 5b 69 5d 2e 7a 50 61 74 74 65 72 6e 29 3b 0a  s[i].zPattern);.
df30: 20 20 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d        if( strncm
df40: 70 28 61 54 72 61 6e 73 5b 69 5d 2e 7a 50 61 74  p(aTrans[i].zPat
df50: 74 65 72 6e 2c 20 7a 2c 20 6e 29 3d 3d 30 20 29  tern, z, n)==0 )
df60: 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  {.        utf8_p
df70: 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 2d 33 36  rintf(out, "%-36
df80: 73 20 25 73 22 2c 20 61 54 72 61 6e 73 5b 69 5d  s %s", aTrans[i]
df90: 2e 7a 44 65 73 63 2c 20 26 7a 5b 6e 5d 29 3b 0a  .zDesc, &z[n]);.
dfa0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
dfb0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
dfc0: 0a 20 20 66 63 6c 6f 73 65 28 69 6e 29 3b 0a 7d  .  fclose(in);.}
dfd0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
dfe0: 69 73 70 6c 61 79 20 61 20 73 69 6e 67 6c 65 20  isplay a single 
dff0: 6c 69 6e 65 20 6f 66 20 73 74 61 74 75 73 20 75  line of status u
e000: 73 69 6e 67 20 36 34 2d 62 69 74 20 76 61 6c 75  sing 64-bit valu
e010: 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  es..*/.static vo
e020: 69 64 20 64 69 73 70 6c 61 79 53 74 61 74 4c 69  id displayStatLi
e030: 6e 65 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65  ne(.  ShellState
e040: 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20   *p,            
e050: 2f 2a 20 54 68 65 20 73 68 65 6c 6c 20 63 6f 6e  /* The shell con
e060: 74 65 78 74 20 2a 2f 0a 20 20 63 68 61 72 20 2a  text */.  char *
e070: 7a 4c 61 62 65 6c 2c 20 20 20 20 20 20 20 20 20  zLabel,         
e080: 20 20 20 20 2f 2a 20 4c 61 62 65 6c 20 66 6f 72      /* Label for
e090: 20 74 68 69 73 20 6f 6e 65 20 6c 69 6e 65 20 2a   this one line *
e0a0: 2f 0a 20 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61  /.  char *zForma
e0b0: 74 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t,            /*
e0c0: 20 46 6f 72 6d 61 74 20 66 6f 72 20 74 68 65 20   Format for the 
e0d0: 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e 74 20  result */.  int 
e0e0: 69 53 74 61 74 75 73 43 74 72 6c 2c 20 20 20 20  iStatusCtrl,    
e0f0: 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 73        /* Which s
e100: 74 61 74 75 73 20 74 6f 20 64 69 73 70 6c 61 79  tatus to display
e110: 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 73 65 74   */.  int bReset
e120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e130: 2f 2a 20 54 72 75 65 20 74 6f 20 72 65 73 65 74  /* True to reset
e140: 20 74 68 65 20 73 74 61 74 73 20 2a 2f 0a 29 7b   the stats */.){
e150: 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
e160: 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20 73 71   iCur = -1;.  sq
e170: 6c 69 74 65 33 5f 69 6e 74 36 34 20 69 48 69 77  lite3_int64 iHiw
e180: 74 72 20 3d 20 2d 31 3b 0a 20 20 69 6e 74 20 69  tr = -1;.  int i
e190: 2c 20 6e 50 65 72 63 65 6e 74 3b 0a 20 20 63 68  , nPercent;.  ch
e1a0: 61 72 20 7a 4c 69 6e 65 5b 32 30 30 5d 3b 0a 20  ar zLine[200];. 
e1b0: 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 36   sqlite3_status6
e1c0: 34 28 69 53 74 61 74 75 73 43 74 72 6c 2c 20 26  4(iStatusCtrl, &
e1d0: 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62  iCur, &iHiwtr, b
e1e0: 52 65 73 65 74 29 3b 0a 20 20 66 6f 72 28 69 3d  Reset);.  for(i=
e1f0: 30 2c 20 6e 50 65 72 63 65 6e 74 3d 30 3b 20 7a  0, nPercent=0; z
e200: 46 6f 72 6d 61 74 5b 69 5d 3b 20 69 2b 2b 29 7b  Format[i]; i++){
e210: 0a 20 20 20 20 69 66 28 20 7a 46 6f 72 6d 61 74  .    if( zFormat
e220: 5b 69 5d 3d 3d 27 25 27 20 29 20 6e 50 65 72 63  [i]=='%' ) nPerc
e230: 65 6e 74 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66 28  ent++;.  }.  if(
e240: 20 6e 50 65 72 63 65 6e 74 3e 31 20 29 7b 0a 20   nPercent>1 ){. 
e250: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
e260: 6e 74 66 28 73 69 7a 65 6f 66 28 7a 4c 69 6e 65  ntf(sizeof(zLine
e270: 29 2c 20 7a 4c 69 6e 65 2c 20 7a 46 6f 72 6d 61  ), zLine, zForma
e280: 74 2c 20 69 43 75 72 2c 20 69 48 69 77 74 72 29  t, iCur, iHiwtr)
e290: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
e2a0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
e2b0: 73 69 7a 65 6f 66 28 7a 4c 69 6e 65 29 2c 20 7a  sizeof(zLine), z
e2c0: 4c 69 6e 65 2c 20 7a 46 6f 72 6d 61 74 2c 20 69  Line, zFormat, i
e2d0: 48 69 77 74 72 29 3b 0a 20 20 7d 0a 20 20 72 61  Hiwtr);.  }.  ra
e2e0: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
e2f0: 20 22 25 2d 33 36 73 20 25 73 5c 6e 22 2c 20 7a   "%-36s %s\n", z
e300: 4c 61 62 65 6c 2c 20 7a 4c 69 6e 65 29 3b 0a 7d  Label, zLine);.}
e310: 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 70 6c 61 79 20  ../*.** Display 
e320: 6d 65 6d 6f 72 79 20 73 74 61 74 73 2e 0a 2a 2f  memory stats..*/
e330: 0a 73 74 61 74 69 63 20 69 6e 74 20 64 69 73 70  .static int disp
e340: 6c 61 79 5f 73 74 61 74 73 28 0a 20 20 73 71 6c  lay_stats(.  sql
e350: 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20  ite3 *db,       
e360: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
e370: 62 61 73 65 20 74 6f 20 71 75 65 72 79 20 2a 2f  base to query */
e380: 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  .  ShellState *p
e390: 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20 2f  Arg,           /
e3a0: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 68 65  * Pointer to She
e3b0: 6c 6c 53 74 61 74 65 20 2a 2f 0a 20 20 69 6e 74  llState */.  int
e3c0: 20 62 52 65 73 65 74 20 20 20 20 20 20 20 20 20   bReset         
e3d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
e3e0: 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 73 74   to reset the st
e3f0: 61 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  ats */.){.  int 
e400: 69 43 75 72 3b 0a 20 20 69 6e 74 20 69 48 69 77  iCur;.  int iHiw
e410: 74 72 3b 0a 0a 20 20 69 66 28 20 70 41 72 67 20  tr;..  if( pArg 
e420: 26 26 20 70 41 72 67 2d 3e 6f 75 74 20 29 7b 0a  && pArg->out ){.
e430: 20 20 20 20 64 69 73 70 6c 61 79 53 74 61 74 4c      displayStatL
e440: 69 6e 65 28 70 41 72 67 2c 20 22 4d 65 6d 6f 72  ine(pArg, "Memor
e450: 79 20 55 73 65 64 3a 22 2c 0a 20 20 20 20 20 20  y Used:",.      
e460: 20 22 25 6c 6c 64 20 28 6d 61 78 20 25 6c 6c 64   "%lld (max %lld
e470: 29 20 62 79 74 65 73 22 2c 20 53 51 4c 49 54 45  ) bytes", SQLITE
e480: 5f 53 54 41 54 55 53 5f 4d 45 4d 4f 52 59 5f 55  _STATUS_MEMORY_U
e490: 53 45 44 2c 20 62 52 65 73 65 74 29 3b 0a 20 20  SED, bReset);.  
e4a0: 20 20 64 69 73 70 6c 61 79 53 74 61 74 4c 69 6e    displayStatLin
e4b0: 65 28 70 41 72 67 2c 20 22 4e 75 6d 62 65 72 20  e(pArg, "Number 
e4c0: 6f 66 20 4f 75 74 73 74 61 6e 64 69 6e 67 20 41  of Outstanding A
e4d0: 6c 6c 6f 63 61 74 69 6f 6e 73 3a 22 2c 0a 20 20  llocations:",.  
e4e0: 20 20 20 20 20 22 25 6c 6c 64 20 28 6d 61 78 20       "%lld (max 
e4f0: 25 6c 6c 64 29 22 2c 20 53 51 4c 49 54 45 5f 53  %lld)", SQLITE_S
e500: 54 41 54 55 53 5f 4d 41 4c 4c 4f 43 5f 43 4f 55  TATUS_MALLOC_COU
e510: 4e 54 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20  NT, bReset);.   
e520: 20 69 66 28 20 70 41 72 67 2d 3e 73 68 65 6c 6c   if( pArg->shell
e530: 46 6c 67 73 20 26 20 53 48 46 4c 47 5f 50 61 67  Flgs & SHFLG_Pag
e540: 65 63 61 63 68 65 20 29 7b 0a 20 20 20 20 20 20  ecache ){.      
e550: 64 69 73 70 6c 61 79 53 74 61 74 4c 69 6e 65 28  displayStatLine(
e560: 70 41 72 67 2c 20 22 4e 75 6d 62 65 72 20 6f 66  pArg, "Number of
e570: 20 50 63 61 63 68 65 20 50 61 67 65 73 20 55 73   Pcache Pages Us
e580: 65 64 3a 22 2c 0a 20 20 20 20 20 20 20 20 20 22  ed:",.         "
e590: 25 6c 6c 64 20 28 6d 61 78 20 25 6c 6c 64 29 20  %lld (max %lld) 
e5a0: 70 61 67 65 73 22 2c 20 53 51 4c 49 54 45 5f 53  pages", SQLITE_S
e5b0: 54 41 54 55 53 5f 50 41 47 45 43 41 43 48 45 5f  TATUS_PAGECACHE_
e5c0: 55 53 45 44 2c 20 62 52 65 73 65 74 29 3b 0a 20  USED, bReset);. 
e5d0: 20 20 20 7d 0a 20 20 20 20 64 69 73 70 6c 61 79     }.    display
e5e0: 53 74 61 74 4c 69 6e 65 28 70 41 72 67 2c 20 22  StatLine(pArg, "
e5f0: 4e 75 6d 62 65 72 20 6f 66 20 50 63 61 63 68 65  Number of Pcache
e600: 20 4f 76 65 72 66 6c 6f 77 20 42 79 74 65 73 3a   Overflow Bytes:
e610: 22 2c 0a 20 20 20 20 20 20 20 22 25 6c 6c 64 20  ",.       "%lld 
e620: 28 6d 61 78 20 25 6c 6c 64 29 20 62 79 74 65 73  (max %lld) bytes
e630: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53  ", SQLITE_STATUS
e640: 5f 50 41 47 45 43 41 43 48 45 5f 4f 56 45 52 46  _PAGECACHE_OVERF
e650: 4c 4f 57 2c 20 62 52 65 73 65 74 29 3b 0a 20 20  LOW, bReset);.  
e660: 20 20 64 69 73 70 6c 61 79 53 74 61 74 4c 69 6e    displayStatLin
e670: 65 28 70 41 72 67 2c 20 22 4c 61 72 67 65 73 74  e(pArg, "Largest
e680: 20 41 6c 6c 6f 63 61 74 69 6f 6e 3a 22 2c 0a 20   Allocation:",. 
e690: 20 20 20 20 20 20 22 25 6c 6c 64 20 62 79 74 65        "%lld byte
e6a0: 73 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 55  s", SQLITE_STATU
e6b0: 53 5f 4d 41 4c 4c 4f 43 5f 53 49 5a 45 2c 20 62  S_MALLOC_SIZE, b
e6c0: 52 65 73 65 74 29 3b 0a 20 20 20 20 64 69 73 70  Reset);.    disp
e6d0: 6c 61 79 53 74 61 74 4c 69 6e 65 28 70 41 72 67  layStatLine(pArg
e6e0: 2c 20 22 4c 61 72 67 65 73 74 20 50 63 61 63 68  , "Largest Pcach
e6f0: 65 20 41 6c 6c 6f 63 61 74 69 6f 6e 3a 22 2c 0a  e Allocation:",.
e700: 20 20 20 20 20 20 20 22 25 6c 6c 64 20 62 79 74         "%lld byt
e710: 65 73 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  es", SQLITE_STAT
e720: 55 53 5f 50 41 47 45 43 41 43 48 45 5f 53 49 5a  US_PAGECACHE_SIZ
e730: 45 2c 20 62 52 65 73 65 74 29 3b 0a 23 69 66 64  E, bReset);.#ifd
e740: 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41  ef YYTRACKMAXSTA
e750: 43 4b 44 45 50 54 48 0a 20 20 20 20 64 69 73 70  CKDEPTH.    disp
e760: 6c 61 79 53 74 61 74 4c 69 6e 65 28 70 41 72 67  layStatLine(pArg
e770: 2c 20 22 44 65 65 70 65 73 74 20 50 61 72 73 65  , "Deepest Parse
e780: 72 20 53 74 61 63 6b 3a 22 2c 0a 20 20 20 20 20  r Stack:",.     
e790: 20 20 22 25 6c 6c 64 20 28 6d 61 78 20 25 6c 6c    "%lld (max %ll
e7a0: 64 29 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  d)", SQLITE_STAT
e7b0: 55 53 5f 50 41 52 53 45 52 5f 53 54 41 43 4b 2c  US_PARSER_STACK,
e7c0: 20 62 52 65 73 65 74 29 3b 0a 23 65 6e 64 69 66   bReset);.#endif
e7d0: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 41 72 67  .  }..  if( pArg
e7e0: 20 26 26 20 70 41 72 67 2d 3e 6f 75 74 20 26 26   && pArg->out &&
e7f0: 20 64 62 20 29 7b 0a 20 20 20 20 69 66 28 20 70   db ){.    if( p
e800: 41 72 67 2d 3e 73 68 65 6c 6c 46 6c 67 73 20 26  Arg->shellFlgs &
e810: 20 53 48 46 4c 47 5f 4c 6f 6f 6b 61 73 69 64 65   SHFLG_Lookaside
e820: 20 29 7b 0a 20 20 20 20 20 20 69 48 69 77 74 72   ){.      iHiwtr
e830: 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20   = iCur = -1;.  
e840: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
e850: 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45  tatus(db, SQLITE
e860: 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53  _DBSTATUS_LOOKAS
e870: 49 44 45 5f 55 53 45 44 2c 0a 20 20 20 20 20 20  IDE_USED,.      
e880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e890: 20 20 26 69 43 75 72 2c 20 26 69 48 69 77 74 72    &iCur, &iHiwtr
e8a0: 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20 20  , bReset);.     
e8b0: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67   raw_printf(pArg
e8c0: 2d 3e 6f 75 74 2c 0a 20 20 20 20 20 20 20 20 20  ->out,.         
e8d0: 20 20 20 20 20 22 4c 6f 6f 6b 61 73 69 64 65 20       "Lookaside 
e8e0: 53 6c 6f 74 73 20 55 73 65 64 3a 20 20 20 20 20  Slots Used:     
e8f0: 20 20 20 20 20 20 20 20 20 20 20 25 64 20 28 6d             %d (m
e900: 61 78 20 25 64 29 5c 6e 22 2c 0a 20 20 20 20 20  ax %d)\n",.     
e910: 20 20 20 20 20 20 20 20 20 69 43 75 72 2c 20 69           iCur, i
e920: 48 69 77 74 72 29 3b 0a 20 20 20 20 20 20 73 71  Hiwtr);.      sq
e930: 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28  lite3_db_status(
e940: 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41  db, SQLITE_DBSTA
e950: 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 48 49  TUS_LOOKASIDE_HI
e960: 54 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  T,.             
e970: 20 20 20 20 20 20 20 20 20 20 20 26 69 43 75 72             &iCur
e980: 2c 20 26 69 48 69 77 74 72 2c 20 62 52 65 73 65  , &iHiwtr, bRese
e990: 74 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72  t);.      raw_pr
e9a0: 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20  intf(pArg->out, 
e9b0: 22 53 75 63 63 65 73 73 66 75 6c 20 6c 6f 6f 6b  "Successful look
e9c0: 61 73 69 64 65 20 61 74 74 65 6d 70 74 73 3a 20  aside attempts: 
e9d0: 20 20 20 20 20 20 25 64 5c 6e 22 2c 0a 20 20 20        %d\n",.   
e9e0: 20 20 20 20 20 20 20 20 20 20 20 69 48 69 77 74             iHiwt
e9f0: 72 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  r);.      sqlite
ea00: 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20  3_db_status(db, 
ea10: 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f  SQLITE_DBSTATUS_
ea20: 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49 53 53 5f 53  LOOKASIDE_MISS_S
ea30: 49 5a 45 2c 0a 20 20 20 20 20 20 20 20 20 20 20  IZE,.           
ea40: 20 20 20 20 20 20 20 20 20 20 20 20 20 26 69 43               &iC
ea50: 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52 65  ur, &iHiwtr, bRe
ea60: 73 65 74 29 3b 0a 20 20 20 20 20 20 72 61 77 5f  set);.      raw_
ea70: 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74  printf(pArg->out
ea80: 2c 20 22 4c 6f 6f 6b 61 73 69 64 65 20 66 61 69  , "Lookaside fai
ea90: 6c 75 72 65 73 20 64 75 65 20 74 6f 20 73 69 7a  lures due to siz
eaa0: 65 3a 20 20 20 20 20 20 25 64 5c 6e 22 2c 0a 20  e:      %d\n",. 
eab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 48 69               iHi
eac0: 77 74 72 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  wtr);.      sqli
ead0: 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62  te3_db_status(db
eae0: 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55  , SQLITE_DBSTATU
eaf0: 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49 53 53  S_LOOKASIDE_MISS
eb00: 5f 46 55 4c 4c 2c 0a 20 20 20 20 20 20 20 20 20  _FULL,.         
eb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26                 &
eb20: 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62  iCur, &iHiwtr, b
eb30: 52 65 73 65 74 29 3b 0a 20 20 20 20 20 20 72 61  Reset);.      ra
eb40: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
eb50: 75 74 2c 20 22 4c 6f 6f 6b 61 73 69 64 65 20 66  ut, "Lookaside f
eb60: 61 69 6c 75 72 65 73 20 64 75 65 20 74 6f 20 4f  ailures due to O
eb70: 4f 4d 3a 20 20 20 20 20 20 20 25 64 5c 6e 22 2c  OM:       %d\n",
eb80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
eb90: 48 69 77 74 72 29 3b 0a 20 20 20 20 7d 0a 20 20  Hiwtr);.    }.  
eba0: 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72 20    iHiwtr = iCur 
ebb0: 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65  = -1;.    sqlite
ebc0: 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20  3_db_status(db, 
ebd0: 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f  SQLITE_DBSTATUS_
ebe0: 43 41 43 48 45 5f 55 53 45 44 2c 20 26 69 43 75  CACHE_USED, &iCu
ebf0: 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52 65 73  r, &iHiwtr, bRes
ec00: 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69  et);.    raw_pri
ec10: 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22  ntf(pArg->out, "
ec20: 50 61 67 65 72 20 48 65 61 70 20 55 73 61 67 65  Pager Heap Usage
ec30: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
ec40: 20 20 20 20 20 25 64 20 62 79 74 65 73 5c 6e 22       %d bytes\n"
ec50: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 43  ,.            iC
ec60: 75 72 29 3b 0a 20 20 20 20 69 48 69 77 74 72 20  ur);.    iHiwtr 
ec70: 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20  = iCur = -1;.   
ec80: 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74   sqlite3_db_stat
ec90: 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42  us(db, SQLITE_DB
eca0: 53 54 41 54 55 53 5f 43 41 43 48 45 5f 48 49 54  STATUS_CACHE_HIT
ecb0: 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77 74 72  , &iCur, &iHiwtr
ecc0: 2c 20 31 29 3b 0a 20 20 20 20 72 61 77 5f 70 72  , 1);.    raw_pr
ecd0: 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20  intf(pArg->out, 
ece0: 22 50 61 67 65 20 63 61 63 68 65 20 68 69 74 73  "Page cache hits
ecf0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
ed00: 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 43 75        %d\n", iCu
ed10: 72 29 3b 0a 20 20 20 20 69 48 69 77 74 72 20 3d  r);.    iHiwtr =
ed20: 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20   iCur = -1;.    
ed30: 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75  sqlite3_db_statu
ed40: 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53  s(db, SQLITE_DBS
ed50: 54 41 54 55 53 5f 43 41 43 48 45 5f 4d 49 53 53  TATUS_CACHE_MISS
ed60: 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77 74 72  , &iCur, &iHiwtr
ed70: 2c 20 31 29 3b 0a 20 20 20 20 72 61 77 5f 70 72  , 1);.    raw_pr
ed80: 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20  intf(pArg->out, 
ed90: 22 50 61 67 65 20 63 61 63 68 65 20 6d 69 73 73  "Page cache miss
eda0: 65 73 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  es:             
edb0: 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 43 75        %d\n", iCu
edc0: 72 29 3b 0a 20 20 20 20 69 48 69 77 74 72 20 3d  r);.    iHiwtr =
edd0: 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20   iCur = -1;.    
ede0: 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75  sqlite3_db_statu
edf0: 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53  s(db, SQLITE_DBS
ee00: 54 41 54 55 53 5f 43 41 43 48 45 5f 57 52 49 54  TATUS_CACHE_WRIT
ee10: 45 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77 74  E, &iCur, &iHiwt
ee20: 72 2c 20 31 29 3b 0a 20 20 20 20 72 61 77 5f 70  r, 1);.    raw_p
ee30: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
ee40: 20 22 50 61 67 65 20 63 61 63 68 65 20 77 72 69   "Page cache wri
ee50: 74 65 73 3a 20 20 20 20 20 20 20 20 20 20 20 20  tes:            
ee60: 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 43         %d\n", iC
ee70: 75 72 29 3b 0a 20 20 20 20 69 48 69 77 74 72 20  ur);.    iHiwtr 
ee80: 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20  = iCur = -1;.   
ee90: 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74   sqlite3_db_stat
eea0: 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42  us(db, SQLITE_DB
eeb0: 53 54 41 54 55 53 5f 53 43 48 45 4d 41 5f 55 53  STATUS_SCHEMA_US
eec0: 45 44 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77  ED, &iCur, &iHiw
eed0: 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20  tr, bReset);.   
eee0: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67   raw_printf(pArg
eef0: 2d 3e 6f 75 74 2c 20 22 53 63 68 65 6d 61 20 48  ->out, "Schema H
ef00: 65 61 70 20 55 73 61 67 65 3a 20 20 20 20 20 20  eap Usage:      
ef10: 20 20 20 20 20 20 20 20 20 20 20 20 20 25 64 20               %d 
ef20: 62 79 74 65 73 5c 6e 22 2c 0a 20 20 20 20 20 20  bytes\n",.      
ef30: 20 20 20 20 20 20 69 43 75 72 29 3b 0a 20 20 20        iCur);.   
ef40: 20 69 48 69 77 74 72 20 3d 20 69 43 75 72 20 3d   iHiwtr = iCur =
ef50: 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   -1;.    sqlite3
ef60: 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20 53  _db_status(db, S
ef70: 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 53  QLITE_DBSTATUS_S
ef80: 54 4d 54 5f 55 53 45 44 2c 20 26 69 43 75 72 2c  TMT_USED, &iCur,
ef90: 20 26 69 48 69 77 74 72 2c 20 62 52 65 73 65 74   &iHiwtr, bReset
efa0: 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74  );.    raw_print
efb0: 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 53 74  f(pArg->out, "St
efc0: 61 74 65 6d 65 6e 74 20 48 65 61 70 2f 4c 6f 6f  atement Heap/Loo
efd0: 6b 61 73 69 64 65 20 55 73 61 67 65 3a 20 20 20  kaside Usage:   
efe0: 20 20 20 25 64 20 62 79 74 65 73 5c 6e 22 2c 0a     %d bytes\n",.
eff0: 20 20 20 20 20 20 20 20 20 20 20 20 69 43 75 72              iCur
f000: 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 41  );.  }..  if( pA
f010: 72 67 20 26 26 20 70 41 72 67 2d 3e 6f 75 74 20  rg && pArg->out 
f020: 26 26 20 64 62 20 26 26 20 70 41 72 67 2d 3e 70  && db && pArg->p
f030: 53 74 6d 74 20 29 7b 0a 20 20 20 20 69 43 75 72  Stmt ){.    iCur
f040: 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f   = sqlite3_stmt_
f050: 73 74 61 74 75 73 28 70 41 72 67 2d 3e 70 53 74  status(pArg->pSt
f060: 6d 74 2c 20 53 51 4c 49 54 45 5f 53 54 4d 54 53  mt, SQLITE_STMTS
f070: 54 41 54 55 53 5f 46 55 4c 4c 53 43 41 4e 5f 53  TATUS_FULLSCAN_S
f080: 54 45 50 2c 0a 20 20 20 20 20 20 20 20 20 20 20  TEP,.           
f090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0a0: 20 20 20 20 62 52 65 73 65 74 29 3b 0a 20 20 20      bReset);.   
f0b0: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67   raw_printf(pArg
f0c0: 2d 3e 6f 75 74 2c 20 22 46 75 6c 6c 73 63 61 6e  ->out, "Fullscan
f0d0: 20 53 74 65 70 73 3a 20 20 20 20 20 20 20 20 20   Steps:         
f0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 25 64 5c               %d\
f0f0: 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69  n", iCur);.    i
f100: 43 75 72 20 3d 20 73 71 6c 69 74 65 33 5f 73 74  Cur = sqlite3_st
f110: 6d 74 5f 73 74 61 74 75 73 28 70 41 72 67 2d 3e  mt_status(pArg->
f120: 70 53 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53 54  pStmt, SQLITE_ST
f130: 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 2c 20 62  MTSTATUS_SORT, b
f140: 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f  Reset);.    raw_
f150: 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74  printf(pArg->out
f160: 2c 20 22 53 6f 72 74 20 4f 70 65 72 61 74 69 6f  , "Sort Operatio
f170: 6e 73 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ns:             
f180: 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69          %d\n", i
f190: 43 75 72 29 3b 0a 20 20 20 20 69 43 75 72 20 3d  Cur);.    iCur =
f1a0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74   sqlite3_stmt_st
f1b0: 61 74 75 73 28 70 41 72 67 2d 3e 70 53 74 6d 74  atus(pArg->pStmt
f1c0: 2c 20 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41  , SQLITE_STMTSTA
f1d0: 54 55 53 5f 41 55 54 4f 49 4e 44 45 58 2c 62 52  TUS_AUTOINDEX,bR
f1e0: 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70  eset);.    raw_p
f1f0: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
f200: 20 22 41 75 74 6f 69 6e 64 65 78 20 49 6e 73 65   "Autoindex Inse
f210: 72 74 73 3a 20 20 20 20 20 20 20 20 20 20 20 20  rts:            
f220: 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 43         %d\n", iC
f230: 75 72 29 3b 0a 20 20 20 20 69 43 75 72 20 3d 20  ur);.    iCur = 
f240: 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61  sqlite3_stmt_sta
f250: 74 75 73 28 70 41 72 67 2d 3e 70 53 74 6d 74 2c  tus(pArg->pStmt,
f260: 20 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54   SQLITE_STMTSTAT
f270: 55 53 5f 56 4d 5f 53 54 45 50 2c 20 62 52 65 73  US_VM_STEP, bRes
f280: 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69  et);.    raw_pri
f290: 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22  ntf(pArg->out, "
f2a0: 56 69 72 74 75 61 6c 20 4d 61 63 68 69 6e 65 20  Virtual Machine 
f2b0: 53 74 65 70 73 3a 20 20 20 20 20 20 20 20 20 20  Steps:          
f2c0: 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 43 75 72       %d\n", iCur
f2d0: 29 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 5f  );.  }..#ifdef _
f2e0: 5f 6c 69 6e 75 78 5f 5f 0a 20 20 64 69 73 70 6c  _linux__.  displ
f2f0: 61 79 4c 69 6e 75 78 49 6f 53 74 61 74 73 28 70  ayLinuxIoStats(p
f300: 41 72 67 2d 3e 6f 75 74 29 3b 0a 23 65 6e 64 69  Arg->out);.#endi
f310: 66 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72  f..  /* Do not r
f320: 65 6d 6f 76 65 20 74 68 69 73 20 6d 61 63 68 69  emove this machi
f330: 6e 65 20 72 65 61 64 61 62 6c 65 20 63 6f 6d 6d  ne readable comm
f340: 65 6e 74 3a 20 65 78 74 72 61 2d 73 74 61 74 73  ent: extra-stats
f350: 2d 6f 75 74 70 75 74 2d 68 65 72 65 20 2a 2f 0a  -output-here */.
f360: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
f370: 2f 2a 0a 2a 2a 20 44 69 73 70 6c 61 79 20 73 63  /*.** Display sc
f380: 61 6e 20 73 74 61 74 73 2e 0a 2a 2f 0a 73 74 61  an stats..*/.sta
f390: 74 69 63 20 76 6f 69 64 20 64 69 73 70 6c 61 79  tic void display
f3a0: 5f 73 63 61 6e 73 74 61 74 73 28 0a 20 20 73 71  _scanstats(.  sq
f3b0: 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20  lite3 *db,      
f3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f3d0: 20 44 61 74 61 62 61 73 65 20 74 6f 20 71 75 65   Database to que
f3e0: 72 79 20 2a 2f 0a 20 20 53 68 65 6c 6c 53 74 61  ry */.  ShellSta
f3f0: 74 65 20 2a 70 41 72 67 20 20 20 20 20 20 20 20  te *pArg        
f400: 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
f410: 65 72 20 74 6f 20 53 68 65 6c 6c 53 74 61 74 65  er to ShellState
f420: 20 2a 2f 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53   */.){.#ifndef S
f430: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
f440: 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 55  T_SCANSTATUS.  U
f450: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
f460: 64 62 29 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41  db);.  UNUSED_PA
f470: 52 41 4d 45 54 45 52 28 70 41 72 67 29 3b 0a 23  RAMETER(pArg);.#
f480: 65 6c 73 65 0a 20 20 69 6e 74 20 69 2c 20 6b 2c  else.  int i, k,
f490: 20 6e 2c 20 6d 78 3b 0a 20 20 72 61 77 5f 70 72   n, mx;.  raw_pr
f4a0: 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20  intf(pArg->out, 
f4b0: 22 2d 2d 2d 2d 2d 2d 2d 2d 20 73 63 61 6e 73 74  "-------- scanst
f4c0: 61 74 73 20 2d 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 29  ats --------\n")
f4d0: 3b 0a 20 20 6d 78 20 3d 20 30 3b 0a 20 20 66 6f  ;.  mx = 0;.  fo
f4e0: 72 28 6b 3d 30 3b 20 6b 3c 3d 6d 78 3b 20 6b 2b  r(k=0; k<=mx; k+
f4f0: 2b 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20 72  +){.    double r
f500: 45 73 74 4c 6f 6f 70 20 3d 20 31 2e 30 3b 0a 20  EstLoop = 1.0;. 
f510: 20 20 20 66 6f 72 28 69 3d 6e 3d 30 3b 20 31 3b     for(i=n=0; 1;
f520: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
f530: 69 74 65 33 5f 73 74 6d 74 20 2a 70 20 3d 20 70  ite3_stmt *p = p
f540: 41 72 67 2d 3e 70 53 74 6d 74 3b 0a 20 20 20 20  Arg->pStmt;.    
f550: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
f560: 6e 4c 6f 6f 70 2c 20 6e 56 69 73 69 74 3b 0a 20  nLoop, nVisit;. 
f570: 20 20 20 20 20 64 6f 75 62 6c 65 20 72 45 73 74       double rEst
f580: 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 53 69 64  ;.      int iSid
f590: 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  ;.      const ch
f5a0: 61 72 20 2a 7a 45 78 70 6c 61 69 6e 3b 0a 20 20  ar *zExplain;.  
f5b0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
f5c0: 73 74 6d 74 5f 73 63 61 6e 73 74 61 74 75 73 28  stmt_scanstatus(
f5d0: 70 2c 20 69 2c 20 53 51 4c 49 54 45 5f 53 43 41  p, i, SQLITE_SCA
f5e0: 4e 53 54 41 54 5f 4e 4c 4f 4f 50 2c 20 28 76 6f  NSTAT_NLOOP, (vo
f5f0: 69 64 2a 29 26 6e 4c 6f 6f 70 29 20 29 7b 0a 20  id*)&nLoop) ){. 
f600: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
f610: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
f620: 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61  te3_stmt_scansta
f630: 74 75 73 28 70 2c 20 69 2c 20 53 51 4c 49 54 45  tus(p, i, SQLITE
f640: 5f 53 43 41 4e 53 54 41 54 5f 53 45 4c 45 43 54  _SCANSTAT_SELECT
f650: 49 44 2c 20 28 76 6f 69 64 2a 29 26 69 53 69 64  ID, (void*)&iSid
f660: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 53 69  );.      if( iSi
f670: 64 3e 6d 78 20 29 20 6d 78 20 3d 20 69 53 69 64  d>mx ) mx = iSid
f680: 3b 0a 20 20 20 20 20 20 69 66 28 20 69 53 69 64  ;.      if( iSid
f690: 21 3d 6b 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  !=k ) continue;.
f6a0: 20 20 20 20 20 20 69 66 28 20 6e 3d 3d 30 20 29        if( n==0 )
f6b0: 7b 0a 20 20 20 20 20 20 20 20 72 45 73 74 4c 6f  {.        rEstLo
f6c0: 6f 70 20 3d 20 28 64 6f 75 62 6c 65 29 6e 4c 6f  op = (double)nLo
f6d0: 6f 70 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  op;.        if( 
f6e0: 6b 3e 30 20 29 20 72 61 77 5f 70 72 69 6e 74 66  k>0 ) raw_printf
f6f0: 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 2d 2d 2d  (pArg->out, "---
f700: 2d 2d 2d 2d 2d 20 73 75 62 71 75 65 72 79 20 25  ----- subquery %
f710: 64 20 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 2c 20 6b 29  d -------\n", k)
f720: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
f730: 6e 2b 2b 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  n++;.      sqlit
f740: 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74  e3_stmt_scanstat
f750: 75 73 28 70 2c 20 69 2c 20 53 51 4c 49 54 45 5f  us(p, i, SQLITE_
f760: 53 43 41 4e 53 54 41 54 5f 4e 56 49 53 49 54 2c  SCANSTAT_NVISIT,
f770: 20 28 76 6f 69 64 2a 29 26 6e 56 69 73 69 74 29   (void*)&nVisit)
f780: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
f790: 73 74 6d 74 5f 73 63 61 6e 73 74 61 74 75 73 28  stmt_scanstatus(
f7a0: 70 2c 20 69 2c 20 53 51 4c 49 54 45 5f 53 43 41  p, i, SQLITE_SCA
f7b0: 4e 53 54 41 54 5f 45 53 54 2c 20 28 76 6f 69 64  NSTAT_EST, (void
f7c0: 2a 29 26 72 45 73 74 29 3b 0a 20 20 20 20 20 20  *)&rEst);.      
f7d0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61  sqlite3_stmt_sca
f7e0: 6e 73 74 61 74 75 73 28 70 2c 20 69 2c 20 53 51  nstatus(p, i, SQ
f7f0: 4c 49 54 45 5f 53 43 41 4e 53 54 41 54 5f 45 58  LITE_SCANSTAT_EX
f800: 50 4c 41 49 4e 2c 20 28 76 6f 69 64 2a 29 26 7a  PLAIN, (void*)&z
f810: 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20 20 20 20  Explain);.      
f820: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 41 72 67  utf8_printf(pArg
f830: 2d 3e 6f 75 74 2c 20 22 4c 6f 6f 70 20 25 32 64  ->out, "Loop %2d
f840: 3a 20 25 73 5c 6e 22 2c 20 6e 2c 20 7a 45 78 70  : %s\n", n, zExp
f850: 6c 61 69 6e 29 3b 0a 20 20 20 20 20 20 72 45 73  lain);.      rEs
f860: 74 4c 6f 6f 70 20 2a 3d 20 72 45 73 74 3b 0a 20  tLoop *= rEst;. 
f870: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
f880: 70 41 72 67 2d 3e 6f 75 74 2c 0a 20 20 20 20 20  pArg->out,.     
f890: 20 20 20 20 20 22 20 20 20 20 20 20 20 20 20 6e       "         n
f8a0: 4c 6f 6f 70 3d 25 2d 38 6c 6c 64 20 6e 52 6f 77  Loop=%-8lld nRow
f8b0: 3d 25 2d 38 6c 6c 64 20 65 73 74 52 6f 77 3d 25  =%-8lld estRow=%
f8c0: 2d 38 6c 6c 64 20 65 73 74 52 6f 77 2f 4c 6f 6f  -8lld estRow/Loo
f8d0: 70 3d 25 2d 38 67 5c 6e 22 2c 0a 20 20 20 20 20  p=%-8g\n",.     
f8e0: 20 20 20 20 20 6e 4c 6f 6f 70 2c 20 6e 56 69 73       nLoop, nVis
f8f0: 69 74 2c 20 28 73 71 6c 69 74 65 33 5f 69 6e 74  it, (sqlite3_int
f900: 36 34 29 28 72 45 73 74 4c 6f 6f 70 2b 30 2e 35  64)(rEstLoop+0.5
f910: 29 2c 20 72 45 73 74 0a 20 20 20 20 20 20 29 3b  ), rEst.      );
f920: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 61 77  .    }.  }.  raw
f930: 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
f940: 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  t, "------------
f950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 5c  ---------------\
f960: 6e 22 29 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f  n");.#endif.}../
f970: 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 61  *.** Parameter a
f980: 7a 41 72 72 61 79 20 70 6f 69 6e 74 73 20 74 6f  zArray points to
f990: 20 61 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61 74   a zero-terminat
f9a0: 65 64 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  ed array of stri
f9b0: 6e 67 73 2e 20 7a 53 74 72 0a 2a 2a 20 70 6f 69  ngs. zStr.** poi
f9c0: 6e 74 73 20 74 6f 20 61 20 73 69 6e 67 6c 65 20  nts to a single 
f9d0: 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 73  nul-terminated s
f9e0: 74 72 69 6e 67 2e 20 52 65 74 75 72 6e 20 6e 6f  tring. Return no
f9f0: 6e 2d 7a 65 72 6f 20 69 66 20 7a 53 74 72 0a 2a  n-zero if zStr.*
fa00: 2a 20 69 73 20 65 71 75 61 6c 2c 20 61 63 63 6f  * is equal, acco
fa10: 72 64 69 6e 67 20 74 6f 20 73 74 72 63 6d 70 28  rding to strcmp(
fa20: 29 2c 20 74 6f 20 61 6e 79 20 6f 66 20 74 68 65  ), to any of the
fa30: 20 73 74 72 69 6e 67 73 20 69 6e 20 74 68 65 20   strings in the 
fa40: 61 72 72 61 79 2e 0a 2a 2a 20 4f 74 68 65 72 77  array..** Otherw
fa50: 69 73 65 2c 20 72 65 74 75 72 6e 20 7a 65 72 6f  ise, return zero
fa60: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
fa70: 73 74 72 5f 69 6e 5f 61 72 72 61 79 28 63 6f 6e  str_in_array(con
fa80: 73 74 20 63 68 61 72 20 2a 7a 53 74 72 2c 20 63  st char *zStr, c
fa90: 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 41 72  onst char **azAr
faa0: 72 61 79 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  ray){.  int i;. 
fab0: 20 66 6f 72 28 69 3d 30 3b 20 61 7a 41 72 72 61   for(i=0; azArra
fac0: 79 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  y[i]; i++){.    
fad0: 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 7a 53  if( 0==strcmp(zS
fae0: 74 72 2c 20 61 7a 41 72 72 61 79 5b 69 5d 29 20  tr, azArray[i]) 
faf0: 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a  ) return 1;.  }.
fb00: 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
fb10: 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 65 64  *.** If compiled
fb20: 20 73 74 61 74 65 6d 65 6e 74 20 70 53 71 6c 20   statement pSql 
fb30: 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 6e  appears to be an
fb40: 20 45 58 50 4c 41 49 4e 20 73 74 61 74 65 6d 65   EXPLAIN stateme
fb50: 6e 74 2c 20 61 6c 6c 6f 63 61 74 65 0a 2a 2a 20  nt, allocate.** 
fb60: 61 6e 64 20 70 6f 70 75 6c 61 74 65 20 74 68 65  and populate the
fb70: 20 53 68 65 6c 6c 53 74 61 74 65 2e 61 69 49 6e   ShellState.aiIn
fb80: 64 65 6e 74 5b 5d 20 61 72 72 61 79 20 77 69 74  dent[] array wit
fb90: 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a  h the number of.
fba0: 2a 2a 20 73 70 61 63 65 73 20 65 61 63 68 20 6f  ** spaces each o
fbb0: 70 63 6f 64 65 20 73 68 6f 75 6c 64 20 62 65 20  pcode should be 
fbc0: 69 6e 64 65 6e 74 65 64 20 62 65 66 6f 72 65 20  indented before 
fbd0: 69 74 20 69 73 20 6f 75 74 70 75 74 2e 0a 2a 2a  it is output..**
fbe0: 0a 2a 2a 20 54 68 65 20 69 6e 64 65 6e 74 69 6e  .** The indentin
fbf0: 67 20 72 75 6c 65 73 20 61 72 65 3a 0a 2a 2a 0a  g rules are:.**.
fc00: 2a 2a 20 20 20 20 20 2a 20 46 6f 72 20 65 61 63  **     * For eac
fc10: 68 20 22 4e 65 78 74 22 2c 20 22 50 72 65 76 22  h "Next", "Prev"
fc20: 2c 20 22 56 4e 65 78 74 22 20 6f 72 20 22 56 50  , "VNext" or "VP
fc30: 72 65 76 22 20 69 6e 73 74 72 75 63 74 69 6f 6e  rev" instruction
fc40: 2c 20 69 6e 64 65 6e 74 0a 2a 2a 20 20 20 20 20  , indent.**     
fc50: 20 20 61 6c 6c 20 6f 70 63 6f 64 65 73 20 74 68    all opcodes th
fc60: 61 74 20 6f 63 63 75 72 20 62 65 74 77 65 65 6e  at occur between
fc70: 20 74 68 65 20 70 32 20 6a 75 6d 70 20 64 65 73   the p2 jump des
fc80: 74 69 6e 61 74 69 6f 6e 20 61 6e 64 20 74 68 65  tination and the
fc90: 20 6f 70 63 6f 64 65 0a 2a 2a 20 20 20 20 20 20   opcode.**      
fca0: 20 69 74 73 65 6c 66 20 62 79 20 32 20 73 70 61   itself by 2 spa
fcb0: 63 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 2a  ces..**.**     *
fcc0: 20 46 6f 72 20 65 61 63 68 20 22 47 6f 74 6f 22   For each "Goto"
fcd0: 2c 20 69 66 20 74 68 65 20 6a 75 6d 70 20 64 65  , if the jump de
fce0: 73 74 69 6e 61 74 69 6f 6e 20 69 73 20 65 61 72  stination is ear
fcf0: 6c 69 65 72 20 69 6e 20 74 68 65 20 70 72 6f 67  lier in the prog
fd00: 72 61 6d 0a 2a 2a 20 20 20 20 20 20 20 61 6e 64  ram.**       and
fd10: 20 65 6e 64 73 20 6f 6e 20 6f 6e 65 20 6f 66 3a   ends on one of:
fd20: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 59 69 65  .**          Yie
fd30: 6c 64 20 20 53 65 65 6b 47 74 20 20 53 65 65 6b  ld  SeekGt  Seek
fd40: 4c 74 20 20 52 6f 77 53 65 74 52 65 61 64 20 20  Lt  RowSetRead  
fd50: 52 65 77 69 6e 64 0a 2a 2a 20 20 20 20 20 20 20  Rewind.**       
fd60: 6f 72 20 69 66 20 74 68 65 20 50 31 20 70 61 72  or if the P1 par
fd70: 61 6d 65 74 65 72 20 69 73 20 6f 6e 65 20 69 6e  ameter is one in
fd80: 73 74 65 61 64 20 6f 66 20 7a 65 72 6f 2c 0a 2a  stead of zero,.*
fd90: 2a 20 20 20 20 20 20 20 74 68 65 6e 20 69 6e 64  *       then ind
fda0: 65 6e 74 20 61 6c 6c 20 6f 70 63 6f 64 65 73 20  ent all opcodes 
fdb0: 62 65 74 77 65 65 6e 20 74 68 65 20 65 61 72 6c  between the earl
fdc0: 69 65 72 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ier instruction.
fdd0: 2a 2a 20 20 20 20 20 20 20 61 6e 64 20 22 47 6f  **       and "Go
fde0: 74 6f 22 20 62 79 20 32 20 73 70 61 63 65 73 2e  to" by 2 spaces.
fdf0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
fe00: 65 78 70 6c 61 69 6e 5f 64 61 74 61 5f 70 72 65  explain_data_pre
fe10: 70 61 72 65 28 53 68 65 6c 6c 53 74 61 74 65 20  pare(ShellState 
fe20: 2a 70 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  *p, sqlite3_stmt
fe30: 20 2a 70 53 71 6c 29 7b 0a 20 20 63 6f 6e 73 74   *pSql){.  const
fe40: 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20 20 20   char *zSql;    
fe50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
fe60: 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51  e text of the SQ
fe70: 4c 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20  L statement */. 
fe80: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20   const char *z; 
fe90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fea0: 20 2f 2a 20 55 73 65 64 20 74 6f 20 63 68 65 63   /* Used to chec
feb0: 6b 20 69 66 20 74 68 69 73 20 69 73 20 61 6e 20  k if this is an 
fec0: 45 58 50 4c 41 49 4e 20 2a 2f 0a 20 20 69 6e 74  EXPLAIN */.  int
fed0: 20 2a 61 62 59 69 65 6c 64 20 3d 20 30 3b 20 20   *abYield = 0;  
fee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
fef0: 54 72 75 65 20 69 66 20 6f 70 20 69 73 20 61 6e  True if op is an
ff00: 20 4f 50 5f 59 69 65 6c 64 20 2a 2f 0a 20 20 69   OP_Yield */.  i
ff10: 6e 74 20 6e 41 6c 6c 6f 63 20 3d 20 30 3b 20 20  nt nAlloc = 0;  
ff20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ff30: 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65  * Allocated size
ff40: 20 6f 66 20 70 2d 3e 61 69 49 6e 64 65 6e 74 5b   of p->aiIndent[
ff50: 5d 2c 20 61 62 59 69 65 6c 64 20 2a 2f 0a 20 20  ], abYield */.  
ff60: 69 6e 74 20 69 4f 70 3b 20 20 20 20 20 20 20 20  int iOp;        
ff70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff80: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 6f 70 65 72  /* Index of oper
ff90: 61 74 69 6f 6e 20 69 6e 20 70 2d 3e 61 69 49 6e  ation in p->aiIn
ffa0: 64 65 6e 74 5b 5d 20 2a 2f 0a 0a 20 20 63 6f 6e  dent[] */..  con
ffb0: 73 74 20 63 68 61 72 20 2a 61 7a 4e 65 78 74 5b  st char *azNext[
ffc0: 5d 20 3d 20 7b 20 22 4e 65 78 74 22 2c 20 22 50  ] = { "Next", "P
ffd0: 72 65 76 22 2c 20 22 56 50 72 65 76 22 2c 20 22  rev", "VPrev", "
ffe0: 56 4e 65 78 74 22 2c 20 22 53 6f 72 74 65 72 4e  VNext", "SorterN
fff0: 65 78 74 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ext",.          
10000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10010 20 22 4e 65 78 74 49 66 4f 70 65 6e 22 2c 20 22   "NextIfOpen", "
10020 50 72 65 76 49 66 4f 70 65 6e 22 2c 20 30 20 7d  PrevIfOpen", 0 }
10030 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
10040 61 7a 59 69 65 6c 64 5b 5d 20 3d 20 7b 20 22 59  azYield[] = { "Y
10050 69 65 6c 64 22 2c 20 22 53 65 65 6b 4c 54 22 2c  ield", "SeekLT",
10060 20 22 53 65 65 6b 47 54 22 2c 20 22 52 6f 77 53   "SeekGT", "RowS
10070 65 74 52 65 61 64 22 2c 0a 20 20 20 20 20 20 20  etRead",.       
10080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10090 20 20 20 20 20 22 52 65 77 69 6e 64 22 2c 20 30       "Rewind", 0
100a0 20 7d 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   };.  const char
100b0 20 2a 61 7a 47 6f 74 6f 5b 5d 20 3d 20 7b 20 22   *azGoto[] = { "
100c0 47 6f 74 6f 22 2c 20 30 20 7d 3b 0a 0a 20 20 2f  Goto", 0 };..  /
100d0 2a 20 54 72 79 20 74 6f 20 66 69 67 75 72 65 20  * Try to figure 
100e0 6f 75 74 20 69 66 20 74 68 69 73 20 69 73 20 72  out if this is r
100f0 65 61 6c 6c 79 20 61 6e 20 45 58 50 4c 41 49 4e  eally an EXPLAIN
10100 20 73 74 61 74 65 6d 65 6e 74 2e 20 49 66 20 74   statement. If t
10110 68 69 73 0a 20 20 2a 2a 20 63 61 6e 6e 6f 74 20  his.  ** cannot 
10120 62 65 20 76 65 72 69 66 69 65 64 2c 20 72 65 74  be verified, ret
10130 75 72 6e 20 65 61 72 6c 79 2e 20 20 2a 2f 0a 20  urn early.  */. 
10140 20 69 66 28 20 73 71 6c 69 74 65 33 5f 63 6f 6c   if( sqlite3_col
10150 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 71 6c 29 21  umn_count(pSql)!
10160 3d 38 20 29 7b 0a 20 20 20 20 70 2d 3e 63 4d 6f  =8 ){.    p->cMo
10170 64 65 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20  de = p->mode;.  
10180 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20    return;.  }.  
10190 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 73  zSql = sqlite3_s
101a0 71 6c 28 70 53 71 6c 29 3b 0a 20 20 69 66 28 20  ql(pSql);.  if( 
101b0 7a 53 71 6c 3d 3d 30 20 29 20 72 65 74 75 72 6e  zSql==0 ) return
101c0 3b 0a 20 20 66 6f 72 28 7a 3d 7a 53 71 6c 3b 20  ;.  for(z=zSql; 
101d0 2a 7a 3d 3d 27 20 27 20 7c 7c 20 2a 7a 3d 3d 27  *z==' ' || *z=='
101e0 5c 74 27 20 7c 7c 20 2a 7a 3d 3d 27 5c 6e 27 20  \t' || *z=='\n' 
101f0 7c 7c 20 2a 7a 3d 3d 27 5c 66 27 20 7c 7c 20 2a  || *z=='\f' || *
10200 7a 3d 3d 27 5c 72 27 3b 20 7a 2b 2b 29 3b 0a 20  z=='\r'; z++);. 
10210 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72   if( sqlite3_str
10220 6e 69 63 6d 70 28 7a 2c 20 22 65 78 70 6c 61 69  nicmp(z, "explai
10230 6e 22 2c 20 37 29 20 29 7b 0a 20 20 20 20 70 2d  n", 7) ){.    p-
10240 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64 65  >cMode = p->mode
10250 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20  ;.    return;.  
10260 7d 0a 0a 20 20 66 6f 72 28 69 4f 70 3d 30 3b 20  }..  for(iOp=0; 
10270 53 51 4c 49 54 45 5f 52 4f 57 3d 3d 73 71 6c 69  SQLITE_ROW==sqli
10280 74 65 33 5f 73 74 65 70 28 70 53 71 6c 29 3b 20  te3_step(pSql); 
10290 69 4f 70 2b 2b 29 7b 0a 20 20 20 20 69 6e 74 20  iOp++){.    int 
102a0 69 3b 0a 20 20 20 20 69 6e 74 20 69 41 64 64 72  i;.    int iAddr
102b0 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
102c0 6e 5f 69 6e 74 28 70 53 71 6c 2c 20 30 29 3b 0a  n_int(pSql, 0);.
102d0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
102e0 7a 4f 70 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  zOp = (const cha
102f0 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  r*)sqlite3_colum
10300 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20 31 29 3b  n_text(pSql, 1);
10310 0a 0a 20 20 20 20 2f 2a 20 53 65 74 20 70 32 20  ..    /* Set p2 
10320 74 6f 20 74 68 65 20 50 32 20 66 69 65 6c 64 20  to the P2 field 
10330 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6f  of the current o
10340 70 63 6f 64 65 2e 20 54 68 65 6e 2c 20 61 73 73  pcode. Then, ass
10350 75 6d 69 6e 67 20 74 68 61 74 0a 20 20 20 20 2a  uming that.    *
10360 2a 20 70 32 20 69 73 20 61 6e 20 69 6e 73 74 72  * p2 is an instr
10370 75 63 74 69 6f 6e 20 61 64 64 72 65 73 73 2c 20  uction address, 
10380 73 65 74 20 76 61 72 69 61 62 6c 65 20 70 32 6f  set variable p2o
10390 70 20 74 6f 20 74 68 65 20 69 6e 64 65 78 20 6f  p to the index o
103a0 66 20 74 68 61 74 0a 20 20 20 20 2a 2a 20 69 6e  f that.    ** in
103b0 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65  struction in the
103c0 20 61 69 49 6e 64 65 6e 74 5b 5d 20 61 72 72 61   aiIndent[] arra
103d0 79 2e 20 70 32 20 61 6e 64 20 70 32 6f 70 20 6d  y. p2 and p2op m
103e0 61 79 20 62 65 20 64 69 66 66 65 72 65 6e 74 20  ay be different 
103f0 69 66 0a 20 20 20 20 2a 2a 20 74 68 65 20 63 75  if.    ** the cu
10400 72 72 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  rrent instructio
10410 6e 20 69 73 20 70 61 72 74 20 6f 66 20 61 20 73  n is part of a s
10420 75 62 2d 70 72 6f 67 72 61 6d 20 67 65 6e 65 72  ub-program gener
10430 61 74 65 64 20 62 79 20 61 6e 0a 20 20 20 20 2a  ated by an.    *
10440 2a 20 53 51 4c 20 74 72 69 67 67 65 72 20 6f 72  * SQL trigger or
10450 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 20 20 2a   foreign key.  *
10460 2f 0a 20 20 20 20 69 6e 74 20 70 32 20 3d 20 73  /.    int p2 = s
10470 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
10480 74 28 70 53 71 6c 2c 20 33 29 3b 0a 20 20 20 20  t(pSql, 3);.    
10490 69 6e 74 20 70 32 6f 70 20 3d 20 28 70 32 20 2b  int p2op = (p2 +
104a0 20 28 69 4f 70 2d 69 41 64 64 72 29 29 3b 0a 0a   (iOp-iAddr));..
104b0 20 20 20 20 2f 2a 20 47 72 6f 77 20 74 68 65 20      /* Grow the 
104c0 70 2d 3e 61 69 49 6e 64 65 6e 74 20 61 72 72 61  p->aiIndent arra
104d0 79 20 61 73 20 72 65 71 75 69 72 65 64 20 2a 2f  y as required */
104e0 0a 20 20 20 20 69 66 28 20 69 4f 70 3e 3d 6e 41  .    if( iOp>=nA
104f0 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20 69 66  lloc ){.      if
10500 28 20 69 4f 70 3d 3d 30 20 29 7b 0a 20 20 20 20  ( iOp==0 ){.    
10510 20 20 20 20 2f 2a 20 44 6f 20 66 75 72 74 68 65      /* Do furthe
10520 72 20 76 65 72 66 69 63 61 74 69 6f 6e 20 74 68  r verfication th
10530 61 74 20 74 68 69 73 20 69 73 20 65 78 70 6c 61  at this is expla
10540 69 6e 20 6f 75 74 70 75 74 2e 20 20 41 62 6f 72  in output.  Abor
10550 74 20 69 66 0a 20 20 20 20 20 20 20 20 2a 2a 20  t if.        ** 
10560 69 74 20 69 73 20 6e 6f 74 20 2a 2f 0a 20 20 20  it is not */.   
10570 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
10580 74 20 63 68 61 72 20 2a 65 78 70 6c 61 69 6e 43  t char *explainC
10590 6f 6c 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  ols[] = {.      
105a0 20 20 20 20 20 22 61 64 64 72 22 2c 20 22 6f 70       "addr", "op
105b0 63 6f 64 65 22 2c 20 22 70 31 22 2c 20 22 70 32  code", "p1", "p2
105c0 22 2c 20 22 70 33 22 2c 20 22 70 34 22 2c 20 22  ", "p3", "p4", "
105d0 70 35 22 2c 20 22 63 6f 6d 6d 65 6e 74 22 20 7d  p5", "comment" }
105e0 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6a  ;.        int jj
105f0 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 6a  ;.        for(jj
10600 3d 30 3b 20 6a 6a 3c 41 72 72 61 79 53 69 7a 65  =0; jj<ArraySize
10610 28 65 78 70 6c 61 69 6e 43 6f 6c 73 29 3b 20 6a  (explainCols); j
10620 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
10630 69 66 28 20 73 74 72 63 6d 70 28 73 71 6c 69 74  if( strcmp(sqlit
10640 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 70  e3_column_name(p
10650 53 71 6c 2c 6a 6a 29 2c 65 78 70 6c 61 69 6e 43  Sql,jj),explainC
10660 6f 6c 73 5b 6a 6a 5d 29 21 3d 30 20 29 7b 0a 20  ols[jj])!=0 ){. 
10670 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e 63 4d             p->cM
10680 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a 20  ode = p->mode;. 
10690 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
106a0 65 33 5f 72 65 73 65 74 28 70 53 71 6c 29 3b 0a  e3_reset(pSql);.
106b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
106c0 72 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  rn;.          }.
106d0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
106e0 7d 0a 20 20 20 20 20 20 6e 41 6c 6c 6f 63 20 2b  }.      nAlloc +
106f0 3d 20 31 30 30 3b 0a 20 20 20 20 20 20 70 2d 3e  = 100;.      p->
10700 61 69 49 6e 64 65 6e 74 20 3d 20 28 69 6e 74 2a  aiIndent = (int*
10710 29 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63  )sqlite3_realloc
10720 36 34 28 70 2d 3e 61 69 49 6e 64 65 6e 74 2c 20  64(p->aiIndent, 
10730 6e 41 6c 6c 6f 63 2a 73 69 7a 65 6f 66 28 69 6e  nAlloc*sizeof(in
10740 74 29 29 3b 0a 20 20 20 20 20 20 61 62 59 69 65  t));.      abYie
10750 6c 64 20 3d 20 28 69 6e 74 2a 29 73 71 6c 69 74  ld = (int*)sqlit
10760 65 33 5f 72 65 61 6c 6c 6f 63 36 34 28 61 62 59  e3_realloc64(abY
10770 69 65 6c 64 2c 20 6e 41 6c 6c 6f 63 2a 73 69 7a  ield, nAlloc*siz
10780 65 6f 66 28 69 6e 74 29 29 3b 0a 20 20 20 20 7d  eof(int));.    }
10790 0a 20 20 20 20 61 62 59 69 65 6c 64 5b 69 4f 70  .    abYield[iOp
107a0 5d 20 3d 20 73 74 72 5f 69 6e 5f 61 72 72 61 79  ] = str_in_array
107b0 28 7a 4f 70 2c 20 61 7a 59 69 65 6c 64 29 3b 0a  (zOp, azYield);.
107c0 20 20 20 20 70 2d 3e 61 69 49 6e 64 65 6e 74 5b      p->aiIndent[
107d0 69 4f 70 5d 20 3d 20 30 3b 0a 20 20 20 20 70 2d  iOp] = 0;.    p-
107e0 3e 6e 49 6e 64 65 6e 74 20 3d 20 69 4f 70 2b 31  >nIndent = iOp+1
107f0 3b 0a 0a 20 20 20 20 69 66 28 20 73 74 72 5f 69  ;..    if( str_i
10800 6e 5f 61 72 72 61 79 28 7a 4f 70 2c 20 61 7a 4e  n_array(zOp, azN
10810 65 78 74 29 20 29 7b 0a 20 20 20 20 20 20 66 6f  ext) ){.      fo
10820 72 28 69 3d 70 32 6f 70 3b 20 69 3c 69 4f 70 3b  r(i=p2op; i<iOp;
10830 20 69 2b 2b 29 20 70 2d 3e 61 69 49 6e 64 65 6e   i++) p->aiInden
10840 74 5b 69 5d 20 2b 3d 20 32 3b 0a 20 20 20 20 7d  t[i] += 2;.    }
10850 0a 20 20 20 20 69 66 28 20 73 74 72 5f 69 6e 5f  .    if( str_in_
10860 61 72 72 61 79 28 7a 4f 70 2c 20 61 7a 47 6f 74  array(zOp, azGot
10870 6f 29 20 26 26 20 70 32 6f 70 3c 70 2d 3e 6e 49  o) && p2op<p->nI
10880 6e 64 65 6e 74 0a 20 20 20 20 20 26 26 20 28 61  ndent.     && (a
10890 62 59 69 65 6c 64 5b 70 32 6f 70 5d 20 7c 7c 20  bYield[p2op] || 
108a0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
108b0 6e 74 28 70 53 71 6c 2c 20 32 29 29 0a 20 20 20  nt(pSql, 2)).   
108c0 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d   ){.      for(i=
108d0 70 32 6f 70 3b 20 69 3c 69 4f 70 3b 20 69 2b 2b  p2op; i<iOp; i++
108e0 29 20 70 2d 3e 61 69 49 6e 64 65 6e 74 5b 69 5d  ) p->aiIndent[i]
108f0 20 2b 3d 20 32 3b 0a 20 20 20 20 7d 0a 20 20 7d   += 2;.    }.  }
10900 0a 0a 20 20 70 2d 3e 69 49 6e 64 65 6e 74 20 3d  ..  p->iIndent =
10910 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72   0;.  sqlite3_fr
10920 65 65 28 61 62 59 69 65 6c 64 29 3b 0a 20 20 73  ee(abYield);.  s
10930 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70 53 71  qlite3_reset(pSq
10940 6c 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46 72 65  l);.}../*.** Fre
10950 65 20 74 68 65 20 61 72 72 61 79 20 61 6c 6c 6f  e the array allo
10960 63 61 74 65 64 20 62 79 20 65 78 70 6c 61 69 6e  cated by explain
10970 5f 64 61 74 61 5f 70 72 65 70 61 72 65 28 29 2e  _data_prepare().
10980 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
10990 65 78 70 6c 61 69 6e 5f 64 61 74 61 5f 64 65 6c  explain_data_del
109a0 65 74 65 28 53 68 65 6c 6c 53 74 61 74 65 20 2a  ete(ShellState *
109b0 70 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  p){.  sqlite3_fr
109c0 65 65 28 70 2d 3e 61 69 49 6e 64 65 6e 74 29 3b  ee(p->aiIndent);
109d0 0a 20 20 70 2d 3e 61 69 49 6e 64 65 6e 74 20 3d  .  p->aiIndent =
109e0 20 30 3b 0a 20 20 70 2d 3e 6e 49 6e 64 65 6e 74   0;.  p->nIndent
109f0 20 3d 20 30 3b 0a 20 20 70 2d 3e 69 49 6e 64 65   = 0;.  p->iInde
10a00 6e 74 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  nt = 0;.}../*.**
10a10 20 44 69 73 61 62 6c 65 20 61 6e 64 20 72 65 73   Disable and res
10a20 74 6f 72 65 20 2e 77 68 65 72 65 74 72 61 63 65  tore .wheretrace
10a30 20 61 6e 64 20 2e 73 65 6c 65 63 74 74 72 61 63   and .selecttrac
10a40 65 20 73 65 74 74 69 6e 67 73 2e 0a 2a 2f 0a 23  e settings..*/.#
10a50 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
10a60 45 5f 44 45 42 55 47 29 20 26 26 20 64 65 66 69  E_DEBUG) && defi
10a70 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
10a80 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a 65  E_SELECTTRACE).e
10a90 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
10aa0 33 53 65 6c 65 63 74 54 72 61 63 65 3b 0a 73 74  3SelectTrace;.st
10ab0 61 74 69 63 20 69 6e 74 20 73 61 76 65 64 53 65  atic int savedSe
10ac0 6c 65 63 74 54 72 61 63 65 3b 0a 23 65 6e 64 69  lectTrace;.#endi
10ad0 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
10ae0 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64  LITE_DEBUG) && d
10af0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
10b00 41 42 4c 45 5f 57 48 45 52 45 54 52 41 43 45 29  ABLE_WHERETRACE)
10b10 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69  .extern int sqli
10b20 74 65 33 57 68 65 72 65 54 72 61 63 65 3b 0a 73  te3WhereTrace;.s
10b30 74 61 74 69 63 20 69 6e 74 20 73 61 76 65 64 57  tatic int savedW
10b40 68 65 72 65 54 72 61 63 65 3b 0a 23 65 6e 64 69  hereTrace;.#endi
10b50 66 0a 73 74 61 74 69 63 20 76 6f 69 64 20 64 69  f.static void di
10b60 73 61 62 6c 65 5f 64 65 62 75 67 5f 74 72 61 63  sable_debug_trac
10b70 65 5f 6d 6f 64 65 73 28 76 6f 69 64 29 7b 0a 23  e_modes(void){.#
10b80 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
10b90 45 5f 44 45 42 55 47 29 20 26 26 20 64 65 66 69  E_DEBUG) && defi
10ba0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
10bb0 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a 20  E_SELECTTRACE). 
10bc0 20 73 61 76 65 64 53 65 6c 65 63 74 54 72 61 63   savedSelectTrac
10bd0 65 20 3d 20 73 71 6c 69 74 65 33 53 65 6c 65 63  e = sqlite3Selec
10be0 74 54 72 61 63 65 3b 0a 20 20 73 71 6c 69 74 65  tTrace;.  sqlite
10bf0 33 53 65 6c 65 63 74 54 72 61 63 65 20 3d 20 30  3SelectTrace = 0
10c00 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
10c10 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
10c20 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
10c30 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 57 48 45 52  LITE_ENABLE_WHER
10c40 45 54 52 41 43 45 29 0a 20 20 73 61 76 65 64 57  ETRACE).  savedW
10c50 68 65 72 65 54 72 61 63 65 20 3d 20 73 71 6c 69  hereTrace = sqli
10c60 74 65 33 57 68 65 72 65 54 72 61 63 65 3b 0a 20  te3WhereTrace;. 
10c70 20 73 71 6c 69 74 65 33 57 68 65 72 65 54 72 61   sqlite3WhereTra
10c80 63 65 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 7d  ce = 0;.#endif.}
10c90 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 73  .static void res
10ca0 74 6f 72 65 5f 64 65 62 75 67 5f 74 72 61 63 65  tore_debug_trace
10cb0 5f 6d 6f 64 65 73 28 76 6f 69 64 29 7b 0a 23 69  _modes(void){.#i
10cc0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
10cd0 5f 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e  _DEBUG) && defin
10ce0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
10cf0 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a 20 20  _SELECTTRACE).  
10d00 73 71 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61  sqlite3SelectTra
10d10 63 65 20 3d 20 73 61 76 65 64 53 65 6c 65 63 74  ce = savedSelect
10d20 54 72 61 63 65 3b 0a 23 65 6e 64 69 66 0a 23 69  Trace;.#endif.#i
10d30 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
10d40 5f 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e  _DEBUG) && defin
10d50 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
10d60 5f 57 48 45 52 45 54 52 41 43 45 29 0a 20 20 73  _WHERETRACE).  s
10d70 71 6c 69 74 65 33 57 68 65 72 65 54 72 61 63 65  qlite3WhereTrace
10d80 20 3d 20 73 61 76 65 64 57 68 65 72 65 54 72 61   = savedWhereTra
10d90 63 65 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a  ce;.#endif.}../*
10da0 0a 2a 2a 20 52 75 6e 20 61 20 70 72 65 70 61 72  .** Run a prepar
10db0 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2f 0a  ed statement.*/.
10dc0 73 74 61 74 69 63 20 76 6f 69 64 20 65 78 65 63  static void exec
10dd0 5f 70 72 65 70 61 72 65 64 5f 73 74 6d 74 28 0a  _prepared_stmt(.
10de0 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 41    ShellState *pA
10df0 72 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  rg,             
10e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e10 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
10e20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 2f 0a 20   ShellState */. 
10e30 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
10e40 53 74 6d 74 2c 20 20 20 20 20 20 20 20 20 20 20  Stmt,           
10e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e60 20 20 2f 2a 20 53 74 61 74 6d 65 6e 74 20 74 6f    /* Statment to
10e70 20 72 75 6e 20 2a 2f 0a 20 20 69 6e 74 20 28 2a   run */.  int (*
10e80 78 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  xCallback)(void*
10e90 2c 69 6e 74 2c 63 68 61 72 2a 2a 2c 63 68 61 72  ,int,char**,char
10ea0 2a 2a 2c 69 6e 74 2a 29 20 20 20 2f 2a 20 43 61  **,int*)   /* Ca
10eb0 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20  llback function 
10ec0 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  */.){.  int rc;.
10ed0 0a 20 20 2f 2a 20 70 65 72 66 6f 72 6d 20 74 68  .  /* perform th
10ee0 65 20 66 69 72 73 74 20 73 74 65 70 2e 20 20 74  e first step.  t
10ef0 68 69 73 20 77 69 6c 6c 20 74 65 6c 6c 20 75 73  his will tell us
10f00 20 69 66 20 77 65 0a 20 20 2a 2a 20 68 61 76 65   if we.  ** have
10f10 20 61 20 72 65 73 75 6c 74 20 73 65 74 20 6f 72   a result set or
10f20 20 6e 6f 74 20 61 6e 64 20 68 6f 77 20 77 69 64   not and how wid
10f30 65 20 69 74 20 69 73 2e 0a 20 20 2a 2f 0a 20 20  e it is..  */.  
10f40 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65  rc = sqlite3_ste
10f50 70 28 70 53 74 6d 74 29 3b 0a 20 20 2f 2a 20 69  p(pStmt);.  /* i
10f60 66 20 77 65 20 68 61 76 65 20 61 20 72 65 73 75  f we have a resu
10f70 6c 74 20 73 65 74 2e 2e 2e 20 2a 2f 0a 20 20 69  lt set... */.  i
10f80 66 28 20 53 51 4c 49 54 45 5f 52 4f 57 20 3d 3d  f( SQLITE_ROW ==
10f90 20 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 69 66   rc ){.    /* if
10fa0 20 77 65 20 68 61 76 65 20 61 20 63 61 6c 6c 62   we have a callb
10fb0 61 63 6b 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66  ack... */.    if
10fc0 28 20 78 43 61 6c 6c 62 61 63 6b 20 29 7b 0a 20  ( xCallback ){. 
10fd0 20 20 20 20 20 2f 2a 20 61 6c 6c 6f 63 61 74 65       /* allocate
10fe0 20 73 70 61 63 65 20 66 6f 72 20 63 6f 6c 20 6e   space for col n
10ff0 61 6d 65 20 70 74 72 2c 20 76 61 6c 75 65 20 70  ame ptr, value p
11000 74 72 2c 20 61 6e 64 20 74 79 70 65 20 2a 2f 0a  tr, and type */.
11010 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 6c 20 3d        int nCol =
11020 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
11030 63 6f 75 6e 74 28 70 53 74 6d 74 29 3b 0a 20 20  count(pStmt);.  
11040 20 20 20 20 76 6f 69 64 20 2a 70 44 61 74 61 20      void *pData 
11050 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  = sqlite3_malloc
11060 36 34 28 33 2a 6e 43 6f 6c 2a 73 69 7a 65 6f 66  64(3*nCol*sizeof
11070 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 20 2b 20  (const char*) + 
11080 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 21 70  1);.      if( !p
11090 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20 20 20  Data ){.        
110a0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
110b0 4d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  M;.      }else{.
110c0 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 2a 61          char **a
110d0 7a 43 6f 6c 73 20 3d 20 28 63 68 61 72 20 2a 2a  zCols = (char **
110e0 29 70 44 61 74 61 3b 20 20 20 20 20 20 2f 2a 20  )pData;      /* 
110f0 4e 61 6d 65 73 20 6f 66 20 72 65 73 75 6c 74 20  Names of result 
11100 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 20 20 20  columns */.     
11110 20 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 6c 73     char **azVals
11120 20 3d 20 26 61 7a 43 6f 6c 73 5b 6e 43 6f 6c 5d   = &azCols[nCol]
11130 3b 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c  ;       /* Resul
11140 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e  ts */.        in
11150 74 20 2a 61 69 54 79 70 65 73 20 3d 20 28 69 6e  t *aiTypes = (in
11160 74 20 2a 29 26 61 7a 56 61 6c 73 5b 6e 43 6f 6c  t *)&azVals[nCol
11170 5d 3b 20 2f 2a 20 52 65 73 75 6c 74 20 74 79 70  ]; /* Result typ
11180 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e  es */.        in
11190 74 20 69 2c 20 78 3b 0a 20 20 20 20 20 20 20 20  t i, x;.        
111a0 61 73 73 65 72 74 28 73 69 7a 65 6f 66 28 69 6e  assert(sizeof(in
111b0 74 29 20 3c 3d 20 73 69 7a 65 6f 66 28 63 68 61  t) <= sizeof(cha
111c0 72 20 2a 29 29 3b 0a 20 20 20 20 20 20 20 20 2f  r *));.        /
111d0 2a 20 73 61 76 65 20 6f 66 66 20 70 74 72 73 20  * save off ptrs 
111e0 74 6f 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  to column names 
111f0 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69  */.        for(i
11200 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b 29  =0; i<nCol; i++)
11210 7b 0a 20 20 20 20 20 20 20 20 20 20 61 7a 43 6f  {.          azCo
11220 6c 73 5b 69 5d 20 3d 20 28 63 68 61 72 20 2a 29  ls[i] = (char *)
11230 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
11240 61 6d 65 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20  ame(pStmt, i);. 
11250 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
11260 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 20 20 2f   do{.          /
11270 2a 20 65 78 74 72 61 63 74 20 74 68 65 20 64 61  * extract the da
11280 74 61 20 61 6e 64 20 64 61 74 61 20 74 79 70 65  ta and data type
11290 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 66  s */.          f
112a0 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20  or(i=0; i<nCol; 
112b0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
112c0 20 20 61 69 54 79 70 65 73 5b 69 5d 20 3d 20 78    aiTypes[i] = x
112d0 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
112e0 6e 5f 74 79 70 65 28 70 53 74 6d 74 2c 20 69 29  n_type(pStmt, i)
112f0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ;.            if
11300 28 20 78 3d 3d 53 51 4c 49 54 45 5f 42 4c 4f 42  ( x==SQLITE_BLOB
11310 20 26 26 20 70 41 72 67 20 26 26 20 70 41 72 67   && pArg && pArg
11320 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f 44 45 5f 49 6e  ->cMode==MODE_In
11330 73 65 72 74 20 29 7b 0a 20 20 20 20 20 20 20 20  sert ){.        
11340 20 20 20 20 20 20 61 7a 56 61 6c 73 5b 69 5d 20        azVals[i] 
11350 3d 20 22 22 3b 0a 20 20 20 20 20 20 20 20 20 20  = "";.          
11360 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
11370 20 20 20 20 20 20 20 61 7a 56 61 6c 73 5b 69 5d         azVals[i]
11380 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65   = (char*)sqlite
11390 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53  3_column_text(pS
113a0 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20  tmt, i);.       
113b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
113c0 20 20 20 69 66 28 20 21 61 7a 56 61 6c 73 5b 69     if( !azVals[i
113d0 5d 20 26 26 20 28 61 69 54 79 70 65 73 5b 69 5d  ] && (aiTypes[i]
113e0 21 3d 53 51 4c 49 54 45 5f 4e 55 4c 4c 29 20 29  !=SQLITE_NULL) )
113f0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
11400 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
11410 4d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  M;.             
11420 20 62 72 65 61 6b 3b 20 2f 2a 20 66 72 6f 6d 20   break; /* from 
11430 66 6f 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  for */.         
11440 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d     }.          }
11450 20 2f 2a 20 65 6e 64 20 66 6f 72 20 2a 2f 0a 0a   /* end for */..
11460 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 66 20            /* if 
11470 64 61 74 61 20 61 6e 64 20 74 79 70 65 73 20 65  data and types e
11480 78 74 72 61 63 74 65 64 20 73 75 63 63 65 73 73  xtracted success
11490 66 75 6c 6c 79 2e 2e 2e 20 2a 2f 0a 20 20 20 20  fully... */.    
114a0 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54 45        if( SQLITE
114b0 5f 52 4f 57 20 3d 3d 20 72 63 20 29 7b 0a 20 20  _ROW == rc ){.  
114c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 61 6c            /* cal
114d0 6c 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 63  l the supplied c
114e0 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68 65  allback with the
114f0 20 72 65 73 75 6c 74 20 72 6f 77 20 64 61 74 61   result row data
11500 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
11510 69 66 28 20 78 43 61 6c 6c 62 61 63 6b 28 70 41  if( xCallback(pA
11520 72 67 2c 20 6e 43 6f 6c 2c 20 61 7a 56 61 6c 73  rg, nCol, azVals
11530 2c 20 61 7a 43 6f 6c 73 2c 20 61 69 54 79 70 65  , azCols, aiType
11540 73 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  s) ){.          
11550 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
11560 41 42 4f 52 54 3b 0a 20 20 20 20 20 20 20 20 20  ABORT;.         
11570 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
11580 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
11590 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29  ite3_step(pStmt)
115a0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
115b0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
115c0 20 20 20 20 7d 20 77 68 69 6c 65 28 20 53 51 4c      } while( SQL
115d0 49 54 45 5f 52 4f 57 20 3d 3d 20 72 63 20 29 3b  ITE_ROW == rc );
115e0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
115f0 5f 66 72 65 65 28 70 44 61 74 61 29 3b 0a 20 20  _free(pData);.  
11600 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
11610 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  .      do{.     
11620 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
11630 73 74 65 70 28 70 53 74 6d 74 29 3b 0a 20 20 20  step(pStmt);.   
11640 20 20 20 7d 20 77 68 69 6c 65 28 20 72 63 20 3d     } while( rc =
11650 3d 20 53 51 4c 49 54 45 5f 52 4f 57 20 29 3b 0a  = SQLITE_ROW );.
11660 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a      }.  }.}../*.
11670 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** This function
11680 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 70 72   is called to pr
11690 6f 63 65 73 73 20 53 51 4c 20 69 66 20 74 68 65  ocess SQL if the
116a0 20 70 72 65 76 69 6f 75 73 20 73 68 65 6c 6c 20   previous shell 
116b0 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 77 61 73 20 22  command.** was "
116c0 2e 65 78 70 65 72 74 22 2e 20 49 74 20 70 61 73  .expert". It pas
116d0 73 65 73 20 74 68 65 20 53 51 4c 20 69 6e 20 74  ses the SQL in t
116e0 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65  he second argume
116f0 6e 74 20 64 69 72 65 63 74 6c 79 20 74 6f 0a 2a  nt directly to.*
11700 2a 20 74 68 65 20 73 71 6c 69 74 65 33 65 78 70  * the sqlite3exp
11710 65 72 74 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a  ert object..**.*
11720 2a 20 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c  * If successful,
11730 20 53 51 4c 49 54 45 5f 4f 4b 20 69 73 20 72 65   SQLITE_OK is re
11740 74 75 72 6e 65 64 2e 20 4f 74 68 65 72 77 69 73  turned. Otherwis
11750 65 2c 20 61 6e 20 53 51 4c 69 74 65 20 65 72 72  e, an SQLite err
11760 6f 72 0a 2a 2a 20 63 6f 64 65 2e 20 49 6e 20 74  or.** code. In t
11770 68 69 73 20 63 61 73 65 2c 20 28 2a 70 7a 45 72  his case, (*pzEr
11780 72 29 20 6d 61 79 20 62 65 20 73 65 74 20 74 6f  r) may be set to
11790 20 70 6f 69 6e 74 20 74 6f 20 61 20 62 75 66 66   point to a buff
117a0 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a  er containing.**
117b0 20 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67   an English lang
117c0 75 61 67 65 20 65 72 72 6f 72 20 6d 65 73 73 61  uage error messa
117d0 67 65 2e 20 49 74 20 69 73 20 74 68 65 20 72 65  ge. It is the re
117e0 73 70 6f 6e 73 69 62 69 6c 69 74 79 20 6f 66 20  sponsibility of 
117f0 74 68 65 0a 2a 2a 20 63 61 6c 6c 65 72 20 74 6f  the.** caller to
11800 20 65 76 65 6e 74 75 61 6c 6c 79 20 66 72 65 65   eventually free
11810 20 74 68 69 73 20 62 75 66 66 65 72 20 75 73 69   this buffer usi
11820 6e 67 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  ng sqlite3_free(
11830 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  )..*/.static int
11840 20 65 78 70 65 72 74 48 61 6e 64 6c 65 53 51 4c   expertHandleSQL
11850 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a  (.  ShellState *
11860 70 53 74 61 74 65 2c 20 0a 20 20 63 6f 6e 73 74  pState, .  const
11870 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20 0a 20 20   char *zSql, .  
11880 63 68 61 72 20 2a 2a 70 7a 45 72 72 0a 29 7b 0a  char **pzErr.){.
11890 20 20 61 73 73 65 72 74 28 20 70 53 74 61 74 65    assert( pState
118a0 2d 3e 65 78 70 65 72 74 2e 70 45 78 70 65 72 74  ->expert.pExpert
118b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 7a   );.  assert( pz
118c0 45 72 72 3d 3d 30 20 7c 7c 20 2a 70 7a 45 72 72  Err==0 || *pzErr
118d0 3d 3d 30 20 29 3b 0a 20 20 72 65 74 75 72 6e 20  ==0 );.  return 
118e0 73 71 6c 69 74 65 33 5f 65 78 70 65 72 74 5f 73  sqlite3_expert_s
118f0 71 6c 28 70 53 74 61 74 65 2d 3e 65 78 70 65 72  ql(pState->exper
11900 74 2e 70 45 78 70 65 72 74 2c 20 7a 53 71 6c 2c  t.pExpert, zSql,
11910 20 70 7a 45 72 72 29 3b 0a 7d 0a 0a 2f 2a 0a 2a   pzErr);.}../*.*
11920 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
11930 69 73 20 63 61 6c 6c 65 64 20 65 69 74 68 65 72  is called either
11940 20 74 6f 20 73 69 6c 65 6e 74 6c 79 20 63 6c 65   to silently cle
11950 61 6e 20 75 70 20 74 68 65 20 6f 62 6a 65 63 74  an up the object
11960 0a 2a 2a 20 63 72 65 61 74 65 64 20 62 79 20 74  .** created by t
11970 68 65 20 22 2e 65 78 70 65 72 74 22 20 63 6f 6d  he ".expert" com
11980 6d 61 6e 64 20 28 69 66 20 62 43 61 6e 63 65 6c  mand (if bCancel
11990 3d 3d 31 29 2c 20 6f 72 20 74 6f 20 67 65 6e 65  ==1), or to gene
119a0 72 61 74 65 20 61 20 0a 2a 2a 20 72 65 70 6f 72  rate a .** repor
119b0 74 20 66 72 6f 6d 20 69 74 20 61 6e 64 20 74 68  t from it and th
119c0 65 6e 20 63 6c 65 61 6e 20 69 74 20 75 70 20 28  en clean it up (
119d0 69 66 20 62 43 61 6e 63 65 6c 3d 3d 30 29 2e 0a  if bCancel==0)..
119e0 2a 2a 0a 2a 2a 20 49 66 20 73 75 63 63 65 73 73  **.** If success
119f0 66 75 6c 2c 20 53 51 4c 49 54 45 5f 4f 4b 20 69  ful, SQLITE_OK i
11a00 73 20 72 65 74 75 72 6e 65 64 2e 20 4f 74 68 65  s returned. Othe
11a10 72 77 69 73 65 2c 20 61 6e 20 53 51 4c 69 74 65  rwise, an SQLite
11a20 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 2e 20   error.** code. 
11a30 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 28 2a  In this case, (*
11a40 70 7a 45 72 72 29 20 6d 61 79 20 62 65 20 73 65  pzErr) may be se
11a50 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 61 20  t to point to a 
11a60 62 75 66 66 65 72 20 63 6f 6e 74 61 69 6e 69 6e  buffer containin
11a70 67 0a 2a 2a 20 61 6e 20 45 6e 67 6c 69 73 68 20  g.** an English 
11a80 6c 61 6e 67 75 61 67 65 20 65 72 72 6f 72 20 6d  language error m
11a90 65 73 73 61 67 65 2e 20 49 74 20 69 73 20 74 68  essage. It is th
11aa0 65 20 72 65 73 70 6f 6e 73 69 62 69 6c 69 74 79  e responsibility
11ab0 20 6f 66 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 65   of the.** calle
11ac0 72 20 74 6f 20 65 76 65 6e 74 75 61 6c 6c 79 20  r to eventually 
11ad0 66 72 65 65 20 74 68 69 73 20 62 75 66 66 65 72  free this buffer
11ae0 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 66   using sqlite3_f
11af0 72 65 65 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63  ree()..*/.static
11b00 20 69 6e 74 20 65 78 70 65 72 74 46 69 6e 69 73   int expertFinis
11b10 68 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20  h(.  ShellState 
11b20 2a 70 53 74 61 74 65 2c 0a 20 20 69 6e 74 20 62  *pState,.  int b
11b30 43 61 6e 63 65 6c 2c 0a 20 20 63 68 61 72 20 2a  Cancel,.  char *
11b40 2a 70 7a 45 72 72 0a 29 7b 0a 20 20 69 6e 74 20  *pzErr.){.  int 
11b50 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
11b60 20 20 73 71 6c 69 74 65 33 65 78 70 65 72 74 20    sqlite3expert 
11b70 2a 70 20 3d 20 70 53 74 61 74 65 2d 3e 65 78 70  *p = pState->exp
11b80 65 72 74 2e 70 45 78 70 65 72 74 3b 0a 20 20 61  ert.pExpert;.  a
11b90 73 73 65 72 74 28 20 70 20 29 3b 0a 20 20 61 73  ssert( p );.  as
11ba0 73 65 72 74 28 20 62 43 61 6e 63 65 6c 20 7c 7c  sert( bCancel ||
11bb0 20 70 7a 45 72 72 3d 3d 30 20 7c 7c 20 2a 70 7a   pzErr==0 || *pz
11bc0 45 72 72 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  Err==0 );.  if( 
11bd0 62 43 61 6e 63 65 6c 3d 3d 30 20 29 7b 0a 20 20  bCancel==0 ){.  
11be0 20 20 46 49 4c 45 20 2a 6f 75 74 20 3d 20 70 53    FILE *out = pS
11bf0 74 61 74 65 2d 3e 6f 75 74 3b 0a 20 20 20 20 69  tate->out;.    i
11c00 6e 74 20 62 56 65 72 62 6f 73 65 20 3d 20 70 53  nt bVerbose = pS
11c10 74 61 74 65 2d 3e 65 78 70 65 72 74 2e 62 56 65  tate->expert.bVe
11c20 72 62 6f 73 65 3b 0a 0a 20 20 20 20 72 63 20 3d  rbose;..    rc =
11c30 20 73 71 6c 69 74 65 33 5f 65 78 70 65 72 74 5f   sqlite3_expert_
11c40 61 6e 61 6c 79 7a 65 28 70 2c 20 70 7a 45 72 72  analyze(p, pzErr
11c50 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
11c60 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
11c70 20 20 69 6e 74 20 6e 51 75 65 72 79 20 3d 20 73    int nQuery = s
11c80 71 6c 69 74 65 33 5f 65 78 70 65 72 74 5f 63 6f  qlite3_expert_co
11c90 75 6e 74 28 70 29 3b 0a 20 20 20 20 20 20 69 6e  unt(p);.      in
11ca0 74 20 69 3b 0a 0a 20 20 20 20 20 20 69 66 28 20  t i;..      if( 
11cb0 62 56 65 72 62 6f 73 65 20 29 7b 0a 20 20 20 20  bVerbose ){.    
11cc0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
11cd0 7a 43 61 6e 64 20 3d 20 73 71 6c 69 74 65 33 5f  zCand = sqlite3_
11ce0 65 78 70 65 72 74 5f 72 65 70 6f 72 74 28 70 2c  expert_report(p,
11cf0 30 2c 45 58 50 45 52 54 5f 52 45 50 4f 52 54 5f  0,EXPERT_REPORT_
11d00 43 41 4e 44 49 44 41 54 45 53 29 3b 0a 20 20 20  CANDIDATES);.   
11d10 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
11d20 6f 75 74 2c 20 22 2d 2d 20 43 61 6e 64 69 64 61  out, "-- Candida
11d30 74 65 73 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  tes ------------
11d40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11d50 2d 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 72  -\n");.        r
11d60 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
11d70 25 73 5c 6e 22 2c 20 7a 43 61 6e 64 29 3b 0a 20  %s\n", zCand);. 
11d80 20 20 20 20 20 7d 0a 20 20 20 20 20 20 66 6f 72       }.      for
11d90 28 69 3d 30 3b 20 69 3c 6e 51 75 65 72 79 3b 20  (i=0; i<nQuery; 
11da0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 6f  i++){.        co
11db0 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d  nst char *zSql =
11dc0 20 73 71 6c 69 74 65 33 5f 65 78 70 65 72 74 5f   sqlite3_expert_
11dd0 72 65 70 6f 72 74 28 70 2c 20 69 2c 20 45 58 50  report(p, i, EXP
11de0 45 52 54 5f 52 45 50 4f 52 54 5f 53 51 4c 29 3b  ERT_REPORT_SQL);
11df0 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63  .        const c
11e00 68 61 72 20 2a 7a 49 64 78 20 3d 20 73 71 6c 69  har *zIdx = sqli
11e10 74 65 33 5f 65 78 70 65 72 74 5f 72 65 70 6f 72  te3_expert_repor
11e20 74 28 70 2c 20 69 2c 20 45 58 50 45 52 54 5f 52  t(p, i, EXPERT_R
11e30 45 50 4f 52 54 5f 49 4e 44 45 58 45 53 29 3b 0a  EPORT_INDEXES);.
11e40 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
11e50 61 72 20 2a 7a 45 51 50 20 3d 20 73 71 6c 69 74  ar *zEQP = sqlit
11e60 65 33 5f 65 78 70 65 72 74 5f 72 65 70 6f 72 74  e3_expert_report
11e70 28 70 2c 20 69 2c 20 45 58 50 45 52 54 5f 52 45  (p, i, EXPERT_RE
11e80 50 4f 52 54 5f 50 4c 41 4e 29 3b 0a 20 20 20 20  PORT_PLAN);.    
11e90 20 20 20 20 69 66 28 20 7a 49 64 78 3d 3d 30 20      if( zIdx==0 
11ea0 29 20 7a 49 64 78 20 3d 20 22 28 6e 6f 20 6e 65  ) zIdx = "(no ne
11eb0 77 20 69 6e 64 65 78 65 73 29 5c 6e 22 3b 0a 20  w indexes)\n";. 
11ec0 20 20 20 20 20 20 20 69 66 28 20 62 56 65 72 62         if( bVerb
11ed0 6f 73 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ose ){.         
11ee0 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c   raw_printf(out,
11ef0 20 22 2d 2d 20 51 75 65 72 79 20 25 64 20 2d 2d   "-- Query %d --
11f00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11f10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 5c 6e  --------------\n
11f20 22 2c 69 2b 31 29 3b 0a 20 20 20 20 20 20 20 20  ",i+1);.        
11f30 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74    raw_printf(out
11f40 2c 20 22 25 73 5c 6e 5c 6e 22 2c 20 7a 53 71 6c  , "%s\n\n", zSql
11f50 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
11f60 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
11f70 6f 75 74 2c 20 22 25 73 5c 6e 22 2c 20 7a 49 64  out, "%s\n", zId
11f80 78 29 3b 0a 20 20 20 20 20 20 20 20 72 61 77 5f  x);.        raw_
11f90 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 5c  printf(out, "%s\
11fa0 6e 22 2c 20 7a 45 51 50 29 3b 0a 20 20 20 20 20  n", zEQP);.     
11fb0 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73   }.    }.  }.  s
11fc0 71 6c 69 74 65 33 5f 65 78 70 65 72 74 5f 64 65  qlite3_expert_de
11fd0 73 74 72 6f 79 28 70 29 3b 0a 20 20 70 53 74 61  stroy(p);.  pSta
11fe0 74 65 2d 3e 65 78 70 65 72 74 2e 70 45 78 70 65  te->expert.pExpe
11ff0 72 74 20 3d 20 30 3b 0a 20 20 72 65 74 75 72 6e  rt = 0;.  return
12000 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45   rc;.}.../*.** E
12010 78 65 63 75 74 65 20 61 20 73 74 61 74 65 6d 65  xecute a stateme
12020 6e 74 20 6f 72 20 73 65 74 20 6f 66 20 73 74 61  nt or set of sta
12030 74 65 6d 65 6e 74 73 2e 20 20 50 72 69 6e 74 0a  tements.  Print.
12040 2a 2a 20 61 6e 79 20 72 65 73 75 6c 74 20 72 6f  ** any result ro
12050 77 73 2f 63 6f 6c 75 6d 6e 73 20 64 65 70 65 6e  ws/columns depen
12060 64 69 6e 67 20 6f 6e 20 74 68 65 20 63 75 72 72  ding on the curr
12070 65 6e 74 20 6d 6f 64 65 0a 2a 2a 20 73 65 74 20  ent mode.** set 
12080 76 69 61 20 74 68 65 20 73 75 70 70 6c 69 65 64  via the supplied
12090 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 0a 2a 2a   callback..**.**
120a0 20 54 68 69 73 20 69 73 20 76 65 72 79 20 73 69   This is very si
120b0 6d 69 6c 61 72 20 74 6f 20 53 51 4c 69 74 65 27  milar to SQLite'
120c0 73 20 62 75 69 6c 74 2d 69 6e 20 73 71 6c 69 74  s built-in sqlit
120d0 65 33 5f 65 78 65 63 28 29 0a 2a 2a 20 66 75 6e  e3_exec().** fun
120e0 63 74 69 6f 6e 20 65 78 63 65 70 74 20 69 74 20  ction except it 
120f0 74 61 6b 65 73 20 61 20 73 6c 69 67 68 74 6c 79  takes a slightly
12100 20 64 69 66 66 65 72 65 6e 74 20 63 61 6c 6c 62   different callb
12110 61 63 6b 0a 2a 2a 20 61 6e 64 20 63 61 6c 6c 62  ack.** and callb
12120 61 63 6b 20 64 61 74 61 20 61 72 67 75 6d 65 6e  ack data argumen
12130 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  t..*/.static int
12140 20 73 68 65 6c 6c 5f 65 78 65 63 28 0a 20 20 73   shell_exec(.  s
12150 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20  qlite3 *db,     
12160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12170 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 6f           /* An o
12180 70 65 6e 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  pen database */.
12190 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53    const char *zS
121a0 71 6c 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ql,             
121b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
121c0 51 4c 20 74 6f 20 62 65 20 65 76 61 6c 75 61 74  QL to be evaluat
121d0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  ed */.  int (*xC
121e0 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69  allback)(void*,i
121f0 6e 74 2c 63 68 61 72 2a 2a 2c 63 68 61 72 2a 2a  nt,char**,char**
12200 2c 69 6e 74 2a 29 2c 20 20 20 2f 2a 20 43 61 6c  ,int*),   /* Cal
12210 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 2a  lback function *
12220 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
12230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12250 20 28 6e 6f 74 20 74 68 65 20 73 61 6d 65 20 61   (not the same a
12260 73 20 73 71 6c 69 74 65 33 5f 65 78 65 63 29 20  s sqlite3_exec) 
12270 2a 2f 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20  */.  ShellState 
12280 2a 70 41 72 67 2c 20 20 20 20 20 20 20 20 20 20  *pArg,          
12290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
122a0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 68 65  * Pointer to She
122b0 6c 6c 53 74 61 74 65 20 2a 2f 0a 20 20 63 68 61  llState */.  cha
122c0 72 20 2a 2a 70 7a 45 72 72 4d 73 67 20 20 20 20  r **pzErrMsg    
122d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122e0 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20         /* Error 
122f0 6d 73 67 20 77 72 69 74 74 65 6e 20 68 65 72 65  msg written here
12300 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
12310 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 4e  _stmt *pStmt = N
12320 55 4c 4c 3b 20 20 20 20 20 2f 2a 20 53 74 61 74  ULL;     /* Stat
12330 65 6d 65 6e 74 20 74 6f 20 65 78 65 63 75 74 65  ement to execute
12340 2e 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20  . */.  int rc = 
12350 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20  SQLITE_OK;      
12360 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e         /* Return
12370 20 43 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72   Code */.  int r
12380 63 32 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  c2;.  const char
12390 20 2a 7a 4c 65 66 74 6f 76 65 72 3b 20 20 20 20   *zLeftover;    
123a0 20 20 20 20 20 20 2f 2a 20 54 61 69 6c 20 6f 66        /* Tail of
123b0 20 75 6e 70 72 6f 63 65 73 73 65 64 20 53 51 4c   unprocessed SQL
123c0 20 2a 2f 0a 0a 20 20 69 66 28 20 70 7a 45 72 72   */..  if( pzErr
123d0 4d 73 67 20 29 7b 0a 20 20 20 20 2a 70 7a 45 72  Msg ){.    *pzEr
123e0 72 4d 73 67 20 3d 20 4e 55 4c 4c 3b 0a 20 20 7d  rMsg = NULL;.  }
123f0 0a 0a 20 20 69 66 28 20 70 41 72 67 2d 3e 65 78  ..  if( pArg->ex
12400 70 65 72 74 2e 70 45 78 70 65 72 74 20 29 7b 0a  pert.pExpert ){.
12410 20 20 20 20 72 63 20 3d 20 65 78 70 65 72 74 48      rc = expertH
12420 61 6e 64 6c 65 53 51 4c 28 70 41 72 67 2c 20 7a  andleSQL(pArg, z
12430 53 71 6c 2c 20 70 7a 45 72 72 4d 73 67 29 3b 0a  Sql, pzErrMsg);.
12440 20 20 20 20 72 65 74 75 72 6e 20 65 78 70 65 72      return exper
12450 74 46 69 6e 69 73 68 28 70 41 72 67 2c 20 28 72  tFinish(pArg, (r
12460 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 2c 20 70  c!=SQLITE_OK), p
12470 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 0a 20  zErrMsg);.  }.. 
12480 20 77 68 69 6c 65 28 20 7a 53 71 6c 5b 30 5d 20   while( zSql[0] 
12490 26 26 20 28 53 51 4c 49 54 45 5f 4f 4b 20 3d 3d  && (SQLITE_OK ==
124a0 20 72 63 29 20 29 7b 0a 20 20 20 20 73 74 61 74   rc) ){.    stat
124b0 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  ic const char *z
124c0 53 74 6d 74 53 71 6c 3b 0a 20 20 20 20 72 63 20  StmtSql;.    rc 
124d0 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
124e0 65 5f 76 32 28 64 62 2c 20 7a 53 71 6c 2c 20 2d  e_v2(db, zSql, -
124f0 31 2c 20 26 70 53 74 6d 74 2c 20 26 7a 4c 65 66  1, &pStmt, &zLef
12500 74 6f 76 65 72 29 3b 0a 20 20 20 20 69 66 28 20  tover);.    if( 
12510 53 51 4c 49 54 45 5f 4f 4b 20 21 3d 20 72 63 20  SQLITE_OK != rc 
12520 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 7a 45  ){.      if( pzE
12530 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20 20 20  rrMsg ){.       
12540 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 73 61 76   *pzErrMsg = sav
12550 65 5f 65 72 72 5f 6d 73 67 28 64 62 29 3b 0a 20  e_err_msg(db);. 
12560 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
12570 7b 0a 20 20 20 20 20 20 69 66 28 20 21 70 53 74  {.      if( !pSt
12580 6d 74 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  mt ){.        /*
12590 20 74 68 69 73 20 68 61 70 70 65 6e 73 20 66 6f   this happens fo
125a0 72 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 72 20 77  r a comment or w
125b0 68 69 74 65 2d 73 70 61 63 65 20 2a 2f 0a 20 20  hite-space */.  
125c0 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 7a 4c 65        zSql = zLe
125d0 66 74 6f 76 65 72 3b 0a 20 20 20 20 20 20 20 20  ftover;.        
125e0 77 68 69 6c 65 28 20 49 73 53 70 61 63 65 28 7a  while( IsSpace(z
125f0 53 71 6c 5b 30 5d 29 20 29 20 7a 53 71 6c 2b 2b  Sql[0]) ) zSql++
12600 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e  ;.        contin
12610 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ue;.      }.    
12620 20 20 7a 53 74 6d 74 53 71 6c 20 3d 20 73 71 6c    zStmtSql = sql
12630 69 74 65 33 5f 73 71 6c 28 70 53 74 6d 74 29 3b  ite3_sql(pStmt);
12640 0a 20 20 20 20 20 20 69 66 28 20 7a 53 74 6d 74  .      if( zStmt
12650 53 71 6c 3d 3d 30 20 29 20 7a 53 74 6d 74 53 71  Sql==0 ) zStmtSq
12660 6c 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 77 68  l = "";.      wh
12670 69 6c 65 28 20 49 73 53 70 61 63 65 28 7a 53 74  ile( IsSpace(zSt
12680 6d 74 53 71 6c 5b 30 5d 29 20 29 20 7a 53 74 6d  mtSql[0]) ) zStm
12690 74 53 71 6c 2b 2b 3b 0a 0a 20 20 20 20 20 20 2f  tSql++;..      /
126a0 2a 20 73 61 76 65 20 6f 66 66 20 74 68 65 20 70  * save off the p
126b0 72 65 70 61 72 65 64 20 73 74 61 74 6d 65 6e 74  repared statment
126c0 20 68 61 6e 64 6c 65 20 61 6e 64 20 72 65 73 65   handle and rese
126d0 74 20 72 6f 77 20 63 6f 75 6e 74 20 2a 2f 0a 20  t row count */. 
126e0 20 20 20 20 20 69 66 28 20 70 41 72 67 20 29 7b       if( pArg ){
126f0 0a 20 20 20 20 20 20 20 20 70 41 72 67 2d 3e 70  .        pArg->p
12700 53 74 6d 74 20 3d 20 70 53 74 6d 74 3b 0a 20 20  Stmt = pStmt;.  
12710 20 20 20 20 20 20 70 41 72 67 2d 3e 63 6e 74 20        pArg->cnt 
12720 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  = 0;.      }..  
12730 20 20 20 20 2f 2a 20 65 63 68 6f 20 74 68 65 20      /* echo the 
12740 73 71 6c 20 73 74 61 74 65 6d 65 6e 74 20 69 66  sql statement if
12750 20 65 63 68 6f 20 6f 6e 20 2a 2f 0a 20 20 20 20   echo on */.    
12760 20 20 69 66 28 20 70 41 72 67 20 26 26 20 53 68    if( pArg && Sh
12770 65 6c 6c 48 61 73 46 6c 61 67 28 70 41 72 67 2c  ellHasFlag(pArg,
12780 20 53 48 46 4c 47 5f 45 63 68 6f 29 20 29 7b 0a   SHFLG_Echo) ){.
12790 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
127a0 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22  ntf(pArg->out, "
127b0 25 73 5c 6e 22 2c 20 7a 53 74 6d 74 53 71 6c 20  %s\n", zStmtSql 
127c0 3f 20 7a 53 74 6d 74 53 71 6c 20 3a 20 7a 53 71  ? zStmtSql : zSq
127d0 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  l);.      }..   
127e0 20 20 20 2f 2a 20 53 68 6f 77 20 74 68 65 20 45     /* Show the E
127f0 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
12800 4e 20 69 66 20 2e 65 71 70 20 69 73 20 6f 6e 20  N if .eqp is on 
12810 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 41 72  */.      if( pAr
12820 67 20 26 26 20 70 41 72 67 2d 3e 61 75 74 6f 45  g && pArg->autoE
12830 51 50 20 26 26 20 73 71 6c 69 74 65 33 5f 73 74  QP && sqlite3_st
12840 72 6c 69 6b 65 28 22 45 58 50 4c 41 49 4e 25 22  rlike("EXPLAIN%"
12850 2c 7a 53 74 6d 74 53 71 6c 2c 30 29 21 3d 30 20  ,zStmtSql,0)!=0 
12860 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
12870 65 33 5f 73 74 6d 74 20 2a 70 45 78 70 6c 61 69  e3_stmt *pExplai
12880 6e 3b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20  n;.        char 
12890 2a 7a 45 51 50 3b 0a 20 20 20 20 20 20 20 20 69  *zEQP;.        i
128a0 6e 74 20 74 72 69 67 67 65 72 45 51 50 20 3d 20  nt triggerEQP = 
128b0 30 3b 0a 20 20 20 20 20 20 20 20 64 69 73 61 62  0;.        disab
128c0 6c 65 5f 64 65 62 75 67 5f 74 72 61 63 65 5f 6d  le_debug_trace_m
128d0 6f 64 65 73 28 29 3b 0a 20 20 20 20 20 20 20 20  odes();.        
128e0 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69  sqlite3_db_confi
128f0 67 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 43  g(db, SQLITE_DBC
12900 4f 4e 46 49 47 5f 54 52 49 47 47 45 52 5f 45 51  ONFIG_TRIGGER_EQ
12910 50 2c 20 2d 31 2c 20 26 74 72 69 67 67 65 72 45  P, -1, &triggerE
12920 51 50 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  QP);.        if(
12930 20 70 41 72 67 2d 3e 61 75 74 6f 45 51 50 3e 3d   pArg->autoEQP>=
12940 41 55 54 4f 45 51 50 5f 74 72 69 67 67 65 72 20  AUTOEQP_trigger 
12950 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
12960 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67 28 64  ite3_db_config(d
12970 62 2c 20 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46  b, SQLITE_DBCONF
12980 49 47 5f 54 52 49 47 47 45 52 5f 45 51 50 2c 20  IG_TRIGGER_EQP, 
12990 31 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d  1, 0);.        }
129a0 0a 20 20 20 20 20 20 20 20 7a 45 51 50 20 3d 20  .        zEQP = 
129b0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
129c0 22 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50  "EXPLAIN QUERY P
129d0 4c 41 4e 20 25 73 22 2c 20 7a 53 74 6d 74 53 71  LAN %s", zStmtSq
129e0 6c 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  l);.        rc =
129f0 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
12a00 5f 76 32 28 64 62 2c 20 7a 45 51 50 2c 20 2d 31  _v2(db, zEQP, -1
12a10 2c 20 26 70 45 78 70 6c 61 69 6e 2c 20 30 29 3b  , &pExplain, 0);
12a20 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d  .        if( rc=
12a30 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
12a40 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 73          while( s
12a50 71 6c 69 74 65 33 5f 73 74 65 70 28 70 45 78 70  qlite3_step(pExp
12a60 6c 61 69 6e 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  lain)==SQLITE_RO
12a70 57 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  W ){.           
12a80 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67   raw_printf(pArg
12a90 2d 3e 6f 75 74 2c 22 2d 2d 45 51 50 2d 2d 20 25  ->out,"--EQP-- %
12aa0 64 2c 22 2c 73 71 6c 69 74 65 33 5f 63 6f 6c 75  d,",sqlite3_colu
12ab0 6d 6e 5f 69 6e 74 28 70 45 78 70 6c 61 69 6e 2c  mn_int(pExplain,
12ac0 20 30 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20   0));.          
12ad0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72    raw_printf(pAr
12ae0 67 2d 3e 6f 75 74 2c 22 25 64 2c 22 2c 20 73 71  g->out,"%d,", sq
12af0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
12b00 28 70 45 78 70 6c 61 69 6e 2c 20 31 29 29 3b 0a  (pExplain, 1));.
12b10 20 20 20 20 20 20 20 20 20 20 20 20 72 61 77 5f              raw_
12b20 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74  printf(pArg->out
12b30 2c 22 25 64 2c 22 2c 20 73 71 6c 69 74 65 33 5f  ,"%d,", sqlite3_
12b40 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 45 78 70 6c  column_int(pExpl
12b50 61 69 6e 2c 20 32 29 29 3b 0a 20 20 20 20 20 20  ain, 2));.      
12b60 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
12b70 66 28 70 41 72 67 2d 3e 6f 75 74 2c 22 25 73 5c  f(pArg->out,"%s\
12b80 6e 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  n", sqlite3_colu
12b90 6d 6e 5f 74 65 78 74 28 70 45 78 70 6c 61 69 6e  mn_text(pExplain
12ba0 2c 20 33 29 29 3b 0a 20 20 20 20 20 20 20 20 20  , 3));.         
12bb0 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
12bc0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e       sqlite3_fin
12bd0 61 6c 69 7a 65 28 70 45 78 70 6c 61 69 6e 29 3b  alize(pExplain);
12be0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
12bf0 5f 66 72 65 65 28 7a 45 51 50 29 3b 0a 20 20 20  _free(zEQP);.   
12c00 20 20 20 20 20 69 66 28 20 70 41 72 67 2d 3e 61       if( pArg->a
12c10 75 74 6f 45 51 50 3e 3d 41 55 54 4f 45 51 50 5f  utoEQP>=AUTOEQP_
12c20 66 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20  full ){.        
12c30 20 20 2f 2a 20 41 6c 73 6f 20 64 6f 20 61 6e 20    /* Also do an 
12c40 45 58 50 4c 41 49 4e 20 66 6f 72 20 22 2e 65 71  EXPLAIN for ".eq
12c50 70 20 66 75 6c 6c 22 20 6d 6f 64 65 20 2a 2f 0a  p full" mode */.
12c60 20 20 20 20 20 20 20 20 20 20 7a 45 51 50 20 3d            zEQP =
12c70 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
12c80 28 22 45 58 50 4c 41 49 4e 20 25 73 22 2c 20 7a  ("EXPLAIN %s", z
12c90 53 74 6d 74 53 71 6c 29 3b 0a 20 20 20 20 20 20  StmtSql);.      
12ca0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
12cb0 5f 70 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20  _prepare_v2(db, 
12cc0 7a 45 51 50 2c 20 2d 31 2c 20 26 70 45 78 70 6c  zEQP, -1, &pExpl
12cd0 61 69 6e 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ain, 0);.       
12ce0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
12cf0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
12d00 20 20 20 20 70 41 72 67 2d 3e 63 4d 6f 64 65 20      pArg->cMode 
12d10 3d 20 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 3b 0a  = MODE_Explain;.
12d20 20 20 20 20 20 20 20 20 20 20 20 20 65 78 70 6c              expl
12d30 61 69 6e 5f 64 61 74 61 5f 70 72 65 70 61 72 65  ain_data_prepare
12d40 28 70 41 72 67 2c 20 70 45 78 70 6c 61 69 6e 29  (pArg, pExplain)
12d50 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 78  ;.            ex
12d60 65 63 5f 70 72 65 70 61 72 65 64 5f 73 74 6d 74  ec_prepared_stmt
12d70 28 70 41 72 67 2c 20 70 45 78 70 6c 61 69 6e 2c  (pArg, pExplain,
12d80 20 78 43 61 6c 6c 62 61 63 6b 29 3b 0a 20 20 20   xCallback);.   
12d90 20 20 20 20 20 20 20 20 20 65 78 70 6c 61 69 6e           explain
12da0 5f 64 61 74 61 5f 64 65 6c 65 74 65 28 70 41 72  _data_delete(pAr
12db0 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  g);.          }.
12dc0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
12dd0 33 5f 66 69 6e 61 6c 69 7a 65 28 70 45 78 70 6c  3_finalize(pExpl
12de0 61 69 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ain);.          
12df0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 51  sqlite3_free(zEQ
12e00 50 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  P);.        }.  
12e10 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62        sqlite3_db
12e20 5f 63 6f 6e 66 69 67 28 64 62 2c 20 53 51 4c 49  _config(db, SQLI
12e30 54 45 5f 44 42 43 4f 4e 46 49 47 5f 54 52 49 47  TE_DBCONFIG_TRIG
12e40 47 45 52 5f 45 51 50 2c 20 74 72 69 67 67 65 72  GER_EQP, trigger
12e50 45 51 50 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  EQP, 0);.       
12e60 20 72 65 73 74 6f 72 65 5f 64 65 62 75 67 5f 74   restore_debug_t
12e70 72 61 63 65 5f 6d 6f 64 65 73 28 29 3b 0a 20 20  race_modes();.  
12e80 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28      }..      if(
12e90 20 70 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20   pArg ){.       
12ea0 20 70 41 72 67 2d 3e 63 4d 6f 64 65 20 3d 20 70   pArg->cMode = p
12eb0 41 72 67 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20 20  Arg->mode;.     
12ec0 20 20 20 69 66 28 20 70 41 72 67 2d 3e 61 75 74     if( pArg->aut
12ed0 6f 45 78 70 6c 61 69 6e 0a 20 20 20 20 20 20 20  oExplain.       
12ee0 20 20 26 26 20 73 71 6c 69 74 65 33 5f 63 6f 6c    && sqlite3_col
12ef0 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  umn_count(pStmt)
12f00 3d 3d 38 0a 20 20 20 20 20 20 20 20 20 26 26 20  ==8.         && 
12f10 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28  sqlite3_strlike(
12f20 22 45 58 50 4c 41 49 4e 25 22 2c 20 7a 53 74 6d  "EXPLAIN%", zStm
12f30 74 53 71 6c 2c 30 29 3d 3d 30 0a 20 20 20 20 20  tSql,0)==0.     
12f40 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20     ){.          
12f50 70 41 72 67 2d 3e 63 4d 6f 64 65 20 3d 20 4d 4f  pArg->cMode = MO
12f60 44 45 5f 45 78 70 6c 61 69 6e 3b 0a 20 20 20 20  DE_Explain;.    
12f70 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f      }..        /
12f80 2a 20 49 66 20 74 68 65 20 73 68 65 6c 6c 20 69  * If the shell i
12f90 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 22  s currently in "
12fa0 2e 65 78 70 6c 61 69 6e 22 20 6d 6f 64 65 2c 20  .explain" mode, 
12fb0 67 61 74 68 65 72 20 74 68 65 20 65 78 74 72 61  gather the extra
12fc0 0a 20 20 20 20 20 20 20 20 2a 2a 20 64 61 74 61  .        ** data
12fd0 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 64 64   required to add
12fe0 20 69 6e 64 65 6e 74 73 20 74 6f 20 74 68 65 20   indents to the 
12ff0 6f 75 74 70 75 74 2e 2a 2f 0a 20 20 20 20 20 20  output.*/.      
13000 20 20 69 66 28 20 70 41 72 67 2d 3e 63 4d 6f 64    if( pArg->cMod
13010 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20  e==MODE_Explain 
13020 29 7b 0a 20 20 20 20 20 20 20 20 20 20 65 78 70  ){.          exp
13030 6c 61 69 6e 5f 64 61 74 61 5f 70 72 65 70 61 72  lain_data_prepar
13040 65 28 70 41 72 67 2c 20 70 53 74 6d 74 29 3b 0a  e(pArg, pStmt);.
13050 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
13060 7d 0a 0a 20 20 20 20 20 20 65 78 65 63 5f 70 72  }..      exec_pr
13070 65 70 61 72 65 64 5f 73 74 6d 74 28 70 41 72 67  epared_stmt(pArg
13080 2c 20 70 53 74 6d 74 2c 20 78 43 61 6c 6c 62 61  , pStmt, xCallba
13090 63 6b 29 3b 0a 20 20 20 20 20 20 65 78 70 6c 61  ck);.      expla
130a0 69 6e 5f 64 61 74 61 5f 64 65 6c 65 74 65 28 70  in_data_delete(p
130b0 41 72 67 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  Arg);..      /* 
130c0 70 72 69 6e 74 20 75 73 61 67 65 20 73 74 61 74  print usage stat
130d0 73 20 69 66 20 73 74 61 74 73 20 6f 6e 20 2a 2f  s if stats on */
130e0 0a 20 20 20 20 20 20 69 66 28 20 70 41 72 67 20  .      if( pArg 
130f0 26 26 20 70 41 72 67 2d 3e 73 74 61 74 73 4f 6e  && pArg->statsOn
13100 20 29 7b 0a 20 20 20 20 20 20 20 20 64 69 73 70   ){.        disp
13110 6c 61 79 5f 73 74 61 74 73 28 64 62 2c 20 70 41  lay_stats(db, pA
13120 72 67 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a  rg, 0);.      }.
13130 0a 20 20 20 20 20 20 2f 2a 20 70 72 69 6e 74 20  .      /* print 
13140 6c 6f 6f 70 2d 63 6f 75 6e 74 65 72 73 20 69 66  loop-counters if
13150 20 72 65 71 75 69 72 65 64 20 2a 2f 0a 20 20 20   required */.   
13160 20 20 20 69 66 28 20 70 41 72 67 20 26 26 20 70     if( pArg && p
13170 41 72 67 2d 3e 73 63 61 6e 73 74 61 74 73 4f 6e  Arg->scanstatsOn
13180 20 29 7b 0a 20 20 20 20 20 20 20 20 64 69 73 70   ){.        disp
13190 6c 61 79 5f 73 63 61 6e 73 74 61 74 73 28 64 62  lay_scanstats(db
131a0 2c 20 70 41 72 67 29 3b 0a 20 20 20 20 20 20 7d  , pArg);.      }
131b0 0a 0a 20 20 20 20 20 20 2f 2a 20 46 69 6e 61 6c  ..      /* Final
131c0 69 7a 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ize the statemen
131d0 74 20 6a 75 73 74 20 65 78 65 63 75 74 65 64 2e  t just executed.
131e0 20 49 66 20 74 68 69 73 20 66 61 69 6c 73 2c 20   If this fails, 
131f0 73 61 76 65 20 61 0a 20 20 20 20 20 20 2a 2a 20  save a.      ** 
13200 63 6f 70 79 20 6f 66 20 74 68 65 20 65 72 72 6f  copy of the erro
13210 72 20 6d 65 73 73 61 67 65 2e 20 4f 74 68 65 72  r message. Other
13220 77 69 73 65 2c 20 73 65 74 20 7a 53 71 6c 20 74  wise, set zSql t
13230 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 0a 20  o point to the. 
13240 20 20 20 20 20 2a 2a 20 6e 65 78 74 20 73 74 61       ** next sta
13250 74 65 6d 65 6e 74 20 74 6f 20 65 78 65 63 75 74  tement to execut
13260 65 2e 20 2a 2f 0a 20 20 20 20 20 20 72 63 32 20  e. */.      rc2 
13270 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  = sqlite3_finali
13280 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20  ze(pStmt);.     
13290 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
132a0 4e 4f 4d 45 4d 20 29 20 72 63 20 3d 20 72 63 32  NOMEM ) rc = rc2
132b0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
132c0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
132d0 20 20 20 20 20 7a 53 71 6c 20 3d 20 7a 4c 65 66       zSql = zLef
132e0 74 6f 76 65 72 3b 0a 20 20 20 20 20 20 20 20 77  tover;.        w
132f0 68 69 6c 65 28 20 49 73 53 70 61 63 65 28 7a 53  hile( IsSpace(zS
13300 71 6c 5b 30 5d 29 20 29 20 7a 53 71 6c 2b 2b 3b  ql[0]) ) zSql++;
13310 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
13320 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20   pzErrMsg ){.   
13330 20 20 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d       *pzErrMsg =
13340 20 73 61 76 65 5f 65 72 72 5f 6d 73 67 28 64 62   save_err_msg(db
13350 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  );.      }..    
13360 20 20 2f 2a 20 63 6c 65 61 72 20 73 61 76 65 64    /* clear saved
13370 20 73 74 6d 74 20 68 61 6e 64 6c 65 20 2a 2f 0a   stmt handle */.
13380 20 20 20 20 20 20 69 66 28 20 70 41 72 67 20 29        if( pArg )
13390 7b 0a 20 20 20 20 20 20 20 20 70 41 72 67 2d 3e  {.        pArg->
133a0 70 53 74 6d 74 20 3d 20 4e 55 4c 4c 3b 0a 20 20  pStmt = NULL;.  
133b0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 20      }.    }.  } 
133c0 2f 2a 20 65 6e 64 20 77 68 69 6c 65 20 2a 2f 0a  /* end while */.
133d0 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
133e0 0a 2f 2a 0a 2a 2a 20 52 65 6c 65 61 73 65 20 6d  ./*.** Release m
133f0 65 6d 6f 72 79 20 70 72 65 76 69 6f 75 73 6c 79  emory previously
13400 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 74 61   allocated by ta
13410 62 6c 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 29 2e  bleColumnList().
13420 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
13430 66 72 65 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 63  freeColumnList(c
13440 68 61 72 20 2a 2a 61 7a 43 6f 6c 29 7b 0a 20 20  har **azCol){.  
13450 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 31  int i;.  for(i=1
13460 3b 20 61 7a 43 6f 6c 5b 69 5d 3b 20 69 2b 2b 29  ; azCol[i]; i++)
13470 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  {.    sqlite3_fr
13480 65 65 28 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20  ee(azCol[i]);.  
13490 7d 0a 20 20 2f 2a 20 61 7a 43 6f 6c 5b 30 5d 20  }.  /* azCol[0] 
134a0 69 73 20 61 20 73 74 61 74 69 63 20 73 74 72 69  is a static stri
134b0 6e 67 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ng */.  sqlite3_
134c0 66 72 65 65 28 61 7a 43 6f 6c 29 3b 0a 7d 0a 0a  free(azCol);.}..
134d0 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 6c  /*.** Return a l
134e0 69 73 74 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ist of pointers 
134f0 74 6f 20 73 74 72 69 6e 67 73 20 77 68 69 63 68  to strings which
13500 20 61 72 65 20 74 68 65 20 6e 61 6d 65 73 20 6f   are the names o
13510 66 20 61 6c 6c 0a 2a 2a 20 63 6f 6c 75 6d 6e 73  f all.** columns
13520 20 69 6e 20 74 61 62 6c 65 20 7a 54 61 62 2e 20   in table zTab. 
13530 20 20 54 68 65 20 6d 65 6d 6f 72 79 20 74 6f 20    The memory to 
13540 68 6f 6c 64 20 74 68 65 20 6e 61 6d 65 73 20 69  hold the names i
13550 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  s dynamically.**
13560 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 6d   allocated and m
13570 75 73 74 20 62 65 20 72 65 6c 65 61 73 65 64 20  ust be released 
13580 62 79 20 74 68 65 20 63 61 6c 6c 65 72 20 75 73  by the caller us
13590 69 6e 67 20 61 20 73 75 62 73 65 71 75 65 6e 74  ing a subsequent
135a0 20 63 61 6c 6c 0a 2a 2a 20 74 6f 20 66 72 65 65   call.** to free
135b0 43 6f 6c 75 6d 6e 4c 69 73 74 28 29 2e 0a 2a 2a  ColumnList()..**
135c0 0a 2a 2a 20 54 68 65 20 61 7a 43 6f 6c 5b 30 5d  .** The azCol[0]
135d0 20 65 6e 74 72 79 20 69 73 20 75 73 75 61 6c 6c   entry is usuall
135e0 79 20 4e 55 4c 4c 2e 20 20 48 6f 77 65 76 65 72  y NULL.  However
135f0 2c 20 69 66 20 7a 54 61 62 20 63 6f 6e 74 61 69  , if zTab contai
13600 6e 73 20 61 20 72 6f 77 69 64 0a 2a 2a 20 76 61  ns a rowid.** va
13610 6c 75 65 20 74 68 61 74 20 6e 65 65 64 73 20 74  lue that needs t
13620 6f 20 62 65 20 70 72 65 73 65 72 76 65 64 2c 20  o be preserved, 
13630 74 68 65 6e 20 61 7a 43 6f 6c 5b 30 5d 20 69 73  then azCol[0] is
13640 20 66 69 6c 6c 65 64 20 69 6e 20 77 69 74 68 20   filled in with 
13650 74 68 65 0a 2a 2a 20 6e 61 6d 65 20 6f 66 20 74  the.** name of t
13660 68 65 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 2e  he rowid column.
13670 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  .**.** The first
13680 20 72 65 67 75 6c 61 72 20 63 6f 6c 75 6d 6e 20   regular column 
13690 69 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  in the table is 
136a0 61 7a 43 6f 6c 5b 31 5d 2e 20 20 54 68 65 20 6c  azCol[1].  The l
136b0 69 73 74 20 69 73 20 74 65 72 6d 69 6e 61 74 65  ist is terminate
136c0 64 0a 2a 2a 20 62 79 20 61 6e 20 65 6e 74 72 79  d.** by an entry
136d0 20 77 69 74 68 20 61 7a 43 6f 6c 5b 69 5d 3d 3d   with azCol[i]==
136e0 30 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61  0..*/.static cha
136f0 72 20 2a 2a 74 61 62 6c 65 43 6f 6c 75 6d 6e 4c  r **tableColumnL
13700 69 73 74 28 53 68 65 6c 6c 53 74 61 74 65 20 2a  ist(ShellState *
13710 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  p, const char *z
13720 54 61 62 29 7b 0a 20 20 63 68 61 72 20 2a 2a 61  Tab){.  char **a
13730 7a 43 6f 6c 20 3d 20 30 3b 0a 20 20 73 71 6c 69  zCol = 0;.  sqli
13740 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
13750 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
13760 20 69 6e 74 20 6e 43 6f 6c 20 3d 20 30 3b 0a 20   int nCol = 0;. 
13770 20 69 6e 74 20 6e 41 6c 6c 6f 63 20 3d 20 30 3b   int nAlloc = 0;
13780 0a 20 20 69 6e 74 20 6e 50 4b 20 3d 20 30 3b 20  .  int nPK = 0; 
13790 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
137a0 6f 66 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  of PRIMARY KEY c
137b0 6f 6c 75 6d 6e 73 20 73 65 65 6e 20 2a 2f 0a 20  olumns seen */. 
137c0 20 69 6e 74 20 69 73 49 50 4b 20 3d 20 30 3b 20   int isIPK = 0; 
137d0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f      /* True if o
137e0 6e 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  ne PRIMARY KEY c
137f0 6f 6c 75 6d 6e 20 6f 66 20 74 79 70 65 20 49 4e  olumn of type IN
13800 54 45 47 45 52 20 2a 2f 0a 20 20 69 6e 74 20 70  TEGER */.  int p
13810 72 65 73 65 72 76 65 52 6f 77 69 64 20 3d 20 53  reserveRowid = S
13820 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c 20 53  hellHasFlag(p, S
13830 48 46 4c 47 5f 50 72 65 73 65 72 76 65 52 6f 77  HFLG_PreserveRow
13840 69 64 29 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  id);.  int rc;..
13850 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
13860 5f 6d 70 72 69 6e 74 66 28 22 50 52 41 47 4d 41  _mprintf("PRAGMA
13870 20 74 61 62 6c 65 5f 69 6e 66 6f 3d 25 51 22 2c   table_info=%Q",
13880 20 7a 54 61 62 29 3b 0a 20 20 72 63 20 3d 20 73   zTab);.  rc = s
13890 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
138a0 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d  2(p->db, zSql, -
138b0 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20  1, &pStmt, 0);. 
138c0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53   sqlite3_free(zS
138d0 71 6c 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ql);.  if( rc ) 
138e0 72 65 74 75 72 6e 20 30 3b 0a 20 20 77 68 69 6c  return 0;.  whil
138f0 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  e( sqlite3_step(
13900 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52  pStmt)==SQLITE_R
13910 4f 57 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 43  OW ){.    if( nC
13920 6f 6c 3e 3d 6e 41 6c 6c 6f 63 2d 32 20 29 7b 0a  ol>=nAlloc-2 ){.
13930 20 20 20 20 20 20 6e 41 6c 6c 6f 63 20 3d 20 6e        nAlloc = n
13940 41 6c 6c 6f 63 2a 32 20 2b 20 6e 43 6f 6c 20 2b  Alloc*2 + nCol +
13950 20 31 30 3b 0a 20 20 20 20 20 20 61 7a 43 6f 6c   10;.      azCol
13960 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c   = sqlite3_reall
13970 6f 63 28 61 7a 43 6f 6c 2c 20 6e 41 6c 6c 6f 63  oc(azCol, nAlloc
13980 2a 73 69 7a 65 6f 66 28 61 7a 43 6f 6c 5b 30 5d  *sizeof(azCol[0]
13990 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 61 7a  ));.      if( az
139a0 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Col==0 ){.      
139b0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
139c0 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75 74  err, "Error: out
139d0 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a   of memory\n");.
139e0 20 20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b          exit(1);
139f0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
13a00 20 20 20 61 7a 43 6f 6c 5b 2b 2b 6e 43 6f 6c 5d     azCol[++nCol]
13a10 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
13a20 74 66 28 22 25 73 22 2c 20 73 71 6c 69 74 65 33  tf("%s", sqlite3
13a30 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
13a40 6d 74 2c 20 31 29 29 3b 0a 20 20 20 20 69 66 28  mt, 1));.    if(
13a50 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
13a60 69 6e 74 28 70 53 74 6d 74 2c 20 35 29 20 29 7b  int(pStmt, 5) ){
13a70 0a 20 20 20 20 20 20 6e 50 4b 2b 2b 3b 0a 20 20  .      nPK++;.  
13a80 20 20 20 20 69 66 28 20 6e 50 4b 3d 3d 31 0a 20      if( nPK==1. 
13a90 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
13aa0 5f 73 74 72 69 63 6d 70 28 28 63 6f 6e 73 74 20  _stricmp((const 
13ab0 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f  char*)sqlite3_co
13ac0 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c  lumn_text(pStmt,
13ad0 32 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  2),.            
13ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
13af0 4e 54 45 47 45 52 22 29 3d 3d 30 0a 20 20 20 20  NTEGER")==0.    
13b00 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 73 49    ){.        isI
13b10 50 4b 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65  PK = 1;.      }e
13b20 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 73 49  lse{.        isI
13b30 50 4b 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  PK = 0;.      }.
13b40 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
13b50 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
13b60 6d 74 29 3b 0a 20 20 69 66 28 20 61 7a 43 6f 6c  mt);.  if( azCol
13b70 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
13b80 20 20 61 7a 43 6f 6c 5b 30 5d 20 3d 20 30 3b 0a    azCol[0] = 0;.
13b90 20 20 61 7a 43 6f 6c 5b 6e 43 6f 6c 2b 31 5d 20    azCol[nCol+1] 
13ba0 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 64  = 0;..  /* The d
13bb0 65 63 69 73 69 6f 6e 20 6f 66 20 77 68 65 74 68  ecision of wheth
13bc0 65 72 20 6f 72 20 6e 6f 74 20 61 20 72 6f 77 69  er or not a rowi
13bd0 64 20 72 65 61 6c 6c 79 20 6e 65 65 64 73 20 74  d really needs t
13be0 6f 20 62 65 20 70 72 65 73 65 72 76 65 64 0a 20  o be preserved. 
13bf0 20 2a 2a 20 69 73 20 74 72 69 63 6b 79 2e 20 20   ** is tricky.  
13c00 57 65 20 6e 65 76 65 72 20 6e 65 65 64 20 74 6f  We never need to
13c10 20 70 72 65 73 65 72 76 65 20 61 20 72 6f 77 69   preserve a rowi
13c20 64 20 66 6f 72 20 61 20 57 49 54 48 4f 55 54 20  d for a WITHOUT 
13c30 52 4f 57 49 44 20 74 61 62 6c 65 0a 20 20 2a 2a  ROWID table.  **
13c40 20 6f 72 20 61 20 74 61 62 6c 65 20 77 69 74 68   or a table with
13c50 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d   an INTEGER PRIM
13c60 41 52 59 20 4b 45 59 2e 20 20 57 65 20 61 72 65  ARY KEY.  We are
13c70 20 75 6e 61 62 6c 65 20 74 6f 20 70 72 65 73 65   unable to prese
13c80 72 76 65 0a 20 20 2a 2a 20 72 6f 77 69 64 73 20  rve.  ** rowids 
13c90 6f 6e 20 74 61 62 6c 65 73 20 77 68 65 72 65 20  on tables where 
13ca0 74 68 65 20 72 6f 77 69 64 20 69 73 20 69 6e 61  the rowid is ina
13cb0 63 63 65 73 73 69 62 6c 65 20 62 65 63 61 75 73  ccessible becaus
13cc0 65 20 74 68 65 72 65 20 61 72 65 20 6f 74 68 65  e there are othe
13cd0 72 0a 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 20 69  r.  ** columns i
13ce0 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
13cf0 64 20 22 72 6f 77 69 64 22 2c 20 22 5f 72 6f 77  d "rowid", "_row
13d00 69 64 5f 22 2c 20 61 6e 64 20 22 6f 69 64 22 2e  id_", and "oid".
13d10 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 72 65 73  .  */.  if( pres
13d20 65 72 76 65 52 6f 77 69 64 20 26 26 20 69 73 49  erveRowid && isI
13d30 50 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  PK ){.    /* If 
13d40 61 20 73 69 6e 67 6c 65 20 50 52 49 4d 41 52 59  a single PRIMARY
13d50 20 4b 45 59 20 63 6f 6c 75 6d 6e 20 77 69 74 68   KEY column with
13d60 20 74 79 70 65 20 49 4e 54 45 47 45 52 20 77 61   type INTEGER wa
13d70 73 20 73 65 65 6e 2c 20 74 68 65 6e 20 69 74 0a  s seen, then it.
13d80 20 20 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20      ** might be 
13d90 61 6e 20 61 6c 69 73 65 20 66 6f 72 20 74 68 65  an alise for the
13da0 20 52 4f 57 49 44 2e 20 20 42 75 74 20 69 74 20   ROWID.  But it 
13db0 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20  might also be a 
13dc0 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a 20 20  WITHOUT ROWID.  
13dd0 20 20 2a 2a 20 74 61 62 6c 65 20 6f 72 20 61 20    ** table or a 
13de0 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
13df0 4b 45 59 20 44 45 53 43 20 63 6f 6c 75 6d 6e 2c  KEY DESC column,
13e00 20 6e 65 69 74 68 65 72 20 6f 66 20 77 68 69 63   neither of whic
13e10 68 20 61 72 65 0a 20 20 20 20 2a 2a 20 52 4f 57  h are.    ** ROW
13e20 49 44 20 61 6c 69 61 73 65 73 2e 20 20 54 6f 20  ID aliases.  To 
13e30 64 69 73 74 69 6e 67 75 69 73 68 20 74 68 65 73  distinguish thes
13e40 65 20 63 61 73 65 73 2c 20 63 68 65 63 6b 20 74  e cases, check t
13e50 6f 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20  o see if.    ** 
13e60 74 68 65 72 65 20 69 73 20 61 20 22 70 6b 22 20  there is a "pk" 
13e70 65 6e 74 72 79 20 69 6e 20 22 50 52 41 47 4d 41  entry in "PRAGMA
13e80 20 69 6e 64 65 78 5f 6c 69 73 74 22 2e 20 20 54   index_list".  T
13e90 68 65 72 65 20 77 69 6c 6c 20 62 65 0a 20 20 20  here will be.   
13ea0 20 2a 2a 20 6e 6f 20 22 70 6b 22 20 69 6e 64 65   ** no "pk" inde
13eb0 78 20 69 66 20 74 68 65 20 50 52 49 4d 41 52 59  x if the PRIMARY
13ec0 20 4b 45 59 20 72 65 61 6c 6c 79 20 69 73 20 61   KEY really is a
13ed0 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
13ee0 52 4f 57 49 44 2e 0a 20 20 20 20 2a 2f 0a 20 20  ROWID..    */.  
13ef0 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
13f00 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c 45 43 54  _mprintf("SELECT
13f10 20 31 20 46 52 4f 4d 20 70 72 61 67 6d 61 5f 69   1 FROM pragma_i
13f20 6e 64 65 78 5f 6c 69 73 74 28 25 51 29 22 0a 20  ndex_list(%Q)". 
13f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f40 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52            " WHER
13f50 45 20 6f 72 69 67 69 6e 3d 27 70 6b 27 22 2c 20  E origin='pk'", 
13f60 7a 54 61 62 29 3b 0a 20 20 20 20 72 63 20 3d 20  zTab);.    rc = 
13f70 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
13f80 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20  v2(p->db, zSql, 
13f90 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a  -1, &pStmt, 0);.
13fa0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
13fb0 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66 28 20  (zSql);.    if( 
13fc0 72 63 20 29 7b 0a 20 20 20 20 20 20 66 72 65 65  rc ){.      free
13fd0 43 6f 6c 75 6d 6e 4c 69 73 74 28 61 7a 43 6f 6c  ColumnList(azCol
13fe0 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
13ff0 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20  0;.    }.    rc 
14000 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  = sqlite3_step(p
14010 53 74 6d 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  Stmt);.    sqlit
14020 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d  e3_finalize(pStm
14030 74 29 3b 0a 20 20 20 20 70 72 65 73 65 72 76 65  t);.    preserve
14040 52 6f 77 69 64 20 3d 20 72 63 3d 3d 53 51 4c 49  Rowid = rc==SQLI
14050 54 45 5f 52 4f 57 3b 0a 20 20 7d 0a 20 20 69 66  TE_ROW;.  }.  if
14060 28 20 70 72 65 73 65 72 76 65 52 6f 77 69 64 20  ( preserveRowid 
14070 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70  ){.    /* Only p
14080 72 65 73 65 72 76 65 20 74 68 65 20 72 6f 77 69  reserve the rowi
14090 64 20 69 66 20 77 65 20 63 61 6e 20 66 69 6e 64  d if we can find
140a0 20 61 20 6e 61 6d 65 20 74 6f 20 75 73 65 20 66   a name to use f
140b0 6f 72 20 74 68 65 0a 20 20 20 20 2a 2a 20 72 6f  or the.    ** ro
140c0 77 69 64 20 2a 2f 0a 20 20 20 20 73 74 61 74 69  wid */.    stati
140d0 63 20 63 68 61 72 20 2a 61 7a 52 6f 77 69 64 5b  c char *azRowid[
140e0 5d 20 3d 20 7b 20 22 72 6f 77 69 64 22 2c 20 22  ] = { "rowid", "
140f0 5f 72 6f 77 69 64 5f 22 2c 20 22 6f 69 64 22 20  _rowid_", "oid" 
14100 7d 3b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 3b  };.    int i, j;
14110 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c  .    for(j=0; j<
14120 33 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 66  3; j++){.      f
14130 6f 72 28 69 3d 31 3b 20 69 3c 3d 6e 43 6f 6c 3b  or(i=1; i<=nCol;
14140 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
14150 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63  f( sqlite3_stric
14160 6d 70 28 61 7a 52 6f 77 69 64 5b 6a 5d 2c 61 7a  mp(azRowid[j],az
14170 43 6f 6c 5b 69 5d 29 3d 3d 30 20 29 20 62 72 65  Col[i])==0 ) bre
14180 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
14190 20 20 69 66 28 20 69 3e 6e 43 6f 6c 20 29 7b 0a    if( i>nCol ){.
141a0 20 20 20 20 20 20 20 20 2f 2a 20 41 74 20 74 68          /* At th
141b0 69 73 20 70 6f 69 6e 74 2c 20 77 65 20 6b 6e 6f  is point, we kno
141c0 77 20 74 68 61 74 20 61 7a 52 6f 77 69 64 5b 6a  w that azRowid[j
141d0 5d 20 69 73 20 6e 6f 74 20 74 68 65 20 6e 61 6d  ] is not the nam
141e0 65 20 6f 66 20 61 6e 79 0a 20 20 20 20 20 20 20  e of any.       
141f0 20 2a 2a 20 6f 72 64 69 6e 61 72 79 20 63 6f 6c   ** ordinary col
14200 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65  umn in the table
14210 2e 20 20 56 65 72 69 66 79 20 74 68 61 74 20 61  .  Verify that a
14220 7a 52 6f 77 69 64 5b 6a 5d 20 69 73 20 61 20 76  zRowid[j] is a v
14230 61 6c 69 64 0a 20 20 20 20 20 20 20 20 2a 2a 20  alid.        ** 
14240 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 72 6f 77  name for the row
14250 69 64 20 62 65 66 6f 72 65 20 61 64 64 69 6e 67  id before adding
14260 20 69 74 20 74 6f 20 61 7a 43 6f 6c 5b 30 5d 2e   it to azCol[0].
14270 20 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a    WITHOUT ROWID.
14280 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65          ** table
14290 73 20 77 69 6c 6c 20 66 61 69 6c 20 74 68 69 73  s will fail this
142a0 20 6c 61 73 74 20 63 68 65 63 6b 20 2a 2f 0a 20   last check */. 
142b0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
142c0 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
142d0 5f 6d 65 74 61 64 61 74 61 28 70 2d 3e 64 62 2c  _metadata(p->db,
142e0 30 2c 7a 54 61 62 2c 61 7a 52 6f 77 69 64 5b 6a  0,zTab,azRowid[j
142f0 5d 2c 30 2c 30 2c 30 2c 30 2c 30 29 3b 0a 20 20  ],0,0,0,0,0);.  
14300 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
14310 4c 49 54 45 5f 4f 4b 20 29 20 61 7a 43 6f 6c 5b  LITE_OK ) azCol[
14320 30 5d 20 3d 20 61 7a 52 6f 77 69 64 5b 6a 5d 3b  0] = azRowid[j];
14330 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
14340 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
14350 7d 0a 20 20 72 65 74 75 72 6e 20 61 7a 43 6f 6c  }.  return azCol
14360 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 6f 67 67 6c  ;.}../*.** Toggl
14370 65 20 74 68 65 20 72 65 76 65 72 73 65 5f 75 6e  e the reverse_un
14380 6f 72 64 65 72 65 64 5f 73 65 6c 65 63 74 73 20  ordered_selects 
14390 73 65 74 74 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74  setting..*/.stat
143a0 69 63 20 76 6f 69 64 20 74 6f 67 67 6c 65 53 65  ic void toggleSe
143b0 6c 65 63 74 4f 72 64 65 72 28 73 71 6c 69 74 65  lectOrder(sqlite
143c0 33 20 2a 64 62 29 7b 0a 20 20 73 71 6c 69 74 65  3 *db){.  sqlite
143d0 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20  3_stmt *pStmt = 
143e0 30 3b 0a 20 20 69 6e 74 20 69 53 65 74 74 69 6e  0;.  int iSettin
143f0 67 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a 53  g = 0;.  char zS
14400 74 6d 74 5b 31 30 30 5d 3b 0a 20 20 73 71 6c 69  tmt[100];.  sqli
14410 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 64  te3_prepare_v2(d
14420 62 2c 20 22 50 52 41 47 4d 41 20 72 65 76 65 72  b, "PRAGMA rever
14430 73 65 5f 75 6e 6f 72 64 65 72 65 64 5f 73 65 6c  se_unordered_sel
14440 65 63 74 73 22 2c 20 2d 31 2c 20 26 70 53 74 6d  ects", -1, &pStm
14450 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 73 71 6c  t, 0);.  if( sql
14460 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29  ite3_step(pStmt)
14470 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a  ==SQLITE_ROW ){.
14480 20 20 20 20 69 53 65 74 74 69 6e 67 20 3d 20 73      iSetting = s
14490 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
144a0 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 7d  t(pStmt, 0);.  }
144b0 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
144c0 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 73 71  ize(pStmt);.  sq
144d0 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
144e0 69 7a 65 6f 66 28 7a 53 74 6d 74 29 2c 20 7a 53  izeof(zStmt), zS
144f0 74 6d 74 2c 0a 20 20 20 20 20 20 20 22 50 52 41  tmt,.       "PRA
14500 47 4d 41 20 72 65 76 65 72 73 65 5f 75 6e 6f 72  GMA reverse_unor
14510 64 65 72 65 64 5f 73 65 6c 65 63 74 73 28 25 64  dered_selects(%d
14520 29 22 2c 20 21 69 53 65 74 74 69 6e 67 29 3b 0a  )", !iSetting);.
14530 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64    sqlite3_exec(d
14540 62 2c 20 7a 53 74 6d 74 2c 20 30 2c 20 30 2c 20  b, zStmt, 0, 0, 
14550 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  0);.}../*.** Thi
14560 73 20 69 73 20 61 20 64 69 66 66 65 72 65 6e 74  s is a different
14570 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e   callback routin
14580 65 20 75 73 65 64 20 66 6f 72 20 64 75 6d 70 69  e used for dumpi
14590 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  ng the database.
145a0 0a 2a 2a 20 45 61 63 68 20 72 6f 77 20 72 65 63  .** Each row rec
145b0 65 69 76 65 64 20 62 79 20 74 68 69 73 20 63 61  eived by this ca
145c0 6c 6c 62 61 63 6b 20 63 6f 6e 73 69 73 74 73 20  llback consists 
145d0 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2c  of a table name,
145e0 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 79  .** the table ty
145f0 70 65 20 28 22 69 6e 64 65 78 22 20 6f 72 20 22  pe ("index" or "
14600 74 61 62 6c 65 22 29 20 61 6e 64 20 53 51 4c 20  table") and SQL 
14610 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 74 61  to create the ta
14620 62 6c 65 2e 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ble..** This rou
14630 74 69 6e 65 20 73 68 6f 75 6c 64 20 70 72 69 6e  tine should prin
14640 74 20 74 65 78 74 20 73 75 66 66 69 63 69 65 6e  t text sufficien
14650 74 20 74 6f 20 72 65 63 72 65 61 74 65 20 74 68  t to recreate th
14660 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74  e table..*/.stat
14670 69 63 20 69 6e 74 20 64 75 6d 70 5f 63 61 6c 6c  ic int dump_call
14680 62 61 63 6b 28 76 6f 69 64 20 2a 70 41 72 67 2c  back(void *pArg,
14690 20 69 6e 74 20 6e 41 72 67 2c 20 63 68 61 72 20   int nArg, char 
146a0 2a 2a 61 7a 41 72 67 2c 20 63 68 61 72 20 2a 2a  **azArg, char **
146b0 61 7a 4e 6f 74 55 73 65 64 29 7b 0a 20 20 69 6e  azNotUsed){.  in
146c0 74 20 72 63 3b 0a 20 20 63 6f 6e 73 74 20 63 68  t rc;.  const ch
146d0 61 72 20 2a 7a 54 61 62 6c 65 3b 0a 20 20 63 6f  ar *zTable;.  co
146e0 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  nst char *zType;
146f0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
14700 53 71 6c 3b 0a 20 20 53 68 65 6c 6c 53 74 61 74  Sql;.  ShellStat
14710 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53 74 61  e *p = (ShellSta
14720 74 65 20 2a 29 70 41 72 67 3b 0a 0a 20 20 55 4e  te *)pArg;..  UN
14730 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 61  USED_PARAMETER(a
14740 7a 4e 6f 74 55 73 65 64 29 3b 0a 20 20 69 66 28  zNotUsed);.  if(
14750 20 6e 41 72 67 21 3d 33 20 7c 7c 20 61 7a 41 72   nArg!=3 || azAr
14760 67 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  g==0 ) return 0;
14770 0a 20 20 7a 54 61 62 6c 65 20 3d 20 61 7a 41 72  .  zTable = azAr
14780 67 5b 30 5d 3b 0a 20 20 7a 54 79 70 65 20 3d 20  g[0];.  zType = 
14790 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 7a 53 71 6c  azArg[1];.  zSql
147a0 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a 0a 20 20   = azArg[2];..  
147b0 69 66 28 20 73 74 72 63 6d 70 28 7a 54 61 62 6c  if( strcmp(zTabl
147c0 65 2c 20 22 73 71 6c 69 74 65 5f 73 65 71 75 65  e, "sqlite_seque
147d0 6e 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  nce")==0 ){.    
147e0 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
147f0 74 2c 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20  t, "DELETE FROM 
14800 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b  sqlite_sequence;
14810 5c 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  \n");.  }else if
14820 28 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f  ( sqlite3_strglo
14830 62 28 22 73 71 6c 69 74 65 5f 73 74 61 74 3f 22  b("sqlite_stat?"
14840 2c 20 7a 54 61 62 6c 65 29 3d 3d 30 20 29 7b 0a  , zTable)==0 ){.
14850 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
14860 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45 20  ->out, "ANALYZE 
14870 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c 6e  sqlite_master;\n
14880 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
14890 73 74 72 6e 63 6d 70 28 7a 54 61 62 6c 65 2c 20  strncmp(zTable, 
148a0 22 73 71 6c 69 74 65 5f 22 2c 20 37 29 3d 3d 30  "sqlite_", 7)==0
148b0 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30   ){.    return 0
148c0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  ;.  }else if( st
148d0 72 6e 63 6d 70 28 7a 53 71 6c 2c 20 22 43 52 45  rncmp(zSql, "CRE
148e0 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
148f0 45 22 2c 20 32 30 29 3d 3d 30 20 29 7b 0a 20 20  E", 20)==0 ){.  
14900 20 20 63 68 61 72 20 2a 7a 49 6e 73 3b 0a 20 20    char *zIns;.  
14910 20 20 69 66 28 20 21 70 2d 3e 77 72 69 74 61 62    if( !p->writab
14920 6c 65 53 63 68 65 6d 61 20 29 7b 0a 20 20 20 20  leSchema ){.    
14930 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
14940 6f 75 74 2c 20 22 50 52 41 47 4d 41 20 77 72 69  out, "PRAGMA wri
14950 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b  table_schema=ON;
14960 5c 6e 22 29 3b 0a 20 20 20 20 20 20 70 2d 3e 77  \n");.      p->w
14970 72 69 74 61 62 6c 65 53 63 68 65 6d 61 20 3d 20  ritableSchema = 
14980 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 49 6e  1;.    }.    zIn
14990 73 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  s = sqlite3_mpri
149a0 6e 74 66 28 0a 20 20 20 20 20 20 20 22 49 4e 53  ntf(.       "INS
149b0 45 52 54 20 49 4e 54 4f 20 73 71 6c 69 74 65 5f  ERT INTO sqlite_
149c0 6d 61 73 74 65 72 28 74 79 70 65 2c 6e 61 6d 65  master(type,name
149d0 2c 74 62 6c 5f 6e 61 6d 65 2c 72 6f 6f 74 70 61  ,tbl_name,rootpa
149e0 67 65 2c 73 71 6c 29 22 0a 20 20 20 20 20 20 20  ge,sql)".       
149f0 22 56 41 4c 55 45 53 28 27 74 61 62 6c 65 27 2c  "VALUES('table',
14a00 27 25 71 27 2c 27 25 71 27 2c 30 2c 27 25 71 27  '%q','%q',0,'%q'
14a10 29 3b 22 2c 0a 20 20 20 20 20 20 20 7a 54 61 62  );",.       zTab
14a20 6c 65 2c 20 7a 54 61 62 6c 65 2c 20 7a 53 71 6c  le, zTable, zSql
14a30 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
14a40 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e  tf(p->out, "%s\n
14a50 22 2c 20 7a 49 6e 73 29 3b 0a 20 20 20 20 73 71  ", zIns);.    sq
14a60 6c 69 74 65 33 5f 66 72 65 65 28 7a 49 6e 73 29  lite3_free(zIns)
14a70 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  ;.    return 0;.
14a80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 72 69    }else{.    pri
14a90 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 70 2d 3e  ntSchemaLine(p->
14aa0 6f 75 74 2c 20 7a 53 71 6c 2c 20 22 3b 5c 6e 22  out, zSql, ";\n"
14ab0 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 73 74  );.  }..  if( st
14ac0 72 63 6d 70 28 7a 54 79 70 65 2c 20 22 74 61 62  rcmp(zType, "tab
14ad0 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 53  le")==0 ){.    S
14ae0 68 65 6c 6c 54 65 78 74 20 73 53 65 6c 65 63 74  hellText sSelect
14af0 3b 0a 20 20 20 20 53 68 65 6c 6c 54 65 78 74 20  ;.    ShellText 
14b00 73 54 61 62 6c 65 3b 0a 20 20 20 20 63 68 61 72  sTable;.    char
14b10 20 2a 2a 61 7a 43 6f 6c 3b 0a 20 20 20 20 69 6e   **azCol;.    in
14b20 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 2a 73  t i;.    char *s
14b30 61 76 65 64 44 65 73 74 54 61 62 6c 65 3b 0a 20  avedDestTable;. 
14b40 20 20 20 69 6e 74 20 73 61 76 65 64 4d 6f 64 65     int savedMode
14b50 3b 0a 0a 20 20 20 20 61 7a 43 6f 6c 20 3d 20 74  ;..    azCol = t
14b60 61 62 6c 65 43 6f 6c 75 6d 6e 4c 69 73 74 28 70  ableColumnList(p
14b70 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20 69  , zTable);.    i
14b80 66 28 20 61 7a 43 6f 6c 3d 3d 30 20 29 7b 0a 20  f( azCol==0 ){. 
14b90 20 20 20 20 20 70 2d 3e 6e 45 72 72 2b 2b 3b 0a       p->nErr++;.
14ba0 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a        return 0;.
14bb0 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 41 6c      }..    /* Al
14bc0 77 61 79 73 20 71 75 6f 74 65 20 74 68 65 20 74  ways quote the t
14bd0 61 62 6c 65 20 6e 61 6d 65 2c 20 65 76 65 6e 20  able name, even 
14be0 69 66 20 69 74 20 61 70 70 65 61 72 73 20 74 6f  if it appears to
14bf0 20 62 65 20 70 75 72 65 20 61 73 63 69 69 2c 0a   be pure ascii,.
14c00 20 20 20 20 2a 2a 20 69 6e 20 63 61 73 65 20 69      ** in case i
14c10 74 20 69 73 20 61 20 6b 65 79 77 6f 72 64 2e 20  t is a keyword. 
14c20 45 78 3a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  Ex:  INSERT INTO
14c30 20 22 74 61 62 6c 65 22 20 2e 2e 2e 20 2a 2f 0a   "table" ... */.
14c40 20 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 54      initText(&sT
14c50 61 62 6c 65 29 3b 0a 20 20 20 20 61 70 70 65 6e  able);.    appen
14c60 64 54 65 78 74 28 26 73 54 61 62 6c 65 2c 20 7a  dText(&sTable, z
14c70 54 61 62 6c 65 2c 20 71 75 6f 74 65 43 68 61 72  Table, quoteChar
14c80 28 7a 54 61 62 6c 65 29 29 3b 0a 20 20 20 20 2f  (zTable));.    /
14c90 2a 20 49 66 20 70 72 65 73 65 72 76 69 6e 67 20  * If preserving 
14ca0 74 68 65 20 72 6f 77 69 64 2c 20 61 64 64 20 61  the rowid, add a
14cb0 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 66 74   column list aft
14cc0 65 72 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  er the table nam
14cd0 65 2e 0a 20 20 20 20 2a 2a 20 49 6e 20 6f 74 68  e..    ** In oth
14ce0 65 72 20 77 6f 72 64 73 3a 20 20 22 49 4e 53 45  er words:  "INSE
14cf0 52 54 20 49 4e 54 4f 20 74 61 62 28 72 6f 77 69  RT INTO tab(rowi
14d00 64 2c 61 2c 62 2c 63 2c 2e 2e 2e 29 20 56 41 4c  d,a,b,c,...) VAL
14d10 55 45 53 28 2e 2e 2e 29 22 0a 20 20 20 20 2a 2a  UES(...)".    **
14d20 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
14d30 75 73 75 61 6c 20 22 49 4e 53 45 52 54 20 49 4e  usual "INSERT IN
14d40 54 4f 20 74 61 62 20 56 41 4c 55 45 53 28 2e 2e  TO tab VALUES(..
14d50 2e 29 22 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  .)"..    */.    
14d60 69 66 28 20 61 7a 43 6f 6c 5b 30 5d 20 29 7b 0a  if( azCol[0] ){.
14d70 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
14d80 28 26 73 54 61 62 6c 65 2c 20 22 28 22 2c 20 30  (&sTable, "(", 0
14d90 29 3b 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54  );.      appendT
14da0 65 78 74 28 26 73 54 61 62 6c 65 2c 20 61 7a 43  ext(&sTable, azC
14db0 6f 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20  ol[0], 0);.     
14dc0 20 66 6f 72 28 69 3d 31 3b 20 61 7a 43 6f 6c 5b   for(i=1; azCol[
14dd0 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  i]; i++){.      
14de0 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 54    appendText(&sT
14df0 61 62 6c 65 2c 20 22 2c 22 2c 20 30 29 3b 0a 20  able, ",", 0);. 
14e00 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
14e10 74 28 26 73 54 61 62 6c 65 2c 20 61 7a 43 6f 6c  t(&sTable, azCol
14e20 5b 69 5d 2c 20 71 75 6f 74 65 43 68 61 72 28 61  [i], quoteChar(a
14e30 7a 43 6f 6c 5b 69 5d 29 29 3b 0a 20 20 20 20 20  zCol[i]));.     
14e40 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54   }.      appendT
14e50 65 78 74 28 26 73 54 61 62 6c 65 2c 20 22 29 22  ext(&sTable, ")"
14e60 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  , 0);.    }..   
14e70 20 2f 2a 20 42 75 69 6c 64 20 61 6e 20 61 70 70   /* Build an app
14e80 72 6f 70 72 69 61 74 65 20 53 45 4c 45 43 54 20  ropriate SELECT 
14e90 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 20  statement */.   
14ea0 20 69 6e 69 74 54 65 78 74 28 26 73 53 65 6c 65   initText(&sSele
14eb0 63 74 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54  ct);.    appendT
14ec0 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 53  ext(&sSelect, "S
14ed0 45 4c 45 43 54 20 22 2c 20 30 29 3b 0a 20 20 20  ELECT ", 0);.   
14ee0 20 69 66 28 20 61 7a 43 6f 6c 5b 30 5d 20 29 7b   if( azCol[0] ){
14ef0 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78  .      appendTex
14f00 74 28 26 73 53 65 6c 65 63 74 2c 20 61 7a 43 6f  t(&sSelect, azCo
14f10 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20  l[0], 0);.      
14f20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c  appendText(&sSel
14f30 65 63 74 2c 20 22 2c 22 2c 20 30 29 3b 0a 20 20  ect, ",", 0);.  
14f40 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b    }.    for(i=1;
14f50 20 61 7a 43 6f 6c 5b 69 5d 3b 20 69 2b 2b 29 7b   azCol[i]; i++){
14f60 0a 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78  .      appendTex
14f70 74 28 26 73 53 65 6c 65 63 74 2c 20 61 7a 43 6f  t(&sSelect, azCo
14f80 6c 5b 69 5d 2c 20 71 75 6f 74 65 43 68 61 72 28  l[i], quoteChar(
14f90 61 7a 43 6f 6c 5b 69 5d 29 29 3b 0a 20 20 20 20  azCol[i]));.    
14fa0 20 20 69 66 28 20 61 7a 43 6f 6c 5b 69 2b 31 5d    if( azCol[i+1]
14fb0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65   ){.        appe
14fc0 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c  ndText(&sSelect,
14fd0 20 22 2c 22 2c 20 30 29 3b 0a 20 20 20 20 20 20   ",", 0);.      
14fe0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 66 72 65 65  }.    }.    free
14ff0 43 6f 6c 75 6d 6e 4c 69 73 74 28 61 7a 43 6f 6c  ColumnList(azCol
15000 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54 65 78  );.    appendTex
15010 74 28 26 73 53 65 6c 65 63 74 2c 20 22 20 46 52  t(&sSelect, " FR
15020 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20 61 70  OM ", 0);.    ap
15030 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63  pendText(&sSelec
15040 74 2c 20 7a 54 61 62 6c 65 2c 20 71 75 6f 74 65  t, zTable, quote
15050 43 68 61 72 28 7a 54 61 62 6c 65 29 29 3b 0a 0a  Char(zTable));..
15060 20 20 20 20 73 61 76 65 64 44 65 73 74 54 61 62      savedDestTab
15070 6c 65 20 3d 20 70 2d 3e 7a 44 65 73 74 54 61 62  le = p->zDestTab
15080 6c 65 3b 0a 20 20 20 20 73 61 76 65 64 4d 6f 64  le;.    savedMod
15090 65 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20 20  e = p->mode;.   
150a0 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20 3d   p->zDestTable =
150b0 20 73 54 61 62 6c 65 2e 7a 3b 0a 20 20 20 20 70   sTable.z;.    p
150c0 2d 3e 6d 6f 64 65 20 3d 20 70 2d 3e 63 4d 6f 64  ->mode = p->cMod
150d0 65 20 3d 20 4d 4f 44 45 5f 49 6e 73 65 72 74 3b  e = MODE_Insert;
150e0 0a 20 20 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f  .    rc = shell_
150f0 65 78 65 63 28 70 2d 3e 64 62 2c 20 73 53 65 6c  exec(p->db, sSel
15100 65 63 74 2e 7a 2c 20 73 68 65 6c 6c 5f 63 61 6c  ect.z, shell_cal
15110 6c 62 61 63 6b 2c 20 70 2c 20 30 29 3b 0a 20 20  lback, p, 0);.  
15120 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d    if( (rc&0xff)=
15130 3d 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20  =SQLITE_CORRUPT 
15140 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
15150 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a  ntf(p->out, "/**
15160 2a 2a 2a 2a 20 43 4f 52 52 55 50 54 49 4f 4e 20  **** CORRUPTION 
15170 45 52 52 4f 52 20 2a 2a 2a 2a 2a 2a 2a 2f 5c 6e  ERROR *******/\n
15180 22 29 3b 0a 20 20 20 20 20 20 74 6f 67 67 6c 65  ");.      toggle
15190 53 65 6c 65 63 74 4f 72 64 65 72 28 70 2d 3e 64  SelectOrder(p->d
151a0 62 29 3b 0a 20 20 20 20 20 20 73 68 65 6c 6c 5f  b);.      shell_
151b0 65 78 65 63 28 70 2d 3e 64 62 2c 20 73 53 65 6c  exec(p->db, sSel
151c0 65 63 74 2e 7a 2c 20 73 68 65 6c 6c 5f 63 61 6c  ect.z, shell_cal
151d0 6c 62 61 63 6b 2c 20 70 2c 20 30 29 3b 0a 20 20  lback, p, 0);.  
151e0 20 20 20 20 74 6f 67 67 6c 65 53 65 6c 65 63 74      toggleSelect
151f0 4f 72 64 65 72 28 70 2d 3e 64 62 29 3b 0a 20 20  Order(p->db);.  
15200 20 20 7d 0a 20 20 20 20 70 2d 3e 7a 44 65 73 74    }.    p->zDest
15210 54 61 62 6c 65 20 3d 20 73 61 76 65 64 44 65 73  Table = savedDes
15220 74 54 61 62 6c 65 3b 0a 20 20 20 20 70 2d 3e 6d  tTable;.    p->m
15230 6f 64 65 20 3d 20 73 61 76 65 64 4d 6f 64 65 3b  ode = savedMode;
15240 0a 20 20 20 20 66 72 65 65 54 65 78 74 28 26 73  .    freeText(&s
15250 54 61 62 6c 65 29 3b 0a 20 20 20 20 66 72 65 65  Table);.    free
15260 54 65 78 74 28 26 73 53 65 6c 65 63 74 29 3b 0a  Text(&sSelect);.
15270 20 20 20 20 69 66 28 20 72 63 20 29 20 70 2d 3e      if( rc ) p->
15280 6e 45 72 72 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65  nErr++;.  }.  re
15290 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
152a0 20 52 75 6e 20 7a 51 75 65 72 79 2e 20 20 55 73   Run zQuery.  Us
152b0 65 20 64 75 6d 70 5f 63 61 6c 6c 62 61 63 6b 28  e dump_callback(
152c0 29 20 61 73 20 74 68 65 20 63 61 6c 6c 62 61 63  ) as the callbac
152d0 6b 20 72 6f 75 74 69 6e 65 20 73 6f 20 74 68 61  k routine so tha
152e0 74 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  t.** the content
152f0 73 20 6f 66 20 74 68 65 20 71 75 65 72 79 20 61  s of the query a
15300 72 65 20 6f 75 74 70 75 74 20 61 73 20 53 51 4c  re output as SQL
15310 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
15320 2a 2a 20 49 66 20 77 65 20 67 65 74 20 61 20 53  ** If we get a S
15330 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72  QLITE_CORRUPT er
15340 72 6f 72 2c 20 72 65 72 75 6e 20 74 68 65 20 71  ror, rerun the q
15350 75 65 72 79 20 61 66 74 65 72 20 61 70 70 65 6e  uery after appen
15360 64 69 6e 67 0a 2a 2a 20 22 4f 52 44 45 52 20 42  ding.** "ORDER B
15370 59 20 72 6f 77 69 64 20 44 45 53 43 22 20 74 6f  Y rowid DESC" to
15380 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 61   the end..*/.sta
15390 74 69 63 20 69 6e 74 20 72 75 6e 5f 73 63 68 65  tic int run_sche
153a0 6d 61 5f 64 75 6d 70 5f 71 75 65 72 79 28 0a 20  ma_dump_query(. 
153b0 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 0a   ShellState *p,.
153c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 51    const char *zQ
153d0 75 65 72 79 0a 29 7b 0a 20 20 69 6e 74 20 72 63  uery.){.  int rc
153e0 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20 3d  ;.  char *zErr =
153f0 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
15400 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a  e3_exec(p->db, z
15410 51 75 65 72 79 2c 20 64 75 6d 70 5f 63 61 6c 6c  Query, dump_call
15420 62 61 63 6b 2c 20 70 2c 20 26 7a 45 72 72 29 3b  back, p, &zErr);
15430 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
15440 45 5f 43 4f 52 52 55 50 54 20 29 7b 0a 20 20 20  E_CORRUPT ){.   
15450 20 63 68 61 72 20 2a 7a 51 32 3b 0a 20 20 20 20   char *zQ2;.    
15460 69 6e 74 20 6c 65 6e 20 3d 20 73 74 72 6c 65 6e  int len = strlen
15470 33 30 28 7a 51 75 65 72 79 29 3b 0a 20 20 20 20  30(zQuery);.    
15480 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
15490 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 43 4f 52 52  t, "/****** CORR
154a0 55 50 54 49 4f 4e 20 45 52 52 4f 52 20 2a 2a 2a  UPTION ERROR ***
154b0 2a 2a 2a 2a 2f 5c 6e 22 29 3b 0a 20 20 20 20 69  ****/\n");.    i
154c0 66 28 20 7a 45 72 72 20 29 7b 0a 20 20 20 20 20  f( zErr ){.     
154d0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
154e0 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 25 73  out, "/****** %s
154f0 20 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20 7a 45 72   ******/\n", zEr
15500 72 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  r);.      sqlite
15510 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a 20 20  3_free(zErr);.  
15520 20 20 20 20 7a 45 72 72 20 3d 20 30 3b 0a 20 20      zErr = 0;.  
15530 20 20 7d 0a 20 20 20 20 7a 51 32 20 3d 20 6d 61    }.    zQ2 = ma
15540 6c 6c 6f 63 28 20 6c 65 6e 2b 31 30 30 20 29 3b  lloc( len+100 );
15550 0a 20 20 20 20 69 66 28 20 7a 51 32 3d 3d 30 20  .    if( zQ2==0 
15560 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20  ) return rc;.   
15570 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
15580 66 28 6c 65 6e 2b 31 30 30 2c 20 7a 51 32 2c 20  f(len+100, zQ2, 
15590 22 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77  "%s ORDER BY row
155a0 69 64 20 44 45 53 43 22 2c 20 7a 51 75 65 72 79  id DESC", zQuery
155b0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
155c0 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  te3_exec(p->db, 
155d0 7a 51 32 2c 20 64 75 6d 70 5f 63 61 6c 6c 62 61  zQ2, dump_callba
155e0 63 6b 2c 20 70 2c 20 26 7a 45 72 72 29 3b 0a 20  ck, p, &zErr);. 
155f0 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
15600 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
15610 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20  ->out, "/****** 
15620 45 52 52 4f 52 3a 20 25 73 20 2a 2a 2a 2a 2a 2a  ERROR: %s ******
15630 2f 5c 6e 22 2c 20 7a 45 72 72 29 3b 0a 20 20 20  /\n", zErr);.   
15640 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
15650 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
15660 54 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  T;.    }.    sql
15670 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b  ite3_free(zErr);
15680 0a 20 20 20 20 66 72 65 65 28 7a 51 32 29 3b 0a  .    free(zQ2);.
15690 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
156a0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 78 74 20 6f  .}../*.** Text o
156b0 66 20 61 20 68 65 6c 70 20 6d 65 73 73 61 67 65  f a help message
156c0 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20  .*/.static char 
156d0 7a 48 65 6c 70 5b 5d 20 3d 0a 23 69 66 6e 64 65  zHelp[] =.#ifnde
156e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
156f0 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 22 2e  THORIZATION.  ".
15700 61 75 74 68 20 4f 4e 7c 4f 46 46 20 20 20 20 20  auth ON|OFF     
15710 20 20 20 20 20 20 53 68 6f 77 20 61 75 74 68 6f        Show autho
15720 72 69 7a 65 72 20 63 61 6c 6c 62 61 63 6b 73 5c  rizer callbacks\
15730 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 62 61  n".#endif.  ".ba
15740 63 6b 75 70 20 3f 44 42 3f 20 46 49 4c 45 20 20  ckup ?DB? FILE  
15750 20 20 20 20 42 61 63 6b 75 70 20 44 42 20 28 64      Backup DB (d
15760 65 66 61 75 6c 74 20 5c 22 6d 61 69 6e 5c 22 29  efault \"main\")
15770 20 74 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e   to FILE\n".  ".
15780 62 61 69 6c 20 6f 6e 7c 6f 66 66 20 20 20 20 20  bail on|off     
15790 20 20 20 20 20 20 53 74 6f 70 20 61 66 74 65 72        Stop after
157a0 20 68 69 74 74 69 6e 67 20 61 6e 20 65 72 72 6f   hitting an erro
157b0 72 2e 20 20 44 65 66 61 75 6c 74 20 4f 46 46 5c  r.  Default OFF\
157c0 6e 22 0a 20 20 22 2e 62 69 6e 61 72 79 20 6f 6e  n".  ".binary on
157d0 7c 6f 66 66 20 20 20 20 20 20 20 20 20 54 75 72  |off         Tur
157e0 6e 20 62 69 6e 61 72 79 20 6f 75 74 70 75 74 20  n binary output 
157f0 6f 6e 20 6f 72 20 6f 66 66 2e 20 20 44 65 66 61  on or off.  Defa
15800 75 6c 74 20 4f 46 46 5c 6e 22 0a 20 20 22 2e 63  ult OFF\n".  ".c
15810 64 20 44 49 52 45 43 54 4f 52 59 20 20 20 20 20  d DIRECTORY     
15820 20 20 20 20 20 43 68 61 6e 67 65 20 74 68 65 20       Change the 
15830 77 6f 72 6b 69 6e 67 20 64 69 72 65 63 74 6f 72  working director
15840 79 20 74 6f 20 44 49 52 45 43 54 4f 52 59 5c 6e  y to DIRECTORY\n
15850 22 0a 20 20 22 2e 63 68 61 6e 67 65 73 20 6f 6e  ".  ".changes on
15860 7c 6f 66 66 20 20 20 20 20 20 20 20 53 68 6f 77  |off        Show
15870 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
15880 63 68 61 6e 67 65 64 20 62 79 20 53 51 4c 5c 6e  changed by SQL\n
15890 22 0a 20 20 22 2e 63 68 65 63 6b 20 47 4c 4f 42  ".  ".check GLOB
158a0 20 20 20 20 20 20 20 20 20 20 20 20 46 61 69 6c              Fail
158b0 20 69 66 20 6f 75 74 70 75 74 20 73 69 6e 63 65   if output since
158c0 20 2e 74 65 73 74 63 61 73 65 20 64 6f 65 73 20   .testcase does 
158d0 6e 6f 74 20 6d 61 74 63 68 5c 6e 22 0a 20 20 22  not match\n".  "
158e0 2e 63 6c 6f 6e 65 20 4e 45 57 44 42 20 20 20 20  .clone NEWDB    
158f0 20 20 20 20 20 20 20 43 6c 6f 6e 65 20 64 61 74         Clone dat
15900 61 20 69 6e 74 6f 20 4e 45 57 44 42 20 66 72 6f  a into NEWDB fro
15910 6d 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 64  m the existing d
15920 61 74 61 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64  atabase\n".  ".d
15930 61 74 61 62 61 73 65 73 20 20 20 20 20 20 20 20  atabases        
15940 20 20 20 20 20 4c 69 73 74 20 6e 61 6d 65 73 20       List names 
15950 61 6e 64 20 66 69 6c 65 73 20 6f 66 20 61 74 74  and files of att
15960 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 5c  ached databases\
15970 6e 22 0a 20 20 22 2e 64 62 69 6e 66 6f 20 3f 44  n".  ".dbinfo ?D
15980 42 3f 20 20 20 20 20 20 20 20 20 20 20 53 68 6f  B?           Sho
15990 77 20 73 74 61 74 75 73 20 69 6e 66 6f 72 6d 61  w status informa
159a0 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 64  tion about the d
159b0 61 74 61 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64  atabase\n".  ".d
159c0 75 6d 70 20 3f 54 41 42 4c 45 3f 20 2e 2e 2e 20  ump ?TABLE? ... 
159d0 20 20 20 20 20 44 75 6d 70 20 74 68 65 20 64 61       Dump the da
159e0 74 61 62 61 73 65 20 69 6e 20 61 6e 20 53 51 4c  tabase in an SQL
159f0 20 74 65 78 74 20 66 6f 72 6d 61 74 5c 6e 22 0a   text format\n".
15a00 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20    "             
15a10 20 20 20 20 20 20 20 20 20 20 20 20 49 66 20 54              If T
15a20 41 42 4c 45 20 73 70 65 63 69 66 69 65 64 2c 20  ABLE specified, 
15a30 6f 6e 6c 79 20 64 75 6d 70 20 74 61 62 6c 65 73  only dump tables
15a40 20 6d 61 74 63 68 69 6e 67 5c 6e 22 0a 20 20 22   matching\n".  "
15a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a60 20 20 20 20 20 20 20 20 20 4c 49 4b 45 20 70 61           LIKE pa
15a70 74 74 65 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a  ttern TABLE.\n".
15a80 20 20 22 2e 65 63 68 6f 20 6f 6e 7c 6f 66 66 20    ".echo on|off 
15a90 20 20 20 20 20 20 20 20 20 20 54 75 72 6e 20 63            Turn c
15aa0 6f 6d 6d 61 6e 64 20 65 63 68 6f 20 6f 6e 20 6f  ommand echo on o
15ab0 72 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 65 71 70  r off\n".  ".eqp
15ac0 20 6f 6e 7c 6f 66 66 7c 66 75 6c 6c 20 20 20 20   on|off|full    
15ad0 20 20 20 45 6e 61 62 6c 65 20 6f 72 20 64 69 73     Enable or dis
15ae0 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 45  able automatic E
15af0 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
15b00 4e 5c 6e 22 0a 20 20 22 2e 65 78 69 74 20 20 20  N\n".  ".exit   
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
15b20 78 69 74 20 74 68 69 73 20 70 72 6f 67 72 61 6d  xit this program
15b30 5c 6e 22 0a 20 20 22 2e 65 78 70 65 72 74 20 20  \n".  ".expert  
15b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 58                EX
15b50 50 45 52 49 4d 45 4e 54 41 4c 2e 20 53 75 67 67  PERIMENTAL. Sugg
15b60 65 73 74 20 69 6e 64 65 78 65 73 20 66 6f 72 20  est indexes for 
15b70 73 70 65 63 69 66 69 65 64 20 71 75 65 72 69 65  specified querie
15b80 73 5c 6e 22 0a 2f 2a 20 42 65 63 61 75 73 65 20  s\n"./* Because 
15b90 65 78 70 6c 61 69 6e 20 6d 6f 64 65 20 63 6f 6d  explain mode com
15ba0 65 73 20 6f 6e 20 61 75 74 6f 6d 61 74 69 63 61  es on automatica
15bb0 6c 6c 79 20 6e 6f 77 2c 20 74 68 65 20 22 2e 65  lly now, the ".e
15bc0 78 70 6c 61 69 6e 22 20 6d 6f 64 65 0a 2a 2a 20  xplain" mode.** 
15bd0 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  is removed from 
15be0 74 68 65 20 68 65 6c 70 20 73 63 72 65 65 6e 2e  the help screen.
15bf0 20 20 49 74 20 69 73 20 73 74 69 6c 6c 20 73 75    It is still su
15c00 70 70 6f 72 74 65 64 20 66 6f 72 20 6c 65 67 61  pported for lega
15c10 63 79 2c 20 68 6f 77 65 76 65 72 20 2a 2f 0a 2f  cy, however */./
15c20 2a 22 2e 65 78 70 6c 61 69 6e 20 3f 6f 6e 7c 6f  *".explain ?on|o
15c30 66 66 7c 61 75 74 6f 3f 20 54 75 72 6e 20 45 58  ff|auto? Turn EX
15c40 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 6d 6f 64  PLAIN output mod
15c50 65 20 6f 6e 20 6f 72 20 6f 66 66 20 6f 72 20 74  e on or off or t
15c60 6f 20 61 75 74 6f 6d 61 74 69 63 5c 6e 22 2a 2f  o automatic\n"*/
15c70 0a 20 20 22 2e 66 75 6c 6c 73 63 68 65 6d 61 20  .  ".fullschema 
15c80 3f 2d 2d 69 6e 64 65 6e 74 3f 20 53 68 6f 77 20  ?--indent? Show 
15c90 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20 63  schema and the c
15ca0 6f 6e 74 65 6e 74 20 6f 66 20 73 71 6c 69 74 65  ontent of sqlite
15cb0 5f 73 74 61 74 20 74 61 62 6c 65 73 5c 6e 22 0a  _stat tables\n".
15cc0 20 20 22 2e 68 65 61 64 65 72 73 20 6f 6e 7c 6f    ".headers on|o
15cd0 66 66 20 20 20 20 20 20 20 20 54 75 72 6e 20 64  ff        Turn d
15ce0 69 73 70 6c 61 79 20 6f 66 20 68 65 61 64 65 72  isplay of header
15cf0 73 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 20  s on or off\n". 
15d00 20 22 2e 68 65 6c 70 20 20 20 20 20 20 20 20 20   ".help         
15d10 20 20 20 20 20 20 20 20 20 53 68 6f 77 20 74 68           Show th
15d20 69 73 20 6d 65 73 73 61 67 65 5c 6e 22 0a 20 20  is message\n".  
15d30 22 2e 69 6d 70 6f 72 74 20 46 49 4c 45 20 54 41  ".import FILE TA
15d40 42 4c 45 20 20 20 20 20 49 6d 70 6f 72 74 20 64  BLE     Import d
15d50 61 74 61 20 66 72 6f 6d 20 46 49 4c 45 20 69 6e  ata from FILE in
15d60 74 6f 20 54 41 42 4c 45 5c 6e 22 0a 23 69 66 6e  to TABLE\n".#ifn
15d70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
15d80 54 45 53 54 5f 43 4f 4e 54 52 4f 4c 0a 20 20 22  TEST_CONTROL.  "
15d90 2e 69 6d 70 6f 73 74 65 72 20 49 4e 44 45 58 20  .imposter INDEX 
15da0 54 41 42 4c 45 20 20 43 72 65 61 74 65 20 69 6d  TABLE  Create im
15db0 70 6f 73 74 65 72 20 74 61 62 6c 65 20 54 41 42  poster table TAB
15dc0 4c 45 20 6f 6e 20 69 6e 64 65 78 20 49 4e 44 45  LE on index INDE
15dd0 58 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e  X\n".#endif.  ".
15de0 69 6e 64 65 78 65 73 20 3f 54 41 42 4c 45 3f 20  indexes ?TABLE? 
15df0 20 20 20 20 20 20 53 68 6f 77 20 6e 61 6d 65 73        Show names
15e00 20 6f 66 20 61 6c 6c 20 69 6e 64 65 78 65 73 5c   of all indexes\
15e10 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
15e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
15e30 66 20 54 41 42 4c 45 20 73 70 65 63 69 66 69 65  f TABLE specifie
15e40 64 2c 20 6f 6e 6c 79 20 73 68 6f 77 20 69 6e 64  d, only show ind
15e50 65 78 65 73 20 66 6f 72 20 74 61 62 6c 65 73 5c  exes for tables\
15e60 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
15e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
15e80 61 74 63 68 69 6e 67 20 4c 49 4b 45 20 70 61 74  atching LIKE pat
15e90 74 65 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a 23  tern TABLE.\n".#
15ea0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
15eb0 42 4c 45 5f 49 4f 54 52 41 43 45 0a 20 20 22 2e  BLE_IOTRACE.  ".
15ec0 69 6f 74 72 61 63 65 20 46 49 4c 45 20 20 20 20  iotrace FILE    
15ed0 20 20 20 20 20 20 45 6e 61 62 6c 65 20 49 2f 4f        Enable I/O
15ee0 20 64 69 61 67 6e 6f 73 74 69 63 20 6c 6f 67 67   diagnostic logg
15ef0 69 6e 67 20 74 6f 20 46 49 4c 45 5c 6e 22 0a 23  ing to FILE\n".#
15f00 65 6e 64 69 66 0a 20 20 22 2e 6c 69 6d 69 74 20  endif.  ".limit 
15f10 3f 4c 49 4d 49 54 3f 20 3f 56 41 4c 3f 20 20 20  ?LIMIT? ?VAL?   
15f20 44 69 73 70 6c 61 79 20 6f 72 20 63 68 61 6e 67  Display or chang
15f30 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61  e the value of a
15f40 6e 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5c 6e  n SQLITE_LIMIT\n
15f50 22 0a 20 20 22 2e 6c 69 6e 74 20 4f 50 54 49 4f  ".  ".lint OPTIO
15f60 4e 53 20 20 20 20 20 20 20 20 20 20 52 65 70 6f  NS          Repo
15f70 72 74 20 70 6f 74 65 6e 74 69 61 6c 20 73 63 68  rt potential sch
15f80 65 6d 61 20 69 73 73 75 65 73 2e 20 4f 70 74 69  ema issues. Opti
15f90 6f 6e 73 3a 5c 6e 22 0a 20 20 22 20 20 20 20 20  ons:\n".  "     
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fb0 20 20 20 20 66 6b 65 79 2d 69 6e 64 65 78 65 73      fkey-indexes
15fc0 20 20 20 20 20 46 69 6e 64 20 6d 69 73 73 69 6e       Find missin
15fd0 67 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 6e  g foreign key in
15fe0 64 65 78 65 73 5c 6e 22 0a 23 69 66 6e 64 65 66  dexes\n".#ifndef
15ff0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
16000 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 22 2e  D_EXTENSION.  ".
16010 6c 6f 61 64 20 46 49 4c 45 20 3f 45 4e 54 52 59  load FILE ?ENTRY
16020 3f 20 20 20 20 20 4c 6f 61 64 20 61 6e 20 65 78  ?     Load an ex
16030 74 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72 79 5c  tension library\
16040 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 6c 6f  n".#endif.  ".lo
16050 67 20 46 49 4c 45 7c 6f 66 66 20 20 20 20 20 20  g FILE|off      
16060 20 20 20 20 54 75 72 6e 20 6c 6f 67 67 69 6e 67      Turn logging
16070 20 6f 6e 20 6f 72 20 6f 66 66 2e 20 20 46 49 4c   on or off.  FIL
16080 45 20 63 61 6e 20 62 65 20 73 74 64 65 72 72 2f  E can be stderr/
16090 73 74 64 6f 75 74 5c 6e 22 0a 20 20 22 2e 6d 6f  stdout\n".  ".mo
160a0 64 65 20 4d 4f 44 45 20 3f 54 41 42 4c 45 3f 20  de MODE ?TABLE? 
160b0 20 20 20 20 53 65 74 20 6f 75 74 70 75 74 20 6d      Set output m
160c0 6f 64 65 20 77 68 65 72 65 20 4d 4f 44 45 20 69  ode where MODE i
160d0 73 20 6f 6e 65 20 6f 66 3a 5c 6e 22 0a 20 20 22  s one of:\n".  "
160e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160f0 20 20 20 20 20 20 20 20 20 61 73 63 69 69 20 20           ascii  
16100 20 20 43 6f 6c 75 6d 6e 73 2f 72 6f 77 73 20 64    Columns/rows d
16110 65 6c 69 6d 69 74 65 64 20 62 79 20 30 78 31 46  elimited by 0x1F
16120 20 61 6e 64 20 30 78 31 45 5c 6e 22 0a 20 20 22   and 0x1E\n".  "
16130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16140 20 20 20 20 20 20 20 20 20 63 73 76 20 20 20 20           csv    
16150 20 20 43 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65    Comma-separate
16160 64 20 76 61 6c 75 65 73 5c 6e 22 0a 20 20 22 20  d values\n".  " 
16170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16180 20 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 20 20          column  
16190 20 4c 65 66 74 2d 61 6c 69 67 6e 65 64 20 63 6f   Left-aligned co
161a0 6c 75 6d 6e 73 2e 20 20 28 53 65 65 20 2e 77 69  lumns.  (See .wi
161b0 64 74 68 29 5c 6e 22 0a 20 20 22 20 20 20 20 20  dth)\n".  "     
161c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161d0 20 20 20 20 68 74 6d 6c 20 20 20 20 20 48 54 4d      html     HTM
161e0 4c 20 3c 74 61 62 6c 65 3e 20 63 6f 64 65 5c 6e  L <table> code\n
161f0 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
16200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
16210 73 65 72 74 20 20 20 53 51 4c 20 69 6e 73 65 72  sert   SQL inser
16220 74 20 73 74 61 74 65 6d 65 6e 74 73 20 66 6f 72  t statements for
16230 20 54 41 42 4c 45 5c 6e 22 0a 20 20 22 20 20 20   TABLE\n".  "   
16240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16250 20 20 20 20 20 20 6c 69 6e 65 20 20 20 20 20 4f        line     O
16260 6e 65 20 76 61 6c 75 65 20 70 65 72 20 6c 69 6e  ne value per lin
16270 65 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20  e\n".  "        
16280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16290 20 6c 69 73 74 20 20 20 20 20 56 61 6c 75 65 73   list     Values
162a0 20 64 65 6c 69 6d 69 74 65 64 20 62 79 20 5c 22   delimited by \"
162b0 7c 5c 22 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  |\"\n".  "      
162c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162d0 20 20 20 71 75 6f 74 65 20 20 20 20 45 73 63 61     quote    Esca
162e0 70 65 20 61 6e 73 77 65 72 73 20 61 73 20 66 6f  pe answers as fo
162f0 72 20 53 51 4c 5c 6e 22 0a 20 20 22 20 20 20 20  r SQL\n".  "    
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16310 20 20 20 20 20 74 61 62 73 20 20 20 20 20 54 61       tabs     Ta
16320 62 2d 73 65 70 61 72 61 74 65 64 20 76 61 6c 75  b-separated valu
16330 65 73 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20  es\n".  "       
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16350 20 20 74 63 6c 20 20 20 20 20 20 54 43 4c 20 6c    tcl      TCL l
16360 69 73 74 20 65 6c 65 6d 65 6e 74 73 5c 6e 22 0a  ist elements\n".
16370 20 20 22 2e 6e 75 6c 6c 76 61 6c 75 65 20 53 54    ".nullvalue ST
16380 52 49 4e 47 20 20 20 20 20 20 55 73 65 20 53 54  RING      Use ST
16390 52 49 4e 47 20 69 6e 20 70 6c 61 63 65 20 6f 66  RING in place of
163a0 20 4e 55 4c 4c 20 76 61 6c 75 65 73 5c 6e 22 0a   NULL values\n".
163b0 20 20 22 2e 6f 6e 63 65 20 46 49 4c 45 4e 41 4d    ".once FILENAM
163c0 45 20 20 20 20 20 20 20 20 20 4f 75 74 70 75 74  E         Output
163d0 20 66 6f 72 20 74 68 65 20 6e 65 78 74 20 53 51   for the next SQ
163e0 4c 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 20 74  L command only t
163f0 6f 20 46 49 4c 45 4e 41 4d 45 5c 6e 22 0a 20 20  o FILENAME\n".  
16400 22 2e 6f 70 65 6e 20 3f 4f 50 54 49 4f 4e 53 3f  ".open ?OPTIONS?
16410 20 3f 46 49 4c 45 3f 20 43 6c 6f 73 65 20 65 78   ?FILE? Close ex
16420 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
16430 61 6e 64 20 72 65 6f 70 65 6e 20 46 49 4c 45 5c  and reopen FILE\
16440 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
16450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
16460 68 65 20 2d 2d 6e 65 77 20 6f 70 74 69 6f 6e 20  he --new option 
16470 73 74 61 72 74 73 20 77 69 74 68 20 61 6e 20 65  starts with an e
16480 6d 70 74 79 20 66 69 6c 65 5c 6e 22 0a 20 20 22  mpty file\n".  "
16490 2e 6f 75 74 70 75 74 20 3f 46 49 4c 45 4e 41 4d  .output ?FILENAM
164a0 45 3f 20 20 20 20 20 53 65 6e 64 20 6f 75 74 70  E?     Send outp
164b0 75 74 20 74 6f 20 46 49 4c 45 4e 41 4d 45 20 6f  ut to FILENAME o
164c0 72 20 73 74 64 6f 75 74 5c 6e 22 0a 20 20 22 2e  r stdout\n".  ".
164d0 70 72 69 6e 74 20 53 54 52 49 4e 47 2e 2e 2e 20  print STRING... 
164e0 20 20 20 20 20 20 50 72 69 6e 74 20 6c 69 74 65        Print lite
164f0 72 61 6c 20 53 54 52 49 4e 47 5c 6e 22 0a 20 20  ral STRING\n".  
16500 22 2e 70 72 6f 6d 70 74 20 4d 41 49 4e 20 43 4f  ".prompt MAIN CO
16510 4e 54 49 4e 55 45 20 20 52 65 70 6c 61 63 65 20  NTINUE  Replace 
16520 74 68 65 20 73 74 61 6e 64 61 72 64 20 70 72 6f  the standard pro
16530 6d 70 74 73 5c 6e 22 0a 20 20 22 2e 71 75 69 74  mpts\n".  ".quit
16540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16550 20 20 45 78 69 74 20 74 68 69 73 20 70 72 6f 67    Exit this prog
16560 72 61 6d 5c 6e 22 0a 20 20 22 2e 72 65 61 64 20  ram\n".  ".read 
16570 46 49 4c 45 4e 41 4d 45 20 20 20 20 20 20 20 20  FILENAME        
16580 20 45 78 65 63 75 74 65 20 53 51 4c 20 69 6e 20   Execute SQL in 
16590 46 49 4c 45 4e 41 4d 45 5c 6e 22 0a 20 20 22 2e  FILENAME\n".  ".
165a0 72 65 73 74 6f 72 65 20 3f 44 42 3f 20 46 49 4c  restore ?DB? FIL
165b0 45 20 20 20 20 20 52 65 73 74 6f 72 65 20 63 6f  E     Restore co
165c0 6e 74 65 6e 74 20 6f 66 20 44 42 20 28 64 65 66  ntent of DB (def
165d0 61 75 6c 74 20 5c 22 6d 61 69 6e 5c 22 29 20 66  ault \"main\") f
165e0 72 6f 6d 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e  rom FILE\n".  ".
165f0 73 61 76 65 20 46 49 4c 45 20 20 20 20 20 20 20  save FILE       
16600 20 20 20 20 20 20 57 72 69 74 65 20 69 6e 2d 6d        Write in-m
16610 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 20 69  emory database i
16620 6e 74 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e  nto FILE\n".  ".
16630 73 63 61 6e 73 74 61 74 73 20 6f 6e 7c 6f 66 66  scanstats on|off
16640 20 20 20 20 20 20 54 75 72 6e 20 73 71 6c 69 74        Turn sqlit
16650 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74  e3_stmt_scanstat
16660 75 73 28 29 20 6d 65 74 72 69 63 73 20 6f 6e 20  us() metrics on 
16670 6f 72 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 73 63  or off\n".  ".sc
16680 68 65 6d 61 20 3f 50 41 54 54 45 52 4e 3f 20 20  hema ?PATTERN?  
16690 20 20 20 20 53 68 6f 77 20 74 68 65 20 43 52 45      Show the CRE
166a0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 6d  ATE statements m
166b0 61 74 63 68 69 6e 67 20 50 41 54 54 45 52 4e 5c  atching PATTERN\
166c0 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
166d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166e0 41 64 64 20 2d 2d 69 6e 64 65 6e 74 20 66 6f 72  Add --indent for
166f0 20 70 72 65 74 74 79 2d 70 72 69 6e 74 69 6e 67   pretty-printing
16700 5c 6e 22 0a 20 20 22 2e 73 65 6c 66 74 65 73 74  \n".  ".selftest
16710 20 3f 2d 2d 69 6e 69 74 3f 20 20 20 20 20 52 75   ?--init?     Ru
16720 6e 20 74 65 73 74 73 20 64 65 66 69 6e 65 64 20  n tests defined 
16730 69 6e 20 74 68 65 20 53 45 4c 46 54 45 53 54 20  in the SELFTEST 
16740 74 61 62 6c 65 5c 6e 22 0a 20 20 22 2e 73 65 70  table\n".  ".sep
16750 61 72 61 74 6f 72 20 43 4f 4c 20 3f 52 4f 57 3f  arator COL ?ROW?
16760 20 20 20 43 68 61 6e 67 65 20 74 68 65 20 63 6f     Change the co
16770 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 20 61  lumn separator a
16780 6e 64 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 74 68  nd optionally th
16790 65 20 72 6f 77 5c 6e 22 0a 20 20 22 20 20 20 20  e row\n".  "    
167a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167b0 20 20 20 20 20 73 65 70 61 72 61 74 6f 72 20 66       separator f
167c0 6f 72 20 62 6f 74 68 20 74 68 65 20 6f 75 74 70  or both the outp
167d0 75 74 20 6d 6f 64 65 20 61 6e 64 20 2e 69 6d 70  ut mode and .imp
167e0 6f 72 74 5c 6e 22 0a 23 69 66 20 64 65 66 69 6e  ort\n".#if defin
167f0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
16800 5f 53 45 53 53 49 4f 4e 29 0a 20 20 22 2e 73 65  _SESSION).  ".se
16810 73 73 69 6f 6e 20 43 4d 44 20 2e 2e 2e 20 20 20  ssion CMD ...   
16820 20 20 20 20 43 72 65 61 74 65 20 6f 72 20 63 6f      Create or co
16830 6e 74 72 6f 6c 20 73 65 73 73 69 6f 6e 73 5c 6e  ntrol sessions\n
16840 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 73 68 61  ".#endif.  ".sha
16850 33 73 75 6d 20 3f 4f 50 54 49 4f 4e 53 2e 2e 2e  3sum ?OPTIONS...
16860 3f 20 20 43 6f 6d 70 75 74 65 20 61 20 53 48 41  ?  Compute a SHA
16870 33 20 68 61 73 68 20 6f 66 20 64 61 74 61 62 61  3 hash of databa
16880 73 65 20 63 6f 6e 74 65 6e 74 5c 6e 22 0a 20 20  se content\n".  
16890 22 2e 73 68 65 6c 6c 20 43 4d 44 20 41 52 47 53  ".shell CMD ARGS
168a0 2e 2e 2e 20 20 20 20 20 52 75 6e 20 43 4d 44 20  ...     Run CMD 
168b0 41 52 47 53 2e 2e 2e 20 69 6e 20 61 20 73 79 73  ARGS... in a sys
168c0 74 65 6d 20 73 68 65 6c 6c 5c 6e 22 0a 20 20 22  tem shell\n".  "
168d0 2e 73 68 6f 77 20 20 20 20 20 20 20 20 20 20 20  .show           
168e0 20 20 20 20 20 20 20 53 68 6f 77 20 74 68 65 20         Show the 
168f0 63 75 72 72 65 6e 74 20 76 61 6c 75 65 73 20 66  current values f
16900 6f 72 20 76 61 72 69 6f 75 73 20 73 65 74 74 69  or various setti
16910 6e 67 73 5c 6e 22 0a 20 20 22 2e 73 74 61 74 73  ngs\n".  ".stats
16920 20 3f 6f 6e 7c 6f 66 66 3f 20 20 20 20 20 20 20   ?on|off?       
16930 20 53 68 6f 77 20 73 74 61 74 73 20 6f 72 20 74   Show stats or t
16940 75 72 6e 20 73 74 61 74 73 20 6f 6e 20 6f 72 20  urn stats on or 
16950 6f 66 66 5c 6e 22 0a 20 20 22 2e 73 79 73 74 65  off\n".  ".syste
16960 6d 20 43 4d 44 20 41 52 47 53 2e 2e 2e 20 20 20  m CMD ARGS...   
16970 20 52 75 6e 20 43 4d 44 20 41 52 47 53 2e 2e 2e   Run CMD ARGS...
16980 20 69 6e 20 61 20 73 79 73 74 65 6d 20 73 68 65   in a system she
16990 6c 6c 5c 6e 22 0a 20 20 22 2e 74 61 62 6c 65 73  ll\n".  ".tables
169a0 20 3f 54 41 42 4c 45 3f 20 20 20 20 20 20 20 20   ?TABLE?        
169b0 4c 69 73 74 20 6e 61 6d 65 73 20 6f 66 20 74 61  List names of ta
169c0 62 6c 65 73 5c 6e 22 0a 20 20 22 20 20 20 20 20  bles\n".  "     
169d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169e0 20 20 20 20 49 66 20 54 41 42 4c 45 20 73 70 65      If TABLE spe
169f0 63 69 66 69 65 64 2c 20 6f 6e 6c 79 20 6c 69 73  cified, only lis
16a00 74 20 74 61 62 6c 65 73 20 6d 61 74 63 68 69 6e  t tables matchin
16a10 67 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20  g\n".  "        
16a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a30 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 54 41   LIKE pattern TA
16a40 42 4c 45 2e 5c 6e 22 0a 20 20 22 2e 74 65 73 74  BLE.\n".  ".test
16a50 63 61 73 65 20 4e 41 4d 45 20 20 20 20 20 20 20  case NAME       
16a60 20 20 42 65 67 69 6e 20 72 65 64 69 72 65 63 74    Begin redirect
16a70 69 6e 67 20 6f 75 74 70 75 74 20 74 6f 20 27 74  ing output to 't
16a80 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 27  estcase-out.txt'
16a90 5c 6e 22 0a 20 20 22 2e 74 69 6d 65 6f 75 74 20  \n".  ".timeout 
16aa0 4d 53 20 20 20 20 20 20 20 20 20 20 20 20 54 72  MS            Tr
16ab0 79 20 6f 70 65 6e 69 6e 67 20 6c 6f 63 6b 65 64  y opening locked
16ac0 20 74 61 62 6c 65 73 20 66 6f 72 20 4d 53 20 6d   tables for MS m
16ad0 69 6c 6c 69 73 65 63 6f 6e 64 73 5c 6e 22 0a 20  illiseconds\n". 
16ae0 20 22 2e 74 69 6d 65 72 20 6f 6e 7c 6f 66 66 20   ".timer on|off 
16af0 20 20 20 20 20 20 20 20 20 54 75 72 6e 20 53 51           Turn SQ
16b00 4c 20 74 69 6d 65 72 20 6f 6e 20 6f 72 20 6f 66  L timer on or of
16b10 66 5c 6e 22 0a 20 20 22 2e 74 72 61 63 65 20 46  f\n".  ".trace F
16b20 49 4c 45 7c 6f 66 66 20 20 20 20 20 20 20 20 4f  ILE|off        O
16b30 75 74 70 75 74 20 65 61 63 68 20 53 51 4c 20 73  utput each SQL s
16b40 74 61 74 65 6d 65 6e 74 20 61 73 20 69 74 20 69  tatement as it i
16b50 73 20 72 75 6e 5c 6e 22 0a 20 20 22 2e 76 66 73  s run\n".  ".vfs
16b60 69 6e 66 6f 20 3f 41 55 58 3f 20 20 20 20 20 20  info ?AUX?      
16b70 20 20 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61     Information a
16b80 62 6f 75 74 20 74 68 65 20 74 6f 70 2d 6c 65 76  bout the top-lev
16b90 65 6c 20 56 46 53 5c 6e 22 0a 20 20 22 2e 76 66  el VFS\n".  ".vf
16ba0 73 6c 69 73 74 20 20 20 20 20 20 20 20 20 20 20  slist           
16bb0 20 20 20 20 4c 69 73 74 20 61 6c 6c 20 61 76 61      List all ava
16bc0 69 6c 61 62 6c 65 20 56 46 53 65 73 5c 6e 22 0a  ilable VFSes\n".
16bd0 20 20 22 2e 76 66 73 6e 61 6d 65 20 3f 41 55 58    ".vfsname ?AUX
16be0 3f 20 20 20 20 20 20 20 20 20 50 72 69 6e 74 20  ?         Print 
16bf0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
16c00 56 46 53 20 73 74 61 63 6b 5c 6e 22 0a 20 20 22  VFS stack\n".  "
16c10 2e 77 69 64 74 68 20 4e 55 4d 31 20 4e 55 4d 32  .width NUM1 NUM2
16c20 20 2e 2e 2e 20 20 20 53 65 74 20 63 6f 6c 75 6d   ...   Set colum
16c30 6e 20 77 69 64 74 68 73 20 66 6f 72 20 5c 22 63  n widths for \"c
16c40 6f 6c 75 6d 6e 5c 22 20 6d 6f 64 65 5c 6e 22 0a  olumn\" mode\n".
16c50 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20    "             
16c60 20 20 20 20 20 20 20 20 20 20 20 20 4e 65 67 61              Nega
16c70 74 69 76 65 20 76 61 6c 75 65 73 20 72 69 67 68  tive values righ
16c80 74 2d 6a 75 73 74 69 66 79 5c 6e 22 0a 3b 0a 0a  t-justify\n".;..
16c90 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
16ca0 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f  TE_ENABLE_SESSIO
16cb0 4e 29 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 68  N)./*.** Print h
16cc0 65 6c 70 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  elp information 
16cd0 66 6f 72 20 74 68 65 20 22 2e 73 65 73 73 69 6f  for the ".sessio
16ce0 6e 73 22 20 63 6f 6d 6d 61 6e 64 0a 2a 2f 0a 76  ns" command.*/.v
16cf0 6f 69 64 20 73 65 73 73 69 6f 6e 5f 68 65 6c 70  oid session_help
16d00 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b  (ShellState *p){
16d10 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d  .  raw_printf(p-
16d20 3e 6f 75 74 2c 0a 20 20 20 20 22 2e 73 65 73 73  >out,.    ".sess
16d30 69 6f 6e 20 3f 4e 41 4d 45 3f 20 53 55 42 43 4f  ion ?NAME? SUBCO
16d40 4d 4d 41 4e 44 20 3f 41 52 47 53 2e 2e 2e 3f 5c  MMAND ?ARGS...?\
16d50 6e 22 0a 20 20 20 20 22 49 66 20 3f 4e 41 4d 45  n".    "If ?NAME
16d60 3f 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 68  ? is omitted, th
16d70 65 20 66 69 72 73 74 20 64 65 66 69 6e 65 64 20  e first defined 
16d80 73 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 2e  session is used.
16d90 5c 6e 22 0a 20 20 20 20 22 53 75 62 63 6f 6d 6d  \n".    "Subcomm
16da0 61 6e 64 73 3a 5c 6e 22 0a 20 20 20 20 22 20 20  ands:\n".    "  
16db0 20 61 74 74 61 63 68 20 54 41 42 4c 45 20 20 20   attach TABLE   
16dc0 20 20 20 20 20 20 20 20 20 20 41 74 74 61 63 68            Attach
16dd0 20 54 41 42 4c 45 5c 6e 22 0a 20 20 20 20 22 20   TABLE\n".    " 
16de0 20 20 63 68 61 6e 67 65 73 65 74 20 46 49 4c 45    changeset FILE
16df0 20 20 20 20 20 20 20 20 20 20 20 57 72 69 74 65             Write
16e00 20 61 20 63 68 61 6e 67 65 73 65 74 20 69 6e 74   a changeset int
16e10 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 20 20 22 20  o FILE\n".    " 
16e20 20 20 63 6c 6f 73 65 20 20 20 20 20 20 20 20 20    close         
16e30 20 20 20 20 20 20 20 20 20 20 20 43 6c 6f 73 65             Close
16e40 20 6f 6e 65 20 73 65 73 73 69 6f 6e 5c 6e 22 0a   one session\n".
16e50 20 20 20 20 22 20 20 20 65 6e 61 62 6c 65 20 3f      "   enable ?
16e60 42 4f 4f 4c 45 41 4e 3f 20 20 20 20 20 20 20 20  BOOLEAN?        
16e70 20 53 65 74 20 6f 72 20 71 75 65 72 79 20 74 68   Set or query th
16e80 65 20 65 6e 61 62 6c 65 20 62 69 74 5c 6e 22 0a  e enable bit\n".
16e90 20 20 20 20 22 20 20 20 66 69 6c 74 65 72 20 47      "   filter G
16ea0 4c 4f 42 2e 2e 2e 20 20 20 20 20 20 20 20 20 20  LOB...          
16eb0 20 52 65 6a 65 63 74 20 74 61 62 6c 65 73 20 6d   Reject tables m
16ec0 61 74 63 68 69 6e 67 20 47 4c 4f 42 73 5c 6e 22  atching GLOBs\n"
16ed0 0a 20 20 20 20 22 20 20 20 69 6e 64 69 72 65 63  .    "   indirec
16ee0 74 20 3f 42 4f 4f 4c 45 41 4e 3f 20 20 20 20 20  t ?BOOLEAN?     
16ef0 20 20 4d 61 72 6b 20 6f 72 20 71 75 65 72 79 20    Mark or query 
16f00 74 68 65 20 69 6e 64 69 72 65 63 74 20 73 74 61  the indirect sta
16f10 74 75 73 5c 6e 22 0a 20 20 20 20 22 20 20 20 69  tus\n".    "   i
16f20 73 65 6d 70 74 79 20 20 20 20 20 20 20 20 20 20  sempty          
16f30 20 20 20 20 20 20 20 20 51 75 65 72 79 20 77 68          Query wh
16f40 65 74 68 65 72 20 74 68 65 20 73 65 73 73 69 6f  ether the sessio
16f50 6e 20 69 73 20 65 6d 70 74 79 5c 6e 22 0a 20 20  n is empty\n".  
16f60 20 20 22 20 20 20 6c 69 73 74 20 20 20 20 20 20    "   list      
16f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
16f80 69 73 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  ist currently op
16f90 65 6e 20 73 65 73 73 69 6f 6e 20 6e 61 6d 65 73  en session names
16fa0 5c 6e 22 0a 20 20 20 20 22 20 20 20 6f 70 65 6e  \n".    "   open
16fb0 20 44 42 20 4e 41 4d 45 20 20 20 20 20 20 20 20   DB NAME        
16fc0 20 20 20 20 20 4f 70 65 6e 20 61 20 6e 65 77 20       Open a new 
16fd0 73 65 73 73 69 6f 6e 20 6f 6e 20 44 42 5c 6e 22  session on DB\n"
16fe0 0a 20 20 20 20 22 20 20 20 70 61 74 63 68 73 65  .    "   patchse
16ff0 74 20 46 49 4c 45 20 20 20 20 20 20 20 20 20 20  t FILE          
17000 20 20 57 72 69 74 65 20 61 20 70 61 74 63 68 73    Write a patchs
17010 65 74 20 69 6e 74 6f 20 46 49 4c 45 5c 6e 22 0a  et into FILE\n".
17020 20 20 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a    );.}.#endif...
17030 2f 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72  /* Forward refer
17040 65 6e 63 65 20 2a 2f 0a 73 74 61 74 69 63 20 69  ence */.static i
17050 6e 74 20 70 72 6f 63 65 73 73 5f 69 6e 70 75 74  nt process_input
17060 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20  (ShellState *p, 
17070 46 49 4c 45 20 2a 69 6e 29 3b 0a 0a 2f 2a 0a 2a  FILE *in);../*.*
17080 2a 20 52 65 61 64 20 74 68 65 20 63 6f 6e 74 65  * Read the conte
17090 6e 74 20 6f 66 20 66 69 6c 65 20 7a 4e 61 6d 65  nt of file zName
170a0 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74   into memory obt
170b0 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74  ained from sqlit
170c0 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 29 0a 2a 2a  e3_malloc64().**
170d0 20 61 6e 64 20 72 65 74 75 72 6e 20 61 20 70 6f   and return a po
170e0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 62 75 66  inter to the buf
170f0 66 65 72 2e 20 54 68 65 20 63 61 6c 6c 65 72 20  fer. The caller 
17100 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66  is responsible f
17110 6f 72 20 66 72 65 65 69 6e 67 0a 2a 2a 20 74 68  or freeing.** th
17120 65 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 0a 2a 2a 20  e memory..**.** 
17130 49 66 20 70 61 72 61 6d 65 74 65 72 20 70 6e 42  If parameter pnB
17140 79 74 65 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c  yte is not NULL,
17150 20 28 2a 70 6e 42 79 74 65 29 20 69 73 20 73 65   (*pnByte) is se
17160 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
17170 6f 66 20 62 79 74 65 73 0a 2a 2a 20 72 65 61 64  of bytes.** read
17180 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 63 6f 6e 76  ..**.** For conv
17190 65 6e 69 65 6e 63 65 2c 20 61 20 6e 75 6c 2d 74  enience, a nul-t
171a0 65 72 6d 69 6e 61 74 6f 72 20 62 79 74 65 20 69  erminator byte i
171b0 73 20 61 6c 77 61 79 73 20 61 70 70 65 6e 64 65  s always appende
171c0 64 20 74 6f 20 74 68 65 20 64 61 74 61 20 72 65  d to the data re
171d0 61 64 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 66  ad.** from the f
171e0 69 6c 65 20 62 65 66 6f 72 65 20 74 68 65 20 62  ile before the b
171f0 75 66 66 65 72 20 69 73 20 72 65 74 75 72 6e 65  uffer is returne
17200 64 2e 20 54 68 69 73 20 62 79 74 65 20 69 73 20  d. This byte is 
17210 6e 6f 74 20 69 6e 63 6c 75 64 65 64 20 69 6e 0a  not included in.
17220 2a 2a 20 74 68 65 20 66 69 6e 61 6c 20 76 61 6c  ** the final val
17230 75 65 20 6f 66 20 28 2a 70 6e 42 79 74 65 29 2c  ue of (*pnByte),
17240 20 69 66 20 61 70 70 6c 69 63 61 62 6c 65 2e 0a   if applicable..
17250 2a 2a 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20 72 65  **.** NULL is re
17260 74 75 72 6e 65 64 20 69 66 20 61 6e 79 20 65 72  turned if any er
17270 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  ror is encounter
17280 65 64 2e 20 54 68 65 20 66 69 6e 61 6c 20 76 61  ed. The final va
17290 6c 75 65 20 6f 66 20 2a 70 6e 42 79 74 65 0a 2a  lue of *pnByte.*
172a0 2a 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20 69  * is undefined i
172b0 6e 20 74 68 69 73 20 63 61 73 65 2e 0a 2a 2f 0a  n this case..*/.
172c0 73 74 61 74 69 63 20 63 68 61 72 20 2a 72 65 61  static char *rea
172d0 64 46 69 6c 65 28 63 6f 6e 73 74 20 63 68 61 72  dFile(const char
172e0 20 2a 7a 4e 61 6d 65 2c 20 69 6e 74 20 2a 70 6e   *zName, int *pn
172f0 42 79 74 65 29 7b 0a 20 20 46 49 4c 45 20 2a 69  Byte){.  FILE *i
17300 6e 20 3d 20 66 6f 70 65 6e 28 7a 4e 61 6d 65 2c  n = fopen(zName,
17310 20 22 72 62 22 29 3b 0a 20 20 6c 6f 6e 67 20 6e   "rb");.  long n
17320 49 6e 3b 0a 20 20 73 69 7a 65 5f 74 20 6e 52 65  In;.  size_t nRe
17330 61 64 3b 0a 20 20 63 68 61 72 20 2a 70 42 75 66  ad;.  char *pBuf
17340 3b 0a 20 20 69 66 28 20 69 6e 3d 3d 30 20 29 20  ;.  if( in==0 ) 
17350 72 65 74 75 72 6e 20 30 3b 0a 20 20 66 73 65 65  return 0;.  fsee
17360 6b 28 69 6e 2c 20 30 2c 20 53 45 45 4b 5f 45 4e  k(in, 0, SEEK_EN
17370 44 29 3b 0a 20 20 6e 49 6e 20 3d 20 66 74 65 6c  D);.  nIn = ftel
17380 6c 28 69 6e 29 3b 0a 20 20 72 65 77 69 6e 64 28  l(in);.  rewind(
17390 69 6e 29 3b 0a 20 20 70 42 75 66 20 3d 20 73 71  in);.  pBuf = sq
173a0 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 20  lite3_malloc64( 
173b0 6e 49 6e 2b 31 20 29 3b 0a 20 20 69 66 28 20 70  nIn+1 );.  if( p
173c0 42 75 66 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  Buf==0 ) return 
173d0 30 3b 0a 20 20 6e 52 65 61 64 20 3d 20 66 72 65  0;.  nRead = fre
173e0 61 64 28 70 42 75 66 2c 20 6e 49 6e 2c 20 31 2c  ad(pBuf, nIn, 1,
173f0 20 69 6e 29 3b 0a 20 20 66 63 6c 6f 73 65 28 69   in);.  fclose(i
17400 6e 29 3b 0a 20 20 69 66 28 20 6e 52 65 61 64 21  n);.  if( nRead!
17410 3d 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =1 ){.    sqlite
17420 33 5f 66 72 65 65 28 70 42 75 66 29 3b 0a 20 20  3_free(pBuf);.  
17430 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
17440 20 20 70 42 75 66 5b 6e 49 6e 5d 20 3d 20 30 3b    pBuf[nIn] = 0;
17450 0a 20 20 69 66 28 20 70 6e 42 79 74 65 20 29 20  .  if( pnByte ) 
17460 2a 70 6e 42 79 74 65 20 3d 20 6e 49 6e 3b 0a 20  *pnByte = nIn;. 
17470 20 72 65 74 75 72 6e 20 70 42 75 66 3b 0a 7d 0a   return pBuf;.}.
17480 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
17490 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49  ITE_ENABLE_SESSI
174a0 4f 4e 29 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20  ON)./*.** Close 
174b0 61 20 73 69 6e 67 6c 65 20 4f 70 65 6e 53 65 73  a single OpenSes
174c0 73 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20  sion object and 
174d0 72 65 6c 65 61 73 65 20 61 6c 6c 20 6f 66 20 69  release all of i
174e0 74 73 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a  ts associated.**
174f0 20 72 65 73 6f 75 72 63 65 73 2e 0a 2a 2f 0a 73   resources..*/.s
17500 74 61 74 69 63 20 76 6f 69 64 20 73 65 73 73 69  tatic void sessi
17510 6f 6e 5f 63 6c 6f 73 65 28 4f 70 65 6e 53 65 73  on_close(OpenSes
17520 73 69 6f 6e 20 2a 70 53 65 73 73 69 6f 6e 29 7b  sion *pSession){
17530 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69  .  int i;.  sqli
17540 74 65 33 73 65 73 73 69 6f 6e 5f 64 65 6c 65 74  te3session_delet
17550 65 28 70 53 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a  e(pSession->p);.
17560 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70    sqlite3_free(p
17570 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 29 3b  Session->zName);
17580 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 53  .  for(i=0; i<pS
17590 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 3b  ession->nFilter;
175a0 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74   i++){.    sqlit
175b0 65 33 5f 66 72 65 65 28 70 53 65 73 73 69 6f 6e  e3_free(pSession
175c0 2d 3e 61 7a 46 69 6c 74 65 72 5b 69 5d 29 3b 0a  ->azFilter[i]);.
175d0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72    }.  sqlite3_fr
175e0 65 65 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46  ee(pSession->azF
175f0 69 6c 74 65 72 29 3b 0a 20 20 6d 65 6d 73 65 74  ilter);.  memset
17600 28 70 53 65 73 73 69 6f 6e 2c 20 30 2c 20 73 69  (pSession, 0, si
17610 7a 65 6f 66 28 4f 70 65 6e 53 65 73 73 69 6f 6e  zeof(OpenSession
17620 29 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ));.}.#endif../*
17630 0a 2a 2a 20 43 6c 6f 73 65 20 61 6c 6c 20 4f 70  .** Close all Op
17640 65 6e 53 65 73 73 69 6f 6e 20 6f 62 6a 65 63 74  enSession object
17650 73 20 61 6e 64 20 72 65 6c 65 61 73 65 20 61 6c  s and release al
17660 6c 20 61 73 73 6f 63 69 61 74 65 64 20 72 65 73  l associated res
17670 6f 75 72 63 65 73 2e 0a 2a 2f 0a 23 69 66 20 64  ources..*/.#if d
17680 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
17690 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 73 74  ABLE_SESSION).st
176a0 61 74 69 63 20 76 6f 69 64 20 73 65 73 73 69 6f  atic void sessio
176b0 6e 5f 63 6c 6f 73 65 5f 61 6c 6c 28 53 68 65 6c  n_close_all(Shel
176c0 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 69 6e  lState *p){.  in
176d0 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  t i;.  for(i=0; 
176e0 69 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69  i<p->nSession; i
176f0 2b 2b 29 7b 0a 20 20 20 20 73 65 73 73 69 6f 6e  ++){.    session
17700 5f 63 6c 6f 73 65 28 26 70 2d 3e 61 53 65 73 73  _close(&p->aSess
17710 69 6f 6e 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 70  ion[i]);.  }.  p
17720 2d 3e 6e 53 65 73 73 69 6f 6e 20 3d 20 30 3b 0a  ->nSession = 0;.
17730 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  }.#else.# define
17740 20 73 65 73 73 69 6f 6e 5f 63 6c 6f 73 65 5f 61   session_close_a
17750 6c 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ll(X).#endif../*
17760 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69  .** Implementati
17770 6f 6e 20 6f 66 20 74 68 65 20 78 46 69 6c 74 65  on of the xFilte
17780 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  r function for a
17790 6e 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e 2e 20  n open session. 
177a0 20 4f 6d 69 74 0a 2a 2a 20 61 6e 79 20 74 61 62   Omit.** any tab
177b0 6c 65 73 20 6e 61 6d 65 64 20 62 79 20 22 2e 73  les named by ".s
177c0 65 73 73 69 6f 6e 20 66 69 6c 74 65 72 22 20 62  ession filter" b
177d0 75 74 20 6c 65 74 20 61 6c 6c 20 6f 74 68 65 72  ut let all other
177e0 20 74 61 62 6c 65 20 74 68 72 6f 75 67 68 2e 0a   table through..
177f0 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
17800 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53  QLITE_ENABLE_SES
17810 53 49 4f 4e 29 0a 73 74 61 74 69 63 20 69 6e 74  SION).static int
17820 20 73 65 73 73 69 6f 6e 5f 66 69 6c 74 65 72 28   session_filter(
17830 76 6f 69 64 20 2a 70 43 74 78 2c 20 63 6f 6e 73  void *pCtx, cons
17840 74 20 63 68 61 72 20 2a 7a 54 61 62 29 7b 0a 20  t char *zTab){. 
17850 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20 2a 70 53   OpenSession *pS
17860 65 73 73 69 6f 6e 20 3d 20 28 4f 70 65 6e 53 65  ession = (OpenSe
17870 73 73 69 6f 6e 2a 29 70 43 74 78 3b 0a 20 20 69  ssion*)pCtx;.  i
17880 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  nt i;.  for(i=0;
17890 20 69 3c 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69   i<pSession->nFi
178a0 6c 74 65 72 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  lter; i++){.    
178b0 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 67  if( sqlite3_strg
178c0 6c 6f 62 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a  lob(pSession->az
178d0 46 69 6c 74 65 72 5b 69 5d 2c 20 7a 54 61 62 29  Filter[i], zTab)
178e0 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
178f0 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a    }.  return 1;.
17900 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
17910 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61  Make sure the da
17920 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2e 20  tabase is open. 
17930 20 49 66 20 69 74 20 69 73 20 6e 6f 74 2c 20 74   If it is not, t
17940 68 65 6e 20 6f 70 65 6e 20 69 74 2e 20 20 49 66  hen open it.  If
17950 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65  .** the database
17960 20 66 61 69 6c 73 20 74 6f 20 6f 70 65 6e 2c 20   fails to open, 
17970 70 72 69 6e 74 20 61 6e 20 65 72 72 6f 72 20 6d  print an error m
17980 65 73 73 61 67 65 20 61 6e 64 20 65 78 69 74 2e  essage and exit.
17990 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
179a0 6f 70 65 6e 5f 64 62 28 53 68 65 6c 6c 53 74 61  open_db(ShellSta
179b0 74 65 20 2a 70 2c 20 69 6e 74 20 6b 65 65 70 41  te *p, int keepA
179c0 6c 69 76 65 29 7b 0a 20 20 69 66 28 20 70 2d 3e  live){.  if( p->
179d0 64 62 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  db==0 ){.    sql
179e0 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28  ite3_initialize(
179f0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6f  );.    sqlite3_o
17a00 70 65 6e 28 70 2d 3e 7a 44 62 46 69 6c 65 6e 61  pen(p->zDbFilena
17a10 6d 65 2c 20 26 70 2d 3e 64 62 29 3b 0a 20 20 20  me, &p->db);.   
17a20 20 67 6c 6f 62 61 6c 44 62 20 3d 20 70 2d 3e 64   globalDb = p->d
17a30 62 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62  b;.    if( p->db
17a40 3d 3d 30 20 7c 7c 20 53 51 4c 49 54 45 5f 4f 4b  ==0 || SQLITE_OK
17a50 21 3d 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  !=sqlite3_errcod
17a60 65 28 70 2d 3e 64 62 29 20 29 7b 0a 20 20 20 20  e(p->db) ){.    
17a70 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
17a80 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 75 6e 61  derr,"Error: una
17a90 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61  ble to open data
17aa0 62 61 73 65 20 5c 22 25 73 5c 22 3a 20 25 73 5c  base \"%s\": %s\
17ab0 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 70 2d  n",.          p-
17ac0 3e 7a 44 62 46 69 6c 65 6e 61 6d 65 2c 20 73 71  >zDbFilename, sq
17ad0 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e  lite3_errmsg(p->
17ae0 64 62 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  db));.      if( 
17af0 6b 65 65 70 41 6c 69 76 65 20 29 20 72 65 74 75  keepAlive ) retu
17b00 72 6e 3b 0a 20 20 20 20 20 20 65 78 69 74 28 31  rn;.      exit(1
17b10 29 3b 0a 20 20 20 20 7d 0a 23 69 66 6e 64 65 66  );.    }.#ifndef
17b20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
17b30 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 20 20  D_EXTENSION.    
17b40 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c  sqlite3_enable_l
17b50 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 70 2d  oad_extension(p-
17b60 3e 64 62 2c 20 31 29 3b 0a 23 65 6e 64 69 66 0a  >db, 1);.#endif.
17b70 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65      sqlite3_file
17b80 69 6f 5f 69 6e 69 74 28 70 2d 3e 64 62 2c 20 30  io_init(p->db, 0
17b90 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
17ba0 33 5f 73 68 61 74 68 72 65 65 5f 69 6e 69 74 28  3_shathree_init(
17bb0 70 2d 3e 64 62 2c 20 30 2c 20 30 29 3b 0a 20 20  p->db, 0, 0);.  
17bc0 20 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65    sqlite3_comple
17bd0 74 69 6f 6e 5f 69 6e 69 74 28 70 2d 3e 64 62 2c  tion_init(p->db,
17be0 20 30 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69   0, 0);.    sqli
17bf0 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
17c00 69 6f 6e 28 70 2d 3e 64 62 2c 20 22 73 68 65 6c  ion(p->db, "shel
17c10 6c 5f 61 64 64 5f 73 63 68 65 6d 61 22 2c 20 33  l_add_schema", 3
17c20 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30  , SQLITE_UTF8, 0
17c30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68                sh
17c50 65 6c 6c 41 64 64 53 63 68 65 6d 61 4e 61 6d 65  ellAddSchemaName
17c60 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 7d 0a 0a  , 0, 0);.  }.}..
17c70 23 69 66 20 48 41 56 45 5f 52 45 41 44 4c 49 4e  #if HAVE_READLIN
17c80 45 20 7c 7c 20 48 41 56 45 5f 45 44 49 54 4c 49  E || HAVE_EDITLI
17c90 4e 45 0a 2f 2a 0a 2a 2a 20 52 65 61 64 6c 69 6e  NE./*.** Readlin
17ca0 65 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 63 61 6c  e completion cal
17cb0 6c 62 61 63 6b 73 0a 2a 2f 0a 73 74 61 74 69 63  lbacks.*/.static
17cc0 20 63 68 61 72 20 2a 72 65 61 64 6c 69 6e 65 5f   char *readline_
17cd0 63 6f 6d 70 6c 65 74 69 6f 6e 5f 67 65 6e 65 72  completion_gener
17ce0 61 74 6f 72 28 63 6f 6e 73 74 20 63 68 61 72 20  ator(const char 
17cf0 2a 74 65 78 74 2c 20 69 6e 74 20 73 74 61 74 65  *text, int state
17d00 29 7b 0a 20 20 73 74 61 74 69 63 20 73 71 6c 69  ){.  static sqli
17d10 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20  te3_stmt *pStmt 
17d20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 52 65  = 0;.  char *zRe
17d30 74 3b 0a 20 20 69 66 28 20 73 74 61 74 65 3d 3d  t;.  if( state==
17d40 30 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  0 ){.    char *z
17d50 53 71 6c 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Sql;.    sqlite3
17d60 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29  _finalize(pStmt)
17d70 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c  ;.    zSql = sql
17d80 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45  ite3_mprintf("SE
17d90 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 63 61  LECT DISTINCT ca
17da0 6e 64 69 64 61 74 65 20 43 4f 4c 4c 41 54 45 20  ndidate COLLATE 
17db0 6e 6f 63 61 73 65 22 0a 20 20 20 20 20 20 20 20  nocase".        
17dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17dd0 20 20 20 22 20 20 46 52 4f 4d 20 63 6f 6d 70 6c     "  FROM compl
17de0 65 74 69 6f 6e 28 25 51 29 20 4f 52 44 45 52 20  etion(%Q) ORDER 
17df0 42 59 20 31 22 2c 20 74 65 78 74 29 3b 0a 20 20  BY 1", text);.  
17e00 20 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72    sqlite3_prepar
17e10 65 5f 76 32 28 67 6c 6f 62 61 6c 44 62 2c 20 7a  e_v2(globalDb, z
17e20 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c  Sql, -1, &pStmt,
17e30 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
17e40 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 7d  _free(zSql);.  }
17e50 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73  .  if( sqlite3_s
17e60 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49  tep(pStmt)==SQLI
17e70 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 7a 52  TE_ROW ){.    zR
17e80 65 74 20 3d 20 73 74 72 64 75 70 28 28 63 6f 6e  et = strdup((con
17e90 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
17ea0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
17eb0 6d 74 2c 20 30 29 29 3b 0a 20 20 7d 65 6c 73 65  mt, 0));.  }else
17ec0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69  {.    sqlite3_fi
17ed0 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20  nalize(pStmt);. 
17ee0 20 20 20 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20     pStmt = 0;.  
17ef0 20 20 7a 52 65 74 20 3d 20 30 3b 0a 20 20 7d 0a    zRet = 0;.  }.
17f00 20 20 72 65 74 75 72 6e 20 7a 52 65 74 3b 0a 7d    return zRet;.}
17f10 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 2a 72  .static char **r
17f20 65 61 64 6c 69 6e 65 5f 63 6f 6d 70 6c 65 74 69  eadline_completi
17f30 6f 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  on(const char *z
17f40 54 65 78 74 2c 20 69 6e 74 20 69 53 74 61 72 74  Text, int iStart
17f50 2c 20 69 6e 74 20 69 45 6e 64 29 7b 0a 20 20 72  , int iEnd){.  r
17f60 6c 5f 61 74 74 65 6d 70 74 65 64 5f 63 6f 6d 70  l_attempted_comp
17f70 6c 65 74 69 6f 6e 5f 6f 76 65 72 20 3d 20 31 3b  letion_over = 1;
17f80 0a 20 20 72 65 74 75 72 6e 20 72 6c 5f 63 6f 6d  .  return rl_com
17f90 70 6c 65 74 69 6f 6e 5f 6d 61 74 63 68 65 73 28  pletion_matches(
17fa0 7a 54 65 78 74 2c 20 72 65 61 64 6c 69 6e 65 5f  zText, readline_
17fb0 63 6f 6d 70 6c 65 74 69 6f 6e 5f 67 65 6e 65 72  completion_gener
17fc0 61 74 6f 72 29 3b 0a 7d 0a 0a 23 65 6c 69 66 20  ator);.}..#elif 
17fd0 48 41 56 45 5f 4c 49 4e 45 4e 4f 49 53 45 0a 2f  HAVE_LINENOISE./
17fe0 2a 0a 2a 2a 20 4c 69 6e 65 6e 6f 69 73 65 20 63  *.** Linenoise c
17ff0 6f 6d 70 6c 65 74 69 6f 6e 20 63 61 6c 6c 62 61  ompletion callba
18000 63 6b 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  ck.*/.static voi
18010 64 20 6c 69 6e 65 6e 6f 69 73 65 5f 63 6f 6d 70  d linenoise_comp
18020 6c 65 74 69 6f 6e 28 63 6f 6e 73 74 20 63 68 61  letion(const cha
18030 72 20 2a 7a 4c 69 6e 65 2c 20 6c 69 6e 65 6e 6f  r *zLine, lineno
18040 69 73 65 43 6f 6d 70 6c 65 74 69 6f 6e 73 20 2a  iseCompletions *
18050 6c 63 29 7b 0a 20 20 69 6e 74 20 6e 4c 69 6e 65  lc){.  int nLine
18060 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a   = (int)strlen(z
18070 4c 69 6e 65 29 3b 0a 20 20 69 6e 74 20 69 2c 20  Line);.  int i, 
18080 69 53 74 61 72 74 3b 0a 20 20 73 71 6c 69 74 65  iStart;.  sqlite
18090 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20  3_stmt *pStmt = 
180a0 30 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  0;.  char *zSql;
180b0 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30  .  char zBuf[100
180c0 30 5d 3b 0a 0a 20 20 69 66 28 20 6e 4c 69 6e 65  0];..  if( nLine
180d0 3e 73 69 7a 65 6f 66 28 7a 42 75 66 29 2d 33 30  >sizeof(zBuf)-30
180e0 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
180f0 20 7a 4c 69 6e 65 5b 30 5d 3d 3d 27 2e 27 20 29   zLine[0]=='.' )
18100 20 72 65 74 75 72 6e 3b 0a 20 20 66 6f 72 28 69   return;.  for(i
18110 3d 6e 4c 69 6e 65 2d 31 3b 20 69 3e 3d 30 20 26  =nLine-1; i>=0 &
18120 26 20 28 69 73 61 6c 6e 75 6d 28 7a 4c 69 6e 65  & (isalnum(zLine
18130 5b 69 5d 29 20 7c 7c 20 7a 4c 69 6e 65 5b 69 5d  [i]) || zLine[i]
18140 3d 3d 27 5f 27 29 3b 20 69 2d 2d 29 7b 7d 0a 20  =='_'); i--){}. 
18150 20 69 66 28 20 69 3d 3d 6e 4c 69 6e 65 2d 31 20   if( i==nLine-1 
18160 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 53 74 61  ) return;.  iSta
18170 72 74 20 3d 20 69 2b 31 3b 0a 20 20 6d 65 6d 63  rt = i+1;.  memc
18180 70 79 28 7a 42 75 66 2c 20 7a 4c 69 6e 65 2c 20  py(zBuf, zLine, 
18190 69 53 74 61 72 74 29 3b 0a 20 20 7a 53 71 6c 20  iStart);.  zSql 
181a0 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
181b0 66 28 22 53 45 4c 45 43 54 20 44 49 53 54 49 4e  f("SELECT DISTIN
181c0 43 54 20 63 61 6e 64 69 64 61 74 65 20 43 4f 4c  CT candidate COL
181d0 4c 41 54 45 20 6e 6f 63 61 73 65 22 0a 20 20 20  LATE nocase".   
181e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181f0 20 20 20 20 20 20 22 20 20 46 52 4f 4d 20 63 6f        "  FROM co
18200 6d 70 6c 65 74 69 6f 6e 28 25 51 2c 25 51 29 20  mpletion(%Q,%Q) 
18210 4f 52 44 45 52 20 42 59 20 31 22 2c 0a 20 20 20  ORDER BY 1",.   
18220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18230 20 20 20 20 20 20 26 7a 4c 69 6e 65 5b 69 53 74        &zLine[iSt
18240 61 72 74 5d 2c 20 7a 4c 69 6e 65 29 3b 0a 20 20  art], zLine);.  
18250 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
18260 76 32 28 67 6c 6f 62 61 6c 44 62 2c 20 7a 53 71  v2(globalDb, zSq
18270 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30  l, -1, &pStmt, 0
18280 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
18290 65 28 7a 53 71 6c 29 3b 0a 20 20 73 71 6c 69 74  e(zSql);.  sqlit
182a0 65 33 5f 65 78 65 63 28 67 6c 6f 62 61 6c 44 62  e3_exec(globalDb
182b0 2c 20 22 50 52 41 47 4d 41 20 70 61 67 65 5f 63  , "PRAGMA page_c
182c0 6f 75 6e 74 22 2c 20 30 2c 20 30 2c 20 30 29 3b  ount", 0, 0, 0);
182d0 20 2f 2a 20 4c 6f 61 64 20 74 68 65 20 73 63 68   /* Load the sch
182e0 65 6d 61 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20  ema */.  while( 
182f0 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74  sqlite3_step(pSt
18300 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20  mt)==SQLITE_ROW 
18310 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  ){.    const cha
18320 72 20 2a 7a 43 6f 6d 70 6c 65 74 69 6f 6e 20 3d  r *zCompletion =
18330 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
18340 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
18350 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20  t(pStmt, 0);.   
18360 20 69 6e 74 20 6e 43 6f 6d 70 6c 65 74 69 6f 6e   int nCompletion
18370 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
18380 6e 5f 62 79 74 65 73 28 70 53 74 6d 74 2c 20 30  n_bytes(pStmt, 0
18390 29 3b 0a 20 20 20 20 69 66 28 20 69 53 74 61 72  );.    if( iStar
183a0 74 2b 6e 43 6f 6d 70 6c 65 74 69 6f 6e 20 3c 20  t+nCompletion < 
183b0 73 69 7a 65 6f 66 28 7a 42 75 66 29 2d 31 20 29  sizeof(zBuf)-1 )
183c0 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 7a  {.      memcpy(z
183d0 42 75 66 2b 69 53 74 61 72 74 2c 20 7a 43 6f 6d  Buf+iStart, zCom
183e0 70 6c 65 74 69 6f 6e 2c 20 6e 43 6f 6d 70 6c 65  pletion, nComple
183f0 74 69 6f 6e 2b 31 29 3b 0a 20 20 20 20 20 20 6c  tion+1);.      l
18400 69 6e 65 6e 6f 69 73 65 41 64 64 43 6f 6d 70 6c  inenoiseAddCompl
18410 65 74 69 6f 6e 28 6c 63 2c 20 7a 42 75 66 29 3b  etion(lc, zBuf);
18420 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c  .    }.  }.  sql
18430 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53  ite3_finalize(pS
18440 74 6d 74 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  tmt);.}.#endif..
18450 2f 2a 0a 2a 2a 20 44 6f 20 43 2d 6c 61 6e 67 75  /*.** Do C-langu
18460 61 67 65 20 73 74 79 6c 65 20 64 65 71 75 6f 74  age style dequot
18470 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 5c 61  ing..**.**    \a
18480 20 20 20 20 2d 3e 20 61 6c 61 72 6d 0a 2a 2a 20      -> alarm.** 
18490 20 20 20 5c 62 20 20 20 20 2d 3e 20 62 61 63 6b     \b    -> back
184a0 73 70 61 63 65 0a 2a 2a 20 20 20 20 5c 74 20 20  space.**    \t  
184b0 20 20 2d 3e 20 74 61 62 0a 2a 2a 20 20 20 20 5c    -> tab.**    \
184c0 6e 20 20 20 20 2d 3e 20 6e 65 77 6c 69 6e 65 0a  n    -> newline.
184d0 2a 2a 20 20 20 20 5c 76 20 20 20 20 2d 3e 20 76  **    \v    -> v
184e0 65 72 74 69 63 61 6c 20 74 61 62 0a 2a 2a 20 20  ertical tab.**  
184f0 20 20 5c 66 20 20 20 20 2d 3e 20 66 6f 72 6d 20    \f    -> form 
18500 66 65 65 64 0a 2a 2a 20 20 20 20 5c 72 20 20 20  feed.**    \r   
18510 20 2d 3e 20 63 61 72 72 69 61 67 65 20 72 65 74   -> carriage ret
18520 75 72 6e 0a 2a 2a 20 20 20 20 5c 73 20 20 20 20  urn.**    \s    
18530 2d 3e 20 73 70 61 63 65 0a 2a 2a 20 20 20 20 5c  -> space.**    \
18540 22 20 20 20 20 2d 3e 20 22 0a 2a 2a 20 20 20 20  "    -> ".**    
18550 5c 27 20 20 20 20 2d 3e 20 27 0a 2a 2a 20 20 20  \'    -> '.**   
18560 20 5c 5c 20 20 20 20 2d 3e 20 62 61 63 6b 73 6c   \\    -> backsl
18570 61 73 68 0a 2a 2a 20 20 20 20 5c 4e 4e 4e 20 20  ash.**    \NNN  
18580 2d 3e 20 61 73 63 69 69 20 63 68 61 72 61 63 74  -> ascii charact
18590 65 72 20 4e 4e 4e 20 69 6e 20 6f 63 74 61 6c 0a  er NNN in octal.
185a0 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72  */.static void r
185b0 65 73 6f 6c 76 65 5f 62 61 63 6b 73 6c 61 73 68  esolve_backslash
185c0 65 73 28 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69  es(char *z){.  i
185d0 6e 74 20 69 2c 20 6a 3b 0a 20 20 63 68 61 72 20  nt i, j;.  char 
185e0 63 3b 0a 20 20 77 68 69 6c 65 28 20 2a 7a 20 26  c;.  while( *z &
185f0 26 20 2a 7a 21 3d 27 5c 5c 27 20 29 20 7a 2b 2b  & *z!='\\' ) z++
18600 3b 0a 20 20 66 6f 72 28 69 3d 6a 3d 30 3b 20 28  ;.  for(i=j=0; (
18610 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b  c = z[i])!=0; i+
18620 2b 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 69 66 28  +, j++){.    if(
18630 20 63 3d 3d 27 5c 5c 27 20 26 26 20 7a 5b 69 2b   c=='\\' && z[i+
18640 31 5d 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 63  1]!=0 ){.      c
18650 20 3d 20 7a 5b 2b 2b 69 5d 3b 0a 20 20 20 20 20   = z[++i];.     
18660 20 69 66 28 20 63 3d 3d 27 61 27 20 29 7b 0a 20   if( c=='a' ){. 
18670 20 20 20 20 20 20 20 63 20 3d 20 27 5c 61 27 3b         c = '\a';
18680 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
18690 20 63 3d 3d 27 62 27 20 29 7b 0a 20 20 20 20 20   c=='b' ){.     
186a0 20 20 20 63 20 3d 20 27 5c 62 27 3b 0a 20 20 20     c = '\b';.   
186b0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
186c0 27 74 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63  't' ){.        c
186d0 20 3d 20 27 5c 74 27 3b 0a 20 20 20 20 20 20 7d   = '\t';.      }
186e0 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 6e 27 20  else if( c=='n' 
186f0 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27  ){.        c = '
18700 5c 6e 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  \n';.      }else
18710 20 69 66 28 20 63 3d 3d 27 76 27 20 29 7b 0a 20   if( c=='v' ){. 
18720 20 20 20 20 20 20 20 63 20 3d 20 27 5c 76 27 3b         c = '\v';
18730 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
18740 20 63 3d 3d 27 66 27 20 29 7b 0a 20 20 20 20 20   c=='f' ){.     
18750 20 20 20 63 20 3d 20 27 5c 66 27 3b 0a 20 20 20     c = '\f';.   
18760 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
18770 27 72 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63  'r' ){.        c
18780 20 3d 20 27 5c 72 27 3b 0a 20 20 20 20 20 20 7d   = '\r';.      }
18790 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 22 27 20  else if( c=='"' 
187a0 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27  ){.        c = '
187b0 22 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  "';.      }else 
187c0 69 66 28 20 63 3d 3d 27 5c 27 27 20 29 7b 0a 20  if( c=='\'' ){. 
187d0 20 20 20 20 20 20 20 63 20 3d 20 27 5c 27 27 3b         c = '\'';
187e0 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
187f0 20 63 3d 3d 27 5c 5c 27 20 29 7b 0a 20 20 20 20   c=='\\' ){.    
18800 20 20 20 20 63 20 3d 20 27 5c 5c 27 3b 0a 20 20      c = '\\';.  
18810 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3e      }else if( c>
18820 3d 27 30 27 20 26 26 20 63 3c 3d 27 37 27 20 29  ='0' && c<='7' )
18830 7b 0a 20 20 20 20 20 20 20 20 63 20 2d 3d 20 27  {.        c -= '
18840 30 27 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  0';.        if( 
18850 7a 5b 69 2b 31 5d 3e 3d 27 30 27 20 26 26 20 7a  z[i+1]>='0' && z
18860 5b 69 2b 31 5d 3c 3d 27 37 27 20 29 7b 0a 20 20  [i+1]<='7' ){.  
18870 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20          i++;.   
18880 20 20 20 20 20 20 20 63 20 3d 20 28 63 3c 3c 33         c = (c<<3
18890 29 20 2b 20 7a 5b 69 5d 20 2d 20 27 30 27 3b 0a  ) + z[i] - '0';.
188a0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b            if( z[
188b0 69 2b 31 5d 3e 3d 27 30 27 20 26 26 20 7a 5b 69  i+1]>='0' && z[i
188c0 2b 31 5d 3c 3d 27 37 27 20 29 7b 0a 20 20 20 20  +1]<='7' ){.    
188d0 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20          i++;.   
188e0 20 20 20 20 20 20 20 20 20 63 20 3d 20 28 63 3c           c = (c<
188f0 3c 33 29 20 2b 20 7a 5b 69 5d 20 2d 20 27 30 27  <3) + z[i] - '0'
18900 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
18910 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
18920 20 20 20 20 7d 0a 20 20 20 20 7a 5b 6a 5d 20 3d      }.    z[j] =
18930 20 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6a 3c   c;.  }.  if( j<
18940 69 20 29 20 7a 5b 6a 5d 20 3d 20 30 3b 0a 7d 0a  i ) z[j] = 0;.}.
18950 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
18960 65 20 76 61 6c 75 65 20 6f 66 20 61 20 68 65 78  e value of a hex
18970 61 64 65 63 69 6d 61 6c 20 64 69 67 69 74 2e 20  adecimal digit. 
18980 20 52 65 74 75 72 6e 20 2d 31 20 69 66 20 74 68   Return -1 if th
18990 65 20 69 6e 70 75 74 0a 2a 2a 20 69 73 20 6e 6f  e input.** is no
189a0 74 20 61 20 68 65 78 20 64 69 67 69 74 2e 0a 2a  t a hex digit..*
189b0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 68 65 78  /.static int hex
189c0 44 69 67 69 74 56 61 6c 75 65 28 63 68 61 72 20  DigitValue(char 
189d0 63 29 7b 0a 20 20 69 66 28 20 63 3e 3d 27 30 27  c){.  if( c>='0'
189e0 20 26 26 20 63 3c 3d 27 39 27 20 29 20 72 65 74   && c<='9' ) ret
189f0 75 72 6e 20 63 20 2d 20 27 30 27 3b 0a 20 20 69  urn c - '0';.  i
18a00 66 28 20 63 3e 3d 27 61 27 20 26 26 20 63 3c 3d  f( c>='a' && c<=
18a10 27 66 27 20 29 20 72 65 74 75 72 6e 20 63 20 2d  'f' ) return c -
18a20 20 27 61 27 20 2b 20 31 30 3b 0a 20 20 69 66 28   'a' + 10;.  if(
18a30 20 63 3e 3d 27 41 27 20 26 26 20 63 3c 3d 27 46   c>='A' && c<='F
18a40 27 20 29 20 72 65 74 75 72 6e 20 63 20 2d 20 27  ' ) return c - '
18a50 41 27 20 2b 20 31 30 3b 0a 20 20 72 65 74 75 72  A' + 10;.  retur
18a60 6e 20 2d 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  n -1;.}../*.** I
18a70 6e 74 65 72 70 72 65 74 20 7a 41 72 67 20 61 73  nterpret zArg as
18a80 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
18a90 65 2c 20 70 6f 73 73 69 62 6c 79 20 77 69 74 68  e, possibly with
18aa0 20 73 75 66 66 69 78 65 73 2e 0a 2a 2f 0a 73 74   suffixes..*/.st
18ab0 61 74 69 63 20 73 71 6c 69 74 65 33 5f 69 6e 74  atic sqlite3_int
18ac0 36 34 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28  64 integerValue(
18ad0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67  const char *zArg
18ae0 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  ){.  sqlite3_int
18af0 36 34 20 76 20 3d 20 30 3b 0a 20 20 73 74 61 74  64 v = 0;.  stat
18b00 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20  ic const struct 
18b10 7b 20 63 68 61 72 20 2a 7a 53 75 66 66 69 78 3b  { char *zSuffix;
18b20 20 69 6e 74 20 69 4d 75 6c 74 3b 20 7d 20 61 4d   int iMult; } aM
18b30 75 6c 74 5b 5d 20 3d 20 7b 0a 20 20 20 20 7b 20  ult[] = {.    { 
18b40 22 4b 69 42 22 2c 20 31 30 32 34 20 7d 2c 0a 20  "KiB", 1024 },. 
18b50 20 20 20 7b 20 22 4d 69 42 22 2c 20 31 30 32 34     { "MiB", 1024
18b60 2a 31 30 32 34 20 7d 2c 0a 20 20 20 20 7b 20 22  *1024 },.    { "
18b70 47 69 42 22 2c 20 31 30 32 34 2a 31 30 32 34 2a  GiB", 1024*1024*
18b80 31 30 32 34 20 7d 2c 0a 20 20 20 20 7b 20 22 4b  1024 },.    { "K
18b90 42 22 2c 20 20 31 30 30 30 20 7d 2c 0a 20 20 20  B",  1000 },.   
18ba0 20 7b 20 22 4d 42 22 2c 20 20 31 30 30 30 30 30   { "MB",  100000
18bb0 30 20 7d 2c 0a 20 20 20 20 7b 20 22 47 42 22 2c  0 },.    { "GB",
18bc0 20 20 31 30 30 30 30 30 30 30 30 30 20 7d 2c 0a    1000000000 },.
18bd0 20 20 20 20 7b 20 22 4b 22 2c 20 20 20 31 30 30      { "K",   100
18be0 30 20 7d 2c 0a 20 20 20 20 7b 20 22 4d 22 2c 20  0 },.    { "M", 
18bf0 20 20 31 30 30 30 30 30 30 20 7d 2c 0a 20 20 20    1000000 },.   
18c00 20 7b 20 22 47 22 2c 20 20 20 31 30 30 30 30 30   { "G",   100000
18c10 30 30 30 30 20 7d 2c 0a 20 20 7d 3b 0a 20 20 69  0000 },.  };.  i
18c20 6e 74 20 69 3b 0a 20 20 69 6e 74 20 69 73 4e 65  nt i;.  int isNe
18c30 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 7a 41 72  g = 0;.  if( zAr
18c40 67 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20  g[0]=='-' ){.   
18c50 20 69 73 4e 65 67 20 3d 20 31 3b 0a 20 20 20 20   isNeg = 1;.    
18c60 7a 41 72 67 2b 2b 3b 0a 20 20 7d 65 6c 73 65 20  zArg++;.  }else 
18c70 69 66 28 20 7a 41 72 67 5b 30 5d 3d 3d 27 2b 27  if( zArg[0]=='+'
18c80 20 29 7b 0a 20 20 20 20 7a 41 72 67 2b 2b 3b 0a   ){.    zArg++;.
18c90 20 20 7d 0a 20 20 69 66 28 20 7a 41 72 67 5b 30    }.  if( zArg[0
18ca0 5d 3d 3d 27 30 27 20 26 26 20 7a 41 72 67 5b 31  ]=='0' && zArg[1
18cb0 5d 3d 3d 27 78 27 20 29 7b 0a 20 20 20 20 69 6e  ]=='x' ){.    in
18cc0 74 20 78 3b 0a 20 20 20 20 7a 41 72 67 20 2b 3d  t x;.    zArg +=
18cd0 20 32 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28   2;.    while( (
18ce0 78 20 3d 20 68 65 78 44 69 67 69 74 56 61 6c 75  x = hexDigitValu
18cf0 65 28 7a 41 72 67 5b 30 5d 29 29 3e 3d 30 20 29  e(zArg[0]))>=0 )
18d00 7b 0a 20 20 20 20 20 20 76 20 3d 20 28 76 3c 3c  {.      v = (v<<
18d10 34 29 20 2b 20 78 3b 0a 20 20 20 20 20 20 7a 41  4) + x;.      zA
18d20 72 67 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  rg++;.    }.  }e
18d30 6c 73 65 7b 0a 20 20 20 20 77 68 69 6c 65 28 20  lse{.    while( 
18d40 49 73 44 69 67 69 74 28 7a 41 72 67 5b 30 5d 29  IsDigit(zArg[0])
18d50 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 76 2a   ){.      v = v*
18d60 31 30 20 2b 20 7a 41 72 67 5b 30 5d 20 2d 20 27  10 + zArg[0] - '
18d70 30 27 3b 0a 20 20 20 20 20 20 7a 41 72 67 2b 2b  0';.      zArg++
18d80 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66 6f  ;.    }.  }.  fo
18d90 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69  r(i=0; i<ArraySi
18da0 7a 65 28 61 4d 75 6c 74 29 3b 20 69 2b 2b 29 7b  ze(aMult); i++){
18db0 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
18dc0 5f 73 74 72 69 63 6d 70 28 61 4d 75 6c 74 5b 69  _stricmp(aMult[i
18dd0 5d 2e 7a 53 75 66 66 69 78 2c 20 7a 41 72 67 29  ].zSuffix, zArg)
18de0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 76 20 2a  ==0 ){.      v *
18df0 3d 20 61 4d 75 6c 74 5b 69 5d 2e 69 4d 75 6c 74  = aMult[i].iMult
18e00 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
18e10 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72     }.  }.  retur
18e20 6e 20 69 73 4e 65 67 3f 20 2d 76 20 3a 20 76 3b  n isNeg? -v : v;
18e30 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70  .}../*.** Interp
18e40 72 65 74 20 7a 41 72 67 20 61 73 20 65 69 74 68  ret zArg as eith
18e50 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  er an integer or
18e60 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
18e70 2e 20 20 52 65 74 75 72 6e 20 31 20 6f 72 20 30  .  Return 1 or 0
18e80 0a 2a 2a 20 66 6f 72 20 54 52 55 45 20 61 6e 64  .** for TRUE and
18e90 20 46 41 4c 53 45 2e 20 20 52 65 74 75 72 6e 20   FALSE.  Return 
18ea0 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
18eb0 65 20 69 66 20 61 70 70 72 6f 70 72 69 61 74 65  e if appropriate
18ec0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
18ed0 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 63 6f 6e  booleanValue(con
18ee0 73 74 20 63 68 61 72 20 2a 7a 41 72 67 29 7b 0a  st char *zArg){.
18ef0 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 7a    int i;.  if( z
18f00 41 72 67 5b 30 5d 3d 3d 27 30 27 20 26 26 20 7a  Arg[0]=='0' && z
18f10 41 72 67 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a 20  Arg[1]=='x' ){. 
18f20 20 20 20 66 6f 72 28 69 3d 32 3b 20 68 65 78 44     for(i=2; hexD
18f30 69 67 69 74 56 61 6c 75 65 28 7a 41 72 67 5b 69  igitValue(zArg[i
18f40 5d 29 3e 3d 30 3b 20 69 2b 2b 29 7b 7d 0a 20 20  ])>=0; i++){}.  
18f50 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6f 72 28 69  }else{.    for(i
18f60 3d 30 3b 20 7a 41 72 67 5b 69 5d 3e 3d 27 30 27  =0; zArg[i]>='0'
18f70 20 26 26 20 7a 41 72 67 5b 69 5d 3c 3d 27 39 27   && zArg[i]<='9'
18f80 3b 20 69 2b 2b 29 7b 7d 0a 20 20 7d 0a 20 20 69  ; i++){}.  }.  i
18f90 66 28 20 69 3e 30 20 26 26 20 7a 41 72 67 5b 69  f( i>0 && zArg[i
18fa0 5d 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 28 69  ]==0 ) return (i
18fb0 6e 74 29 28 69 6e 74 65 67 65 72 56 61 6c 75 65  nt)(integerValue
18fc0 28 7a 41 72 67 29 20 26 20 30 78 66 66 66 66 66  (zArg) & 0xfffff
18fd0 66 66 66 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  fff);.  if( sqli
18fe0 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 41 72 67  te3_stricmp(zArg
18ff0 2c 20 22 6f 6e 22 29 3d 3d 30 20 7c 7c 20 73 71  , "on")==0 || sq
19000 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 41  lite3_stricmp(zA
19010 72 67 2c 22 79 65 73 22 29 3d 3d 30 20 29 7b 0a  rg,"yes")==0 ){.
19020 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
19030 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f  }.  if( sqlite3_
19040 73 74 72 69 63 6d 70 28 7a 41 72 67 2c 20 22 6f  stricmp(zArg, "o
19050 66 66 22 29 3d 3d 30 20 7c 7c 20 73 71 6c 69 74  ff")==0 || sqlit
19060 65 33 5f 73 74 72 69 63 6d 70 28 7a 41 72 67 2c  e3_stricmp(zArg,
19070 22 6e 6f 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  "no")==0 ){.    
19080 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
19090 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
190a0 72 72 2c 20 22 45 52 52 4f 52 3a 20 4e 6f 74 20  rr, "ERROR: Not 
190b0 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  a boolean value:
190c0 20 5c 22 25 73 5c 22 2e 20 41 73 73 75 6d 69 6e   \"%s\". Assumin
190d0 67 20 5c 22 6e 6f 5c 22 2e 5c 6e 22 2c 0a 20 20  g \"no\".\n",.  
190e0 20 20 20 20 20 20 20 20 7a 41 72 67 29 3b 0a 20          zArg);. 
190f0 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a   return 0;.}../*
19100 0a 2a 2a 20 53 65 74 20 6f 72 20 63 6c 65 61 72  .** Set or clear
19110 20 61 20 73 68 65 6c 6c 20 66 6c 61 67 20 61 63   a shell flag ac
19120 63 6f 72 64 69 6e 67 20 74 6f 20 61 20 62 6f 6f  cording to a boo
19130 6c 65 61 6e 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73  lean value..*/.s
19140 74 61 74 69 63 20 76 6f 69 64 20 73 65 74 4f 72  tatic void setOr
19150 43 6c 65 61 72 46 6c 61 67 28 53 68 65 6c 6c 53  ClearFlag(ShellS
19160 74 61 74 65 20 2a 70 2c 20 75 6e 73 69 67 6e 65  tate *p, unsigne
19170 64 20 6d 46 6c 61 67 2c 20 63 6f 6e 73 74 20 63  d mFlag, const c
19180 68 61 72 20 2a 7a 41 72 67 29 7b 0a 20 20 69 66  har *zArg){.  if
19190 28 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 7a  ( booleanValue(z
191a0 41 72 67 29 20 29 7b 0a 20 20 20 20 53 68 65 6c  Arg) ){.    Shel
191b0 6c 53 65 74 46 6c 61 67 28 70 2c 20 6d 46 6c 61  lSetFlag(p, mFla
191c0 67 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  g);.  }else{.   
191d0 20 53 68 65 6c 6c 43 6c 65 61 72 46 6c 61 67 28   ShellClearFlag(
191e0 70 2c 20 6d 46 6c 61 67 29 3b 0a 20 20 7d 0a 7d  p, mFlag);.  }.}
191f0 0a 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 6e  ../*.** Close an
19200 20 6f 75 74 70 75 74 20 66 69 6c 65 2c 20 61 73   output file, as
19210 73 75 6d 69 6e 67 20 69 74 20 69 73 20 6e 6f 74  suming it is not
19220 20 73 74 64 65 72 72 20 6f 72 20 73 74 64 6f 75   stderr or stdou
19230 74 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  t.*/.static void
19240 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f   output_file_clo
19250 73 65 28 46 49 4c 45 20 2a 66 29 7b 0a 20 20 69  se(FILE *f){.  i
19260 66 28 20 66 20 26 26 20 66 21 3d 73 74 64 6f 75  f( f && f!=stdou
19270 74 20 26 26 20 66 21 3d 73 74 64 65 72 72 20 29  t && f!=stderr )
19280 20 66 63 6c 6f 73 65 28 66 29 3b 0a 7d 0a 0a 2f   fclose(f);.}../
19290 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 6f 70 65 6e  *.** Try to open
192a0 20 61 6e 20 6f 75 74 70 75 74 20 66 69 6c 65 2e   an output file.
192b0 20 20 20 54 68 65 20 6e 61 6d 65 73 20 22 73 74     The names "st
192c0 64 6f 75 74 22 20 61 6e 64 20 22 73 74 64 65 72  dout" and "stder
192d0 72 22 20 61 72 65 0a 2a 2a 20 72 65 63 6f 67 6e  r" are.** recogn
192e0 69 7a 65 64 20 61 6e 64 20 64 6f 20 74 68 65 20  ized and do the 
192f0 72 69 67 68 74 20 74 68 69 6e 67 2e 20 20 4e 55  right thing.  NU
19300 4c 4c 20 69 73 20 72 65 74 75 72 6e 65 64 20 69  LL is returned i
19310 66 20 74 68 65 20 6f 75 74 70 75 74 0a 2a 2a 20  f the output.** 
19320 66 69 6c 65 6e 61 6d 65 20 69 73 20 22 6f 66 66  filename is "off
19330 22 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 46 49 4c  "..*/.static FIL
19340 45 20 2a 6f 75 74 70 75 74 5f 66 69 6c 65 5f 6f  E *output_file_o
19350 70 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  pen(const char *
19360 7a 46 69 6c 65 29 7b 0a 20 20 46 49 4c 45 20 2a  zFile){.  FILE *
19370 66 3b 0a 20 20 69 66 28 20 73 74 72 63 6d 70 28  f;.  if( strcmp(
19380 7a 46 69 6c 65 2c 22 73 74 64 6f 75 74 22 29 3d  zFile,"stdout")=
19390 3d 30 20 29 7b 0a 20 20 20 20 66 20 3d 20 73 74  =0 ){.    f = st
193a0 64 6f 75 74 3b 0a 20 20 7d 65 6c 73 65 20 69 66  dout;.  }else if
193b0 28 20 73 74 72 63 6d 70 28 7a 46 69 6c 65 2c 20  ( strcmp(zFile, 
193c0 22 73 74 64 65 72 72 22 29 3d 3d 30 20 29 7b 0a  "stderr")==0 ){.
193d0 20 20 20 20 66 20 3d 20 73 74 64 65 72 72 3b 0a      f = stderr;.
193e0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
193f0 6d 70 28 7a 46 69 6c 65 2c 20 22 6f 66 66 22 29  mp(zFile, "off")
19400 3d 3d 30 20 29 7b 0a 20 20 20 20 66 20 3d 20 30  ==0 ){.    f = 0
19410 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66  ;.  }else{.    f
19420 20 3d 20 66 6f 70 65 6e 28 7a 46 69 6c 65 2c 20   = fopen(zFile, 
19430 22 77 62 22 29 3b 0a 20 20 20 20 69 66 28 20 66  "wb");.    if( f
19440 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66  ==0 ){.      utf
19450 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
19460 20 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20   "Error: cannot 
19470 6f 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20  open \"%s\"\n", 
19480 7a 46 69 6c 65 29 3b 0a 20 20 20 20 7d 0a 20 20  zFile);.    }.  
19490 7d 0a 20 20 72 65 74 75 72 6e 20 66 3b 0a 7d 0a  }.  return f;.}.
194a0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
194b0 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 29  LITE_UNTESTABLE)
194c0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
194d0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 29  LITE_OMIT_TRACE)
194e0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
194f0 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
19500 47 5f 50 4f 49 4e 54 29 0a 2f 2a 0a 2a 2a 20 41  G_POINT)./*.** A
19510 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 68 61 6e   routine for han
19520 64 6c 69 6e 67 20 6f 75 74 70 75 74 20 66 72 6f  dling output fro
19530 6d 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28  m sqlite3_trace(
19540 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  )..*/.static int
19550 20 73 71 6c 5f 74 72 61 63 65 5f 63 61 6c 6c 62   sql_trace_callb
19560 61 63 6b 28 0a 20 20 75 6e 73 69 67 6e 65 64 20  ack(.  unsigned 
19570 6d 54 79 70 65 2c 0a 20 20 76 6f 69 64 20 2a 70  mType,.  void *p
19580 41 72 67 2c 0a 20 20 76 6f 69 64 20 2a 70 50 2c  Arg,.  void *pP,
19590 0a 20 20 76 6f 69 64 20 2a 70 58 0a 29 7b 0a 20  .  void *pX.){. 
195a0 20 46 49 4c 45 20 2a 66 20 3d 20 28 46 49 4c 45   FILE *f = (FILE
195b0 2a 29 70 41 72 67 3b 0a 20 20 55 4e 55 53 45 44  *)pArg;.  UNUSED
195c0 5f 50 41 52 41 4d 45 54 45 52 28 6d 54 79 70 65  _PARAMETER(mType
195d0 29 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41  );.  UNUSED_PARA
195e0 4d 45 54 45 52 28 70 50 29 3b 0a 20 20 69 66 28  METER(pP);.  if(
195f0 20 66 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20   f ){.    const 
19600 63 68 61 72 20 2a 7a 20 3d 20 28 63 6f 6e 73 74  char *z = (const
19610 20 63 68 61 72 2a 29 70 58 3b 0a 20 20 20 20 69   char*)pX;.    i
19620 6e 74 20 69 20 3d 20 28 69 6e 74 29 73 74 72 6c  nt i = (int)strl
19630 65 6e 28 7a 29 3b 0a 20 20 20 20 77 68 69 6c 65  en(z);.    while
19640 28 20 69 3e 30 20 26 26 20 7a 5b 69 2d 31 5d 3d  ( i>0 && z[i-1]=
19650 3d 27 3b 27 20 29 7b 20 69 2d 2d 3b 20 7d 0a 20  =';' ){ i--; }. 
19660 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 66     utf8_printf(f
19670 2c 20 22 25 2e 2a 73 3b 5c 6e 22 2c 20 69 2c 20  , "%.*s;\n", i, 
19680 7a 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  z);.  }.  return
19690 20 30 3b 0a 7d 0a 23 65 6e 64 69 66 0a 23 65 6e   0;.}.#endif.#en
196a0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6e 6f 2d  dif../*.** A no-
196b0 6f 70 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20  op routine that 
196c0 72 75 6e 73 20 77 69 74 68 20 74 68 65 20 22 2e  runs with the ".
196d0 62 72 65 61 6b 70 6f 69 6e 74 22 20 64 6f 63 2d  breakpoint" doc-
196e0 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 69  command.  This i
196f0 73 0a 2a 2a 20 61 20 75 73 65 66 75 6c 20 73 70  s.** a useful sp
19700 6f 74 20 74 6f 20 73 65 74 20 61 20 64 65 62 75  ot to set a debu
19710 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e  gger breakpoint.
19720 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
19730 74 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 28  test_breakpoint(
19740 76 6f 69 64 29 7b 0a 20 20 73 74 61 74 69 63 20  void){.  static 
19750 69 6e 74 20 6e 43 61 6c 6c 20 3d 20 30 3b 0a 20  int nCall = 0;. 
19760 20 6e 43 61 6c 6c 2b 2b 3b 0a 7d 0a 0a 2f 2a 0a   nCall++;.}../*.
19770 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 75 73 65  ** An object use
19780 64 20 74 6f 20 72 65 61 64 20 61 20 43 53 56 20  d to read a CSV 
19790 61 6e 64 20 6f 74 68 65 72 20 66 69 6c 65 73 20  and other files 
197a0 66 6f 72 20 69 6d 70 6f 72 74 2e 0a 2a 2f 0a 74  for import..*/.t
197b0 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6d  ypedef struct Im
197c0 70 6f 72 74 43 74 78 20 49 6d 70 6f 72 74 43 74  portCtx ImportCt
197d0 78 3b 0a 73 74 72 75 63 74 20 49 6d 70 6f 72 74  x;.struct Import
197e0 43 74 78 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  Ctx {.  const ch
197f0 61 72 20 2a 7a 46 69 6c 65 3b 20 20 2f 2a 20 4e  ar *zFile;  /* N
19800 61 6d 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  ame of the input
19810 20 66 69 6c 65 20 2a 2f 0a 20 20 46 49 4c 45 20   file */.  FILE 
19820 2a 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  *in;           /
19830 2a 20 52 65 61 64 20 74 68 65 20 43 53 56 20 74  * Read the CSV t
19840 65 78 74 20 66 72 6f 6d 20 74 68 69 73 20 69 6e  ext from this in
19850 70 75 74 20 73 74 72 65 61 6d 20 2a 2f 0a 20 20  put stream */.  
19860 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20  char *z;        
19870 20 20 20 20 2f 2a 20 41 63 63 75 6d 75 6c 61 74      /* Accumulat
19880 65 64 20 74 65 78 74 20 66 6f 72 20 61 20 66 69  ed text for a fi
19890 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20  eld */.  int n; 
198a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
198b0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
198c0 69 6e 20 7a 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  in z */.  int nA
198d0 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  lloc;         /*
198e0 20 53 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   Space allocated
198f0 20 66 6f 72 20 7a 5b 5d 20 2a 2f 0a 20 20 69 6e   for z[] */.  in
19900 74 20 6e 4c 69 6e 65 3b 20 20 20 20 20 20 20 20  t nLine;        
19910 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6c 69 6e    /* Current lin
19920 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 69 6e  e number */.  in
19930 74 20 62 4e 6f 74 46 69 72 73 74 3b 20 20 20 20  t bNotFirst;    
19940 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 6e 65    /* True if one
19950 20 6f 72 20 6d 6f 72 65 20 62 79 74 65 73 20 61   or more bytes a
19960 6c 72 65 61 64 79 20 72 65 61 64 20 2a 2f 0a 20  lready read */. 
19970 20 69 6e 74 20 63 54 65 72 6d 3b 20 20 20 20 20   int cTerm;     
19980 20 20 20 20 20 2f 2a 20 43 68 61 72 61 63 74 65       /* Characte
19990 72 20 74 68 61 74 20 74 65 72 6d 69 6e 61 74 65  r that terminate
199a0 64 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  d the most recen
199b0 74 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74  t field */.  int
199c0 20 63 43 6f 6c 53 65 70 3b 20 20 20 20 20 20 20   cColSep;       
199d0 20 2f 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 20 73   /* The column s
199e0 65 70 61 72 61 74 6f 72 20 63 68 61 72 61 63 74  eparator charact
199f0 65 72 2e 20 20 28 55 73 75 61 6c 6c 79 20 22 2c  er.  (Usually ",
19a00 22 29 20 2a 2f 0a 20 20 69 6e 74 20 63 52 6f 77  ") */.  int cRow
19a10 53 65 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  Sep;        /* T
19a20 68 65 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72  he row separator
19a30 20 63 68 61 72 61 63 74 65 72 2e 20 20 28 55 73   character.  (Us
19a40 75 61 6c 6c 79 20 22 5c 6e 22 29 20 2a 2f 0a 7d  ually "\n") */.}
19a50 3b 0a 0a 2f 2a 20 41 70 70 65 6e 64 20 61 20 73  ;../* Append a s
19a60 69 6e 67 6c 65 20 62 79 74 65 20 74 6f 20 7a 5b  ingle byte to z[
19a70 5d 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ] */.static void
19a80 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63   import_append_c
19a90 68 61 72 28 49 6d 70 6f 72 74 43 74 78 20 2a 70  har(ImportCtx *p
19aa0 2c 20 69 6e 74 20 63 29 7b 0a 20 20 69 66 28 20  , int c){.  if( 
19ab0 70 2d 3e 6e 2b 31 3e 3d 70 2d 3e 6e 41 6c 6c 6f  p->n+1>=p->nAllo
19ac0 63 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 41 6c 6c  c ){.    p->nAll
19ad0 6f 63 20 2b 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 20  oc += p->nAlloc 
19ae0 2b 20 31 30 30 3b 0a 20 20 20 20 70 2d 3e 7a 20  + 100;.    p->z 
19af0 3d 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f  = sqlite3_reallo
19b00 63 36 34 28 70 2d 3e 7a 2c 20 70 2d 3e 6e 41 6c  c64(p->z, p->nAl
19b10 6c 6f 63 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  loc);.    if( p-
19b20 3e 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  >z==0 ){.      r
19b30 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
19b40 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  , "out of memory
19b50 5c 6e 22 29 3b 0a 20 20 20 20 20 20 65 78 69 74  \n");.      exit
19b60 28 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  (1);.    }.  }. 
19b70 20 70 2d 3e 7a 5b 70 2d 3e 6e 2b 2b 5d 20 3d 20   p->z[p->n++] = 
19b80 28 63 68 61 72 29 63 3b 0a 7d 0a 0a 2f 2a 20 52  (char)c;.}../* R
19b90 65 61 64 20 61 20 73 69 6e 67 6c 65 20 66 69 65  ead a single fie
19ba0 6c 64 20 6f 66 20 43 53 56 20 74 65 78 74 2e 20  ld of CSV text. 
19bb0 20 43 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68   Compatible with
19bc0 20 72 66 63 34 31 38 30 20 61 6e 64 20 65 78 74   rfc4180 and ext
19bd0 65 6e 64 65 64 0a 2a 2a 20 77 69 74 68 20 74 68  ended.** with th
19be0 65 20 6f 70 74 69 6f 6e 20 6f 66 20 68 61 76 69  e option of havi
19bf0 6e 67 20 61 20 73 65 70 61 72 61 74 6f 72 20 6f  ng a separator o
19c00 74 68 65 72 20 74 68 61 6e 20 22 2c 22 2e 0a 2a  ther than ","..*
19c10 2a 0a 2a 2a 20 20 20 2b 20 20 49 6e 70 75 74 20  *.**   +  Input 
19c20 63 6f 6d 65 73 20 66 72 6f 6d 20 70 2d 3e 69 6e  comes from p->in
19c30 2e 0a 2a 2a 20 20 20 2b 20 20 53 74 6f 72 65 20  ..**   +  Store 
19c40 72 65 73 75 6c 74 73 20 69 6e 20 70 2d 3e 7a 20  results in p->z 
19c50 6f 66 20 6c 65 6e 67 74 68 20 70 2d 3e 6e 2e 20  of length p->n. 
19c60 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 70   Space to hold p
19c70 2d 3e 7a 20 63 6f 6d 65 73 0a 2a 2a 20 20 20 20  ->z comes.**    
19c80 20 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d    from sqlite3_m
19c90 61 6c 6c 6f 63 36 34 28 29 2e 0a 2a 2a 20 20 20  alloc64()..**   
19ca0 2b 20 20 55 73 65 20 70 2d 3e 63 53 65 70 20 61  +  Use p->cSep a
19cb0 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 73 65 70  s the column sep
19cc0 61 72 61 74 6f 72 2e 20 20 54 68 65 20 64 65 66  arator.  The def
19cd0 61 75 6c 74 20 69 73 20 22 2c 22 2e 0a 2a 2a 20  ault is ","..** 
19ce0 20 20 2b 20 20 55 73 65 20 70 2d 3e 72 53 65 70    +  Use p->rSep
19cf0 20 61 73 20 74 68 65 20 72 6f 77 20 73 65 70 61   as the row sepa
19d00 72 61 74 6f 72 2e 20 20 54 68 65 20 64 65 66 61  rator.  The defa
19d10 75 6c 74 20 69 73 20 22 5c 6e 22 2e 0a 2a 2a 20  ult is "\n"..** 
19d20 20 20 2b 20 20 4b 65 65 70 20 74 72 61 63 6b 20    +  Keep track 
19d30 6f 66 20 74 68 65 20 6c 69 6e 65 20 6e 75 6d 62  of the line numb
19d40 65 72 20 69 6e 20 70 2d 3e 6e 4c 69 6e 65 2e 0a  er in p->nLine..
19d50 2a 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 74 68  **   +  Store th
19d60 65 20 63 68 61 72 61 63 74 65 72 20 74 68 61 74  e character that
19d70 20 74 65 72 6d 69 6e 61 74 65 73 20 74 68 65 20   terminates the 
19d80 66 69 65 6c 64 20 69 6e 20 70 2d 3e 63 54 65 72  field in p->cTer
19d90 6d 2e 20 20 53 74 6f 72 65 0a 2a 2a 20 20 20 20  m.  Store.**    
19da0 20 20 45 4f 46 20 6f 6e 20 65 6e 64 2d 6f 66 2d    EOF on end-of-
19db0 66 69 6c 65 2e 0a 2a 2a 20 20 20 2b 20 20 52 65  file..**   +  Re
19dc0 70 6f 72 74 20 73 79 6e 74 61 78 20 65 72 72 6f  port syntax erro
19dd0 72 73 20 6f 6e 20 73 74 64 65 72 72 0a 2a 2f 0a  rs on stderr.*/.
19de0 73 74 61 74 69 63 20 63 68 61 72 20 2a 53 51 4c  static char *SQL
19df0 49 54 45 5f 43 44 45 43 4c 20 63 73 76 5f 72 65  ITE_CDECL csv_re
19e00 61 64 5f 6f 6e 65 5f 66 69 65 6c 64 28 49 6d 70  ad_one_field(Imp
19e10 6f 72 74 43 74 78 20 2a 70 29 7b 0a 20 20 69 6e  ortCtx *p){.  in
19e20 74 20 63 3b 0a 20 20 69 6e 74 20 63 53 65 70 20  t c;.  int cSep 
19e30 3d 20 70 2d 3e 63 43 6f 6c 53 65 70 3b 0a 20 20  = p->cColSep;.  
19e40 69 6e 74 20 72 53 65 70 20 3d 20 70 2d 3e 63 52  int rSep = p->cR
19e50 6f 77 53 65 70 3b 0a 20 20 70 2d 3e 6e 20 3d 20  owSep;.  p->n = 
19e60 30 3b 0a 20 20 63 20 3d 20 66 67 65 74 63 28 70  0;.  c = fgetc(p
19e70 2d 3e 69 6e 29 3b 0a 20 20 69 66 28 20 63 3d 3d  ->in);.  if( c==
19e80 45 4f 46 20 7c 7c 20 73 65 65 6e 49 6e 74 65 72  EOF || seenInter
19e90 72 75 70 74 20 29 7b 0a 20 20 20 20 70 2d 3e 63  rupt ){.    p->c
19ea0 54 65 72 6d 20 3d 20 45 4f 46 3b 0a 20 20 20 20  Term = EOF;.    
19eb0 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
19ec0 69 66 28 20 63 3d 3d 27 22 27 20 29 7b 0a 20 20  if( c=='"' ){.  
19ed0 20 20 69 6e 74 20 70 63 2c 20 70 70 63 3b 0a 20    int pc, ppc;. 
19ee0 20 20 20 69 6e 74 20 73 74 61 72 74 4c 69 6e 65     int startLine
19ef0 20 3d 20 70 2d 3e 6e 4c 69 6e 65 3b 0a 20 20 20   = p->nLine;.   
19f00 20 69 6e 74 20 63 51 75 6f 74 65 20 3d 20 63 3b   int cQuote = c;
19f10 0a 20 20 20 20 70 63 20 3d 20 70 70 63 20 3d 20  .    pc = ppc = 
19f20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 31 20  0;.    while( 1 
19f30 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 66 67 65  ){.      c = fge
19f40 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 20 20 20  tc(p->in);.     
19f50 20 69 66 28 20 63 3d 3d 72 53 65 70 20 29 20 70   if( c==rSep ) p
19f60 2d 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20 20  ->nLine++;.     
19f70 20 69 66 28 20 63 3d 3d 63 51 75 6f 74 65 20 29   if( c==cQuote )
19f80 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 63  {.        if( pc
19f90 3d 3d 63 51 75 6f 74 65 20 29 7b 0a 20 20 20 20  ==cQuote ){.    
19fa0 20 20 20 20 20 20 70 63 20 3d 20 30 3b 0a 20 20        pc = 0;.  
19fb0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
19fc0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
19fd0 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 63    }.      if( (c
19fe0 3d 3d 63 53 65 70 20 26 26 20 70 63 3d 3d 63 51  ==cSep && pc==cQ
19ff0 75 6f 74 65 29 0a 20 20 20 20 20 20 20 7c 7c 20  uote).       || 
1a000 28 63 3d 3d 72 53 65 70 20 26 26 20 70 63 3d 3d  (c==rSep && pc==
1a010 63 51 75 6f 74 65 29 0a 20 20 20 20 20 20 20 7c  cQuote).       |
1a020 7c 20 28 63 3d 3d 72 53 65 70 20 26 26 20 70 63  | (c==rSep && pc
1a030 3d 3d 27 5c 72 27 20 26 26 20 70 70 63 3d 3d 63  =='\r' && ppc==c
1a040 51 75 6f 74 65 29 0a 20 20 20 20 20 20 20 7c 7c  Quote).       ||
1a050 20 28 63 3d 3d 45 4f 46 20 26 26 20 70 63 3d 3d   (c==EOF && pc==
1a060 63 51 75 6f 74 65 29 0a 20 20 20 20 20 20 29 7b  cQuote).      ){
1a070 0a 20 20 20 20 20 20 20 20 64 6f 7b 20 70 2d 3e  .        do{ p->
1a080 6e 2d 2d 3b 20 7d 77 68 69 6c 65 28 20 70 2d 3e  n--; }while( p->
1a090 7a 5b 70 2d 3e 6e 5d 21 3d 63 51 75 6f 74 65 20  z[p->n]!=cQuote 
1a0a0 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 63 54  );.        p->cT
1a0b0 65 72 6d 20 3d 20 63 3b 0a 20 20 20 20 20 20 20  erm = c;.       
1a0c0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
1a0d0 20 20 20 20 20 20 69 66 28 20 70 63 3d 3d 63 51        if( pc==cQ
1a0e0 75 6f 74 65 20 26 26 20 63 21 3d 27 5c 72 27 20  uote && c!='\r' 
1a0f0 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
1a100 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1a110 25 73 3a 25 64 3a 20 75 6e 65 73 63 61 70 65 64  %s:%d: unescaped
1a120 20 25 63 20 63 68 61 72 61 63 74 65 72 5c 6e 22   %c character\n"
1a130 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1a140 20 20 70 2d 3e 7a 46 69 6c 65 2c 20 70 2d 3e 6e    p->zFile, p->n
1a150 4c 69 6e 65 2c 20 63 51 75 6f 74 65 29 3b 0a 20  Line, cQuote);. 
1a160 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
1a170 20 63 3d 3d 45 4f 46 20 29 7b 0a 20 20 20 20 20   c==EOF ){.     
1a180 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
1a190 74 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20 75  tderr, "%s:%d: u
1a1a0 6e 74 65 72 6d 69 6e 61 74 65 64 20 25 63 2d 71  nterminated %c-q
1a1b0 75 6f 74 65 64 20 66 69 65 6c 64 5c 6e 22 2c 0a  uoted field\n",.
1a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1d0 70 2d 3e 7a 46 69 6c 65 2c 20 73 74 61 72 74 4c  p->zFile, startL
1a1e0 69 6e 65 2c 20 63 51 75 6f 74 65 29 3b 0a 20 20  ine, cQuote);.  
1a1f0 20 20 20 20 20 20 70 2d 3e 63 54 65 72 6d 20 3d        p->cTerm =
1a200 20 63 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61   c;.        brea
1a210 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
1a220 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63   import_append_c
1a230 68 61 72 28 70 2c 20 63 29 3b 0a 20 20 20 20 20  har(p, c);.     
1a240 20 70 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20   ppc = pc;.     
1a250 20 70 63 20 3d 20 63 3b 0a 20 20 20 20 7d 0a 20   pc = c;.    }. 
1a260 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 49   }else{.    /* I
1a270 66 20 74 68 69 73 20 69 73 20 74 68 65 20 66 69  f this is the fi
1a280 72 73 74 20 66 69 65 6c 64 20 62 65 69 6e 67 20  rst field being 
1a290 70 61 72 73 65 64 20 61 6e 64 20 69 74 20 62 65  parsed and it be
1a2a0 67 69 6e 73 20 77 69 74 68 20 74 68 65 0a 20 20  gins with the.  
1a2b0 20 20 2a 2a 20 55 54 46 2d 38 20 42 4f 4d 20 20    ** UTF-8 BOM  
1a2c0 28 30 78 45 46 20 42 42 20 42 46 29 20 74 68 65  (0xEF BB BF) the
1a2d0 6e 20 73 6b 69 70 20 74 68 65 20 42 4f 4d 20 2a  n skip the BOM *
1a2e0 2f 0a 20 20 20 20 69 66 28 20 28 63 26 30 78 66  /.    if( (c&0xf
1a2f0 66 29 3d 3d 30 78 65 66 20 26 26 20 70 2d 3e 62  f)==0xef && p->b
1a300 4e 6f 74 46 69 72 73 74 3d 3d 30 20 29 7b 0a 20  NotFirst==0 ){. 
1a310 20 20 20 20 20 69 6d 70 6f 72 74 5f 61 70 70 65       import_appe
1a320 6e 64 5f 63 68 61 72 28 70 2c 20 63 29 3b 0a 20  nd_char(p, c);. 
1a330 20 20 20 20 20 63 20 3d 20 66 67 65 74 63 28 70       c = fgetc(p
1a340 2d 3e 69 6e 29 3b 0a 20 20 20 20 20 20 69 66 28  ->in);.      if(
1a350 20 28 63 26 30 78 66 66 29 3d 3d 30 78 62 62 20   (c&0xff)==0xbb 
1a360 29 7b 0a 20 20 20 20 20 20 20 20 69 6d 70 6f 72  ){.        impor
1a370 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 70 2c  t_append_char(p,
1a380 20 63 29 3b 0a 20 20 20 20 20 20 20 20 63 20 3d   c);.        c =
1a390 20 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20   fgetc(p->in);. 
1a3a0 20 20 20 20 20 20 20 69 66 28 20 28 63 26 30 78         if( (c&0x
1a3b0 66 66 29 3d 3d 30 78 62 66 20 29 7b 0a 20 20 20  ff)==0xbf ){.   
1a3c0 20 20 20 20 20 20 20 70 2d 3e 62 4e 6f 74 46 69         p->bNotFi
1a3d0 72 73 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  rst = 1;.       
1a3e0 20 20 20 70 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20     p->n = 0;.   
1a3f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 73         return cs
1a400 76 5f 72 65 61 64 5f 6f 6e 65 5f 66 69 65 6c 64  v_read_one_field
1a410 28 70 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  (p);.        }. 
1a420 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
1a430 20 77 68 69 6c 65 28 20 63 21 3d 45 4f 46 20 26   while( c!=EOF &
1a440 26 20 63 21 3d 63 53 65 70 20 26 26 20 63 21 3d  & c!=cSep && c!=
1a450 72 53 65 70 20 29 7b 0a 20 20 20 20 20 20 69 6d  rSep ){.      im
1a460 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72  port_append_char
1a470 28 70 2c 20 63 29 3b 0a 20 20 20 20 20 20 63 20  (p, c);.      c 
1a480 3d 20 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a  = fgetc(p->in);.
1a490 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 63 3d      }.    if( c=
1a4a0 3d 72 53 65 70 20 29 7b 0a 20 20 20 20 20 20 70  =rSep ){.      p
1a4b0 2d 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20 20  ->nLine++;.     
1a4c0 20 69 66 28 20 70 2d 3e 6e 3e 30 20 26 26 20 70   if( p->n>0 && p
1a4d0 2d 3e 7a 5b 70 2d 3e 6e 2d 31 5d 3d 3d 27 5c 72  ->z[p->n-1]=='\r
1a4e0 27 20 29 20 70 2d 3e 6e 2d 2d 3b 0a 20 20 20 20  ' ) p->n--;.    
1a4f0 7d 0a 20 20 20 20 70 2d 3e 63 54 65 72 6d 20 3d  }.    p->cTerm =
1a500 20 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 2d   c;.  }.  if( p-
1a510 3e 7a 20 29 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 20  >z ) p->z[p->n] 
1a520 3d 20 30 3b 0a 20 20 70 2d 3e 62 4e 6f 74 46 69  = 0;.  p->bNotFi
1a530 72 73 74 20 3d 20 31 3b 0a 20 20 72 65 74 75 72  rst = 1;.  retur
1a540 6e 20 70 2d 3e 7a 3b 0a 7d 0a 0a 2f 2a 20 52 65  n p->z;.}../* Re
1a550 61 64 20 61 20 73 69 6e 67 6c 65 20 66 69 65 6c  ad a single fiel
1a560 64 20 6f 66 20 41 53 43 49 49 20 64 65 6c 69 6d  d of ASCII delim
1a570 69 74 65 64 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a  ited text..**.**
1a580 20 20 20 2b 20 20 49 6e 70 75 74 20 63 6f 6d 65     +  Input come
1a590 73 20 66 72 6f 6d 20 70 2d 3e 69 6e 2e 0a 2a 2a  s from p->in..**
1a5a0 20 20 20 2b 20 20 53 74 6f 72 65 20 72 65 73 75     +  Store resu
1a5b0 6c 74 73 20 69 6e 20 70 2d 3e 7a 20 6f 66 20 6c  lts in p->z of l
1a5c0 65 6e 67 74 68 20 70 2d 3e 6e 2e 20 20 53 70 61  ength p->n.  Spa
1a5d0 63 65 20 74 6f 20 68 6f 6c 64 20 70 2d 3e 7a 20  ce to hold p->z 
1a5e0 63 6f 6d 65 73 0a 2a 2a 20 20 20 20 20 20 66 72  comes.**      fr
1a5f0 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
1a600 63 36 34 28 29 2e 0a 2a 2a 20 20 20 2b 20 20 55  c64()..**   +  U
1a610 73 65 20 70 2d 3e 63 53 65 70 20 61 73 20 74 68  se p->cSep as th
1a620 65 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74  e column separat
1a630 6f 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74  or.  The default
1a640 20 69 73 20 22 5c 78 31 46 22 2e 0a 2a 2a 20 20   is "\x1F"..**  
1a650 20 2b 20 20 55 73 65 20 70 2d 3e 72 53 65 70 20   +  Use p->rSep 
1a660 61 73 20 74 68 65 20 72 6f 77 20 73 65 70 61 72  as the row separ
1a670 61 74 6f 72 2e 20 20 54 68 65 20 64 65 66 61 75  ator.  The defau
1a680 6c 74 20 69 73 20 22 5c 78 31 45 22 2e 0a 2a 2a  lt is "\x1E"..**
1a690 20 20 20 2b 20 20 4b 65 65 70 20 74 72 61 63 6b     +  Keep track
1a6a0 20 6f 66 20 74 68 65 20 72 6f 77 20 6e 75 6d 62   of the row numb
1a6b0 65 72 20 69 6e 20 70 2d 3e 6e 4c 69 6e 65 2e 0a  er in p->nLine..
1a6c0 2a 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 74 68  **   +  Store th
1a6d0 65 20 63 68 61 72 61 63 74 65 72 20 74 68 61 74  e character that
1a6e0 20 74 65 72 6d 69 6e 61 74 65 73 20 74 68 65 20   terminates the 
1a6f0 66 69 65 6c 64 20 69 6e 20 70 2d 3e 63 54 65 72  field in p->cTer
1a700 6d 2e 20 20 53 74 6f 72 65 0a 2a 2a 20 20 20 20  m.  Store.**    
1a710 20 20 45 4f 46 20 6f 6e 20 65 6e 64 2d 6f 66 2d    EOF on end-of-
1a720 66 69 6c 65 2e 0a 2a 2a 20 20 20 2b 20 20 52 65  file..**   +  Re
1a730 70 6f 72 74 20 73 79 6e 74 61 78 20 65 72 72 6f  port syntax erro
1a740 72 73 20 6f 6e 20 73 74 64 65 72 72 0a 2a 2f 0a  rs on stderr.*/.
1a750 73 74 61 74 69 63 20 63 68 61 72 20 2a 53 51 4c  static char *SQL
1a760 49 54 45 5f 43 44 45 43 4c 20 61 73 63 69 69 5f  ITE_CDECL ascii_
1a770 72 65 61 64 5f 6f 6e 65 5f 66 69 65 6c 64 28 49  read_one_field(I
1a780 6d 70 6f 72 74 43 74 78 20 2a 70 29 7b 0a 20 20  mportCtx *p){.  
1a790 69 6e 74 20 63 3b 0a 20 20 69 6e 74 20 63 53 65  int c;.  int cSe
1a7a0 70 20 3d 20 70 2d 3e 63 43 6f 6c 53 65 70 3b 0a  p = p->cColSep;.
1a7b0 20 20 69 6e 74 20 72 53 65 70 20 3d 20 70 2d 3e    int rSep = p->
1a7c0 63 52 6f 77 53 65 70 3b 0a 20 20 70 2d 3e 6e 20  cRowSep;.  p->n 
1a7d0 3d 20 30 3b 0a 20 20 63 20 3d 20 66 67 65 74 63  = 0;.  c = fgetc
1a7e0 28 70 2d 3e 69 6e 29 3b 0a 20 20 69 66 28 20 63  (p->in);.  if( c
1a7f0 3d 3d 45 4f 46 20 7c 7c 20 73 65 65 6e 49 6e 74  ==EOF || seenInt
1a800 65 72 72 75 70 74 20 29 7b 0a 20 20 20 20 70 2d  errupt ){.    p-
1a810 3e 63 54 65 72 6d 20 3d 20 45 4f 46 3b 0a 20 20  >cTerm = EOF;.  
1a820 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
1a830 20 20 77 68 69 6c 65 28 20 63 21 3d 45 4f 46 20    while( c!=EOF 
1a840 26 26 20 63 21 3d 63 53 65 70 20 26 26 20 63 21  && c!=cSep && c!
1a850 3d 72 53 65 70 20 29 7b 0a 20 20 20 20 69 6d 70  =rSep ){.    imp
1a860 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28  ort_append_char(
1a870 70 2c 20 63 29 3b 0a 20 20 20 20 63 20 3d 20 66  p, c);.    c = f
1a880 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 7d  getc(p->in);.  }
1a890 0a 20 20 69 66 28 20 63 3d 3d 72 53 65 70 20 29  .  if( c==rSep )
1a8a0 7b 0a 20 20 20 20 70 2d 3e 6e 4c 69 6e 65 2b 2b  {.    p->nLine++
1a8b0 3b 0a 20 20 7d 0a 20 20 70 2d 3e 63 54 65 72 6d  ;.  }.  p->cTerm
1a8c0 20 3d 20 63 3b 0a 20 20 69 66 28 20 70 2d 3e 7a   = c;.  if( p->z
1a8d0 20 29 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 20 3d 20   ) p->z[p->n] = 
1a8e0 30 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 7a  0;.  return p->z
1a8f0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  ;.}../*.** Try t
1a900 6f 20 74 72 61 6e 73 66 65 72 20 64 61 74 61 20  o transfer data 
1a910 66 6f 72 20 74 61 62 6c 65 20 7a 54 61 62 6c 65  for table zTable
1a920 2e 20 20 49 66 20 61 6e 20 65 72 72 6f 72 20 69  .  If an error i
1a930 73 20 73 65 65 6e 20 77 68 69 6c 65 0a 2a 2a 20  s seen while.** 
1a940 6d 6f 76 69 6e 67 20 66 6f 72 77 61 72 64 2c 20  moving forward, 
1a950 74 72 79 20 74 6f 20 67 6f 20 62 61 63 6b 77 61  try to go backwa
1a960 72 64 73 2e 20 20 54 68 65 20 62 61 63 6b 77 61  rds.  The backwa
1a970 72 64 73 20 6d 6f 76 65 6d 65 6e 74 20 77 6f 6e  rds movement won
1a980 27 74 0a 2a 2a 20 77 6f 72 6b 20 66 6f 72 20 57  't.** work for W
1a990 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62  ITHOUT ROWID tab
1a9a0 6c 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  les..*/.static v
1a9b0 6f 69 64 20 74 72 79 54 6f 43 6c 6f 6e 65 44 61  oid tryToCloneDa
1a9c0 74 61 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65  ta(.  ShellState
1a9d0 20 2a 70 2c 0a 20 20 73 71 6c 69 74 65 33 20 2a   *p,.  sqlite3 *
1a9e0 6e 65 77 44 62 2c 0a 20 20 63 6f 6e 73 74 20 63  newDb,.  const c
1a9f0 68 61 72 20 2a 7a 54 61 62 6c 65 0a 29 7b 0a 20  har *zTable.){. 
1aa00 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
1aa10 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 73 71 6c  Query = 0;.  sql
1aa20 69 74 65 33 5f 73 74 6d 74 20 2a 70 49 6e 73 65  ite3_stmt *pInse
1aa30 72 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a  rt = 0;.  char *
1aa40 7a 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 63 68  zQuery = 0;.  ch
1aa50 61 72 20 2a 7a 49 6e 73 65 72 74 20 3d 20 30 3b  ar *zInsert = 0;
1aa60 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74  .  int rc;.  int
1aa70 20 69 2c 20 6a 2c 20 6e 3b 0a 20 20 69 6e 74 20   i, j, n;.  int 
1aa80 6e 54 61 62 6c 65 20 3d 20 28 69 6e 74 29 73 74  nTable = (int)st
1aa90 72 6c 65 6e 28 7a 54 61 62 6c 65 29 3b 0a 20 20  rlen(zTable);.  
1aaa0 69 6e 74 20 6b 20 3d 20 30 3b 0a 20 20 69 6e 74  int k = 0;.  int
1aab0 20 63 6e 74 20 3d 20 30 3b 0a 20 20 63 6f 6e 73   cnt = 0;.  cons
1aac0 74 20 69 6e 74 20 73 70 69 6e 52 61 74 65 20 3d  t int spinRate =
1aad0 20 31 30 30 30 30 3b 0a 0a 20 20 7a 51 75 65 72   10000;..  zQuer
1aae0 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  y = sqlite3_mpri
1aaf0 6e 74 66 28 22 53 45 4c 45 43 54 20 2a 20 46 52  ntf("SELECT * FR
1ab00 4f 4d 20 5c 22 25 77 5c 22 22 2c 20 7a 54 61 62  OM \"%w\"", zTab
1ab10 6c 65 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  le);.  rc = sqli
1ab20 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70  te3_prepare_v2(p
1ab30 2d 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20 2d 31  ->db, zQuery, -1
1ab40 2c 20 26 70 51 75 65 72 79 2c 20 30 29 3b 0a 20  , &pQuery, 0);. 
1ab50 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 75   if( rc ){.    u
1ab60 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
1ab70 72 2c 20 22 45 72 72 6f 72 20 25 64 3a 20 25 73  r, "Error %d: %s
1ab80 20 6f 6e 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20   on [%s]\n",.   
1ab90 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1aba0 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64  _extended_errcod
1abb0 65 28 70 2d 3e 64 62 29 2c 20 73 71 6c 69 74 65  e(p->db), sqlite
1abc0 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 2c  3_errmsg(p->db),
1abd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a 51 75  .            zQu
1abe0 65 72 79 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65  ery);.    goto e
1abf0 6e 64 5f 64 61 74 61 5f 78 66 65 72 3b 0a 20 20  nd_data_xfer;.  
1ac00 7d 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f  }.  n = sqlite3_
1ac10 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 51 75  column_count(pQu
1ac20 65 72 79 29 3b 0a 20 20 7a 49 6e 73 65 72 74 20  ery);.  zInsert 
1ac30 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  = sqlite3_malloc
1ac40 36 34 28 32 30 30 20 2b 20 6e 54 61 62 6c 65 20  64(200 + nTable 
1ac50 2b 20 6e 2a 33 29 3b 0a 20 20 69 66 28 20 7a 49  + n*3);.  if( zI
1ac60 6e 73 65 72 74 3d 3d 30 20 29 7b 0a 20 20 20 20  nsert==0 ){.    
1ac70 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
1ac80 72 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  r, "out of memor
1ac90 79 5c 6e 22 29 3b 0a 20 20 20 20 67 6f 74 6f 20  y\n");.    goto 
1aca0 65 6e 64 5f 64 61 74 61 5f 78 66 65 72 3b 0a 20  end_data_xfer;. 
1acb0 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70   }.  sqlite3_snp
1acc0 72 69 6e 74 66 28 32 30 30 2b 6e 54 61 62 6c 65  rintf(200+nTable
1acd0 2c 7a 49 6e 73 65 72 74 2c 0a 20 20 20 20 20 20  ,zInsert,.      
1ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 4e               "IN
1acf0 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 20 49  SERT OR IGNORE I
1ad00 4e 54 4f 20 5c 22 25 73 5c 22 20 56 41 4c 55 45  NTO \"%s\" VALUE
1ad10 53 28 3f 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20  S(?", zTable);. 
1ad20 20 69 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e   i = (int)strlen
1ad30 28 7a 49 6e 73 65 72 74 29 3b 0a 20 20 66 6f 72  (zInsert);.  for
1ad40 28 6a 3d 31 3b 20 6a 3c 6e 3b 20 6a 2b 2b 29 7b  (j=1; j<n; j++){
1ad50 0a 20 20 20 20 6d 65 6d 63 70 79 28 7a 49 6e 73  .    memcpy(zIns
1ad60 65 72 74 2b 69 2c 20 22 2c 3f 22 2c 20 32 29 3b  ert+i, ",?", 2);
1ad70 0a 20 20 20 20 69 20 2b 3d 20 32 3b 0a 20 20 7d  .    i += 2;.  }
1ad80 0a 20 20 6d 65 6d 63 70 79 28 7a 49 6e 73 65 72  .  memcpy(zInser
1ad90 74 2b 69 2c 20 22 29 3b 22 2c 20 33 29 3b 0a 20  t+i, ");", 3);. 
1ada0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
1adb0 65 70 61 72 65 5f 76 32 28 6e 65 77 44 62 2c 20  epare_v2(newDb, 
1adc0 7a 49 6e 73 65 72 74 2c 20 2d 31 2c 20 26 70 49  zInsert, -1, &pI
1add0 6e 73 65 72 74 2c 20 30 29 3b 0a 20 20 69 66 28  nsert, 0);.  if(
1ade0 20 72 63 20 29 7b 0a 20 20 20 20 75 74 66 38 5f   rc ){.    utf8_
1adf0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1ae00 45 72 72 6f 72 20 25 64 3a 20 25 73 20 6f 6e 20  Error %d: %s on 
1ae10 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20  [%s]\n",.       
1ae20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 74       sqlite3_ext
1ae30 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 6e 65  ended_errcode(ne
1ae40 77 44 62 29 2c 20 73 71 6c 69 74 65 33 5f 65 72  wDb), sqlite3_er
1ae50 72 6d 73 67 28 6e 65 77 44 62 29 2c 0a 20 20 20  rmsg(newDb),.   
1ae60 20 20 20 20 20 20 20 20 20 7a 51 75 65 72 79 29           zQuery)
1ae70 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 64  ;.    goto end_d
1ae80 61 74 61 5f 78 66 65 72 3b 0a 20 20 7d 0a 20 20  ata_xfer;.  }.  
1ae90 66 6f 72 28 6b 3d 30 3b 20 6b 3c 32 3b 20 6b 2b  for(k=0; k<2; k+
1aea0 2b 29 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 28  +){.    while( (
1aeb0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65  rc = sqlite3_ste
1aec0 70 28 70 51 75 65 72 79 29 29 3d 3d 53 51 4c 49  p(pQuery))==SQLI
1aed0 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20  TE_ROW ){.      
1aee0 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
1aef0 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74  +){.        swit
1af00 63 68 28 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ch( sqlite3_colu
1af10 6d 6e 5f 74 79 70 65 28 70 51 75 65 72 79 2c 20  mn_type(pQuery, 
1af20 69 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i) ){.          
1af30 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  case SQLITE_NULL
1af40 3a 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  : {.            
1af50 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c  sqlite3_bind_nul
1af60 6c 28 70 49 6e 73 65 72 74 2c 20 69 2b 31 29 3b  l(pInsert, i+1);
1af70 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  .            bre
1af80 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ak;.          }.
1af90 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
1afa0 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3a 20 7b  QLITE_INTEGER: {
1afb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
1afc0 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28  ite3_bind_int64(
1afd0 70 49 6e 73 65 72 74 2c 20 69 2b 31 2c 20 73 71  pInsert, i+1, sq
1afe0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
1aff0 36 34 28 70 51 75 65 72 79 2c 69 29 29 3b 0a 20  64(pQuery,i));. 
1b000 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
1b010 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
1b020 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
1b030 49 54 45 5f 46 4c 4f 41 54 3a 20 7b 0a 20 20 20  ITE_FLOAT: {.   
1b040 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1b050 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 70 49 6e  _bind_double(pIn
1b060 73 65 72 74 2c 20 69 2b 31 2c 20 73 71 6c 69 74  sert, i+1, sqlit
1b070 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65  e3_column_double
1b080 28 70 51 75 65 72 79 2c 69 29 29 3b 0a 20 20 20  (pQuery,i));.   
1b090 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
1b0a0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1b0b0 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
1b0c0 45 5f 54 45 58 54 3a 20 7b 0a 20 20 20 20 20 20  E_TEXT: {.      
1b0d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69        sqlite3_bi
1b0e0 6e 64 5f 74 65 78 74 28 70 49 6e 73 65 72 74 2c  nd_text(pInsert,
1b0f0 20 69 2b 31 2c 0a 20 20 20 20 20 20 20 20 20 20   i+1,.          
1b100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b110 20 20 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29     (const char*)
1b120 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
1b130 65 78 74 28 70 51 75 65 72 79 2c 69 29 2c 0a 20  ext(pQuery,i),. 
1b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b150 20 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20              -1, 
1b160 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
1b170 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1b180 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  k;.          }. 
1b190 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
1b1a0 4c 49 54 45 5f 42 4c 4f 42 3a 20 7b 0a 20 20 20  LITE_BLOB: {.   
1b1b0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1b1c0 5f 62 69 6e 64 5f 62 6c 6f 62 28 70 49 6e 73 65  _bind_blob(pInse
1b1d0 72 74 2c 20 69 2b 31 2c 20 73 71 6c 69 74 65 33  rt, i+1, sqlite3
1b1e0 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 51 75  _column_blob(pQu
1b1f0 65 72 79 2c 69 29 2c 0a 20 20 20 20 20 20 20 20  ery,i),.        
1b200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b220 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75      sqlite3_colu
1b230 6d 6e 5f 62 79 74 65 73 28 70 51 75 65 72 79 2c  mn_bytes(pQuery,
1b240 69 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  i),.            
1b250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b270 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
1b280 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
1b290 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  k;.          }. 
1b2a0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
1b2b0 20 2f 2a 20 45 6e 64 20 66 6f 72 20 2a 2f 0a 20   /* End for */. 
1b2c0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1b2d0 33 5f 73 74 65 70 28 70 49 6e 73 65 72 74 29 3b  3_step(pInsert);
1b2e0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
1b2f0 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63 21 3d  QLITE_OK && rc!=
1b300 53 51 4c 49 54 45 5f 52 4f 57 20 26 26 20 72 63  SQLITE_ROW && rc
1b310 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b  !=SQLITE_DONE ){
1b320 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
1b330 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
1b340 72 6f 72 20 25 64 3a 20 25 73 5c 6e 22 2c 20 73  ror %d: %s\n", s
1b350 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
1b360 65 72 72 63 6f 64 65 28 6e 65 77 44 62 29 2c 0a  errcode(newDb),.
1b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b380 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1b390 65 72 72 6d 73 67 28 6e 65 77 44 62 29 29 3b 0a  errmsg(newDb));.
1b3a0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
1b3b0 6c 69 74 65 33 5f 72 65 73 65 74 28 70 49 6e 73  lite3_reset(pIns
1b3c0 65 72 74 29 3b 0a 20 20 20 20 20 20 63 6e 74 2b  ert);.      cnt+
1b3d0 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 28 63 6e  +;.      if( (cn
1b3e0 74 25 73 70 69 6e 52 61 74 65 29 3d 3d 30 20 29  t%spinRate)==0 )
1b3f0 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66  {.        printf
1b400 28 22 25 63 5c 62 22 2c 20 22 7c 2f 2d 5c 5c 22  ("%c\b", "|/-\\"
1b410 5b 28 63 6e 74 2f 73 70 69 6e 52 61 74 65 29 25  [(cnt/spinRate)%
1b420 34 5d 29 3b 0a 20 20 20 20 20 20 20 20 66 66 6c  4]);.        ffl
1b430 75 73 68 28 73 74 64 6f 75 74 29 3b 0a 20 20 20  ush(stdout);.   
1b440 20 20 20 7d 0a 20 20 20 20 7d 20 2f 2a 20 45 6e     }.    } /* En
1b450 64 20 77 68 69 6c 65 20 2a 2f 0a 20 20 20 20 69  d while */.    i
1b460 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  f( rc==SQLITE_DO
1b470 4e 45 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  NE ) break;.    
1b480 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
1b490 28 70 51 75 65 72 79 29 3b 0a 20 20 20 20 73 71  (pQuery);.    sq
1b4a0 6c 69 74 65 33 5f 66 72 65 65 28 7a 51 75 65 72  lite3_free(zQuer
1b4b0 79 29 3b 0a 20 20 20 20 7a 51 75 65 72 79 20 3d  y);.    zQuery =
1b4c0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
1b4d0 28 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  ("SELECT * FROM 
1b4e0 5c 22 25 77 5c 22 20 4f 52 44 45 52 20 42 59 20  \"%w\" ORDER BY 
1b4f0 72 6f 77 69 64 20 44 45 53 43 3b 22 2c 0a 20 20  rowid DESC;",.  
1b500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b510 20 20 20 20 20 20 20 20 20 20 20 7a 54 61 62 6c             zTabl
1b520 65 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  e);.    rc = sql
1b530 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
1b540 70 2d 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20 2d  p->db, zQuery, -
1b550 31 2c 20 26 70 51 75 65 72 79 2c 20 30 29 3b 0a  1, &pQuery, 0);.
1b560 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
1b570 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
1b580 73 74 64 65 72 72 2c 20 22 57 61 72 6e 69 6e 67  stderr, "Warning
1b590 3a 20 63 61 6e 6e 6f 74 20 73 74 65 70 20 5c 22  : cannot step \"
1b5a0 25 73 5c 22 20 62 61 63 6b 77 61 72 64 73 22 2c  %s\" backwards",
1b5b0 20 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20 20 20   zTable);.      
1b5c0 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
1b5d0 20 2f 2a 20 45 6e 64 20 66 6f 72 28 6b 3d 30 2e   /* End for(k=0.
1b5e0 2e 2e 29 20 2a 2f 0a 0a 65 6e 64 5f 64 61 74 61  ..) */..end_data
1b5f0 5f 78 66 65 72 3a 0a 20 20 73 71 6c 69 74 65 33  _xfer:.  sqlite3
1b600 5f 66 69 6e 61 6c 69 7a 65 28 70 51 75 65 72 79  _finalize(pQuery
1b610 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  );.  sqlite3_fin
1b620 61 6c 69 7a 65 28 70 49 6e 73 65 72 74 29 3b 0a  alize(pInsert);.
1b630 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
1b640 51 75 65 72 79 29 3b 0a 20 20 73 71 6c 69 74 65  Query);.  sqlite
1b650 33 5f 66 72 65 65 28 7a 49 6e 73 65 72 74 29 3b  3_free(zInsert);
1b660 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  .}.../*.** Try t
1b670 6f 20 74 72 61 6e 73 66 65 72 20 61 6c 6c 20 72  o transfer all r
1b680 6f 77 73 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ows of the schem
1b690 61 20 74 68 61 74 20 6d 61 74 63 68 20 7a 57 68  a that match zWh
1b6a0 65 72 65 2e 20 20 46 6f 72 0a 2a 2a 20 65 61 63  ere.  For.** eac
1b6b0 68 20 72 6f 77 2c 20 69 6e 76 6f 6b 65 20 78 46  h row, invoke xF
1b6c0 6f 72 45 61 63 68 28 29 20 6f 6e 20 74 68 65 20  orEach() on the 
1b6d0 6f 62 6a 65 63 74 20 64 65 66 69 6e 65 64 20 62  object defined b
1b6e0 79 20 74 68 61 74 20 72 6f 77 2e 0a 2a 2a 20 49  y that row..** I
1b6f0 66 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e  f an error is en
1b700 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20  countered while 
1b710 6d 6f 76 69 6e 67 20 66 6f 72 77 61 72 64 20 74  moving forward t
1b720 68 72 6f 75 67 68 20 74 68 65 0a 2a 2a 20 73 71  hrough the.** sq
1b730 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
1b740 65 2c 20 74 72 79 20 61 67 61 69 6e 20 6d 6f 76  e, try again mov
1b750 69 6e 67 20 62 61 63 6b 77 61 72 64 73 2e 0a 2a  ing backwards..*
1b760 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 72  /.static void tr
1b770 79 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28 0a  yToCloneSchema(.
1b780 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c    ShellState *p,
1b790 0a 20 20 73 71 6c 69 74 65 33 20 2a 6e 65 77 44  .  sqlite3 *newD
1b7a0 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b,.  const char 
1b7b0 2a 7a 57 68 65 72 65 2c 0a 20 20 76 6f 69 64 20  *zWhere,.  void 
1b7c0 28 2a 78 46 6f 72 45 61 63 68 29 28 53 68 65 6c  (*xForEach)(Shel
1b7d0 6c 53 74 61 74 65 2a 2c 73 71 6c 69 74 65 33 2a  lState*,sqlite3*
1b7e0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 0a 29 7b  ,const char*).){
1b7f0 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
1b800 2a 70 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 63  *pQuery = 0;.  c
1b810 68 61 72 20 2a 7a 51 75 65 72 79 20 3d 20 30 3b  har *zQuery = 0;
1b820 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 6f 6e  .  int rc;.  con
1b830 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
1b840 20 2a 7a 4e 61 6d 65 3b 0a 20 20 63 6f 6e 73 74   *zName;.  const
1b850 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
1b860 7a 53 71 6c 3b 0a 20 20 63 68 61 72 20 2a 7a 45  zSql;.  char *zE
1b870 72 72 4d 73 67 20 3d 20 30 3b 0a 0a 20 20 7a 51  rrMsg = 0;..  zQ
1b880 75 65 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d  uery = sqlite3_m
1b890 70 72 69 6e 74 66 28 22 53 45 4c 45 43 54 20 6e  printf("SELECT n
1b8a0 61 6d 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73 71  ame, sql FROM sq
1b8b0 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20  lite_master".   
1b8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8d0 20 20 20 20 20 20 20 20 22 20 57 48 45 52 45 20          " WHERE 
1b8e0 25 73 22 2c 20 7a 57 68 65 72 65 29 3b 0a 20 20  %s", zWhere);.  
1b8f0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
1b900 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a  pare_v2(p->db, z
1b910 51 75 65 72 79 2c 20 2d 31 2c 20 26 70 51 75 65  Query, -1, &pQue
1b920 72 79 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63  ry, 0);.  if( rc
1b930 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69   ){.    utf8_pri
1b940 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
1b950 6f 72 3a 20 28 25 64 29 20 25 73 20 6f 6e 20 5b  or: (%d) %s on [
1b960 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  %s]\n",.        
1b970 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
1b980 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72  te3_extended_err
1b990 63 6f 64 65 28 70 2d 3e 64 62 29 2c 20 73 71 6c  code(p->db), sql
1b9a0 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64  ite3_errmsg(p->d
1b9b0 62 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  b),.            
1b9c0 20 20 20 20 20 20 20 20 7a 51 75 65 72 79 29 3b          zQuery);
1b9d0 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 73 63  .    goto end_sc
1b9e0 68 65 6d 61 5f 78 66 65 72 3b 0a 20 20 7d 0a 20  hema_xfer;.  }. 
1b9f0 20 77 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71   while( (rc = sq
1ba00 6c 69 74 65 33 5f 73 74 65 70 28 70 51 75 65 72  lite3_step(pQuer
1ba10 79 29 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20  y))==SQLITE_ROW 
1ba20 29 7b 0a 20 20 20 20 7a 4e 61 6d 65 20 3d 20 73  ){.    zName = s
1ba30 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
1ba40 78 74 28 70 51 75 65 72 79 2c 20 30 29 3b 0a 20  xt(pQuery, 0);. 
1ba50 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65     zSql = sqlite
1ba60 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 51  3_column_text(pQ
1ba70 75 65 72 79 2c 20 31 29 3b 0a 20 20 20 20 70 72  uery, 1);.    pr
1ba80 69 6e 74 66 28 22 25 73 2e 2e 2e 20 22 2c 20 7a  intf("%s... ", z
1ba90 4e 61 6d 65 29 3b 20 66 66 6c 75 73 68 28 73 74  Name); fflush(st
1baa0 64 6f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  dout);.    sqlit
1bab0 65 33 5f 65 78 65 63 28 6e 65 77 44 62 2c 20 28  e3_exec(newDb, (
1bac0 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a 53 71 6c  const char*)zSql
1bad0 2c 20 30 2c 20 30 2c 20 26 7a 45 72 72 4d 73 67  , 0, 0, &zErrMsg
1bae0 29 3b 0a 20 20 20 20 69 66 28 20 7a 45 72 72 4d  );.    if( zErrM
1baf0 73 67 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  sg ){.      utf8
1bb00 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1bb10 22 45 72 72 6f 72 3a 20 25 73 5c 6e 53 51 4c 3a  "Error: %s\nSQL:
1bb20 20 5b 25 73 5d 5c 6e 22 2c 20 7a 45 72 72 4d 73   [%s]\n", zErrMs
1bb30 67 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20  g, zSql);.      
1bb40 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72  sqlite3_free(zEr
1bb50 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 7a 45 72  rMsg);.      zEr
1bb60 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  rMsg = 0;.    }.
1bb70 20 20 20 20 69 66 28 20 78 46 6f 72 45 61 63 68      if( xForEach
1bb80 20 29 7b 0a 20 20 20 20 20 20 78 46 6f 72 45 61   ){.      xForEa
1bb90 63 68 28 70 2c 20 6e 65 77 44 62 2c 20 28 63 6f  ch(p, newDb, (co
1bba0 6e 73 74 20 63 68 61 72 2a 29 7a 4e 61 6d 65 29  nst char*)zName)
1bbb0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 72 69 6e  ;.    }.    prin
1bbc0 74 66 28 22 64 6f 6e 65 5c 6e 22 29 3b 0a 20 20  tf("done\n");.  
1bbd0 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  }.  if( rc!=SQLI
1bbe0 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 73  TE_DONE ){.    s
1bbf0 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
1bc00 70 51 75 65 72 79 29 3b 0a 20 20 20 20 73 71 6c  pQuery);.    sql
1bc10 69 74 65 33 5f 66 72 65 65 28 7a 51 75 65 72 79  ite3_free(zQuery
1bc20 29 3b 0a 20 20 20 20 7a 51 75 65 72 79 20 3d 20  );.    zQuery = 
1bc30 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
1bc40 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 73 71  "SELECT name, sq
1bc50 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  l FROM sqlite_ma
1bc60 73 74 65 72 22 0a 20 20 20 20 20 20 20 20 20 20  ster".          
1bc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc80 20 20 20 22 20 57 48 45 52 45 20 25 73 20 4f 52     " WHERE %s OR
1bc90 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53  DER BY rowid DES
1bca0 43 22 2c 20 7a 57 68 65 72 65 29 3b 0a 20 20 20  C", zWhere);.   
1bcb0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
1bcc0 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
1bcd0 7a 51 75 65 72 79 2c 20 2d 31 2c 20 26 70 51 75  zQuery, -1, &pQu
1bce0 65 72 79 2c 20 30 29 3b 0a 20 20 20 20 69 66 28  ery, 0);.    if(
1bcf0 20 72 63 20 29 7b 0a 20 20 20 20 20 20 75 74 66   rc ){.      utf
1bd00 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
1bd10 20 22 45 72 72 6f 72 3a 20 28 25 64 29 20 25 73   "Error: (%d) %s
1bd20 20 6f 6e 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20   on [%s]\n",.   
1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd40 20 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e     sqlite3_exten
1bd50 64 65 64 5f 65 72 72 63 6f 64 65 28 70 2d 3e 64  ded_errcode(p->d
1bd60 62 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  b), sqlite3_errm
1bd70 73 67 28 70 2d 3e 64 62 29 2c 0a 20 20 20 20 20  sg(p->db),.     
1bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd90 20 7a 51 75 65 72 79 29 3b 0a 20 20 20 20 20 20   zQuery);.      
1bda0 67 6f 74 6f 20 65 6e 64 5f 73 63 68 65 6d 61 5f  goto end_schema_
1bdb0 78 66 65 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  xfer;.    }.    
1bdc0 77 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c  while( (rc = sql
1bdd0 69 74 65 33 5f 73 74 65 70 28 70 51 75 65 72 79  ite3_step(pQuery
1bde0 29 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  ))==SQLITE_ROW )
1bdf0 7b 0a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  {.      zName = 
1be00 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
1be10 65 78 74 28 70 51 75 65 72 79 2c 20 30 29 3b 0a  ext(pQuery, 0);.
1be20 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c        zSql = sql
1be30 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
1be40 28 70 51 75 65 72 79 2c 20 31 29 3b 0a 20 20 20  (pQuery, 1);.   
1be50 20 20 20 70 72 69 6e 74 66 28 22 25 73 2e 2e 2e     printf("%s...
1be60 20 22 2c 20 7a 4e 61 6d 65 29 3b 20 66 66 6c 75   ", zName); fflu
1be70 73 68 28 73 74 64 6f 75 74 29 3b 0a 20 20 20 20  sh(stdout);.    
1be80 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 6e    sqlite3_exec(n
1be90 65 77 44 62 2c 20 28 63 6f 6e 73 74 20 63 68 61  ewDb, (const cha
1bea0 72 2a 29 7a 53 71 6c 2c 20 30 2c 20 30 2c 20 26  r*)zSql, 0, 0, &
1beb0 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20  zErrMsg);.      
1bec0 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20  if( zErrMsg ){. 
1bed0 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
1bee0 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
1bef0 72 3a 20 25 73 5c 6e 53 51 4c 3a 20 5b 25 73 5d  r: %s\nSQL: [%s]
1bf00 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 2c 20 7a 53  \n", zErrMsg, zS
1bf10 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ql);.        sql
1bf20 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73  ite3_free(zErrMs
1bf30 67 29 3b 0a 20 20 20 20 20 20 20 20 7a 45 72 72  g);.        zErr
1bf40 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  Msg = 0;.      }
1bf50 0a 20 20 20 20 20 20 69 66 28 20 78 46 6f 72 45  .      if( xForE
1bf60 61 63 68 20 29 7b 0a 20 20 20 20 20 20 20 20 78  ach ){.        x
1bf70 46 6f 72 45 61 63 68 28 70 2c 20 6e 65 77 44 62  ForEach(p, newDb
1bf80 2c 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a  , (const char*)z
1bf90 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Name);.      }. 
1bfa0 20 20 20 20 20 70 72 69 6e 74 66 28 22 64 6f 6e       printf("don
1bfb0 65 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  e\n");.    }.  }
1bfc0 0a 65 6e 64 5f 73 63 68 65 6d 61 5f 78 66 65 72  .end_schema_xfer
1bfd0 3a 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  :.  sqlite3_fina
1bfe0 6c 69 7a 65 28 70 51 75 65 72 79 29 3b 0a 20 20  lize(pQuery);.  
1bff0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 51 75  sqlite3_free(zQu
1c000 65 72 79 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f  ery);.}../*.** O
1c010 70 65 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61  pen a new databa
1c020 73 65 20 66 69 6c 65 20 6e 61 6d 65 64 20 22 7a  se file named "z
1c030 4e 65 77 44 62 22 2e 20 20 54 72 79 20 74 6f 20  NewDb".  Try to 
1c040 72 65 63 6f 76 65 72 20 61 73 20 6d 75 63 68 20  recover as much 
1c050 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 61  information.** a
1c060 73 20 70 6f 73 73 69 62 6c 65 20 6f 75 74 20 6f  s possible out o
1c070 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  f the main datab
1c080 61 73 65 20 28 77 68 69 63 68 20 6d 69 67 68 74  ase (which might
1c090 20 62 65 20 63 6f 72 72 75 70 74 29 20 61 6e 64   be corrupt) and
1c0a0 20 77 72 69 74 65 20 69 74 0a 2a 2a 20 69 6e 74   write it.** int
1c0b0 6f 20 7a 4e 65 77 44 62 2e 0a 2a 2f 0a 73 74 61  o zNewDb..*/.sta
1c0c0 74 69 63 20 76 6f 69 64 20 74 72 79 54 6f 43 6c  tic void tryToCl
1c0d0 6f 6e 65 28 53 68 65 6c 6c 53 74 61 74 65 20 2a  one(ShellState *
1c0e0 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  p, const char *z
1c0f0 4e 65 77 44 62 29 7b 0a 20 20 69 6e 74 20 72 63  NewDb){.  int rc
1c100 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 6e 65 77  ;.  sqlite3 *new
1c110 44 62 20 3d 20 30 3b 0a 20 20 69 66 28 20 61 63  Db = 0;.  if( ac
1c120 63 65 73 73 28 7a 4e 65 77 44 62 2c 30 29 3d 3d  cess(zNewDb,0)==
1c130 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72  0 ){.    utf8_pr
1c140 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 46 69  intf(stderr, "Fi
1c150 6c 65 20 5c 22 25 73 5c 22 20 61 6c 72 65 61 64  le \"%s\" alread
1c160 79 20 65 78 69 73 74 73 2e 5c 6e 22 2c 20 7a 4e  y exists.\n", zN
1c170 65 77 44 62 29 3b 0a 20 20 20 20 72 65 74 75 72  ewDb);.    retur
1c180 6e 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  n;.  }.  rc = sq
1c190 6c 69 74 65 33 5f 6f 70 65 6e 28 7a 4e 65 77 44  lite3_open(zNewD
1c1a0 62 2c 20 26 6e 65 77 44 62 29 3b 0a 20 20 69 66  b, &newDb);.  if
1c1b0 28 20 72 63 20 29 7b 0a 20 20 20 20 75 74 66 38  ( rc ){.    utf8
1c1c0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1c1d0 22 43 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 6f  "Cannot create o
1c1e0 75 74 70 75 74 20 64 61 74 61 62 61 73 65 3a 20  utput database: 
1c1f0 25 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  %s\n",.         
1c200 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73     sqlite3_errms
1c210 67 28 6e 65 77 44 62 29 29 3b 0a 20 20 7d 65 6c  g(newDb));.  }el
1c220 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  se{.    sqlite3_
1c230 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 50 52 41  exec(p->db, "PRA
1c240 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68  GMA writable_sch
1c250 65 6d 61 3d 4f 4e 3b 22 2c 20 30 2c 20 30 2c 20  ema=ON;", 0, 0, 
1c260 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
1c270 65 78 65 63 28 6e 65 77 44 62 2c 20 22 42 45 47  exec(newDb, "BEG
1c280 49 4e 20 45 58 43 4c 55 53 49 56 45 3b 22 2c 20  IN EXCLUSIVE;", 
1c290 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 74 72  0, 0, 0);.    tr
1c2a0 79 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28 70  yToCloneSchema(p
1c2b0 2c 20 6e 65 77 44 62 2c 20 22 74 79 70 65 3d 27  , newDb, "type='
1c2c0 74 61 62 6c 65 27 22 2c 20 74 72 79 54 6f 43 6c  table'", tryToCl
1c2d0 6f 6e 65 44 61 74 61 29 3b 0a 20 20 20 20 74 72  oneData);.    tr
1c2e0 79 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28 70  yToCloneSchema(p
1c2f0 2c 20 6e 65 77 44 62 2c 20 22 74 79 70 65 21 3d  , newDb, "type!=
1c300 27 74 61 62 6c 65 27 22 2c 20 30 29 3b 0a 20 20  'table'", 0);.  
1c310 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 6e    sqlite3_exec(n
1c320 65 77 44 62 2c 20 22 43 4f 4d 4d 49 54 3b 22 2c  ewDb, "COMMIT;",
1c330 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 73   0, 0, 0);.    s
1c340 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64  qlite3_exec(p->d
1c350 62 2c 20 22 50 52 41 47 4d 41 20 77 72 69 74 61  b, "PRAGMA writa
1c360 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 46 46 3b 22  ble_schema=OFF;"
1c370 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a  , 0, 0, 0);.  }.
1c380 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28    sqlite3_close(
1c390 6e 65 77 44 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  newDb);.}../*.**
1c3a0 20 43 68 61 6e 67 65 20 74 68 65 20 6f 75 74 70   Change the outp
1c3b0 75 74 20 66 69 6c 65 20 62 61 63 6b 20 74 6f 20  ut file back to 
1c3c0 73 74 64 6f 75 74 0a 2a 2f 0a 73 74 61 74 69 63  stdout.*/.static
1c3d0 20 76 6f 69 64 20 6f 75 74 70 75 74 5f 72 65 73   void output_res
1c3e0 65 74 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  et(ShellState *p
1c3f0 29 7b 0a 20 20 69 66 28 20 70 2d 3e 6f 75 74 66  ){.  if( p->outf
1c400 69 6c 65 5b 30 5d 3d 3d 27 7c 27 20 29 7b 0a 23  ile[0]=='|' ){.#
1c410 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1c420 49 54 5f 50 4f 50 45 4e 0a 20 20 20 20 70 63 6c  IT_POPEN.    pcl
1c430 6f 73 65 28 70 2d 3e 6f 75 74 29 3b 0a 23 65 6e  ose(p->out);.#en
1c440 64 69 66 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  dif.  }else{.   
1c450 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f   output_file_clo
1c460 73 65 28 70 2d 3e 6f 75 74 29 3b 0a 20 20 7d 0a  se(p->out);.  }.
1c470 20 20 70 2d 3e 6f 75 74 66 69 6c 65 5b 30 5d 20    p->outfile[0] 
1c480 3d 20 30 3b 0a 20 20 70 2d 3e 6f 75 74 20 3d 20  = 0;.  p->out = 
1c490 73 74 64 6f 75 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  stdout;.}../*.**
1c4a0 20 52 75 6e 20 61 6e 20 53 51 4c 20 63 6f 6d 6d   Run an SQL comm
1c4b0 61 6e 64 20 61 6e 64 20 72 65 74 75 72 6e 20 74  and and return t
1c4c0 68 65 20 73 69 6e 67 6c 65 20 69 6e 74 65 67 65  he single intege
1c4d0 72 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61  r result..*/.sta
1c4e0 74 69 63 20 69 6e 74 20 64 62 5f 69 6e 74 28 53  tic int db_int(S
1c4f0 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f  hellState *p, co
1c500 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 29 7b  nst char *zSql){
1c510 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
1c520 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 65  *pStmt;.  int re
1c530 73 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33  s = 0;.  sqlite3
1c540 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64  _prepare_v2(p->d
1c550 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53  b, zSql, -1, &pS
1c560 74 6d 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 70  tmt, 0);.  if( p
1c570 53 74 6d 74 20 26 26 20 73 71 6c 69 74 65 33 5f  Stmt && sqlite3_
1c580 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c  step(pStmt)==SQL
1c590 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 72  ITE_ROW ){.    r
1c5a0 65 73 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  es = sqlite3_col
1c5b0 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c 30 29  umn_int(pStmt,0)
1c5c0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ;.  }.  sqlite3_
1c5d0 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
1c5e0 0a 20 20 72 65 74 75 72 6e 20 72 65 73 3b 0a 7d  .  return res;.}
1c5f0 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20  ../*.** Convert 
1c600 61 20 32 2d 62 79 74 65 20 6f 72 20 34 2d 62 79  a 2-byte or 4-by
1c610 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
1c620 74 65 67 65 72 20 69 6e 74 6f 20 61 20 6e 61 74  teger into a nat
1c630 69 76 65 20 69 6e 74 65 67 65 72 0a 2a 2f 0a 73  ive integer.*/.s
1c640 74 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 69  tatic unsigned i
1c650 6e 74 20 67 65 74 32 62 79 74 65 49 6e 74 28 75  nt get2byteInt(u
1c660 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61 29  nsigned char *a)
1c670 7b 0a 20 20 72 65 74 75 72 6e 20 28 61 5b 30 5d  {.  return (a[0]
1c680 3c 3c 38 29 20 2b 20 61 5b 31 5d 3b 0a 7d 0a 73  <<8) + a[1];.}.s
1c690 74 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 69  tatic unsigned i
1c6a0 6e 74 20 67 65 74 34 62 79 74 65 49 6e 74 28 75  nt get4byteInt(u
1c6b0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61 29  nsigned char *a)
1c6c0 7b 0a 20 20 72 65 74 75 72 6e 20 28 61 5b 30 5d  {.  return (a[0]
1c6d0 3c 3c 32 34 29 20 2b 20 28 61 5b 31 5d 3c 3c 31  <<24) + (a[1]<<1
1c6e0 36 29 20 2b 20 28 61 5b 32 5d 3c 3c 38 29 20 2b  6) + (a[2]<<8) +
1c6f0 20 61 5b 33 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   a[3];.}../*.** 
1c700 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  Implementation o
1c710 66 20 74 68 65 20 22 2e 69 6e 66 6f 22 20 63 6f  f the ".info" co
1c720 6d 6d 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 52 65 74  mmand..**.** Ret
1c730 75 72 6e 20 31 20 6f 6e 20 65 72 72 6f 72 2c 20  urn 1 on error, 
1c740 32 20 74 6f 20 65 78 69 74 2c 20 61 6e 64 20 30  2 to exit, and 0
1c750 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2f 0a 73   otherwise..*/.s
1c760 74 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 5f  tatic int shell_
1c770 64 62 69 6e 66 6f 5f 63 6f 6d 6d 61 6e 64 28 53  dbinfo_command(S
1c780 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 69 6e  hellState *p, in
1c790 74 20 6e 41 72 67 2c 20 63 68 61 72 20 2a 2a 61  t nArg, char **a
1c7a0 7a 41 72 67 29 7b 0a 20 20 73 74 61 74 69 63 20  zArg){.  static 
1c7b0 63 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 20 63  const struct { c
1c7c0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
1c7d0 3b 20 69 6e 74 20 6f 66 73 74 3b 20 7d 20 61 46  ; int ofst; } aF
1c7e0 69 65 6c 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  ield[] = {.     
1c7f0 7b 20 22 66 69 6c 65 20 63 68 61 6e 67 65 20 63  { "file change c
1c800 6f 75 6e 74 65 72 3a 22 2c 20 20 32 34 20 20 7d  ounter:",  24  }
1c810 2c 0a 20 20 20 20 20 7b 20 22 64 61 74 61 62 61  ,.     { "databa
1c820 73 65 20 70 61 67 65 20 63 6f 75 6e 74 3a 22 2c  se page count:",
1c830 20 20 32 38 20 20 7d 2c 0a 20 20 20 20 20 7b 20    28  },.     { 
1c840 22 66 72 65 65 6c 69 73 74 20 70 61 67 65 20 63  "freelist page c
1c850 6f 75 6e 74 3a 22 2c 20 20 33 36 20 20 7d 2c 0a  ount:",  36  },.
1c860 20 20 20 20 20 7b 20 22 73 63 68 65 6d 61 20 63       { "schema c
1c870 6f 6f 6b 69 65 3a 22 2c 20 20 20 20 20 20 20 20  ookie:",        
1c880 34 30 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73  40  },.     { "s
1c890 63 68 65 6d 61 20 66 6f 72 6d 61 74 3a 22 2c 20  chema format:", 
1c8a0 20 20 20 20 20 20 20 34 34 20 20 7d 2c 0a 20 20         44  },.  
1c8b0 20 20 20 7b 20 22 64 65 66 61 75 6c 74 20 63 61     { "default ca
1c8c0 63 68 65 20 73 69 7a 65 3a 22 2c 20 20 20 34 38  che size:",   48
1c8d0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 61 75 74    },.     { "aut
1c8e0 6f 76 61 63 75 75 6d 20 74 6f 70 20 72 6f 6f 74  ovacuum top root
1c8f0 3a 22 2c 20 20 35 32 20 20 7d 2c 0a 20 20 20 20  :",  52  },.    
1c900 20 7b 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 20   { "incremental 
1c910 76 61 63 75 75 6d 3a 22 2c 20 20 20 36 34 20 20  vacuum:",   64  
1c920 7d 2c 0a 20 20 20 20 20 7b 20 22 74 65 78 74 20  },.     { "text 
1c930 65 6e 63 6f 64 69 6e 67 3a 22 2c 20 20 20 20 20  encoding:",     
1c940 20 20 20 35 36 20 20 7d 2c 0a 20 20 20 20 20 7b     56  },.     {
1c950 20 22 75 73 65 72 20 76 65 72 73 69 6f 6e 3a 22   "user version:"
1c960 2c 20 20 20 20 20 20 20 20 20 36 30 20 20 7d 2c  ,         60  },
1c970 0a 20 20 20 20 20 7b 20 22 61 70 70 6c 69 63 61  .     { "applica
1c980 74 69 6f 6e 20 69 64 3a 22 2c 20 20 20 20 20 20  tion id:",      
1c990 20 36 38 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22   68  },.     { "
1c9a0 73 6f 66 74 77 61 72 65 20 76 65 72 73 69 6f 6e  software version
1c9b0 3a 22 2c 20 20 20 20 20 39 36 20 20 7d 2c 0a 20  :",     96  },. 
1c9c0 20 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e   };.  static con
1c9d0 73 74 20 73 74 72 75 63 74 20 7b 20 63 6f 6e 73  st struct { cons
1c9e0 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 63  t char *zName; c
1c9f0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b  onst char *zSql;
1ca00 20 7d 20 61 51 75 65 72 79 5b 5d 20 3d 20 7b 0a   } aQuery[] = {.
1ca10 20 20 20 20 20 7b 20 22 6e 75 6d 62 65 72 20 6f       { "number o
1ca20 66 20 74 61 62 6c 65 73 3a 22 2c 0a 20 20 20 20  f tables:",.    
1ca30 20 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74     "SELECT count
1ca40 28 2a 29 20 46 52 4f 4d 20 25 73 20 57 48 45 52  (*) FROM %s WHER
1ca50 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 22 20  E type='table'" 
1ca60 7d 2c 0a 20 20 20 20 20 7b 20 22 6e 75 6d 62 65  },.     { "numbe
1ca70 72 20 6f 66 20 69 6e 64 65 78 65 73 3a 22 2c 0a  r of indexes:",.
1ca80 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 63         "SELECT c
1ca90 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 25 73 20  ount(*) FROM %s 
1caa0 57 48 45 52 45 20 74 79 70 65 3d 27 69 6e 64 65  WHERE type='inde
1cab0 78 27 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 6e  x'" },.     { "n
1cac0 75 6d 62 65 72 20 6f 66 20 74 72 69 67 67 65 72  umber of trigger
1cad0 73 3a 22 2c 0a 20 20 20 20 20 20 20 22 53 45 4c  s:",.       "SEL
1cae0 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
1caf0 4d 20 25 73 20 57 48 45 52 45 20 74 79 70 65 3d  M %s WHERE type=
1cb00 27 74 72 69 67 67 65 72 27 22 20 7d 2c 0a 20 20  'trigger'" },.  
1cb10 20 20 20 7b 20 22 6e 75 6d 62 65 72 20 6f 66 20     { "number of 
1cb20 76 69 65 77 73 3a 22 2c 0a 20 20 20 20 20 20 20  views:",.       
1cb30 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29  "SELECT count(*)
1cb40 20 46 52 4f 4d 20 25 73 20 57 48 45 52 45 20 74   FROM %s WHERE t
1cb50 79 70 65 3d 27 76 69 65 77 27 22 20 7d 2c 0a 20  ype='view'" },. 
1cb60 20 20 20 20 7b 20 22 73 63 68 65 6d 61 20 73 69      { "schema si
1cb70 7a 65 3a 22 2c 0a 20 20 20 20 20 20 20 22 53 45  ze:",.       "SE
1cb80 4c 45 43 54 20 74 6f 74 61 6c 28 6c 65 6e 67 74  LECT total(lengt
1cb90 68 28 73 71 6c 29 29 20 46 52 4f 4d 20 25 73 22  h(sql)) FROM %s"
1cba0 20 7d 2c 0a 20 20 7d 3b 0a 20 20 69 6e 74 20 69   },.  };.  int i
1cbb0 3b 0a 20 20 63 68 61 72 20 2a 7a 53 63 68 65 6d  ;.  char *zSchem
1cbc0 61 54 61 62 3b 0a 20 20 63 68 61 72 20 2a 7a 44  aTab;.  char *zD
1cbd0 62 20 3d 20 6e 41 72 67 3e 3d 32 20 3f 20 61 7a  b = nArg>=2 ? az
1cbe0 41 72 67 5b 31 5d 20 3a 20 22 6d 61 69 6e 22 3b  Arg[1] : "main";
1cbf0 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
1cc00 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 75 6e  *pStmt = 0;.  un
1cc10 73 69 67 6e 65 64 20 63 68 61 72 20 61 48 64 72  signed char aHdr
1cc20 5b 31 30 30 5d 3b 0a 20 20 6f 70 65 6e 5f 64 62  [100];.  open_db
1cc30 28 70 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 2d  (p, 0);.  if( p-
1cc40 3e 64 62 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  >db==0 ) return 
1cc50 31 3b 0a 20 20 73 71 6c 69 74 65 33 5f 70 72 65  1;.  sqlite3_pre
1cc60 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 22 53  pare_v2(p->db,"S
1cc70 45 4c 45 43 54 20 64 61 74 61 20 46 52 4f 4d 20  ELECT data FROM 
1cc80 73 71 6c 69 74 65 5f 64 62 70 61 67 65 28 3f 31  sqlite_dbpage(?1
1cc90 29 20 57 48 45 52 45 20 70 67 6e 6f 3d 31 22 2c  ) WHERE pgno=1",
1cca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ccb0 20 20 20 20 20 20 2d 31 2c 20 26 70 53 74 6d 74        -1, &pStmt
1ccc0 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  , 0);.  sqlite3_
1ccd0 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c  bind_text(pStmt,
1cce0 20 31 2c 20 7a 44 62 2c 20 2d 31 2c 20 53 51 4c   1, zDb, -1, SQL
1ccf0 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 69  ITE_STATIC);.  i
1cd00 66 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  f( sqlite3_step(
1cd10 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52  pStmt)==SQLITE_R
1cd20 4f 57 0a 20 20 20 26 26 20 73 71 6c 69 74 65 33  OW.   && sqlite3
1cd30 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 70 53  _column_bytes(pS
1cd40 74 6d 74 2c 30 29 3e 31 30 30 0a 20 20 29 7b 0a  tmt,0)>100.  ){.
1cd50 20 20 20 20 6d 65 6d 63 70 79 28 61 48 64 72 2c      memcpy(aHdr,
1cd60 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1cd70 62 6c 6f 62 28 70 53 74 6d 74 2c 30 29 2c 20 31  blob(pStmt,0), 1
1cd80 30 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  00);.    sqlite3
1cd90 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29  _finalize(pStmt)
1cda0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
1cdb0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
1cdc0 2c 20 22 75 6e 61 62 6c 65 20 74 6f 20 72 65 61  , "unable to rea
1cdd0 64 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65  d database heade
1cde0 72 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69 74  r\n");.    sqlit
1cdf0 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d  e3_finalize(pStm
1ce00 74 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31  t);.    return 1
1ce10 3b 0a 20 20 7d 0a 20 20 69 20 3d 20 67 65 74 32  ;.  }.  i = get2
1ce20 62 79 74 65 49 6e 74 28 61 48 64 72 2b 31 36 29  byteInt(aHdr+16)
1ce30 3b 0a 20 20 69 66 28 20 69 3d 3d 31 20 29 20 69  ;.  if( i==1 ) i
1ce40 20 3d 20 36 35 35 33 36 3b 0a 20 20 75 74 66 38   = 65536;.  utf8
1ce50 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
1ce60 22 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22 64  "%-20s %d\n", "d
1ce70 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a  atabase page siz
1ce80 65 3a 22 2c 20 69 29 3b 0a 20 20 75 74 66 38 5f  e:", i);.  utf8_
1ce90 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
1cea0 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22 77 72  %-20s %d\n", "wr
1ceb0 69 74 65 20 66 6f 72 6d 61 74 3a 22 2c 20 61 48  ite format:", aH
1cec0 64 72 5b 31 38 5d 29 3b 0a 20 20 75 74 66 38 5f  dr[18]);.  utf8_
1ced0 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
1cee0 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22 72 65  %-20s %d\n", "re
1cef0 61 64 20 66 6f 72 6d 61 74 3a 22 2c 20 61 48 64  ad format:", aHd
1cf00 72 5b 31 39 5d 29 3b 0a 20 20 75 74 66 38 5f 70  r[19]);.  utf8_p
1cf10 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
1cf20 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22 72 65 73  -20s %d\n", "res
1cf30 65 72 76 65 64 20 62 79 74 65 73 3a 22 2c 20 61  erved bytes:", a
1cf40 48 64 72 5b 32 30 5d 29 3b 0a 20 20 66 6f 72 28  Hdr[20]);.  for(
1cf50 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65  i=0; i<ArraySize
1cf60 28 61 46 69 65 6c 64 29 3b 20 69 2b 2b 29 7b 0a  (aField); i++){.
1cf70 20 20 20 20 69 6e 74 20 6f 66 73 74 20 3d 20 61      int ofst = a
1cf80 46 69 65 6c 64 5b 69 5d 2e 6f 66 73 74 3b 0a 20  Field[i].ofst;. 
1cf90 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20     unsigned int 
1cfa0 76 61 6c 20 3d 20 67 65 74 34 62 79 74 65 49 6e  val = get4byteIn
1cfb0 74 28 61 48 64 72 20 2b 20 6f 66 73 74 29 3b 0a  t(aHdr + ofst);.
1cfc0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
1cfd0 70 2d 3e 6f 75 74 2c 20 22 25 2d 32 30 73 20 25  p->out, "%-20s %
1cfe0 75 22 2c 20 61 46 69 65 6c 64 5b 69 5d 2e 7a 4e  u", aField[i].zN
1cff0 61 6d 65 2c 20 76 61 6c 29 3b 0a 20 20 20 20 73  ame, val);.    s
1d000 77 69 74 63 68 28 20 6f 66 73 74 20 29 7b 0a 20  witch( ofst ){. 
1d010 20 20 20 20 20 63 61 73 65 20 35 36 3a 20 7b 0a       case 56: {.
1d020 20 20 20 20 20 20 20 20 69 66 28 20 76 61 6c 3d          if( val=
1d030 3d 31 20 29 20 72 61 77 5f 70 72 69 6e 74 66 28  =1 ) raw_printf(
1d040 70 2d 3e 6f 75 74 2c 20 22 20 28 75 74 66 38 29  p->out, " (utf8)
1d050 22 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ");.        if( 
1d060 76 61 6c 3d 3d 32 20 29 20 72 61 77 5f 70 72 69  val==2 ) raw_pri
1d070 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 20 28 75  ntf(p->out, " (u
1d080 74 66 31 36 6c 65 29 22 29 3b 0a 20 20 20 20 20  tf16le)");.     
1d090 20 20 20 69 66 28 20 76 61 6c 3d 3d 33 20 29 20     if( val==3 ) 
1d0a0 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
1d0b0 74 2c 20 22 20 28 75 74 66 31 36 62 65 29 22 29  t, " (utf16be)")
1d0c0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1d0d0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
1d0e0 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20  ->out, "\n");.  
1d0f0 7d 0a 20 20 69 66 28 20 7a 44 62 3d 3d 30 20 29  }.  if( zDb==0 )
1d100 7b 0a 20 20 20 20 7a 53 63 68 65 6d 61 54 61 62  {.    zSchemaTab
1d110 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
1d120 74 66 28 22 6d 61 69 6e 2e 73 71 6c 69 74 65 5f  tf("main.sqlite_
1d130 6d 61 73 74 65 72 22 29 3b 0a 20 20 7d 65 6c 73  master");.  }els
1d140 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 44 62  e if( strcmp(zDb
1d150 2c 22 74 65 6d 70 22 29 3d 3d 30 20 29 7b 0a 20  ,"temp")==0 ){. 
1d160 20 20 20 7a 53 63 68 65 6d 61 54 61 62 20 3d 20     zSchemaTab = 
1d170 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
1d180 22 25 73 22 2c 20 22 73 71 6c 69 74 65 5f 74 65  "%s", "sqlite_te
1d190 6d 70 5f 6d 61 73 74 65 72 22 29 3b 0a 20 20 7d  mp_master");.  }
1d1a0 65 6c 73 65 7b 0a 20 20 20 20 7a 53 63 68 65 6d  else{.    zSchem
1d1b0 61 54 61 62 20 3d 20 73 71 6c 69 74 65 33 5f 6d  aTab = sqlite3_m
1d1c0 70 72 69 6e 74 66 28 22 5c 22 25 77 5c 22 2e 73  printf("\"%w\".s
1d1d0 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 2c 20 7a  qlite_master", z
1d1e0 44 62 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69  Db);.  }.  for(i
1d1f0 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28  =0; i<ArraySize(
1d200 61 51 75 65 72 79 29 3b 20 69 2b 2b 29 7b 0a 20  aQuery); i++){. 
1d210 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d 20     char *zSql = 
1d220 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
1d230 61 51 75 65 72 79 5b 69 5d 2e 7a 53 71 6c 2c 20  aQuery[i].zSql, 
1d240 7a 53 63 68 65 6d 61 54 61 62 29 3b 0a 20 20 20  zSchemaTab);.   
1d250 20 69 6e 74 20 76 61 6c 20 3d 20 64 62 5f 69 6e   int val = db_in
1d260 74 28 70 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20  t(p, zSql);.    
1d270 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71  sqlite3_free(zSq
1d280 6c 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69  l);.    utf8_pri
1d290 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 32  ntf(p->out, "%-2
1d2a0 30 73 20 25 64 5c 6e 22 2c 20 61 51 75 65 72 79  0s %d\n", aQuery
1d2b0 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 76 61 6c 29 3b  [i].zName, val);
1d2c0 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66  .  }.  sqlite3_f
1d2d0 72 65 65 28 7a 53 63 68 65 6d 61 54 61 62 29 3b  ree(zSchemaTab);
1d2e0 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
1d2f0 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20  /*.** Print the 
1d300 63 75 72 72 65 6e 74 20 73 71 6c 69 74 65 33 5f  current sqlite3_
1d310 65 72 72 6d 73 67 28 29 20 76 61 6c 75 65 20 74  errmsg() value t
1d320 6f 20 73 74 64 65 72 72 20 61 6e 64 20 72 65 74  o stderr and ret
1d330 75 72 6e 20 31 2e 0a 2a 2f 0a 73 74 61 74 69 63  urn 1..*/.static
1d340 20 69 6e 74 20 73 68 65 6c 6c 44 61 74 61 62 61   int shellDataba
1d350 73 65 45 72 72 6f 72 28 73 71 6c 69 74 65 33 20  seError(sqlite3 
1d360 2a 64 62 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68  *db){.  const ch
1d370 61 72 20 2a 7a 45 72 72 20 3d 20 73 71 6c 69 74  ar *zErr = sqlit
1d380 65 33 5f 65 72 72 6d 73 67 28 64 62 29 3b 0a 20  e3_errmsg(db);. 
1d390 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
1d3a0 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c  err, "Error: %s\
1d3b0 6e 22 2c 20 7a 45 72 72 29 3b 0a 20 20 72 65 74  n", zErr);.  ret
1d3c0 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 1;.}../*.** 
1d3d0 50 72 69 6e 74 20 61 6e 20 6f 75 74 2d 6f 66 2d  Print an out-of-
1d3e0 6d 65 6d 6f 72 79 20 6d 65 73 73 61 67 65 20 74  memory message t
1d3f0 6f 20 73 74 64 65 72 72 20 61 6e 64 20 72 65 74  o stderr and ret
1d400 75 72 6e 20 31 2e 0a 2a 2f 0a 73 74 61 74 69 63  urn 1..*/.static
1d410 20 69 6e 74 20 73 68 65 6c 6c 4e 6f 6d 65 6d 45   int shellNomemE
1d420 72 72 6f 72 28 76 6f 69 64 29 7b 0a 20 20 72 61  rror(void){.  ra
1d430 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
1d440 20 22 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66 20   "Error: out of 
1d450 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 72 65  memory\n");.  re
1d460 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 1;.}../*.**
1d470 20 43 6f 6d 70 61 72 65 20 74 68 65 20 70 61 74   Compare the pat
1d480 74 65 72 6e 20 69 6e 20 7a 47 6c 6f 62 5b 5d 20  tern in zGlob[] 
1d490 61 67 61 69 6e 73 74 20 74 68 65 20 74 65 78 74  against the text
1d4a0 20 69 6e 20 7a 5b 5d 2e 20 20 52 65 74 75 72 6e   in z[].  Return
1d4b0 20 54 52 55 45 0a 2a 2a 20 69 66 20 74 68 65 79   TRUE.** if they
1d4c0 20 6d 61 74 63 68 20 61 6e 64 20 46 41 4c 53 45   match and FALSE
1d4d0 20 28 30 29 20 69 66 20 74 68 65 79 20 64 6f 20   (0) if they do 
1d4e0 6e 6f 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a  not match..**.**
1d4f0 20 47 6c 6f 62 62 69 6e 67 20 72 75 6c 65 73 3a   Globbing rules:
1d500 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 27 2a 27 20  .**.**      '*' 
1d510 20 20 20 20 20 20 4d 61 74 63 68 65 73 20 61 6e        Matches an
1d520 79 20 73 65 71 75 65 6e 63 65 20 6f 66 20 7a 65  y sequence of ze
1d530 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61 72 61  ro or more chara
1d540 63 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  cters..**.**    
1d550 20 20 27 3f 27 20 20 20 20 20 20 20 4d 61 74 63    '?'       Matc
1d560 68 65 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20  hes exactly one 
1d570 63 68 61 72 61 63 74 65 72 2e 0a 2a 2a 0a 2a 2a  character..**.**
1d580 20 20 20 20 20 5b 2e 2e 2e 5d 20 20 20 20 20 20       [...]      
1d590 4d 61 74 63 68 65 73 20 6f 6e 65 20 63 68 61 72  Matches one char
1d5a0 61 63 74 65 72 20 66 72 6f 6d 20 74 68 65 20 65  acter from the e
1d5b0 6e 63 6c 6f 73 65 64 20 6c 69 73 74 20 6f 66 0a  nclosed list of.
1d5c0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d5d0 20 20 63 68 61 72 61 63 74 65 72 73 2e 0a 2a 2a    characters..**
1d5e0 0a 2a 2a 20 20 20 20 20 5b 5e 2e 2e 2e 5d 20 20  .**     [^...]  
1d5f0 20 20 20 4d 61 74 63 68 65 73 20 6f 6e 65 20 63     Matches one c
1d600 68 61 72 61 63 74 65 72 20 6e 6f 74 20 69 6e 20  haracter not in 
1d610 74 68 65 20 65 6e 63 6c 6f 73 65 64 20 6c 69 73  the enclosed lis
1d620 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 27 23  t..**.**      '#
1d630 27 20 20 20 20 20 20 20 4d 61 74 63 68 65 73 20  '       Matches 
1d640 61 6e 79 20 73 65 71 75 65 6e 63 65 20 6f 66 20  any sequence of 
1d650 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 64 69 67 69  one or more digi
1d660 74 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 20 20  ts with an.**   
1d670 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 74               opt
1d680 69 6f 6e 61 6c 20 2b 20 6f 72 20 2d 20 73 69 67  ional + or - sig
1d690 6e 20 69 6e 20 66 72 6f 6e 74 0a 2a 2a 0a 2a 2a  n in front.**.**
1d6a0 20 20 20 20 20 20 27 20 27 20 20 20 20 20 20 20        ' '       
1d6b0 41 6e 79 20 73 70 61 6e 20 6f 66 20 77 68 69 74  Any span of whit
1d6c0 65 73 70 61 63 65 20 6d 61 74 63 68 65 73 20 61  espace matches a
1d6d0 6e 79 20 6f 74 68 65 72 20 73 70 61 6e 20 6f 66  ny other span of
1d6e0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d6f0 20 20 20 77 68 69 74 65 73 70 61 63 65 2e 0a 2a     whitespace..*
1d700 2a 0a 2a 2a 20 45 78 74 72 61 20 77 68 69 74 65  *.** Extra white
1d710 73 70 61 63 65 20 61 74 20 74 68 65 20 65 6e 64  space at the end
1d720 20 6f 66 20 7a 5b 5d 20 69 73 20 69 67 6e 6f 72   of z[] is ignor
1d730 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ed..*/.static in
1d740 74 20 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28  t testcase_glob(
1d750 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 47 6c 6f  const char *zGlo
1d760 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  b, const char *z
1d770 29 7b 0a 20 20 69 6e 74 20 63 2c 20 63 32 3b 0a  ){.  int c, c2;.
1d780 20 20 69 6e 74 20 69 6e 76 65 72 74 3b 0a 20 20    int invert;.  
1d790 69 6e 74 20 73 65 65 6e 3b 0a 0a 20 20 77 68 69  int seen;..  whi
1d7a0 6c 65 28 20 28 63 20 3d 20 28 2a 28 7a 47 6c 6f  le( (c = (*(zGlo
1d7b0 62 2b 2b 29 29 29 21 3d 30 20 29 7b 0a 20 20 20  b++)))!=0 ){.   
1d7c0 20 69 66 28 20 49 73 53 70 61 63 65 28 63 29 20   if( IsSpace(c) 
1d7d0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 21 49 73  ){.      if( !Is
1d7e0 53 70 61 63 65 28 2a 7a 29 20 29 20 72 65 74 75  Space(*z) ) retu
1d7f0 72 6e 20 30 3b 0a 20 20 20 20 20 20 77 68 69 6c  rn 0;.      whil
1d800 65 28 20 49 73 53 70 61 63 65 28 2a 7a 47 6c 6f  e( IsSpace(*zGlo
1d810 62 29 20 29 20 7a 47 6c 6f 62 2b 2b 3b 0a 20 20  b) ) zGlob++;.  
1d820 20 20 20 20 77 68 69 6c 65 28 20 49 73 53 70 61      while( IsSpa
1d830 63 65 28 2a 7a 29 20 29 20 7a 2b 2b 3b 0a 20 20  ce(*z) ) z++;.  
1d840 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27    }else if( c=='
1d850 2a 27 20 29 7b 0a 20 20 20 20 20 20 77 68 69 6c  *' ){.      whil
1d860 65 28 20 28 63 3d 28 2a 28 7a 47 6c 6f 62 2b 2b  e( (c=(*(zGlob++
1d870 29 29 29 20 3d 3d 20 27 2a 27 20 7c 7c 20 63 3d  ))) == '*' || c=
1d880 3d 27 3f 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='?' ){.        
1d890 69 66 28 20 63 3d 3d 27 3f 27 20 26 26 20 28 2a  if( c=='?' && (*
1d8a0 28 7a 2b 2b 29 29 3d 3d 30 20 29 20 72 65 74 75  (z++))==0 ) retu
1d8b0 72 6e 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rn 0;.      }.  
1d8c0 20 20 20 20 69 66 28 20 63 3d 3d 30 20 29 7b 0a      if( c==0 ){.
1d8d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
1d8e0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
1d8f0 28 20 63 3d 3d 27 5b 27 20 29 7b 0a 20 20 20 20  ( c=='[' ){.    
1d900 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 20 26 26      while( *z &&
1d910 20 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28 7a   testcase_glob(z
1d920 47 6c 6f 62 2d 31 2c 7a 29 3d 3d 30 20 29 7b 0a  Glob-1,z)==0 ){.
1d930 20 20 20 20 20 20 20 20 20 20 7a 2b 2b 3b 0a 20            z++;. 
1d940 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1d950 20 72 65 74 75 72 6e 20 28 2a 7a 29 21 3d 30 3b   return (*z)!=0;
1d960 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 77  .      }.      w
1d970 68 69 6c 65 28 20 28 63 32 20 3d 20 28 2a 28 7a  hile( (c2 = (*(z
1d980 2b 2b 29 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  ++)))!=0 ){.    
1d990 20 20 20 20 77 68 69 6c 65 28 20 63 32 21 3d 63      while( c2!=c
1d9a0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63 32   ){.          c2
1d9b0 20 3d 20 2a 28 7a 2b 2b 29 3b 0a 20 20 20 20 20   = *(z++);.     
1d9c0 20 20 20 20 20 69 66 28 20 63 32 3d 3d 30 20 29       if( c2==0 )
1d9d0 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20   return 0;.     
1d9e0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
1d9f0 20 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28 7a   testcase_glob(z
1da00 47 6c 6f 62 2c 7a 29 20 29 20 72 65 74 75 72 6e  Glob,z) ) return
1da10 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   1;.      }.    
1da20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20    return 0;.    
1da30 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 3f 27  }else if( c=='?'
1da40 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 2a   ){.      if( (*
1da50 28 7a 2b 2b 29 29 3d 3d 30 20 29 20 72 65 74 75  (z++))==0 ) retu
1da60 72 6e 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20  rn 0;.    }else 
1da70 69 66 28 20 63 3d 3d 27 5b 27 20 29 7b 0a 20 20  if( c=='[' ){.  
1da80 20 20 20 20 69 6e 74 20 70 72 69 6f 72 5f 63 20      int prior_c 
1da90 3d 20 30 3b 0a 20 20 20 20 20 20 73 65 65 6e 20  = 0;.      seen 
1daa0 3d 20 30 3b 0a 20 20 20 20 20 20 69 6e 76 65 72  = 0;.      inver
1dab0 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 63 20 3d  t = 0;.      c =
1dac0 20 2a 28 7a 2b 2b 29 3b 0a 20 20 20 20 20 20 69   *(z++);.      i
1dad0 66 28 20 63 3d 3d 30 20 29 20 72 65 74 75 72 6e  f( c==0 ) return
1dae0 20 30 3b 0a 20 20 20 20 20 20 63 32 20 3d 20 2a   0;.      c2 = *
1daf0 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20 20  (zGlob++);.     
1db00 20 69 66 28 20 63 32 3d 3d 27 5e 27 20 29 7b 0a   if( c2=='^' ){.
1db10 20 20 20 20 20 20 20 20 69 6e 76 65 72 74 20 3d          invert =
1db20 20 31 3b 0a 20 20 20 20 20 20 20 20 63 32 20 3d   1;.        c2 =
1db30 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20   *(zGlob++);.   
1db40 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63     }.      if( c
1db50 32 3d 3d 27 5d 27 20 29 7b 0a 20 20 20 20 20 20  2==']' ){.      
1db60 20 20 69 66 28 20 63 3d 3d 27 5d 27 20 29 20 73    if( c==']' ) s
1db70 65 65 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  een = 1;.       
1db80 20 63 32 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29   c2 = *(zGlob++)
1db90 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1dba0 77 68 69 6c 65 28 20 63 32 20 26 26 20 63 32 21  while( c2 && c2!
1dbb0 3d 27 5d 27 20 29 7b 0a 20 20 20 20 20 20 20 20  =']' ){.        
1dbc0 69 66 28 20 63 32 3d 3d 27 2d 27 20 26 26 20 7a  if( c2=='-' && z
1dbd0 47 6c 6f 62 5b 30 5d 21 3d 27 5d 27 20 26 26 20  Glob[0]!=']' && 
1dbe0 7a 47 6c 6f 62 5b 30 5d 21 3d 30 20 26 26 20 70  zGlob[0]!=0 && p
1dbf0 72 69 6f 72 5f 63 3e 30 20 29 7b 0a 20 20 20 20  rior_c>0 ){.    
1dc00 20 20 20 20 20 20 63 32 20 3d 20 2a 28 7a 47 6c        c2 = *(zGl
1dc10 6f 62 2b 2b 29 3b 0a 20 20 20 20 20 20 20 20 20  ob++);.         
1dc20 20 69 66 28 20 63 3e 3d 70 72 69 6f 72 5f 63 20   if( c>=prior_c 
1dc30 26 26 20 63 3c 3d 63 32 20 29 20 73 65 65 6e 20  && c<=c2 ) seen 
1dc40 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 70  = 1;.          p
1dc50 72 69 6f 72 5f 63 20 3d 20 30 3b 0a 20 20 20 20  rior_c = 0;.    
1dc60 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1dc70 20 20 20 20 20 69 66 28 20 63 3d 3d 63 32 20 29       if( c==c2 )
1dc80 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  {.            se
1dc90 65 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  en = 1;.        
1dca0 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 70 72    }.          pr
1dcb0 69 6f 72 5f 63 20 3d 20 63 32 3b 0a 20 20 20 20  ior_c = c2;.    
1dcc0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 63 32      }.        c2
1dcd0 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20   = *(zGlob++);. 
1dce0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
1dcf0 20 63 32 3d 3d 30 20 7c 7c 20 28 73 65 65 6e 20   c2==0 || (seen 
1dd00 5e 20 69 6e 76 65 72 74 29 3d 3d 30 20 29 20 72  ^ invert)==0 ) r
1dd10 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 65 6c  eturn 0;.    }el
1dd20 73 65 20 69 66 28 20 63 3d 3d 27 23 27 20 29 7b  se if( c=='#' ){
1dd30 0a 20 20 20 20 20 20 69 66 28 20 28 7a 5b 30 5d  .      if( (z[0]
1dd40 3d 3d 27 2d 27 20 7c 7c 20 7a 5b 30 5d 3d 3d 27  =='-' || z[0]=='
1dd50 2b 27 29 20 26 26 20 49 73 44 69 67 69 74 28 7a  +') && IsDigit(z
1dd60 5b 31 5d 29 20 29 20 7a 2b 2b 3b 0a 20 20 20 20  [1]) ) z++;.    
1dd70 20 20 69 66 28 20 21 49 73 44 69 67 69 74 28 7a    if( !IsDigit(z
1dd80 5b 30 5d 29 20 29 20 72 65 74 75 72 6e 20 30 3b  [0]) ) return 0;
1dd90 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20  .      z++;.    
1dda0 20 20 77 68 69 6c 65 28 20 49 73 44 69 67 69 74    while( IsDigit
1ddb0 28 7a 5b 30 5d 29 20 29 7b 20 7a 2b 2b 3b 20 7d  (z[0]) ){ z++; }
1ddc0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1ddd0 20 20 69 66 28 20 63 21 3d 28 2a 28 7a 2b 2b 29    if( c!=(*(z++)
1dde0 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  ) ) return 0;.  
1ddf0 20 20 7d 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28    }.  }.  while(
1de00 20 49 73 53 70 61 63 65 28 2a 7a 29 20 29 7b 20   IsSpace(*z) ){ 
1de10 7a 2b 2b 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20  z++; }.  return 
1de20 2a 7a 3d 3d 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  *z==0;.}.../*.**
1de30 20 43 6f 6d 70 61 72 65 20 74 68 65 20 73 74 72   Compare the str
1de40 69 6e 67 20 61 73 20 61 20 63 6f 6d 6d 61 6e 64  ing as a command
1de50 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 77 69 74  -line option wit
1de60 68 20 65 69 74 68 65 72 20 6f 6e 65 20 6f 72 20  h either one or 
1de70 74 77 6f 0a 2a 2a 20 69 6e 69 74 69 61 6c 20 22  two.** initial "
1de80 2d 22 20 63 68 61 72 61 63 74 65 72 73 2e 0a 2a  -" characters..*
1de90 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 6f 70 74  /.static int opt
1dea0 69 6f 6e 4d 61 74 63 68 28 63 6f 6e 73 74 20 63  ionMatch(const c
1deb0 68 61 72 20 2a 7a 53 74 72 2c 20 63 6f 6e 73 74  har *zStr, const
1dec0 20 63 68 61 72 20 2a 7a 4f 70 74 29 7b 0a 20 20   char *zOpt){.  
1ded0 69 66 28 20 7a 53 74 72 5b 30 5d 21 3d 27 2d 27  if( zStr[0]!='-'
1dee0 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7a   ) return 0;.  z
1def0 53 74 72 2b 2b 3b 0a 20 20 69 66 28 20 7a 53 74  Str++;.  if( zSt
1df00 72 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 53 74 72  r[0]=='-' ) zStr
1df10 2b 2b 3b 0a 20 20 72 65 74 75 72 6e 20 73 74 72  ++;.  return str
1df20 63 6d 70 28 7a 53 74 72 2c 20 7a 4f 70 74 29 3d  cmp(zStr, zOpt)=
1df30 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 6c  =0;.}../*.** Del
1df40 65 74 65 20 61 20 66 69 6c 65 2e 0a 2a 2f 0a 69  ete a file..*/.i
1df50 6e 74 20 73 68 65 6c 6c 44 65 6c 65 74 65 46 69  nt shellDeleteFi
1df60 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  le(const char *z
1df70 46 69 6c 65 6e 61 6d 65 29 7b 0a 20 20 69 6e 74  Filename){.  int
1df80 20 72 63 3b 0a 23 69 66 64 65 66 20 5f 57 49 4e   rc;.#ifdef _WIN
1df90 33 32 0a 20 20 77 63 68 61 72 5f 74 20 2a 7a 20  32.  wchar_t *z 
1dfa0 3d 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  = sqlite3_win32_
1dfb0 75 74 66 38 5f 74 6f 5f 75 6e 69 63 6f 64 65 28  utf8_to_unicode(
1dfc0 7a 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 72 63  zFilename);.  rc
1dfd0 20 3d 20 5f 77 75 6e 6c 69 6e 6b 28 7a 29 3b 0a   = _wunlink(z);.
1dfe0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
1dff0 29 3b 0a 23 65 6c 73 65 0a 20 20 72 63 20 3d 20  );.#else.  rc = 
1e000 75 6e 6c 69 6e 6b 28 7a 46 69 6c 65 6e 61 6d 65  unlink(zFilename
1e010 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75  );.#endif.  retu
1e020 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  rn rc;.}.../*.**
1e030 20 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   The implementat
1e040 69 6f 6e 20 6f 66 20 53 51 4c 20 73 63 61 6c 61  ion of SQL scala
1e050 72 20 66 75 6e 63 74 69 6f 6e 20 66 6b 65 79 5f  r function fkey_
1e060 63 6f 6c 6c 61 74 65 5f 63 6c 61 75 73 65 28 29  collate_clause()
1e070 2c 20 75 73 65 64 0a 2a 2a 20 62 79 20 74 68 65  , used.** by the
1e080 20 22 2e 6c 69 6e 74 20 66 6b 65 79 2d 69 6e 64   ".lint fkey-ind
1e090 65 78 65 73 22 20 63 6f 6d 6d 61 6e 64 2e 20 54  exes" command. T
1e0a0 68 69 73 20 73 63 61 6c 61 72 20 66 75 6e 63 74  his scalar funct
1e0b0 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 0a 2a 2a  ion is always.**
1e0c0 20 63 61 6c 6c 65 64 20 77 69 74 68 20 66 6f 75   called with fou
1e0d0 72 20 61 72 67 75 6d 65 6e 74 73 20 2d 20 74 68  r arguments - th
1e0e0 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20 6e  e parent table n
1e0f0 61 6d 65 2c 20 74 68 65 20 70 61 72 65 6e 74 20  ame, the parent 
1e100 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2c 0a 2a 2a 20  column name,.** 
1e110 74 68 65 20 63 68 69 6c 64 20 74 61 62 6c 65 20  the child table 
1e120 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 63 68 69  name and the chi
1e130 6c 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a  ld column name..
1e140 2a 2a 0a 2a 2a 20 20 20 66 6b 65 79 5f 63 6f 6c  **.**   fkey_col
1e150 6c 61 74 65 5f 63 6c 61 75 73 65 28 27 70 61 72  late_clause('par
1e160 65 6e 74 2d 74 61 62 27 2c 20 27 70 61 72 65 6e  ent-tab', 'paren
1e170 74 2d 63 6f 6c 27 2c 20 27 63 68 69 6c 64 2d 74  t-col', 'child-t
1e180 61 62 27 2c 20 27 63 68 69 6c 64 2d 63 6f 6c 27  ab', 'child-col'
1e190 29 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ).**.** If eithe
1e1a0 72 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 74  r of the named t
1e1b0 61 62 6c 65 73 20 6f 72 20 63 6f 6c 75 6d 6e 73  ables or columns
1e1c0 20 64 6f 20 6e 6f 74 20 65 78 69 73 74 2c 20 74   do not exist, t
1e1d0 68 69 73 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20  his function.** 
1e1e0 72 65 74 75 72 6e 73 20 61 6e 20 65 6d 70 74 79  returns an empty
1e1f0 20 73 74 72 69 6e 67 2e 20 41 6e 20 65 6d 70 74   string. An empt
1e200 79 20 73 74 72 69 6e 67 20 69 73 20 61 6c 73 6f  y string is also
1e210 20 72 65 74 75 72 6e 65 64 20 69 66 20 62 6f 74   returned if bot
1e220 68 20 74 61 62 6c 65 73 0a 2a 2a 20 61 6e 64 20  h tables.** and 
1e230 63 6f 6c 75 6d 6e 73 20 65 78 69 73 74 20 62 75  columns exist bu
1e240 74 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  t have the same 
1e250 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f  default collatio
1e260 6e 20 73 65 71 75 65 6e 63 65 2e 20 4f 72 2c 0a  n sequence. Or,.
1e270 2a 2a 20 69 66 20 62 6f 74 68 20 65 78 69 73 74  ** if both exist
1e280 20 62 75 74 20 74 68 65 20 64 65 66 61 75 6c 74   but the default
1e290 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
1e2a0 6e 63 65 73 20 61 72 65 20 64 69 66 66 65 72 65  nces are differe
1e2b0 6e 74 2c 20 74 68 69 73 0a 2a 2a 20 66 75 6e 63  nt, this.** func
1e2c0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
1e2d0 20 73 74 72 69 6e 67 20 22 20 43 4f 4c 4c 41 54   string " COLLAT
1e2e0 45 20 3c 70 61 72 65 6e 74 2d 63 6f 6c 6c 61 74  E <parent-collat
1e2f0 69 6f 6e 3e 22 2c 20 77 68 65 72 65 0a 2a 2a 20  ion>", where.** 
1e300 3c 70 61 72 65 6e 74 2d 63 6f 6c 6c 61 74 69 6f  <parent-collatio
1e310 6e 3e 20 69 73 20 74 68 65 20 64 65 66 61 75 6c  n> is the defaul
1e320 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t collation sequ
1e330 65 6e 63 65 20 6f 66 20 74 68 65 20 70 61 72 65  ence of the pare
1e340 6e 74 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 73 74  nt column..*/.st
1e350 61 74 69 63 20 76 6f 69 64 20 73 68 65 6c 6c 46  atic void shellF
1e360 6b 65 79 43 6f 6c 6c 61 74 65 43 6c 61 75 73 65  keyCollateClause
1e370 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (.  sqlite3_cont
1e380 65 78 74 20 2a 70 43 74 78 2c 0a 20 20 69 6e 74  ext *pCtx,.  int
1e390 20 6e 56 61 6c 2c 0a 20 20 73 71 6c 69 74 65 33   nVal,.  sqlite3
1e3a0 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 0a 29  _value **apVal.)
1e3b0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  {.  sqlite3 *db 
1e3c0 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  = sqlite3_contex
1e3d0 74 5f 64 62 5f 68 61 6e 64 6c 65 28 70 43 74 78  t_db_handle(pCtx
1e3e0 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  );.  const char 
1e3f0 2a 7a 50 61 72 65 6e 74 3b 0a 20 20 63 6f 6e 73  *zParent;.  cons
1e400 74 20 63 68 61 72 20 2a 7a 50 61 72 65 6e 74 43  t char *zParentC
1e410 6f 6c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  ol;.  const char
1e420 20 2a 7a 50 61 72 65 6e 74 53 65 71 3b 0a 20 20   *zParentSeq;.  
1e430 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 68 69  const char *zChi
1e440 6c 64 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  ld;.  const char
1e450 20 2a 7a 43 68 69 6c 64 43 6f 6c 3b 0a 20 20 63   *zChildCol;.  c
1e460 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 68 69 6c  onst char *zChil
1e470 64 53 65 71 20 3d 20 30 3b 20 20 2f 2a 20 49 6e  dSeq = 0;  /* In
1e480 69 74 69 61 6c 69 7a 65 20 74 6f 20 61 76 6f 69  itialize to avoi
1e490 64 20 66 61 6c 73 65 2d 70 6f 73 69 74 69 76 65  d false-positive
1e4a0 20 77 61 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e   warning */.  in
1e4b0 74 20 72 63 3b 0a 0a 20 20 61 73 73 65 72 74 28  t rc;..  assert(
1e4c0 20 6e 56 61 6c 3d 3d 34 20 29 3b 0a 20 20 7a 50   nVal==4 );.  zP
1e4d0 61 72 65 6e 74 20 3d 20 28 63 6f 6e 73 74 20 63  arent = (const c
1e4e0 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
1e4f0 75 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 30 5d  ue_text(apVal[0]
1e500 29 3b 0a 20 20 7a 50 61 72 65 6e 74 43 6f 6c 20  );.  zParentCol 
1e510 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73  = (const char*)s
1e520 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
1e530 74 28 61 70 56 61 6c 5b 31 5d 29 3b 0a 20 20 7a  t(apVal[1]);.  z
1e540 43 68 69 6c 64 20 3d 20 28 63 6f 6e 73 74 20 63  Child = (const c
1e550 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
1e560 75 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 32 5d  ue_text(apVal[2]
1e570 29 3b 0a 20 20 7a 43 68 69 6c 64 43 6f 6c 20 3d  );.  zChildCol =
1e580 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
1e590 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
1e5a0 28 61 70 56 61 6c 5b 33 5d 29 3b 0a 0a 20 20 73  (apVal[3]);..  s
1e5b0 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
1e5c0 78 74 28 70 43 74 78 2c 20 22 22 2c 20 2d 31 2c  xt(pCtx, "", -1,
1e5d0 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
1e5e0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
1e5f0 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74  table_column_met
1e600 61 64 61 74 61 28 0a 20 20 20 20 20 20 64 62 2c  adata(.      db,
1e610 20 22 6d 61 69 6e 22 2c 20 7a 50 61 72 65 6e 74   "main", zParent
1e620 2c 20 7a 50 61 72 65 6e 74 43 6f 6c 2c 20 30 2c  , zParentCol, 0,
1e630 20 26 7a 50 61 72 65 6e 74 53 65 71 2c 20 30 2c   &zParentSeq, 0,
1e640 20 30 2c 20 30 0a 20 20 29 3b 0a 20 20 69 66 28   0, 0.  );.  if(
1e650 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1e660 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
1e670 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f  e3_table_column_
1e680 6d 65 74 61 64 61 74 61 28 0a 20 20 20 20 20 20  metadata(.      
1e690 20 20 64 62 2c 20 22 6d 61 69 6e 22 2c 20 7a 43    db, "main", zC
1e6a0 68 69 6c 64 2c 20 7a 43 68 69 6c 64 43 6f 6c 2c  hild, zChildCol,
1e6b0 20 30 2c 20 26 7a 43 68 69 6c 64 53 65 71 2c 20   0, &zChildSeq, 
1e6c0 30 2c 20 30 2c 20 30 0a 20 20 20 20 29 3b 0a 20  0, 0, 0.    );. 
1e6d0 20 7d 0a 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   }..  if( rc==SQ
1e6e0 4c 49 54 45 5f 4f 4b 20 26 26 20 73 71 6c 69 74  LITE_OK && sqlit
1e6f0 65 33 5f 73 74 72 69 63 6d 70 28 7a 50 61 72 65  e3_stricmp(zPare
1e700 6e 74 53 65 71 2c 20 7a 43 68 69 6c 64 53 65 71  ntSeq, zChildSeq
1e710 29 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  ) ){.    char *z
1e720 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
1e730 74 66 28 22 20 43 4f 4c 4c 41 54 45 20 25 73 22  tf(" COLLATE %s"
1e740 2c 20 7a 50 61 72 65 6e 74 53 65 71 29 3b 0a 20  , zParentSeq);. 
1e750 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
1e760 74 5f 74 65 78 74 28 70 43 74 78 2c 20 7a 2c 20  t_text(pCtx, z, 
1e770 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  -1, SQLITE_TRANS
1e780 49 45 4e 54 29 3b 0a 20 20 20 20 73 71 6c 69 74  IENT);.    sqlit
1e790 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 7d 0a  e3_free(z);.  }.
1e7a0 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6d  }.../*.** The im
1e7b0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
1e7c0 64 6f 74 2d 63 6f 6d 6d 61 6e 64 20 22 2e 6c 69  dot-command ".li
1e7d0 6e 74 20 66 6b 65 79 2d 69 6e 64 65 78 65 73 22  nt fkey-indexes"
1e7e0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
1e7f0 6c 69 6e 74 46 6b 65 79 49 6e 64 65 78 65 73 28  lintFkeyIndexes(
1e800 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  .  ShellState *p
1e810 53 74 61 74 65 2c 20 20 20 20 20 20 20 20 20 20  State,          
1e820 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 73 68     /* Current sh
1e830 65 6c 6c 20 74 6f 6f 6c 20 73 74 61 74 65 20 2a  ell tool state *
1e840 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 41 72 67  /.  char **azArg
1e850 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1e860 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
1e870 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64  arguments passed
1e880 20 74 6f 20 64 6f 74 20 63 6f 6d 6d 61 6e 64 20   to dot command 
1e890 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 20 20 20  */.  int nArg   
1e8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1e8c0 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 7a 41  f entries in azA
1e8d0 72 67 5b 5d 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c  rg[] */.){.  sql
1e8e0 69 74 65 33 20 2a 64 62 20 3d 20 70 53 74 61 74  ite3 *db = pStat
1e8f0 65 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20  e->db;       /* 
1e900 44 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  Database handle 
1e910 74 6f 20 71 75 65 72 79 20 22 6d 61 69 6e 22 20  to query "main" 
1e920 64 62 20 6f 66 20 2a 2f 0a 20 20 46 49 4c 45 20  db of */.  FILE 
1e930 2a 6f 75 74 20 3d 20 70 53 74 61 74 65 2d 3e 6f  *out = pState->o
1e940 75 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 74  ut;        /* St
1e950 72 65 61 6d 20 74 6f 20 77 72 69 74 65 20 6e 6f  ream to write no
1e960 6e 2d 65 72 72 6f 72 20 6f 75 74 70 75 74 20 74  n-error output t
1e970 6f 20 2a 2f 0a 20 20 69 6e 74 20 62 56 65 72 62  o */.  int bVerb
1e980 6f 73 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ose = 0;        
1e990 20 20 20 20 20 20 20 2f 2a 20 49 66 20 2d 76 65         /* If -ve
1e9a0 72 62 6f 73 65 20 69 73 20 70 72 65 73 65 6e 74  rbose is present
1e9b0 20 2a 2f 0a 20 20 69 6e 74 20 62 47 72 6f 75 70   */.  int bGroup
1e9c0 42 79 50 61 72 65 6e 74 20 3d 20 30 3b 20 20 20  ByParent = 0;   
1e9d0 20 20 20 20 20 20 2f 2a 20 49 66 20 2d 67 72 6f        /* If -gro
1e9e0 75 70 62 79 70 61 72 65 6e 74 20 69 73 20 70 72  upbyparent is pr
1e9f0 65 73 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 69  esent */.  int i
1ea00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ea10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
1ea20 20 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68   iterate through
1ea30 20 61 7a 41 72 67 5b 5d 20 2a 2f 0a 20 20 63 6f   azArg[] */.  co
1ea40 6e 73 74 20 63 68 61 72 20 2a 7a 49 6e 64 65 6e  nst char *zInden
1ea50 74 20 3d 20 22 22 3b 20 20 20 20 20 20 20 2f 2a  t = "";       /*
1ea60 20 48 6f 77 20 6d 75 63 68 20 74 6f 20 69 6e 64   How much to ind
1ea70 65 6e 74 20 43 52 45 41 54 45 20 49 4e 44 45 58  ent CREATE INDEX
1ea80 20 62 79 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b   by */.  int rc;
1ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eaa0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75           /* Retu
1eab0 72 6e 20 63 6f 64 65 20 2a 2f 0a 20 20 73 71 6c  rn code */.  sql
1eac0 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 71 6c 20  ite3_stmt *pSql 
1ead0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
1eae0 43 6f 6d 70 69 6c 65 64 20 76 65 72 73 69 6f 6e  Compiled version
1eaf0 20 6f 66 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   of SQL statemen
1eb00 74 20 62 65 6c 6f 77 20 2a 2f 0a 0a 20 20 2f 2a  t below */..  /*
1eb10 0a 20 20 2a 2a 20 54 68 69 73 20 53 45 4c 45 43  .  ** This SELEC
1eb20 54 20 73 74 61 74 65 6d 65 6e 74 20 72 65 74 75  T statement retu
1eb30 72 6e 73 20 6f 6e 65 20 72 6f 77 20 66 6f 72 20  rns one row for 
1eb40 65 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79  each foreign key
1eb50 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 2a 2a   constraint.  **
1eb60 20 69 6e 20 74 68 65 20 73 63 68 65 6d 61 20 6f   in the schema o
1eb70 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  f the main datab
1eb80 61 73 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e 20  ase. The column 
1eb90 76 61 6c 75 65 73 20 61 72 65 3a 0a 20 20 2a 2a  values are:.  **
1eba0 0a 20 20 2a 2a 20 30 2e 20 54 68 65 20 74 65 78  .  ** 0. The tex
1ebb0 74 20 6f 66 20 61 6e 20 53 51 4c 20 73 74 61 74  t of an SQL stat
1ebc0 65 6d 65 6e 74 20 73 69 6d 69 6c 61 72 20 74 6f  ement similar to
1ebd0 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20  :.  **.  **     
1ebe0 20 22 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20   "EXPLAIN QUERY 
1ebf0 50 4c 41 4e 20 53 45 4c 45 43 54 20 31 20 46 52  PLAN SELECT 1 FR
1ec00 4f 4d 20 63 68 69 6c 64 5f 74 61 62 6c 65 20 57  OM child_table W
1ec10 48 45 52 45 20 63 68 69 6c 64 5f 6b 65 79 3d 3f  HERE child_key=?
1ec20 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 54  ".  **.  **    T
1ec30 68 69 73 20 53 45 4c 45 43 54 20 69 73 20 73 69  his SELECT is si
1ec40 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 6f 6e 65  milar to the one
1ec50 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67   that the foreig
1ec60 6e 20 6b 65 79 73 20 69 6d 70 6c 65 6d 65 6e 74  n keys implement
1ec70 61 74 69 6f 6e 0a 20 20 2a 2a 20 20 20 20 6e 65  ation.  **    ne
1ec80 65 64 73 20 74 6f 20 72 75 6e 20 69 6e 74 65 72  eds to run inter
1ec90 6e 61 6c 6c 79 20 6f 6e 20 63 68 69 6c 64 20 74  nally on child t
1eca0 61 62 6c 65 73 2e 20 49 66 20 74 68 65 72 65 20  ables. If there 
1ecb0 69 73 20 61 6e 20 69 6e 64 65 78 20 74 68 61 74  is an index that
1ecc0 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 62 65 20   can.  **    be 
1ecd0 75 73 65 64 20 74 6f 20 6f 70 74 69 6d 69 7a 65  used to optimize
1ece0 20 74 68 69 73 20 71 75 65 72 79 2c 20 74 68 65   this query, the
1ecf0 6e 20 69 74 20 63 61 6e 20 61 6c 73 6f 20 62 65  n it can also be
1ed00 20 75 73 65 64 20 62 79 20 74 68 65 20 46 4b 0a   used by the FK.
1ed10 20 20 2a 2a 20 20 20 20 69 6d 70 6c 65 6d 65 6e    **    implemen
1ed20 74 61 74 69 6f 6e 20 74 6f 20 6f 70 74 69 6d 69  tation to optimi
1ed30 7a 65 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  ze DELETE or UPD
1ed40 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 6f  ATE statements o
1ed50 6e 20 74 68 65 20 70 61 72 65 6e 74 0a 20 20 2a  n the parent.  *
1ed60 2a 20 20 20 20 74 61 62 6c 65 2e 0a 20 20 2a 2a  *    table..  **
1ed70 0a 20 20 2a 2a 20 31 2e 20 41 20 47 4c 4f 42 20  .  ** 1. A GLOB 
1ed80 70 61 74 74 65 72 6e 20 73 75 69 74 61 62 6c 65  pattern suitable
1ed90 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72   for sqlite3_str
1eda0 67 6c 6f 62 28 29 2e 20 49 66 20 74 68 65 20 70  glob(). If the p
1edb0 6c 61 6e 20 6f 75 74 70 75 74 20 62 79 0a 20 20  lan output by.  
1edc0 2a 2a 20 20 20 20 74 68 65 20 45 58 50 4c 41 49  **    the EXPLAI
1edd0 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 63 6f 6d  N QUERY PLAN com
1ede0 6d 61 6e 64 20 6d 61 74 63 68 65 73 20 74 68 69  mand matches thi
1edf0 73 20 70 61 74 74 65 72 6e 2c 20 74 68 65 6e 20  s pattern, then 
1ee00 74 68 65 20 73 63 68 65 6d 61 0a 20 20 2a 2a 20  the schema.  ** 
1ee10 20 20 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 69     contains an i
1ee20 6e 64 65 78 20 74 68 61 74 20 63 61 6e 20 62 65  ndex that can be
1ee30 20 75 73 65 64 20 74 6f 20 6f 70 74 69 6d 69 7a   used to optimiz
1ee40 65 20 74 68 65 20 71 75 65 72 79 2e 0a 20 20 2a  e the query..  *
1ee50 2a 0a 20 20 2a 2a 20 32 2e 20 48 75 6d 61 6e 20  *.  ** 2. Human 
1ee60 72 65 61 64 61 62 6c 65 20 74 65 78 74 20 74 68  readable text th
1ee70 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
1ee80 20 63 68 69 6c 64 20 74 61 62 6c 65 20 61 6e 64   child table and
1ee90 20 63 6f 6c 75 6d 6e 73 2e 20 65 2e 67 2e 0a 20   columns. e.g.. 
1eea0 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 20 20 22   **.  **       "
1eeb0 63 68 69 6c 64 5f 74 61 62 6c 65 28 63 68 69 6c  child_table(chil
1eec0 64 5f 6b 65 79 31 2c 20 63 68 69 6c 64 5f 6b 65  d_key1, child_ke
1eed0 79 32 29 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 33  y2)".  **.  ** 3
1eee0 2e 20 48 75 6d 61 6e 20 72 65 61 64 61 62 6c 65  . Human readable
1eef0 20 74 65 78 74 20 74 68 61 74 20 64 65 73 63 72   text that descr
1ef00 69 62 65 73 20 74 68 65 20 70 61 72 65 6e 74 20  ibes the parent 
1ef10 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
1ef20 73 2e 20 65 2e 67 2e 0a 20 20 2a 2a 0a 20 20 2a  s. e.g..  **.  *
1ef30 2a 20 20 20 20 20 20 20 22 70 61 72 65 6e 74 5f  *       "parent_
1ef40 74 61 62 6c 65 28 70 61 72 65 6e 74 5f 6b 65 79  table(parent_key
1ef50 31 2c 20 70 61 72 65 6e 74 5f 6b 65 79 32 29 22  1, parent_key2)"
1ef60 0a 20 20 2a 2a 0a 20 20 2a 2a 20 34 2e 20 41 20  .  **.  ** 4. A 
1ef70 66 75 6c 6c 20 43 52 45 41 54 45 20 49 4e 44 45  full CREATE INDE
1ef80 58 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20  X statement for 
1ef90 61 6e 20 69 6e 64 65 78 20 74 68 61 74 20 63 6f  an index that co
1efa0 75 6c 64 20 62 65 20 75 73 65 64 20 74 6f 0a 20  uld be used to. 
1efb0 20 2a 2a 20 20 20 20 6f 70 74 69 6d 69 7a 65 20   **    optimize 
1efc0 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
1efd0 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 20 74   statements on t
1efe0 68 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65 2e  he parent table.
1eff0 20 65 2e 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20   e.g..  **.  ** 
1f000 20 20 20 20 20 20 22 43 52 45 41 54 45 20 49 4e        "CREATE IN
1f010 44 45 58 20 63 68 69 6c 64 5f 74 61 62 6c 65 5f  DEX child_table_
1f020 63 68 69 6c 64 5f 6b 65 79 20 4f 4e 20 63 68 69  child_key ON chi
1f030 6c 64 5f 74 61 62 6c 65 28 63 68 69 6c 64 5f 6b  ld_table(child_k
1f040 65 79 29 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 35  ey)".  **.  ** 5
1f050 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  . The name of th
1f060 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65 2e 0a  e parent table..
1f070 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 73 65 20    **.  ** These 
1f080 73 69 78 20 76 61 6c 75 65 73 20 61 72 65 20 75  six values are u
1f090 73 65 64 20 62 79 20 74 68 65 20 43 20 6c 6f 67  sed by the C log
1f0a0 69 63 20 62 65 6c 6f 77 20 74 6f 20 67 65 6e 65  ic below to gene
1f0b0 72 61 74 65 20 74 68 65 20 72 65 70 6f 72 74 2e  rate the report.
1f0c0 0a 20 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  .  */.  const ch
1f0d0 61 72 20 2a 7a 53 71 6c 20 3d 0a 20 20 22 53 45  ar *zSql =.  "SE
1f0e0 4c 45 43 54 20 22 0a 20 20 20 20 22 20 20 20 20  LECT ".    "    
1f0f0 20 27 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20   'EXPLAIN QUERY 
1f100 50 4c 41 4e 20 53 45 4c 45 43 54 20 31 20 46 52  PLAN SELECT 1 FR
1f110 4f 4d 20 27 20 7c 7c 20 71 75 6f 74 65 28 73 2e  OM ' || quote(s.
1f120 6e 61 6d 65 29 20 7c 7c 20 27 20 57 48 45 52 45  name) || ' WHERE
1f130 20 27 22 0a 20 20 20 20 22 20 20 7c 7c 20 67 72   '".    "  || gr
1f140 6f 75 70 5f 63 6f 6e 63 61 74 28 71 75 6f 74 65  oup_concat(quote
1f150 28 73 2e 6e 61 6d 65 29 20 7c 7c 20 27 2e 27 20  (s.name) || '.' 
1f160 7c 7c 20 71 75 6f 74 65 28 66 2e 5b 66 72 6f 6d  || quote(f.[from
1f170 5d 29 20 7c 7c 20 27 3d 3f 27 20 22 0a 20 20 20  ]) || '=?' ".   
1f180 20 22 20 20 7c 7c 20 66 6b 65 79 5f 63 6f 6c 6c   "  || fkey_coll
1f190 61 74 65 5f 63 6c 61 75 73 65 28 22 0a 20 20 20  ate_clause(".   
1f1a0 20 22 20 20 20 20 20 20 20 66 2e 5b 74 61 62 6c   "       f.[tabl
1f1b0 65 5d 2c 20 43 4f 41 4c 45 53 43 45 28 66 2e 5b  e], COALESCE(f.[
1f1c0 74 6f 5d 2c 20 70 2e 5b 6e 61 6d 65 5d 29 2c 20  to], p.[name]), 
1f1d0 73 2e 6e 61 6d 65 2c 20 66 2e 5b 66 72 6f 6d 5d  s.name, f.[from]
1f1e0 29 2c 27 20 41 4e 44 20 27 29 22 0a 20 20 20 20  ),' AND ')".    
1f1f0 22 2c 20 22 0a 20 20 20 20 22 20 20 20 20 20 27  ", ".    "     '
1f200 53 45 41 52 43 48 20 54 41 42 4c 45 20 27 20 7c  SEARCH TABLE ' |
1f210 7c 20 73 2e 6e 61 6d 65 20 7c 7c 20 27 20 55 53  | s.name || ' US
1f220 49 4e 47 20 43 4f 56 45 52 49 4e 47 20 49 4e 44  ING COVERING IND
1f230 45 58 2a 28 27 22 0a 20 20 20 20 22 20 20 7c 7c  EX*('".    "  ||
1f240 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 27 2a   group_concat('*
1f250 3d 3f 27 2c 20 27 20 41 4e 44 20 27 29 20 7c 7c  =?', ' AND ') ||
1f260 20 27 29 27 22 0a 20 20 20 20 22 2c 20 22 0a 20   ')'".    ", ". 
1f270 20 20 20 22 20 20 20 20 20 73 2e 6e 61 6d 65 20     "     s.name 
1f280 20 7c 7c 20 27 28 27 20 7c 7c 20 67 72 6f 75 70   || '(' || group
1f290 5f 63 6f 6e 63 61 74 28 66 2e 5b 66 72 6f 6d 5d  _concat(f.[from]
1f2a0 2c 20 20 27 2c 20 27 29 20 7c 7c 20 27 29 27 22  ,  ', ') || ')'"
1f2b0 0a 20 20 20 20 22 2c 20 22 0a 20 20 20 20 22 20  .    ", ".    " 
1f2c0 20 20 20 20 66 2e 5b 74 61 62 6c 65 5d 20 7c 7c      f.[table] ||
1f2d0 20 27 28 27 20 7c 7c 20 67 72 6f 75 70 5f 63 6f   '(' || group_co
1f2e0 6e 63 61 74 28 43 4f 41 4c 45 53 43 45 28 66 2e  ncat(COALESCE(f.
1f2f0 5b 74 6f 5d 2c 20 70 2e 5b 6e 61 6d 65 5d 29 29  [to], p.[name]))
1f300 20 7c 7c 20 27 29 27 22 0a 20 20 20 20 22 2c 20   || ')'".    ", 
1f310 22 0a 20 20 20 20 22 20 20 20 20 20 27 43 52 45  ".    "     'CRE
1f320 41 54 45 20 49 4e 44 45 58 20 27 20 7c 7c 20 71  ATE INDEX ' || q
1f330 75 6f 74 65 28 73 2e 6e 61 6d 65 20 7c 7c 27 5f  uote(s.name ||'_
1f340 27 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74  '|| group_concat
1f350 28 66 2e 5b 66 72 6f 6d 5d 2c 20 27 5f 27 29 29  (f.[from], '_'))
1f360 22 0a 20 20 20 20 22 20 20 7c 7c 20 27 20 4f 4e  ".    "  || ' ON
1f370 20 27 20 7c 7c 20 71 75 6f 74 65 28 73 2e 6e 61   ' || quote(s.na
1f380 6d 65 29 20 7c 7c 20 27 28 27 22 0a 20 20 20 20  me) || '('".    
1f390 22 20 20 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e 63  "  || group_conc
1f3a0 61 74 28 71 75 6f 74 65 28 66 2e 5b 66 72 6f 6d  at(quote(f.[from
1f3b0 5d 29 20 7c 7c 22 0a 20 20 20 20 22 20 20 20 20  ]) ||".    "    
1f3c0 20 20 20 20 66 6b 65 79 5f 63 6f 6c 6c 61 74 65      fkey_collate
1f3d0 5f 63 6c 61 75 73 65 28 22 0a 20 20 20 20 22 20  _clause(".    " 
1f3e0 20 20 20 20 20 20 20 20 20 66 2e 5b 74 61 62 6c           f.[tabl
1f3f0 65 5d 2c 20 43 4f 41 4c 45 53 43 45 28 66 2e 5b  e], COALESCE(f.[
1f400 74 6f 5d 2c 20 70 2e 5b 6e 61 6d 65 5d 29 2c 20  to], p.[name]), 
1f410 73 2e 6e 61 6d 65 2c 20 66 2e 5b 66 72 6f 6d 5d  s.name, f.[from]
1f420 29 2c 20 27 2c 20 27 29 22 0a 20 20 20 20 22 20  ), ', ')".    " 
1f430 20 7c 7c 20 27 29 3b 27 22 0a 20 20 20 20 22 2c   || ');'".    ",
1f440 20 22 0a 20 20 20 20 22 20 20 20 20 20 66 2e 5b   ".    "     f.[
1f450 74 61 62 6c 65 5d 20 22 0a 20 20 20 20 22 46 52  table] ".    "FR
1f460 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
1f470 20 41 53 20 73 2c 20 70 72 61 67 6d 61 5f 66 6f   AS s, pragma_fo
1f480 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 73  reign_key_list(s
1f490 2e 6e 61 6d 65 29 20 41 53 20 66 20 22 0a 20 20  .name) AS f ".  
1f4a0 20 20 22 4c 45 46 54 20 4a 4f 49 4e 20 70 72 61    "LEFT JOIN pra
1f4b0 67 6d 61 5f 74 61 62 6c 65 5f 69 6e 66 6f 20 41  gma_table_info A
1f4c0 53 20 70 20 4f 4e 20 28 70 6b 2d 31 3d 73 65 71  S p ON (pk-1=seq
1f4d0 20 41 4e 44 20 70 2e 61 72 67 3d 66 2e 5b 74 61   AND p.arg=f.[ta
1f4e0 62 6c 65 5d 29 20 22 0a 20 20 20 20 22 47 52 4f  ble]) ".    "GRO
1f4f0 55 50 20 42 59 20 73 2e 6e 61 6d 65 2c 20 66 2e  UP BY s.name, f.
1f500 69 64 20 22 0a 20 20 20 20 22 4f 52 44 45 52 20  id ".    "ORDER 
1f510 42 59 20 28 43 41 53 45 20 57 48 45 4e 20 3f 20  BY (CASE WHEN ? 
1f520 54 48 45 4e 20 66 2e 5b 74 61 62 6c 65 5d 20 45  THEN f.[table] E
1f530 4c 53 45 20 73 2e 6e 61 6d 65 20 45 4e 44 29 22  LSE s.name END)"
1f540 0a 20 20 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  .  ;.  const cha
1f550 72 20 2a 7a 47 6c 6f 62 49 50 4b 20 3d 20 22 53  r *zGlobIPK = "S
1f560 45 41 52 43 48 20 54 41 42 4c 45 20 2a 20 55 53  EARCH TABLE * US
1f570 49 4e 47 20 49 4e 54 45 47 45 52 20 50 52 49 4d  ING INTEGER PRIM
1f580 41 52 59 20 4b 45 59 20 28 72 6f 77 69 64 3d 3f  ARY KEY (rowid=?
1f590 29 22 3b 0a 0a 20 20 66 6f 72 28 69 3d 32 3b 20  )";..  for(i=2; 
1f5a0 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
1f5b0 20 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29 73    int n = (int)s
1f5c0 74 72 6c 65 6e 28 61 7a 41 72 67 5b 69 5d 29 3b  trlen(azArg[i]);
1f5d0 0a 20 20 20 20 69 66 28 20 6e 3e 31 20 26 26 20  .    if( n>1 && 
1f5e0 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70  sqlite3_strnicmp
1f5f0 28 22 2d 76 65 72 62 6f 73 65 22 2c 20 61 7a 41  ("-verbose", azA
1f600 72 67 5b 69 5d 2c 20 6e 29 3d 3d 30 20 29 7b 0a  rg[i], n)==0 ){.
1f610 20 20 20 20 20 20 62 56 65 72 62 6f 73 65 20 3d        bVerbose =
1f620 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c   1;.    }.    el
1f630 73 65 20 69 66 28 20 6e 3e 31 20 26 26 20 73 71  se if( n>1 && sq
1f640 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 28 22  lite3_strnicmp("
1f650 2d 67 72 6f 75 70 62 79 70 61 72 65 6e 74 22 2c  -groupbyparent",
1f660 20 61 7a 41 72 67 5b 69 5d 2c 20 6e 29 3d 3d 30   azArg[i], n)==0
1f670 20 29 7b 0a 20 20 20 20 20 20 62 47 72 6f 75 70   ){.      bGroup
1f680 42 79 50 61 72 65 6e 74 20 3d 20 31 3b 0a 20 20  ByParent = 1;.  
1f690 20 20 20 20 7a 49 6e 64 65 6e 74 20 3d 20 22 20      zIndent = " 
1f6a0 20 20 20 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20     ";.    }.    
1f6b0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
1f6c0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1f6d0 55 73 61 67 65 3a 20 25 73 20 25 73 20 3f 2d 76  Usage: %s %s ?-v
1f6e0 65 72 62 6f 73 65 3f 20 3f 2d 67 72 6f 75 70 62  erbose? ?-groupb
1f6f0 79 70 61 72 65 6e 74 3f 5c 6e 22 2c 0a 20 20 20  yparent?\n",.   
1f700 20 20 20 20 20 20 20 61 7a 41 72 67 5b 30 5d 2c         azArg[0],
1f710 20 61 7a 41 72 67 5b 31 5d 0a 20 20 20 20 20 20   azArg[1].      
1f720 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
1f730 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
1f740 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65    }.  }..  /* Re
1f750 67 69 73 74 65 72 20 74 68 65 20 66 6b 65 79 5f  gister the fkey_
1f760 63 6f 6c 6c 61 74 65 5f 63 6c 61 75 73 65 28 29  collate_clause()
1f770 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   SQL function */
1f780 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
1f790 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
1f7a0 64 62 2c 20 22 66 6b 65 79 5f 63 6f 6c 6c 61 74  db, "fkey_collat
1f7b0 65 5f 63 6c 61 75 73 65 22 2c 20 34 2c 20 53 51  e_clause", 4, SQ
1f7c0 4c 49 54 45 5f 55 54 46 38 2c 0a 20 20 20 20 20  LITE_UTF8,.     
1f7d0 20 30 2c 20 73 68 65 6c 6c 46 6b 65 79 43 6f 6c   0, shellFkeyCol
1f7e0 6c 61 74 65 43 6c 61 75 73 65 2c 20 30 2c 20 30  lateClause, 0, 0
1f7f0 0a 20 20 29 3b 0a 0a 0a 20 20 69 66 28 20 72 63  .  );...  if( rc
1f800 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1f810 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
1f820 70 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20 7a  prepare_v2(db, z
1f830 53 71 6c 2c 20 2d 31 2c 20 26 70 53 71 6c 2c 20  Sql, -1, &pSql, 
1f840 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  0);.  }.  if( rc
1f850 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1f860 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
1f870 69 6e 74 28 70 53 71 6c 2c 20 31 2c 20 62 47 72  int(pSql, 1, bGr
1f880 6f 75 70 42 79 50 61 72 65 6e 74 29 3b 0a 20 20  oupByParent);.  
1f890 7d 0a 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  }..  if( rc==SQL
1f8a0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 6e  ITE_OK ){.    in
1f8b0 74 20 72 63 32 3b 0a 20 20 20 20 63 68 61 72 20  t rc2;.    char 
1f8c0 2a 7a 50 72 65 76 20 3d 20 30 3b 0a 20 20 20 20  *zPrev = 0;.    
1f8d0 77 68 69 6c 65 28 20 53 51 4c 49 54 45 5f 52 4f  while( SQLITE_RO
1f8e0 57 3d 3d 73 71 6c 69 74 65 33 5f 73 74 65 70 28  W==sqlite3_step(
1f8f0 70 53 71 6c 29 20 29 7b 0a 20 20 20 20 20 20 69  pSql) ){.      i
1f900 6e 74 20 72 65 73 20 3d 20 2d 31 3b 0a 20 20 20  nt res = -1;.   
1f910 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20     sqlite3_stmt 
1f920 2a 70 45 78 70 6c 61 69 6e 20 3d 20 30 3b 0a 20  *pExplain = 0;. 
1f930 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
1f940 2a 7a 45 51 50 20 3d 20 28 63 6f 6e 73 74 20 63  *zEQP = (const c
1f950 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  har*)sqlite3_col
1f960 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20 30  umn_text(pSql, 0
1f970 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  );.      const c
1f980 68 61 72 20 2a 7a 47 6c 6f 62 20 3d 20 28 63 6f  har *zGlob = (co
1f990 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
1f9a0 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53  3_column_text(pS
1f9b0 71 6c 2c 20 31 29 3b 0a 20 20 20 20 20 20 63 6f  ql, 1);.      co
1f9c0 6e 73 74 20 63 68 61 72 20 2a 7a 46 72 6f 6d 20  nst char *zFrom 
1f9d0 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73  = (const char*)s
1f9e0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
1f9f0 78 74 28 70 53 71 6c 2c 20 32 29 3b 0a 20 20 20  xt(pSql, 2);.   
1fa00 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
1fa10 54 61 72 67 65 74 20 3d 20 28 63 6f 6e 73 74 20  Target = (const 
1fa20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f  char*)sqlite3_co
1fa30 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20  lumn_text(pSql, 
1fa40 33 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  3);.      const 
1fa50 63 68 61 72 20 2a 7a 43 49 20 3d 20 28 63 6f 6e  char *zCI = (con
1fa60 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
1fa70 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71  _column_text(pSq
1fa80 6c 2c 20 34 29 3b 0a 20 20 20 20 20 20 63 6f 6e  l, 4);.      con
1fa90 73 74 20 63 68 61 72 20 2a 7a 50 61 72 65 6e 74  st char *zParent
1faa0 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
1fab0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
1fac0 65 78 74 28 70 53 71 6c 2c 20 35 29 3b 0a 0a 20  ext(pSql, 5);.. 
1fad0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1fae0 33 5f 70 72 65 70 61 72 65 5f 76 32 28 64 62 2c  3_prepare_v2(db,
1faf0 20 7a 45 51 50 2c 20 2d 31 2c 20 26 70 45 78 70   zEQP, -1, &pExp
1fb00 6c 61 69 6e 2c 20 30 29 3b 0a 20 20 20 20 20 20  lain, 0);.      
1fb10 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1fb20 4b 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  K ) break;.     
1fb30 20 69 66 28 20 53 51 4c 49 54 45 5f 52 4f 57 3d   if( SQLITE_ROW=
1fb40 3d 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 45  =sqlite3_step(pE
1fb50 78 70 6c 61 69 6e 29 20 29 7b 0a 20 20 20 20 20  xplain) ){.     
1fb60 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
1fb70 50 6c 61 6e 20 3d 20 28 63 6f 6e 73 74 20 63 68  Plan = (const ch
1fb80 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar*)sqlite3_colu
1fb90 6d 6e 5f 74 65 78 74 28 70 45 78 70 6c 61 69 6e  mn_text(pExplain
1fba0 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 72 65  , 3);.        re
1fbb0 73 20 3d 20 28 0a 20 20 20 20 20 20 20 20 20 20  s = (.          
1fbc0 20 20 20 20 30 3d 3d 73 71 6c 69 74 65 33 5f 73      0==sqlite3_s
1fbd0 74 72 67 6c 6f 62 28 7a 47 6c 6f 62 2c 20 7a 50  trglob(zGlob, zP
1fbe0 6c 61 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20  lan).           
1fbf0 7c 7c 20 30 3d 3d 73 71 6c 69 74 65 33 5f 73 74  || 0==sqlite3_st
1fc00 72 67 6c 6f 62 28 7a 47 6c 6f 62 49 50 4b 2c 20  rglob(zGlobIPK, 
1fc10 7a 50 6c 61 6e 29 0a 20 20 20 20 20 20 20 20 29  zPlan).        )
1fc20 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1fc30 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e  rc = sqlite3_fin
1fc40 61 6c 69 7a 65 28 70 45 78 70 6c 61 69 6e 29 3b  alize(pExplain);
1fc50 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
1fc60 51 4c 49 54 45 5f 4f 4b 20 29 20 62 72 65 61 6b  QLITE_OK ) break
1fc70 3b 0a 0a 20 20 20 20 20 20 69 66 28 20 72 65 73  ;..      if( res
1fc80 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  <0 ){.        ra
1fc90 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
1fca0 20 22 45 72 72 6f 72 3a 20 69 6e 74 65 72 6e 61   "Error: interna
1fcb0 6c 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 20  l error");.     
1fcc0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
1fcd0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69  }else{.        i
1fce0 66 28 20 62 47 72 6f 75 70 42 79 50 61 72 65 6e  f( bGroupByParen
1fcf0 74 0a 20 20 20 20 20 20 20 20 26 26 20 28 62 56  t.        && (bV
1fd00 65 72 62 6f 73 65 20 7c 7c 20 72 65 73 3d 3d 30  erbose || res==0
1fd10 29 0a 20 20 20 20 20 20 20 20 26 26 20 28 7a 50  ).        && (zP
1fd20 72 65 76 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65  rev==0 || sqlite
1fd30 33 5f 73 74 72 69 63 6d 70 28 7a 50 61 72 65 6e  3_stricmp(zParen
1fd40 74 2c 20 7a 50 72 65 76 29 29 0a 20 20 20 20 20  t, zPrev)).     
1fd50 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20     ){.          
1fd60 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  raw_printf(out, 
1fd70 22 2d 2d 20 50 61 72 65 6e 74 20 74 61 62 6c 65  "-- Parent table
1fd80 20 25 73 5c 6e 22 2c 20 7a 50 61 72 65 6e 74 29   %s\n", zParent)
1fd90 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
1fda0 74 65 33 5f 66 72 65 65 28 7a 50 72 65 76 29 3b  te3_free(zPrev);
1fdb0 0a 20 20 20 20 20 20 20 20 20 20 7a 50 72 65 76  .          zPrev
1fdc0 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
1fdd0 74 66 28 22 25 73 22 2c 20 7a 50 61 72 65 6e 74  tf("%s", zParent
1fde0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20  );.        }..  
1fdf0 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30        if( res==0
1fe00 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61   ){.          ra
1fe10 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25  w_printf(out, "%
1fe20 73 25 73 20 2d 2d 3e 20 25 73 5c 6e 22 2c 20 7a  s%s --> %s\n", z
1fe30 49 6e 64 65 6e 74 2c 20 7a 43 49 2c 20 7a 54 61  Indent, zCI, zTa
1fe40 72 67 65 74 29 3b 0a 20 20 20 20 20 20 20 20 7d  rget);.        }
1fe50 65 6c 73 65 20 69 66 28 20 62 56 65 72 62 6f 73  else if( bVerbos
1fe60 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  e ){.          r
1fe70 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
1fe80 25 73 2f 2a 20 6e 6f 20 65 78 74 72 61 20 69 6e  %s/* no extra in
1fe90 64 65 78 65 73 20 72 65 71 75 69 72 65 64 20 66  dexes required f
1fea0 6f 72 20 25 73 20 2d 3e 20 25 73 20 2a 2f 5c 6e  or %s -> %s */\n
1feb0 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
1fec0 20 7a 49 6e 64 65 6e 74 2c 20 7a 46 72 6f 6d 2c   zIndent, zFrom,
1fed0 20 7a 54 61 72 67 65 74 0a 20 20 20 20 20 20 20   zTarget.       
1fee0 20 20 20 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a     );.        }.
1fef0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1ff00 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
1ff10 50 72 65 76 29 3b 0a 0a 20 20 20 20 69 66 28 20  Prev);..    if( 
1ff20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1ff30 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
1ff40 66 28 73 74 64 65 72 72 2c 20 22 25 73 5c 6e 22  f(stderr, "%s\n"
1ff50 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
1ff60 28 64 62 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  (db));.    }..  
1ff70 20 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f    rc2 = sqlite3_
1ff80 66 69 6e 61 6c 69 7a 65 28 70 53 71 6c 29 3b 0a  finalize(pSql);.
1ff90 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1ffa0 54 45 5f 4f 4b 20 26 26 20 72 63 32 21 3d 53 51  TE_OK && rc2!=SQ
1ffb0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1ffc0 20 72 63 20 3d 20 72 63 32 3b 0a 20 20 20 20 20   rc = rc2;.     
1ffd0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
1ffe0 72 72 2c 20 22 25 73 5c 6e 22 2c 20 73 71 6c 69  rr, "%s\n", sqli
1fff0 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 29 3b  te3_errmsg(db));
20000 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
20010 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
20020 74 64 65 72 72 2c 20 22 25 73 5c 6e 22 2c 20 73  tderr, "%s\n", s
20030 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62  qlite3_errmsg(db
20040 29 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  ));.  }..  retur
20050 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  n rc;.}../*.** I
20060 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
20070 20 22 2e 6c 69 6e 74 22 20 64 6f 74 20 63 6f 6d   ".lint" dot com
20080 6d 61 6e 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  mand..*/.static 
20090 69 6e 74 20 6c 69 6e 74 44 6f 74 43 6f 6d 6d 61  int lintDotComma
200a0 6e 64 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65  nd(.  ShellState
200b0 20 2a 70 53 74 61 74 65 2c 20 20 20 20 20 20 20   *pState,       
200c0 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
200d0 20 73 68 65 6c 6c 20 74 6f 6f 6c 20 73 74 61 74   shell tool stat
200e0 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  e */.  char **az
200f0 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20 20  Arg,            
20100 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
20110 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73  of arguments pas
20120 73 65 64 20 74 6f 20 64 6f 74 20 63 6f 6d 6d 61  sed to dot comma
20130 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67  nd */.  int nArg
20140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20150 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20160 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
20170 61 7a 41 72 67 5b 5d 20 2a 2f 0a 29 7b 0a 20 20  azArg[] */.){.  
20180 69 6e 74 20 6e 3b 0a 20 20 6e 20 3d 20 28 6e 41  int n;.  n = (nA
20190 72 67 3e 3d 32 20 3f 20 28 69 6e 74 29 73 74 72  rg>=2 ? (int)str
201a0 6c 65 6e 28 61 7a 41 72 67 5b 31 5d 29 20 3a 20  len(azArg[1]) : 
201b0 30 29 3b 0a 20 20 69 66 28 20 6e 3c 31 20 7c 7c  0);.  if( n<1 ||
201c0 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
201d0 70 28 61 7a 41 72 67 5b 31 5d 2c 20 22 66 6b 65  p(azArg[1], "fke
201e0 79 2d 69 6e 64 65 78 65 73 22 2c 20 6e 29 20 29  y-indexes", n) )
201f0 20 67 6f 74 6f 20 75 73 61 67 65 3b 0a 20 20 72   goto usage;.  r
20200 65 74 75 72 6e 20 6c 69 6e 74 46 6b 65 79 49 6e  eturn lintFkeyIn
20210 64 65 78 65 73 28 70 53 74 61 74 65 2c 20 61 7a  dexes(pState, az
20220 41 72 67 2c 20 6e 41 72 67 29 3b 0a 0a 20 75 73  Arg, nArg);.. us
20230 61 67 65 3a 0a 20 20 72 61 77 5f 70 72 69 6e 74  age:.  raw_print
20240 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
20250 20 25 73 20 73 75 62 2d 63 6f 6d 6d 61 6e 64 20   %s sub-command 
20260 3f 73 77 69 74 63 68 65 73 2e 2e 2e 3f 5c 6e 22  ?switches...?\n"
20270 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a 20 20 72  , azArg[0]);.  r
20280 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
20290 2c 20 22 57 68 65 72 65 20 73 75 62 2d 63 6f 6d  , "Where sub-com
202a0 6d 61 6e 64 73 20 61 72 65 3a 5c 6e 22 29 3b 0a  mands are:\n");.
202b0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
202c0 65 72 72 2c 20 22 20 20 20 20 66 6b 65 79 2d 69  err, "    fkey-i
202d0 6e 64 65 78 65 73 5c 6e 22 29 3b 0a 20 20 72 65  ndexes\n");.  re
202e0 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
202f0 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c  R;.}../*.** Impl
20300 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 2e  ementation of ".
20310 65 78 70 65 72 74 22 20 64 6f 74 20 63 6f 6d 6d  expert" dot comm
20320 61 6e 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  and..*/.static i
20330 6e 74 20 65 78 70 65 72 74 44 6f 74 43 6f 6d 6d  nt expertDotComm
20340 61 6e 64 28 0a 20 20 53 68 65 6c 6c 53 74 61 74  and(.  ShellStat
20350 65 20 2a 70 53 74 61 74 65 2c 20 20 20 20 20 20  e *pState,      
20360 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
20370 74 20 73 68 65 6c 6c 20 74 6f 6f 6c 20 73 74 61  t shell tool sta
20380 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  te */.  char **a
20390 7a 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20  zArg,           
203a0 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
203b0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
203c0 73 73 65 64 20 74 6f 20 64 6f 74 20 63 6f 6d 6d  ssed to dot comm
203d0 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72  and */.  int nAr
203e0 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g               
203f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
20400 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
20410 20 61 7a 41 72 67 5b 5d 20 2a 2f 0a 29 7b 0a 20   azArg[] */.){. 
20420 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
20430 5f 4f 4b 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72  _OK;.  char *zEr
20440 72 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69 3b 0a  r = 0;.  int i;.
20450 20 20 69 6e 74 20 69 53 61 6d 70 6c 65 20 3d 20    int iSample = 
20460 30 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 53  0;..  assert( pS
20470 74 61 74 65 2d 3e 65 78 70 65 72 74 2e 70 45 78  tate->expert.pEx
20480 70 65 72 74 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d  pert==0 );.  mem
20490 73 65 74 28 26 70 53 74 61 74 65 2d 3e 65 78 70  set(&pState->exp
204a0 65 72 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 45  ert, 0, sizeof(E
204b0 78 70 65 72 74 49 6e 66 6f 29 29 3b 0a 0a 20 20  xpertInfo));..  
204c0 66 6f 72 28 69 3d 31 3b 20 72 63 3d 3d 53 51 4c  for(i=1; rc==SQL
204d0 49 54 45 5f 4f 4b 20 26 26 20 69 3c 6e 41 72 67  ITE_OK && i<nArg
204e0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 63 68 61 72  ; i++){.    char
204f0 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 5d 3b 0a   *z = azArg[i];.
20500 20 20 20 20 69 6e 74 20 6e 3b 0a 20 20 20 20 69      int n;.    i
20510 66 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 26 26 20  f( z[0]=='-' && 
20520 7a 5b 31 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b  z[1]=='-' ) z++;
20530 0a 20 20 20 20 6e 20 3d 20 73 74 72 6c 65 6e 28  .    n = strlen(
20540 7a 29 3b 0a 20 20 20 20 69 66 28 20 6e 3e 3d 32  z);.    if( n>=2
20550 20 26 26 20 30 3d 3d 73 74 72 6e 63 6d 70 28 7a   && 0==strncmp(z
20560 2c 20 22 2d 76 65 72 62 6f 73 65 22 2c 20 6e 29  , "-verbose", n)
20570 20 29 7b 0a 20 20 20 20 20 20 70 53 74 61 74 65   ){.      pState
20580 2d 3e 65 78 70 65 72 74 2e 62 56 65 72 62 6f 73  ->expert.bVerbos
20590 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  e = 1;.    }.   
205a0 20 65 6c 73 65 20 69 66 28 20 6e 3e 3d 32 20 26   else if( n>=2 &
205b0 26 20 30 3d 3d 73 74 72 6e 63 6d 70 28 7a 2c 20  & 0==strncmp(z, 
205c0 22 2d 73 61 6d 70 6c 65 22 2c 20 6e 29 20 29 7b  "-sample", n) ){
205d0 0a 20 20 20 20 20 20 69 66 28 20 69 3d 3d 28 6e  .      if( i==(n
205e0 41 72 67 2d 31 29 20 29 7b 0a 20 20 20 20 20 20  Arg-1) ){.      
205f0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
20600 65 72 72 2c 20 22 6f 70 74 69 6f 6e 20 72 65 71  err, "option req
20610 75 69 72 65 73 20 61 6e 20 61 72 67 75 6d 65 6e  uires an argumen
20620 74 3a 20 25 73 5c 6e 22 2c 20 7a 29 3b 0a 20 20  t: %s\n", z);.  
20630 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
20640 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 7d  E_ERROR;.      }
20650 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 53  else{.        iS
20660 61 6d 70 6c 65 20 3d 20 28 69 6e 74 29 69 6e 74  ample = (int)int
20670 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b  egerValue(azArg[
20680 2b 2b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 69  ++i]);.        i
20690 66 28 20 69 53 61 6d 70 6c 65 3c 30 20 7c 7c 20  f( iSample<0 || 
206a0 69 53 61 6d 70 6c 65 3e 31 30 30 20 29 7b 0a 20  iSample>100 ){. 
206b0 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69           raw_pri
206c0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 76 61 6c  ntf(stderr, "val
206d0 75 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 3a  ue out of range:
206e0 20 25 73 5c 6e 22 2c 20 61 7a 41 72 67 5b 69 5d   %s\n", azArg[i]
206f0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  );.          rc 
20700 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
20710 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
20720 7d 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65  }.    }.    else
20730 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
20740 74 66 28 73 74 64 65 72 72 2c 20 22 75 6e 6b 6e  tf(stderr, "unkn
20750 6f 77 6e 20 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e  own option: %s\n
20760 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 72 63 20  ", z);.      rc 
20770 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
20780 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 69 66 28      }.  }..  if(
20790 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
207a0 7b 0a 20 20 20 20 70 53 74 61 74 65 2d 3e 65 78  {.    pState->ex
207b0 70 65 72 74 2e 70 45 78 70 65 72 74 20 3d 20 73  pert.pExpert = s
207c0 71 6c 69 74 65 33 5f 65 78 70 65 72 74 5f 6e 65  qlite3_expert_ne
207d0 77 28 70 53 74 61 74 65 2d 3e 64 62 2c 20 26 7a  w(pState->db, &z
207e0 45 72 72 29 3b 0a 20 20 20 20 69 66 28 20 70 53  Err);.    if( pS
207f0 74 61 74 65 2d 3e 65 78 70 65 72 74 2e 70 45 78  tate->expert.pEx
20800 70 65 72 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  pert==0 ){.     
20810 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
20820 72 72 2c 20 22 73 71 6c 69 74 65 33 5f 65 78 70  rr, "sqlite3_exp
20830 65 72 74 5f 6e 65 77 3a 20 25 73 5c 6e 22 2c 20  ert_new: %s\n", 
20840 7a 45 72 72 29 3b 0a 20 20 20 20 20 20 72 63 20  zErr);.      rc 
20850 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
20860 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
20870 20 73 71 6c 69 74 65 33 5f 65 78 70 65 72 74 5f   sqlite3_expert_
20880 63 6f 6e 66 69 67 28 0a 20 20 20 20 20 20 20 20  config(.        
20890 20 20 70 53 74 61 74 65 2d 3e 65 78 70 65 72 74    pState->expert
208a0 2e 70 45 78 70 65 72 74 2c 20 45 58 50 45 52 54  .pExpert, EXPERT
208b0 5f 43 4f 4e 46 49 47 5f 53 41 4d 50 4c 45 2c 20  _CONFIG_SAMPLE, 
208c0 69 53 61 6d 70 6c 65 0a 20 20 20 20 20 20 29 3b  iSample.      );
208d0 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 72 65  .    }.  }..  re
208e0 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 0a 2f 2a  turn rc;.}..../*
208f0 0a 2a 2a 20 49 66 20 61 6e 20 69 6e 70 75 74 20  .** If an input 
20900 6c 69 6e 65 20 62 65 67 69 6e 73 20 77 69 74 68  line begins with
20910 20 22 2e 22 20 74 68 65 6e 20 69 6e 76 6f 6b 65   "." then invoke
20920 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 74 6f   this routine to
20930 0a 2a 2a 20 70 72 6f 63 65 73 73 20 74 68 61 74  .** process that
20940 20 6c 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 52 65 74   line..**.** Ret
20950 75 72 6e 20 31 20 6f 6e 20 65 72 72 6f 72 2c 20  urn 1 on error, 
20960 32 20 74 6f 20 65 78 69 74 2c 20 61 6e 64 20 30  2 to exit, and 0
20970 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2f 0a 73   otherwise..*/.s
20980 74 61 74 69 63 20 69 6e 74 20 64 6f 5f 6d 65 74  tatic int do_met
20990 61 5f 63 6f 6d 6d 61 6e 64 28 63 68 61 72 20 2a  a_command(char *
209a0 7a 4c 69 6e 65 2c 20 53 68 65 6c 6c 53 74 61 74  zLine, ShellStat
209b0 65 20 2a 70 29 7b 0a 20 20 69 6e 74 20 68 20 3d  e *p){.  int h =
209c0 20 31 3b 0a 20 20 69 6e 74 20 6e 41 72 67 20 3d   1;.  int nArg =
209d0 20 30 3b 0a 20 20 69 6e 74 20 6e 2c 20 63 3b 0a   0;.  int n, c;.
209e0 20 20 69 6e 74 20 72 63 20 3d 20 30 3b 0a 20 20    int rc = 0;.  
209f0 63 68 61 72 20 2a 61 7a 41 72 67 5b 35 30 5d 3b  char *azArg[50];
20a00 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 65 72  ..  if( p->exper
20a10 74 2e 70 45 78 70 65 72 74 20 29 7b 0a 20 20 20  t.pExpert ){.   
20a20 20 65 78 70 65 72 74 46 69 6e 69 73 68 28 70 2c   expertFinish(p,
20a30 20 31 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f   1, 0);.  }..  /
20a40 2a 20 50 61 72 73 65 20 74 68 65 20 69 6e 70 75  * Parse the inpu
20a50 74 20 6c 69 6e 65 20 69 6e 74 6f 20 74 6f 6b 65  t line into toke
20a60 6e 73 2e 0a 20 20 2a 2f 0a 20 20 77 68 69 6c 65  ns..  */.  while
20a70 28 20 7a 4c 69 6e 65 5b 68 5d 20 26 26 20 6e 41  ( zLine[h] && nA
20a80 72 67 3c 41 72 72 61 79 53 69 7a 65 28 61 7a 41  rg<ArraySize(azA
20a90 72 67 29 20 29 7b 0a 20 20 20 20 77 68 69 6c 65  rg) ){.    while
20aa0 28 20 49 73 53 70 61 63 65 28 7a 4c 69 6e 65 5b  ( IsSpace(zLine[
20ab0 68 5d 29 20 29 7b 20 68 2b 2b 3b 20 7d 0a 20 20  h]) ){ h++; }.  
20ac0 20 20 69 66 28 20 7a 4c 69 6e 65 5b 68 5d 3d 3d    if( zLine[h]==
20ad0 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 69  0 ) break;.    i
20ae0 66 28 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 27 5c 27  f( zLine[h]=='\'
20af0 27 20 7c 7c 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 27  ' || zLine[h]=='
20b00 22 27 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  "' ){.      int 
20b10 64 65 6c 69 6d 20 3d 20 7a 4c 69 6e 65 5b 68 2b  delim = zLine[h+
20b20 2b 5d 3b 0a 20 20 20 20 20 20 61 7a 41 72 67 5b  +];.      azArg[
20b30 6e 41 72 67 2b 2b 5d 20 3d 20 26 7a 4c 69 6e 65  nArg++] = &zLine
20b40 5b 68 5d 3b 0a 20 20 20 20 20 20 77 68 69 6c 65  [h];.      while
20b50 28 20 7a 4c 69 6e 65 5b 68 5d 20 26 26 20 7a 4c  ( zLine[h] && zL
20b60 69 6e 65 5b 68 5d 21 3d 64 65 6c 69 6d 20 29 7b  ine[h]!=delim ){
20b70 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 4c 69  .        if( zLi
20b80 6e 65 5b 68 5d 3d 3d 27 5c 5c 27 20 26 26 20 64  ne[h]=='\\' && d
20b90 65 6c 69 6d 3d 3d 27 22 27 20 26 26 20 7a 4c 69  elim=='"' && zLi
20ba0 6e 65 5b 68 2b 31 5d 21 3d 30 20 29 20 68 2b 2b  ne[h+1]!=0 ) h++
20bb0 3b 0a 20 20 20 20 20 20 20 20 68 2b 2b 3b 0a 20  ;.        h++;. 
20bc0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
20bd0 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 64 65 6c 69 6d   zLine[h]==delim
20be0 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 4c 69 6e   ){.        zLin
20bf0 65 5b 68 2b 2b 5d 20 3d 20 30 3b 0a 20 20 20 20  e[h++] = 0;.    
20c00 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 64 65    }.      if( de
20c10 6c 69 6d 3d 3d 27 22 27 20 29 20 72 65 73 6f 6c  lim=='"' ) resol
20c20 76 65 5f 62 61 63 6b 73 6c 61 73 68 65 73 28 61  ve_backslashes(a
20c30 7a 41 72 67 5b 6e 41 72 67 2d 31 5d 29 3b 0a 20  zArg[nArg-1]);. 
20c40 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
20c50 61 7a 41 72 67 5b 6e 41 72 67 2b 2b 5d 20 3d 20  azArg[nArg++] = 
20c60 26 7a 4c 69 6e 65 5b 68 5d 3b 0a 20 20 20 20 20  &zLine[h];.     
20c70 20 77 68 69 6c 65 28 20 7a 4c 69 6e 65 5b 68 5d   while( zLine[h]
20c80 20 26 26 20 21 49 73 53 70 61 63 65 28 7a 4c 69   && !IsSpace(zLi
20c90 6e 65 5b 68 5d 29 20 29 7b 20 68 2b 2b 3b 20 7d  ne[h]) ){ h++; }
20ca0 0a 20 20 20 20 20 20 69 66 28 20 7a 4c 69 6e 65  .      if( zLine
20cb0 5b 68 5d 20 29 20 7a 4c 69 6e 65 5b 68 2b 2b 5d  [h] ) zLine[h++]
20cc0 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 65 73 6f   = 0;.      reso
20cd0 6c 76 65 5f 62 61 63 6b 73 6c 61 73 68 65 73 28  lve_backslashes(
20ce0 61 7a 41 72 67 5b 6e 41 72 67 2d 31 5d 29 3b 0a  azArg[nArg-1]);.
20cf0 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20      }.  }..  /* 
20d00 50 72 6f 63 65 73 73 20 74 68 65 20 69 6e 70 75  Process the inpu
20d10 74 20 6c 69 6e 65 2e 0a 20 20 2a 2f 0a 20 20 69  t line..  */.  i
20d20 66 28 20 6e 41 72 67 3d 3d 30 20 29 20 72 65 74  f( nArg==0 ) ret
20d30 75 72 6e 20 30 3b 20 2f 2a 20 6e 6f 20 74 6f 6b  urn 0; /* no tok
20d40 65 6e 73 2c 20 6e 6f 20 65 72 72 6f 72 20 2a 2f  ens, no error */
20d50 0a 20 20 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28  .  n = strlen30(
20d60 61 7a 41 72 67 5b 30 5d 29 3b 0a 20 20 63 20 3d  azArg[0]);.  c =
20d70 20 61 7a 41 72 67 5b 30 5d 5b 30 5d 3b 0a 0a 23   azArg[0][0];..#
20d80 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
20d90 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
20da0 0a 20 20 69 66 28 20 63 3d 3d 27 61 27 20 26 26  .  if( c=='a' &&
20db0 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
20dc0 5d 2c 20 22 61 75 74 68 22 2c 20 6e 29 3d 3d 30  ], "auth", n)==0
20dd0 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   ){.    if( nArg
20de0 21 3d 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77  !=2 ){.      raw
20df0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
20e00 22 55 73 61 67 65 3a 20 2e 61 75 74 68 20 4f 4e  "Usage: .auth ON
20e10 7c 4f 46 46 5c 6e 22 29 3b 0a 20 20 20 20 20 20  |OFF\n");.      
20e20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f  rc = 1;.      go
20e30 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
20e40 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  exit;.    }.    
20e50 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20  open_db(p, 0);. 
20e60 20 20 20 69 66 28 20 62 6f 6f 6c 65 61 6e 56 61     if( booleanVa
20e70 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 20 29 7b  lue(azArg[1]) ){
20e80 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
20e90 65 74 5f 61 75 74 68 6f 72 69 7a 65 72 28 70 2d  et_authorizer(p-
20ea0 3e 64 62 2c 20 73 68 65 6c 6c 41 75 74 68 2c 20  >db, shellAuth, 
20eb0 70 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  p);.    }else{. 
20ec0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 74       sqlite3_set
20ed0 5f 61 75 74 68 6f 72 69 7a 65 72 28 70 2d 3e 64  _authorizer(p->d
20ee0 62 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  b, 0, 0);.    }.
20ef0 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a    }else.#endif..
20f00 20 20 69 66 28 20 28 63 3d 3d 27 62 27 20 26 26    if( (c=='b' &&
20f10 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d 70   n>=3 && strncmp
20f20 28 61 7a 41 72 67 5b 30 5d 2c 20 22 62 61 63 6b  (azArg[0], "back
20f30 75 70 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 20 7c  up", n)==0).   |
20f40 7c 20 28 63 3d 3d 27 73 27 20 26 26 20 6e 3e 3d  | (c=='s' && n>=
20f50 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  3 && strncmp(azA
20f60 72 67 5b 30 5d 2c 20 22 73 61 76 65 22 2c 20 6e  rg[0], "save", n
20f70 29 3d 3d 30 29 0a 20 20 29 7b 0a 20 20 20 20 63  )==0).  ){.    c
20f80 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 65 73 74  onst char *zDest
20f90 46 69 6c 65 20 3d 20 30 3b 0a 20 20 20 20 63 6f  File = 0;.    co
20fa0 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20  nst char *zDb = 
20fb0 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 2a  0;.    sqlite3 *
20fc0 70 44 65 73 74 3b 0a 20 20 20 20 73 71 6c 69 74  pDest;.    sqlit
20fd0 65 33 5f 62 61 63 6b 75 70 20 2a 70 42 61 63 6b  e3_backup *pBack
20fe0 75 70 3b 0a 20 20 20 20 69 6e 74 20 6a 3b 0a 20  up;.    int j;. 
20ff0 20 20 20 66 6f 72 28 6a 3d 31 3b 20 6a 3c 6e 41     for(j=1; j<nA
21000 72 67 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; j++){.      
21010 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20  const char *z = 
21020 61 7a 41 72 67 5b 6a 5d 3b 0a 20 20 20 20 20 20  azArg[j];.      
21030 69 66 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 7b  if( z[0]=='-' ){
21040 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20  .        while( 
21050 7a 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b  z[0]=='-' ) z++;
21060 0a 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 20 6f  .        /* No o
21070 70 74 69 6f 6e 73 20 74 6f 20 70 72 6f 63 65 73  ptions to proces
21080 73 20 61 74 20 74 68 69 73 20 74 69 6d 65 20 2a  s at this time *
21090 2f 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  /.        {.    
210a0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
210b0 66 28 73 74 64 65 72 72 2c 20 22 75 6e 6b 6e 6f  f(stderr, "unkno
210c0 77 6e 20 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e 22  wn option: %s\n"
210d0 2c 20 61 7a 41 72 67 5b 6a 5d 29 3b 0a 20 20 20  , azArg[j]);.   
210e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
210f0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
21100 20 7d 65 6c 73 65 20 69 66 28 20 7a 44 65 73 74   }else if( zDest
21110 46 69 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20  File==0 ){.     
21120 20 20 20 7a 44 65 73 74 46 69 6c 65 20 3d 20 61     zDestFile = a
21130 7a 41 72 67 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d  zArg[j];.      }
21140 65 6c 73 65 20 69 66 28 20 7a 44 62 3d 3d 30 20  else if( zDb==0 
21150 29 7b 0a 20 20 20 20 20 20 20 20 7a 44 62 20 3d  ){.        zDb =
21160 20 7a 44 65 73 74 46 69 6c 65 3b 0a 20 20 20 20   zDestFile;.    
21170 20 20 20 20 7a 44 65 73 74 46 69 6c 65 20 3d 20      zDestFile = 
21180 61 7a 41 72 67 5b 6a 5d 3b 0a 20 20 20 20 20 20  azArg[j];.      
21190 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72  }else{.        r
211a0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
211b0 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75  , "too many argu
211c0 6d 65 6e 74 73 20 74 6f 20 2e 62 61 63 6b 75 70  ments to .backup
211d0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 72 65  \n");.        re
211e0 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a  turn 1;.      }.
211f0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 44      }.    if( zD
21200 65 73 74 46 69 6c 65 3d 3d 30 20 29 7b 0a 20 20  estFile==0 ){.  
21210 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
21220 74 64 65 72 72 2c 20 22 6d 69 73 73 69 6e 67 20  tderr, "missing 
21230 46 49 4c 45 4e 41 4d 45 20 61 72 67 75 6d 65 6e  FILENAME argumen
21240 74 20 6f 6e 20 2e 62 61 63 6b 75 70 5c 6e 22 29  t on .backup\n")
21250 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31  ;.      return 1
21260 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
21270 7a 44 62 3d 3d 30 20 29 20 7a 44 62 20 3d 20 22  zDb==0 ) zDb = "
21280 6d 61 69 6e 22 3b 0a 20 20 20 20 72 63 20 3d 20  main";.    rc = 
21290 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 7a 44 65  sqlite3_open(zDe
212a0 73 74 46 69 6c 65 2c 20 26 70 44 65 73 74 29 3b  stFile, &pDest);
212b0 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
212c0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
212d0 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
212e0 72 72 2c 20 22 45 72 72 6f 72 3a 20 63 61 6e 6e  rr, "Error: cann
212f0 6f 74 20 6f 70 65 6e 20 5c 22 25 73 5c 22 5c 6e  ot open \"%s\"\n
21300 22 2c 20 7a 44 65 73 74 46 69 6c 65 29 3b 0a 20  ", zDestFile);. 
21310 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f       sqlite3_clo
21320 73 65 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20  se(pDest);.     
21330 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
21340 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20  .    open_db(p, 
21350 30 29 3b 0a 20 20 20 20 70 42 61 63 6b 75 70 20  0);.    pBackup 
21360 3d 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  = sqlite3_backup
21370 5f 69 6e 69 74 28 70 44 65 73 74 2c 20 22 6d 61  _init(pDest, "ma
21380 69 6e 22 2c 20 70 2d 3e 64 62 2c 20 7a 44 62 29  in", p->db, zDb)
21390 3b 0a 20 20 20 20 69 66 28 20 70 42 61 63 6b 75  ;.    if( pBacku
213a0 70 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74  p==0 ){.      ut
213b0 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
213c0 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c  , "Error: %s\n",
213d0 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
213e0 70 44 65 73 74 29 29 3b 0a 20 20 20 20 20 20 73  pDest));.      s
213f0 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 44 65  qlite3_close(pDe
21400 73 74 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  st);.      retur
21410 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77  n 1;.    }.    w
21420 68 69 6c 65 28 20 20 28 72 63 20 3d 20 73 71 6c  hile(  (rc = sql
21430 69 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70  ite3_backup_step
21440 28 70 42 61 63 6b 75 70 2c 31 30 30 29 29 3d 3d  (pBackup,100))==
21450 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 7d 0a 20 20  SQLITE_OK ){}.  
21460 20 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70    sqlite3_backup
21470 5f 66 69 6e 69 73 68 28 70 42 61 63 6b 75 70 29  _finish(pBackup)
21480 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
21490 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20  LITE_DONE ){.   
214a0 20 20 20 72 63 20 3d 20 30 3b 0a 20 20 20 20 7d     rc = 0;.    }
214b0 65 6c 73 65 7b 0a 20 20 20 20 20 20 75 74 66 38  else{.      utf8
214c0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
214d0 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73  "Error: %s\n", s
214e0 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 44  qlite3_errmsg(pD
214f0 65 73 74 29 29 3b 0a 20 20 20 20 20 20 72 63 20  est));.      rc 
21500 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  = 1;.    }.    s
21510 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 44 65  qlite3_close(pDe
21520 73 74 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20  st);.  }else..  
21530 69 66 28 20 63 3d 3d 27 62 27 20 26 26 20 6e 3e  if( c=='b' && n>
21540 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  =3 && strncmp(az
21550 41 72 67 5b 30 5d 2c 20 22 62 61 69 6c 22 2c 20  Arg[0], "bail", 
21560 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  n)==0 ){.    if(
21570 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20   nArg==2 ){.    
21580 20 20 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20    bail_on_error 
21590 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61  = booleanValue(a
215a0 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65  zArg[1]);.    }e
215b0 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  lse{.      raw_p
215c0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
215d0 73 61 67 65 3a 20 2e 62 61 69 6c 20 6f 6e 7c 6f  sage: .bail on|o
215e0 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  ff\n");.      rc
215f0 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   = 1;.    }.  }e
21600 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 62  lse..  if( c=='b
21610 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72  ' && n>=3 && str
21620 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
21630 62 69 6e 61 72 79 22 2c 20 6e 29 3d 3d 30 20 29  binary", n)==0 )
21640 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d  {.    if( nArg==
21650 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62  2 ){.      if( b
21660 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72  ooleanValue(azAr
21670 67 5b 31 5d 29 20 29 7b 0a 20 20 20 20 20 20 20  g[1]) ){.       
21680 20 73 65 74 42 69 6e 61 72 79 4d 6f 64 65 28 70   setBinaryMode(p
21690 2d 3e 6f 75 74 2c 20 31 29 3b 0a 20 20 20 20 20  ->out, 1);.     
216a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
216b0 73 65 74 54 65 78 74 4d 6f 64 65 28 70 2d 3e 6f  setTextMode(p->o
216c0 75 74 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a  ut, 1);.      }.
216d0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
216e0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
216f0 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 62 69 6e  rr, "Usage: .bin
21700 61 72 79 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a  ary on|off\n");.
21710 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
21720 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
21730 66 28 20 63 3d 3d 27 63 27 20 26 26 20 73 74 72  f( c=='c' && str
21740 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 22 63 64  cmp(azArg[0],"cd
21750 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  ")==0 ){.    if(
21760 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 23 69 66 20   nArg==2 ){.#if 
21770 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
21780 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  || defined(WIN32
21790 29 0a 20 20 20 20 20 20 77 63 68 61 72 5f 74 20  ).      wchar_t 
217a0 2a 7a 20 3d 20 73 71 6c 69 74 65 33 5f 77 69 6e  *z = sqlite3_win
217b0 33 32 5f 75 74 66 38 5f 74 6f 5f 75 6e 69 63 6f  32_utf8_to_unico
217c0 64 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20  de(azArg[1]);.  
217d0 20 20 20 20 72 63 20 3d 20 21 53 65 74 43 75 72      rc = !SetCur
217e0 72 65 6e 74 44 69 72 65 63 74 6f 72 79 57 28 7a  rentDirectoryW(z
217f0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
21800 5f 66 72 65 65 28 7a 29 3b 0a 23 65 6c 73 65 0a  _free(z);.#else.
21810 20 20 20 20 20 20 72 63 20 3d 20 63 68 64 69 72        rc = chdir
21820 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 23 65 6e 64  (azArg[1]);.#end
21830 69 66 0a 20 20 20 20 20 20 69 66 28 20 72 63 20  if.      if( rc 
21840 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
21850 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
21860 43 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 74 6f  Cannot change to
21870 20 64 69 72 65 63 74 6f 72 79 20 5c 22 25 73 5c   directory \"%s\
21880 22 5c 6e 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b  "\n", azArg[1]);
21890 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b  .        rc = 1;
218a0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
218b0 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72  se{.      raw_pr
218c0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
218d0 61 67 65 3a 20 2e 63 64 20 44 49 52 45 43 54 4f  age: .cd DIRECTO
218e0 52 59 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  RY\n");.      rc
218f0 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   = 1;.    }.  }e
21900 6c 73 65 0a 0a 20 20 2f 2a 20 54 68 65 20 75 6e  lse..  /* The un
21910 64 6f 63 75 6d 65 6e 74 65 64 20 22 2e 62 72 65  documented ".bre
21920 61 6b 70 6f 69 6e 74 22 20 63 6f 6d 6d 61 6e 64  akpoint" command
21930 20 63 61 75 73 65 73 20 61 20 63 61 6c 6c 20 74   causes a call t
21940 6f 20 74 68 65 20 6e 6f 2d 6f 70 0a 20 20 2a 2a  o the no-op.  **
21950 20 72 6f 75 74 69 6e 65 20 6e 61 6d 65 64 20 74   routine named t
21960 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 28 29  est_breakpoint()
21970 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d  ..  */.  if( c==
21980 27 62 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73  'b' && n>=3 && s
21990 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
219a0 20 22 62 72 65 61 6b 70 6f 69 6e 74 22 2c 20 6e   "breakpoint", n
219b0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 74 65 73 74  )==0 ){.    test
219c0 5f 62 72 65 61 6b 70 6f 69 6e 74 28 29 3b 0a 20  _breakpoint();. 
219d0 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
219e0 3d 27 63 27 20 26 26 20 6e 3e 3d 33 20 26 26 20  ='c' && n>=3 && 
219f0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
21a00 2c 20 22 63 68 61 6e 67 65 73 22 2c 20 6e 29 3d  , "changes", n)=
21a10 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41  =0 ){.    if( nA
21a20 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 73  rg==2 ){.      s
21a30 65 74 4f 72 43 6c 65 61 72 46 6c 61 67 28 70 2c  etOrClearFlag(p,
21a40 20 53 48 46 4c 47 5f 43 6f 75 6e 74 43 68 61 6e   SHFLG_CountChan
21a50 67 65 73 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a  ges, azArg[1]);.
21a60 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
21a70 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
21a80 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 63 68 61  rr, "Usage: .cha
21a90 6e 67 65 73 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b  nges on|off\n");
21aa0 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
21ab0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
21ac0 2f 2a 20 43 61 6e 63 65 6c 20 6f 75 74 70 75 74  /* Cancel output
21ad0 20 72 65 64 69 72 65 63 74 69 6f 6e 2c 20 69 66   redirection, if
21ae0 20 69 74 20 69 73 20 63 75 72 72 65 6e 74 6c 79   it is currently
21af0 20 73 65 74 20 28 62 79 20 2e 74 65 73 74 63 61   set (by .testca
21b00 73 65 29 0a 20 20 2a 2a 20 54 68 65 6e 20 72 65  se).  ** Then re
21b10 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ad the content o
21b20 66 20 74 68 65 20 74 65 73 74 63 61 73 65 2d 6f  f the testcase-o
21b30 75 74 2e 74 78 74 20 66 69 6c 65 20 61 6e 64 20  ut.txt file and 
21b40 63 6f 6d 70 61 72 65 20 61 67 61 69 6e 73 74 0a  compare against.
21b50 20 20 2a 2a 20 61 7a 41 72 67 5b 31 5d 2e 20 20    ** azArg[1].  
21b60 49 66 20 74 68 65 72 65 20 61 72 65 20 64 69 66  If there are dif
21b70 66 65 72 65 6e 63 65 73 2c 20 72 65 70 6f 72 74  ferences, report
21b80 20 61 6e 20 65 72 72 6f 72 20 61 6e 64 20 65 78   an error and ex
21b90 69 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63  it..  */.  if( c
21ba0 3d 3d 27 63 27 20 26 26 20 6e 3e 3d 33 20 26 26  =='c' && n>=3 &&
21bb0 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
21bc0 5d 2c 20 22 63 68 65 63 6b 22 2c 20 6e 29 3d 3d  ], "check", n)==
21bd0 30 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  0 ){.    char *z
21be0 52 65 73 20 3d 20 30 3b 0a 20 20 20 20 6f 75 74  Res = 0;.    out
21bf0 70 75 74 5f 72 65 73 65 74 28 70 29 3b 0a 20 20  put_reset(p);.  
21c00 20 20 69 66 28 20 6e 41 72 67 21 3d 32 20 29 7b    if( nArg!=2 ){
21c10 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
21c20 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
21c30 3a 20 2e 63 68 65 63 6b 20 47 4c 4f 42 2d 50 41  : .check GLOB-PA
21c40 54 54 45 52 4e 5c 6e 22 29 3b 0a 20 20 20 20 20  TTERN\n");.     
21c50 20 72 63 20 3d 20 32 3b 0a 20 20 20 20 7d 65 6c   rc = 2;.    }el
21c60 73 65 20 69 66 28 20 28 7a 52 65 73 20 3d 20 72  se if( (zRes = r
21c70 65 61 64 46 69 6c 65 28 22 74 65 73 74 63 61 73  eadFile("testcas
21c80 65 2d 6f 75 74 2e 74 78 74 22 2c 20 30 29 29 3d  e-out.txt", 0))=
21c90 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  =0 ){.      raw_
21ca0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
21cb0 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 72 65  Error: cannot re
21cc0 61 64 20 27 74 65 73 74 63 61 73 65 2d 6f 75 74  ad 'testcase-out
21cd0 2e 74 78 74 27 5c 6e 22 29 3b 0a 20 20 20 20 20  .txt'\n");.     
21ce0 20 72 63 20 3d 20 32 3b 0a 20 20 20 20 7d 65 6c   rc = 2;.    }el
21cf0 73 65 20 69 66 28 20 74 65 73 74 63 61 73 65 5f  se if( testcase_
21d00 67 6c 6f 62 28 61 7a 41 72 67 5b 31 5d 2c 7a 52  glob(azArg[1],zR
21d10 65 73 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  es)==0 ){.      
21d20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
21d30 72 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  rr,.            
21d40 20 20 20 20 20 22 74 65 73 74 63 61 73 65 2d 25       "testcase-%
21d50 73 20 46 41 49 4c 45 44 5c 6e 20 45 78 70 65 63  s FAILED\n Expec
21d60 74 65 64 3a 20 5b 25 73 5d 5c 6e 20 20 20 20 20  ted: [%s]\n     
21d70 20 47 6f 74 3a 20 5b 25 73 5d 5c 6e 22 2c 0a 20   Got: [%s]\n",. 
21d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d90 70 2d 3e 7a 54 65 73 74 63 61 73 65 2c 20 61 7a  p->zTestcase, az
21da0 41 72 67 5b 31 5d 2c 20 7a 52 65 73 29 3b 0a 20  Arg[1], zRes);. 
21db0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
21dc0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 75 74   }else{.      ut
21dd0 66 38 5f 70 72 69 6e 74 66 28 73 74 64 6f 75 74  f8_printf(stdout
21de0 2c 20 22 74 65 73 74 63 61 73 65 2d 25 73 20 6f  , "testcase-%s o
21df0 6b 5c 6e 22 2c 20 70 2d 3e 7a 54 65 73 74 63 61  k\n", p->zTestca
21e00 73 65 29 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 43  se);.      p->nC
21e10 68 65 63 6b 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  heck++;.    }.  
21e20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
21e30 52 65 73 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20  Res);.  }else.. 
21e40 20 69 66 28 20 63 3d 3d 27 63 27 20 26 26 20 73   if( c=='c' && s
21e50 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
21e60 20 22 63 6c 6f 6e 65 22 2c 20 6e 29 3d 3d 30 20   "clone", n)==0 
21e70 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d  ){.    if( nArg=
21e80 3d 32 20 29 7b 0a 20 20 20 20 20 20 74 72 79 54  =2 ){.      tryT
21e90 6f 43 6c 6f 6e 65 28 70 2c 20 61 7a 41 72 67 5b  oClone(p, azArg[
21ea0 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  1]);.    }else{.
21eb0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
21ec0 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
21ed0 20 2e 63 6c 6f 6e 65 20 46 49 4c 45 4e 41 4d 45   .clone FILENAME
21ee0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
21ef0 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
21f00 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 64 27 20  e..  if( c=='d' 
21f10 26 26 20 6e 3e 31 20 26 26 20 73 74 72 6e 63 6d  && n>1 && strncm
21f20 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 64 61 74  p(azArg[0], "dat
21f30 61 62 61 73 65 73 22 2c 20 6e 29 3d 3d 30 20 29  abases", n)==0 )
21f40 7b 0a 20 20 20 20 53 68 65 6c 6c 53 74 61 74 65  {.    ShellState
21f50 20 64 61 74 61 3b 0a 20 20 20 20 63 68 61 72 20   data;.    char 
21f60 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  *zErrMsg = 0;.  
21f70 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
21f80 0a 20 20 20 20 6d 65 6d 63 70 79 28 26 64 61 74  .    memcpy(&dat
21f90 61 2c 20 70 2c 20 73 69 7a 65 6f 66 28 64 61 74  a, p, sizeof(dat
21fa0 61 29 29 3b 0a 20 20 20 20 64 61 74 61 2e 73 68  a));.    data.sh
21fb0 6f 77 48 65 61 64 65 72 20 3d 20 30 3b 0a 20 20  owHeader = 0;.  
21fc0 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20 64    data.cMode = d
21fd0 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f  ata.mode = MODE_
21fe0 4c 69 73 74 3b 0a 20 20 20 20 73 71 6c 69 74 65  List;.    sqlite
21ff0 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
22000 66 28 64 61 74 61 2e 63 6f 6c 53 65 70 61 72 61  f(data.colSepara
22010 74 6f 72 29 2c 64 61 74 61 2e 63 6f 6c 53 65 70  tor),data.colSep
22020 61 72 61 74 6f 72 2c 22 3a 20 22 29 3b 0a 20 20  arator,": ");.  
22030 20 20 64 61 74 61 2e 63 6e 74 20 3d 20 30 3b 0a    data.cnt = 0;.
22040 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63      sqlite3_exec
22050 28 70 2d 3e 64 62 2c 20 22 53 45 4c 45 43 54 20  (p->db, "SELECT 
22060 6e 61 6d 65 2c 20 66 69 6c 65 20 46 52 4f 4d 20  name, file FROM 
22070 70 72 61 67 6d 61 5f 64 61 74 61 62 61 73 65 5f  pragma_database_
22080 6c 69 73 74 22 2c 0a 20 20 20 20 20 20 20 20 20  list",.         
22090 20 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b          callback
220a0 2c 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d 73  , &data, &zErrMs
220b0 67 29 3b 0a 20 20 20 20 69 66 28 20 7a 45 72 72  g);.    if( zErr
220c0 4d 73 67 20 29 7b 0a 20 20 20 20 20 20 75 74 66  Msg ){.      utf
220d0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
220e0 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a  "Error: %s\n", z
220f0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 73  ErrMsg);.      s
22100 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72  qlite3_free(zErr
22110 4d 73 67 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  Msg);.      rc =
22120 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
22130 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 64 27 20  e..  if( c=='d' 
22140 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
22150 5b 30 5d 2c 20 22 64 62 69 6e 66 6f 22 2c 20 6e  [0], "dbinfo", n
22160 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  )==0 ){.    rc =
22170 20 73 68 65 6c 6c 5f 64 62 69 6e 66 6f 5f 63 6f   shell_dbinfo_co
22180 6d 6d 61 6e 64 28 70 2c 20 6e 41 72 67 2c 20 61  mmand(p, nArg, a
22190 7a 41 72 67 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a  zArg);.  }else..
221a0 20 20 69 66 28 20 63 3d 3d 27 64 27 20 26 26 20    if( c=='d' && 
221b0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
221c0 2c 20 22 64 75 6d 70 22 2c 20 6e 29 3d 3d 30 20  , "dump", n)==0 
221d0 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  ){.    const cha
221e0 72 20 2a 7a 4c 69 6b 65 20 3d 20 30 3b 0a 20 20  r *zLike = 0;.  
221f0 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74    int i;.    int
22200 20 73 61 76 65 64 53 68 6f 77 48 65 61 64 65 72   savedShowHeader
22210 20 3d 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72   = p->showHeader
22220 3b 0a 20 20 20 20 53 68 65 6c 6c 43 6c 65 61 72  ;.    ShellClear
22230 46 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 50 72  Flag(p, SHFLG_Pr
22240 65 73 65 72 76 65 52 6f 77 69 64 7c 53 48 46 4c  eserveRowid|SHFL
22250 47 5f 4e 65 77 6c 69 6e 65 73 29 3b 0a 20 20 20  G_Newlines);.   
22260 20 66 6f 72 28 69 3d 31 3b 20 69 3c 6e 41 72 67   for(i=1; i<nArg
22270 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66  ; i++){.      if
22280 28 20 61 7a 41 72 67 5b 69 5d 5b 30 5d 3d 3d 27  ( azArg[i][0]=='
22290 2d 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6f  -' ){.        co
222a0 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a  nst char *z = az
222b0 41 72 67 5b 69 5d 2b 31 3b 0a 20 20 20 20 20 20  Arg[i]+1;.      
222c0 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20    if( z[0]=='-' 
222d0 29 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69  ) z++;.        i
222e0 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 70 72 65  f( strcmp(z,"pre
222f0 73 65 72 76 65 2d 72 6f 77 69 64 73 22 29 3d 3d  serve-rowids")==
22300 30 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  0 ){.#ifdef SQLI
22310 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
22320 41 42 4c 45 0a 20 20 20 20 20 20 20 20 20 20 72  ABLE.          r
22330 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
22340 2c 20 22 54 68 65 20 2d 2d 70 72 65 73 65 72 76  , "The --preserv
22350 65 2d 72 6f 77 69 64 73 20 6f 70 74 69 6f 6e 20  e-rowids option 
22360 69 73 20 6e 6f 74 20 63 6f 6d 70 61 74 69 62 6c  is not compatibl
22370 65 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e".             
22380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22390 22 20 77 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d  " with SQLITE_OM
223a0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 5c  IT_VIRTUALTABLE\
223b0 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72  n");.          r
223c0 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  c = 1;.         
223d0 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61   goto meta_comma
223e0 6e 64 5f 65 78 69 74 3b 0a 23 65 6c 73 65 0a 20  nd_exit;.#else. 
223f0 20 20 20 20 20 20 20 20 20 53 68 65 6c 6c 53 65           ShellSe
22400 74 46 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 50  tFlag(p, SHFLG_P
22410 72 65 73 65 72 76 65 52 6f 77 69 64 29 3b 0a 23  reserveRowid);.#
22420 65 6e 64 69 66 0a 20 20 20 20 20 20 20 20 7d 65  endif.        }e
22430 6c 73 65 0a 20 20 20 20 20 20 20 20 69 66 28 20  lse.        if( 
22440 73 74 72 63 6d 70 28 7a 2c 22 6e 65 77 6c 69 6e  strcmp(z,"newlin
22450 65 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  es")==0 ){.     
22460 20 20 20 20 20 53 68 65 6c 6c 53 65 74 46 6c 61       ShellSetFla
22470 67 28 70 2c 20 53 48 46 4c 47 5f 4e 65 77 6c 69  g(p, SHFLG_Newli
22480 6e 65 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  nes);.        }e
22490 6c 73 65 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  lse.        {.  
224a0 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
224b0 74 66 28 73 74 64 65 72 72 2c 20 22 55 6e 6b 6e  tf(stderr, "Unkn
224c0 6f 77 6e 20 6f 70 74 69 6f 6e 20 5c 22 25 73 5c  own option \"%s\
224d0 22 20 6f 6e 20 5c 22 2e 64 75 6d 70 5c 22 5c 6e  " on \".dump\"\n
224e0 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20  ", azArg[i]);.  
224f0 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
22500 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d            goto m
22510 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
22520 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
22530 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 4c 69 6b    }else if( zLik
22540 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  e ){.        raw
22550 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
22560 22 55 73 61 67 65 3a 20 2e 64 75 6d 70 20 3f 2d  "Usage: .dump ?-
22570 2d 70 72 65 73 65 72 76 65 2d 72 6f 77 69 64 73  -preserve-rowids
22580 3f 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  ? ".            
22590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
225a0 3f 2d 2d 6e 65 77 6c 69 6e 65 73 3f 20 3f 4c 49  ?--newlines? ?LI
225b0 4b 45 2d 50 41 54 54 45 52 4e 3f 5c 6e 22 29 3b  KE-PATTERN?\n");
225c0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b  .        rc = 1;
225d0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65  .        goto me
225e0 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
225f0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
22600 20 20 20 20 20 20 7a 4c 69 6b 65 20 3d 20 61 7a        zLike = az
22610 41 72 67 5b 69 5d 3b 0a 20 20 20 20 20 20 7d 0a  Arg[i];.      }.
22620 20 20 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64      }.    open_d
22630 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 2f 2a 20  b(p, 0);.    /* 
22640 57 68 65 6e 20 70 6c 61 79 69 6e 67 20 62 61 63  When playing bac
22650 6b 20 61 20 22 64 75 6d 70 22 2c 20 74 68 65 20  k a "dump", the 
22660 63 6f 6e 74 65 6e 74 20 6d 69 67 68 74 20 61 70  content might ap
22670 70 65 61 72 20 69 6e 20 61 6e 20 6f 72 64 65 72  pear in an order
22680 0a 20 20 20 20 2a 2a 20 77 68 69 63 68 20 63 61  .    ** which ca
22690 75 73 65 73 20 69 6d 6d 65 64 69 61 74 65 20 66  uses immediate f
226a0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
226b0 72 61 69 6e 74 73 20 74 6f 20 62 65 20 76 69 6f  raints to be vio
226c0 6c 61 74 65 64 2e 0a 20 20 20 20 2a 2a 20 53 6f  lated..    ** So
226d0 20 64 69 73 61 62 6c 65 20 66 6f 72 65 69 67 6e   disable foreign
226e0 2d 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20  -key constraint 
226f0 65 6e 66 6f 72 63 65 6d 65 6e 74 20 74 6f 20 70  enforcement to p
22700 72 65 76 65 6e 74 20 70 72 6f 62 6c 65 6d 73 2e  revent problems.
22710 20 2a 2f 0a 20 20 20 20 72 61 77 5f 70 72 69 6e   */.    raw_prin
22720 74 66 28 70 2d 3e 6f 75 74 2c 20 22 50 52 41 47  tf(p->out, "PRAG
22730 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 3d  MA foreign_keys=
22740 4f 46 46 3b 5c 6e 22 29 3b 0a 20 20 20 20 72 61  OFF;\n");.    ra
22750 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
22760 20 22 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54   "BEGIN TRANSACT
22770 49 4f 4e 3b 5c 6e 22 29 3b 0a 20 20 20 20 70 2d  ION;\n");.    p-
22780 3e 77 72 69 74 61 62 6c 65 53 63 68 65 6d 61 20  >writableSchema 
22790 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 73 68 6f 77  = 0;.    p->show
227a0 48 65 61 64 65 72 20 3d 20 30 3b 0a 20 20 20 20  Header = 0;.    
227b0 2f 2a 20 53 65 74 20 77 72 69 74 61 62 6c 65 5f  /* Set writable_
227c0 73 63 68 65 6d 61 3d 4f 4e 20 73 69 6e 63 65 20  schema=ON since 
227d0 64 6f 69 6e 67 20 73 6f 20 66 6f 72 63 65 73 20  doing so forces 
227e0 53 51 4c 69 74 65 20 74 6f 20 69 6e 69 74 69 61  SQLite to initia
227f0 6c 69 7a 65 0a 20 20 20 20 2a 2a 20 61 73 20 6d  lize.    ** as m
22800 75 63 68 20 6f 66 20 74 68 65 20 73 63 68 65 6d  uch of the schem
22810 61 20 61 73 20 69 74 20 63 61 6e 20 65 76 65 6e  a as it can even
22820 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d   if the sqlite_m
22830 61 73 74 65 72 20 74 61 62 6c 65 20 69 73 0a 20  aster table is. 
22840 20 20 20 2a 2a 20 63 6f 72 72 75 70 74 2e 20 2a     ** corrupt. *
22850 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78  /.    sqlite3_ex
22860 65 63 28 70 2d 3e 64 62 2c 20 22 53 41 56 45 50  ec(p->db, "SAVEP
22870 4f 49 4e 54 20 64 75 6d 70 3b 20 50 52 41 47 4d  OINT dump; PRAGM
22880 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d  A writable_schem
22890 61 3d 4f 4e 22 2c 20 30 2c 20 30 2c 20 30 29 3b  a=ON", 0, 0, 0);
228a0 0a 20 20 20 20 70 2d 3e 6e 45 72 72 20 3d 20 30  .    p->nErr = 0
228b0 3b 0a 20 20 20 20 69 66 28 20 7a 4c 69 6b 65 3d  ;.    if( zLike=
228c0 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 75 6e 5f  =0 ){.      run_
228d0 73 63 68 65 6d 61 5f 64 75 6d 70 5f 71 75 65 72  schema_dump_quer
228e0 79 28 70 2c 0a 20 20 20 20 20 20 20 20 22 53 45  y(p,.        "SE
228f0 4c 45 43 54 20 6e 61 6d 65 2c 20 74 79 70 65 2c  LECT name, type,
22900 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65   sql FROM sqlite
22910 5f 6d 61 73 74 65 72 20 22 0a 20 20 20 20 20 20  _master ".      
22920 20 20 22 57 48 45 52 45 20 73 71 6c 20 4e 4f 54    "WHERE sql NOT
22930 20 4e 55 4c 4c 20 41 4e 44 20 74 79 70 65 3d 3d   NULL AND type==
22940 27 74 61 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65  'table' AND name
22950 21 3d 27 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  !='sqlite_sequen
22960 63 65 27 22 0a 20 20 20 20 20 20 29 3b 0a 20 20  ce'".      );.  
22970 20 20 20 20 72 75 6e 5f 73 63 68 65 6d 61 5f 64      run_schema_d
22980 75 6d 70 5f 71 75 65 72 79 28 70 2c 0a 20 20 20  ump_query(p,.   
22990 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d       "SELECT nam
229a0 65 2c 20 74 79 70 65 2c 20 73 71 6c 20 46 52 4f  e, type, sql FRO
229b0 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
229c0 22 0a 20 20 20 20 20 20 20 20 22 57 48 45 52 45  ".        "WHERE
229d0 20 6e 61 6d 65 3d 3d 27 73 71 6c 69 74 65 5f 73   name=='sqlite_s
229e0 65 71 75 65 6e 63 65 27 22 0a 20 20 20 20 20 20  equence'".      
229f0 29 3b 0a 20 20 20 20 20 20 72 75 6e 5f 74 61 62  );.      run_tab
22a00 6c 65 5f 64 75 6d 70 5f 71 75 65 72 79 28 70 2c  le_dump_query(p,
22a10 0a 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  .        "SELECT
22a20 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65   sql FROM sqlite
22a30 5f 6d 61 73 74 65 72 20 22 0a 20 20 20 20 20 20  _master ".      
22a40 20 20 22 57 48 45 52 45 20 73 71 6c 20 4e 4f 54    "WHERE sql NOT
22a50 20 4e 55 4c 4c 20 41 4e 44 20 74 79 70 65 20 49   NULL AND type I
22a60 4e 20 28 27 69 6e 64 65 78 27 2c 27 74 72 69 67  N ('index','trig
22a70 67 65 72 27 2c 27 76 69 65 77 27 29 22 2c 20 30  ger','view')", 0
22a80 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 7d 65  .      );.    }e
22a90 6c 73 65 7b 0a 20 20 20 20 20 20 63 68 61 72 20  lse{.      char 
22aa0 2a 7a 53 71 6c 3b 0a 20 20 20 20 20 20 7a 53 71  *zSql;.      zSq
22ab0 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  l = sqlite3_mpri
22ac0 6e 74 66 28 0a 20 20 20 20 20 20 20 20 22 53 45  ntf(.        "SE
22ad0 4c 45 43 54 20 6e 61 6d 65 2c 20 74 79 70 65 2c  LECT name, type,
22ae0 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65   sql FROM sqlite
22af0 5f 6d 61 73 74 65 72 20 22 0a 20 20 20 20 20 20  _master ".      
22b00 20 20 22 57 48 45 52 45 20 74 62 6c 5f 6e 61 6d    "WHERE tbl_nam
22b10 65 20 4c 49 4b 45 20 25 51 20 41 4e 44 20 74 79  e LIKE %Q AND ty
22b20 70 65 3d 3d 27 74 61 62 6c 65 27 22 0a 20 20 20  pe=='table'".   
22b30 20 20 20 20 20 22 20 20 41 4e 44 20 73 71 6c 20       "  AND sql 
22b40 4e 4f 54 20 4e 55 4c 4c 22 2c 20 7a 4c 69 6b 65  NOT NULL", zLike
22b50 29 3b 0a 20 20 20 20 20 20 72 75 6e 5f 73 63 68  );.      run_sch
22b60 65 6d 61 5f 64 75 6d 70 5f 71 75 65 72 79 28 70  ema_dump_query(p
22b70 2c 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 73 71  ,zSql);.      sq
22b80 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29  lite3_free(zSql)
22b90 3b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 73  ;.      zSql = s
22ba0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 0a  qlite3_mprintf(.
22bb0 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20          "SELECT 
22bc0 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  sql FROM sqlite_
22bd0 6d 61 73 74 65 72 20 22 0a 20 20 20 20 20 20 20  master ".       
22be0 20 22 57 48 45 52 45 20 73 71 6c 20 4e 4f 54 20   "WHERE sql NOT 
22bf0 4e 55 4c 4c 22 0a 20 20 20 20 20 20 20 20 22 20  NULL".        " 
22c00 20 41 4e 44 20 74 79 70 65 20 49 4e 20 28 27 69   AND type IN ('i
22c10 6e 64 65 78 27 2c 27 74 72 69 67 67 65 72 27 2c  ndex','trigger',
22c20 27 76 69 65 77 27 29 22 0a 20 20 20 20 20 20 20  'view')".       
22c30 20 22 20 20 41 4e 44 20 74 62 6c 5f 6e 61 6d 65   "  AND tbl_name
22c40 20 4c 49 4b 45 20 25 51 22 2c 20 7a 4c 69 6b 65   LIKE %Q", zLike
22c50 29 3b 0a 20 20 20 20 20 20 72 75 6e 5f 74 61 62  );.      run_tab
22c60 6c 65 5f 64 75 6d 70 5f 71 75 65 72 79 28 70 2c  le_dump_query(p,
22c70 20 7a 53 71 6c 2c 20 30 29 3b 0a 20 20 20 20 20   zSql, 0);.     
22c80 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53   sqlite3_free(zS
22c90 71 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ql);.    }.    i
22ca0 66 28 20 70 2d 3e 77 72 69 74 61 62 6c 65 53 63  f( p->writableSc
22cb0 68 65 6d 61 20 29 7b 0a 20 20 20 20 20 20 72 61  hema ){.      ra
22cc0 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
22cd0 20 22 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c   "PRAGMA writabl
22ce0 65 5f 73 63 68 65 6d 61 3d 4f 46 46 3b 5c 6e 22  e_schema=OFF;\n"
22cf0 29 3b 0a 20 20 20 20 20 20 70 2d 3e 77 72 69 74  );.      p->writ
22d00 61 62 6c 65 53 63 68 65 6d 61 20 3d 20 30 3b 0a  ableSchema = 0;.
22d10 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
22d20 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 50  3_exec(p->db, "P
22d30 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
22d40 63 68 65 6d 61 3d 4f 46 46 3b 22 2c 20 30 2c 20  chema=OFF;", 0, 
22d50 30 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  0, 0);.    sqlit
22d60 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22  e3_exec(p->db, "
22d70 52 45 4c 45 41 53 45 20 64 75 6d 70 3b 22 2c 20  RELEASE dump;", 
22d80 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 72 61  0, 0, 0);.    ra
22d90 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
22da0 20 70 2d 3e 6e 45 72 72 20 3f 20 22 52 4f 4c 4c   p->nErr ? "ROLL
22db0 42 41 43 4b 3b 20 2d 2d 20 64 75 65 20 74 6f 20  BACK; -- due to 
22dc0 65 72 72 6f 72 73 5c 6e 22 20 3a 20 22 43 4f 4d  errors\n" : "COM
22dd0 4d 49 54 3b 5c 6e 22 29 3b 0a 20 20 20 20 70 2d  MIT;\n");.    p-
22de0 3e 73 68 6f 77 48 65 61 64 65 72 20 3d 20 73 61  >showHeader = sa
22df0 76 65 64 53 68 6f 77 48 65 61 64 65 72 3b 0a 20  vedShowHeader;. 
22e00 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
22e10 3d 27 65 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='e' && strncmp(
22e20 61 7a 41 72 67 5b 30 5d 2c 20 22 65 63 68 6f 22  azArg[0], "echo"
22e30 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  , n)==0 ){.    i
22e40 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20  f( nArg==2 ){.  
22e50 20 20 20 20 73 65 74 4f 72 43 6c 65 61 72 46 6c      setOrClearFl
22e60 61 67 28 70 2c 20 53 48 46 4c 47 5f 45 63 68 6f  ag(p, SHFLG_Echo
22e70 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  , azArg[1]);.   
22e80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61   }else{.      ra
22e90 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
22ea0 20 22 55 73 61 67 65 3a 20 2e 65 63 68 6f 20 6f   "Usage: .echo o
22eb0 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20  n|off\n");.     
22ec0 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20   rc = 1;.    }. 
22ed0 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
22ee0 3d 27 65 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='e' && strncmp(
22ef0 61 7a 41 72 67 5b 30 5d 2c 20 22 65 71 70 22 2c  azArg[0], "eqp",
22f00 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66   n)==0 ){.    if
22f10 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20  ( nArg==2 ){.   
22f20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a     if( strcmp(az
22f30 41 72 67 5b 31 5d 2c 22 66 75 6c 6c 22 29 3d 3d  Arg[1],"full")==
22f40 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e  0 ){.        p->
22f50 61 75 74 6f 45 51 50 20 3d 20 41 55 54 4f 45 51  autoEQP = AUTOEQ
22f60 50 5f 66 75 6c 6c 3b 0a 20 20 20 20 20 20 7d 65  P_full;.      }e
22f70 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61  lse if( strcmp(a
22f80 7a 41 72 67 5b 31 5d 2c 22 74 72 69 67 67 65 72  zArg[1],"trigger
22f90 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
22fa0 20 70 2d 3e 61 75 74 6f 45 51 50 20 3d 20 41 55   p->autoEQP = AU
22fb0 54 4f 45 51 50 5f 74 72 69 67 67 65 72 3b 0a 20  TOEQP_trigger;. 
22fc0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
22fd0 20 20 20 20 70 2d 3e 61 75 74 6f 45 51 50 20 3d      p->autoEQP =
22fe0 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a   booleanValue(az
22ff0 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 7d  Arg[1]);.      }
23000 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
23010 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
23020 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 65 71  err, "Usage: .eq
23030 70 20 6f 66 66 7c 6f 6e 7c 74 72 69 67 67 65 72  p off|on|trigger
23040 7c 66 75 6c 6c 5c 6e 22 29 3b 0a 20 20 20 20 20  |full\n");.     
23050 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20   rc = 1;.    }. 
23060 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
23070 3d 27 65 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='e' && strncmp(
23080 61 7a 41 72 67 5b 30 5d 2c 20 22 65 78 69 74 22  azArg[0], "exit"
23090 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  , n)==0 ){.    i
230a0 66 28 20 6e 41 72 67 3e 31 20 26 26 20 28 72 63  f( nArg>1 && (rc
230b0 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56   = (int)integerV
230c0 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 29 21  alue(azArg[1]))!
230d0 3d 30 20 29 20 65 78 69 74 28 72 63 29 3b 0a 20  =0 ) exit(rc);. 
230e0 20 20 20 72 63 20 3d 20 32 3b 0a 20 20 7d 65 6c     rc = 2;.  }el
230f0 73 65 0a 0a 20 20 2f 2a 20 54 68 65 20 22 2e 65  se..  /* The ".e
23100 78 70 6c 61 69 6e 22 20 63 6f 6d 6d 61 6e 64 20  xplain" command 
23110 69 73 20 61 75 74 6f 6d 61 74 69 63 20 6e 6f 77  is automatic now
23120 2e 20 20 49 74 20 69 73 20 6c 61 72 67 65 6c 79  .  It is largely
23130 20 70 6f 69 6e 74 6c 65 73 73 2e 20 20 49 74 0a   pointless.  It.
23140 20 20 2a 2a 20 72 65 74 61 69 6e 65 64 20 70 75    ** retained pu
23150 72 65 6c 79 20 66 6f 72 20 62 61 63 6b 77 61 72  rely for backwar
23160 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
23170 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27 65 27   */.  if( c=='e'
23180 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
23190 67 5b 30 5d 2c 20 22 65 78 70 6c 61 69 6e 22 2c  g[0], "explain",
231a0 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e   n)==0 ){.    in
231b0 74 20 76 61 6c 20 3d 20 31 3b 0a 20 20 20 20 69  t val = 1;.    i
231c0 66 28 20 6e 41 72 67 3e 3d 32 20 29 7b 0a 20 20  f( nArg>=2 ){.  
231d0 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61      if( strcmp(a
231e0 7a 41 72 67 5b 31 5d 2c 22 61 75 74 6f 22 29 3d  zArg[1],"auto")=
231f0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 76 61  =0 ){.        va
23200 6c 20 3d 20 39 39 3b 0a 20 20 20 20 20 20 7d 65  l = 99;.      }e
23210 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 76 61 6c  lse{.        val
23220 20 3d 20 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65   =  booleanValue
23230 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20  (azArg[1]);.    
23240 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
23250 28 20 76 61 6c 3d 3d 31 20 26 26 20 70 2d 3e 6d  ( val==1 && p->m
23260 6f 64 65 21 3d 4d 4f 44 45 5f 45 78 70 6c 61 69  ode!=MODE_Explai
23270 6e 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 6f  n ){.      p->no
23280 72 6d 61 6c 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f  rmalMode = p->mo
23290 64 65 3b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64  de;.      p->mod
232a0 65 20 3d 20 4d 4f 44 45 5f 45 78 70 6c 61 69 6e  e = MODE_Explain
232b0 3b 0a 20 20 20 20 20 20 70 2d 3e 61 75 74 6f 45  ;.      p->autoE
232c0 78 70 6c 61 69 6e 20 3d 20 30 3b 0a 20 20 20 20  xplain = 0;.    
232d0 7d 65 6c 73 65 20 69 66 28 20 76 61 6c 3d 3d 30  }else if( val==0
232e0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 2d   ){.      if( p-
232f0 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c  >mode==MODE_Expl
23300 61 69 6e 20 29 20 70 2d 3e 6d 6f 64 65 20 3d 20  ain ) p->mode = 
23310 70 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 3b 0a 20  p->normalMode;. 
23320 20 20 20 20 20 70 2d 3e 61 75 74 6f 45 78 70 6c       p->autoExpl
23330 61 69 6e 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ain = 0;.    }el
23340 73 65 20 69 66 28 20 76 61 6c 3d 3d 39 39 20 29  se if( val==99 )
23350 7b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6d  {.      if( p->m
23360 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c 61 69  ode==MODE_Explai
23370 6e 20 29 20 70 2d 3e 6d 6f 64 65 20 3d 20 70 2d  n ) p->mode = p-
23380 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 3b 0a 20 20 20  >normalMode;.   
23390 20 20 20 70 2d 3e 61 75 74 6f 45 78 70 6c 61 69     p->autoExplai
233a0 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  n = 1;.    }.  }
233b0 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
233c0 65 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  e' && strncmp(az
233d0 41 72 67 5b 30 5d 2c 20 22 65 78 70 65 72 74 22  Arg[0], "expert"
233e0 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 6f  , n)==0 ){.    o
233f0 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20  pen_db(p, 0);.  
23400 20 20 65 78 70 65 72 74 44 6f 74 43 6f 6d 6d 61    expertDotComma
23410 6e 64 28 70 2c 20 61 7a 41 72 67 2c 20 6e 41 72  nd(p, azArg, nAr
23420 67 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69  g);.  }else..  i
23430 66 28 20 63 3d 3d 27 66 27 20 26 26 20 73 74 72  f( c=='f' && str
23440 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
23450 66 75 6c 6c 73 63 68 65 6d 61 22 2c 20 6e 29 3d  fullschema", n)=
23460 3d 30 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c 53  =0 ){.    ShellS
23470 74 61 74 65 20 64 61 74 61 3b 0a 20 20 20 20 63  tate data;.    c
23480 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30  har *zErrMsg = 0
23490 3b 0a 20 20 20 20 69 6e 74 20 64 6f 53 74 61 74  ;.    int doStat
234a0 73 20 3d 20 30 3b 0a 20 20 20 20 6d 65 6d 63 70  s = 0;.    memcp
234b0 79 28 26 64 61 74 61 2c 20 70 2c 20 73 69 7a 65  y(&data, p, size
234c0 6f 66 28 64 61 74 61 29 29 3b 0a 20 20 20 20 64  of(data));.    d
234d0 61 74 61 2e 73 68 6f 77 48 65 61 64 65 72 20 3d  ata.showHeader =
234e0 20 30 3b 0a 20 20 20 20 64 61 74 61 2e 63 4d 6f   0;.    data.cMo
234f0 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d  de = data.mode =
23500 20 4d 4f 44 45 5f 53 65 6d 69 3b 0a 20 20 20 20   MODE_Semi;.    
23510 69 66 28 20 6e 41 72 67 3d 3d 32 20 26 26 20 6f  if( nArg==2 && o
23520 70 74 69 6f 6e 4d 61 74 63 68 28 61 7a 41 72 67  ptionMatch(azArg
23530 5b 31 5d 2c 20 22 69 6e 64 65 6e 74 22 29 20 29  [1], "indent") )
23540 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 63 4d 6f  {.      data.cMo
23550 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d  de = data.mode =
23560 20 4d 4f 44 45 5f 50 72 65 74 74 79 3b 0a 20 20   MODE_Pretty;.  
23570 20 20 20 20 6e 41 72 67 20 3d 20 31 3b 0a 20 20      nArg = 1;.  
23580 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 41 72 67    }.    if( nArg
23590 21 3d 31 20 29 7b 0a 20 20 20 20 20 20 72 61 77  !=1 ){.      raw
235a0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
235b0 22 55 73 61 67 65 3a 20 2e 66 75 6c 6c 73 63 68  "Usage: .fullsch
235c0 65 6d 61 20 3f 2d 2d 69 6e 64 65 6e 74 3f 5c 6e  ema ?--indent?\n
235d0 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
235e0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
235f0 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
23600 20 20 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64      }.    open_d
23610 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 72 63 20  b(p, 0);.    rc 
23620 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70  = sqlite3_exec(p
23630 2d 3e 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45  ->db,.       "SE
23640 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 22 0a 20  LECT sql FROM". 
23650 20 20 20 20 20 20 22 20 20 28 53 45 4c 45 43 54        "  (SELECT
23660 20 73 71 6c 20 73 71 6c 2c 20 74 79 70 65 20 74   sql sql, type t
23670 79 70 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 74 62  ype, tbl_name tb
23680 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 20 6e 61 6d  l_name, name nam
23690 65 2c 20 72 6f 77 69 64 20 78 22 0a 20 20 20 20  e, rowid x".    
236a0 20 20 20 22 20 20 20 20 20 46 52 4f 4d 20 73 71     "     FROM sq
236b0 6c 69 74 65 5f 6d 61 73 74 65 72 20 55 4e 49 4f  lite_master UNIO
236c0 4e 20 41 4c 4c 22 0a 20 20 20 20 20 20 20 22 20  N ALL".       " 
236d0 20 20 53 45 4c 45 43 54 20 73 71 6c 2c 20 74 79    SELECT sql, ty
236e0 70 65 2c 20 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61  pe, tbl_name, na
236f0 6d 65 2c 20 72 6f 77 69 64 20 46 52 4f 4d 20 73  me, rowid FROM s
23700 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
23710 72 29 20 22 0a 20 20 20 20 20 20 20 22 57 48 45  r) ".       "WHE
23720 52 45 20 74 79 70 65 21 3d 27 6d 65 74 61 27 20  RE type!='meta' 
23730 41 4e 44 20 73 71 6c 20 4e 4f 54 4e 55 4c 4c 20  AND sql NOTNULL 
23740 41 4e 44 20 6e 61 6d 65 20 4e 4f 54 20 4c 49 4b  AND name NOT LIK
23750 45 20 27 73 71 6c 69 74 65 5f 25 27 20 22 0a 20  E 'sqlite_%' ". 
23760 20 20 20 20 20 20 22 4f 52 44 45 52 20 42 59 20        "ORDER BY 
23770 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 63  rowid",.       c
23780 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c 20  allback, &data, 
23790 26 7a 45 72 72 4d 73 67 0a 20 20 20 20 29 3b 0a  &zErrMsg.    );.
237a0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
237b0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73  TE_OK ){.      s
237c0 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
237d0 6d 74 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  mt;.      rc = s
237e0 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
237f0 32 28 70 2d 3e 64 62 2c 0a 20 20 20 20 20 20 20  2(p->db,.       
23800 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20          "SELECT 
23810 72 6f 77 69 64 20 46 52 4f 4d 20 73 71 6c 69 74  rowid FROM sqlit
23820 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20 20 20  e_master".      
23830 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52 45           " WHERE
23840 20 6e 61 6d 65 20 47 4c 4f 42 20 27 73 71 6c 69   name GLOB 'sqli
23850 74 65 5f 73 74 61 74 5b 31 33 34 5d 27 22 2c 0a  te_stat[134]'",.
23860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
23870 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20  1, &pStmt, 0);. 
23880 20 20 20 20 20 64 6f 53 74 61 74 73 20 3d 20 73       doStats = s
23890 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d  qlite3_step(pStm
238a0 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 3b 0a  t)==SQLITE_ROW;.
238b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69        sqlite3_fi
238c0 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20  nalize(pStmt);. 
238d0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 64 6f 53     }.    if( doS
238e0 74 61 74 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20  tats==0 ){.     
238f0 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
23900 75 74 2c 20 22 2f 2a 20 4e 6f 20 53 54 41 54 20  ut, "/* No STAT 
23910 74 61 62 6c 65 73 20 61 76 61 69 6c 61 62 6c 65  tables available
23920 20 2a 2f 5c 6e 22 29 3b 0a 20 20 20 20 7d 65 6c   */\n");.    }el
23930 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72  se{.      raw_pr
23940 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 41 4e  intf(p->out, "AN
23950 41 4c 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73  ALYZE sqlite_mas
23960 74 65 72 3b 5c 6e 22 29 3b 0a 20 20 20 20 20 20  ter;\n");.      
23970 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e  sqlite3_exec(p->
23980 64 62 2c 20 22 53 45 4c 45 43 54 20 27 41 4e 41  db, "SELECT 'ANA
23990 4c 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74  LYZE sqlite_mast
239a0 65 72 27 22 2c 0a 20 20 20 20 20 20 20 20 20 20  er'",.          
239b0 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63           callbac
239c0 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d  k, &data, &zErrM
239d0 73 67 29 3b 0a 20 20 20 20 20 20 64 61 74 61 2e  sg);.      data.
239e0 63 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64  cMode = data.mod
239f0 65 20 3d 20 4d 4f 44 45 5f 49 6e 73 65 72 74 3b  e = MODE_Insert;
23a00 0a 20 20 20 20 20 20 64 61 74 61 2e 7a 44 65 73  .      data.zDes
23a10 74 54 61 62 6c 65 20 3d 20 22 73 71 6c 69 74 65  tTable = "sqlite
23a20 5f 73 74 61 74 31 22 3b 0a 20 20 20 20 20 20 73  _stat1";.      s
23a30 68 65 6c 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c  hell_exec(p->db,
23a40 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
23a50 73 71 6c 69 74 65 5f 73 74 61 74 31 22 2c 0a 20  sqlite_stat1",. 
23a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a70 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20  shell_callback, 
23a80 26 64 61 74 61 2c 26 7a 45 72 72 4d 73 67 29 3b  &data,&zErrMsg);
23a90 0a 20 20 20 20 20 20 64 61 74 61 2e 7a 44 65 73  .      data.zDes
23aa0 74 54 61 62 6c 65 20 3d 20 22 73 71 6c 69 74 65  tTable = "sqlite
23ab0 5f 73 74 61 74 33 22 3b 0a 20 20 20 20 20 20 73  _stat3";.      s
23ac0 68 65 6c 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c  hell_exec(p->db,
23ad0 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
23ae0 73 71 6c 69 74 65 5f 73 74 61 74 33 22 2c 0a 20  sqlite_stat3",. 
23af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b00 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20  shell_callback, 
23b10 26 64 61 74 61 2c 26 7a 45 72 72 4d 73 67 29 3b  &data,&zErrMsg);
23b20 0a 20 20 20 20 20 20 64 61 74 61 2e 7a 44 65 73  .      data.zDes
23b30 74 54 61 62 6c 65 20 3d 20 22 73 71 6c 69 74 65  tTable = "sqlite
23b40 5f 73 74 61 74 34 22 3b 0a 20 20 20 20 20 20 73  _stat4";.      s
23b50 68 65 6c 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c  hell_exec(p->db,
23b60 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
23b70 73 71 6c 69 74 65 5f 73 74 61 74 34 22 2c 0a 20  sqlite_stat4",. 
23b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b90 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20  shell_callback, 
23ba0 26 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29  &data, &zErrMsg)
23bb0 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  ;.      raw_prin
23bc0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c  tf(p->out, "ANAL
23bd0 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  YZE sqlite_maste
23be0 72 3b 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20  r;\n");.    }.  
23bf0 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
23c00 27 68 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'h' && strncmp(a
23c10 7a 41 72 67 5b 30 5d 2c 20 22 68 65 61 64 65 72  zArg[0], "header
23c20 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  s", n)==0 ){.   
23c30 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a   if( nArg==2 ){.
23c40 20 20 20 20 20 20 70 2d 3e 73 68 6f 77 48 65 61        p->showHea
23c50 64 65 72 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c  der = booleanVal
23c60 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20  ue(azArg[1]);.  
23c70 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
23c80 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
23c90 2c 20 22 55 73 61 67 65 3a 20 2e 68 65 61 64 65  , "Usage: .heade
23ca0 72 73 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20  rs on|off\n");. 
23cb0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
23cc0 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66   }.  }else..  if
23cd0 28 20 63 3d 3d 27 68 27 20 26 26 20 73 74 72 6e  ( c=='h' && strn
23ce0 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 68  cmp(azArg[0], "h
23cf0 65 6c 70 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  elp", n)==0 ){. 
23d00 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
23d10 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 48 65  ->out, "%s", zHe
23d20 6c 70 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20  lp);.  }else..  
23d30 69 66 28 20 63 3d 3d 27 69 27 20 26 26 20 73 74  if( c=='i' && st
23d40 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
23d50 22 69 6d 70 6f 72 74 22 2c 20 6e 29 3d 3d 30 20  "import", n)==0 
23d60 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 61  ){.    char *zTa
23d70 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
23d80 20 20 20 2f 2a 20 49 6e 73 65 72 74 20 64 61 74     /* Insert dat
23d90 61 20 69 6e 74 6f 20 74 68 69 73 20 74 61 62 6c  a into this tabl
23da0 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
23db0 46 69 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  File;           
23dc0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
23dd0 66 69 6c 65 20 74 6f 20 65 78 74 72 61 20 63 6f  file to extra co
23de0 6e 74 65 6e 74 20 66 72 6f 6d 20 2a 2f 0a 20 20  ntent from */.  
23df0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
23e00 70 53 74 6d 74 20 3d 20 4e 55 4c 4c 3b 20 2f 2a  pStmt = NULL; /*
23e10 20 41 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a   A statement */.
23e20 20 20 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20      int nCol;   
23e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e40 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
23e50 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
23e60 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 42 79  e */.    int nBy
23e70 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
23e80 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
23e90 66 20 62 79 74 65 73 20 69 6e 20 61 6e 20 53 51  f bytes in an SQ
23ea0 4c 20 73 74 72 69 6e 67 20 2a 2f 0a 20 20 20 20  L string */.    
23eb0 69 6e 74 20 69 2c 20 6a 3b 20 20 20 20 20 20 20  int i, j;       
23ec0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
23ed0 6f 6f 70 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  oop counters */.
23ee0 20 20 20 20 69 6e 74 20 6e 65 65 64 43 6f 6d 6d      int needComm
23ef0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
23f00 2f 2a 20 54 72 75 65 20 74 6f 20 43 4f 4d 4d 49  /* True to COMMI
23f10 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 61 74  T or ROLLBACK at
23f20 20 65 6e 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20   end */.    int 
23f30 6e 53 65 70 3b 20 20 20 20 20 20 20 20 20 20 20  nSep;           
23f40 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
23f50 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 70 2d  r of bytes in p-
23f60 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 5b 5d 20  >colSeparator[] 
23f70 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 71  */.    char *zSq
23f80 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
23f90 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 73 74 61     /* An SQL sta
23fa0 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 20 20 49 6d  tement */.    Im
23fb0 70 6f 72 74 43 74 78 20 73 43 74 78 3b 20 20 20  portCtx sCtx;   
23fc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 61            /* Rea
23fd0 64 65 72 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  der context */. 
23fe0 20 20 20 63 68 61 72 20 2a 28 53 51 4c 49 54 45     char *(SQLITE
23ff0 5f 43 44 45 43 4c 20 2a 78 52 65 61 64 29 28 49  _CDECL *xRead)(I
24000 6d 70 6f 72 74 43 74 78 2a 29 3b 20 2f 2a 20 46  mportCtx*); /* F
24010 75 6e 63 20 74 6f 20 72 65 61 64 20 6f 6e 65 20  unc to read one 
24020 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 69 6e 74  value */.    int
24030 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a   (SQLITE_CDECL *
24040 78 43 6c 6f 73 65 72 29 28 46 49 4c 45 2a 29 3b  xCloser)(FILE*);
24050 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 20 74 6f        /* Func to
24060 20 63 6c 6f 73 65 20 66 69 6c 65 20 2a 2f 0a 0a   close file */..
24070 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d 33 20      if( nArg!=3 
24080 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
24090 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
240a0 67 65 3a 20 2e 69 6d 70 6f 72 74 20 46 49 4c 45  ge: .import FILE
240b0 20 54 41 42 4c 45 5c 6e 22 29 3b 0a 20 20 20 20   TABLE\n");.    
240c0 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d    goto meta_comm
240d0 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a  and_exit;.    }.
240e0 20 20 20 20 7a 46 69 6c 65 20 3d 20 61 7a 41 72      zFile = azAr
240f0 67 5b 31 5d 3b 0a 20 20 20 20 7a 54 61 62 6c 65  g[1];.    zTable
24100 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a 20 20 20   = azArg[2];.   
24110 20 73 65 65 6e 49 6e 74 65 72 72 75 70 74 20 3d   seenInterrupt =
24120 20 30 3b 0a 20 20 20 20 6d 65 6d 73 65 74 28 26   0;.    memset(&
24130 73 43 74 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28  sCtx, 0, sizeof(
24140 73 43 74 78 29 29 3b 0a 20 20 20 20 6f 70 65 6e  sCtx));.    open
24150 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 6e  _db(p, 0);.    n
24160 53 65 70 20 3d 20 73 74 72 6c 65 6e 33 30 28 70  Sep = strlen30(p
24170 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b  ->colSeparator);
24180 0a 20 20 20 20 69 66 28 20 6e 53 65 70 3d 3d 30  .    if( nSep==0
24190 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
241a0 69 6e 74 66 28 73 74 64 65 72 72 2c 0a 20 20 20  intf(stderr,.   
241b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 45                "E
241c0 72 72 6f 72 3a 20 6e 6f 6e 2d 6e 75 6c 6c 20 63  rror: non-null c
241d0 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 20  olumn separator 
241e0 72 65 71 75 69 72 65 64 20 66 6f 72 20 69 6d 70  required for imp
241f0 6f 72 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  ort\n");.      r
24200 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
24210 20 20 20 69 66 28 20 6e 53 65 70 3e 31 20 29 7b     if( nSep>1 ){
24220 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
24230 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
24240 3a 20 6d 75 6c 74 69 2d 63 68 61 72 61 63 74 65  : multi-characte
24250 72 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74  r column separat
24260 6f 72 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 22  ors not allowed"
24270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24280 20 20 20 20 20 20 20 22 20 66 6f 72 20 69 6d 70         " for imp
24290 6f 72 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  ort\n");.      r
242a0 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
242b0 20 20 20 6e 53 65 70 20 3d 20 73 74 72 6c 65 6e     nSep = strlen
242c0 33 30 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74  30(p->rowSeparat
242d0 6f 72 29 3b 0a 20 20 20 20 69 66 28 20 6e 53 65  or);.    if( nSe
242e0 70 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61  p==0 ){.      ra
242f0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
24300 20 22 45 72 72 6f 72 3a 20 6e 6f 6e 2d 6e 75 6c   "Error: non-nul
24310 6c 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 20  l row separator 
24320 72 65 71 75 69 72 65 64 20 66 6f 72 20 69 6d 70  required for imp
24330 6f 72 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  ort\n");.      r
24340 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
24350 20 20 20 69 66 28 20 6e 53 65 70 3d 3d 32 20 26     if( nSep==2 &
24360 26 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f  & p->mode==MODE_
24370 43 73 76 20 26 26 20 73 74 72 63 6d 70 28 70 2d  Csv && strcmp(p-
24380 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53  >rowSeparator, S
24390 45 50 5f 43 72 4c 66 29 3d 3d 30 20 29 7b 0a 20  EP_CrLf)==0 ){. 
243a0 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 69 6d 70       /* When imp
243b0 6f 72 74 69 6e 67 20 43 53 56 20 28 6f 6e 6c 79  orting CSV (only
243c0 29 2c 20 69 66 20 74 68 65 20 72 6f 77 20 73 65  ), if the row se
243d0 70 61 72 61 74 6f 72 20 69 73 20 73 65 74 20 74  parator is set t
243e0 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 64  o the.      ** d
243f0 65 66 61 75 6c 74 20 6f 75 74 70 75 74 20 72 6f  efault output ro
24400 77 20 73 65 70 61 72 61 74 6f 72 2c 20 63 68 61  w separator, cha
24410 6e 67 65 20 69 74 20 74 6f 20 74 68 65 20 64 65  nge it to the de
24420 66 61 75 6c 74 20 69 6e 70 75 74 0a 20 20 20 20  fault input.    
24430 20 20 2a 2a 20 72 6f 77 20 73 65 70 61 72 61 74    ** row separat
24440 6f 72 2e 20 20 54 68 69 73 20 61 76 6f 69 64 73  or.  This avoids
24450 20 68 61 76 69 6e 67 20 74 6f 20 6d 61 69 6e 74   having to maint
24460 61 69 6e 20 64 69 66 66 65 72 65 6e 74 20 69 6e  ain different in
24470 70 75 74 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64  put.      ** and
24480 20 6f 75 74 70 75 74 20 72 6f 77 20 73 65 70 61   output row sepa
24490 72 61 74 6f 72 73 2e 20 2a 2f 0a 20 20 20 20 20  rators. */.     
244a0 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
244b0 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53  f(sizeof(p->rowS
244c0 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f  eparator), p->ro
244d0 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f  wSeparator, SEP_
244e0 52 6f 77 29 3b 0a 20 20 20 20 20 20 6e 53 65 70  Row);.      nSep
244f0 20 3d 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e 72   = strlen30(p->r
24500 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  owSeparator);.  
24510 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 53 65 70    }.    if( nSep
24520 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  >1 ){.      raw_
24530 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
24540 45 72 72 6f 72 3a 20 6d 75 6c 74 69 2d 63 68 61  Error: multi-cha
24550 72 61 63 74 65 72 20 72 6f 77 20 73 65 70 61 72  racter row separ
24560 61 74 6f 72 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  ators not allowe
24570 64 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d".             
24580 20 20 20 20 20 20 20 20 20 22 20 66 6f 72 20 69           " for i
24590 6d 70 6f 72 74 5c 6e 22 29 3b 0a 20 20 20 20 20  mport\n");.     
245a0 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
245b0 0a 20 20 20 20 73 43 74 78 2e 7a 46 69 6c 65 20  .    sCtx.zFile 
245c0 3d 20 7a 46 69 6c 65 3b 0a 20 20 20 20 73 43 74  = zFile;.    sCt
245d0 78 2e 6e 4c 69 6e 65 20 3d 20 31 3b 0a 20 20 20  x.nLine = 1;.   
245e0 20 69 66 28 20 73 43 74 78 2e 7a 46 69 6c 65 5b   if( sCtx.zFile[
245f0 30 5d 3d 3d 27 7c 27 20 29 7b 0a 23 69 66 64 65  0]=='|' ){.#ifde
24600 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 4f  f SQLITE_OMIT_PO
24610 50 45 4e 0a 20 20 20 20 20 20 72 61 77 5f 70 72  PEN.      raw_pr
24620 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
24630 72 6f 72 3a 20 70 69 70 65 73 20 61 72 65 20 6e  ror: pipes are n
24640 6f 74 20 73 75 70 70 6f 72 74 65 64 20 69 6e 20  ot supported in 
24650 74 68 69 73 20 4f 53 5c 6e 22 29 3b 0a 20 20 20  this OS\n");.   
24660 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6c     return 1;.#el
24670 73 65 0a 20 20 20 20 20 20 73 43 74 78 2e 69 6e  se.      sCtx.in
24680 20 3d 20 70 6f 70 65 6e 28 73 43 74 78 2e 7a 46   = popen(sCtx.zF
24690 69 6c 65 2b 31 2c 20 22 72 22 29 3b 0a 20 20 20  ile+1, "r");.   
246a0 20 20 20 73 43 74 78 2e 7a 46 69 6c 65 20 3d 20     sCtx.zFile = 
246b0 22 3c 70 69 70 65 3e 22 3b 0a 20 20 20 20 20 20  "<pipe>";.      
246c0 78 43 6c 6f 73 65 72 20 3d 20 70 63 6c 6f 73 65  xCloser = pclose
246d0 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 65 6c  ;.#endif.    }el
246e0 73 65 7b 0a 20 20 20 20 20 20 73 43 74 78 2e 69  se{.      sCtx.i
246f0 6e 20 3d 20 66 6f 70 65 6e 28 73 43 74 78 2e 7a  n = fopen(sCtx.z
24700 46 69 6c 65 2c 20 22 72 62 22 29 3b 0a 20 20 20  File, "rb");.   
24710 20 20 20 78 43 6c 6f 73 65 72 20 3d 20 66 63 6c     xCloser = fcl
24720 6f 73 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ose;.    }.    i
24730 66 28 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45  f( p->mode==MODE
24740 5f 41 73 63 69 69 20 29 7b 0a 20 20 20 20 20 20  _Ascii ){.      
24750 78 52 65 61 64 20 3d 20 61 73 63 69 69 5f 72 65  xRead = ascii_re
24760 61 64 5f 6f 6e 65 5f 66 69 65 6c 64 3b 0a 20 20  ad_one_field;.  
24770 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 78    }else{.      x
24780 52 65 61 64 20 3d 20 63 73 76 5f 72 65 61 64 5f  Read = csv_read_
24790 6f 6e 65 5f 66 69 65 6c 64 3b 0a 20 20 20 20 7d  one_field;.    }
247a0 0a 20 20 20 20 69 66 28 20 73 43 74 78 2e 69 6e  .    if( sCtx.in
247b0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66  ==0 ){.      utf
247c0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
247d0 20 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20   "Error: cannot 
247e0 6f 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20  open \"%s\"\n", 
247f0 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 72 65  zFile);.      re
24800 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20  turn 1;.    }.  
24810 20 20 73 43 74 78 2e 63 43 6f 6c 53 65 70 20 3d    sCtx.cColSep =
24820 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72   p->colSeparator
24830 5b 30 5d 3b 0a 20 20 20 20 73 43 74 78 2e 63 52  [0];.    sCtx.cR
24840 6f 77 53 65 70 20 3d 20 70 2d 3e 72 6f 77 53 65  owSep = p->rowSe
24850 70 61 72 61 74 6f 72 5b 30 5d 3b 0a 20 20 20 20  parator[0];.    
24860 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d  zSql = sqlite3_m
24870 70 72 69 6e 74 66 28 22 53 45 4c 45 43 54 20 2a  printf("SELECT *
24880 20 46 52 4f 4d 20 25 73 22 2c 20 7a 54 61 62 6c   FROM %s", zTabl
24890 65 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c  e);.    if( zSql
248a0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77  ==0 ){.      raw
248b0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
248c0 22 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66 20 6d  "Error: out of m
248d0 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20 20  emory\n");.     
248e0 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e   xCloser(sCtx.in
248f0 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
24900 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 42 79  1;.    }.    nBy
24910 74 65 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 53  te = strlen30(zS
24920 71 6c 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  ql);.    rc = sq
24930 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
24940 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d 31  (p->db, zSql, -1
24950 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20  , &pStmt, 0);.  
24960 20 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f    import_append_
24970 63 68 61 72 28 26 73 43 74 78 2c 20 30 29 3b 20  char(&sCtx, 0); 
24980 20 20 20 2f 2a 20 54 6f 20 65 6e 73 75 72 65 20     /* To ensure 
24990 73 43 74 78 2e 7a 20 69 73 20 61 6c 6c 6f 63 61  sCtx.z is alloca
249a0 74 65 64 20 2a 2f 0a 20 20 20 20 69 66 28 20 72  ted */.    if( r
249b0 63 20 26 26 20 73 71 6c 69 74 65 33 5f 73 74 72  c && sqlite3_str
249c0 67 6c 6f 62 28 22 6e 6f 20 73 75 63 68 20 74 61  glob("no such ta
249d0 62 6c 65 3a 20 2a 22 2c 20 73 71 6c 69 74 65 33  ble: *", sqlite3
249e0 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3d  _errmsg(p->db))=
249f0 3d 30 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72  =0 ){.      char
24a00 20 2a 7a 43 72 65 61 74 65 20 3d 20 73 71 6c 69   *zCreate = sqli
24a10 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 43 52 45  te3_mprintf("CRE
24a20 41 54 45 20 54 41 42 4c 45 20 25 73 22 2c 20 7a  ATE TABLE %s", z
24a30 54 61 62 6c 65 29 3b 0a 20 20 20 20 20 20 63 68  Table);.      ch
24a40 61 72 20 63 53 65 70 20 3d 20 27 28 27 3b 0a 20  ar cSep = '(';. 
24a50 20 20 20 20 20 77 68 69 6c 65 28 20 78 52 65 61       while( xRea
24a60 64 28 26 73 43 74 78 29 20 29 7b 0a 20 20 20 20  d(&sCtx) ){.    
24a70 20 20 20 20 7a 43 72 65 61 74 65 20 3d 20 73 71      zCreate = sq
24a80 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25  lite3_mprintf("%
24a90 7a 25 63 5c 6e 20 20 5c 22 25 77 5c 22 20 54 45  z%c\n  \"%w\" TE
24aa0 58 54 22 2c 20 7a 43 72 65 61 74 65 2c 20 63 53  XT", zCreate, cS
24ab0 65 70 2c 20 73 43 74 78 2e 7a 29 3b 0a 20 20 20  ep, sCtx.z);.   
24ac0 20 20 20 20 20 63 53 65 70 20 3d 20 27 2c 27 3b       cSep = ',';
24ad0 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 43 74  .        if( sCt
24ae0 78 2e 63 54 65 72 6d 21 3d 73 43 74 78 2e 63 43  x.cTerm!=sCtx.cC
24af0 6f 6c 53 65 70 20 29 20 62 72 65 61 6b 3b 0a 20  olSep ) break;. 
24b00 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
24b10 20 63 53 65 70 3d 3d 27 28 27 20 29 7b 0a 20 20   cSep=='(' ){.  
24b20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
24b30 65 65 28 7a 43 72 65 61 74 65 29 3b 0a 20 20 20  ee(zCreate);.   
24b40 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
24b50 65 28 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 20  e(sCtx.z);.     
24b60 20 20 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e     xCloser(sCtx.
24b70 69 6e 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66  in);.        utf
24b80 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
24b90 22 25 73 3a 20 65 6d 70 74 79 20 66 69 6c 65 5c  "%s: empty file\
24ba0 6e 22 2c 20 73 43 74 78 2e 7a 46 69 6c 65 29 3b  n", sCtx.zFile);
24bb0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
24bc0 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  1;.      }.     
24bd0 20 7a 43 72 65 61 74 65 20 3d 20 73 71 6c 69 74   zCreate = sqlit
24be0 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 7a 5c 6e  e3_mprintf("%z\n
24bf0 29 22 2c 20 7a 43 72 65 61 74 65 29 3b 0a 20 20  )", zCreate);.  
24c00 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
24c10 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a 43 72  _exec(p->db, zCr
24c20 65 61 74 65 2c 20 30 2c 20 30 2c 20 30 29 3b 0a  eate, 0, 0, 0);.
24c30 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
24c40 65 65 28 7a 43 72 65 61 74 65 29 3b 0a 20 20 20  ee(zCreate);.   
24c50 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
24c60 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
24c70 28 73 74 64 65 72 72 2c 20 22 43 52 45 41 54 45  (stderr, "CREATE
24c80 20 54 41 42 4c 45 20 25 73 28 2e 2e 2e 29 20 66   TABLE %s(...) f
24c90 61 69 6c 65 64 3a 20 25 73 5c 6e 22 2c 20 7a 54  ailed: %s\n", zT
24ca0 61 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20  able,.          
24cb0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72        sqlite3_er
24cc0 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20  rmsg(p->db));.  
24cd0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
24ce0 65 65 28 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20  ee(sCtx.z);.    
24cf0 20 20 20 20 78 43 6c 6f 73 65 72 28 73 43 74 78      xCloser(sCtx
24d00 2e 69 6e 29 3b 0a 20 20 20 20 20 20 20 20 72 65  .in);.        re
24d10 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a  turn 1;.      }.
24d20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
24d30 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d  e3_prepare_v2(p-
24d40 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26  >db, zSql, -1, &
24d50 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 7d  pStmt, 0);.    }
24d60 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
24d70 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66 28  e(zSql);.    if(
24d80 20 72 63 20 29 7b 0a 20 20 20 20 20 20 69 66 20   rc ){.      if 
24d90 28 70 53 74 6d 74 29 20 73 71 6c 69 74 65 33 5f  (pStmt) sqlite3_
24da0 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
24db0 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
24dc0 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72  tf(stderr,"Error
24dd0 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33  : %s\n", sqlite3
24de0 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b  _errmsg(p->db));
24df0 0a 20 20 20 20 20 20 78 43 6c 6f 73 65 72 28 73  .      xCloser(s
24e00 43 74 78 2e 69 6e 29 3b 0a 20 20 20 20 20 20 72  Ctx.in);.      r
24e10 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
24e20 20 20 20 6e 43 6f 6c 20 3d 20 73 71 6c 69 74 65     nCol = sqlite
24e30 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70  3_column_count(p
24e40 53 74 6d 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  Stmt);.    sqlit
24e50 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d  e3_finalize(pStm
24e60 74 29 3b 0a 20 20 20 20 70 53 74 6d 74 20 3d 20  t);.    pStmt = 
24e70 30 3b 0a 20 20 20 20 69 66 28 20 6e 43 6f 6c 3d  0;.    if( nCol=
24e80 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 20 2f  =0 ) return 0; /
24e90 2a 20 6e 6f 20 63 6f 6c 75 6d 6e 73 2c 20 6e 6f  * no columns, no
24ea0 20 65 72 72 6f 72 20 2a 2f 0a 20 20 20 20 7a 53   error */.    zS
24eb0 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c  ql = sqlite3_mal
24ec0 6c 6f 63 36 34 28 20 6e 42 79 74 65 2a 32 20 2b  loc64( nByte*2 +
24ed0 20 32 30 20 2b 20 6e 43 6f 6c 2a 32 20 29 3b 0a   20 + nCol*2 );.
24ee0 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20      if( zSql==0 
24ef0 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
24f00 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
24f10 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  or: out of memor
24f20 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 78 43 6c  y\n");.      xCl
24f30 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20  oser(sCtx.in);. 
24f40 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
24f50 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
24f60 5f 73 6e 70 72 69 6e 74 66 28 6e 42 79 74 65 2b  _snprintf(nByte+
24f70 32 30 2c 20 7a 53 71 6c 2c 20 22 49 4e 53 45 52  20, zSql, "INSER
24f80 54 20 49 4e 54 4f 20 5c 22 25 77 5c 22 20 56 41  T INTO \"%w\" VA
24f90 4c 55 45 53 28 3f 22 2c 20 7a 54 61 62 6c 65 29  LUES(?", zTable)
24fa0 3b 0a 20 20 20 20 6a 20 3d 20 73 74 72 6c 65 6e  ;.    j = strlen
24fb0 33 30 28 7a 53 71 6c 29 3b 0a 20 20 20 20 66 6f  30(zSql);.    fo
24fc0 72 28 69 3d 31 3b 20 69 3c 6e 43 6f 6c 3b 20 69  r(i=1; i<nCol; i
24fd0 2b 2b 29 7b 0a 20 20 20 20 20 20 7a 53 71 6c 5b  ++){.      zSql[
24fe0 6a 2b 2b 5d 20 3d 20 27 2c 27 3b 0a 20 20 20 20  j++] = ',';.    
24ff0 20 20 7a 53 71 6c 5b 6a 2b 2b 5d 20 3d 20 27 3f    zSql[j++] = '?
25000 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 53 71  ';.    }.    zSq
25010 6c 5b 6a 2b 2b 5d 20 3d 20 27 29 27 3b 0a 20 20  l[j++] = ')';.  
25020 20 20 7a 53 71 6c 5b 6a 5d 20 3d 20 30 3b 0a 20    zSql[j] = 0;. 
25030 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
25040 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62  prepare_v2(p->db
25050 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74  , zSql, -1, &pSt
25060 6d 74 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69  mt, 0);.    sqli
25070 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a  te3_free(zSql);.
25080 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
25090 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
250a0 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
250b0 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65  %s\n", sqlite3_e
250c0 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20  rrmsg(p->db));. 
250d0 20 20 20 20 20 69 66 20 28 70 53 74 6d 74 29 20       if (pStmt) 
250e0 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
250f0 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 78  (pStmt);.      x
25100 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b  Closer(sCtx.in);
25110 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b  .      return 1;
25120 0a 20 20 20 20 7d 0a 20 20 20 20 6e 65 65 64 43  .    }.    needC
25130 6f 6d 6d 69 74 20 3d 20 73 71 6c 69 74 65 33 5f  ommit = sqlite3_
25140 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 70  get_autocommit(p
25150 2d 3e 64 62 29 3b 0a 20 20 20 20 69 66 28 20 6e  ->db);.    if( n
25160 65 65 64 43 6f 6d 6d 69 74 20 29 20 73 71 6c 69  eedCommit ) sqli
25170 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  te3_exec(p->db, 
25180 22 42 45 47 49 4e 22 2c 20 30 2c 20 30 2c 20 30  "BEGIN", 0, 0, 0
25190 29 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  );.    do{.     
251a0 20 69 6e 74 20 73 74 61 72 74 4c 69 6e 65 20 3d   int startLine =
251b0 20 73 43 74 78 2e 6e 4c 69 6e 65 3b 0a 20 20 20   sCtx.nLine;.   
251c0 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43     for(i=0; i<nC
251d0 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; i++){.      
251e0 20 20 63 68 61 72 20 2a 7a 20 3d 20 78 52 65 61    char *z = xRea
251f0 64 28 26 73 43 74 78 29 3b 0a 20 20 20 20 20 20  d(&sCtx);.      
25200 20 20 2f 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20    /*.        ** 
25210 44 69 64 20 77 65 20 72 65 61 63 68 20 65 6e 64  Did we reach end
25220 2d 6f 66 2d 66 69 6c 65 20 62 65 66 6f 72 65 20  -of-file before 
25230 66 69 6e 64 69 6e 67 20 61 6e 79 20 63 6f 6c 75  finding any colu
25240 6d 6e 73 3f 0a 20 20 20 20 20 20 20 20 2a 2a 20  mns?.        ** 
25250 49 66 20 73 6f 2c 20 73 74 6f 70 20 69 6e 73 74  If so, stop inst
25260 65 61 64 20 6f 66 20 4e 55 4c 4c 20 66 69 6c 6c  ead of NULL fill
25270 69 6e 67 20 74 68 65 20 72 65 6d 61 69 6e 69 6e  ing the remainin
25280 67 20 63 6f 6c 75 6d 6e 73 2e 0a 20 20 20 20 20  g columns..     
25290 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66     */.        if
252a0 28 20 7a 3d 3d 30 20 26 26 20 69 3d 3d 30 20 29  ( z==0 && i==0 )
252b0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
252c0 2f 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 44 69  /*.        ** Di
252d0 64 20 77 65 20 72 65 61 63 68 20 65 6e 64 2d 6f  d we reach end-o
252e0 66 2d 66 69 6c 65 20 4f 52 20 65 6e 64 2d 6f 66  f-file OR end-of
252f0 2d 6c 69 6e 65 20 62 65 66 6f 72 65 20 66 69 6e  -line before fin
25300 64 69 6e 67 20 61 6e 79 0a 20 20 20 20 20 20 20  ding any.       
25310 20 2a 2a 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 41   ** columns in A
25320 53 43 49 49 20 6d 6f 64 65 3f 20 20 49 66 20 73  SCII mode?  If s
25330 6f 2c 20 73 74 6f 70 20 69 6e 73 74 65 61 64 20  o, stop instead 
25340 6f 66 20 4e 55 4c 4c 20 66 69 6c 6c 69 6e 67 0a  of NULL filling.
25350 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72          ** the r
25360 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73  emaining columns
25370 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20  ..        */.   
25380 20 20 20 20 20 69 66 28 20 70 2d 3e 6d 6f 64 65       if( p->mode
25390 3d 3d 4d 4f 44 45 5f 41 73 63 69 69 20 26 26 20  ==MODE_Ascii && 
253a0 28 7a 3d 3d 30 20 7c 7c 20 7a 5b 30 5d 3d 3d 30  (z==0 || z[0]==0
253b0 29 20 26 26 20 69 3d 3d 30 20 29 20 62 72 65 61  ) && i==0 ) brea
253c0 6b 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  k;.        sqlit
253d0 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74  e3_bind_text(pSt
253e0 6d 74 2c 20 69 2b 31 2c 20 7a 2c 20 2d 31 2c 20  mt, i+1, z, -1, 
253f0 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
25400 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  );.        if( i
25410 3c 6e 43 6f 6c 2d 31 20 26 26 20 73 43 74 78 2e  <nCol-1 && sCtx.
25420 63 54 65 72 6d 21 3d 73 43 74 78 2e 63 43 6f 6c  cTerm!=sCtx.cCol
25430 53 65 70 20 29 7b 0a 20 20 20 20 20 20 20 20 20  Sep ){.         
25440 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
25450 65 72 72 2c 20 22 25 73 3a 25 64 3a 20 65 78 70  err, "%s:%d: exp
25460 65 63 74 65 64 20 25 64 20 63 6f 6c 75 6d 6e 73  ected %d columns
25470 20 62 75 74 20 66 6f 75 6e 64 20 25 64 20 2d 20   but found %d - 
25480 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
25490 20 20 20 20 20 20 20 20 20 20 20 20 22 66 69 6c              "fil
254a0 6c 69 6e 67 20 74 68 65 20 72 65 73 74 20 77 69  ling the rest wi
254b0 74 68 20 4e 55 4c 4c 5c 6e 22 2c 0a 20 20 20 20  th NULL\n",.    
254c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254d0 20 20 20 20 20 20 73 43 74 78 2e 7a 46 69 6c 65        sCtx.zFile
254e0 2c 20 73 74 61 72 74 4c 69 6e 65 2c 20 6e 43 6f  , startLine, nCo
254f0 6c 2c 20 69 2b 31 29 3b 0a 20 20 20 20 20 20 20  l, i+1);.       
25500 20 20 20 69 20 2b 3d 20 32 3b 0a 20 20 20 20 20     i += 2;.     
25510 20 20 20 20 20 77 68 69 6c 65 28 20 69 3c 3d 6e       while( i<=n
25520 43 6f 6c 20 29 7b 20 73 71 6c 69 74 65 33 5f 62  Col ){ sqlite3_b
25530 69 6e 64 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20  ind_null(pStmt, 
25540 69 29 3b 20 69 2b 2b 3b 20 7d 0a 20 20 20 20 20  i); i++; }.     
25550 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
25560 20 20 20 69 66 28 20 73 43 74 78 2e 63 54 65 72     if( sCtx.cTer
25570 6d 3d 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70 20  m==sCtx.cColSep 
25580 29 7b 0a 20 20 20 20 20 20 20 20 64 6f 7b 0a 20  ){.        do{. 
25590 20 20 20 20 20 20 20 20 20 78 52 65 61 64 28 26           xRead(&
255a0 73 43 74 78 29 3b 0a 20 20 20 20 20 20 20 20 20  sCtx);.         
255b0 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 77   i++;.        }w
255c0 68 69 6c 65 28 20 73 43 74 78 2e 63 54 65 72 6d  hile( sCtx.cTerm
255d0 3d 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70 20 29  ==sCtx.cColSep )
255e0 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  ;.        utf8_p
255f0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25  rintf(stderr, "%
25600 73 3a 25 64 3a 20 65 78 70 65 63 74 65 64 20 25  s:%d: expected %
25610 64 20 63 6f 6c 75 6d 6e 73 20 62 75 74 20 66 6f  d columns but fo
25620 75 6e 64 20 25 64 20 2d 20 22 0a 20 20 20 20 20  und %d - ".     
25630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25640 20 20 20 22 65 78 74 72 61 73 20 69 67 6e 6f 72     "extras ignor
25650 65 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  ed\n",.         
25660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
25670 43 74 78 2e 7a 46 69 6c 65 2c 20 73 74 61 72 74  Ctx.zFile, start
25680 4c 69 6e 65 2c 20 6e 43 6f 6c 2c 20 69 29 3b 0a  Line, nCol, i);.
25690 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
256a0 28 20 69 3e 3d 6e 43 6f 6c 20 29 7b 0a 20 20 20  ( i>=nCol ){.   
256b0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65       sqlite3_ste
256c0 70 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20  p(pStmt);.      
256d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 72    rc = sqlite3_r
256e0 65 73 65 74 28 70 53 74 6d 74 29 3b 0a 20 20 20  eset(pStmt);.   
256f0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
25700 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
25710 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
25720 73 74 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20  stderr, "%s:%d: 
25730 49 4e 53 45 52 54 20 66 61 69 6c 65 64 3a 20 25  INSERT failed: %
25740 73 5c 6e 22 2c 20 73 43 74 78 2e 7a 46 69 6c 65  s\n", sCtx.zFile
25750 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
25760 20 20 20 20 20 20 20 20 73 74 61 72 74 4c 69 6e          startLin
25770 65 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  e, sqlite3_errms
25780 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20  g(p->db));.     
25790 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
257a0 20 7d 77 68 69 6c 65 28 20 73 43 74 78 2e 63 54   }while( sCtx.cT
257b0 65 72 6d 21 3d 45 4f 46 20 29 3b 0a 0a 20 20 20  erm!=EOF );..   
257c0 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e   xCloser(sCtx.in
257d0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66  );.    sqlite3_f
257e0 72 65 65 28 73 43 74 78 2e 7a 29 3b 0a 20 20 20  ree(sCtx.z);.   
257f0 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
25800 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 69 66  e(pStmt);.    if
25810 28 20 6e 65 65 64 43 6f 6d 6d 69 74 20 29 20 73  ( needCommit ) s
25820 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64  qlite3_exec(p->d
25830 62 2c 20 22 43 4f 4d 4d 49 54 22 2c 20 30 2c 20  b, "COMMIT", 0, 
25840 30 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a  0, 0);.  }else..
25850 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55  #ifndef SQLITE_U
25860 4e 54 45 53 54 41 42 4c 45 0a 20 20 69 66 28 20  NTESTABLE.  if( 
25870 63 3d 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d  c=='i' && strncm
25880 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6d 70  p(azArg[0], "imp
25890 6f 73 74 65 72 22 2c 20 6e 29 3d 3d 30 20 29 7b  oster", n)==0 ){
258a0 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  .    char *zSql;
258b0 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c  .    char *zColl
258c0 69 73 74 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  ist = 0;.    sql
258d0 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
258e0 3b 0a 20 20 20 20 69 6e 74 20 74 6e 75 6d 20 3d  ;.    int tnum =
258f0 20 30 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   0;.    int i;. 
25900 20 20 20 69 66 28 20 6e 41 72 67 21 3d 33 20 29     if( nArg!=3 )
25910 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
25920 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
25930 67 65 3a 20 2e 69 6d 70 6f 73 74 65 72 20 49 4e  ge: .imposter IN
25940 44 45 58 20 49 4d 50 4f 53 54 45 52 5c 6e 22 29  DEX IMPOSTER\n")
25950 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
25960 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
25970 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
25980 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28    }.    open_db(
25990 70 2c 20 30 29 3b 0a 20 20 20 20 7a 53 71 6c 20  p, 0);.    zSql 
259a0 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
259b0 66 28 22 53 45 4c 45 43 54 20 72 6f 6f 74 70 61  f("SELECT rootpa
259c0 67 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  ge FROM sqlite_m
259d0 61 73 74 65 72 22 0a 20 20 20 20 20 20 20 20 20  aster".         
259e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259f0 20 20 22 20 57 48 45 52 45 20 6e 61 6d 65 3d 27    " WHERE name='
25a00 25 71 27 20 41 4e 44 20 74 79 70 65 3d 27 69 6e  %q' AND type='in
25a10 64 65 78 27 22 2c 20 61 7a 41 72 67 5b 31 5d 29  dex'", azArg[1])
25a20 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 70 72  ;.    sqlite3_pr
25a30 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
25a40 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74  zSql, -1, &pStmt
25a50 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
25a60 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20  3_free(zSql);.  
25a70 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74    if( sqlite3_st
25a80 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  ep(pStmt)==SQLIT
25a90 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 74  E_ROW ){.      t
25aa0 6e 75 6d 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  num = sqlite3_co
25ab0 6c 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c 20  lumn_int(pStmt, 
25ac0 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  0);.    }.    sq
25ad0 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
25ae0 53 74 6d 74 29 3b 0a 20 20 20 20 69 66 28 20 74  Stmt);.    if( t
25af0 6e 75 6d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  num==0 ){.      
25b00 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
25b10 72 72 2c 20 22 6e 6f 20 73 75 63 68 20 69 6e 64  rr, "no such ind
25b20 65 78 3a 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61  ex: \"%s\"\n", a
25b30 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20  zArg[1]);.      
25b40 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f  rc = 1;.      go
25b50 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
25b60 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  exit;.    }.    
25b70 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d  zSql = sqlite3_m
25b80 70 72 69 6e 74 66 28 22 50 52 41 47 4d 41 20 69  printf("PRAGMA i
25b90 6e 64 65 78 5f 78 69 6e 66 6f 3d 27 25 71 27 22  ndex_xinfo='%q'"
25ba0 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  , azArg[1]);.   
25bb0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
25bc0 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20  epare_v2(p->db, 
25bd0 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74  zSql, -1, &pStmt
25be0 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
25bf0 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20  3_free(zSql);.  
25c00 20 20 69 20 3d 20 30 3b 0a 20 20 20 20 77 68 69    i = 0;.    whi
25c10 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70  le( sqlite3_step
25c20 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f  (pStmt)==SQLITE_
25c30 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 63 68 61  ROW ){.      cha
25c40 72 20 7a 4c 61 62 65 6c 5b 32 30 5d 3b 0a 20 20  r zLabel[20];.  
25c50 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
25c60 7a 43 6f 6c 20 3d 20 28 63 6f 6e 73 74 20 63 68  zCol = (const ch
25c70 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar*)sqlite3_colu
25c80 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 32 29  mn_text(pStmt,2)
25c90 3b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20  ;.      i++;.   
25ca0 20 20 20 69 66 28 20 7a 43 6f 6c 3d 3d 30 20 29     if( zCol==0 )
25cb0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71  {.        if( sq
25cc0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
25cd0 28 70 53 74 6d 74 2c 31 29 3d 3d 2d 31 20 29 7b  (pStmt,1)==-1 ){
25ce0 0a 20 20 20 20 20 20 20 20 20 20 7a 43 6f 6c 20  .          zCol 
25cf0 3d 20 22 5f 52 4f 57 49 44 5f 22 3b 0a 20 20 20  = "_ROWID_";.   
25d00 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
25d10 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
25d20 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 4c  printf(sizeof(zL
25d30 61 62 65 6c 29 2c 7a 4c 61 62 65 6c 2c 22 65 78  abel),zLabel,"ex
25d40 70 72 25 64 22 2c 69 29 3b 0a 20 20 20 20 20 20  pr%d",i);.      
25d50 20 20 20 20 7a 43 6f 6c 20 3d 20 7a 4c 61 62 65      zCol = zLabe
25d60 6c 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  l;.        }.   
25d70 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 7a     }.      if( z
25d80 43 6f 6c 6c 69 73 74 3d 3d 30 20 29 7b 0a 20 20  Collist==0 ){.  
25d90 20 20 20 20 20 20 7a 43 6f 6c 6c 69 73 74 20 3d        zCollist =
25da0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
25db0 28 22 5c 22 25 77 5c 22 22 2c 20 7a 43 6f 6c 29  ("\"%w\"", zCol)
25dc0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
25dd0 20 20 20 20 20 20 20 7a 43 6f 6c 6c 69 73 74 20         zCollist 
25de0 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
25df0 66 28 22 25 7a 2c 5c 22 25 77 5c 22 22 2c 20 7a  f("%z,\"%w\"", z
25e00 43 6f 6c 6c 69 73 74 2c 20 7a 43 6f 6c 29 3b 0a  Collist, zCol);.
25e10 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
25e20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
25e30 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 7a  ze(pStmt);.    z
25e40 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  Sql = sqlite3_mp
25e50 72 69 6e 74 66 28 0a 20 20 20 20 20 20 20 20 20  rintf(.         
25e60 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 5c   "CREATE TABLE \
25e70 22 25 77 5c 22 28 25 73 2c 50 52 49 4d 41 52 59  "%w\"(%s,PRIMARY
25e80 20 4b 45 59 28 25 73 29 29 57 49 54 48 4f 55 54   KEY(%s))WITHOUT
25e90 20 52 4f 57 49 44 22 2c 0a 20 20 20 20 20 20 20   ROWID",.       
25ea0 20 20 20 61 7a 41 72 67 5b 32 5d 2c 20 7a 43 6f     azArg[2], zCo
25eb0 6c 6c 69 73 74 2c 20 7a 43 6f 6c 6c 69 73 74 29  llist, zCollist)
25ec0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
25ed0 65 65 28 7a 43 6f 6c 6c 69 73 74 29 3b 0a 20 20  ee(zCollist);.  
25ee0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 74    rc = sqlite3_t
25ef0 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
25f00 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d 50 4f  TE_TESTCTRL_IMPO
25f10 53 54 45 52 2c 20 70 2d 3e 64 62 2c 20 22 6d 61  STER, p->db, "ma
25f20 69 6e 22 2c 20 31 2c 20 74 6e 75 6d 29 3b 0a 20  in", 1, tnum);. 
25f30 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
25f40 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63  E_OK ){.      rc
25f50 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
25f60 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 30 2c 20  p->db, zSql, 0, 
25f70 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  0, 0);.      sql
25f80 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
25f90 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
25fa0 4c 5f 49 4d 50 4f 53 54 45 52 2c 20 70 2d 3e 64  L_IMPOSTER, p->d
25fb0 62 2c 20 22 6d 61 69 6e 22 2c 20 30 2c 20 30 29  b, "main", 0, 0)
25fc0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 20 29  ;.      if( rc )
25fd0 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  {.        utf8_p
25fe0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
25ff0 72 72 6f 72 20 69 6e 20 5b 25 73 5d 3a 20 25 73  rror in [%s]: %s
26000 5c 6e 22 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74  \n", zSql, sqlit
26010 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29  e3_errmsg(p->db)
26020 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
26030 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
26040 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 25 73 3b  ntf(stdout, "%s;
26050 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20  \n", zSql);.    
26060 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
26070 74 64 6f 75 74 2c 0a 20 20 20 20 20 20 20 20 20  tdout,.         
26080 20 20 22 57 41 52 4e 49 4e 47 3a 20 77 72 69 74    "WARNING: writ
26090 69 6e 67 20 74 6f 20 61 6e 20 69 6d 70 6f 73 74  ing to an impost
260a0 65 72 20 74 61 62 6c 65 20 77 69 6c 6c 20 63 6f  er table will co
260b0 72 72 75 70 74 20 74 68 65 20 69 6e 64 65 78 21  rrupt the index!
260c0 5c 6e 22 0a 20 20 20 20 20 20 20 20 29 3b 0a 20  \n".        );. 
260d0 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
260e0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
260f0 74 66 28 73 74 64 65 72 72 2c 20 22 53 51 4c 49  tf(stderr, "SQLI
26100 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d 50 4f  TE_TESTCTRL_IMPO
26110 53 54 45 52 20 72 65 74 75 72 6e 73 20 25 64 5c  STER returns %d\
26120 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 72  n", rc);.      r
26130 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  c = 1;.    }.   
26140 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53   sqlite3_free(zS
26150 71 6c 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e  ql);.  }else.#en
26160 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
26170 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 53 54  SQLITE_OMIT_TEST
26180 5f 43 4f 4e 54 52 4f 4c 29 20 2a 2f 0a 0a 23 69  _CONTROL) */..#i
26190 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
261a0 4c 45 5f 49 4f 54 52 41 43 45 0a 20 20 69 66 28  LE_IOTRACE.  if(
261b0 20 63 3d 3d 27 69 27 20 26 26 20 73 74 72 6e 63   c=='i' && strnc
261c0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6f  mp(azArg[0], "io
261d0 74 72 61 63 65 22 2c 20 6e 29 3d 3d 30 20 29 7b  trace", n)==0 ){
261e0 0a 20 20 20 20 53 51 4c 49 54 45 5f 41 50 49 20  .    SQLITE_API 
261f0 65 78 74 65 72 6e 20 76 6f 69 64 20 28 53 51 4c  extern void (SQL
26200 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74  ITE_CDECL *sqlit
26210 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74  e3IoTrace)(const
26220 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20   char*, ...);.  
26230 20 20 69 66 28 20 69 6f 74 72 61 63 65 20 26 26    if( iotrace &&
26240 20 69 6f 74 72 61 63 65 21 3d 73 74 64 6f 75 74   iotrace!=stdout
26250 20 29 20 66 63 6c 6f 73 65 28 69 6f 74 72 61 63   ) fclose(iotrac
26260 65 29 3b 0a 20 20 20 20 69 6f 74 72 61 63 65 20  e);.    iotrace 
26270 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 6e 41 72  = 0;.    if( nAr
26280 67 3c 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  g<2 ){.      sql
26290 69 74 65 33 49 6f 54 72 61 63 65 20 3d 20 30 3b  ite3IoTrace = 0;
262a0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
262b0 74 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 20  trcmp(azArg[1], 
262c0 22 2d 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  "-")==0 ){.     
262d0 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
262e0 3d 20 69 6f 74 72 61 63 65 50 72 69 6e 74 66 3b  = iotracePrintf;
262f0 0a 20 20 20 20 20 20 69 6f 74 72 61 63 65 20 3d  .      iotrace =
26300 20 73 74 64 6f 75 74 3b 0a 20 20 20 20 7d 65 6c   stdout;.    }el
26310 73 65 7b 0a 20 20 20 20 20 20 69 6f 74 72 61 63  se{.      iotrac
26320 65 20 3d 20 66 6f 70 65 6e 28 61 7a 41 72 67 5b  e = fopen(azArg[
26330 31 5d 2c 20 22 77 22 29 3b 0a 20 20 20 20 20 20  1], "w");.      
26340 69 66 28 20 69 6f 74 72 61 63 65 3d 3d 30 20 29  if( iotrace==0 )
26350 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  {.        utf8_p
26360 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
26370 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65  rror: cannot ope
26380 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41  n \"%s\"\n", azA
26390 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[1]);.        
263a0 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 3d  sqlite3IoTrace =
263b0 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   0;.        rc =
263c0 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   1;.      }else{
263d0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
263e0 49 6f 54 72 61 63 65 20 3d 20 69 6f 74 72 61 63  IoTrace = iotrac
263f0 65 50 72 69 6e 74 66 3b 0a 20 20 20 20 20 20 7d  ePrintf;.      }
26400 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23  .    }.  }else.#
26410 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 63 3d 3d  endif..  if( c==
26420 27 6c 27 20 26 26 20 6e 3e 3d 35 20 26 26 20 73  'l' && n>=5 && s
26430 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
26440 20 22 6c 69 6d 69 74 73 22 2c 20 6e 29 3d 3d 30   "limits", n)==0
26450 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
26460 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 0a 20 20  onst struct {.  
26470 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
26480 2a 7a 4c 69 6d 69 74 4e 61 6d 65 3b 20 20 20 2f  *zLimitName;   /
26490 2a 20 4e 61 6d 65 20 6f 66 20 61 20 6c 69 6d 69  * Name of a limi
264a0 74 20 2a 2f 0a 20 20 20 20 20 20 20 69 6e 74 20  t */.       int 
264b0 6c 69 6d 69 74 43 6f 64 65 3b 20 20 20 20 20 20  limitCode;      
264c0 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
264d0 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6c   code for that l
264e0 69 6d 69 74 20 2a 2f 0a 20 20 20 20 7d 20 61 4c  imit */.    } aL
264f0 69 6d 69 74 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  imit[] = {.     
26500 20 7b 20 22 6c 65 6e 67 74 68 22 2c 20 20 20 20   { "length",    
26510 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
26520 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 20  TE_LIMIT_LENGTH 
26530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26540 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 73     },.      { "s
26550 71 6c 5f 6c 65 6e 67 74 68 22 2c 20 20 20 20 20  ql_length",     
26560 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49         SQLITE_LI
26570 4d 49 54 5f 53 51 4c 5f 4c 45 4e 47 54 48 20 20  MIT_SQL_LENGTH  
26580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
26590 0a 20 20 20 20 20 20 7b 20 22 63 6f 6c 75 6d 6e  .      { "column
265a0 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
265b0 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43    SQLITE_LIMIT_C
265c0 4f 4c 55 4d 4e 20 20 20 20 20 20 20 20 20 20 20  OLUMN           
265d0 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
265e0 20 20 7b 20 22 65 78 70 72 5f 64 65 70 74 68 22    { "expr_depth"
265f0 2c 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  ,            SQL
26600 49 54 45 5f 4c 49 4d 49 54 5f 45 58 50 52 5f 44  ITE_LIMIT_EXPR_D
26610 45 50 54 48 20 20 20 20 20 20 20 20 20 20 20 20  EPTH            
26620 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
26630 63 6f 6d 70 6f 75 6e 64 5f 73 65 6c 65 63 74 22  compound_select"
26640 2c 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c  ,       SQLITE_L
26650 49 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45  IMIT_COMPOUND_SE
26660 4c 45 43 54 20 20 20 20 20 20 20 20 20 20 20 7d  LECT           }
26670 2c 0a 20 20 20 20 20 20 7b 20 22 76 64 62 65 5f  ,.      { "vdbe_
26680 6f 70 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  op",            
26690 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f     SQLITE_LIMIT_
266a0 56 44 42 45 5f 4f 50 20 20 20 20 20 20 20 20 20  VDBE_OP         
266b0 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
266c0 20 20 20 7b 20 22 66 75 6e 63 74 69 6f 6e 5f 61     { "function_a
266d0 72 67 22 2c 20 20 20 20 20 20 20 20 20 20 53 51  rg",          SQ
266e0 4c 49 54 45 5f 4c 49 4d 49 54 5f 46 55 4e 43 54  LITE_LIMIT_FUNCT
266f0 49 4f 4e 5f 41 52 47 20 20 20 20 20 20 20 20 20  ION_ARG         
26700 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
26710 22 61 74 74 61 63 68 65 64 22 2c 20 20 20 20 20  "attached",     
26720 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
26730 4c 49 4d 49 54 5f 41 54 54 41 43 48 45 44 20 20  LIMIT_ATTACHED  
26740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26750 7d 2c 0a 20 20 20 20 20 20 7b 20 22 6c 69 6b 65  },.      { "like
26760 5f 70 61 74 74 65 72 6e 5f 6c 65 6e 67 74 68 22  _pattern_length"
26770 2c 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54  ,   SQLITE_LIMIT
26780 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45  _LIKE_PATTERN_LE
26790 4e 47 54 48 20 20 20 20 20 20 20 7d 2c 0a 20 20  NGTH       },.  
267a0 20 20 20 20 7b 20 22 76 61 72 69 61 62 6c 65 5f      { "variable_
267b0 6e 75 6d 62 65 72 22 2c 20 20 20 20 20 20 20 53  number",       S
267c0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52 49  QLITE_LIMIT_VARI
267d0 41 42 4c 45 5f 4e 55 4d 42 45 52 20 20 20 20 20  ABLE_NUMBER     
267e0 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
267f0 20 22 74 72 69 67 67 65 72 5f 64 65 70 74 68 22   "trigger_depth"
26800 2c 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45  ,         SQLITE
26810 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44  _LIMIT_TRIGGER_D
26820 45 50 54 48 20 20 20 20 20 20 20 20 20 20 20 20  EPTH            
26830 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 77 6f 72   },.      { "wor
26840 6b 65 72 5f 74 68 72 65 61 64 73 22 2c 20 20 20  ker_threads",   
26850 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49       SQLITE_LIMI
26860 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
26870 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
26880 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 2c     };.    int i,
26890 20 6e 32 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62   n2;.    open_db
268a0 28 70 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20  (p, 0);.    if( 
268b0 6e 41 72 67 3d 3d 31 20 29 7b 0a 20 20 20 20 20  nArg==1 ){.     
268c0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61   for(i=0; i<Arra
268d0 79 53 69 7a 65 28 61 4c 69 6d 69 74 29 3b 20 69  ySize(aLimit); i
268e0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69  ++){.        pri
268f0 6e 74 66 28 22 25 32 30 73 20 25 64 5c 6e 22 2c  ntf("%20s %d\n",
26900 20 61 4c 69 6d 69 74 5b 69 5d 2e 7a 4c 69 6d 69   aLimit[i].zLimi
26910 74 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20  tName,.         
26920 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69        sqlite3_li
26930 6d 69 74 28 70 2d 3e 64 62 2c 20 61 4c 69 6d 69  mit(p->db, aLimi
26940 74 5b 69 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c 20  t[i].limitCode, 
26950 2d 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  -1));.      }.  
26960 20 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67    }else if( nArg
26970 3e 33 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  >3 ){.      raw_
26980 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
26990 55 73 61 67 65 3a 20 2e 6c 69 6d 69 74 20 4e 41  Usage: .limit NA
269a0 4d 45 20 3f 4e 45 57 2d 56 41 4c 55 45 3f 5c 6e  ME ?NEW-VALUE?\n
269b0 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
269c0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74  ;.      goto met
269d0 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
269e0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
269f0 20 69 6e 74 20 69 4c 69 6d 69 74 20 3d 20 2d 31   int iLimit = -1
26a00 3b 0a 20 20 20 20 20 20 6e 32 20 3d 20 73 74 72  ;.      n2 = str
26a10 6c 65 6e 33 30 28 61 7a 41 72 67 5b 31 5d 29 3b  len30(azArg[1]);
26a20 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
26a30 69 3c 41 72 72 61 79 53 69 7a 65 28 61 4c 69 6d  i<ArraySize(aLim
26a40 69 74 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  it); i++){.     
26a50 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73     if( sqlite3_s
26a60 74 72 6e 69 63 6d 70 28 61 4c 69 6d 69 74 5b 69  trnicmp(aLimit[i
26a70 5d 2e 7a 4c 69 6d 69 74 4e 61 6d 65 2c 20 61 7a  ].zLimitName, az
26a80 41 72 67 5b 31 5d 2c 20 6e 32 29 3d 3d 30 20 29  Arg[1], n2)==0 )
26a90 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
26aa0 69 4c 69 6d 69 74 3c 30 20 29 7b 0a 20 20 20 20  iLimit<0 ){.    
26ab0 20 20 20 20 20 20 20 20 69 4c 69 6d 69 74 20 3d          iLimit =
26ac0 20 69 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65   i;.          }e
26ad0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
26ae0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
26af0 65 72 72 2c 20 22 61 6d 62 69 67 75 6f 75 73 20  err, "ambiguous 
26b00 6c 69 6d 69 74 3a 20 5c 22 25 73 5c 22 5c 6e 22  limit: \"%s\"\n"
26b10 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  , azArg[1]);.   
26b20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b           rc = 1;
26b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74  .            got
26b40 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
26b50 78 69 74 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  xit;.          }
26b60 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
26b70 20 7d 0a 20 20 20 20 20 20 69 66 28 20 69 4c 69   }.      if( iLi
26b80 6d 69 74 3c 30 20 29 7b 0a 20 20 20 20 20 20 20  mit<0 ){.       
26b90 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
26ba0 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6c 69  err, "unknown li
26bb0 6d 69 74 3a 20 5c 22 25 73 5c 22 5c 6e 22 0a 20  mit: \"%s\"\n". 
26bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bd0 20 20 20 20 20 20 20 22 65 6e 74 65 72 20 5c 22         "enter \"
26be0 2e 6c 69 6d 69 74 73 5c 22 20 77 69 74 68 20 6e  .limits\" with n
26bf0 6f 20 61 72 67 75 6d 65 6e 74 73 20 66 6f 72 20  o arguments for 
26c00 61 20 6c 69 73 74 2e 5c 6e 22 2c 0a 20 20 20 20  a list.\n",.    
26c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c20 20 20 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b 0a       azArg[1]);.
26c30 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
26c40 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74          goto met
26c50 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
26c60 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
26c70 28 20 6e 41 72 67 3d 3d 33 20 29 7b 0a 20 20 20  ( nArg==3 ){.   
26c80 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d       sqlite3_lim
26c90 69 74 28 70 2d 3e 64 62 2c 20 61 4c 69 6d 69 74  it(p->db, aLimit
26ca0 5b 69 4c 69 6d 69 74 5d 2e 6c 69 6d 69 74 43 6f  [iLimit].limitCo
26cb0 64 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  de,.            
26cc0 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 69            (int)i
26cd0 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72  ntegerValue(azAr
26ce0 67 5b 32 5d 29 29 3b 0a 20 20 20 20 20 20 7d 0a  g[2]));.      }.
26cf0 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25 32        printf("%2
26d00 30 73 20 25 64 5c 6e 22 2c 20 61 4c 69 6d 69 74  0s %d\n", aLimit
26d10 5b 69 4c 69 6d 69 74 5d 2e 7a 4c 69 6d 69 74 4e  [iLimit].zLimitN
26d20 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ame,.           
26d30 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28    sqlite3_limit(
26d40 70 2d 3e 64 62 2c 20 61 4c 69 6d 69 74 5b 69 4c  p->db, aLimit[iL
26d50 69 6d 69 74 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c  imit].limitCode,
26d60 20 2d 31 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d   -1));.    }.  }
26d70 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
26d80 6c 27 20 26 26 20 6e 3e 32 20 26 26 20 73 74 72  l' && n>2 && str
26d90 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
26da0 6c 69 6e 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  lint", n)==0 ){.
26db0 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
26dc0 29 3b 0a 20 20 20 20 6c 69 6e 74 44 6f 74 43 6f  );.    lintDotCo
26dd0 6d 6d 61 6e 64 28 70 2c 20 61 7a 41 72 67 2c 20  mmand(p, azArg, 
26de0 6e 41 72 67 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a  nArg);.  }else..
26df0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
26e00 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  MIT_LOAD_EXTENSI
26e10 4f 4e 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20  ON.  if( c=='l' 
26e20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
26e30 5b 30 5d 2c 20 22 6c 6f 61 64 22 2c 20 6e 29 3d  [0], "load", n)=
26e40 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20  =0 ){.    const 
26e50 63 68 61 72 20 2a 7a 46 69 6c 65 2c 20 2a 7a 50  char *zFile, *zP
26e60 72 6f 63 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a  roc;.    char *z
26e70 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
26e80 69 66 28 20 6e 41 72 67 3c 32 20 29 7b 0a 20 20  if( nArg<2 ){.  
26e90 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
26ea0 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
26eb0 6c 6f 61 64 20 46 49 4c 45 20 3f 45 4e 54 52 59  load FILE ?ENTRY
26ec0 50 4f 49 4e 54 3f 5c 6e 22 29 3b 0a 20 20 20 20  POINT?\n");.    
26ed0 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
26ee0 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
26ef0 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20  d_exit;.    }.  
26f00 20 20 7a 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b    zFile = azArg[
26f10 31 5d 3b 0a 20 20 20 20 7a 50 72 6f 63 20 3d 20  1];.    zProc = 
26f20 6e 41 72 67 3e 3d 33 20 3f 20 61 7a 41 72 67 5b  nArg>=3 ? azArg[
26f30 32 5d 20 3a 20 30 3b 0a 20 20 20 20 6f 70 65 6e  2] : 0;.    open
26f40 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 72  _db(p, 0);.    r
26f50 63 20 3d 20 73 71 6c 69 74 65 33 5f 6c 6f 61 64  c = sqlite3_load
26f60 5f 65 78 74 65 6e 73 69 6f 6e 28 70 2d 3e 64 62  _extension(p->db
26f70 2c 20 7a 46 69 6c 65 2c 20 7a 50 72 6f 63 2c 20  , zFile, zProc, 
26f80 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69  &zErrMsg);.    i
26f90 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
26fa0 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
26fb0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
26fc0 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72  rror: %s\n", zEr
26fd0 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 73 71 6c  rMsg);.      sql
26fe0 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73  ite3_free(zErrMs
26ff0 67 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  g);.      rc = 1
27000 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
27010 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 63 3d  #endif..  if( c=
27020 3d 27 6c 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='l' && strncmp(
27030 61 7a 41 72 67 5b 30 5d 2c 20 22 6c 6f 67 22 2c  azArg[0], "log",
27040 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66   n)==0 ){.    if
27050 28 20 6e 41 72 67 21 3d 32 20 29 7b 0a 20 20 20  ( nArg!=2 ){.   
27060 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
27070 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 6c  derr, "Usage: .l
27080 6f 67 20 46 49 4c 45 4e 41 4d 45 5c 6e 22 29 3b  og FILENAME\n");
27090 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
270a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
270b0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
270c0 65 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20  e = azArg[1];.  
270d0 20 20 20 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f      output_file_
270e0 63 6c 6f 73 65 28 70 2d 3e 70 4c 6f 67 29 3b 0a  close(p->pLog);.
270f0 20 20 20 20 20 20 70 2d 3e 70 4c 6f 67 20 3d 20        p->pLog = 
27100 6f 75 74 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e  output_file_open
27110 28 7a 46 69 6c 65 29 3b 0a 20 20 20 20 7d 0a 20  (zFile);.    }. 
27120 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
27130 3d 27 6d 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='m' && strncmp(
27140 61 7a 41 72 67 5b 30 5d 2c 20 22 6d 6f 64 65 22  azArg[0], "mode"
27150 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63  , n)==0 ){.    c
27160 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 6f 64 65  onst char *zMode
27170 20 3d 20 6e 41 72 67 3e 3d 32 20 3f 20 61 7a 41   = nArg>=2 ? azA
27180 72 67 5b 31 5d 20 3a 20 22 22 3b 0a 20 20 20 20  rg[1] : "";.    
27190 69 6e 74 20 6e 32 20 3d 20 28 69 6e 74 29 73 74  int n2 = (int)st
271a0 72 6c 65 6e 28 7a 4d 6f 64 65 29 3b 0a 20 20 20  rlen(zMode);.   
271b0 20 69 6e 74 20 63 32 20 3d 20 7a 4d 6f 64 65 5b   int c2 = zMode[
271c0 30 5d 3b 0a 20 20 20 20 69 66 28 20 63 32 3d 3d  0];.    if( c2==
271d0 27 6c 27 20 26 26 20 6e 32 3e 32 20 26 26 20 73  'l' && n2>2 && s
271e0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c  trncmp(azArg[1],
271f0 22 6c 69 6e 65 73 22 2c 6e 32 29 3d 3d 30 20 29  "lines",n2)==0 )
27200 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20  {.      p->mode 
27210 3d 20 4d 4f 44 45 5f 4c 69 6e 65 3b 0a 20 20 20  = MODE_Line;.   
27220 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
27230 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f  ntf(sizeof(p->ro
27240 77 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e  wSeparator), p->
27250 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45  rowSeparator, SE
27260 50 5f 52 6f 77 29 3b 0a 20 20 20 20 7d 65 6c 73  P_Row);.    }els
27270 65 20 69 66 28 20 63 32 3d 3d 27 63 27 20 26 26  e if( c2=='c' &&
27280 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31   strncmp(azArg[1
27290 5d 2c 22 63 6f 6c 75 6d 6e 73 22 2c 6e 32 29 3d  ],"columns",n2)=
272a0 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d  =0 ){.      p->m
272b0 6f 64 65 20 3d 20 4d 4f 44 45 5f 43 6f 6c 75 6d  ode = MODE_Colum
272c0 6e 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  n;.      sqlite3
272d0 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
272e0 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72  (p->rowSeparator
272f0 29 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74  ), p->rowSeparat
27300 6f 72 2c 20 53 45 50 5f 52 6f 77 29 3b 0a 20 20  or, SEP_Row);.  
27310 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32 3d 3d    }else if( c2==
27320 27 6c 27 20 26 26 20 6e 32 3e 32 20 26 26 20 73  'l' && n2>2 && s
27330 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c  trncmp(azArg[1],
27340 22 6c 69 73 74 22 2c 6e 32 29 3d 3d 30 20 29 7b  "list",n2)==0 ){
27350 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d  .      p->mode =
27360 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a 20 20 20 20   MODE_List;.    
27370 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
27380 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c  tf(sizeof(p->col
27390 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63  Separator), p->c
273a0 6f 6c 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50  olSeparator, SEP
273b0 5f 43 6f 6c 75 6d 6e 29 3b 0a 20 20 20 20 20 20  _Column);.      
273c0 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
273d0 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65  (sizeof(p->rowSe
273e0 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77  parator), p->row
273f0 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 52  Separator, SEP_R
27400 6f 77 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ow);.    }else i
27410 66 28 20 63 32 3d 3d 27 68 27 20 26 26 20 73 74  f( c2=='h' && st
27420 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22  rncmp(azArg[1],"
27430 68 74 6d 6c 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a  html",n2)==0 ){.
27440 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20        p->mode = 
27450 4d 4f 44 45 5f 48 74 6d 6c 3b 0a 20 20 20 20 7d  MODE_Html;.    }
27460 65 6c 73 65 20 69 66 28 20 63 32 3d 3d 27 74 27  else if( c2=='t'
27470 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
27480 67 5b 31 5d 2c 22 74 63 6c 22 2c 6e 32 29 3d 3d  g[1],"tcl",n2)==
27490 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f  0 ){.      p->mo
274a0 64 65 20 3d 20 4d 4f 44 45 5f 54 63 6c 3b 0a 20  de = MODE_Tcl;. 
274b0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
274c0 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e  rintf(sizeof(p->
274d0 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c 20 70  colSeparator), p
274e0 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c 20  ->colSeparator, 
274f0 53 45 50 5f 53 70 61 63 65 29 3b 0a 20 20 20 20  SEP_Space);.    
27500 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
27510 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77  tf(sizeof(p->row
27520 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72  Separator), p->r
27530 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50  owSeparator, SEP
27540 5f 52 6f 77 29 3b 0a 20 20 20 20 7d 65 6c 73 65  _Row);.    }else
27550 20 69 66 28 20 63 32 3d 3d 27 63 27 20 26 26 20   if( c2=='c' && 
27560 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d  strncmp(azArg[1]
27570 2c 22 63 73 76 22 2c 6e 32 29 3d 3d 30 20 29 7b  ,"csv",n2)==0 ){
27580 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d  .      p->mode =
27590 20 4d 4f 44 45 5f 43 73 76 3b 0a 20 20 20 20 20   MODE_Csv;.     
275a0 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
275b0 66 28 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53  f(sizeof(p->colS
275c0 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f  eparator), p->co
275d0 6c 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f  lSeparator, SEP_
275e0 43 6f 6d 6d 61 29 3b 0a 20 20 20 20 20 20 73 71  Comma);.      sq
275f0 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
27600 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61  izeof(p->rowSepa
27610 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65  rator), p->rowSe
27620 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 43 72 4c  parator, SEP_CrL
27630 66 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  f);.    }else if
27640 28 20 63 32 3d 3d 27 74 27 20 26 26 20 73 74 72  ( c2=='t' && str
27650 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 74  ncmp(azArg[1],"t
27660 61 62 73 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20  abs",n2)==0 ){. 
27670 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d       p->mode = M
27680 4f 44 45 5f 4c 69 73 74 3b 0a 20 20 20 20 20 20  ODE_List;.      
27690 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
276a0 28 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65  (sizeof(p->colSe
276b0 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c  parator), p->col
276c0 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 54  Separator, SEP_T
276d0 61 62 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ab);.    }else i
276e0 66 28 20 63 32 3d 3d 27 69 27 20 26 26 20 73 74  f( c2=='i' && st
276f0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22  rncmp(azArg[1],"
27700 69 6e 73 65 72 74 22 2c 6e 32 29 3d 3d 30 20 29  insert",n2)==0 )
27710 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20  {.      p->mode 
27720 3d 20 4d 4f 44 45 5f 49 6e 73 65 72 74 3b 0a 20  = MODE_Insert;. 
27730 20 20 20 20 20 73 65 74 5f 74 61 62 6c 65 5f 6e       set_table_n
27740 61 6d 65 28 70 2c 20 6e 41 72 67 3e 3d 33 20 3f  ame(p, nArg>=3 ?
27750 20 61 7a 41 72 67 5b 32 5d 20 3a 20 22 74 61 62   azArg[2] : "tab
27760 6c 65 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  le");.    }else 
27770 69 66 28 20 63 32 3d 3d 27 71 27 20 26 26 20 73  if( c2=='q' && s
27780 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c  trncmp(azArg[1],
27790 22 71 75 6f 74 65 22 2c 6e 32 29 3d 3d 30 20 29  "quote",n2)==0 )
277a0 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20  {.      p->mode 
277b0 3d 20 4d 4f 44 45 5f 51 75 6f 74 65 3b 0a 20 20  = MODE_Quote;.  
277c0 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32 3d 3d    }else if( c2==
277d0 27 61 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'a' && strncmp(a
277e0 7a 41 72 67 5b 31 5d 2c 22 61 73 63 69 69 22 2c  zArg[1],"ascii",
277f0 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  n2)==0 ){.      
27800 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 41  p->mode = MODE_A
27810 73 63 69 69 3b 0a 20 20 20 20 20 20 73 71 6c 69  scii;.      sqli
27820 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
27830 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61  eof(p->colSepara
27840 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  tor), p->colSepa
27850 72 61 74 6f 72 2c 20 53 45 50 5f 55 6e 69 74 29  rator, SEP_Unit)
27860 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
27870 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28  snprintf(sizeof(
27880 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29  p->rowSeparator)
27890 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  , p->rowSeparato
278a0 72 2c 20 53 45 50 5f 52 65 63 6f 72 64 29 3b 0a  r, SEP_Record);.
278b0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6e 41      }else if( nA
278c0 72 67 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 72  rg==1 ){.      r
278d0 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
278e0 2c 20 22 63 75 72 72 65 6e 74 20 6f 75 74 70 75  , "current outpu
278f0 74 20 6d 6f 64 65 3a 20 25 73 5c 6e 22 2c 20 6d  t mode: %s\n", m
27900 6f 64 65 44 65 73 63 72 5b 70 2d 3e 6d 6f 64 65  odeDescr[p->mode
27910 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ]);.    }else{. 
27920 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
27930 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
27940 6d 6f 64 65 20 73 68 6f 75 6c 64 20 62 65 20 6f  mode should be o
27950 6e 65 20 6f 66 3a 20 22 0a 20 20 20 20 20 20 20  ne of: ".       
27960 20 20 22 61 73 63 69 69 20 63 6f 6c 75 6d 6e 20    "ascii column 
27970 63 73 76 20 68 74 6d 6c 20 69 6e 73 65 72 74 20  csv html insert 
27980 6c 69 6e 65 20 6c 69 73 74 20 71 75 6f 74 65 20  line list quote 
27990 74 61 62 73 20 74 63 6c 5c 6e 22 29 3b 0a 20 20  tabs tcl\n");.  
279a0 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
279b0 7d 0a 20 20 20 20 70 2d 3e 63 4d 6f 64 65 20 3d  }.    p->cMode =
279c0 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20 7d 65 6c 73   p->mode;.  }els
279d0 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6e 27 20  e..  if( c=='n' 
279e0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
279f0 5b 30 5d 2c 20 22 6e 75 6c 6c 76 61 6c 75 65 22  [0], "nullvalue"
27a00 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  , n)==0 ){.    i
27a10 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20  f( nArg==2 ){.  
27a20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
27a30 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 6e  intf(sizeof(p->n
27a40 75 6c 6c 56 61 6c 75 65 29 2c 20 70 2d 3e 6e 75  ullValue), p->nu
27a50 6c 6c 56 61 6c 75 65 2c 0a 20 20 20 20 20 20 20  llValue,.       
27a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a70 22 25 2e 2a 73 22 2c 20 28 69 6e 74 29 41 72 72  "%.*s", (int)Arr
27a80 61 79 53 69 7a 65 28 70 2d 3e 6e 75 6c 6c 56 61  aySize(p->nullVa
27a90 6c 75 65 29 2d 31 2c 20 61 7a 41 72 67 5b 31 5d  lue)-1, azArg[1]
27aa0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
27ab0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
27ac0 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
27ad0 6e 75 6c 6c 76 61 6c 75 65 20 53 54 52 49 4e 47  nullvalue STRING
27ae0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
27af0 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
27b00 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6f 27 20  e..  if( c=='o' 
27b10 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
27b20 5b 30 5d 2c 20 22 6f 70 65 6e 22 2c 20 6e 29 3d  [0], "open", n)=
27b30 3d 30 20 26 26 20 6e 3e 3d 32 20 29 7b 0a 20 20  =0 && n>=2 ){.  
27b40 20 20 63 68 61 72 20 2a 7a 4e 65 77 46 69 6c 65    char *zNewFile
27b50 6e 61 6d 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f  name;  /* Name o
27b60 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
27b70 69 6c 65 20 74 6f 20 6f 70 65 6e 20 2a 2f 0a 20  ile to open */. 
27b80 20 20 20 69 6e 74 20 69 4e 61 6d 65 20 3d 20 31     int iName = 1
27b90 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78  ;       /* Index
27ba0 20 69 6e 20 61 7a 41 72 67 5b 5d 20 6f 66 20 74   in azArg[] of t
27bb0 68 65 20 66 69 6c 65 6e 61 6d 65 20 2a 2f 0a 20  he filename */. 
27bc0 20 20 20 69 6e 74 20 6e 65 77 46 6c 61 67 20 3d     int newFlag =
27bd0 20 30 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20   0;     /* True 
27be0 74 6f 20 64 65 6c 65 74 65 20 66 69 6c 65 20 62  to delete file b
27bf0 65 66 6f 72 65 20 6f 70 65 6e 69 6e 67 20 2a 2f  efore opening */
27c00 0a 20 20 20 20 2f 2a 20 43 6c 6f 73 65 20 74 68  .    /* Close th
27c10 65 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  e existing datab
27c20 61 73 65 20 2a 2f 0a 20 20 20 20 73 65 73 73 69  ase */.    sessi
27c30 6f 6e 5f 63 6c 6f 73 65 5f 61 6c 6c 28 70 29 3b  on_close_all(p);
27c40 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f  .    sqlite3_clo
27c50 73 65 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 70  se(p->db);.    p
27c60 2d 3e 64 62 20 3d 20 30 3b 0a 20 20 20 20 70 2d  ->db = 0;.    p-
27c70 3e 7a 44 62 46 69 6c 65 6e 61 6d 65 20 3d 20 30  >zDbFilename = 0
27c80 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
27c90 65 65 28 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f  ee(p->zFreeOnClo
27ca0 73 65 29 3b 0a 20 20 20 20 70 2d 3e 7a 46 72 65  se);.    p->zFre
27cb0 65 4f 6e 43 6c 6f 73 65 20 3d 20 30 3b 0a 20 20  eOnClose = 0;.  
27cc0 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 63    /* Check for c
27cd0 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 61 72 67 75  ommand-line argu
27ce0 6d 65 6e 74 73 20 2a 2f 0a 20 20 20 20 66 6f 72  ments */.    for
27cf0 28 69 4e 61 6d 65 3d 31 3b 20 69 4e 61 6d 65 3c  (iName=1; iName<
27d00 6e 41 72 67 20 26 26 20 61 7a 41 72 67 5b 69 4e  nArg && azArg[iN
27d10 61 6d 65 5d 5b 30 5d 3d 3d 27 2d 27 3b 20 69 4e  ame][0]=='-'; iN
27d20 61 6d 65 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f  ame++){.      co
27d30 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a  nst char *z = az
27d40 41 72 67 5b 69 4e 61 6d 65 5d 3b 0a 20 20 20 20  Arg[iName];.    
27d50 20 20 69 66 28 20 6f 70 74 69 6f 6e 4d 61 74 63    if( optionMatc
27d60 68 28 7a 2c 22 6e 65 77 22 29 20 29 7b 0a 20 20  h(z,"new") ){.  
27d70 20 20 20 20 20 20 6e 65 77 46 6c 61 67 20 3d 20        newFlag = 
27d80 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  1;.      }else i
27d90 66 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a  f( z[0]=='-' ){.
27da0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
27db0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 75 6e 6b  ntf(stderr, "unk
27dc0 6e 6f 77 6e 20 6f 70 74 69 6f 6e 3a 20 25 73 5c  nown option: %s\
27dd0 6e 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20  n", z);.        
27de0 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  rc = 1;.        
27df0 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
27e00 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a  d_exit;.      }.
27e10 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 49 66 20      }.    /* If 
27e20 61 20 66 69 6c 65 6e 61 6d 65 20 69 73 20 73 70  a filename is sp
27e30 65 63 69 66 69 65 64 2c 20 74 72 79 20 74 6f 20  ecified, try to 
27e40 6f 70 65 6e 20 69 74 20 66 69 72 73 74 20 2a 2f  open it first */
27e50 0a 20 20 20 20 7a 4e 65 77 46 69 6c 65 6e 61 6d  .    zNewFilenam
27e60 65 20 3d 20 6e 41 72 67 3e 69 4e 61 6d 65 20 3f  e = nArg>iName ?
27e70 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
27e80 28 22 25 73 22 2c 20 61 7a 41 72 67 5b 69 4e 61  ("%s", azArg[iNa
27e90 6d 65 5d 29 20 3a 20 30 3b 0a 20 20 20 20 69 66  me]) : 0;.    if
27ea0 28 20 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 20 29  ( zNewFilename )
27eb0 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 65 77 46  {.      if( newF
27ec0 6c 61 67 20 29 20 73 68 65 6c 6c 44 65 6c 65 74  lag ) shellDelet
27ed0 65 46 69 6c 65 28 7a 4e 65 77 46 69 6c 65 6e 61  eFile(zNewFilena
27ee0 6d 65 29 3b 0a 20 20 20 20 20 20 70 2d 3e 7a 44  me);.      p->zD
27ef0 62 46 69 6c 65 6e 61 6d 65 20 3d 20 7a 4e 65 77  bFilename = zNew
27f00 46 69 6c 65 6e 61 6d 65 3b 0a 20 20 20 20 20 20  Filename;.      
27f10 6f 70 65 6e 5f 64 62 28 70 2c 20 31 29 3b 0a 20  open_db(p, 1);. 
27f20 20 20 20 20 20 69 66 28 20 70 2d 3e 64 62 3d 3d       if( p->db==
27f30 30 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66  0 ){.        utf
27f40 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
27f50 20 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20   "Error: cannot 
27f60 6f 70 65 6e 20 27 25 73 27 5c 6e 22 2c 20 7a 4e  open '%s'\n", zN
27f70 65 77 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 20  ewFilename);.   
27f80 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
27f90 65 28 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 29 3b  e(zNewFilename);
27fa0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
27fb0 20 20 20 20 20 20 70 2d 3e 7a 46 72 65 65 4f 6e        p->zFreeOn
27fc0 43 6c 6f 73 65 20 3d 20 7a 4e 65 77 46 69 6c 65  Close = zNewFile
27fd0 6e 61 6d 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20  name;.      }.  
27fe0 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64    }.    if( p->d
27ff0 62 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  b==0 ){.      /*
28000 20 41 73 20 61 20 66 61 6c 6c 2d 62 61 63 6b 20   As a fall-back 
28010 6f 70 65 6e 20 61 20 54 45 4d 50 20 64 61 74 61  open a TEMP data
28020 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 70 2d  base */.      p-
28030 3e 7a 44 62 46 69 6c 65 6e 61 6d 65 20 3d 20 30  >zDbFilename = 0
28040 3b 0a 20 20 20 20 20 20 6f 70 65 6e 5f 64 62 28  ;.      open_db(
28050 70 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  p, 0);.    }.  }
28060 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
28070 6f 27 0a 20 20 20 26 26 20 28 73 74 72 6e 63 6d  o'.   && (strncm
28080 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6f 75 74  p(azArg[0], "out
28090 70 75 74 22 2c 20 6e 29 3d 3d 30 20 7c 7c 20 73  put", n)==0 || s
280a0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
280b0 20 22 6f 6e 63 65 22 2c 20 6e 29 3d 3d 30 29 0a   "once", n)==0).
280c0 20 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63    ){.    const c
280d0 68 61 72 20 2a 7a 46 69 6c 65 20 3d 20 6e 41 72  har *zFile = nAr
280e0 67 3e 3d 32 20 3f 20 61 7a 41 72 67 5b 31 5d 20  g>=2 ? azArg[1] 
280f0 3a 20 22 73 74 64 6f 75 74 22 3b 0a 20 20 20 20  : "stdout";.    
28100 69 66 28 20 6e 41 72 67 3e 32 20 29 7b 0a 20 20  if( nArg>2 ){.  
28110 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
28120 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
28130 2e 25 73 20 46 49 4c 45 5c 6e 22 2c 20 61 7a 41  .%s FILE\n", azA
28140 72 67 5b 30 5d 29 3b 0a 20 20 20 20 20 20 72 63  rg[0]);.      rc
28150 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f   = 1;.      goto
28160 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
28170 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  it;.    }.    if
28180 28 20 6e 3e 31 20 26 26 20 73 74 72 6e 63 6d 70  ( n>1 && strncmp
28190 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6f 6e 63 65  (azArg[0], "once
281a0 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
281b0 20 20 69 66 28 20 6e 41 72 67 3c 32 20 29 7b 0a    if( nArg<2 ){.
281c0 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
281d0 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
281e0 65 3a 20 2e 6f 6e 63 65 20 46 49 4c 45 5c 6e 22  e: .once FILE\n"
281f0 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
28200 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  1;.        goto 
28210 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
28220 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
28230 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 20 3d 20 32   p->outCount = 2
28240 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
28250 20 20 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 20 3d     p->outCount =
28260 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6f 75   0;.    }.    ou
28270 74 70 75 74 5f 72 65 73 65 74 28 70 29 3b 0a 20  tput_reset(p);. 
28280 20 20 20 69 66 28 20 7a 46 69 6c 65 5b 30 5d 3d     if( zFile[0]=
28290 3d 27 7c 27 20 29 7b 0a 23 69 66 64 65 66 20 53  ='|' ){.#ifdef S
282a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 4f 50 45 4e  QLITE_OMIT_POPEN
282b0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
282c0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
282d0 3a 20 70 69 70 65 73 20 61 72 65 20 6e 6f 74 20  : pipes are not 
282e0 73 75 70 70 6f 72 74 65 64 20 69 6e 20 74 68 69  supported in thi
282f0 73 20 4f 53 5c 6e 22 29 3b 0a 20 20 20 20 20 20  s OS\n");.      
28300 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 2d  rc = 1;.      p-
28310 3e 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a 23  >out = stdout;.#
28320 65 6c 73 65 0a 20 20 20 20 20 20 70 2d 3e 6f 75  else.      p->ou
28330 74 20 3d 20 70 6f 70 65 6e 28 7a 46 69 6c 65 20  t = popen(zFile 
28340 2b 20 31 2c 20 22 77 22 29 3b 0a 20 20 20 20 20  + 1, "w");.     
28350 20 69 66 28 20 70 2d 3e 6f 75 74 3d 3d 30 20 29   if( p->out==0 )
28360 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  {.        utf8_p
28370 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72  rintf(stderr,"Er
28380 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e  ror: cannot open
28390 20 70 69 70 65 20 5c 22 25 73 5c 22 5c 6e 22 2c   pipe \"%s\"\n",
283a0 20 7a 46 69 6c 65 20 2b 20 31 29 3b 0a 20 20 20   zFile + 1);.   
283b0 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 73 74       p->out = st
283c0 64 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 72 63  dout;.        rc
283d0 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 1;.      }els
283e0 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
283f0 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
28400 6f 66 28 70 2d 3e 6f 75 74 66 69 6c 65 29 2c 20  of(p->outfile), 
28410 70 2d 3e 6f 75 74 66 69 6c 65 2c 20 22 25 73 22  p->outfile, "%s"
28420 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20 20  , zFile);.      
28430 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 65 6c  }.#endif.    }el
28440 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74  se{.      p->out
28450 20 3d 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f 6f   = output_file_o
28460 70 65 6e 28 7a 46 69 6c 65 29 3b 0a 20 20 20 20  pen(zFile);.    
28470 20 20 69 66 28 20 70 2d 3e 6f 75 74 3d 3d 30 20    if( p->out==0 
28480 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  ){.        if( s
28490 74 72 63 6d 70 28 7a 46 69 6c 65 2c 22 6f 66 66  trcmp(zFile,"off
284a0 22 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")!=0 ){.       
284b0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
284c0 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 63 61  tderr,"Error: ca
284d0 6e 6e 6f 74 20 77 72 69 74 65 20 74 6f 20 5c 22  nnot write to \"
284e0 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c 65 29 3b  %s\"\n", zFile);
284f0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
28500 20 20 20 70 2d 3e 6f 75 74 20 3d 20 73 74 64 6f     p->out = stdo
28510 75 74 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  ut;.        rc =
28520 20 31 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   1;.      } else
28530 20 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   {.        sqlit
28540 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
28550 6f 66 28 70 2d 3e 6f 75 74 66 69 6c 65 29 2c 20  of(p->outfile), 
28560 70 2d 3e 6f 75 74 66 69 6c 65 2c 20 22 25 73 22  p->outfile, "%s"
28570 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20 20  , zFile);.      
28580 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  }.    }.  }else.
28590 0a 20 20 69 66 28 20 63 3d 3d 27 70 27 20 26 26  .  if( c=='p' &&
285a0 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d 70   n>=3 && strncmp
285b0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 70 72 69 6e  (azArg[0], "prin
285c0 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  t", n)==0 ){.   
285d0 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28   int i;.    for(
285e0 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=1; i<nArg; i++
285f0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 69 3e 31  ){.      if( i>1
28600 20 29 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d   ) raw_printf(p-
28610 3e 6f 75 74 2c 20 22 20 22 29 3b 0a 20 20 20 20  >out, " ");.    
28620 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
28630 3e 6f 75 74 2c 20 22 25 73 22 2c 20 61 7a 41 72  >out, "%s", azAr
28640 67 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  g[i]);.    }.   
28650 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
28660 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 7d 65 6c  ut, "\n");.  }el
28670 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 70 27  se..  if( c=='p'
28680 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
28690 67 5b 30 5d 2c 20 22 70 72 6f 6d 70 74 22 2c 20  g[0], "prompt", 
286a0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  n)==0 ){.    if(
286b0 20 6e 41 72 67 20 3e 3d 20 32 29 20 7b 0a 20 20   nArg >= 2) {.  
286c0 20 20 20 20 73 74 72 6e 63 70 79 28 6d 61 69 6e      strncpy(main
286d0 50 72 6f 6d 70 74 2c 61 7a 41 72 67 5b 31 5d 2c  Prompt,azArg[1],
286e0 28 69 6e 74 29 41 72 72 61 79 53 69 7a 65 28 6d  (int)ArraySize(m
286f0 61 69 6e 50 72 6f 6d 70 74 29 2d 31 29 3b 0a 20  ainPrompt)-1);. 
28700 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 41 72     }.    if( nAr
28710 67 20 3e 3d 20 33 29 20 7b 0a 20 20 20 20 20 20  g >= 3) {.      
28720 73 74 72 6e 63 70 79 28 63 6f 6e 74 69 6e 75 65  strncpy(continue
28730 50 72 6f 6d 70 74 2c 61 7a 41 72 67 5b 32 5d 2c  Prompt,azArg[2],
28740 28 69 6e 74 29 41 72 72 61 79 53 69 7a 65 28 63  (int)ArraySize(c
28750 6f 6e 74 69 6e 75 65 50 72 6f 6d 70 74 29 2d 31  ontinuePrompt)-1
28760 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
28770 0a 0a 20 20 69 66 28 20 63 3d 3d 27 71 27 20 26  ..  if( c=='q' &
28780 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
28790 30 5d 2c 20 22 71 75 69 74 22 2c 20 6e 29 3d 3d  0], "quit", n)==
287a0 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 32 3b  0 ){.    rc = 2;
287b0 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
287c0 63 3d 3d 27 72 27 20 26 26 20 6e 3e 3d 33 20 26  c=='r' && n>=3 &
287d0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
287e0 30 5d 2c 20 22 72 65 61 64 22 2c 20 6e 29 3d 3d  0], "read", n)==
287f0 30 20 29 7b 0a 20 20 20 20 46 49 4c 45 20 2a 61  0 ){.    FILE *a
28800 6c 74 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67  lt;.    if( nArg
28810 21 3d 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77  !=2 ){.      raw
28820 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
28830 22 55 73 61 67 65 3a 20 2e 72 65 61 64 20 46 49  "Usage: .read FI
28840 4c 45 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  LE\n");.      rc
28850 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f   = 1;.      goto
28860 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
28870 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 6c  it;.    }.    al
28880 74 20 3d 20 66 6f 70 65 6e 28 61 7a 41 72 67 5b  t = fopen(azArg[
28890 31 5d 2c 20 22 72 62 22 29 3b 0a 20 20 20 20 69  1], "rb");.    i
288a0 66 28 20 61 6c 74 3d 3d 30 20 29 7b 0a 20 20 20  f( alt==0 ){.   
288b0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
288c0 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 63 61  tderr,"Error: ca
288d0 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73 5c 22  nnot open \"%s\"
288e0 5c 6e 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a  \n", azArg[1]);.
288f0 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
28900 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
28910 63 20 3d 20 70 72 6f 63 65 73 73 5f 69 6e 70 75  c = process_inpu
28920 74 28 70 2c 20 61 6c 74 29 3b 0a 20 20 20 20 20  t(p, alt);.     
28930 20 66 63 6c 6f 73 65 28 61 6c 74 29 3b 0a 20 20   fclose(alt);.  
28940 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
28950 66 28 20 63 3d 3d 27 72 27 20 26 26 20 6e 3e 3d  f( c=='r' && n>=
28960 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  3 && strncmp(azA
28970 72 67 5b 30 5d 2c 20 22 72 65 73 74 6f 72 65 22  rg[0], "restore"
28980 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63  , n)==0 ){.    c
28990 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 72 63 46  onst char *zSrcF
289a0 69 6c 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  ile;.    const c
289b0 68 61 72 20 2a 7a 44 62 3b 0a 20 20 20 20 73 71  har *zDb;.    sq
289c0 6c 69 74 65 33 20 2a 70 53 72 63 3b 0a 20 20 20  lite3 *pSrc;.   
289d0 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20   sqlite3_backup 
289e0 2a 70 42 61 63 6b 75 70 3b 0a 20 20 20 20 69 6e  *pBackup;.    in
289f0 74 20 6e 54 69 6d 65 6f 75 74 20 3d 20 30 3b 0a  t nTimeout = 0;.
28a00 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32  .    if( nArg==2
28a10 20 29 7b 0a 20 20 20 20 20 20 7a 53 72 63 46 69   ){.      zSrcFi
28a20 6c 65 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a 20  le = azArg[1];. 
28a30 20 20 20 20 20 7a 44 62 20 3d 20 22 6d 61 69 6e       zDb = "main
28a40 22 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  ";.    }else if(
28a50 20 6e 41 72 67 3d 3d 33 20 29 7b 0a 20 20 20 20   nArg==3 ){.    
28a60 20 20 7a 53 72 63 46 69 6c 65 20 3d 20 61 7a 41    zSrcFile = azA
28a70 72 67 5b 32 5d 3b 0a 20 20 20 20 20 20 7a 44 62  rg[2];.      zDb
28a80 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20   = azArg[1];.   
28a90 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61   }else{.      ra
28aa0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
28ab0 20 22 55 73 61 67 65 3a 20 2e 72 65 73 74 6f 72   "Usage: .restor
28ac0 65 20 3f 44 42 3f 20 46 49 4c 45 5c 6e 22 29 3b  e ?DB? FILE\n");
28ad0 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
28ae0 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
28af0 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
28b00 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69   }.    rc = sqli
28b10 74 65 33 5f 6f 70 65 6e 28 7a 53 72 63 46 69 6c  te3_open(zSrcFil
28b20 65 2c 20 26 70 53 72 63 29 3b 0a 20 20 20 20 69  e, &pSrc);.    i
28b30 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
28b40 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
28b50 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
28b60 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65  rror: cannot ope
28b70 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 53 72  n \"%s\"\n", zSr
28b80 63 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 73 71  cFile);.      sq
28b90 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 53 72 63  lite3_close(pSrc
28ba0 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
28bb0 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6f 70 65  1;.    }.    ope
28bc0 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20  n_db(p, 0);.    
28bd0 70 42 61 63 6b 75 70 20 3d 20 73 71 6c 69 74 65  pBackup = sqlite
28be0 33 5f 62 61 63 6b 75 70 5f 69 6e 69 74 28 70 2d  3_backup_init(p-
28bf0 3e 64 62 2c 20 7a 44 62 2c 20 70 53 72 63 2c 20  >db, zDb, pSrc, 
28c00 22 6d 61 69 6e 22 29 3b 0a 20 20 20 20 69 66 28  "main");.    if(
28c10 20 70 42 61 63 6b 75 70 3d 3d 30 20 29 7b 0a 20   pBackup==0 ){. 
28c20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
28c30 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
28c40 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f   %s\n", sqlite3_
28c50 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a  errmsg(p->db));.
28c60 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c        sqlite3_cl
28c70 6f 73 65 28 70 53 72 63 29 3b 0a 20 20 20 20 20  ose(pSrc);.     
28c80 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
28c90 0a 20 20 20 20 77 68 69 6c 65 28 20 28 72 63 20  .    while( (rc 
28ca0 3d 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  = sqlite3_backup
28cb0 5f 73 74 65 70 28 70 42 61 63 6b 75 70 2c 31 30  _step(pBackup,10
28cc0 30 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20  0))==SQLITE_OK. 
28cd0 20 20 20 20 20 20 20 20 20 7c 7c 20 72 63 3d 3d           || rc==
28ce0 53 51 4c 49 54 45 5f 42 55 53 59 20 20 29 7b 0a  SQLITE_BUSY  ){.
28cf0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
28d00 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
28d10 20 20 20 20 20 69 66 28 20 6e 54 69 6d 65 6f 75       if( nTimeou
28d20 74 2b 2b 20 3e 3d 20 33 20 29 20 62 72 65 61 6b  t++ >= 3 ) break
28d30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
28d40 33 5f 73 6c 65 65 70 28 31 30 30 29 3b 0a 20 20  3_sleep(100);.  
28d50 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
28d60 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66  sqlite3_backup_f
28d70 69 6e 69 73 68 28 70 42 61 63 6b 75 70 29 3b 0a  inish(pBackup);.
28d80 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
28d90 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20  TE_DONE ){.     
28da0 20 72 63 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c   rc = 0;.    }el
28db0 73 65 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  se if( rc==SQLIT
28dc0 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51  E_BUSY || rc==SQ
28dd0 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20  LITE_LOCKED ){. 
28de0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
28df0 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
28e00 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
28e10 69 73 20 62 75 73 79 5c 6e 22 29 3b 0a 20 20 20  is busy\n");.   
28e20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d     rc = 1;.    }
28e30 65 6c 73 65 7b 0a 20 20 20 20 20 20 75 74 66 38  else{.      utf8
28e40 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
28e50 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73  "Error: %s\n", s
28e60 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d  qlite3_errmsg(p-
28e70 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 72 63 20  >db));.      rc 
28e80 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  = 1;.    }.    s
28e90 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 53 72  qlite3_close(pSr
28ea0 63 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 0a 20 20  c);.  }else...  
28eb0 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 73 74  if( c=='s' && st
28ec0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
28ed0 22 73 63 61 6e 73 74 61 74 73 22 2c 20 6e 29 3d  "scanstats", n)=
28ee0 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41  =0 ){.    if( nA
28ef0 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 70  rg==2 ){.      p
28f00 2d 3e 73 63 61 6e 73 74 61 74 73 4f 6e 20 3d 20  ->scanstatsOn = 
28f10 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41  booleanValue(azA
28f20 72 67 5b 31 5d 29 3b 0a 23 69 66 6e 64 65 66 20  rg[1]);.#ifndef 
28f30 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
28f40 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20  MT_SCANSTATUS.  
28f50 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
28f60 74 64 65 72 72 2c 20 22 57 61 72 6e 69 6e 67 3a  tderr, "Warning:
28f70 20 2e 73 63 61 6e 73 74 61 74 73 20 6e 6f 74 20   .scanstats not 
28f80 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 69  available in thi
28f90 73 20 62 75 69 6c 64 2e 5c 6e 22 29 3b 0a 23 65  s build.\n");.#e
28fa0 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ndif.    }else{.
28fb0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
28fc0 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
28fd0 20 2e 73 63 61 6e 73 74 61 74 73 20 6f 6e 7c 6f   .scanstats on|o
28fe0 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  ff\n");.      rc
28ff0 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   = 1;.    }.  }e
29000 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73  lse..  if( c=='s
29010 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
29020 72 67 5b 30 5d 2c 20 22 73 63 68 65 6d 61 22 2c  rg[0], "schema",
29030 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 53 68   n)==0 ){.    Sh
29040 65 6c 6c 54 65 78 74 20 73 53 65 6c 65 63 74 3b  ellText sSelect;
29050 0a 20 20 20 20 53 68 65 6c 6c 53 74 61 74 65 20  .    ShellState 
29060 64 61 74 61 3b 0a 20 20 20 20 63 68 61 72 20 2a  data;.    char *
29070 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20  zErrMsg = 0;.   
29080 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 69   const char *zDi
29090 76 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74  v = 0;.    const
290a0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 30   char *zName = 0
290b0 3b 0a 20 20 20 20 69 6e 74 20 69 53 63 68 65 6d  ;.    int iSchem
290c0 61 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 62  a = 0;.    int b
290d0 44 65 62 75 67 20 3d 20 30 3b 0a 20 20 20 20 69  Debug = 0;.    i
290e0 6e 74 20 69 69 3b 0a 0a 20 20 20 20 6f 70 65 6e  nt ii;..    open
290f0 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 6d  _db(p, 0);.    m
29100 65 6d 63 70 79 28 26 64 61 74 61 2c 20 70 2c 20  emcpy(&data, p, 
29110 73 69 7a 65 6f 66 28 64 61 74 61 29 29 3b 0a 20  sizeof(data));. 
29120 20 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61 64     data.showHead
29130 65 72 20 3d 20 30 3b 0a 20 20 20 20 64 61 74 61  er = 0;.    data
29140 2e 63 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d 6f  .cMode = data.mo
29150 64 65 20 3d 20 4d 4f 44 45 5f 53 65 6d 69 3b 0a  de = MODE_Semi;.
29160 20 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 53      initText(&sS
29170 65 6c 65 63 74 29 3b 0a 20 20 20 20 66 6f 72 28  elect);.    for(
29180 69 69 3d 31 3b 20 69 69 3c 6e 41 72 67 3b 20 69  ii=1; ii<nArg; i
29190 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
291a0 6f 70 74 69 6f 6e 4d 61 74 63 68 28 61 7a 41 72  optionMatch(azAr
291b0 67 5b 69 69 5d 2c 22 69 6e 64 65 6e 74 22 29 20  g[ii],"indent") 
291c0 29 7b 0a 20 20 20 20 20 20 20 20 64 61 74 61 2e  ){.        data.
291d0 63 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64  cMode = data.mod
291e0 65 20 3d 20 4d 4f 44 45 5f 50 72 65 74 74 79 3b  e = MODE_Pretty;
291f0 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
29200 20 6f 70 74 69 6f 6e 4d 61 74 63 68 28 61 7a 41   optionMatch(azA
29210 72 67 5b 69 69 5d 2c 22 64 65 62 75 67 22 29 20  rg[ii],"debug") 
29220 29 7b 0a 20 20 20 20 20 20 20 20 62 44 65 62 75  ){.        bDebu
29230 67 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c  g = 1;.      }el
29240 73 65 20 69 66 28 20 7a 4e 61 6d 65 3d 3d 30 20  se if( zName==0 
29250 29 7b 0a 20 20 20 20 20 20 20 20 7a 4e 61 6d 65  ){.        zName
29260 20 3d 20 61 7a 41 72 67 5b 69 69 5d 3b 0a 20 20   = azArg[ii];.  
29270 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
29280 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
29290 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 73  derr, "Usage: .s
292a0 63 68 65 6d 61 20 3f 2d 2d 69 6e 64 65 6e 74 3f  chema ?--indent?
292b0 20 3f 4c 49 4b 45 2d 50 41 54 54 45 52 4e 3f 5c   ?LIKE-PATTERN?\
292c0 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  n");.        rc 
292d0 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  = 1;.        got
292e0 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
292f0 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  xit;.      }.   
29300 20 7d 0a 20 20 20 20 69 66 28 20 7a 4e 61 6d 65   }.    if( zName
29310 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  !=0 ){.      if(
29320 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70   sqlite3_stricmp
29330 28 7a 4e 61 6d 65 2c 22 73 71 6c 69 74 65 5f 6d  (zName,"sqlite_m
29340 61 73 74 65 72 22 29 3d 3d 30 0a 20 20 20 20 20  aster")==0.     
29350 20 20 7c 7c 20 73 71 6c 69 74 65 33 5f 73 74 72    || sqlite3_str
29360 69 63 6d 70 28 7a 4e 61 6d 65 2c 22 73 71 6c 69  icmp(zName,"sqli
29370 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 29  te_temp_master")
29380 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ==0.      ){.   
29390 20 20 20 20 20 63 68 61 72 20 2a 6e 65 77 5f 61       char *new_a
293a0 72 67 76 5b 32 5d 2c 20 2a 6e 65 77 5f 63 6f 6c  rgv[2], *new_col
293b0 76 5b 32 5d 3b 0a 20 20 20 20 20 20 20 20 6e 65  v[2];.        ne
293c0 77 5f 61 72 67 76 5b 30 5d 20 3d 20 73 71 6c 69  w_argv[0] = sqli
293d0 74 65 33 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20  te3_mprintf(.   
293e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293f0 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
29400 20 25 73 20 28 5c 6e 22 0a 20 20 20 20 20 20 20   %s (\n".       
29410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
29420 20 20 74 79 70 65 20 74 65 78 74 2c 5c 6e 22 0a    type text,\n".
29430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29440 20 20 20 20 20 20 22 20 20 6e 61 6d 65 20 74 65        "  name te
29450 78 74 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20 20  xt,\n".         
29460 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20               "  
29470 74 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e  tbl_name text,\n
29480 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
29490 20 20 20 20 20 20 20 20 22 20 20 72 6f 6f 74 70          "  rootp
294a0 61 67 65 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a  age integer,\n".
294b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294c0 20 20 20 20 20 20 22 20 20 73 71 6c 20 74 65 78        "  sql tex
294d0 74 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20  t\n".           
294e0 20 20 20 20 20 20 20 20 20 20 20 22 29 22 2c 20             ")", 
294f0 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20  zName);.        
29500 6e 65 77 5f 61 72 67 76 5b 31 5d 20 3d 20 30 3b  new_argv[1] = 0;
29510 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 63 6f 6c  .        new_col
29520 76 5b 30 5d 20 3d 20 22 73 71 6c 22 3b 0a 20 20  v[0] = "sql";.  
29530 20 20 20 20 20 20 6e 65 77 5f 63 6f 6c 76 5b 31        new_colv[1
29540 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 63  ] = 0;.        c
29550 61 6c 6c 62 61 63 6b 28 26 64 61 74 61 2c 20 31  allback(&data, 1
29560 2c 20 6e 65 77 5f 61 72 67 76 2c 20 6e 65 77 5f  , new_argv, new_
29570 63 6f 6c 76 29 3b 0a 20 20 20 20 20 20 20 20 73  colv);.        s
29580 71 6c 69 74 65 33 5f 66 72 65 65 28 6e 65 77 5f  qlite3_free(new_
29590 61 72 67 76 5b 30 5d 29 3b 0a 20 20 20 20 20 20  argv[0]);.      
295a0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
295b0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
295c0 20 20 20 20 20 20 20 7a 44 69 76 20 3d 20 22 28         zDiv = "(
295d0 22 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ";.      }.    }
295e0 65 6c 73 65 20 69 66 28 20 7a 4e 61 6d 65 3d 3d  else if( zName==
295f0 30 20 29 7b 0a 20 20 20 20 20 20 7a 44 69 76 20  0 ){.      zDiv 
29600 3d 20 22 28 22 3b 0a 20 20 20 20 7d 0a 20 20 20  = "(";.    }.   
29610 20 69 66 28 20 7a 44 69 76 20 29 7b 0a 20 20 20   if( zDiv ){.   
29620 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20     sqlite3_stmt 
29630 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 20 20  *pStmt = 0;.    
29640 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
29650 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c  repare_v2(p->db,
29660 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   "SELECT name FR
29670 4f 4d 20 70 72 61 67 6d 61 5f 64 61 74 61 62 61  OM pragma_databa
29680 73 65 5f 6c 69 73 74 22 2c 0a 20 20 20 20 20 20  se_list",.      
29690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296a0 20 20 20 20 20 20 20 20 2d 31 2c 20 26 70 53 74          -1, &pSt
296b0 6d 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66  mt, 0);.      if
296c0 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20  ( rc ){.        
296d0 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
296e0 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e  rr, "Error: %s\n
296f0 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
29700 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20  g(p->db));.     
29710 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c     sqlite3_final
29720 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  ize(pStmt);.    
29730 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
29740 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
29750 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
29760 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e 64    }.      append
29770 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22  Text(&sSelect, "
29780 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 22  SELECT sql FROM"
29790 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 53 63 68  , 0);.      iSch
297a0 65 6d 61 20 3d 20 30 3b 0a 20 20 20 20 20 20 77  ema = 0;.      w
297b0 68 69 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74  hile( sqlite3_st
297c0 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54  ep(pStmt)==SQLIT
297d0 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 20  E_ROW ){.       
297e0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
297f0 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
29800 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
29810 65 78 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a 20  ext(pStmt, 0);. 
29820 20 20 20 20 20 20 20 63 68 61 72 20 7a 53 63 4e         char zScN
29830 75 6d 5b 33 30 5d 3b 0a 20 20 20 20 20 20 20 20  um[30];.        
29840 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
29850 28 73 69 7a 65 6f 66 28 7a 53 63 4e 75 6d 29 2c  (sizeof(zScNum),
29860 20 7a 53 63 4e 75 6d 2c 20 22 25 64 22 2c 20 2b   zScNum, "%d", +
29870 2b 69 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20  +iSchema);.     
29880 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
29890 53 65 6c 65 63 74 2c 20 7a 44 69 76 2c 20 30 29  Select, zDiv, 0)
298a0 3b 0a 20 20 20 20 20 20 20 20 7a 44 69 76 20 3d  ;.        zDiv =
298b0 20 22 20 55 4e 49 4f 4e 20 41 4c 4c 20 22 3b 0a   " UNION ALL ";.
298c0 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65          appendTe
298d0 78 74 28 26 73 53 65 6c 65 63 74 2c 20 22 53 45  xt(&sSelect, "SE
298e0 4c 45 43 54 20 73 68 65 6c 6c 5f 61 64 64 5f 73  LECT shell_add_s
298f0 63 68 65 6d 61 28 73 71 6c 2c 22 2c 20 30 29 3b  chema(sql,", 0);
29900 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
29910 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 44 62  ite3_stricmp(zDb
29920 2c 20 22 6d 61 69 6e 22 29 21 3d 30 20 29 7b 0a  , "main")!=0 ){.
29930 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64            append
29940 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20 7a  Text(&sSelect, z
29950 44 62 2c 20 27 22 27 29 3b 0a 20 20 20 20 20 20  Db, '"');.      
29960 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
29970 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
29980 53 65 6c 65 63 74 2c 20 22 4e 55 4c 4c 22 2c 20  Select, "NULL", 
29990 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  0);.        }.  
299a0 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
299b0 28 26 73 53 65 6c 65 63 74 2c 20 22 2c 6e 61 6d  (&sSelect, ",nam
299c0 65 29 20 41 53 20 73 71 6c 2c 20 74 79 70 65 2c  e) AS sql, type,
299d0 20 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c   tbl_name, name,
299e0 20 72 6f 77 69 64 2c 22 2c 20 30 29 3b 0a 20 20   rowid,", 0);.  
299f0 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
29a00 28 26 73 53 65 6c 65 63 74 2c 20 7a 53 63 4e 75  (&sSelect, zScNu
29a10 6d 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61  m, 0);.        a
29a20 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
29a30 63 74 2c 20 22 20 41 53 20 73 6e 75 6d 2c 20 22  ct, " AS snum, "
29a40 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61 70  , 0);.        ap
29a50 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63  pendText(&sSelec
29a60 74 2c 20 7a 44 62 2c 20 27 5c 27 27 29 3b 0a 20  t, zDb, '\'');. 
29a70 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
29a80 74 28 26 73 53 65 6c 65 63 74 2c 20 22 20 41 53  t(&sSelect, " AS
29a90 20 73 6e 61 6d 65 20 46 52 4f 4d 20 22 2c 20 30   sname FROM ", 0
29aa0 29 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  );.        appen
29ab0 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20  dText(&sSelect, 
29ac0 7a 44 62 2c 20 27 22 27 29 3b 0a 20 20 20 20 20  zDb, '"');.     
29ad0 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
29ae0 53 65 6c 65 63 74 2c 20 22 2e 73 71 6c 69 74 65  Select, ".sqlite
29af0 5f 6d 61 73 74 65 72 22 2c 20 30 29 3b 0a 20 20  _master", 0);.  
29b00 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
29b10 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
29b20 6d 74 29 3b 0a 20 20 20 20 20 20 61 70 70 65 6e  mt);.      appen
29b30 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c 20  dText(&sSelect, 
29b40 22 29 20 57 48 45 52 45 20 22 2c 20 30 29 3b 0a  ") WHERE ", 0);.
29b50 20 20 20 20 20 20 69 66 28 20 7a 4e 61 6d 65 20        if( zName 
29b60 29 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20  ){.        char 
29b70 2a 7a 51 61 72 67 20 3d 20 73 71 6c 69 74 65 33  *zQarg = sqlite3
29b80 5f 6d 70 72 69 6e 74 66 28 22 25 51 22 2c 20 7a  _mprintf("%Q", z
29b90 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 69  Name);.        i
29ba0 66 28 20 73 74 72 63 68 72 28 7a 4e 61 6d 65 2c  f( strchr(zName,
29bb0 20 27 2e 27 29 20 29 7b 0a 20 20 20 20 20 20 20   '.') ){.       
29bc0 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
29bd0 53 65 6c 65 63 74 2c 20 22 6c 6f 77 65 72 28 70  Select, "lower(p
29be0 72 69 6e 74 66 28 27 25 73 2e 25 73 27 2c 73 6e  rintf('%s.%s',sn
29bf0 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65 29 29 22 2c  ame,tbl_name))",
29c00 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c   0);.        }el
29c10 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70  se{.          ap
29c20 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63  pendText(&sSelec
29c30 74 2c 20 22 6c 6f 77 65 72 28 74 62 6c 5f 6e 61  t, "lower(tbl_na
29c40 6d 65 29 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  me)", 0);.      
29c50 20 20 7d 0a 20 20 20 20 20 20 20 20 61 70 70 65    }.        appe
29c60 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c  ndText(&sSelect,
29c70 20 73 74 72 63 68 72 28 7a 4e 61 6d 65 2c 20 27   strchr(zName, '
29c80 2a 27 29 20 3f 20 22 20 47 4c 4f 42 20 22 20 3a  *') ? " GLOB " :
29c90 20 22 20 4c 49 4b 45 20 22 2c 20 30 29 3b 0a 20   " LIKE ", 0);. 
29ca0 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
29cb0 74 28 26 73 53 65 6c 65 63 74 2c 20 7a 51 61 72  t(&sSelect, zQar
29cc0 67 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61  g, 0);.        a
29cd0 70 70 65 6e 64 54 65 78 74 28 26 73 53 65 6c 65  ppendText(&sSele
29ce0 63 74 2c 20 22 20 41 4e 44 20 22 2c 20 30 29 3b  ct, " AND ", 0);
29cf0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
29d00 5f 66 72 65 65 28 7a 51 61 72 67 29 3b 0a 20 20  _free(zQarg);.  
29d10 20 20 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65      }.      appe
29d20 6e 64 54 65 78 74 28 26 73 53 65 6c 65 63 74 2c  ndText(&sSelect,
29d30 20 22 74 79 70 65 21 3d 27 6d 65 74 61 27 20 41   "type!='meta' A
29d40 4e 44 20 73 71 6c 20 49 53 20 4e 4f 54 20 4e 55  ND sql IS NOT NU
29d50 4c 4c 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  LL".            
29d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
29d70 20 4f 52 44 45 52 20 42 59 20 73 6e 75 6d 2c 20   ORDER BY snum, 
29d80 72 6f 77 69 64 22 2c 20 30 29 3b 0a 20 20 20 20  rowid", 0);.    
29d90 20 20 69 66 28 20 62 44 65 62 75 67 20 29 7b 0a    if( bDebug ){.
29da0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
29db0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 53 51 4c  ntf(p->out, "SQL
29dc0 3a 20 25 73 3b 5c 6e 22 2c 20 73 53 65 6c 65 63  : %s;\n", sSelec
29dd0 74 2e 7a 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  t.z);.      }els
29de0 65 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  e{.        rc = 
29df0 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e  sqlite3_exec(p->
29e00 64 62 2c 20 73 53 65 6c 65 63 74 2e 7a 2c 20 63  db, sSelect.z, c
29e10 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c 20  allback, &data, 
29e20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20  &zErrMsg);.     
29e30 20 7d 0a 20 20 20 20 20 20 66 72 65 65 54 65 78   }.      freeTex
29e40 74 28 26 73 53 65 6c 65 63 74 29 3b 0a 20 20 20  t(&sSelect);.   
29e50 20 7d 0a 20 20 20 20 69 66 28 20 7a 45 72 72 4d   }.    if( zErrM
29e60 73 67 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  sg ){.      utf8
29e70 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
29e80 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45  Error: %s\n", zE
29e90 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 73 71  rrMsg);.      sq
29ea0 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d  lite3_free(zErrM
29eb0 73 67 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  sg);.      rc = 
29ec0 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  1;.    }else if(
29ed0 20 72 63 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b   rc != SQLITE_OK
29ee0 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
29ef0 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72  intf(stderr,"Err
29f00 6f 72 3a 20 71 75 65 72 79 69 6e 67 20 73 63 68  or: querying sch
29f10 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 5c  ema information\
29f20 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
29f30 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
29f40 20 20 20 20 72 63 20 3d 20 30 3b 0a 20 20 20 20      rc = 0;.    
29f50 7d 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 20 64  }.  }else..#if d
29f60 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
29f70 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64 28  BUG) && defined(
29f80 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45  SQLITE_ENABLE_SE
29f90 4c 45 43 54 54 52 41 43 45 29 0a 20 20 69 66 28  LECTTRACE).  if(
29fa0 20 63 3d 3d 27 73 27 20 26 26 20 6e 3d 3d 31 31   c=='s' && n==11
29fb0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
29fc0 67 5b 30 5d 2c 20 22 73 65 6c 65 63 74 74 72 61  g[0], "selecttra
29fd0 63 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  ce", n)==0 ){.  
29fe0 20 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 54    sqlite3SelectT
29ff0 72 61 63 65 20 3d 20 28 69 6e 74 29 69 6e 74 65  race = (int)inte
2a000 67 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 31  gerValue(azArg[1
2a010 5d 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64  ]);.  }else.#end
2a020 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
2a030 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45  SQLITE_ENABLE_SE
2a040 53 53 49 4f 4e 29 0a 20 20 69 66 28 20 63 3d 3d  SSION).  if( c==
2a050 27 73 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  's' && strncmp(a
2a060 7a 41 72 67 5b 30 5d 2c 22 73 65 73 73 69 6f 6e  zArg[0],"session
2a070 22 2c 6e 29 3d 3d 30 20 26 26 20 6e 3e 3d 33 20  ",n)==0 && n>=3 
2a080 29 7b 0a 20 20 20 20 4f 70 65 6e 53 65 73 73 69  ){.    OpenSessi
2a090 6f 6e 20 2a 70 53 65 73 73 69 6f 6e 20 3d 20 26  on *pSession = &
2a0a0 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 30 5d 3b 0a  p->aSession[0];.
2a0b0 20 20 20 20 63 68 61 72 20 2a 2a 61 7a 43 6d 64      char **azCmd
2a0c0 20 3d 20 26 61 7a 41 72 67 5b 31 5d 3b 0a 20 20   = &azArg[1];.  
2a0d0 20 20 69 6e 74 20 69 53 65 73 20 3d 20 30 3b 0a    int iSes = 0;.
2a0e0 20 20 20 20 69 6e 74 20 6e 43 6d 64 20 3d 20 6e      int nCmd = n
2a0f0 41 72 67 20 2d 20 31 3b 0a 20 20 20 20 69 6e 74  Arg - 1;.    int
2a100 20 69 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   i;.    if( nArg
2a110 3c 3d 31 20 29 20 67 6f 74 6f 20 73 65 73 73 69  <=1 ) goto sessi
2a120 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b  on_syntax_error;
2a130 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20  .    open_db(p, 
2a140 30 29 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67  0);.    if( nArg
2a150 3e 3d 33 20 29 7b 0a 20 20 20 20 20 20 66 6f 72  >=3 ){.      for
2a160 28 69 53 65 73 3d 30 3b 20 69 53 65 73 3c 70 2d  (iSes=0; iSes<p-
2a170 3e 6e 53 65 73 73 69 6f 6e 3b 20 69 53 65 73 2b  >nSession; iSes+
2a180 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  +){.        if( 
2a190 73 74 72 63 6d 70 28 70 2d 3e 61 53 65 73 73 69  strcmp(p->aSessi
2a1a0 6f 6e 5b 69 53 65 73 5d 2e 7a 4e 61 6d 65 2c 20  on[iSes].zName, 
2a1b0 61 7a 41 72 67 5b 31 5d 29 3d 3d 30 20 29 20 62  azArg[1])==0 ) b
2a1c0 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
2a1d0 20 20 20 20 69 66 28 20 69 53 65 73 3c 70 2d 3e      if( iSes<p->
2a1e0 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20  nSession ){.    
2a1f0 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d 20 26      pSession = &
2a200 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 69 53 65 73  p->aSession[iSes
2a210 5d 3b 0a 20 20 20 20 20 20 20 20 61 7a 43 6d 64  ];.        azCmd
2a220 2b 2b 3b 0a 20 20 20 20 20 20 20 20 6e 43 6d 64  ++;.        nCmd
2a230 2d 2d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  --;.      }else{
2a240 0a 20 20 20 20 20 20 20 20 70 53 65 73 73 69 6f  .        pSessio
2a250 6e 20 3d 20 26 70 2d 3e 61 53 65 73 73 69 6f 6e  n = &p->aSession
2a260 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 69 53 65  [0];.        iSe
2a270 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  s = 0;.      }. 
2a280 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 2e 73 65     }..    /* .se
2a290 73 73 69 6f 6e 20 61 74 74 61 63 68 20 54 41 42  ssion attach TAB
2a2a0 4c 45 0a 20 20 20 20 2a 2a 20 49 6e 76 6f 6b 65  LE.    ** Invoke
2a2b0 20 74 68 65 20 73 71 6c 69 74 65 33 73 65 73 73   the sqlite3sess
2a2c0 69 6f 6e 5f 61 74 74 61 63 68 28 29 20 69 6e 74  ion_attach() int
2a2d0 65 72 66 61 63 65 20 74 6f 20 61 74 74 61 63 68  erface to attach
2a2e0 20 61 20 70 61 72 74 69 63 75 6c 61 72 0a 20 20   a particular.  
2a2f0 20 20 2a 2a 20 74 61 62 6c 65 20 73 6f 20 74 68    ** table so th
2a300 61 74 20 69 74 20 69 73 20 6e 65 76 65 72 20 66  at it is never f
2a310 69 6c 74 65 72 65 64 2e 0a 20 20 20 20 2a 2f 0a  iltered..    */.
2a320 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61      if( strcmp(a
2a330 7a 43 6d 64 5b 30 5d 2c 22 61 74 74 61 63 68 22  zCmd[0],"attach"
2a340 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  )==0 ){.      if
2a350 28 20 6e 43 6d 64 21 3d 32 20 29 20 67 6f 74 6f  ( nCmd!=2 ) goto
2a360 20 73 65 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f   session_syntax_
2a370 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 69 66 28  error;.      if(
2a380 20 70 53 65 73 73 69 6f 6e 2d 3e 70 3d 3d 30 20   pSession->p==0 
2a390 29 7b 0a 20 20 20 20 20 20 20 20 73 65 73 73 69  ){.        sessi
2a3a0 6f 6e 5f 6e 6f 74 5f 6f 70 65 6e 3a 0a 20 20 20  on_not_open:.   
2a3b0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
2a3c0 73 74 64 65 72 72 2c 20 22 45 52 52 4f 52 3a 20  stderr, "ERROR: 
2a3d0 4e 6f 20 73 65 73 73 69 6f 6e 73 20 61 72 65 20  No sessions are 
2a3e0 6f 70 65 6e 5c 6e 22 29 3b 0a 20 20 20 20 20 20  open\n");.      
2a3f0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72  }else{.        r
2a400 63 20 3d 20 73 71 6c 69 74 65 33 73 65 73 73 69  c = sqlite3sessi
2a410 6f 6e 5f 61 74 74 61 63 68 28 70 53 65 73 73 69  on_attach(pSessi
2a420 6f 6e 2d 3e 70 2c 20 61 7a 43 6d 64 5b 31 5d 29  on->p, azCmd[1])
2a430 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
2a440 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61   ){.          ra
2a450 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
2a460 20 22 45 52 52 4f 52 3a 20 73 71 6c 69 74 65 33   "ERROR: sqlite3
2a470 73 65 73 73 69 6f 6e 5f 61 74 74 61 63 68 28 29  session_attach()
2a480 20 72 65 74 75 72 6e 73 20 25 64 5c 6e 22 2c 20   returns %d\n", 
2a490 72 63 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72  rc);.          r
2a4a0 63 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  c = 0;.        }
2a4b0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
2a4c0 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73  se..    /* .sess
2a4d0 69 6f 6e 20 63 68 61 6e 67 65 73 65 74 20 46 49  ion changeset FI
2a4e0 4c 45 0a 20 20 20 20 2a 2a 20 2e 73 65 73 73 69  LE.    ** .sessi
2a4f0 6f 6e 20 70 61 74 63 68 73 65 74 20 46 49 4c 45  on patchset FILE
2a500 0a 20 20 20 20 2a 2a 20 57 72 69 74 65 20 61 20  .    ** Write a 
2a510 63 68 61 6e 67 65 73 65 74 20 6f 72 20 70 61 74  changeset or pat
2a520 63 68 73 65 74 20 69 6e 74 6f 20 61 20 66 69 6c  chset into a fil
2a530 65 2e 20 20 54 68 65 20 66 69 6c 65 20 69 73 20  e.  The file is 
2a540 6f 76 65 72 77 72 69 74 74 65 6e 2e 0a 20 20 20  overwritten..   
2a550 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 72 63   */.    if( strc
2a560 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 22 63 68 61  mp(azCmd[0],"cha
2a570 6e 67 65 73 65 74 22 29 3d 3d 30 20 7c 7c 20 73  ngeset")==0 || s
2a580 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 22  trcmp(azCmd[0],"
2a590 70 61 74 63 68 73 65 74 22 29 3d 3d 30 20 29 7b  patchset")==0 ){
2a5a0 0a 20 20 20 20 20 20 46 49 4c 45 20 2a 6f 75 74  .      FILE *out
2a5b0 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 66 28 20   = 0;.      if( 
2a5c0 6e 43 6d 64 21 3d 32 20 29 20 67 6f 74 6f 20 73  nCmd!=2 ) goto s
2a5d0 65 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72  ession_syntax_er
2a5e0 72 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ror;.      if( p
2a5f0 53 65 73 73 69 6f 6e 2d 3e 70 3d 3d 30 20 29 20  Session->p==0 ) 
2a600 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f 6e 6f 74  goto session_not
2a610 5f 6f 70 65 6e 3b 0a 20 20 20 20 20 20 6f 75 74  _open;.      out
2a620 20 3d 20 66 6f 70 65 6e 28 61 7a 43 6d 64 5b 31   = fopen(azCmd[1
2a630 5d 2c 20 22 77 62 22 29 3b 0a 20 20 20 20 20 20  ], "wb");.      
2a640 69 66 28 20 6f 75 74 3d 3d 30 20 29 7b 0a 20 20  if( out==0 ){.  
2a650 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
2a660 66 28 73 74 64 65 72 72 2c 20 22 45 52 52 4f 52  f(stderr, "ERROR
2a670 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22  : cannot open \"
2a680 25 73 5c 22 20 66 6f 72 20 77 72 69 74 69 6e 67  %s\" for writing
2a690 5c 6e 22 2c 20 61 7a 43 6d 64 5b 31 5d 29 3b 0a  \n", azCmd[1]);.
2a6a0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
2a6b0 20 20 20 20 20 69 6e 74 20 73 7a 43 68 6e 67 3b       int szChng;
2a6c0 0a 20 20 20 20 20 20 20 20 76 6f 69 64 20 2a 70  .        void *p
2a6d0 43 68 6e 67 3b 0a 20 20 20 20 20 20 20 20 69 66  Chng;.        if
2a6e0 28 20 61 7a 43 6d 64 5b 30 5d 5b 30 5d 3d 3d 27  ( azCmd[0][0]=='
2a6f0 63 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  c' ){.          
2a700 72 63 20 3d 20 73 71 6c 69 74 65 33 73 65 73 73  rc = sqlite3sess
2a710 69 6f 6e 5f 63 68 61 6e 67 65 73 65 74 28 70 53  ion_changeset(pS
2a720 65 73 73 69 6f 6e 2d 3e 70 2c 20 26 73 7a 43 68  ession->p, &szCh
2a730 6e 67 2c 20 26 70 43 68 6e 67 29 3b 0a 20 20 20  ng, &pChng);.   
2a740 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
2a750 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2a760 65 33 73 65 73 73 69 6f 6e 5f 70 61 74 63 68 73  e3session_patchs
2a770 65 74 28 70 53 65 73 73 69 6f 6e 2d 3e 70 2c 20  et(pSession->p, 
2a780 26 73 7a 43 68 6e 67 2c 20 26 70 43 68 6e 67 29  &szChng, &pChng)
2a790 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2a7a0 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
2a7b0 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22          printf("
2a7c0 45 72 72 6f 72 3a 20 65 72 72 6f 72 20 63 6f 64  Error: error cod
2a7d0 65 20 25 64 5c 6e 22 2c 20 72 63 29 3b 0a 20 20  e %d\n", rc);.  
2a7e0 20 20 20 20 20 20 20 20 72 63 20 3d 20 30 3b 0a          rc = 0;.
2a7f0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2a800 20 20 69 66 28 20 70 43 68 6e 67 0a 20 20 20 20    if( pChng.    
2a810 20 20 20 20 20 20 26 26 20 66 77 72 69 74 65 28        && fwrite(
2a820 70 43 68 6e 67 2c 20 73 7a 43 68 6e 67 2c 20 31  pChng, szChng, 1
2a830 2c 20 6f 75 74 29 21 3d 31 20 29 7b 0a 20 20 20  , out)!=1 ){.   
2a840 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
2a850 66 28 73 74 64 65 72 72 2c 20 22 45 52 52 4f 52  f(stderr, "ERROR
2a860 3a 20 46 61 69 6c 65 64 20 74 6f 20 77 72 69 74  : Failed to writ
2a870 65 20 65 6e 74 69 72 65 20 25 64 2d 62 79 74 65  e entire %d-byte
2a880 20 6f 75 74 70 75 74 5c 6e 22 2c 0a 20 20 20 20   output\n",.    
2a890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 7a                sz
2a8a0 43 68 6e 67 29 3b 0a 20 20 20 20 20 20 20 20 7d  Chng);.        }
2a8b0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2a8c0 5f 66 72 65 65 28 70 43 68 6e 67 29 3b 0a 20 20  _free(pChng);.  
2a8d0 20 20 20 20 20 20 66 63 6c 6f 73 65 28 6f 75 74        fclose(out
2a8e0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
2a8f0 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73 65  else..    /* .se
2a900 73 73 69 6f 6e 20 63 6c 6f 73 65 0a 20 20 20 20  ssion close.    
2a910 2a 2a 20 43 6c 6f 73 65 20 74 68 65 20 69 64 65  ** Close the ide
2a920 6e 74 69 66 69 65 64 20 73 65 73 73 69 6f 6e 0a  ntified session.
2a930 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73      */.    if( s
2a940 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 20  trcmp(azCmd[0], 
2a950 22 63 6c 6f 73 65 22 29 3d 3d 30 20 29 7b 0a 20  "close")==0 ){. 
2a960 20 20 20 20 20 69 66 28 20 6e 43 6d 64 21 3d 31       if( nCmd!=1
2a970 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f   ) goto session_
2a980 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20  syntax_error;.  
2a990 20 20 20 20 69 66 28 20 70 2d 3e 6e 53 65 73 73      if( p->nSess
2a9a0 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ion ){.        s
2a9b0 65 73 73 69 6f 6e 5f 63 6c 6f 73 65 28 70 53 65  ession_close(pSe
2a9c0 73 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20  ssion);.        
2a9d0 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 69 53 65 73  p->aSession[iSes
2a9e0 5d 20 3d 20 70 2d 3e 61 53 65 73 73 69 6f 6e 5b  ] = p->aSession[
2a9f0 2d 2d 70 2d 3e 6e 53 65 73 73 69 6f 6e 5d 3b 0a  --p->nSession];.
2aa00 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
2aa10 65 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69  e..    /* .sessi
2aa20 6f 6e 20 65 6e 61 62 6c 65 20 3f 42 4f 4f 4c 45  on enable ?BOOLE
2aa30 41 4e 3f 0a 20 20 20 20 2a 2a 20 51 75 65 72 79  AN?.    ** Query
2aa40 20 6f 72 20 73 65 74 20 74 68 65 20 65 6e 61 62   or set the enab
2aa50 6c 65 20 66 6c 61 67 0a 20 20 20 20 2a 2f 0a 20  le flag.    */. 
2aa60 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a     if( strcmp(az
2aa70 43 6d 64 5b 30 5d 2c 20 22 65 6e 61 62 6c 65 22  Cmd[0], "enable"
2aa80 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e  )==0 ){.      in
2aa90 74 20 69 69 3b 0a 20 20 20 20 20 20 69 66 28 20  t ii;.      if( 
2aaa0 6e 43 6d 64 3e 32 20 29 20 67 6f 74 6f 20 73 65  nCmd>2 ) goto se
2aab0 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72  ssion_syntax_err
2aac0 6f 72 3b 0a 20 20 20 20 20 20 69 69 20 3d 20 6e  or;.      ii = n
2aad0 43 6d 64 3d 3d 31 20 3f 20 2d 31 20 3a 20 62 6f  Cmd==1 ? -1 : bo
2aae0 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 43 6d 64  oleanValue(azCmd
2aaf0 5b 31 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20  [1]);.      if( 
2ab00 70 2d 3e 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20  p->nSession ){. 
2ab10 20 20 20 20 20 20 20 69 69 20 3d 20 73 71 6c 69         ii = sqli
2ab20 74 65 33 73 65 73 73 69 6f 6e 5f 65 6e 61 62 6c  te3session_enabl
2ab30 65 28 70 53 65 73 73 69 6f 6e 2d 3e 70 2c 20 69  e(pSession->p, i
2ab40 69 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38  i);.        utf8
2ab50 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
2ab60 22 73 65 73 73 69 6f 6e 20 25 73 20 65 6e 61 62  "session %s enab
2ab70 6c 65 20 66 6c 61 67 20 3d 20 25 64 5c 6e 22 2c  le flag = %d\n",
2ab80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ab90 20 20 20 20 20 70 53 65 73 73 69 6f 6e 2d 3e 7a       pSession->z
2aba0 4e 61 6d 65 2c 20 69 69 29 3b 0a 20 20 20 20 20  Name, ii);.     
2abb0 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20   }.    }else..  
2abc0 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 66 69    /* .session fi
2abd0 6c 74 65 72 20 47 4c 4f 42 20 2e 2e 2e 2e 0a 20  lter GLOB ..... 
2abe0 20 20 20 2a 2a 20 53 65 74 20 61 20 6c 69 73 74     ** Set a list
2abf0 20 6f 66 20 47 4c 4f 42 20 70 61 74 74 65 72 6e   of GLOB pattern
2ac00 73 20 6f 66 20 74 61 62 6c 65 20 6e 61 6d 65 73  s of table names
2ac10 20 74 6f 20 62 65 20 65 78 63 6c 75 64 65 64 2e   to be excluded.
2ac20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
2ac30 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c  strcmp(azCmd[0],
2ac40 20 22 66 69 6c 74 65 72 22 29 3d 3d 30 20 29 7b   "filter")==0 ){
2ac50 0a 20 20 20 20 20 20 69 6e 74 20 69 69 2c 20 6e  .      int ii, n
2ac60 42 79 74 65 3b 0a 20 20 20 20 20 20 69 66 28 20  Byte;.      if( 
2ac70 6e 43 6d 64 3c 32 20 29 20 67 6f 74 6f 20 73 65  nCmd<2 ) goto se
2ac80 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72  ssion_syntax_err
2ac90 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d  or;.      if( p-
2aca0 3e 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20  >nSession ){.   
2acb0 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
2acc0 69 3c 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c  i<pSession->nFil
2acd0 74 65 72 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  ter; ii++){.    
2ace0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
2acf0 65 65 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46  ee(pSession->azF
2ad00 69 6c 74 65 72 5b 69 69 5d 29 3b 0a 20 20 20 20  ilter[ii]);.    
2ad10 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71      }.        sq
2ad20 6c 69 74 65 33 5f 66 72 65 65 28 70 53 65 73 73  lite3_free(pSess
2ad30 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72 29 3b 0a  ion->azFilter);.
2ad40 20 20 20 20 20 20 20 20 6e 42 79 74 65 20 3d 20          nByte = 
2ad50 73 69 7a 65 6f 66 28 70 53 65 73 73 69 6f 6e 2d  sizeof(pSession-
2ad60 3e 61 7a 46 69 6c 74 65 72 5b 30 5d 29 2a 28 6e  >azFilter[0])*(n
2ad70 43 6d 64 2d 31 29 3b 0a 20 20 20 20 20 20 20 20  Cmd-1);.        
2ad80 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74  pSession->azFilt
2ad90 65 72 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c  er = sqlite3_mal
2ada0 6c 6f 63 28 20 6e 42 79 74 65 20 29 3b 0a 20 20  loc( nByte );.  
2adb0 20 20 20 20 20 20 69 66 28 20 70 53 65 73 73 69        if( pSessi
2adc0 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72 3d 3d 30 20  on->azFilter==0 
2add0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77  ){.          raw
2ade0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
2adf0 22 45 72 72 6f 72 3a 20 6f 75 74 20 6f 72 20 6d  "Error: out or m
2ae00 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20 20  emory\n");.     
2ae10 20 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20       exit(1);.  
2ae20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2ae30 66 6f 72 28 69 69 3d 31 3b 20 69 69 3c 6e 43 6d  for(ii=1; ii<nCm
2ae40 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  d; ii++){.      
2ae50 20 20 20 20 70 53 65 73 73 69 6f 6e 2d 3e 61 7a      pSession->az
2ae60 46 69 6c 74 65 72 5b 69 69 2d 31 5d 20 3d 20 73  Filter[ii-1] = s
2ae70 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
2ae80 25 73 22 2c 20 61 7a 43 6d 64 5b 69 69 5d 29 3b  %s", azCmd[ii]);
2ae90 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
2aea0 20 20 20 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69     pSession->nFi
2aeb0 6c 74 65 72 20 3d 20 69 69 2d 31 3b 0a 20 20 20  lter = ii-1;.   
2aec0 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a     }.    }else..
2aed0 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20      /* .session 
2aee0 69 6e 64 69 72 65 63 74 20 3f 42 4f 4f 4c 45 41  indirect ?BOOLEA
2aef0 4e 3f 0a 20 20 20 20 2a 2a 20 51 75 65 72 79 20  N?.    ** Query 
2af00 6f 72 20 73 65 74 20 74 68 65 20 69 6e 64 69 72  or set the indir
2af10 65 63 74 20 66 6c 61 67 0a 20 20 20 20 2a 2f 0a  ect flag.    */.
2af20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61      if( strcmp(a
2af30 7a 43 6d 64 5b 30 5d 2c 20 22 69 6e 64 69 72 65  zCmd[0], "indire
2af40 63 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ct")==0 ){.     
2af50 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 69   int ii;.      i
2af60 66 28 20 6e 43 6d 64 3e 32 20 29 20 67 6f 74 6f  f( nCmd>2 ) goto
2af70 20 73 65 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f   session_syntax_
2af80 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 69 69 20  error;.      ii 
2af90 3d 20 6e 43 6d 64 3d 3d 31 20 3f 20 2d 31 20 3a  = nCmd==1 ? -1 :
2afa0 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a   booleanValue(az
2afb0 43 6d 64 5b 31 5d 29 3b 0a 20 20 20 20 20 20 69  Cmd[1]);.      i
2afc0 66 28 20 70 2d 3e 6e 53 65 73 73 69 6f 6e 20 29  f( p->nSession )
2afd0 7b 0a 20 20 20 20 20 20 20 20 69 69 20 3d 20 73  {.        ii = s
2afe0 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 69 6e  qlite3session_in
2aff0 64 69 72 65 63 74 28 70 53 65 73 73 69 6f 6e 2d  direct(pSession-
2b000 3e 70 2c 20 69 69 29 3b 0a 20 20 20 20 20 20 20  >p, ii);.       
2b010 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
2b020 6f 75 74 2c 20 22 73 65 73 73 69 6f 6e 20 25 73  out, "session %s
2b030 20 69 6e 64 69 72 65 63 74 20 66 6c 61 67 20 3d   indirect flag =
2b040 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20   %d\n",.        
2b050 20 20 20 20 20 20 20 20 20 20 20 20 70 53 65 73              pSes
2b060 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 2c 20 69 69 29  sion->zName, ii)
2b070 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
2b080 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73  lse..    /* .ses
2b090 73 69 6f 6e 20 69 73 65 6d 70 74 79 0a 20 20 20  sion isempty.   
2b0a0 20 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69 66   ** Determine if
2b0b0 20 74 68 65 20 73 65 73 73 69 6f 6e 20 69 73 20   the session is 
2b0c0 65 6d 70 74 79 0a 20 20 20 20 2a 2f 0a 20 20 20  empty.    */.   
2b0d0 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d   if( strcmp(azCm
2b0e0 64 5b 30 5d 2c 20 22 69 73 65 6d 70 74 79 22 29  d[0], "isempty")
2b0f0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ==0 ){.      int
2b100 20 69 69 3b 0a 20 20 20 20 20 20 69 66 28 20 6e   ii;.      if( n
2b110 43 6d 64 21 3d 31 20 29 20 67 6f 74 6f 20 73 65  Cmd!=1 ) goto se
2b120 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72  ssion_syntax_err
2b130 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d  or;.      if( p-
2b140 3e 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20  >nSession ){.   
2b150 20 20 20 20 20 69 69 20 3d 20 73 71 6c 69 74 65       ii = sqlite
2b160 33 73 65 73 73 69 6f 6e 5f 69 73 65 6d 70 74 79  3session_isempty
2b170 28 70 53 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20  (pSession->p);. 
2b180 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
2b190 74 66 28 70 2d 3e 6f 75 74 2c 20 22 73 65 73 73  tf(p->out, "sess
2b1a0 69 6f 6e 20 25 73 20 69 73 65 6d 70 74 79 20 66  ion %s isempty f
2b1b0 6c 61 67 20 3d 20 25 64 5c 6e 22 2c 0a 20 20 20  lag = %d\n",.   
2b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1d0 20 70 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65   pSession->zName
2b1e0 2c 20 69 69 29 3b 0a 20 20 20 20 20 20 7d 0a 20  , ii);.      }. 
2b1f0 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a     }else..    /*
2b200 20 2e 73 65 73 73 69 6f 6e 20 6c 69 73 74 0a 20   .session list. 
2b210 20 20 20 2a 2a 20 4c 69 73 74 20 61 6c 6c 20 63     ** List all c
2b220 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 73 65  urrently open se
2b230 73 73 69 6f 6e 73 0a 20 20 20 20 2a 2f 0a 20 20  ssions.    */.  
2b240 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43    if( strcmp(azC
2b250 6d 64 5b 30 5d 2c 22 6c 69 73 74 22 29 3d 3d 30  md[0],"list")==0
2b260 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d   ){.      for(i=
2b270 30 3b 20 69 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e  0; i<p->nSession
2b280 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
2b290 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
2b2a0 75 74 2c 20 22 25 64 20 25 73 5c 6e 22 2c 20 69  ut, "%d %s\n", i
2b2b0 2c 20 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 69 5d  , p->aSession[i]
2b2c0 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d  .zName);.      }
2b2d0 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20  .    }else..    
2b2e0 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 6f 70 65 6e  /* .session open
2b2f0 20 44 42 20 4e 41 4d 45 0a 20 20 20 20 2a 2a 20   DB NAME.    ** 
2b300 4f 70 65 6e 20 61 20 6e 65 77 20 73 65 73 73 69  Open a new sessi
2b310 6f 6e 20 63 61 6c 6c 65 64 20 4e 41 4d 45 20 6f  on called NAME o
2b320 6e 20 74 68 65 20 61 74 74 61 63 68 65 64 20 64  n the attached d
2b330 61 74 61 62 61 73 65 20 44 42 2e 0a 20 20 20 20  atabase DB..    
2b340 2a 2a 20 44 42 20 69 73 20 6e 6f 72 6d 61 6c 6c  ** DB is normall
2b350 79 20 22 6d 61 69 6e 22 2e 0a 20 20 20 20 2a 2f  y "main"..    */
2b360 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28  .    if( strcmp(
2b370 61 7a 43 6d 64 5b 30 5d 2c 22 6f 70 65 6e 22 29  azCmd[0],"open")
2b380 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 63 68 61  ==0 ){.      cha
2b390 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 20  r *zName;.      
2b3a0 69 66 28 20 6e 43 6d 64 21 3d 33 20 29 20 67 6f  if( nCmd!=3 ) go
2b3b0 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79 6e 74 61  to session_synta
2b3c0 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7a  x_error;.      z
2b3d0 4e 61 6d 65 20 3d 20 61 7a 43 6d 64 5b 32 5d 3b  Name = azCmd[2];
2b3e0 0a 20 20 20 20 20 20 69 66 28 20 7a 4e 61 6d 65  .      if( zName
2b3f0 5b 30 5d 3d 3d 30 20 29 20 67 6f 74 6f 20 73 65  [0]==0 ) goto se
2b400 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72  ssion_syntax_err
2b410 6f 72 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  or;.      for(i=
2b420 30 3b 20 69 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e  0; i<p->nSession
2b430 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
2b440 69 66 28 20 73 74 72 63 6d 70 28 70 2d 3e 61 53  if( strcmp(p->aS
2b450 65 73 73 69 6f 6e 5b 69 5d 2e 7a 4e 61 6d 65 2c  ession[i].zName,
2b460 7a 4e 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20  zName)==0 ){.   
2b470 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
2b480 74 66 28 73 74 64 65 72 72 2c 20 22 53 65 73 73  tf(stderr, "Sess
2b490 69 6f 6e 20 5c 22 25 73 5c 22 20 61 6c 72 65 61  ion \"%s\" alrea
2b4a0 64 79 20 65 78 69 73 74 73 5c 6e 22 2c 20 7a 4e  dy exists\n", zN
2b4b0 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ame);.          
2b4c0 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
2b4d0 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 20 20  d_exit;.        
2b4e0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
2b4f0 69 66 28 20 70 2d 3e 6e 53 65 73 73 69 6f 6e 3e  if( p->nSession>
2b500 3d 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 53  =ArraySize(p->aS
2b510 65 73 73 69 6f 6e 29 20 29 7b 0a 20 20 20 20 20  ession) ){.     
2b520 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
2b530 64 65 72 72 2c 20 22 4d 61 78 69 6d 75 6d 20 6f  derr, "Maximum o
2b540 66 20 25 64 20 73 65 73 73 69 6f 6e 73 5c 6e 22  f %d sessions\n"
2b550 2c 20 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61  , ArraySize(p->a
2b560 53 65 73 73 69 6f 6e 29 29 3b 0a 20 20 20 20 20  Session));.     
2b570 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d     goto meta_com
2b580 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 20  mand_exit;.     
2b590 20 7d 0a 20 20 20 20 20 20 70 53 65 73 73 69 6f   }.      pSessio
2b5a0 6e 20 3d 20 26 70 2d 3e 61 53 65 73 73 69 6f 6e  n = &p->aSession
2b5b0 5b 70 2d 3e 6e 53 65 73 73 69 6f 6e 5d 3b 0a 20  [p->nSession];. 
2b5c0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
2b5d0 33 73 65 73 73 69 6f 6e 5f 63 72 65 61 74 65 28  3session_create(
2b5e0 70 2d 3e 64 62 2c 20 61 7a 43 6d 64 5b 31 5d 2c  p->db, azCmd[1],
2b5f0 20 26 70 53 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a   &pSession->p);.
2b600 20 20 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a        if( rc ){.
2b610 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
2b620 74 66 28 73 74 64 65 72 72 2c 20 22 43 61 6e 6e  tf(stderr, "Cann
2b630 6f 74 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e 3a  ot open session:
2b640 20 65 72 72 6f 72 20 63 6f 64 65 3d 25 64 5c 6e   error code=%d\n
2b650 22 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 20 20  ", rc);.        
2b660 72 63 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  rc = 0;.        
2b670 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
2b680 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a  d_exit;.      }.
2b690 20 20 20 20 20 20 70 53 65 73 73 69 6f 6e 2d 3e        pSession->
2b6a0 6e 46 69 6c 74 65 72 20 3d 20 30 3b 0a 20 20 20  nFilter = 0;.   
2b6b0 20 20 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f     sqlite3sessio
2b6c0 6e 5f 74 61 62 6c 65 5f 66 69 6c 74 65 72 28 70  n_table_filter(p
2b6d0 53 65 73 73 69 6f 6e 2d 3e 70 2c 20 73 65 73 73  Session->p, sess
2b6e0 69 6f 6e 5f 66 69 6c 74 65 72 2c 20 70 53 65 73  ion_filter, pSes
2b6f0 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20 70 2d 3e  sion);.      p->
2b700 6e 53 65 73 73 69 6f 6e 2b 2b 3b 0a 20 20 20 20  nSession++;.    
2b710 20 20 70 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d    pSession->zNam
2b720 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  e = sqlite3_mpri
2b730 6e 74 66 28 22 25 73 22 2c 20 7a 4e 61 6d 65 29  ntf("%s", zName)
2b740 3b 0a 20 20 20 20 7d 65 6c 73 65 0a 20 20 20 20  ;.    }else.    
2b750 2f 2a 20 49 66 20 6e 6f 20 63 6f 6d 6d 61 6e 64  /* If no command
2b760 20 6e 61 6d 65 20 6d 61 74 63 68 65 73 2c 20 73   name matches, s
2b770 68 6f 77 20 61 20 73 79 6e 74 61 78 20 65 72 72  how a syntax err
2b780 6f 72 20 2a 2f 0a 20 20 20 20 73 65 73 73 69 6f  or */.    sessio
2b790 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3a 0a  n_syntax_error:.
2b7a0 20 20 20 20 73 65 73 73 69 6f 6e 5f 68 65 6c 70      session_help
2b7b0 28 70 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e  (p);.  }else.#en
2b7c0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2b7d0 54 45 5f 44 45 42 55 47 0a 20 20 2f 2a 20 55 6e  TE_DEBUG.  /* Un
2b7e0 64 6f 63 75 6d 65 6e 74 65 64 20 63 6f 6d 6d 61  documented comma
2b7f0 6e 64 73 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c  nds for internal
2b800 20 74 65 73 74 69 6e 67 2e 20 20 53 75 62 6a 65   testing.  Subje
2b810 63 74 20 74 6f 20 63 68 61 6e 67 65 0a 20 20 2a  ct to change.  *
2b820 2a 20 77 69 74 68 6f 75 74 20 6e 6f 74 69 63 65  * without notice
2b830 2e 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27 73  . */.  if( c=='s
2b840 27 20 26 26 20 6e 3e 3d 31 30 20 26 26 20 73 74  ' && n>=10 && st
2b850 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
2b860 22 73 65 6c 66 74 65 73 74 2d 22 2c 20 39 29 3d  "selftest-", 9)=
2b870 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73 74  =0 ){.    if( st
2b880 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2b 39  rncmp(azArg[0]+9
2b890 2c 20 22 62 6f 6f 6c 65 61 6e 22 2c 20 6e 2d 39  , "boolean", n-9
2b8a0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e  )==0 ){.      in
2b8b0 74 20 69 2c 20 76 3b 0a 20 20 20 20 20 20 66 6f  t i, v;.      fo
2b8c0 72 28 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=1; i<nArg; i
2b8d0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d  ++){.        v =
2b8e0 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a   booleanValue(az
2b8f0 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[i]);.       
2b900 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
2b910 6f 75 74 2c 20 22 25 73 3a 20 25 64 20 30 78 25  out, "%s: %d 0x%
2b920 78 5c 6e 22 2c 20 61 7a 41 72 67 5b 69 5d 2c 20  x\n", azArg[i], 
2b930 76 2c 20 76 29 3b 0a 20 20 20 20 20 20 7d 0a 20  v, v);.      }. 
2b940 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 74 72     }.    if( str
2b950 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2b 39 2c  ncmp(azArg[0]+9,
2b960 20 22 69 6e 74 65 67 65 72 22 2c 20 6e 2d 39 29   "integer", n-9)
2b970 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ==0 ){.      int
2b980 20 69 3b 20 73 71 6c 69 74 65 33 5f 69 6e 74 36   i; sqlite3_int6
2b990 34 20 76 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  4 v;.      for(i
2b9a0 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =1; i<nArg; i++)
2b9b0 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 7a  {.        char z
2b9c0 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 20 20  Buf[200];.      
2b9d0 20 20 76 20 3d 20 69 6e 74 65 67 65 72 56 61 6c    v = integerVal
2b9e0 75 65 28 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20  ue(azArg[i]);.  
2b9f0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
2ba00 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 42  printf(sizeof(zB
2ba10 75 66 29 2c 7a 42 75 66 2c 22 25 73 3a 20 25 6c  uf),zBuf,"%s: %l
2ba20 6c 64 20 30 78 25 6c 6c 78 5c 6e 22 2c 20 61 7a  ld 0x%llx\n", az
2ba30 41 72 67 5b 69 5d 2c 76 2c 76 29 3b 0a 20 20 20  Arg[i],v,v);.   
2ba40 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
2ba50 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a  (p->out, "%s", z
2ba60 42 75 66 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Buf);.      }.  
2ba70 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64    }.  }else.#end
2ba80 69 66 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73 27  if..  if( c=='s'
2ba90 20 26 26 20 6e 3e 3d 34 20 26 26 20 73 74 72 6e   && n>=4 && strn
2baa0 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 22 73 65  cmp(azArg[0],"se
2bab0 6c 66 74 65 73 74 22 2c 6e 29 3d 3d 30 20 29 7b  lftest",n)==0 ){
2bac0 0a 20 20 20 20 69 6e 74 20 62 49 73 49 6e 69 74  .    int bIsInit
2bad0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
2bae0 20 54 72 75 65 20 74 6f 20 69 6e 69 74 69 61 6c   True to initial
2baf0 69 7a 65 20 74 68 65 20 53 45 4c 46 54 45 53 54  ize the SELFTEST
2bb00 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
2bb10 74 20 62 56 65 72 62 6f 73 65 20 3d 20 30 3b 20  t bVerbose = 0; 
2bb20 20 20 20 20 20 20 20 2f 2a 20 56 65 72 62 6f 73         /* Verbos
2bb30 65 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 20 20  e output */.    
2bb40 69 6e 74 20 62 53 65 6c 66 74 65 73 74 45 78 69  int bSelftestExi
2bb50 73 74 73 3b 20 20 20 20 20 2f 2a 20 54 72 75 65  sts;     /* True
2bb60 20 69 66 20 53 45 4c 46 54 45 53 54 20 61 6c 72   if SELFTEST alr
2bb70 65 61 64 79 20 65 78 69 73 74 73 20 2a 2f 0a 20  eady exists */. 
2bb80 20 20 20 69 6e 74 20 69 2c 20 6b 3b 20 20 20 20     int i, k;    
2bb90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
2bba0 6f 6f 70 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  oop counters */.
2bbb0 20 20 20 20 69 6e 74 20 6e 54 65 73 74 20 3d 20      int nTest = 
2bbc0 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  0;           /* 
2bbd0 4e 75 6d 62 65 72 20 6f 66 20 74 65 73 74 73 20  Number of tests 
2bbe0 72 75 6e 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20  runs */.    int 
2bbf0 6e 45 72 72 20 3d 20 30 3b 20 20 20 20 20 20 20  nErr = 0;       
2bc00 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
2bc10 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f  f errors seen */
2bc20 0a 20 20 20 20 53 68 65 6c 6c 54 65 78 74 20 73  .    ShellText s
2bc30 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  tr;           /*
2bc40 20 41 6e 73 77 65 72 20 66 6f 72 20 61 20 71 75   Answer for a qu
2bc50 65 72 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  ery */.    sqlit
2bc60 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d  e3_stmt *pStmt =
2bc70 20 30 3b 20 2f 2a 20 51 75 65 72 79 20 61 67 61   0; /* Query aga
2bc80 69 6e 73 74 20 74 68 65 20 53 45 4c 46 54 45 53  inst the SELFTES
2bc90 54 20 74 61 62 6c 65 20 2a 2f 0a 0a 20 20 20 20  T table */..    
2bca0 6f 70 65 6e 5f 64 62 28 70 2c 30 29 3b 0a 20 20  open_db(p,0);.  
2bcb0 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 6e 41 72    for(i=1; i<nAr
2bcc0 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63  g; i++){.      c
2bcd0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 61  onst char *z = a
2bce0 7a 41 72 67 5b 69 5d 3b 0a 20 20 20 20 20 20 69  zArg[i];.      i
2bcf0 66 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 26 26 20  f( z[0]=='-' && 
2bd00 7a 5b 31 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b  z[1]=='-' ) z++;
2bd10 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d  .      if( strcm
2bd20 70 28 7a 2c 22 2d 69 6e 69 74 22 29 3d 3d 30 20  p(z,"-init")==0 
2bd30 29 7b 0a 20 20 20 20 20 20 20 20 62 49 73 49 6e  ){.        bIsIn
2bd40 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65  it = 1;.      }e
2bd50 6c 73 65 0a 20 20 20 20 20 20 69 66 28 20 73 74  lse.      if( st
2bd60 72 63 6d 70 28 7a 2c 22 2d 76 22 29 3d 3d 30 20  rcmp(z,"-v")==0 
2bd70 29 7b 0a 20 20 20 20 20 20 20 20 62 56 65 72 62  ){.        bVerb
2bd80 6f 73 65 2b 2b 3b 0a 20 20 20 20 20 20 7d 65 6c  ose++;.      }el
2bd90 73 65 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  se.      {.     
2bda0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
2bdb0 74 64 65 72 72 2c 20 22 55 6e 6b 6e 6f 77 6e 20  tderr, "Unknown 
2bdc0 6f 70 74 69 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e  option \"%s\" on
2bdd0 20 5c 22 25 73 5c 22 5c 6e 22 2c 0a 20 20 20 20   \"%s\"\n",.    
2bde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bdf0 61 7a 41 72 67 5b 69 5d 2c 20 61 7a 41 72 67 5b  azArg[i], azArg[
2be00 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 72 61 77  0]);.        raw
2be10 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
2be20 22 53 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f  "Should be one o
2be30 66 3a 20 2d 2d 69 6e 69 74 20 2d 76 5c 6e 22 29  f: --init -v\n")
2be40 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31  ;.        rc = 1
2be50 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d  ;.        goto m
2be60 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
2be70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
2be80 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
2be90 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74  table_column_met
2bea0 61 64 61 74 61 28 70 2d 3e 64 62 2c 22 6d 61 69  adata(p->db,"mai
2beb0 6e 22 2c 22 73 65 6c 66 74 65 73 74 22 2c 30 2c  n","selftest",0,
2bec0 30 2c 30 2c 30 2c 30 2c 30 29 0a 20 20 20 20 20  0,0,0,0,0).     
2bed0 20 20 20 20 20 20 21 3d 20 53 51 4c 49 54 45 5f        != SQLITE_
2bee0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 62 53 65 6c  OK ){.      bSel
2bef0 66 74 65 73 74 45 78 69 73 74 73 20 3d 20 30 3b  ftestExists = 0;
2bf00 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2bf10 20 20 62 53 65 6c 66 74 65 73 74 45 78 69 73 74    bSelftestExist
2bf20 73 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  s = 1;.    }.   
2bf30 20 69 66 28 20 62 49 73 49 6e 69 74 20 29 7b 0a   if( bIsInit ){.
2bf40 20 20 20 20 20 20 63 72 65 61 74 65 53 65 6c 66        createSelf
2bf50 74 65 73 74 54 61 62 6c 65 28 70 29 3b 0a 20 20  testTable(p);.  
2bf60 20 20 20 20 62 53 65 6c 66 74 65 73 74 45 78 69      bSelftestExi
2bf70 73 74 73 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20  sts = 1;.    }. 
2bf80 20 20 20 69 6e 69 74 54 65 78 74 28 26 73 74 72     initText(&str
2bf90 29 3b 0a 20 20 20 20 61 70 70 65 6e 64 54 65 78  );.    appendTex
2bfa0 74 28 26 73 74 72 2c 20 22 78 22 2c 20 30 29 3b  t(&str, "x", 0);
2bfb0 0a 20 20 20 20 66 6f 72 28 6b 3d 62 53 65 6c 66  .    for(k=bSelf
2bfc0 74 65 73 74 45 78 69 73 74 73 3b 20 6b 3e 3d 30  testExists; k>=0
2bfd0 3b 20 6b 2d 2d 29 7b 0a 20 20 20 20 20 20 69 66  ; k--){.      if
2bfe0 28 20 6b 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20  ( k==1 ){.      
2bff0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
2c000 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c  repare_v2(p->db,
2c010 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 53 45  .            "SE
2c020 4c 45 43 54 20 74 6e 6f 2c 6f 70 2c 63 6d 64 2c  LECT tno,op,cmd,
2c030 61 6e 73 20 46 52 4f 4d 20 73 65 6c 66 74 65 73  ans FROM selftes
2c040 74 20 4f 52 44 45 52 20 42 59 20 74 6e 6f 22 2c  t ORDER BY tno",
2c050 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c  .            -1,
2c060 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20   &pStmt, 0);.   
2c070 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2c080 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
2c090 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c  repare_v2(p->db,
2c0a0 0a 20 20 20 20 20 20 20 20 20 20 22 56 41 4c 55  .          "VALU
2c0b0 45 53 28 30 2c 27 6d 65 6d 6f 27 2c 27 4d 69 73  ES(0,'memo','Mis
2c0c0 73 69 6e 67 20 53 45 4c 46 54 45 53 54 20 74 61  sing SELFTEST ta
2c0d0 62 6c 65 20 2d 20 64 65 66 61 75 6c 74 20 63 68  ble - default ch
2c0e0 65 63 6b 73 20 6f 6e 6c 79 27 2c 27 27 29 2c 22  ecks only',''),"
2c0f0 0a 20 20 20 20 20 20 20 20 20 20 22 20 20 20 20  .          "    
2c100 20 20 28 31 2c 27 72 75 6e 27 2c 27 50 52 41 47    (1,'run','PRAG
2c110 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
2c120 63 6b 27 2c 27 6f 6b 27 29 22 2c 0a 20 20 20 20  ck','ok')",.    
2c130 20 20 20 20 20 20 2d 31 2c 20 26 70 53 74 6d 74        -1, &pStmt
2c140 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 0);.      }.  
2c150 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
2c160 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
2c170 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 20  (stderr, "Error 
2c180 71 75 65 72 79 69 6e 67 20 74 68 65 20 73 65 6c  querying the sel
2c190 66 74 65 73 74 20 74 61 62 6c 65 5c 6e 22 29 3b  ftest table\n");
2c1a0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b  .        rc = 1;
2c1b0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2c1c0 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29  _finalize(pStmt)
2c1d0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d  ;.        goto m
2c1e0 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
2c1f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
2c200 66 6f 72 28 69 3d 31 3b 20 73 71 6c 69 74 65 33  for(i=1; sqlite3
2c210 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51  _step(pStmt)==SQ
2c220 4c 49 54 45 5f 52 4f 57 3b 20 69 2b 2b 29 7b 0a  LITE_ROW; i++){.
2c230 20 20 20 20 20 20 20 20 69 6e 74 20 74 6e 6f 20          int tno 
2c240 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
2c250 5f 69 6e 74 28 70 53 74 6d 74 2c 20 30 29 3b 0a  _int(pStmt, 0);.
2c260 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
2c270 61 72 20 2a 7a 4f 70 20 3d 20 28 63 6f 6e 73 74  ar *zOp = (const
2c280 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63   char*)sqlite3_c
2c290 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74  olumn_text(pStmt
2c2a0 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 63 6f  , 1);.        co
2c2b0 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d  nst char *zSql =
2c2c0 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
2c2d0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
2c2e0 74 28 70 53 74 6d 74 2c 20 32 29 3b 0a 20 20 20  t(pStmt, 2);.   
2c2f0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
2c300 2a 7a 41 6e 73 20 3d 20 28 63 6f 6e 73 74 20 63  *zAns = (const c
2c310 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  har*)sqlite3_col
2c320 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20  umn_text(pStmt, 
2c330 33 29 3b 0a 0a 20 20 20 20 20 20 20 20 6b 20 3d  3);..        k =
2c340 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   0;.        if( 
2c350 62 56 65 72 62 6f 73 65 3e 30 20 29 7b 0a 20 20  bVerbose>0 ){.  
2c360 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 51          char *zQ
2c370 75 6f 74 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d  uote = sqlite3_m
2c380 70 72 69 6e 74 66 28 22 25 71 22 2c 20 7a 53 71  printf("%q", zSq
2c390 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72  l);.          pr
2c3a0 69 6e 74 66 28 22 25 64 3a 20 25 73 20 25 73 5c  intf("%d: %s %s\
2c3b0 6e 22 2c 20 74 6e 6f 2c 20 7a 4f 70 2c 20 7a 53  n", tno, zOp, zS
2c3c0 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  ql);.          s
2c3d0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 51 75 6f  qlite3_free(zQuo
2c3e0 74 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  te);.        }. 
2c3f0 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d         if( strcm
2c400 70 28 7a 4f 70 2c 22 6d 65 6d 6f 22 29 3d 3d 30  p(zOp,"memo")==0
2c410 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74   ){.          ut
2c420 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
2c430 2c 20 22 25 73 5c 6e 22 2c 20 7a 53 71 6c 29 3b  , "%s\n", zSql);
2c440 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 20  .        }else. 
2c450 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d         if( strcm
2c460 70 28 7a 4f 70 2c 22 72 75 6e 22 29 3d 3d 30 20  p(zOp,"run")==0 
2c470 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63 68 61  ){.          cha
2c480 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  r *zErrMsg = 0;.
2c490 20 20 20 20 20 20 20 20 20 20 73 74 72 2e 6e 20            str.n 
2c4a0 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 73  = 0;.          s
2c4b0 74 72 2e 7a 5b 30 5d 20 3d 20 30 3b 0a 20 20 20  tr.z[0] = 0;.   
2c4c0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
2c4d0 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  te3_exec(p->db, 
2c4e0 7a 53 71 6c 2c 20 63 61 70 74 75 72 65 4f 75 74  zSql, captureOut
2c4f0 70 75 74 43 61 6c 6c 62 61 63 6b 2c 20 26 73 74  putCallback, &st
2c500 72 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20  r, &zErrMsg);.  
2c510 20 20 20 20 20 20 20 20 6e 54 65 73 74 2b 2b 3b          nTest++;
2c520 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 62  .          if( b
2c530 56 65 72 62 6f 73 65 20 29 7b 0a 20 20 20 20 20  Verbose ){.     
2c540 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
2c550 74 66 28 70 2d 3e 6f 75 74 2c 20 22 52 65 73 75  tf(p->out, "Resu
2c560 6c 74 3a 20 25 73 5c 6e 22 2c 20 73 74 72 2e 7a  lt: %s\n", str.z
2c570 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
2c580 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 20           if( rc 
2c590 7c 7c 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20  || zErrMsg ){.  
2c5a0 20 20 20 20 20 20 20 20 20 20 6e 45 72 72 2b 2b            nErr++
2c5b0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63  ;.            rc
2c5c0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20   = 1;.          
2c5d0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
2c5e0 3e 6f 75 74 2c 20 22 25 64 3a 20 65 72 72 6f 72  >out, "%d: error
2c5f0 2d 63 6f 64 65 2d 25 64 3a 20 25 73 5c 6e 22 2c  -code-%d: %s\n",
2c600 20 74 6e 6f 2c 20 72 63 2c 20 7a 45 72 72 4d 73   tno, rc, zErrMs
2c610 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  g);.            
2c620 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72  sqlite3_free(zEr
2c630 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20 20 20  rMsg);.         
2c640 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
2c650 70 28 7a 41 6e 73 2c 73 74 72 2e 7a 29 21 3d 30  p(zAns,str.z)!=0
2c660 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
2c670 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20  nErr++;.        
2c680 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
2c690 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
2c6a0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 3a  ntf(p->out, "%d:
2c6b0 20 45 78 70 65 63 74 65 64 3a 20 5b 25 73 5d 5c   Expected: [%s]\
2c6c0 6e 22 2c 20 74 6e 6f 2c 20 7a 41 6e 73 29 3b 0a  n", tno, zAns);.
2c6d0 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38              utf8
2c6e0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
2c6f0 22 25 64 3a 20 20 20 20 20 20 47 6f 74 3a 20 5b  "%d:      Got: [
2c700 25 73 5d 5c 6e 22 2c 20 74 6e 6f 2c 20 73 74 72  %s]\n", tno, str
2c710 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  .z);.          }
2c720 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 20  .        }else. 
2c730 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
2c740 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
2c750 74 64 65 72 72 2c 0a 20 20 20 20 20 20 20 20 20  tderr,.         
2c760 20 20 20 22 55 6e 6b 6e 6f 77 6e 20 6f 70 65 72     "Unknown oper
2c770 61 74 69 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20  ation \"%s\" on 
2c780 73 65 6c 66 74 65 73 74 20 6c 69 6e 65 20 25 64  selftest line %d
2c790 5c 6e 22 2c 20 7a 4f 70 2c 20 74 6e 6f 29 3b 0a  \n", zOp, tno);.
2c7a0 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 31            rc = 1
2c7b0 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ;.          brea
2c7c0 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  k;.        }.   
2c7d0 20 20 20 7d 20 2f 2a 20 45 6e 64 20 6c 6f 6f 70     } /* End loop
2c7e0 20 6f 76 65 72 20 72 6f 77 73 20 6f 66 20 63 6f   over rows of co
2c7f0 6e 74 65 6e 74 20 66 72 6f 6d 20 53 45 4c 46 54  ntent from SELFT
2c800 45 53 54 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c  EST */.      sql
2c810 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53  ite3_finalize(pS
2c820 74 6d 74 29 3b 0a 20 20 20 20 7d 20 2f 2a 20 45  tmt);.    } /* E
2c830 6e 64 20 6c 6f 6f 70 20 6f 76 65 72 20 6b 20 2a  nd loop over k *
2c840 2f 0a 20 20 20 20 66 72 65 65 54 65 78 74 28 26  /.    freeText(&
2c850 73 74 72 29 3b 0a 20 20 20 20 75 74 66 38 5f 70  str);.    utf8_p
2c860 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
2c870 64 20 65 72 72 6f 72 73 20 6f 75 74 20 6f 66 20  d errors out of 
2c880 25 64 20 74 65 73 74 73 5c 6e 22 2c 20 6e 45 72  %d tests\n", nEr
2c890 72 2c 20 6e 54 65 73 74 29 3b 0a 20 20 7d 65 6c  r, nTest);.  }el
2c8a0 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73 27  se..  if( c=='s'
2c8b0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
2c8c0 67 5b 30 5d 2c 20 22 73 65 70 61 72 61 74 6f 72  g[0], "separator
2c8d0 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
2c8e0 69 66 28 20 6e 41 72 67 3c 32 20 7c 7c 20 6e 41  if( nArg<2 || nA
2c8f0 72 67 3e 33 20 29 7b 0a 20 20 20 20 20 20 72 61  rg>3 ){.      ra
2c900 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
2c910 20 22 55 73 61 67 65 3a 20 2e 73 65 70 61 72 61   "Usage: .separa
2c920 74 6f 72 20 43 4f 4c 20 3f 52 4f 57 3f 5c 6e 22  tor COL ?ROW?\n"
2c930 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
2c940 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e  .    }.    if( n
2c950 41 72 67 3e 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg>=2 ){.      
2c960 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
2c970 28 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65  (sizeof(p->colSe
2c980 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c  parator), p->col
2c990 53 65 70 61 72 61 74 6f 72 2c 0a 20 20 20 20 20  Separator,.     
2c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9b0 20 20 22 25 2e 2a 73 22 2c 20 28 69 6e 74 29 41    "%.*s", (int)A
2c9c0 72 72 61 79 53 69 7a 65 28 70 2d 3e 63 6f 6c 53  rraySize(p->colS
2c9d0 65 70 61 72 61 74 6f 72 29 2d 31 2c 20 61 7a 41  eparator)-1, azA
2c9e0 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  rg[1]);.    }.  
2c9f0 20 20 69 66 28 20 6e 41 72 67 3e 3d 33 20 29 7b    if( nArg>=3 ){
2ca00 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
2ca10 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70  nprintf(sizeof(p
2ca20 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 2c  ->rowSeparator),
2ca30 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72   p->rowSeparator
2ca40 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2ca50 20 20 20 20 20 20 20 20 20 22 25 2e 2a 73 22 2c           "%.*s",
2ca60 20 28 69 6e 74 29 41 72 72 61 79 53 69 7a 65 28   (int)ArraySize(
2ca70 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29  p->rowSeparator)
2ca80 2d 31 2c 20 61 7a 41 72 67 5b 32 5d 29 3b 0a 20  -1, azArg[2]);. 
2ca90 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
2caa0 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 6e 3e  if( c=='s' && n>
2cab0 3d 34 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  =4 && strncmp(az
2cac0 41 72 67 5b 30 5d 2c 22 73 68 61 33 73 75 6d 22  Arg[0],"sha3sum"
2cad0 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f  ,n)==0 ){.    co
2cae0 6e 73 74 20 63 68 61 72 20 2a 7a 4c 69 6b 65 20  nst char *zLike 
2caf0 3d 20 30 3b 20 20 20 2f 2a 20 57 68 69 63 68 20  = 0;   /* Which 
2cb00 74 61 62 6c 65 20 74 6f 20 63 68 65 63 6b 73 75  table to checksu
2cb10 6d 2e 20 30 20 6d 65 61 6e 73 20 65 76 65 72 79  m. 0 means every
2cb20 74 68 69 6e 67 20 2a 2f 0a 20 20 20 20 69 6e 74  thing */.    int
2cb30 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
2cb40 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
2cb50 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  unter */.    int
2cb60 20 62 53 63 68 65 6d 61 20 3d 20 30 3b 20 20 20   bSchema = 0;   
2cb70 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 68 61        /* Also ha
2cb80 73 68 20 74 68 65 20 73 63 68 65 6d 61 20 2a 2f  sh the schema */
2cb90 0a 20 20 20 20 69 6e 74 20 62 53 65 70 61 72 61  .    int bSepara
2cba0 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a  te = 0;       /*
2cbb0 20 48 61 73 68 20 65 61 63 68 20 74 61 62 6c 65   Hash each table
2cbc0 20 73 65 70 61 72 61 74 65 6c 79 20 2a 2f 0a 20   separately */. 
2cbd0 20 20 20 69 6e 74 20 69 53 69 7a 65 20 3d 20 32     int iSize = 2
2cbe0 32 34 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 48  24;         /* H
2cbf0 61 73 68 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f  ash algorithm to
2cc00 20 75 73 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20   use */.    int 
2cc10 62 44 65 62 75 67 20 3d 20 30 3b 20 20 20 20 20  bDebug = 0;     
2cc20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 73 68 6f       /* Only sho
2cc30 77 20 74 68 65 20 71 75 65 72 79 20 74 68 61 74  w the query that
2cc40 20 77 6f 75 6c 64 20 68 61 76 65 20 72 75 6e 20   would have run 
2cc50 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  */.    sqlite3_s
2cc60 74 6d 74 20 2a 70 53 74 6d 74 3b 20 20 20 20 20  tmt *pStmt;     
2cc70 2f 2a 20 46 6f 72 20 71 75 65 72 79 69 6e 67 20  /* For querying 
2cc80 74 61 62 6c 65 73 20 6e 61 6d 65 73 20 2a 2f 0a  tables names */.
2cc90 20 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20      char *zSql; 
2cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2ccb0 53 51 4c 20 74 6f 20 62 65 20 72 75 6e 20 2a 2f  SQL to be run */
2ccc0 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 65 70 3b  .    char *zSep;
2ccd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2cce0 20 53 65 70 61 72 61 74 6f 72 20 2a 2f 0a 20 20   Separator */.  
2ccf0 20 20 53 68 65 6c 6c 54 65 78 74 20 73 53 71 6c    ShellText sSql
2cd00 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  ;          /* Co
2cd10 6d 70 6c 65 74 65 20 53 51 4c 20 66 6f 72 20 74  mplete SQL for t
2cd20 68 65 20 71 75 65 72 79 20 74 6f 20 72 75 6e 20  he query to run 
2cd30 74 68 65 20 68 61 73 68 20 2a 2f 0a 20 20 20 20  the hash */.    
2cd40 53 68 65 6c 6c 54 65 78 74 20 73 51 75 65 72 79  ShellText sQuery
2cd50 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 65 74 20  ;        /* Set 
2cd60 6f 66 20 71 75 65 72 69 65 73 20 75 73 65 64 20  of queries used 
2cd70 74 6f 20 72 65 61 64 20 61 6c 6c 20 63 6f 6e 74  to read all cont
2cd80 65 6e 74 20 2a 2f 0a 20 20 20 20 6f 70 65 6e 5f  ent */.    open_
2cd90 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 66 6f  db(p, 0);.    fo
2cda0 72 28 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=1; i<nArg; i
2cdb0 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  ++){.      const
2cdc0 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67   char *z = azArg
2cdd0 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  [i];.      if( z
2cde0 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  [0]=='-' ){.    
2cdf0 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 20      z++;.       
2ce00 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29   if( z[0]=='-' )
2ce10 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66   z++;.        if
2ce20 28 20 73 74 72 63 6d 70 28 7a 2c 22 73 63 68 65  ( strcmp(z,"sche
2ce30 6d 61 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ma")==0 ){.     
2ce40 20 20 20 20 20 62 53 63 68 65 6d 61 20 3d 20 31       bSchema = 1
2ce50 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 0a  ;.        }else.
2ce60 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63          if( strc
2ce70 6d 70 28 7a 2c 22 73 68 61 33 2d 32 32 34 22 29  mp(z,"sha3-224")
2ce80 3d 3d 30 20 7c 7c 20 73 74 72 63 6d 70 28 7a 2c  ==0 || strcmp(z,
2ce90 22 73 68 61 33 2d 32 35 36 22 29 3d 3d 30 0a 20  "sha3-256")==0. 
2cea0 20 20 20 20 20 20 20 20 7c 7c 20 73 74 72 63 6d          || strcm
2ceb0 70 28 7a 2c 22 73 68 61 33 2d 33 38 34 22 29 3d  p(z,"sha3-384")=
2cec0 3d 30 20 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22  =0 || strcmp(z,"
2ced0 73 68 61 33 2d 35 31 32 22 29 3d 3d 30 0a 20 20  sha3-512")==0.  
2cee0 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20        ){.       
2cef0 20 20 20 69 53 69 7a 65 20 3d 20 61 74 6f 69 28     iSize = atoi(
2cf00 26 7a 5b 35 5d 29 3b 0a 20 20 20 20 20 20 20 20  &z[5]);.        
2cf10 7d 65 6c 73 65 0a 20 20 20 20 20 20 20 20 69 66  }else.        if
2cf20 28 20 73 74 72 63 6d 70 28 7a 2c 22 64 65 62 75  ( strcmp(z,"debu
2cf30 67 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  g")==0 ){.      
2cf40 20 20 20 20 62 44 65 62 75 67 20 3d 20 31 3b 0a      bDebug = 1;.
2cf50 20 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 20 20          }else.  
2cf60 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
2cf70 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
2cf80 64 65 72 72 2c 20 22 55 6e 6b 6e 6f 77 6e 20 6f  derr, "Unknown o
2cf90 70 74 69 6f 6e 20 5c 22 25 73 5c 22 20 6f 6e 20  ption \"%s\" on 
2cfa0 5c 22 25 73 5c 22 5c 6e 22 2c 0a 20 20 20 20 20  \"%s\"\n",.     
2cfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfc0 20 61 7a 41 72 67 5b 69 5d 2c 20 61 7a 41 72 67   azArg[i], azArg
2cfd0 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [0]);.          
2cfe0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
2cff0 72 2c 20 22 53 68 6f 75 6c 64 20 62 65 20 6f 6e  r, "Should be on
2d000 65 20 6f 66 3a 20 2d 2d 73 63 68 65 6d 61 22 0a  e of: --schema".
2d010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d020 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 2d               " -
2d030 2d 73 68 61 33 2d 32 32 34 20 2d 2d 73 68 61 33  -sha3-224 --sha3
2d040 2d 32 35 35 20 2d 2d 73 68 61 33 2d 33 38 34 20  -255 --sha3-384 
2d050 2d 2d 73 68 61 33 2d 35 31 32 5c 6e 22 29 3b 0a  --sha3-512\n");.
2d060 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 31            rc = 1
2d070 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
2d080 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
2d090 69 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  it;.        }.  
2d0a0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 4c      }else if( zL
2d0b0 69 6b 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ike ){.        r
2d0c0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
2d0d0 2c 20 22 55 73 61 67 65 3a 20 2e 73 68 61 33 73  , "Usage: .sha3s
2d0e0 75 6d 20 3f 4f 50 54 49 4f 4e 53 3f 20 3f 4c 49  um ?OPTIONS? ?LI
2d0f0 4b 45 2d 50 41 54 54 45 52 4e 3f 5c 6e 22 29 3b  KE-PATTERN?\n");
2d100 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b  .        rc = 1;
2d110 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65  .        goto me
2d120 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
2d130 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
2d140 20 20 20 20 20 20 7a 4c 69 6b 65 20 3d 20 7a 3b        zLike = z;
2d150 0a 20 20 20 20 20 20 20 20 62 53 65 70 61 72 61  .        bSepara
2d160 74 65 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  te = 1;.        
2d170 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 6c  if( sqlite3_strl
2d180 69 6b 65 28 22 73 71 6c 69 74 65 5f 25 22 2c 20  ike("sqlite_%", 
2d190 7a 4c 69 6b 65 2c 20 30 29 3d 3d 30 20 29 20 62  zLike, 0)==0 ) b
2d1a0 53 63 68 65 6d 61 20 3d 20 31 3b 0a 20 20 20 20  Schema = 1;.    
2d1b0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
2d1c0 28 20 62 53 63 68 65 6d 61 20 29 7b 0a 20 20 20  ( bSchema ){.   
2d1d0 20 20 20 7a 53 71 6c 20 3d 20 22 53 45 4c 45 43     zSql = "SELEC
2d1e0 54 20 6c 6f 77 65 72 28 6e 61 6d 65 29 20 46 52  T lower(name) FR
2d1f0 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
2d200 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22  ".             "
2d210 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62   WHERE type='tab
2d220 6c 65 27 20 41 4e 44 20 63 6f 61 6c 65 73 63 65  le' AND coalesce
2d230 28 72 6f 6f 74 70 61 67 65 2c 30 29 3e 31 22 0a  (rootpage,0)>1".
2d240 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 55               " U
2d250 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20  NION ALL SELECT 
2d260 27 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 27 22  'sqlite_master'"
2d270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20  .             " 
2d280 4f 52 44 45 52 20 42 59 20 31 20 63 6f 6c 6c 61  ORDER BY 1 colla
2d290 74 65 20 6e 6f 63 61 73 65 22 3b 0a 20 20 20 20  te nocase";.    
2d2a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 53 71  }else{.      zSq
2d2b0 6c 20 3d 20 22 53 45 4c 45 43 54 20 6c 6f 77 65  l = "SELECT lowe
2d2c0 72 28 6e 61 6d 65 29 20 46 52 4f 4d 20 73 71 6c  r(name) FROM sql
2d2d0 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20  ite_master".    
2d2e0 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52 45           " WHERE
2d2f0 20 74 79 70 65 3d 27 74 61 62 6c 65 27 20 41 4e   type='table' AN
2d300 44 20 63 6f 61 6c 65 73 63 65 28 72 6f 6f 74 70  D coalesce(rootp
2d310 61 67 65 2c 30 29 3e 31 22 0a 20 20 20 20 20 20  age,0)>1".      
2d320 20 20 20 20 20 20 20 22 20 41 4e 44 20 6e 61 6d         " AND nam
2d330 65 20 4e 4f 54 20 4c 49 4b 45 20 27 73 71 6c 69  e NOT LIKE 'sqli
2d340 74 65 5f 25 27 22 0a 20 20 20 20 20 20 20 20 20  te_%'".         
2d350 20 20 20 20 22 20 4f 52 44 45 52 20 42 59 20 31      " ORDER BY 1
2d360 20 63 6f 6c 6c 61 74 65 20 6e 6f 63 61 73 65 22   collate nocase"
2d370 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
2d380 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70  te3_prepare_v2(p
2d390 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20  ->db, zSql, -1, 
2d3a0 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20  &pStmt, 0);.    
2d3b0 69 6e 69 74 54 65 78 74 28 26 73 51 75 65 72 79  initText(&sQuery
2d3c0 29 3b 0a 20 20 20 20 69 6e 69 74 54 65 78 74 28  );.    initText(
2d3d0 26 73 53 71 6c 29 3b 0a 20 20 20 20 61 70 70 65  &sSql);.    appe
2d3e0 6e 64 54 65 78 74 28 26 73 53 71 6c 2c 20 22 57  ndText(&sSql, "W
2d3f0 49 54 48 20 5b 73 68 61 33 73 75 6d 24 71 75 65  ITH [sha3sum$que
2d400 72 79 5d 28 61 2c 62 29 20 41 53 28 22 2c 30 29  ry](a,b) AS(",0)
2d410 3b 0a 20 20 20 20 7a 53 65 70 20 3d 20 22 56 41  ;.    zSep = "VA
2d420 4c 55 45 53 28 22 3b 0a 20 20 20 20 77 68 69 6c  LUES(";.    whil
2d430 65 28 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d 73  e( SQLITE_ROW==s
2d440 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d  qlite3_step(pStm
2d450 74 29 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73  t) ){.      cons
2d460 74 20 63 68 61 72 20 2a 7a 54 61 62 20 3d 20 28  t char *zTab = (
2d470 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
2d480 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
2d490 70 53 74 6d 74 2c 30 29 3b 0a 20 20 20 20 20 20  pStmt,0);.      
2d4a0 69 66 28 20 7a 4c 69 6b 65 20 26 26 20 73 71 6c  if( zLike && sql
2d4b0 69 74 65 33 5f 73 74 72 6c 69 6b 65 28 7a 4c 69  ite3_strlike(zLi
2d4c0 6b 65 2c 20 7a 54 61 62 2c 20 30 29 21 3d 30 20  ke, zTab, 0)!=0 
2d4d0 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
2d4e0 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28 7a 54    if( strncmp(zT
2d4f0 61 62 2c 20 22 73 71 6c 69 74 65 5f 22 2c 37 29  ab, "sqlite_",7)
2d500 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
2d510 70 70 65 6e 64 54 65 78 74 28 26 73 51 75 65 72  ppendText(&sQuer
2d520 79 2c 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  y,"SELECT * FROM
2d530 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20   ", 0);.        
2d540 61 70 70 65 6e 64 54 65 78 74 28 26 73 51 75 65  appendText(&sQue
2d550 72 79 2c 7a 54 61 62 2c 27 22 27 29 3b 0a 20 20  ry,zTab,'"');.  
2d560 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
2d570 28 26 73 51 75 65 72 79 2c 22 20 4e 4f 54 20 49  (&sQuery," NOT I
2d580 4e 44 45 58 45 44 3b 22 2c 20 30 29 3b 0a 20 20  NDEXED;", 0);.  
2d590 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
2d5a0 72 63 6d 70 28 7a 54 61 62 2c 20 22 73 71 6c 69  rcmp(zTab, "sqli
2d5b0 74 65 5f 6d 61 73 74 65 72 22 29 3d 3d 30 20 29  te_master")==0 )
2d5c0 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  {.        append
2d5d0 54 65 78 74 28 26 73 51 75 65 72 79 2c 22 53 45  Text(&sQuery,"SE
2d5e0 4c 45 43 54 20 74 79 70 65 2c 6e 61 6d 65 2c 74  LECT type,name,t
2d5f0 62 6c 5f 6e 61 6d 65 2c 73 71 6c 20 46 52 4f 4d  bl_name,sql FROM
2d600 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a   sqlite_master".
2d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d620 20 20 20 20 20 20 20 20 20 20 20 22 20 4f 52 44             " ORD
2d630 45 52 20 42 59 20 6e 61 6d 65 3b 22 2c 20 30 29  ER BY name;", 0)
2d640 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
2d650 28 20 73 74 72 63 6d 70 28 7a 54 61 62 2c 20 22  ( strcmp(zTab, "
2d660 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 22  sqlite_sequence"
2d670 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
2d680 61 70 70 65 6e 64 54 65 78 74 28 26 73 51 75 65  appendText(&sQue
2d690 72 79 2c 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c  ry,"SELECT name,
2d6a0 73 65 71 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  seq FROM sqlite_
2d6b0 73 65 71 75 65 6e 63 65 22 0a 20 20 20 20 20 20  sequence".      
2d6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d6d0 20 20 20 20 20 22 20 4f 52 44 45 52 20 42 59 20       " ORDER BY 
2d6e0 6e 61 6d 65 3b 22 2c 20 30 29 3b 0a 20 20 20 20  name;", 0);.    
2d6f0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
2d700 6d 70 28 7a 54 61 62 2c 20 22 73 71 6c 69 74 65  mp(zTab, "sqlite
2d710 5f 73 74 61 74 31 22 29 3d 3d 30 20 29 7b 0a 20  _stat1")==0 ){. 
2d720 20 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78         appendTex
2d730 74 28 26 73 51 75 65 72 79 2c 22 53 45 4c 45 43  t(&sQuery,"SELEC
2d740 54 20 74 62 6c 2c 69 64 78 2c 73 74 61 74 20 46  T tbl,idx,stat F
2d750 52 4f 4d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  ROM sqlite_stat1
2d760 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
2d770 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 4f               " O
2d780 52 44 45 52 20 42 59 20 74 62 6c 2c 69 64 78 3b  RDER BY tbl,idx;
2d790 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ", 0);.      }el
2d7a0 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 54  se if( strcmp(zT
2d7b0 61 62 2c 20 22 73 71 6c 69 74 65 5f 73 74 61 74  ab, "sqlite_stat
2d7c0 33 22 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20  3")==0.         
2d7d0 20 20 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a 54      || strcmp(zT
2d7e0 61 62 2c 20 22 73 71 6c 69 74 65 5f 73 74 61 74  ab, "sqlite_stat
2d7f0 34 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  4")==0 ){.      
2d800 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 51    appendText(&sQ
2d810 75 65 72 79 2c 20 22 53 45 4c 45 43 54 20 2a 20  uery, "SELECT * 
2d820 46 52 4f 4d 20 22 2c 20 30 29 3b 0a 20 20 20 20  FROM ", 0);.    
2d830 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
2d840 73 51 75 65 72 79 2c 20 7a 54 61 62 2c 20 30 29  sQuery, zTab, 0)
2d850 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  ;.        append
2d860 54 65 78 74 28 26 73 51 75 65 72 79 2c 20 22 20  Text(&sQuery, " 
2d870 4f 52 44 45 52 20 42 59 20 74 62 6c 2c 20 69 64  ORDER BY tbl, id
2d880 78 2c 20 72 6f 77 69 64 3b 5c 6e 22 2c 20 30 29  x, rowid;\n", 0)
2d890 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
2d8a0 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 71 6c  appendText(&sSql
2d8b0 2c 20 7a 53 65 70 2c 20 30 29 3b 0a 20 20 20 20  , zSep, 0);.    
2d8c0 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 53    appendText(&sS
2d8d0 71 6c 2c 20 73 51 75 65 72 79 2e 7a 2c 20 27 5c  ql, sQuery.z, '\
2d8e0 27 27 29 3b 0a 20 20 20 20 20 20 73 51 75 65 72  '');.      sQuer
2d8f0 79 2e 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 61  y.n = 0;.      a
2d900 70 70 65 6e 64 54 65 78 74 28 26 73 53 71 6c 2c  ppendText(&sSql,
2d910 20 22 2c 22 2c 20 30 29 3b 0a 20 20 20 20 20 20   ",", 0);.      
2d920 61 70 70 65 6e 64 54 65 78 74 28 26 73 53 71 6c  appendText(&sSql
2d930 2c 20 7a 54 61 62 2c 20 27 5c 27 27 29 3b 0a 20  , zTab, '\'');. 
2d940 20 20 20 20 20 7a 53 65 70 20 3d 20 22 29 2c 28       zSep = "),(
2d950 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  ";.    }.    sql
2d960 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53  ite3_finalize(pS
2d970 74 6d 74 29 3b 0a 20 20 20 20 69 66 28 20 62 53  tmt);.    if( bS
2d980 65 70 61 72 61 74 65 20 29 7b 0a 20 20 20 20 20  eparate ){.     
2d990 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f   zSql = sqlite3_
2d9a0 6d 70 72 69 6e 74 66 28 0a 20 20 20 20 20 20 20  mprintf(.       
2d9b0 20 20 20 22 25 73 29 29 22 0a 20 20 20 20 20 20     "%s))".      
2d9c0 20 20 20 20 22 20 53 45 4c 45 43 54 20 6c 6f 77      " SELECT low
2d9d0 65 72 28 68 65 78 28 73 68 61 33 5f 71 75 65 72  er(hex(sha3_quer
2d9e0 79 28 61 2c 25 64 29 29 29 20 41 53 20 68 61 73  y(a,%d))) AS has
2d9f0 68 2c 20 62 20 41 53 20 6c 61 62 65 6c 22 0a 20  h, b AS label". 
2da00 20 20 20 20 20 20 20 20 20 22 20 20 20 46 52 4f           "   FRO
2da10 4d 20 5b 73 68 61 33 73 75 6d 24 71 75 65 72 79  M [sha3sum$query
2da20 5d 22 2c 0a 20 20 20 20 20 20 20 20 20 20 73 53  ]",.          sS
2da30 71 6c 2e 7a 2c 20 69 53 69 7a 65 29 3b 0a 20 20  ql.z, iSize);.  
2da40 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
2da50 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  Sql = sqlite3_mp
2da60 72 69 6e 74 66 28 0a 20 20 20 20 20 20 20 20 20  rintf(.         
2da70 20 22 25 73 29 29 22 0a 20 20 20 20 20 20 20 20   "%s))".        
2da80 20 20 22 20 53 45 4c 45 43 54 20 6c 6f 77 65 72    " SELECT lower
2da90 28 68 65 78 28 73 68 61 33 5f 71 75 65 72 79 28  (hex(sha3_query(
2daa0 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 61 2c 27  group_concat(a,'
2dab0 27 29 2c 25 64 29 29 29 20 41 53 20 68 61 73 68  '),%d))) AS hash
2dac0 22 0a 20 20 20 20 20 20 20 20 20 20 22 20 20 20  ".          "   
2dad0 46 52 4f 4d 20 5b 73 68 61 33 73 75 6d 24 71 75  FROM [sha3sum$qu
2dae0 65 72 79 5d 22 2c 0a 20 20 20 20 20 20 20 20 20  ery]",.         
2daf0 20 73 53 71 6c 2e 7a 2c 20 69 53 69 7a 65 29 3b   sSql.z, iSize);
2db00 0a 20 20 20 20 7d 0a 20 20 20 20 66 72 65 65 54  .    }.    freeT
2db10 65 78 74 28 26 73 51 75 65 72 79 29 3b 0a 20 20  ext(&sQuery);.  
2db20 20 20 66 72 65 65 54 65 78 74 28 26 73 53 71 6c    freeText(&sSql
2db30 29 3b 0a 20 20 20 20 69 66 28 20 62 44 65 62 75  );.    if( bDebu
2db40 67 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  g ){.      utf8_
2db50 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2db60 25 73 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20  %s\n", zSql);.  
2db70 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
2db80 68 65 6c 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c  hell_exec(p->db,
2db90 20 7a 53 71 6c 2c 20 73 68 65 6c 6c 5f 63 61 6c   zSql, shell_cal
2dba0 6c 62 61 63 6b 2c 20 70 2c 20 30 29 3b 0a 20 20  lback, p, 0);.  
2dbb0 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
2dbc0 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 7d 65  free(zSql);.  }e
2dbd0 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73  lse..  if( c=='s
2dbe0 27 0a 20 20 20 26 26 20 28 73 74 72 6e 63 6d 70  '.   && (strncmp
2dbf0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 68 65 6c  (azArg[0], "shel
2dc00 6c 22 2c 20 6e 29 3d 3d 30 20 7c 7c 20 73 74 72  l", n)==0 || str
2dc10 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 22 73  ncmp(azArg[0],"s
2dc20 79 73 74 65 6d 22 2c 6e 29 3d 3d 30 29 0a 20 20  ystem",n)==0).  
2dc30 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6d  ){.    char *zCm
2dc40 64 3b 0a 20 20 20 20 69 6e 74 20 69 2c 20 78 3b  d;.    int i, x;
2dc50 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3c 32 20  .    if( nArg<2 
2dc60 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
2dc70 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
2dc80 67 65 3a 20 2e 73 79 73 74 65 6d 20 43 4f 4d 4d  ge: .system COMM
2dc90 41 4e 44 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  AND\n");.      r
2dca0 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74  c = 1;.      got
2dcb0 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
2dcc0 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a  xit;.    }.    z
2dcd0 43 6d 64 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  Cmd = sqlite3_mp
2dce0 72 69 6e 74 66 28 73 74 72 63 68 72 28 61 7a 41  rintf(strchr(azA
2dcf0 72 67 5b 31 5d 2c 27 20 27 29 3d 3d 30 3f 22 25  rg[1],' ')==0?"%
2dd00 73 22 3a 22 5c 22 25 73 5c 22 22 2c 20 61 7a 41  s":"\"%s\"", azA
2dd10 72 67 5b 31 5d 29 3b 0a 20 20 20 20 66 6f 72 28  rg[1]);.    for(
2dd20 69 3d 32 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=2; i<nArg; i++
2dd30 29 7b 0a 20 20 20 20 20 20 7a 43 6d 64 20 3d 20  ){.      zCmd = 
2dd40 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
2dd50 73 74 72 63 68 72 28 61 7a 41 72 67 5b 69 5d 2c  strchr(azArg[i],
2dd60 27 20 27 29 3d 3d 30 3f 22 25 7a 20 25 73 22 3a  ' ')==0?"%z %s":
2dd70 22 25 7a 20 5c 22 25 73 5c 22 22 2c 0a 20 20 20  "%z \"%s\"",.   
2dd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd90 20 20 20 20 20 20 20 20 20 20 7a 43 6d 64 2c 20            zCmd, 
2dda0 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 7d  azArg[i]);.    }
2ddb0 0a 20 20 20 20 78 20 3d 20 73 79 73 74 65 6d 28  .    x = system(
2ddc0 7a 43 6d 64 29 3b 0a 20 20 20 20 73 71 6c 69 74  zCmd);.    sqlit
2ddd0 65 33 5f 66 72 65 65 28 7a 43 6d 64 29 3b 0a 20  e3_free(zCmd);. 
2dde0 20 20 20 69 66 28 20 78 20 29 20 72 61 77 5f 70     if( x ) raw_p
2ddf0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53  rintf(stderr, "S
2de00 79 73 74 65 6d 20 63 6f 6d 6d 61 6e 64 20 72 65  ystem command re
2de10 74 75 72 6e 73 20 25 64 5c 6e 22 2c 20 78 29 3b  turns %d\n", x);
2de20 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
2de30 63 3d 3d 27 73 27 20 26 26 20 73 74 72 6e 63 6d  c=='s' && strncm
2de40 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 68 6f  p(azArg[0], "sho
2de50 77 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  w", n)==0 ){.   
2de60 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
2de70 61 72 20 2a 61 7a 42 6f 6f 6c 5b 5d 20 3d 20 7b  ar *azBool[] = {
2de80 20 22 6f 66 66 22 2c 20 22 6f 6e 22 2c 20 22 74   "off", "on", "t
2de90 72 69 67 67 65 72 22 2c 20 22 66 75 6c 6c 22 7d  rigger", "full"}
2dea0 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  ;.    int i;.   
2deb0 20 69 66 28 20 6e 41 72 67 21 3d 31 20 29 7b 0a   if( nArg!=1 ){.
2dec0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
2ded0 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
2dee0 20 2e 73 68 6f 77 5c 6e 22 29 3b 0a 20 20 20 20   .show\n");.    
2def0 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
2df00 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
2df10 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20  d_exit;.    }.  
2df20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
2df30 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73 3a 20  >out, "%12.12s: 
2df40 25 73 5c 6e 22 2c 22 65 63 68 6f 22 2c 0a 20 20  %s\n","echo",.  
2df50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df70 61 7a 42 6f 6f 6c 5b 53 68 65 6c 6c 48 61 73 46  azBool[ShellHasF
2df80 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 45 63 68  lag(p, SHFLG_Ech
2df90 6f 29 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70  o)]);.    utf8_p
2dfa0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
2dfb0 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 65  12.12s: %s\n","e
2dfc0 71 70 22 2c 20 61 7a 42 6f 6f 6c 5b 70 2d 3e 61  qp", azBool[p->a
2dfd0 75 74 6f 45 51 50 26 33 5d 29 3b 0a 20 20 20 20  utoEQP&3]);.    
2dfe0 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
2dff0 75 74 2c 20 22 25 31 32 2e 31 32 73 3a 20 25 73  ut, "%12.12s: %s
2e000 5c 6e 22 2c 22 65 78 70 6c 61 69 6e 22 2c 0a 20  \n","explain",. 
2e010 20 20 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 3d          p->mode=
2e020 3d 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20 3f 20  =MODE_Explain ? 
2e030 22 6f 6e 22 20 3a 20 70 2d 3e 61 75 74 6f 45 78  "on" : p->autoEx
2e040 70 6c 61 69 6e 20 3f 20 22 61 75 74 6f 22 20 3a  plain ? "auto" :
2e050 20 22 6f 66 66 22 29 3b 0a 20 20 20 20 75 74 66   "off");.    utf
2e060 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
2e070 22 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c  "%12.12s: %s\n",
2e080 22 68 65 61 64 65 72 73 22 2c 20 61 7a 42 6f 6f  "headers", azBoo
2e090 6c 5b 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 21  l[p->showHeader!
2e0a0 3d 30 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70  =0]);.    utf8_p
2e0b0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
2e0c0 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 6d  12.12s: %s\n","m
2e0d0 6f 64 65 22 2c 20 6d 6f 64 65 44 65 73 63 72 5b  ode", modeDescr[
2e0e0 70 2d 3e 6d 6f 64 65 5d 29 3b 0a 20 20 20 20 75  p->mode]);.    u
2e0f0 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
2e100 74 2c 20 22 25 31 32 2e 31 32 73 3a 20 22 2c 20  t, "%12.12s: ", 
2e110 22 6e 75 6c 6c 76 61 6c 75 65 22 29 3b 0a 20 20  "nullvalue");.  
2e120 20 20 20 20 6f 75 74 70 75 74 5f 63 5f 73 74 72      output_c_str
2e130 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e 6e  ing(p->out, p->n
2e140 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20 20  ullValue);.     
2e150 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
2e160 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 20 20 75  ut, "\n");.    u
2e170 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
2e180 74 2c 22 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e  t,"%12.12s: %s\n
2e190 22 2c 22 6f 75 74 70 75 74 22 2c 0a 20 20 20 20  ","output",.    
2e1a0 20 20 20 20 20 20 20 20 73 74 72 6c 65 6e 33 30          strlen30
2e1b0 28 70 2d 3e 6f 75 74 66 69 6c 65 29 20 3f 20 70  (p->outfile) ? p
2e1c0 2d 3e 6f 75 74 66 69 6c 65 20 3a 20 22 73 74 64  ->outfile : "std
2e1d0 6f 75 74 22 29 3b 0a 20 20 20 20 75 74 66 38 5f  out");.    utf8_
2e1e0 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
2e1f0 31 32 2e 31 32 73 3a 20 22 2c 20 22 63 6f 6c 73  12.12s: ", "cols
2e200 65 70 61 72 61 74 6f 72 22 29 3b 0a 20 20 20 20  eparator");.    
2e210 20 20 6f 75 74 70 75 74 5f 63 5f 73 74 72 69 6e    output_c_strin
2e220 67 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e 63 6f 6c  g(p->out, p->col
2e230 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20  Separator);.    
2e240 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
2e250 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 20 20  out, "\n");.    
2e260 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
2e270 75 74 2c 22 25 31 32 2e 31 32 73 3a 20 22 2c 20  ut,"%12.12s: ", 
2e280 22 72 6f 77 73 65 70 61 72 61 74 6f 72 22 29 3b  "rowseparator");
2e290 0a 20 20 20 20 20 20 6f 75 74 70 75 74 5f 63 5f  .      output_c_
2e2a0 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 70  string(p->out, p
2e2b0 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b  ->rowSeparator);
2e2c0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
2e2d0 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b  f(p->out, "\n");
2e2e0 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
2e2f0 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32  (p->out, "%12.12
2e300 73 3a 20 25 73 5c 6e 22 2c 22 73 74 61 74 73 22  s: %s\n","stats"
2e310 2c 20 61 7a 42 6f 6f 6c 5b 70 2d 3e 73 74 61 74  , azBool[p->stat
2e320 73 4f 6e 21 3d 30 5d 29 3b 0a 20 20 20 20 75 74  sOn!=0]);.    ut
2e330 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
2e340 2c 20 22 25 31 32 2e 31 32 73 3a 20 22 2c 20 22  , "%12.12s: ", "
2e350 77 69 64 74 68 22 29 3b 0a 20 20 20 20 66 6f 72  width");.    for
2e360 20 28 69 3d 30 3b 69 3c 28 69 6e 74 29 41 72 72   (i=0;i<(int)Arr
2e370 61 79 53 69 7a 65 28 70 2d 3e 63 6f 6c 57 69 64  aySize(p->colWid
2e380 74 68 29 20 26 26 20 70 2d 3e 63 6f 6c 57 69 64  th) && p->colWid
2e390 74 68 5b 69 5d 20 21 3d 20 30 3b 69 2b 2b 29 20  th[i] != 0;i++) 
2e3a0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
2e3b0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 22  tf(p->out, "%d "
2e3c0 2c 20 70 2d 3e 63 6f 6c 57 69 64 74 68 5b 69 5d  , p->colWidth[i]
2e3d0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 61 77  );.    }.    raw
2e3e0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
2e3f0 22 5c 6e 22 29 3b 0a 20 20 20 20 75 74 66 38 5f  "\n");.    utf8_
2e400 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
2e410 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 20  %12.12s: %s\n", 
2e420 22 66 69 6c 65 6e 61 6d 65 22 2c 0a 20 20 20 20  "filename",.    
2e430 20 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e 7a              p->z
2e440 44 62 46 69 6c 65 6e 61 6d 65 20 3f 20 70 2d 3e  DbFilename ? p->
2e450 7a 44 62 46 69 6c 65 6e 61 6d 65 20 3a 20 22 22  zDbFilename : ""
2e460 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66  );.  }else..  if
2e470 28 20 63 3d 3d 27 73 27 20 26 26 20 73 74 72 6e  ( c=='s' && strn
2e480 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73  cmp(azArg[0], "s
2e490 74 61 74 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  tats", n)==0 ){.
2e4a0 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20      if( nArg==2 
2e4b0 29 7b 0a 20 20 20 20 20 20 70 2d 3e 73 74 61 74  ){.      p->stat
2e4c0 73 4f 6e 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c  sOn = booleanVal
2e4d0 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20  ue(azArg[1]);.  
2e4e0 20 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67    }else if( nArg
2e4f0 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 64 69 73  ==1 ){.      dis
2e500 70 6c 61 79 5f 73 74 61 74 73 28 70 2d 3e 64 62  play_stats(p->db
2e510 2c 20 70 2c 20 30 29 3b 0a 20 20 20 20 7d 65 6c  , p, 0);.    }el
2e520 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72  se{.      raw_pr
2e530 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
2e540 61 67 65 3a 20 2e 73 74 61 74 73 20 3f 6f 6e 7c  age: .stats ?on|
2e550 6f 66 66 3f 5c 6e 22 29 3b 0a 20 20 20 20 20 20  off?\n");.      
2e560 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  rc = 1;.    }.  
2e570 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 28 63 3d  }else..  if( (c=
2e580 3d 27 74 27 20 26 26 20 6e 3e 31 20 26 26 20 73  ='t' && n>1 && s
2e590 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
2e5a0 20 22 74 61 62 6c 65 73 22 2c 20 6e 29 3d 3d 30   "tables", n)==0
2e5b0 29 0a 20 20 20 7c 7c 20 28 63 3d 3d 27 69 27 20  ).   || (c=='i' 
2e5c0 26 26 20 28 73 74 72 6e 63 6d 70 28 61 7a 41 72  && (strncmp(azAr
2e5d0 67 5b 30 5d 2c 20 22 69 6e 64 69 63 65 73 22 2c  g[0], "indices",
2e5e0 20 6e 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20   n)==0.         
2e5f0 20 20 20 20 20 20 20 20 7c 7c 20 73 74 72 6e 63          || strnc
2e600 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6e  mp(azArg[0], "in
2e610 64 65 78 65 73 22 2c 20 6e 29 3d 3d 30 29 20 29  dexes", n)==0) )
2e620 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  .  ){.    sqlite
2e630 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
2e640 20 20 20 63 68 61 72 20 2a 2a 61 7a 52 65 73 75     char **azResu
2e650 6c 74 3b 0a 20 20 20 20 69 6e 74 20 6e 52 6f 77  lt;.    int nRow
2e660 2c 20 6e 41 6c 6c 6f 63 3b 0a 20 20 20 20 69 6e  , nAlloc;.    in
2e670 74 20 69 69 3b 0a 20 20 20 20 53 68 65 6c 6c 54  t ii;.    ShellT
2e680 65 78 74 20 73 3b 0a 20 20 20 20 69 6e 69 74 54  ext s;.    initT
2e690 65 78 74 28 26 73 29 3b 0a 20 20 20 20 6f 70 65  ext(&s);.    ope
2e6a0 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20  n_db(p, 0);.    
2e6b0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
2e6c0 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 22  pare_v2(p->db, "
2e6d0 50 52 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f  PRAGMA database_
2e6e0 6c 69 73 74 22 2c 20 2d 31 2c 20 26 70 53 74 6d  list", -1, &pStm
2e6f0 74 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 72  t, 0);.    if( r
2e700 63 20 29 20 72 65 74 75 72 6e 20 73 68 65 6c 6c  c ) return shell
2e710 44 61 74 61 62 61 73 65 45 72 72 6f 72 28 70 2d  DatabaseError(p-
2e720 3e 64 62 29 3b 0a 0a 20 20 20 20 69 66 28 20 6e  >db);..    if( n
2e730 41 72 67 3e 32 20 26 26 20 63 3d 3d 27 69 27 20  Arg>2 && c=='i' 
2e740 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69  ){.      /* It i
2e750 73 20 61 6e 20 68 69 73 74 6f 72 69 63 61 6c 20  s an historical 
2e760 61 63 63 69 64 65 6e 74 20 74 68 61 74 20 74 68  accident that th
2e770 65 20 2e 69 6e 64 65 78 65 73 20 63 6f 6d 6d 61  e .indexes comma
2e780 6e 64 20 73 68 6f 77 73 20 61 6e 20 65 72 72 6f  nd shows an erro
2e790 72 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20  r.      ** when 
2e7a0 63 61 6c 6c 65 64 20 77 69 74 68 20 74 68 65 20  called with the 
2e7b0 77 72 6f 6e 67 20 6e 75 6d 62 65 72 20 6f 66 20  wrong number of 
2e7c0 61 72 67 75 6d 65 6e 74 73 20 77 68 65 72 65 61  arguments wherea
2e7d0 73 20 74 68 65 20 2e 74 61 62 6c 65 73 0a 20 20  s the .tables.  
2e7e0 20 20 20 20 2a 2a 20 63 6f 6d 6d 61 6e 64 20 64      ** command d
2e7f0 6f 65 73 20 6e 6f 74 2e 20 2a 2f 0a 20 20 20 20  oes not. */.    
2e800 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
2e810 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 69 6e  err, "Usage: .in
2e820 64 65 78 65 73 20 3f 4c 49 4b 45 2d 50 41 54 54  dexes ?LIKE-PATT
2e830 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20 20 20 20  ERN?\n");.      
2e840 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f  rc = 1;.      go
2e850 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
2e860 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  exit;.    }.    
2e870 66 6f 72 28 69 69 3d 30 3b 20 73 71 6c 69 74 65  for(ii=0; sqlite
2e880 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53  3_step(pStmt)==S
2e890 51 4c 49 54 45 5f 52 4f 57 3b 20 69 69 2b 2b 29  QLITE_ROW; ii++)
2e8a0 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
2e8b0 61 72 20 2a 7a 44 62 4e 61 6d 65 20 3d 20 28 63  ar *zDbName = (c
2e8c0 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
2e8d0 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
2e8e0 53 74 6d 74 2c 20 31 29 3b 0a 20 20 20 20 20 20  Stmt, 1);.      
2e8f0 69 66 28 20 7a 44 62 4e 61 6d 65 3d 3d 30 20 29  if( zDbName==0 )
2e900 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
2e910 20 69 66 28 20 73 2e 7a 20 26 26 20 73 2e 7a 5b   if( s.z && s.z[
2e920 30 5d 20 29 20 61 70 70 65 6e 64 54 65 78 74 28  0] ) appendText(
2e930 26 73 2c 20 22 20 55 4e 49 4f 4e 20 41 4c 4c 20  &s, " UNION ALL 
2e940 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  ", 0);.      if(
2e950 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70   sqlite3_stricmp
2e960 28 7a 44 62 4e 61 6d 65 2c 20 22 6d 61 69 6e 22  (zDbName, "main"
2e970 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
2e980 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c 20 22  appendText(&s, "
2e990 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
2e9a0 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 65   ", 0);.      }e
2e9b0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 70 70  lse{.        app
2e9c0 65 6e 64 54 65 78 74 28 26 73 2c 20 22 53 45 4c  endText(&s, "SEL
2e9d0 45 43 54 20 22 2c 20 30 29 3b 0a 20 20 20 20 20  ECT ", 0);.     
2e9e0 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26 73     appendText(&s
2e9f0 2c 20 7a 44 62 4e 61 6d 65 2c 20 27 5c 27 27 29  , zDbName, '\'')
2ea00 3b 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  ;.        append
2ea10 54 65 78 74 28 26 73 2c 20 22 7c 7c 27 2e 27 7c  Text(&s, "||'.'|
2ea20 7c 6e 61 6d 65 20 46 52 4f 4d 20 22 2c 20 30 29  |name FROM ", 0)
2ea30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
2ea40 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c 20 7a  appendText(&s, z
2ea50 44 62 4e 61 6d 65 2c 20 27 22 27 29 3b 0a 20 20  DbName, '"');.  
2ea60 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
2ea70 73 2c 20 22 2e 73 71 6c 69 74 65 5f 6d 61 73 74  s, ".sqlite_mast
2ea80 65 72 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  er ", 0);.      
2ea90 69 66 28 20 63 3d 3d 27 74 27 20 29 7b 0a 20 20  if( c=='t' ){.  
2eaa0 20 20 20 20 20 20 61 70 70 65 6e 64 54 65 78 74        appendText
2eab0 28 26 73 2c 22 20 57 48 45 52 45 20 74 79 70 65  (&s," WHERE type
2eac0 20 49 4e 20 28 27 74 61 62 6c 65 27 2c 27 76 69   IN ('table','vi
2ead0 65 77 27 29 22 0a 20 20 20 20 20 20 20 20 20 20  ew')".          
2eae0 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20 20              "   
2eaf0 41 4e 44 20 6e 61 6d 65 20 4e 4f 54 20 4c 49 4b  AND name NOT LIK
2eb00 45 20 27 73 71 6c 69 74 65 5f 25 27 22 0a 20 20  E 'sqlite_%'".  
2eb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb20 20 20 20 20 22 20 20 20 41 4e 44 20 6e 61 6d 65      "   AND name
2eb30 20 4c 49 4b 45 20 3f 31 22 2c 20 30 29 3b 0a 20   LIKE ?1", 0);. 
2eb40 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
2eb50 20 20 20 20 61 70 70 65 6e 64 54 65 78 74 28 26      appendText(&
2eb60 73 2c 22 20 57 48 45 52 45 20 74 79 70 65 3d 27  s," WHERE type='
2eb70 69 6e 64 65 78 27 22 0a 20 20 20 20 20 20 20 20  index'".        
2eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                " 
2eb90 20 20 41 4e 44 20 74 62 6c 5f 6e 61 6d 65 20 4c    AND tbl_name L
2eba0 49 4b 45 20 3f 31 22 2c 20 30 29 3b 0a 20 20 20  IKE ?1", 0);.   
2ebb0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72     }.    }.    r
2ebc0 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  c = sqlite3_fina
2ebd0 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20  lize(pStmt);.   
2ebe0 20 61 70 70 65 6e 64 54 65 78 74 28 26 73 2c 20   appendText(&s, 
2ebf0 22 20 4f 52 44 45 52 20 42 59 20 31 22 2c 20 30  " ORDER BY 1", 0
2ec00 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
2ec10 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70  te3_prepare_v2(p
2ec20 2d 3e 64 62 2c 20 73 2e 7a 2c 20 2d 31 2c 20 26  ->db, s.z, -1, &
2ec30 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 66  pStmt, 0);.    f
2ec40 72 65 65 54 65 78 74 28 26 73 29 3b 0a 20 20 20  reeText(&s);.   
2ec50 20 69 66 28 20 72 63 20 29 20 72 65 74 75 72 6e   if( rc ) return
2ec60 20 73 68 65 6c 6c 44 61 74 61 62 61 73 65 45 72   shellDatabaseEr
2ec70 72 6f 72 28 70 2d 3e 64 62 29 3b 0a 0a 20 20 20  ror(p->db);..   
2ec80 20 2f 2a 20 52 75 6e 20 74 68 65 20 53 51 4c 20   /* Run the SQL 
2ec90 73 74 61 74 65 6d 65 6e 74 20 70 72 65 70 61 72  statement prepar
2eca0 65 64 20 62 79 20 74 68 65 20 61 62 6f 76 65 20  ed by the above 
2ecb0 62 6c 6f 63 6b 2e 20 53 74 6f 72 65 20 74 68 65  block. Store the
2ecc0 20 72 65 73 75 6c 74 73 0a 20 20 20 20 2a 2a 20   results.    ** 
2ecd0 61 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20 6e  as an array of n
2ece0 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74  ul-terminated st
2ecf0 72 69 6e 67 73 20 69 6e 20 61 7a 52 65 73 75 6c  rings in azResul
2ed00 74 5b 5d 2e 20 20 2a 2f 0a 20 20 20 20 6e 52 6f  t[].  */.    nRo
2ed10 77 20 3d 20 6e 41 6c 6c 6f 63 20 3d 20 30 3b 0a  w = nAlloc = 0;.
2ed20 20 20 20 20 61 7a 52 65 73 75 6c 74 20 3d 20 30      azResult = 0
2ed30 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e 31  ;.    if( nArg>1
2ed40 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
2ed50 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d  3_bind_text(pStm
2ed60 74 2c 20 31 2c 20 61 7a 41 72 67 5b 31 5d 2c 20  t, 1, azArg[1], 
2ed70 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  -1, SQLITE_TRANS
2ed80 49 45 4e 54 29 3b 0a 20 20 20 20 7d 65 6c 73 65  IENT);.    }else
2ed90 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
2eda0 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c  bind_text(pStmt,
2edb0 20 31 2c 20 22 25 22 2c 20 2d 31 2c 20 53 51 4c   1, "%", -1, SQL
2edc0 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
2edd0 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 73 71   }.    while( sq
2ede0 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74  lite3_step(pStmt
2edf0 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b  )==SQLITE_ROW ){
2ee00 0a 20 20 20 20 20 20 69 66 28 20 6e 52 6f 77 3e  .      if( nRow>
2ee10 3d 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20  =nAlloc ){.     
2ee20 20 20 20 63 68 61 72 20 2a 2a 61 7a 4e 65 77 3b     char **azNew;
2ee30 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 32 20  .        int n2 
2ee40 3d 20 6e 41 6c 6c 6f 63 2a 32 20 2b 20 31 30 3b  = nAlloc*2 + 10;
2ee50 0a 20 20 20 20 20 20 20 20 61 7a 4e 65 77 20 3d  .        azNew =
2ee60 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63   sqlite3_realloc
2ee70 36 34 28 61 7a 52 65 73 75 6c 74 2c 20 73 69 7a  64(azResult, siz
2ee80 65 6f 66 28 61 7a 52 65 73 75 6c 74 5b 30 5d 29  eof(azResult[0])
2ee90 2a 6e 32 29 3b 0a 20 20 20 20 20 20 20 20 69 66  *n2);.        if
2eea0 28 20 61 7a 4e 65 77 3d 3d 30 20 29 7b 0a 20 20  ( azNew==0 ){.  
2eeb0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 68 65          rc = she
2eec0 6c 6c 4e 6f 6d 65 6d 45 72 72 6f 72 28 29 3b 0a  llNomemError();.
2eed0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
2eee0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
2eef0 20 20 20 6e 41 6c 6c 6f 63 20 3d 20 6e 32 3b 0a     nAlloc = n2;.
2ef00 20 20 20 20 20 20 20 20 61 7a 52 65 73 75 6c 74          azResult
2ef10 20 3d 20 61 7a 4e 65 77 3b 0a 20 20 20 20 20 20   = azNew;.      
2ef20 7d 0a 20 20 20 20 20 20 61 7a 52 65 73 75 6c 74  }.      azResult
2ef30 5b 6e 52 6f 77 5d 20 3d 20 73 71 6c 69 74 65 33  [nRow] = sqlite3
2ef40 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 73  _mprintf("%s", s
2ef50 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
2ef60 78 74 28 70 53 74 6d 74 2c 20 30 29 29 3b 0a 20  xt(pStmt, 0));. 
2ef70 20 20 20 20 20 69 66 28 20 30 3d 3d 61 7a 52 65       if( 0==azRe
2ef80 73 75 6c 74 5b 6e 52 6f 77 5d 20 29 7b 0a 20 20  sult[nRow] ){.  
2ef90 20 20 20 20 20 20 72 63 20 3d 20 73 68 65 6c 6c        rc = shell
2efa0 4e 6f 6d 65 6d 45 72 72 6f 72 28 29 3b 0a 20 20  NomemError();.  
2efb0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2efc0 20 20 20 7d 0a 20 20 20 20 20 20 6e 52 6f 77 2b     }.      nRow+
2efd0 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
2efe0 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
2eff0 65 28 70 53 74 6d 74 29 21 3d 53 51 4c 49 54 45  e(pStmt)!=SQLITE
2f000 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20  _OK ){.      rc 
2f010 3d 20 73 68 65 6c 6c 44 61 74 61 62 61 73 65 45  = shellDatabaseE
2f020 72 72 6f 72 28 70 2d 3e 64 62 29 3b 0a 20 20 20  rror(p->db);.   
2f030 20 7d 0a 0a 20 20 20 20 2f 2a 20 50 72 65 74 74   }..    /* Prett
2f040 79 2d 70 72 69 6e 74 20 74 68 65 20 63 6f 6e 74  y-print the cont
2f050 65 6e 74 73 20 6f 66 20 61 72 72 61 79 20 61 7a  ents of array az
2f060 52 65 73 75 6c 74 5b 5d 20 74 6f 20 74 68 65 20  Result[] to the 
2f070 6f 75 74 70 75 74 20 2a 2f 0a 20 20 20 20 69 66  output */.    if
2f080 28 20 72 63 3d 3d 30 20 26 26 20 6e 52 6f 77 3e  ( rc==0 && nRow>
2f090 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6c  0 ){.      int l
2f0a0 65 6e 2c 20 6d 61 78 6c 65 6e 20 3d 20 30 3b 0a  en, maxlen = 0;.
2f0b0 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6a 3b 0a        int i, j;.
2f0c0 20 20 20 20 20 20 69 6e 74 20 6e 50 72 69 6e 74        int nPrint
2f0d0 43 6f 6c 2c 20 6e 50 72 69 6e 74 52 6f 77 3b 0a  Col, nPrintRow;.
2f0e0 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
2f0f0 3c 6e 52 6f 77 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nRow; i++){.   
2f100 20 20 20 20 20 6c 65 6e 20 3d 20 73 74 72 6c 65       len = strle
2f110 6e 33 30 28 61 7a 52 65 73 75 6c 74 5b 69 5d 29  n30(azResult[i])
2f120 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6c 65  ;.        if( le
2f130 6e 3e 6d 61 78 6c 65 6e 20 29 20 6d 61 78 6c 65  n>maxlen ) maxle
2f140 6e 20 3d 20 6c 65 6e 3b 0a 20 20 20 20 20 20 7d  n = len;.      }
2f150 0a 20 20 20 20 20 20 6e 50 72 69 6e 74 43 6f 6c  .      nPrintCol
2f160 20 3d 20 38 30 2f 28 6d 61 78 6c 65 6e 2b 32 29   = 80/(maxlen+2)
2f170 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 50 72 69  ;.      if( nPri
2f180 6e 74 43 6f 6c 3c 31 20 29 20 6e 50 72 69 6e 74  ntCol<1 ) nPrint
2f190 43 6f 6c 20 3d 20 31 3b 0a 20 20 20 20 20 20 6e  Col = 1;.      n
2f1a0 50 72 69 6e 74 52 6f 77 20 3d 20 28 6e 52 6f 77  PrintRow = (nRow
2f1b0 20 2b 20 6e 50 72 69 6e 74 43 6f 6c 20 2d 20 31   + nPrintCol - 1
2f1c0 29 2f 6e 50 72 69 6e 74 43 6f 6c 3b 0a 20 20 20  )/nPrintCol;.   
2f1d0 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 50     for(i=0; i<nP
2f1e0 72 69 6e 74 52 6f 77 3b 20 69 2b 2b 29 7b 0a 20  rintRow; i++){. 
2f1f0 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 69 3b 20         for(j=i; 
2f200 6a 3c 6e 52 6f 77 3b 20 6a 2b 3d 6e 50 72 69 6e  j<nRow; j+=nPrin
2f210 74 52 6f 77 29 7b 0a 20 20 20 20 20 20 20 20 20  tRow){.         
2f220 20 63 68 61 72 20 2a 7a 53 70 20 3d 20 6a 3c 6e   char *zSp = j<n
2f230 50 72 69 6e 74 52 6f 77 20 3f 20 22 22 20 3a 20  PrintRow ? "" : 
2f240 22 20 20 22 3b 0a 20 20 20 20 20 20 20 20 20 20  "  ";.          
2f250 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
2f260 75 74 2c 20 22 25 73 25 2d 2a 73 22 2c 20 7a 53  ut, "%s%-*s", zS
2f270 70 2c 20 6d 61 78 6c 65 6e 2c 0a 20 20 20 20 20  p, maxlen,.     
2f280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f290 20 61 7a 52 65 73 75 6c 74 5b 6a 5d 20 3f 20 61   azResult[j] ? a
2f2a0 7a 52 65 73 75 6c 74 5b 6a 5d 3a 22 22 29 3b 0a  zResult[j]:"");.
2f2b0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2f2c0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
2f2d0 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 20 20  out, "\n");.    
2f2e0 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 66    }.    }..    f
2f2f0 6f 72 28 69 69 3d 30 3b 20 69 69 3c 6e 52 6f 77  or(ii=0; ii<nRow
2f300 3b 20 69 69 2b 2b 29 20 73 71 6c 69 74 65 33 5f  ; ii++) sqlite3_
2f310 66 72 65 65 28 61 7a 52 65 73 75 6c 74 5b 69 69  free(azResult[ii
2f320 5d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  ]);.    sqlite3_
2f330 66 72 65 65 28 61 7a 52 65 73 75 6c 74 29 3b 0a  free(azResult);.
2f340 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 20 42 65    }else..  /* Be
2f350 67 69 6e 20 72 65 64 69 72 65 63 74 69 6e 67 20  gin redirecting 
2f360 6f 75 74 70 75 74 20 74 6f 20 74 68 65 20 66 69  output to the fi
2f370 6c 65 20 22 74 65 73 74 63 61 73 65 2d 6f 75 74  le "testcase-out
2f380 2e 74 78 74 22 20 2a 2f 0a 20 20 69 66 28 20 63  .txt" */.  if( c
2f390 3d 3d 27 74 27 20 26 26 20 73 74 72 63 6d 70 28  =='t' && strcmp(
2f3a0 61 7a 41 72 67 5b 30 5d 2c 22 74 65 73 74 63 61  azArg[0],"testca
2f3b0 73 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 6f  se")==0 ){.    o
2f3c0 75 74 70 75 74 5f 72 65 73 65 74 28 70 29 3b 0a  utput_reset(p);.
2f3d0 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 6f 75 74      p->out = out
2f3e0 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 22 74  put_file_open("t
2f3f0 65 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 22  estcase-out.txt"
2f400 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6f 75  );.    if( p->ou
2f410 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61  t==0 ){.      ra
2f420 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
2f430 20 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20   "Error: cannot 
2f440 6f 70 65 6e 20 27 74 65 73 74 63 61 73 65 2d 6f  open 'testcase-o
2f450 75 74 2e 74 78 74 27 5c 6e 22 29 3b 0a 20 20 20  ut.txt'\n");.   
2f460 20 7d 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e   }.    if( nArg>
2f470 3d 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =2 ){.      sqli
2f480 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
2f490 65 6f 66 28 70 2d 3e 7a 54 65 73 74 63 61 73 65  eof(p->zTestcase
2f4a0 29 2c 20 70 2d 3e 7a 54 65 73 74 63 61 73 65 2c  ), p->zTestcase,
2f4b0 20 22 25 73 22 2c 20 61 7a 41 72 67 5b 31 5d 29   "%s", azArg[1])
2f4c0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2f4d0 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
2f4e0 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 7a 54  ntf(sizeof(p->zT
2f4f0 65 73 74 63 61 73 65 29 2c 20 70 2d 3e 7a 54 65  estcase), p->zTe
2f500 73 74 63 61 73 65 2c 20 22 3f 22 29 3b 0a 20 20  stcase, "?");.  
2f510 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66    }.  }else..#if
2f520 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
2f530 53 54 41 42 4c 45 0a 20 20 69 66 28 20 63 3d 3d  STABLE.  if( c==
2f540 27 74 27 20 26 26 20 6e 3e 3d 38 20 26 26 20 73  't' && n>=8 && s
2f550 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
2f560 20 22 74 65 73 74 63 74 72 6c 22 2c 20 6e 29 3d   "testctrl", n)=
2f570 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63  =0 ){.    static
2f580 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 0a   const struct {.
2f590 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
2f5a0 72 20 2a 7a 43 74 72 6c 4e 61 6d 65 3b 20 20 20  r *zCtrlName;   
2f5b0 2f 2a 20 4e 61 6d 65 20 6f 66 20 61 20 74 65 73  /* Name of a tes
2f5c0 74 2d 63 6f 6e 74 72 6f 6c 20 6f 70 74 69 6f 6e  t-control option
2f5d0 20 2a 2f 0a 20 20 20 20 20 20 20 69 6e 74 20 63   */.       int c
2f5e0 74 72 6c 43 6f 64 65 3b 20 20 20 20 20 20 20 20  trlCode;        
2f5f0 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 63      /* Integer c
2f600 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6f 70 74  ode for that opt
2f610 69 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 20 63 6f  ion */.       co
2f620 6e 73 74 20 63 68 61 72 20 2a 7a 55 73 61 67 65  nst char *zUsage
2f630 3b 20 20 20 20 20 20 2f 2a 20 55 73 61 67 65 20  ;      /* Usage 
2f640 6e 6f 74 65 73 20 2a 2f 0a 20 20 20 20 7d 20 61  notes */.    } a
2f650 43 74 72 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Ctrl[] = {.     
2f660 20 7b 20 22 61 6c 77 61 79 73 22 2c 20 20 20 20   { "always",    
2f670 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
2f680 54 45 53 54 43 54 52 4c 5f 41 4c 57 41 59 53 2c  TESTCTRL_ALWAYS,
2f690 20 20 20 20 20 20 20 20 22 42 4f 4f 4c 45 41 4e          "BOOLEAN
2f6a0 22 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a  "            },.
2f6b0 20 20 20 20 20 20 7b 20 22 61 73 73 65 72 74 22        { "assert"
2f6c0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ,             SQ
2f6d0 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 41 53  LITE_TESTCTRL_AS
2f6e0 53 45 52 54 2c 20 20 20 20 20 20 20 20 22 42 4f  SERT,        "BO
2f6f0 4f 4c 45 41 4e 22 20 20 20 20 20 20 20 20 20 20  OLEAN"          
2f700 20 20 7d 2c 0a 20 20 20 20 2f 2a 7b 20 22 62 65    },.    /*{ "be
2f710 6e 69 67 6e 5f 6d 61 6c 6c 6f 63 5f 68 6f 6f 6b  nign_malloc_hook
2f720 73 22 2c 53 51 4c 49 54 45 5f 54 45 53 54 43 54  s",SQLITE_TESTCT
2f730 52 4c 5f 42 45 4e 49 47 4e 5f 4d 41 4c 4c 4f 43  RL_BENIGN_MALLOC
2f740 5f 48 4f 4f 4b 53 2c 20 22 22 20 20 20 20 20 20  _HOOKS, ""      
2f750 20 20 20 20 7d 2c 2a 2f 0a 20 20 20 20 2f 2a 7b      },*/.    /*{
2f760 20 22 62 69 74 76 65 63 5f 74 65 73 74 22 2c 20   "bitvec_test", 
2f770 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45         SQLITE_TE
2f780 53 54 43 54 52 4c 5f 42 49 54 56 45 43 5f 54 45  STCTRL_BITVEC_TE
2f790 53 54 2c 20 20 20 22 22 20 20 20 20 20 20 20 20  ST,   ""        
2f7a0 20 20 20 20 20 20 20 20 7d 2c 2a 2f 0a 20 20 20          },*/.   
2f7b0 20 20 20 7b 20 22 62 79 74 65 6f 72 64 65 72 22     { "byteorder"
2f7c0 2c 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54  ,          SQLIT
2f7d0 45 5f 54 45 53 54 43 54 52 4c 5f 42 59 54 45 4f  E_TESTCTRL_BYTEO
2f7e0 52 44 45 52 2c 20 20 20 20 20 22 22 20 20 20 20  RDER,     ""    
2f7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2f800 2c 0a 20 20 20 20 2f 2a 7b 20 22 66 61 75 6c 74  ,.    /*{ "fault
2f810 5f 69 6e 73 74 61 6c 6c 22 2c 20 20 20 20 20 20  _install",      
2f820 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
2f830 46 41 55 4c 54 5f 49 4e 53 54 41 4c 4c 2c 20 22  FAULT_INSTALL, "
2f840 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
2f850 20 7d 2c 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22   }, */.      { "
2f860 69 6d 70 6f 73 74 65 72 22 2c 20 20 20 20 20 20  imposter",      
2f870 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54       SQLITE_TEST
2f880 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52 2c 20 20  CTRL_IMPOSTER,  
2f890 20 22 53 43 48 45 4d 41 20 4f 4e 2f 4f 46 46 20   "SCHEMA ON/OFF 
2f8a0 52 4f 4f 54 50 41 47 45 22 7d 2c 0a 23 69 66 64  ROOTPAGE"},.#ifd
2f8b0 65 66 20 53 51 4c 49 54 45 5f 4e 5f 4b 45 59 57  ef SQLITE_N_KEYW
2f8c0 4f 52 44 0a 20 20 20 20 20 20 7b 20 22 69 73 6b  ORD.      { "isk
2f8d0 65 79 77 6f 72 64 22 2c 20 20 20 20 20 20 20 20  eyword",        
2f8e0 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52    SQLITE_TESTCTR
2f8f0 4c 5f 49 53 4b 45 59 57 4f 52 44 2c 20 20 20 20  L_ISKEYWORD,    
2f900 20 22 49 44 45 4e 54 49 46 49 45 52 22 20 20 20   "IDENTIFIER"   
2f910 20 20 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66 0a        },.#endif.
2f920 20 20 20 20 20 20 7b 20 22 6c 6f 63 61 6c 74 69        { "localti
2f930 6d 65 5f 66 61 75 6c 74 22 2c 20 20 20 20 53 51  me_fault",    SQ
2f940 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4c 4f  LITE_TESTCTRL_LO
2f950 43 41 4c 54 49 4d 45 5f 46 41 55 4c 54 2c 22 42  CALTIME_FAULT,"B
2f960 4f 4f 4c 45 41 4e 22 20 20 20 20 20 20 20 20 20  OOLEAN"         
2f970 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 6e 65    },.      { "ne
2f980 76 65 72 5f 63 6f 72 72 75 70 74 22 2c 20 20 20  ver_corrupt",   
2f990 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54     SQLITE_TESTCT
2f9a0 52 4c 5f 4e 45 56 45 52 5f 43 4f 52 52 55 50 54  RL_NEVER_CORRUPT
2f9b0 2c 20 22 42 4f 4f 4c 45 41 4e 22 20 20 20 20 20  , "BOOLEAN"     
2f9c0 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
2f9d0 7b 20 22 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  { "optimizations
2f9e0 22 2c 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54  ",      SQLITE_T
2f9f0 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41  ESTCTRL_OPTIMIZA
2fa00 54 49 4f 4e 53 2c 20 22 44 49 53 41 42 4c 45 2d  TIONS, "DISABLE-
2fa10 4d 41 53 4b 22 20 20 20 20 20 20 20 7d 2c 0a 23  MASK"       },.#
2fa20 69 66 64 65 66 20 59 59 43 4f 56 45 52 41 47 45  ifdef YYCOVERAGE
2fa30 0a 20 20 20 20 20 20 7b 20 22 70 61 72 73 65 72  .      { "parser
2fa40 5f 63 6f 76 65 72 61 67 65 22 2c 20 20 20 20 53  _coverage",    S
2fa50 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50  QLITE_TESTCTRL_P
2fa60 41 52 53 45 52 5f 43 4f 56 45 52 41 47 45 2c 20  ARSER_COVERAGE, 
2fa70 22 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ""              
2fa80 20 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20     },.#endif.   
2fa90 20 20 20 7b 20 22 70 65 6e 64 69 6e 67 5f 62 79     { "pending_by
2faa0 74 65 22 2c 20 20 20 20 20 20 20 53 51 4c 49 54  te",       SQLIT
2fab0 45 5f 54 45 53 54 43 54 52 4c 5f 50 45 4e 44 49  E_TESTCTRL_PENDI
2fac0 4e 47 5f 42 59 54 45 2c 20 20 22 4f 46 46 53 45  NG_BYTE,  "OFFSE
2fad0 54 20 20 22 20 20 20 20 20 20 20 20 20 20 20 7d  T  "           }
2fae0 2c 0a 20 20 20 20 20 20 7b 20 22 70 72 6e 67 5f  ,.      { "prng_
2faf0 72 65 73 65 74 22 2c 20 20 20 20 20 20 20 20 20  reset",         
2fb00 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
2fb10 50 52 4e 47 5f 52 45 53 45 54 2c 20 20 20 20 22  PRNG_RESET,    "
2fb20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
2fb30 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
2fb40 70 72 6e 67 5f 72 65 73 74 6f 72 65 22 2c 20 20  prng_restore",  
2fb50 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54       SQLITE_TEST
2fb60 43 54 52 4c 5f 50 52 4e 47 5f 52 45 53 54 4f 52  CTRL_PRNG_RESTOR
2fb70 45 2c 20 20 22 22 20 20 20 20 20 20 20 20 20 20  E,  ""          
2fb80 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
2fb90 20 20 7b 20 22 70 72 6e 67 5f 73 61 76 65 22 2c    { "prng_save",
2fba0 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
2fbb0 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e 47 5f 53  _TESTCTRL_PRNG_S
2fbc0 41 56 45 2c 20 20 20 20 20 22 22 20 20 20 20 20  AVE,     ""     
2fbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
2fbe0 0a 20 20 20 20 20 20 7b 20 22 72 65 73 65 72 76  .      { "reserv
2fbf0 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 53  e",            S
2fc00 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 52  QLITE_TESTCTRL_R
2fc10 45 53 45 52 56 45 2c 20 20 20 20 20 20 20 22 42  ESERVE,       "B
2fc20 59 54 45 53 2d 4f 46 2d 52 45 53 45 52 56 45 22  YTES-OF-RESERVE"
2fc30 20 20 20 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20     },.    };.   
2fc40 20 69 6e 74 20 74 65 73 74 63 74 72 6c 20 3d 20   int testctrl = 
2fc50 2d 31 3b 0a 20 20 20 20 69 6e 74 20 69 43 74 72  -1;.    int iCtr
2fc60 6c 20 3d 20 2d 31 3b 0a 20 20 20 20 69 6e 74 20  l = -1;.    int 
2fc70 72 63 32 20 3d 20 30 3b 20 20 20 20 2f 2a 20 30  rc2 = 0;    /* 0
2fc80 3a 20 75 73 61 67 65 2e 20 20 31 3a 20 25 64 20  : usage.  1: %d 
2fc90 20 32 3a 20 25 78 20 20 33 3a 20 6e 6f 2d 6f 75   2: %x  3: no-ou
2fca0 74 70 75 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tput */.    int 
2fcb0 69 73 4f 6b 20 3d 20 30 3b 0a 20 20 20 20 69 6e  isOk = 0;.    in
2fcc0 74 20 69 2c 20 6e 32 3b 0a 20 20 20 20 63 6f 6e  t i, n2;.    con
2fcd0 73 74 20 63 68 61 72 20 2a 7a 43 6d 64 20 3d 20  st char *zCmd = 
2fce0 30 3b 0a 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28  0;..    open_db(
2fcf0 70 2c 20 30 29 3b 0a 20 20 20 20 7a 43 6d 64 20  p, 0);.    zCmd 
2fd00 3d 20 6e 41 72 67 3e 3d 32 20 3f 20 61 7a 41 72  = nArg>=2 ? azAr
2fd10 67 5b 31 5d 20 3a 20 22 68 65 6c 70 22 3b 0a 0a  g[1] : "help";..
2fd20 20 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d      /* The argum
2fd30 65 6e 74 20 63 61 6e 20 6f 70 74 69 6f 6e 61 6c  ent can optional
2fd40 6c 79 20 62 65 67 69 6e 20 77 69 74 68 20 22 2d  ly begin with "-
2fd50 22 20 6f 72 20 22 2d 2d 22 20 2a 2f 0a 20 20 20  " or "--" */.   
2fd60 20 69 66 28 20 7a 43 6d 64 5b 30 5d 3d 3d 27 2d   if( zCmd[0]=='-
2fd70 27 20 26 26 20 7a 43 6d 64 5b 31 5d 20 29 7b 0a  ' && zCmd[1] ){.
2fd80 20 20 20 20 20 20 7a 43 6d 64 2b 2b 3b 0a 20 20        zCmd++;.  
2fd90 20 20 20 20 69 66 28 20 7a 43 6d 64 5b 30 5d 3d      if( zCmd[0]=
2fda0 3d 27 2d 27 20 26 26 20 7a 43 6d 64 5b 31 5d 20  ='-' && zCmd[1] 
2fdb0 29 20 7a 43 6d 64 2b 2b 3b 0a 20 20 20 20 7d 0a  ) zCmd++;.    }.
2fdc0 0a 20 20 20 20 2f 2a 20 2d 2d 68 65 6c 70 20 6c  .    /* --help l
2fdd0 69 73 74 73 20 61 6c 6c 20 74 65 73 74 2d 63 6f  ists all test-co
2fde0 6e 74 72 6f 6c 73 20 2a 2f 0a 20 20 20 20 69 66  ntrols */.    if
2fdf0 28 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c 22 68  ( strcmp(zCmd,"h
2fe00 65 6c 70 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  elp")==0 ){.    
2fe10 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
2fe20 3e 6f 75 74 2c 20 22 41 76 61 69 6c 61 62 6c 65  >out, "Available
2fe30 20 74 65 73 74 2d 63 6f 6e 74 72 6f 6c 73 3a 5c   test-controls:\
2fe40 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  n");.      for(i
2fe50 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28  =0; i<ArraySize(
2fe60 61 43 74 72 6c 29 3b 20 69 2b 2b 29 7b 0a 20 20  aCtrl); i++){.  
2fe70 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
2fe80 66 28 70 2d 3e 6f 75 74 2c 20 22 20 20 2e 74 65  f(p->out, "  .te
2fe90 73 74 63 74 72 6c 20 25 73 20 25 73 5c 6e 22 2c  stctrl %s %s\n",
2fea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2feb0 20 20 20 20 20 61 43 74 72 6c 5b 69 5d 2e 7a 43       aCtrl[i].zC
2fec0 74 72 6c 4e 61 6d 65 2c 20 61 43 74 72 6c 5b 69  trlName, aCtrl[i
2fed0 5d 2e 7a 55 73 61 67 65 29 3b 0a 20 20 20 20 20  ].zUsage);.     
2fee0 20 7d 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b   }.      rc = 1;
2fef0 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61  .      goto meta
2ff00 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
2ff10 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 63 6f 6e     }..    /* con
2ff20 76 65 72 74 20 74 65 73 74 63 74 72 6c 20 74 65  vert testctrl te
2ff30 78 74 20 6f 70 74 69 6f 6e 20 74 6f 20 76 61 6c  xt option to val
2ff40 75 65 2e 20 61 6c 6c 6f 77 20 61 6e 79 20 75 6e  ue. allow any un
2ff50 69 71 75 65 20 70 72 65 66 69 78 0a 20 20 20 20  ique prefix.    
2ff60 2a 2a 20 6f 66 20 74 68 65 20 6f 70 74 69 6f 6e  ** of the option
2ff70 20 6e 61 6d 65 2c 20 6f 72 20 61 20 6e 75 6d 65   name, or a nume
2ff80 72 69 63 61 6c 20 76 61 6c 75 65 2e 20 2a 2f 0a  rical value. */.
2ff90 20 20 20 20 6e 32 20 3d 20 73 74 72 6c 65 6e 33      n2 = strlen3
2ffa0 30 28 7a 43 6d 64 29 3b 0a 20 20 20 20 66 6f 72  0(zCmd);.    for
2ffb0 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a  (i=0; i<ArraySiz
2ffc0 65 28 61 43 74 72 6c 29 3b 20 69 2b 2b 29 7b 0a  e(aCtrl); i++){.
2ffd0 20 20 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d        if( strncm
2ffe0 70 28 7a 43 6d 64 2c 20 61 43 74 72 6c 5b 69 5d  p(zCmd, aCtrl[i]
2fff0 2e 7a 43 74 72 6c 4e 61 6d 65 2c 20 6e 32 29 3d  .zCtrlName, n2)=
30000 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  =0 ){.        if
30010 28 20 74 65 73 74 63 74 72 6c 3c 30 20 29 7b 0a  ( testctrl<0 ){.
30020 20 20 20 20 20 20 20 20 20 20 74 65 73 74 63 74            testct
30030 72 6c 20 3d 20 61 43 74 72 6c 5b 69 5d 2e 63 74  rl = aCtrl[i].ct
30040 72 6c 43 6f 64 65 3b 0a 20 20 20 20 20 20 20 20  rlCode;.        
30050 20 20 69 43 74 72 6c 20 3d 20 69 3b 0a 20 20 20    iCtrl = i;.   
30060 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
30070 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
30080 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
30090 3a 20 61 6d 62 69 67 75 6f 75 73 20 74 65 73 74  : ambiguous test
300a0 2d 63 6f 6e 74 72 6f 6c 3a 20 5c 22 25 73 5c 22  -control: \"%s\"
300b0 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  \n".            
300c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300d0 20 20 22 55 73 65 20 5c 22 2e 74 65 73 74 63 74    "Use \".testct
300e0 72 6c 20 2d 2d 68 65 6c 70 5c 22 20 66 6f 72 20  rl --help\" for 
300f0 68 65 6c 70 5c 6e 22 2c 20 7a 43 6d 64 29 3b 0a  help\n", zCmd);.
30100 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 31            rc = 1
30110 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
30120 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
30130 69 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  it;.        }.  
30140 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
30150 69 66 28 20 74 65 73 74 63 74 72 6c 3c 30 20 29  if( testctrl<0 )
30160 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
30170 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f  ntf(stderr,"Erro
30180 72 3a 20 75 6e 6b 6e 6f 77 6e 20 74 65 73 74 2d  r: unknown test-
30190 63 6f 6e 74 72 6f 6c 3a 20 25 73 5c 6e 22 0a 20  control: %s\n". 
301a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301b0 20 20 20 20 20 20 20 20 22 55 73 65 20 5c 22 2e          "Use \".
301c0 74 65 73 74 63 74 72 6c 20 2d 2d 68 65 6c 70 5c  testctrl --help\
301d0 22 20 66 6f 72 20 68 65 6c 70 5c 6e 22 2c 20 7a  " for help\n", z
301e0 43 6d 64 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  Cmd);.    }else{
301f0 0a 20 20 20 20 20 20 73 77 69 74 63 68 28 74 65  .      switch(te
30200 73 74 63 74 72 6c 29 7b 0a 0a 20 20 20 20 20 20  stctrl){..      
30210 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 74 65 73    /* sqlite3_tes
30220 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74 2c 20 64  t_control(int, d
30230 62 2c 20 69 6e 74 29 20 2a 2f 0a 20 20 20 20 20  b, int) */.     
30240 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54     case SQLITE_T
30250 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41  ESTCTRL_OPTIMIZA
30260 54 49 4f 4e 53 3a 0a 20 20 20 20 20 20 20 20 63  TIONS:.        c
30270 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
30280 54 52 4c 5f 52 45 53 45 52 56 45 3a 0a 20 20 20  TRL_RESERVE:.   
30290 20 20 20 20 20 20 20 69 66 28 20 6e 41 72 67 3d         if( nArg=
302a0 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =3 ){.          
302b0 20 20 69 6e 74 20 6f 70 74 20 3d 20 28 69 6e 74    int opt = (int
302c0 29 73 74 72 74 6f 6c 28 61 7a 41 72 67 5b 32 5d  )strtol(azArg[2]
302d0 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  , 0, 0);.       
302e0 20 20 20 20 20 72 63 32 20 3d 20 73 71 6c 69 74       rc2 = sqlit
302f0 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
30300 74 65 73 74 63 74 72 6c 2c 20 70 2d 3e 64 62 2c  testctrl, p->db,
30310 20 6f 70 74 29 3b 0a 20 20 20 20 20 20 20 20 20   opt);.         
30320 20 20 20 69 73 4f 6b 20 3d 20 33 3b 0a 20 20 20     isOk = 3;.   
30330 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
30340 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20     break;..     
30350 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 74 65     /* sqlite3_te
30360 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74 29 20  st_control(int) 
30370 2a 2f 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  */.        case 
30380 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
30390 50 52 4e 47 5f 53 41 56 45 3a 0a 20 20 20 20 20  PRNG_SAVE:.     
303a0 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54     case SQLITE_T
303b0 45 53 54 43 54 52 4c 5f 50 52 4e 47 5f 52 45 53  ESTCTRL_PRNG_RES
303c0 54 4f 52 45 3a 0a 20 20 20 20 20 20 20 20 63 61  TORE:.        ca
303d0 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  se SQLITE_TESTCT
303e0 52 4c 5f 50 52 4e 47 5f 52 45 53 45 54 3a 0a 20  RL_PRNG_RESET:. 
303f0 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49         case SQLI
30400 54 45 5f 54 45 53 54 43 54 52 4c 5f 42 59 54 45  TE_TESTCTRL_BYTE
30410 4f 52 44 45 52 3a 0a 20 20 20 20 20 20 20 20 20  ORDER:.         
30420 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a   if( nArg==2 ){.
30430 20 20 20 20 20 20 20 20 20 20 20 20 72 63 32 20              rc2 
30440 3d 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  = sqlite3_test_c
30450 6f 6e 74 72 6f 6c 28 74 65 73 74 63 74 72 6c 29  ontrol(testctrl)
30460 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 73  ;.            is
30470 4f 6b 20 3d 20 74 65 73 74 63 74 72 6c 3d 3d 53  Ok = testctrl==S
30480 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 42  QLITE_TESTCTRL_B
30490 59 54 45 4f 52 44 45 52 20 3f 20 31 20 3a 20 33  YTEORDER ? 1 : 3
304a0 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
304b0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a          break;..
304c0 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74          /* sqlit
304d0 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
304e0 69 6e 74 2c 20 75 69 6e 74 29 20 2a 2f 0a 20 20  int, uint) */.  
304f0 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
30500 45 5f 54 45 53 54 43 54 52 4c 5f 50 45 4e 44 49  E_TESTCTRL_PENDI
30510 4e 47 5f 42 59 54 45 3a 0a 20 20 20 20 20 20 20  NG_BYTE:.       
30520 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 33 20 29     if( nArg==3 )
30530 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 6e  {.            un
30540 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 74 20 3d  signed int opt =
30550 20 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 69   (unsigned int)i
30560 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72  ntegerValue(azAr
30570 67 5b 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 20  g[2]);.         
30580 20 20 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33     rc2 = sqlite3
30590 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65  _test_control(te
305a0 73 74 63 74 72 6c 2c 20 6f 70 74 29 3b 0a 20 20  stctrl, opt);.  
305b0 20 20 20 20 20 20 20 20 20 20 69 73 4f 6b 20 3d            isOk =
305c0 20 33 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a   3;.          }.
305d0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
305e0 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c  ..        /* sql
305f0 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
30600 6c 28 69 6e 74 2c 20 69 6e 74 29 20 2a 2f 0a 20  l(int, int) */. 
30610 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49         case SQLI
30620 54 45 5f 54 45 53 54 43 54 52 4c 5f 41 53 53 45  TE_TESTCTRL_ASSE
30630 52 54 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65  RT:.        case
30640 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
30650 5f 41 4c 57 41 59 53 3a 0a 20 20 20 20 20 20 20  _ALWAYS:.       
30660 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 33 20 29     if( nArg==3 )
30670 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  {.            in
30680 74 20 6f 70 74 20 3d 20 62 6f 6f 6c 65 61 6e 56  t opt = booleanV
30690 61 6c 75 65 28 61 7a 41 72 67 5b 32 5d 29 3b 0a  alue(azArg[2]);.
306a0 20 20 20 20 20 20 20 20 20 20 20 20 72 63 32 20              rc2 
306b0 3d 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  = sqlite3_test_c
306c0 6f 6e 74 72 6f 6c 28 74 65 73 74 63 74 72 6c 2c  ontrol(testctrl,
306d0 20 6f 70 74 29 3b 0a 20 20 20 20 20 20 20 20 20   opt);.         
306e0 20 20 20 69 73 4f 6b 20 3d 20 31 3b 0a 20 20 20     isOk = 1;.   
306f0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
30700 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20     break;..     
30710 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 74 65     /* sqlite3_te
30720 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74 2c 20  st_control(int, 
30730 69 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20 20 20  int) */.        
30740 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54  case SQLITE_TEST
30750 43 54 52 4c 5f 4c 4f 43 41 4c 54 49 4d 45 5f 46  CTRL_LOCALTIME_F
30760 41 55 4c 54 3a 0a 20 20 20 20 20 20 20 20 63 61  AULT:.        ca
30770 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  se SQLITE_TESTCT
30780 52 4c 5f 4e 45 56 45 52 5f 43 4f 52 52 55 50 54  RL_NEVER_CORRUPT
30790 3a 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  :.          if( 
307a0 6e 41 72 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20  nArg==3 ){.     
307b0 20 20 20 20 20 20 20 69 6e 74 20 6f 70 74 20 3d         int opt =
307c0 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a   booleanValue(az
307d0 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[2]);.       
307e0 20 20 20 20 20 72 63 32 20 3d 20 73 71 6c 69 74       rc2 = sqlit
307f0 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
30800 74 65 73 74 63 74 72 6c 2c 20 6f 70 74 29 3b 0a  testctrl, opt);.
30810 20 20 20 20 20 20 20 20 20 20 20 20 69 73 4f 6b              isOk
30820 20 3d 20 33 3b 0a 20 20 20 20 20 20 20 20 20 20   = 3;.          
30830 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  }.          brea
30840 6b 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 73  k;..        /* s
30850 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
30860 72 6f 6c 28 69 6e 74 2c 20 63 68 61 72 20 2a 29  rol(int, char *)
30870 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
30880 45 5f 4e 5f 4b 45 59 57 4f 52 44 0a 20 20 20 20  E_N_KEYWORD.    
30890 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
308a0 54 45 53 54 43 54 52 4c 5f 49 53 4b 45 59 57 4f  TESTCTRL_ISKEYWO
308b0 52 44 3a 0a 20 20 20 20 20 20 20 20 20 20 69 66  RD:.          if
308c0 28 20 6e 41 72 67 3d 3d 33 20 29 7b 0a 20 20 20  ( nArg==3 ){.   
308d0 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
308e0 68 61 72 20 2a 6f 70 74 20 3d 20 61 7a 41 72 67  har *opt = azArg
308f0 5b 32 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20  [2];.           
30900 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74   rc2 = sqlite3_t
30910 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74  est_control(test
30920 63 74 72 6c 2c 20 6f 70 74 29 3b 0a 20 20 20 20  ctrl, opt);.    
30930 20 20 20 20 20 20 20 20 69 73 4f 6b 20 3d 20 31          isOk = 1
30940 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
30950 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 23          break;.#
30960 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 20 20 63  endif..        c
30970 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
30980 54 52 4c 5f 49 4d 50 4f 53 54 45 52 3a 0a 20 20  TRL_IMPOSTER:.  
30990 20 20 20 20 20 20 20 20 69 66 28 20 6e 41 72 67          if( nArg
309a0 3d 3d 35 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==5 ){.         
309b0 20 20 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33     rc2 = sqlite3
309c0 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65  _test_control(te
309d0 73 74 63 74 72 6c 2c 20 70 2d 3e 64 62 2c 0a 20  stctrl, p->db,. 
309e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309f0 20 20 20 20 20 20 20 20 20 61 7a 41 72 67 5b 32           azArg[2
30a00 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ],.             
30a10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
30a20 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b  egerValue(azArg[
30a30 33 5d 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  3]),.           
30a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
30a50 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72  ntegerValue(azAr
30a60 67 5b 34 5d 29 29 3b 0a 20 20 20 20 20 20 20 20  g[4]));.        
30a70 20 20 20 20 69 73 4f 6b 20 3d 20 33 3b 0a 20 20      isOk = 3;.  
30a80 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
30a90 20 20 20 20 62 72 65 61 6b 3b 0a 0a 23 69 66 64      break;..#ifd
30aa0 65 66 20 59 59 43 4f 56 45 52 41 47 45 0a 20 20  ef YYCOVERAGE.  
30ab0 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
30ac0 45 5f 54 45 53 54 43 54 52 4c 5f 50 41 52 53 45  E_TESTCTRL_PARSE
30ad0 52 5f 43 4f 56 45 52 41 47 45 3a 0a 20 20 20 20  R_COVERAGE:.    
30ae0 20 20 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d        if( nArg==
30af0 32 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  2 ){.           
30b00 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
30b10 6e 74 72 6f 6c 28 74 65 73 74 63 74 72 6c 2c 20  ntrol(testctrl, 
30b20 70 2d 3e 6f 75 74 29 3b 0a 20 20 20 20 20 20 20  p->out);.       
30b30 20 20 20 20 20 69 73 4f 6b 20 3d 20 33 3b 0a 20       isOk = 3;. 
30b40 20 20 20 20 20 20 20 20 20 7d 0a 23 65 6e 64 69           }.#endi
30b50 66 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  f.      }.    }.
30b60 20 20 20 20 69 66 28 20 69 73 4f 6b 3d 3d 30 20      if( isOk==0 
30b70 26 26 20 69 43 74 72 6c 3e 3d 30 20 29 7b 0a 20  && iCtrl>=0 ){. 
30b80 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
30b90 28 70 2d 3e 6f 75 74 2c 20 22 55 73 61 67 65 3a  (p->out, "Usage:
30ba0 20 2e 74 65 73 74 63 74 72 6c 20 25 73 20 25 73   .testctrl %s %s
30bb0 5c 6e 22 2c 20 7a 43 6d 64 2c 20 61 43 74 72 6c  \n", zCmd, aCtrl
30bc0 5b 69 43 74 72 6c 5d 2e 7a 55 73 61 67 65 29 3b  [iCtrl].zUsage);
30bd0 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
30be0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 69 73 4f     }else if( isO
30bf0 6b 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 72 61  k==1 ){.      ra
30c00 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
30c10 20 22 25 64 5c 6e 22 2c 20 72 63 32 29 3b 0a 20   "%d\n", rc2);. 
30c20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 69 73 4f     }else if( isO
30c30 6b 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 72 61  k==2 ){.      ra
30c40 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
30c50 20 22 30 78 25 30 38 78 5c 6e 22 2c 20 72 63 32   "0x%08x\n", rc2
30c60 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
30c70 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
30c80 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54 45 53  ned(SQLITE_UNTES
30c90 54 41 42 4c 45 29 20 2a 2f 0a 0a 20 20 69 66 28  TABLE) */..  if(
30ca0 20 63 3d 3d 27 74 27 20 26 26 20 6e 3e 34 20 26   c=='t' && n>4 &
30cb0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
30cc0 30 5d 2c 20 22 74 69 6d 65 6f 75 74 22 2c 20 6e  0], "timeout", n
30cd0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 6f 70 65 6e  )==0 ){.    open
30ce0 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 73  _db(p, 0);.    s
30cf0 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65  qlite3_busy_time
30d00 6f 75 74 28 70 2d 3e 64 62 2c 20 6e 41 72 67 3e  out(p->db, nArg>
30d10 3d 32 20 3f 20 28 69 6e 74 29 69 6e 74 65 67 65  =2 ? (int)intege
30d20 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29  rValue(azArg[1])
30d30 20 3a 20 30 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a   : 0);.  }else..
30d40 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26 20    if( c=='t' && 
30d50 6e 3e 3d 35 20 26 26 20 73 74 72 6e 63 6d 70 28  n>=5 && strncmp(
30d60 61 7a 41 72 67 5b 30 5d 2c 20 22 74 69 6d 65 72  azArg[0], "timer
30d70 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
30d80 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20  if( nArg==2 ){. 
30d90 20 20 20 20 20 65 6e 61 62 6c 65 54 69 6d 65 72       enableTimer
30da0 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28   = booleanValue(
30db0 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20  azArg[1]);.     
30dc0 20 69 66 28 20 65 6e 61 62 6c 65 54 69 6d 65 72   if( enableTimer
30dd0 20 26 26 20 21 48 41 53 5f 54 49 4d 45 52 20 29   && !HAS_TIMER )
30de0 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
30df0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
30e00 72 6f 72 3a 20 74 69 6d 65 72 20 6e 6f 74 20 61  ror: timer not a
30e10 76 61 69 6c 61 62 6c 65 20 6f 6e 20 74 68 69 73  vailable on this
30e20 20 73 79 73 74 65 6d 2e 5c 6e 22 29 3b 0a 20 20   system.\n");.  
30e30 20 20 20 20 20 20 65 6e 61 62 6c 65 54 69 6d 65        enableTime
30e40 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  r = 0;.      }. 
30e50 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
30e60 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
30e70 72 2c 20 22 55 73 61 67 65 3a 20 2e 74 69 6d 65  r, "Usage: .time
30e80 72 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20  r on|off\n");.  
30e90 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
30ea0 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
30eb0 20 63 3d 3d 27 74 27 20 26 26 20 73 74 72 6e 63   c=='t' && strnc
30ec0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 74 72  mp(azArg[0], "tr
30ed0 61 63 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ace", n)==0 ){. 
30ee0 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29     open_db(p, 0)
30ef0 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d  ;.    if( nArg!=
30f00 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  2 ){.      raw_p
30f10 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
30f20 73 61 67 65 3a 20 2e 74 72 61 63 65 20 46 49 4c  sage: .trace FIL
30f30 45 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20  E|off\n");.     
30f40 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67   rc = 1;.      g
30f50 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
30f60 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20  _exit;.    }.   
30f70 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f   output_file_clo
30f80 73 65 28 70 2d 3e 74 72 61 63 65 4f 75 74 29 3b  se(p->traceOut);
30f90 0a 20 20 20 20 70 2d 3e 74 72 61 63 65 4f 75 74  .    p->traceOut
30fa0 20 3d 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f 6f   = output_file_o
30fb0 70 65 6e 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 23  pen(azArg[1]);.#
30fc0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
30fd0 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 29 20 26  TE_OMIT_TRACE) &
30fe0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
30ff0 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
31000 50 4f 49 4e 54 29 0a 20 20 20 20 69 66 28 20 70  POINT).    if( p
31010 2d 3e 74 72 61 63 65 4f 75 74 3d 3d 30 20 29 7b  ->traceOut==0 ){
31020 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74  .      sqlite3_t
31030 72 61 63 65 5f 76 32 28 70 2d 3e 64 62 2c 20 30  race_v2(p->db, 0
31040 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 7d 65 6c  , 0, 0);.    }el
31050 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  se{.      sqlite
31060 33 5f 74 72 61 63 65 5f 76 32 28 70 2d 3e 64 62  3_trace_v2(p->db
31070 2c 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 53  , SQLITE_TRACE_S
31080 54 4d 54 2c 20 73 71 6c 5f 74 72 61 63 65 5f 63  TMT, sql_trace_c
31090 61 6c 6c 62 61 63 6b 2c 70 2d 3e 74 72 61 63 65  allback,p->trace
310a0 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  Out);.    }.#end
310b0 69 66 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 20  if.  }else..#if 
310c0 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
310d0 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 69 66 28  ENTICATION.  if(
310e0 20 63 3d 3d 27 75 27 20 26 26 20 73 74 72 6e 63   c=='u' && strnc
310f0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 75 73  mp(azArg[0], "us
31100 65 72 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  er", n)==0 ){.  
31110 20 20 69 66 28 20 6e 41 72 67 3c 32 20 29 7b 0a    if( nArg<2 ){.
31120 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
31130 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
31140 20 2e 75 73 65 72 20 53 55 42 43 4f 4d 4d 41 4e   .user SUBCOMMAN
31150 44 20 2e 2e 2e 5c 6e 22 29 3b 0a 20 20 20 20 20  D ...\n");.     
31160 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67   rc = 1;.      g
31170 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
31180 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20  _exit;.    }.   
31190 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a   open_db(p, 0);.
311a0 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61      if( strcmp(a
311b0 7a 41 72 67 5b 31 5d 2c 22 6c 6f 67 69 6e 22 29  zArg[1],"login")
311c0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
311d0 20 6e 41 72 67 21 3d 34 20 29 7b 0a 20 20 20 20   nArg!=4 ){.    
311e0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
311f0 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
31200 75 73 65 72 20 6c 6f 67 69 6e 20 55 53 45 52 20  user login USER 
31210 50 41 53 53 57 4f 52 44 5c 6e 22 29 3b 0a 20 20  PASSWORD\n");.  
31220 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
31230 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
31240 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
31250 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63 20 3d      }.      rc =
31260 20 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 61 75   sqlite3_user_au
31270 74 68 65 6e 74 69 63 61 74 65 28 70 2d 3e 64 62  thenticate(p->db
31280 2c 20 61 7a 41 72 67 5b 32 5d 2c 20 61 7a 41 72  , azArg[2], azAr
31290 67 5b 33 5d 2c 0a 20 20 20 20 20 20 20 20 20 20  g[3],.          
312a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312b0 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73            (int)s
312c0 74 72 6c 65 6e 28 61 7a 41 72 67 5b 33 5d 29 29  trlen(azArg[3]))
312d0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 20 29  ;.      if( rc )
312e0 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  {.        utf8_p
312f0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 41  rintf(stderr, "A
31300 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61  uthentication fa
31310 69 6c 65 64 20 66 6f 72 20 75 73 65 72 20 25 73  iled for user %s
31320 5c 6e 22 2c 20 61 7a 41 72 67 5b 32 5d 29 3b 0a  \n", azArg[2]);.
31330 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
31340 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
31350 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 41  e if( strcmp(azA
31360 72 67 5b 31 5d 2c 22 61 64 64 22 29 3d 3d 30 20  rg[1],"add")==0 
31370 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 41 72  ){.      if( nAr
31380 67 21 3d 35 20 29 7b 0a 20 20 20 20 20 20 20 20  g!=5 ){.        
31390 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
313a0 72 2c 20 22 55 73 61 67 65 3a 20 2e 75 73 65 72  r, "Usage: .user
313b0 20 61 64 64 20 55 53 45 52 20 50 41 53 53 57 4f   add USER PASSWO
313c0 52 44 20 49 53 41 44 4d 49 4e 5c 6e 22 29 3b 0a  RD ISADMIN\n");.
313d0 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
313e0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74          goto met
313f0 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a  a_command_exit;.
31400 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63        }.      rc
31410 20 3d 20 73 71 6c 69 74 65 33 5f 75 73 65 72 5f   = sqlite3_user_
31420 61 64 64 28 70 2d 3e 64 62 2c 20 61 7a 41 72 67  add(p->db, azArg
31430 5b 32 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20  [2],.           
31440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31450 20 61 7a 41 72 67 5b 33 5d 2c 20 28 69 6e 74 29   azArg[3], (int)
31460 73 74 72 6c 65 6e 28 61 7a 41 72 67 5b 33 5d 29  strlen(azArg[3])
31470 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
31480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
31490 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67  oleanValue(azArg
314a0 5b 34 5d 29 29 3b 0a 20 20 20 20 20 20 69 66 28  [4]));.      if(
314b0 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 72   rc ){.        r
314c0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
314d0 2c 20 22 55 73 65 72 2d 41 64 64 20 66 61 69 6c  , "User-Add fail
314e0 65 64 3a 20 25 64 5c 6e 22 2c 20 72 63 29 3b 0a  ed: %d\n", rc);.
314f0 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
31500 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
31510 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 41  e if( strcmp(azA
31520 72 67 5b 31 5d 2c 22 65 64 69 74 22 29 3d 3d 30  rg[1],"edit")==0
31530 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 41   ){.      if( nA
31540 72 67 21 3d 35 20 29 7b 0a 20 20 20 20 20 20 20  rg!=5 ){.       
31550 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
31560 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 75 73 65  rr, "Usage: .use
31570 72 20 65 64 69 74 20 55 53 45 52 20 50 41 53 53  r edit USER PASS
31580 57 4f 52 44 20 49 53 41 44 4d 49 4e 5c 6e 22 29  WORD ISADMIN\n")
31590 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31  ;.        rc = 1
315a0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d  ;.        goto m
315b0 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
315c0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
315d0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 75 73 65  rc = sqlite3_use
315e0 72 5f 63 68 61 6e 67 65 28 70 2d 3e 64 62 2c 20  r_change(p->db, 
315f0 61 7a 41 72 67 5b 32 5d 2c 0a 20 20 20 20 20 20  azArg[2],.      
31600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31610 20 20 20 20 20 20 20 20 61 7a 41 72 67 5b 33 5d          azArg[3]
31620 2c 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 61 7a  , (int)strlen(az
31630 41 72 67 5b 33 5d 29 2c 0a 20 20 20 20 20 20 20  Arg[3]),.       
31640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31650 20 20 20 20 20 20 20 62 6f 6f 6c 65 61 6e 56 61         booleanVa
31660 6c 75 65 28 61 7a 41 72 67 5b 34 5d 29 29 3b 0a  lue(azArg[4]));.
31670 20 20 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a        if( rc ){.
31680 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
31690 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 65 72  tf(stderr, "User
316a0 2d 45 64 69 74 20 66 61 69 6c 65 64 3a 20 25 64  -Edit failed: %d
316b0 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20 20  \n", rc);.      
316c0 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20    rc = 1;.      
316d0 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  }.    }else if( 
316e0 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c  strcmp(azArg[1],
316f0 22 64 65 6c 65 74 65 22 29 3d 3d 30 20 29 7b 0a  "delete")==0 ){.
31700 20 20 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d        if( nArg!=
31710 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  3 ){.        raw
31720 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
31730 22 55 73 61 67 65 3a 20 2e 75 73 65 72 20 64 65  "Usage: .user de
31740 6c 65 74 65 20 55 53 45 52 5c 6e 22 29 3b 0a 20  lete USER\n");. 
31750 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
31760 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
31770 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
31780 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63 20       }.      rc 
31790 3d 20 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64  = sqlite3_user_d
317a0 65 6c 65 74 65 28 70 2d 3e 64 62 2c 20 61 7a 41  elete(p->db, azA
317b0 72 67 5b 32 5d 29 3b 0a 20 20 20 20 20 20 69 66  rg[2]);.      if
317c0 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20  ( rc ){.        
317d0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
317e0 72 2c 20 22 55 73 65 72 2d 44 65 6c 65 74 65 20  r, "User-Delete 
317f0 66 61 69 6c 65 64 3a 20 25 64 5c 6e 22 2c 20 72  failed: %d\n", r
31800 63 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  c);.        rc =
31810 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   1;.      }.    
31820 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77  }else{.      raw
31830 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
31840 22 55 73 61 67 65 3a 20 2e 75 73 65 72 20 6c 6f  "Usage: .user lo
31850 67 69 6e 7c 61 64 64 7c 65 64 69 74 7c 64 65 6c  gin|add|edit|del
31860 65 74 65 20 2e 2e 2e 5c 6e 22 29 3b 0a 20 20 20  ete ...\n");.   
31870 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
31880 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61   goto meta_comma
31890 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20  nd_exit;.    }. 
318a0 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a   }else.#endif /*
318b0 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
318c0 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a  HENTICATION */..
318d0 20 20 69 66 28 20 63 3d 3d 27 76 27 20 26 26 20    if( c=='v' && 
318e0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
318f0 2c 20 22 76 65 72 73 69 6f 6e 22 2c 20 6e 29 3d  , "version", n)=
31900 3d 30 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70  =0 ){.    utf8_p
31910 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 53  rintf(p->out, "S
31920 51 4c 69 74 65 20 25 73 20 25 73 5c 6e 22 20 2f  QLite %s %s\n" /
31930 2a 65 78 74 72 61 2d 76 65 72 73 69 6f 6e 2d 69  *extra-version-i
31940 6e 66 6f 2a 2f 2c 0a 20 20 20 20 20 20 20 20 73  nfo*/,.        s
31950 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f  qlite3_libversio
31960 6e 28 29 2c 20 73 71 6c 69 74 65 33 5f 73 6f 75  n(), sqlite3_sou
31970 72 63 65 69 64 28 29 29 3b 0a 20 20 7d 65 6c 73  rceid());.  }els
31980 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 76 27 20  e..  if( c=='v' 
31990 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
319a0 5b 30 5d 2c 20 22 76 66 73 69 6e 66 6f 22 2c 20  [0], "vfsinfo", 
319b0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e  n)==0 ){.    con
319c0 73 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65  st char *zDbName
319d0 20 3d 20 6e 41 72 67 3d 3d 32 20 3f 20 61 7a 41   = nArg==2 ? azA
319e0 72 67 5b 31 5d 20 3a 20 22 6d 61 69 6e 22 3b 0a  rg[1] : "main";.
319f0 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20      sqlite3_vfs 
31a00 2a 70 56 66 73 20 3d 20 30 3b 0a 20 20 20 20 69  *pVfs = 0;.    i
31a10 66 28 20 70 2d 3e 64 62 20 29 7b 0a 20 20 20 20  f( p->db ){.    
31a20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63    sqlite3_file_c
31a30 6f 6e 74 72 6f 6c 28 70 2d 3e 64 62 2c 20 7a 44  ontrol(p->db, zD
31a40 62 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43  bName, SQLITE_FC
31a50 4e 54 4c 5f 56 46 53 5f 50 4f 49 4e 54 45 52 2c  NTL_VFS_POINTER,
31a60 20 26 70 56 66 73 29 3b 0a 20 20 20 20 20 20 69   &pVfs);.      i
31a70 66 28 20 70 56 66 73 20 29 7b 0a 20 20 20 20 20  f( pVfs ){.     
31a80 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
31a90 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 7a 4e 61 6d  ->out, "vfs.zNam
31aa0 65 20 20 20 20 20 20 3d 20 5c 22 25 73 5c 22 5c  e      = \"%s\"\
31ab0 6e 22 2c 20 70 56 66 73 2d 3e 7a 4e 61 6d 65 29  n", pVfs->zName)
31ac0 3b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  ;.        raw_pr
31ad0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76 66  intf(p->out, "vf
31ae0 73 2e 69 56 65 72 73 69 6f 6e 20 20 20 3d 20 25  s.iVersion   = %
31af0 64 5c 6e 22 2c 20 70 56 66 73 2d 3e 69 56 65 72  d\n", pVfs->iVer
31b00 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20 72  sion);.        r
31b10 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
31b20 2c 20 22 76 66 73 2e 73 7a 4f 73 46 69 6c 65 20  , "vfs.szOsFile 
31b30 20 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73 2d    = %d\n", pVfs-
31b40 3e 73 7a 4f 73 46 69 6c 65 29 3b 0a 20 20 20 20  >szOsFile);.    
31b50 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
31b60 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 6d 78 50 61  ->out, "vfs.mxPa
31b70 74 68 6e 61 6d 65 20 3d 20 25 64 5c 6e 22 2c 20  thname = %d\n", 
31b80 70 56 66 73 2d 3e 6d 78 50 61 74 68 6e 61 6d 65  pVfs->mxPathname
31b90 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
31ba0 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
31bb0 63 3d 3d 27 76 27 20 26 26 20 73 74 72 6e 63 6d  c=='v' && strncm
31bc0 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 76 66 73  p(azArg[0], "vfs
31bd0 6c 69 73 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  list", n)==0 ){.
31be0 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20      sqlite3_vfs 
31bf0 2a 70 56 66 73 3b 0a 20 20 20 20 73 71 6c 69 74  *pVfs;.    sqlit
31c00 65 33 5f 76 66 73 20 2a 70 43 75 72 72 65 6e 74  e3_vfs *pCurrent
31c10 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70 2d   = 0;.    if( p-
31c20 3e 64 62 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  >db ){.      sql
31c30 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
31c40 6c 28 70 2d 3e 64 62 2c 20 22 6d 61 69 6e 22 2c  l(p->db, "main",
31c50 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 56 46   SQLITE_FCNTL_VF
31c60 53 5f 50 4f 49 4e 54 45 52 2c 20 26 70 43 75 72  S_POINTER, &pCur
31c70 72 65 6e 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20  rent);.    }.   
31c80 20 66 6f 72 28 70 56 66 73 3d 73 71 6c 69 74 65   for(pVfs=sqlite
31c90 33 5f 76 66 73 5f 66 69 6e 64 28 30 29 3b 20 70  3_vfs_find(0); p
31ca0 56 66 73 3b 20 70 56 66 73 3d 70 56 66 73 2d 3e  Vfs; pVfs=pVfs->
31cb0 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 75 74  pNext){.      ut
31cc0 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
31cd0 2c 20 22 76 66 73 2e 7a 4e 61 6d 65 20 20 20 20  , "vfs.zName    
31ce0 20 20 3d 20 5c 22 25 73 5c 22 25 73 5c 6e 22 2c    = \"%s\"%s\n",
31cf0 20 70 56 66 73 2d 3e 7a 4e 61 6d 65 2c 0a 20 20   pVfs->zName,.  
31d00 20 20 20 20 20 20 20 20 20 70 56 66 73 3d 3d 70           pVfs==p
31d10 43 75 72 72 65 6e 74 20 3f 20 22 20 20 3c 2d 2d  Current ? "  <--
31d20 2d 20 43 55 52 52 45 4e 54 22 20 3a 20 22 22 29  - CURRENT" : "")
31d30 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  ;.      raw_prin
31d40 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76 66 73 2e  tf(p->out, "vfs.
31d50 69 56 65 72 73 69 6f 6e 20 20 20 3d 20 25 64 5c  iVersion   = %d\
31d60 6e 22 2c 20 70 56 66 73 2d 3e 69 56 65 72 73 69  n", pVfs->iVersi
31d70 6f 6e 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70  on);.      raw_p
31d80 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76  rintf(p->out, "v
31d90 66 73 2e 73 7a 4f 73 46 69 6c 65 20 20 20 3d 20  fs.szOsFile   = 
31da0 25 64 5c 6e 22 2c 20 70 56 66 73 2d 3e 73 7a 4f  %d\n", pVfs->szO
31db0 73 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 72 61  sFile);.      ra
31dc0 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
31dd0 20 22 76 66 73 2e 6d 78 50 61 74 68 6e 61 6d 65   "vfs.mxPathname
31de0 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73 2d 3e   = %d\n", pVfs->
31df0 6d 78 50 61 74 68 6e 61 6d 65 29 3b 0a 20 20 20  mxPathname);.   
31e00 20 20 20 69 66 28 20 70 56 66 73 2d 3e 70 4e 65     if( pVfs->pNe
31e10 78 74 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  xt ){.        ra
31e20 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
31e30 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   "--------------
31e40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
31e50 2d 2d 2d 2d 2d 5c 6e 22 29 3b 0a 20 20 20 20 20  -----\n");.     
31e60 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
31e70 0a 0a 20 20 69 66 28 20 63 3d 3d 27 76 27 20 26  ..  if( c=='v' &
31e80 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
31e90 30 5d 2c 20 22 76 66 73 6e 61 6d 65 22 2c 20 6e  0], "vfsname", n
31ea0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73  )==0 ){.    cons
31eb0 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65 20  t char *zDbName 
31ec0 3d 20 6e 41 72 67 3d 3d 32 20 3f 20 61 7a 41 72  = nArg==2 ? azAr
31ed0 67 5b 31 5d 20 3a 20 22 6d 61 69 6e 22 3b 0a 20  g[1] : "main";. 
31ee0 20 20 20 63 68 61 72 20 2a 7a 56 66 73 4e 61 6d     char *zVfsNam
31ef0 65 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70  e = 0;.    if( p
31f00 2d 3e 64 62 20 29 7b 0a 20 20 20 20 20 20 73 71  ->db ){.      sq
31f10 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
31f20 6f 6c 28 70 2d 3e 64 62 2c 20 7a 44 62 4e 61 6d  ol(p->db, zDbNam
31f30 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  e, SQLITE_FCNTL_
31f40 56 46 53 4e 41 4d 45 2c 20 26 7a 56 66 73 4e 61  VFSNAME, &zVfsNa
31f50 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  me);.      if( z
31f60 56 66 73 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20  VfsName ){.     
31f70 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
31f80 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e 22 2c 20 7a  ->out, "%s\n", z
31f90 56 66 73 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  VfsName);.      
31fa0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
31fb0 56 66 73 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  VfsName);.      
31fc0 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  }.    }.  }else.
31fd0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
31fe0 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64 65  ITE_DEBUG) && de
31ff0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
32000 42 4c 45 5f 57 48 45 52 45 54 52 41 43 45 29 0a  BLE_WHERETRACE).
32010 20 20 69 66 28 20 63 3d 3d 27 77 27 20 26 26 20    if( c=='w' && 
32020 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
32030 2c 20 22 77 68 65 72 65 74 72 61 63 65 22 2c 20  , "wheretrace", 
32040 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  n)==0 ){.    sql
32050 69 74 65 33 57 68 65 72 65 54 72 61 63 65 20 3d  ite3WhereTrace =
32060 20 6e 41 72 67 3e 3d 32 20 3f 20 62 6f 6f 6c 65   nArg>=2 ? boole
32070 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d  anValue(azArg[1]
32080 29 20 3a 20 30 78 66 66 3b 0a 20 20 7d 65 6c 73  ) : 0xff;.  }els
32090 65 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20  e.#endif..  if( 
320a0 63 3d 3d 27 77 27 20 26 26 20 73 74 72 6e 63 6d  c=='w' && strncm
320b0 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 77 69 64  p(azArg[0], "wid
320c0 74 68 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  th", n)==0 ){.  
320d0 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 61 73 73    int j;.    ass
320e0 65 72 74 28 20 6e 41 72 67 3c 3d 41 72 72 61 79  ert( nArg<=Array
320f0 53 69 7a 65 28 61 7a 41 72 67 29 20 29 3b 0a 20  Size(azArg) );. 
32100 20 20 20 66 6f 72 28 6a 3d 31 3b 20 6a 3c 6e 41     for(j=1; j<nA
32110 72 67 20 26 26 20 6a 3c 41 72 72 61 79 53 69 7a  rg && j<ArraySiz
32120 65 28 70 2d 3e 63 6f 6c 57 69 64 74 68 29 3b 20  e(p->colWidth); 
32130 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 70 2d 3e 63  j++){.      p->c
32140 6f 6c 57 69 64 74 68 5b 6a 2d 31 5d 20 3d 20 28  olWidth[j-1] = (
32150 69 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75 65  int)integerValue
32160 28 61 7a 41 72 67 5b 6a 5d 29 3b 0a 20 20 20 20  (azArg[j]);.    
32170 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 7b 0a 20  }.  }else..  {. 
32180 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
32190 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 75  tderr, "Error: u
321a0 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d 61 6e 64 20 6f  nknown command o
321b0 72 20 69 6e 76 61 6c 69 64 20 61 72 67 75 6d 65  r invalid argume
321c0 6e 74 73 3a 20 22 0a 20 20 20 20 20 20 22 20 5c  nts: ".      " \
321d0 22 25 73 5c 22 2e 20 45 6e 74 65 72 20 5c 22 2e  "%s\". Enter \".
321e0 68 65 6c 70 5c 22 20 66 6f 72 20 68 65 6c 70 5c  help\" for help\
321f0 6e 22 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a 20  n", azArg[0]);. 
32200 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 7d 0a 0a     rc = 1;.  }..
32210 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
32220 74 3a 0a 20 20 69 66 28 20 70 2d 3e 6f 75 74 43  t:.  if( p->outC
32230 6f 75 6e 74 20 29 7b 0a 20 20 20 20 70 2d 3e 6f  ount ){.    p->o
32240 75 74 43 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 69  utCount--;.    i
32250 66 28 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 3d 3d  f( p->outCount==
32260 30 20 29 20 6f 75 74 70 75 74 5f 72 65 73 65 74  0 ) output_reset
32270 28 70 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  (p);.  }.  retur
32280 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  n rc;.}../*.** R
32290 65 74 75 72 6e 20 54 52 55 45 20 69 66 20 61 20  eturn TRUE if a 
322a0 73 65 6d 69 63 6f 6c 6f 6e 20 6f 63 63 75 72 73  semicolon occurs
322b0 20 61 6e 79 77 68 65 72 65 20 69 6e 20 74 68 65   anywhere in the
322c0 20 66 69 72 73 74 20 4e 20 63 68 61 72 61 63 74   first N charact
322d0 65 72 73 0a 2a 2a 20 6f 66 20 73 74 72 69 6e 67  ers.** of string
322e0 20 7a 5b 5d 2e 0a 2a 2f 0a 73 74 61 74 69 63 20   z[]..*/.static 
322f0 69 6e 74 20 6c 69 6e 65 5f 63 6f 6e 74 61 69 6e  int line_contain
32300 73 5f 73 65 6d 69 63 6f 6c 6f 6e 28 63 6f 6e 73  s_semicolon(cons
32310 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 4e  t char *z, int N
32320 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f  ){.  int i;.  fo
32330 72 28 69 3d 30 3b 20 69 3c 4e 3b 20 69 2b 2b 29  r(i=0; i<N; i++)
32340 7b 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 3b 27  {  if( z[i]==';'
32350 20 29 20 72 65 74 75 72 6e 20 31 3b 20 7d 0a 20   ) return 1; }. 
32360 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a   return 0;.}../*
32370 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
32380 69 66 20 61 20 6c 69 6e 65 20 63 6f 6e 73 69 73  if a line consis
32390 74 73 20 65 6e 74 69 72 65 6c 79 20 6f 66 20 77  ts entirely of w
323a0 68 69 74 65 73 70 61 63 65 2e 0a 2a 2f 0a 73 74  hitespace..*/.st
323b0 61 74 69 63 20 69 6e 74 20 5f 61 6c 6c 5f 77 68  atic int _all_wh
323c0 69 74 65 73 70 61 63 65 28 63 6f 6e 73 74 20 63  itespace(const c
323d0 68 61 72 20 2a 7a 29 7b 0a 20 20 66 6f 72 28 3b  har *z){.  for(;
323e0 20 2a 7a 3b 20 7a 2b 2b 29 7b 0a 20 20 20 20 69   *z; z++){.    i
323f0 66 28 20 49 73 53 70 61 63 65 28 7a 5b 30 5d 29  f( IsSpace(z[0])
32400 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
32410 20 69 66 28 20 2a 7a 3d 3d 27 2f 27 20 26 26 20   if( *z=='/' && 
32420 7a 5b 31 5d 3d 3d 27 2a 27 20 29 7b 0a 20 20 20  z[1]=='*' ){.   
32430 20 20 20 7a 20 2b 3d 20 32 3b 0a 20 20 20 20 20     z += 2;.     
32440 20 77 68 69 6c 65 28 20 2a 7a 20 26 26 20 28 2a   while( *z && (*
32450 7a 21 3d 27 2a 27 20 7c 7c 20 7a 5b 31 5d 21 3d  z!='*' || z[1]!=
32460 27 2f 27 29 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20  '/') ){ z++; }. 
32470 20 20 20 20 20 69 66 28 20 2a 7a 3d 3d 30 20 29       if( *z==0 )
32480 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20   return 0;.     
32490 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 63 6f 6e 74   z++;.      cont
324a0 69 6e 75 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20  inue;.    }.    
324b0 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 26 26 20 7a  if( *z=='-' && z
324c0 5b 31 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  [1]=='-' ){.    
324d0 20 20 7a 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20    z += 2;.      
324e0 77 68 69 6c 65 28 20 2a 7a 20 26 26 20 2a 7a 21  while( *z && *z!
324f0 3d 27 5c 6e 27 20 29 7b 20 7a 2b 2b 3b 20 7d 0a  ='\n' ){ z++; }.
32500 20 20 20 20 20 20 69 66 28 20 2a 7a 3d 3d 30 20        if( *z==0 
32510 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20  ) return 1;.    
32520 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20    continue;.    
32530 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  }.    return 0;.
32540 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a    }.  return 1;.
32550 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
32560 54 52 55 45 20 69 66 20 74 68 65 20 6c 69 6e 65  TRUE if the line
32570 20 74 79 70 65 64 20 69 6e 20 69 73 20 61 6e 20   typed in is an 
32580 53 51 4c 20 63 6f 6d 6d 61 6e 64 20 74 65 72 6d  SQL command term
32590 69 6e 61 74 6f 72 20 6f 74 68 65 72 0a 2a 2a 20  inator other.** 
325a0 74 68 61 6e 20 61 20 73 65 6d 69 2d 63 6f 6c 6f  than a semi-colo
325b0 6e 2e 20 20 54 68 65 20 53 51 4c 20 53 65 72 76  n.  The SQL Serv
325c0 65 72 20 73 74 79 6c 65 20 22 67 6f 22 20 63 6f  er style "go" co
325d0 6d 6d 61 6e 64 20 69 73 20 75 6e 64 65 72 73 74  mmand is underst
325e0 6f 6f 64 0a 2a 2a 20 61 73 20 69 73 20 74 68 65  ood.** as is the
325f0 20 4f 72 61 63 6c 65 20 22 2f 22 2e 0a 2a 2f 0a   Oracle "/"..*/.
32600 73 74 61 74 69 63 20 69 6e 74 20 6c 69 6e 65 5f  static int line_
32610 69 73 5f 63 6f 6d 6d 61 6e 64 5f 74 65 72 6d 69  is_command_termi
32620 6e 61 74 6f 72 28 63 6f 6e 73 74 20 63 68 61 72  nator(const char
32630 20 2a 7a 4c 69 6e 65 29 7b 0a 20 20 77 68 69 6c   *zLine){.  whil
32640 65 28 20 49 73 53 70 61 63 65 28 7a 4c 69 6e 65  e( IsSpace(zLine
32650 5b 30 5d 29 20 29 7b 20 7a 4c 69 6e 65 2b 2b 3b  [0]) ){ zLine++;
32660 20 7d 3b 0a 20 20 69 66 28 20 7a 4c 69 6e 65 5b   };.  if( zLine[
32670 30 5d 3d 3d 27 2f 27 20 26 26 20 5f 61 6c 6c 5f  0]=='/' && _all_
32680 77 68 69 74 65 73 70 61 63 65 28 26 7a 4c 69 6e  whitespace(&zLin
32690 65 5b 31 5d 29 20 29 7b 0a 20 20 20 20 72 65 74  e[1]) ){.    ret
326a0 75 72 6e 20 31 3b 20 20 2f 2a 20 4f 72 61 63 6c  urn 1;  /* Oracl
326b0 65 20 2a 2f 0a 20 20 7d 0a 20 20 69 66 28 20 54  e */.  }.  if( T
326c0 6f 4c 6f 77 65 72 28 7a 4c 69 6e 65 5b 30 5d 29  oLower(zLine[0])
326d0 3d 3d 27 67 27 20 26 26 20 54 6f 4c 6f 77 65 72  =='g' && ToLower
326e0 28 7a 4c 69 6e 65 5b 31 5d 29 3d 3d 27 6f 27 0a  (zLine[1])=='o'.
326f0 20 20 20 20 20 20 20 20 20 26 26 20 5f 61 6c 6c           && _all
32700 5f 77 68 69 74 65 73 70 61 63 65 28 26 7a 4c 69  _whitespace(&zLi
32710 6e 65 5b 32 5d 29 20 29 7b 0a 20 20 20 20 72 65  ne[2]) ){.    re
32720 74 75 72 6e 20 31 3b 20 20 2f 2a 20 53 51 4c 20  turn 1;  /* SQL 
32730 53 65 72 76 65 72 20 2a 2f 0a 20 20 7d 0a 20 20  Server */.  }.  
32740 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a  return 0;.}../*.
32750 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
32760 66 20 7a 53 71 6c 20 69 73 20 61 20 63 6f 6d 70  f zSql is a comp
32770 6c 65 74 65 20 53 51 4c 20 73 74 61 74 65 6d 65  lete SQL stateme
32780 6e 74 2e 20 20 52 65 74 75 72 6e 20 66 61 6c 73  nt.  Return fals
32790 65 20 69 66 20 69 74 0a 2a 2a 20 65 6e 64 73 20  e if it.** ends 
327a0 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66  in the middle of
327b0 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61   a string litera
327c0 6c 20 6f 72 20 43 2d 73 74 79 6c 65 20 63 6f 6d  l or C-style com
327d0 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ment..*/.static 
327e0 69 6e 74 20 6c 69 6e 65 5f 69 73 5f 63 6f 6d 70  int line_is_comp
327f0 6c 65 74 65 28 63 68 61 72 20 2a 7a 53 71 6c 2c  lete(char *zSql,
32800 20 69 6e 74 20 6e 53 71 6c 29 7b 0a 20 20 69 6e   int nSql){.  in
32810 74 20 72 63 3b 0a 20 20 69 66 28 20 7a 53 71 6c  t rc;.  if( zSql
32820 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  ==0 ) return 1;.
32830 20 20 7a 53 71 6c 5b 6e 53 71 6c 5d 20 3d 20 27    zSql[nSql] = '
32840 3b 27 3b 0a 20 20 7a 53 71 6c 5b 6e 53 71 6c 2b  ;';.  zSql[nSql+
32850 31 5d 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73  1] = 0;.  rc = s
32860 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 28  qlite3_complete(
32870 7a 53 71 6c 29 3b 0a 20 20 7a 53 71 6c 5b 6e 53  zSql);.  zSql[nS
32880 71 6c 5d 20 3d 20 30 3b 0a 20 20 72 65 74 75 72  ql] = 0;.  retur
32890 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  n rc;.}../*.** R
328a0 75 6e 20 61 20 73 69 6e 67 6c 65 20 6c 69 6e 65  un a single line
328b0 20 6f 66 20 53 51 4c 0a 2a 2f 0a 73 74 61 74 69   of SQL.*/.stati
328c0 63 20 69 6e 74 20 72 75 6e 4f 6e 65 53 71 6c 4c  c int runOneSqlL
328d0 69 6e 65 28 53 68 65 6c 6c 53 74 61 74 65 20 2a  ine(ShellState *
328e0 70 2c 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20 46  p, char *zSql, F
328f0 49 4c 45 20 2a 69 6e 2c 20 69 6e 74 20 73 74 61  ILE *in, int sta
32900 72 74 6c 69 6e 65 29 7b 0a 20 20 69 6e 74 20 72  rtline){.  int r
32910 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  c;.  char *zErrM
32920 73 67 20 3d 20 30 3b 0a 0a 20 20 6f 70 65 6e 5f  sg = 0;..  open_
32930 64 62 28 70 2c 20 30 29 3b 0a 20 20 69 66 28 20  db(p, 0);.  if( 
32940 53 68 65 6c 6c 48 61 73 46 6c 61 67 28 70 2c 53  ShellHasFlag(p,S
32950 48 46 4c 47 5f 42 61 63 6b 73 6c 61 73 68 29 20  HFLG_Backslash) 
32960 29 20 72 65 73 6f 6c 76 65 5f 62 61 63 6b 73 6c  ) resolve_backsl
32970 61 73 68 65 73 28 7a 53 71 6c 29 3b 0a 20 20 42  ashes(zSql);.  B
32980 45 47 49 4e 5f 54 49 4d 45 52 3b 0a 20 20 72 63  EGIN_TIMER;.  rc
32990 20 3d 20 73 68 65 6c 6c 5f 65 78 65 63 28 70 2d   = shell_exec(p-
329a0 3e 64 62 2c 20 7a 53 71 6c 2c 20 73 68 65 6c 6c  >db, zSql, shell
329b0 5f 63 61 6c 6c 62 61 63 6b 2c 20 70 2c 20 26 7a  _callback, p, &z
329c0 45 72 72 4d 73 67 29 3b 0a 20 20 45 4e 44 5f 54  ErrMsg);.  END_T
329d0 49 4d 45 52 3b 0a 20 20 69 66 28 20 72 63 20 7c  IMER;.  if( rc |
329e0 7c 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20  | zErrMsg ){.   
329f0 20 63 68 61 72 20 7a 50 72 65 66 69 78 5b 31 30   char zPrefix[10
32a00 30 5d 3b 0a 20 20 20 20 69 66 28 20 69 6e 21 3d  0];.    if( in!=
32a10 30 20 7c 7c 20 21 73 74 64 69 6e 5f 69 73 5f 69  0 || !stdin_is_i
32a20 6e 74 65 72 61 63 74 69 76 65 20 29 7b 0a 20 20  nteractive ){.  
32a30 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
32a40 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 50 72 65  intf(sizeof(zPre
32a50 66 69 78 29 2c 20 7a 50 72 65 66 69 78 2c 0a 20  fix), zPrefix,. 
32a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a70 20 20 20 20 20 20 22 45 72 72 6f 72 3a 20 6e 65        "Error: ne
32a80 61 72 20 6c 69 6e 65 20 25 64 3a 22 2c 20 73 74  ar line %d:", st
32a90 61 72 74 6c 69 6e 65 29 3b 0a 20 20 20 20 7d 65  artline);.    }e
32aa0 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
32ab0 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
32ac0 6f 66 28 7a 50 72 65 66 69 78 29 2c 20 7a 50 72  of(zPrefix), zPr
32ad0 65 66 69 78 2c 20 22 45 72 72 6f 72 3a 22 29 3b  efix, "Error:");
32ae0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a  .    }.    if( z
32af0 45 72 72 4d 73 67 21 3d 30 20 29 7b 0a 20 20 20  ErrMsg!=0 ){.   
32b00 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
32b10 74 64 65 72 72 2c 20 22 25 73 20 25 73 5c 6e 22  tderr, "%s %s\n"
32b20 2c 20 7a 50 72 65 66 69 78 2c 20 7a 45 72 72 4d  , zPrefix, zErrM
32b30 73 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  sg);.      sqlit
32b40 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29  e3_free(zErrMsg)
32b50 3b 0a 20 20 20 20 20 20 7a 45 72 72 4d 73 67 20  ;.      zErrMsg 
32b60 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 0;.    }else{.
32b70 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
32b80 66 28 73 74 64 65 72 72 2c 20 22 25 73 20 25 73  f(stderr, "%s %s
32b90 5c 6e 22 2c 20 7a 50 72 65 66 69 78 2c 20 73 71  \n", zPrefix, sq
32ba0 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e  lite3_errmsg(p->
32bb0 64 62 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  db));.    }.    
32bc0 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 65 6c 73  return 1;.  }els
32bd0 65 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46 6c  e if( ShellHasFl
32be0 61 67 28 70 2c 20 53 48 46 4c 47 5f 43 6f 75 6e  ag(p, SHFLG_Coun
32bf0 74 43 68 61 6e 67 65 73 29 20 29 7b 0a 20 20 20  tChanges) ){.   
32c00 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
32c10 75 74 2c 20 22 63 68 61 6e 67 65 73 3a 20 25 33  ut, "changes: %3
32c20 64 20 20 20 74 6f 74 61 6c 5f 63 68 61 6e 67 65  d   total_change
32c30 73 3a 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20  s: %d\n",.      
32c40 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 68        sqlite3_ch
32c50 61 6e 67 65 73 28 70 2d 3e 64 62 29 2c 20 73 71  anges(p->db), sq
32c60 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
32c70 67 65 73 28 70 2d 3e 64 62 29 29 3b 0a 20 20 7d  ges(p->db));.  }
32c80 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
32c90 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 69 6e 70 75  ./*.** Read inpu
32ca0 74 20 66 72 6f 6d 20 2a 69 6e 20 61 6e 64 20 70  t from *in and p
32cb0 72 6f 63 65 73 73 20 69 74 2e 20 20 49 66 20 2a  rocess it.  If *
32cc0 69 6e 3d 3d 30 20 74 68 65 6e 20 69 6e 70 75 74  in==0 then input
32cd0 0a 2a 2a 20 69 73 20 69 6e 74 65 72 61 63 74 69  .** is interacti
32ce0 76 65 20 2d 20 74 68 65 20 75 73 65 72 20 69 73  ve - the user is
32cf0 20 74 79 70 69 6e 67 20 69 74 20 69 74 2e 20 20   typing it it.  
32d00 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 70 75 74  Otherwise, input
32d10 0a 2a 2a 20 69 73 20 63 6f 6d 69 6e 67 20 66 72  .** is coming fr
32d20 6f 6d 20 61 20 66 69 6c 65 20 6f 72 20 64 65 76  om a file or dev
32d30 69 63 65 2e 20 20 41 20 70 72 6f 6d 70 74 20 69  ice.  A prompt i
32d40 73 20 69 73 73 75 65 64 20 61 6e 64 20 68 69 73  s issued and his
32d50 74 6f 72 79 0a 2a 2a 20 69 73 20 73 61 76 65 64  tory.** is saved
32d60 20 6f 6e 6c 79 20 69 66 20 69 6e 70 75 74 20 69   only if input i
32d70 73 20 69 6e 74 65 72 61 63 74 69 76 65 2e 20 20  s interactive.  
32d80 41 6e 20 69 6e 74 65 72 72 75 70 74 20 73 69 67  An interrupt sig
32d90 6e 61 6c 20 77 69 6c 6c 0a 2a 2a 20 63 61 75 73  nal will.** caus
32da0 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 74  e this routine t
32db0 6f 20 65 78 69 74 20 69 6d 6d 65 64 69 61 74 65  o exit immediate
32dc0 6c 79 2c 20 75 6e 6c 65 73 73 20 69 6e 70 75 74  ly, unless input
32dd0 20 69 73 20 69 6e 74 65 72 61 63 74 69 76 65 2e   is interactive.
32de0 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  .**.** Return th
32df0 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  e number of erro
32e00 72 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  rs..*/.static in
32e10 74 20 70 72 6f 63 65 73 73 5f 69 6e 70 75 74 28  t process_input(
32e20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 46  ShellState *p, F
32e30 49 4c 45 20 2a 69 6e 29 7b 0a 20 20 63 68 61 72  ILE *in){.  char
32e40 20 2a 7a 4c 69 6e 65 20 3d 20 30 3b 20 20 20 20   *zLine = 0;    
32e50 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c        /* A singl
32e60 65 20 69 6e 70 75 74 20 6c 69 6e 65 20 2a 2f 0a  e input line */.
32e70 20 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d 20 30    char *zSql = 0
32e80 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;           /* A
32e90 63 63 75 6d 75 6c 61 74 65 64 20 53 51 4c 20 74  ccumulated SQL t
32ea0 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 69  ext */.  int nLi
32eb0 6e 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ne;             
32ec0 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
32ed0 63 75 72 72 65 6e 74 20 6c 69 6e 65 20 2a 2f 0a  current line */.
32ee0 20 20 69 6e 74 20 6e 53 71 6c 20 3d 20 30 3b 20    int nSql = 0; 
32ef0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
32f00 79 74 65 73 20 6f 66 20 7a 53 71 6c 5b 5d 20 75  ytes of zSql[] u
32f10 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c  sed */.  int nAl
32f20 6c 6f 63 20 3d 20 30 3b 20 20 20 20 20 20 20 20  loc = 0;        
32f30 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
32f40 7a 53 71 6c 5b 5d 20 73 70 61 63 65 20 2a 2f 0a  zSql[] space */.
32f50 20 20 69 6e 74 20 6e 53 71 6c 50 72 69 6f 72 20    int nSqlPrior 
32f60 3d 20 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 42  = 0;        /* B
32f70 79 74 65 73 20 6f 66 20 7a 53 71 6c 5b 5d 20 75  ytes of zSql[] u
32f80 73 65 64 20 62 79 20 70 72 69 6f 72 20 6c 69 6e  sed by prior lin
32f90 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  e */.  int rc;  
32fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fb0 20 2f 2a 20 45 72 72 6f 72 20 63 6f 64 65 20 2a   /* Error code *
32fc0 2f 0a 20 20 69 6e 74 20 65 72 72 43 6e 74 20 3d  /.  int errCnt =
32fd0 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a   0;           /*
32fe0 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
32ff0 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  s seen */.  int 
33000 6c 69 6e 65 6e 6f 20 3d 20 30 3b 20 20 20 20 20  lineno = 0;     
33010 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
33020 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20 2a 2f 0a   line number */.
33030 20 20 69 6e 74 20 73 74 61 72 74 6c 69 6e 65 20    int startline 
33040 3d 20 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  = 0;        /* L
33050 69 6e 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 73  ine number for s
33060 74 61 72 74 20 6f 66 20 63 75 72 72 65 6e 74 20  tart of current 
33070 69 6e 70 75 74 20 2a 2f 0a 0a 20 20 77 68 69 6c  input */..  whil
33080 65 28 20 65 72 72 43 6e 74 3d 3d 30 20 7c 7c 20  e( errCnt==0 || 
33090 21 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20 7c  !bail_on_error |
330a0 7c 20 28 69 6e 3d 3d 30 20 26 26 20 73 74 64 69  | (in==0 && stdi
330b0 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76 65  n_is_interactive
330c0 29 20 29 7b 0a 20 20 20 20 66 66 6c 75 73 68 28  ) ){.    fflush(
330d0 70 2d 3e 6f 75 74 29 3b 0a 20 20 20 20 7a 4c 69  p->out);.    zLi
330e0 6e 65 20 3d 20 6f 6e 65 5f 69 6e 70 75 74 5f 6c  ne = one_input_l
330f0 69 6e 65 28 69 6e 2c 20 7a 4c 69 6e 65 2c 20 6e  ine(in, zLine, n
33100 53 71 6c 3e 30 29 3b 0a 20 20 20 20 69 66 28 20  Sql>0);.    if( 
33110 7a 4c 69 6e 65 3d 3d 30 20 29 7b 0a 20 20 20 20  zLine==0 ){.    
33120 20 20 2f 2a 20 45 6e 64 20 6f 66 20 69 6e 70 75    /* End of inpu
33130 74 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 69  t */.      if( i
33140 6e 3d 3d 30 20 26 26 20 73 74 64 69 6e 5f 69 73  n==0 && stdin_is
33150 5f 69 6e 74 65 72 61 63 74 69 76 65 20 29 20 70  _interactive ) p
33160 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 20 20 20  rintf("\n");.   
33170 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
33180 20 20 20 20 69 66 28 20 73 65 65 6e 49 6e 74 65      if( seenInte
33190 72 72 75 70 74 20 29 7b 0a 20 20 20 20 20 20 69  rrupt ){.      i
331a0 66 28 20 69 6e 21 3d 30 20 29 20 62 72 65 61 6b  f( in!=0 ) break
331b0 3b 0a 20 20 20 20 20 20 73 65 65 6e 49 6e 74 65  ;.      seenInte
331c0 72 72 75 70 74 20 3d 20 30 3b 0a 20 20 20 20 7d  rrupt = 0;.    }
331d0 0a 20 20 20 20 6c 69 6e 65 6e 6f 2b 2b 3b 0a 20  .    lineno++;. 
331e0 20 20 20 69 66 28 20 6e 53 71 6c 3d 3d 30 20 26     if( nSql==0 &
331f0 26 20 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61 63  & _all_whitespac
33200 65 28 7a 4c 69 6e 65 29 20 29 7b 0a 20 20 20 20  e(zLine) ){.    
33210 20 20 69 66 28 20 53 68 65 6c 6c 48 61 73 46 6c    if( ShellHasFl
33220 61 67 28 70 2c 20 53 48 46 4c 47 5f 45 63 68 6f  ag(p, SHFLG_Echo
33230 29 20 29 20 70 72 69 6e 74 66 28 22 25 73 5c 6e  ) ) printf("%s\n
33240 22 2c 20 7a 4c 69 6e 65 29 3b 0a 20 20 20 20 20  ", zLine);.     
33250 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 7d   continue;.    }
33260 0a 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 20 26  .    if( zLine &
33270 26 20 7a 4c 69 6e 65 5b 30 5d 3d 3d 27 2e 27 20  & zLine[0]=='.' 
33280 26 26 20 6e 53 71 6c 3d 3d 30 20 29 7b 0a 20 20  && nSql==0 ){.  
33290 20 20 20 20 69 66 28 20 53 68 65 6c 6c 48 61 73      if( ShellHas
332a0 46 6c 61 67 28 70 2c 20 53 48 46 4c 47 5f 45 63  Flag(p, SHFLG_Ec
332b0 68 6f 29 20 29 20 70 72 69 6e 74 66 28 22 25 73  ho) ) printf("%s
332c0 5c 6e 22 2c 20 7a 4c 69 6e 65 29 3b 0a 20 20 20  \n", zLine);.   
332d0 20 20 20 72 63 20 3d 20 64 6f 5f 6d 65 74 61 5f     rc = do_meta_
332e0 63 6f 6d 6d 61 6e 64 28 7a 4c 69 6e 65 2c 20 70  command(zLine, p
332f0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
33300 3d 32 20 29 7b 20 2f 2a 20 65 78 69 74 20 72 65  =2 ){ /* exit re
33310 71 75 65 73 74 65 64 20 2a 2f 0a 20 20 20 20 20  quested */.     
33320 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
33330 7d 65 6c 73 65 20 69 66 28 20 72 63 20 29 7b 0a  }else if( rc ){.
33340 20 20 20 20 20 20 20 20 65 72 72 43 6e 74 2b 2b          errCnt++
33350 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
33360 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 7d 0a  continue;.    }.
33370 20 20 20 20 69 66 28 20 6c 69 6e 65 5f 69 73 5f      if( line_is_
33380 63 6f 6d 6d 61 6e 64 5f 74 65 72 6d 69 6e 61 74  command_terminat
33390 6f 72 28 7a 4c 69 6e 65 29 20 26 26 20 6c 69 6e  or(zLine) && lin
333a0 65 5f 69 73 5f 63 6f 6d 70 6c 65 74 65 28 7a 53  e_is_complete(zS
333b0 71 6c 2c 20 6e 53 71 6c 29 20 29 7b 0a 20 20 20  ql, nSql) ){.   
333c0 20 20 20 6d 65 6d 63 70 79 28 7a 4c 69 6e 65 2c     memcpy(zLine,
333d0 22 3b 22 2c 32 29 3b 0a 20 20 20 20 7d 0a 20 20  ";",2);.    }.  
333e0 20 20 6e 4c 69 6e 65 20 3d 20 73 74 72 6c 65 6e    nLine = strlen
333f0 33 30 28 7a 4c 69 6e 65 29 3b 0a 20 20 20 20 69  30(zLine);.    i
33400 66 28 20 6e 53 71 6c 2b 6e 4c 69 6e 65 2b 32 3e  f( nSql+nLine+2>
33410 3d 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20  =nAlloc ){.     
33420 20 6e 41 6c 6c 6f 63 20 3d 20 6e 53 71 6c 2b 6e   nAlloc = nSql+n
33430 4c 69 6e 65 2b 31 30 30 3b 0a 20 20 20 20 20 20  Line+100;.      
33440 7a 53 71 6c 20 3d 20 72 65 61 6c 6c 6f 63 28 7a  zSql = realloc(z
33450 53 71 6c 2c 20 6e 41 6c 6c 6f 63 29 3b 0a 20 20  Sql, nAlloc);.  
33460 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20      if( zSql==0 
33470 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  ){.        raw_p
33480 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
33490 72 72 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d  rror: out of mem
334a0 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20  ory\n");.       
334b0 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20 20   exit(1);.      
334c0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 53 71 6c  }.    }.    nSql
334d0 50 72 69 6f 72 20 3d 20 6e 53 71 6c 3b 0a 20 20  Prior = nSql;.  
334e0 20 20 69 66 28 20 6e 53 71 6c 3d 3d 30 20 29 7b    if( nSql==0 ){
334f0 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  .      int i;.  
33500 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a 4c 69      for(i=0; zLi
33510 6e 65 5b 69 5d 20 26 26 20 49 73 53 70 61 63 65  ne[i] && IsSpace
33520 28 7a 4c 69 6e 65 5b 69 5d 29 3b 20 69 2b 2b 29  (zLine[i]); i++)
33530 7b 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  {}.      assert(
33540 20 6e 41 6c 6c 6f 63 3e 30 20 26 26 20 7a 53 71   nAlloc>0 && zSq
33550 6c 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 6d 65  l!=0 );.      me
33560 6d 63 70 79 28 7a 53 71 6c 2c 20 7a 4c 69 6e 65  mcpy(zSql, zLine
33570 2b 69 2c 20 6e 4c 69 6e 65 2b 31 2d 69 29 3b 0a  +i, nLine+1-i);.
33580 20 20 20 20 20 20 73 74 61 72 74 6c 69 6e 65 20        startline 
33590 3d 20 6c 69 6e 65 6e 6f 3b 0a 20 20 20 20 20 20  = lineno;.      
335a0 6e 53 71 6c 20 3d 20 6e 4c 69 6e 65 2d 69 3b 0a  nSql = nLine-i;.
335b0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
335c0 20 7a 53 71 6c 5b 6e 53 71 6c 2b 2b 5d 20 3d 20   zSql[nSql++] = 
335d0 27 5c 6e 27 3b 0a 20 20 20 20 20 20 6d 65 6d 63  '\n';.      memc
335e0 70 79 28 7a 53 71 6c 2b 6e 53 71 6c 2c 20 7a 4c  py(zSql+nSql, zL
335f0 69 6e 65 2c 20 6e 4c 69 6e 65 2b 31 29 3b 0a 20  ine, nLine+1);. 
33600 20 20 20 20 20 6e 53 71 6c 20 2b 3d 20 6e 4c 69       nSql += nLi
33610 6e 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ne;.    }.    if
33620 28 20 6e 53 71 6c 20 26 26 20 6c 69 6e 65 5f 63  ( nSql && line_c
33630 6f 6e 74 61 69 6e 73 5f 73 65 6d 69 63 6f 6c 6f  ontains_semicolo
33640 6e 28 26 7a 53 71 6c 5b 6e 53 71 6c 50 72 69 6f  n(&zSql[nSqlPrio
33650 72 5d 2c 20 6e 53 71 6c 2d 6e 53 71 6c 50 72 69  r], nSql-nSqlPri
33660 6f 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  or).            
33670 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 5f 63      && sqlite3_c
33680 6f 6d 70 6c 65 74 65 28 7a 53 71 6c 29 20 29 7b  omplete(zSql) ){
33690 0a 20 20 20 20 20 20 65 72 72 43 6e 74 20 2b 3d  .      errCnt +=
336a0 20 72 75 6e 4f 6e 65 53 71 6c 4c 69 6e 65 28 70   runOneSqlLine(p
336b0 2c 20 7a 53 71 6c 2c 20 69 6e 2c 20 73 74 61 72  , zSql, in, star
336c0 74 6c 69 6e 65 29 3b 0a 20 20 20 20 20 20 6e 53  tline);.      nS
336d0 71 6c 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 66  ql = 0;.      if
336e0 28 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 20 29 7b  ( p->outCount ){
336f0 0a 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f  .        output_
33700 72 65 73 65 74 28 70 29 3b 0a 20 20 20 20 20 20  reset(p);.      
33710 20 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 20 3d 20    p->outCount = 
33720 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
33730 65 6c 73 65 20 69 66 28 20 6e 53 71 6c 20 26 26  else if( nSql &&
33740 20 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61 63 65   _all_whitespace
33750 28 7a 53 71 6c 29 20 29 7b 0a 20 20 20 20 20 20  (zSql) ){.      
33760 69 66 28 20 53 68 65 6c 6c 48 61 73 46 6c 61 67  if( ShellHasFlag
33770 28 70 2c 20 53 48 46 4c 47 5f 45 63 68 6f 29 20  (p, SHFLG_Echo) 
33780 29 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c  ) printf("%s\n",
33790 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 6e 53   zSql);.      nS
337a0 71 6c 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  ql = 0;.    }.  
337b0 7d 0a 20 20 69 66 28 20 6e 53 71 6c 20 26 26 20  }.  if( nSql && 
337c0 21 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61 63 65  !_all_whitespace
337d0 28 7a 53 71 6c 29 20 29 7b 0a 20 20 20 20 72 75  (zSql) ){.    ru
337e0 6e 4f 6e 65 53 71 6c 4c 69 6e 65 28 70 2c 20 7a  nOneSqlLine(p, z
337f0 53 71 6c 2c 20 69 6e 2c 20 73 74 61 72 74 6c 69  Sql, in, startli
33800 6e 65 29 3b 0a 20 20 7d 0a 20 20 66 72 65 65 28  ne);.  }.  free(
33810 7a 53 71 6c 29 3b 0a 20 20 66 72 65 65 28 7a 4c  zSql);.  free(zL
33820 69 6e 65 29 3b 0a 20 20 72 65 74 75 72 6e 20 65  ine);.  return e
33830 72 72 43 6e 74 3e 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  rrCnt>0;.}../*.*
33840 2a 20 52 65 74 75 72 6e 20 61 20 70 61 74 68 6e  * Return a pathn
33850 61 6d 65 20 77 68 69 63 68 20 69 73 20 74 68 65  ame which is the
33860 20 75 73 65 72 27 73 20 68 6f 6d 65 20 64 69 72   user's home dir
33870 65 63 74 6f 72 79 2e 20 20 41 0a 2a 2a 20 30 20  ectory.  A.** 0 
33880 72 65 74 75 72 6e 20 69 6e 64 69 63 61 74 65 73  return indicates
33890 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d   an error of som
338a0 65 20 6b 69 6e 64 2e 0a 2a 2f 0a 73 74 61 74 69  e kind..*/.stati
338b0 63 20 63 68 61 72 20 2a 66 69 6e 64 5f 68 6f 6d  c char *find_hom
338c0 65 5f 64 69 72 28 69 6e 74 20 63 6c 65 61 72 46  e_dir(int clearF
338d0 6c 61 67 29 7b 0a 20 20 73 74 61 74 69 63 20 63  lag){.  static c
338e0 68 61 72 20 2a 68 6f 6d 65 5f 64 69 72 20 3d 20  har *home_dir = 
338f0 4e 55 4c 4c 3b 0a 20 20 69 66 28 20 63 6c 65 61  NULL;.  if( clea
33900 72 46 6c 61 67 20 29 7b 0a 20 20 20 20 66 72 65  rFlag ){.    fre
33910 65 28 68 6f 6d 65 5f 64 69 72 29 3b 0a 20 20 20  e(home_dir);.   
33920 20 68 6f 6d 65 5f 64 69 72 20 3d 20 30 3b 0a 20   home_dir = 0;. 
33930 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
33940 0a 20 20 69 66 28 20 68 6f 6d 65 5f 64 69 72 20  .  if( home_dir 
33950 29 20 72 65 74 75 72 6e 20 68 6f 6d 65 5f 64 69  ) return home_di
33960 72 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  r;..#if !defined
33970 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65 66  (_WIN32) && !def
33980 69 6e 65 64 28 57 49 4e 33 32 29 20 26 26 20 21  ined(WIN32) && !
33990 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57  defined(_WIN32_W
339a0 43 45 29 20 5c 0a 20 20 20 20 20 26 26 20 21 64  CE) \.     && !d
339b0 65 66 69 6e 65 64 28 5f 5f 52 54 50 5f 5f 29 20  efined(__RTP__) 
339c0 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57 52 53  && !defined(_WRS
339d0 5f 4b 45 52 4e 45 4c 29 0a 20 20 7b 0a 20 20 20  _KERNEL).  {.   
339e0 20 73 74 72 75 63 74 20 70 61 73 73 77 64 20 2a   struct passwd *
339f0 70 77 65 6e 74 3b 0a 20 20 20 20 75 69 64 5f 74  pwent;.    uid_t
33a00 20 75 69 64 20 3d 20 67 65 74 75 69 64 28 29 3b   uid = getuid();
33a10 0a 20 20 20 20 69 66 28 20 28 70 77 65 6e 74 3d  .    if( (pwent=
33a20 67 65 74 70 77 75 69 64 28 75 69 64 29 29 20 21  getpwuid(uid)) !
33a30 3d 20 4e 55 4c 4c 29 20 7b 0a 20 20 20 20 20 20  = NULL) {.      
33a40 68 6f 6d 65 5f 64 69 72 20 3d 20 70 77 65 6e 74  home_dir = pwent
33a50 2d 3e 70 77 5f 64 69 72 3b 0a 20 20 20 20 7d 0a  ->pw_dir;.    }.
33a60 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20    }.#endif..#if 
33a70 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57  defined(_WIN32_W
33a80 43 45 29 0a 20 20 2f 2a 20 57 69 6e 64 6f 77 73  CE).  /* Windows
33a90 20 43 45 20 28 61 72 6d 2d 77 69 6e 63 65 2d 6d   CE (arm-wince-m
33aa0 69 6e 67 77 33 32 63 65 2d 67 63 63 29 20 64 6f  ingw32ce-gcc) do
33ab0 65 73 20 6e 6f 74 20 70 72 6f 76 69 64 65 20 67  es not provide g
33ac0 65 74 65 6e 76 28 29 0a 20 20 20 2a 2f 0a 20 20  etenv().   */.  
33ad0 68 6f 6d 65 5f 64 69 72 20 3d 20 22 2f 22 3b 0a  home_dir = "/";.
33ae0 23 65 6c 73 65 0a 0a 23 69 66 20 64 65 66 69 6e  #else..#if defin
33af0 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65  ed(_WIN32) || de
33b00 66 69 6e 65 64 28 57 49 4e 33 32 29 0a 20 20 69  fined(WIN32).  i
33b10 66 20 28 21 68 6f 6d 65 5f 64 69 72 29 20 7b 0a  f (!home_dir) {.
33b20 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20 67      home_dir = g
33b30 65 74 65 6e 76 28 22 55 53 45 52 50 52 4f 46 49  etenv("USERPROFI
33b40 4c 45 22 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  LE");.  }.#endif
33b50 0a 0a 20 20 69 66 20 28 21 68 6f 6d 65 5f 64 69  ..  if (!home_di
33b60 72 29 20 7b 0a 20 20 20 20 68 6f 6d 65 5f 64 69  r) {.    home_di
33b70 72 20 3d 20 67 65 74 65 6e 76 28 22 48 4f 4d 45  r = getenv("HOME
33b80 22 29 3b 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66  ");.  }..#if def
33b90 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20  ined(_WIN32) || 
33ba0 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29 0a 20  defined(WIN32). 
33bb0 20 69 66 20 28 21 68 6f 6d 65 5f 64 69 72 29 20   if (!home_dir) 
33bc0 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 72 69  {.    char *zDri
33bd0 76 65 2c 20 2a 7a 50 61 74 68 3b 0a 20 20 20 20  ve, *zPath;.    
33be0 69 6e 74 20 6e 3b 0a 20 20 20 20 7a 44 72 69 76  int n;.    zDriv
33bf0 65 20 3d 20 67 65 74 65 6e 76 28 22 48 4f 4d 45  e = getenv("HOME
33c00 44 52 49 56 45 22 29 3b 0a 20 20 20 20 7a 50 61  DRIVE");.    zPa
33c10 74 68 20 3d 20 67 65 74 65 6e 76 28 22 48 4f 4d  th = getenv("HOM
33c20 45 50 41 54 48 22 29 3b 0a 20 20 20 20 69 66 28  EPATH");.    if(
33c30 20 7a 44 72 69 76 65 20 26 26 20 7a 50 61 74 68   zDrive && zPath
33c40 20 29 7b 0a 20 20 20 20 20 20 6e 20 3d 20 73 74   ){.      n = st
33c50 72 6c 65 6e 33 30 28 7a 44 72 69 76 65 29 20 2b  rlen30(zDrive) +
33c60 20 73 74 72 6c 65 6e 33 30 28 7a 50 61 74 68 29   strlen30(zPath)
33c70 20 2b 20 31 3b 0a 20 20 20 20 20 20 68 6f 6d 65   + 1;.      home
33c80 5f 64 69 72 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e  _dir = malloc( n
33c90 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 68 6f   );.      if( ho
33ca0 6d 65 5f 64 69 72 3d 3d 30 20 29 20 72 65 74 75  me_dir==0 ) retu
33cb0 72 6e 20 30 3b 0a 20 20 20 20 20 20 73 71 6c 69  rn 0;.      sqli
33cc0 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 6e 2c 20  te3_snprintf(n, 
33cd0 68 6f 6d 65 5f 64 69 72 2c 20 22 25 73 25 73 22  home_dir, "%s%s"
33ce0 2c 20 7a 44 72 69 76 65 2c 20 7a 50 61 74 68 29  , zDrive, zPath)
33cf0 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 68  ;.      return h
33d00 6f 6d 65 5f 64 69 72 3b 0a 20 20 20 20 7d 0a 20  ome_dir;.    }. 
33d10 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20 22 63     home_dir = "c
33d20 3a 5c 5c 22 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  :\\";.  }.#endif
33d30 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 21 5f 57 49  ..#endif /* !_WI
33d40 4e 33 32 5f 57 43 45 20 2a 2f 0a 0a 20 20 69 66  N32_WCE */..  if
33d50 28 20 68 6f 6d 65 5f 64 69 72 20 29 7b 0a 20 20  ( home_dir ){.  
33d60 20 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c 65 6e    int n = strlen
33d70 33 30 28 68 6f 6d 65 5f 64 69 72 29 20 2b 20 31  30(home_dir) + 1
33d80 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 20 3d 20  ;.    char *z = 
33d90 6d 61 6c 6c 6f 63 28 20 6e 20 29 3b 0a 20 20 20  malloc( n );.   
33da0 20 69 66 28 20 7a 20 29 20 6d 65 6d 63 70 79 28   if( z ) memcpy(
33db0 7a 2c 20 68 6f 6d 65 5f 64 69 72 2c 20 6e 29 3b  z, home_dir, n);
33dc0 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20  .    home_dir = 
33dd0 7a 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  z;.  }..  return
33de0 20 68 6f 6d 65 5f 64 69 72 3b 0a 7d 0a 0a 2f 2a   home_dir;.}../*
33df0 0a 2a 2a 20 52 65 61 64 20 69 6e 70 75 74 20 66  .** Read input f
33e00 72 6f 6d 20 74 68 65 20 66 69 6c 65 20 67 69 76  rom the file giv
33e10 65 6e 20 62 79 20 73 71 6c 69 74 65 72 63 5f 6f  en by sqliterc_o
33e20 76 65 72 72 69 64 65 2e 20 20 4f 72 20 69 66 20  verride.  Or if 
33e30 74 68 61 74 0a 2a 2a 20 70 61 72 61 6d 65 74 65  that.** paramete
33e40 72 20 69 73 20 4e 55 4c 4c 2c 20 74 61 6b 65 20  r is NULL, take 
33e50 69 6e 70 75 74 20 66 72 6f 6d 20 7e 2f 2e 73 71  input from ~/.sq
33e60 6c 69 74 65 72 63 0a 2a 2a 0a 2a 2a 20 52 65 74  literc.**.** Ret
33e70 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
33e80 6f 66 20 65 72 72 6f 72 73 2e 0a 2a 2f 0a 73 74  of errors..*/.st
33e90 61 74 69 63 20 76 6f 69 64 20 70 72 6f 63 65 73  atic void proces
33ea0 73 5f 73 71 6c 69 74 65 72 63 28 0a 20 20 53 68  s_sqliterc(.  Sh
33eb0 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 20 20 20  ellState *p,    
33ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
33ed0 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64   Configuration d
33ee0 61 74 61 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ata */.  const c
33ef0 68 61 72 20 2a 73 71 6c 69 74 65 72 63 5f 6f 76  har *sqliterc_ov
33f00 65 72 72 69 64 65 20 20 20 2f 2a 20 4e 61 6d 65  erride   /* Name
33f10 20 6f 66 20 63 6f 6e 66 69 67 20 66 69 6c 65 2e   of config file.
33f20 20 4e 55 4c 4c 20 74 6f 20 75 73 65 20 64 65 66   NULL to use def
33f30 61 75 6c 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61  ault */.){.  cha
33f40 72 20 2a 68 6f 6d 65 5f 64 69 72 20 3d 20 4e 55  r *home_dir = NU
33f50 4c 4c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  LL;.  const char
33f60 20 2a 73 71 6c 69 74 65 72 63 20 3d 20 73 71 6c   *sqliterc = sql
33f70 69 74 65 72 63 5f 6f 76 65 72 72 69 64 65 3b 0a  iterc_override;.
33f80 20 20 63 68 61 72 20 2a 7a 42 75 66 20 3d 20 30    char *zBuf = 0
33f90 3b 0a 20 20 46 49 4c 45 20 2a 69 6e 20 3d 20 4e  ;.  FILE *in = N
33fa0 55 4c 4c 3b 0a 0a 20 20 69 66 20 28 73 71 6c 69  ULL;..  if (sqli
33fb0 74 65 72 63 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  terc == NULL) {.
33fc0 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20 66      home_dir = f
33fd0 69 6e 64 5f 68 6f 6d 65 5f 64 69 72 28 30 29 3b  ind_home_dir(0);
33fe0 0a 20 20 20 20 69 66 28 20 68 6f 6d 65 5f 64 69  .    if( home_di
33ff0 72 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61  r==0 ){.      ra
34000 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
34010 20 22 2d 2d 20 77 61 72 6e 69 6e 67 3a 20 63 61   "-- warning: ca
34020 6e 6e 6f 74 20 66 69 6e 64 20 68 6f 6d 65 20 64  nnot find home d
34030 69 72 65 63 74 6f 72 79 3b 22 0a 20 20 20 20 20  irectory;".     
34040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34050 20 22 20 63 61 6e 6e 6f 74 20 72 65 61 64 20 7e   " cannot read ~
34060 2f 2e 73 71 6c 69 74 65 72 63 5c 6e 22 29 3b 0a  /.sqliterc\n");.
34070 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20        return;.  
34080 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
34090 69 6e 69 74 69 61 6c 69 7a 65 28 29 3b 0a 20 20  initialize();.  
340a0 20 20 7a 42 75 66 20 3d 20 73 71 6c 69 74 65 33    zBuf = sqlite3
340b0 5f 6d 70 72 69 6e 74 66 28 22 25 73 2f 2e 73 71  _mprintf("%s/.sq
340c0 6c 69 74 65 72 63 22 2c 68 6f 6d 65 5f 64 69 72  literc",home_dir
340d0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 72 63 20  );.    sqliterc 
340e0 3d 20 7a 42 75 66 3b 0a 20 20 7d 0a 20 20 69 6e  = zBuf;.  }.  in
340f0 20 3d 20 66 6f 70 65 6e 28 73 71 6c 69 74 65 72   = fopen(sqliter
34100 63 2c 22 72 62 22 29 3b 0a 20 20 69 66 28 20 69  c,"rb");.  if( i
34110 6e 20 29 7b 0a 20 20 20 20 69 66 28 20 73 74 64  n ){.    if( std
34120 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76  in_is_interactiv
34130 65 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  e ){.      utf8_
34140 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 2d  printf(stderr,"-
34150 2d 20 4c 6f 61 64 69 6e 67 20 72 65 73 6f 75 72  - Loading resour
34160 63 65 73 20 66 72 6f 6d 20 25 73 5c 6e 22 2c 73  ces from %s\n",s
34170 71 6c 69 74 65 72 63 29 3b 0a 20 20 20 20 7d 0a  qliterc);.    }.
34180 20 20 20 20 70 72 6f 63 65 73 73 5f 69 6e 70 75      process_inpu
34190 74 28 70 2c 69 6e 29 3b 0a 20 20 20 20 66 63 6c  t(p,in);.    fcl
341a0 6f 73 65 28 69 6e 29 3b 0a 20 20 7d 0a 20 20 73  ose(in);.  }.  s
341b0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 42 75 66  qlite3_free(zBuf
341c0 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 68 6f 77  );.}../*.** Show
341d0 20 61 76 61 69 6c 61 62 6c 65 20 63 6f 6d 6d 61   available comma
341e0 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 0a  nd line options.
341f0 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20  */.static const 
34200 63 68 61 72 20 7a 4f 70 74 69 6f 6e 73 5b 5d 20  char zOptions[] 
34210 3d 0a 20 20 22 20 20 20 2d 61 73 63 69 69 20 20  =.  "   -ascii  
34220 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
34230 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f 20   output mode to 
34240 27 61 73 63 69 69 27 5c 6e 22 0a 20 20 22 20 20  'ascii'\n".  "  
34250 20 2d 62 61 69 6c 20 20 20 20 20 20 20 20 20 20   -bail          
34260 20 20 20 20 20 20 73 74 6f 70 20 61 66 74 65 72        stop after
34270 20 68 69 74 74 69 6e 67 20 61 6e 20 65 72 72 6f   hitting an erro
34280 72 5c 6e 22 0a 20 20 22 20 20 20 2d 62 61 74 63  r\n".  "   -batc
34290 68 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h               
342a0 66 6f 72 63 65 20 62 61 74 63 68 20 49 2f 4f 5c  force batch I/O\
342b0 6e 22 0a 20 20 22 20 20 20 2d 63 6f 6c 75 6d 6e  n".  "   -column
342c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
342d0 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f  t output mode to
342e0 20 27 63 6f 6c 75 6d 6e 27 5c 6e 22 0a 20 20 22   'column'\n".  "
342f0 20 20 20 2d 63 6d 64 20 43 4f 4d 4d 41 4e 44 20     -cmd COMMAND 
34300 20 20 20 20 20 20 20 20 72 75 6e 20 5c 22 43 4f          run \"CO
34310 4d 4d 41 4e 44 5c 22 20 62 65 66 6f 72 65 20 72  MMAND\" before r
34320 65 61 64 69 6e 67 20 73 74 64 69 6e 5c 6e 22 0a  eading stdin\n".
34330 20 20 22 20 20 20 2d 63 73 76 20 20 20 20 20 20    "   -csv      
34340 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6f             set o
34350 75 74 70 75 74 20 6d 6f 64 65 20 74 6f 20 27 63  utput mode to 'c
34360 73 76 27 5c 6e 22 0a 20 20 22 20 20 20 2d 65 63  sv'\n".  "   -ec
34370 68 6f 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ho              
34380 20 20 70 72 69 6e 74 20 63 6f 6d 6d 61 6e 64 73    print commands
34390 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69 6f   before executio
343a0 6e 5c 6e 22 0a 20 20 22 20 20 20 2d 69 6e 69 74  n\n".  "   -init
343b0 20 46 49 4c 45 4e 41 4d 45 20 20 20 20 20 20 20   FILENAME       
343c0 72 65 61 64 2f 70 72 6f 63 65 73 73 20 6e 61 6d  read/process nam
343d0 65 64 20 66 69 6c 65 5c 6e 22 0a 20 20 22 20 20  ed file\n".  "  
343e0 20 2d 5b 6e 6f 5d 68 65 61 64 65 72 20 20 20 20   -[no]header    
343f0 20 20 20 20 20 20 74 75 72 6e 20 68 65 61 64 65        turn heade
34400 72 73 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a  rs on or off\n".
34410 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
34420 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
34430 33 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  3) || defined(SQ
34440 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
34450 59 53 35 29 0a 20 20 22 20 20 20 2d 68 65 61 70  YS5).  "   -heap
34460 20 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20   SIZE           
34470 53 69 7a 65 20 6f 66 20 68 65 61 70 20 66 6f 72  Size of heap for
34480 20 6d 65 6d 73 79 73 33 20 6f 72 20 6d 65 6d 73   memsys3 or mems
34490 79 73 35 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20  ys5\n".#endif.  
344a0 22 20 20 20 2d 68 65 6c 70 20 20 20 20 20 20 20  "   -help       
344b0 20 20 20 20 20 20 20 20 20 73 68 6f 77 20 74 68           show th
344c0 69 73 20 6d 65 73 73 61 67 65 5c 6e 22 0a 20 20  is message\n".  
344d0 22 20 20 20 2d 68 74 6d 6c 20 20 20 20 20 20 20  "   -html       
344e0 20 20 20 20 20 20 20 20 20 73 65 74 20 6f 75 74           set out
344f0 70 75 74 20 6d 6f 64 65 20 74 6f 20 48 54 4d 4c  put mode to HTML
34500 5c 6e 22 0a 20 20 22 20 20 20 2d 69 6e 74 65 72  \n".  "   -inter
34510 61 63 74 69 76 65 20 20 20 20 20 20 20 20 20 66  active         f
34520 6f 72 63 65 20 69 6e 74 65 72 61 63 74 69 76 65  orce interactive
34530 20 49 2f 4f 5c 6e 22 0a 20 20 22 20 20 20 2d 6c   I/O\n".  "   -l
34540 69 6e 65 20 20 20 20 20 20 20 20 20 20 20 20 20  ine             
34550 20 20 20 73 65 74 20 6f 75 74 70 75 74 20 6d 6f     set output mo
34560 64 65 20 74 6f 20 27 6c 69 6e 65 27 5c 6e 22 0a  de to 'line'\n".
34570 20 20 22 20 20 20 2d 6c 69 73 74 20 20 20 20 20    "   -list     
34580 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6f             set o
34590 75 74 70 75 74 20 6d 6f 64 65 20 74 6f 20 27 6c  utput mode to 'l
345a0 69 73 74 27 5c 6e 22 0a 20 20 22 20 20 20 2d 6c  ist'\n".  "   -l
345b0 6f 6f 6b 61 73 69 64 65 20 53 49 5a 45 20 4e 20  ookaside SIZE N 
345c0 20 20 20 75 73 65 20 4e 20 65 6e 74 72 69 65 73     use N entries
345d0 20 6f 66 20 53 5a 20 62 79 74 65 73 20 66 6f 72   of SZ bytes for
345e0 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72   lookaside memor
345f0 79 5c 6e 22 0a 20 20 22 20 20 20 2d 6d 6d 61 70  y\n".  "   -mmap
34600 20 4e 20 20 20 20 20 20 20 20 20 20 20 20 20 20   N              
34610 64 65 66 61 75 6c 74 20 6d 6d 61 70 20 73 69 7a  default mmap siz
34620 65 20 73 65 74 20 74 6f 20 4e 5c 6e 22 0a 23 69  e set to N\n".#i
34630 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
34640 4c 45 5f 4d 55 4c 54 49 50 4c 45 58 0a 20 20 22  LE_MULTIPLEX.  "
34650 20 20 20 2d 6d 75 6c 74 69 70 6c 65 78 20 20 20     -multiplex   
34660 20 20 20 20 20 20 20 20 65 6e 61 62 6c 65 20 74          enable t
34670 68 65 20 6d 75 6c 74 69 70 6c 65 78 6f 72 20 56  he multiplexor V
34680 46 53 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22  FS\n".#endif.  "
34690 20 20 20 2d 6e 65 77 6c 69 6e 65 20 53 45 50 20     -newline SEP 
346a0 20 20 20 20 20 20 20 20 73 65 74 20 6f 75 74 70          set outp
346b0 75 74 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72  ut row separator
346c0 2e 20 44 65 66 61 75 6c 74 3a 20 27 5c 5c 6e 27  . Default: '\\n'
346d0 5c 6e 22 0a 20 20 22 20 20 20 2d 6e 75 6c 6c 76  \n".  "   -nullv
346e0 61 6c 75 65 20 54 45 58 54 20 20 20 20 20 20 73  alue TEXT      s
346f0 65 74 20 74 65 78 74 20 73 74 72 69 6e 67 20 66  et text string f
34700 6f 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 20  or NULL values. 
34710 44 65 66 61 75 6c 74 20 27 27 5c 6e 22 0a 20 20  Default ''\n".  
34720 22 20 20 20 2d 70 61 67 65 63 61 63 68 65 20 53  "   -pagecache S
34730 49 5a 45 20 4e 20 20 20 20 75 73 65 20 4e 20 73  IZE N    use N s
34740 6c 6f 74 73 20 6f 66 20 53 5a 20 62 79 74 65 73  lots of SZ bytes
34750 20 65 61 63 68 20 66 6f 72 20 70 61 67 65 20 63   each for page c
34760 61 63 68 65 20 6d 65 6d 6f 72 79 5c 6e 22 0a 20  ache memory\n". 
34770 20 22 20 20 20 2d 71 75 6f 74 65 20 20 20 20 20   "   -quote     
34780 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6f 75            set ou
34790 74 70 75 74 20 6d 6f 64 65 20 74 6f 20 27 71 75  tput mode to 'qu
347a0 6f 74 65 27 5c 6e 22 0a 20 20 22 20 20 20 2d 73  ote'\n".  "   -s
347b0 65 70 61 72 61 74 6f 72 20 53 45 50 20 20 20 20  eparator SEP    
347c0 20 20 20 73 65 74 20 6f 75 74 70 75 74 20 63 6f     set output co
347d0 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 2e 20  lumn separator. 
347e0 44 65 66 61 75 6c 74 3a 20 27 7c 27 5c 6e 22 0a  Default: '|'\n".
347f0 20 20 22 20 20 20 2d 73 74 61 74 73 20 20 20 20    "   -stats    
34800 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74             print
34810 20 6d 65 6d 6f 72 79 20 73 74 61 74 73 20 62 65   memory stats be
34820 66 6f 72 65 20 65 61 63 68 20 66 69 6e 61 6c 69  fore each finali
34830 7a 65 5c 6e 22 0a 20 20 22 20 20 20 2d 76 65 72  ze\n".  "   -ver
34840 73 69 6f 6e 20 20 20 20 20 20 20 20 20 20 20 20  sion            
34850 20 73 68 6f 77 20 53 51 4c 69 74 65 20 76 65 72   show SQLite ver
34860 73 69 6f 6e 5c 6e 22 0a 20 20 22 20 20 20 2d 76  sion\n".  "   -v
34870 66 73 20 4e 41 4d 45 20 20 20 20 20 20 20 20 20  fs NAME         
34880 20 20 20 75 73 65 20 4e 41 4d 45 20 61 73 20 74     use NAME as t
34890 68 65 20 64 65 66 61 75 6c 74 20 56 46 53 5c 6e  he default VFS\n
348a0 22 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ".#ifdef SQLITE_
348b0 45 4e 41 42 4c 45 5f 56 46 53 54 52 41 43 45 0a  ENABLE_VFSTRACE.
348c0 20 20 22 20 20 20 2d 76 66 73 74 72 61 63 65 20    "   -vfstrace 
348d0 20 20 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c             enabl
348e0 65 20 74 72 61 63 69 6e 67 20 6f 66 20 61 6c 6c  e tracing of all
348f0 20 56 46 53 20 63 61 6c 6c 73 5c 6e 22 0a 23 65   VFS calls\n".#e
34900 6e 64 69 66 0a 3b 0a 73 74 61 74 69 63 20 76 6f  ndif.;.static vo
34910 69 64 20 75 73 61 67 65 28 69 6e 74 20 73 68 6f  id usage(int sho
34920 77 44 65 74 61 69 6c 29 7b 0a 20 20 75 74 66 38  wDetail){.  utf8
34930 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 0a  _printf(stderr,.
34940 20 20 20 20 20 20 22 55 73 61 67 65 3a 20 25 73        "Usage: %s
34950 20 5b 4f 50 54 49 4f 4e 53 5d 20 46 49 4c 45 4e   [OPTIONS] FILEN
34960 41 4d 45 20 5b 53 51 4c 5d 5c 6e 22 0a 20 20 20  AME [SQL]\n".   
34970 20 20 20 22 46 49 4c 45 4e 41 4d 45 20 69 73 20     "FILENAME is 
34980 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 53  the name of an S
34990 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 2e 20  QLite database. 
349a0 41 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 69  A new database i
349b0 73 20 63 72 65 61 74 65 64 5c 6e 22 0a 20 20 20  s created\n".   
349c0 20 20 20 22 69 66 20 74 68 65 20 66 69 6c 65 20     "if the file 
349d0 64 6f 65 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  does not previou
349e0 73 6c 79 20 65 78 69 73 74 2e 5c 6e 22 2c 20 41  sly exist.\n", A
349f0 72 67 76 30 29 3b 0a 20 20 69 66 28 20 73 68 6f  rgv0);.  if( sho
34a00 77 44 65 74 61 69 6c 20 29 7b 0a 20 20 20 20 75  wDetail ){.    u
34a10 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
34a20 72 2c 20 22 4f 50 54 49 4f 4e 53 20 69 6e 63 6c  r, "OPTIONS incl
34a30 75 64 65 3a 5c 6e 25 73 22 2c 20 7a 4f 70 74 69  ude:\n%s", zOpti
34a40 6f 6e 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ons);.  }else{. 
34a50 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
34a60 64 65 72 72 2c 20 22 55 73 65 20 74 68 65 20 2d  derr, "Use the -
34a70 68 65 6c 70 20 6f 70 74 69 6f 6e 20 66 6f 72 20  help option for 
34a80 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
34a90 6d 61 74 69 6f 6e 5c 6e 22 29 3b 0a 20 20 7d 0a  mation\n");.  }.
34aa0 20 20 65 78 69 74 28 31 29 3b 0a 7d 0a 0a 2f 2a    exit(1);.}../*
34ab0 0a 2a 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74  .** Initialize t
34ac0 68 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61  he state informa
34ad0 74 69 6f 6e 20 69 6e 20 64 61 74 61 0a 2a 2f 0a  tion in data.*/.
34ae0 73 74 61 74 69 63 20 76 6f 69 64 20 6d 61 69 6e  static void main
34af0 5f 69 6e 69 74 28 53 68 65 6c 6c 53 74 61 74 65  _init(ShellState
34b00 20 2a 64 61 74 61 29 20 7b 0a 20 20 6d 65 6d 73   *data) {.  mems
34b10 65 74 28 64 61 74 61 2c 20 30 2c 20 73 69 7a 65  et(data, 0, size
34b20 6f 66 28 2a 64 61 74 61 29 29 3b 0a 20 20 64 61  of(*data));.  da
34b30 74 61 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 20 3d  ta->normalMode =
34b40 20 64 61 74 61 2d 3e 63 4d 6f 64 65 20 3d 20 64   data->cMode = d
34b50 61 74 61 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45  ata->mode = MODE
34b60 5f 4c 69 73 74 3b 0a 20 20 64 61 74 61 2d 3e 61  _List;.  data->a
34b70 75 74 6f 45 78 70 6c 61 69 6e 20 3d 20 31 3b 0a  utoExplain = 1;.
34b80 20 20 6d 65 6d 63 70 79 28 64 61 74 61 2d 3e 63    memcpy(data->c
34b90 6f 6c 53 65 70 61 72 61 74 6f 72 2c 53 45 50 5f  olSeparator,SEP_
34ba0 43 6f 6c 75 6d 6e 2c 20 32 29 3b 0a 20 20 6d 65  Column, 2);.  me
34bb0 6d 63 70 79 28 64 61 74 61 2d 3e 72 6f 77 53 65  mcpy(data->rowSe
34bc0 70 61 72 61 74 6f 72 2c 53 45 50 5f 52 6f 77 2c  parator,SEP_Row,
34bd0 20 32 29 3b 0a 20 20 64 61 74 61 2d 3e 73 68 6f   2);.  data->sho
34be0 77 48 65 61 64 65 72 20 3d 20 30 3b 0a 20 20 64  wHeader = 0;.  d
34bf0 61 74 61 2d 3e 73 68 65 6c 6c 46 6c 67 73 20 3d  ata->shellFlgs =
34c00 20 53 48 46 4c 47 5f 4c 6f 6f 6b 61 73 69 64 65   SHFLG_Lookaside
34c10 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66  ;.  sqlite3_conf
34c20 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  ig(SQLITE_CONFIG
34c30 5f 55 52 49 2c 20 31 29 3b 0a 20 20 73 71 6c 69  _URI, 1);.  sqli
34c40 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54  te3_config(SQLIT
34c50 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20 73 68  E_CONFIG_LOG, sh
34c60 65 6c 6c 4c 6f 67 2c 20 64 61 74 61 29 3b 0a 20  ellLog, data);. 
34c70 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
34c80 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 55  SQLITE_CONFIG_MU
34c90 4c 54 49 54 48 52 45 41 44 29 3b 0a 20 20 73 71  LTITHREAD);.  sq
34ca0 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
34cb0 69 7a 65 6f 66 28 6d 61 69 6e 50 72 6f 6d 70 74  izeof(mainPrompt
34cc0 29 2c 20 6d 61 69 6e 50 72 6f 6d 70 74 2c 22 73  ), mainPrompt,"s
34cd0 71 6c 69 74 65 3e 20 22 29 3b 0a 20 20 73 71 6c  qlite> ");.  sql
34ce0 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
34cf0 7a 65 6f 66 28 63 6f 6e 74 69 6e 75 65 50 72 6f  zeof(continuePro
34d00 6d 70 74 29 2c 20 63 6f 6e 74 69 6e 75 65 50 72  mpt), continuePr
34d10 6f 6d 70 74 2c 22 20 20 20 2e 2e 2e 3e 20 22 29  ompt,"   ...> ")
34d20 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75  ;.}../*.** Outpu
34d30 74 20 74 65 78 74 20 74 6f 20 74 68 65 20 63 6f  t text to the co
34d40 6e 73 6f 6c 65 20 69 6e 20 61 20 66 6f 6e 74 20  nsole in a font 
34d50 74 68 61 74 20 61 74 74 72 61 63 74 73 20 65 78  that attracts ex
34d60 74 72 61 20 61 74 74 65 6e 74 69 6f 6e 2e 0a 2a  tra attention..*
34d70 2f 0a 23 69 66 64 65 66 20 5f 57 49 4e 33 32 0a  /.#ifdef _WIN32.
34d80 73 74 61 74 69 63 20 76 6f 69 64 20 70 72 69 6e  static void prin
34d90 74 42 6f 6c 64 28 63 6f 6e 73 74 20 63 68 61 72  tBold(const char
34da0 20 2a 7a 54 65 78 74 29 7b 0a 20 20 48 41 4e 44   *zText){.  HAND
34db0 4c 45 20 6f 75 74 20 3d 20 47 65 74 53 74 64 48  LE out = GetStdH
34dc0 61 6e 64 6c 65 28 53 54 44 5f 4f 55 54 50 55 54  andle(STD_OUTPUT
34dd0 5f 48 41 4e 44 4c 45 29 3b 0a 20 20 43 4f 4e 53  _HANDLE);.  CONS
34de0 4f 4c 45 5f 53 43 52 45 45 4e 5f 42 55 46 46 45  OLE_SCREEN_BUFFE
34df0 52 5f 49 4e 46 4f 20 64 65 66 61 75 6c 74 53 63  R_INFO defaultSc
34e00 72 65 65 6e 49 6e 66 6f 3b 0a 20 20 47 65 74 43  reenInfo;.  GetC
34e10 6f 6e 73 6f 6c 65 53 63 72 65 65 6e 42 75 66 66  onsoleScreenBuff
34e20 65 72 49 6e 66 6f 28 6f 75 74 2c 20 26 64 65 66  erInfo(out, &def
34e30 61 75 6c 74 53 63 72 65 65 6e 49 6e 66 6f 29 3b  aultScreenInfo);
34e40 0a 20 20 53 65 74 43 6f 6e 73 6f 6c 65 54 65 78  .  SetConsoleTex
34e50 74 41 74 74 72 69 62 75 74 65 28 6f 75 74 2c 0a  tAttribute(out,.
34e60 20 20 20 20 20 20 20 20 20 46 4f 52 45 47 52 4f           FOREGRO
34e70 55 4e 44 5f 52 45 44 7c 46 4f 52 45 47 52 4f 55  UND_RED|FOREGROU
34e80 4e 44 5f 49 4e 54 45 4e 53 49 54 59 0a 20 20 29  ND_INTENSITY.  )
34e90 3b 0a 20 20 70 72 69 6e 74 66 28 22 25 73 22 2c  ;.  printf("%s",
34ea0 20 7a 54 65 78 74 29 3b 0a 20 20 53 65 74 43 6f   zText);.  SetCo
34eb0 6e 73 6f 6c 65 54 65 78 74 41 74 74 72 69 62 75  nsoleTextAttribu
34ec0 74 65 28 6f 75 74 2c 20 64 65 66 61 75 6c 74 53  te(out, defaultS
34ed0 63 72 65 65 6e 49 6e 66 6f 2e 77 41 74 74 72 69  creenInfo.wAttri
34ee0 62 75 74 65 73 29 3b 0a 7d 0a 23 65 6c 73 65 0a  butes);.}.#else.
34ef0 73 74 61 74 69 63 20 76 6f 69 64 20 70 72 69 6e  static void prin
34f00 74 42 6f 6c 64 28 63 6f 6e 73 74 20 63 68 61 72  tBold(const char
34f10 20 2a 7a 54 65 78 74 29 7b 0a 20 20 70 72 69 6e   *zText){.  prin
34f20 74 66 28 22 5c 30 33 33 5b 31 6d 25 73 5c 30 33  tf("\033[1m%s\03
34f30 33 5b 30 6d 22 2c 20 7a 54 65 78 74 29 3b 0a 7d  3[0m", zText);.}
34f40 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47  .#endif../*.** G
34f50 65 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  et the argument 
34f60 74 6f 20 61 6e 20 2d 2d 6f 70 74 69 6f 6e 2e 20  to an --option. 
34f70 20 54 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 20   Throw an error 
34f80 61 6e 64 20 64 69 65 20 69 66 20 6e 6f 20 61 72  and die if no ar
34f90 67 75 6d 65 6e 74 0a 2a 2a 20 69 73 20 61 76 61  gument.** is ava
34fa0 69 6c 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69  ilable..*/.stati
34fb0 63 20 63 68 61 72 20 2a 63 6d 64 6c 69 6e 65 5f  c char *cmdline_
34fc0 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 69 6e 74  option_value(int
34fd0 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72   argc, char **ar
34fe0 67 76 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69 66  gv, int i){.  if
34ff0 28 20 69 3d 3d 61 72 67 63 20 29 7b 0a 20 20 20  ( i==argc ){.   
35000 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
35010 65 72 72 2c 20 22 25 73 3a 20 45 72 72 6f 72 3a  err, "%s: Error:
35020 20 6d 69 73 73 69 6e 67 20 61 72 67 75 6d 65 6e   missing argumen
35030 74 20 74 6f 20 25 73 5c 6e 22 2c 0a 20 20 20 20  t to %s\n",.    
35040 20 20 20 20 20 20 20 20 61 72 67 76 5b 30 5d 2c          argv[0],
35050 20 61 72 67 76 5b 61 72 67 63 2d 31 5d 29 3b 0a   argv[argc-1]);.
35060 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 7d      exit(1);.  }
35070 0a 20 20 72 65 74 75 72 6e 20 61 72 67 76 5b 69  .  return argv[i
35080 5d 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  ];.}..#ifndef SQ
35090 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53 5f 55 54  LITE_SHELL_IS_UT
350a0 46 38 0a 23 20 20 69 66 20 28 64 65 66 69 6e 65  F8.#  if (define
350b0 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65 66  d(_WIN32) || def
350c0 69 6e 65 64 28 57 49 4e 33 32 29 29 20 26 26 20  ined(WIN32)) && 
350d0 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52  defined(_MSC_VER
350e0 29 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51  ).#    define SQ
350f0 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53 5f 55 54  LITE_SHELL_IS_UT
35100 46 38 20 20 20 20 20 20 20 20 20 20 28 30 29 0a  F8          (0).
35110 23 20 20 65 6c 73 65 0a 23 20 20 20 20 64 65 66  #  else.#    def
35120 69 6e 65 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c  ine SQLITE_SHELL
35130 5f 49 53 5f 55 54 46 38 20 20 20 20 20 20 20 20  _IS_UTF8        
35140 20 20 28 31 29 0a 23 20 20 65 6e 64 69 66 0a 23    (1).#  endif.#
35150 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54  endif..#if SQLIT
35160 45 5f 53 48 45 4c 4c 5f 49 53 5f 55 54 46 38 0a  E_SHELL_IS_UTF8.
35170 69 6e 74 20 53 51 4c 49 54 45 5f 43 44 45 43 4c  int SQLITE_CDECL
35180 20 6d 61 69 6e 28 69 6e 74 20 61 72 67 63 2c 20   main(int argc, 
35190 63 68 61 72 20 2a 2a 61 72 67 76 29 7b 0a 23 65  char **argv){.#e
351a0 6c 73 65 0a 69 6e 74 20 53 51 4c 49 54 45 5f 43  lse.int SQLITE_C
351b0 44 45 43 4c 20 77 6d 61 69 6e 28 69 6e 74 20 61  DECL wmain(int a
351c0 72 67 63 2c 20 77 63 68 61 72 5f 74 20 2a 2a 77  rgc, wchar_t **w
351d0 61 72 67 76 29 7b 0a 20 20 63 68 61 72 20 2a 2a  argv){.  char **
351e0 61 72 67 76 3b 0a 23 65 6e 64 69 66 0a 20 20 63  argv;.#endif.  c
351f0 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30  har *zErrMsg = 0
35200 3b 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 64  ;.  ShellState d
35210 61 74 61 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  ata;.  const cha
35220 72 20 2a 7a 49 6e 69 74 46 69 6c 65 20 3d 20 30  r *zInitFile = 0
35230 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74  ;.  int i;.  int
35240 20 72 63 20 3d 20 30 3b 0a 20 20 69 6e 74 20 77   rc = 0;.  int w
35250 61 72 6e 49 6e 6d 65 6d 6f 72 79 44 62 20 3d 20  arnInmemoryDb = 
35260 30 3b 0a 20 20 69 6e 74 20 72 65 61 64 53 74 64  0;.  int readStd
35270 69 6e 20 3d 20 31 3b 0a 20 20 69 6e 74 20 6e 43  in = 1;.  int nC
35280 6d 64 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a  md = 0;.  char *
35290 2a 61 7a 43 6d 64 20 3d 20 30 3b 0a 0a 20 20 73  *azCmd = 0;..  s
352a0 65 74 42 69 6e 61 72 79 4d 6f 64 65 28 73 74 64  etBinaryMode(std
352b0 69 6e 2c 20 30 29 3b 0a 20 20 73 65 74 76 62 75  in, 0);.  setvbu
352c0 66 28 73 74 64 65 72 72 2c 20 30 2c 20 5f 49 4f  f(stderr, 0, _IO
352d0 4e 42 46 2c 20 30 29 3b 20 2f 2a 20 4d 61 6b 65  NBF, 0); /* Make
352e0 20 73 75 72 65 20 73 74 64 65 72 72 20 69 73 20   sure stderr is 
352f0 75 6e 62 75 66 66 65 72 65 64 20 2a 2f 0a 20 20  unbuffered */.  
35300 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63  stdin_is_interac
35310 74 69 76 65 20 3d 20 69 73 61 74 74 79 28 30 29  tive = isatty(0)
35320 3b 0a 20 20 73 74 64 6f 75 74 5f 69 73 5f 63 6f  ;.  stdout_is_co
35330 6e 73 6f 6c 65 20 3d 20 69 73 61 74 74 79 28 31  nsole = isatty(1
35340 29 3b 0a 0a 23 69 66 20 55 53 45 5f 53 59 53 54  );..#if USE_SYST
35350 45 4d 5f 53 51 4c 49 54 45 2b 30 21 3d 31 0a 20  EM_SQLITE+0!=1. 
35360 20 69 66 28 20 73 74 72 6e 63 6d 70 28 73 71 6c   if( strncmp(sql
35370 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29 2c  ite3_sourceid(),
35380 53 51 4c 49 54 45 5f 53 4f 55 52 43 45 5f 49 44  SQLITE_SOURCE_ID
35390 2c 36 30 29 21 3d 30 20 29 7b 0a 20 20 20 20 75  ,60)!=0 ){.    u
353a0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
353b0 72 2c 20 22 53 51 4c 69 74 65 20 68 65 61 64 65  r, "SQLite heade
353c0 72 20 61 6e 64 20 73 6f 75 72 63 65 20 76 65 72  r and source ver
353d0 73 69 6f 6e 20 6d 69 73 6d 61 74 63 68 5c 6e 25  sion mismatch\n%
353e0 73 5c 6e 25 73 5c 6e 22 2c 0a 20 20 20 20 20 20  s\n%s\n",.      
353f0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6f        sqlite3_so
35400 75 72 63 65 69 64 28 29 2c 20 53 51 4c 49 54 45  urceid(), SQLITE
35410 5f 53 4f 55 52 43 45 5f 49 44 29 3b 0a 20 20 20  _SOURCE_ID);.   
35420 20 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a 23 65   exit(1);.  }.#e
35430 6e 64 69 66 0a 20 20 6d 61 69 6e 5f 69 6e 69 74  ndif.  main_init
35440 28 26 64 61 74 61 29 3b 0a 23 69 66 20 21 53 51  (&data);.#if !SQ
35450 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53 5f 55 54  LITE_SHELL_IS_UT
35460 46 38 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 69  F8.  sqlite3_ini
35470 74 69 61 6c 69 7a 65 28 29 3b 0a 20 20 61 72 67  tialize();.  arg
35480 76 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  v = sqlite3_mall
35490 6f 63 36 34 28 73 69 7a 65 6f 66 28 61 72 67 76  oc64(sizeof(argv
354a0 5b 30 5d 29 2a 61 72 67 63 29 3b 0a 20 20 69 66  [0])*argc);.  if
354b0 28 20 61 72 67 76 3d 3d 30 20 29 7b 0a 20 20 20  ( argv==0 ){.   
354c0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
354d0 72 72 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f  rr, "out of memo
354e0 72 79 5c 6e 22 29 3b 0a 20 20 20 20 65 78 69 74  ry\n");.    exit
354f0 28 31 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69  (1);.  }.  for(i
35500 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29  =0; i<argc; i++)
35510 7b 0a 20 20 20 20 61 72 67 76 5b 69 5d 20 3d 20  {.    argv[i] = 
35520 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75 6e  sqlite3_win32_un
35530 69 63 6f 64 65 5f 74 6f 5f 75 74 66 38 28 77 61  icode_to_utf8(wa
35540 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20 69 66 28  rgv[i]);.    if(
35550 20 61 72 67 76 5b 69 5d 3d 3d 30 20 29 7b 0a 20   argv[i]==0 ){. 
35560 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
35570 73 74 64 65 72 72 2c 20 22 6f 75 74 20 6f 66 20  stderr, "out of 
35580 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20  memory\n");.    
35590 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20 7d    exit(1);.    }
355a0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 61 73  .  }.#endif.  as
355b0 73 65 72 74 28 20 61 72 67 63 3e 3d 31 20 26 26  sert( argc>=1 &&
355c0 20 61 72 67 76 20 26 26 20 61 72 67 76 5b 30 5d   argv && argv[0]
355d0 20 29 3b 0a 20 20 41 72 67 76 30 20 3d 20 61 72   );.  Argv0 = ar
355e0 67 76 5b 30 5d 3b 0a 0a 20 20 2f 2a 20 4d 61 6b  gv[0];..  /* Mak
355f0 65 20 73 75 72 65 20 77 65 20 68 61 76 65 20 61  e sure we have a
35600 20 76 61 6c 69 64 20 73 69 67 6e 61 6c 20 68 61   valid signal ha
35610 6e 64 6c 65 72 20 65 61 72 6c 79 2c 20 62 65 66  ndler early, bef
35620 6f 72 65 20 61 6e 79 74 68 69 6e 67 0a 20 20 2a  ore anything.  *
35630 2a 20 65 6c 73 65 20 69 73 20 64 6f 6e 65 2e 0a  * else is done..
35640 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 49 47 49    */.#ifdef SIGI
35650 4e 54 0a 20 20 73 69 67 6e 61 6c 28 53 49 47 49  NT.  signal(SIGI
35660 4e 54 2c 20 69 6e 74 65 72 72 75 70 74 5f 68 61  NT, interrupt_ha
35670 6e 64 6c 65 72 29 3b 0a 23 65 6c 69 66 20 28 64  ndler);.#elif (d
35680 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c  efined(_WIN32) |
35690 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29  | defined(WIN32)
356a0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57  ) && !defined(_W
356b0 49 4e 33 32 5f 57 43 45 29 0a 20 20 53 65 74 43  IN32_WCE).  SetC
356c0 6f 6e 73 6f 6c 65 43 74 72 6c 48 61 6e 64 6c 65  onsoleCtrlHandle
356d0 72 28 43 6f 6e 73 6f 6c 65 43 74 72 6c 48 61 6e  r(ConsoleCtrlHan
356e0 64 6c 65 72 2c 20 54 52 55 45 29 3b 0a 23 65 6e  dler, TRUE);.#en
356f0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
35700 54 45 5f 53 48 45 4c 4c 5f 44 42 4e 41 4d 45 5f  TE_SHELL_DBNAME_
35710 50 52 4f 43 0a 20 20 7b 0a 20 20 20 20 2f 2a 20  PROC.  {.    /* 
35720 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 48  If the SQLITE_SH
35730 45 4c 4c 5f 44 42 4e 41 4d 45 5f 50 52 4f 43 20  ELL_DBNAME_PROC 
35740 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64  macro is defined
35750 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65  , then it is the
35760 20 6e 61 6d 65 0a 20 20 20 20 2a 2a 20 6f 66 20   name.    ** of 
35770 61 20 43 2d 66 75 6e 63 74 69 6f 6e 20 74 68 61  a C-function tha
35780 74 20 77 69 6c 6c 20 70 72 6f 76 69 64 65 20 74  t will provide t
35790 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
357a0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 55  atabase file.  U
357b0 73 65 0a 20 20 20 20 2a 2a 20 74 68 69 73 20 63  se.    ** this c
357c0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
357d0 6f 6e 20 74 6f 20 65 6d 62 65 64 20 74 68 69 73  on to embed this
357e0 20 73 68 65 6c 6c 20 70 72 6f 67 72 61 6d 20 69   shell program i
357f0 6e 20 6c 61 72 67 65 72 0a 20 20 20 20 2a 2a 20  n larger.    ** 
35800 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 20 2a 2f  applications. */
35810 0a 20 20 20 20 65 78 74 65 72 6e 20 76 6f 69 64  .    extern void
35820 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 44 42   SQLITE_SHELL_DB
35830 4e 41 4d 45 5f 50 52 4f 43 28 63 6f 6e 73 74 20  NAME_PROC(const 
35840 63 68 61 72 2a 2a 29 3b 0a 20 20 20 20 53 51 4c  char**);.    SQL
35850 49 54 45 5f 53 48 45 4c 4c 5f 44 42 4e 41 4d 45  ITE_SHELL_DBNAME
35860 5f 50 52 4f 43 28 26 64 61 74 61 2e 7a 44 62 46  _PROC(&data.zDbF
35870 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 20 20 77 61  ilename);.    wa
35880 72 6e 49 6e 6d 65 6d 6f 72 79 44 62 20 3d 20 30  rnInmemoryDb = 0
35890 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
358a0 2f 2a 20 44 6f 20 61 6e 20 69 6e 69 74 69 61 6c  /* Do an initial
358b0 20 70 61 73 73 20 74 68 72 6f 75 67 68 20 74 68   pass through th
358c0 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 61  e command-line a
358d0 72 67 75 6d 65 6e 74 20 74 6f 20 6c 6f 63 61 74  rgument to locat
358e0 65 0a 20 20 2a 2a 20 74 68 65 20 6e 61 6d 65 20  e.  ** the name 
358f0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
35900 66 69 6c 65 2c 20 74 68 65 20 6e 61 6d 65 20 6f  file, the name o
35910 66 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61  f the initializa
35920 74 69 6f 6e 20 66 69 6c 65 2c 0a 20 20 2a 2a 20  tion file,.  ** 
35930 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
35940 61 6c 74 65 72 6e 61 74 69 76 65 20 6d 61 6c 6c  alternative mall
35950 6f 63 20 68 65 61 70 2c 0a 20 20 2a 2a 20 61 6e  oc heap,.  ** an
35960 64 20 74 68 65 20 66 69 72 73 74 20 63 6f 6d 6d  d the first comm
35970 61 6e 64 20 74 6f 20 65 78 65 63 75 74 65 2e 0a  and to execute..
35980 20 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 31 3b 20    */.  for(i=1; 
35990 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20  i<argc; i++){.  
359a0 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20 7a    char *z;.    z
359b0 20 3d 20 61 72 67 76 5b 69 5d 3b 0a 20 20 20 20   = argv[i];.    
359c0 69 66 28 20 7a 5b 30 5d 21 3d 27 2d 27 20 29 7b  if( z[0]!='-' ){
359d0 0a 20 20 20 20 20 20 69 66 28 20 64 61 74 61 2e  .      if( data.
359e0 7a 44 62 46 69 6c 65 6e 61 6d 65 3d 3d 30 20 29  zDbFilename==0 )
359f0 7b 0a 20 20 20 20 20 20 20 20 64 61 74 61 2e 7a  {.        data.z
35a00 44 62 46 69 6c 65 6e 61 6d 65 20 3d 20 7a 3b 0a  DbFilename = z;.
35a10 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
35a20 20 20 20 20 20 2f 2a 20 45 78 63 65 73 73 73 20       /* Excesss 
35a30 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 69 6e  arguments are in
35a40 74 65 72 70 72 65 74 65 64 20 61 73 20 53 51 4c  terpreted as SQL
35a50 20 28 6f 72 20 64 6f 74 2d 63 6f 6d 6d 61 6e 64   (or dot-command
35a60 73 29 20 61 6e 64 0a 20 20 20 20 20 20 20 20 2a  s) and.        *
35a70 2a 20 6d 65 61 6e 20 74 68 61 74 20 6e 6f 74 68  * mean that noth
35a80 69 6e 67 20 69 73 20 72 65 61 64 20 66 72 6f 6d  ing is read from
35a90 20 73 74 64 69 6e 20 2a 2f 0a 20 20 20 20 20 20   stdin */.      
35aa0 20 20 72 65 61 64 53 74 64 69 6e 20 3d 20 30 3b    readStdin = 0;
35ab0 0a 20 20 20 20 20 20 20 20 6e 43 6d 64 2b 2b 3b  .        nCmd++;
35ac0 0a 20 20 20 20 20 20 20 20 61 7a 43 6d 64 20 3d  .        azCmd =
35ad0 20 72 65 61 6c 6c 6f 63 28 61 7a 43 6d 64 2c 20   realloc(azCmd, 
35ae0 73 69 7a 65 6f 66 28 61 7a 43 6d 64 5b 30 5d 29  sizeof(azCmd[0])
35af0 2a 6e 43 6d 64 29 3b 0a 20 20 20 20 20 20 20 20  *nCmd);.        
35b00 69 66 28 20 61 7a 43 6d 64 3d 3d 30 20 29 7b 0a  if( azCmd==0 ){.
35b10 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72            raw_pr
35b20 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6f 75  intf(stderr, "ou
35b30 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b  t of memory\n");
35b40 0a 20 20 20 20 20 20 20 20 20 20 65 78 69 74 28  .          exit(
35b50 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  1);.        }.  
35b60 20 20 20 20 20 20 61 7a 43 6d 64 5b 6e 43 6d 64        azCmd[nCmd
35b70 2d 31 5d 20 3d 20 7a 3b 0a 20 20 20 20 20 20 7d  -1] = z;.      }
35b80 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a  .    }.    if( z
35b90 5b 31 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a  [1]=='-' ) z++;.
35ba0 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
35bb0 2c 22 2d 73 65 70 61 72 61 74 6f 72 22 29 3d 3d  ,"-separator")==
35bc0 30 0a 20 20 20 20 20 7c 7c 20 73 74 72 63 6d 70  0.     || strcmp
35bd0 28 7a 2c 22 2d 6e 75 6c 6c 76 61 6c 75 65 22 29  (z,"-nullvalue")
35be0 3d 3d 30 0a 20 20 20 20 20 7c 7c 20 73 74 72 63  ==0.     || strc
35bf0 6d 70 28 7a 2c 22 2d 6e 65 77 6c 69 6e 65 22 29  mp(z,"-newline")
35c00 3d 3d 30 0a 20 20 20 20 20 7c 7c 20 73 74 72 63  ==0.     || strc
35c10 6d 70 28 7a 2c 22 2d 63 6d 64 22 29 3d 3d 30 0a  mp(z,"-cmd")==0.
35c20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 28 76 6f      ){.      (vo
35c30 69 64 29 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f  id)cmdline_optio
35c40 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 20 61 72  n_value(argc, ar
35c50 67 76 2c 20 2b 2b 69 29 3b 0a 20 20 20 20 7d 65  gv, ++i);.    }e
35c60 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
35c70 2c 22 2d 69 6e 69 74 22 29 3d 3d 30 20 29 7b 0a  ,"-init")==0 ){.
35c80 20 20 20 20 20 20 7a 49 6e 69 74 46 69 6c 65 20        zInitFile 
35c90 3d 20 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e  = cmdline_option
35ca0 5f 76 61 6c 75 65 28 61 72 67 63 2c 20 61 72 67  _value(argc, arg
35cb0 76 2c 20 2b 2b 69 29 3b 0a 20 20 20 20 7d 65 6c  v, ++i);.    }el
35cc0 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
35cd0 22 2d 62 61 74 63 68 22 29 3d 3d 30 20 29 7b 0a  "-batch")==0 ){.
35ce0 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f        /* Need to
35cf0 20 63 68 65 63 6b 20 66 6f 72 20 62 61 74 63 68   check for batch
35d00 20 6d 6f 64 65 20 68 65 72 65 20 74 6f 20 73 6f   mode here to so
35d10 20 77 65 20 63 61 6e 20 61 76 6f 69 64 20 70 72   we can avoid pr
35d20 69 6e 74 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  inting.      ** 
35d30 69 6e 66 6f 72 6d 61 74 69 6f 6e 61 6c 20 6d 65  informational me
35d40 73 73 61 67 65 73 20 28 6c 69 6b 65 20 66 72 6f  ssages (like fro
35d50 6d 20 70 72 6f 63 65 73 73 5f 73 71 6c 69 74 65  m process_sqlite
35d60 72 63 29 20 62 65 66 6f 72 65 0a 20 20 20 20 20  rc) before.     
35d70 20 2a 2a 20 77 65 20 64 6f 20 74 68 65 20 61 63   ** we do the ac
35d80 74 75 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  tual processing 
35d90 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 6c 61 74  of arguments lat
35da0 65 72 20 69 6e 20 61 20 73 65 63 6f 6e 64 20 70  er in a second p
35db0 61 73 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ass..      */.  
35dc0 20 20 20 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74      stdin_is_int
35dd0 65 72 61 63 74 69 76 65 20 3d 20 30 3b 0a 20 20  eractive = 0;.  
35de0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
35df0 6d 70 28 7a 2c 22 2d 68 65 61 70 22 29 3d 3d 30  mp(z,"-heap")==0
35e00 20 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28   ){.#if defined(
35e10 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
35e20 4d 53 59 53 33 29 20 7c 7c 20 64 65 66 69 6e 65  MSYS3) || define
35e30 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
35e40 4d 45 4d 53 59 53 35 29 0a 20 20 20 20 20 20 63  MEMSYS5).      c
35e50 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 69 7a 65  onst char *zSize
35e60 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
35e70 69 6e 74 36 34 20 73 7a 48 65 61 70 3b 0a 0a 20  int64 szHeap;.. 
35e80 20 20 20 20 20 7a 53 69 7a 65 20 3d 20 63 6d 64       zSize = cmd
35e90 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75  line_option_valu
35ea0 65 28 61 72 67 63 2c 20 61 72 67 76 2c 20 2b 2b  e(argc, argv, ++
35eb0 69 29 3b 0a 20 20 20 20 20 20 73 7a 48 65 61 70  i);.      szHeap
35ec0 20 3d 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28   = integerValue(
35ed0 7a 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 69 66  zSize);.      if
35ee0 28 20 73 7a 48 65 61 70 3e 30 78 37 66 66 66 30  ( szHeap>0x7fff0
35ef0 30 30 30 20 29 20 73 7a 48 65 61 70 20 3d 20 30  000 ) szHeap = 0
35f00 78 37 66 66 66 30 30 30 30 3b 0a 20 20 20 20 20  x7fff0000;.     
35f10 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
35f20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 45  SQLITE_CONFIG_HE
35f30 41 50 2c 20 6d 61 6c 6c 6f 63 28 28 69 6e 74 29  AP, malloc((int)
35f40 73 7a 48 65 61 70 29 2c 20 28 69 6e 74 29 73 7a  szHeap), (int)sz
35f50 48 65 61 70 2c 20 36 34 29 3b 0a 23 65 6c 73 65  Heap, 64);.#else
35f60 0a 20 20 20 20 20 20 28 76 6f 69 64 29 63 6d 64  .      (void)cmd
35f70 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75  line_option_valu
35f80 65 28 61 72 67 63 2c 20 61 72 67 76 2c 20 2b 2b  e(argc, argv, ++
35f90 69 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d  i);.#endif.    }
35fa0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
35fb0 7a 2c 22 2d 70 61 67 65 63 61 63 68 65 22 29 3d  z,"-pagecache")=
35fc0 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
35fd0 6e 2c 20 73 7a 3b 0a 20 20 20 20 20 20 73 7a 20  n, sz;.      sz 
35fe0 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61  = (int)integerVa
35ff0 6c 75 65 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69  lue(cmdline_opti
36000 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72  on_value(argc,ar
36010 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20  gv,++i));.      
36020 69 66 28 20 73 7a 3e 37 30 30 30 30 20 29 20 73  if( sz>70000 ) s
36030 7a 20 3d 20 37 30 30 30 30 3b 0a 20 20 20 20 20  z = 70000;.     
36040 20 69 66 28 20 73 7a 3c 30 20 29 20 73 7a 20 3d   if( sz<0 ) sz =
36050 20 30 3b 0a 20 20 20 20 20 20 6e 20 3d 20 28 69   0;.      n = (i
36060 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75 65 28  nt)integerValue(
36070 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76  cmdline_option_v
36080 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c 2b  alue(argc,argv,+
36090 2b 69 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  +i));.      sqli
360a0 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54  te3_config(SQLIT
360b0 45 5f 43 4f 4e 46 49 47 5f 50 41 47 45 43 41 43  E_CONFIG_PAGECAC
360c0 48 45 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  HE,.            
360d0 20 20 20 20 20 20 20 20 28 6e 3e 30 20 26 26 20          (n>0 && 
360e0 73 7a 3e 30 29 20 3f 20 6d 61 6c 6c 6f 63 28 6e  sz>0) ? malloc(n
360f0 2a 73 7a 29 20 3a 20 30 2c 20 73 7a 2c 20 6e 29  *sz) : 0, sz, n)
36100 3b 0a 20 20 20 20 20 20 64 61 74 61 2e 73 68 65  ;.      data.she
36110 6c 6c 46 6c 67 73 20 7c 3d 20 53 48 46 4c 47 5f  llFlgs |= SHFLG_
36120 50 61 67 65 63 61 63 68 65 3b 0a 20 20 20 20 7d  Pagecache;.    }
36130 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
36140 7a 2c 22 2d 6c 6f 6f 6b 61 73 69 64 65 22 29 3d  z,"-lookaside")=
36150 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
36160 6e 2c 20 73 7a 3b 0a 20 20 20 20 20 20 73 7a 20  n, sz;.      sz 
36170 3d 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61  = (int)integerVa
36180 6c 75 65 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69  lue(cmdline_opti
36190 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72  on_value(argc,ar
361a0 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20  gv,++i));.      
361b0 69 66 28 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20  if( sz<0 ) sz = 
361c0 30 3b 0a 20 20 20 20 20 20 6e 20 3d 20 28 69 6e  0;.      n = (in
361d0 74 29 69 6e 74 65 67 65 72 56 61 6c 75 65 28 63  t)integerValue(c
361e0 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61  mdline_option_va
361f0 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b  lue(argc,argv,++
36200 69 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6e  i));.      if( n
36210 3c 30 20 29 20 6e 20 3d 20 30 3b 0a 20 20 20 20  <0 ) n = 0;.    
36220 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67    sqlite3_config
36230 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c  (SQLITE_CONFIG_L
36240 4f 4f 4b 41 53 49 44 45 2c 20 73 7a 2c 20 6e 29  OOKASIDE, sz, n)
36250 3b 0a 20 20 20 20 20 20 69 66 28 20 73 7a 2a 6e  ;.      if( sz*n
36260 3d 3d 30 20 29 20 64 61 74 61 2e 73 68 65 6c 6c  ==0 ) data.shell
36270 46 6c 67 73 20 26 3d 20 7e 53 48 46 4c 47 5f 4c  Flgs &= ~SHFLG_L
36280 6f 6f 6b 61 73 69 64 65 3b 0a 23 69 66 64 65 66  ookaside;.#ifdef
36290 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 56   SQLITE_ENABLE_V
362a0 46 53 54 52 41 43 45 0a 20 20 20 20 7d 65 6c 73  FSTRACE.    }els
362b0 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
362c0 2d 76 66 73 74 72 61 63 65 22 29 3d 3d 30 20 29  -vfstrace")==0 )
362d0 7b 0a 20 20 20 20 20 20 65 78 74 65 72 6e 20 69  {.      extern i
362e0 6e 74 20 76 66 73 74 72 61 63 65 5f 72 65 67 69  nt vfstrace_regi
362f0 73 74 65 72 28 0a 20 20 20 20 20 20 20 20 20 63  ster(.         c
36300 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 72 61 63  onst char *zTrac
36310 65 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20  eName,.         
36320 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 6c 64  const char *zOld
36330 56 66 73 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20  VfsName,.       
36340 20 20 69 6e 74 20 28 2a 78 4f 75 74 29 28 63 6f    int (*xOut)(co
36350 6e 73 74 20 63 68 61 72 2a 2c 76 6f 69 64 2a 29  nst char*,void*)
36360 2c 0a 20 20 20 20 20 20 20 20 20 76 6f 69 64 20  ,.         void 
36370 2a 70 4f 75 74 41 72 67 2c 0a 20 20 20 20 20 20  *pOutArg,.      
36380 20 20 20 69 6e 74 20 6d 61 6b 65 44 65 66 61 75     int makeDefau
36390 6c 74 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  lt.      );.    
363a0 20 20 76 66 73 74 72 61 63 65 5f 72 65 67 69 73    vfstrace_regis
363b0 74 65 72 28 22 74 72 61 63 65 22 2c 30 2c 28 69  ter("trace",0,(i
363c0 6e 74 28 2a 29 28 63 6f 6e 73 74 20 63 68 61 72  nt(*)(const char
363d0 2a 2c 76 6f 69 64 2a 29 29 66 70 75 74 73 2c 73  *,void*))fputs,s
363e0 74 64 65 72 72 2c 31 29 3b 0a 23 65 6e 64 69 66  tderr,1);.#endif
363f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
36400 4e 41 42 4c 45 5f 4d 55 4c 54 49 50 4c 45 58 0a  NABLE_MULTIPLEX.
36410 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
36420 72 63 6d 70 28 7a 2c 22 2d 6d 75 6c 74 69 70 6c  rcmp(z,"-multipl
36430 65 78 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ex")==0 ){.     
36440 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
36450 74 65 33 5f 6d 75 6c 74 69 70 6c 65 5f 69 6e 69  te3_multiple_ini
36460 74 69 61 6c 69 7a 65 28 63 6f 6e 73 74 20 63 68  tialize(const ch
36470 61 72 2a 2c 69 6e 74 29 3b 0a 20 20 20 20 20 20  ar*,int);.      
36480 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65  sqlite3_multiple
36490 78 5f 69 6e 69 74 69 61 6c 69 7a 65 28 30 2c 20  x_initialize(0, 
364a0 31 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d  1);.#endif.    }
364b0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
364c0 7a 2c 22 2d 6d 6d 61 70 22 29 3d 3d 30 20 29 7b  z,"-mmap")==0 ){
364d0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69  .      sqlite3_i
364e0 6e 74 36 34 20 73 7a 20 3d 20 69 6e 74 65 67 65  nt64 sz = intege
364f0 72 56 61 6c 75 65 28 63 6d 64 6c 69 6e 65 5f 6f  rValue(cmdline_o
36500 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63  ption_value(argc
36510 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20  ,argv,++i));.   
36520 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69     sqlite3_confi
36530 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  g(SQLITE_CONFIG_
36540 4d 4d 41 50 5f 53 49 5a 45 2c 20 73 7a 2c 20 73  MMAP_SIZE, sz, s
36550 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  z);.    }else if
36560 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 76 66 73  ( strcmp(z,"-vfs
36570 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ")==0 ){.      s
36580 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73  qlite3_vfs *pVfs
36590 20 3d 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 66   = sqlite3_vfs_f
365a0 69 6e 64 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69  ind(cmdline_opti
365b0 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72  on_value(argc,ar
365c0 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20  gv,++i));.      
365d0 69 66 28 20 70 56 66 73 20 29 7b 0a 20 20 20 20  if( pVfs ){.    
365e0 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 5f      sqlite3_vfs_
365f0 72 65 67 69 73 74 65 72 28 70 56 66 73 2c 20 31  register(pVfs, 1
36600 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
36610 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
36620 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6e 6f 20  ntf(stderr, "no 
36630 73 75 63 68 20 56 46 53 3a 20 5c 22 25 73 5c 22  such VFS: \"%s\"
36640 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20  \n", argv[i]);. 
36650 20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b 0a         exit(1);.
36660 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
36670 7d 0a 20 20 69 66 28 20 64 61 74 61 2e 7a 44 62  }.  if( data.zDb
36680 46 69 6c 65 6e 61 6d 65 3d 3d 30 20 29 7b 0a 23  Filename==0 ){.#
36690 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
366a0 49 54 5f 4d 45 4d 4f 52 59 44 42 0a 20 20 20 20  IT_MEMORYDB.    
366b0 64 61 74 61 2e 7a 44 62 46 69 6c 65 6e 61 6d 65  data.zDbFilename
366c0 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a 22 3b 0a 20   = ":memory:";. 
366d0 20 20 20 77 61 72 6e 49 6e 6d 65 6d 6f 72 79 44     warnInmemoryD
366e0 62 20 3d 20 61 72 67 63 3d 3d 31 3b 0a 23 65 6c  b = argc==1;.#el
366f0 73 65 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  se.    utf8_prin
36700 74 66 28 73 74 64 65 72 72 2c 22 25 73 3a 20 45  tf(stderr,"%s: E
36710 72 72 6f 72 3a 20 6e 6f 20 64 61 74 61 62 61 73  rror: no databas
36720 65 20 66 69 6c 65 6e 61 6d 65 20 73 70 65 63 69  e filename speci
36730 66 69 65 64 5c 6e 22 2c 20 41 72 67 76 30 29 3b  fied\n", Argv0);
36740 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 23  .    return 1;.#
36750 65 6e 64 69 66 0a 20 20 7d 0a 20 20 64 61 74 61  endif.  }.  data
36760 2e 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a 0a  .out = stdout;..
36770 20 20 2f 2a 20 47 6f 20 61 68 65 61 64 20 61 6e    /* Go ahead an
36780 64 20 6f 70 65 6e 20 74 68 65 20 64 61 74 61 62  d open the datab
36790 61 73 65 20 66 69 6c 65 20 69 66 20 69 74 20 61  ase file if it a
367a0 6c 72 65 61 64 79 20 65 78 69 73 74 73 2e 20 20  lready exists.  
367b0 49 66 20 74 68 65 0a 20 20 2a 2a 20 66 69 6c 65  If the.  ** file
367c0 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c   does not exist,
367d0 20 64 65 6c 61 79 20 6f 70 65 6e 69 6e 67 20 69   delay opening i
367e0 74 2e 20 20 54 68 69 73 20 70 72 65 76 65 6e 74  t.  This prevent
367f0 73 20 65 6d 70 74 79 20 64 61 74 61 62 61 73 65  s empty database
36800 0a 20 20 2a 2a 20 66 69 6c 65 73 20 66 72 6f 6d  .  ** files from
36810 20 62 65 69 6e 67 20 63 72 65 61 74 65 64 20 69   being created i
36820 66 20 61 20 75 73 65 72 20 6d 69 73 74 79 70 65  f a user mistype
36830 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e  s the database n
36840 61 6d 65 20 61 72 67 75 6d 65 6e 74 0a 20 20 2a  ame argument.  *
36850 2a 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 20  * to the sqlite 
36860 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 74 6f 6f  command-line too
36870 6c 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 61 63  l..  */.  if( ac
36880 63 65 73 73 28 64 61 74 61 2e 7a 44 62 46 69 6c  cess(data.zDbFil
36890 65 6e 61 6d 65 2c 20 30 29 3d 3d 30 20 29 7b 0a  ename, 0)==0 ){.
368a0 20 20 20 20 6f 70 65 6e 5f 64 62 28 26 64 61 74      open_db(&dat
368b0 61 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  a, 0);.  }..  /*
368c0 20 50 72 6f 63 65 73 73 20 74 68 65 20 69 6e 69   Process the ini
368d0 74 69 61 6c 69 7a 61 74 69 6f 6e 20 66 69 6c 65  tialization file
368e0 20 69 66 20 74 68 65 72 65 20 69 73 20 6f 6e 65   if there is one
368f0 2e 20 20 49 66 20 6e 6f 20 2d 69 6e 69 74 20 6f  .  If no -init o
36900 70 74 69 6f 6e 0a 20 20 2a 2a 20 69 73 20 67 69  ption.  ** is gi
36910 76 65 6e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61  ven on the comma
36920 6e 64 20 6c 69 6e 65 2c 20 6c 6f 6f 6b 20 66 6f  nd line, look fo
36930 72 20 61 20 66 69 6c 65 20 6e 61 6d 65 64 20 7e  r a file named ~
36940 2f 2e 73 71 6c 69 74 65 72 63 20 61 6e 64 0a 20  /.sqliterc and. 
36950 20 2a 2a 20 74 72 79 20 74 6f 20 70 72 6f 63 65   ** try to proce
36960 73 73 20 69 74 2e 0a 20 20 2a 2f 0a 20 20 70 72  ss it..  */.  pr
36970 6f 63 65 73 73 5f 73 71 6c 69 74 65 72 63 28 26  ocess_sqliterc(&
36980 64 61 74 61 2c 7a 49 6e 69 74 46 69 6c 65 29 3b  data,zInitFile);
36990 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 61 20 73 65  ..  /* Make a se
369a0 63 6f 6e 64 20 70 61 73 73 20 74 68 72 6f 75 67  cond pass throug
369b0 68 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69  h the command-li
369c0 6e 65 20 61 72 67 75 6d 65 6e 74 20 61 6e 64 20  ne argument and 
369d0 73 65 74 0a 20 20 2a 2a 20 6f 70 74 69 6f 6e 73  set.  ** options
369e0 2e 20 20 54 68 69 73 20 73 65 63 6f 6e 64 20 70  .  This second p
369f0 61 73 73 20 69 73 20 64 65 6c 61 79 65 64 20 75  ass is delayed u
36a00 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20 69  ntil after the i
36a10 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 20 20  nitialization.  
36a20 2a 2a 20 66 69 6c 65 20 69 73 20 70 72 6f 63 65  ** file is proce
36a30 73 73 65 64 20 73 6f 20 74 68 61 74 20 74 68 65  ssed so that the
36a40 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 61 72   command-line ar
36a50 67 75 6d 65 6e 74 73 20 77 69 6c 6c 20 6f 76 65  guments will ove
36a60 72 72 69 64 65 0a 20 20 2a 2a 20 73 65 74 74 69  rride.  ** setti
36a70 6e 67 73 20 69 6e 20 74 68 65 20 69 6e 69 74 69  ngs in the initi
36a80 61 6c 69 7a 61 74 69 6f 6e 20 66 69 6c 65 2e 0a  alization file..
36a90 20 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 31 3b 20    */.  for(i=1; 
36aa0 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20  i<argc; i++){.  
36ab0 20 20 63 68 61 72 20 2a 7a 20 3d 20 61 72 67 76    char *z = argv
36ac0 5b 69 5d 3b 0a 20 20 20 20 69 66 28 20 7a 5b 30  [i];.    if( z[0
36ad0 5d 21 3d 27 2d 27 20 29 20 63 6f 6e 74 69 6e 75  ]!='-' ) continu
36ae0 65 3b 0a 20 20 20 20 69 66 28 20 7a 5b 31 5d 3d  e;.    if( z[1]=
36af0 3d 27 2d 27 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20  ='-' ){ z++; }. 
36b00 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c     if( strcmp(z,
36b10 22 2d 69 6e 69 74 22 29 3d 3d 30 20 29 7b 0a 20  "-init")==0 ){. 
36b20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 7d 65       i++;.    }e
36b30 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
36b40 2c 22 2d 68 74 6d 6c 22 29 3d 3d 30 20 29 7b 0a  ,"-html")==0 ){.
36b50 20 20 20 20 20 20 64 61 74 61 2e 6d 6f 64 65 20        data.mode 
36b60 3d 20 4d 4f 44 45 5f 48 74 6d 6c 3b 0a 20 20 20  = MODE_Html;.   
36b70 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
36b80 70 28 7a 2c 22 2d 6c 69 73 74 22 29 3d 3d 30 20  p(z,"-list")==0 
36b90 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 6d 6f  ){.      data.mo
36ba0 64 65 20 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a  de = MODE_List;.
36bb0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
36bc0 72 63 6d 70 28 7a 2c 22 2d 71 75 6f 74 65 22 29  rcmp(z,"-quote")
36bd0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74  ==0 ){.      dat
36be0 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 51 75  a.mode = MODE_Qu
36bf0 6f 74 65 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ote;.    }else i
36c00 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6c 69  f( strcmp(z,"-li
36c10 6e 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ne")==0 ){.     
36c20 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44   data.mode = MOD
36c30 45 5f 4c 69 6e 65 3b 0a 20 20 20 20 7d 65 6c 73  E_Line;.    }els
36c40 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
36c50 2d 63 6f 6c 75 6d 6e 22 29 3d 3d 30 20 29 7b 0a  -column")==0 ){.
36c60 20 20 20 20 20 20 64 61 74 61 2e 6d 6f 64 65 20        data.mode 
36c70 3d 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3b 0a 20  = MODE_Column;. 
36c80 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
36c90 63 6d 70 28 7a 2c 22 2d 63 73 76 22 29 3d 3d 30  cmp(z,"-csv")==0
36ca0 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 6d   ){.      data.m
36cb0 6f 64 65 20 3d 20 4d 4f 44 45 5f 43 73 76 3b 0a  ode = MODE_Csv;.
36cc0 20 20 20 20 20 20 6d 65 6d 63 70 79 28 64 61 74        memcpy(dat
36cd0 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c 22  a.colSeparator,"
36ce0 2c 22 2c 32 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ,",2);.    }else
36cf0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
36d00 61 73 63 69 69 22 29 3d 3d 30 20 29 7b 0a 20 20  ascii")==0 ){.  
36d10 20 20 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20      data.mode = 
36d20 4d 4f 44 45 5f 41 73 63 69 69 3b 0a 20 20 20 20  MODE_Ascii;.    
36d30 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
36d40 74 66 28 73 69 7a 65 6f 66 28 64 61 74 61 2e 63  tf(sizeof(data.c
36d50 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c 20 64 61  olSeparator), da
36d60 74 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c  ta.colSeparator,
36d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36d80 20 20 20 20 20 20 20 20 53 45 50 5f 55 6e 69 74          SEP_Unit
36d90 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
36da0 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
36db0 28 64 61 74 61 2e 72 6f 77 53 65 70 61 72 61 74  (data.rowSeparat
36dc0 6f 72 29 2c 20 64 61 74 61 2e 72 6f 77 53 65 70  or), data.rowSep
36dd0 61 72 61 74 6f 72 2c 0a 20 20 20 20 20 20 20 20  arator,.        
36de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
36df0 45 50 5f 52 65 63 6f 72 64 29 3b 0a 20 20 20 20  EP_Record);.    
36e00 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
36e10 28 7a 2c 22 2d 73 65 70 61 72 61 74 6f 72 22 29  (z,"-separator")
36e20 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
36e30 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
36e40 7a 65 6f 66 28 64 61 74 61 2e 63 6f 6c 53 65 70  zeof(data.colSep
36e50 61 72 61 74 6f 72 29 2c 20 64 61 74 61 2e 63 6f  arator), data.co
36e60 6c 53 65 70 61 72 61 74 6f 72 2c 0a 20 20 20 20  lSeparator,.    
36e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e80 20 20 20 22 25 73 22 2c 63 6d 64 6c 69 6e 65 5f     "%s",cmdline_
36e90 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67  option_value(arg
36ea0 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20  c,argv,++i));.  
36eb0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
36ec0 6d 70 28 7a 2c 22 2d 6e 65 77 6c 69 6e 65 22 29  mp(z,"-newline")
36ed0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
36ee0 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
36ef0 7a 65 6f 66 28 64 61 74 61 2e 72 6f 77 53 65 70  zeof(data.rowSep
36f00 61 72 61 74 6f 72 29 2c 20 64 61 74 61 2e 72 6f  arator), data.ro
36f10 77 53 65 70 61 72 61 74 6f 72 2c 0a 20 20 20 20  wSeparator,.    
36f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f30 20 20 20 22 25 73 22 2c 63 6d 64 6c 69 6e 65 5f     "%s",cmdline_
36f40 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67  option_value(arg
36f50 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20  c,argv,++i));.  
36f60 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
36f70 6d 70 28 7a 2c 22 2d 6e 75 6c 6c 76 61 6c 75 65  mp(z,"-nullvalue
36f80 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ")==0 ){.      s
36f90 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
36fa0 73 69 7a 65 6f 66 28 64 61 74 61 2e 6e 75 6c 6c  sizeof(data.null
36fb0 56 61 6c 75 65 29 2c 20 64 61 74 61 2e 6e 75 6c  Value), data.nul
36fc0 6c 56 61 6c 75 65 2c 0a 20 20 20 20 20 20 20 20  lValue,.        
36fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
36fe0 25 73 22 2c 63 6d 64 6c 69 6e 65 5f 6f 70 74 69  %s",cmdline_opti
36ff0 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72  on_value(argc,ar
37000 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 7d 65  gv,++i));.    }e
37010 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
37020 2c 22 2d 68 65 61 64 65 72 22 29 3d 3d 30 20 29  ,"-header")==0 )
37030 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 73 68 6f  {.      data.sho
37040 77 48 65 61 64 65 72 20 3d 20 31 3b 0a 20 20 20  wHeader = 1;.   
37050 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
37060 70 28 7a 2c 22 2d 6e 6f 68 65 61 64 65 72 22 29  p(z,"-noheader")
37070 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74  ==0 ){.      dat
37080 61 2e 73 68 6f 77 48 65 61 64 65 72 20 3d 20 30  a.showHeader = 0
37090 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
370a0 73 74 72 63 6d 70 28 7a 2c 22 2d 65 63 68 6f 22  strcmp(z,"-echo"
370b0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 53 68  )==0 ){.      Sh
370c0 65 6c 6c 53 65 74 46 6c 61 67 28 26 64 61 74 61  ellSetFlag(&data
370d0 2c 20 53 48 46 4c 47 5f 45 63 68 6f 29 3b 0a 20  , SHFLG_Echo);. 
370e0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
370f0 63 6d 70 28 7a 2c 22 2d 65 71 70 22 29 3d 3d 30  cmp(z,"-eqp")==0
37100 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 61   ){.      data.a
37110 75 74 6f 45 51 50 20 3d 20 41 55 54 4f 45 51 50  utoEQP = AUTOEQP
37120 5f 6f 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  _on;.    }else i
37130 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 65 71  f( strcmp(z,"-eq
37140 70 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20  pfull")==0 ){.  
37150 20 20 20 20 64 61 74 61 2e 61 75 74 6f 45 51 50      data.autoEQP
37160 20 3d 20 41 55 54 4f 45 51 50 5f 66 75 6c 6c 3b   = AUTOEQP_full;
37170 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
37180 74 72 63 6d 70 28 7a 2c 22 2d 73 74 61 74 73 22  trcmp(z,"-stats"
37190 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61  )==0 ){.      da
371a0 74 61 2e 73 74 61 74 73 4f 6e 20 3d 20 31 3b 0a  ta.statsOn = 1;.
371b0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
371c0 72 63 6d 70 28 7a 2c 22 2d 73 63 61 6e 73 74 61  rcmp(z,"-scansta
371d0 74 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ts")==0 ){.     
371e0 20 64 61 74 61 2e 73 63 61 6e 73 74 61 74 73 4f   data.scanstatsO
371f0 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  n = 1;.    }else
37200 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
37210 62 61 63 6b 73 6c 61 73 68 22 29 3d 3d 30 20 29  backslash")==0 )
37220 7b 0a 20 20 20 20 20 20 2f 2a 20 55 6e 64 6f 63  {.      /* Undoc
37230 75 6d 65 6e 74 65 64 20 63 6f 6d 6d 61 6e 64 2d  umented command-
37240 6c 69 6e 65 20 6f 70 74 69 6f 6e 3a 20 2d 62 61  line option: -ba
37250 63 6b 73 6c 61 73 68 0a 20 20 20 20 20 20 2a 2a  ckslash.      **
37260 20 43 61 75 73 65 73 20 43 2d 73 74 79 6c 65 20   Causes C-style 
37270 62 61 63 6b 73 6c 61 73 68 20 65 73 63 61 70 65  backslash escape
37280 73 20 74 6f 20 62 65 20 65 76 61 6c 75 61 74 65  s to be evaluate
37290 64 20 69 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  d in SQL stateme
372a0 6e 74 73 0a 20 20 20 20 20 20 2a 2a 20 70 72 69  nts.      ** pri
372b0 6f 72 20 74 6f 20 73 65 6e 64 69 6e 67 20 74 68  or to sending th
372c0 65 20 53 51 4c 20 69 6e 74 6f 20 53 51 4c 69 74  e SQL into SQLit
372d0 65 2e 20 20 55 73 65 66 75 6c 20 66 6f 72 20 69  e.  Useful for i
372e0 6e 6a 65 63 74 69 6e 67 0a 20 20 20 20 20 20 2a  njecting.      *
372f0 2a 20 63 72 61 7a 79 20 62 79 74 65 73 20 69 6e  * crazy bytes in
37300 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 53   the middle of S
37310 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 66 6f  QL statements fo
37320 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65  r testing and de
37330 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 20 20 2a  bugging..      *
37340 2f 0a 20 20 20 20 20 20 53 68 65 6c 6c 53 65 74  /.      ShellSet
37350 46 6c 61 67 28 26 64 61 74 61 2c 20 53 48 46 4c  Flag(&data, SHFL
37360 47 5f 42 61 63 6b 73 6c 61 73 68 29 3b 0a 20 20  G_Backslash);.  
37370 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
37380 6d 70 28 7a 2c 22 2d 62 61 69 6c 22 29 3d 3d 30  mp(z,"-bail")==0
37390 20 29 7b 0a 20 20 20 20 20 20 62 61 69 6c 5f 6f   ){.      bail_o
373a0 6e 5f 65 72 72 6f 72 20 3d 20 31 3b 0a 20 20 20  n_error = 1;.   
373b0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
373c0 70 28 7a 2c 22 2d 76 65 72 73 69 6f 6e 22 29 3d  p(z,"-version")=
373d0 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e  =0 ){.      prin
373e0 74 66 28 22 25 73 20 25 73 5c 6e 22 2c 20 73 71  tf("%s %s\n", sq
373f0 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e  lite3_libversion
37400 28 29 2c 20 73 71 6c 69 74 65 33 5f 73 6f 75 72  (), sqlite3_sour
37410 63 65 69 64 28 29 29 3b 0a 20 20 20 20 20 20 72  ceid());.      r
37420 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 65 6c  eturn 0;.    }el
37430 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
37440 22 2d 69 6e 74 65 72 61 63 74 69 76 65 22 29 3d  "-interactive")=
37450 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 74 64 69  =0 ){.      stdi
37460 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76 65  n_is_interactive
37470 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 1;.    }else 
37480 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 62  if( strcmp(z,"-b
37490 61 74 63 68 22 29 3d 3d 30 20 29 7b 0a 20 20 20  atch")==0 ){.   
374a0 20 20 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65     stdin_is_inte
374b0 72 61 63 74 69 76 65 20 3d 20 30 3b 0a 20 20 20  ractive = 0;.   
374c0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
374d0 70 28 7a 2c 22 2d 68 65 61 70 22 29 3d 3d 30 20  p(z,"-heap")==0 
374e0 29 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20  ){.      i++;.  
374f0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
37500 6d 70 28 7a 2c 22 2d 70 61 67 65 63 61 63 68 65  mp(z,"-pagecache
37510 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  ")==0 ){.      i
37520 2b 3d 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  +=2;.    }else i
37530 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6c 6f  f( strcmp(z,"-lo
37540 6f 6b 61 73 69 64 65 22 29 3d 3d 30 20 29 7b 0a  okaside")==0 ){.
37550 20 20 20 20 20 20 69 2b 3d 32 3b 0a 20 20 20 20        i+=2;.    
37560 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
37570 28 7a 2c 22 2d 6d 6d 61 70 22 29 3d 3d 30 20 29  (z,"-mmap")==0 )
37580 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20  {.      i++;.   
37590 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
375a0 70 28 7a 2c 22 2d 76 66 73 22 29 3d 3d 30 20 29  p(z,"-vfs")==0 )
375b0 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 23 69 66  {.      i++;.#if
375c