/ Hex Artifact Content
Login

Artifact 319b7791cee6c763b60fde1b590bfaf62613cf37:


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 45 6e 61 62 6c 65 20 6c 61 72 67 65 2d 66 69   Enable large-fi
02b0: 6c 65 20 73 75 70 70 6f 72 74 20 66 6f 72 20 66  le support for f
02c0: 6f 70 65 6e 28 29 20 61 6e 64 20 66 72 69 65 6e  open() and frien
02d0: 64 73 20 6f 6e 20 75 6e 69 78 2e 0a 2a 2f 0a 23  ds on unix..*/.#
02e0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 49  ifndef SQLITE_DI
02f0: 53 41 42 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69  SABLE_LFS.# defi
0300: 6e 65 20 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20  ne _LARGE_FILE  
0310: 20 20 20 20 20 31 0a 23 20 69 66 6e 64 65 66 20       1.# ifndef 
0320: 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54  _FILE_OFFSET_BIT
0330: 53 0a 23 20 20 20 64 65 66 69 6e 65 20 5f 46 49  S.#   define _FI
0340: 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20 36  LE_OFFSET_BITS 6
0350: 34 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69  4.# endif.# defi
0360: 6e 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f  ne _LARGEFILE_SO
0370: 55 52 43 45 20 31 0a 23 65 6e 64 69 66 0a 0a 23  URCE 1.#endif..#
0380: 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e  include <stdlib.
0390: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72  h>.#include <str
03a0: 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ing.h>.#include 
03b0: 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75  <stdio.h>.#inclu
03c0: 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69  de <assert.h>.#i
03d0: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 33 2e  nclude "sqlite3.
03e0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74 79  h".#include <cty
03f0: 70 65 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  pe.h>.#include <
0400: 73 74 64 61 72 67 2e 68 3e 0a 0a 23 69 66 20 21  stdarg.h>..#if !
0410: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
0420: 26 26 20 21 64 65 66 69 6e 65 64 28 57 49 4e 33  && !defined(WIN3
0430: 32 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 73 69  2).# include <si
0440: 67 6e 61 6c 2e 68 3e 0a 23 20 69 66 20 21 64 65  gnal.h>.# if !de
0450: 66 69 6e 65 64 28 5f 5f 52 54 50 5f 5f 29 20 26  fined(__RTP__) &
0460: 26 20 21 64 65 66 69 6e 65 64 28 5f 57 52 53 5f  & !defined(_WRS_
0470: 4b 45 52 4e 45 4c 29 0a 23 20 20 69 6e 63 6c 75  KERNEL).#  inclu
0480: 64 65 20 3c 70 77 64 2e 68 3e 0a 23 20 65 6e 64  de <pwd.h>.# end
0490: 69 66 0a 23 20 69 6e 63 6c 75 64 65 20 3c 75 6e  if.# include <un
04a0: 69 73 74 64 2e 68 3e 0a 23 20 69 6e 63 6c 75 64  istd.h>.# includ
04b0: 65 20 3c 73 79 73 2f 74 79 70 65 73 2e 68 3e 0a  e <sys/types.h>.
04c0: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 48  #endif..#ifdef H
04d0: 41 56 45 5f 45 44 49 54 4c 49 4e 45 0a 23 20 69  AVE_EDITLINE.# i
04e0: 6e 63 6c 75 64 65 20 3c 65 64 69 74 6c 69 6e 65  nclude <editline
04f0: 2f 65 64 69 74 6c 69 6e 65 2e 68 3e 0a 23 65 6e  /editline.h>.#en
0500: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
0510: 48 41 56 45 5f 52 45 41 44 4c 49 4e 45 29 20 26  HAVE_READLINE) &
0520: 26 20 48 41 56 45 5f 52 45 41 44 4c 49 4e 45 3d  & HAVE_READLINE=
0530: 3d 31 0a 23 20 69 6e 63 6c 75 64 65 20 3c 72 65  =1.# include <re
0540: 61 64 6c 69 6e 65 2f 72 65 61 64 6c 69 6e 65 2e  adline/readline.
0550: 68 3e 0a 23 20 69 6e 63 6c 75 64 65 20 3c 72 65  h>.# include <re
0560: 61 64 6c 69 6e 65 2f 68 69 73 74 6f 72 79 2e 68  adline/history.h
0570: 3e 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  >.#endif.#if !de
0580: 66 69 6e 65 64 28 48 41 56 45 5f 45 44 49 54 4c  fined(HAVE_EDITL
0590: 49 4e 45 29 20 26 26 20 28 21 64 65 66 69 6e 65  INE) && (!define
05a0: 64 28 48 41 56 45 5f 52 45 41 44 4c 49 4e 45 29  d(HAVE_READLINE)
05b0: 20 7c 7c 20 48 41 56 45 5f 52 45 41 44 4c 49 4e   || HAVE_READLIN
05c0: 45 21 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 72  E!=1).# define r
05d0: 65 61 64 6c 69 6e 65 28 70 29 20 6c 6f 63 61 6c  eadline(p) local
05e0: 5f 67 65 74 6c 69 6e 65 28 70 2c 73 74 64 69 6e  _getline(p,stdin
05f0: 2c 30 29 0a 23 20 64 65 66 69 6e 65 20 61 64 64  ,0).# define add
0600: 5f 68 69 73 74 6f 72 79 28 58 29 0a 23 20 64 65  _history(X).# de
0610: 66 69 6e 65 20 72 65 61 64 5f 68 69 73 74 6f 72  fine read_histor
0620: 79 28 58 29 0a 23 20 64 65 66 69 6e 65 20 77 72  y(X).# define wr
0630: 69 74 65 5f 68 69 73 74 6f 72 79 28 58 29 0a 23  ite_history(X).#
0640: 20 64 65 66 69 6e 65 20 73 74 69 66 6c 65 5f 68   define stifle_h
0650: 69 73 74 6f 72 79 28 58 29 0a 23 65 6e 64 69 66  istory(X).#endif
0660: 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57  ..#if defined(_W
0670: 49 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e 65 64  IN32) || defined
0680: 28 57 49 4e 33 32 29 0a 23 20 69 6e 63 6c 75 64  (WIN32).# includ
0690: 65 20 3c 69 6f 2e 68 3e 0a 23 64 65 66 69 6e 65  e <io.h>.#define
06a0: 20 69 73 61 74 74 79 28 68 29 20 5f 69 73 61 74   isatty(h) _isat
06b0: 74 79 28 68 29 0a 23 64 65 66 69 6e 65 20 61 63  ty(h).#define ac
06c0: 63 65 73 73 28 66 2c 6d 29 20 5f 61 63 63 65 73  cess(f,m) _acces
06d0: 73 28 28 66 29 2c 28 6d 29 29 0a 23 75 6e 64 65  s((f),(m)).#unde
06e0: 66 20 70 6f 70 65 6e 0a 23 64 65 66 69 6e 65 20  f popen.#define 
06f0: 70 6f 70 65 6e 28 61 2c 62 29 20 5f 70 6f 70 65  popen(a,b) _pope
0700: 6e 28 28 61 29 2c 28 62 29 29 0a 23 75 6e 64 65  n((a),(b)).#unde
0710: 66 20 70 63 6c 6f 73 65 0a 23 64 65 66 69 6e 65  f pclose.#define
0720: 20 70 63 6c 6f 73 65 28 78 29 20 5f 70 63 6c 6f   pclose(x) _pclo
0730: 73 65 28 78 29 0a 23 65 6c 73 65 0a 2f 2a 20 4d  se(x).#else./* M
0740: 61 6b 65 20 73 75 72 65 20 69 73 61 74 74 79 28  ake sure isatty(
0750: 29 20 68 61 73 20 61 20 70 72 6f 74 6f 74 79 70  ) has a prototyp
0760: 65 2e 0a 2a 2f 0a 65 78 74 65 72 6e 20 69 6e 74  e..*/.extern int
0770: 20 69 73 61 74 74 79 28 69 6e 74 29 3b 0a 23 65   isatty(int);.#e
0780: 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
0790: 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 2f 2a  d(_WIN32_WCE)./*
07a0: 20 57 69 6e 64 6f 77 73 20 43 45 20 28 61 72 6d   Windows CE (arm
07b0: 2d 77 69 6e 63 65 2d 6d 69 6e 67 77 33 32 63 65  -wince-mingw32ce
07c0: 2d 67 63 63 29 20 64 6f 65 73 20 6e 6f 74 20 70  -gcc) does not p
07d0: 72 6f 76 69 64 65 20 69 73 61 74 74 79 28 29 0a  rovide isatty().
07e0: 20 2a 20 74 68 75 73 20 77 65 20 61 6c 77 61 79   * thus we alway
07f0: 73 20 61 73 73 75 6d 65 20 74 68 61 74 20 77 65  s assume that we
0800: 20 68 61 76 65 20 61 20 63 6f 6e 73 6f 6c 65 2e   have a console.
0810: 20 54 68 61 74 20 63 61 6e 20 62 65 0a 20 2a 20   That can be. * 
0820: 6f 76 65 72 72 69 64 64 65 6e 20 77 69 74 68 20  overridden with 
0830: 74 68 65 20 2d 62 61 74 63 68 20 63 6f 6d 6d 61  the -batch comma
0840: 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a  nd line option..
0850: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 61 74   */.#define isat
0860: 74 79 28 78 29 20 31 0a 23 65 6e 64 69 66 0a 0a  ty(x) 1.#endif..
0870: 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 74  /* True if the t
0880: 69 6d 65 72 20 69 73 20 65 6e 61 62 6c 65 64 20  imer is enabled 
0890: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 65 6e  */.static int en
08a0: 61 62 6c 65 54 69 6d 65 72 20 3d 20 30 3b 0a 0a  ableTimer = 0;..
08b0: 2f 2a 20 63 74 79 70 65 20 6d 61 63 72 6f 73 20  /* ctype macros 
08c0: 74 68 61 74 20 77 6f 72 6b 20 77 69 74 68 20 73  that work with s
08d0: 69 67 6e 65 64 20 63 68 61 72 61 63 74 65 72 73  igned characters
08e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 53 70   */.#define IsSp
08f0: 61 63 65 28 58 29 20 20 69 73 73 70 61 63 65 28  ace(X)  isspace(
0900: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 58  (unsigned char)X
0910: 29 0a 23 64 65 66 69 6e 65 20 49 73 44 69 67 69  ).#define IsDigi
0920: 74 28 58 29 20 20 69 73 64 69 67 69 74 28 28 75  t(X)  isdigit((u
0930: 6e 73 69 67 6e 65 64 20 63 68 61 72 29 58 29 0a  nsigned char)X).
0940: 23 64 65 66 69 6e 65 20 54 6f 4c 6f 77 65 72 28  #define ToLower(
0950: 58 29 20 20 28 63 68 61 72 29 74 6f 6c 6f 77 65  X)  (char)tolowe
0960: 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
0970: 29 58 29 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  )X)..#if !define
0980: 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
0990: 66 69 6e 65 64 28 57 49 4e 33 32 29 20 26 26 20  fined(WIN32) && 
09a0: 21 64 65 66 69 6e 65 64 28 5f 57 52 53 5f 4b 45  !defined(_WRS_KE
09b0: 52 4e 45 4c 29 20 5c 0a 20 26 26 20 21 64 65 66  RNEL) \. && !def
09c0: 69 6e 65 64 28 5f 5f 6d 69 6e 75 78 29 0a 23 69  ined(__minux).#i
09d0: 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 69 6d 65  nclude <sys/time
09e0: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79  .h>.#include <sy
09f0: 73 2f 72 65 73 6f 75 72 63 65 2e 68 3e 0a 0a 2f  s/resource.h>../
0a00: 2a 20 53 61 76 65 64 20 72 65 73 6f 75 72 63 65  * Saved resource
0a10: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72   information for
0a20: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
0a30: 66 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e 20 2a  f an operation *
0a40: 2f 0a 73 74 61 74 69 63 20 73 74 72 75 63 74 20  /.static struct 
0a50: 72 75 73 61 67 65 20 73 42 65 67 69 6e 3b 0a 0a  rusage sBegin;..
0a60: 2f 2a 0a 2a 2a 20 42 65 67 69 6e 20 74 69 6d 69  /*.** Begin timi
0a70: 6e 67 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e 0a  ng an operation.
0a80: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 62  */.static void b
0a90: 65 67 69 6e 54 69 6d 65 72 28 76 6f 69 64 29 7b  eginTimer(void){
0aa0: 0a 20 20 69 66 28 20 65 6e 61 62 6c 65 54 69 6d  .  if( enableTim
0ab0: 65 72 20 29 7b 0a 20 20 20 20 67 65 74 72 75 73  er ){.    getrus
0ac0: 61 67 65 28 52 55 53 41 47 45 5f 53 45 4c 46 2c  age(RUSAGE_SELF,
0ad0: 20 26 73 42 65 67 69 6e 29 3b 0a 20 20 7d 0a 7d   &sBegin);.  }.}
0ae0: 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 68 65 20  ../* Return the 
0af0: 64 69 66 66 65 72 65 6e 63 65 20 6f 66 20 74 77  difference of tw
0b00: 6f 20 74 69 6d 65 5f 73 74 72 75 63 74 73 20 69  o time_structs i
0b10: 6e 20 73 65 63 6f 6e 64 73 20 2a 2f 0a 73 74 61  n seconds */.sta
0b20: 74 69 63 20 64 6f 75 62 6c 65 20 74 69 6d 65 44  tic double timeD
0b30: 69 66 66 28 73 74 72 75 63 74 20 74 69 6d 65 76  iff(struct timev
0b40: 61 6c 20 2a 70 53 74 61 72 74 2c 20 73 74 72 75  al *pStart, stru
0b50: 63 74 20 74 69 6d 65 76 61 6c 20 2a 70 45 6e 64  ct timeval *pEnd
0b60: 29 7b 0a 20 20 72 65 74 75 72 6e 20 28 70 45 6e  ){.  return (pEn
0b70: 64 2d 3e 74 76 5f 75 73 65 63 20 2d 20 70 53 74  d->tv_usec - pSt
0b80: 61 72 74 2d 3e 74 76 5f 75 73 65 63 29 2a 30 2e  art->tv_usec)*0.
0b90: 30 30 30 30 30 31 20 2b 20 0a 20 20 20 20 20 20  000001 + .      
0ba0: 20 20 20 28 64 6f 75 62 6c 65 29 28 70 45 6e 64     (double)(pEnd
0bb0: 2d 3e 74 76 5f 73 65 63 20 2d 20 70 53 74 61 72  ->tv_sec - pStar
0bc0: 74 2d 3e 74 76 5f 73 65 63 29 3b 0a 7d 0a 0a 2f  t->tv_sec);.}../
0bd0: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 74  *.** Print the t
0be0: 69 6d 69 6e 67 20 72 65 73 75 6c 74 73 2e 0a 2a  iming results..*
0bf0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 65 6e  /.static void en
0c00: 64 54 69 6d 65 72 28 76 6f 69 64 29 7b 0a 20 20  dTimer(void){.  
0c10: 69 66 28 20 65 6e 61 62 6c 65 54 69 6d 65 72 20  if( enableTimer 
0c20: 29 7b 0a 20 20 20 20 73 74 72 75 63 74 20 72 75  ){.    struct ru
0c30: 73 61 67 65 20 73 45 6e 64 3b 0a 20 20 20 20 67  sage sEnd;.    g
0c40: 65 74 72 75 73 61 67 65 28 52 55 53 41 47 45 5f  etrusage(RUSAGE_
0c50: 53 45 4c 46 2c 20 26 73 45 6e 64 29 3b 0a 20 20  SELF, &sEnd);.  
0c60: 20 20 70 72 69 6e 74 66 28 22 43 50 55 20 54 69    printf("CPU Ti
0c70: 6d 65 3a 20 75 73 65 72 20 25 66 20 73 79 73 20  me: user %f sys 
0c80: 25 66 5c 6e 22 2c 0a 20 20 20 20 20 20 20 74 69  %f\n",.       ti
0c90: 6d 65 44 69 66 66 28 26 73 42 65 67 69 6e 2e 72  meDiff(&sBegin.r
0ca0: 75 5f 75 74 69 6d 65 2c 20 26 73 45 6e 64 2e 72  u_utime, &sEnd.r
0cb0: 75 5f 75 74 69 6d 65 29 2c 0a 20 20 20 20 20 20  u_utime),.      
0cc0: 20 74 69 6d 65 44 69 66 66 28 26 73 42 65 67 69   timeDiff(&sBegi
0cd0: 6e 2e 72 75 5f 73 74 69 6d 65 2c 20 26 73 45 6e  n.ru_stime, &sEn
0ce0: 64 2e 72 75 5f 73 74 69 6d 65 29 29 3b 0a 20 20  d.ru_stime));.  
0cf0: 7d 0a 7d 0a 0a 23 64 65 66 69 6e 65 20 42 45 47  }.}..#define BEG
0d00: 49 4e 5f 54 49 4d 45 52 20 62 65 67 69 6e 54 69  IN_TIMER beginTi
0d10: 6d 65 72 28 29 0a 23 64 65 66 69 6e 65 20 45 4e  mer().#define EN
0d20: 44 5f 54 49 4d 45 52 20 65 6e 64 54 69 6d 65 72  D_TIMER endTimer
0d30: 28 29 0a 23 64 65 66 69 6e 65 20 48 41 53 5f 54  ().#define HAS_T
0d40: 49 4d 45 52 20 31 0a 0a 23 65 6c 69 66 20 28 64  IMER 1..#elif (d
0d50: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c  efined(_WIN32) |
0d60: 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29  | defined(WIN32)
0d70: 29 0a 0a 23 69 6e 63 6c 75 64 65 20 3c 77 69 6e  )..#include <win
0d80: 64 6f 77 73 2e 68 3e 0a 0a 2f 2a 20 53 61 76 65  dows.h>../* Save
0d90: 64 20 72 65 73 6f 75 72 63 65 20 69 6e 66 6f 72  d resource infor
0da0: 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 62  mation for the b
0db0: 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61 6e 20 6f  eginning of an o
0dc0: 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 73 74 61 74  peration */.stat
0dd0: 69 63 20 48 41 4e 44 4c 45 20 68 50 72 6f 63 65  ic HANDLE hProce
0de0: 73 73 3b 0a 73 74 61 74 69 63 20 46 49 4c 45 54  ss;.static FILET
0df0: 49 4d 45 20 66 74 4b 65 72 6e 65 6c 42 65 67 69  IME ftKernelBegi
0e00: 6e 3b 0a 73 74 61 74 69 63 20 46 49 4c 45 54 49  n;.static FILETI
0e10: 4d 45 20 66 74 55 73 65 72 42 65 67 69 6e 3b 0a  ME ftUserBegin;.
0e20: 74 79 70 65 64 65 66 20 42 4f 4f 4c 20 28 57 49  typedef BOOL (WI
0e30: 4e 41 50 49 20 2a 47 45 54 50 52 4f 43 54 49 4d  NAPI *GETPROCTIM
0e40: 45 53 29 28 48 41 4e 44 4c 45 2c 20 4c 50 46 49  ES)(HANDLE, LPFI
0e50: 4c 45 54 49 4d 45 2c 20 4c 50 46 49 4c 45 54 49  LETIME, LPFILETI
0e60: 4d 45 2c 20 4c 50 46 49 4c 45 54 49 4d 45 2c 20  ME, LPFILETIME, 
0e70: 4c 50 46 49 4c 45 54 49 4d 45 29 3b 0a 73 74 61  LPFILETIME);.sta
0e80: 74 69 63 20 47 45 54 50 52 4f 43 54 49 4d 45 53  tic GETPROCTIMES
0e90: 20 67 65 74 50 72 6f 63 65 73 73 54 69 6d 65 73   getProcessTimes
0ea0: 41 64 64 72 20 3d 20 4e 55 4c 4c 3b 0a 0a 2f 2a  Addr = NULL;../*
0eb0: 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65  .** Check to see
0ec0: 20 69 66 20 77 65 20 68 61 76 65 20 74 69 6d 65   if we have time
0ed0: 72 20 73 75 70 70 6f 72 74 2e 20 20 52 65 74 75  r support.  Retu
0ee0: 72 6e 20 31 20 69 66 20 6e 65 63 65 73 73 61 72  rn 1 if necessar
0ef0: 79 0a 2a 2a 20 73 75 70 70 6f 72 74 20 66 6f 75  y.** support fou
0f00: 6e 64 20 28 6f 72 20 66 6f 75 6e 64 20 70 72 65  nd (or found pre
0f10: 76 69 6f 75 73 6c 79 29 2e 0a 2a 2f 0a 73 74 61  viously)..*/.sta
0f20: 74 69 63 20 69 6e 74 20 68 61 73 54 69 6d 65 72  tic int hasTimer
0f30: 28 76 6f 69 64 29 7b 0a 20 20 69 66 28 20 67 65  (void){.  if( ge
0f40: 74 50 72 6f 63 65 73 73 54 69 6d 65 73 41 64 64  tProcessTimesAdd
0f50: 72 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  r ){.    return 
0f60: 31 3b 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  1;.  } else {.  
0f70: 20 20 2f 2a 20 47 65 74 50 72 6f 63 65 73 73 54    /* GetProcessT
0f80: 69 6d 65 73 28 29 20 69 73 6e 27 74 20 73 75 70  imes() isn't sup
0f90: 70 6f 72 74 65 64 20 69 6e 20 57 49 4e 39 35 20  ported in WIN95 
0fa0: 61 6e 64 20 73 6f 6d 65 20 6f 74 68 65 72 20 57  and some other W
0fb0: 69 6e 64 6f 77 73 20 76 65 72 73 69 6f 6e 73 2e  indows versions.
0fc0: 0a 20 20 20 20 2a 2a 20 53 65 65 20 69 66 20 74  .    ** See if t
0fd0: 68 65 20 76 65 72 73 69 6f 6e 20 77 65 20 61 72  he version we ar
0fe0: 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 68 61 73  e running on has
0ff0: 20 69 74 2c 20 61 6e 64 20 69 66 20 69 74 20 64   it, and if it d
1000: 6f 65 73 2c 20 73 61 76 65 20 6f 66 66 0a 20 20  oes, save off.  
1010: 20 20 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74    ** a pointer t
1020: 6f 20 69 74 20 61 6e 64 20 74 68 65 20 63 75 72  o it and the cur
1030: 72 65 6e 74 20 70 72 6f 63 65 73 73 20 68 61 6e  rent process han
1040: 64 6c 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  dle..    */.    
1050: 68 50 72 6f 63 65 73 73 20 3d 20 47 65 74 43 75  hProcess = GetCu
1060: 72 72 65 6e 74 50 72 6f 63 65 73 73 28 29 3b 0a  rrentProcess();.
1070: 20 20 20 20 69 66 28 20 68 50 72 6f 63 65 73 73      if( hProcess
1080: 20 29 7b 0a 20 20 20 20 20 20 48 49 4e 53 54 41   ){.      HINSTA
1090: 4e 43 45 20 68 69 6e 73 74 4c 69 62 20 3d 20 4c  NCE hinstLib = L
10a0: 6f 61 64 4c 69 62 72 61 72 79 28 54 45 58 54 28  oadLibrary(TEXT(
10b0: 22 4b 65 72 6e 65 6c 33 32 2e 64 6c 6c 22 29 29  "Kernel32.dll"))
10c0: 3b 0a 20 20 20 20 20 20 69 66 28 20 4e 55 4c 4c  ;.      if( NULL
10d0: 20 21 3d 20 68 69 6e 73 74 4c 69 62 20 29 7b 0a   != hinstLib ){.
10e0: 20 20 20 20 20 20 20 20 67 65 74 50 72 6f 63 65          getProce
10f0: 73 73 54 69 6d 65 73 41 64 64 72 20 3d 20 28 47  ssTimesAddr = (G
1100: 45 54 50 52 4f 43 54 49 4d 45 53 29 20 47 65 74  ETPROCTIMES) Get
1110: 50 72 6f 63 41 64 64 72 65 73 73 28 68 69 6e 73  ProcAddress(hins
1120: 74 4c 69 62 2c 20 22 47 65 74 50 72 6f 63 65 73  tLib, "GetProces
1130: 73 54 69 6d 65 73 22 29 3b 0a 20 20 20 20 20 20  sTimes");.      
1140: 20 20 69 66 28 20 4e 55 4c 4c 20 21 3d 20 67 65    if( NULL != ge
1150: 74 50 72 6f 63 65 73 73 54 69 6d 65 73 41 64 64  tProcessTimesAdd
1160: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  r ){.          r
1170: 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 20  eturn 1;.       
1180: 20 7d 0a 20 20 20 20 20 20 20 20 46 72 65 65 4c   }.        FreeL
1190: 69 62 72 61 72 79 28 68 69 6e 73 74 4c 69 62 29  ibrary(hinstLib)
11a0: 3b 20 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ; .      }.    }
11b0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  .  }.  return 0;
11c0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 42 65 67 69 6e 20  .}../*.** Begin 
11d0: 74 69 6d 69 6e 67 20 61 6e 20 6f 70 65 72 61 74  timing an operat
11e0: 69 6f 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ion.*/.static vo
11f0: 69 64 20 62 65 67 69 6e 54 69 6d 65 72 28 76 6f  id beginTimer(vo
1200: 69 64 29 7b 0a 20 20 69 66 28 20 65 6e 61 62 6c  id){.  if( enabl
1210: 65 54 69 6d 65 72 20 26 26 20 67 65 74 50 72 6f  eTimer && getPro
1220: 63 65 73 73 54 69 6d 65 73 41 64 64 72 20 29 7b  cessTimesAddr ){
1230: 0a 20 20 20 20 46 49 4c 45 54 49 4d 45 20 66 74  .    FILETIME ft
1240: 43 72 65 61 74 69 6f 6e 2c 20 66 74 45 78 69 74  Creation, ftExit
1250: 3b 0a 20 20 20 20 67 65 74 50 72 6f 63 65 73 73  ;.    getProcess
1260: 54 69 6d 65 73 41 64 64 72 28 68 50 72 6f 63 65  TimesAddr(hProce
1270: 73 73 2c 20 26 66 74 43 72 65 61 74 69 6f 6e 2c  ss, &ftCreation,
1280: 20 26 66 74 45 78 69 74 2c 20 26 66 74 4b 65 72   &ftExit, &ftKer
1290: 6e 65 6c 42 65 67 69 6e 2c 20 26 66 74 55 73 65  nelBegin, &ftUse
12a0: 72 42 65 67 69 6e 29 3b 0a 20 20 7d 0a 7d 0a 0a  rBegin);.  }.}..
12b0: 2f 2a 20 52 65 74 75 72 6e 20 74 68 65 20 64 69  /* Return the di
12c0: 66 66 65 72 65 6e 63 65 20 6f 66 20 74 77 6f 20  fference of two 
12d0: 46 49 4c 45 54 49 4d 45 20 73 74 72 75 63 74 73  FILETIME structs
12e0: 20 69 6e 20 73 65 63 6f 6e 64 73 20 2a 2f 0a 73   in seconds */.s
12f0: 74 61 74 69 63 20 64 6f 75 62 6c 65 20 74 69 6d  tatic double tim
1300: 65 44 69 66 66 28 46 49 4c 45 54 49 4d 45 20 2a  eDiff(FILETIME *
1310: 70 53 74 61 72 74 2c 20 46 49 4c 45 54 49 4d 45  pStart, FILETIME
1320: 20 2a 70 45 6e 64 29 7b 0a 20 20 73 71 6c 69 74   *pEnd){.  sqlit
1330: 65 5f 69 6e 74 36 34 20 69 36 34 53 74 61 72 74  e_int64 i64Start
1340: 20 3d 20 2a 28 28 73 71 6c 69 74 65 5f 69 6e 74   = *((sqlite_int
1350: 36 34 20 2a 29 20 70 53 74 61 72 74 29 3b 0a 20  64 *) pStart);. 
1360: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36   sqlite_int64 i6
1370: 34 45 6e 64 20 3d 20 2a 28 28 73 71 6c 69 74 65  4End = *((sqlite
1380: 5f 69 6e 74 36 34 20 2a 29 20 70 45 6e 64 29 3b  _int64 *) pEnd);
1390: 0a 20 20 72 65 74 75 72 6e 20 28 64 6f 75 62 6c  .  return (doubl
13a0: 65 29 20 28 28 69 36 34 45 6e 64 20 2d 20 69 36  e) ((i64End - i6
13b0: 34 53 74 61 72 74 29 20 2f 20 31 30 30 30 30 30  4Start) / 100000
13c0: 30 30 2e 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  00.0);.}../*.** 
13d0: 50 72 69 6e 74 20 74 68 65 20 74 69 6d 69 6e 67  Print the timing
13e0: 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 73 74 61   results..*/.sta
13f0: 74 69 63 20 76 6f 69 64 20 65 6e 64 54 69 6d 65  tic void endTime
1400: 72 28 76 6f 69 64 29 7b 0a 20 20 69 66 28 20 65  r(void){.  if( e
1410: 6e 61 62 6c 65 54 69 6d 65 72 20 26 26 20 67 65  nableTimer && ge
1420: 74 50 72 6f 63 65 73 73 54 69 6d 65 73 41 64 64  tProcessTimesAdd
1430: 72 29 7b 0a 20 20 20 20 46 49 4c 45 54 49 4d 45  r){.    FILETIME
1440: 20 66 74 43 72 65 61 74 69 6f 6e 2c 20 66 74 45   ftCreation, ftE
1450: 78 69 74 2c 20 66 74 4b 65 72 6e 65 6c 45 6e 64  xit, ftKernelEnd
1460: 2c 20 66 74 55 73 65 72 45 6e 64 3b 0a 20 20 20  , ftUserEnd;.   
1470: 20 67 65 74 50 72 6f 63 65 73 73 54 69 6d 65 73   getProcessTimes
1480: 41 64 64 72 28 68 50 72 6f 63 65 73 73 2c 20 26  Addr(hProcess, &
1490: 66 74 43 72 65 61 74 69 6f 6e 2c 20 26 66 74 45  ftCreation, &ftE
14a0: 78 69 74 2c 20 26 66 74 4b 65 72 6e 65 6c 45 6e  xit, &ftKernelEn
14b0: 64 2c 20 26 66 74 55 73 65 72 45 6e 64 29 3b 0a  d, &ftUserEnd);.
14c0: 20 20 20 20 70 72 69 6e 74 66 28 22 43 50 55 20      printf("CPU 
14d0: 54 69 6d 65 3a 20 75 73 65 72 20 25 66 20 73 79  Time: user %f sy
14e0: 73 20 25 66 5c 6e 22 2c 0a 20 20 20 20 20 20 20  s %f\n",.       
14f0: 74 69 6d 65 44 69 66 66 28 26 66 74 55 73 65 72  timeDiff(&ftUser
1500: 42 65 67 69 6e 2c 20 26 66 74 55 73 65 72 45 6e  Begin, &ftUserEn
1510: 64 29 2c 0a 20 20 20 20 20 20 20 74 69 6d 65 44  d),.       timeD
1520: 69 66 66 28 26 66 74 4b 65 72 6e 65 6c 42 65 67  iff(&ftKernelBeg
1530: 69 6e 2c 20 26 66 74 4b 65 72 6e 65 6c 45 6e 64  in, &ftKernelEnd
1540: 29 29 3b 0a 20 20 7d 0a 7d 0a 0a 23 64 65 66 69  ));.  }.}..#defi
1550: 6e 65 20 42 45 47 49 4e 5f 54 49 4d 45 52 20 62  ne BEGIN_TIMER b
1560: 65 67 69 6e 54 69 6d 65 72 28 29 0a 23 64 65 66  eginTimer().#def
1570: 69 6e 65 20 45 4e 44 5f 54 49 4d 45 52 20 65 6e  ine END_TIMER en
1580: 64 54 69 6d 65 72 28 29 0a 23 64 65 66 69 6e 65  dTimer().#define
1590: 20 48 41 53 5f 54 49 4d 45 52 20 68 61 73 54 69   HAS_TIMER hasTi
15a0: 6d 65 72 28 29 0a 0a 23 65 6c 73 65 0a 23 64 65  mer()..#else.#de
15b0: 66 69 6e 65 20 42 45 47 49 4e 5f 54 49 4d 45 52  fine BEGIN_TIMER
15c0: 20 0a 23 64 65 66 69 6e 65 20 45 4e 44 5f 54 49   .#define END_TI
15d0: 4d 45 52 0a 23 64 65 66 69 6e 65 20 48 41 53 5f  MER.#define HAS_
15e0: 54 49 4d 45 52 20 30 0a 23 65 6e 64 69 66 0a 0a  TIMER 0.#endif..
15f0: 2f 2a 0a 2a 2a 20 55 73 65 64 20 74 6f 20 70 72  /*.** Used to pr
1600: 65 76 65 6e 74 20 77 61 72 6e 69 6e 67 73 20 61  event warnings a
1610: 62 6f 75 74 20 75 6e 75 73 65 64 20 70 61 72 61  bout unused para
1620: 6d 65 74 65 72 73 0a 2a 2f 0a 23 64 65 66 69 6e  meters.*/.#defin
1630: 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54  e UNUSED_PARAMET
1640: 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29 0a  ER(x) (void)(x).
1650: 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 66 6f  ./*.** If the fo
1660: 6c 6c 6f 77 69 6e 67 20 66 6c 61 67 20 69 73 20  llowing flag is 
1670: 73 65 74 2c 20 74 68 65 6e 20 63 6f 6d 6d 61 6e  set, then comman
1680: 64 20 65 78 65 63 75 74 69 6f 6e 20 73 74 6f 70  d execution stop
1690: 73 0a 2a 2a 20 61 74 20 61 6e 20 65 72 72 6f 72  s.** at an error
16a0: 20 69 66 20 77 65 20 61 72 65 20 6e 6f 74 20 69   if we are not i
16b0: 6e 74 65 72 61 63 74 69 76 65 2e 0a 2a 2f 0a 73  nteractive..*/.s
16c0: 74 61 74 69 63 20 69 6e 74 20 62 61 69 6c 5f 6f  tatic int bail_o
16d0: 6e 5f 65 72 72 6f 72 20 3d 20 30 3b 0a 0a 2f 2a  n_error = 0;../*
16e0: 0a 2a 2a 20 54 68 72 65 61 74 20 73 74 64 69 6e  .** Threat stdin
16f0: 20 61 73 20 61 6e 20 69 6e 74 65 72 61 63 74 69   as an interacti
1700: 76 65 20 69 6e 70 75 74 20 69 66 20 74 68 65 20  ve input if the 
1710: 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62  following variab
1720: 6c 65 0a 2a 2a 20 69 73 20 74 72 75 65 2e 20 20  le.** is true.  
1730: 4f 74 68 65 72 77 69 73 65 2c 20 61 73 73 75 6d  Otherwise, assum
1740: 65 20 73 74 64 69 6e 20 69 73 20 63 6f 6e 6e 65  e stdin is conne
1750: 63 74 65 64 20 74 6f 20 61 20 66 69 6c 65 20 6f  cted to a file o
1760: 72 20 70 69 70 65 2e 0a 2a 2f 0a 73 74 61 74 69  r pipe..*/.stati
1770: 63 20 69 6e 74 20 73 74 64 69 6e 5f 69 73 5f 69  c int stdin_is_i
1780: 6e 74 65 72 61 63 74 69 76 65 20 3d 20 31 3b 0a  nteractive = 1;.
1790: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
17a0: 77 69 6e 67 20 69 73 20 74 68 65 20 6f 70 65 6e  wing is the open
17b0: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
17c0: 2e 20 20 57 65 20 6d 61 6b 65 20 61 20 70 6f 69  .  We make a poi
17d0: 6e 74 65 72 0a 2a 2a 20 74 6f 20 74 68 69 73 20  nter.** to this 
17e0: 64 61 74 61 62 61 73 65 20 61 20 73 74 61 74 69  database a stati
17f0: 63 20 76 61 72 69 61 62 6c 65 20 73 6f 20 74 68  c variable so th
1800: 61 74 20 69 74 20 63 61 6e 20 62 65 20 61 63 63  at it can be acc
1810: 65 73 73 65 64 0a 2a 2a 20 62 79 20 74 68 65 20  essed.** by the 
1820: 53 49 47 49 4e 54 20 68 61 6e 64 6c 65 72 20 74  SIGINT handler t
1830: 6f 20 69 6e 74 65 72 72 75 70 74 20 64 61 74 61  o interrupt data
1840: 62 61 73 65 20 70 72 6f 63 65 73 73 69 6e 67 2e  base processing.
1850: 0a 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c 69 74  .*/.static sqlit
1860: 65 33 20 2a 64 62 20 3d 20 30 3b 0a 0a 2f 2a 0a  e3 *db = 0;../*.
1870: 2a 2a 20 54 72 75 65 20 69 66 20 61 6e 20 69 6e  ** True if an in
1880: 74 65 72 72 75 70 74 20 28 43 6f 6e 74 72 6f 6c  terrupt (Control
1890: 2d 43 29 20 68 61 73 20 62 65 65 6e 20 72 65 63  -C) has been rec
18a0: 65 69 76 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  eived..*/.static
18b0: 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 73 65   volatile int se
18c0: 65 6e 49 6e 74 65 72 72 75 70 74 20 3d 20 30 3b  enInterrupt = 0;
18d0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ../*.** This is 
18e0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 6f 75 72 20  the name of our 
18f0: 70 72 6f 67 72 61 6d 2e 20 49 74 20 69 73 20 73  program. It is s
1900: 65 74 20 69 6e 20 6d 61 69 6e 28 29 2c 20 75 73  et in main(), us
1910: 65 64 0a 2a 2a 20 69 6e 20 61 20 6e 75 6d 62 65  ed.** in a numbe
1920: 72 20 6f 66 20 6f 74 68 65 72 20 70 6c 61 63 65  r of other place
1930: 73 2c 20 6d 6f 73 74 6c 79 20 66 6f 72 20 65 72  s, mostly for er
1940: 72 6f 72 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f  ror messages..*/
1950: 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 41 72  .static char *Ar
1960: 67 76 30 3b 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 6d  gv0;../*.** Prom
1970: 70 74 20 73 74 72 69 6e 67 73 2e 20 49 6e 69 74  pt strings. Init
1980: 69 61 6c 69 7a 65 64 20 69 6e 20 6d 61 69 6e 2e  ialized in main.
1990: 20 53 65 74 74 61 62 6c 65 20 77 69 74 68 0a 2a   Settable with.*
19a0: 2a 20 20 20 2e 70 72 6f 6d 70 74 20 6d 61 69 6e  *   .prompt main
19b0: 20 63 6f 6e 74 69 6e 75 65 0a 2a 2f 0a 73 74 61   continue.*/.sta
19c0: 74 69 63 20 63 68 61 72 20 6d 61 69 6e 50 72 6f  tic char mainPro
19d0: 6d 70 74 5b 32 30 5d 3b 20 20 20 20 20 2f 2a 20  mpt[20];     /* 
19e0: 46 69 72 73 74 20 6c 69 6e 65 20 70 72 6f 6d 70  First line promp
19f0: 74 2e 20 64 65 66 61 75 6c 74 3a 20 22 73 71 6c  t. default: "sql
1a00: 69 74 65 3e 20 22 2a 2f 0a 73 74 61 74 69 63 20  ite> "*/.static 
1a10: 63 68 61 72 20 63 6f 6e 74 69 6e 75 65 50 72 6f  char continuePro
1a20: 6d 70 74 5b 32 30 5d 3b 20 2f 2a 20 43 6f 6e 74  mpt[20]; /* Cont
1a30: 69 6e 75 61 74 69 6f 6e 20 70 72 6f 6d 70 74 2e  inuation prompt.
1a40: 20 64 65 66 61 75 6c 74 3a 20 22 20 20 20 2e 2e   default: "   ..
1a50: 2e 3e 20 22 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 57  .> " */../*.** W
1a60: 72 69 74 65 20 49 2f 4f 20 74 72 61 63 65 73 20  rite I/O traces 
1a70: 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
1a80: 20 73 74 72 65 61 6d 2e 0a 2a 2f 0a 23 69 66 64   stream..*/.#ifd
1a90: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1aa0: 5f 49 4f 54 52 41 43 45 0a 73 74 61 74 69 63 20  _IOTRACE.static 
1ab0: 46 49 4c 45 20 2a 69 6f 74 72 61 63 65 20 3d 20  FILE *iotrace = 
1ac0: 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0;.#endif../*.**
1ad0: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 77 6f   This routine wo
1ae0: 72 6b 73 20 6c 69 6b 65 20 70 72 69 6e 74 66 20  rks like printf 
1af0: 69 6e 20 74 68 61 74 20 69 74 73 20 66 69 72 73  in that its firs
1b00: 74 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 0a  t argument is a.
1b10: 2a 2a 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  ** format string
1b20: 20 61 6e 64 20 73 75 62 73 65 71 75 65 6e 74 20   and subsequent 
1b30: 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 76 61  arguments are va
1b40: 6c 75 65 73 20 74 6f 20 62 65 20 73 75 62 73 74  lues to be subst
1b50: 69 74 75 74 65 64 0a 2a 2a 20 69 6e 20 70 6c 61  ituted.** in pla
1b60: 63 65 20 6f 66 20 25 20 66 69 65 6c 64 73 2e 20  ce of % fields. 
1b70: 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 66   The result of f
1b80: 6f 72 6d 61 74 74 69 6e 67 20 74 68 69 73 20 73  ormatting this s
1b90: 74 72 69 6e 67 0a 2a 2a 20 69 73 20 77 72 69 74  tring.** is writ
1ba0: 74 65 6e 20 74 6f 20 69 6f 74 72 61 63 65 2e 0a  ten to iotrace..
1bb0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1bc0: 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a  _ENABLE_IOTRACE.
1bd0: 73 74 61 74 69 63 20 76 6f 69 64 20 69 6f 74 72  static void iotr
1be0: 61 63 65 50 72 69 6e 74 66 28 63 6f 6e 73 74 20  acePrintf(const 
1bf0: 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e  char *zFormat, .
1c00: 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61  ..){.  va_list a
1c10: 70 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20  p;.  char *z;.  
1c20: 69 66 28 20 69 6f 74 72 61 63 65 3d 3d 30 20 29  if( iotrace==0 )
1c30: 20 72 65 74 75 72 6e 3b 0a 20 20 76 61 5f 73 74   return;.  va_st
1c40: 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29  art(ap, zFormat)
1c50: 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f  ;.  z = sqlite3_
1c60: 76 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d 61 74  vmprintf(zFormat
1c70: 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28  , ap);.  va_end(
1c80: 61 70 29 3b 0a 20 20 66 70 72 69 6e 74 66 28 69  ap);.  fprintf(i
1c90: 6f 74 72 61 63 65 2c 20 22 25 73 22 2c 20 7a 29  otrace, "%s", z)
1ca0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
1cb0: 28 7a 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  (z);.}.#endif...
1cc0: 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 73  /*.** Determines
1cd0: 20 69 66 20 61 20 73 74 72 69 6e 67 20 69 73 20   if a string is 
1ce0: 61 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 74 2e  a number of not.
1cf0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 69  .*/.static int i
1d00: 73 4e 75 6d 62 65 72 28 63 6f 6e 73 74 20 63 68  sNumber(const ch
1d10: 61 72 20 2a 7a 2c 20 69 6e 74 20 2a 72 65 61 6c  ar *z, int *real
1d20: 6e 75 6d 29 7b 0a 20 20 69 66 28 20 2a 7a 3d 3d  num){.  if( *z==
1d30: 27 2d 27 20 7c 7c 20 2a 7a 3d 3d 27 2b 27 20 29  '-' || *z=='+' )
1d40: 20 7a 2b 2b 3b 0a 20 20 69 66 28 20 21 49 73 44   z++;.  if( !IsD
1d50: 69 67 69 74 28 2a 7a 29 20 29 7b 0a 20 20 20 20  igit(*z) ){.    
1d60: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
1d70: 7a 2b 2b 3b 0a 20 20 69 66 28 20 72 65 61 6c 6e  z++;.  if( realn
1d80: 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20  um ) *realnum = 
1d90: 30 3b 0a 20 20 77 68 69 6c 65 28 20 49 73 44 69  0;.  while( IsDi
1da0: 67 69 74 28 2a 7a 29 20 29 7b 20 7a 2b 2b 3b 20  git(*z) ){ z++; 
1db0: 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 2e 27 20  }.  if( *z=='.' 
1dc0: 29 7b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20  ){.    z++;.    
1dd0: 69 66 28 20 21 49 73 44 69 67 69 74 28 2a 7a 29  if( !IsDigit(*z)
1de0: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20   ) return 0;.   
1df0: 20 77 68 69 6c 65 28 20 49 73 44 69 67 69 74 28   while( IsDigit(
1e00: 2a 7a 29 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20  *z) ){ z++; }.  
1e10: 20 20 69 66 28 20 72 65 61 6c 6e 75 6d 20 29 20    if( realnum ) 
1e20: 2a 72 65 61 6c 6e 75 6d 20 3d 20 31 3b 0a 20 20  *realnum = 1;.  
1e30: 7d 0a 20 20 69 66 28 20 2a 7a 3d 3d 27 65 27 20  }.  if( *z=='e' 
1e40: 7c 7c 20 2a 7a 3d 3d 27 45 27 20 29 7b 0a 20 20  || *z=='E' ){.  
1e50: 20 20 7a 2b 2b 3b 0a 20 20 20 20 69 66 28 20 2a    z++;.    if( *
1e60: 7a 3d 3d 27 2b 27 20 7c 7c 20 2a 7a 3d 3d 27 2d  z=='+' || *z=='-
1e70: 27 20 29 20 7a 2b 2b 3b 0a 20 20 20 20 69 66 28  ' ) z++;.    if(
1e80: 20 21 49 73 44 69 67 69 74 28 2a 7a 29 20 29 20   !IsDigit(*z) ) 
1e90: 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 77 68  return 0;.    wh
1ea0: 69 6c 65 28 20 49 73 44 69 67 69 74 28 2a 7a 29  ile( IsDigit(*z)
1eb0: 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 20 20 69   ){ z++; }.    i
1ec0: 66 28 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72 65  f( realnum ) *re
1ed0: 61 6c 6e 75 6d 20 3d 20 31 3b 0a 20 20 7d 0a 20  alnum = 1;.  }. 
1ee0: 20 72 65 74 75 72 6e 20 2a 7a 3d 3d 30 3b 0a 7d   return *z==0;.}
1ef0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 67 6c 6f 62 61 6c  ../*.** A global
1f00: 20 63 68 61 72 2a 20 61 6e 64 20 61 6e 20 53 51   char* and an SQ
1f10: 4c 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 61 63  L function to ac
1f20: 63 65 73 73 20 69 74 73 20 63 75 72 72 65 6e 74  cess its current
1f30: 20 76 61 6c 75 65 20 0a 2a 2a 20 66 72 6f 6d 20   value .** from 
1f40: 77 69 74 68 69 6e 20 61 6e 20 53 51 4c 20 73 74  within an SQL st
1f50: 61 74 65 6d 65 6e 74 2e 20 54 68 69 73 20 70 72  atement. This pr
1f60: 6f 67 72 61 6d 20 75 73 65 64 20 74 6f 20 75 73  ogram used to us
1f70: 65 20 74 68 65 20 0a 2a 2a 20 73 71 6c 69 74 65  e the .** sqlite
1f80: 5f 65 78 65 63 5f 70 72 69 6e 74 66 28 29 20 41  _exec_printf() A
1f90: 50 49 20 74 6f 20 73 75 62 73 74 69 74 75 65 20  PI to substitue 
1fa0: 61 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 6e  a string into an
1fb0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a   SQL statement..
1fc0: 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74 20 77  ** The correct w
1fd0: 61 79 20 74 6f 20 64 6f 20 74 68 69 73 20 77 69  ay to do this wi
1fe0: 74 68 20 73 71 6c 69 74 65 33 20 69 73 20 74 6f  th sqlite3 is to
1ff0: 20 75 73 65 20 74 68 65 20 62 69 6e 64 20 41 50   use the bind AP
2000: 49 2c 20 62 75 74 0a 2a 2a 20 73 69 6e 63 65 20  I, but.** since 
2010: 74 68 65 20 73 68 65 6c 6c 20 69 73 20 62 75 69  the shell is bui
2020: 6c 74 20 61 72 6f 75 6e 64 20 74 68 65 20 63 61  lt around the ca
2030: 6c 6c 62 61 63 6b 20 70 61 72 61 64 69 67 6d 20  llback paradigm 
2040: 69 74 20 77 6f 75 6c 64 20 62 65 20 61 20 6c 6f  it would be a lo
2050: 74 0a 2a 2a 20 6f 66 20 77 6f 72 6b 2e 20 49 6e  t.** of work. In
2060: 73 74 65 61 64 20 6a 75 73 74 20 75 73 65 20 74  stead just use t
2070: 68 69 73 20 68 61 63 6b 2c 20 77 68 69 63 68 20  his hack, which 
2080: 69 73 20 71 75 69 74 65 20 68 61 72 6d 6c 65 73  is quite harmles
2090: 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e  s..*/.static con
20a0: 73 74 20 63 68 61 72 20 2a 7a 53 68 65 6c 6c 53  st char *zShellS
20b0: 74 61 74 69 63 20 3d 20 30 3b 0a 73 74 61 74 69  tatic = 0;.stati
20c0: 63 20 76 6f 69 64 20 73 68 65 6c 6c 73 74 61 74  c void shellstat
20d0: 69 63 46 75 6e 63 28 0a 20 20 73 71 6c 69 74 65  icFunc(.  sqlite
20e0: 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65  3_context *conte
20f0: 78 74 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a  xt,.  int argc,.
2100: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
2110: 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 61 73 73 65  **argv.){.  asse
2120: 72 74 28 20 30 3d 3d 61 72 67 63 20 29 3b 0a 20  rt( 0==argc );. 
2130: 20 61 73 73 65 72 74 28 20 7a 53 68 65 6c 6c 53   assert( zShellS
2140: 74 61 74 69 63 20 29 3b 0a 20 20 55 4e 55 53 45  tatic );.  UNUSE
2150: 44 5f 50 41 52 41 4d 45 54 45 52 28 61 72 67 63  D_PARAMETER(argc
2160: 29 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41  );.  UNUSED_PARA
2170: 4d 45 54 45 52 28 61 72 67 76 29 3b 0a 20 20 73  METER(argv);.  s
2180: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
2190: 78 74 28 63 6f 6e 74 65 78 74 2c 20 7a 53 68 65  xt(context, zShe
21a0: 6c 6c 53 74 61 74 69 63 2c 20 2d 31 2c 20 53 51  llStatic, -1, SQ
21b0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 7d 0a  LITE_STATIC);.}.
21c0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ../*.** This rou
21d0: 74 69 6e 65 20 72 65 61 64 73 20 61 20 6c 69 6e  tine reads a lin
21e0: 65 20 6f 66 20 74 65 78 74 20 66 72 6f 6d 20 46  e of text from F
21f0: 49 4c 45 20 69 6e 2c 20 73 74 6f 72 65 73 0a 2a  ILE in, stores.*
2200: 2a 20 74 68 65 20 74 65 78 74 20 69 6e 20 6d 65  * the text in me
2210: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72  mory obtained fr
2220: 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20  om malloc() and 
2230: 72 65 74 75 72 6e 73 20 61 20 70 6f 69 6e 74 65  returns a pointe
2240: 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 65 78 74  r.** to the text
2250: 2e 20 20 4e 55 4c 4c 20 69 73 20 72 65 74 75 72  .  NULL is retur
2260: 6e 65 64 20 61 74 20 65 6e 64 20 6f 66 20 66 69  ned at end of fi
2270: 6c 65 2c 20 6f 72 20 69 66 20 6d 61 6c 6c 6f 63  le, or if malloc
2280: 28 29 0a 2a 2a 20 66 61 69 6c 73 2e 0a 2a 2a 0a  ().** fails..**.
2290: 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
22a0: 20 69 73 20 6c 69 6b 65 20 22 72 65 61 64 6c 69   is like "readli
22b0: 6e 65 22 20 62 75 74 20 6e 6f 20 63 6f 6d 6d 61  ne" but no comma
22c0: 6e 64 2d 6c 69 6e 65 20 65 64 69 74 69 6e 67 0a  nd-line editing.
22d0: 2a 2a 20 69 73 20 64 6f 6e 65 2e 0a 2a 2f 0a 73  ** is done..*/.s
22e0: 74 61 74 69 63 20 63 68 61 72 20 2a 6c 6f 63 61  tatic char *loca
22f0: 6c 5f 67 65 74 6c 69 6e 65 28 63 68 61 72 20 2a  l_getline(char *
2300: 7a 50 72 6f 6d 70 74 2c 20 46 49 4c 45 20 2a 69  zPrompt, FILE *i
2310: 6e 2c 20 69 6e 74 20 63 73 76 46 6c 61 67 29 7b  n, int csvFlag){
2320: 0a 20 20 63 68 61 72 20 2a 7a 4c 69 6e 65 3b 0a  .  char *zLine;.
2330: 20 20 69 6e 74 20 6e 4c 69 6e 65 3b 0a 20 20 69    int nLine;.  i
2340: 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 6e 51 75  nt n;.  int inQu
2350: 6f 74 65 20 3d 20 30 3b 0a 0a 20 20 69 66 28 20  ote = 0;..  if( 
2360: 7a 50 72 6f 6d 70 74 20 26 26 20 2a 7a 50 72 6f  zPrompt && *zPro
2370: 6d 70 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  mpt ){.    print
2380: 66 28 22 25 73 22 2c 7a 50 72 6f 6d 70 74 29 3b  f("%s",zPrompt);
2390: 0a 20 20 20 20 66 66 6c 75 73 68 28 73 74 64 6f  .    fflush(stdo
23a0: 75 74 29 3b 0a 20 20 7d 0a 20 20 6e 4c 69 6e 65  ut);.  }.  nLine
23b0: 20 3d 20 31 30 30 3b 0a 20 20 7a 4c 69 6e 65 20   = 100;.  zLine 
23c0: 3d 20 6d 61 6c 6c 6f 63 28 20 6e 4c 69 6e 65 20  = malloc( nLine 
23d0: 29 3b 0a 20 20 69 66 28 20 7a 4c 69 6e 65 3d 3d  );.  if( zLine==
23e0: 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
23f0: 6e 20 3d 20 30 3b 0a 20 20 77 68 69 6c 65 28 20  n = 0;.  while( 
2400: 31 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 2b 31  1 ){.    if( n+1
2410: 30 30 3e 6e 4c 69 6e 65 20 29 7b 0a 20 20 20 20  00>nLine ){.    
2420: 20 20 6e 4c 69 6e 65 20 3d 20 6e 4c 69 6e 65 2a    nLine = nLine*
2430: 32 20 2b 20 31 30 30 3b 0a 20 20 20 20 20 20 7a  2 + 100;.      z
2440: 4c 69 6e 65 20 3d 20 72 65 61 6c 6c 6f 63 28 7a  Line = realloc(z
2450: 4c 69 6e 65 2c 20 6e 4c 69 6e 65 29 3b 0a 20 20  Line, nLine);.  
2460: 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 3d 3d 30      if( zLine==0
2470: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20   ) return 0;.   
2480: 20 7d 0a 20 20 20 20 69 66 28 20 66 67 65 74 73   }.    if( fgets
2490: 28 26 7a 4c 69 6e 65 5b 6e 5d 2c 20 6e 4c 69 6e  (&zLine[n], nLin
24a0: 65 20 2d 20 6e 2c 20 69 6e 29 3d 3d 30 20 29 7b  e - n, in)==0 ){
24b0: 0a 20 20 20 20 20 20 69 66 28 20 6e 3d 3d 30 20  .      if( n==0 
24c0: 29 7b 0a 20 20 20 20 20 20 20 20 66 72 65 65 28  ){.        free(
24d0: 7a 4c 69 6e 65 29 3b 0a 20 20 20 20 20 20 20 20  zLine);.        
24e0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20  return 0;.      
24f0: 7d 0a 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6e 5d  }.      zLine[n]
2500: 20 3d 20 30 3b 0a 20 20 20 20 20 20 62 72 65 61   = 0;.      brea
2510: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77 68 69  k;.    }.    whi
2520: 6c 65 28 20 7a 4c 69 6e 65 5b 6e 5d 20 29 7b 0a  le( zLine[n] ){.
2530: 20 20 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 5b        if( zLine[
2540: 6e 5d 3d 3d 27 22 27 20 29 20 69 6e 51 75 6f 74  n]=='"' ) inQuot
2550: 65 20 3d 20 21 69 6e 51 75 6f 74 65 3b 0a 20 20  e = !inQuote;.  
2560: 20 20 20 20 6e 2b 2b 3b 0a 20 20 20 20 7d 0a 20      n++;.    }. 
2570: 20 20 20 69 66 28 20 6e 3e 30 20 26 26 20 7a 4c     if( n>0 && zL
2580: 69 6e 65 5b 6e 2d 31 5d 3d 3d 27 5c 6e 27 20 26  ine[n-1]=='\n' &
2590: 26 20 28 21 69 6e 51 75 6f 74 65 20 7c 7c 20 21  & (!inQuote || !
25a0: 63 73 76 46 6c 61 67 29 20 29 7b 0a 20 20 20 20  csvFlag) ){.    
25b0: 20 20 6e 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28    n--;.      if(
25c0: 20 6e 3e 30 20 26 26 20 7a 4c 69 6e 65 5b 6e 2d   n>0 && zLine[n-
25d0: 31 5d 3d 3d 27 5c 72 27 20 29 20 6e 2d 2d 3b 0a  1]=='\r' ) n--;.
25e0: 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6e 5d 20 3d        zLine[n] =
25f0: 20 30 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   0;.      break;
2600: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 7a 4c 69  .    }.  }.  zLi
2610: 6e 65 20 3d 20 72 65 61 6c 6c 6f 63 28 20 7a 4c  ne = realloc( zL
2620: 69 6e 65 2c 20 6e 2b 31 20 29 3b 0a 20 20 72 65  ine, n+1 );.  re
2630: 74 75 72 6e 20 7a 4c 69 6e 65 3b 0a 7d 0a 0a 2f  turn zLine;.}../
2640: 2a 0a 2a 2a 20 52 65 74 72 69 65 76 65 20 61 20  *.** Retrieve a 
2650: 73 69 6e 67 6c 65 20 6c 69 6e 65 20 6f 66 20 69  single line of i
2660: 6e 70 75 74 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a  nput text..**.**
2670: 20 7a 50 72 69 6f 72 20 69 73 20 61 20 73 74 72   zPrior is a str
2680: 69 6e 67 20 6f 66 20 70 72 69 6f 72 20 74 65 78  ing of prior tex
2690: 74 20 72 65 74 72 69 65 76 65 64 2e 20 20 49 66  t retrieved.  If
26a0: 20 6e 6f 74 20 74 68 65 20 65 6d 70 74 79 0a 2a   not the empty.*
26b0: 2a 20 73 74 72 69 6e 67 2c 20 74 68 65 6e 20 69  * string, then i
26c0: 73 73 75 65 20 61 20 63 6f 6e 74 69 6e 75 61 74  ssue a continuat
26d0: 69 6f 6e 20 70 72 6f 6d 70 74 2e 0a 2a 2f 0a 73  ion prompt..*/.s
26e0: 74 61 74 69 63 20 63 68 61 72 20 2a 6f 6e 65 5f  tatic char *one_
26f0: 69 6e 70 75 74 5f 6c 69 6e 65 28 63 6f 6e 73 74  input_line(const
2700: 20 63 68 61 72 20 2a 7a 50 72 69 6f 72 2c 20 46   char *zPrior, F
2710: 49 4c 45 20 2a 69 6e 29 7b 0a 20 20 63 68 61 72  ILE *in){.  char
2720: 20 2a 7a 50 72 6f 6d 70 74 3b 0a 20 20 63 68 61   *zPrompt;.  cha
2730: 72 20 2a 7a 52 65 73 75 6c 74 3b 0a 20 20 69 66  r *zResult;.  if
2740: 28 20 69 6e 21 3d 30 20 29 7b 0a 20 20 20 20 72  ( in!=0 ){.    r
2750: 65 74 75 72 6e 20 6c 6f 63 61 6c 5f 67 65 74 6c  eturn local_getl
2760: 69 6e 65 28 30 2c 20 69 6e 2c 20 30 29 3b 0a 20  ine(0, in, 0);. 
2770: 20 7d 0a 20 20 69 66 28 20 7a 50 72 69 6f 72 20   }.  if( zPrior 
2780: 26 26 20 7a 50 72 69 6f 72 5b 30 5d 20 29 7b 0a  && zPrior[0] ){.
2790: 20 20 20 20 7a 50 72 6f 6d 70 74 20 3d 20 63 6f      zPrompt = co
27a0: 6e 74 69 6e 75 65 50 72 6f 6d 70 74 3b 0a 20 20  ntinuePrompt;.  
27b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 50 72 6f 6d  }else{.    zProm
27c0: 70 74 20 3d 20 6d 61 69 6e 50 72 6f 6d 70 74 3b  pt = mainPrompt;
27d0: 0a 20 20 7d 0a 20 20 7a 52 65 73 75 6c 74 20 3d  .  }.  zResult =
27e0: 20 72 65 61 64 6c 69 6e 65 28 7a 50 72 6f 6d 70   readline(zPromp
27f0: 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
2800: 48 41 56 45 5f 52 45 41 44 4c 49 4e 45 29 20 26  HAVE_READLINE) &
2810: 26 20 48 41 56 45 5f 52 45 41 44 4c 49 4e 45 3d  & HAVE_READLINE=
2820: 3d 31 0a 20 20 69 66 28 20 7a 52 65 73 75 6c 74  =1.  if( zResult
2830: 20 26 26 20 2a 7a 52 65 73 75 6c 74 20 29 20 61   && *zResult ) a
2840: 64 64 5f 68 69 73 74 6f 72 79 28 7a 52 65 73 75  dd_history(zResu
2850: 6c 74 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65  lt);.#endif.  re
2860: 74 75 72 6e 20 7a 52 65 73 75 6c 74 3b 0a 7d 0a  turn zResult;.}.
2870: 0a 73 74 72 75 63 74 20 70 72 65 76 69 6f 75 73  .struct previous
2880: 5f 6d 6f 64 65 5f 64 61 74 61 20 7b 0a 20 20 69  _mode_data {.  i
2890: 6e 74 20 76 61 6c 69 64 3b 20 20 20 20 20 20 20  nt valid;       
28a0: 20 2f 2a 20 49 73 20 74 68 65 72 65 20 6c 65 67   /* Is there leg
28b0: 69 74 20 64 61 74 61 20 69 6e 20 68 65 72 65 3f  it data in here?
28c0: 20 2a 2f 0a 20 20 69 6e 74 20 6d 6f 64 65 3b 0a   */.  int mode;.
28d0: 20 20 69 6e 74 20 73 68 6f 77 48 65 61 64 65 72    int showHeader
28e0: 3b 0a 20 20 69 6e 74 20 63 6f 6c 57 69 64 74 68  ;.  int colWidth
28f0: 5b 31 30 30 5d 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  [100];.};../*.**
2900: 20 41 6e 20 70 6f 69 6e 74 65 72 20 74 6f 20 61   An pointer to a
2910: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
2920: 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
2930: 70 61 73 73 65 64 20 66 72 6f 6d 0a 2a 2a 20 74  passed from.** t
2940: 68 65 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20  he main program 
2950: 74 6f 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 2e  to the callback.
2960: 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74    This is used t
2970: 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 0a 2a 2a  o communicate.**
2980: 20 73 74 61 74 65 20 61 6e 64 20 6d 6f 64 65 20   state and mode 
2990: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
29a0: 73 74 72 75 63 74 20 63 61 6c 6c 62 61 63 6b 5f  struct callback_
29b0: 64 61 74 61 20 7b 0a 20 20 73 71 6c 69 74 65 33  data {.  sqlite3
29c0: 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20   *db;           
29d0: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
29e0: 2a 2f 0a 20 20 69 6e 74 20 65 63 68 6f 4f 6e 3b  */.  int echoOn;
29f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2a00: 72 75 65 20 74 6f 20 65 63 68 6f 20 69 6e 70 75  rue to echo inpu
2a10: 74 20 63 6f 6d 6d 61 6e 64 73 20 2a 2f 0a 20 20  t commands */.  
2a20: 69 6e 74 20 73 74 61 74 73 4f 6e 3b 20 20 20 20  int statsOn;    
2a30: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
2a40: 6f 20 64 69 73 70 6c 61 79 20 6d 65 6d 6f 72 79  o display memory
2a50: 20 73 74 61 74 73 20 62 65 66 6f 72 65 20 65 61   stats before ea
2a60: 63 68 20 66 69 6e 61 6c 69 7a 65 20 2a 2f 0a 20  ch finalize */. 
2a70: 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20   int cnt;       
2a80: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
2a90: 72 20 6f 66 20 72 65 63 6f 72 64 73 20 64 69 73  r of records dis
2aa0: 70 6c 61 79 65 64 20 73 6f 20 66 61 72 20 2a 2f  played so far */
2ab0: 0a 20 20 46 49 4c 45 20 2a 6f 75 74 3b 20 20 20  .  FILE *out;   
2ac0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69            /* Wri
2ad0: 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20  te results here 
2ae0: 2a 2f 0a 20 20 46 49 4c 45 20 2a 74 72 61 63 65  */.  FILE *trace
2af0: 4f 75 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  Out;        /* O
2b00: 75 74 70 75 74 20 66 6f 72 20 73 71 6c 69 74 65  utput for sqlite
2b10: 33 5f 74 72 61 63 65 28 29 20 2a 2f 0a 20 20 69  3_trace() */.  i
2b20: 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
2b30: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2b40: 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a  of errors seen *
2b50: 2f 0a 20 20 69 6e 74 20 6d 6f 64 65 3b 20 20 20  /.  int mode;   
2b60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e             /* An
2b70: 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 73 65 74   output mode set
2b80: 74 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 77 72  ting */.  int wr
2b90: 69 74 61 62 6c 65 53 63 68 65 6d 61 3b 20 20 20  itableSchema;   
2ba0: 20 2f 2a 20 54 72 75 65 20 69 66 20 50 52 41 47   /* True if PRAG
2bb0: 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
2bc0: 6d 61 3d 4f 4e 20 2a 2f 0a 20 20 69 6e 74 20 73  ma=ON */.  int s
2bd0: 68 6f 77 48 65 61 64 65 72 3b 20 20 20 20 20 20  howHeader;      
2be0: 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 73 68 6f    /* True to sho
2bf0: 77 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69  w column names i
2c00: 6e 20 4c 69 73 74 20 6f 72 20 43 6f 6c 75 6d 6e  n List or Column
2c10: 20 6d 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20   mode */.  char 
2c20: 2a 7a 44 65 73 74 54 61 62 6c 65 3b 20 20 20 20  *zDestTable;    
2c30: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 65 73    /* Name of des
2c40: 74 69 6e 61 74 69 6f 6e 20 74 61 62 6c 65 20 77  tination table w
2c50: 68 65 6e 20 4d 4f 44 45 5f 49 6e 73 65 72 74 20  hen MODE_Insert 
2c60: 2a 2f 0a 20 20 63 68 61 72 20 73 65 70 61 72 61  */.  char separa
2c70: 74 6f 72 5b 32 30 5d 3b 20 20 20 20 2f 2a 20 53  tor[20];    /* S
2c80: 65 70 61 72 61 74 6f 72 20 63 68 61 72 61 63 74  eparator charact
2c90: 65 72 20 66 6f 72 20 4d 4f 44 45 5f 4c 69 73 74  er for MODE_List
2ca0: 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6c 57 69 64   */.  int colWid
2cb0: 74 68 5b 31 30 30 5d 3b 20 20 20 20 20 2f 2a 20  th[100];     /* 
2cc0: 52 65 71 75 65 73 74 65 64 20 77 69 64 74 68 20  Requested width 
2cd0: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 77  of each column w
2ce0: 68 65 6e 20 69 6e 20 63 6f 6c 75 6d 6e 20 6d 6f  hen in column mo
2cf0: 64 65 2a 2f 0a 20 20 69 6e 74 20 61 63 74 75 61  de*/.  int actua
2d00: 6c 57 69 64 74 68 5b 31 30 30 5d 3b 20 20 2f 2a  lWidth[100];  /*
2d10: 20 41 63 74 75 61 6c 20 77 69 64 74 68 20 6f 66   Actual width of
2d20: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
2d30: 20 20 63 68 61 72 20 6e 75 6c 6c 76 61 6c 75 65    char nullvalue
2d40: 5b 32 30 5d 3b 20 20 20 20 2f 2a 20 54 68 65 20  [20];    /* The 
2d50: 74 65 78 74 20 74 6f 20 70 72 69 6e 74 20 77 68  text to print wh
2d60: 65 6e 20 61 20 4e 55 4c 4c 20 63 6f 6d 65 73 20  en a NULL comes 
2d70: 62 61 63 6b 20 66 72 6f 6d 0a 20 20 20 20 20 20  back from.      
2d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d90: 20 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61     ** the databa
2da0: 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 70  se */.  struct p
2db0: 72 65 76 69 6f 75 73 5f 6d 6f 64 65 5f 64 61 74  revious_mode_dat
2dc0: 61 20 65 78 70 6c 61 69 6e 50 72 65 76 3b 0a 20  a explainPrev;. 
2dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de0: 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64 73          /* Holds
2df0: 20 74 68 65 20 6d 6f 64 65 20 69 6e 66 6f 72 6d   the mode inform
2e00: 61 74 69 6f 6e 20 6a 75 73 74 20 62 65 66 6f 72  ation just befor
2e10: 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e.              
2e20: 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 2e 65             ** .e
2e30: 78 70 6c 61 69 6e 20 4f 4e 20 2a 2f 0a 20 20 63  xplain ON */.  c
2e40: 68 61 72 20 6f 75 74 66 69 6c 65 5b 46 49 4c 45  har outfile[FILE
2e50: 4e 41 4d 45 5f 4d 41 58 5d 3b 20 2f 2a 20 46 69  NAME_MAX]; /* Fi
2e60: 6c 65 6e 61 6d 65 20 66 6f 72 20 2a 6f 75 74 20  lename for *out 
2e70: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
2e80: 2a 7a 44 62 46 69 6c 65 6e 61 6d 65 3b 20 20 20  *zDbFilename;   
2e90: 20 2f 2a 20 6e 61 6d 65 20 6f 66 20 74 68 65 20   /* name of the 
2ea0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
2eb0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
2ec0: 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Vfs;           /
2ed0: 2a 20 4e 61 6d 65 20 6f 66 20 56 46 53 20 74 6f  * Name of VFS to
2ee0: 20 75 73 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65   use */.  sqlite
2ef0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 20 20  3_stmt *pStmt;  
2f00: 20 2f 2a 20 43 75 72 72 65 6e 74 20 73 74 61 74   /* Current stat
2f10: 65 6d 65 6e 74 20 69 66 20 61 6e 79 2e 20 2a 2f  ement if any. */
2f20: 0a 20 20 46 49 4c 45 20 2a 70 4c 6f 67 3b 20 20  .  FILE *pLog;  
2f30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69            /* Wri
2f40: 74 65 20 6c 6f 67 20 6f 75 74 70 75 74 20 68 65  te log output he
2f50: 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  re */.};../*.** 
2f60: 54 68 65 73 65 20 61 72 65 20 74 68 65 20 61 6c  These are the al
2f70: 6c 6f 77 65 64 20 6d 6f 64 65 73 2e 0a 2a 2f 0a  lowed modes..*/.
2f80: 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 4c 69 6e  #define MODE_Lin
2f90: 65 20 20 20 20 20 30 20 20 2f 2a 20 4f 6e 65 20  e     0  /* One 
2fa0: 63 6f 6c 75 6d 6e 20 70 65 72 20 6c 69 6e 65 2e  column per line.
2fb0: 20 20 42 6c 61 6e 6b 20 6c 69 6e 65 20 62 65 74    Blank line bet
2fc0: 77 65 65 6e 20 72 65 63 6f 72 64 73 20 2a 2f 0a  ween records */.
2fd0: 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 43 6f 6c  #define MODE_Col
2fe0: 75 6d 6e 20 20 20 31 20 20 2f 2a 20 4f 6e 65 20  umn   1  /* One 
2ff0: 72 65 63 6f 72 64 20 70 65 72 20 6c 69 6e 65 20  record per line 
3000: 69 6e 20 6e 65 61 74 20 63 6f 6c 75 6d 6e 73 20  in neat columns 
3010: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f  */.#define MODE_
3020: 4c 69 73 74 20 20 20 20 20 32 20 20 2f 2a 20 4f  List     2  /* O
3030: 6e 65 20 72 65 63 6f 72 64 20 70 65 72 20 6c 69  ne record per li
3040: 6e 65 20 77 69 74 68 20 61 20 73 65 70 61 72 61  ne with a separa
3050: 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  tor */.#define M
3060: 4f 44 45 5f 53 65 6d 69 20 20 20 20 20 33 20 20  ODE_Semi     3  
3070: 2f 2a 20 53 61 6d 65 20 61 73 20 4d 4f 44 45 5f  /* Same as MODE_
3080: 4c 69 73 74 20 62 75 74 20 61 70 70 65 6e 64 20  List but append 
3090: 22 3b 22 20 74 6f 20 65 61 63 68 20 6c 69 6e 65  ";" to each line
30a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45   */.#define MODE
30b0: 5f 48 74 6d 6c 20 20 20 20 20 34 20 20 2f 2a 20  _Html     4  /* 
30c0: 47 65 6e 65 72 61 74 65 20 61 6e 20 58 48 54 4d  Generate an XHTM
30d0: 4c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  L table */.#defi
30e0: 6e 65 20 4d 4f 44 45 5f 49 6e 73 65 72 74 20 20  ne MODE_Insert  
30f0: 20 35 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20   5  /* Generate 
3100: 53 51 4c 20 22 69 6e 73 65 72 74 22 20 73 74 61  SQL "insert" sta
3110: 74 65 6d 65 6e 74 73 20 2a 2f 0a 23 64 65 66 69  tements */.#defi
3120: 6e 65 20 4d 4f 44 45 5f 54 63 6c 20 20 20 20 20  ne MODE_Tcl     
3130: 20 36 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20   6  /* Generate 
3140: 41 4e 53 49 2d 43 20 6f 72 20 54 43 4c 20 71 75  ANSI-C or TCL qu
3150: 6f 74 65 64 20 65 6c 65 6d 65 6e 74 73 20 2a 2f  oted elements */
3160: 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 43 73  .#define MODE_Cs
3170: 76 20 20 20 20 20 20 37 20 20 2f 2a 20 51 75 6f  v      7  /* Quo
3180: 74 65 20 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62  te strings, numb
3190: 65 72 73 20 61 72 65 20 70 6c 61 69 6e 20 2a 2f  ers are plain */
31a0: 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 45 78  .#define MODE_Ex
31b0: 70 6c 61 69 6e 20 20 38 20 20 2f 2a 20 4c 69 6b  plain  8  /* Lik
31c0: 65 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 2c 20 62  e MODE_Column, b
31d0: 75 74 20 64 6f 20 6e 6f 74 20 74 72 75 6e 63 61  ut do not trunca
31e0: 74 65 20 64 61 74 61 20 2a 2f 0a 0a 73 74 61 74  te data */..stat
31f0: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6d  ic const char *m
3200: 6f 64 65 44 65 73 63 72 5b 5d 20 3d 20 7b 0a 20  odeDescr[] = {. 
3210: 20 22 6c 69 6e 65 22 2c 0a 20 20 22 63 6f 6c 75   "line",.  "colu
3220: 6d 6e 22 2c 0a 20 20 22 6c 69 73 74 22 2c 0a 20  mn",.  "list",. 
3230: 20 22 73 65 6d 69 22 2c 0a 20 20 22 68 74 6d 6c   "semi",.  "html
3240: 22 2c 0a 20 20 22 69 6e 73 65 72 74 22 2c 0a 20  ",.  "insert",. 
3250: 20 22 74 63 6c 22 2c 0a 20 20 22 63 73 76 22 2c   "tcl",.  "csv",
3260: 0a 20 20 22 65 78 70 6c 61 69 6e 22 2c 0a 7d 3b  .  "explain",.};
3270: 0a 0a 2f 2a 0a 2a 2a 20 4e 75 6d 62 65 72 20 6f  ../*.** Number o
3280: 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 6e  f elements in an
3290: 20 61 72 72 61 79 0a 2a 2f 0a 23 64 65 66 69 6e   array.*/.#defin
32a0: 65 20 41 72 72 61 79 53 69 7a 65 28 58 29 20 20  e ArraySize(X)  
32b0: 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f  (int)(sizeof(X)/
32c0: 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 0a 0a 2f  sizeof(X[0]))../
32d0: 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 61 20 73  *.** Compute a s
32e0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 74 68 61  tring length tha
32f0: 74 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20  t is limited to 
3300: 77 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72  what can be stor
3310: 65 64 20 69 6e 0a 2a 2a 20 6c 6f 77 65 72 20 33  ed in.** lower 3
3320: 30 20 62 69 74 73 20 6f 66 20 61 20 33 32 2d 62  0 bits of a 32-b
3330: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
3340: 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  r..*/.static int
3350: 20 73 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20   strlen30(const 
3360: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 63 6f 6e 73  char *z){.  cons
3370: 74 20 63 68 61 72 20 2a 7a 32 20 3d 20 7a 3b 0a  t char *z2 = z;.
3380: 20 20 77 68 69 6c 65 28 20 2a 7a 32 20 29 7b 20    while( *z2 ){ 
3390: 7a 32 2b 2b 3b 20 7d 0a 20 20 72 65 74 75 72 6e  z2++; }.  return
33a0: 20 30 78 33 66 66 66 66 66 66 66 20 26 20 28 69   0x3fffffff & (i
33b0: 6e 74 29 28 7a 32 20 2d 20 7a 29 3b 0a 7d 0a 0a  nt)(z2 - z);.}..
33c0: 2f 2a 0a 2a 2a 20 41 20 63 61 6c 6c 62 61 63 6b  /*.** A callback
33d0: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
33e0: 5f 6c 6f 67 28 29 20 69 6e 74 65 72 66 61 63 65  _log() interface
33f0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
3400: 20 73 68 65 6c 6c 4c 6f 67 28 76 6f 69 64 20 2a   shellLog(void *
3410: 70 41 72 67 2c 20 69 6e 74 20 69 45 72 72 43 6f  pArg, int iErrCo
3420: 64 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  de, const char *
3430: 7a 4d 73 67 29 7b 0a 20 20 73 74 72 75 63 74 20  zMsg){.  struct 
3440: 63 61 6c 6c 62 61 63 6b 5f 64 61 74 61 20 2a 70  callback_data *p
3450: 20 3d 20 28 73 74 72 75 63 74 20 63 61 6c 6c 62   = (struct callb
3460: 61 63 6b 5f 64 61 74 61 2a 29 70 41 72 67 3b 0a  ack_data*)pArg;.
3470: 20 20 69 66 28 20 70 2d 3e 70 4c 6f 67 3d 3d 30    if( p->pLog==0
3480: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 66 70 72   ) return;.  fpr
3490: 69 6e 74 66 28 70 2d 3e 70 4c 6f 67 2c 20 22 28  intf(p->pLog, "(
34a0: 25 64 29 20 25 73 5c 6e 22 2c 20 69 45 72 72 43  %d) %s\n", iErrC
34b0: 6f 64 65 2c 20 7a 4d 73 67 29 3b 0a 20 20 66 66  ode, zMsg);.  ff
34c0: 6c 75 73 68 28 70 2d 3e 70 4c 6f 67 29 3b 0a 7d  lush(p->pLog);.}
34d0: 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 74  ../*.** Output t
34e0: 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20  he given string 
34f0: 61 73 20 61 20 68 65 78 2d 65 6e 63 6f 64 65 64  as a hex-encoded
3500: 20 62 6c 6f 62 20 28 65 67 2e 20 58 27 31 32 33   blob (eg. X'123
3510: 34 27 20 29 0a 2a 2f 0a 73 74 61 74 69 63 20 76  4' ).*/.static v
3520: 6f 69 64 20 6f 75 74 70 75 74 5f 68 65 78 5f 62  oid output_hex_b
3530: 6c 6f 62 28 46 49 4c 45 20 2a 6f 75 74 2c 20 63  lob(FILE *out, c
3540: 6f 6e 73 74 20 76 6f 69 64 20 2a 70 42 6c 6f 62  onst void *pBlob
3550: 2c 20 69 6e 74 20 6e 42 6c 6f 62 29 7b 0a 20 20  , int nBlob){.  
3560: 69 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a  int i;.  char *z
3570: 42 6c 6f 62 20 3d 20 28 63 68 61 72 20 2a 29 70  Blob = (char *)p
3580: 42 6c 6f 62 3b 0a 20 20 66 70 72 69 6e 74 66 28  Blob;.  fprintf(
3590: 6f 75 74 2c 22 58 27 22 29 3b 0a 20 20 66 6f 72  out,"X'");.  for
35a0: 28 69 3d 30 3b 20 69 3c 6e 42 6c 6f 62 3b 20 69  (i=0; i<nBlob; i
35b0: 2b 2b 29 7b 20 66 70 72 69 6e 74 66 28 6f 75 74  ++){ fprintf(out
35c0: 2c 22 25 30 32 78 22 2c 7a 42 6c 6f 62 5b 69 5d  ,"%02x",zBlob[i]
35d0: 26 30 78 66 66 29 3b 20 7d 0a 20 20 66 70 72 69  &0xff); }.  fpri
35e0: 6e 74 66 28 6f 75 74 2c 22 27 22 29 3b 0a 7d 0a  ntf(out,"'");.}.
35f0: 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 74 68  ./*.** Output th
3600: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
3610: 73 20 61 20 71 75 6f 74 65 64 20 73 74 72 69 6e  s a quoted strin
3620: 67 20 75 73 69 6e 67 20 53 51 4c 20 71 75 6f 74  g using SQL quot
3630: 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e  ing conventions.
3640: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
3650: 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 73 74  output_quoted_st
3660: 72 69 6e 67 28 46 49 4c 45 20 2a 6f 75 74 2c 20  ring(FILE *out, 
3670: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a  const char *z){.
3680: 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 6e    int i;.  int n
3690: 53 69 6e 67 6c 65 20 3d 20 30 3b 0a 20 20 66 6f  Single = 0;.  fo
36a0: 72 28 69 3d 30 3b 20 7a 5b 69 5d 3b 20 69 2b 2b  r(i=0; z[i]; i++
36b0: 29 7b 0a 20 20 20 20 69 66 28 20 7a 5b 69 5d 3d  ){.    if( z[i]=
36c0: 3d 27 5c 27 27 20 29 20 6e 53 69 6e 67 6c 65 2b  ='\'' ) nSingle+
36d0: 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6e 53 69  +;.  }.  if( nSi
36e0: 6e 67 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 66  ngle==0 ){.    f
36f0: 70 72 69 6e 74 66 28 6f 75 74 2c 22 27 25 73 27  printf(out,"'%s'
3700: 22 2c 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ",z);.  }else{. 
3710: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 22     fprintf(out,"
3720: 27 22 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  '");.    while( 
3730: 2a 7a 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28  *z ){.      for(
3740: 69 3d 30 3b 20 7a 5b 69 5d 20 26 26 20 7a 5b 69  i=0; z[i] && z[i
3750: 5d 21 3d 27 5c 27 27 3b 20 69 2b 2b 29 7b 7d 0a  ]!='\''; i++){}.
3760: 20 20 20 20 20 20 69 66 28 20 69 3d 3d 30 20 29        if( i==0 )
3770: 7b 0a 20 20 20 20 20 20 20 20 66 70 72 69 6e 74  {.        fprint
3780: 66 28 6f 75 74 2c 22 27 27 22 29 3b 0a 20 20 20  f(out,"''");.   
3790: 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 20 20       z++;.      
37a0: 7d 65 6c 73 65 20 69 66 28 20 7a 5b 69 5d 3d 3d  }else if( z[i]==
37b0: 27 5c 27 27 20 29 7b 0a 20 20 20 20 20 20 20 20  '\'' ){.        
37c0: 66 70 72 69 6e 74 66 28 6f 75 74 2c 22 25 2e 2a  fprintf(out,"%.*
37d0: 73 27 27 22 2c 69 2c 7a 29 3b 0a 20 20 20 20 20  s''",i,z);.     
37e0: 20 20 20 7a 20 2b 3d 20 69 2b 31 3b 0a 20 20 20     z += i+1;.   
37f0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3800: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 22 25    fprintf(out,"%
3810: 73 22 2c 7a 29 3b 0a 20 20 20 20 20 20 20 20 62  s",z);.        b
3820: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
3830: 20 20 7d 0a 20 20 20 20 66 70 72 69 6e 74 66 28    }.    fprintf(
3840: 6f 75 74 2c 22 27 22 29 3b 0a 20 20 7d 0a 7d 0a  out,"'");.  }.}.
3850: 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 74 68  ./*.** Output th
3860: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
3870: 73 20 61 20 71 75 6f 74 65 64 20 61 63 63 6f 72  s a quoted accor
3880: 64 69 6e 67 20 74 6f 20 43 20 6f 72 20 54 43 4c  ding to C or TCL
3890: 20 71 75 6f 74 69 6e 67 20 72 75 6c 65 73 2e 0a   quoting rules..
38a0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f  */.static void o
38b0: 75 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 46  utput_c_string(F
38c0: 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20  ILE *out, const 
38d0: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 75 6e 73 69  char *z){.  unsi
38e0: 67 6e 65 64 20 69 6e 74 20 63 3b 0a 20 20 66 70  gned int c;.  fp
38f0: 75 74 63 28 27 22 27 2c 20 6f 75 74 29 3b 0a 20  utc('"', out);. 
3900: 20 77 68 69 6c 65 28 20 28 63 20 3d 20 2a 28 7a   while( (c = *(z
3910: 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 69  ++))!=0 ){.    i
3920: 66 28 20 63 3d 3d 27 5c 5c 27 20 29 7b 0a 20 20  f( c=='\\' ){.  
3930: 20 20 20 20 66 70 75 74 63 28 63 2c 20 6f 75 74      fputc(c, out
3940: 29 3b 0a 20 20 20 20 20 20 66 70 75 74 63 28 63  );.      fputc(c
3950: 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73  , out);.    }els
3960: 65 20 69 66 28 20 63 3d 3d 27 22 27 20 29 7b 0a  e if( c=='"' ){.
3970: 20 20 20 20 20 20 66 70 75 74 63 28 27 5c 5c 27        fputc('\\'
3980: 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20 20 66 70  , out);.      fp
3990: 75 74 63 28 27 22 27 2c 20 6f 75 74 29 3b 0a 20  utc('"', out);. 
39a0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
39b0: 27 5c 74 27 20 29 7b 0a 20 20 20 20 20 20 66 70  '\t' ){.      fp
39c0: 75 74 63 28 27 5c 5c 27 2c 20 6f 75 74 29 3b 0a  utc('\\', out);.
39d0: 20 20 20 20 20 20 66 70 75 74 63 28 27 74 27 2c        fputc('t',
39e0: 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65   out);.    }else
39f0: 20 69 66 28 20 63 3d 3d 27 5c 6e 27 20 29 7b 0a   if( c=='\n' ){.
3a00: 20 20 20 20 20 20 66 70 75 74 63 28 27 5c 5c 27        fputc('\\'
3a10: 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20 20 66 70  , out);.      fp
3a20: 75 74 63 28 27 6e 27 2c 20 6f 75 74 29 3b 0a 20  utc('n', out);. 
3a30: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
3a40: 27 5c 72 27 20 29 7b 0a 20 20 20 20 20 20 66 70  '\r' ){.      fp
3a50: 75 74 63 28 27 5c 5c 27 2c 20 6f 75 74 29 3b 0a  utc('\\', out);.
3a60: 20 20 20 20 20 20 66 70 75 74 63 28 27 72 27 2c        fputc('r',
3a70: 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65   out);.    }else
3a80: 20 69 66 28 20 21 69 73 70 72 69 6e 74 28 63 29   if( !isprint(c)
3a90: 20 29 7b 0a 20 20 20 20 20 20 66 70 72 69 6e 74   ){.      fprint
3aa0: 66 28 6f 75 74 2c 20 22 5c 5c 25 30 33 6f 22 2c  f(out, "\\%03o",
3ab0: 20 63 26 30 78 66 66 29 3b 0a 20 20 20 20 7d 65   c&0xff);.    }e
3ac0: 6c 73 65 7b 0a 20 20 20 20 20 20 66 70 75 74 63  lse{.      fputc
3ad0: 28 63 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d 0a  (c, out);.    }.
3ae0: 20 20 7d 0a 20 20 66 70 75 74 63 28 27 22 27 2c    }.  fputc('"',
3af0: 20 6f 75 74 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   out);.}../*.** 
3b00: 4f 75 74 70 75 74 20 74 68 65 20 67 69 76 65 6e  Output the given
3b10: 20 73 74 72 69 6e 67 20 77 69 74 68 20 63 68 61   string with cha
3b20: 72 61 63 74 65 72 73 20 74 68 61 74 20 61 72 65  racters that are
3b30: 20 73 70 65 63 69 61 6c 20 74 6f 0a 2a 2a 20 48   special to.** H
3b40: 54 4d 4c 20 65 73 63 61 70 65 64 2e 0a 2a 2f 0a  TML escaped..*/.
3b50: 73 74 61 74 69 63 20 76 6f 69 64 20 6f 75 74 70  static void outp
3b60: 75 74 5f 68 74 6d 6c 5f 73 74 72 69 6e 67 28 46  ut_html_string(F
3b70: 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20  ILE *out, const 
3b80: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20  char *z){.  int 
3b90: 69 3b 0a 20 20 77 68 69 6c 65 28 20 2a 7a 20 29  i;.  while( *z )
3ba0: 7b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 20  {.    for(i=0;  
3bb0: 20 7a 5b 69 5d 20 0a 20 20 20 20 20 20 20 20 20   z[i] .         
3bc0: 20 20 20 26 26 20 7a 5b 69 5d 21 3d 27 3c 27 20     && z[i]!='<' 
3bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
3be0: 7a 5b 69 5d 21 3d 27 26 27 20 0a 20 20 20 20 20  z[i]!='&' .     
3bf0: 20 20 20 20 20 20 20 26 26 20 7a 5b 69 5d 21 3d         && z[i]!=
3c00: 27 3e 27 20 0a 20 20 20 20 20 20 20 20 20 20 20  '>' .           
3c10: 20 26 26 20 7a 5b 69 5d 21 3d 27 5c 22 27 20 0a   && z[i]!='\"' .
3c20: 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 7a              && z
3c30: 5b 69 5d 21 3d 27 5c 27 27 3b 0a 20 20 20 20 20  [i]!='\'';.     
3c40: 20 20 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 69 66     i++){}.    if
3c50: 28 20 69 3e 30 20 29 7b 0a 20 20 20 20 20 20 66  ( i>0 ){.      f
3c60: 70 72 69 6e 74 66 28 6f 75 74 2c 22 25 2e 2a 73  printf(out,"%.*s
3c70: 22 2c 69 2c 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  ",i,z);.    }.  
3c80: 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 3c 27 20    if( z[i]=='<' 
3c90: 29 7b 0a 20 20 20 20 20 20 66 70 72 69 6e 74 66  ){.      fprintf
3ca0: 28 6f 75 74 2c 22 26 6c 74 3b 22 29 3b 0a 20 20  (out,"&lt;");.  
3cb0: 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b 69 5d    }else if( z[i]
3cc0: 3d 3d 27 26 27 20 29 7b 0a 20 20 20 20 20 20 66  =='&' ){.      f
3cd0: 70 72 69 6e 74 66 28 6f 75 74 2c 22 26 61 6d 70  printf(out,"&amp
3ce0: 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ;");.    }else i
3cf0: 66 28 20 7a 5b 69 5d 3d 3d 27 3e 27 20 29 7b 0a  f( z[i]=='>' ){.
3d00: 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75        fprintf(ou
3d10: 74 2c 22 26 67 74 3b 22 29 3b 0a 20 20 20 20 7d  t,"&gt;");.    }
3d20: 65 6c 73 65 20 69 66 28 20 7a 5b 69 5d 3d 3d 27  else if( z[i]=='
3d30: 5c 22 27 20 29 7b 0a 20 20 20 20 20 20 66 70 72  \"' ){.      fpr
3d40: 69 6e 74 66 28 6f 75 74 2c 22 26 71 75 6f 74 3b  intf(out,"&quot;
3d50: 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ");.    }else if
3d60: 28 20 7a 5b 69 5d 3d 3d 27 5c 27 27 20 29 7b 0a  ( z[i]=='\'' ){.
3d70: 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75        fprintf(ou
3d80: 74 2c 22 26 23 33 39 3b 22 29 3b 0a 20 20 20 20  t,"&#39;");.    
3d90: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 62 72 65  }else{.      bre
3da0: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 20  ak;.    }.    z 
3db0: 2b 3d 20 69 20 2b 20 31 3b 0a 20 20 7d 0a 7d 0a  += i + 1;.  }.}.
3dc0: 0a 2f 2a 0a 2a 2a 20 49 66 20 61 20 66 69 65 6c  ./*.** If a fiel
3dd0: 64 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 63  d contains any c
3de0: 68 61 72 61 63 74 65 72 20 69 64 65 6e 74 69 66  haracter identif
3df0: 69 65 64 20 62 79 20 61 20 31 20 69 6e 20 74 68  ied by a 1 in th
3e00: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 61  e following.** a
3e10: 72 72 61 79 2c 20 74 68 65 6e 20 74 68 65 20 73  rray, then the s
3e20: 74 72 69 6e 67 20 6d 75 73 74 20 62 65 20 71 75  tring must be qu
3e30: 6f 74 65 64 20 66 6f 72 20 43 53 56 2e 0a 2a 2f  oted for CSV..*/
3e40: 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68  .static const ch
3e50: 61 72 20 6e 65 65 64 43 73 76 51 75 6f 74 65 5b  ar needCsvQuote[
3e60: 5d 20 3d 20 7b 0a 20 20 31 2c 20 31 2c 20 31 2c  ] = {.  1, 1, 1,
3e70: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
3e80: 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    1, 1, 1, 1, 1,
3e90: 20 31 2c 20 31 2c 20 31 2c 20 20 20 0a 20 20 31   1, 1, 1,   .  1
3ea0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
3eb0: 20 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31   1, 1,   1, 1, 1
3ec0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
3ed0: 20 20 20 0a 20 20 31 2c 20 30 2c 20 31 2c 20 30     .  1, 0, 1, 0
3ee0: 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 20 20  , 0, 0, 0, 1,   
3ef0: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
3f00: 2c 20 30 2c 20 30 2c 20 0a 20 20 30 2c 20 30 2c  , 0, 0, .  0, 0,
3f10: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
3f20: 30 2c 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c  0,   0, 0, 0, 0,
3f30: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 0a 20 20   0, 0, 0, 0, .  
3f40: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
3f50: 2c 20 30 2c 20 30 2c 20 20 20 30 2c 20 30 2c 20  , 0, 0,   0, 0, 
3f60: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
3f70: 2c 20 0a 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , .  0, 0, 0, 0,
3f80: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 20 20 30   0, 0, 0, 0,   0
3f90: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
3fa0: 20 30 2c 20 30 2c 20 0a 20 20 30 2c 20 30 2c 20   0, 0, .  0, 0, 
3fb0: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
3fc0: 2c 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20  ,   0, 0, 0, 0, 
3fd0: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 0a 20 20 30  0, 0, 0, 0, .  0
3fe0: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
3ff0: 20 30 2c 20 30 2c 20 20 20 30 2c 20 30 2c 20 30   0, 0,   0, 0, 0
4000: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c  , 0, 0, 0, 0, 1,
4010: 20 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   .  1, 1, 1, 1, 
4020: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c  1, 1, 1, 1,   1,
4030: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
4040: 31 2c 20 31 2c 20 20 20 0a 20 20 31 2c 20 31 2c  1, 1,   .  1, 1,
4050: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
4060: 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c  1,   1, 1, 1, 1,
4070: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20 0a   1, 1, 1, 1,   .
4080: 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c    1, 1, 1, 1, 1,
4090: 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31   1, 1, 1,   1, 1
40a0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
40b0: 20 31 2c 20 20 20 0a 20 20 31 2c 20 31 2c 20 31   1,   .  1, 1, 1
40c0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
40d0: 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31     1, 1, 1, 1, 1
40e0: 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20 0a 20 20  , 1, 1, 1,   .  
40f0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
4100: 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20  , 1, 1,   1, 1, 
4110: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
4120: 2c 20 20 20 0a 20 20 31 2c 20 31 2c 20 31 2c 20  ,   .  1, 1, 1, 
4130: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20  1, 1, 1, 1, 1,  
4140: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
4150: 31 2c 20 31 2c 20 31 2c 20 20 20 0a 20 20 31 2c  1, 1, 1,   .  1,
4160: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
4170: 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c  1, 1,   1, 1, 1,
4180: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
4190: 20 20 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c    .  1, 1, 1, 1,
41a0: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20 31   1, 1, 1, 1,   1
41b0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
41c0: 20 31 2c 20 31 2c 20 20 20 0a 7d 3b 0a 0a 2f 2a   1, 1,   .};../*
41d0: 0a 2a 2a 20 4f 75 74 70 75 74 20 61 20 73 69 6e  .** Output a sin
41e0: 67 6c 65 20 74 65 72 6d 20 6f 66 20 43 53 56 2e  gle term of CSV.
41f0: 20 20 41 63 74 75 61 6c 6c 79 2c 20 70 2d 3e 73    Actually, p->s
4200: 65 70 61 72 61 74 6f 72 20 69 73 20 75 73 65 64  eparator is used
4210: 20 66 6f 72 0a 2a 2a 20 74 68 65 20 73 65 70 61   for.** the sepa
4220: 72 61 74 6f 72 2c 20 77 68 69 63 68 20 6d 61 79  rator, which may
4230: 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 61   or may not be a
4240: 20 63 6f 6d 6d 61 2e 20 20 70 2d 3e 6e 75 6c 6c   comma.  p->null
4250: 76 61 6c 75 65 20 69 73 0a 2a 2a 20 74 68 65 20  value is.** the 
4260: 6e 75 6c 6c 20 76 61 6c 75 65 2e 20 20 53 74 72  null value.  Str
4270: 69 6e 67 73 20 61 72 65 20 71 75 6f 74 65 64 20  ings are quoted 
4280: 69 66 20 6e 65 63 65 73 73 61 72 79 2e 0a 2a 2f  if necessary..*/
4290: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f 75 74  .static void out
42a0: 70 75 74 5f 63 73 76 28 73 74 72 75 63 74 20 63  put_csv(struct c
42b0: 61 6c 6c 62 61 63 6b 5f 64 61 74 61 20 2a 70 2c  allback_data *p,
42c0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
42d0: 69 6e 74 20 62 53 65 70 29 7b 0a 20 20 46 49 4c  int bSep){.  FIL
42e0: 45 20 2a 6f 75 74 20 3d 20 70 2d 3e 6f 75 74 3b  E *out = p->out;
42f0: 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20  .  if( z==0 ){. 
4300: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 22     fprintf(out,"
4310: 25 73 22 2c 70 2d 3e 6e 75 6c 6c 76 61 6c 75 65  %s",p->nullvalue
4320: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
4330: 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6e  int i;.    int n
4340: 53 65 70 20 3d 20 73 74 72 6c 65 6e 33 30 28 70  Sep = strlen30(p
4350: 2d 3e 73 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  ->separator);.  
4360: 20 20 66 6f 72 28 69 3d 30 3b 20 7a 5b 69 5d 3b    for(i=0; z[i];
4370: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28   i++){.      if(
4380: 20 6e 65 65 64 43 73 76 51 75 6f 74 65 5b 28 28   needCsvQuote[((
4390: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 7a  unsigned char*)z
43a0: 29 5b 69 5d 5d 20 0a 20 20 20 20 20 20 20 20 20  )[i]] .         
43b0: 7c 7c 20 28 7a 5b 69 5d 3d 3d 70 2d 3e 73 65 70  || (z[i]==p->sep
43c0: 61 72 61 74 6f 72 5b 30 5d 20 26 26 20 0a 20 20  arator[0] && .  
43d0: 20 20 20 20 20 20 20 20 20 20 20 28 6e 53 65 70             (nSep
43e0: 3d 3d 31 20 7c 7c 20 6d 65 6d 63 6d 70 28 7a 2c  ==1 || memcmp(z,
43f0: 20 70 2d 3e 73 65 70 61 72 61 74 6f 72 2c 20 6e   p->separator, n
4400: 53 65 70 29 3d 3d 30 29 29 20 29 7b 0a 20 20 20  Sep)==0)) ){.   
4410: 20 20 20 20 20 69 20 3d 20 30 3b 0a 20 20 20 20       i = 0;.    
4420: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
4430: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
4440: 20 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70   i==0 ){.      p
4450: 75 74 63 28 27 22 27 2c 20 6f 75 74 29 3b 0a 20  utc('"', out);. 
4460: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 7a 5b       for(i=0; z[
4470: 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  i]; i++){.      
4480: 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 22 27 20    if( z[i]=='"' 
4490: 29 20 70 75 74 63 28 27 22 27 2c 20 6f 75 74 29  ) putc('"', out)
44a0: 3b 0a 20 20 20 20 20 20 20 20 70 75 74 63 28 7a  ;.        putc(z
44b0: 5b 69 5d 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20  [i], out);.     
44c0: 20 7d 0a 20 20 20 20 20 20 70 75 74 63 28 27 22   }.      putc('"
44d0: 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c  ', out);.    }el
44e0: 73 65 7b 0a 20 20 20 20 20 20 66 70 72 69 6e 74  se{.      fprint
44f0: 66 28 6f 75 74 2c 20 22 25 73 22 2c 20 7a 29 3b  f(out, "%s", z);
4500: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
4510: 20 62 53 65 70 20 29 7b 0a 20 20 20 20 66 70 72   bSep ){.    fpr
4520: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
4530: 22 2c 20 70 2d 3e 73 65 70 61 72 61 74 6f 72 29  ", p->separator)
4540: 3b 0a 20 20 7d 0a 7d 0a 0a 23 69 66 64 65 66 20  ;.  }.}..#ifdef 
4550: 53 49 47 49 4e 54 0a 2f 2a 0a 2a 2a 20 54 68 69  SIGINT./*.** Thi
4560: 73 20 72 6f 75 74 69 6e 65 20 72 75 6e 73 20 77  s routine runs w
4570: 68 65 6e 20 74 68 65 20 75 73 65 72 20 70 72 65  hen the user pre
4580: 73 73 65 73 20 43 74 72 6c 2d 43 0a 2a 2f 0a 73  sses Ctrl-C.*/.s
4590: 74 61 74 69 63 20 76 6f 69 64 20 69 6e 74 65 72  tatic void inter
45a0: 72 75 70 74 5f 68 61 6e 64 6c 65 72 28 69 6e 74  rupt_handler(int
45b0: 20 4e 6f 74 55 73 65 64 29 7b 0a 20 20 55 4e 55   NotUsed){.  UNU
45c0: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 4e 6f  SED_PARAMETER(No
45d0: 74 55 73 65 64 29 3b 0a 20 20 73 65 65 6e 49 6e  tUsed);.  seenIn
45e0: 74 65 72 72 75 70 74 20 3d 20 31 3b 0a 20 20 69  terrupt = 1;.  i
45f0: 66 28 20 64 62 20 29 20 73 71 6c 69 74 65 33 5f  f( db ) sqlite3_
4600: 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 7d  interrupt(db);.}
4610: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
4620: 68 69 73 20 69 73 20 74 68 65 20 63 61 6c 6c 62  his is the callb
4630: 61 63 6b 20 72 6f 75 74 69 6e 65 20 74 68 61 74  ack routine that
4640: 20 74 68 65 20 73 68 65 6c 6c 0a 2a 2a 20 69 6e   the shell.** in
4650: 76 6f 6b 65 73 20 66 6f 72 20 65 61 63 68 20 72  vokes for each r
4660: 6f 77 20 6f 66 20 61 20 71 75 65 72 79 20 72 65  ow of a query re
4670: 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  sult..*/.static 
4680: 69 6e 74 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61  int shell_callba
4690: 63 6b 28 76 6f 69 64 20 2a 70 41 72 67 2c 20 69  ck(void *pArg, i
46a0: 6e 74 20 6e 41 72 67 2c 20 63 68 61 72 20 2a 2a  nt nArg, char **
46b0: 61 7a 41 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a  azArg, char **az
46c0: 43 6f 6c 2c 20 69 6e 74 20 2a 61 69 54 79 70 65  Col, int *aiType
46d0: 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 74  ){.  int i;.  st
46e0: 72 75 63 74 20 63 61 6c 6c 62 61 63 6b 5f 64 61  ruct callback_da
46f0: 74 61 20 2a 70 20 3d 20 28 73 74 72 75 63 74 20  ta *p = (struct 
4700: 63 61 6c 6c 62 61 63 6b 5f 64 61 74 61 2a 29 70  callback_data*)p
4710: 41 72 67 3b 0a 0a 20 20 73 77 69 74 63 68 28 20  Arg;..  switch( 
4720: 70 2d 3e 6d 6f 64 65 20 29 7b 0a 20 20 20 20 63  p->mode ){.    c
4730: 61 73 65 20 4d 4f 44 45 5f 4c 69 6e 65 3a 20 7b  ase MODE_Line: {
4740: 0a 20 20 20 20 20 20 69 6e 74 20 77 20 3d 20 35  .      int w = 5
4750: 3b 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41 72  ;.      if( azAr
4760: 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  g==0 ) break;.  
4770: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
4780: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
4790: 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 73 74 72     int len = str
47a0: 6c 65 6e 33 30 28 61 7a 43 6f 6c 5b 69 5d 20 3f  len30(azCol[i] ?
47b0: 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b   azCol[i] : "");
47c0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 6c 65 6e  .        if( len
47d0: 3e 77 20 29 20 77 20 3d 20 6c 65 6e 3b 0a 20 20  >w ) w = len;.  
47e0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
47f0: 70 2d 3e 63 6e 74 2b 2b 3e 30 20 29 20 66 70 72  p->cnt++>0 ) fpr
4800: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 5c 6e 22  intf(p->out,"\n"
4810: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
4820: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
4830: 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28          fprintf(
4840: 70 2d 3e 6f 75 74 2c 22 25 2a 73 20 3d 20 25 73  p->out,"%*s = %s
4850: 5c 6e 22 2c 20 77 2c 20 61 7a 43 6f 6c 5b 69 5d  \n", w, azCol[i]
4860: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
4870: 20 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41    azArg[i] ? azA
4880: 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 76  rg[i] : p->nullv
4890: 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20  alue);.      }. 
48a0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
48b0: 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f  }.    case MODE_
48c0: 45 78 70 6c 61 69 6e 3a 0a 20 20 20 20 63 61 73  Explain:.    cas
48d0: 65 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3a 20 7b  e MODE_Column: {
48e0: 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 6e  .      if( p->cn
48f0: 74 2b 2b 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  t++==0 ){.      
4900: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
4910: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
4920: 20 20 20 69 6e 74 20 77 2c 20 6e 3b 0a 20 20 20     int w, n;.   
4930: 20 20 20 20 20 20 20 69 66 28 20 69 3c 41 72 72         if( i<Arr
4940: 61 79 53 69 7a 65 28 70 2d 3e 63 6f 6c 57 69 64  aySize(p->colWid
4950: 74 68 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  th) ){.         
4960: 20 20 20 77 20 3d 20 70 2d 3e 63 6f 6c 57 69 64     w = p->colWid
4970: 74 68 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 20  th[i];.         
4980: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
4990: 20 20 20 20 77 20 3d 20 30 3b 0a 20 20 20 20 20      w = 0;.     
49a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
49b0: 20 69 66 28 20 77 3d 3d 30 20 29 7b 0a 20 20 20   if( w==0 ){.   
49c0: 20 20 20 20 20 20 20 20 20 77 20 3d 20 73 74 72           w = str
49d0: 6c 65 6e 33 30 28 61 7a 43 6f 6c 5b 69 5d 20 3f  len30(azCol[i] ?
49e0: 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b   azCol[i] : "");
49f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
4a00: 20 77 3c 31 30 20 29 20 77 20 3d 20 31 30 3b 0a   w<10 ) w = 10;.
4a10: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
4a20: 73 74 72 6c 65 6e 33 30 28 61 7a 41 72 67 20 26  strlen30(azArg &
4a30: 26 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41  & azArg[i] ? azA
4a40: 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 76  rg[i] : p->nullv
4a50: 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20 20  alue);.         
4a60: 20 20 20 69 66 28 20 77 3c 6e 20 29 20 77 20 3d     if( w<n ) w =
4a70: 20 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a   n;.          }.
4a80: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69 3c            if( i<
4a90: 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 63 74  ArraySize(p->act
4aa0: 75 61 6c 57 69 64 74 68 29 20 29 7b 0a 20 20 20  ualWidth) ){.   
4ab0: 20 20 20 20 20 20 20 20 20 70 2d 3e 61 63 74 75           p->actu
4ac0: 61 6c 57 69 64 74 68 5b 69 5d 20 3d 20 77 3b 0a  alWidth[i] = w;.
4ad0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
4ae0: 20 20 20 20 20 20 69 66 28 20 70 2d 3e 73 68 6f        if( p->sho
4af0: 77 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20 20  wHeader ){.     
4b00: 20 20 20 20 20 20 20 69 66 28 20 77 3c 30 20 29         if( w<0 )
4b10: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
4b20: 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  fprintf(p->out,"
4b30: 25 2a 2e 2a 73 25 73 22 2c 2d 77 2c 2d 77 2c 61  %*.*s%s",-w,-w,a
4b40: 7a 43 6f 6c 5b 69 5d 2c 20 69 3d 3d 6e 41 72 67  zCol[i], i==nArg
4b50: 2d 31 20 3f 20 22 5c 6e 22 3a 20 22 20 20 22 29  -1 ? "\n": "  ")
4b60: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 65  ;.            }e
4b70: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
4b80: 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75     fprintf(p->ou
4b90: 74 2c 22 25 2d 2a 2e 2a 73 25 73 22 2c 77 2c 77  t,"%-*.*s%s",w,w
4ba0: 2c 61 7a 43 6f 6c 5b 69 5d 2c 20 69 3d 3d 6e 41  ,azCol[i], i==nA
4bb0: 72 67 2d 31 20 3f 20 22 5c 6e 22 3a 20 22 20 20  rg-1 ? "\n": "  
4bc0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
4bd0: 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  }.          }.  
4be0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
4bf0: 69 66 28 20 70 2d 3e 73 68 6f 77 48 65 61 64 65  if( p->showHeade
4c00: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66  r ){.          f
4c10: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
4c20: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
4c30: 20 20 69 6e 74 20 77 3b 0a 20 20 20 20 20 20 20    int w;.       
4c40: 20 20 20 20 20 69 66 28 20 69 3c 41 72 72 61 79       if( i<Array
4c50: 53 69 7a 65 28 70 2d 3e 61 63 74 75 61 6c 57 69  Size(p->actualWi
4c60: 64 74 68 29 20 29 7b 0a 20 20 20 20 20 20 20 20  dth) ){.        
4c70: 20 20 20 20 20 20 20 77 20 3d 20 70 2d 3e 61 63         w = p->ac
4c80: 74 75 61 6c 57 69 64 74 68 5b 69 5d 3b 0a 20 20  tualWidth[i];.  
4c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28               if(
4ca0: 20 77 3c 30 20 29 20 77 20 3d 20 2d 77 3b 0a 20   w<0 ) w = -w;. 
4cb0: 20 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65             }else
4cc0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
4cd0: 20 77 20 3d 20 31 30 3b 0a 20 20 20 20 20 20 20   w = 10;.       
4ce0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
4cf0: 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75     fprintf(p->ou
4d00: 74 2c 22 25 2d 2a 2e 2a 73 25 73 22 2c 77 2c 77  t,"%-*.*s%s",w,w
4d10: 2c 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ,"--------------
4d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4d30: 2d 2d 2d 2d 2d 22 0a 20 20 20 20 20 20 20 20 20  -----".         
4d40: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 2d            "-----
4d50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4d60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4d70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4d80: 2d 2d 2d 2d 2d 22 2c 0a 20 20 20 20 20 20 20 20  -----",.        
4d90: 20 20 20 20 20 20 20 20 20 20 20 20 69 3d 3d 6e              i==n
4da0: 41 72 67 2d 31 20 3f 20 22 5c 6e 22 3a 20 22 20  Arg-1 ? "\n": " 
4db0: 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d   ");.          }
4dc0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4dd0: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41   }.      if( azA
4de0: 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  rg==0 ) break;. 
4df0: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
4e00: 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
4e10: 20 20 20 20 69 6e 74 20 77 3b 0a 20 20 20 20 20      int w;.     
4e20: 20 20 20 69 66 28 20 69 3c 41 72 72 61 79 53 69     if( i<ArraySi
4e30: 7a 65 28 70 2d 3e 61 63 74 75 61 6c 57 69 64 74  ze(p->actualWidt
4e40: 68 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  h) ){.          
4e50: 20 77 20 3d 20 70 2d 3e 61 63 74 75 61 6c 57 69   w = p->actualWi
4e60: 64 74 68 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20  dth[i];.        
4e70: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
4e80: 20 20 77 20 3d 20 31 30 3b 0a 20 20 20 20 20 20    w = 10;.      
4e90: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
4ea0: 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78  p->mode==MODE_Ex
4eb0: 70 6c 61 69 6e 20 26 26 20 61 7a 41 72 67 5b 69  plain && azArg[i
4ec0: 5d 20 26 26 20 0a 20 20 20 20 20 20 20 20 20 20  ] && .          
4ed0: 20 73 74 72 6c 65 6e 33 30 28 61 7a 41 72 67 5b   strlen30(azArg[
4ee0: 69 5d 29 3e 77 20 29 7b 0a 20 20 20 20 20 20 20  i])>w ){.       
4ef0: 20 20 20 77 20 3d 20 73 74 72 6c 65 6e 33 30 28     w = strlen30(
4f00: 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20  azArg[i]);.     
4f10: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
4f20: 20 77 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20   w<0 ){.        
4f30: 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74    fprintf(p->out
4f40: 2c 22 25 2a 2e 2a 73 25 73 22 2c 2d 77 2c 2d 77  ,"%*.*s%s",-w,-w
4f50: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
4f60: 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67  azArg[i] ? azArg
4f70: 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 76 61 6c  [i] : p->nullval
4f80: 75 65 2c 20 69 3d 3d 6e 41 72 67 2d 31 20 3f 20  ue, i==nArg-1 ? 
4f90: 22 5c 6e 22 3a 20 22 20 20 22 29 3b 0a 20 20 20  "\n": "  ");.   
4fa0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
4fb0: 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d        fprintf(p-
4fc0: 3e 6f 75 74 2c 22 25 2d 2a 2e 2a 73 25 73 22 2c  >out,"%-*.*s%s",
4fd0: 77 2c 77 2c 0a 20 20 20 20 20 20 20 20 20 20 20  w,w,.           
4fe0: 20 20 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a     azArg[i] ? az
4ff0: 41 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c  Arg[i] : p->null
5000: 76 61 6c 75 65 2c 20 69 3d 3d 6e 41 72 67 2d 31  value, i==nArg-1
5010: 20 3f 20 22 5c 6e 22 3a 20 22 20 20 22 29 3b 0a   ? "\n": "  ");.
5020: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5030: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
5040: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f     }.    case MO
5050: 44 45 5f 53 65 6d 69 3a 0a 20 20 20 20 63 61 73  DE_Semi:.    cas
5060: 65 20 4d 4f 44 45 5f 4c 69 73 74 3a 20 7b 0a 20  e MODE_List: {. 
5070: 20 20 20 20 20 69 66 28 20 70 2d 3e 63 6e 74 2b       if( p->cnt+
5080: 2b 3d 3d 30 20 26 26 20 70 2d 3e 73 68 6f 77 48  +==0 && p->showH
5090: 65 61 64 65 72 20 29 7b 0a 20 20 20 20 20 20 20  eader ){.       
50a0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67   for(i=0; i<nArg
50b0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
50c0: 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74    fprintf(p->out
50d0: 2c 22 25 73 25 73 22 2c 61 7a 43 6f 6c 5b 69 5d  ,"%s%s",azCol[i]
50e0: 2c 20 69 3d 3d 6e 41 72 67 2d 31 20 3f 20 22 5c  , i==nArg-1 ? "\
50f0: 6e 22 20 3a 20 70 2d 3e 73 65 70 61 72 61 74 6f  n" : p->separato
5100: 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  r);.        }.  
5110: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
5120: 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b  azArg==0 ) break
5130: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  ;.      for(i=0;
5140: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
5150: 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 20 3d         char *z =
5160: 20 61 7a 41 72 67 5b 69 5d 3b 0a 20 20 20 20 20   azArg[i];.     
5170: 20 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 7a 20     if( z==0 ) z 
5180: 3d 20 70 2d 3e 6e 75 6c 6c 76 61 6c 75 65 3b 0a  = p->nullvalue;.
5190: 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28          fprintf(
51a0: 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 29  p->out, "%s", z)
51b0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 3c  ;.        if( i<
51c0: 6e 41 72 67 2d 31 20 29 7b 0a 20 20 20 20 20 20  nArg-1 ){.      
51d0: 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f      fprintf(p->o
51e0: 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 73 65 70  ut, "%s", p->sep
51f0: 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 20  arator);.       
5200: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 6d 6f   }else if( p->mo
5210: 64 65 3d 3d 4d 4f 44 45 5f 53 65 6d 69 20 29 7b  de==MODE_Semi ){
5220: 0a 20 20 20 20 20 20 20 20 20 20 66 70 72 69 6e  .          fprin
5230: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 3b 5c 6e 22  tf(p->out, ";\n"
5240: 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
5250: 7b 0a 20 20 20 20 20 20 20 20 20 20 66 70 72 69  {.          fpri
5260: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22  ntf(p->out, "\n"
5270: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
5280: 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b     }.      break
5290: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  ;.    }.    case
52a0: 20 4d 4f 44 45 5f 48 74 6d 6c 3a 20 7b 0a 20 20   MODE_Html: {.  
52b0: 20 20 20 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b      if( p->cnt++
52c0: 3d 3d 30 20 26 26 20 70 2d 3e 73 68 6f 77 48 65  ==0 && p->showHe
52d0: 61 64 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20  ader ){.        
52e0: 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  fprintf(p->out,"
52f0: 3c 54 52 3e 22 29 3b 0a 20 20 20 20 20 20 20 20  <TR>");.        
5300: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
5310: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
5320: 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c   fprintf(p->out,
5330: 22 3c 54 48 3e 22 29 3b 0a 20 20 20 20 20 20 20  "<TH>");.       
5340: 20 20 20 6f 75 74 70 75 74 5f 68 74 6d 6c 5f 73     output_html_s
5350: 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a  tring(p->out, az
5360: 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Col[i]);.       
5370: 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75     fprintf(p->ou
5380: 74 2c 22 3c 2f 54 48 3e 5c 6e 22 29 3b 0a 20 20  t,"</TH>\n");.  
5390: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
53a0: 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  fprintf(p->out,"
53b0: 3c 2f 54 52 3e 5c 6e 22 29 3b 0a 20 20 20 20 20  </TR>\n");.     
53c0: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41   }.      if( azA
53d0: 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  rg==0 ) break;. 
53e0: 20 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e       fprintf(p->
53f0: 6f 75 74 2c 22 3c 54 52 3e 22 29 3b 0a 20 20 20  out,"<TR>");.   
5400: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41     for(i=0; i<nA
5410: 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
5420: 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74    fprintf(p->out
5430: 2c 22 3c 54 44 3e 22 29 3b 0a 20 20 20 20 20 20  ,"<TD>");.      
5440: 20 20 6f 75 74 70 75 74 5f 68 74 6d 6c 5f 73 74    output_html_st
5450: 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41  ring(p->out, azA
5460: 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69 5d  rg[i] ? azArg[i]
5470: 20 3a 20 70 2d 3e 6e 75 6c 6c 76 61 6c 75 65 29   : p->nullvalue)
5480: 3b 0a 20 20 20 20 20 20 20 20 66 70 72 69 6e 74  ;.        fprint
5490: 66 28 70 2d 3e 6f 75 74 2c 22 3c 2f 54 44 3e 5c  f(p->out,"</TD>\
54a0: 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  n");.      }.   
54b0: 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75     fprintf(p->ou
54c0: 74 2c 22 3c 2f 54 52 3e 5c 6e 22 29 3b 0a 20 20  t,"</TR>\n");.  
54d0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
54e0: 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 54  .    case MODE_T
54f0: 63 6c 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20  cl: {.      if( 
5500: 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26 20 70  p->cnt++==0 && p
5510: 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 29 7b 0a  ->showHeader ){.
5520: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b          for(i=0;
5530: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
5540: 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f           output_
5550: 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c  c_string(p->out,
5560: 61 7a 43 6f 6c 5b 69 5d 20 3f 20 61 7a 43 6f 6c  azCol[i] ? azCol
5570: 5b 69 5d 20 3a 20 22 22 29 3b 0a 20 20 20 20 20  [i] : "");.     
5580: 20 20 20 20 20 69 66 28 69 3c 6e 41 72 67 2d 31       if(i<nArg-1
5590: 29 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  ) fprintf(p->out
55a0: 2c 20 22 25 73 22 2c 20 70 2d 3e 73 65 70 61 72  , "%s", p->separ
55b0: 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d  ator);.        }
55c0: 0a 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66  .        fprintf
55d0: 28 70 2d 3e 6f 75 74 2c 22 5c 6e 22 29 3b 0a 20  (p->out,"\n");. 
55e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
55f0: 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61   azArg==0 ) brea
5600: 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  k;.      for(i=0
5610: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
5620: 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f 63          output_c
5630: 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20  _string(p->out, 
5640: 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67  azArg[i] ? azArg
5650: 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 76 61 6c  [i] : p->nullval
5660: 75 65 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ue);.        if(
5670: 69 3c 6e 41 72 67 2d 31 29 20 66 70 72 69 6e 74  i<nArg-1) fprint
5680: 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20  f(p->out, "%s", 
5690: 70 2d 3e 73 65 70 61 72 61 74 6f 72 29 3b 0a 20  p->separator);. 
56a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 66 70 72       }.      fpr
56b0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 5c 6e 22  intf(p->out,"\n"
56c0: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
56d0: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d      }.    case M
56e0: 4f 44 45 5f 43 73 76 3a 20 7b 0a 20 20 20 20 20  ODE_Csv: {.     
56f0: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30   if( p->cnt++==0
5700: 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64 65   && p->showHeade
5710: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72  r ){.        for
5720: 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
5730: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75  +){.          ou
5740: 74 70 75 74 5f 63 73 76 28 70 2c 20 61 7a 43 6f  tput_csv(p, azCo
5750: 6c 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20  l[i] ? azCol[i] 
5760: 3a 20 22 22 2c 20 69 3c 6e 41 72 67 2d 31 29 3b  : "", i<nArg-1);
5770: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
5780: 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75     fprintf(p->ou
5790: 74 2c 22 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d  t,"\n");.      }
57a0: 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41 72 67  .      if( azArg
57b0: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
57c0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41     for(i=0; i<nA
57d0: 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
57e0: 20 20 6f 75 74 70 75 74 5f 63 73 76 28 70 2c 20    output_csv(p, 
57f0: 61 7a 41 72 67 5b 69 5d 2c 20 69 3c 6e 41 72 67  azArg[i], i<nArg
5800: 2d 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  -1);.      }.   
5810: 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75     fprintf(p->ou
5820: 74 2c 22 5c 6e 22 29 3b 0a 20 20 20 20 20 20 62  t,"\n");.      b
5830: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
5840: 63 61 73 65 20 4d 4f 44 45 5f 49 6e 73 65 72 74  case MODE_Insert
5850: 3a 20 7b 0a 20 20 20 20 20 20 70 2d 3e 63 6e 74  : {.      p->cnt
5860: 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 61 7a  ++;.      if( az
5870: 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  Arg==0 ) break;.
5880: 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d        fprintf(p-
5890: 3e 6f 75 74 2c 22 49 4e 53 45 52 54 20 49 4e 54  >out,"INSERT INT
58a0: 4f 20 25 73 20 56 41 4c 55 45 53 28 22 2c 70 2d  O %s VALUES(",p-
58b0: 3e 7a 44 65 73 74 54 61 62 6c 65 29 3b 0a 20 20  >zDestTable);.  
58c0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
58d0: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
58e0: 20 20 20 63 68 61 72 20 2a 7a 53 65 70 20 3d 20     char *zSep = 
58f0: 69 3e 30 20 3f 20 22 2c 22 3a 20 22 22 3b 0a 20  i>0 ? ",": "";. 
5900: 20 20 20 20 20 20 20 69 66 28 20 28 61 7a 41 72         if( (azAr
5910: 67 5b 69 5d 3d 3d 30 29 20 7c 7c 20 28 61 69 54  g[i]==0) || (aiT
5920: 79 70 65 20 26 26 20 61 69 54 79 70 65 5b 69 5d  ype && aiType[i]
5930: 3d 3d 53 51 4c 49 54 45 5f 4e 55 4c 4c 29 20 29  ==SQLITE_NULL) )
5940: 7b 0a 20 20 20 20 20 20 20 20 20 20 66 70 72 69  {.          fpri
5950: 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 4e 55  ntf(p->out,"%sNU
5960: 4c 4c 22 2c 7a 53 65 70 29 3b 0a 20 20 20 20 20  LL",zSep);.     
5970: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61 69 54     }else if( aiT
5980: 79 70 65 20 26 26 20 61 69 54 79 70 65 5b 69 5d  ype && aiType[i]
5990: 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b  ==SQLITE_TEXT ){
59a0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 7a  .          if( z
59b0: 53 65 70 5b 30 5d 20 29 20 66 70 72 69 6e 74 66  Sep[0] ) fprintf
59c0: 28 70 2d 3e 6f 75 74 2c 22 25 73 22 2c 7a 53 65  (p->out,"%s",zSe
59d0: 70 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 75  p);.          ou
59e0: 74 70 75 74 5f 71 75 6f 74 65 64 5f 73 74 72 69  tput_quoted_stri
59f0: 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72 67  ng(p->out, azArg
5a00: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  [i]);.        }e
5a10: 6c 73 65 20 69 66 28 20 61 69 54 79 70 65 20 26  lse if( aiType &
5a20: 26 20 28 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51  & (aiType[i]==SQ
5a30: 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 7c 7c 20  LITE_INTEGER || 
5a40: 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54  aiType[i]==SQLIT
5a50: 45 5f 46 4c 4f 41 54 29 20 29 7b 0a 20 20 20 20  E_FLOAT) ){.    
5a60: 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d        fprintf(p-
5a70: 3e 6f 75 74 2c 22 25 73 25 73 22 2c 7a 53 65 70  >out,"%s%s",zSep
5a80: 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  , azArg[i]);.   
5a90: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61       }else if( a
5aa0: 69 54 79 70 65 20 26 26 20 61 69 54 79 70 65 5b  iType && aiType[
5ab0: 69 5d 3d 3d 53 51 4c 49 54 45 5f 42 4c 4f 42 20  i]==SQLITE_BLOB 
5ac0: 26 26 20 70 2d 3e 70 53 74 6d 74 20 29 7b 0a 20  && p->pStmt ){. 
5ad0: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 76           const v
5ae0: 6f 69 64 20 2a 70 42 6c 6f 62 20 3d 20 73 71 6c  oid *pBlob = sql
5af0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62  ite3_column_blob
5b00: 28 70 2d 3e 70 53 74 6d 74 2c 20 69 29 3b 0a 20  (p->pStmt, i);. 
5b10: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 42 6c           int nBl
5b20: 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  ob = sqlite3_col
5b30: 75 6d 6e 5f 62 79 74 65 73 28 70 2d 3e 70 53 74  umn_bytes(p->pSt
5b40: 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20  mt, i);.        
5b50: 20 20 69 66 28 20 7a 53 65 70 5b 30 5d 20 29 20    if( zSep[0] ) 
5b60: 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  fprintf(p->out,"
5b70: 25 73 22 2c 7a 53 65 70 29 3b 0a 20 20 20 20 20  %s",zSep);.     
5b80: 20 20 20 20 20 6f 75 74 70 75 74 5f 68 65 78 5f       output_hex_
5b90: 62 6c 6f 62 28 70 2d 3e 6f 75 74 2c 20 70 42 6c  blob(p->out, pBl
5ba0: 6f 62 2c 20 6e 42 6c 6f 62 29 3b 0a 20 20 20 20  ob, nBlob);.    
5bb0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 69 73      }else if( is
5bc0: 4e 75 6d 62 65 72 28 61 7a 41 72 67 5b 69 5d 2c  Number(azArg[i],
5bd0: 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20   0) ){.         
5be0: 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c   fprintf(p->out,
5bf0: 22 25 73 25 73 22 2c 7a 53 65 70 2c 20 61 7a 41  "%s%s",zSep, azA
5c00: 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[i]);.        
5c10: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
5c20: 20 69 66 28 20 7a 53 65 70 5b 30 5d 20 29 20 66   if( zSep[0] ) f
5c30: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
5c40: 73 22 2c 7a 53 65 70 29 3b 0a 20 20 20 20 20 20  s",zSep);.      
5c50: 20 20 20 20 6f 75 74 70 75 74 5f 71 75 6f 74 65      output_quote
5c60: 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c  d_string(p->out,
5c70: 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20   azArg[i]);.    
5c80: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
5c90: 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f      fprintf(p->o
5ca0: 75 74 2c 22 29 3b 5c 6e 22 29 3b 0a 20 20 20 20  ut,");\n");.    
5cb0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
5cc0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d   }.  return 0;.}
5cd0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ../*.** This is 
5ce0: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75  the callback rou
5cf0: 74 69 6e 65 20 74 68 61 74 20 74 68 65 20 53 51  tine that the SQ
5d00: 4c 69 74 65 20 6c 69 62 72 61 72 79 0a 2a 2a 20  Lite library.** 
5d10: 69 6e 76 6f 6b 65 73 20 66 6f 72 20 65 61 63 68  invokes for each
5d20: 20 72 6f 77 20 6f 66 20 61 20 71 75 65 72 79 20   row of a query 
5d30: 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69  result..*/.stati
5d40: 63 20 69 6e 74 20 63 61 6c 6c 62 61 63 6b 28 76  c int callback(v
5d50: 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20 6e  oid *pArg, int n
5d60: 41 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 41 72  Arg, char **azAr
5d70: 67 2c 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 29  g, char **azCol)
5d80: 7b 0a 20 20 2f 2a 20 73 69 6e 63 65 20 77 65 20  {.  /* since we 
5d90: 64 6f 6e 27 74 20 68 61 76 65 20 74 79 70 65 20  don't have type 
5da0: 69 6e 66 6f 2c 20 63 61 6c 6c 20 74 68 65 20 73  info, call the s
5db0: 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 20 77 69  hell_callback wi
5dc0: 74 68 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 20  th a NULL value 
5dd0: 2a 2f 0a 20 20 72 65 74 75 72 6e 20 73 68 65 6c  */.  return shel
5de0: 6c 5f 63 61 6c 6c 62 61 63 6b 28 70 41 72 67 2c  l_callback(pArg,
5df0: 20 6e 41 72 67 2c 20 61 7a 41 72 67 2c 20 61 7a   nArg, azArg, az
5e00: 43 6f 6c 2c 20 4e 55 4c 4c 29 3b 0a 7d 0a 0a 2f  Col, NULL);.}../
5e10: 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 65 73  *.** Set the des
5e20: 74 69 6e 61 74 69 6f 6e 20 74 61 62 6c 65 20 66  tination table f
5e30: 69 65 6c 64 20 6f 66 20 74 68 65 20 63 61 6c 6c  ield of the call
5e40: 62 61 63 6b 5f 64 61 74 61 20 73 74 72 75 63 74  back_data struct
5e50: 75 72 65 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 61  ure to.** the na
5e60: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
5e70: 67 69 76 65 6e 2e 20 20 45 73 63 61 70 65 20 61  given.  Escape a
5e80: 6e 79 20 71 75 6f 74 65 20 63 68 61 72 61 63 74  ny quote charact
5e90: 65 72 73 20 69 6e 20 74 68 65 0a 2a 2a 20 74 61  ers in the.** ta
5ea0: 62 6c 65 20 6e 61 6d 65 2e 0a 2a 2f 0a 73 74 61  ble name..*/.sta
5eb0: 74 69 63 20 76 6f 69 64 20 73 65 74 5f 74 61 62  tic void set_tab
5ec0: 6c 65 5f 6e 61 6d 65 28 73 74 72 75 63 74 20 63  le_name(struct c
5ed0: 61 6c 6c 62 61 63 6b 5f 64 61 74 61 20 2a 70 2c  allback_data *p,
5ee0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
5ef0: 6d 65 29 7b 0a 20 20 69 6e 74 20 69 2c 20 6e 3b  me){.  int i, n;
5f00: 0a 20 20 69 6e 74 20 6e 65 65 64 51 75 6f 74 65  .  int needQuote
5f10: 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20  ;.  char *z;..  
5f20: 69 66 28 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c  if( p->zDestTabl
5f30: 65 20 29 7b 0a 20 20 20 20 66 72 65 65 28 70 2d  e ){.    free(p-
5f40: 3e 7a 44 65 73 74 54 61 62 6c 65 29 3b 0a 20 20  >zDestTable);.  
5f50: 20 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20    p->zDestTable 
5f60: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a  = 0;.  }.  if( z
5f70: 4e 61 6d 65 3d 3d 30 20 29 20 72 65 74 75 72 6e  Name==0 ) return
5f80: 3b 0a 20 20 6e 65 65 64 51 75 6f 74 65 20 3d 20  ;.  needQuote = 
5f90: 21 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e  !isalpha((unsign
5fa0: 65 64 20 63 68 61 72 29 2a 7a 4e 61 6d 65 29 20  ed char)*zName) 
5fb0: 26 26 20 2a 7a 4e 61 6d 65 21 3d 27 5f 27 3b 0a  && *zName!='_';.
5fc0: 20 20 66 6f 72 28 69 3d 6e 3d 30 3b 20 7a 4e 61    for(i=n=0; zNa
5fd0: 6d 65 5b 69 5d 3b 20 69 2b 2b 2c 20 6e 2b 2b 29  me[i]; i++, n++)
5fe0: 7b 0a 20 20 20 20 69 66 28 20 21 69 73 61 6c 6e  {.    if( !isaln
5ff0: 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
6000: 72 29 7a 4e 61 6d 65 5b 69 5d 29 20 26 26 20 7a  r)zName[i]) && z
6010: 4e 61 6d 65 5b 69 5d 21 3d 27 5f 27 20 29 7b 0a  Name[i]!='_' ){.
6020: 20 20 20 20 20 20 6e 65 65 64 51 75 6f 74 65 20        needQuote 
6030: 3d 20 31 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  = 1;.      if( z
6040: 4e 61 6d 65 5b 69 5d 3d 3d 27 5c 27 27 20 29 20  Name[i]=='\'' ) 
6050: 6e 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  n++;.    }.  }. 
6060: 20 69 66 28 20 6e 65 65 64 51 75 6f 74 65 20 29   if( needQuote )
6070: 20 6e 20 2b 3d 20 32 3b 0a 20 20 7a 20 3d 20 70   n += 2;.  z = p
6080: 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20 3d 20 6d  ->zDestTable = m
6090: 61 6c 6c 6f 63 28 20 6e 2b 31 20 29 3b 0a 20 20  alloc( n+1 );.  
60a0: 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
60b0: 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  fprintf(stderr,"
60c0: 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65  Error: out of me
60d0: 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20 65 78  mory\n");.    ex
60e0: 69 74 28 31 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d  it(1);.  }.  n =
60f0: 20 30 3b 0a 20 20 69 66 28 20 6e 65 65 64 51 75   0;.  if( needQu
6100: 6f 74 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d 20 27  ote ) z[n++] = '
6110: 5c 27 27 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  \'';.  for(i=0; 
6120: 7a 4e 61 6d 65 5b 69 5d 3b 20 69 2b 2b 29 7b 0a  zName[i]; i++){.
6130: 20 20 20 20 7a 5b 6e 2b 2b 5d 20 3d 20 7a 4e 61      z[n++] = zNa
6140: 6d 65 5b 69 5d 3b 0a 20 20 20 20 69 66 28 20 7a  me[i];.    if( z
6150: 4e 61 6d 65 5b 69 5d 3d 3d 27 5c 27 27 20 29 20  Name[i]=='\'' ) 
6160: 7a 5b 6e 2b 2b 5d 20 3d 20 27 5c 27 27 3b 0a 20  z[n++] = '\'';. 
6170: 20 7d 0a 20 20 69 66 28 20 6e 65 65 64 51 75 6f   }.  if( needQuo
6180: 74 65 20 29 20 7a 5b 6e 2b 2b 5d 20 3d 20 27 5c  te ) z[n++] = '\
6190: 27 27 3b 0a 20 20 7a 5b 6e 5d 20 3d 20 30 3b 0a  '';.  z[n] = 0;.
61a0: 7d 0a 0a 2f 2a 20 7a 49 6e 20 69 73 20 65 69 74  }../* zIn is eit
61b0: 68 65 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  her a pointer to
61c0: 20 61 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74   a NULL-terminat
61d0: 65 64 20 73 74 72 69 6e 67 20 69 6e 20 6d 65 6d  ed string in mem
61e0: 6f 72 79 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20  ory obtained.** 
61f0: 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2c 20 6f  from malloc(), o
6200: 72 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72  r a NULL pointer
6210: 2e 20 54 68 65 20 73 74 72 69 6e 67 20 70 6f 69  . The string poi
6220: 6e 74 65 64 20 74 6f 20 62 79 20 7a 41 70 70 65  nted to by zAppe
6230: 6e 64 20 69 73 0a 2a 2a 20 61 64 64 65 64 20 74  nd is.** added t
6240: 6f 20 7a 49 6e 2c 20 61 6e 64 20 74 68 65 20 72  o zIn, and the r
6250: 65 73 75 6c 74 20 72 65 74 75 72 6e 65 64 20 69  esult returned i
6260: 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65  n memory obtaine
6270: 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e  d from malloc().
6280: 0a 2a 2a 20 7a 49 6e 2c 20 69 66 20 69 74 20 77  .** zIn, if it w
6290: 61 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 73 20  as not NULL, is 
62a0: 66 72 65 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  freed..**.** If 
62b0: 74 68 65 20 74 68 69 72 64 20 61 72 67 75 6d 65  the third argume
62c0: 6e 74 2c 20 71 75 6f 74 65 2c 20 69 73 20 6e 6f  nt, quote, is no
62d0: 74 20 27 5c 30 27 2c 20 74 68 65 6e 20 69 74 20  t '\0', then it 
62e0: 69 73 20 75 73 65 64 20 61 73 20 61 20 0a 2a 2a  is used as a .**
62f0: 20 71 75 6f 74 65 20 63 68 61 72 61 63 74 65 72   quote character
6300: 20 66 6f 72 20 7a 41 70 70 65 6e 64 2e 0a 2a 2f   for zAppend..*/
6310: 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 61 70  .static char *ap
6320: 70 65 6e 64 54 65 78 74 28 63 68 61 72 20 2a 7a  pendText(char *z
6330: 49 6e 2c 20 63 68 61 72 20 63 6f 6e 73 74 20 2a  In, char const *
6340: 7a 41 70 70 65 6e 64 2c 20 63 68 61 72 20 71 75  zAppend, char qu
6350: 6f 74 65 29 7b 0a 20 20 69 6e 74 20 6c 65 6e 3b  ote){.  int len;
6360: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20  .  int i;.  int 
6370: 6e 41 70 70 65 6e 64 20 3d 20 73 74 72 6c 65 6e  nAppend = strlen
6380: 33 30 28 7a 41 70 70 65 6e 64 29 3b 0a 20 20 69  30(zAppend);.  i
6390: 6e 74 20 6e 49 6e 20 3d 20 28 7a 49 6e 3f 73 74  nt nIn = (zIn?st
63a0: 72 6c 65 6e 33 30 28 7a 49 6e 29 3a 30 29 3b 0a  rlen30(zIn):0);.
63b0: 0a 20 20 6c 65 6e 20 3d 20 6e 41 70 70 65 6e 64  .  len = nAppend
63c0: 2b 6e 49 6e 2b 31 3b 0a 20 20 69 66 28 20 71 75  +nIn+1;.  if( qu
63d0: 6f 74 65 20 29 7b 0a 20 20 20 20 6c 65 6e 20 2b  ote ){.    len +
63e0: 3d 20 32 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  = 2;.    for(i=0
63f0: 3b 20 69 3c 6e 41 70 70 65 6e 64 3b 20 69 2b 2b  ; i<nAppend; i++
6400: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 41 70  ){.      if( zAp
6410: 70 65 6e 64 5b 69 5d 3d 3d 71 75 6f 74 65 20 29  pend[i]==quote )
6420: 20 6c 65 6e 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20   len++;.    }.  
6430: 7d 0a 0a 20 20 7a 49 6e 20 3d 20 28 63 68 61 72  }..  zIn = (char
6440: 20 2a 29 72 65 61 6c 6c 6f 63 28 7a 49 6e 2c 20   *)realloc(zIn, 
6450: 6c 65 6e 29 3b 0a 20 20 69 66 28 20 21 7a 49 6e  len);.  if( !zIn
6460: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30   ){.    return 0
6470: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 71 75 6f  ;.  }..  if( quo
6480: 74 65 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a  te ){.    char *
6490: 7a 43 73 72 20 3d 20 26 7a 49 6e 5b 6e 49 6e 5d  zCsr = &zIn[nIn]
64a0: 3b 0a 20 20 20 20 2a 7a 43 73 72 2b 2b 20 3d 20  ;.    *zCsr++ = 
64b0: 71 75 6f 74 65 3b 0a 20 20 20 20 66 6f 72 28 69  quote;.    for(i
64c0: 3d 30 3b 20 69 3c 6e 41 70 70 65 6e 64 3b 20 69  =0; i<nAppend; i
64d0: 2b 2b 29 7b 0a 20 20 20 20 20 20 2a 7a 43 73 72  ++){.      *zCsr
64e0: 2b 2b 20 3d 20 7a 41 70 70 65 6e 64 5b 69 5d 3b  ++ = zAppend[i];
64f0: 0a 20 20 20 20 20 20 69 66 28 20 7a 41 70 70 65  .      if( zAppe
6500: 6e 64 5b 69 5d 3d 3d 71 75 6f 74 65 20 29 20 2a  nd[i]==quote ) *
6510: 7a 43 73 72 2b 2b 20 3d 20 71 75 6f 74 65 3b 0a  zCsr++ = quote;.
6520: 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 2b      }.    *zCsr+
6530: 2b 20 3d 20 71 75 6f 74 65 3b 0a 20 20 20 20 2a  + = quote;.    *
6540: 7a 43 73 72 2b 2b 20 3d 20 27 5c 30 27 3b 0a 20  zCsr++ = '\0';. 
6550: 20 20 20 61 73 73 65 72 74 28 20 28 7a 43 73 72     assert( (zCsr
6560: 2d 7a 49 6e 29 3d 3d 6c 65 6e 20 29 3b 0a 20 20  -zIn)==len );.  
6570: 7d 65 6c 73 65 7b 0a 20 20 20 20 6d 65 6d 63 70  }else{.    memcp
6580: 79 28 26 7a 49 6e 5b 6e 49 6e 5d 2c 20 7a 41 70  y(&zIn[nIn], zAp
6590: 70 65 6e 64 2c 20 6e 41 70 70 65 6e 64 29 3b 0a  pend, nAppend);.
65a0: 20 20 20 20 7a 49 6e 5b 6c 65 6e 2d 31 5d 20 3d      zIn[len-1] =
65b0: 20 27 5c 30 27 3b 0a 20 20 7d 0a 0a 20 20 72 65   '\0';.  }..  re
65c0: 74 75 72 6e 20 7a 49 6e 3b 0a 7d 0a 0a 0a 2f 2a  turn zIn;.}.../*
65d0: 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 20 71 75  .** Execute a qu
65e0: 65 72 79 20 73 74 61 74 65 6d 65 6e 74 20 74 68  ery statement th
65f0: 61 74 20 77 69 6c 6c 20 67 65 6e 65 72 61 74 65  at will generate
6600: 20 53 51 4c 20 6f 75 74 70 75 74 2e 20 20 50 72   SQL output.  Pr
6610: 69 6e 74 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c  int.** the resul
6620: 74 20 63 6f 6c 75 6d 6e 73 2c 20 63 6f 6d 6d 61  t columns, comma
6630: 2d 73 65 70 61 72 61 74 65 64 2c 20 6f 6e 20 61  -separated, on a
6640: 20 6c 69 6e 65 20 61 6e 64 20 74 68 65 6e 20 61   line and then a
6650: 64 64 20 61 0a 2a 2a 20 73 65 6d 69 63 6f 6c 6f  dd a.** semicolo
6660: 6e 20 74 65 72 6d 69 6e 61 74 6f 72 20 74 6f 20  n terminator to 
6670: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 61 74 20  the end of that 
6680: 6c 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  line..**.** If t
6690: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
66a0: 75 6d 6e 73 20 69 73 20 31 20 61 6e 64 20 74 68  umns is 1 and th
66b0: 61 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  at column contai
66c0: 6e 73 20 74 65 78 74 20 22 2d 2d 22 0a 2a 2a 20  ns text "--".** 
66d0: 74 68 65 6e 20 77 72 69 74 65 20 74 68 65 20 73  then write the s
66e0: 65 6d 69 63 6f 6c 6f 6e 20 6f 6e 20 61 20 73 65  emicolon on a se
66f0: 70 61 72 61 74 65 20 6c 69 6e 65 2e 20 20 54 68  parate line.  Th
6700: 61 74 20 77 61 79 2c 20 69 66 20 61 20 0a 2a 2a  at way, if a .**
6710: 20 22 2d 2d 22 20 63 6f 6d 6d 65 6e 74 20 6f 63   "--" comment oc
6720: 63 75 72 73 20 61 74 20 74 68 65 20 65 6e 64 20  curs at the end 
6730: 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  of the statement
6740: 2c 20 74 68 65 20 63 6f 6d 6d 65 6e 74 0a 2a 2a  , the comment.**
6750: 20 77 6f 6e 27 74 20 63 6f 6e 73 75 6d 65 20 74   won't consume t
6760: 68 65 20 73 65 6d 69 63 6f 6c 6f 6e 20 74 65 72  he semicolon ter
6770: 6d 69 6e 61 74 6f 72 2e 0a 2a 2f 0a 73 74 61 74  minator..*/.stat
6780: 69 63 20 69 6e 74 20 72 75 6e 5f 74 61 62 6c 65  ic int run_table
6790: 5f 64 75 6d 70 5f 71 75 65 72 79 28 0a 20 20 73  _dump_query(.  s
67a0: 74 72 75 63 74 20 63 61 6c 6c 62 61 63 6b 5f 64  truct callback_d
67b0: 61 74 61 20 2a 70 2c 20 2f 2a 20 51 75 65 72 79  ata *p, /* Query
67c0: 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 63 6f   context */.  co
67d0: 6e 73 74 20 63 68 61 72 20 2a 7a 53 65 6c 65 63  nst char *zSelec
67e0: 74 2c 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t,     /* SELECT
67f0: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 65 78   statement to ex
6800: 74 72 61 63 74 20 63 6f 6e 74 65 6e 74 20 2a 2f  tract content */
6810: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
6820: 46 69 72 73 74 52 6f 77 20 20 20 20 2f 2a 20 50  FirstRow    /* P
6830: 72 69 6e 74 20 62 65 66 6f 72 65 20 66 69 72 73  rint before firs
6840: 74 20 72 6f 77 2c 20 69 66 20 6e 6f 74 20 4e 55  t row, if not NU
6850: 4c 4c 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  LL */.){.  sqlit
6860: 65 33 5f 73 74 6d 74 20 2a 70 53 65 6c 65 63 74  e3_stmt *pSelect
6870: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e  ;.  int rc;.  in
6880: 74 20 6e 52 65 73 75 6c 74 3b 0a 20 20 69 6e 74  t nResult;.  int
6890: 20 69 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   i;.  const char
68a0: 20 2a 7a 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69   *z;.  rc = sqli
68b0: 74 65 33 5f 70 72 65 70 61 72 65 28 70 2d 3e 64  te3_prepare(p->d
68c0: 62 2c 20 7a 53 65 6c 65 63 74 2c 20 2d 31 2c 20  b, zSelect, -1, 
68d0: 26 70 53 65 6c 65 63 74 2c 20 30 29 3b 0a 20 20  &pSelect, 0);.  
68e0: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
68f0: 4b 20 7c 7c 20 21 70 53 65 6c 65 63 74 20 29 7b  K || !pSelect ){
6900: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e  .    fprintf(p->
6910: 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 20 45 52 52 4f  out, "/**** ERRO
6920: 52 3a 20 28 25 64 29 20 25 73 20 2a 2a 2a 2a 2a  R: (%d) %s *****
6930: 2f 5c 6e 22 2c 20 72 63 2c 20 73 71 6c 69 74 65  /\n", rc, sqlite
6940: 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29  3_errmsg(p->db))
6950: 3b 0a 20 20 20 20 70 2d 3e 6e 45 72 72 2b 2b 3b  ;.    p->nErr++;
6960: 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  .    return rc;.
6970: 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
6980: 65 33 5f 73 74 65 70 28 70 53 65 6c 65 63 74 29  e3_step(pSelect)
6990: 3b 0a 20 20 6e 52 65 73 75 6c 74 20 3d 20 73 71  ;.  nResult = sq
69a0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75  lite3_column_cou
69b0: 6e 74 28 70 53 65 6c 65 63 74 29 3b 0a 20 20 77  nt(pSelect);.  w
69c0: 68 69 6c 65 28 20 72 63 3d 3d 53 51 4c 49 54 45  hile( rc==SQLITE
69d0: 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69 66 28 20  _ROW ){.    if( 
69e0: 7a 46 69 72 73 74 52 6f 77 20 29 7b 0a 20 20 20  zFirstRow ){.   
69f0: 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75     fprintf(p->ou
6a00: 74 2c 20 22 25 73 22 2c 20 7a 46 69 72 73 74 52  t, "%s", zFirstR
6a10: 6f 77 29 3b 0a 20 20 20 20 20 20 7a 46 69 72 73  ow);.      zFirs
6a20: 74 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  tRow = 0;.    }.
6a30: 20 20 20 20 7a 20 3d 20 28 63 6f 6e 73 74 20 63      z = (const c
6a40: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  har*)sqlite3_col
6a50: 75 6d 6e 5f 74 65 78 74 28 70 53 65 6c 65 63 74  umn_text(pSelect
6a60: 2c 20 30 29 3b 0a 20 20 20 20 66 70 72 69 6e 74  , 0);.    fprint
6a70: 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20  f(p->out, "%s", 
6a80: 7a 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b  z);.    for(i=1;
6a90: 20 69 3c 6e 52 65 73 75 6c 74 3b 20 69 2b 2b 29   i<nResult; i++)
6aa0: 7b 20 0a 20 20 20 20 20 20 66 70 72 69 6e 74 66  { .      fprintf
6ab0: 28 70 2d 3e 6f 75 74 2c 20 22 2c 25 73 22 2c 20  (p->out, ",%s", 
6ac0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
6ad0: 65 78 74 28 70 53 65 6c 65 63 74 2c 20 69 29 29  ext(pSelect, i))
6ae0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
6af0: 7a 3d 3d 30 20 29 20 7a 20 3d 20 22 22 3b 0a 20  z==0 ) z = "";. 
6b00: 20 20 20 77 68 69 6c 65 28 20 7a 5b 30 5d 20 26     while( z[0] &
6b10: 26 20 28 7a 5b 30 5d 21 3d 27 2d 27 20 7c 7c 20  & (z[0]!='-' || 
6b20: 7a 5b 31 5d 21 3d 27 2d 27 29 20 29 20 7a 2b 2b  z[1]!='-') ) z++
6b30: 3b 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d 20 29  ;.    if( z[0] )
6b40: 7b 0a 20 20 20 20 20 20 66 70 72 69 6e 74 66 28  {.      fprintf(
6b50: 70 2d 3e 6f 75 74 2c 20 22 5c 6e 3b 5c 6e 22 29  p->out, "\n;\n")
6b60: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
6b70: 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75     fprintf(p->ou
6b80: 74 2c 20 22 3b 5c 6e 22 29 3b 0a 20 20 20 20 7d  t, ";\n");.    }
6b90: 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 73 71      .    rc = sq
6ba0: 6c 69 74 65 33 5f 73 74 65 70 28 70 53 65 6c 65  lite3_step(pSele
6bb0: 63 74 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  ct);.  }.  rc = 
6bc0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
6bd0: 28 70 53 65 6c 65 63 74 29 3b 0a 20 20 69 66 28  (pSelect);.  if(
6be0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
6bf0: 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d  {.    fprintf(p-
6c00: 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 20 45 52 52  >out, "/**** ERR
6c10: 4f 52 3a 20 28 25 64 29 20 25 73 20 2a 2a 2a 2a  OR: (%d) %s ****
6c20: 2a 2f 5c 6e 22 2c 20 72 63 2c 20 73 71 6c 69 74  */\n", rc, sqlit
6c30: 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29  e3_errmsg(p->db)
6c40: 29 3b 0a 20 20 20 20 70 2d 3e 6e 45 72 72 2b 2b  );.    p->nErr++
6c50: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72  ;.  }.  return r
6c60: 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  c;.}../*.** Allo
6c70: 63 61 74 65 20 73 70 61 63 65 20 61 6e 64 20 73  cate space and s
6c80: 61 76 65 20 6f 66 66 20 63 75 72 72 65 6e 74 20  ave off current 
6c90: 65 72 72 6f 72 20 73 74 72 69 6e 67 2e 0a 2a 2f  error string..*/
6ca0: 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 73 61  .static char *sa
6cb0: 76 65 5f 65 72 72 5f 6d 73 67 28 0a 20 20 73 71  ve_err_msg(.  sq
6cc0: 6c 69 74 65 33 20 2a 64 62 20 20 20 20 20 20 20  lite3 *db       
6cd0: 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
6ce0: 20 74 6f 20 71 75 65 72 79 20 2a 2f 0a 29 7b 0a   to query */.){.
6cf0: 20 20 69 6e 74 20 6e 45 72 72 4d 73 67 20 3d 20    int nErrMsg = 
6d00: 31 2b 73 74 72 6c 65 6e 33 30 28 73 71 6c 69 74  1+strlen30(sqlit
6d10: 65 33 5f 65 72 72 6d 73 67 28 64 62 29 29 3b 0a  e3_errmsg(db));.
6d20: 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20    char *zErrMsg 
6d30: 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  = sqlite3_malloc
6d40: 28 6e 45 72 72 4d 73 67 29 3b 0a 20 20 69 66 28  (nErrMsg);.  if(
6d50: 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20   zErrMsg ){.    
6d60: 6d 65 6d 63 70 79 28 7a 45 72 72 4d 73 67 2c 20  memcpy(zErrMsg, 
6d70: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64  sqlite3_errmsg(d
6d80: 62 29 2c 20 6e 45 72 72 4d 73 67 29 3b 0a 20 20  b), nErrMsg);.  
6d90: 7d 0a 20 20 72 65 74 75 72 6e 20 7a 45 72 72 4d  }.  return zErrM
6da0: 73 67 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73  sg;.}../*.** Dis
6db0: 70 6c 61 79 20 6d 65 6d 6f 72 79 20 73 74 61 74  play memory stat
6dc0: 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  s..*/.static int
6dd0: 20 64 69 73 70 6c 61 79 5f 73 74 61 74 73 28 0a   display_stats(.
6de0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20    sqlite3 *db,  
6df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
6e00: 20 44 61 74 61 62 61 73 65 20 74 6f 20 71 75 65   Database to que
6e10: 72 79 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 63  ry */.  struct c
6e20: 61 6c 6c 62 61 63 6b 5f 64 61 74 61 20 2a 70 41  allback_data *pA
6e30: 72 67 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74  rg, /* Pointer t
6e40: 6f 20 73 74 72 75 63 74 20 63 61 6c 6c 62 61 63  o struct callbac
6e50: 6b 5f 64 61 74 61 20 2a 2f 0a 20 20 69 6e 74 20  k_data */.  int 
6e60: 62 52 65 73 65 74 20 20 20 20 20 20 20 20 20 20  bReset          
6e70: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
6e80: 74 6f 20 72 65 73 65 74 20 74 68 65 20 73 74 61  to reset the sta
6e90: 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69  ts */.){.  int i
6ea0: 43 75 72 3b 0a 20 20 69 6e 74 20 69 48 69 77 74  Cur;.  int iHiwt
6eb0: 72 3b 0a 0a 20 20 69 66 28 20 70 41 72 67 20 26  r;..  if( pArg &
6ec0: 26 20 70 41 72 67 2d 3e 6f 75 74 20 29 7b 0a 20  & pArg->out ){. 
6ed0: 20 20 20 0a 20 20 20 20 69 48 69 77 74 72 20 3d     .    iHiwtr =
6ee0: 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20   iCur = -1;.    
6ef0: 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 53  sqlite3_status(S
6f00: 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 4d 45 4d  QLITE_STATUS_MEM
6f10: 4f 52 59 5f 55 53 45 44 2c 20 26 69 43 75 72 2c  ORY_USED, &iCur,
6f20: 20 26 69 48 69 77 74 72 2c 20 62 52 65 73 65 74   &iHiwtr, bReset
6f30: 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 70  );.    fprintf(p
6f40: 41 72 67 2d 3e 6f 75 74 2c 20 22 4d 65 6d 6f 72  Arg->out, "Memor
6f50: 79 20 55 73 65 64 3a 20 20 20 20 20 20 20 20 20  y Used:         
6f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f70: 25 64 20 28 6d 61 78 20 25 64 29 20 62 79 74 65  %d (max %d) byte
6f80: 73 5c 6e 22 2c 20 69 43 75 72 2c 20 69 48 69 77  s\n", iCur, iHiw
6f90: 74 72 29 3b 0a 20 20 20 20 69 48 69 77 74 72 20  tr);.    iHiwtr 
6fa0: 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20  = iCur = -1;.   
6fb0: 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28   sqlite3_status(
6fc0: 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 4d 41  SQLITE_STATUS_MA
6fd0: 4c 4c 4f 43 5f 43 4f 55 4e 54 2c 20 26 69 43 75  LLOC_COUNT, &iCu
6fe0: 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52 65 73  r, &iHiwtr, bRes
6ff0: 65 74 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66  et);.    fprintf
7000: 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4e 75 6d  (pArg->out, "Num
7010: 62 65 72 20 6f 66 20 4f 75 74 73 74 61 6e 64 69  ber of Outstandi
7020: 6e 67 20 41 6c 6c 6f 63 61 74 69 6f 6e 73 3a 20  ng Allocations: 
7030: 20 20 25 64 20 28 6d 61 78 20 25 64 29 5c 6e 22    %d (max %d)\n"
7040: 2c 20 69 43 75 72 2c 20 69 48 69 77 74 72 29 3b  , iCur, iHiwtr);
7050: 0a 2f 2a 0a 2a 2a 20 4e 6f 74 20 63 75 72 72 65  ./*.** Not curre
7060: 6e 74 6c 79 20 75 73 65 64 20 62 79 20 74 68 65  ntly used by the
7070: 20 43 4c 49 2e 0a 2a 2a 20 20 20 20 69 48 69 77   CLI..**    iHiw
7080: 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a  tr = iCur = -1;.
7090: 2a 2a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74  **    sqlite3_st
70a0: 61 74 75 73 28 53 51 4c 49 54 45 5f 53 54 41 54  atus(SQLITE_STAT
70b0: 55 53 5f 50 41 47 45 43 41 43 48 45 5f 55 53 45  US_PAGECACHE_USE
70c0: 44 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77 74  D, &iCur, &iHiwt
70d0: 72 2c 20 62 52 65 73 65 74 29 3b 0a 2a 2a 20 20  r, bReset);.**  
70e0: 20 20 66 70 72 69 6e 74 66 28 70 41 72 67 2d 3e    fprintf(pArg->
70f0: 6f 75 74 2c 20 22 4e 75 6d 62 65 72 20 6f 66 20  out, "Number of 
7100: 50 63 61 63 68 65 20 50 61 67 65 73 20 55 73 65  Pcache Pages Use
7110: 64 3a 20 20 20 20 20 20 20 20 20 25 64 20 28 6d  d:         %d (m
7120: 61 78 20 25 64 29 20 70 61 67 65 73 5c 6e 22 2c  ax %d) pages\n",
7130: 20 69 43 75 72 2c 20 69 48 69 77 74 72 29 3b 0a   iCur, iHiwtr);.
7140: 2a 2f 0a 20 20 20 20 69 48 69 77 74 72 20 3d 20  */.    iHiwtr = 
7150: 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73  iCur = -1;.    s
7160: 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 53 51  qlite3_status(SQ
7170: 4c 49 54 45 5f 53 54 41 54 55 53 5f 50 41 47 45  LITE_STATUS_PAGE
7180: 43 41 43 48 45 5f 4f 56 45 52 46 4c 4f 57 2c 20  CACHE_OVERFLOW, 
7190: 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20  &iCur, &iHiwtr, 
71a0: 62 52 65 73 65 74 29 3b 0a 20 20 20 20 66 70 72  bReset);.    fpr
71b0: 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20  intf(pArg->out, 
71c0: 22 4e 75 6d 62 65 72 20 6f 66 20 50 63 61 63 68  "Number of Pcach
71d0: 65 20 4f 76 65 72 66 6c 6f 77 20 42 79 74 65 73  e Overflow Bytes
71e0: 3a 20 20 20 20 20 25 64 20 28 6d 61 78 20 25 64  :     %d (max %d
71f0: 29 20 62 79 74 65 73 5c 6e 22 2c 20 69 43 75 72  ) bytes\n", iCur
7200: 2c 20 69 48 69 77 74 72 29 3b 0a 2f 2a 0a 2a 2a  , iHiwtr);./*.**
7210: 20 4e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75   Not currently u
7220: 73 65 64 20 62 79 20 74 68 65 20 43 4c 49 2e 0a  sed by the CLI..
7230: 2a 2a 20 20 20 20 69 48 69 77 74 72 20 3d 20 69  **    iHiwtr = i
7240: 43 75 72 20 3d 20 2d 31 3b 0a 2a 2a 20 20 20 20  Cur = -1;.**    
7250: 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 53  sqlite3_status(S
7260: 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 53 43 52  QLITE_STATUS_SCR
7270: 41 54 43 48 5f 55 53 45 44 2c 20 26 69 43 75 72  ATCH_USED, &iCur
7280: 2c 20 26 69 48 69 77 74 72 2c 20 62 52 65 73 65  , &iHiwtr, bRese
7290: 74 29 3b 0a 2a 2a 20 20 20 20 66 70 72 69 6e 74  t);.**    fprint
72a0: 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4e 75  f(pArg->out, "Nu
72b0: 6d 62 65 72 20 6f 66 20 53 63 72 61 74 63 68 20  mber of Scratch 
72c0: 41 6c 6c 6f 63 61 74 69 6f 6e 73 20 55 73 65 64  Allocations Used
72d0: 3a 20 20 25 64 20 28 6d 61 78 20 25 64 29 5c 6e  :  %d (max %d)\n
72e0: 22 2c 20 69 43 75 72 2c 20 69 48 69 77 74 72 29  ", iCur, iHiwtr)
72f0: 3b 0a 2a 2f 0a 20 20 20 20 69 48 69 77 74 72 20  ;.*/.    iHiwtr 
7300: 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20  = iCur = -1;.   
7310: 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28   sqlite3_status(
7320: 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 53 43  SQLITE_STATUS_SC
7330: 52 41 54 43 48 5f 4f 56 45 52 46 4c 4f 57 2c 20  RATCH_OVERFLOW, 
7340: 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20  &iCur, &iHiwtr, 
7350: 62 52 65 73 65 74 29 3b 0a 20 20 20 20 66 70 72  bReset);.    fpr
7360: 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20  intf(pArg->out, 
7370: 22 4e 75 6d 62 65 72 20 6f 66 20 53 63 72 61 74  "Number of Scrat
7380: 63 68 20 4f 76 65 72 66 6c 6f 77 20 42 79 74 65  ch Overflow Byte
7390: 73 3a 20 20 20 20 25 64 20 28 6d 61 78 20 25 64  s:    %d (max %d
73a0: 29 20 62 79 74 65 73 5c 6e 22 2c 20 69 43 75 72  ) bytes\n", iCur
73b0: 2c 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20 69  , iHiwtr);.    i
73c0: 48 69 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d  Hiwtr = iCur = -
73d0: 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  1;.    sqlite3_s
73e0: 74 61 74 75 73 28 53 51 4c 49 54 45 5f 53 54 41  tatus(SQLITE_STA
73f0: 54 55 53 5f 4d 41 4c 4c 4f 43 5f 53 49 5a 45 2c  TUS_MALLOC_SIZE,
7400: 20 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c   &iCur, &iHiwtr,
7410: 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20 66 70   bReset);.    fp
7420: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
7430: 20 22 4c 61 72 67 65 73 74 20 41 6c 6c 6f 63 61   "Largest Alloca
7440: 74 69 6f 6e 3a 20 20 20 20 20 20 20 20 20 20 20  tion:           
7450: 20 20 20 20 20 20 20 25 64 20 62 79 74 65 73 5c         %d bytes\
7460: 6e 22 2c 20 69 48 69 77 74 72 29 3b 0a 20 20 20  n", iHiwtr);.   
7470: 20 69 48 69 77 74 72 20 3d 20 69 43 75 72 20 3d   iHiwtr = iCur =
7480: 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   -1;.    sqlite3
7490: 5f 73 74 61 74 75 73 28 53 51 4c 49 54 45 5f 53  _status(SQLITE_S
74a0: 54 41 54 55 53 5f 50 41 47 45 43 41 43 48 45 5f  TATUS_PAGECACHE_
74b0: 53 49 5a 45 2c 20 26 69 43 75 72 2c 20 26 69 48  SIZE, &iCur, &iH
74c0: 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20  iwtr, bReset);. 
74d0: 20 20 20 66 70 72 69 6e 74 66 28 70 41 72 67 2d     fprintf(pArg-
74e0: 3e 6f 75 74 2c 20 22 4c 61 72 67 65 73 74 20 50  >out, "Largest P
74f0: 63 61 63 68 65 20 41 6c 6c 6f 63 61 74 69 6f 6e  cache Allocation
7500: 3a 20 20 20 20 20 20 20 20 20 20 20 25 64 20 62  :           %d b
7510: 79 74 65 73 5c 6e 22 2c 20 69 48 69 77 74 72 29  ytes\n", iHiwtr)
7520: 3b 0a 20 20 20 20 69 48 69 77 74 72 20 3d 20 69  ;.    iHiwtr = i
7530: 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71  Cur = -1;.    sq
7540: 6c 69 74 65 33 5f 73 74 61 74 75 73 28 53 51 4c  lite3_status(SQL
7550: 49 54 45 5f 53 54 41 54 55 53 5f 53 43 52 41 54  ITE_STATUS_SCRAT
7560: 43 48 5f 53 49 5a 45 2c 20 26 69 43 75 72 2c 20  CH_SIZE, &iCur, 
7570: 26 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29  &iHiwtr, bReset)
7580: 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 70 41  ;.    fprintf(pA
7590: 72 67 2d 3e 6f 75 74 2c 20 22 4c 61 72 67 65 73  rg->out, "Larges
75a0: 74 20 53 63 72 61 74 63 68 20 41 6c 6c 6f 63 61  t Scratch Alloca
75b0: 74 69 6f 6e 3a 20 20 20 20 20 20 20 20 20 20 25  tion:          %
75c0: 64 20 62 79 74 65 73 5c 6e 22 2c 20 69 48 69 77  d bytes\n", iHiw
75d0: 74 72 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52  tr);.#ifdef YYTR
75e0: 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48  ACKMAXSTACKDEPTH
75f0: 0a 20 20 20 20 69 48 69 77 74 72 20 3d 20 69 43  .    iHiwtr = iC
7600: 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c  ur = -1;.    sql
7610: 69 74 65 33 5f 73 74 61 74 75 73 28 53 51 4c 49  ite3_status(SQLI
7620: 54 45 5f 53 54 41 54 55 53 5f 50 41 52 53 45 52  TE_STATUS_PARSER
7630: 5f 53 54 41 43 4b 2c 20 26 69 43 75 72 2c 20 26  _STACK, &iCur, &
7640: 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b  iHiwtr, bReset);
7650: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 70 41 72  .    fprintf(pAr
7660: 67 2d 3e 6f 75 74 2c 20 22 44 65 65 70 65 73 74  g->out, "Deepest
7670: 20 50 61 72 73 65 72 20 53 74 61 63 6b 3a 20 20   Parser Stack:  
7680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25 64                %d
7690: 20 28 6d 61 78 20 25 64 29 5c 6e 22 2c 20 69 43   (max %d)\n", iC
76a0: 75 72 2c 20 69 48 69 77 74 72 29 3b 0a 23 65 6e  ur, iHiwtr);.#en
76b0: 64 69 66 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  dif.  }..  if( p
76c0: 41 72 67 20 26 26 20 70 41 72 67 2d 3e 6f 75 74  Arg && pArg->out
76d0: 20 26 26 20 64 62 20 29 7b 0a 20 20 20 20 69 48   && db ){.    iH
76e0: 69 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31  iwtr = iCur = -1
76f0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62  ;.    sqlite3_db
7700: 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49  _status(db, SQLI
7710: 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b  TE_DBSTATUS_LOOK
7720: 41 53 49 44 45 5f 55 53 45 44 2c 20 26 69 43 75  ASIDE_USED, &iCu
7730: 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52 65 73  r, &iHiwtr, bRes
7740: 65 74 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66  et);.    fprintf
7750: 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4c 6f 6f  (pArg->out, "Loo
7760: 6b 61 73 69 64 65 20 53 6c 6f 74 73 20 55 73 65  kaside Slots Use
7770: 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
7780: 20 20 25 64 20 28 6d 61 78 20 25 64 29 5c 6e 22    %d (max %d)\n"
7790: 2c 20 69 43 75 72 2c 20 69 48 69 77 74 72 29 3b  , iCur, iHiwtr);
77a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
77b0: 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54  status(db, SQLIT
77c0: 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41  E_DBSTATUS_LOOKA
77d0: 53 49 44 45 5f 48 49 54 2c 20 26 69 43 75 72 2c  SIDE_HIT, &iCur,
77e0: 20 26 69 48 69 77 74 72 2c 20 62 52 65 73 65 74   &iHiwtr, bReset
77f0: 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 70  );.    fprintf(p
7800: 41 72 67 2d 3e 6f 75 74 2c 20 22 53 75 63 63 65  Arg->out, "Succe
7810: 73 73 66 75 6c 20 6c 6f 6f 6b 61 73 69 64 65 20  ssful lookaside 
7820: 61 74 74 65 6d 70 74 73 3a 20 20 20 20 20 20 20  attempts:       
7830: 25 64 5c 6e 22 2c 20 69 48 69 77 74 72 29 3b 0a  %d\n", iHiwtr);.
7840: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
7850: 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45  tatus(db, SQLITE
7860: 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53  _DBSTATUS_LOOKAS
7870: 49 44 45 5f 4d 49 53 53 5f 53 49 5a 45 2c 20 26  IDE_MISS_SIZE, &
7880: 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62  iCur, &iHiwtr, b
7890: 52 65 73 65 74 29 3b 0a 20 20 20 20 66 70 72 69  Reset);.    fpri
78a0: 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22  ntf(pArg->out, "
78b0: 4c 6f 6f 6b 61 73 69 64 65 20 66 61 69 6c 75 72  Lookaside failur
78c0: 65 73 20 64 75 65 20 74 6f 20 73 69 7a 65 3a 20  es due to size: 
78d0: 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 48 69 77       %d\n", iHiw
78e0: 74 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  tr);.    sqlite3
78f0: 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20 53  _db_status(db, S
7900: 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 4c  QLITE_DBSTATUS_L
7910: 4f 4f 4b 41 53 49 44 45 5f 4d 49 53 53 5f 46 55  OOKASIDE_MISS_FU
7920: 4c 4c 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77  LL, &iCur, &iHiw
7930: 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20  tr, bReset);.   
7940: 20 66 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f   fprintf(pArg->o
7950: 75 74 2c 20 22 4c 6f 6f 6b 61 73 69 64 65 20 66  ut, "Lookaside f
7960: 61 69 6c 75 72 65 73 20 64 75 65 20 74 6f 20 4f  ailures due to O
7970: 4f 4d 3a 20 20 20 20 20 20 20 25 64 5c 6e 22 2c  OM:       %d\n",
7980: 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20 69 48   iHiwtr);.    iH
7990: 69 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31  iwtr = iCur = -1
79a0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62  ;.    sqlite3_db
79b0: 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49  _status(db, SQLI
79c0: 54 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48  TE_DBSTATUS_CACH
79d0: 45 5f 55 53 45 44 2c 20 26 69 43 75 72 2c 20 26  E_USED, &iCur, &
79e0: 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b  iHiwtr, bReset);
79f0: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 70 41 72  .    fprintf(pAr
7a00: 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65 72 20 48  g->out, "Pager H
7a10: 65 61 70 20 55 73 61 67 65 3a 20 20 20 20 20 20  eap Usage:      
7a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25 64                %d
7a30: 20 62 79 74 65 73 5c 6e 22 2c 20 69 43 75 72 29   bytes\n", iCur)
7a40: 3b 20 20 20 20 69 48 69 77 74 72 20 3d 20 69 43  ;    iHiwtr = iC
7a50: 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c  ur = -1;.    sql
7a60: 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64  ite3_db_status(d
7a70: 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54  b, SQLITE_DBSTAT
7a80: 55 53 5f 43 41 43 48 45 5f 48 49 54 2c 20 26 69  US_CACHE_HIT, &i
7a90: 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 31 29  Cur, &iHiwtr, 1)
7aa0: 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 70 41  ;.    fprintf(pA
7ab0: 72 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65 20 63  rg->out, "Page c
7ac0: 61 63 68 65 20 68 69 74 73 3a 20 20 20 20 20 20  ache hits:      
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25                 %
7ae0: 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20 20  d\n", iCur);.   
7af0: 20 69 48 69 77 74 72 20 3d 20 69 43 75 72 20 3d   iHiwtr = iCur =
7b00: 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   -1;.    sqlite3
7b10: 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20 53  _db_status(db, S
7b20: 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 43  QLITE_DBSTATUS_C
7b30: 41 43 48 45 5f 4d 49 53 53 2c 20 26 69 43 75 72  ACHE_MISS, &iCur
7b40: 2c 20 26 69 48 69 77 74 72 2c 20 31 29 3b 0a 20  , &iHiwtr, 1);. 
7b50: 20 20 20 66 70 72 69 6e 74 66 28 70 41 72 67 2d     fprintf(pArg-
7b60: 3e 6f 75 74 2c 20 22 50 61 67 65 20 63 61 63 68  >out, "Page cach
7b70: 65 20 6d 69 73 73 65 73 3a 20 20 20 20 20 20 20  e misses:       
7b80: 20 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e              %d\n
7b90: 22 2c 20 69 43 75 72 29 3b 20 0a 20 20 20 20 69  ", iCur); .    i
7ba0: 48 69 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d  Hiwtr = iCur = -
7bb0: 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64  1;.    sqlite3_d
7bc0: 62 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c  b_status(db, SQL
7bd0: 49 54 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43  ITE_DBSTATUS_CAC
7be0: 48 45 5f 57 52 49 54 45 2c 20 26 69 43 75 72 2c  HE_WRITE, &iCur,
7bf0: 20 26 69 48 69 77 74 72 2c 20 31 29 3b 0a 20 20   &iHiwtr, 1);.  
7c00: 20 20 66 70 72 69 6e 74 66 28 70 41 72 67 2d 3e    fprintf(pArg->
7c10: 6f 75 74 2c 20 22 50 61 67 65 20 63 61 63 68 65  out, "Page cache
7c20: 20 77 72 69 74 65 73 3a 20 20 20 20 20 20 20 20   writes:        
7c30: 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22             %d\n"
7c40: 2c 20 69 43 75 72 29 3b 20 0a 20 20 20 20 69 48  , iCur); .    iH
7c50: 69 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31  iwtr = iCur = -1
7c60: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62  ;.    sqlite3_db
7c70: 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49  _status(db, SQLI
7c80: 54 45 5f 44 42 53 54 41 54 55 53 5f 53 43 48 45  TE_DBSTATUS_SCHE
7c90: 4d 41 5f 55 53 45 44 2c 20 26 69 43 75 72 2c 20  MA_USED, &iCur, 
7ca0: 26 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29  &iHiwtr, bReset)
7cb0: 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 70 41  ;.    fprintf(pA
7cc0: 72 67 2d 3e 6f 75 74 2c 20 22 53 63 68 65 6d 61  rg->out, "Schema
7cd0: 20 48 65 61 70 20 55 73 61 67 65 3a 20 20 20 20   Heap Usage:    
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25                 %
7cf0: 64 20 62 79 74 65 73 5c 6e 22 2c 20 69 43 75 72  d bytes\n", iCur
7d00: 29 3b 20 0a 20 20 20 20 69 48 69 77 74 72 20 3d  ); .    iHiwtr =
7d10: 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20   iCur = -1;.    
7d20: 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75  sqlite3_db_statu
7d30: 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53  s(db, SQLITE_DBS
7d40: 54 41 54 55 53 5f 53 54 4d 54 5f 55 53 45 44 2c  TATUS_STMT_USED,
7d50: 20 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c   &iCur, &iHiwtr,
7d60: 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20 66 70   bReset);.    fp
7d70: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
7d80: 20 22 53 74 61 74 65 6d 65 6e 74 20 48 65 61 70   "Statement Heap
7d90: 2f 4c 6f 6f 6b 61 73 69 64 65 20 55 73 61 67 65  /Lookaside Usage
7da0: 3a 20 20 20 20 20 20 25 64 20 62 79 74 65 73 5c  :      %d bytes\
7db0: 6e 22 2c 20 69 43 75 72 29 3b 20 0a 20 20 7d 0a  n", iCur); .  }.
7dc0: 0a 20 20 69 66 28 20 70 41 72 67 20 26 26 20 70  .  if( pArg && p
7dd0: 41 72 67 2d 3e 6f 75 74 20 26 26 20 64 62 20 26  Arg->out && db &
7de0: 26 20 70 41 72 67 2d 3e 70 53 74 6d 74 20 29 7b  & pArg->pStmt ){
7df0: 0a 20 20 20 20 69 43 75 72 20 3d 20 73 71 6c 69  .    iCur = sqli
7e00: 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28  te3_stmt_status(
7e10: 70 41 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51 4c  pArg->pStmt, SQL
7e20: 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 46  ITE_STMTSTATUS_F
7e30: 55 4c 4c 53 43 41 4e 5f 53 54 45 50 2c 20 62 52  ULLSCAN_STEP, bR
7e40: 65 73 65 74 29 3b 0a 20 20 20 20 66 70 72 69 6e  eset);.    fprin
7e50: 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 46  tf(pArg->out, "F
7e60: 75 6c 6c 73 63 61 6e 20 53 74 65 70 73 3a 20 20  ullscan Steps:  
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e80: 20 20 20 20 25 64 5c 6e 22 2c 20 69 43 75 72 29      %d\n", iCur)
7e90: 3b 0a 20 20 20 20 69 43 75 72 20 3d 20 73 71 6c  ;.    iCur = sql
7ea0: 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73  ite3_stmt_status
7eb0: 28 70 41 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51  (pArg->pStmt, SQ
7ec0: 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
7ed0: 53 4f 52 54 2c 20 62 52 65 73 65 74 29 3b 0a 20  SORT, bReset);. 
7ee0: 20 20 20 66 70 72 69 6e 74 66 28 70 41 72 67 2d     fprintf(pArg-
7ef0: 3e 6f 75 74 2c 20 22 53 6f 72 74 20 4f 70 65 72  >out, "Sort Oper
7f00: 61 74 69 6f 6e 73 3a 20 20 20 20 20 20 20 20 20  ations:         
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e              %d\n
7f20: 22 2c 20 69 43 75 72 29 3b 0a 20 20 20 20 69 43  ", iCur);.    iC
7f30: 75 72 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d  ur = sqlite3_stm
7f40: 74 5f 73 74 61 74 75 73 28 70 41 72 67 2d 3e 70  t_status(pArg->p
7f50: 53 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53 54 4d  Stmt, SQLITE_STM
7f60: 54 53 54 41 54 55 53 5f 41 55 54 4f 49 4e 44 45  TSTATUS_AUTOINDE
7f70: 58 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20  X, bReset);.    
7f80: 66 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  fprintf(pArg->ou
7f90: 74 2c 20 22 41 75 74 6f 69 6e 64 65 78 20 49 6e  t, "Autoindex In
7fa0: 73 65 72 74 73 3a 20 20 20 20 20 20 20 20 20 20  serts:          
7fb0: 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20           %d\n", 
7fc0: 69 43 75 72 29 3b 0a 20 20 7d 0a 0a 20 20 72 65  iCur);.  }..  re
7fd0: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
7fe0: 20 45 78 65 63 75 74 65 20 61 20 73 74 61 74 65   Execute a state
7ff0: 6d 65 6e 74 20 6f 72 20 73 65 74 20 6f 66 20 73  ment or set of s
8000: 74 61 74 65 6d 65 6e 74 73 2e 20 20 50 72 69 6e  tatements.  Prin
8010: 74 20 0a 2a 2a 20 61 6e 79 20 72 65 73 75 6c 74  t .** any result
8020: 20 72 6f 77 73 2f 63 6f 6c 75 6d 6e 73 20 64 65   rows/columns de
8030: 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 63  pending on the c
8040: 75 72 72 65 6e 74 20 6d 6f 64 65 20 0a 2a 2a 20  urrent mode .** 
8050: 73 65 74 20 76 69 61 20 74 68 65 20 73 75 70 70  set via the supp
8060: 6c 69 65 64 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a  lied callback..*
8070: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 76 65 72  *.** This is ver
8080: 79 20 73 69 6d 69 6c 61 72 20 74 6f 20 53 51 4c  y similar to SQL
8090: 69 74 65 27 73 20 62 75 69 6c 74 2d 69 6e 20 73  ite's built-in s
80a0: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 20 0a 2a  qlite3_exec() .*
80b0: 2a 20 66 75 6e 63 74 69 6f 6e 20 65 78 63 65 70  * function excep
80c0: 74 20 69 74 20 74 61 6b 65 73 20 61 20 73 6c 69  t it takes a sli
80d0: 67 68 74 6c 79 20 64 69 66 66 65 72 65 6e 74 20  ghtly different 
80e0: 63 61 6c 6c 62 61 63 6b 20 0a 2a 2a 20 61 6e 64  callback .** and
80f0: 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 20 61   callback data a
8100: 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74  rgument..*/.stat
8110: 69 63 20 69 6e 74 20 73 68 65 6c 6c 5f 65 78 65  ic int shell_exe
8120: 63 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  c(.  sqlite3 *db
8130: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
8140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8150: 20 2f 2a 20 41 6e 20 6f 70 65 6e 20 64 61 74 61   /* An open data
8160: 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
8170: 63 68 61 72 20 2a 7a 53 71 6c 2c 20 20 20 20 20  char *zSql,     
8180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8190: 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 74 6f 20        /* SQL to 
81a0: 62 65 20 65 76 61 6c 75 61 74 65 64 20 2a 2f 0a  be evaluated */.
81b0: 20 20 69 6e 74 20 28 2a 78 43 61 6c 6c 62 61 63    int (*xCallbac
81c0: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 68 61  k)(void*,int,cha
81d0: 72 2a 2a 2c 63 68 61 72 2a 2a 2c 69 6e 74 2a 29  r**,char**,int*)
81e0: 2c 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  ,   /* Callback 
81f0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
8200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8220: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 28 6e 6f            /* (no
8230: 74 20 74 68 65 20 73 61 6d 65 20 61 73 20 73 71  t the same as sq
8240: 6c 69 74 65 33 5f 65 78 65 63 29 20 2a 2f 0a 20  lite3_exec) */. 
8250: 20 73 74 72 75 63 74 20 63 61 6c 6c 62 61 63 6b   struct callback
8260: 5f 64 61 74 61 20 2a 70 41 72 67 2c 20 20 20 20  _data *pArg,    
8270: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8280: 50 6f 69 6e 74 65 72 20 74 6f 20 73 74 72 75 63  Pointer to struc
8290: 74 20 63 61 6c 6c 62 61 63 6b 5f 64 61 74 61 20  t callback_data 
82a0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
82b0: 72 4d 73 67 20 20 20 20 20 20 20 20 20 20 20 20  rMsg            
82c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82d0: 20 2f 2a 20 45 72 72 6f 72 20 6d 73 67 20 77 72   /* Error msg wr
82e0: 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 29 7b  itten here */.){
82f0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
8300: 2a 70 53 74 6d 74 20 3d 20 4e 55 4c 4c 3b 20 20  *pStmt = NULL;  
8310: 20 20 20 2f 2a 20 53 74 61 74 65 6d 65 6e 74 20     /* Statement 
8320: 74 6f 20 65 78 65 63 75 74 65 2e 20 2a 2f 0a 20  to execute. */. 
8330: 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
8340: 5f 4f 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20  _OK;            
8350: 20 2f 2a 20 52 65 74 75 72 6e 20 43 6f 64 65 20   /* Return Code 
8360: 2a 2f 0a 20 20 69 6e 74 20 72 63 32 3b 0a 20 20  */.  int rc2;.  
8370: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 65 66  const char *zLef
8380: 74 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20 20  tover;          
8390: 2f 2a 20 54 61 69 6c 20 6f 66 20 75 6e 70 72 6f  /* Tail of unpro
83a0: 63 65 73 73 65 64 20 53 51 4c 20 2a 2f 0a 0a 20  cessed SQL */.. 
83b0: 20 69 66 28 20 70 7a 45 72 72 4d 73 67 20 29 7b   if( pzErrMsg ){
83c0: 0a 20 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d  .    *pzErrMsg =
83d0: 20 4e 55 4c 4c 3b 0a 20 20 7d 0a 0a 20 20 77 68   NULL;.  }..  wh
83e0: 69 6c 65 28 20 7a 53 71 6c 5b 30 5d 20 26 26 20  ile( zSql[0] && 
83f0: 28 53 51 4c 49 54 45 5f 4f 4b 20 3d 3d 20 72 63  (SQLITE_OK == rc
8400: 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
8410: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
8420: 28 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26  (db, zSql, -1, &
8430: 70 53 74 6d 74 2c 20 26 7a 4c 65 66 74 6f 76 65  pStmt, &zLeftove
8440: 72 29 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49  r);.    if( SQLI
8450: 54 45 5f 4f 4b 20 21 3d 20 72 63 20 29 7b 0a 20  TE_OK != rc ){. 
8460: 20 20 20 20 20 69 66 28 20 70 7a 45 72 72 4d 73       if( pzErrMs
8470: 67 20 29 7b 0a 20 20 20 20 20 20 20 20 2a 70 7a  g ){.        *pz
8480: 45 72 72 4d 73 67 20 3d 20 73 61 76 65 5f 65 72  ErrMsg = save_er
8490: 72 5f 6d 73 67 28 64 62 29 3b 0a 20 20 20 20 20  r_msg(db);.     
84a0: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
84b0: 20 20 20 20 69 66 28 20 21 70 53 74 6d 74 20 29      if( !pStmt )
84c0: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 74 68 69  {.        /* thi
84d0: 73 20 68 61 70 70 65 6e 73 20 66 6f 72 20 61 20  s happens for a 
84e0: 63 6f 6d 6d 65 6e 74 20 6f 72 20 77 68 69 74 65  comment or white
84f0: 2d 73 70 61 63 65 20 2a 2f 0a 20 20 20 20 20 20  -space */.      
8500: 20 20 7a 53 71 6c 20 3d 20 7a 4c 65 66 74 6f 76    zSql = zLeftov
8510: 65 72 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c  er;.        whil
8520: 65 28 20 49 73 53 70 61 63 65 28 7a 53 71 6c 5b  e( IsSpace(zSql[
8530: 30 5d 29 20 29 20 7a 53 71 6c 2b 2b 3b 0a 20 20  0]) ) zSql++;.  
8540: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a        continue;.
8550: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
8560: 2a 20 73 61 76 65 20 6f 66 66 20 74 68 65 20 70  * save off the p
8570: 72 65 70 61 72 65 64 20 73 74 61 74 6d 65 6e 74  repared statment
8580: 20 68 61 6e 64 6c 65 20 61 6e 64 20 72 65 73 65   handle and rese
8590: 74 20 72 6f 77 20 63 6f 75 6e 74 20 2a 2f 0a 20  t row count */. 
85a0: 20 20 20 20 20 69 66 28 20 70 41 72 67 20 29 7b       if( pArg ){
85b0: 0a 20 20 20 20 20 20 20 20 70 41 72 67 2d 3e 70  .        pArg->p
85c0: 53 74 6d 74 20 3d 20 70 53 74 6d 74 3b 0a 20 20  Stmt = pStmt;.  
85d0: 20 20 20 20 20 20 70 41 72 67 2d 3e 63 6e 74 20        pArg->cnt 
85e0: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  = 0;.      }..  
85f0: 20 20 20 20 2f 2a 20 65 63 68 6f 20 74 68 65 20      /* echo the 
8600: 73 71 6c 20 73 74 61 74 65 6d 65 6e 74 20 69 66  sql statement if
8610: 20 65 63 68 6f 20 6f 6e 20 2a 2f 0a 20 20 20 20   echo on */.    
8620: 20 20 69 66 28 20 70 41 72 67 20 26 26 20 70 41    if( pArg && pA
8630: 72 67 2d 3e 65 63 68 6f 4f 6e 20 29 7b 0a 20 20  rg->echoOn ){.  
8640: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
8650: 20 2a 7a 53 74 6d 74 53 71 6c 20 3d 20 73 71 6c   *zStmtSql = sql
8660: 69 74 65 33 5f 73 71 6c 28 70 53 74 6d 74 29 3b  ite3_sql(pStmt);
8670: 0a 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66  .        fprintf
8680: 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 25 73 5c  (pArg->out, "%s\
8690: 6e 22 2c 20 7a 53 74 6d 74 53 71 6c 20 3f 20 7a  n", zStmtSql ? z
86a0: 53 74 6d 74 53 71 6c 20 3a 20 7a 53 71 6c 29 3b  StmtSql : zSql);
86b0: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
86c0: 2f 2a 20 4f 75 74 70 75 74 20 54 45 53 54 43 54  /* Output TESTCT
86d0: 52 4c 5f 45 58 50 4c 41 49 4e 20 74 65 78 74 20  RL_EXPLAIN text 
86e0: 6f 66 20 72 65 71 75 65 73 74 65 64 20 2a 2f 0a  of requested */.
86f0: 20 20 20 20 20 20 69 66 28 20 70 41 72 67 20 26        if( pArg &
8700: 26 20 70 41 72 67 2d 3e 6d 6f 64 65 3d 3d 4d 4f  & pArg->mode==MO
8710: 44 45 5f 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20  DE_Explain ){.  
8720: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
8730: 20 2a 7a 45 78 70 6c 61 69 6e 20 3d 20 30 3b 0a   *zExplain = 0;.
8740: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
8750: 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c  test_control(SQL
8760: 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 45 58 50  ITE_TESTCTRL_EXP
8770: 4c 41 49 4e 5f 53 54 4d 54 2c 20 70 53 74 6d 74  LAIN_STMT, pStmt
8780: 2c 20 26 7a 45 78 70 6c 61 69 6e 29 3b 0a 20 20  , &zExplain);.  
8790: 20 20 20 20 20 20 69 66 28 20 7a 45 78 70 6c 61        if( zExpla
87a0: 69 6e 20 26 26 20 7a 45 78 70 6c 61 69 6e 5b 30  in && zExplain[0
87b0: 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66  ] ){.          f
87c0: 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74  printf(pArg->out
87d0: 2c 20 22 25 73 22 2c 20 7a 45 78 70 6c 61 69 6e  , "%s", zExplain
87e0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
87f0: 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 70     }..      /* p
8800: 65 72 66 6f 72 6d 20 74 68 65 20 66 69 72 73 74  erform the first
8810: 20 73 74 65 70 2e 20 20 74 68 69 73 20 77 69 6c   step.  this wil
8820: 6c 20 74 65 6c 6c 20 75 73 20 69 66 20 77 65 0a  l tell us if we.
8830: 20 20 20 20 20 20 2a 2a 20 68 61 76 65 20 61 20        ** have a 
8840: 72 65 73 75 6c 74 20 73 65 74 20 6f 72 20 6e 6f  result set or no
8850: 74 20 61 6e 64 20 68 6f 77 20 77 69 64 65 20 69  t and how wide i
8860: 74 20 69 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  t is..      */. 
8870: 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
8880: 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3b 0a 20  3_step(pStmt);. 
8890: 20 20 20 20 20 2f 2a 20 69 66 20 77 65 20 68 61       /* if we ha
88a0: 76 65 20 61 20 72 65 73 75 6c 74 20 73 65 74 2e  ve a result set.
88b0: 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  .. */.      if( 
88c0: 53 51 4c 49 54 45 5f 52 4f 57 20 3d 3d 20 72 63  SQLITE_ROW == rc
88d0: 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 69   ){.        /* i
88e0: 66 20 77 65 20 68 61 76 65 20 61 20 63 61 6c 6c  f we have a call
88f0: 62 61 63 6b 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20  back... */.     
8900: 20 20 20 69 66 28 20 78 43 61 6c 6c 62 61 63 6b     if( xCallback
8910: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   ){.          /*
8920: 20 61 6c 6c 6f 63 61 74 65 20 73 70 61 63 65 20   allocate space 
8930: 66 6f 72 20 63 6f 6c 20 6e 61 6d 65 20 70 74 72  for col name ptr
8940: 2c 20 76 61 6c 75 65 20 70 74 72 2c 20 61 6e 64  , value ptr, and
8950: 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 20 20 20   type */.       
8960: 20 20 20 69 6e 74 20 6e 43 6f 6c 20 3d 20 73 71     int nCol = sq
8970: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75  lite3_column_cou
8980: 6e 74 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20  nt(pStmt);.     
8990: 20 20 20 20 20 76 6f 69 64 20 2a 70 44 61 74 61       void *pData
89a0: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f   = sqlite3_mallo
89b0: 63 28 33 2a 6e 43 6f 6c 2a 73 69 7a 65 6f 66 28  c(3*nCol*sizeof(
89c0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 20 2b 20 31  const char*) + 1
89d0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
89e0: 20 21 70 44 61 74 61 20 29 7b 0a 20 20 20 20 20   !pData ){.     
89f0: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
8a00: 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20  TE_NOMEM;.      
8a10: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
8a20: 20 20 20 20 20 20 20 63 68 61 72 20 2a 2a 61 7a         char **az
8a30: 43 6f 6c 73 20 3d 20 28 63 68 61 72 20 2a 2a 29  Cols = (char **)
8a40: 70 44 61 74 61 3b 20 20 20 20 20 20 2f 2a 20 4e  pData;      /* N
8a50: 61 6d 65 73 20 6f 66 20 72 65 73 75 6c 74 20 63  ames of result c
8a60: 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 20 20 20 20  olumns */.      
8a70: 20 20 20 20 20 20 63 68 61 72 20 2a 2a 61 7a 56        char **azV
8a80: 61 6c 73 20 3d 20 26 61 7a 43 6f 6c 73 5b 6e 43  als = &azCols[nC
8a90: 6f 6c 5d 3b 20 20 20 20 20 20 20 2f 2a 20 52 65  ol];       /* Re
8aa0: 73 75 6c 74 73 20 2a 2f 0a 20 20 20 20 20 20 20  sults */.       
8ab0: 20 20 20 20 20 69 6e 74 20 2a 61 69 54 79 70 65       int *aiType
8ac0: 73 20 3d 20 28 69 6e 74 20 2a 29 26 61 7a 56 61  s = (int *)&azVa
8ad0: 6c 73 5b 6e 43 6f 6c 5d 3b 20 2f 2a 20 52 65 73  ls[nCol]; /* Res
8ae0: 75 6c 74 20 74 79 70 65 73 20 2a 2f 0a 20 20 20  ult types */.   
8af0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 3b 0a           int i;.
8b00: 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65              asse
8b10: 72 74 28 73 69 7a 65 6f 66 28 69 6e 74 29 20 3c  rt(sizeof(int) <
8b20: 3d 20 73 69 7a 65 6f 66 28 63 68 61 72 20 2a 29  = sizeof(char *)
8b30: 29 3b 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ); .            
8b40: 2f 2a 20 73 61 76 65 20 6f 66 66 20 70 74 72 73  /* save off ptrs
8b50: 20 74 6f 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73   to column names
8b60: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
8b70: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b  for(i=0; i<nCol;
8b80: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
8b90: 20 20 20 20 20 61 7a 43 6f 6c 73 5b 69 5d 20 3d       azCols[i] =
8ba0: 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33   (char *)sqlite3
8bb0: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 70 53 74  _column_name(pSt
8bc0: 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20  mt, i);.        
8bd0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
8be0: 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 20 20    do{.          
8bf0: 20 20 20 20 2f 2a 20 65 78 74 72 61 63 74 20 74      /* extract t
8c00: 68 65 20 64 61 74 61 20 61 6e 64 20 64 61 74 61  he data and data
8c10: 20 74 79 70 65 73 20 2a 2f 0a 20 20 20 20 20 20   types */.      
8c20: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b          for(i=0;
8c30: 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20   i<nCol; i++){. 
8c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
8c50: 7a 56 61 6c 73 5b 69 5d 20 3d 20 28 63 68 61 72  zVals[i] = (char
8c60: 20 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   *)sqlite3_colum
8c70: 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69 29  n_text(pStmt, i)
8c80: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
8c90: 20 20 61 69 54 79 70 65 73 5b 69 5d 20 3d 20 73    aiTypes[i] = s
8ca0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79  qlite3_column_ty
8cb0: 70 65 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20  pe(pStmt, i);.  
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
8cd0: 28 20 21 61 7a 56 61 6c 73 5b 69 5d 20 26 26 20  ( !azVals[i] && 
8ce0: 28 61 69 54 79 70 65 73 5b 69 5d 21 3d 53 51 4c  (aiTypes[i]!=SQL
8cf0: 49 54 45 5f 4e 55 4c 4c 29 20 29 7b 0a 20 20 20  ITE_NULL) ){.   
8d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
8d10: 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
8d20: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
8d30: 20 20 20 20 62 72 65 61 6b 3b 20 2f 2a 20 66 72      break; /* fr
8d40: 6f 6d 20 66 6f 72 20 2a 2f 0a 20 20 20 20 20 20  om for */.      
8d50: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
8d60: 20 20 20 20 20 20 20 20 20 20 7d 20 2f 2a 20 65            } /* e
8d70: 6e 64 20 66 6f 72 20 2a 2f 0a 0a 20 20 20 20 20  nd for */..     
8d80: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 66 20 64           /* if d
8d90: 61 74 61 20 61 6e 64 20 74 79 70 65 73 20 65 78  ata and types ex
8da0: 74 72 61 63 74 65 64 20 73 75 63 63 65 73 73 66  tracted successf
8db0: 75 6c 6c 79 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20  ully... */.     
8dc0: 20 20 20 20 20 20 20 20 20 69 66 28 20 53 51 4c           if( SQL
8dd0: 49 54 45 5f 52 4f 57 20 3d 3d 20 72 63 20 29 7b  ITE_ROW == rc ){
8de0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
8df0: 20 20 2f 2a 20 63 61 6c 6c 20 74 68 65 20 73 75    /* call the su
8e00: 70 70 6c 69 65 64 20 63 61 6c 6c 62 61 63 6b 20  pplied callback 
8e10: 77 69 74 68 20 74 68 65 20 72 65 73 75 6c 74 20  with the result 
8e20: 72 6f 77 20 64 61 74 61 20 2a 2f 0a 20 20 20 20  row data */.    
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
8e40: 78 43 61 6c 6c 62 61 63 6b 28 70 41 72 67 2c 20  xCallback(pArg, 
8e50: 6e 43 6f 6c 2c 20 61 7a 56 61 6c 73 2c 20 61 7a  nCol, azVals, az
8e60: 43 6f 6c 73 2c 20 61 69 54 79 70 65 73 29 20 29  Cols, aiTypes) )
8e70: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
8e80: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
8e90: 41 42 4f 52 54 3b 0a 20 20 20 20 20 20 20 20 20  ABORT;.         
8ea0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
8eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ec0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65  rc = sqlite3_ste
8ed0: 70 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20  p(pStmt);.      
8ee0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
8ef0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
8f00: 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65 28          } while(
8f10: 20 53 51 4c 49 54 45 5f 52 4f 57 20 3d 3d 20 72   SQLITE_ROW == r
8f20: 63 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  c );.           
8f30: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 44   sqlite3_free(pD
8f40: 61 74 61 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ata);.          
8f50: 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  }.        }else{
8f60: 0a 20 20 20 20 20 20 20 20 20 20 64 6f 7b 0a 20  .          do{. 
8f70: 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
8f80: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74  sqlite3_step(pSt
8f90: 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  mt);.          }
8fa0: 20 77 68 69 6c 65 28 20 72 63 20 3d 3d 20 53 51   while( rc == SQ
8fb0: 4c 49 54 45 5f 52 4f 57 20 29 3b 0a 20 20 20 20  LITE_ROW );.    
8fc0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20      }.      }.. 
8fd0: 20 20 20 20 20 2f 2a 20 70 72 69 6e 74 20 75 73       /* print us
8fe0: 61 67 65 20 73 74 61 74 73 20 69 66 20 73 74 61  age stats if sta
8ff0: 74 73 20 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 69  ts on */.      i
9000: 66 28 20 70 41 72 67 20 26 26 20 70 41 72 67 2d  f( pArg && pArg-
9010: 3e 73 74 61 74 73 4f 6e 20 29 7b 0a 20 20 20 20  >statsOn ){.    
9020: 20 20 20 20 64 69 73 70 6c 61 79 5f 73 74 61 74      display_stat
9030: 73 28 64 62 2c 20 70 41 72 67 2c 20 30 29 3b 0a  s(db, pArg, 0);.
9040: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
9050: 2a 20 46 69 6e 61 6c 69 7a 65 20 74 68 65 20 73  * Finalize the s
9060: 74 61 74 65 6d 65 6e 74 20 6a 75 73 74 20 65 78  tatement just ex
9070: 65 63 75 74 65 64 2e 20 49 66 20 74 68 69 73 20  ecuted. If this 
9080: 66 61 69 6c 73 2c 20 73 61 76 65 20 61 20 0a 20  fails, save a . 
9090: 20 20 20 20 20 2a 2a 20 63 6f 70 79 20 6f 66 20       ** copy of 
90a0: 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  the error messag
90b0: 65 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 73 65  e. Otherwise, se
90c0: 74 20 7a 53 71 6c 20 74 6f 20 70 6f 69 6e 74 20  t zSql to point 
90d0: 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20  to the.      ** 
90e0: 6e 65 78 74 20 73 74 61 74 65 6d 65 6e 74 20 74  next statement t
90f0: 6f 20 65 78 65 63 75 74 65 2e 20 2a 2f 0a 20 20  o execute. */.  
9100: 20 20 20 20 72 63 32 20 3d 20 73 71 6c 69 74 65      rc2 = sqlite
9110: 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
9120: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
9130: 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 20  =SQLITE_NOMEM ) 
9140: 72 63 20 3d 20 72 63 32 3b 0a 20 20 20 20 20 20  rc = rc2;.      
9150: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
9160: 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 53 71  K ){.        zSq
9170: 6c 20 3d 20 7a 4c 65 66 74 6f 76 65 72 3b 0a 20  l = zLeftover;. 
9180: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 49 73         while( Is
9190: 53 70 61 63 65 28 7a 53 71 6c 5b 30 5d 29 20 29  Space(zSql[0]) )
91a0: 20 7a 53 71 6c 2b 2b 3b 0a 20 20 20 20 20 20 7d   zSql++;.      }
91b0: 65 6c 73 65 20 69 66 28 20 70 7a 45 72 72 4d 73  else if( pzErrMs
91c0: 67 20 29 7b 0a 20 20 20 20 20 20 20 20 2a 70 7a  g ){.        *pz
91d0: 45 72 72 4d 73 67 20 3d 20 73 61 76 65 5f 65 72  ErrMsg = save_er
91e0: 72 5f 6d 73 67 28 64 62 29 3b 0a 20 20 20 20 20  r_msg(db);.     
91f0: 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 63 6c 65   }..      /* cle
9200: 61 72 20 73 61 76 65 64 20 73 74 6d 74 20 68 61  ar saved stmt ha
9210: 6e 64 6c 65 20 2a 2f 0a 20 20 20 20 20 20 69 66  ndle */.      if
9220: 28 20 70 41 72 67 20 29 7b 0a 20 20 20 20 20 20  ( pArg ){.      
9230: 20 20 70 41 72 67 2d 3e 70 53 74 6d 74 20 3d 20    pArg->pStmt = 
9240: 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 7d 0a 20 20  NULL;.      }.  
9250: 20 20 7d 0a 20 20 7d 20 2f 2a 20 65 6e 64 20 77    }.  } /* end w
9260: 68 69 6c 65 20 2a 2f 0a 0a 20 20 72 65 74 75 72  hile */..  retur
9270: 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  n rc;.}.../*.** 
9280: 54 68 69 73 20 69 73 20 61 20 64 69 66 66 65 72  This is a differ
9290: 65 6e 74 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75  ent callback rou
92a0: 74 69 6e 65 20 75 73 65 64 20 66 6f 72 20 64 75  tine used for du
92b0: 6d 70 69 6e 67 20 74 68 65 20 64 61 74 61 62 61  mping the databa
92c0: 73 65 2e 0a 2a 2a 20 45 61 63 68 20 72 6f 77 20  se..** Each row 
92d0: 72 65 63 65 69 76 65 64 20 62 79 20 74 68 69 73  received by this
92e0: 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6e 73 69 73   callback consis
92f0: 74 73 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61  ts of a table na
9300: 6d 65 2c 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65  me,.** the table
9310: 20 74 79 70 65 20 28 22 69 6e 64 65 78 22 20 6f   type ("index" o
9320: 72 20 22 74 61 62 6c 65 22 29 20 61 6e 64 20 53  r "table") and S
9330: 51 4c 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  QL to create the
9340: 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 69 73 20   table..** This 
9350: 72 6f 75 74 69 6e 65 20 73 68 6f 75 6c 64 20 70  routine should p
9360: 72 69 6e 74 20 74 65 78 74 20 73 75 66 66 69 63  rint text suffic
9370: 69 65 6e 74 20 74 6f 20 72 65 63 72 65 61 74 65  ient to recreate
9380: 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73   the table..*/.s
9390: 74 61 74 69 63 20 69 6e 74 20 64 75 6d 70 5f 63  tatic int dump_c
93a0: 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 41  allback(void *pA
93b0: 72 67 2c 20 69 6e 74 20 6e 41 72 67 2c 20 63 68  rg, int nArg, ch
93c0: 61 72 20 2a 2a 61 7a 41 72 67 2c 20 63 68 61 72  ar **azArg, char
93d0: 20 2a 2a 61 7a 43 6f 6c 29 7b 0a 20 20 69 6e 74   **azCol){.  int
93e0: 20 72 63 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61   rc;.  const cha
93f0: 72 20 2a 7a 54 61 62 6c 65 3b 0a 20 20 63 6f 6e  r *zTable;.  con
9400: 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 0a  st char *zType;.
9410: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53    const char *zS
9420: 71 6c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  ql;.  const char
9430: 20 2a 7a 50 72 65 70 53 74 6d 74 20 3d 20 30 3b   *zPrepStmt = 0;
9440: 0a 20 20 73 74 72 75 63 74 20 63 61 6c 6c 62 61  .  struct callba
9450: 63 6b 5f 64 61 74 61 20 2a 70 20 3d 20 28 73 74  ck_data *p = (st
9460: 72 75 63 74 20 63 61 6c 6c 62 61 63 6b 5f 64 61  ruct callback_da
9470: 74 61 20 2a 29 70 41 72 67 3b 0a 0a 20 20 55 4e  ta *)pArg;..  UN
9480: 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 61  USED_PARAMETER(a
9490: 7a 43 6f 6c 29 3b 0a 20 20 69 66 28 20 6e 41 72  zCol);.  if( nAr
94a0: 67 21 3d 33 20 29 20 72 65 74 75 72 6e 20 31 3b  g!=3 ) return 1;
94b0: 0a 20 20 7a 54 61 62 6c 65 20 3d 20 61 7a 41 72  .  zTable = azAr
94c0: 67 5b 30 5d 3b 0a 20 20 7a 54 79 70 65 20 3d 20  g[0];.  zType = 
94d0: 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 7a 53 71 6c  azArg[1];.  zSql
94e0: 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a 20 20 0a   = azArg[2];.  .
94f0: 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 54 61    if( strcmp(zTa
9500: 62 6c 65 2c 20 22 73 71 6c 69 74 65 5f 73 65 71  ble, "sqlite_seq
9510: 75 65 6e 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20  uence")==0 ){.  
9520: 20 20 7a 50 72 65 70 53 74 6d 74 20 3d 20 22 44    zPrepStmt = "D
9530: 45 4c 45 54 45 20 46 52 4f 4d 20 73 71 6c 69 74  ELETE FROM sqlit
9540: 65 5f 73 65 71 75 65 6e 63 65 3b 5c 6e 22 3b 0a  e_sequence;\n";.
9550: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
9560: 6d 70 28 7a 54 61 62 6c 65 2c 20 22 73 71 6c 69  mp(zTable, "sqli
9570: 74 65 5f 73 74 61 74 31 22 29 3d 3d 30 20 29 7b  te_stat1")==0 ){
9580: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e  .    fprintf(p->
9590: 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45 20 73 71  out, "ANALYZE sq
95a0: 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c 6e 22 29  lite_master;\n")
95b0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  ;.  }else if( st
95c0: 72 6e 63 6d 70 28 7a 54 61 62 6c 65 2c 20 22 73  rncmp(zTable, "s
95d0: 71 6c 69 74 65 5f 22 2c 20 37 29 3d 3d 30 20 29  qlite_", 7)==0 )
95e0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  {.    return 0;.
95f0: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 6e    }else if( strn
9600: 63 6d 70 28 7a 53 71 6c 2c 20 22 43 52 45 41 54  cmp(zSql, "CREAT
9610: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 22  E VIRTUAL TABLE"
9620: 2c 20 32 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20  , 20)==0 ){.    
9630: 63 68 61 72 20 2a 7a 49 6e 73 3b 0a 20 20 20 20  char *zIns;.    
9640: 69 66 28 20 21 70 2d 3e 77 72 69 74 61 62 6c 65  if( !p->writable
9650: 53 63 68 65 6d 61 20 29 7b 0a 20 20 20 20 20 20  Schema ){.      
9660: 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  fprintf(p->out, 
9670: 22 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65  "PRAGMA writable
9680: 5f 73 63 68 65 6d 61 3d 4f 4e 3b 5c 6e 22 29 3b  _schema=ON;\n");
9690: 0a 20 20 20 20 20 20 70 2d 3e 77 72 69 74 61 62  .      p->writab
96a0: 6c 65 53 63 68 65 6d 61 20 3d 20 31 3b 0a 20 20  leSchema = 1;.  
96b0: 20 20 7d 0a 20 20 20 20 7a 49 6e 73 20 3d 20 73    }.    zIns = s
96c0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 0a  qlite3_mprintf(.
96d0: 20 20 20 20 20 20 20 22 49 4e 53 45 52 54 20 49         "INSERT I
96e0: 4e 54 4f 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  NTO sqlite_maste
96f0: 72 28 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f  r(type,name,tbl_
9700: 6e 61 6d 65 2c 72 6f 6f 74 70 61 67 65 2c 73 71  name,rootpage,sq
9710: 6c 29 22 0a 20 20 20 20 20 20 20 22 56 41 4c 55  l)".       "VALU
9720: 45 53 28 27 74 61 62 6c 65 27 2c 27 25 71 27 2c  ES('table','%q',
9730: 27 25 71 27 2c 30 2c 27 25 71 27 29 3b 22 2c 0a  '%q',0,'%q');",.
9740: 20 20 20 20 20 20 20 7a 54 61 62 6c 65 2c 20 7a         zTable, z
9750: 54 61 62 6c 65 2c 20 7a 53 71 6c 29 3b 0a 20 20  Table, zSql);.  
9760: 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74    fprintf(p->out
9770: 2c 20 22 25 73 5c 6e 22 2c 20 7a 49 6e 73 29 3b  , "%s\n", zIns);
9780: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
9790: 65 28 7a 49 6e 73 29 3b 0a 20 20 20 20 72 65 74  e(zIns);.    ret
97a0: 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  urn 0;.  }else{.
97b0: 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f      fprintf(p->o
97c0: 75 74 2c 20 22 25 73 3b 5c 6e 22 2c 20 7a 53 71  ut, "%s;\n", zSq
97d0: 6c 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 73  l);.  }..  if( s
97e0: 74 72 63 6d 70 28 7a 54 79 70 65 2c 20 22 74 61  trcmp(zType, "ta
97f0: 62 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ble")==0 ){.    
9800: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 54  sqlite3_stmt *pT
9810: 61 62 6c 65 49 6e 66 6f 20 3d 20 30 3b 0a 20 20  ableInfo = 0;.  
9820: 20 20 63 68 61 72 20 2a 7a 53 65 6c 65 63 74 20    char *zSelect 
9830: 3d 20 30 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a  = 0;.    char *z
9840: 54 61 62 6c 65 49 6e 66 6f 20 3d 20 30 3b 0a 20  TableInfo = 0;. 
9850: 20 20 20 63 68 61 72 20 2a 7a 54 6d 70 20 3d 20     char *zTmp = 
9860: 30 3b 0a 20 20 20 20 69 6e 74 20 6e 52 6f 77 20  0;.    int nRow 
9870: 3d 20 30 3b 0a 20 20 20 0a 20 20 20 20 7a 54 61  = 0;.   .    zTa
9880: 62 6c 65 49 6e 66 6f 20 3d 20 61 70 70 65 6e 64  bleInfo = append
9890: 54 65 78 74 28 7a 54 61 62 6c 65 49 6e 66 6f 2c  Text(zTableInfo,
98a0: 20 22 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69   "PRAGMA table_i
98b0: 6e 66 6f 28 22 2c 20 30 29 3b 0a 20 20 20 20 7a  nfo(", 0);.    z
98c0: 54 61 62 6c 65 49 6e 66 6f 20 3d 20 61 70 70 65  TableInfo = appe
98d0: 6e 64 54 65 78 74 28 7a 54 61 62 6c 65 49 6e 66  ndText(zTableInf
98e0: 6f 2c 20 7a 54 61 62 6c 65 2c 20 27 22 27 29 3b  o, zTable, '"');
98f0: 0a 20 20 20 20 7a 54 61 62 6c 65 49 6e 66 6f 20  .    zTableInfo 
9900: 3d 20 61 70 70 65 6e 64 54 65 78 74 28 7a 54 61  = appendText(zTa
9910: 62 6c 65 49 6e 66 6f 2c 20 22 29 3b 22 2c 20 30  bleInfo, ");", 0
9920: 29 3b 0a 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  );..    rc = sql
9930: 69 74 65 33 5f 70 72 65 70 61 72 65 28 70 2d 3e  ite3_prepare(p->
9940: 64 62 2c 20 7a 54 61 62 6c 65 49 6e 66 6f 2c 20  db, zTableInfo, 
9950: 2d 31 2c 20 26 70 54 61 62 6c 65 49 6e 66 6f 2c  -1, &pTableInfo,
9960: 20 30 29 3b 0a 20 20 20 20 66 72 65 65 28 7a 54   0);.    free(zT
9970: 61 62 6c 65 49 6e 66 6f 29 3b 0a 20 20 20 20 69  ableInfo);.    i
9980: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
9990: 20 7c 7c 20 21 70 54 61 62 6c 65 49 6e 66 6f 20   || !pTableInfo 
99a0: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ){.      return 
99b0: 31 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 7a 53  1;.    }..    zS
99c0: 65 6c 65 63 74 20 3d 20 61 70 70 65 6e 64 54 65  elect = appendTe
99d0: 78 74 28 7a 53 65 6c 65 63 74 2c 20 22 53 45 4c  xt(zSelect, "SEL
99e0: 45 43 54 20 27 49 4e 53 45 52 54 20 49 4e 54 4f  ECT 'INSERT INTO
99f0: 20 27 20 7c 7c 20 22 2c 20 30 29 3b 0a 20 20 20   ' || ", 0);.   
9a00: 20 2f 2a 20 41 6c 77 61 79 73 20 71 75 6f 74 65   /* Always quote
9a10: 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 2c   the table name,
9a20: 20 65 76 65 6e 20 69 66 20 69 74 20 61 70 70 65   even if it appe
9a30: 61 72 73 20 74 6f 20 62 65 20 70 75 72 65 20 61  ars to be pure a
9a40: 73 63 69 69 2c 0a 20 20 20 20 2a 2a 20 69 6e 20  scii,.    ** in 
9a50: 63 61 73 65 20 69 74 20 69 73 20 61 20 6b 65 79  case it is a key
9a60: 77 6f 72 64 2e 20 45 78 3a 20 20 49 4e 53 45 52  word. Ex:  INSER
9a70: 54 20 49 4e 54 4f 20 22 74 61 62 6c 65 22 20 2e  T INTO "table" .
9a80: 2e 2e 20 2a 2f 0a 20 20 20 20 7a 54 6d 70 20 3d  .. */.    zTmp =
9a90: 20 61 70 70 65 6e 64 54 65 78 74 28 7a 54 6d 70   appendText(zTmp
9aa0: 2c 20 7a 54 61 62 6c 65 2c 20 27 22 27 29 3b 0a  , zTable, '"');.
9ab0: 20 20 20 20 69 66 28 20 7a 54 6d 70 20 29 7b 0a      if( zTmp ){.
9ac0: 20 20 20 20 20 20 7a 53 65 6c 65 63 74 20 3d 20        zSelect = 
9ad0: 61 70 70 65 6e 64 54 65 78 74 28 7a 53 65 6c 65  appendText(zSele
9ae0: 63 74 2c 20 7a 54 6d 70 2c 20 27 5c 27 27 29 3b  ct, zTmp, '\'');
9af0: 0a 20 20 20 20 20 20 66 72 65 65 28 7a 54 6d 70  .      free(zTmp
9b00: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 53 65  );.    }.    zSe
9b10: 6c 65 63 74 20 3d 20 61 70 70 65 6e 64 54 65 78  lect = appendTex
9b20: 74 28 7a 53 65 6c 65 63 74 2c 20 22 20 7c 7c 20  t(zSelect, " || 
9b30: 27 20 56 41 4c 55 45 53 28 27 20 7c 7c 20 22 2c  ' VALUES(' || ",
9b40: 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71   0);.    rc = sq
9b50: 6c 69 74 65 33 5f 73 74 65 70 28 70 54 61 62 6c  lite3_step(pTabl
9b60: 65 49 6e 66 6f 29 3b 0a 20 20 20 20 77 68 69 6c  eInfo);.    whil
9b70: 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 52 4f  e( rc==SQLITE_RO
9b80: 57 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  W ){.      const
9b90: 20 63 68 61 72 20 2a 7a 54 65 78 74 20 3d 20 28   char *zText = (
9ba0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 73 71 6c  const char *)sql
9bb0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
9bc0: 28 70 54 61 62 6c 65 49 6e 66 6f 2c 20 31 29 3b  (pTableInfo, 1);
9bd0: 0a 20 20 20 20 20 20 7a 53 65 6c 65 63 74 20 3d  .      zSelect =
9be0: 20 61 70 70 65 6e 64 54 65 78 74 28 7a 53 65 6c   appendText(zSel
9bf0: 65 63 74 2c 20 22 71 75 6f 74 65 28 22 2c 20 30  ect, "quote(", 0
9c00: 29 3b 0a 20 20 20 20 20 20 7a 53 65 6c 65 63 74  );.      zSelect
9c10: 20 3d 20 61 70 70 65 6e 64 54 65 78 74 28 7a 53   = appendText(zS
9c20: 65 6c 65 63 74 2c 20 7a 54 65 78 74 2c 20 27 22  elect, zText, '"
9c30: 27 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  ');.      rc = s
9c40: 71 6c 69 74 65 33 5f 73 74 65 70 28 70 54 61 62  qlite3_step(pTab
9c50: 6c 65 49 6e 66 6f 29 3b 0a 20 20 20 20 20 20 69  leInfo);.      i
9c60: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 52 4f  f( rc==SQLITE_RO
9c70: 57 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 53 65  W ){.        zSe
9c80: 6c 65 63 74 20 3d 20 61 70 70 65 6e 64 54 65 78  lect = appendTex
9c90: 74 28 7a 53 65 6c 65 63 74 2c 20 22 29 2c 20 22  t(zSelect, "), "
9ca0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  , 0);.      }els
9cb0: 65 7b 0a 20 20 20 20 20 20 20 20 7a 53 65 6c 65  e{.        zSele
9cc0: 63 74 20 3d 20 61 70 70 65 6e 64 54 65 78 74 28  ct = appendText(
9cd0: 7a 53 65 6c 65 63 74 2c 20 22 29 20 22 2c 20 30  zSelect, ") ", 0
9ce0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
9cf0: 20 6e 52 6f 77 2b 2b 3b 0a 20 20 20 20 7d 0a 20   nRow++;.    }. 
9d00: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
9d10: 66 69 6e 61 6c 69 7a 65 28 70 54 61 62 6c 65 49  finalize(pTableI
9d20: 6e 66 6f 29 3b 0a 20 20 20 20 69 66 28 20 72 63  nfo);.    if( rc
9d30: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 6e  !=SQLITE_OK || n
9d40: 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Row==0 ){.      
9d50: 66 72 65 65 28 7a 53 65 6c 65 63 74 29 3b 0a 20  free(zSelect);. 
9d60: 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
9d70: 20 20 20 7d 0a 20 20 20 20 7a 53 65 6c 65 63 74     }.    zSelect
9d80: 20 3d 20 61 70 70 65 6e 64 54 65 78 74 28 7a 53   = appendText(zS
9d90: 65 6c 65 63 74 2c 20 22 7c 7c 20 27 29 27 20 46  elect, "|| ')' F
9da0: 52 4f 4d 20 20 22 2c 20 30 29 3b 0a 20 20 20 20  ROM  ", 0);.    
9db0: 7a 53 65 6c 65 63 74 20 3d 20 61 70 70 65 6e 64  zSelect = append
9dc0: 54 65 78 74 28 7a 53 65 6c 65 63 74 2c 20 7a 54  Text(zSelect, zT
9dd0: 61 62 6c 65 2c 20 27 22 27 29 3b 0a 0a 20 20 20  able, '"');..   
9de0: 20 72 63 20 3d 20 72 75 6e 5f 74 61 62 6c 65 5f   rc = run_table_
9df0: 64 75 6d 70 5f 71 75 65 72 79 28 70 2c 20 7a 53  dump_query(p, zS
9e00: 65 6c 65 63 74 2c 20 7a 50 72 65 70 53 74 6d 74  elect, zPrepStmt
9e10: 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
9e20: 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 29 7b  QLITE_CORRUPT ){
9e30: 0a 20 20 20 20 20 20 7a 53 65 6c 65 63 74 20 3d  .      zSelect =
9e40: 20 61 70 70 65 6e 64 54 65 78 74 28 7a 53 65 6c   appendText(zSel
9e50: 65 63 74 2c 20 22 20 4f 52 44 45 52 20 42 59 20  ect, " ORDER BY 
9e60: 72 6f 77 69 64 20 44 45 53 43 22 2c 20 30 29 3b  rowid DESC", 0);
9e70: 0a 20 20 20 20 20 20 72 75 6e 5f 74 61 62 6c 65  .      run_table
9e80: 5f 64 75 6d 70 5f 71 75 65 72 79 28 70 2c 20 7a  _dump_query(p, z
9e90: 53 65 6c 65 63 74 2c 20 30 29 3b 0a 20 20 20 20  Select, 0);.    
9ea0: 7d 0a 20 20 20 20 66 72 65 65 28 7a 53 65 6c 65  }.    free(zSele
9eb0: 63 74 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ct);.  }.  retur
9ec0: 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 75  n 0;.}../*.** Ru
9ed0: 6e 20 7a 51 75 65 72 79 2e 20 20 55 73 65 20 64  n zQuery.  Use d
9ee0: 75 6d 70 5f 63 61 6c 6c 62 61 63 6b 28 29 20 61  ump_callback() a
9ef0: 73 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 72  s the callback r
9f00: 6f 75 74 69 6e 65 20 73 6f 20 74 68 61 74 0a 2a  outine so that.*
9f10: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  * the contents o
9f20: 66 20 74 68 65 20 71 75 65 72 79 20 61 72 65 20  f the query are 
9f30: 6f 75 74 70 75 74 20 61 73 20 53 51 4c 20 73 74  output as SQL st
9f40: 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
9f50: 49 66 20 77 65 20 67 65 74 20 61 20 53 51 4c 49  If we get a SQLI
9f60: 54 45 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72  TE_CORRUPT error
9f70: 2c 20 72 65 72 75 6e 20 74 68 65 20 71 75 65 72  , rerun the quer
9f80: 79 20 61 66 74 65 72 20 61 70 70 65 6e 64 69 6e  y after appendin
9f90: 67 0a 2a 2a 20 22 4f 52 44 45 52 20 42 59 20 72  g.** "ORDER BY r
9fa0: 6f 77 69 64 20 44 45 53 43 22 20 74 6f 20 74 68  owid DESC" to th
9fb0: 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  e end..*/.static
9fc0: 20 69 6e 74 20 72 75 6e 5f 73 63 68 65 6d 61 5f   int run_schema_
9fd0: 64 75 6d 70 5f 71 75 65 72 79 28 0a 20 20 73 74  dump_query(.  st
9fe0: 72 75 63 74 20 63 61 6c 6c 62 61 63 6b 5f 64 61  ruct callback_da
9ff0: 74 61 20 2a 70 2c 20 0a 20 20 63 6f 6e 73 74 20  ta *p, .  const 
a000: 63 68 61 72 20 2a 7a 51 75 65 72 79 0a 29 7b 0a  char *zQuery.){.
a010: 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72    int rc;.  char
a020: 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20 72 63   *zErr = 0;.  rc
a030: 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
a040: 70 2d 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20 64  p->db, zQuery, d
a050: 75 6d 70 5f 63 61 6c 6c 62 61 63 6b 2c 20 70 2c  ump_callback, p,
a060: 20 26 7a 45 72 72 29 3b 0a 20 20 69 66 28 20 72   &zErr);.  if( r
a070: 63 3d 3d 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  c==SQLITE_CORRUP
a080: 54 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  T ){.    char *z
a090: 51 32 3b 0a 20 20 20 20 69 6e 74 20 6c 65 6e 20  Q2;.    int len 
a0a0: 3d 20 73 74 72 6c 65 6e 33 30 28 7a 51 75 65 72  = strlen30(zQuer
a0b0: 79 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28  y);.    fprintf(
a0c0: 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a  p->out, "/******
a0d0: 20 43 4f 52 52 55 50 54 49 4f 4e 20 45 52 52 4f   CORRUPTION ERRO
a0e0: 52 20 2a 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 29 3b 0a  R *******/\n");.
a0f0: 20 20 20 20 69 66 28 20 7a 45 72 72 20 29 7b 0a      if( zErr ){.
a100: 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d        fprintf(p-
a110: 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 25  >out, "/****** %
a120: 73 20 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20 7a 45  s ******/\n", zE
a130: 72 72 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  rr);.      sqlit
a140: 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a 20  e3_free(zErr);. 
a150: 20 20 20 20 20 7a 45 72 72 20 3d 20 30 3b 0a 20       zErr = 0;. 
a160: 20 20 20 7d 0a 20 20 20 20 7a 51 32 20 3d 20 6d     }.    zQ2 = m
a170: 61 6c 6c 6f 63 28 20 6c 65 6e 2b 31 30 30 20 29  alloc( len+100 )
a180: 3b 0a 20 20 20 20 69 66 28 20 7a 51 32 3d 3d 30  ;.    if( zQ2==0
a190: 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20   ) return rc;.  
a1a0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
a1b0: 74 66 28 6c 65 6e 2b 31 30 30 2c 20 7a 51 32 2c  tf(len+100, zQ2,
a1c0: 20 22 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f   "%s ORDER BY ro
a1d0: 77 69 64 20 44 45 53 43 22 2c 20 7a 51 75 65 72  wid DESC", zQuer
a1e0: 79 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  y);.    rc = sql
a1f0: 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c  ite3_exec(p->db,
a200: 20 7a 51 32 2c 20 64 75 6d 70 5f 63 61 6c 6c 62   zQ2, dump_callb
a210: 61 63 6b 2c 20 70 2c 20 26 7a 45 72 72 29 3b 0a  ack, p, &zErr);.
a220: 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
a230: 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f      fprintf(p->o
a240: 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20 45 52 52  ut, "/****** ERR
a250: 4f 52 3a 20 25 73 20 2a 2a 2a 2a 2a 2a 2f 5c 6e  OR: %s ******/\n
a260: 22 2c 20 7a 45 72 72 29 3b 0a 20 20 20 20 7d 65  ", zErr);.    }e
a270: 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
a280: 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 3b 0a  SQLITE_CORRUPT;.
a290: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
a2a0: 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a 20 20  3_free(zErr);.  
a2b0: 20 20 66 72 65 65 28 7a 51 32 29 3b 0a 20 20 7d    free(zQ2);.  }
a2c0: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
a2d0: 0a 2f 2a 0a 2a 2a 20 54 65 78 74 20 6f 66 20 61  ./*.** Text of a
a2e0: 20 68 65 6c 70 20 6d 65 73 73 61 67 65 0a 2a 2f   help message.*/
a2f0: 0a 73 74 61 74 69 63 20 63 68 61 72 20 7a 48 65  .static char zHe
a300: 6c 70 5b 5d 20 3d 0a 20 20 22 2e 62 61 63 6b 75  lp[] =.  ".backu
a310: 70 20 3f 44 42 3f 20 46 49 4c 45 20 20 20 20 20  p ?DB? FILE     
a320: 20 42 61 63 6b 75 70 20 44 42 20 28 64 65 66 61   Backup DB (defa
a330: 75 6c 74 20 5c 22 6d 61 69 6e 5c 22 29 20 74 6f  ult \"main\") to
a340: 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e 62 61 69   FILE\n".  ".bai
a350: 6c 20 4f 4e 7c 4f 46 46 20 20 20 20 20 20 20 20  l ON|OFF        
a360: 20 20 20 53 74 6f 70 20 61 66 74 65 72 20 68 69     Stop after hi
a370: 74 74 69 6e 67 20 61 6e 20 65 72 72 6f 72 2e 20  tting an error. 
a380: 20 44 65 66 61 75 6c 74 20 4f 46 46 5c 6e 22 0a   Default OFF\n".
a390: 20 20 22 2e 64 61 74 61 62 61 73 65 73 20 20 20    ".databases   
a3a0: 20 20 20 20 20 20 20 20 20 20 4c 69 73 74 20 6e            List n
a3b0: 61 6d 65 73 20 61 6e 64 20 66 69 6c 65 73 20 6f  ames and files o
a3c0: 66 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  f attached datab
a3d0: 61 73 65 73 5c 6e 22 0a 20 20 22 2e 64 75 6d 70  ases\n".  ".dump
a3e0: 20 3f 54 41 42 4c 45 3f 20 2e 2e 2e 20 20 20 20   ?TABLE? ...    
a3f0: 20 20 44 75 6d 70 20 74 68 65 20 64 61 74 61 62    Dump the datab
a400: 61 73 65 20 69 6e 20 61 6e 20 53 51 4c 20 74 65  ase in an SQL te
a410: 78 74 20 66 6f 72 6d 61 74 5c 6e 22 0a 20 20 22  xt format\n".  "
a420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a430: 20 20 20 20 20 20 20 20 20 49 66 20 54 41 42 4c           If TABL
a440: 45 20 73 70 65 63 69 66 69 65 64 2c 20 6f 6e 6c  E specified, onl
a450: 79 20 64 75 6d 70 20 74 61 62 6c 65 73 20 6d 61  y dump tables ma
a460: 74 63 68 69 6e 67 5c 6e 22 0a 20 20 22 20 20 20  tching\n".  "   
a470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a480: 20 20 20 20 20 20 4c 49 4b 45 20 70 61 74 74 65        LIKE patte
a490: 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a 20 20 22  rn TABLE.\n".  "
a4a0: 2e 65 63 68 6f 20 4f 4e 7c 4f 46 46 20 20 20 20  .echo ON|OFF    
a4b0: 20 20 20 20 20 20 20 54 75 72 6e 20 63 6f 6d 6d         Turn comm
a4c0: 61 6e 64 20 65 63 68 6f 20 6f 6e 20 6f 72 20 6f  and echo on or o
a4d0: 66 66 5c 6e 22 0a 20 20 22 2e 65 78 69 74 20 20  ff\n".  ".exit  
a4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4f0: 45 78 69 74 20 74 68 69 73 20 70 72 6f 67 72 61  Exit this progra
a500: 6d 5c 6e 22 0a 20 20 22 2e 65 78 70 6c 61 69 6e  m\n".  ".explain
a510: 20 3f 4f 4e 7c 4f 46 46 3f 20 20 20 20 20 20 54   ?ON|OFF?      T
a520: 75 72 6e 20 6f 75 74 70 75 74 20 6d 6f 64 65 20  urn output mode 
a530: 73 75 69 74 61 62 6c 65 20 66 6f 72 20 45 58 50  suitable for EXP
a540: 4c 41 49 4e 20 6f 6e 20 6f 72 20 6f 66 66 2e 5c  LAIN on or off.\
a550: 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
a560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 57                 W
a570: 69 74 68 20 6e 6f 20 61 72 67 73 2c 20 69 74 20  ith no args, it 
a580: 74 75 72 6e 73 20 45 58 50 4c 41 49 4e 20 6f 6e  turns EXPLAIN on
a590: 2e 5c 6e 22 0a 20 20 22 2e 68 65 61 64 65 72 28  .\n".  ".header(
a5a0: 73 29 20 4f 4e 7c 4f 46 46 20 20 20 20 20 20 54  s) ON|OFF      T
a5b0: 75 72 6e 20 64 69 73 70 6c 61 79 20 6f 66 20 68  urn display of h
a5c0: 65 61 64 65 72 73 20 6f 6e 20 6f 72 20 6f 66 66  eaders on or off
a5d0: 5c 6e 22 0a 20 20 22 2e 68 65 6c 70 20 20 20 20  \n".  ".help    
a5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 68                Sh
a5f0: 6f 77 20 74 68 69 73 20 6d 65 73 73 61 67 65 5c  ow this message\
a600: 6e 22 0a 20 20 22 2e 69 6d 70 6f 72 74 20 46 49  n".  ".import FI
a610: 4c 45 20 54 41 42 4c 45 20 20 20 20 20 49 6d 70  LE TABLE     Imp
a620: 6f 72 74 20 64 61 74 61 20 66 72 6f 6d 20 46 49  ort data from FI
a630: 4c 45 20 69 6e 74 6f 20 54 41 42 4c 45 5c 6e 22  LE into TABLE\n"
a640: 0a 20 20 22 2e 69 6e 64 69 63 65 73 20 3f 54 41  .  ".indices ?TA
a650: 42 4c 45 3f 20 20 20 20 20 20 20 53 68 6f 77 20  BLE?       Show 
a660: 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 69 6e 64  names of all ind
a670: 69 63 65 73 5c 6e 22 0a 20 20 22 20 20 20 20 20  ices\n".  "     
a680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a690: 20 20 20 20 49 66 20 54 41 42 4c 45 20 73 70 65      If TABLE spe
a6a0: 63 69 66 69 65 64 2c 20 6f 6e 6c 79 20 73 68 6f  cified, only sho
a6b0: 77 20 69 6e 64 69 63 65 73 20 66 6f 72 20 74 61  w indices for ta
a6c0: 62 6c 65 73 5c 6e 22 0a 20 20 22 20 20 20 20 20  bles\n".  "     
a6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6e0: 20 20 20 20 6d 61 74 63 68 69 6e 67 20 4c 49 4b      matching LIK
a6f0: 45 20 70 61 74 74 65 72 6e 20 54 41 42 4c 45 2e  E pattern TABLE.
a700: 5c 6e 22 0a 23 69 66 64 65 66 20 53 51 4c 49 54  \n".#ifdef SQLIT
a710: 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
a720: 0a 20 20 22 2e 69 6f 74 72 61 63 65 20 46 49 4c  .  ".iotrace FIL
a730: 45 20 20 20 20 20 20 20 20 20 20 45 6e 61 62 6c  E          Enabl
a740: 65 20 49 2f 4f 20 64 69 61 67 6e 6f 73 74 69 63  e I/O diagnostic
a750: 20 6c 6f 67 67 69 6e 67 20 74 6f 20 46 49 4c 45   logging to FILE
a760: 5c 6e 22 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  \n".#endif.#ifnd
a770: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c  ef SQLITE_OMIT_L
a780: 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20  OAD_EXTENSION.  
a790: 22 2e 6c 6f 61 64 20 46 49 4c 45 20 3f 45 4e 54  ".load FILE ?ENT
a7a0: 52 59 3f 20 20 20 20 20 4c 6f 61 64 20 61 6e 20  RY?     Load an 
a7b0: 65 78 74 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72  extension librar
a7c0: 79 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e  y\n".#endif.  ".
a7d0: 6c 6f 67 20 46 49 4c 45 7c 6f 66 66 20 20 20 20  log FILE|off    
a7e0: 20 20 20 20 20 20 54 75 72 6e 20 6c 6f 67 67 69        Turn loggi
a7f0: 6e 67 20 6f 6e 20 6f 72 20 6f 66 66 2e 20 20 46  ng on or off.  F
a800: 49 4c 45 20 63 61 6e 20 62 65 20 73 74 64 65 72  ILE can be stder
a810: 72 2f 73 74 64 6f 75 74 5c 6e 22 0a 20 20 22 2e  r/stdout\n".  ".
a820: 6d 6f 64 65 20 4d 4f 44 45 20 3f 54 41 42 4c 45  mode MODE ?TABLE
a830: 3f 20 20 20 20 20 53 65 74 20 6f 75 74 70 75 74  ?     Set output
a840: 20 6d 6f 64 65 20 77 68 65 72 65 20 4d 4f 44 45   mode where MODE
a850: 20 69 73 20 6f 6e 65 20 6f 66 3a 5c 6e 22 0a 20   is one of:\n". 
a860: 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20   "              
a870: 20 20 20 20 20 20 20 20 20 20 20 63 73 76 20 20             csv  
a880: 20 20 20 20 43 6f 6d 6d 61 2d 73 65 70 61 72 61      Comma-separa
a890: 74 65 64 20 76 61 6c 75 65 73 5c 6e 22 0a 20 20  ted values\n".  
a8a0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
a8b0: 20 20 20 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e            column
a8c0: 20 20 20 4c 65 66 74 2d 61 6c 69 67 6e 65 64 20     Left-aligned 
a8d0: 63 6f 6c 75 6d 6e 73 2e 20 20 28 53 65 65 20 2e  columns.  (See .
a8e0: 77 69 64 74 68 29 5c 6e 22 0a 20 20 22 20 20 20  width)\n".  "   
a8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a900: 20 20 20 20 20 20 68 74 6d 6c 20 20 20 20 20 48        html     H
a910: 54 4d 4c 20 3c 74 61 62 6c 65 3e 20 63 6f 64 65  TML <table> code
a920: 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20  \n".  "         
a930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a940: 69 6e 73 65 72 74 20 20 20 53 51 4c 20 69 6e 73  insert   SQL ins
a950: 65 72 74 20 73 74 61 74 65 6d 65 6e 74 73 20 66  ert statements f
a960: 6f 72 20 54 41 42 4c 45 5c 6e 22 0a 20 20 22 20  or TABLE\n".  " 
a970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a980: 20 20 20 20 20 20 20 20 6c 69 6e 65 20 20 20 20          line    
a990: 20 4f 6e 65 20 76 61 6c 75 65 20 70 65 72 20 6c   One value per l
a9a0: 69 6e 65 5c 6e 22 0a 20 20 22 20 20 20 20 20 20  ine\n".  "      
a9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9c0: 20 20 20 6c 69 73 74 20 20 20 20 20 56 61 6c 75     list     Valu
a9d0: 65 73 20 64 65 6c 69 6d 69 74 65 64 20 62 79 20  es delimited by 
a9e0: 2e 73 65 70 61 72 61 74 6f 72 20 73 74 72 69 6e  .separator strin
a9f0: 67 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20  g\n".  "        
aa00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa10: 20 74 61 62 73 20 20 20 20 20 54 61 62 2d 73 65   tabs     Tab-se
aa20: 70 61 72 61 74 65 64 20 76 61 6c 75 65 73 5c 6e  parated values\n
aa30: 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
aa40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 63                tc
aa50: 6c 20 20 20 20 20 20 54 43 4c 20 6c 69 73 74 20  l      TCL list 
aa60: 65 6c 65 6d 65 6e 74 73 5c 6e 22 0a 20 20 22 2e  elements\n".  ".
aa70: 6e 75 6c 6c 76 61 6c 75 65 20 53 54 52 49 4e 47  nullvalue STRING
aa80: 20 20 20 20 20 20 55 73 65 20 53 54 52 49 4e 47        Use STRING
aa90: 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 4e 55 4c   in place of NUL
aaa0: 4c 20 76 61 6c 75 65 73 5c 6e 22 0a 20 20 22 2e  L values\n".  ".
aab0: 6f 75 74 70 75 74 20 46 49 4c 45 4e 41 4d 45 20  output FILENAME 
aac0: 20 20 20 20 20 20 53 65 6e 64 20 6f 75 74 70 75        Send outpu
aad0: 74 20 74 6f 20 46 49 4c 45 4e 41 4d 45 5c 6e 22  t to FILENAME\n"
aae0: 0a 20 20 22 2e 6f 75 74 70 75 74 20 73 74 64 6f  .  ".output stdo
aaf0: 75 74 20 20 20 20 20 20 20 20 20 53 65 6e 64 20  ut         Send 
ab00: 6f 75 74 70 75 74 20 74 6f 20 74 68 65 20 73 63  output to the sc
ab10: 72 65 65 6e 5c 6e 22 0a 20 20 22 2e 70 72 69 6e  reen\n".  ".prin
ab20: 74 20 53 54 52 49 4e 47 2e 2e 2e 20 20 20 20 20  t STRING...     
ab30: 20 20 50 72 69 6e 74 20 6c 69 74 65 72 61 6c 20    Print literal 
ab40: 53 54 52 49 4e 47 5c 6e 22 0a 20 20 22 2e 70 72  STRING\n".  ".pr
ab50: 6f 6d 70 74 20 4d 41 49 4e 20 43 4f 4e 54 49 4e  ompt MAIN CONTIN
ab60: 55 45 20 20 52 65 70 6c 61 63 65 20 74 68 65 20  UE  Replace the 
ab70: 73 74 61 6e 64 61 72 64 20 70 72 6f 6d 70 74 73  standard prompts
ab80: 5c 6e 22 0a 20 20 22 2e 71 75 69 74 20 20 20 20  \n".  ".quit    
ab90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
aba0: 69 74 20 74 68 69 73 20 70 72 6f 67 72 61 6d 5c  it this program\
abb0: 6e 22 0a 20 20 22 2e 72 65 61 64 20 46 49 4c 45  n".  ".read FILE
abc0: 4e 41 4d 45 20 20 20 20 20 20 20 20 20 45 78 65  NAME         Exe
abd0: 63 75 74 65 20 53 51 4c 20 69 6e 20 46 49 4c 45  cute SQL in FILE
abe0: 4e 41 4d 45 5c 6e 22 0a 20 20 22 2e 72 65 73 74  NAME\n".  ".rest
abf0: 6f 72 65 20 3f 44 42 3f 20 46 49 4c 45 20 20 20  ore ?DB? FILE   
ac00: 20 20 52 65 73 74 6f 72 65 20 63 6f 6e 74 65 6e    Restore conten
ac10: 74 20 6f 66 20 44 42 20 28 64 65 66 61 75 6c 74  t of DB (default
ac20: 20 5c 22 6d 61 69 6e 5c 22 29 20 66 72 6f 6d 20   \"main\") from 
ac30: 46 49 4c 45 5c 6e 22 0a 20 20 22 2e 73 63 68 65  FILE\n".  ".sche
ac40: 6d 61 20 3f 54 41 42 4c 45 3f 20 20 20 20 20 20  ma ?TABLE?      
ac50: 20 20 53 68 6f 77 20 74 68 65 20 43 52 45 41 54    Show the CREAT
ac60: 45 20 73 74 61 74 65 6d 65 6e 74 73 5c 6e 22 0a  E statements\n".
ac70: 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20    "             
ac80: 20 20 20 20 20 20 20 20 20 20 20 20 49 66 20 54              If T
ac90: 41 42 4c 45 20 73 70 65 63 69 66 69 65 64 2c 20  ABLE specified, 
aca0: 6f 6e 6c 79 20 73 68 6f 77 20 74 61 62 6c 65 73  only show tables
acb0: 20 6d 61 74 63 68 69 6e 67 5c 6e 22 0a 20 20 22   matching\n".  "
acc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
acd0: 20 20 20 20 20 20 20 20 20 4c 49 4b 45 20 70 61           LIKE pa
ace0: 74 74 65 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a  ttern TABLE.\n".
acf0: 20 20 22 2e 73 65 70 61 72 61 74 6f 72 20 53 54    ".separator ST
ad00: 52 49 4e 47 20 20 20 20 20 20 43 68 61 6e 67 65  RING      Change
ad10: 20 73 65 70 61 72 61 74 6f 72 20 75 73 65 64 20   separator used 
ad20: 62 79 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 61  by output mode a
ad30: 6e 64 20 2e 69 6d 70 6f 72 74 5c 6e 22 0a 20 20  nd .import\n".  
ad40: 22 2e 73 68 6f 77 20 20 20 20 20 20 20 20 20 20  ".show          
ad50: 20 20 20 20 20 20 20 20 53 68 6f 77 20 74 68 65          Show the
ad60: 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 73 20   current values 
ad70: 66 6f 72 20 76 61 72 69 6f 75 73 20 73 65 74 74  for various sett
ad80: 69 6e 67 73 5c 6e 22 0a 20 20 22 2e 73 74 61 74  ings\n".  ".stat
ad90: 73 20 4f 4e 7c 4f 46 46 20 20 20 20 20 20 20 20  s ON|OFF        
ada0: 20 20 54 75 72 6e 20 73 74 61 74 73 20 6f 6e 20    Turn stats on 
adb0: 6f 72 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 74 61  or off\n".  ".ta
adc0: 62 6c 65 73 20 3f 54 41 42 4c 45 3f 20 20 20 20  bles ?TABLE?    
add0: 20 20 20 20 4c 69 73 74 20 6e 61 6d 65 73 20 6f      List names o
ade0: 66 20 74 61 62 6c 65 73 5c 6e 22 0a 20 20 22 20  f tables\n".  " 
adf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae00: 20 20 20 20 20 20 20 20 49 66 20 54 41 42 4c 45          If TABLE
ae10: 20 73 70 65 63 69 66 69 65 64 2c 20 6f 6e 6c 79   specified, only
ae20: 20 6c 69 73 74 20 74 61 62 6c 65 73 20 6d 61 74   list tables mat
ae30: 63 68 69 6e 67 5c 6e 22 0a 20 20 22 20 20 20 20  ching\n".  "    
ae40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae50: 20 20 20 20 20 4c 49 4b 45 20 70 61 74 74 65 72       LIKE patter
ae60: 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a 20 20 22 2e  n TABLE.\n".  ".
ae70: 74 69 6d 65 6f 75 74 20 4d 53 20 20 20 20 20 20  timeout MS      
ae80: 20 20 20 20 20 20 54 72 79 20 6f 70 65 6e 69 6e        Try openin
ae90: 67 20 6c 6f 63 6b 65 64 20 74 61 62 6c 65 73 20  g locked tables 
aea0: 66 6f 72 20 4d 53 20 6d 69 6c 6c 69 73 65 63 6f  for MS milliseco
aeb0: 6e 64 73 5c 6e 22 0a 20 20 22 2e 74 72 61 63 65  nds\n".  ".trace
aec0: 20 46 49 4c 45 7c 6f 66 66 20 20 20 20 20 20 20   FILE|off       
aed0: 20 4f 75 74 70 75 74 20 65 61 63 68 20 53 51 4c   Output each SQL
aee0: 20 73 74 61 74 65 6d 65 6e 74 20 61 73 20 69 74   statement as it
aef0: 20 69 73 20 72 75 6e 5c 6e 22 0a 20 20 22 2e 76   is run\n".  ".v
af00: 66 73 6e 61 6d 65 20 3f 41 55 58 3f 20 20 20 20  fsname ?AUX?    
af10: 20 20 20 20 20 50 72 69 6e 74 20 74 68 65 20 6e       Print the n
af20: 61 6d 65 20 6f 66 20 74 68 65 20 56 46 53 20 73  ame of the VFS s
af30: 74 61 63 6b 5c 6e 22 0a 20 20 22 2e 77 69 64 74  tack\n".  ".widt
af40: 68 20 4e 55 4d 31 20 4e 55 4d 32 20 2e 2e 2e 20  h NUM1 NUM2 ... 
af50: 20 20 53 65 74 20 63 6f 6c 75 6d 6e 20 77 69 64    Set column wid
af60: 74 68 73 20 66 6f 72 20 5c 22 63 6f 6c 75 6d 6e  ths for \"column
af70: 5c 22 20 6d 6f 64 65 5c 6e 22 0a 3b 0a 0a 73 74  \" mode\n".;..st
af80: 61 74 69 63 20 63 68 61 72 20 7a 54 69 6d 65 72  atic char zTimer
af90: 48 65 6c 70 5b 5d 20 3d 0a 20 20 22 2e 74 69 6d  Help[] =.  ".tim
afa0: 65 72 20 4f 4e 7c 4f 46 46 20 20 20 20 20 20 20  er ON|OFF       
afb0: 20 20 20 54 75 72 6e 20 74 68 65 20 43 50 55 20     Turn the CPU 
afc0: 74 69 6d 65 72 20 6d 65 61 73 75 72 65 6d 65 6e  timer measuremen
afd0: 74 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 3b  t on or off\n".;
afe0: 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 72 65 66  ../* Forward ref
aff0: 65 72 65 6e 63 65 20 2a 2f 0a 73 74 61 74 69 63  erence */.static
b000: 20 69 6e 74 20 70 72 6f 63 65 73 73 5f 69 6e 70   int process_inp
b010: 75 74 28 73 74 72 75 63 74 20 63 61 6c 6c 62 61  ut(struct callba
b020: 63 6b 5f 64 61 74 61 20 2a 70 2c 20 46 49 4c 45  ck_data *p, FILE
b030: 20 2a 69 6e 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4d 61   *in);../*.** Ma
b040: 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74 61  ke sure the data
b050: 62 61 73 65 20 69 73 20 6f 70 65 6e 2e 20 20 49  base is open.  I
b060: 66 20 69 74 20 69 73 20 6e 6f 74 2c 20 74 68 65  f it is not, the
b070: 6e 20 6f 70 65 6e 20 69 74 2e 20 20 49 66 0a 2a  n open it.  If.*
b080: 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  * the database f
b090: 61 69 6c 73 20 74 6f 20 6f 70 65 6e 2c 20 70 72  ails to open, pr
b0a0: 69 6e 74 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  int an error mes
b0b0: 73 61 67 65 20 61 6e 64 20 65 78 69 74 2e 0a 2a  sage and exit..*
b0c0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f 70  /.static void op
b0d0: 65 6e 5f 64 62 28 73 74 72 75 63 74 20 63 61 6c  en_db(struct cal
b0e0: 6c 62 61 63 6b 5f 64 61 74 61 20 2a 70 29 7b 0a  lback_data *p){.
b0f0: 20 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29    if( p->db==0 )
b100: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e  {.    sqlite3_in
b110: 69 74 69 61 6c 69 7a 65 28 29 3b 0a 20 20 20 20  itialize();.    
b120: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 70 2d 3e  sqlite3_open(p->
b130: 7a 44 62 46 69 6c 65 6e 61 6d 65 2c 20 26 70 2d  zDbFilename, &p-
b140: 3e 64 62 29 3b 0a 20 20 20 20 64 62 20 3d 20 70  >db);.    db = p
b150: 2d 3e 64 62 3b 0a 20 20 20 20 69 66 28 20 64 62  ->db;.    if( db
b160: 20 26 26 20 73 71 6c 69 74 65 33 5f 65 72 72 63   && sqlite3_errc
b170: 6f 64 65 28 64 62 29 3d 3d 53 51 4c 49 54 45 5f  ode(db)==SQLITE_
b180: 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  OK ){.      sqli
b190: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
b1a0: 69 6f 6e 28 64 62 2c 20 22 73 68 65 6c 6c 73 74  ion(db, "shellst
b1b0: 61 74 69 63 22 2c 20 30 2c 20 53 51 4c 49 54 45  atic", 0, SQLITE
b1c0: 5f 55 54 46 38 2c 20 30 2c 0a 20 20 20 20 20 20  _UTF8, 0,.      
b1d0: 20 20 20 20 73 68 65 6c 6c 73 74 61 74 69 63 46      shellstaticF
b1e0: 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  unc, 0, 0);.    
b1f0: 7d 0a 20 20 20 20 69 66 28 20 64 62 3d 3d 30 20  }.    if( db==0 
b200: 7c 7c 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71  || SQLITE_OK!=sq
b210: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64 62  lite3_errcode(db
b220: 29 20 29 7b 0a 20 20 20 20 20 20 66 70 72 69 6e  ) ){.      fprin
b230: 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72  tf(stderr,"Error
b240: 3a 20 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e  : unable to open
b250: 20 64 61 74 61 62 61 73 65 20 5c 22 25 73 5c 22   database \"%s\"
b260: 3a 20 25 73 5c 6e 22 2c 20 0a 20 20 20 20 20 20  : %s\n", .      
b270: 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c 65 6e 61      p->zDbFilena
b280: 6d 65 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  me, sqlite3_errm
b290: 73 67 28 64 62 29 29 3b 0a 20 20 20 20 20 20 65  sg(db));.      e
b2a0: 78 69 74 28 31 29 3b 0a 20 20 20 20 7d 0a 23 69  xit(1);.    }.#i
b2b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
b2c0: 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
b2d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 6e 61  .    sqlite3_ena
b2e0: 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble_load_extensi
b2f0: 6f 6e 28 70 2d 3e 64 62 2c 20 31 29 3b 0a 23 65  on(p->db, 1);.#e
b300: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
b310: 54 45 5f 45 4e 41 42 4c 45 5f 52 45 47 45 58 50  TE_ENABLE_REGEXP
b320: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 65 78 74  .    {.      ext
b330: 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
b340: 61 64 64 5f 72 65 67 65 78 70 5f 66 75 6e 63 28  add_regexp_func(
b350: 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 20 20  sqlite3*);.     
b360: 20 73 71 6c 69 74 65 33 5f 61 64 64 5f 72 65 67   sqlite3_add_reg
b370: 65 78 70 5f 66 75 6e 63 28 64 62 29 3b 0a 20 20  exp_func(db);.  
b380: 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65    }.#endif.#ifde
b390: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
b3a0: 53 50 45 4c 4c 46 49 58 0a 20 20 20 20 7b 0a 20  SPELLFIX.    {. 
b3b0: 20 20 20 20 20 65 78 74 65 72 6e 20 69 6e 74 20       extern int 
b3c0: 73 71 6c 69 74 65 33 5f 73 70 65 6c 6c 66 69 78  sqlite3_spellfix
b3d0: 31 5f 72 65 67 69 73 74 65 72 28 73 71 6c 69 74  1_register(sqlit
b3e0: 65 33 2a 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  e3*);.      sqli
b3f0: 74 65 33 5f 73 70 65 6c 6c 66 69 78 31 5f 72 65  te3_spellfix1_re
b400: 67 69 73 74 65 72 28 64 62 29 3b 0a 20 20 20 20  gister(db);.    
b410: 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 7d 0a 0a  }.#endif.  }.}..
b420: 2f 2a 0a 2a 2a 20 44 6f 20 43 2d 6c 61 6e 67 75  /*.** Do C-langu
b430: 61 67 65 20 73 74 79 6c 65 20 64 65 71 75 6f 74  age style dequot
b440: 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 5c 74  ing..**.**    \t
b450: 20 20 20 20 2d 3e 20 74 61 62 0a 2a 2a 20 20 20      -> tab.**   
b460: 20 5c 6e 20 20 20 20 2d 3e 20 6e 65 77 6c 69 6e   \n    -> newlin
b470: 65 0a 2a 2a 20 20 20 20 5c 72 20 20 20 20 2d 3e  e.**    \r    ->
b480: 20 63 61 72 72 69 61 67 65 20 72 65 74 75 72 6e   carriage return
b490: 0a 2a 2a 20 20 20 20 5c 4e 4e 4e 20 20 2d 3e 20  .**    \NNN  -> 
b4a0: 61 73 63 69 69 20 63 68 61 72 61 63 74 65 72 20  ascii character 
b4b0: 4e 4e 4e 20 69 6e 20 6f 63 74 61 6c 0a 2a 2a 20  NNN in octal.** 
b4c0: 20 20 20 5c 5c 20 20 20 20 2d 3e 20 62 61 63 6b     \\    -> back
b4d0: 73 6c 61 73 68 0a 2a 2f 0a 73 74 61 74 69 63 20  slash.*/.static 
b4e0: 76 6f 69 64 20 72 65 73 6f 6c 76 65 5f 62 61 63  void resolve_bac
b4f0: 6b 73 6c 61 73 68 65 73 28 63 68 61 72 20 2a 7a  kslashes(char *z
b500: 29 7b 0a 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20  ){.  int i, j;. 
b510: 20 63 68 61 72 20 63 3b 0a 20 20 66 6f 72 28 69   char c;.  for(i
b520: 3d 6a 3d 30 3b 20 28 63 20 3d 20 7a 5b 69 5d 29  =j=0; (c = z[i])
b530: 21 3d 30 3b 20 69 2b 2b 2c 20 6a 2b 2b 29 7b 0a  !=0; i++, j++){.
b540: 20 20 20 20 69 66 28 20 63 3d 3d 27 5c 5c 27 20      if( c=='\\' 
b550: 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 7a 5b 2b  ){.      c = z[+
b560: 2b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 63  +i];.      if( c
b570: 3d 3d 27 6e 27 20 29 7b 0a 20 20 20 20 20 20 20  =='n' ){.       
b580: 20 63 20 3d 20 27 5c 6e 27 3b 0a 20 20 20 20 20   c = '\n';.     
b590: 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 74   }else if( c=='t
b5a0: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d  ' ){.        c =
b5b0: 20 27 5c 74 27 3b 0a 20 20 20 20 20 20 7d 65 6c   '\t';.      }el
b5c0: 73 65 20 69 66 28 20 63 3d 3d 27 72 27 20 29 7b  se if( c=='r' ){
b5d0: 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27 5c 72  .        c = '\r
b5e0: 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  ';.      }else i
b5f0: 66 28 20 63 3e 3d 27 30 27 20 26 26 20 63 3c 3d  f( c>='0' && c<=
b600: 27 37 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63  '7' ){.        c
b610: 20 2d 3d 20 27 30 27 3b 0a 20 20 20 20 20 20 20   -= '0';.       
b620: 20 69 66 28 20 7a 5b 69 2b 31 5d 3e 3d 27 30 27   if( z[i+1]>='0'
b630: 20 26 26 20 7a 5b 69 2b 31 5d 3c 3d 27 37 27 20   && z[i+1]<='7' 
b640: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 2b 2b  ){.          i++
b650: 3b 0a 20 20 20 20 20 20 20 20 20 20 63 20 3d 20  ;.          c = 
b660: 28 63 3c 3c 33 29 20 2b 20 7a 5b 69 5d 20 2d 20  (c<<3) + z[i] - 
b670: 27 30 27 3b 0a 20 20 20 20 20 20 20 20 20 20 69  '0';.          i
b680: 66 28 20 7a 5b 69 2b 31 5d 3e 3d 27 30 27 20 26  f( z[i+1]>='0' &
b690: 26 20 7a 5b 69 2b 31 5d 3c 3d 27 37 27 20 29 7b  & z[i+1]<='7' ){
b6a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 2b 2b  .            i++
b6b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 20  ;.            c 
b6c0: 3d 20 28 63 3c 3c 33 29 20 2b 20 7a 5b 69 5d 20  = (c<<3) + z[i] 
b6d0: 2d 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20 20  - '0';.         
b6e0: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
b6f0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a     }.    }.    z
b700: 5b 6a 5d 20 3d 20 63 3b 0a 20 20 7d 0a 20 20 7a  [j] = c;.  }.  z
b710: 5b 6a 5d 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  [j] = 0;.}../*.*
b720: 2a 20 49 6e 74 65 72 70 72 65 74 20 7a 41 72 67  * Interpret zArg
b730: 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
b740: 6c 75 65 2e 20 20 52 65 74 75 72 6e 20 65 69 74  lue.  Return eit
b750: 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2f 0a 73  her 0 or 1..*/.s
b760: 74 61 74 69 63 20 69 6e 74 20 62 6f 6f 6c 65 61  tatic int boolea
b770: 6e 56 61 6c 75 65 28 63 68 61 72 20 2a 7a 41 72  nValue(char *zAr
b780: 67 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66  g){.  int i;.  f
b790: 6f 72 28 69 3d 30 3b 20 7a 41 72 67 5b 69 5d 3e  or(i=0; zArg[i]>
b7a0: 3d 27 30 27 20 26 26 20 7a 41 72 67 5b 69 5d 3c  ='0' && zArg[i]<
b7b0: 3d 27 39 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 69  ='9'; i++){}.  i
b7c0: 66 28 20 69 3e 30 20 26 26 20 7a 41 72 67 5b 69  f( i>0 && zArg[i
b7d0: 5d 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 61 74  ]==0 ) return at
b7e0: 6f 69 28 7a 41 72 67 29 3b 0a 20 20 69 66 28 20  oi(zArg);.  if( 
b7f0: 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28  sqlite3_stricmp(
b800: 7a 41 72 67 2c 20 22 6f 6e 22 29 3d 3d 30 20 7c  zArg, "on")==0 |
b810: 7c 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d  | sqlite3_stricm
b820: 70 28 7a 41 72 67 2c 22 79 65 73 22 29 3d 3d 30  p(zArg,"yes")==0
b830: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 31   ){.    return 1
b840: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
b850: 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 41 72 67  te3_stricmp(zArg
b860: 2c 20 22 6f 66 66 22 29 3d 3d 30 20 7c 7c 20 73  , "off")==0 || s
b870: 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a  qlite3_stricmp(z
b880: 41 72 67 2c 22 6e 6f 22 29 3d 3d 30 20 29 7b 0a  Arg,"no")==0 ){.
b890: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
b8a0: 7d 0a 20 20 66 70 72 69 6e 74 66 28 73 74 64 65  }.  fprintf(stde
b8b0: 72 72 2c 20 22 45 52 52 4f 52 3a 20 4e 6f 74 20  rr, "ERROR: Not 
b8c0: 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  a boolean value:
b8d0: 20 5c 22 25 73 5c 22 2e 20 41 73 73 75 6d 69 6e   \"%s\". Assumin
b8e0: 67 20 5c 22 6e 6f 5c 22 2e 5c 6e 22 2c 0a 20 20  g \"no\".\n",.  
b8f0: 20 20 20 20 20 20 20 20 7a 41 72 67 29 3b 0a 20          zArg);. 
b900: 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a   return 0;.}../*
b910: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 7a 41  .** Interpret zA
b920: 72 67 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  rg as an integer
b930: 20 76 61 6c 75 65 2c 20 70 6f 73 73 69 62 6c 79   value, possibly
b940: 20 77 69 74 68 20 73 75 66 66 69 78 65 73 2e 0a   with suffixes..
b950: 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c 69 74 65  */.static sqlite
b960: 33 5f 69 6e 74 36 34 20 69 6e 74 65 67 65 72 56  3_int64 integerV
b970: 61 6c 75 65 28 63 6f 6e 73 74 20 63 68 61 72 20  alue(const char 
b980: 2a 7a 41 72 67 29 7b 0a 20 20 73 71 6c 69 74 65  *zArg){.  sqlite
b990: 33 5f 69 6e 74 36 34 20 76 20 3d 20 30 3b 0a 20  3_int64 v = 0;. 
b9a0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74   static const st
b9b0: 72 75 63 74 20 7b 20 63 68 61 72 20 2a 7a 53 75  ruct { char *zSu
b9c0: 66 66 69 78 3b 20 69 6e 74 20 69 4d 75 6c 74 3b  ffix; int iMult;
b9d0: 20 7d 20 61 4d 75 6c 74 5b 5d 20 3d 20 7b 0a 20   } aMult[] = {. 
b9e0: 20 20 20 7b 20 22 4b 69 42 22 2c 20 31 30 32 34     { "KiB", 1024
b9f0: 20 7d 2c 0a 20 20 20 20 7b 20 22 4d 69 42 22 2c   },.    { "MiB",
ba00: 20 31 30 32 34 2a 31 30 32 34 20 7d 2c 0a 20 20   1024*1024 },.  
ba10: 20 20 7b 20 22 47 69 42 22 2c 20 31 30 32 34 2a    { "GiB", 1024*
ba20: 31 30 32 34 2a 31 30 32 34 20 7d 2c 0a 20 20 20  1024*1024 },.   
ba30: 20 7b 20 22 4b 42 22 2c 20 20 31 30 30 30 20 7d   { "KB",  1000 }
ba40: 2c 0a 20 20 20 20 7b 20 22 4d 42 22 2c 20 20 31  ,.    { "MB",  1
ba50: 30 30 30 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20  000000 },.    { 
ba60: 22 47 42 22 2c 20 20 31 30 30 30 30 30 30 30 30  "GB",  100000000
ba70: 30 20 7d 2c 0a 20 20 20 20 7b 20 22 4b 22 2c 20  0 },.    { "K", 
ba80: 20 20 31 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20    1000 },.    { 
ba90: 22 4d 22 2c 20 20 20 31 30 30 30 30 30 30 20 7d  "M",   1000000 }
baa0: 2c 0a 20 20 20 20 7b 20 22 47 22 2c 20 20 20 31  ,.    { "G",   1
bab0: 30 30 30 30 30 30 30 30 30 20 7d 2c 0a 20 20 7d  000000000 },.  }
bac0: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74  ;.  int i;.  int
bad0: 20 69 73 4e 65 67 20 3d 20 30 3b 0a 20 20 69 66   isNeg = 0;.  if
bae0: 28 20 7a 41 72 67 5b 30 5d 3d 3d 27 2d 27 20 29  ( zArg[0]=='-' )
baf0: 7b 0a 20 20 20 20 69 73 4e 65 67 20 3d 20 31 3b  {.    isNeg = 1;
bb00: 0a 20 20 20 20 7a 41 72 67 2b 2b 3b 0a 20 20 7d  .    zArg++;.  }
bb10: 65 6c 73 65 20 69 66 28 20 7a 41 72 67 5b 30 5d  else if( zArg[0]
bb20: 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 7a 41 72  =='+' ){.    zAr
bb30: 67 2b 2b 3b 0a 20 20 7d 0a 20 20 77 68 69 6c 65  g++;.  }.  while
bb40: 28 20 69 73 64 69 67 69 74 28 7a 41 72 67 5b 30  ( isdigit(zArg[0
bb50: 5d 29 20 29 7b 0a 20 20 20 20 76 20 3d 20 76 2a  ]) ){.    v = v*
bb60: 31 30 20 2b 20 7a 41 72 67 5b 30 5d 20 2d 20 27  10 + zArg[0] - '
bb70: 30 27 3b 0a 20 20 20 20 7a 41 72 67 2b 2b 3b 0a  0';.    zArg++;.
bb80: 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69    }.  for(i=0; i
bb90: 3c 73 69 7a 65 6f 66 28 61 4d 75 6c 74 29 2f 73  <sizeof(aMult)/s
bba0: 69 7a 65 6f 66 28 61 4d 75 6c 74 5b 30 5d 29 3b  izeof(aMult[0]);
bbb0: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 73   i++){.    if( s
bbc0: 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 61  qlite3_stricmp(a
bbd0: 4d 75 6c 74 5b 69 5d 2e 7a 53 75 66 66 69 78 2c  Mult[i].zSuffix,
bbe0: 20 7a 41 72 67 29 3d 3d 30 20 29 7b 0a 20 20 20   zArg)==0 ){.   
bbf0: 20 20 20 76 20 2a 3d 20 61 4d 75 6c 74 5b 69 5d     v *= aMult[i]
bc00: 2e 69 4d 75 6c 74 3b 0a 20 20 20 20 20 20 62 72  .iMult;.      br
bc10: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
bc20: 20 72 65 74 75 72 6e 20 69 73 4e 65 67 3f 20 2d   return isNeg? -
bc30: 76 20 3a 20 76 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  v : v;.}../*.** 
bc40: 43 6c 6f 73 65 20 61 6e 20 6f 75 74 70 75 74 20  Close an output 
bc50: 66 69 6c 65 2c 20 61 73 73 75 6d 69 6e 67 20 69  file, assuming i
bc60: 74 20 69 73 20 6e 6f 74 20 73 74 64 65 72 72 20  t is not stderr 
bc70: 6f 72 20 73 74 64 6f 75 74 0a 2a 2f 0a 73 74 61  or stdout.*/.sta
bc80: 74 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74 5f  tic void output_
bc90: 66 69 6c 65 5f 63 6c 6f 73 65 28 46 49 4c 45 20  file_close(FILE 
bca0: 2a 66 29 7b 0a 20 20 69 66 28 20 66 20 26 26 20  *f){.  if( f && 
bcb0: 66 21 3d 73 74 64 6f 75 74 20 26 26 20 66 21 3d  f!=stdout && f!=
bcc0: 73 74 64 65 72 72 20 29 20 66 63 6c 6f 73 65 28  stderr ) fclose(
bcd0: 66 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79  f);.}../*.** Try
bce0: 20 74 6f 20 6f 70 65 6e 20 61 6e 20 6f 75 74 70   to open an outp
bcf0: 75 74 20 66 69 6c 65 2e 20 20 20 54 68 65 20 6e  ut file.   The n
bd00: 61 6d 65 73 20 22 73 74 64 6f 75 74 22 20 61 6e  ames "stdout" an
bd10: 64 20 22 73 74 64 65 72 72 22 20 61 72 65 0a 2a  d "stderr" are.*
bd20: 2a 20 72 65 63 6f 67 6e 69 7a 65 64 20 61 6e 64  * recognized and
bd30: 20 64 6f 20 74 68 65 20 72 69 67 68 74 20 74 68   do the right th
bd40: 69 6e 67 2e 20 20 4e 55 4c 4c 20 69 73 20 72 65  ing.  NULL is re
bd50: 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 6f 75  turned if the ou
bd60: 74 70 75 74 20 0a 2a 2a 20 66 69 6c 65 6e 61 6d  tput .** filenam
bd70: 65 20 69 73 20 22 6f 66 66 22 2e 0a 2a 2f 0a 73  e is "off"..*/.s
bd80: 74 61 74 69 63 20 46 49 4c 45 20 2a 6f 75 74 70  tatic FILE *outp
bd90: 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 63 6f 6e  ut_file_open(con
bda0: 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 29 7b  st char *zFile){
bdb0: 0a 20 20 46 49 4c 45 20 2a 66 3b 0a 20 20 69 66  .  FILE *f;.  if
bdc0: 28 20 73 74 72 63 6d 70 28 7a 46 69 6c 65 2c 22  ( strcmp(zFile,"
bdd0: 73 74 64 6f 75 74 22 29 3d 3d 30 20 29 7b 0a 20  stdout")==0 ){. 
bde0: 20 20 20 66 20 3d 20 73 74 64 6f 75 74 3b 0a 20     f = stdout;. 
bdf0: 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
be00: 70 28 7a 46 69 6c 65 2c 20 22 73 74 64 65 72 72  p(zFile, "stderr
be10: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 66 20 3d  ")==0 ){.    f =
be20: 20 73 74 64 65 72 72 3b 0a 20 20 7d 65 6c 73 65   stderr;.  }else
be30: 20 69 66 28 20 73 74 72 63 6d 70 28 7a 46 69 6c   if( strcmp(zFil
be40: 65 2c 20 22 6f 66 66 22 29 3d 3d 30 20 29 7b 0a  e, "off")==0 ){.
be50: 20 20 20 20 66 20 3d 20 30 3b 0a 20 20 7d 65 6c      f = 0;.  }el
be60: 73 65 7b 0a 20 20 20 20 66 20 3d 20 66 6f 70 65  se{.    f = fope
be70: 6e 28 7a 46 69 6c 65 2c 20 22 77 62 22 29 3b 0a  n(zFile, "wb");.
be80: 20 20 20 20 69 66 28 20 66 3d 3d 30 20 29 7b 0a      if( f==0 ){.
be90: 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74        fprintf(st
bea0: 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 63 61  derr, "Error: ca
beb0: 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73 5c 22  nnot open \"%s\"
bec0: 5c 6e 22 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 20  \n", zFile);.   
bed0: 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20   }.  }.  return 
bee0: 66 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 20 72 6f  f;.}../*.** A ro
bef0: 75 74 69 6e 65 20 66 6f 72 20 68 61 6e 64 6c 69  utine for handli
bf00: 6e 67 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 73  ng output from s
bf10: 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 2e 0a  qlite3_trace()..
bf20: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73  */.static void s
bf30: 71 6c 5f 74 72 61 63 65 5f 63 61 6c 6c 62 61 63  ql_trace_callbac
bf40: 6b 28 76 6f 69 64 20 2a 70 41 72 67 2c 20 63 6f  k(void *pArg, co
bf50: 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20  nst char *z){.  
bf60: 46 49 4c 45 20 2a 66 20 3d 20 28 46 49 4c 45 2a  FILE *f = (FILE*
bf70: 29 70 41 72 67 3b 0a 20 20 69 66 28 20 66 20 29  )pArg;.  if( f )
bf80: 20 66 70 72 69 6e 74 66 28 66 2c 20 22 25 73 5c   fprintf(f, "%s\
bf90: 6e 22 2c 20 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  n", z);.}../*.**
bfa0: 20 41 20 6e 6f 2d 6f 70 20 72 6f 75 74 69 6e 65   A no-op routine
bfb0: 20 74 68 61 74 20 72 75 6e 73 20 77 69 74 68 20   that runs with 
bfc0: 74 68 65 20 22 2e 62 72 65 61 6b 70 6f 69 6e 74  the ".breakpoint
bfd0: 22 20 64 6f 63 2d 63 6f 6d 6d 61 6e 64 2e 20 20  " doc-command.  
bfe0: 54 68 69 73 20 69 73 0a 2a 2a 20 61 20 75 73 65  This is.** a use
bff0: 66 75 6c 20 73 70 6f 74 20 74 6f 20 73 65 74 20  ful spot to set 
c000: 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b  a debugger break
c010: 70 6f 69 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  point..*/.static
c020: 20 76 6f 69 64 20 74 65 73 74 5f 62 72 65 61 6b   void test_break
c030: 70 6f 69 6e 74 28 76 6f 69 64 29 7b 0a 20 20 73  point(void){.  s
c040: 74 61 74 69 63 20 69 6e 74 20 6e 43 61 6c 6c 20  tatic int nCall 
c050: 3d 20 30 3b 0a 20 20 6e 43 61 6c 6c 2b 2b 3b 0a  = 0;.  nCall++;.
c060: 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 61 6e 20 69  }../*.** If an i
c070: 6e 70 75 74 20 6c 69 6e 65 20 62 65 67 69 6e 73  nput line begins
c080: 20 77 69 74 68 20 22 2e 22 20 74 68 65 6e 20 69   with "." then i
c090: 6e 76 6f 6b 65 20 74 68 69 73 20 72 6f 75 74 69  nvoke this routi
c0a0: 6e 65 20 74 6f 0a 2a 2a 20 70 72 6f 63 65 73 73  ne to.** process
c0b0: 20 74 68 61 74 20 6c 69 6e 65 2e 0a 2a 2a 0a 2a   that line..**.*
c0c0: 2a 20 52 65 74 75 72 6e 20 31 20 6f 6e 20 65 72  * Return 1 on er
c0d0: 72 6f 72 2c 20 32 20 74 6f 20 65 78 69 74 2c 20  ror, 2 to exit, 
c0e0: 61 6e 64 20 30 20 6f 74 68 65 72 77 69 73 65 2e  and 0 otherwise.
c0f0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 64  .*/.static int d
c100: 6f 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 28 63  o_meta_command(c
c110: 68 61 72 20 2a 7a 4c 69 6e 65 2c 20 73 74 72 75  har *zLine, stru
c120: 63 74 20 63 61 6c 6c 62 61 63 6b 5f 64 61 74 61  ct callback_data
c130: 20 2a 70 29 7b 0a 20 20 69 6e 74 20 69 20 3d 20   *p){.  int i = 
c140: 31 3b 0a 20 20 69 6e 74 20 6e 41 72 67 20 3d 20  1;.  int nArg = 
c150: 30 3b 0a 20 20 69 6e 74 20 6e 2c 20 63 3b 0a 20  0;.  int n, c;. 
c160: 20 69 6e 74 20 72 63 20 3d 20 30 3b 0a 20 20 63   int rc = 0;.  c
c170: 68 61 72 20 2a 61 7a 41 72 67 5b 35 30 5d 3b 0a  har *azArg[50];.
c180: 0a 20 20 2f 2a 20 50 61 72 73 65 20 74 68 65 20  .  /* Parse the 
c190: 69 6e 70 75 74 20 6c 69 6e 65 20 69 6e 74 6f 20  input line into 
c1a0: 74 6f 6b 65 6e 73 2e 0a 20 20 2a 2f 0a 20 20 77  tokens..  */.  w
c1b0: 68 69 6c 65 28 20 7a 4c 69 6e 65 5b 69 5d 20 26  hile( zLine[i] &
c1c0: 26 20 6e 41 72 67 3c 41 72 72 61 79 53 69 7a 65  & nArg<ArraySize
c1d0: 28 61 7a 41 72 67 29 20 29 7b 0a 20 20 20 20 77  (azArg) ){.    w
c1e0: 68 69 6c 65 28 20 49 73 53 70 61 63 65 28 7a 4c  hile( IsSpace(zL
c1f0: 69 6e 65 5b 69 5d 29 20 29 7b 20 69 2b 2b 3b 20  ine[i]) ){ i++; 
c200: 7d 0a 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 5b  }.    if( zLine[
c210: 69 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  i]==0 ) break;. 
c220: 20 20 20 69 66 28 20 7a 4c 69 6e 65 5b 69 5d 3d     if( zLine[i]=
c230: 3d 27 5c 27 27 20 7c 7c 20 7a 4c 69 6e 65 5b 69  ='\'' || zLine[i
c240: 5d 3d 3d 27 22 27 20 29 7b 0a 20 20 20 20 20 20  ]=='"' ){.      
c250: 69 6e 74 20 64 65 6c 69 6d 20 3d 20 7a 4c 69 6e  int delim = zLin
c260: 65 5b 69 2b 2b 5d 3b 0a 20 20 20 20 20 20 61 7a  e[i++];.      az
c270: 41 72 67 5b 6e 41 72 67 2b 2b 5d 20 3d 20 26 7a  Arg[nArg++] = &z
c280: 4c 69 6e 65 5b 69 5d 3b 0a 20 20 20 20 20 20 77  Line[i];.      w
c290: 68 69 6c 65 28 20 7a 4c 69 6e 65 5b 69 5d 20 26  hile( zLine[i] &
c2a0: 26 20 7a 4c 69 6e 65 5b 69 5d 21 3d 64 65 6c 69  & zLine[i]!=deli
c2b0: 6d 20 29 7b 20 69 2b 2b 3b 20 7d 0a 20 20 20 20  m ){ i++; }.    
c2c0: 20 20 69 66 28 20 7a 4c 69 6e 65 5b 69 5d 3d 3d    if( zLine[i]==
c2d0: 64 65 6c 69 6d 20 29 7b 0a 20 20 20 20 20 20 20  delim ){.       
c2e0: 20 7a 4c 69 6e 65 5b 69 2b 2b 5d 20 3d 20 30 3b   zLine[i++] = 0;
c2f0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
c300: 66 28 20 64 65 6c 69 6d 3d 3d 27 22 27 20 29 20  f( delim=='"' ) 
c310: 72 65 73 6f 6c 76 65 5f 62 61 63 6b 73 6c 61 73  resolve_backslas
c320: 68 65 73 28 61 7a 41 72 67 5b 6e 41 72 67 2d 31  hes(azArg[nArg-1
c330: 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ]);.    }else{. 
c340: 20 20 20 20 20 61 7a 41 72 67 5b 6e 41 72 67 2b       azArg[nArg+
c350: 2b 5d 20 3d 20 26 7a 4c 69 6e 65 5b 69 5d 3b 0a  +] = &zLine[i];.
c360: 20 20 20 20 20 20 77 68 69 6c 65 28 20 7a 4c 69        while( zLi
c370: 6e 65 5b 69 5d 20 26 26 20 21 49 73 53 70 61 63  ne[i] && !IsSpac
c380: 65 28 7a 4c 69 6e 65 5b 69 5d 29 20 29 7b 20 69  e(zLine[i]) ){ i
c390: 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 69 66 28 20  ++; }.      if( 
c3a0: 7a 4c 69 6e 65 5b 69 5d 20 29 20 7a 4c 69 6e 65  zLine[i] ) zLine
c3b0: 5b 69 2b 2b 5d 20 3d 20 30 3b 0a 20 20 20 20 20  [i++] = 0;.     
c3c0: 20 72 65 73 6f 6c 76 65 5f 62 61 63 6b 73 6c 61   resolve_backsla
c3d0: 73 68 65 73 28 61 7a 41 72 67 5b 6e 41 72 67 2d  shes(azArg[nArg-
c3e0: 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  1]);.    }.  }..
c3f0: 20 20 2f 2a 20 50 72 6f 63 65 73 73 20 74 68 65    /* Process the
c400: 20 69 6e 70 75 74 20 6c 69 6e 65 2e 0a 20 20 2a   input line..  *
c410: 2f 0a 20 20 69 66 28 20 6e 41 72 67 3d 3d 30 20  /.  if( nArg==0 
c420: 29 20 72 65 74 75 72 6e 20 30 3b 20 2f 2a 20 6e  ) return 0; /* n
c430: 6f 20 74 6f 6b 65 6e 73 2c 20 6e 6f 20 65 72 72  o tokens, no err
c440: 6f 72 20 2a 2f 0a 20 20 6e 20 3d 20 73 74 72 6c  or */.  n = strl
c450: 65 6e 33 30 28 61 7a 41 72 67 5b 30 5d 29 3b 0a  en30(azArg[0]);.
c460: 20 20 63 20 3d 20 61 7a 41 72 67 5b 30 5d 5b 30    c = azArg[0][0
c470: 5d 3b 0a 20 20 69 66 28 20 63 3d 3d 27 62 27 20  ];.  if( c=='b' 
c480: 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63  && n>=3 && strnc
c490: 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 62 61  mp(azArg[0], "ba
c4a0: 63 6b 75 70 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  ckup", n)==0 ){.
c4b0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
c4c0: 7a 44 65 73 74 46 69 6c 65 20 3d 20 30 3b 0a 20  zDestFile = 0;. 
c4d0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
c4e0: 44 62 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73  Db = 0;.    cons
c4f0: 74 20 63 68 61 72 20 2a 7a 4b 65 79 20 3d 20 30  t char *zKey = 0
c500: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 2a 70  ;.    sqlite3 *p
c510: 44 65 73 74 3b 0a 20 20 20 20 73 71 6c 69 74 65  Dest;.    sqlite
c520: 33 5f 62 61 63 6b 75 70 20 2a 70 42 61 63 6b 75  3_backup *pBacku
c530: 70 3b 0a 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20  p;.    int j;.  
c540: 20 20 66 6f 72 28 6a 3d 31 3b 20 6a 3c 6e 41 72    for(j=1; j<nAr
c550: 67 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 63  g; j++){.      c
c560: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 61  onst char *z = a
c570: 7a 41 72 67 5b 6a 5d 3b 0a 20 20 20 20 20 20 69  zArg[j];.      i
c580: 66 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a  f( z[0]=='-' ){.
c590: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 7a          while( z
c5a0: 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a  [0]=='-' ) z++;.
c5b0: 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63          if( strc
c5c0: 6d 70 28 7a 2c 22 6b 65 79 22 29 3d 3d 30 20 26  mp(z,"key")==0 &
c5d0: 26 20 6a 3c 6e 41 72 67 2d 31 20 29 7b 0a 20 20  & j<nArg-1 ){.  
c5e0: 20 20 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 61          zKey = a
c5f0: 7a 41 72 67 5b 2b 2b 6a 5d 3b 0a 20 20 20 20 20  zArg[++j];.     
c600: 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20 20 20     }else.       
c610: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 66 70 72   {.          fpr
c620: 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 75 6e  intf(stderr, "un
c630: 6b 6e 6f 77 6e 20 6f 70 74 69 6f 6e 3a 20 25 73  known option: %s
c640: 5c 6e 22 2c 20 61 7a 41 72 67 5b 6a 5d 29 3b 0a  \n", azArg[j]);.
c650: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c660: 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   1;.        }.  
c670: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 44      }else if( zD
c680: 65 73 74 46 69 6c 65 3d 3d 30 20 29 7b 0a 20 20  estFile==0 ){.  
c690: 20 20 20 20 20 20 7a 44 65 73 74 46 69 6c 65 20        zDestFile 
c6a0: 3d 20 61 7a 41 72 67 5b 6a 5d 3b 0a 20 20 20 20  = azArg[j];.    
c6b0: 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 44 62 3d    }else if( zDb=
c6c0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 44  =0 ){.        zD
c6d0: 62 20 3d 20 7a 44 65 73 74 46 69 6c 65 3b 0a 20  b = zDestFile;. 
c6e0: 20 20 20 20 20 20 20 7a 44 65 73 74 46 69 6c 65         zDestFile
c6f0: 20 3d 20 61 7a 41 72 67 5b 6a 5d 3b 0a 20 20 20   = azArg[j];.   
c700: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
c710: 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72    fprintf(stderr
c720: 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75  , "too many argu
c730: 6d 65 6e 74 73 20 74 6f 20 2e 62 61 63 6b 75 70  ments to .backup
c740: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 72 65  \n");.        re
c750: 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a  turn 1;.      }.
c760: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 44      }.    if( zD
c770: 65 73 74 46 69 6c 65 3d 3d 30 20 29 7b 0a 20 20  estFile==0 ){.  
c780: 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65      fprintf(stde
c790: 72 72 2c 20 22 6d 69 73 73 69 6e 67 20 46 49 4c  rr, "missing FIL
c7a0: 45 4e 41 4d 45 20 61 72 67 75 6d 65 6e 74 20 6f  ENAME argument o
c7b0: 6e 20 2e 62 61 63 6b 75 70 5c 6e 22 29 3b 0a 20  n .backup\n");. 
c7c0: 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
c7d0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 44 62     }.    if( zDb
c7e0: 3d 3d 30 20 29 20 7a 44 62 20 3d 20 22 6d 61 69  ==0 ) zDb = "mai
c7f0: 6e 22 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  n";.    rc = sql
c800: 69 74 65 33 5f 6f 70 65 6e 28 7a 44 65 73 74 46  ite3_open(zDestF
c810: 69 6c 65 2c 20 26 70 44 65 73 74 29 3b 0a 20 20  ile, &pDest);.  
c820: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
c830: 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 66 70 72  _OK ){.      fpr
c840: 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
c850: 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e  ror: cannot open
c860: 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 44 65 73   \"%s\"\n", zDes
c870: 74 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 73 71  tFile);.      sq
c880: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 44 65 73  lite3_close(pDes
c890: 74 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  t);.      return
c8a0: 20 31 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65 66   1;.    }.#ifdef
c8b0: 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45   SQLITE_HAS_CODE
c8c0: 43 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6b 65  C.    sqlite3_ke
c8d0: 79 28 70 44 65 73 74 2c 20 7a 4b 65 79 2c 20 28  y(pDest, zKey, (
c8e0: 69 6e 74 29 73 74 72 6c 65 6e 28 7a 4b 65 79 29  int)strlen(zKey)
c8f0: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 28 76 6f  );.#else.    (vo
c900: 69 64 29 7a 4b 65 79 3b 0a 23 65 6e 64 69 66 0a  id)zKey;.#endif.
c910: 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 29 3b 0a      open_db(p);.
c920: 20 20 20 20 70 42 61 63 6b 75 70 20 3d 20 73 71      pBackup = sq
c930: 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69  lite3_backup_ini
c940: 74 28 70 44 65 73 74 2c 20 22 6d 61 69 6e 22 2c  t(pDest, "main",
c950: 20 70 2d 3e 64 62 2c 20 7a 44 62 29 3b 0a 20 20   p->db, zDb);.  
c960: 20 20 69 66 28 20 70 42 61 63 6b 75 70 3d 3d 30    if( pBackup==0
c970: 20 29 7b 0a 20 20 20 20 20 20 66 70 72 69 6e 74   ){.      fprint
c980: 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
c990: 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33  : %s\n", sqlite3
c9a0: 5f 65 72 72 6d 73 67 28 70 44 65 73 74 29 29 3b  _errmsg(pDest));
c9b0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63  .      sqlite3_c
c9c0: 6c 6f 73 65 28 70 44 65 73 74 29 3b 0a 20 20 20  lose(pDest);.   
c9d0: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
c9e0: 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 20 28   }.    while(  (
c9f0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 61 63  rc = sqlite3_bac
ca00: 6b 75 70 5f 73 74 65 70 28 70 42 61 63 6b 75 70  kup_step(pBackup
ca10: 2c 31 30 30 29 29 3d 3d 53 51 4c 49 54 45 5f 4f  ,100))==SQLITE_O
ca20: 4b 20 29 7b 7d 0a 20 20 20 20 73 71 6c 69 74 65  K ){}.    sqlite
ca30: 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28  3_backup_finish(
ca40: 70 42 61 63 6b 75 70 29 3b 0a 20 20 20 20 69 66  pBackup);.    if
ca50: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc==SQLITE_DON
ca60: 45 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  E ){.      rc = 
ca70: 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
ca80: 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65      fprintf(stde
ca90: 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e  rr, "Error: %s\n
caa0: 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ", sqlite3_errms
cab0: 67 28 70 44 65 73 74 29 29 3b 0a 20 20 20 20 20  g(pDest));.     
cac0: 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20   rc = 1;.    }. 
cad0: 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65     sqlite3_close
cae0: 28 70 44 65 73 74 29 3b 0a 20 20 7d 65 6c 73 65  (pDest);.  }else
caf0: 0a 0a 20 20 69 66 28 20 63 3d 3d 27 62 27 20 26  ..  if( c=='b' &
cb00: 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d  & n>=3 && strncm
cb10: 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 62 61 69  p(azArg[0], "bai
cb20: 6c 22 2c 20 6e 29 3d 3d 30 20 26 26 20 6e 41 72  l", n)==0 && nAr
cb30: 67 3e 31 20 26 26 20 6e 41 72 67 3c 33 20 29 7b  g>1 && nArg<3 ){
cb40: 0a 20 20 20 20 62 61 69 6c 5f 6f 6e 5f 65 72 72  .    bail_on_err
cb50: 6f 72 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75  or = booleanValu
cb60: 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 7d  e(azArg[1]);.  }
cb70: 65 6c 73 65 0a 0a 20 20 2f 2a 20 54 68 65 20 75  else..  /* The u
cb80: 6e 64 6f 63 75 6d 65 6e 74 65 64 20 22 2e 62 72  ndocumented ".br
cb90: 65 61 6b 70 6f 69 6e 74 22 20 63 6f 6d 6d 61 6e  eakpoint" comman
cba0: 64 20 63 61 75 73 65 73 20 61 20 63 61 6c 6c 20  d causes a call 
cbb0: 74 6f 20 74 68 65 20 6e 6f 2d 6f 70 0a 20 20 2a  to the no-op.  *
cbc0: 2a 20 72 6f 75 74 69 6e 65 20 6e 61 6d 65 64 20  * routine named 
cbd0: 74 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 28  test_breakpoint(
cbe0: 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63 3d  )..  */.  if( c=
cbf0: 3d 27 62 27 20 26 26 20 6e 3e 3d 33 20 26 26 20  ='b' && n>=3 && 
cc00: 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
cc10: 2c 20 22 62 72 65 61 6b 70 6f 69 6e 74 22 2c 20  , "breakpoint", 
cc20: 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 74 65 73  n)==0 ){.    tes
cc30: 74 5f 62 72 65 61 6b 70 6f 69 6e 74 28 29 3b 0a  t_breakpoint();.
cc40: 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
cc50: 3d 3d 27 64 27 20 26 26 20 6e 3e 31 20 26 26 20  =='d' && n>1 && 
cc60: 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
cc70: 2c 20 22 64 61 74 61 62 61 73 65 73 22 2c 20 6e  , "databases", n
cc80: 29 3d 3d 30 20 26 26 20 6e 41 72 67 3d 3d 31 20  )==0 && nArg==1 
cc90: 29 7b 0a 20 20 20 20 73 74 72 75 63 74 20 63 61  ){.    struct ca
cca0: 6c 6c 62 61 63 6b 5f 64 61 74 61 20 64 61 74 61  llback_data data
ccb0: 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72  ;.    char *zErr
ccc0: 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 6f 70 65  Msg = 0;.    ope
ccd0: 6e 5f 64 62 28 70 29 3b 0a 20 20 20 20 6d 65 6d  n_db(p);.    mem
cce0: 63 70 79 28 26 64 61 74 61 2c 20 70 2c 20 73 69  cpy(&data, p, si
ccf0: 7a 65 6f 66 28 64 61 74 61 29 29 3b 0a 20 20 20  zeof(data));.   
cd00: 20 64 61 74 61 2e 73 68 6f 77 48 65 61 64 65 72   data.showHeader
cd10: 20 3d 20 31 3b 0a 20 20 20 20 64 61 74 61 2e 6d   = 1;.    data.m
cd20: 6f 64 65 20 3d 20 4d 4f 44 45 5f 43 6f 6c 75 6d  ode = MODE_Colum
cd30: 6e 3b 0a 20 20 20 20 64 61 74 61 2e 63 6f 6c 57  n;.    data.colW
cd40: 69 64 74 68 5b 30 5d 20 3d 20 33 3b 0a 20 20 20  idth[0] = 3;.   
cd50: 20 64 61 74 61 2e 63 6f 6c 57 69 64 74 68 5b 31   data.colWidth[1
cd60: 5d 20 3d 20 31 35 3b 0a 20 20 20 20 64 61 74 61  ] = 15;.    data
cd70: 2e 63 6f 6c 57 69 64 74 68 5b 32 5d 20 3d 20 35  .colWidth[2] = 5
cd80: 38 3b 0a 20 20 20 20 64 61 74 61 2e 63 6e 74 20  8;.    data.cnt 
cd90: 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 0;.    sqlite3
cda0: 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 50 52  _exec(p->db, "PR
cdb0: 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69  AGMA database_li
cdc0: 73 74 3b 20 22 2c 20 63 61 6c 6c 62 61 63 6b 2c  st; ", callback,
cdd0: 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67   &data, &zErrMsg
cde0: 29 3b 0a 20 20 20 20 69 66 28 20 7a 45 72 72 4d  );.    if( zErrM
cdf0: 73 67 20 29 7b 0a 20 20 20 20 20 20 66 70 72 69  sg ){.      fpri
ce00: 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f  ntf(stderr,"Erro
ce10: 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73  r: %s\n", zErrMs
ce20: 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  g);.      sqlite
ce30: 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b  3_free(zErrMsg);
ce40: 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
ce50: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
ce60: 69 66 28 20 63 3d 3d 27 64 27 20 26 26 20 73 74  if( c=='d' && st
ce70: 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
ce80: 22 64 75 6d 70 22 2c 20 6e 29 3d 3d 30 20 26 26  "dump", n)==0 &&
ce90: 20 6e 41 72 67 3c 33 20 29 7b 0a 20 20 20 20 6f   nArg<3 ){.    o
cea0: 70 65 6e 5f 64 62 28 70 29 3b 0a 20 20 20 20 2f  pen_db(p);.    /
ceb0: 2a 20 57 68 65 6e 20 70 6c 61 79 69 6e 67 20 62  * When playing b
cec0: 61 63 6b 20 61 20 22 64 75 6d 70 22 2c 20 74 68  ack a "dump", th
ced0: 65 20 63 6f 6e 74 65 6e 74 20 6d 69 67 68 74 20  e content might 
cee0: 61 70 70 65 61 72 20 69 6e 20 61 6e 20 6f 72 64  appear in an ord
cef0: 65 72 0a 20 20 20 20 2a 2a 20 77 68 69 63 68 20  er.    ** which 
cf00: 63 61 75 73 65 73 20 69 6d 6d 65 64 69 61 74 65  causes immediate
cf10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
cf20: 73 74 72 61 69 6e 74 73 20 74 6f 20 62 65 20 76  straints to be v
cf30: 69 6f 6c 61 74 65 64 2e 0a 20 20 20 20 2a 2a 20  iolated..    ** 
cf40: 53 6f 20 64 69 73 61 62 6c 65 20 66 6f 72 65 69  So disable forei
cf50: 67 6e 2d 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn-key constrain
cf60: 74 20 65 6e 66 6f 72 63 65 6d 65 6e 74 20 74 6f  t enforcement to
cf70: 20 70 72 65 76 65 6e 74 20 70 72 6f 62 6c 65 6d   prevent problem
cf80: 73 2e 20 2a 2f 0a 20 20 20 20 66 70 72 69 6e 74  s. */.    fprint
cf90: 66 28 70 2d 3e 6f 75 74 2c 20 22 50 52 41 47 4d  f(p->out, "PRAGM
cfa0: 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 3d 4f  A foreign_keys=O
cfb0: 46 46 3b 5c 6e 22 29 3b 0a 20 20 20 20 66 70 72  FF;\n");.    fpr
cfc0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 42 45  intf(p->out, "BE
cfd0: 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b  GIN TRANSACTION;
cfe0: 5c 6e 22 29 3b 0a 20 20 20 20 70 2d 3e 77 72 69  \n");.    p->wri
cff0: 74 61 62 6c 65 53 63 68 65 6d 61 20 3d 20 30 3b  tableSchema = 0;
d000: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65  .    sqlite3_exe
d010: 63 28 70 2d 3e 64 62 2c 20 22 53 41 56 45 50 4f  c(p->db, "SAVEPO
d020: 49 4e 54 20 64 75 6d 70 3b 20 50 52 41 47 4d 41  INT dump; PRAGMA
d030: 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61   writable_schema
d040: 3d 4f 4e 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a  =ON", 0, 0, 0);.
d050: 20 20 20 20 70 2d 3e 6e 45 72 72 20 3d 20 30 3b      p->nErr = 0;
d060: 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 31  .    if( nArg==1
d070: 20 29 7b 0a 20 20 20 20 20 20 72 75 6e 5f 73 63   ){.      run_sc
d080: 68 65 6d 61 5f 64 75 6d 70 5f 71 75 65 72 79 28  hema_dump_query(
d090: 70 2c 20 0a 20 20 20 20 20 20 20 20 22 53 45 4c  p, .        "SEL
d0a0: 45 43 54 20 6e 61 6d 65 2c 20 74 79 70 65 2c 20  ECT name, type, 
d0b0: 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  sql FROM sqlite_
d0c0: 6d 61 73 74 65 72 20 22 0a 20 20 20 20 20 20 20  master ".       
d0d0: 20 22 57 48 45 52 45 20 73 71 6c 20 4e 4f 54 20   "WHERE sql NOT 
d0e0: 4e 55 4c 4c 20 41 4e 44 20 74 79 70 65 3d 3d 27  NULL AND type=='
d0f0: 74 61 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65 21  table' AND name!
d100: 3d 27 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  ='sqlite_sequenc
d110: 65 27 22 0a 20 20 20 20 20 20 29 3b 0a 20 20 20  e'".      );.   
d120: 20 20 20 72 75 6e 5f 73 63 68 65 6d 61 5f 64 75     run_schema_du
d130: 6d 70 5f 71 75 65 72 79 28 70 2c 20 0a 20 20 20  mp_query(p, .   
d140: 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d       "SELECT nam
d150: 65 2c 20 74 79 70 65 2c 20 73 71 6c 20 46 52 4f  e, type, sql FRO
d160: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
d170: 22 0a 20 20 20 20 20 20 20 20 22 57 48 45 52 45  ".        "WHERE
d180: 20 6e 61 6d 65 3d 3d 27 73 71 6c 69 74 65 5f 73   name=='sqlite_s
d190: 65 71 75 65 6e 63 65 27 22 0a 20 20 20 20 20 20  equence'".      
d1a0: 29 3b 0a 20 20 20 20 20 20 72 75 6e 5f 74 61 62  );.      run_tab
d1b0: 6c 65 5f 64 75 6d 70 5f 71 75 65 72 79 28 70 2c  le_dump_query(p,
d1c0: 0a 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  .        "SELECT
d1d0: 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65   sql FROM sqlite
d1e0: 5f 6d 61 73 74 65 72 20 22 0a 20 20 20 20 20 20  _master ".      
d1f0: 20 20 22 57 48 45 52 45 20 73 71 6c 20 4e 4f 54    "WHERE sql NOT
d200: 20 4e 55 4c 4c 20 41 4e 44 20 74 79 70 65 20 49   NULL AND type I
d210: 4e 20 28 27 69 6e 64 65 78 27 2c 27 74 72 69 67  N ('index','trig
d220: 67 65 72 27 2c 27 76 69 65 77 27 29 22 2c 20 30  ger','view')", 0
d230: 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 7d 65  .      );.    }e
d240: 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  lse{.      int i
d250: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b  ;.      for(i=1;
d260: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
d270: 20 20 20 20 20 20 20 7a 53 68 65 6c 6c 53 74 61         zShellSta
d280: 74 69 63 20 3d 20 61 7a 41 72 67 5b 69 5d 3b 0a  tic = azArg[i];.
d290: 20 20 20 20 20 20 20 20 72 75 6e 5f 73 63 68 65          run_sche
d2a0: 6d 61 5f 64 75 6d 70 5f 71 75 65 72 79 28 70 2c  ma_dump_query(p,
d2b0: 0a 20 20 20 20 20 20 20 20 20 20 22 53 45 4c 45  .          "SELE
d2c0: 43 54 20 6e 61 6d 65 2c 20 74 79 70 65 2c 20 73  CT name, type, s
d2d0: 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  ql FROM sqlite_m
d2e0: 61 73 74 65 72 20 22 0a 20 20 20 20 20 20 20 20  aster ".        
d2f0: 20 20 22 57 48 45 52 45 20 74 62 6c 5f 6e 61 6d    "WHERE tbl_nam
d300: 65 20 4c 49 4b 45 20 73 68 65 6c 6c 73 74 61 74  e LIKE shellstat
d310: 69 63 28 29 20 41 4e 44 20 74 79 70 65 3d 3d 27  ic() AND type=='
d320: 74 61 62 6c 65 27 22 0a 20 20 20 20 20 20 20 20  table'".        
d330: 20 20 22 20 20 41 4e 44 20 73 71 6c 20 4e 4f 54    "  AND sql NOT
d340: 20 4e 55 4c 4c 22 29 3b 0a 20 20 20 20 20 20 20   NULL");.       
d350: 20 72 75 6e 5f 74 61 62 6c 65 5f 64 75 6d 70 5f   run_table_dump_
d360: 71 75 65 72 79 28 70 2c 0a 20 20 20 20 20 20 20  query(p,.       
d370: 20 20 20 22 53 45 4c 45 43 54 20 73 71 6c 20 46     "SELECT sql F
d380: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
d390: 72 20 22 0a 20 20 20 20 20 20 20 20 20 20 22 57  r ".          "W
d3a0: 48 45 52 45 20 73 71 6c 20 4e 4f 54 20 4e 55 4c  HERE sql NOT NUL
d3b0: 4c 22 0a 20 20 20 20 20 20 20 20 20 20 22 20 20  L".          "  
d3c0: 41 4e 44 20 74 79 70 65 20 49 4e 20 28 27 69 6e  AND type IN ('in
d3d0: 64 65 78 27 2c 27 74 72 69 67 67 65 72 27 2c 27  dex','trigger','
d3e0: 76 69 65 77 27 29 22 0a 20 20 20 20 20 20 20 20  view')".        
d3f0: 20 20 22 20 20 41 4e 44 20 74 62 6c 5f 6e 61 6d    "  AND tbl_nam
d400: 65 20 4c 49 4b 45 20 73 68 65 6c 6c 73 74 61 74  e LIKE shellstat
d410: 69 63 28 29 22 2c 20 30 0a 20 20 20 20 20 20 20  ic()", 0.       
d420: 20 29 3b 0a 20 20 20 20 20 20 20 20 7a 53 68 65   );.        zShe
d430: 6c 6c 53 74 61 74 69 63 20 3d 20 30 3b 0a 20 20  llStatic = 0;.  
d440: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
d450: 69 66 28 20 70 2d 3e 77 72 69 74 61 62 6c 65 53  if( p->writableS
d460: 63 68 65 6d 61 20 29 7b 0a 20 20 20 20 20 20 66  chema ){.      f
d470: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
d480: 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f  PRAGMA writable_
d490: 73 63 68 65 6d 61 3d 4f 46 46 3b 5c 6e 22 29 3b  schema=OFF;\n");
d4a0: 0a 20 20 20 20 20 20 70 2d 3e 77 72 69 74 61 62  .      p->writab
d4b0: 6c 65 53 63 68 65 6d 61 20 3d 20 30 3b 0a 20 20  leSchema = 0;.  
d4c0: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
d4d0: 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 50 52 41  exec(p->db, "PRA
d4e0: 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68  GMA writable_sch
d4f0: 65 6d 61 3d 4f 46 46 3b 22 2c 20 30 2c 20 30 2c  ema=OFF;", 0, 0,
d500: 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
d510: 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 52 45  _exec(p->db, "RE
d520: 4c 45 41 53 45 20 64 75 6d 70 3b 22 2c 20 30 2c  LEASE dump;", 0,
d530: 20 30 2c 20 30 29 3b 0a 20 20 20 20 66 70 72 69   0, 0);.    fpri
d540: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e 6e  ntf(p->out, p->n
d550: 45 72 72 20 3f 20 22 52 4f 4c 4c 42 41 43 4b 3b  Err ? "ROLLBACK;
d560: 20 2d 2d 20 64 75 65 20 74 6f 20 65 72 72 6f 72   -- due to error
d570: 73 5c 6e 22 20 3a 20 22 43 4f 4d 4d 49 54 3b 5c  s\n" : "COMMIT;\
d580: 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20  n");.  }else..  
d590: 69 66 28 20 63 3d 3d 27 65 27 20 26 26 20 73 74  if( c=='e' && st
d5a0: 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
d5b0: 22 65 63 68 6f 22 2c 20 6e 29 3d 3d 30 20 26 26  "echo", n)==0 &&
d5c0: 20 6e 41 72 67 3e 31 20 26 26 20 6e 41 72 67 3c   nArg>1 && nArg<
d5d0: 33 20 29 7b 0a 20 20 20 20 70 2d 3e 65 63 68 6f  3 ){.    p->echo
d5e0: 4f 6e 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75  On = booleanValu
d5f0: 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 7d  e(azArg[1]);.  }
d600: 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
d610: 65 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  e' && strncmp(az
d620: 41 72 67 5b 30 5d 2c 20 22 65 78 69 74 22 2c 20  Arg[0], "exit", 
d630: 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  n)==0 ){.    if(
d640: 20 6e 41 72 67 3e 31 20 26 26 20 28 72 63 20 3d   nArg>1 && (rc =
d650: 20 61 74 6f 69 28 61 7a 41 72 67 5b 31 5d 29 29   atoi(azArg[1]))
d660: 21 3d 30 20 29 20 65 78 69 74 28 72 63 29 3b 0a  !=0 ) exit(rc);.
d670: 20 20 20 20 72 63 20 3d 20 32 3b 0a 20 20 7d 65      rc = 2;.  }e
d680: 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 65  lse..  if( c=='e
d690: 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
d6a0: 72 67 5b 30 5d 2c 20 22 65 78 70 6c 61 69 6e 22  rg[0], "explain"
d6b0: 2c 20 6e 29 3d 3d 30 20 26 26 20 6e 41 72 67 3c  , n)==0 && nArg<
d6c0: 33 20 29 7b 0a 20 20 20 20 69 6e 74 20 76 61 6c  3 ){.    int val
d6d0: 20 3d 20 6e 41 72 67 3e 3d 32 20 3f 20 62 6f 6f   = nArg>=2 ? boo
d6e0: 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b  leanValue(azArg[
d6f0: 31 5d 29 20 3a 20 31 3b 0a 20 20 20 20 69 66 28  1]) : 1;.    if(
d700: 76 61 6c 20 3d 3d 20 31 29 20 7b 0a 20 20 20 20  val == 1) {.    
d710: 20 20 69 66 28 21 70 2d 3e 65 78 70 6c 61 69 6e    if(!p->explain
d720: 50 72 65 76 2e 76 61 6c 69 64 29 20 7b 0a 20 20  Prev.valid) {.  
d730: 20 20 20 20 20 20 70 2d 3e 65 78 70 6c 61 69 6e        p->explain
d740: 50 72 65 76 2e 76 61 6c 69 64 20 3d 20 31 3b 0a  Prev.valid = 1;.
d750: 20 20 20 20 20 20 20 20 70 2d 3e 65 78 70 6c 61          p->expla
d760: 69 6e 50 72 65 76 2e 6d 6f 64 65 20 3d 20 70 2d  inPrev.mode = p-
d770: 3e 6d 6f 64 65 3b 0a 20 20 20 20 20 20 20 20 70  >mode;.        p
d780: 2d 3e 65 78 70 6c 61 69 6e 50 72 65 76 2e 73 68  ->explainPrev.sh
d790: 6f 77 48 65 61 64 65 72 20 3d 20 70 2d 3e 73 68  owHeader = p->sh
d7a0: 6f 77 48 65 61 64 65 72 3b 0a 20 20 20 20 20 20  owHeader;.      
d7b0: 20 20 6d 65 6d 63 70 79 28 70 2d 3e 65 78 70 6c    memcpy(p->expl
d7c0: 61 69 6e 50 72 65 76 2e 63 6f 6c 57 69 64 74 68  ainPrev.colWidth
d7d0: 2c 70 2d 3e 63 6f 6c 57 69 64 74 68 2c 73 69 7a  ,p->colWidth,siz
d7e0: 65 6f 66 28 70 2d 3e 63 6f 6c 57 69 64 74 68 29  eof(p->colWidth)
d7f0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
d800: 20 2f 2a 20 57 65 20 63 6f 75 6c 64 20 70 75 74   /* We could put
d810: 20 74 68 69 73 20 63 6f 64 65 20 75 6e 64 65 72   this code under
d820: 20 74 68 65 20 21 70 2d 3e 65 78 70 6c 61 69 6e   the !p->explain
d830: 56 61 6c 69 64 0a 20 20 20 20 20 20 2a 2a 20 63  Valid.      ** c
d840: 6f 6e 64 69 74 69 6f 6e 20 73 6f 20 74 68 61 74  ondition so that
d850: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 65   it does not exe
d860: 63 75 74 65 20 69 66 20 77 65 20 61 72 65 20 61  cute if we are a
d870: 6c 72 65 61 64 79 20 69 6e 0a 20 20 20 20 20 20  lready in.      
d880: 2a 2a 20 65 78 70 6c 61 69 6e 20 6d 6f 64 65 2e  ** explain mode.
d890: 20 48 6f 77 65 76 65 72 2c 20 61 6c 77 61 79 73   However, always
d8a0: 20 65 78 65 63 75 74 69 6e 67 20 69 74 20 61 6c   executing it al
d8b0: 6c 6f 77 73 20 75 73 20 61 6e 20 65 61 73 79 0a  lows us an easy.
d8c0: 20 20 20 20 20 20 2a 2a 20 77 61 73 20 74 6f 20        ** was to 
d8d0: 72 65 73 65 74 20 74 6f 20 65 78 70 6c 61 69 6e  reset to explain
d8e0: 20 6d 6f 64 65 20 69 6e 20 63 61 73 65 20 74 68   mode in case th
d8f0: 65 20 75 73 65 72 20 70 72 65 76 69 6f 75 73 6c  e user previousl
d900: 79 0a 20 20 20 20 20 20 2a 2a 20 64 69 64 20 61  y.      ** did a
d910: 6e 20 2e 65 78 70 6c 61 69 6e 20 66 6f 6c 6c 6f  n .explain follo
d920: 77 65 64 20 62 79 20 61 20 2e 77 69 64 74 68 2c  wed by a .width,
d930: 20 2e 6d 6f 64 65 20 6f 72 20 2e 68 65 61 64 65   .mode or .heade
d940: 72 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 6d 61  r.      ** comma
d950: 6e 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  nd..      */.   
d960: 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44     p->mode = MOD
d970: 45 5f 45 78 70 6c 61 69 6e 3b 0a 20 20 20 20 20  E_Explain;.     
d980: 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 3d   p->showHeader =
d990: 20 31 3b 0a 20 20 20 20 20 20 6d 65 6d 73 65 74   1;.      memset
d9a0: 28 70 2d 3e 63 6f 6c 57 69 64 74 68 2c 30 2c 41  (p->colWidth,0,A
d9b0: 72 72 61 79 53 69 7a 65 28 70 2d 3e 63 6f 6c 57  rraySize(p->colW
d9c0: 69 64 74 68 29 29 3b 0a 20 20 20 20 20 20 70 2d  idth));.      p-
d9d0: 3e 63 6f 6c 57 69 64 74 68 5b 30 5d 20 3d 20 34  >colWidth[0] = 4
d9e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d9f0: 20 20 20 2f 2a 20 61 64 64 72 20 2a 2f 0a 20 20     /* addr */.  
da00: 20 20 20 20 70 2d 3e 63 6f 6c 57 69 64 74 68 5b      p->colWidth[
da10: 31 5d 20 3d 20 31 33 3b 20 20 20 20 20 20 20 20  1] = 13;        
da20: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 70 63 6f           /* opco
da30: 64 65 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 63  de */.      p->c
da40: 6f 6c 57 69 64 74 68 5b 32 5d 20 3d 20 34 3b 20  olWidth[2] = 4; 
da50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da60: 20 2f 2a 20 50 31 20 2a 2f 0a 20 20 20 20 20 20   /* P1 */.      
da70: 70 2d 3e 63 6f 6c 57 69 64 74 68 5b 33 5d 20 3d  p->colWidth[3] =
da80: 20 34 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   4;             
da90: 20 20 20 20 20 2f 2a 20 50 32 20 2a 2f 0a 20 20       /* P2 */.  
daa0: 20 20 20 20 70 2d 3e 63 6f 6c 57 69 64 74 68 5b      p->colWidth[
dab0: 34 5d 20 3d 20 34 3b 20 20 20 20 20 20 20 20 20  4] = 4;         
dac0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 33 20 2a           /* P3 *
dad0: 2f 0a 20 20 20 20 20 20 70 2d 3e 63 6f 6c 57 69  /.      p->colWi
dae0: 64 74 68 5b 35 5d 20 3d 20 31 33 3b 20 20 20 20  dth[5] = 13;    
daf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
db00: 50 34 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 63  P4 */.      p->c
db10: 6f 6c 57 69 64 74 68 5b 36 5d 20 3d 20 32 3b 20  olWidth[6] = 2; 
db20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db30: 20 2f 2a 20 50 35 20 2a 2f 0a 20 20 20 20 20 20   /* P5 */.      
db40: 70 2d 3e 63 6f 6c 57 69 64 74 68 5b 37 5d 20 3d  p->colWidth[7] =
db50: 20 31 33 3b 20 20 20 20 20 20 20 20 20 20 20 20   13;            
db60: 20 20 20 20 20 20 2f 2a 20 43 6f 6d 6d 65 6e 74        /* Comment
db70: 20 2a 2f 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   */.    }else if
db80: 20 28 70 2d 3e 65 78 70 6c 61 69 6e 50 72 65 76   (p->explainPrev
db90: 2e 76 61 6c 69 64 29 20 7b 0a 20 20 20 20 20 20  .valid) {.      
dba0: 70 2d 3e 65 78 70 6c 61 69 6e 50 72 65 76 2e 76  p->explainPrev.v
dbb0: 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20  alid = 0;.      
dbc0: 70 2d 3e 6d 6f 64 65 20 3d 20 70 2d 3e 65 78 70  p->mode = p->exp
dbd0: 6c 61 69 6e 50 72 65 76 2e 6d 6f 64 65 3b 0a 20  lainPrev.mode;. 
dbe0: 20 20 20 20 20 70 2d 3e 73 68 6f 77 48 65 61 64       p->showHead
dbf0: 65 72 20 3d 20 70 2d 3e 65 78 70 6c 61 69 6e 50  er = p->explainP
dc00: 72 65 76 2e 73 68 6f 77 48 65 61 64 65 72 3b 0a  rev.showHeader;.
dc10: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 2d 3e        memcpy(p->
dc20: 63 6f 6c 57 69 64 74 68 2c 70 2d 3e 65 78 70 6c  colWidth,p->expl
dc30: 61 69 6e 50 72 65 76 2e 63 6f 6c 57 69 64 74 68  ainPrev.colWidth
dc40: 2c 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 57 69  ,sizeof(p->colWi
dc50: 64 74 68 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  dth));.    }.  }
dc60: 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
dc70: 68 27 20 26 26 20 28 73 74 72 6e 63 6d 70 28 61  h' && (strncmp(a
dc80: 7a 41 72 67 5b 30 5d 2c 20 22 68 65 61 64 65 72  zArg[0], "header
dc90: 22 2c 20 6e 29 3d 3d 30 20 7c 7c 0a 20 20 20 20  ", n)==0 ||.    
dca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
dcb0: 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
dcc0: 68 65 61 64 65 72 73 22 2c 20 6e 29 3d 3d 30 29  headers", n)==0)
dcd0: 20 26 26 20 6e 41 72 67 3e 31 20 26 26 20 6e 41   && nArg>1 && nA
dce0: 72 67 3c 33 20 29 7b 0a 20 20 20 20 70 2d 3e 73  rg<3 ){.    p->s
dcf0: 68 6f 77 48 65 61 64 65 72 20 3d 20 62 6f 6f 6c  howHeader = bool
dd00: 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31  eanValue(azArg[1
dd10: 5d 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69  ]);.  }else..  i
dd20: 66 28 20 63 3d 3d 27 68 27 20 26 26 20 73 74 72  f( c=='h' && str
dd30: 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
dd40: 68 65 6c 70 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  help", n)==0 ){.
dd50: 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65      fprintf(stde
dd60: 72 72 2c 22 25 73 22 2c 7a 48 65 6c 70 29 3b 0a  rr,"%s",zHelp);.
dd70: 20 20 20 20 69 66 28 20 48 41 53 5f 54 49 4d 45      if( HAS_TIME
dd80: 52 20 29 7b 0a 20 20 20 20 20 20 66 70 72 69 6e  R ){.      fprin
dd90: 74 66 28 73 74 64 65 72 72 2c 22 25 73 22 2c 7a  tf(stderr,"%s",z
dda0: 54 69 6d 65 72 48 65 6c 70 29 3b 0a 20 20 20 20  TimerHelp);.    
ddb0: 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
ddc0: 20 63 3d 3d 27 69 27 20 26 26 20 73 74 72 6e 63   c=='i' && strnc
ddd0: 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6d  mp(azArg[0], "im
dde0: 70 6f 72 74 22 2c 20 6e 29 3d 3d 30 20 26 26 20  port", n)==0 && 
ddf0: 6e 41 72 67 3d 3d 33 20 29 7b 0a 20 20 20 20 63  nArg==3 ){.    c
de00: 68 61 72 20 2a 7a 54 61 62 6c 65 20 3d 20 61 7a  har *zTable = az
de10: 41 72 67 5b 32 5d 3b 20 20 20 20 2f 2a 20 49 6e  Arg[2];    /* In
de20: 73 65 72 74 20 64 61 74 61 20 69 6e 74 6f 20 74  sert data into t
de30: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
de40: 20 63 68 61 72 20 2a 7a 46 69 6c 65 20 3d 20 61   char *zFile = a
de50: 7a 41 72 67 5b 31 5d 3b 20 20 20 20 20 2f 2a 20  zArg[1];     /* 
de60: 54 68 65 20 66 69 6c 65 20 66 72 6f 6d 20 77 68  The file from wh
de70: 69 63 68 20 74 6f 20 65 78 74 72 61 63 74 20 64  ich to extract d
de80: 61 74 61 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  ata */.    sqlit
de90: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d  e3_stmt *pStmt =
dea0: 20 4e 55 4c 4c 3b 20 2f 2a 20 41 20 73 74 61 74   NULL; /* A stat
deb0: 65 6d 65 6e 74 20 2a 2f 0a 20 20 20 20 69 6e 74  ement */.    int
dec0: 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20   nCol;          
ded0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
dee0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
def0: 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
df00: 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20    int nByte;    
df10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
df20: 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
df30: 20 69 6e 20 61 6e 20 53 51 4c 20 73 74 72 69 6e   in an SQL strin
df40: 67 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 2c 20  g */.    int i, 
df50: 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  j;              
df60: 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
df70: 6e 74 65 72 73 20 2a 2f 0a 20 20 20 20 69 6e 74  nters */.    int
df80: 20 6e 53 65 70 3b 20 20 20 20 20 20 20 20 20 20   nSep;          
df90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
dfa0: 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 70  er of bytes in p
dfb0: 2d 3e 73 65 70 61 72 61 74 6f 72 5b 5d 20 2a 2f  ->separator[] */
dfc0: 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  .    char *zSql;
dfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfe0: 20 2f 2a 20 41 6e 20 53 51 4c 20 73 74 61 74 65   /* An SQL state
dff0: 6d 65 6e 74 20 2a 2f 0a 20 20 20 20 63 68 61 72  ment */.    char
e000: 20 2a 7a 4c 69 6e 65 3b 20 20 20 20 20 20 20 20   *zLine;        
e010: 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e          /* A sin
e020: 67 6c 65 20 6c 69 6e 65 20 6f 66 20 69 6e 70 75  gle line of inpu
e030: 74 20 66 72 6f 6d 20 74 68 65 20 66 69 6c 65 20  t from the file 
e040: 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 2a 61 7a  */.    char **az
e050: 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
e060: 20 20 20 2f 2a 20 7a 4c 69 6e 65 5b 5d 20 62 72     /* zLine[] br
e070: 6f 6b 65 6e 20 75 70 20 69 6e 74 6f 20 63 6f 6c  oken up into col
e080: 75 6d 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61 72  umns */.    char
e090: 20 2a 7a 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20   *zCommit;      
e0a0: 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74          /* How t
e0b0: 6f 20 63 6f 6d 6d 69 74 20 63 68 61 6e 67 65 73  o commit changes
e0c0: 20 2a 2f 20 20 20 0a 20 20 20 20 46 49 4c 45 20   */   .    FILE 
e0d0: 2a 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  *in;            
e0e0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e         /* The in
e0f0: 70 75 74 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20  put file */.    
e100: 69 6e 74 20 6c 69 6e 65 6e 6f 20 3d 20 30 3b 20  int lineno = 0; 
e110: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
e120: 69 6e 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 6e  ine number of in
e130: 70 75 74 20 66 69 6c 65 20 2a 2f 0a 0a 20 20 20  put file */..   
e140: 20 6f 70 65 6e 5f 64 62 28 70 29 3b 0a 20 20 20   open_db(p);.   
e150: 20 6e 53 65 70 20 3d 20 73 74 72 6c 65 6e 33 30   nSep = strlen30
e160: 28 70 2d 3e 73 65 70 61 72 61 74 6f 72 29 3b 0a  (p->separator);.
e170: 20 20 20 20 69 66 28 20 6e 53 65 70 3d 3d 30 20      if( nSep==0 
e180: 29 7b 0a 20 20 20 20 20 20 66 70 72 69 6e 74 66  ){.      fprintf
e190: 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
e1a0: 20 6e 6f 6e 2d 6e 75 6c 6c 20 73 65 70 61 72 61   non-null separa
e1b0: 74 6f 72 20 72 65 71 75 69 72 65 64 20 66 6f 72  tor required for
e1c0: 20 69 6d 70 6f 72 74 5c 6e 22 29 3b 0a 20 20 20   import\n");.   
e1d0: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
e1e0: 20 7d 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71   }.    zSql = sq
e1f0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53  lite3_mprintf("S
e200: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 25 73 22  ELECT * FROM %s"
e210: 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20 69  , zTable);.    i
e220: 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20  f( zSql==0 ){.  
e230: 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65      fprintf(stde
e240: 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75 74 20  rr, "Error: out 
e250: 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20  of memory\n");. 
e260: 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
e270: 20 20 20 7d 0a 20 20 20 20 6e 42 79 74 65 20 3d     }.    nByte =
e280: 20 73 74 72 6c 65 6e 33 30 28 7a 53 71 6c 29 3b   strlen30(zSql);
e290: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
e2a0: 33 5f 70 72 65 70 61 72 65 28 70 2d 3e 64 62 2c  3_prepare(p->db,
e2b0: 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d   zSql, -1, &pStm
e2c0: 74 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  t, 0);.    sqlit
e2d0: 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20  e3_free(zSql);. 
e2e0: 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
e2f0: 20 20 20 69 66 20 28 70 53 74 6d 74 29 20 73 71     if (pStmt) sq
e300: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
e310: 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 66 70 72  Stmt);.      fpr
e320: 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72  intf(stderr,"Err
e330: 6f 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74  or: %s\n", sqlit
e340: 65 33 5f 65 72 72 6d 73 67 28 64 62 29 29 3b 0a  e3_errmsg(db));.
e350: 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
e360: 20 20 20 20 7d 0a 20 20 20 20 6e 43 6f 6c 20 3d      }.    nCol =
e370: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
e380: 63 6f 75 6e 74 28 70 53 74 6d 74 29 3b 0a 20 20  count(pStmt);.  
e390: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
e3a0: 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 70  ze(pStmt);.    p
e3b0: 53 74 6d 74 20 3d 20 30 3b 0a 20 20 20 20 69 66  Stmt = 0;.    if
e3c0: 28 20 6e 43 6f 6c 3d 3d 30 20 29 20 72 65 74 75  ( nCol==0 ) retu
e3d0: 72 6e 20 30 3b 20 2f 2a 20 6e 6f 20 63 6f 6c 75  rn 0; /* no colu
e3e0: 6d 6e 73 2c 20 6e 6f 20 65 72 72 6f 72 20 2a 2f  mns, no error */
e3f0: 0a 20 20 20 20 7a 53 71 6c 20 3d 20 6d 61 6c 6c  .    zSql = mall
e400: 6f 63 28 20 6e 42 79 74 65 20 2b 20 32 30 20 2b  oc( nByte + 20 +
e410: 20 6e 43 6f 6c 2a 32 20 29 3b 0a 20 20 20 20 69   nCol*2 );.    i
e420: 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20  f( zSql==0 ){.  
e430: 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65      fprintf(stde
e440: 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75 74 20  rr, "Error: out 
e450: 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20  of memory\n");. 
e460: 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
e470: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
e480: 5f 73 6e 70 72 69 6e 74 66 28 6e 42 79 74 65 2b  _snprintf(nByte+
e490: 32 30 2c 20 7a 53 71 6c 2c 20 22 49 4e 53 45 52  20, zSql, "INSER
e4a0: 54 20 49 4e 54 4f 20 25 73 20 56 41 4c 55 45 53  T INTO %s VALUES
e4b0: 28 3f 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20  (?", zTable);.  
e4c0: 20 20 6a 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a    j = strlen30(z
e4d0: 53 71 6c 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Sql);.    for(i=
e4e0: 31 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b 29 7b  1; i<nCol; i++){
e4f0: 0a 20 20 20 20 20 20 7a 53 71 6c 5b 6a 2b 2b 5d  .      zSql[j++]
e500: 20 3d 20 27 2c 27 3b 0a 20 20 20 20 20 20 7a 53   = ',';.      zS
e510: 71 6c 5b 6a 2b 2b 5d 20 3d 20 27 3f 27 3b 0a 20  ql[j++] = '?';. 
e520: 20 20 20 7d 0a 20 20 20 20 7a 53 71 6c 5b 6a 2b     }.    zSql[j+
e530: 2b 5d 20 3d 20 27 29 27 3b 0a 20 20 20 20 7a 53  +] = ')';.    zS
e540: 71 6c 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20 20 72  ql[j] = 0;.    r
e550: 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
e560: 61 72 65 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c  are(p->db, zSql,
e570: 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b   -1, &pStmt, 0);
e580: 0a 20 20 20 20 66 72 65 65 28 7a 53 71 6c 29 3b  .    free(zSql);
e590: 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20  .    if( rc ){. 
e5a0: 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64       fprintf(std
e5b0: 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c  err, "Error: %s\
e5c0: 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  n", sqlite3_errm
e5d0: 73 67 28 64 62 29 29 3b 0a 20 20 20 20 20 20 69  sg(db));.      i
e5e0: 66 20 28 70 53 74 6d 74 29 20 73 71 6c 69 74 65  f (pStmt) sqlite
e5f0: 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
e600: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
e610: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 6e 20  1;.    }.    in 
e620: 3d 20 66 6f 70 65 6e 28 7a 46 69 6c 65 2c 20 22  = fopen(zFile, "
e630: 72 62 22 29 3b 0a 20 20 20 20 69 66 28 20 69 6e  rb");.    if( in
e640: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 66 70 72  ==0 ){.      fpr
e650: 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
e660: 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e  ror: cannot open
e670: 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c   \"%s\"\n", zFil
e680: 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  e);.      sqlite
e690: 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
e6a0: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
e6b0: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 7a 43  1;.    }.    azC
e6c0: 6f 6c 20 3d 20 6d 61 6c 6c 6f 63 28 20 73 69 7a  ol = malloc( siz
e6d0: 65 6f 66 28 61 7a 43 6f 6c 5b 30 5d 29 2a 28 6e  eof(azCol[0])*(n
e6e0: 43 6f 6c 2b 31 29 20 29 3b 0a 20 20 20 20 69 66  Col+1) );.    if
e6f0: 28 20 61 7a 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20  ( azCol==0 ){.  
e700: 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65      fprintf(stde
e710: 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75 74 20  rr, "Error: out 
e720: 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20  of memory\n");. 
e730: 20 20 20 20 20 66 63 6c 6f 73 65 28 69 6e 29 3b       fclose(in);
e740: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
e750: 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a  inalize(pStmt);.
e760: 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
e770: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
e780: 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 42  3_exec(p->db, "B
e790: 45 47 49 4e 22 2c 20 30 2c 20 30 2c 20 30 29 3b  EGIN", 0, 0, 0);
e7a0: 0a 20 20 20 20 7a 43 6f 6d 6d 69 74 20 3d 20 22  .    zCommit = "
e7b0: 43 4f 4d 4d 49 54 22 3b 0a 20 20 20 20 77 68 69  COMMIT";.    whi
e7c0: 6c 65 28 20 28 7a 4c 69 6e 65 20 3d 20 6c 6f 63  le( (zLine = loc
e7d0: 61 6c 5f 67 65 74 6c 69 6e 65 28 30 2c 20 69 6e  al_getline(0, in
e7e0: 2c 20 31 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  , 1))!=0 ){.    
e7f0: 20 20 63 68 61 72 20 2a 7a 2c 20 63 3b 0a 20 20    char *z, c;.  
e800: 20 20 20 20 69 6e 74 20 69 6e 51 75 6f 74 65 20      int inQuote 
e810: 3d 20 30 3b 0a 20 20 20 20 20 20 6c 69 6e 65 6e  = 0;.      linen
e820: 6f 2b 2b 3b 0a 20 20 20 20 20 20 61 7a 43 6f 6c  o++;.      azCol
e830: 5b 30 5d 20 3d 20 7a 4c 69 6e 65 3b 0a 20 20 20  [0] = zLine;.   
e840: 20 20 20 66 6f 72 28 69 3d 30 2c 20 7a 3d 7a 4c     for(i=0, z=zL
e850: 69 6e 65 3b 20 28 63 20 3d 20 2a 7a 29 21 3d 30  ine; (c = *z)!=0
e860: 3b 20 7a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; z++){.        
e870: 69 66 28 20 63 3d 3d 27 22 27 20 29 20 69 6e 51  if( c=='"' ) inQ
e880: 75 6f 74 65 20 3d 20 21 69 6e 51 75 6f 74 65 3b  uote = !inQuote;
e890: 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d  .        if( c==
e8a0: 27 5c 6e 27 20 29 20 6c 69 6e 65 6e 6f 2b 2b 3b  '\n' ) lineno++;
e8b0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69 6e  .        if( !in
e8c0: 51 75 6f 74 65 20 26 26 20 63 3d 3d 70 2d 3e 73  Quote && c==p->s
e8d0: 65 70 61 72 61 74 6f 72 5b 30 5d 20 26 26 20 73  eparator[0] && s
e8e0: 74 72 6e 63 6d 70 28 7a 2c 70 2d 3e 73 65 70 61  trncmp(z,p->sepa
e8f0: 72 61 74 6f 72 2c 6e 53 65 70 29 3d 3d 30 20 29  rator,nSep)==0 )
e900: 7b 0a 20 20 20 20 20 20 20 20 20 20 2a 7a 20 3d  {.          *z =
e910: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 69 2b   0;.          i+
e920: 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  +;.          if(
e930: 20 69 3c 6e 43 6f 6c 20 29 7b 0a 20 20 20 20 20   i<nCol ){.     
e940: 20 20 20 20 20 20 20 61 7a 43 6f 6c 5b 69 5d 20         azCol[i] 
e950: 3d 20 26 7a 5b 6e 53 65 70 5d 3b 0a 20 20 20 20  = &z[nSep];.    
e960: 20 20 20 20 20 20 20 20 7a 20 2b 3d 20 6e 53 65          z += nSe
e970: 70 2d 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  p-1;.          }
e980: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
e990: 20 7d 20 2f 2a 20 65 6e 64 20 66 6f 72 20 2a 2f   } /* end for */
e9a0: 0a 20 20 20 20 20 20 2a 7a 20 3d 20 30 3b 0a 20  .      *z = 0;. 
e9b0: 20 20 20 20 20 69 66 28 20 69 2b 31 21 3d 6e 43       if( i+1!=nC
e9c0: 6f 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 66 70  ol ){.        fp
e9d0: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 0a 20 20  rintf(stderr,.  
e9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 45                "E
e9f0: 72 72 6f 72 3a 20 25 73 20 6c 69 6e 65 20 25 64  rror: %s line %d
ea00: 3a 20 65 78 70 65 63 74 65 64 20 25 64 20 63 6f  : expected %d co
ea10: 6c 75 6d 6e 73 20 6f 66 20 64 61 74 61 20 62 75  lumns of data bu
ea20: 74 20 66 6f 75 6e 64 20 25 64 5c 6e 22 2c 0a 20  t found %d\n",. 
ea30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a                 z
ea40: 46 69 6c 65 2c 20 6c 69 6e 65 6e 6f 2c 20 6e 43  File, lineno, nC
ea50: 6f 6c 2c 20 69 2b 31 29 3b 0a 20 20 20 20 20 20  ol, i+1);.      
ea60: 20 20 7a 43 6f 6d 6d 69 74 20 3d 20 22 52 4f 4c    zCommit = "ROL
ea70: 4c 42 41 43 4b 22 3b 0a 20 20 20 20 20 20 20 20  LBACK";.        
ea80: 66 72 65 65 28 7a 4c 69 6e 65 29 3b 0a 20 20 20  free(zLine);.   
ea90: 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
eaa0: 20 20 20 20 20 62 72 65 61 6b 3b 20 2f 2a 20 66       break; /* f
eab0: 72 6f 6d 20 77 68 69 6c 65 20 2a 2f 0a 20 20 20  rom while */.   
eac0: 20 20 20 7d 0a 20 20 20 20 20 20 66 6f 72 28 69     }.      for(i
ead0: 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b 29  =0; i<nCol; i++)
eae0: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 7a  {.        if( az
eaf0: 43 6f 6c 5b 69 5d 5b 30 5d 3d 3d 27 22 27 20 29  Col[i][0]=='"' )
eb00: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  {.          int 
eb10: 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  k;.          for
eb20: 28 7a 3d 61 7a 43 6f 6c 5b 69 5d 2c 20 6a 3d 31  (z=azCol[i], j=1
eb30: 2c 20 6b 3d 30 3b 20 7a 5b 6a 5d 3b 20 6a 2b 2b  , k=0; z[j]; j++
eb40: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ){.            i
eb50: 66 28 20 7a 5b 6a 5d 3d 3d 27 22 27 20 29 7b 20  f( z[j]=='"' ){ 
eb60: 6a 2b 2b 3b 20 69 66 28 20 7a 5b 6a 5d 3d 3d 30  j++; if( z[j]==0
eb70: 20 29 20 62 72 65 61 6b 3b 20 7d 0a 20 20 20 20   ) break; }.    
eb80: 20 20 20 20 20 20 20 20 7a 5b 6b 2b 2b 5d 20 3d          z[k++] =
eb90: 20 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 20 20 20   z[j];.         
eba0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7a 5b 6b   }.          z[k
ebb0: 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  ] = 0;.        }
ebc0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
ebd0: 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74  _bind_text(pStmt
ebe0: 2c 20 69 2b 31 2c 20 61 7a 43 6f 6c 5b 69 5d 2c  , i+1, azCol[i],
ebf0: 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54 41 54   -1, SQLITE_STAT
ec00: 49 43 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  IC);.      }.   
ec10: 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28     sqlite3_step(
ec20: 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 72 63  pStmt);.      rc
ec30: 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74   = sqlite3_reset
ec40: 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 66  (pStmt);.      f
ec50: 72 65 65 28 7a 4c 69 6e 65 29 3b 0a 20 20 20 20  ree(zLine);.    
ec60: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
ec70: 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 66  _OK ){.        f
ec80: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45  printf(stderr,"E
ec90: 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c  rror: %s\n", sql
eca0: 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 29  ite3_errmsg(db))
ecb0: 3b 0a 20 20 20 20 20 20 20 20 7a 43 6f 6d 6d 69  ;.        zCommi
ecc0: 74 20 3d 20 22 52 4f 4c 4c 42 41 43 4b 22 3b 0a  t = "ROLLBACK";.
ecd0: 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
ece0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 20 2f          break; /
ecf0: 2a 20 66 72 6f 6d 20 77 68 69 6c 65 20 2a 2f 0a  * from while */.
ed00: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 2f 2a        }.    } /*
ed10: 20 65 6e 64 20 77 68 69 6c 65 20 2a 2f 0a 20 20   end while */.  
ed20: 20 20 66 72 65 65 28 61 7a 43 6f 6c 29 3b 0a 20    free(azCol);. 
ed30: 20 20 20 66 63 6c 6f 73 65 28 69 6e 29 3b 0a 20     fclose(in);. 
ed40: 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c     sqlite3_final
ed50: 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  ize(pStmt);.    
ed60: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e  sqlite3_exec(p->
ed70: 64 62 2c 20 7a 43 6f 6d 6d 69 74 2c 20 30 2c 20  db, zCommit, 0, 
ed80: 30 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a  0, 0);.  }else..
ed90: 20 20 69 66 28 20 63 3d 3d 27 69 27 20 26 26 20    if( c=='i' && 
eda0: 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
edb0: 2c 20 22 69 6e 64 69 63 65 73 22 2c 20 6e 29 3d  , "indices", n)=
edc0: 3d 30 20 26 26 20 6e 41 72 67 3c 33 20 29 7b 0a  =0 && nArg<3 ){.
edd0: 20 20 20 20 73 74 72 75 63 74 20 63 61 6c 6c 62      struct callb
ede0: 61 63 6b 5f 64 61 74 61 20 64 61 74 61 3b 0a 20  ack_data data;. 
edf0: 20 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67     char *zErrMsg
ee00: 20 3d 20 30 3b 0a 20 20 20 20 6f 70 65 6e 5f 64   = 0;.    open_d
ee10: 62 28 70 29 3b 0a 20 20 20 20 6d 65 6d 63 70 79  b(p);.    memcpy
ee20: 28 26 64 61 74 61 2c 20 70 2c 20 73 69 7a 65 6f  (&data, p, sizeo
ee30: 66 28 64 61 74 61 29 29 3b 0a 20 20 20 20 64 61  f(data));.    da
ee40: 74 61 2e 73 68 6f 77 48 65 61 64 65 72 20 3d 20  ta.showHeader = 
ee50: 30 3b 0a 20 20 20 20 64 61 74 61 2e 6d 6f 64 65  0;.    data.mode
ee60: 20 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a 20 20   = MODE_List;.  
ee70: 20 20 69 66 28 20 6e 41 72 67 3d 3d 31 20 29 7b    if( nArg==1 ){
ee80: 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
ee90: 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 0a  te3_exec(p->db,.
eea0: 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20          "SELECT 
eeb0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
eec0: 5f 6d 61 73 74 65 72 20 22 0a 20 20 20 20 20 20  _master ".      
eed0: 20 20 22 57 48 45 52 45 20 74 79 70 65 3d 27 69    "WHERE type='i
eee0: 6e 64 65 78 27 20 41 4e 44 20 6e 61 6d 65 20 4e  ndex' AND name N
eef0: 4f 54 20 4c 49 4b 45 20 27 73 71 6c 69 74 65 5f  OT LIKE 'sqlite_
ef00: 25 27 20 22 0a 20 20 20 20 20 20 20 20 22 55 4e  %' ".        "UN
ef10: 49 4f 4e 20 41 4c 4c 20 22 0a 20 20 20 20 20 20  ION ALL ".      
ef20: 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 20 46    "SELECT name F
ef30: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
ef40: 6d 61 73 74 65 72 20 22 0a 20 20 20 20 20 20 20  master ".       
ef50: 20 22 57 48 45 52 45 20 74 79 70 65 3d 27 69 6e   "WHERE type='in
ef60: 64 65 78 27 20 22 0a 20 20 20 20 20 20 20 20 22  dex' ".        "
ef70: 4f 52 44 45 52 20 42 59 20 31 22 2c 0a 20 20 20  ORDER BY 1",.   
ef80: 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 2c 20 26       callback, &
ef90: 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 0a 20  data, &zErrMsg. 
efa0: 20 20 20 20 20 29 3b 0a 20 20 20 20 7d 65 6c 73       );.    }els
efb0: 65 7b 0a 20 20 20 20 20 20 7a 53 68 65 6c 6c 53  e{.      zShellS
efc0: 74 61 74 69 63 20 3d 20 61 7a 41 72 67 5b 31 5d  tatic = azArg[1]
efd0: 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
efe0: 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c  ite3_exec(p->db,
eff0: 0a 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  .        "SELECT
f000: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
f010: 65 5f 6d 61 73 74 65 72 20 22 0a 20 20 20 20 20  e_master ".     
f020: 20 20 20 22 57 48 45 52 45 20 74 79 70 65 3d 27     "WHERE type='
f030: 69 6e 64 65 78 27 20 41 4e 44 20 74 62 6c 5f 6e  index' AND tbl_n
f040: 61 6d 65 20 4c 49 4b 45 20 73 68 65 6c 6c 73 74  ame LIKE shellst
f050: 61 74 69 63 28 29 20 22 0a 20 20 20 20 20 20 20  atic() ".       
f060: 20 22 55 4e 49 4f 4e 20 41 4c 4c 20 22 0a 20 20   "UNION ALL ".  
f070: 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61        "SELECT na
f080: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
f090: 65 6d 70 5f 6d 61 73 74 65 72 20 22 0a 20 20 20  emp_master ".   
f0a0: 20 20 20 20 20 22 57 48 45 52 45 20 74 79 70 65       "WHERE type
f0b0: 3d 27 69 6e 64 65 78 27 20 41 4e 44 20 74 62 6c  ='index' AND tbl
f0c0: 5f 6e 61 6d 65 20 4c 49 4b 45 20 73 68 65 6c 6c  _name LIKE shell
f0d0: 73 74 61 74 69 63 28 29 20 22 0a 20 20 20 20 20  static() ".     
f0e0: 20 20 20 22 4f 52 44 45 52 20 42 59 20 31 22 2c     "ORDER BY 1",
f0f0: 0a 20 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63  .        callbac
f100: 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d  k, &data, &zErrM
f110: 73 67 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  sg.      );.    
f120: 20 20 7a 53 68 65 6c 6c 53 74 61 74 69 63 20 3d    zShellStatic =
f130: 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66   0;.    }.    if
f140: 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20  ( zErrMsg ){.   
f150: 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72     fprintf(stder
f160: 72 2c 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c  r,"Error: %s\n",
f170: 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20   zErrMsg);.     
f180: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45   sqlite3_free(zE
f190: 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 72 63  rrMsg);.      rc
f1a0: 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 1;.    }else 
f1b0: 69 66 28 20 72 63 20 21 3d 20 53 51 4c 49 54 45  if( rc != SQLITE
f1c0: 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 66 70 72  _OK ){.      fpr
f1d0: 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72  intf(stderr,"Err
f1e0: 6f 72 3a 20 71 75 65 72 79 69 6e 67 20 73 71 6c  or: querying sql
f1f0: 69 74 65 5f 6d 61 73 74 65 72 20 61 6e 64 20 73  ite_master and s
f200: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
f210: 72 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20  r\n");.      rc 
f220: 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  = 1;.    }.  }el
f230: 73 65 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  se..#ifdef SQLIT
f240: 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
f250: 0a 20 20 69 66 28 20 63 3d 3d 27 69 27 20 26 26  .  if( c=='i' &&
f260: 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
f270: 5d 2c 20 22 69 6f 74 72 61 63 65 22 2c 20 6e 29  ], "iotrace", n)
f280: 3d 3d 30 20 29 7b 0a 20 20 20 20 65 78 74 65 72  ==0 ){.    exter
f290: 6e 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65 33  n void (*sqlite3
f2a0: 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63  IoTrace)(const c
f2b0: 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 20 20  har*, ...);.    
f2c0: 69 66 28 20 69 6f 74 72 61 63 65 20 26 26 20 69  if( iotrace && i
f2d0: 6f 74 72 61 63 65 21 3d 73 74 64 6f 75 74 20 29  otrace!=stdout )
f2e0: 20 66 63 6c 6f 73 65 28 69 6f 74 72 61 63 65 29   fclose(iotrace)
f2f0: 3b 0a 20 20 20 20 69 6f 74 72 61 63 65 20 3d 20  ;.    iotrace = 
f300: 30 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3c  0;.    if( nArg<
f310: 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  2 ){.      sqlit
f320: 65 33 49 6f 54 72 61 63 65 20 3d 20 30 3b 0a 20  e3IoTrace = 0;. 
f330: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
f340: 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 20 22 2d  cmp(azArg[1], "-
f350: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ")==0 ){.      s
f360: 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 3d 20  qlite3IoTrace = 
f370: 69 6f 74 72 61 63 65 50 72 69 6e 74 66 3b 0a 20  iotracePrintf;. 
f380: 20 20 20 20 20 69 6f 74 72 61 63 65 20 3d 20 73       iotrace = s
f390: 74 64 6f 75 74 3b 0a 20 20 20 20 7d 65 6c 73 65  tdout;.    }else
f3a0: 7b 0a 20 20 20 20 20 20 69 6f 74 72 61 63 65 20  {.      iotrace 
f3b0: 3d 20 66 6f 70 65 6e 28 61 7a 41 72 67 5b 31 5d  = fopen(azArg[1]
f3c0: 2c 20 22 77 22 29 3b 0a 20 20 20 20 20 20 69 66  , "w");.      if
f3d0: 28 20 69 6f 74 72 61 63 65 3d 3d 30 20 29 7b 0a  ( iotrace==0 ){.
f3e0: 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28          fprintf(
f3f0: 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
f400: 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73  cannot open \"%s
f410: 5c 22 5c 6e 22 2c 20 61 7a 41 72 67 5b 31 5d 29  \"\n", azArg[1])
f420: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
f430: 33 49 6f 54 72 61 63 65 20 3d 20 30 3b 0a 20 20  3IoTrace = 0;.  
f440: 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
f450: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
f460: 20 20 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63     sqlite3IoTrac
f470: 65 20 3d 20 69 6f 74 72 61 63 65 50 72 69 6e 74  e = iotracePrint
f480: 66 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  f;.      }.    }
f490: 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
f4a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
f4b0: 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
f4c0: 49 4f 4e 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27  ION.  if( c=='l'
f4d0: 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
f4e0: 67 5b 30 5d 2c 20 22 6c 6f 61 64 22 2c 20 6e 29  g[0], "load", n)
f4f0: 3d 3d 30 20 26 26 20 6e 41 72 67 3e 3d 32 20 29  ==0 && nArg>=2 )
f500: 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
f510: 20 2a 7a 46 69 6c 65 2c 20 2a 7a 50 72 6f 63 3b   *zFile, *zProc;
f520: 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  .    char *zErrM
f530: 73 67 20 3d 20 30 3b 0a 20 20 20 20 7a 46 69 6c  sg = 0;.    zFil
f540: 65 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20  e = azArg[1];.  
f550: 20 20 7a 50 72 6f 63 20 3d 20 6e 41 72 67 3e 3d    zProc = nArg>=
f560: 33 20 3f 20 61 7a 41 72 67 5b 32 5d 20 3a 20 30  3 ? azArg[2] : 0
f570: 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 29  ;.    open_db(p)
f580: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
f590: 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  e3_load_extensio
f5a0: 6e 28 70 2d 3e 64 62 2c 20 7a 46 69 6c 65 2c 20  n(p->db, zFile, 
f5b0: 7a 50 72 6f 63 2c 20 26 7a 45 72 72 4d 73 67 29  zProc, &zErrMsg)
f5c0: 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
f5d0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
f5e0: 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c   fprintf(stderr,
f5f0: 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20   "Error: %s\n", 
f600: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20  zErrMsg);.      
f610: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72  sqlite3_free(zEr
f620: 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 72 63 20  rMsg);.      rc 
f630: 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  = 1;.    }.  }el
f640: 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  se.#endif..  if(
f650: 20 63 3d 3d 27 6c 27 20 26 26 20 73 74 72 6e 63   c=='l' && strnc
f660: 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6c 6f  mp(azArg[0], "lo
f670: 67 22 2c 20 6e 29 3d 3d 30 20 26 26 20 6e 41 72  g", n)==0 && nAr
f680: 67 3e 3d 32 20 29 7b 0a 20 20 20 20 63 6f 6e 73  g>=2 ){.    cons
f690: 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 20 3d 20  t char *zFile = 
f6a0: 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 6f 75  azArg[1];.    ou
f6b0: 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73 65 28  tput_file_close(
f6c0: 70 2d 3e 70 4c 6f 67 29 3b 0a 20 20 20 20 70 2d  p->pLog);.    p-
f6d0: 3e 70 4c 6f 67 20 3d 20 6f 75 74 70 75 74 5f 66  >pLog = output_f
f6e0: 69 6c 65 5f 6f 70 65 6e 28 7a 46 69 6c 65 29 3b  ile_open(zFile);
f6f0: 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
f700: 63 3d 3d 27 6d 27 20 26 26 20 73 74 72 6e 63 6d  c=='m' && strncm
f710: 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6d 6f 64  p(azArg[0], "mod
f720: 65 22 2c 20 6e 29 3d 3d 30 20 26 26 20 6e 41 72  e", n)==0 && nAr
f730: 67 3d 3d 32 20 29 7b 0a 20 20 20 20 69 6e 74 20  g==2 ){.    int 
f740: 6e 32 20 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a  n2 = strlen30(az
f750: 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 69 66 28  Arg[1]);.    if(
f760: 20 28 6e 32 3d 3d 34 20 26 26 20 73 74 72 6e 63   (n2==4 && strnc
f770: 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 69 6e  mp(azArg[1],"lin
f780: 65 22 2c 6e 32 29 3d 3d 30 29 0a 20 20 20 20 20  e",n2)==0).     
f790: 20 20 20 7c 7c 0a 20 20 20 20 20 20 20 20 28 6e     ||.        (n
f7a0: 32 3d 3d 35 20 26 26 20 73 74 72 6e 63 6d 70 28  2==5 && strncmp(
f7b0: 61 7a 41 72 67 5b 31 5d 2c 22 6c 69 6e 65 73 22  azArg[1],"lines"
f7c0: 2c 6e 32 29 3d 3d 30 29 20 29 7b 0a 20 20 20 20  ,n2)==0) ){.    
f7d0: 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45    p->mode = MODE
f7e0: 5f 4c 69 6e 65 3b 0a 20 20 20 20 7d 65 6c 73 65  _Line;.    }else
f7f0: 20 69 66 28 20 28 6e 32 3d 3d 36 20 26 26 20 73   if( (n2==6 && s
f800: 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c  trncmp(azArg[1],
f810: 22 63 6f 6c 75 6d 6e 22 2c 6e 32 29 3d 3d 30 29  "column",n2)==0)
f820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c  .              |
f830: 7c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  |.              
f840: 28 6e 32 3d 3d 37 20 26 26 20 73 74 72 6e 63 6d  (n2==7 && strncm
f850: 70 28 61 7a 41 72 67 5b 31 5d 2c 22 63 6f 6c 75  p(azArg[1],"colu
f860: 6d 6e 73 22 2c 6e 32 29 3d 3d 30 29 20 29 7b 0a  mns",n2)==0) ){.
f870: 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20        p->mode = 
f880: 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3b 0a 20 20 20  MODE_Column;.   
f890: 20 7d 65 6c 73 65 20 69 66 28 20 6e 32 3d 3d 34   }else if( n2==4
f8a0: 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
f8b0: 67 5b 31 5d 2c 22 6c 69 73 74 22 2c 6e 32 29 3d  g[1],"list",n2)=
f8c0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d  =0 ){.      p->m
f8d0: 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b  ode = MODE_List;
f8e0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6e  .    }else if( n
f8f0: 32 3d 3d 34 20 26 26 20 73 74 72 6e 63 6d 70 28  2==4 && strncmp(
f900: 61 7a 41 72 67 5b 31 5d 2c 22 68 74 6d 6c 22 2c  azArg[1],"html",
f910: 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  n2)==0 ){.      
f920: 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 48  p->mode = MODE_H
f930: 74 6d 6c 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  tml;.    }else i
f940: 66 28 20 6e 32 3d 3d 33 20 26 26 20 73 74 72 6e  f( n2==3 && strn
f950: 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 74 63  cmp(azArg[1],"tc
f960: 6c 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20  l",n2)==0 ){.   
f970: 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44     p->mode = MOD
f980: 45 5f 54 63 6c 3b 0a 20 20 20 20 20 20 73 71 6c  E_Tcl;.      sql
f990: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
f9a0: 7a 65 6f 66 28 70 2d 3e 73 65 70 61 72 61 74 6f  zeof(p->separato
f9b0: 72 29 2c 20 70 2d 3e 73 65 70 61 72 61 74 6f 72  r), p->separator
f9c0: 2c 20 22 20 22 29 3b 0a 20 20 20 20 7d 65 6c 73  , " ");.    }els
f9d0: 65 20 69 66 28 20 6e 32 3d 3d 33 20 26 26 20 73  e if( n2==3 && s
f9e0: 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c  trncmp(azArg[1],
f9f0: 22 63 73 76 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a  "csv",n2)==0 ){.
fa00: 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20        p->mode = 
fa10: 4d 4f 44 45 5f 43 73 76 3b 0a 20 20 20 20 20 20  MODE_Csv;.      
fa20: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
fa30: 28 73 69 7a 65 6f 66 28 70 2d 3e 73 65 70 61 72  (sizeof(p->separ
fa40: 61 74 6f 72 29 2c 20 70 2d 3e 73 65 70 61 72 61  ator), p->separa
fa50: 74 6f 72 2c 20 22 2c 22 29 3b 0a 20 20 20 20 7d  tor, ",");.    }
fa60: 65 6c 73 65 20 69 66 28 20 6e 32 3d 3d 34 20 26  else if( n2==4 &
fa70: 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
fa80: 31 5d 2c 22 74 61 62 73 22 2c 6e 32 29 3d 3d 30  1],"tabs",n2)==0
fa90: 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64   ){.      p->mod
faa0: 65 20 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a 20  e = MODE_List;. 
fab0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
fac0: 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e  rintf(sizeof(p->
fad0: 73 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 73  separator), p->s
fae0: 65 70 61 72 61 74 6f 72 2c 20 22 5c 74 22 29 3b  eparator, "\t");
faf0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6e  .    }else if( n
fb00: 32 3d 3d 36 20 26 26 20 73 74 72 6e 63 6d 70 28  2==6 && strncmp(
fb10: 61 7a 41 72 67 5b 31 5d 2c 22 69 6e 73 65 72 74  azArg[1],"insert
fb20: 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ",n2)==0 ){.    
fb30: 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45    p->mode = MODE
fb40: 5f 49 6e 73 65 72 74 3b 0a 20 20 20 20 20 20 73  _Insert;.      s
fb50: 65 74 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 70 2c  et_table_name(p,
fb60: 20 22 74 61 62 6c 65 22 29 3b 0a 20 20 20 20 7d   "table");.    }
fb70: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 66 70 72  else {.      fpr
fb80: 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72  intf(stderr,"Err
fb90: 6f 72 3a 20 6d 6f 64 65 20 73 68 6f 75 6c 64 20  or: mode should 
fba0: 62 65 20 6f 6e 65 20 6f 66 3a 20 22 0a 20 20 20  be one of: ".   
fbb0: 20 20 20 20 20 20 22 63 6f 6c 75 6d 6e 20 63 73        "column cs
fbc0: 76 20 68 74 6d 6c 20 69 6e 73 65 72 74 20 6c 69  v html insert li
fbd0: 6e 65 20 6c 69 73 74 20 74 61 62 73 20 74 63 6c  ne list tabs tcl
fbe0: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
fbf0: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
fc00: 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6d 27 20  e..  if( c=='m' 
fc10: 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
fc20: 5b 30 5d 2c 20 22 6d 6f 64 65 22 2c 20 6e 29 3d  [0], "mode", n)=
fc30: 3d 30 20 26 26 20 6e 41 72 67 3d 3d 33 20 29 7b  =0 && nArg==3 ){
fc40: 0a 20 20 20 20 69 6e 74 20 6e 32 20 3d 20 73 74  .    int n2 = st
fc50: 72 6c 65 6e 33 30 28 61 7a 41 72 67 5b 31 5d 29  rlen30(azArg[1])
fc60: 3b 0a 20 20 20 20 69 66 28 20 6e 32 3d 3d 36 20  ;.    if( n2==6 
fc70: 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
fc80: 5b 31 5d 2c 22 69 6e 73 65 72 74 22 2c 6e 32 29  [1],"insert",n2)
fc90: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  ==0 ){.      p->
fca0: 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 49 6e 73 65  mode = MODE_Inse
fcb0: 72 74 3b 0a 20 20 20 20 20 20 73 65 74 5f 74 61  rt;.      set_ta
fcc0: 62 6c 65 5f 6e 61 6d 65 28 70 2c 20 61 7a 41 72  ble_name(p, azAr
fcd0: 67 5b 32 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65  g[2]);.    }else
fce0: 20 7b 0a 20 20 20 20 20 20 66 70 72 69 6e 74 66   {.      fprintf
fcf0: 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
fd00: 20 69 6e 76 61 6c 69 64 20 61 72 67 75 6d 65 6e   invalid argumen
fd10: 74 73 3a 20 22 0a 20 20 20 20 20 20 20 20 22 20  ts: ".        " 
fd20: 5c 22 25 73 5c 22 2e 20 45 6e 74 65 72 20 5c 22  \"%s\". Enter \"
fd30: 2e 68 65 6c 70 5c 22 20 66 6f 72 20 68 65 6c 70  .help\" for help
fd40: 5c 6e 22 2c 20 61 7a 41 72 67 5b 32 5d 29 3b 0a  \n", azArg[2]);.
fd50: 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
fd60: 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
fd70: 66 28 20 63 3d 3d 27 6e 27 20 26 26 20 73 74 72  f( c=='n' && str
fd80: 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
fd90: 6e 75 6c 6c 76 61 6c 75 65 22 2c 20 6e 29 3d 3d  nullvalue", n)==
fda0: 30 20 26 26 20 6e 41 72 67 3d 3d 32 20 29 20 7b  0 && nArg==2 ) {
fdb0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
fdc0: 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e  rintf(sizeof(p->
fdd0: 6e 75 6c 6c 76 61 6c 75 65 29 2c 20 70 2d 3e 6e  nullvalue), p->n
fde0: 75 6c 6c 76 61 6c 75 65 2c 0a 20 20 20 20 20 20  ullvalue,.      
fdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
fe00: 25 2e 2a 73 22 2c 20 28 69 6e 74 29 41 72 72 61  %.*s", (int)Arra
fe10: 79 53 69 7a 65 28 70 2d 3e 6e 75 6c 6c 76 61 6c  ySize(p->nullval
fe20: 75 65 29 2d 31 2c 20 61 7a 41 72 67 5b 31 5d 29  ue)-1, azArg[1])
fe30: 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  ;.  }else..  if(
fe40: 20 63 3d 3d 27 6f 27 20 26 26 20 73 74 72 6e 63   c=='o' && strnc
fe50: 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6f 75  mp(azArg[0], "ou
fe60: 74 70 75 74 22 2c 20 6e 29 3d 3d 30 20 26 26 20  tput", n)==0 && 
fe70: 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 69  nArg==2 ){.    i
fe80: 66 28 20 70 2d 3e 6f 75 74 66 69 6c 65 5b 30 5d  f( p->outfile[0]
fe90: 3d 3d 27 7c 27 20 29 7b 0a 20 20 20 20 20 20 70  =='|' ){.      p
fea0: 63 6c 6f 73 65 28 70 2d 3e 6f 75 74 29 3b 0a 20  close(p->out);. 
feb0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
fec0: 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73  output_file_clos
fed0: 65 28 70 2d 3e 6f 75 74 29 3b 0a 20 20 20 20 7d  e(p->out);.    }
fee0: 0a 20 20 20 20 70 2d 3e 6f 75 74 66 69 6c 65 5b  .    p->outfile[
fef0: 30 5d 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  0] = 0;.    if( 
ff00: 61 7a 41 72 67 5b 31 5d 5b 30 5d 3d 3d 27 7c 27  azArg[1][0]=='|'
ff10: 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74   ){.      p->out
ff20: 20 3d 20 70 6f 70 65 6e 28 26 61 7a 41 72 67 5b   = popen(&azArg[
ff30: 31 5d 5b 31 5d 2c 20 22 77 22 29 3b 0a 20 20 20  1][1], "w");.   
ff40: 20 20 20 69 66 28 20 70 2d 3e 6f 75 74 3d 3d 30     if( p->out==0
ff50: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 70 72 69   ){.        fpri
ff60: 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f  ntf(stderr,"Erro
ff70: 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 70  r: cannot open p
ff80: 69 70 65 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 26  ipe \"%s\"\n", &
ff90: 61 7a 41 72 67 5b 31 5d 5b 31 5d 29 3b 0a 20 20  azArg[1][1]);.  
ffa0: 20 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 73        p->out = s
ffb0: 74 64 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 72  tdout;.        r
ffc0: 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c  c = 1;.      }el
ffd0: 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
ffe0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a  te3_snprintf(siz
fff0: 65 6f 66 28 70 2d 3e 6f 75 74 66 69 6c 65 29 2c  eof(p->outfile),
10000 20 70 2d 3e 6f 75 74 66 69 6c 65 2c 20 22 25 73   p->outfile, "%s
10010 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20  ", azArg[1]);.  
10020 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
10030 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20  .      p->out = 
10040 6f 75 74 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e  output_file_open
10050 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20  (azArg[1]);.    
10060 20 20 69 66 28 20 70 2d 3e 6f 75 74 3d 3d 30 20    if( p->out==0 
10070 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  ){.        if( s
10080 74 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22  trcmp(azArg[1],"
10090 6f 66 66 22 29 21 3d 30 20 29 7b 0a 20 20 20 20  off")!=0 ){.    
100a0 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74        fprintf(st
100b0 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 63 61 6e  derr,"Error: can
100c0 6e 6f 74 20 77 72 69 74 65 20 74 6f 20 5c 22 25  not write to \"%
100d0 73 5c 22 5c 6e 22 2c 20 61 7a 41 72 67 5b 31 5d  s\"\n", azArg[1]
100e0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
100f0 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 73 74       p->out = st
10100 64 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 72 63  dout;.        rc
10110 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 20 65 6c   = 1;.      } el
10120 73 65 20 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  se {.        sql
10130 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
10140 7a 65 6f 66 28 70 2d 3e 6f 75 74 66 69 6c 65 29  zeof(p->outfile)
10150 2c 20 70 2d 3e 6f 75 74 66 69 6c 65 2c 20 22 25  , p->outfile, "%
10160 73 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  s", azArg[1]);. 
10170 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
10180 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
10190 70 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74  p' && n>=3 && st
101a0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
101b0 22 70 72 69 6e 74 22 2c 20 6e 29 3d 3d 30 20 29  "print", n)==0 )
101c0 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
101d0 20 66 6f 72 28 69 3d 31 3b 20 69 3c 6e 41 72 67   for(i=1; i<nArg
101e0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66  ; i++){.      if
101f0 28 20 69 3e 31 20 29 20 66 70 72 69 6e 74 66 28  ( i>1 ) fprintf(
10200 70 2d 3e 6f 75 74 2c 20 22 20 22 29 3b 0a 20 20  p->out, " ");.  
10210 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f      fprintf(p->o
10220 75 74 2c 20 22 25 73 22 2c 20 61 7a 41 72 67 5b  ut, "%s", azArg[
10230 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66  i]);.    }.    f
10240 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
10250 5c 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20  \n");.  }else.. 
10260 20 69 66 28 20 63 3d 3d 27 70 27 20 26 26 20 73   if( c=='p' && s
10270 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
10280 20 22 70 72 6f 6d 70 74 22 2c 20 6e 29 3d 3d 30   "prompt", n)==0
10290 20 26 26 20 28 6e 41 72 67 3d 3d 32 20 7c 7c 20   && (nArg==2 || 
102a0 6e 41 72 67 3d 3d 33 29 29 7b 0a 20 20 20 20 69  nArg==3)){.    i
102b0 66 28 20 6e 41 72 67 20 3e 3d 20 32 29 20 7b 0a  f( nArg >= 2) {.
102c0 20 20 20 20 20 20 73 74 72 6e 63 70 79 28 6d 61        strncpy(ma
102d0 69 6e 50 72 6f 6d 70 74 2c 61 7a 41 72 67 5b 31  inPrompt,azArg[1
102e0 5d 2c 28 69 6e 74 29 41 72 72 61 79 53 69 7a 65  ],(int)ArraySize
102f0 28 6d 61 69 6e 50 72 6f 6d 70 74 29 2d 31 29 3b  (mainPrompt)-1);
10300 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e  .    }.    if( n
10310 41 72 67 20 3e 3d 20 33 29 20 7b 0a 20 20 20 20  Arg >= 3) {.    
10320 20 20 73 74 72 6e 63 70 79 28 63 6f 6e 74 69 6e    strncpy(contin
10330 75 65 50 72 6f 6d 70 74 2c 61 7a 41 72 67 5b 32  uePrompt,azArg[2
10340 5d 2c 28 69 6e 74 29 41 72 72 61 79 53 69 7a 65  ],(int)ArraySize
10350 28 63 6f 6e 74 69 6e 75 65 50 72 6f 6d 70 74 29  (continuePrompt)
10360 2d 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  -1);.    }.  }el
10370 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 71 27  se..  if( c=='q'
10380 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
10390 67 5b 30 5d 2c 20 22 71 75 69 74 22 2c 20 6e 29  g[0], "quit", n)
103a0 3d 3d 30 20 26 26 20 6e 41 72 67 3d 3d 31 20 29  ==0 && nArg==1 )
103b0 7b 0a 20 20 20 20 72 63 20 3d 20 32 3b 0a 20 20  {.    rc = 2;.  
103c0 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
103d0 27 72 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73  'r' && n>=3 && s
103e0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
103f0 20 22 72 65 61 64 22 2c 20 6e 29 3d 3d 30 20 26   "read", n)==0 &
10400 26 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20  & nArg==2 ){.   
10410 20 46 49 4c 45 20 2a 61 6c 74 20 3d 20 66 6f 70   FILE *alt = fop
10420 65 6e 28 61 7a 41 72 67 5b 31 5d 2c 20 22 72 62  en(azArg[1], "rb
10430 22 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 74 3d  ");.    if( alt=
10440 3d 30 20 29 7b 0a 20 20 20 20 20 20 66 70 72 69  =0 ){.      fpri
10450 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f  ntf(stderr,"Erro
10460 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c  r: cannot open \
10470 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72 67 5b  "%s\"\n", azArg[
10480 31 5d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  1]);.      rc = 
10490 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
104a0 20 20 20 20 72 63 20 3d 20 70 72 6f 63 65 73 73      rc = process
104b0 5f 69 6e 70 75 74 28 70 2c 20 61 6c 74 29 3b 0a  _input(p, alt);.
104c0 20 20 20 20 20 20 66 63 6c 6f 73 65 28 61 6c 74        fclose(alt
104d0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
104e0 0a 0a 20 20 69 66 28 20 63 3d 3d 27 72 27 20 26  ..  if( c=='r' &
104f0 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d  & n>=3 && strncm
10500 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 72 65 73  p(azArg[0], "res
10510 74 6f 72 65 22 2c 20 6e 29 3d 3d 30 20 26 26 20  tore", n)==0 && 
10520 6e 41 72 67 3e 31 20 26 26 20 6e 41 72 67 3c 34  nArg>1 && nArg<4
10530 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  ){.    const cha
10540 72 20 2a 7a 53 72 63 46 69 6c 65 3b 0a 20 20 20  r *zSrcFile;.   
10550 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
10560 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 2a 70  ;.    sqlite3 *p
10570 53 72 63 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Src;.    sqlite3
10580 5f 62 61 63 6b 75 70 20 2a 70 42 61 63 6b 75 70  _backup *pBackup
10590 3b 0a 20 20 20 20 69 6e 74 20 6e 54 69 6d 65 6f  ;.    int nTimeo
105a0 75 74 20 3d 20 30 3b 0a 0a 20 20 20 20 69 66 28  ut = 0;..    if(
105b0 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20   nArg==2 ){.    
105c0 20 20 7a 53 72 63 46 69 6c 65 20 3d 20 61 7a 41    zSrcFile = azA
105d0 72 67 5b 31 5d 3b 0a 20 20 20 20 20 20 7a 44 62  rg[1];.      zDb
105e0 20 3d 20 22 6d 61 69 6e 22 3b 0a 20 20 20 20 7d   = "main";.    }
105f0 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 53 72 63  else{.      zSrc
10600 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b 32 5d 3b  File = azArg[2];
10610 0a 20 20 20 20 20 20 7a 44 62 20 3d 20 61 7a 41  .      zDb = azA
10620 72 67 5b 31 5d 3b 0a 20 20 20 20 7d 0a 20 20 20  rg[1];.    }.   
10630 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70   rc = sqlite3_op
10640 65 6e 28 7a 53 72 63 46 69 6c 65 2c 20 26 70 53  en(zSrcFile, &pS
10650 72 63 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  rc);.    if( rc!
10660 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
10670 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65      fprintf(stde
10680 72 72 2c 20 22 45 72 72 6f 72 3a 20 63 61 6e 6e  rr, "Error: cann
10690 6f 74 20 6f 70 65 6e 20 5c 22 25 73 5c 22 5c 6e  ot open \"%s\"\n
106a0 22 2c 20 7a 53 72 63 46 69 6c 65 29 3b 0a 20 20  ", zSrcFile);.  
106b0 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73      sqlite3_clos
106c0 65 28 70 53 72 63 29 3b 0a 20 20 20 20 20 20 72  e(pSrc);.      r
106d0 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
106e0 20 20 20 6f 70 65 6e 5f 64 62 28 70 29 3b 0a 20     open_db(p);. 
106f0 20 20 20 70 42 61 63 6b 75 70 20 3d 20 73 71 6c     pBackup = sql
10700 69 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69 74  ite3_backup_init
10710 28 70 2d 3e 64 62 2c 20 7a 44 62 2c 20 70 53 72  (p->db, zDb, pSr
10720 63 2c 20 22 6d 61 69 6e 22 29 3b 0a 20 20 20 20  c, "main");.    
10730 69 66 28 20 70 42 61 63 6b 75 70 3d 3d 30 20 29  if( pBackup==0 )
10740 7b 0a 20 20 20 20 20 20 66 70 72 69 6e 74 66 28  {.      fprintf(
10750 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
10760 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65  %s\n", sqlite3_e
10770 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20  rrmsg(p->db));. 
10780 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f       sqlite3_clo
10790 73 65 28 70 53 72 63 29 3b 0a 20 20 20 20 20 20  se(pSrc);.      
107a0 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a  return 1;.    }.
107b0 20 20 20 20 77 68 69 6c 65 28 20 28 72 63 20 3d      while( (rc =
107c0 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f   sqlite3_backup_
107d0 73 74 65 70 28 70 42 61 63 6b 75 70 2c 31 30 30  step(pBackup,100
107e0 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  ))==SQLITE_OK.  
107f0 20 20 20 20 20 20 20 20 7c 7c 20 72 63 3d 3d 53          || rc==S
10800 51 4c 49 54 45 5f 42 55 53 59 20 20 29 7b 0a 20  QLITE_BUSY  ){. 
10810 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
10820 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
10830 20 20 20 20 69 66 28 20 6e 54 69 6d 65 6f 75 74      if( nTimeout
10840 2b 2b 20 3e 3d 20 33 20 29 20 62 72 65 61 6b 3b  ++ >= 3 ) break;
10850 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
10860 5f 73 6c 65 65 70 28 31 30 30 29 3b 0a 20 20 20  _sleep(100);.   
10870 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
10880 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69  qlite3_backup_fi
10890 6e 69 73 68 28 70 42 61 63 6b 75 70 29 3b 0a 20  nish(pBackup);. 
108a0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
108b0 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20  E_DONE ){.      
108c0 72 63 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73  rc = 0;.    }els
108d0 65 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45  e if( rc==SQLITE
108e0 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c  _BUSY || rc==SQL
108f0 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20  ITE_LOCKED ){.  
10900 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65      fprintf(stde
10910 72 72 2c 20 22 45 72 72 6f 72 3a 20 73 6f 75 72  rr, "Error: sour
10920 63 65 20 64 61 74 61 62 61 73 65 20 69 73 20 62  ce database is b
10930 75 73 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  usy\n");.      r
10940 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  c = 1;.    }else
10950 7b 0a 20 20 20 20 20 20 66 70 72 69 6e 74 66 28  {.      fprintf(
10960 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
10970 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65  %s\n", sqlite3_e
10980 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20  rrmsg(p->db));. 
10990 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
109a0 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63   }.    sqlite3_c
109b0 6c 6f 73 65 28 70 53 72 63 29 3b 0a 20 20 7d 65  lose(pSrc);.  }e
109c0 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73  lse..  if( c=='s
109d0 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
109e0 72 67 5b 30 5d 2c 20 22 73 63 68 65 6d 61 22 2c  rg[0], "schema",
109f0 20 6e 29 3d 3d 30 20 26 26 20 6e 41 72 67 3c 33   n)==0 && nArg<3
10a00 20 29 7b 0a 20 20 20 20 73 74 72 75 63 74 20 63   ){.    struct c
10a10 61 6c 6c 62 61 63 6b 5f 64 61 74 61 20 64 61 74  allback_data dat
10a20 61 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72  a;.    char *zEr
10a30 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 6f 70  rMsg = 0;.    op
10a40 65 6e 5f 64 62 28 70 29 3b 0a 20 20 20 20 6d 65  en_db(p);.    me
10a50 6d 63 70 79 28 26 64 61 74 61 2c 20 70 2c 20 73  mcpy(&data, p, s
10a60 69 7a 65 6f 66 28 64 61 74 61 29 29 3b 0a 20 20  izeof(data));.  
10a70 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61 64 65    data.showHeade
10a80 72 20 3d 20 30 3b 0a 20 20 20 20 64 61 74 61 2e  r = 0;.    data.
10a90 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 53 65 6d 69  mode = MODE_Semi
10aa0 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e 31  ;.    if( nArg>1
10ab0 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b   ){.      int i;
10ac0 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
10ad0 61 7a 41 72 67 5b 31 5d 5b 69 5d 3b 20 69 2b 2b  azArg[1][i]; i++
10ae0 29 20 61 7a 41 72 67 5b 31 5d 5b 69 5d 20 3d 20  ) azArg[1][i] = 
10af0 54 6f 4c 6f 77 65 72 28 61 7a 41 72 67 5b 31 5d  ToLower(azArg[1]
10b00 5b 69 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20  [i]);.      if( 
10b10 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c  strcmp(azArg[1],
10b20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 29  "sqlite_master")
10b30 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 63  ==0 ){.        c
10b40 68 61 72 20 2a 6e 65 77 5f 61 72 67 76 5b 32 5d  har *new_argv[2]
10b50 2c 20 2a 6e 65 77 5f 63 6f 6c 76 5b 32 5d 3b 0a  , *new_colv[2];.
10b60 20 20 20 20 20 20 20 20 6e 65 77 5f 61 72 67 76          new_argv
10b70 5b 30 5d 20 3d 20 22 43 52 45 41 54 45 20 54 41  [0] = "CREATE TA
10b80 42 4c 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  BLE sqlite_maste
10b90 72 20 28 5c 6e 22 0a 20 20 20 20 20 20 20 20 20  r (\n".         
10ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20               "  
10bb0 74 79 70 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20  type text,\n".  
10bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bd0 20 20 20 20 22 20 20 6e 61 6d 65 20 74 65 78 74      "  name text
10be0 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20  ,\n".           
10bf0 20 20 20 20 20 20 20 20 20 20 20 22 20 20 74 62             "  tb
10c00 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a  l_name text,\n".
10c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c20 20 20 20 20 20 20 22 20 20 72 6f 6f 74 70 61 67        "  rootpag
10c30 65 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20  e integer,\n".  
10c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c50 20 20 20 20 22 20 20 73 71 6c 20 74 65 78 74 5c      "  sql text\
10c60 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n".             
10c70 20 20 20 20 20 20 20 20 20 22 29 22 3b 0a 20 20           ")";.  
10c80 20 20 20 20 20 20 6e 65 77 5f 61 72 67 76 5b 31        new_argv[1
10c90 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 6e  ] = 0;.        n
10ca0 65 77 5f 63 6f 6c 76 5b 30 5d 20 3d 20 22 73 71  ew_colv[0] = "sq
10cb0 6c 22 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f  l";.        new_
10cc0 63 6f 6c 76 5b 31 5d 20 3d 20 30 3b 0a 20 20 20  colv[1] = 0;.   
10cd0 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 28 26 64       callback(&d
10ce0 61 74 61 2c 20 31 2c 20 6e 65 77 5f 61 72 67 76  ata, 1, new_argv
10cf0 2c 20 6e 65 77 5f 63 6f 6c 76 29 3b 0a 20 20 20  , new_colv);.   
10d00 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
10d10 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  _OK;.      }else
10d20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 41 72   if( strcmp(azAr
10d30 67 5b 31 5d 2c 22 73 71 6c 69 74 65 5f 74 65 6d  g[1],"sqlite_tem
10d40 70 5f 6d 61 73 74 65 72 22 29 3d 3d 30 20 29 7b  p_master")==0 ){
10d50 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 6e  .        char *n
10d60 65 77 5f 61 72 67 76 5b 32 5d 2c 20 2a 6e 65 77  ew_argv[2], *new
10d70 5f 63 6f 6c 76 5b 32 5d 3b 0a 20 20 20 20 20 20  _colv[2];.      
10d80 20 20 6e 65 77 5f 61 72 67 76 5b 30 5d 20 3d 20    new_argv[0] = 
10d90 22 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42  "CREATE TEMP TAB
10da0 4c 45 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  LE sqlite_temp_m
10db0 61 73 74 65 72 20 28 5c 6e 22 0a 20 20 20 20 20  aster (\n".     
10dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10dd0 20 22 20 20 74 79 70 65 20 74 65 78 74 2c 5c 6e   "  type text,\n
10de0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
10df0 20 20 20 20 20 20 20 20 22 20 20 6e 61 6d 65 20          "  name 
10e00 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 20 20  text,\n".       
10e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
10e20 20 20 74 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c    tbl_name text,
10e30 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  \n".            
10e40 20 20 20 20 20 20 20 20 20 20 22 20 20 72 6f 6f            "  roo
10e50 74 70 61 67 65 20 69 6e 74 65 67 65 72 2c 5c 6e  tpage integer,\n
10e60 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
10e70 20 20 20 20 20 20 20 20 22 20 20 73 71 6c 20 74          "  sql t
10e80 65 78 74 5c 6e 22 0a 20 20 20 20 20 20 20 20 20  ext\n".         
10e90 20 20 20 20 20 20 20 20 20 20 20 20 20 22 29 22               ")"
10ea0 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 61 72  ;.        new_ar
10eb0 67 76 5b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20  gv[1] = 0;.     
10ec0 20 20 20 6e 65 77 5f 63 6f 6c 76 5b 30 5d 20 3d     new_colv[0] =
10ed0 20 22 73 71 6c 22 3b 0a 20 20 20 20 20 20 20 20   "sql";.        
10ee0 6e 65 77 5f 63 6f 6c 76 5b 31 5d 20 3d 20 30 3b  new_colv[1] = 0;
10ef0 0a 20 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63  .        callbac
10f00 6b 28 26 64 61 74 61 2c 20 31 2c 20 6e 65 77 5f  k(&data, 1, new_
10f10 61 72 67 76 2c 20 6e 65 77 5f 63 6f 6c 76 29 3b  argv, new_colv);
10f20 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
10f30 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d  LITE_OK;.      }
10f40 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 53  else{.        zS
10f50 68 65 6c 6c 53 74 61 74 69 63 20 3d 20 61 7a 41  hellStatic = azA
10f60 72 67 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 72  rg[1];.        r
10f70 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
10f80 28 70 2d 3e 64 62 2c 0a 20 20 20 20 20 20 20 20  (p->db,.        
10f90 20 20 22 53 45 4c 45 43 54 20 73 71 6c 20 46 52    "SELECT sql FR
10fa0 4f 4d 20 22 0a 20 20 20 20 20 20 20 20 20 20 22  OM ".          "
10fb0 20 20 28 53 45 4c 45 43 54 20 73 71 6c 20 73 71    (SELECT sql sq
10fc0 6c 2c 20 74 79 70 65 20 74 79 70 65 2c 20 74 62  l, type type, tb
10fd0 6c 5f 6e 61 6d 65 20 74 62 6c 5f 6e 61 6d 65 2c  l_name tbl_name,
10fe0 20 6e 61 6d 65 20 6e 61 6d 65 2c 20 72 6f 77 69   name name, rowi
10ff0 64 20 78 22 0a 20 20 20 20 20 20 20 20 20 20 22  d x".          "
11000 20 20 20 20 20 46 52 4f 4d 20 73 71 6c 69 74 65       FROM sqlite
11010 5f 6d 61 73 74 65 72 20 55 4e 49 4f 4e 20 41 4c  _master UNION AL
11020 4c 22 0a 20 20 20 20 20 20 20 20 20 20 22 20 20  L".          "  
11030 20 53 45 4c 45 43 54 20 73 71 6c 2c 20 74 79 70   SELECT sql, typ
11040 65 2c 20 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d  e, tbl_name, nam
11050 65 2c 20 72 6f 77 69 64 20 46 52 4f 4d 20 73 71  e, rowid FROM sq
11060 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
11070 29 20 22 0a 20 20 20 20 20 20 20 20 20 20 22 57  ) ".          "W
11080 48 45 52 45 20 6c 6f 77 65 72 28 74 62 6c 5f 6e  HERE lower(tbl_n
11090 61 6d 65 29 20 4c 49 4b 45 20 73 68 65 6c 6c 73  ame) LIKE shells
110a0 74 61 74 69 63 28 29 22 0a 20 20 20 20 20 20 20  tatic()".       
110b0 20 20 20 22 20 20 41 4e 44 20 74 79 70 65 21 3d     "  AND type!=
110c0 27 6d 65 74 61 27 20 41 4e 44 20 73 71 6c 20 4e  'meta' AND sql N
110d0 4f 54 4e 55 4c 4c 20 22 0a 20 20 20 20 20 20 20  OTNULL ".       
110e0 20 20 20 22 4f 52 44 45 52 20 42 59 20 73 75 62     "ORDER BY sub
110f0 73 74 72 28 74 79 70 65 2c 32 2c 31 29 2c 20 22  str(type,2,1), "
11100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11110 20 20 20 22 20 43 41 53 45 20 74 79 70 65 20 57     " CASE type W
11120 48 45 4e 20 27 76 69 65 77 27 20 54 48 45 4e 20  HEN 'view' THEN 
11130 72 6f 77 69 64 20 45 4c 53 45 20 6e 61 6d 65 20  rowid ELSE name 
11140 45 4e 44 22 2c 0a 20 20 20 20 20 20 20 20 20 20  END",.          
11150 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c  callback, &data,
11160 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20   &zErrMsg);.    
11170 20 20 20 20 7a 53 68 65 6c 6c 53 74 61 74 69 63      zShellStatic
11180 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
11190 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
111a0 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
111b0 28 70 2d 3e 64 62 2c 0a 20 20 20 20 20 20 20 20  (p->db,.        
111c0 20 22 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f   "SELECT sql FRO
111d0 4d 20 22 0a 20 20 20 20 20 20 20 20 20 22 20 20  M ".         "  
111e0 28 53 45 4c 45 43 54 20 73 71 6c 20 73 71 6c 2c  (SELECT sql sql,
111f0 20 74 79 70 65 20 74 79 70 65 2c 20 74 62 6c 5f   type type, tbl_
11200 6e 61 6d 65 20 74 62 6c 5f 6e 61 6d 65 2c 20 6e  name tbl_name, n
11210 61 6d 65 20 6e 61 6d 65 2c 20 72 6f 77 69 64 20  ame name, rowid 
11220 78 22 0a 20 20 20 20 20 20 20 20 20 22 20 20 20  x".         "   
11230 20 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61    FROM sqlite_ma
11240 73 74 65 72 20 55 4e 49 4f 4e 20 41 4c 4c 22 0a  ster UNION ALL".
11250 20 20 20 20 20 20 20 20 20 22 20 20 20 53 45 4c           "   SEL
11260 45 43 54 20 73 71 6c 2c 20 74 79 70 65 2c 20 74  ECT sql, type, t
11270 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c 20 72  bl_name, name, r
11280 6f 77 69 64 20 46 52 4f 4d 20 73 71 6c 69 74 65  owid FROM sqlite
11290 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29 20 22 0a  _temp_master) ".
112a0 20 20 20 20 20 20 20 20 20 22 57 48 45 52 45 20           "WHERE 
112b0 74 79 70 65 21 3d 27 6d 65 74 61 27 20 41 4e 44  type!='meta' AND
112c0 20 73 71 6c 20 4e 4f 54 4e 55 4c 4c 20 41 4e 44   sql NOTNULL AND
112d0 20 6e 61 6d 65 20 4e 4f 54 20 4c 49 4b 45 20 27   name NOT LIKE '
112e0 73 71 6c 69 74 65 5f 25 27 22 0a 20 20 20 20 20  sqlite_%'".     
112f0 20 20 20 20 22 4f 52 44 45 52 20 42 59 20 73 75      "ORDER BY su
11300 62 73 74 72 28 74 79 70 65 2c 32 2c 31 29 2c 22  bstr(type,2,1),"
11310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11320 20 20 20 22 20 43 41 53 45 20 74 79 70 65 20 57     " CASE type W
11330 48 45 4e 20 27 76 69 65 77 27 20 54 48 45 4e 20  HEN 'view' THEN 
11340 72 6f 77 69 64 20 45 4c 53 45 20 6e 61 6d 65 20  rowid ELSE name 
11350 45 4e 44 22 2c 0a 20 20 20 20 20 20 20 20 20 63  END",.         c
11360 61 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c 20  allback, &data, 
11370 26 7a 45 72 72 4d 73 67 0a 20 20 20 20 20 20 29  &zErrMsg.      )
11380 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
11390 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20  zErrMsg ){.     
113a0 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c   fprintf(stderr,
113b0 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a  "Error: %s\n", z
113c0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 73  ErrMsg);.      s
113d0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72  qlite3_free(zErr
113e0 4d 73 67 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  Msg);.      rc =
113f0 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   1;.    }else if
11400 28 20 72 63 20 21 3d 20 53 51 4c 49 54 45 5f 4f  ( rc != SQLITE_O
11410 4b 20 29 7b 0a 20 20 20 20 20 20 66 70 72 69 6e  K ){.      fprin
11420 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72  tf(stderr,"Error
11430 3a 20 71 75 65 72 79 69 6e 67 20 73 63 68 65 6d  : querying schem
11440 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 5c 6e 22  a information\n"
11450 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
11460 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
11470 20 20 72 63 20 3d 20 30 3b 0a 20 20 20 20 7d 0a    rc = 0;.    }.
11480 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
11490 3d 3d 27 73 27 20 26 26 20 73 74 72 6e 63 6d 70  =='s' && strncmp
114a0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 65 70 61  (azArg[0], "sepa
114b0 72 61 74 6f 72 22 2c 20 6e 29 3d 3d 30 20 26 26  rator", n)==0 &&
114c0 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20   nArg==2 ){.    
114d0 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
114e0 28 73 69 7a 65 6f 66 28 70 2d 3e 73 65 70 61 72  (sizeof(p->separ
114f0 61 74 6f 72 29 2c 20 70 2d 3e 73 65 70 61 72 61  ator), p->separa
11500 74 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  tor,.           
11510 20 20 20 20 20 20 20 20 20 20 22 25 2e 2a 73 22            "%.*s"
11520 2c 20 28 69 6e 74 29 73 69 7a 65 6f 66 28 70 2d  , (int)sizeof(p-
11530 3e 73 65 70 61 72 61 74 6f 72 29 2d 31 2c 20 61  >separator)-1, a
11540 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 7d 65 6c 73  zArg[1]);.  }els
11550 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20  e..  if( c=='s' 
11560 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
11570 5b 30 5d 2c 20 22 73 68 6f 77 22 2c 20 6e 29 3d  [0], "show", n)=
11580 3d 30 20 26 26 20 6e 41 72 67 3d 3d 31 20 29 7b  =0 && nArg==1 ){
11590 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
115a0 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  fprintf(p->out,"
115b0 25 39 2e 39 73 3a 20 25 73 5c 6e 22 2c 22 65 63  %9.9s: %s\n","ec
115c0 68 6f 22 2c 20 70 2d 3e 65 63 68 6f 4f 6e 20 3f  ho", p->echoOn ?
115d0 20 22 6f 6e 22 20 3a 20 22 6f 66 66 22 29 3b 0a   "on" : "off");.
115e0 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f      fprintf(p->o
115f0 75 74 2c 22 25 39 2e 39 73 3a 20 25 73 5c 6e 22  ut,"%9.9s: %s\n"
11600 2c 22 65 78 70 6c 61 69 6e 22 2c 20 70 2d 3e 65  ,"explain", p->e
11610 78 70 6c 61 69 6e 50 72 65 76 2e 76 61 6c 69 64  xplainPrev.valid
11620 20 3f 20 22 6f 6e 22 20 3a 22 6f 66 66 22 29 3b   ? "on" :"off");
11630 0a 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e  .    fprintf(p->
11640 6f 75 74 2c 22 25 39 2e 39 73 3a 20 25 73 5c 6e  out,"%9.9s: %s\n
11650 22 2c 22 68 65 61 64 65 72 73 22 2c 20 70 2d 3e  ","headers", p->
11660 73 68 6f 77 48 65 61 64 65 72 20 3f 20 22 6f 6e  showHeader ? "on
11670 22 20 3a 20 22 6f 66 66 22 29 3b 0a 20 20 20 20  " : "off");.    
11680 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  fprintf(p->out,"
11690 25 39 2e 39 73 3a 20 25 73 5c 6e 22 2c 22 6d 6f  %9.9s: %s\n","mo
116a0 64 65 22 2c 20 6d 6f 64 65 44 65 73 63 72 5b 70  de", modeDescr[p
116b0 2d 3e 6d 6f 64 65 5d 29 3b 0a 20 20 20 20 66 70  ->mode]);.    fp
116c0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 39  rintf(p->out,"%9
116d0 2e 39 73 3a 20 22 2c 20 22 6e 75 6c 6c 76 61 6c  .9s: ", "nullval
116e0 75 65 22 29 3b 0a 20 20 20 20 20 20 6f 75 74 70  ue");.      outp
116f0 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f  ut_c_string(p->o
11700 75 74 2c 20 70 2d 3e 6e 75 6c 6c 76 61 6c 75 65  ut, p->nullvalue
11710 29 3b 0a 20 20 20 20 20 20 66 70 72 69 6e 74 66  );.      fprintf
11720 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a  (p->out, "\n");.
11730 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e 6f      fprintf(p->o
11740 75 74 2c 22 25 39 2e 39 73 3a 20 25 73 5c 6e 22  ut,"%9.9s: %s\n"
11750 2c 22 6f 75 74 70 75 74 22 2c 0a 20 20 20 20 20  ,"output",.     
11760 20 20 20 20 20 20 20 73 74 72 6c 65 6e 33 30 28         strlen30(
11770 70 2d 3e 6f 75 74 66 69 6c 65 29 20 3f 20 70 2d  p->outfile) ? p-
11780 3e 6f 75 74 66 69 6c 65 20 3a 20 22 73 74 64 6f  >outfile : "stdo
11790 75 74 22 29 3b 0a 20 20 20 20 66 70 72 69 6e 74  ut");.    fprint
117a0 66 28 70 2d 3e 6f 75 74 2c 22 25 39 2e 39 73 3a  f(p->out,"%9.9s:
117b0 20 22 2c 20 22 73 65 70 61 72 61 74 6f 72 22 29   ", "separator")
117c0 3b 0a 20 20 20 20 20 20 6f 75 74 70 75 74 5f 63  ;.      output_c
117d0 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20  _string(p->out, 
117e0 70 2d 3e 73 65 70 61 72 61 74 6f 72 29 3b 0a 20  p->separator);. 
117f0 20 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d 3e       fprintf(p->
11800 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 20 20  out, "\n");.    
11810 66 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  fprintf(p->out,"
11820 25 39 2e 39 73 3a 20 25 73 5c 6e 22 2c 22 73 74  %9.9s: %s\n","st
11830 61 74 73 22 2c 20 70 2d 3e 73 74 61 74 73 4f 6e  ats", p->statsOn
11840 20 3f 20 22 6f 6e 22 20 3a 20 22 6f 66 66 22 29   ? "on" : "off")
11850 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 70 2d  ;.    fprintf(p-
11860 3e 6f 75 74 2c 22 25 39 2e 39 73 3a 20 22 2c 22  >out,"%9.9s: ","
11870 77 69 64 74 68 22 29 3b 0a 20 20 20 20 66 6f 72  width");.    for
11880 20 28 69 3d 30 3b 69 3c 28 69 6e 74 29 41 72 72   (i=0;i<(int)Arr
11890 61 79 53 69 7a 65 28 70 2d 3e 63 6f 6c 57 69 64  aySize(p->colWid
118a0 74 68 29 20 26 26 20 70 2d 3e 63 6f 6c 57 69 64  th) && p->colWid
118b0 74 68 5b 69 5d 20 21 3d 20 30 3b 69 2b 2b 29 20  th[i] != 0;i++) 
118c0 7b 0a 20 20 20 20 20 20 66 70 72 69 6e 74 66 28  {.      fprintf(
118d0 70 2d 3e 6f 75 74 2c 22 25 64 20 22 2c 70 2d 3e  p->out,"%d ",p->
118e0 63 6f 6c 57 69 64 74 68 5b 69 5d 29 3b 0a 20 20  colWidth[i]);.  
118f0 20 20 7d 0a 20 20 20 20 66 70 72 69 6e 74 66 28    }.    fprintf(
11900 70 2d 3e 6f 75 74 2c 22 5c 6e 22 29 3b 0a 20 20  p->out,"\n");.  
11910 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
11920 27 73 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  's' && strncmp(a
11930 7a 41 72 67 5b 30 5d 2c 20 22 73 74 61 74 73 22  zArg[0], "stats"
11940 2c 20 6e 29 3d 3d 30 20 26 26 20 6e 41 72 67 3e  , n)==0 && nArg>
11950 31 20 26 26 20 6e 41 72 67 3c 33 20 29 7b 0a 20  1 && nArg<3 ){. 
11960 20 20 20 70 2d 3e 73 74 61 74 73 4f 6e 20 3d 20     p->statsOn = 
11970 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41  booleanValue(azA
11980 72 67 5b 31 5d 29 3b 0a 20 20 7d 65 6c 73 65 0a  rg[1]);.  }else.
11990 0a 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26  .  if( c=='t' &&
119a0 20 6e 3e 31 20 26 26 20 73 74 72 6e 63 6d 70 28   n>1 && strncmp(
119b0 61 7a 41 72 67 5b 30 5d 2c 20 22 74 61 62 6c 65  azArg[0], "table
119c0 73 22 2c 20 6e 29 3d 3d 30 20 26 26 20 6e 41 72  s", n)==0 && nAr
119d0 67 3c 33 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  g<3 ){.    sqlit
119e0 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
119f0 20 20 20 20 63 68 61 72 20 2a 2a 61 7a 52 65 73      char **azRes
11a00 75 6c 74 3b 0a 20 20 20 20 69 6e 74 20 6e 52 6f  ult;.    int nRo
11a10 77 2c 20 6e 41 6c 6c 6f 63 3b 0a 20 20 20 20 63  w, nAlloc;.    c
11a20 68 61 72 20 2a 7a 53 71 6c 20 3d 20 30 3b 0a 20  har *zSql = 0;. 
11a30 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 6f     int ii;.    o
11a40 70 65 6e 5f 64 62 28 70 29 3b 0a 20 20 20 20 72  pen_db(p);.    r
11a50 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
11a60 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 22 50  are_v2(p->db, "P
11a70 52 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c  RAGMA database_l
11a80 69 73 74 22 2c 20 2d 31 2c 20 26 70 53 74 6d 74  ist", -1, &pStmt
11a90 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 72 63  , 0);.    if( rc
11aa0 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20   ) return rc;.  
11ab0 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
11ac0 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20 20 20 20  _mprintf(.      
11ad0 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 20 46    "SELECT name F
11ae0 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
11af0 72 22 0a 20 20 20 20 20 20 20 20 22 20 57 48 45  r".        " WHE
11b00 52 45 20 74 79 70 65 20 49 4e 20 28 27 74 61 62  RE type IN ('tab
11b10 6c 65 27 2c 27 76 69 65 77 27 29 22 0a 20 20 20  le','view')".   
11b20 20 20 20 20 20 22 20 20 20 41 4e 44 20 6e 61 6d       "   AND nam
11b30 65 20 4e 4f 54 20 4c 49 4b 45 20 27 73 71 6c 69  e NOT LIKE 'sqli
11b40 74 65 5f 25 25 27 22 0a 20 20 20 20 20 20 20 20  te_%%'".        
11b50 22 20 20 20 41 4e 44 20 6e 61 6d 65 20 4c 49 4b  "   AND name LIK
11b60 45 20 3f 31 22 29 3b 0a 20 20 20 20 77 68 69 6c  E ?1");.    whil
11b70 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  e( sqlite3_step(
11b80 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52  pStmt)==SQLITE_R
11b90 4f 57 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73  OW ){.      cons
11ba0 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65 20  t char *zDbName 
11bb0 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73  = (const char*)s
11bc0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
11bd0 78 74 28 70 53 74 6d 74 2c 20 31 29 3b 0a 20 20  xt(pStmt, 1);.  
11be0 20 20 20 20 69 66 28 20 7a 44 62 4e 61 6d 65 3d      if( zDbName=
11bf0 3d 30 20 7c 7c 20 73 74 72 63 6d 70 28 7a 44 62  =0 || strcmp(zDb
11c00 4e 61 6d 65 2c 22 6d 61 69 6e 22 29 3d 3d 30 20  Name,"main")==0 
11c10 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
11c20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 44 62    if( strcmp(zDb
11c30 4e 61 6d 65 2c 22 74 65 6d 70 22 29 3d 3d 30 20  Name,"temp")==0 
11c40 29 7b 0a 20 20 20 20 20 20 20 20 7a 53 71 6c 20  ){.        zSql 
11c50 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
11c60 66 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f(.             
11c70 20 20 20 20 22 25 7a 20 55 4e 49 4f 4e 20 41 4c      "%z UNION AL
11c80 4c 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  L ".            
11c90 20 20 20 20 20 22 53 45 4c 45 43 54 20 27 74 65       "SELECT 'te
11ca0 6d 70 2e 27 20 7c 7c 20 6e 61 6d 65 20 46 52 4f  mp.' || name FRO
11cb0 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
11cc0 73 74 65 72 22 0a 20 20 20 20 20 20 20 20 20 20  ster".          
11cd0 20 20 20 20 20 20 20 22 20 57 48 45 52 45 20 74         " WHERE t
11ce0 79 70 65 20 49 4e 20 28 27 74 61 62 6c 65 27 2c  ype IN ('table',
11cf0 27 76 69 65 77 27 29 22 0a 20 20 20 20 20 20 20  'view')".       
11d00 20 20 20 20 20 20 20 20 20 20 22 20 20 20 41 4e            "   AN
11d10 44 20 6e 61 6d 65 20 4e 4f 54 20 4c 49 4b 45 20  D name NOT LIKE 
11d20 27 73 71 6c 69 74 65 5f 25 25 27 22 0a 20 20 20  'sqlite_%%'".   
11d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                " 
11d40 20 20 41 4e 44 20 6e 61 6d 65 20 4c 49 4b 45 20    AND name LIKE 
11d50 3f 31 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20  ?1", zSql);.    
11d60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
11d70 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f   zSql = sqlite3_
11d80 6d 70 72 69 6e 74 66 28 0a 20 20 20 20 20 20 20  mprintf(.       
11d90 20 20 20 20 20 20 20 20 20 20 22 25 7a 20 55 4e            "%z UN
11da0 49 4f 4e 20 41 4c 4c 20 22 0a 20 20 20 20 20 20  ION ALL ".      
11db0 20 20 20 20 20 20 20 20 20 20 20 22 53 45 4c 45             "SELE
11dc0 43 54 20 27 25 71 2e 27 20 7c 7c 20 6e 61 6d 65  CT '%q.' || name
11dd0 20 46 52 4f 4d 20 5c 22 25 77 5c 22 2e 73 71 6c   FROM \"%w\".sql
11de0 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20  ite_master".    
11df0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 57               " W
11e00 48 45 52 45 20 74 79 70 65 20 49 4e 20 28 27 74  HERE type IN ('t
11e10 61 62 6c 65 27 2c 27 76 69 65 77 27 29 22 0a 20  able','view')". 
11e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e30 22 20 20 20 41 4e 44 20 6e 61 6d 65 20 4e 4f 54  "   AND name NOT
11e40 20 4c 49 4b 45 20 27 73 71 6c 69 74 65 5f 25 25   LIKE 'sqlite_%%
11e50 27 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  '".             
11e60 20 20 20 20 22 20 20 20 41 4e 44 20 6e 61 6d 65      "   AND name
11e70 20 4c 49 4b 45 20 3f 31 22 2c 20 7a 53 71 6c 2c   LIKE ?1", zSql,
11e80 20 7a 44 62 4e 61 6d 65 2c 20 7a 44 62 4e 61 6d   zDbName, zDbNam
11e90 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
11ea0 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69  }.    sqlite3_fi
11eb0 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20  nalize(pStmt);. 
11ec0 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65     zSql = sqlite
11ed0 33 5f 6d 70 72 69 6e 74 66 28 22 25 7a 20 4f 52  3_mprintf("%z OR
11ee0 44 45 52 20 42 59 20 31 22 2c 20 7a 53 71 6c 29  DER BY 1", zSql)
11ef0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
11f00 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d  e3_prepare_v2(p-
11f10 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26  >db, zSql, -1, &
11f20 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 73  pStmt, 0);.    s
11f30 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
11f40 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
11f50 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20 20 6e  return rc;.    n
11f60 52 6f 77 20 3d 20 6e 41 6c 6c 6f 63 20 3d 20 30  Row = nAlloc = 0
11f70 3b 0a 20 20 20 20 61 7a 52 65 73 75 6c 74 20 3d  ;.    azResult =
11f80 20 30 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   0;.    if( nArg
11f90 3e 31 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  >1 ){.      sqli
11fa0 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53  te3_bind_text(pS
11fb0 74 6d 74 2c 20 31 2c 20 61 7a 41 72 67 5b 31 5d  tmt, 1, azArg[1]
11fc0 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41  , -1, SQLITE_TRA
11fd0 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 7d 65 6c  NSIENT);.    }el
11fe0 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  se{.      sqlite
11ff0 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d  3_bind_text(pStm
12000 74 2c 20 31 2c 20 22 25 22 2c 20 2d 31 2c 20 53  t, 1, "%", -1, S
12010 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
12020 20 20 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20     }.    while( 
12030 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74  sqlite3_step(pSt
12040 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20  mt)==SQLITE_ROW 
12050 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 52 6f  ){.      if( nRo
12060 77 3e 3d 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20  w>=nAlloc ){.   
12070 20 20 20 20 20 63 68 61 72 20 2a 2a 61 7a 4e 65       char **azNe
12080 77 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  w;.        int n
12090 20 3d 20 6e 41 6c 6c 6f 63 2a 32 20 2b 20 31 30   = nAlloc*2 + 10
120a0 3b 0a 20 20 20 20 20 20 20 20 61 7a 4e 65 77 20  ;.        azNew 
120b0 3d 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f  = sqlite3_reallo
120c0 63 28 61 7a 52 65 73 75 6c 74 2c 20 73 69 7a 65  c(azResult, size
120d0 6f 66 28 61 7a 52 65 73 75 6c 74 5b 30 5d 29 2a  of(azResult[0])*
120e0 6e 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  n);.        if( 
120f0 61 7a 4e 65 77 3d 3d 30 20 29 7b 0a 20 20 20 20  azNew==0 ){.    
12100 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74        fprintf(st
12110 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75  derr, "Error: ou
12120 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b  t of memory\n");
12130 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
12140 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
12150 20 20 20 20 6e 41 6c 6c 6f 63 20 3d 20 6e 3b 0a      nAlloc = n;.
12160 20 20 20 20 20 20 20 20 61 7a 52 65 73 75 6c 74          azResult
12170 20 3d 20 61 7a 4e 65 77 3b 0a 20 20 20 20 20 20   = azNew;.      
12180 7d 0a 20 20 20 20 20 20 61 7a 52 65 73 75 6c 74  }.      azResult
12190 5b 6e 52 6f 77 5d 20 3d 20 73 71 6c 69 74 65 33  [nRow] = sqlite3
121a0 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 73  _mprintf("%s", s
121b0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
121c0 78 74 28 70 53 74 6d 74 2c 20 30 29 29 3b 0a 20  xt(pStmt, 0));. 
121d0 20 20 20 20 20 69 66 28 20 61 7a 52 65 73 75 6c       if( azResul
121e0 74 5b 6e 52 6f 77 5d 20 29 20 6e 52 6f 77 2b 2b  t[nRow] ) nRow++
121f0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
12200 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74  te3_finalize(pSt
12210 6d 74 29 3b 20 20 20 20 20 20 20 20 0a 20 20 20  mt);        .   
12220 20 69 66 28 20 6e 52 6f 77 3e 30 20 29 7b 0a 20   if( nRow>0 ){. 
12230 20 20 20 20 20 69 6e 74 20 6c 65 6e 2c 20 6d 61       int len, ma
12240 78 6c 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20  xlen = 0;.      
12250 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 20 20 20 20  int i, j;.      
12260 69 6e 74 20 6e 50 72 69 6e 74 43 6f 6c 2c 20 6e  int nPrintCol, n
12270 50 72 69 6e 74 52 6f 77 3b 0a 20 20 20 20 20 20  PrintRow;.      
12280 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 52 6f 77 3b  for(i=0; i<nRow;
12290 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 6c   i++){.        l
122a0 65 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a  en = strlen30(az
122b0 52 65 73 75 6c 74 5b 69 5d 29 3b 0a 20 20 20 20  Result[i]);.    
122c0 20 20 20 20 69 66 28 20 6c 65 6e 3e 6d 61 78 6c      if( len>maxl
122d0 65 6e 20 29 20 6d 61 78 6c 65 6e 20 3d 20 6c 65  en ) maxlen = le
122e0 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  n;.      }.     
122f0 20 6e 50 72 69 6e 74 43 6f 6c 20 3d 20 38 30 2f   nPrintCol = 80/
12300 28 6d 61 78 6c 65 6e 2b 32 29 3b 0a 20 20 20 20  (maxlen+2);.    
12310 20 20 69 66 28 20 6e 50 72 69 6e 74 43 6f 6c 3c    if( nPrintCol<
12320 31 20 29 20 6e 50 72 69 6e 74 43 6f 6c 20 3d 20  1 ) nPrintCol = 
12330 31 3b 0a 20 20 20 20 20 20 6e 50 72 69 6e 74 52  1;.      nPrintR
12340 6f 77 20 3d 20 28 6e 52 6f 77 20 2b 20 6e 50 72  ow = (nRow + nPr
12350 69 6e 74 43 6f 6c 20 2d 20 31 29 2f 6e 50 72 69  intCol - 1)/nPri
12360 6e 74 43 6f 6c 3b 0a 20 20 20 20 20 20 66 6f 72  ntCol;.      for
12370 28 69 3d 30 3b 20 69 3c 6e 50 72 69 6e 74 52 6f  (i=0; i<nPrintRo
12380 77 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  w; i++){.       
12390 20 66 6f 72 28 6a 3d 69 3b 20 6a 3c 6e 52 6f 77   for(j=i; j<nRow
123a0 3b 20 6a 2b 3d 6e 50 72 69 6e 74 52 6f 77 29 7b  ; j+=nPrintRow){
123b0 0a 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20  .          char 
123c0 2a 7a 53 70 20 3d 20 6a 3c 6e 50 72 69 6e 74 52  *zSp = j<nPrintR
123d0 6f 77 20 3f 20 22 22 20 3a 20 22 20 20 22 3b 0a  ow ? "" : "  ";.
123e0 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 66            printf
123f0 28 22 25 73 25 2d 2a 73 22 2c 20 7a 53 70 2c 20  ("%s%-*s", zSp, 
12400 6d 61 78 6c 65 6e 2c 20 61 7a 52 65 73 75 6c 74  maxlen, azResult
12410 5b 6a 5d 20 3f 20 61 7a 52 65 73 75 6c 74 5b 6a  [j] ? azResult[j
12420 5d 20 3a 20 22 22 29 3b 0a 20 20 20 20 20 20 20  ] : "");.       
12430 20 7d 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74   }.        print
12440 66 28 22 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d  f("\n");.      }
12450 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69  .    }.    for(i
12460 69 3d 30 3b 20 69 69 3c 6e 52 6f 77 3b 20 69 69  i=0; ii<nRow; ii
12470 2b 2b 29 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ++) sqlite3_free
12480 28 61 7a 52 65 73 75 6c 74 5b 69 69 5d 29 3b 0a  (azResult[ii]);.
12490 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
124a0 28 61 7a 52 65 73 75 6c 74 29 3b 0a 20 20 7d 65  (azResult);.  }e
124b0 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 74  lse..  if( c=='t
124c0 27 20 26 26 20 6e 3e 3d 38 20 26 26 20 73 74 72  ' && n>=8 && str
124d0 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
124e0 74 65 73 74 63 74 72 6c 22 2c 20 6e 29 3d 3d 30  testctrl", n)==0
124f0 20 26 26 20 6e 41 72 67 3e 3d 32 20 29 7b 0a 20   && nArg>=2 ){. 
12500 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
12510 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20  struct {.       
12520 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 72  const char *zCtr
12530 6c 4e 61 6d 65 3b 20 20 20 2f 2a 20 4e 61 6d 65  lName;   /* Name
12540 20 6f 66 20 61 20 74 65 73 74 2d 63 6f 6e 74 72   of a test-contr
12550 6f 6c 20 6f 70 74 69 6f 6e 20 2a 2f 0a 20 20 20  ol option */.   
12560 20 20 20 20 69 6e 74 20 63 74 72 6c 43 6f 64 65      int ctrlCode
12570 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12580 49 6e 74 65 67 65 72 20 63 6f 64 65 20 66 6f 72  Integer code for
12590 20 74 68 61 74 20 6f 70 74 69 6f 6e 20 2a 2f 0a   that option */.
125a0 20 20 20 20 7d 20 61 43 74 72 6c 5b 5d 20 3d 20      } aCtrl[] = 
125b0 7b 0a 20 20 20 20 20 20 7b 20 22 70 72 6e 67 5f  {.      { "prng_
125c0 73 61 76 65 22 2c 20 20 20 20 20 20 20 20 20 20  save",          
125d0 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54     SQLITE_TESTCT
125e0 52 4c 5f 50 52 4e 47 5f 53 41 56 45 20 20 20 20  RL_PRNG_SAVE    
125f0 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
12600 20 20 20 7b 20 22 70 72 6e 67 5f 72 65 73 74 6f     { "prng_resto
12610 72 65 22 2c 20 20 20 20 20 20 20 20 20 20 53 51  re",          SQ
12620 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52  LITE_TESTCTRL_PR
12630 4e 47 5f 52 45 53 54 4f 52 45 20 20 20 20 20 20  NG_RESTORE      
12640 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
12650 22 70 72 6e 67 5f 72 65 73 65 74 22 2c 20 20 20  "prng_reset",   
12660 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
12670 54 45 53 54 43 54 52 4c 5f 50 52 4e 47 5f 52 45  TESTCTRL_PRNG_RE
12680 53 45 54 20 20 20 20 20 20 20 20 20 20 20 20 20  SET             
12690 7d 2c 0a 20 20 20 20 20 20 7b 20 22 62 69 74 76  },.      { "bitv
126a0 65 63 5f 74 65 73 74 22 2c 20 20 20 20 20 20 20  ec_test",       
126b0 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43      SQLITE_TESTC
126c0 54 52 4c 5f 42 49 54 56 45 43 5f 54 45 53 54 20  TRL_BITVEC_TEST 
126d0 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
126e0 20 20 20 20 7b 20 22 66 61 75 6c 74 5f 69 6e 73      { "fault_ins
126f0 74 61 6c 6c 22 2c 20 20 20 20 20 20 20 20 20 53  tall",         S
12700 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 46  QLITE_TESTCTRL_F
12710 41 55 4c 54 5f 49 4e 53 54 41 4c 4c 20 20 20 20  AULT_INSTALL    
12720 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
12730 20 22 62 65 6e 69 67 6e 5f 6d 61 6c 6c 6f 63 5f   "benign_malloc_
12740 68 6f 6f 6b 73 22 2c 20 20 20 53 51 4c 49 54 45  hooks",   SQLITE
12750 5f 54 45 53 54 43 54 52 4c 5f 42 45 4e 49 47 4e  _TESTCTRL_BENIGN
12760 5f 4d 41 4c 4c 4f 43 5f 48 4f 4f 4b 53 20 20 20  _MALLOC_HOOKS   
12770 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 70 65 6e   },.      { "pen
12780 64 69 6e 67 5f 62 79 74 65 22 2c 20 20 20 20 20  ding_byte",     
12790 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54       SQLITE_TEST
127a0 43 54 52 4c 5f 50 45 4e 44 49 4e 47 5f 42 59 54  CTRL_PENDING_BYT
127b0 45 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20  E           },. 
127c0 20 20 20 20 20 7b 20 22 61 73 73 65 72 74 22 2c       { "assert",
127d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127e0 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
127f0 41 53 53 45 52 54 20 20 20 20 20 20 20 20 20 20  ASSERT          
12800 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
12810 7b 20 22 61 6c 77 61 79 73 22 2c 20 20 20 20 20  { "always",     
12820 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
12830 45 5f 54 45 53 54 43 54 52 4c 5f 41 4c 57 41 59  E_TESTCTRL_ALWAY
12840 53 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  S               
12850 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 72 65    },.      { "re
12860 73 65 72 76 65 22 2c 20 20 20 20 20 20 20 20 20  serve",         
12870 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53        SQLITE_TES
12880 54 43 54 52 4c 5f 52 45 53 45 52 56 45 20 20 20  TCTRL_RESERVE   
12890 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
128a0 20 20 20 20 20 20 7b 20 22 6f 70 74 69 6d 69 7a        { "optimiz
128b0 61 74 69 6f 6e 73 22 2c 20 20 20 20 20 20 20 20  ations",        
128c0 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
128d0 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 20 20  _OPTIMIZATIONS  
128e0 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
128f0 20 7b 20 22 69 73 6b 65 79 77 6f 72 64 22 2c 20   { "iskeyword", 
12900 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
12910 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 53 4b 45  TE_TESTCTRL_ISKE
12920 59 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20  YWORD           
12930 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 73     },.      { "s
12940 63 72 61 74 63 68 6d 61 6c 6c 6f 63 22 2c 20 20  cratchmalloc",  
12950 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45         SQLITE_TE
12960 53 54 43 54 52 4c 5f 53 43 52 41 54 43 48 4d 41  STCTRL_SCRATCHMA
12970 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 7d 2c  LLOC          },
12980 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20  .    };.    int 
12990 74 65 73 74 63 74 72 6c 20 3d 20 2d 31 3b 0a 20  testctrl = -1;. 
129a0 20 20 20 69 6e 74 20 72 63 20 3d 20 30 3b 0a 20     int rc = 0;. 
129b0 20 20 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 20     int i, n;.   
129c0 20 6f 70 65 6e 5f 64 62 28 70 29 3b 0a 0a 20 20   open_db(p);..  
129d0 20 20 2f 2a 20 63 6f 6e 76 65 72 74 20 74 65 73    /* convert tes
129e0 74 63 74 72 6c 20 74 65 78 74 20 6f 70 74 69 6f  tctrl text optio
129f0 6e 20 74 6f 20 76 61 6c 75 65 2e 20 61 6c 6c 6f  n to value. allo
12a00 77 20 61 6e 79 20 75 6e 69 71 75 65 20 70 72 65  w any unique pre
12a10 66 69 78 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  fix.    ** of th
12a20 65 20 6f 70 74 69 6f 6e 20 6e 61 6d 65 2c 20 6f  e option name, o
12a30 72 20 61 20 6e 75 6d 65 72 69 63 61 6c 20 76 61  r a numerical va
12a40 6c 75 65 2e 20 2a 2f 0a 20 20 20 20 6e 20 3d 20  lue. */.    n = 
12a50 73 74 72 6c 65 6e 33 30 28 61 7a 41 72 67 5b 31  strlen30(azArg[1
12a60 5d 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  ]);.    for(i=0;
12a70 20 69 3c 28 69 6e 74 29 28 73 69 7a 65 6f 66 28   i<(int)(sizeof(
12a80 61 43 74 72 6c 29 2f 73 69 7a 65 6f 66 28 61 43  aCtrl)/sizeof(aC
12a90 74 72 6c 5b 30 5d 29 29 3b 20 69 2b 2b 29 7b 0a  trl[0])); i++){.
12aa0 20 20 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d        if( strncm
12ab0 70 28 61 7a 41 72 67 5b 31 5d 2c 20 61 43 74 72  p(azArg[1], aCtr
12ac0 6c 5b 69 5d 2e 7a 43 74 72 6c 4e 61 6d 65 2c 20  l[i].zCtrlName, 
12ad0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  n)==0 ){.       
12ae0 20 69 66 28 20 74 65 73 74 63 74 72 6c 3c 30 20   if( testctrl<0 
12af0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 74 65 73  ){.          tes
12b00 74 63 74 72 6c 20 3d 20 61 43 74 72 6c 5b 69 5d  tctrl = aCtrl[i]
12b10 2e 63 74 72 6c 43 6f 64 65 3b 0a 20 20 20 20 20  .ctrlCode;.     
12b20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
12b30 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65      fprintf(stde
12b40 72 72 2c 20 22 61 6d 62 69 67 75 6f 75 73 20 6f  rr, "ambiguous o
12b50 70 74 69 6f 6e 20 6e 61 6d 65 3a 20 5c 22 25 73  ption name: \"%s
12b60 5c 22 5c 6e 22 2c 20 61 7a 41 72 67 5b 31 5d 29  \"\n", azArg[1])
12b70 3b 0a 20 20 20 20 20 20 20 20 20 20 74 65 73 74  ;.          test
12b80 63 74 72 6c 20 3d 20 2d 31 3b 0a 20 20 20 20 20  ctrl = -1;.     
12b90 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
12ba0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
12bb0 20 20 7d 0a 20 20 20 20 69 66 28 20 74 65 73 74    }.    if( test
12bc0 63 74 72 6c 3c 30 20 29 20 74 65 73 74 63 74 72  ctrl<0 ) testctr
12bd0 6c 20 3d 20 61 74 6f 69 28 61 7a 41 72 67 5b 31  l = atoi(azArg[1
12be0 5d 29 3b 0a 20 20 20 20 69 66 28 20 28 74 65 73  ]);.    if( (tes
12bf0 74 63 74 72 6c 3c 53 51 4c 49 54 45 5f 54 45 53  tctrl<SQLITE_TES
12c00 54 43 54 52 4c 5f 46 49 52 53 54 29 20 7c 7c 20  TCTRL_FIRST) || 
12c10 28 74 65 73 74 63 74 72 6c 3e 53 51 4c 49 54 45  (testctrl>SQLITE
12c20 5f 54 45 53 54 43 54 52 4c 5f 4c 41 53 54 29 20  _TESTCTRL_LAST) 
12c30 29 7b 0a 20 20 20 20 20 20 66 70 72 69 6e 74 66  ){.      fprintf
12c40 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20  (stderr,"Error: 
12c50 69 6e 76 61 6c 69 64 20 74 65 73 74 63 74 72 6c  invalid testctrl
12c60 20 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20   option: %s\n", 
12c70 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d  azArg[1]);.    }
12c80 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 77 69 74  else{.      swit
12c90 63 68 28 74 65 73 74 63 74 72 6c 29 7b 0a 0a 20  ch(testctrl){.. 
12ca0 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65         /* sqlite
12cb0 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69  3_test_control(i
12cc0 6e 74 2c 20 64 62 2c 20 69 6e 74 29 20 2a 2f 0a  nt, db, int) */.
12cd0 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
12ce0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54  ITE_TESTCTRL_OPT
12cf0 49 4d 49 5a 41 54 49 4f 4e 53 3a 0a 20 20 20 20  IMIZATIONS:.    
12d00 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
12d10 54 45 53 54 43 54 52 4c 5f 52 45 53 45 52 56 45  TESTCTRL_RESERVE
12d20 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 0a 20  :             . 
12d30 20 20 20 20 20 20 20 20 20 69 66 28 20 6e 41 72           if( nAr
12d40 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20  g==3 ){.        
12d50 20 20 20 20 69 6e 74 20 6f 70 74 20 3d 20 28 69      int opt = (i
12d60 6e 74 29 73 74 72 74 6f 6c 28 61 7a 41 72 67 5b  nt)strtol(azArg[
12d70 32 5d 2c 20 30 2c 20 30 29 3b 20 20 20 20 20 20  2], 0, 0);      
12d80 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 72    .            r
12d90 63 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73 74  c = sqlite3_test
12da0 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63 74 72  _control(testctr
12db0 6c 2c 20 70 2d 3e 64 62 2c 20 6f 70 74 29 3b 0a  l, p->db, opt);.
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e              prin
12dd0 74 66 28 22 25 64 20 28 30 78 25 30 38 78 29 5c  tf("%d (0x%08x)\
12de0 6e 22 2c 20 72 63 2c 20 72 63 29 3b 0a 20 20 20  n", rc, rc);.   
12df0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
12e00 20 20 20 20 20 20 20 20 20 20 20 20 66 70 72 69              fpri
12e10 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f  ntf(stderr,"Erro
12e20 72 3a 20 74 65 73 74 63 74 72 6c 20 25 73 20 74  r: testctrl %s t
12e30 61 6b 65 73 20 61 20 73 69 6e 67 6c 65 20 69 6e  akes a single in
12e40 74 20 6f 70 74 69 6f 6e 5c 6e 22 2c 0a 20 20 20  t option\n",.   
12e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e60 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
12e70 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
12e80 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20    break;..      
12e90 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 74 65 73    /* sqlite3_tes
12ea0 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74 29 20 2a  t_control(int) *
12eb0 2f 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53  /.        case S
12ec0 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50  QLITE_TESTCTRL_P
12ed0 52 4e 47 5f 53 41 56 45 3a 20 20 20 20 20 20 20  RNG_SAVE:       
12ee0 20 20 20 20 0a 20 20 20 20 20 20 20 20 63 61 73      .        cas
12ef0 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  e SQLITE_TESTCTR
12f00 4c 5f 50 52 4e 47 5f 52 45 53 54 4f 52 45 3a 20  L_PRNG_RESTORE: 
12f10 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20         .        
12f20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54  case SQLITE_TEST
12f30 43 54 52 4c 5f 50 52 4e 47 5f 52 45 53 45 54 3a  CTRL_PRNG_RESET:
12f40 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6e  .          if( n
12f50 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg==2 ){.      
12f60 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
12f70 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
12f80 74 65 73 74 63 74 72 6c 29 3b 0a 20 20 20 20 20  testctrl);.     
12f90 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25         printf("%
12fa0 64 20 28 30 78 25 30 38 78 29 5c 6e 22 2c 20 72  d (0x%08x)\n", r
12fb0 63 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 20 20  c, rc);.        
12fc0 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
12fd0 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73         fprintf(s
12fe0 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 74 65  tderr,"Error: te
12ff0 73 74 63 74 72 6c 20 25 73 20 74 61 6b 65 73 20  stctrl %s takes 
13000 6e 6f 20 6f 70 74 69 6f 6e 73 5c 6e 22 2c 20 61  no options\n", a
13010 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20  zArg[1]);.      
13020 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
13030 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20  break;..        
13040 2f 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  /* sqlite3_test_
13050 63 6f 6e 74 72 6f 6c 28 69 6e 74 2c 20 75 69 6e  control(int, uin
13060 74 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 63 61  t) */.        ca
13070 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  se SQLITE_TESTCT
13080 52 4c 5f 50 45 4e 44 49 4e 47 5f 42 59 54 45 3a  RL_PENDING_BYTE:
13090 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20          .       
130a0 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 33 20 29     if( nArg==3 )
130b0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 6e  {.            un
130c0 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 74 20 3d  signed int opt =
130d0 20 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 69   (unsigned int)i
130e0 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72  ntegerValue(azAr
130f0 67 5b 32 5d 29 3b 20 20 20 20 20 20 20 20 0a 20  g[2]);        . 
13100 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
13110 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
13120 74 72 6f 6c 28 74 65 73 74 63 74 72 6c 2c 20 6f  trol(testctrl, o
13130 70 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  pt);.           
13140 20 70 72 69 6e 74 66 28 22 25 64 20 28 30 78 25   printf("%d (0x%
13150 30 38 78 29 5c 6e 22 2c 20 72 63 2c 20 72 63 29  08x)\n", rc, rc)
13160 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ;.          } el
13170 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
13180 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c   fprintf(stderr,
13190 22 45 72 72 6f 72 3a 20 74 65 73 74 63 74 72 6c  "Error: testctrl
131a0 20 25 73 20 74 61 6b 65 73 20 61 20 73 69 6e 67   %s takes a sing
131b0 6c 65 20 75 6e 73 69 67 6e 65 64 22 0a 20 20 20  le unsigned".   
131c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131d0 20 20 20 20 20 20 20 20 22 20 69 6e 74 20 6f 70          " int op
131e0 74 69 6f 6e 5c 6e 22 2c 20 61 7a 41 72 67 5b 31  tion\n", azArg[1
131f0 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ]);.          }.
13200 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
13210 0a 20 20 20 20 20 20 20 20 20 20 0a 20 20 20 20  .          .    
13220 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 74      /* sqlite3_t
13230 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74 2c  est_control(int,
13240 20 69 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20 20   int) */.       
13250 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53   case SQLITE_TES
13260 54 43 54 52 4c 5f 41 53 53 45 52 54 3a 20 20 20  TCTRL_ASSERT:   
13270 20 20 20 20 20 20 20 20 20 20 20 0a 20 20 20 20             .    
13280 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
13290 54 45 53 54 43 54 52 4c 5f 41 4c 57 41 59 53 3a  TESTCTRL_ALWAYS:
132a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a 20                . 
132b0 20 20 20 20 20 20 20 20 20 69 66 28 20 6e 41 72           if( nAr
132c0 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20  g==3 ){.        
132d0 20 20 20 20 69 6e 74 20 6f 70 74 20 3d 20 61 74      int opt = at
132e0 6f 69 28 61 7a 41 72 67 5b 32 5d 29 3b 20 20 20  oi(azArg[2]);   
132f0 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 20       .          
13300 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 74    rc = sqlite3_t
13310 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74  est_control(test
13320 63 74 72 6c 2c 20 6f 70 74 29 3b 0a 20 20 20 20  ctrl, opt);.    
13330 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22          printf("
13340 25 64 20 28 30 78 25 30 38 78 29 5c 6e 22 2c 20  %d (0x%08x)\n", 
13350 72 63 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 20  rc, rc);.       
13360 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
13370 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28          fprintf(
13380 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 74  stderr,"Error: t
13390 65 73 74 63 74 72 6c 20 25 73 20 74 61 6b 65 73  estctrl %s takes
133a0 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 20 6f 70   a single int op
133b0 74 69 6f 6e 5c 6e 22 2c 0a 20 20 20 20 20 20 20  tion\n",.       
133c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133d0 20 20 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b 0a       azArg[1]);.
133e0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
133f0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20        break;..  
13400 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33        /* sqlite3
13410 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e  _test_control(in
13420 74 2c 20 63 68 61 72 20 2a 29 20 2a 2f 0a 23 69  t, char *) */.#i
13430 66 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 4b 45  fdef SQLITE_N_KE
13440 59 57 4f 52 44 0a 20 20 20 20 20 20 20 20 63 61  YWORD.        ca
13450 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  se SQLITE_TESTCT
13460 52 4c 5f 49 53 4b 45 59 57 4f 52 44 3a 20 20 20  RL_ISKEYWORD:   
13470 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20          .       
13480 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 33 20 29     if( nArg==3 )
13490 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  {.            co
134a0 6e 73 74 20 63 68 61 72 20 2a 6f 70 74 20 3d 20  nst char *opt = 
134b0 61 7a 41 72 67 5b 32 5d 3b 20 20 20 20 20 20 20  azArg[2];       
134c0 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63   .            rc
134d0 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f   = sqlite3_test_
134e0 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63 74 72 6c  control(testctrl
134f0 2c 20 6f 70 74 29 3b 0a 20 20 20 20 20 20 20 20  , opt);.        
13500 20 20 20 20 70 72 69 6e 74 66 28 22 25 64 20 28      printf("%d (
13510 30 78 25 30 38 78 29 5c 6e 22 2c 20 72 63 2c 20  0x%08x)\n", rc, 
13520 72 63 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  rc);.          }
13530 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
13540 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65      fprintf(stde
13550 72 72 2c 22 45 72 72 6f 72 3a 20 74 65 73 74 63  rr,"Error: testc
13560 74 72 6c 20 25 73 20 74 61 6b 65 73 20 61 20 73  trl %s takes a s
13570 69 6e 67 6c 65 20 63 68 61 72 20 2a 20 6f 70 74  ingle char * opt
13580 69 6f 6e 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  ion\n",.        
13590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135a0 20 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20      azArg[1]);. 
135b0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
135c0 20 20 20 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64       break;.#end
135d0 69 66 0a 0a 20 20 20 20 20 20 20 20 63 61 73 65  if..        case
135e0 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
135f0 5f 42 49 54 56 45 43 5f 54 45 53 54 3a 20 20 20  _BITVEC_TEST:   
13600 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 63        .        c
13610 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
13620 54 52 4c 5f 46 41 55 4c 54 5f 49 4e 53 54 41 4c  TRL_FAULT_INSTAL
13630 4c 3a 20 20 20 20 20 20 20 0a 20 20 20 20 20 20  L:       .      
13640 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45    case SQLITE_TE
13650 53 54 43 54 52 4c 5f 42 45 4e 49 47 4e 5f 4d 41  STCTRL_BENIGN_MA
13660 4c 4c 4f 43 5f 48 4f 4f 4b 53 3a 20 0a 20 20 20  LLOC_HOOKS: .   
13670 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
13680 5f 54 45 53 54 43 54 52 4c 5f 53 43 52 41 54 43  _TESTCTRL_SCRATC
13690 48 4d 41 4c 4c 4f 43 3a 20 20 20 20 20 20 20 0a  HMALLOC:       .
136a0 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a          default:
136b0 0a 20 20 20 20 20 20 20 20 20 20 66 70 72 69 6e  .          fprin
136c0 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72  tf(stderr,"Error
136d0 3a 20 43 4c 49 20 73 75 70 70 6f 72 74 20 66 6f  : CLI support fo
136e0 72 20 74 65 73 74 63 74 72 6c 20 25 73 20 6e 6f  r testctrl %s no
136f0 74 20 69 6d 70 6c 65 6d 65 6e 74 65 64 5c 6e 22  t implemented\n"
13700 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
13710 20 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20      azArg[1]);. 
13720 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
13730 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
13740 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
13750 27 74 27 20 26 26 20 6e 3e 34 20 26 26 20 73 74  't' && n>4 && st
13760 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
13770 22 74 69 6d 65 6f 75 74 22 2c 20 6e 29 3d 3d 30  "timeout", n)==0
13780 20 26 26 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20   && nArg==2 ){. 
13790 20 20 20 6f 70 65 6e 5f 64 62 28 70 29 3b 0a 20     open_db(p);. 
137a0 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f     sqlite3_busy_
137b0 74 69 6d 65 6f 75 74 28 70 2d 3e 64 62 2c 20 61  timeout(p->db, a
137c0 74 6f 69 28 61 7a 41 72 67 5b 31 5d 29 29 3b 0a  toi(azArg[1]));.
137d0 20 20 7d 65 6c 73 65 0a 20 20 20 20 0a 20 20 69    }else.    .  i
137e0 66 28 20 48 41 53 5f 54 49 4d 45 52 20 26 26 20  f( HAS_TIMER && 
137f0 63 3d 3d 27 74 27 20 26 26 20 6e 3e 3d 35 20 26  c=='t' && n>=5 &
13800 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
13810 30 5d 2c 20 22 74 69 6d 65 72 22 2c 20 6e 29 3d  0], "timer", n)=
13820 3d 30 0a 20 20 20 26 26 20 6e 41 72 67 3d 3d 32  =0.   && nArg==2
13830 0a 20 20 29 7b 0a 20 20 20 20 65 6e 61 62 6c 65  .  ){.    enable
13840 54 69 6d 65 72 20 3d 20 62 6f 6f 6c 65 61 6e 56  Timer = booleanV
13850 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a  alue(azArg[1]);.
13860 20 20 7d 65 6c 73 65 0a 20 20 0a 20 20 69 66 28    }else.  .  if(
13870 20 63 3d 3d 27 74 27 20 26 26 20 73 74 72 6e 63   c=='t' && strnc
13880 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 74 72  mp(azArg[0], "tr
13890 61 63 65 22 2c 20 6e 29 3d 3d 30 20 26 26 20 6e  ace", n)==0 && n
138a0 41 72 67 3e 31 20 29 7b 0a 20 20 20 20 6f 70 65  Arg>1 ){.    ope
138b0 6e 5f 64 62 28 70 29 3b 0a 20 20 20 20 6f 75 74  n_db(p);.    out
138c0 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73 65 28 70  put_file_close(p
138d0 2d 3e 74 72 61 63 65 4f 75 74 29 3b 0a 20 20 20  ->traceOut);.   
138e0 20 70 2d 3e 74 72 61 63 65 4f 75 74 20 3d 20 6f   p->traceOut = o
138f0 75 74 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28  utput_file_open(
13900 61 7a 41 72 67 5b 31 5d 29 3b 0a 23 69 66 20 21  azArg[1]);.#if !
13910 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
13920 4d 49 54 5f 54 52 41 43 45 29 20 26 26 20 21 64  MIT_TRACE) && !d
13930 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
13940 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
13950 54 29 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72  T).    if( p->tr
13960 61 63 65 4f 75 74 3d 3d 30 20 29 7b 0a 20 20 20  aceOut==0 ){.   
13970 20 20 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65     sqlite3_trace
13980 28 70 2d 3e 64 62 2c 20 30 2c 20 30 29 3b 0a 20  (p->db, 0, 0);. 
13990 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
139a0 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 70 2d  sqlite3_trace(p-
139b0 3e 64 62 2c 20 73 71 6c 5f 74 72 61 63 65 5f 63  >db, sql_trace_c
139c0 61 6c 6c 62 61 63 6b 2c 20 70 2d 3e 74 72 61 63  allback, p->trac
139d0 65 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  eOut);.    }.#en
139e0 64 69 66 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69  dif.  }else..  i
139f0 66 28 20 63 3d 3d 27 76 27 20 26 26 20 73 74 72  f( c=='v' && str
13a00 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
13a10 76 65 72 73 69 6f 6e 22 2c 20 6e 29 3d 3d 30 20  version", n)==0 
13a20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 53  ){.    printf("S
13a30 51 4c 69 74 65 20 25 73 20 25 73 5c 6e 22 20 2f  QLite %s %s\n" /
13a40 2a 65 78 74 72 61 2d 76 65 72 73 69 6f 6e 2d 69  *extra-version-i
13a50 6e 66 6f 2a 2f 2c 0a 20 20 20 20 20 20 20 20 73  nfo*/,.        s
13a60 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f  qlite3_libversio
13a70 6e 28 29 2c 20 73 71 6c 69 74 65 33 5f 73 6f 75  n(), sqlite3_sou
13a80 72 63 65 69 64 28 29 29 3b 0a 20 20 7d 65 6c 73  rceid());.  }els
13a90 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 76 27 20  e..  if( c=='v' 
13aa0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
13ab0 5b 30 5d 2c 20 22 76 66 73 6e 61 6d 65 22 2c 20  [0], "vfsname", 
13ac0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e  n)==0 ){.    con
13ad0 73 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65  st char *zDbName
13ae0 20 3d 20 6e 41 72 67 3d 3d 32 20 3f 20 61 7a 41   = nArg==2 ? azA
13af0 72 67 5b 31 5d 20 3a 20 22 6d 61 69 6e 22 3b 0a  rg[1] : "main";.
13b00 20 20 20 20 63 68 61 72 20 2a 7a 56 66 73 4e 61      char *zVfsNa
13b10 6d 65 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  me = 0;.    if( 
13b20 70 2d 3e 64 62 20 29 7b 0a 20 20 20 20 20 20 73  p->db ){.      s
13b30 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74  qlite3_file_cont
13b40 72 6f 6c 28 70 2d 3e 64 62 2c 20 7a 44 62 4e 61  rol(p->db, zDbNa
13b50 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  me, SQLITE_FCNTL
13b60 5f 56 46 53 4e 41 4d 45 2c 20 26 7a 56 66 73 4e  _VFSNAME, &zVfsN
13b70 61 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ame);.      if( 
13b80 7a 56 66 73 4e 61 6d 65 20 29 7b 0a 20 20 20 20  zVfsName ){.    
13b90 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e      printf("%s\n
13ba0 22 2c 20 7a 56 66 73 4e 61 6d 65 29 3b 0a 20 20  ", zVfsName);.  
13bb0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
13bc0 65 65 28 7a 56 66 73 4e 61 6d 65 29 3b 0a 20 20  ee(zVfsName);.  
13bd0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
13be0 6c 73 65 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  lse..#if defined
13bf0 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
13c00 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
13c10 5f 45 4e 41 42 4c 45 5f 57 48 45 52 45 54 52 41  _ENABLE_WHERETRA
13c20 43 45 29 0a 20 20 69 66 28 20 63 3d 3d 27 77 27  CE).  if( c=='w'
13c30 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
13c40 67 5b 30 5d 2c 20 22 77 68 65 72 65 74 72 61 63  g[0], "wheretrac
13c50 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  e", n)==0 ){.   
13c60 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
13c70 74 65 33 57 68 65 72 65 54 72 61 63 65 3b 0a 20  te3WhereTrace;. 
13c80 20 20 20 73 71 6c 69 74 65 33 57 68 65 72 65 54     sqlite3WhereT
13c90 72 61 63 65 20 3d 20 62 6f 6f 6c 65 61 6e 56 61  race = booleanVa
13ca0 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  lue(azArg[1]);. 
13cb0 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20   }else.#endif.. 
13cc0 20 69 66 28 20 63 3d 3d 27 77 27 20 26 26 20 73   if( c=='w' && s
13cd0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
13ce0 20 22 77 69 64 74 68 22 2c 20 6e 29 3d 3d 30 20   "width", n)==0 
13cf0 26 26 20 6e 41 72 67 3e 31 20 29 7b 0a 20 20 20  && nArg>1 ){.   
13d00 20 69 6e 74 20 6a 3b 0a 20 20 20 20 61 73 73 65   int j;.    asse
13d10 72 74 28 20 6e 41 72 67 3c 3d 41 72 72 61 79 53  rt( nArg<=ArrayS
13d20 69 7a 65 28 61 7a 41 72 67 29 20 29 3b 0a 20 20  ize(azArg) );.  
13d30 20 20 66 6f 72 28 6a 3d 31 3b 20 6a 3c 6e 41 72    for(j=1; j<nAr
13d40 67 20 26 26 20 6a 3c 41 72 72 61 79 53 69 7a 65  g && j<ArraySize
13d50 28 70 2d 3e 63 6f 6c 57 69 64 74 68 29 3b 20 6a  (p->colWidth); j
13d60 2b 2b 29 7b 0a 20 20 20 20 20 20 70 2d 3e 63 6f  ++){.      p->co
13d70 6c 57 69 64 74 68 5b 6a 2d 31 5d 20 3d 20 61 74  lWidth[j-1] = at
13d80 6f 69 28 61 7a 41 72 67 5b 6a 5d 29 3b 0a 20 20  oi(azArg[j]);.  
13d90 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 7b    }.  }else..  {
13da0 0a 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64  .    fprintf(std
13db0 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 75 6e 6b  err, "Error: unk
13dc0 6e 6f 77 6e 20 63 6f 6d 6d 61 6e 64 20 6f 72 20  nown command or 
13dd0 69 6e 76 61 6c 69 64 20 61 72 67 75 6d 65 6e 74  invalid argument
13de0 73 3a 20 22 0a 20 20 20 20 20 20 22 20 5c 22 25  s: ".      " \"%
13df0 73 5c 22 2e 20 45 6e 74 65 72 20 5c 22 2e 68 65  s\". Enter \".he
13e00 6c 70 5c 22 20 66 6f 72 20 68 65 6c 70 5c 6e 22  lp\" for help\n"
13e10 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a 20 20 20  , azArg[0]);.   
13e20 20 72 63 20 3d 20 31 3b 0a 20 20 7d 0a 0a 20 20   rc = 1;.  }..  
13e30 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
13e40 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52 55 45 20  .** Return TRUE 
13e50 69 66 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 20 6f  if a semicolon o
13e60 63 63 75 72 73 20 61 6e 79 77 68 65 72 65 20 69  ccurs anywhere i
13e70 6e 20 74 68 65 20 66 69 72 73 74 20 4e 20 63 68  n the first N ch
13e80 61 72 61 63 74 65 72 73 0a 2a 2a 20 6f 66 20 73  aracters.** of s
13e90 74 72 69 6e 67 20 7a 5b 5d 2e 0a 2a 2f 0a 73 74  tring z[]..*/.st
13ea0 61 74 69 63 20 69 6e 74 20 5f 63 6f 6e 74 61 69  atic int _contai
13eb0 6e 73 5f 73 65 6d 69 63 6f 6c 6f 6e 28 63 6f 6e  ns_semicolon(con
13ec0 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
13ed0 4e 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66  N){.  int i;.  f
13ee0 6f 72 28 69 3d 30 3b 20 69 3c 4e 3b 20 69 2b 2b  or(i=0; i<N; i++
13ef0 29 7b 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 3b  ){  if( z[i]==';
13f00 27 20 29 20 72 65 74 75 72 6e 20 31 3b 20 7d 0a  ' ) return 1; }.
13f10 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
13f20 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65  *.** Test to see
13f30 20 69 66 20 61 20 6c 69 6e 65 20 63 6f 6e 73 69   if a line consi
13f40 73 74 73 20 65 6e 74 69 72 65 6c 79 20 6f 66 20  sts entirely of 
13f50 77 68 69 74 65 73 70 61 63 65 2e 0a 2a 2f 0a 73  whitespace..*/.s
13f60 74 61 74 69 63 20 69 6e 74 20 5f 61 6c 6c 5f 77  tatic int _all_w
13f70 68 69 74 65 73 70 61 63 65 28 63 6f 6e 73 74 20  hitespace(const 
13f80 63 68 61 72 20 2a 7a 29 7b 0a 20 20 66 6f 72 28  char *z){.  for(
13f90 3b 20 2a 7a 3b 20 7a 2b 2b 29 7b 0a 20 20 20 20  ; *z; z++){.    
13fa0 69 66 28 20 49 73 53 70 61 63 65 28 7a 5b 30 5d  if( IsSpace(z[0]
13fb0 29 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  ) ) continue;.  
13fc0 20 20 69 66 28 20 2a 7a 3d 3d 27 2f 27 20 26 26    if( *z=='/' &&
13fd0 20 7a 5b 31 5d 3d 3d 27 2a 27 20 29 7b 0a 20 20   z[1]=='*' ){.  
13fe0 20 20 20 20 7a 20 2b 3d 20 32 3b 0a 20 20 20 20      z += 2;.    
13ff0 20 20 77 68 69 6c 65 28 20 2a 7a 20 26 26 20 28    while( *z && (
14000 2a 7a 21 3d 27 2a 27 20 7c 7c 20 7a 5b 31 5d 21  *z!='*' || z[1]!
14010 3d 27 2f 27 29 20 29 7b 20 7a 2b 2b 3b 20 7d 0a  ='/') ){ z++; }.
14020 20 20 20 20 20 20 69 66 28 20 2a 7a 3d 3d 30 20        if( *z==0 
14030 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
14040 20 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 63 6f 6e    z++;.      con
14050 74 69 6e 75 65 3b 0a 20 20 20 20 7d 0a 20 20 20  tinue;.    }.   
14060 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 26 26 20   if( *z=='-' && 
14070 7a 5b 31 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20  z[1]=='-' ){.   
14080 20 20 20 7a 20 2b 3d 20 32 3b 0a 20 20 20 20 20     z += 2;.     
14090 20 77 68 69 6c 65 28 20 2a 7a 20 26 26 20 2a 7a   while( *z && *z
140a0 21 3d 27 5c 6e 27 20 29 7b 20 7a 2b 2b 3b 20 7d  !='\n' ){ z++; }
140b0 0a 20 20 20 20 20 20 69 66 28 20 2a 7a 3d 3d 30  .      if( *z==0
140c0 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20   ) return 1;.   
140d0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20     continue;.   
140e0 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b   }.    return 0;
140f0 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b  .  }.  return 1;
14100 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
14110 20 54 52 55 45 20 69 66 20 74 68 65 20 6c 69 6e   TRUE if the lin
14120 65 20 74 79 70 65 64 20 69 6e 20 69 73 20 61 6e  e typed in is an
14130 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 20 74 65 72   SQL command ter
14140 6d 69 6e 61 74 6f 72 20 6f 74 68 65 72 0a 2a 2a  minator other.**
14150 20 74 68 61 6e 20 61 20 73 65 6d 69 2d 63 6f 6c   than a semi-col
14160 6f 6e 2e 20 20 54 68 65 20 53 51 4c 20 53 65 72  on.  The SQL Ser
14170 76 65 72 20 73 74 79 6c 65 20 22 67 6f 22 20 63  ver style "go" c
14180 6f 6d 6d 61 6e 64 20 69 73 20 75 6e 64 65 72 73  ommand is unders
14190 74 6f 6f 64 0a 2a 2a 20 61 73 20 69 73 20 74 68  tood.** as is th
141a0 65 20 4f 72 61 63 6c 65 20 22 2f 22 2e 0a 2a 2f  e Oracle "/"..*/
141b0 0a 73 74 61 74 69 63 20 69 6e 74 20 5f 69 73 5f  .static int _is_
141c0 63 6f 6d 6d 61 6e 64 5f 74 65 72 6d 69 6e 61 74  command_terminat
141d0 6f 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  or(const char *z
141e0 4c 69 6e 65 29 7b 0a 20 20 77 68 69 6c 65 28 20  Line){.  while( 
141f0 49 73 53 70 61 63 65 28 7a 4c 69 6e 65 5b 30 5d  IsSpace(zLine[0]
14200 29 20 29 7b 20 7a 4c 69 6e 65 2b 2b 3b 20 7d 3b  ) ){ zLine++; };
14210 0a 20 20 69 66 28 20 7a 4c 69 6e 65 5b 30 5d 3d  .  if( zLine[0]=
14220 3d 27 2f 27 20 26 26 20 5f 61 6c 6c 5f 77 68 69  ='/' && _all_whi
14230 74 65 73 70 61 63 65 28 26 7a 4c 69 6e 65 5b 31  tespace(&zLine[1
14240 5d 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  ]) ){.    return
14250 20 31 3b 20 20 2f 2a 20 4f 72 61 63 6c 65 20 2a   1;  /* Oracle *
14260 2f 0a 20 20 7d 0a 20 20 69 66 28 20 54 6f 4c 6f  /.  }.  if( ToLo
14270 77 65 72 28 7a 4c 69 6e 65 5b 30 5d 29 3d 3d 27  wer(zLine[0])=='
14280 67 27 20 26 26 20 54 6f 4c 6f 77 65 72 28 7a 4c  g' && ToLower(zL
14290 69 6e 65 5b 31 5d 29 3d 3d 27 6f 27 0a 20 20 20  ine[1])=='o'.   
142a0 20 20 20 20 20 20 26 26 20 5f 61 6c 6c 5f 77 68        && _all_wh
142b0 69 74 65 73 70 61 63 65 28 26 7a 4c 69 6e 65 5b  itespace(&zLine[
142c0 32 5d 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  2]) ){.    retur
142d0 6e 20 31 3b 20 20 2f 2a 20 53 51 4c 20 53 65 72  n 1;  /* SQL Ser
142e0 76 65 72 20 2a 2f 0a 20 20 7d 0a 20 20 72 65 74  ver */.  }.  ret
142f0 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
14300 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 7a  Return true if z
14310 53 71 6c 20 69 73 20 61 20 63 6f 6d 70 6c 65 74  Sql is a complet
14320 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  e SQL statement.
14330 20 20 52 65 74 75 72 6e 20 66 61 6c 73 65 20 69    Return false i
14340 66 20 69 74 0a 2a 2a 20 65 6e 64 73 20 69 6e 20  f it.** ends in 
14350 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20  the middle of a 
14360 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 6f  string literal o
14370 72 20 43 2d 73 74 79 6c 65 20 63 6f 6d 6d 65 6e  r C-style commen
14380 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  t..*/.static int
14390 20 5f 69 73 5f 63 6f 6d 70 6c 65 74 65 28 63 68   _is_complete(ch
143a0 61 72 20 2a 7a 53 71 6c 2c 20 69 6e 74 20 6e 53  ar *zSql, int nS
143b0 71 6c 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  ql){.  int rc;. 
143c0 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 20 72   if( zSql==0 ) r
143d0 65 74 75 72 6e 20 31 3b 0a 20 20 7a 53 71 6c 5b  eturn 1;.  zSql[
143e0 6e 53 71 6c 5d 20 3d 20 27 3b 27 3b 0a 20 20 7a  nSql] = ';';.  z
143f0 53 71 6c 5b 6e 53 71 6c 2b 31 5d 20 3d 20 30 3b  Sql[nSql+1] = 0;
14400 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
14410 63 6f 6d 70 6c 65 74 65 28 7a 53 71 6c 29 3b 0a  complete(zSql);.
14420 20 20 7a 53 71 6c 5b 6e 53 71 6c 5d 20 3d 20 30    zSql[nSql] = 0
14430 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  ;.  return rc;.}
14440 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 69 6e 70  ../*.** Read inp
14450 75 74 20 66 72 6f 6d 20 2a 69 6e 20 61 6e 64 20  ut from *in and 
14460 70 72 6f 63 65 73 73 20 69 74 2e 20 20 49 66 20  process it.  If 
14470 2a 69 6e 3d 3d 30 20 74 68 65 6e 20 69 6e 70 75  *in==0 then inpu
14480 74 0a 2a 2a 20 69 73 20 69 6e 74 65 72 61 63 74  t.** is interact
14490 69 76 65 20 2d 20 74 68 65 20 75 73 65 72 20 69  ive - the user i
144a0 73 20 74 79 70 69 6e 67 20 69 74 20 69 74 2e 20  s typing it it. 
144b0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 70 75   Otherwise, inpu
144c0 74 0a 2a 2a 20 69 73 20 63 6f 6d 69 6e 67 20 66  t.** is coming f
144d0 72 6f 6d 20 61 20 66 69 6c 65 20 6f 72 20 64 65  rom a file or de
144e0 76 69 63 65 2e 20 20 41 20 70 72 6f 6d 70 74 20  vice.  A prompt 
144f0 69 73 20 69 73 73 75 65 64 20 61 6e 64 20 68 69  is issued and hi
14500 73 74 6f 72 79 0a 2a 2a 20 69 73 20 73 61 76 65  story.** is save
14510 64 20 6f 6e 6c 79 20 69 66 20 69 6e 70 75 74 20  d only if input 
14520 69 73 20 69 6e 74 65 72 61 63 74 69 76 65 2e 20  is interactive. 
14530 20 41 6e 20 69 6e 74 65 72 72 75 70 74 20 73 69   An interrupt si
14540 67 6e 61 6c 20 77 69 6c 6c 0a 2a 2a 20 63 61 75  gnal will.** cau
14550 73 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  se this routine 
14560 74 6f 20 65 78 69 74 20 69 6d 6d 65 64 69 61 74  to exit immediat
14570 65 6c 79 2c 20 75 6e 6c 65 73 73 20 69 6e 70 75  ely, unless inpu
14580 74 20 69 73 20 69 6e 74 65 72 61 63 74 69 76 65  t is interactive
14590 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ..**.** Return t
145a0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72  he number of err
145b0 6f 72 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ors..*/.static i
145c0 6e 74 20 70 72 6f 63 65 73 73 5f 69 6e 70 75 74  nt process_input
145d0 28 73 74 72 75 63 74 20 63 61 6c 6c 62 61 63 6b  (struct callback
145e0 5f 64 61 74 61 20 2a 70 2c 20 46 49 4c 45 20 2a  _data *p, FILE *
145f0 69 6e 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4c 69  in){.  char *zLi
14600 6e 65 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a  ne = 0;.  char *
14610 7a 53 71 6c 20 3d 20 30 3b 0a 20 20 69 6e 74 20  zSql = 0;.  int 
14620 6e 53 71 6c 20 3d 20 30 3b 0a 20 20 69 6e 74 20  nSql = 0;.  int 
14630 6e 53 71 6c 50 72 69 6f 72 20 3d 20 30 3b 0a 20  nSqlPrior = 0;. 
14640 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 0a   char *zErrMsg;.
14650 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
14660 65 72 72 43 6e 74 20 3d 20 30 3b 0a 20 20 69 6e  errCnt = 0;.  in
14670 74 20 6c 69 6e 65 6e 6f 20 3d 20 30 3b 0a 20 20  t lineno = 0;.  
14680 69 6e 74 20 73 74 61 72 74 6c 69 6e 65 20 3d 20  int startline = 
14690 30 3b 0a 0a 20 20 77 68 69 6c 65 28 20 65 72 72  0;..  while( err
146a0 43 6e 74 3d 3d 30 20 7c 7c 20 21 62 61 69 6c 5f  Cnt==0 || !bail_
146b0 6f 6e 5f 65 72 72 6f 72 20 7c 7c 20 28 69 6e 3d  on_error || (in=
146c0 3d 30 20 26 26 20 73 74 64 69 6e 5f 69 73 5f 69  =0 && stdin_is_i
146d0 6e 74 65 72 61 63 74 69 76 65 29 20 29 7b 0a 20  nteractive) ){. 
146e0 20 20 20 66 66 6c 75 73 68 28 70 2d 3e 6f 75 74     fflush(p->out
146f0 29 3b 0a 20 20 20 20 66 72 65 65 28 7a 4c 69 6e  );.    free(zLin
14700 65 29 3b 0a 20 20 20 20 7a 4c 69 6e 65 20 3d 20  e);.    zLine = 
14710 6f 6e 65 5f 69 6e 70 75 74 5f 6c 69 6e 65 28 7a  one_input_line(z
14720 53 71 6c 2c 20 69 6e 29 3b 0a 20 20 20 20 69 66  Sql, in);.    if
14730 28 20 7a 4c 69 6e 65 3d 3d 30 20 29 7b 0a 20 20  ( zLine==0 ){.  
14740 20 20 20 20 2f 2a 20 45 6e 64 20 6f 66 20 69 6e      /* End of in
14750 70 75 74 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  put */.      if(
14760 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61   stdin_is_intera
14770 63 74 69 76 65 20 29 20 70 72 69 6e 74 66 28 22  ctive ) printf("
14780 5c 6e 22 29 3b 0a 20 20 20 20 20 20 62 72 65 61  \n");.      brea
14790 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  k;.    }.    if(
147a0 20 73 65 65 6e 49 6e 74 65 72 72 75 70 74 20 29   seenInterrupt )
147b0 7b 0a 20 20 20 20 20 20 69 66 28 20 69 6e 21 3d  {.      if( in!=
147c0 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  0 ) break;.     
147d0 20 73 65 65 6e 49 6e 74 65 72 72 75 70 74 20 3d   seenInterrupt =
147e0 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6c 69   0;.    }.    li
147f0 6e 65 6e 6f 2b 2b 3b 0a 20 20 20 20 69 66 28 20  neno++;.    if( 
14800 28 7a 53 71 6c 3d 3d 30 20 7c 7c 20 7a 53 71 6c  (zSql==0 || zSql
14810 5b 30 5d 3d 3d 30 29 20 26 26 20 5f 61 6c 6c 5f  [0]==0) && _all_
14820 77 68 69 74 65 73 70 61 63 65 28 7a 4c 69 6e 65  whitespace(zLine
14830 29 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  ) ) continue;.  
14840 20 20 69 66 28 20 7a 4c 69 6e 65 20 26 26 20 7a    if( zLine && z
14850 4c 69 6e 65 5b 30 5d 3d 3d 27 2e 27 20 26 26 20  Line[0]=='.' && 
14860 6e 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20  nSql==0 ){.     
14870 20 69 66 28 20 70 2d 3e 65 63 68 6f 4f 6e 20 29   if( p->echoOn )
14880 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20   printf("%s\n", 
14890 7a 4c 69 6e 65 29 3b 0a 20 20 20 20 20 20 72 63  zLine);.      rc
148a0 20 3d 20 64 6f 5f 6d 65 74 61 5f 63 6f 6d 6d 61   = do_meta_comma
148b0 6e 64 28 7a 4c 69 6e 65 2c 20 70 29 3b 0a 20 20  nd(zLine, p);.  
148c0 20 20 20 20 69 66 28 20 72 63 3d 3d 32 20 29 7b      if( rc==2 ){
148d0 20 2f 2a 20 65 78 69 74 20 72 65 71 75 65 73 74   /* exit request
148e0 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 62 72  ed */.        br
148f0 65 61 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  eak;.      }else
14900 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
14910 20 20 20 65 72 72 43 6e 74 2b 2b 3b 0a 20 20 20     errCnt++;.   
14920 20 20 20 7d 0a 20 20 20 20 20 20 63 6f 6e 74 69     }.      conti
14930 6e 75 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  nue;.    }.    i
14940 66 28 20 5f 69 73 5f 63 6f 6d 6d 61 6e 64 5f 74  f( _is_command_t
14950 65 72 6d 69 6e 61 74 6f 72 28 7a 4c 69 6e 65 29  erminator(zLine)
14960 20 26 26 20 5f 69 73 5f 63 6f 6d 70 6c 65 74 65   && _is_complete
14970 28 7a 53 71 6c 2c 20 6e 53 71 6c 29 20 29 7b 0a  (zSql, nSql) ){.
14980 20 20 20 20 20 20 6d 65 6d 63 70 79 28 7a 4c 69        memcpy(zLi
14990 6e 65 2c 22 3b 22 2c 32 29 3b 0a 20 20 20 20 7d  ne,";",2);.    }
149a0 0a 20 20 20 20 6e 53 71 6c 50 72 69 6f 72 20 3d  .    nSqlPrior =
149b0 20 6e 53 71 6c 3b 0a 20 20 20 20 69 66 28 20 7a   nSql;.    if( z
149c0 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Sql==0 ){.      
149d0 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 66 6f 72  int i;.      for
149e0 28 69 3d 30 3b 20 7a 4c 69 6e 65 5b 69 5d 20 26  (i=0; zLine[i] &
149f0 26 20 49 73 53 70 61 63 65 28 7a 4c 69 6e 65 5b  & IsSpace(zLine[
14a00 69 5d 29 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20  i]); i++){}.    
14a10 20 20 69 66 28 20 7a 4c 69 6e 65 5b 69 5d 21 3d    if( zLine[i]!=
14a20 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6e 53 71  0 ){.        nSq
14a30 6c 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 4c 69  l = strlen30(zLi
14a40 6e 65 29 3b 0a 20 20 20 20 20 20 20 20 7a 53 71  ne);.        zSq
14a50 6c 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e 53 71 6c  l = malloc( nSql
14a60 2b 33 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66  +3 );.        if
14a70 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
14a80 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73         fprintf(s
14a90 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f  tderr, "Error: o
14aa0 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29  ut of memory\n")
14ab0 3b 0a 20 20 20 20 20 20 20 20 20 20 65 78 69 74  ;.          exit
14ac0 28 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  (1);.        }. 
14ad0 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 7a 53         memcpy(zS
14ae0 71 6c 2c 20 7a 4c 69 6e 65 2c 20 6e 53 71 6c 2b  ql, zLine, nSql+
14af0 31 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61 72  1);.        star
14b00 74 6c 69 6e 65 20 3d 20 6c 69 6e 65 6e 6f 3b 0a  tline = lineno;.
14b10 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
14b20 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  e{.      int len
14b30 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 4c 69 6e   = strlen30(zLin
14b40 65 29 3b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d  e);.      zSql =
14b50 20 72 65 61 6c 6c 6f 63 28 20 7a 53 71 6c 2c 20   realloc( zSql, 
14b60 6e 53 71 6c 20 2b 20 6c 65 6e 20 2b 20 34 20 29  nSql + len + 4 )
14b70 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 53 71 6c  ;.      if( zSql
14b80 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 66  ==0 ){.        f
14b90 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45  printf(stderr,"E
14ba0 72 72 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d  rror: out of mem
14bb0 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20  ory\n");.       
14bc0 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20 20   exit(1);.      
14bd0 7d 0a 20 20 20 20 20 20 7a 53 71 6c 5b 6e 53 71  }.      zSql[nSq
14be0 6c 2b 2b 5d 20 3d 20 27 5c 6e 27 3b 0a 20 20 20  l++] = '\n';.   
14bf0 20 20 20 6d 65 6d 63 70 79 28 26 7a 53 71 6c 5b     memcpy(&zSql[
14c00 6e 53 71 6c 5d 2c 20 7a 4c 69 6e 65 2c 20 6c 65  nSql], zLine, le
14c10 6e 2b 31 29 3b 0a 20 20 20 20 20 20 6e 53 71 6c  n+1);.      nSql
14c20 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 7d 0a 20   += len;.    }. 
14c30 20 20 20 69 66 28 20 7a 53 71 6c 20 26 26 20 5f     if( zSql && _
14c40 63 6f 6e 74 61 69 6e 73 5f 73 65 6d 69 63 6f 6c  contains_semicol
14c50 6f 6e 28 26 7a 53 71 6c 5b 6e 53 71 6c 50 72 69  on(&zSql[nSqlPri
14c60 6f 72 5d 2c 20 6e 53 71 6c 2d 6e 53 71 6c 50 72  or], nSql-nSqlPr
14c70 69 6f 72 29 0a 20 20 20 20 20 20 20 20 20 20 20  ior).           
14c80 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 5f       && sqlite3_
14c90 63 6f 6d 70 6c 65 74 65 28 7a 53 71 6c 29 20 29  complete(zSql) )
14ca0 7b 0a 20 20 20 20 20 20 70 2d 3e 63 6e 74 20 3d  {.      p->cnt =
14cb0 20 30 3b 0a 20 20 20 20 20 20 6f 70 65 6e 5f 64   0;.      open_d
14cc0 62 28 70 29 3b 0a 20 20 20 20 20 20 42 45 47 49  b(p);.      BEGI
14cd0 4e 5f 54 49 4d 45 52 3b 0a 20 20 20 20 20 20 72  N_TIMER;.      r
14ce0 63 20 3d 20 73 68 65 6c 6c 5f 65 78 65 63 28 70  c = shell_exec(p
14cf0 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 73 68 65 6c  ->db, zSql, shel
14d00 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 70 2c 20 26  l_callback, p, &
14d10 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20  zErrMsg);.      
14d20 45 4e 44 5f 54 49 4d 45 52 3b 0a 20 20 20 20 20  END_TIMER;.     
14d30 20 69 66 28 20 72 63 20 7c 7c 20 7a 45 72 72 4d   if( rc || zErrM
14d40 73 67 20 29 7b 0a 20 20 20 20 20 20 20 20 63 68  sg ){.        ch
14d50 61 72 20 7a 50 72 65 66 69 78 5b 31 30 30 5d 3b  ar zPrefix[100];
14d60 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 6e 21  .        if( in!
14d70 3d 30 20 7c 7c 20 21 73 74 64 69 6e 5f 69 73 5f  =0 || !stdin_is_
14d80 69 6e 74 65 72 61 63 74 69 76 65 20 29 7b 0a 20  interactive ){. 
14d90 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
14da0 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
14db0 28 7a 50 72 65 66 69 78 29 2c 20 7a 50 72 65 66  (zPrefix), zPref
14dc0 69 78 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  ix, .           
14dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14de0 22 45 72 72 6f 72 3a 20 6e 65 61 72 20 6c 69 6e  "Error: near lin
14df0 65 20 25 64 3a 22 2c 20 73 74 61 72 74 6c 69 6e  e %d:", startlin
14e00 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  e);.        }els
14e10 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  e{.          sql
14e20 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
14e30 7a 65 6f 66 28 7a 50 72 65 66 69 78 29 2c 20 7a  zeof(zPrefix), z
14e40 50 72 65 66 69 78 2c 20 22 45 72 72 6f 72 3a 22  Prefix, "Error:"
14e50 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
14e60 20 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67       if( zErrMsg
14e70 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
14e80 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c   fprintf(stderr,
14e90 20 22 25 73 20 25 73 5c 6e 22 2c 20 7a 50 72 65   "%s %s\n", zPre
14ea0 66 69 78 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20  fix, zErrMsg);. 
14eb0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
14ec0 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a  _free(zErrMsg);.
14ed0 20 20 20 20 20 20 20 20 20 20 7a 45 72 72 4d 73            zErrMs
14ee0 67 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  g = 0;.        }
14ef0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
14f00 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  fprintf(stderr, 
14f10 22 25 73 20 25 73 5c 6e 22 2c 20 7a 50 72 65 66  "%s %s\n", zPref
14f20 69 78 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  ix, sqlite3_errm
14f30 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20  sg(p->db));.    
14f40 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 65 72      }.        er
14f50 72 43 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a  rCnt++;.      }.
14f60 20 20 20 20 20 20 66 72 65 65 28 7a 53 71 6c 29        free(zSql)
14f70 3b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 30  ;.      zSql = 0
14f80 3b 0a 20 20 20 20 20 20 6e 53 71 6c 20 3d 20 30  ;.      nSql = 0
14f90 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
14fa0 28 20 7a 53 71 6c 20 29 7b 0a 20 20 20 20 69 66  ( zSql ){.    if
14fb0 28 20 21 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61  ( !_all_whitespa
14fc0 63 65 28 7a 53 71 6c 29 20 29 7b 0a 20 20 20 20  ce(zSql) ){.    
14fd0 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72    fprintf(stderr
14fe0 2c 20 22 45 72 72 6f 72 3a 20 69 6e 63 6f 6d 70  , "Error: incomp
14ff0 6c 65 74 65 20 53 51 4c 3a 20 25 73 5c 6e 22 2c  lete SQL: %s\n",
15000 20 7a 53 71 6c 29 3b 0a 20 20 20 20 7d 0a 20 20   zSql);.    }.  
15010 20 20 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20    free(zSql);.  
15020 7d 0a 20 20 66 72 65 65 28 7a 4c 69 6e 65 29 3b  }.  free(zLine);
15030 0a 20 20 72 65 74 75 72 6e 20 65 72 72 43 6e 74  .  return errCnt
15040 3e 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  >0;.}../*.** Ret
15050 75 72 6e 20 61 20 70 61 74 68 6e 61 6d 65 20 77  urn a pathname w
15060 68 69 63 68 20 69 73 20 74 68 65 20 75 73 65 72  hich is the user
15070 27 73 20 68 6f 6d 65 20 64 69 72 65 63 74 6f 72  's home director
15080 79 2e 20 20 41 0a 2a 2a 20 30 20 72 65 74 75 72  y.  A.** 0 retur
15090 6e 20 69 6e 64 69 63 61 74 65 73 20 61 6e 20 65  n indicates an e
150a0 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e  rror of some kin
150b0 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61  d..*/.static cha
150c0 72 20 2a 66 69 6e 64 5f 68 6f 6d 65 5f 64 69 72  r *find_home_dir
150d0 28 76 6f 69 64 29 7b 0a 20 20 73 74 61 74 69 63  (void){.  static
150e0 20 63 68 61 72 20 2a 68 6f 6d 65 5f 64 69 72 20   char *home_dir 
150f0 3d 20 4e 55 4c 4c 3b 0a 20 20 69 66 28 20 68 6f  = NULL;.  if( ho
15100 6d 65 5f 64 69 72 20 29 20 72 65 74 75 72 6e 20  me_dir ) return 
15110 68 6f 6d 65 5f 64 69 72 3b 0a 0a 23 69 66 20 21  home_dir;..#if !
15120 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
15130 26 26 20 21 64 65 66 69 6e 65 64 28 57 49 4e 33  && !defined(WIN3
15140 32 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  2) && !defined(_
15150 57 49 4e 33 32 5f 57 43 45 29 20 26 26 20 21 64  WIN32_WCE) && !d
15160 65 66 69 6e 65 64 28 5f 5f 52 54 50 5f 5f 29 20  efined(__RTP__) 
15170 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57 52 53  && !defined(_WRS
15180 5f 4b 45 52 4e 45 4c 29 0a 20 20 7b 0a 20 20 20  _KERNEL).  {.   
15190 20 73 74 72 75 63 74 20 70 61 73 73 77 64 20 2a   struct passwd *
151a0 70 77 65 6e 74 3b 0a 20 20 20 20 75 69 64 5f 74  pwent;.    uid_t
151b0 20 75 69 64 20 3d 20 67 65 74 75 69 64 28 29 3b   uid = getuid();
151c0 0a 20 20 20 20 69 66 28 20 28 70 77 65 6e 74 3d  .    if( (pwent=
151d0 67 65 74 70 77 75 69 64 28 75 69 64 29 29 20 21  getpwuid(uid)) !
151e0 3d 20 4e 55 4c 4c 29 20 7b 0a 20 20 20 20 20 20  = NULL) {.      
151f0 68 6f 6d 65 5f 64 69 72 20 3d 20 70 77 65 6e 74  home_dir = pwent
15200 2d 3e 70 77 5f 64 69 72 3b 0a 20 20 20 20 7d 0a  ->pw_dir;.    }.
15210 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20    }.#endif..#if 
15220 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57  defined(_WIN32_W
15230 43 45 29 0a 20 20 2f 2a 20 57 69 6e 64 6f 77 73  CE).  /* Windows
15240 20 43 45 20 28 61 72 6d 2d 77 69 6e 63 65 2d 6d   CE (arm-wince-m
15250 69 6e 67 77 33 32 63 65 2d 67 63 63 29 20 64 6f  ingw32ce-gcc) do
15260 65 73 20 6e 6f 74 20 70 72 6f 76 69 64 65 20 67  es not provide g
15270 65 74 65 6e 76 28 29 0a 20 20 20 2a 2f 0a 20 20  etenv().   */.  
15280 68 6f 6d 65 5f 64 69 72 20 3d 20 22 2f 22 3b 0a  home_dir = "/";.
15290 23 65 6c 73 65 0a 0a 23 69 66 20 64 65 66 69 6e  #else..#if defin
152a0 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65  ed(_WIN32) || de
152b0 66 69 6e 65 64 28 57 49 4e 33 32 29 0a 20 20 69  fined(WIN32).  i
152c0 66 20 28 21 68 6f 6d 65 5f 64 69 72 29 20 7b 0a  f (!home_dir) {.
152d0 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20 67      home_dir = g
152e0 65 74 65 6e 76 28 22 55 53 45 52 50 52 4f 46 49  etenv("USERPROFI
152f0 4c 45 22 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  LE");.  }.#endif
15300 0a 0a 20 20 69 66 20 28 21 68 6f 6d 65 5f 64 69  ..  if (!home_di
15310 72 29 20 7b 0a 20 20 20 20 68 6f 6d 65 5f 64 69  r) {.    home_di
15320 72 20 3d 20 67 65 74 65 6e 76 28 22 48 4f 4d 45  r = getenv("HOME
15330 22 29 3b 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66  ");.  }..#if def
15340 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20  ined(_WIN32) || 
15350 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29 0a 20  defined(WIN32). 
15360 20 69 66 20 28 21 68 6f 6d 65 5f 64 69 72 29 20   if (!home_dir) 
15370 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 72 69  {.    char *zDri
15380 76 65 2c 20 2a 7a 50 61 74 68 3b 0a 20 20 20 20  ve, *zPath;.    
15390 69 6e 74 20 6e 3b 0a 20 20 20 20 7a 44 72 69 76  int n;.    zDriv
153a0 65 20 3d 20 67 65 74 65 6e 76 28 22 48 4f 4d 45  e = getenv("HOME
153b0 44 52 49 56 45 22 29 3b 0a 20 20 20 20 7a 50 61  DRIVE");.    zPa
153c0 74 68 20 3d 20 67 65 74 65 6e 76 28 22 48 4f 4d  th = getenv("HOM
153d0 45 50 41 54 48 22 29 3b 0a 20 20 20 20 69 66 28  EPATH");.    if(
153e0 20 7a 44 72 69 76 65 20 26 26 20 7a 50 61 74 68   zDrive && zPath
153f0 20 29 7b 0a 20 20 20 20 20 20 6e 20 3d 20 73 74   ){.      n = st
15400 72 6c 65 6e 33 30 28 7a 44 72 69 76 65 29 20 2b  rlen30(zDrive) +
15410 20 73 74 72 6c 65 6e 33 30 28 7a 50 61 74 68 29   strlen30(zPath)
15420 20 2b 20 31 3b 0a 20 20 20 20 20 20 68 6f 6d 65   + 1;.      home
15430 5f 64 69 72 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e  _dir = malloc( n
15440 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 68 6f   );.      if( ho
15450 6d 65 5f 64 69 72 3d 3d 30 20 29 20 72 65 74 75  me_dir==0 ) retu
15460 72 6e 20 30 3b 0a 20 20 20 20 20 20 73 71 6c 69  rn 0;.      sqli
15470 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 6e 2c 20  te3_snprintf(n, 
15480 68 6f 6d 65 5f 64 69 72 2c 20 22 25 73 25 73 22  home_dir, "%s%s"
15490 2c 20 7a 44 72 69 76 65 2c 20 7a 50 61 74 68 29  , zDrive, zPath)
154a0 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 68  ;.      return h
154b0 6f 6d 65 5f 64 69 72 3b 0a 20 20 20 20 7d 0a 20  ome_dir;.    }. 
154c0 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20 22 63     home_dir = "c
154d0 3a 5c 5c 22 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  :\\";.  }.#endif
154e0 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 21 5f 57 49  ..#endif /* !_WI
154f0 4e 33 32 5f 57 43 45 20 2a 2f 0a 0a 20 20 69 66  N32_WCE */..  if
15500 28 20 68 6f 6d 65 5f 64 69 72 20 29 7b 0a 20 20  ( home_dir ){.  
15510 20 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c 65 6e    int n = strlen
15520 33 30 28 68 6f 6d 65 5f 64 69 72 29 20 2b 20 31  30(home_dir) + 1
15530 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 20 3d 20  ;.    char *z = 
15540 6d 61 6c 6c 6f 63 28 20 6e 20 29 3b 0a 20 20 20  malloc( n );.   
15550 20 69 66 28 20 7a 20 29 20 6d 65 6d 63 70 79 28   if( z ) memcpy(
15560 7a 2c 20 68 6f 6d 65 5f 64 69 72 2c 20 6e 29 3b  z, home_dir, n);
15570 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20  .    home_dir = 
15580 7a 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  z;.  }..  return
15590 20 68 6f 6d 65 5f 64 69 72 3b 0a 7d 0a 0a 2f 2a   home_dir;.}../*
155a0 0a 2a 2a 20 52 65 61 64 20 69 6e 70 75 74 20 66  .** Read input f
155b0 72 6f 6d 20 74 68 65 20 66 69 6c 65 20 67 69 76  rom the file giv
155c0 65 6e 20 62 79 20 73 71 6c 69 74 65 72 63 5f 6f  en by sqliterc_o
155d0 76 65 72 72 69 64 65 2e 20 20 4f 72 20 69 66 20  verride.  Or if 
155e0 74 68 61 74 0a 2a 2a 20 70 61 72 61 6d 65 74 65  that.** paramete
155f0 72 20 69 73 20 4e 55 4c 4c 2c 20 74 61 6b 65 20  r is NULL, take 
15600 69 6e 70 75 74 20 66 72 6f 6d 20 7e 2f 2e 73 71  input from ~/.sq
15610 6c 69 74 65 72 63 0a 2a 2a 0a 2a 2a 20 52 65 74  literc.**.** Ret
15620 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
15630 6f 66 20 65 72 72 6f 72 73 2e 0a 2a 2f 0a 73 74  of errors..*/.st
15640 61 74 69 63 20 69 6e 74 20 70 72 6f 63 65 73 73  atic int process
15650 5f 73 71 6c 69 74 65 72 63 28 0a 20 20 73 74 72  _sqliterc(.  str
15660 75 63 74 20 63 61 6c 6c 62 61 63 6b 5f 64 61 74  uct callback_dat
15670 61 20 2a 70 2c 20 20 20 20 20 20 20 20 2f 2a 20  a *p,        /* 
15680 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61  Configuration da
15690 74 61 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ta */.  const ch
156a0 61 72 20 2a 73 71 6c 69 74 65 72 63 5f 6f 76 65  ar *sqliterc_ove
156b0 72 72 69 64 65 20 20 20 2f 2a 20 4e 61 6d 65 20  rride   /* Name 
156c0 6f 66 20 63 6f 6e 66 69 67 20 66 69 6c 65 2e 20  of config file. 
156d0 4e 55 4c 4c 20 74 6f 20 75 73 65 20 64 65 66 61  NULL to use defa
156e0 75 6c 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72  ult */.){.  char
156f0 20 2a 68 6f 6d 65 5f 64 69 72 20 3d 20 4e 55 4c   *home_dir = NUL
15700 4c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  L;.  const char 
15710 2a 73 71 6c 69 74 65 72 63 20 3d 20 73 71 6c 69  *sqliterc = sqli
15720 74 65 72 63 5f 6f 76 65 72 72 69 64 65 3b 0a 20  terc_override;. 
15730 20 63 68 61 72 20 2a 7a 42 75 66 20 3d 20 30 3b   char *zBuf = 0;
15740 0a 20 20 46 49 4c 45 20 2a 69 6e 20 3d 20 4e 55  .  FILE *in = NU
15750 4c 4c 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 30  LL;.  int rc = 0
15760 3b 0a 0a 20 20 69 66 20 28 73 71 6c 69 74 65 72  ;..  if (sqliter
15770 63 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 20 20 20  c == NULL) {.   
15780 20 68 6f 6d 65 5f 64 69 72 20 3d 20 66 69 6e 64   home_dir = find
15790 5f 68 6f 6d 65 5f 64 69 72 28 29 3b 0a 20 20 20  _home_dir();.   
157a0 20 69 66 28 20 68 6f 6d 65 5f 64 69 72 3d 3d 30   if( home_dir==0
157b0 20 29 7b 0a 23 69 66 20 21 64 65 66 69 6e 65 64   ){.#if !defined
157c0 28 5f 5f 52 54 50 5f 5f 29 20 26 26 20 21 64 65  (__RTP__) && !de
157d0 66 69 6e 65 64 28 5f 57 52 53 5f 4b 45 52 4e 45  fined(_WRS_KERNE
157e0 4c 29 0a 20 20 20 20 20 20 66 70 72 69 6e 74 66  L).      fprintf
157f0 28 73 74 64 65 72 72 2c 22 25 73 3a 20 45 72 72  (stderr,"%s: Err
15800 6f 72 3a 20 63 61 6e 6e 6f 74 20 6c 6f 63 61 74  or: cannot locat
15810 65 20 79 6f 75 72 20 68 6f 6d 65 20 64 69 72 65  e your home dire
15820 63 74 6f 72 79 5c 6e 22 2c 20 41 72 67 76 30 29  ctory\n", Argv0)
15830 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 72  ;.#endif.      r
15840 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
15850 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69     sqlite3_initi
15860 61 6c 69 7a 65 28 29 3b 0a 20 20 20 20 7a 42 75  alize();.    zBu
15870 66 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  f = sqlite3_mpri
15880 6e 74 66 28 22 25 73 2f 2e 73 71 6c 69 74 65 72  ntf("%s/.sqliter
15890 63 22 2c 68 6f 6d 65 5f 64 69 72 29 3b 0a 20 20  c",home_dir);.  
158a0 20 20 73 71 6c 69 74 65 72 63 20 3d 20 7a 42 75    sqliterc = zBu
158b0 66 3b 0a 20 20 7d 0a 20 20 69 6e 20 3d 20 66 6f  f;.  }.  in = fo
158c0 70 65 6e 28 73 71 6c 69 74 65 72 63 2c 22 72 62  pen(sqliterc,"rb
158d0 22 29 3b 0a 20 20 69 66 28 20 69 6e 20 29 7b 0a  ");.  if( in ){.
158e0 20 20 20 20 69 66 28 20 73 74 64 69 6e 5f 69 73      if( stdin_is
158f0 5f 69 6e 74 65 72 61 63 74 69 76 65 20 29 7b 0a  _interactive ){.
15900 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74        fprintf(st
15910 64 65 72 72 2c 22 2d 2d 20 4c 6f 61 64 69 6e 67  derr,"-- Loading
15920 20 72 65 73 6f 75 72 63 65 73 20 66 72 6f 6d 20   resources from 
15930 25 73 5c 6e 22 2c 73 71 6c 69 74 65 72 63 29 3b  %s\n",sqliterc);
15940 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20  .    }.    rc = 
15950 70 72 6f 63 65 73 73 5f 69 6e 70 75 74 28 70 2c  process_input(p,
15960 69 6e 29 3b 0a 20 20 20 20 66 63 6c 6f 73 65 28  in);.    fclose(
15970 69 6e 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  in);.  }.  sqlit
15980 65 33 5f 66 72 65 65 28 7a 42 75 66 29 3b 0a 20  e3_free(zBuf);. 
15990 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
159a0 2a 0a 2a 2a 20 53 68 6f 77 20 61 76 61 69 6c 61  *.** Show availa
159b0 62 6c 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ble command line
159c0 20 6f 70 74 69 6f 6e 73 0a 2a 2f 0a 73 74 61 74   options.*/.stat
159d0 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 4f  ic const char zO
159e0 70 74 69 6f 6e 73 5b 5d 20 3d 20 0a 20 20 22 20  ptions[] = .  " 
159f0 20 20 2d 62 61 69 6c 20 20 20 20 20 20 20 20 20    -bail         
15a00 20 20 20 20 20 20 20 73 74 6f 70 20 61 66 74 65         stop afte
15a10 72 20 68 69 74 74 69 6e 67 20 61 6e 20 65 72 72  r hitting an err
15a20 6f 72 5c 6e 22 0a 20 20 22 20 20 20 2d 62 61 74  or\n".  "   -bat
15a30 63 68 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ch              
15a40 20 66 6f 72 63 65 20 62 61 74 63 68 20 49 2f 4f   force batch I/O
15a50 5c 6e 22 0a 20 20 22 20 20 20 2d 63 6f 6c 75 6d  \n".  "   -colum
15a60 6e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  n              s
15a70 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74  et output mode t
15a80 6f 20 27 63 6f 6c 75 6d 6e 27 5c 6e 22 0a 20 20  o 'column'\n".  
15a90 22 20 20 20 2d 63 6d 64 20 43 4f 4d 4d 41 4e 44  "   -cmd COMMAND
15aa0 20 20 20 20 20 20 20 20 20 72 75 6e 20 5c 22 43           run \"C
15ab0 4f 4d 4d 41 4e 44 5c 22 20 62 65 66 6f 72 65 20  OMMAND\" before 
15ac0 72 65 61 64 69 6e 67 20 73 74 64 69 6e 5c 6e 22  reading stdin\n"
15ad0 0a 20 20 22 20 20 20 2d 63 73 76 20 20 20 20 20  .  "   -csv     
15ae0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
15af0 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f 20 27  output mode to '
15b00 63 73 76 27 5c 6e 22 0a 20 20 22 20 20 20 2d 65  csv'\n".  "   -e
15b10 63 68 6f 20 20 20 20 20 20 20 20 20 20 20 20 20  cho             
15b20 20 20 20 70 72 69 6e 74 20 63 6f 6d 6d 61 6e 64     print command
15b30 73 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  s before executi
15b40 6f 6e 5c 6e 22 0a 20 20 22 20 20 20 2d 69 6e 69  on\n".  "   -ini
15b50 74 20 46 49 4c 45 4e 41 4d 45 20 20 20 20 20 20  t FILENAME      
15b60 20 72 65 61 64 2f 70 72 6f 63 65 73 73 20 6e 61   read/process na
15b70 6d 65 64 20 66 69 6c 65 5c 6e 22 0a 20 20 22 20  med file\n".  " 
15b80 20 20 2d 5b 6e 6f 5d 68 65 61 64 65 72 20 20 20    -[no]header   
15b90 20 20 20 20 20 20 20 74 75 72 6e 20 68 65 61 64         turn head
15ba0 65 72 73 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22  ers on or off\n"
15bb0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
15bc0 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
15bd0 53 33 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  S3) || defined(S
15be0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
15bf0 53 59 53 35 29 0a 20 20 22 20 20 20 2d 68 65 61  SYS5).  "   -hea
15c00 70 20 53 49 5a 45 20 20 20 20 20 20 20 20 20 20  p SIZE          
15c10 20 53 69 7a 65 20 6f 66 20 68 65 61 70 20 66 6f   Size of heap fo
15c20 72 20 6d 65 6d 73 79 73 33 20 6f 72 20 6d 65 6d  r memsys3 or mem
15c30 73 79 73 35 5c 6e 22 0a 23 65 6e 64 69 66 0a 20  sys5\n".#endif. 
15c40 20 22 20 20 20 2d 68 65 6c 70 20 20 20 20 20 20   "   -help      
15c50 20 20 20 20 20 20 20 20 20 20 73 68 6f 77 20 74            show t
15c60 68 69 73 20 6d 65 73 73 61 67 65 5c 6e 22 0a 20  his message\n". 
15c70 20 22 20 20 20 2d 68 74 6d 6c 20 20 20 20 20 20   "   -html      
15c80 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6f 75            set ou
15c90 74 70 75 74 20 6d 6f 64 65 20 74 6f 20 48 54 4d  tput mode to HTM
15ca0 4c 5c 6e 22 0a 20 20 22 20 20 20 2d 69 6e 74 65  L\n".  "   -inte
15cb0 72 61 63 74 69 76 65 20 20 20 20 20 20 20 20 20  ractive         
15cc0 66 6f 72 63 65 20 69 6e 74 65 72 61 63 74 69 76  force interactiv
15cd0 65 20 49 2f 4f 5c 6e 22 0a 20 20 22 20 20 20 2d  e I/O\n".  "   -
15ce0 6c 69 6e 65 20 20 20 20 20 20 20 20 20 20 20 20  line            
15cf0 20 20 20 20 73 65 74 20 6f 75 74 70 75 74 20 6d      set output m
15d00 6f 64 65 20 74 6f 20 27 6c 69 6e 65 27 5c 6e 22  ode to 'line'\n"
15d10 0a 20 20 22 20 20 20 2d 6c 69 73 74 20 20 20 20  .  "   -list    
15d20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
15d30 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f 20 27  output mode to '
15d40 6c 69 73 74 27 5c 6e 22 0a 20 20 22 20 20 20 2d  list'\n".  "   -
15d50 6d 6d 61 70 20 4e 20 20 20 20 20 20 20 20 20 20  mmap N          
15d60 20 20 20 20 64 65 66 61 75 6c 74 20 6d 6d 61 70      default mmap
15d70 20 73 69 7a 65 20 73 65 74 20 74 6f 20 4e 5c 6e   size set to N\n
15d80 22 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ".#ifdef SQLITE_
15d90 45 4e 41 42 4c 45 5f 4d 55 4c 54 49 50 4c 45 58  ENABLE_MULTIPLEX
15da0 0a 20 20 22 20 20 20 2d 6d 75 6c 74 69 70 6c 65  .  "   -multiple
15db0 78 20 20 20 20 20 20 20 20 20 20 20 65 6e 61 62  x           enab
15dc0 6c 65 20 74 68 65 20 6d 75 6c 74 69 70 6c 65 78  le the multiplex
15dd0 6f 72 20 56 46 53 5c 6e 22 0a 23 65 6e 64 69 66  or VFS\n".#endif
15de0 0a 20 20 22 20 20 20 2d 6e 75 6c 6c 76 61 6c 75  .  "   -nullvalu
15df0 65 20 54 45 58 54 20 20 20 20 20 20 73 65 74 20  e TEXT      set 
15e00 74 65 78 74 20 73 74 72 69 6e 67 20 66 6f 72 20  text string for 
15e10 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 20 44 65 66  NULL values. Def
15e20 61 75 6c 74 20 27 27 5c 6e 22 0a 20 20 22 20 20  ault ''\n".  "  
15e30 20 2d 73 65 70 61 72 61 74 6f 72 20 53 45 50 20   -separator SEP 
15e40 20 20 20 20 20 20 73 65 74 20 6f 75 74 70 75 74        set output
15e50 20 66 69 65 6c 64 20 73 65 70 61 72 61 74 6f 72   field separator
15e60 2e 20 44 65 66 61 75 6c 74 3a 20 27 7c 27 5c 6e  . Default: '|'\n
15e70 22 0a 20 20 22 20 20 20 2d 73 74 61 74 73 20 20  ".  "   -stats  
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69               pri
15e90 6e 74 20 6d 65 6d 6f 72 79 20 73 74 61 74 73 20  nt memory stats 
15ea0 62 65 66 6f 72 65 20 65 61 63 68 20 66 69 6e 61  before each fina
15eb0 6c 69 7a 65 5c 6e 22 0a 20 20 22 20 20 20 2d 76  lize\n".  "   -v
15ec0 65 72 73 69 6f 6e 20 20 20 20 20 20 20 20 20 20  ersion          
15ed0 20 20 20 73 68 6f 77 20 53 51 4c 69 74 65 20 76     show SQLite v
15ee0 65 72 73 69 6f 6e 5c 6e 22 0a 20 20 22 20 20 20  ersion\n".  "   
15ef0 2d 76 66 73 20 4e 41 4d 45 20 20 20 20 20 20 20  -vfs NAME       
15f00 20 20 20 20 20 75 73 65 20 4e 41 4d 45 20 61 73       use NAME as
15f10 20 74 68 65 20 64 65 66 61 75 6c 74 20 56 46 53   the default VFS
15f20 5c 6e 22 0a 23 69 66 64 65 66 20 53 51 4c 49 54  \n".#ifdef SQLIT
15f30 45 5f 45 4e 41 42 4c 45 5f 56 46 53 54 52 41 43  E_ENABLE_VFSTRAC
15f40 45 0a 20 20 22 20 20 20 2d 76 66 73 74 72 61 63  E.  "   -vfstrac
15f50 65 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 61  e            ena
15f60 62 6c 65 20 74 72 61 63 69 6e 67 20 6f 66 20 61  ble tracing of a
15f70 6c 6c 20 56 46 53 20 63 61 6c 6c 73 5c 6e 22 0a  ll VFS calls\n".
15f80 23 65 6e 64 69 66 0a 3b 0a 73 74 61 74 69 63 20  #endif.;.static 
15f90 76 6f 69 64 20 75 73 61 67 65 28 69 6e 74 20 73  void usage(int s
15fa0 68 6f 77 44 65 74 61 69 6c 29 7b 0a 20 20 66 70  howDetail){.  fp
15fb0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 0a 20 20  rintf(stderr,.  
15fc0 20 20 20 20 22 55 73 61 67 65 3a 20 25 73 20 5b      "Usage: %s [
15fd0 4f 50 54 49 4f 4e 53 5d 20 46 49 4c 45 4e 41 4d  OPTIONS] FILENAM
15fe0 45 20 5b 53 51 4c 5d 5c 6e 22 20 20 0a 20 20 20  E [SQL]\n"  .   
15ff0 20 20 20 22 46 49 4c 45 4e 41 4d 45 20 69 73 20     "FILENAME is 
16000 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 53  the name of an S
16010 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 2e 20  QLite database. 
16020 41 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 69  A new database i
16030 73 20 63 72 65 61 74 65 64 5c 6e 22 0a 20 20 20  s created\n".   
16040 20 20 20 22 69 66 20 74 68 65 20 66 69 6c 65 20     "if the file 
16050 64 6f 65 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  does not previou
16060 73 6c 79 20 65 78 69 73 74 2e 5c 6e 22 2c 20 41  sly exist.\n", A
16070 72 67 76 30 29 3b 0a 20 20 69 66 28 20 73 68 6f  rgv0);.  if( sho
16080 77 44 65 74 61 69 6c 20 29 7b 0a 20 20 20 20 66  wDetail ){.    f
16090 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
160a0 4f 50 54 49 4f 4e 53 20 69 6e 63 6c 75 64 65 3a  OPTIONS include:
160b0 5c 6e 25 73 22 2c 20 7a 4f 70 74 69 6f 6e 73 29  \n%s", zOptions)
160c0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66  ;.  }else{.    f
160d0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
160e0 55 73 65 20 74 68 65 20 2d 68 65 6c 70 20 6f 70  Use the -help op
160f0 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f  tion for additio
16100 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 5c  nal information\
16110 6e 22 29 3b 0a 20 20 7d 0a 20 20 65 78 69 74 28  n");.  }.  exit(
16120 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69  1);.}../*.** Ini
16130 74 69 61 6c 69 7a 65 20 74 68 65 20 73 74 61 74  tialize the stat
16140 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e  e information in
16150 20 64 61 74 61 0a 2a 2f 0a 73 74 61 74 69 63 20   data.*/.static 
16160 76 6f 69 64 20 6d 61 69 6e 5f 69 6e 69 74 28 73  void main_init(s
16170 74 72 75 63 74 20 63 61 6c 6c 62 61 63 6b 5f 64  truct callback_d
16180 61 74 61 20 2a 64 61 74 61 29 20 7b 0a 20 20 6d  ata *data) {.  m
16190 65 6d 73 65 74 28 64 61 74 61 2c 20 30 2c 20 73  emset(data, 0, s
161a0 69 7a 65 6f 66 28 2a 64 61 74 61 29 29 3b 0a 20  izeof(*data));. 
161b0 20 64 61 74 61 2d 3e 6d 6f 64 65 20 3d 20 4d 4f   data->mode = MO
161c0 44 45 5f 4c 69 73 74 3b 0a 20 20 6d 65 6d 63 70  DE_List;.  memcp
161d0 79 28 64 61 74 61 2d 3e 73 65 70 61 72 61 74 6f  y(data->separato
161e0 72 2c 22 7c 22 2c 20 32 29 3b 0a 20 20 64 61 74  r,"|", 2);.  dat
161f0 61 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 3d 20  a->showHeader = 
16200 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  0;.  sqlite3_con
16210 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49  fig(SQLITE_CONFI
16220 47 5f 55 52 49 2c 20 31 29 3b 0a 20 20 73 71 6c  G_URI, 1);.  sql
16230 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49  ite3_config(SQLI
16240 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20 73  TE_CONFIG_LOG, s
16250 68 65 6c 6c 4c 6f 67 2c 20 64 61 74 61 29 3b 0a  hellLog, data);.
16260 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
16270 74 66 28 73 69 7a 65 6f 66 28 6d 61 69 6e 50 72  tf(sizeof(mainPr
16280 6f 6d 70 74 29 2c 20 6d 61 69 6e 50 72 6f 6d 70  ompt), mainPromp
16290 74 2c 22 73 71 6c 69 74 65 3e 20 22 29 3b 0a 20  t,"sqlite> ");. 
162a0 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
162b0 66 28 73 69 7a 65 6f 66 28 63 6f 6e 74 69 6e 75  f(sizeof(continu
162c0 65 50 72 6f 6d 70 74 29 2c 20 63 6f 6e 74 69 6e  ePrompt), contin
162d0 75 65 50 72 6f 6d 70 74 2c 22 20 20 20 2e 2e 2e  uePrompt,"   ...
162e0 3e 20 22 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  > ");.  sqlite3_
162f0 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f  config(SQLITE_CO
16300 4e 46 49 47 5f 53 49 4e 47 4c 45 54 48 52 45 41  NFIG_SINGLETHREA
16310 44 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 74  D);.}../*.** Get
16320 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
16330 20 61 6e 20 2d 2d 6f 70 74 69 6f 6e 2e 20 20 54   an --option.  T
16340 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 20 61 6e  hrow an error an
16350 64 20 64 69 65 20 69 66 20 6e 6f 20 61 72 67 75  d die if no argu
16360 6d 65 6e 74 0a 2a 2a 20 69 73 20 61 76 61 69 6c  ment.** is avail
16370 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  able..*/.static 
16380 63 68 61 72 20 2a 63 6d 64 6c 69 6e 65 5f 6f 70  char *cmdline_op
16390 74 69 6f 6e 5f 76 61 6c 75 65 28 69 6e 74 20 61  tion_value(int a
163a0 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76  rgc, char **argv
163b0 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69 66 28 20  , int i){.  if( 
163c0 69 3d 3d 61 72 67 63 20 29 7b 0a 20 20 20 20 66  i==argc ){.    f
163d0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
163e0 25 73 3a 20 45 72 72 6f 72 3a 20 6d 69 73 73 69  %s: Error: missi
163f0 6e 67 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 25  ng argument to %
16400 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  s\n",.          
16410 20 20 61 72 67 76 5b 30 5d 2c 20 61 72 67 76 5b    argv[0], argv[
16420 61 72 67 63 2d 31 5d 29 3b 0a 20 20 20 20 65 78  argc-1]);.    ex
16430 69 74 28 31 29 3b 0a 20 20 7d 0a 20 20 72 65 74  it(1);.  }.  ret
16440 75 72 6e 20 61 72 67 76 5b 69 5d 3b 0a 7d 0a 0a  urn argv[i];.}..
16450 69 6e 74 20 6d 61 69 6e 28 69 6e 74 20 61 72 67  int main(int arg
16460 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76 29 7b  c, char **argv){
16470 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67  .  char *zErrMsg
16480 20 3d 20 30 3b 0a 20 20 73 74 72 75 63 74 20 63   = 0;.  struct c
16490 61 6c 6c 62 61 63 6b 5f 64 61 74 61 20 64 61 74  allback_data dat
164a0 61 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  a;.  const char 
164b0 2a 7a 49 6e 69 74 46 69 6c 65 20 3d 20 30 3b 0a  *zInitFile = 0;.
164c0 20 20 63 68 61 72 20 2a 7a 46 69 72 73 74 43 6d    char *zFirstCm
164d0 64 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69 3b 0a  d = 0;.  int i;.
164e0 20 20 69 6e 74 20 72 63 20 3d 20 30 3b 0a 0a 20    int rc = 0;.. 
164f0 20 69 66 28 20 73 74 72 63 6d 70 28 73 71 6c 69   if( strcmp(sqli
16500 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 53  te3_sourceid(),S
16510 51 4c 49 54 45 5f 53 4f 55 52 43 45 5f 49 44 29  QLITE_SOURCE_ID)
16520 21 3d 30 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  !=0 ){.    fprin
16530 74 66 28 73 74 64 65 72 72 2c 20 22 53 51 4c 69  tf(stderr, "SQLi
16540 74 65 20 68 65 61 64 65 72 20 61 6e 64 20 73 6f  te header and so
16550 75 72 63 65 20 76 65 72 73 69 6f 6e 20 6d 69 73  urce version mis
16560 6d 61 74 63 68 5c 6e 25 73 5c 6e 25 73 5c 6e 22  match\n%s\n%s\n"
16570 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ,.            sq
16580 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29  lite3_sourceid()
16590 2c 20 53 51 4c 49 54 45 5f 53 4f 55 52 43 45 5f  , SQLITE_SOURCE_
165a0 49 44 29 3b 0a 20 20 20 20 65 78 69 74 28 31 29  ID);.    exit(1)
165b0 3b 0a 20 20 7d 0a 20 20 41 72 67 76 30 20 3d 20  ;.  }.  Argv0 = 
165c0 61 72 67 76 5b 30 5d 3b 0a 20 20 6d 61 69 6e 5f  argv[0];.  main_
165d0 69 6e 69 74 28 26 64 61 74 61 29 3b 0a 20 20 73  init(&data);.  s
165e0 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74  tdin_is_interact
165f0 69 76 65 20 3d 20 69 73 61 74 74 79 28 30 29 3b  ive = isatty(0);
16600 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
16610 20 77 65 20 68 61 76 65 20 61 20 76 61 6c 69 64   we have a valid
16620 20 73 69 67 6e 61 6c 20 68 61 6e 64 6c 65 72 20   signal handler 
16630 65 61 72 6c 79 2c 20 62 65 66 6f 72 65 20 61 6e  early, before an
16640 79 74 68 69 6e 67 0a 20 20 2a 2a 20 65 6c 73 65  ything.  ** else
16650 20 69 73 20 64 6f 6e 65 2e 0a 20 20 2a 2f 0a 23   is done..  */.#
16660 69 66 64 65 66 20 53 49 47 49 4e 54 0a 20 20 73  ifdef SIGINT.  s
16670 69 67 6e 61 6c 28 53 49 47 49 4e 54 2c 20 69 6e  ignal(SIGINT, in
16680 74 65 72 72 75 70 74 5f 68 61 6e 64 6c 65 72 29  terrupt_handler)
16690 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 44  ;.#endif..  /* D
166a0 6f 20 61 6e 20 69 6e 69 74 69 61 6c 20 70 61 73  o an initial pas
166b0 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 63 6f  s through the co
166c0 6d 6d 61 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d  mmand-line argum
166d0 65 6e 74 20 74 6f 20 6c 6f 63 61 74 65 0a 20 20  ent to locate.  
166e0 2a 2a 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ** the name of t
166f0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
16700 2c 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  , the name of th
16710 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
16720 20 66 69 6c 65 2c 0a 20 20 2a 2a 20 74 68 65 20   file,.  ** the 
16730 73 69 7a 65 20 6f 66 20 74 68 65 20 61 6c 74 65  size of the alte
16740 72 6e 61 74 69 76 65 20 6d 61 6c 6c 6f 63 20 68  rnative malloc h
16750 65 61 70 2c 0a 20 20 2a 2a 20 61 6e 64 20 74 68  eap,.  ** and th
16760 65 20 66 69 72 73 74 20 63 6f 6d 6d 61 6e 64 20  e first command 
16770 74 6f 20 65 78 65 63 75 74 65 2e 0a 20 20 2a 2f  to execute..  */
16780 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 61 72  .  for(i=1; i<ar
16790 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 63 68  gc; i++){.    ch
167a0 61 72 20 2a 7a 3b 0a 20 20 20 20 7a 20 3d 20 61  ar *z;.    z = a
167b0 72 67 76 5b 69 5d 3b 0a 20 20 20 20 69 66 28 20  rgv[i];.    if( 
167c0 7a 5b 30 5d 21 3d 27 2d 27 20 29 7b 0a 20 20 20  z[0]!='-' ){.   
167d0 20 20 20 69 66 28 20 64 61 74 61 2e 7a 44 62 46     if( data.zDbF
167e0 69 6c 65 6e 61 6d 65 3d 3d 30 20 29 7b 0a 20 20  ilename==0 ){.  
167f0 20 20 20 20 20 20 64 61 74 61 2e 7a 44 62 46 69        data.zDbFi
16800 6c 65 6e 61 6d 65 20 3d 20 7a 3b 0a 20 20 20 20  lename = z;.    
16810 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20      continue;.  
16820 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
16830 7a 46 69 72 73 74 43 6d 64 3d 3d 30 20 29 7b 0a  zFirstCmd==0 ){.
16840 20 20 20 20 20 20 20 20 7a 46 69 72 73 74 43 6d          zFirstCm
16850 64 20 3d 20 7a 3b 0a 20 20 20 20 20 20 20 20 63  d = z;.        c
16860 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 7d  ontinue;.      }
16870 0a 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73  .      fprintf(s
16880 74 64 65 72 72 2c 22 25 73 3a 20 45 72 72 6f 72  tderr,"%s: Error
16890 3a 20 74 6f 6f 20 6d 61 6e 79 20 6f 70 74 69 6f  : too many optio
168a0 6e 73 3a 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 41  ns: \"%s\"\n", A
168b0 72 67 76 30 2c 20 61 72 67 76 5b 69 5d 29 3b 0a  rgv0, argv[i]);.
168c0 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74        fprintf(st
168d0 64 65 72 72 2c 22 55 73 65 20 2d 68 65 6c 70 20  derr,"Use -help 
168e0 66 6f 72 20 61 20 6c 69 73 74 20 6f 66 20 6f 70  for a list of op
168f0 74 69 6f 6e 73 2e 5c 6e 22 29 3b 0a 20 20 20 20  tions.\n");.    
16900 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20    return 1;.    
16910 7d 0a 20 20 20 20 69 66 28 20 7a 5b 31 5d 3d 3d  }.    if( z[1]==
16920 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20 20 20 69  '-' ) z++;.    i
16930 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 73 65  f( strcmp(z,"-se
16940 70 61 72 61 74 6f 72 22 29 3d 3d 30 0a 20 20 20  parator")==0.   
16950 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22 2d    || strcmp(z,"-
16960 6e 75 6c 6c 76 61 6c 75 65 22 29 3d 3d 30 0a 20  nullvalue")==0. 
16970 20 20 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a 2c      || strcmp(z,
16980 22 2d 63 6d 64 22 29 3d 3d 30 0a 20 20 20 20 29  "-cmd")==0.    )
16990 7b 0a 20 20 20 20 20 20 28 76 6f 69 64 29 63 6d  {.      (void)cm
169a0 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c  dline_option_val
169b0 75 65 28 61 72 67 63 2c 20 61 72 67 76 2c 20 2b  ue(argc, argv, +
169c0 2b 69 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  +i);.    }else i
169d0 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 69 6e  f( strcmp(z,"-in
169e0 69 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  it")==0 ){.     
169f0 20 7a 49 6e 69 74 46 69 6c 65 20 3d 20 63 6d 64   zInitFile = cmd
16a00 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75  line_option_valu
16a10 65 28 61 72 67 63 2c 20 61 72 67 76 2c 20 2b 2b  e(argc, argv, ++
16a20 69 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  i);.    }else if
16a30 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 62 61 74  ( strcmp(z,"-bat
16a40 63 68 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ch")==0 ){.     
16a50 20 2f 2a 20 4e 65 65 64 20 74 6f 20 63 68 65 63   /* Need to chec
16a60 6b 20 66 6f 72 20 62 61 74 63 68 20 6d 6f 64 65  k for batch mode
16a70 20 68 65 72 65 20 74 6f 20 73 6f 20 77 65 20 63   here to so we c
16a80 61 6e 20 61 76 6f 69 64 20 70 72 69 6e 74 69 6e  an avoid printin
16a90 67 0a 20 20 20 20 20 20 2a 2a 20 69 6e 66 6f 72  g.      ** infor
16aa0 6d 61 74 69 6f 6e 61 6c 20 6d 65 73 73 61 67 65  mational message
16ab0 73 20 28 6c 69 6b 65 20 66 72 6f 6d 20 70 72 6f  s (like from pro
16ac0 63 65 73 73 5f 73 71 6c 69 74 65 72 63 29 20 62  cess_sqliterc) b
16ad0 65 66 6f 72 65 20 0a 20 20 20 20 20 20 2a 2a 20  efore .      ** 
16ae0 77 65 20 64 6f 20 74 68 65 20 61 63 74 75 61 6c  we do the actual
16af0 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20 61   processing of a
16b00 72 67 75 6d 65 6e 74 73 20 6c 61 74 65 72 20 69  rguments later i
16b10 6e 20 61 20 73 65 63 6f 6e 64 20 70 61 73 73 2e  n a second pass.
16b20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
16b30 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63  stdin_is_interac
16b40 74 69 76 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65  tive = 0;.    }e
16b50 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
16b60 2c 22 2d 68 65 61 70 22 29 3d 3d 30 20 29 7b 0a  ,"-heap")==0 ){.
16b70 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
16b80 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
16b90 33 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  3) || defined(SQ
16ba0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
16bb0 59 53 35 29 0a 20 20 20 20 20 20 69 6e 74 20 6a  YS5).      int j
16bc0 2c 20 63 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74  , c;.      const
16bd0 20 63 68 61 72 20 2a 7a 53 69 7a 65 3b 0a 20 20   char *zSize;.  
16be0 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36      sqlite3_int6
16bf0 34 20 73 7a 48 65 61 70 3b 0a 0a 20 20 20 20 20  4 szHeap;..     
16c00 20 7a 53 69 7a 65 20 3d 20 63 6d 64 6c 69 6e 65   zSize = cmdline
16c10 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72  _option_value(ar
16c20 67 63 2c 20 61 72 67 76 2c 20 2b 2b 69 29 3b 0a  gc, argv, ++i);.
16c30 20 20 20 20 20 20 73 7a 48 65 61 70 20 3d 20 69        szHeap = i
16c40 6e 74 65 67 65 72 56 61 6c 75 65 28 7a 53 69 7a  ntegerValue(zSiz
16c50 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 7a  e);.      if( sz
16c60 48 65 61 70 3e 30 78 37 66 66 66 30 30 30 30 20  Heap>0x7fff0000 
16c70 29 20 73 7a 48 65 61 70 20 3d 20 30 78 37 66 66  ) szHeap = 0x7ff
16c80 66 30 30 30 30 3b 0a 20 20 20 20 20 20 73 71 6c  f0000;.      sql
16c90 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49  ite3_config(SQLI
16ca0 54 45 5f 43 4f 4e 46 49 47 5f 48 45 41 50 2c 20  TE_CONFIG_HEAP, 
16cb0 6d 61 6c 6c 6f 63 28 28 69 6e 74 29 73 7a 48 65  malloc((int)szHe
16cc0 61 70 29 2c 20 28 69 6e 74 29 73 7a 48 65 61 70  ap), (int)szHeap
16cd0 2c 20 36 34 29 3b 0a 23 65 6e 64 69 66 0a 23 69  , 64);.#endif.#i
16ce0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
16cf0 4c 45 5f 56 46 53 54 52 41 43 45 0a 20 20 20 20  LE_VFSTRACE.    
16d00 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
16d10 28 7a 2c 22 2d 76 66 73 74 72 61 63 65 22 29 3d  (z,"-vfstrace")=
16d20 3d 30 20 29 7b 0a 20 20 20 20 20 20 65 78 74 65  =0 ){.      exte
16d30 72 6e 20 69 6e 74 20 76 66 73 74 72 61 63 65 5f  rn int vfstrace_
16d40 72 65 67 69 73 74 65 72 28 0a 20 20 20 20 20 20  register(.      
16d50 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
16d60 54 72 61 63 65 4e 61 6d 65 2c 0a 20 20 20 20 20  TraceName,.     
16d70 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
16d80 7a 4f 6c 64 56 66 73 4e 61 6d 65 2c 0a 20 20 20  zOldVfsName,.   
16d90 20 20 20 20 20 20 69 6e 74 20 28 2a 78 4f 75 74        int (*xOut
16da0 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 76 6f  )(const char*,vo
16db0 69 64 2a 29 2c 0a 20 20 20 20 20 20 20 20 20 76  id*),.         v
16dc0 6f 69 64 20 2a 70 4f 75 74 41 72 67 2c 0a 20 20  oid *pOutArg,.  
16dd0 20 20 20 20 20 20 20 69 6e 74 20 6d 61 6b 65 44         int makeD
16de0 65 66 61 75 6c 74 0a 20 20 20 20 20 20 29 3b 0a  efault.      );.
16df0 20 20 20 20 20 20 76 66 73 74 72 61 63 65 5f 72        vfstrace_r
16e00 65 67 69 73 74 65 72 28 22 74 72 61 63 65 22 2c  egister("trace",
16e10 30 2c 28 69 6e 74 28 2a 29 28 63 6f 6e 73 74 20  0,(int(*)(const 
16e20 63 68 61 72 2a 2c 76 6f 69 64 2a 29 29 66 70 75  char*,void*))fpu
16e30 74 73 2c 73 74 64 65 72 72 2c 31 29 3b 0a 23 65  ts,stderr,1);.#e
16e40 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
16e50 54 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54 49 50  TE_ENABLE_MULTIP
16e60 4c 45 58 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  LEX.    }else if
16e70 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6d 75 6c  ( strcmp(z,"-mul
16e80 74 69 70 6c 65 78 22 29 3d 3d 30 20 29 7b 0a 20  tiplex")==0 ){. 
16e90 20 20 20 20 20 65 78 74 65 72 6e 20 69 6e 74 20       extern int 
16ea0 73 71 6c 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65  sqlite3_multiple
16eb0 5f 69 6e 69 74 69 61 6c 69 7a 65 28 63 6f 6e 73  _initialize(cons
16ec0 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 20 20  t char*,int);.  
16ed0 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 6c 74      sqlite3_mult
16ee0 69 70 6c 65 78 5f 69 6e 69 74 69 61 6c 69 7a 65  iplex_initialize
16ef0 28 30 2c 20 31 29 3b 0a 23 65 6e 64 69 66 0a 20  (0, 1);.#endif. 
16f00 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
16f10 63 6d 70 28 7a 2c 22 2d 6d 6d 61 70 22 29 3d 3d  cmp(z,"-mmap")==
16f20 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
16f30 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45  e3_config(SQLITE
16f40 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 4c 49 4d  _CONFIG_MMAP_LIM
16f50 49 54 2c 20 69 6e 74 65 67 65 72 56 61 6c 75 65  IT, integerValue
16f60 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f  (cmdline_option_
16f70 76 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c  value(argc,argv,
16f80 2b 2b 69 29 29 29 3b 0a 20 20 20 20 7d 65 6c 73  ++i)));.    }els
16f90 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
16fa0 2d 76 66 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20  -vfs")==0 ){.   
16fb0 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a     sqlite3_vfs *
16fc0 70 56 66 73 20 3d 20 73 71 6c 69 74 65 33 5f 76  pVfs = sqlite3_v
16fd0 66 73 5f 66 69 6e 64 28 63 6d 64 6c 69 6e 65 5f  fs_find(cmdline_
16fe0 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67  option_value(arg
16ff0 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20  c,argv,++i));.  
17000 20 20 20 20 69 66 28 20 70 56 66 73 20 29 7b 0a      if( pVfs ){.
17010 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
17020 76 66 73 5f 72 65 67 69 73 74 65 72 28 70 56 66  vfs_register(pVf
17030 73 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c  s, 1);.      }el
17040 73 65 7b 0a 20 20 20 20 20 20 20 20 66 70 72 69  se{.        fpri
17050 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6e 6f 20  ntf(stderr, "no 
17060 73 75 63 68 20 56 46 53 3a 20 5c 22 25 73 5c 22  such VFS: \"%s\"
17070 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20  \n", argv[i]);. 
17080 20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b 0a         exit(1);.
17090 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
170a0 7d 0a 20 20 69 66 28 20 64 61 74 61 2e 7a 44 62  }.  if( data.zDb
170b0 46 69 6c 65 6e 61 6d 65 3d 3d 30 20 29 7b 0a 23  Filename==0 ){.#
170c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
170d0 49 54 5f 4d 45 4d 4f 52 59 44 42 0a 20 20 20 20  IT_MEMORYDB.    
170e0 64 61 74 61 2e 7a 44 62 46 69 6c 65 6e 61 6d 65  data.zDbFilename
170f0 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a 22 3b 0a 23   = ":memory:";.#
17100 65 6c 73 65 0a 20 20 20 20 66 70 72 69 6e 74 66  else.    fprintf
17110 28 73 74 64 65 72 72 2c 22 25 73 3a 20 45 72 72  (stderr,"%s: Err
17120 6f 72 3a 20 6e 6f 20 64 61 74 61 62 61 73 65 20  or: no database 
17130 66 69 6c 65 6e 61 6d 65 20 73 70 65 63 69 66 69  filename specifi
17140 65 64 5c 6e 22 2c 20 41 72 67 76 30 29 3b 0a 20  ed\n", Argv0);. 
17150 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6e     return 1;.#en
17160 64 69 66 0a 20 20 7d 0a 20 20 64 61 74 61 2e 6f  dif.  }.  data.o
17170 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a 0a 20 20  ut = stdout;..  
17180 2f 2a 20 47 6f 20 61 68 65 61 64 20 61 6e 64 20  /* Go ahead and 
17190 6f 70 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  open the databas
171a0 65 20 66 69 6c 65 20 69 66 20 69 74 20 61 6c 72  e file if it alr
171b0 65 61 64 79 20 65 78 69 73 74 73 2e 20 20 49 66  eady exists.  If
171c0 20 74 68 65 0a 20 20 2a 2a 20 66 69 6c 65 20 64   the.  ** file d
171d0 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 64  oes not exist, d
171e0 65 6c 61 79 20 6f 70 65 6e 69 6e 67 20 69 74 2e  elay opening it.
171f0 20 20 54 68 69 73 20 70 72 65 76 65 6e 74 73 20    This prevents 
17200 65 6d 70 74 79 20 64 61 74 61 62 61 73 65 0a 20  empty database. 
17210 20 2a 2a 20 66 69 6c 65 73 20 66 72 6f 6d 20 62   ** files from b
17220 65 69 6e 67 20 63 72 65 61 74 65 64 20 69 66 20  eing created if 
17230 61 20 75 73 65 72 20 6d 69 73 74 79 70 65 73 20  a user mistypes 
17240 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d  the database nam
17250 65 20 61 72 67 75 6d 65 6e 74 0a 20 20 2a 2a 20  e argument.  ** 
17260 74 6f 20 74 68 65 20 73 71 6c 69 74 65 20 63 6f  to the sqlite co
17270 6d 6d 61 6e 64 2d 6c 69 6e 65 20 74 6f 6f 6c 2e  mmand-line tool.
17280 0a 20 20 2a 2f 0a 20 20 69 66 28 20 61 63 63 65  .  */.  if( acce
17290 73 73 28 64 61 74 61 2e 7a 44 62 46 69 6c 65 6e  ss(data.zDbFilen
172a0 61 6d 65 2c 20 30 29 3d 3d 30 20 29 7b 0a 20 20  ame, 0)==0 ){.  
172b0 20 20 6f 70 65 6e 5f 64 62 28 26 64 61 74 61 29    open_db(&data)
172c0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 50 72 6f 63  ;.  }..  /* Proc
172d0 65 73 73 20 74 68 65 20 69 6e 69 74 69 61 6c 69  ess the initiali
172e0 7a 61 74 69 6f 6e 20 66 69 6c 65 20 69 66 20 74  zation file if t
172f0 68 65 72 65 20 69 73 20 6f 6e 65 2e 20 20 49 66  here is one.  If
17300 20 6e 6f 20 2d 69 6e 69 74 20 6f 70 74 69 6f 6e   no -init option
17310 0a 20 20 2a 2a 20 69 73 20 67 69 76 65 6e 20 6f  .  ** is given o
17320 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69  n the command li
17330 6e 65 2c 20 6c 6f 6f 6b 20 66 6f 72 20 61 20 66  ne, look for a f
17340 69 6c 65 20 6e 61 6d 65 64 20 7e 2f 2e 73 71 6c  ile named ~/.sql
17350 69 74 65 72 63 20 61 6e 64 0a 20 20 2a 2a 20 74  iterc and.  ** t
17360 72 79 20 74 6f 20 70 72 6f 63 65 73 73 20 69 74  ry to process it
17370 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 70 72  ..  */.  rc = pr
17380 6f 63 65 73 73 5f 73 71 6c 69 74 65 72 63 28 26  ocess_sqliterc(&
17390 64 61 74 61 2c 7a 49 6e 69 74 46 69 6c 65 29 3b  data,zInitFile);
173a0 0a 20 20 69 66 28 20 72 63 3e 30 20 29 7b 0a 20  .  if( rc>0 ){. 
173b0 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20     return rc;.  
173c0 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 61 20 73  }..  /* Make a s
173d0 65 63 6f 6e 64 20 70 61 73 73 20 74 68 72 6f 75  econd pass throu
173e0 67 68 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  gh the command-l
173f0 69 6e 65 20 61 72 67 75 6d 65 6e 74 20 61 6e 64  ine argument and
17400 20 73 65 74 0a 20 20 2a 2a 20 6f 70 74 69 6f 6e   set.  ** option
17410 73 2e 20 20 54 68 69 73 20 73 65 63 6f 6e 64 20  s.  This second 
17420 70 61 73 73 20 69 73 20 64 65 6c 61 79 65 64 20  pass is delayed 
17430 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20  until after the 
17440 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 20  initialization. 
17450 20 2a 2a 20 66 69 6c 65 20 69 73 20 70 72 6f 63   ** file is proc
17460 65 73 73 65 64 20 73 6f 20 74 68 61 74 20 74 68  essed so that th
17470 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 61  e command-line a
17480 72 67 75 6d 65 6e 74 73 20 77 69 6c 6c 20 6f 76  rguments will ov
17490 65 72 72 69 64 65 0a 20 20 2a 2a 20 73 65 74 74  erride.  ** sett
174a0 69 6e 67 73 20 69 6e 20 74 68 65 20 69 6e 69 74  ings in the init
174b0 69 61 6c 69 7a 61 74 69 6f 6e 20 66 69 6c 65 2e  ialization file.
174c0 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 31 3b  .  */.  for(i=1;
174d0 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20   i<argc; i++){. 
174e0 20 20 20 63 68 61 72 20 2a 7a 20 3d 20 61 72 67     char *z = arg
174f0 76 5b 69 5d 3b 0a 20 20 20 20 69 66 28 20 7a 5b  v[i];.    if( z[
17500 30 5d 21 3d 27 2d 27 20 29 20 63 6f 6e 74 69 6e  0]!='-' ) contin
17510 75 65 3b 0a 20 20 20 20 69 66 28 20 7a 5b 31 5d  ue;.    if( z[1]
17520 3d 3d 27 2d 27 20 29 7b 20 7a 2b 2b 3b 20 7d 0a  =='-' ){ z++; }.
17530 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
17540 2c 22 2d 69 6e 69 74 22 29 3d 3d 30 20 29 7b 0a  ,"-init")==0 ){.
17550 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 7d        i++;.    }
17560 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
17570 7a 2c 22 2d 68 74 6d 6c 22 29 3d 3d 30 20 29 7b  z,"-html")==0 ){
17580 0a 20 20 20 20 20 20 64 61 74 61 2e 6d 6f 64 65  .      data.mode
17590 20 3d 20 4d 4f 44 45 5f 48 74 6d 6c 3b 0a 20 20   = MODE_Html;.  
175a0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
175b0 6d 70 28 7a 2c 22 2d 6c 69 73 74 22 29 3d 3d 30  mp(z,"-list")==0
175c0 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 6d   ){.      data.m
175d0 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b  ode = MODE_List;
175e0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
175f0 74 72 63 6d 70 28 7a 2c 22 2d 6c 69 6e 65 22 29  trcmp(z,"-line")
17600 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74  ==0 ){.      dat
17610 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c 69  a.mode = MODE_Li
17620 6e 65 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ne;.    }else if
17630 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 63 6f 6c  ( strcmp(z,"-col
17640 75 6d 6e 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  umn")==0 ){.    
17650 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f    data.mode = MO
17660 44 45 5f 43 6f 6c 75 6d 6e 3b 0a 20 20 20 20 7d  DE_Column;.    }
17670 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
17680 7a 2c 22 2d 63 73 76 22 29 3d 3d 30 20 29 7b 0a  z,"-csv")==0 ){.
17690 20 20 20 20 20 20 64 61 74 61 2e 6d 6f 64 65 20        data.mode 
176a0 3d 20 4d 4f 44 45 5f 43 73 76 3b 0a 20 20 20 20  = MODE_Csv;.    
176b0 20 20 6d 65 6d 63 70 79 28 64 61 74 61 2e 73 65    memcpy(data.se
176c0 70 61 72 61 74 6f 72 2c 22 2c 22 2c 32 29 3b 0a  parator,",",2);.
176d0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
176e0 72 63 6d 70 28 7a 2c 22 2d 73 65 70 61 72 61 74  rcmp(z,"-separat
176f0 6f 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  or")==0 ){.     
17700 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
17710 66 28 73 69 7a 65 6f 66 28 64 61 74 61 2e 73 65  f(sizeof(data.se
17720 70 61 72 61 74 6f 72 29 2c 20 64 61 74 61 2e 73  parator), data.s
17730 65 70 61 72 61 74 6f 72 2c 0a 20 20 20 20 20 20  eparator,.      
17740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17750 20 22 25 73 22 2c 63 6d 64 6c 69 6e 65 5f 6f 70   "%s",cmdline_op
17760 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c  tion_value(argc,
17770 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20  argv,++i));.    
17780 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
17790 28 7a 2c 22 2d 6e 75 6c 6c 76 61 6c 75 65 22 29  (z,"-nullvalue")
177a0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
177b0 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
177c0 7a 65 6f 66 28 64 61 74 61 2e 6e 75 6c 6c 76 61  zeof(data.nullva
177d0 6c 75 65 29 2c 20 64 61 74 61 2e 6e 75 6c 6c 76  lue), data.nullv
177e0 61 6c 75 65 2c 0a 20 20 20 20 20 20 20 20 20 20  alue,.          
177f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 25 73               "%s
17800 22 2c 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e  ",cmdline_option
17810 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76  _value(argc,argv
17820 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 7d 65 6c 73  ,++i));.    }els
17830 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
17840 2d 68 65 61 64 65 72 22 29 3d 3d 30 20 29 7b 0a  -header")==0 ){.
17850 20 20 20 20 20 20 64 61 74 61 2e 73 68 6f 77 48        data.showH
17860 65 61 64 65 72 20 3d 20 31 3b 0a 20 20 20 20 7d  eader = 1;.    }
17870 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
17880 7a 2c 22 2d 6e 6f 68 65 61 64 65 72 22 29 3d 3d  z,"-noheader")==
17890 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e  0 ){.      data.
178a0 73 68 6f 77 48 65 61 64 65 72 20 3d 20 30 3b 0a  showHeader = 0;.
178b0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
178c0 72 63 6d 70 28 7a 2c 22 2d 65 63 68 6f 22 29 3d  rcmp(z,"-echo")=
178d0 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61  =0 ){.      data
178e0 2e 65 63 68 6f 4f 6e 20 3d 20 31 3b 0a 20 20 20  .echoOn = 1;.   
178f0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
17900 70 28 7a 2c 22 2d 73 74 61 74 73 22 29 3d 3d 30  p(z,"-stats")==0
17910 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 73   ){.      data.s
17920 74 61 74 73 4f 6e 20 3d 20 31 3b 0a 20 20 20 20  tatsOn = 1;.    
17930 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
17940 28 7a 2c 22 2d 62 61 69 6c 22 29 3d 3d 30 20 29  (z,"-bail")==0 )
17950 7b 0a 20 20 20 20 20 20 62 61 69 6c 5f 6f 6e 5f  {.      bail_on_
17960 65 72 72 6f 72 20 3d 20 31 3b 0a 20 20 20 20 7d  error = 1;.    }
17970 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
17980 7a 2c 22 2d 76 65 72 73 69 6f 6e 22 29 3d 3d 30  z,"-version")==0
17990 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66   ){.      printf
179a0 28 22 25 73 20 25 73 5c 6e 22 2c 20 73 71 6c 69  ("%s %s\n", sqli
179b0 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29  te3_libversion()
179c0 2c 20 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65  , sqlite3_source
179d0 69 64 28 29 29 3b 0a 20 20 20 20 20 20 72 65 74  id());.      ret
179e0 75 72 6e 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  urn 0;.    }else
179f0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
17a00 69 6e 74 65 72 61 63 74 69 76 65 22 29 3d 3d 30  interactive")==0
17a10 20 29 7b 0a 20 20 20 20 20 20 73 74 64 69 6e 5f   ){.      stdin_
17a20 69 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20 3d  is_interactive =
17a30 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   1;.    }else if
17a40 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 62 61 74  ( strcmp(z,"-bat
17a50 63 68 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ch")==0 ){.     
17a60 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61   stdin_is_intera
17a70 63 74 69 76 65 20 3d 20 30 3b 0a 20 20 20 20 7d  ctive = 0;.    }
17a80 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
17a90 7a 2c 22 2d 68 65 61 70 22 29 3d 3d 30 20 29 7b  z,"-heap")==0 ){
17aa0 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20  .      i++;.    
17ab0 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
17ac0 28 7a 2c 22 2d 6d 6d 61 70 22 29 3d 3d 30 20 29  (z,"-mmap")==0 )
17ad0 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20  {.      i++;.   
17ae0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
17af0 70 28 7a 2c 22 2d 76 66 73 22 29 3d 3d 30 20 29  p(z,"-vfs")==0 )
17b00 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 23 69 66  {.      i++;.#if
17b10 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
17b20 45 5f 56 46 53 54 52 41 43 45 0a 20 20 20 20 7d  E_VFSTRACE.    }
17b30 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
17b40 7a 2c 22 2d 76 66 73 74 72 61 63 65 22 29 3d 3d  z,"-vfstrace")==
17b50 30 20 29 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a  0 ){.      i++;.
17b60 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
17b70 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54  LITE_ENABLE_MULT
17b80 49 50 4c 45 58 0a 20 20 20 20 7d 65 6c 73 65 20  IPLEX.    }else 
17b90 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6d  if( strcmp(z,"-m
17ba0 75 6c 74 69 70 6c 65 78 22 29 3d 3d 30 20 29 7b  ultiplex")==0 ){
17bb0 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 23 65 6e 64  .      i++;.#end
17bc0 69 66 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  if.    }else if(
17bd0 20 73 74 72 63 6d 70 28 7a 2c 22 2d 68 65 6c 70   strcmp(z,"-help
17be0 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75  ")==0 ){.      u
17bf0 73 61 67 65 28 31 29 3b 0a 20 20 20 20 7d 65 6c  sage(1);.    }el
17c00 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
17c10 22 2d 63 6d 64 22 29 3d 3d 30 20 29 7b 0a 20 20  "-cmd")==0 ){.  
17c20 20 20 20 20 69 66 28 20 69 3d 3d 61 72 67 63 2d      if( i==argc-
17c30 31 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  1 ) break;.     
17c40 20 7a 20 3d 20 63 6d 64 6c 69 6e 65 5f 6f 70 74   z = cmdline_opt
17c50 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61  ion_value(argc,a
17c60 72 67 76 2c 2b 2b 69 29 3b 0a 20 20 20 20 20 20  rgv,++i);.      
17c70 69 66 28 20 7a 5b 30 5d 3d 3d 27 2e 27 20 29 7b  if( z[0]=='.' ){
17c80 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 64 6f  .        rc = do
17c90 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 28 7a 2c  _meta_command(z,
17ca0 20 26 64 61 74 61 29 3b 0a 20 20 20 20 20 20 20   &data);.       
17cb0 20 69 66 28 20 72 63 20 26 26 20 62 61 69 6c 5f   if( rc && bail_
17cc0 6f 6e 5f 65 72 72 6f 72 20 29 20 72 65 74 75 72  on_error ) retur
17cd0 6e 20 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73  n rc;.      }els
17ce0 65 7b 0a 20 20 20 20 20 20 20 20 6f 70 65 6e 5f  e{.        open_
17cf0 64 62 28 26 64 61 74 61 29 3b 0a 20 20 20 20 20  db(&data);.     
17d00 20 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f 65 78     rc = shell_ex
17d10 65 63 28 64 61 74 61 2e 64 62 2c 20 7a 2c 20 73  ec(data.db, z, s
17d20 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26  hell_callback, &
17d30 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b  data, &zErrMsg);
17d40 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 45 72  .        if( zEr
17d50 72 4d 73 67 21 3d 30 20 29 7b 0a 20 20 20 20 20  rMsg!=0 ){.     
17d60 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64       fprintf(std
17d70 65 72 72 2c 22 45 72 72 6f 72 3a 20 25 73 5c 6e  err,"Error: %s\n
17d80 22 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  ", zErrMsg);.   
17d90 20 20 20 20 20 20 20 69 66 28 20 62 61 69 6c 5f         if( bail_
17da0 6f 6e 5f 65 72 72 6f 72 20 29 20 72 65 74 75 72  on_error ) retur
17db0 6e 20 72 63 21 3d 30 20 3f 20 72 63 20 3a 20 31  n rc!=0 ? rc : 1
17dc0 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
17dd0 69 66 28 20 72 63 21 3d 30 20 29 7b 0a 20 20 20  if( rc!=0 ){.   
17de0 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73         fprintf(s
17df0 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 75 6e  tderr,"Error: un
17e00 61 62 6c 65 20 74 6f 20 70 72 6f 63 65 73 73 20  able to process 
17e10 53 51 4c 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a  SQL \"%s\"\n", z
17e20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
17e30 20 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20 29   bail_on_error )
17e40 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20 20   return rc;.    
17e50 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
17e60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 66    }else{.      f
17e70 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 25  printf(stderr,"%
17e80 73 3a 20 45 72 72 6f 72 3a 20 75 6e 6b 6e 6f 77  s: Error: unknow
17e90 6e 20 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c  n option: %s\n",
17ea0 20 41 72 67 76 30 2c 20 7a 29 3b 0a 20 20 20 20   Argv0, z);.    
17eb0 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72    fprintf(stderr
17ec0 2c 22 55 73 65 20 2d 68 65 6c 70 20 66 6f 72 20  ,"Use -help for 
17ed0 61 20 6c 69 73 74 20 6f 66 20 6f 70 74 69 6f 6e  a list of option
17ee0 73 2e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65  s.\n");.      re
17ef0 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20  turn 1;.    }.  
17f00 7d 0a 0a 20 20 69 66 28 20 7a 46 69 72 73 74 43  }..  if( zFirstC
17f10 6d 64 20 29 7b 0a 20 20 20 20 2f 2a 20 52 75 6e  md ){.    /* Run
17f20 20 6a 75 73 74 20 74 68 65 20 63 6f 6d 6d 61 6e   just the comman
17f30 64 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 74  d that follows t
17f40 68 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  he database name
17f50 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
17f60 7a 46 69 72 73 74 43 6d 64 5b 30 5d 3d 3d 27 2e  zFirstCmd[0]=='.
17f70 27 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  ' ){.      rc = 
17f80 64 6f 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 28  do_meta_command(
17f90 7a 46 69 72 73 74 43 6d 64 2c 20 26 64 61 74 61  zFirstCmd, &data
17fa0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
17fb0 20 20 20 20 6f 70 65 6e 5f 64 62 28 26 64 61 74      open_db(&dat
17fc0 61 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  a);.      rc = s
17fd0 68 65 6c 6c 5f 65 78 65 63 28 64 61 74 61 2e 64  hell_exec(data.d
17fe0 62 2c 20 7a 46 69 72 73 74 43 6d 64 2c 20 73 68  b, zFirstCmd, sh
17ff0 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64  ell_callback, &d
18000 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a  ata, &zErrMsg);.
18010 20 20 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73        if( zErrMs
18020 67 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  g!=0 ){.        
18030 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  fprintf(stderr,"
18040 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45  Error: %s\n", zE
18050 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20 20  rrMsg);.        
18060 72 65 74 75 72 6e 20 72 63 21 3d 30 20 3f 20 72  return rc!=0 ? r
18070 63 20 3a 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c  c : 1;.      }el
18080 73 65 20 69 66 28 20 72 63 21 3d 30 20 29 7b 0a  se if( rc!=0 ){.
18090 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28          fprintf(
180a0 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 75  stderr,"Error: u
180b0 6e 61 62 6c 65 20 74 6f 20 70 72 6f 63 65 73 73  nable to process
180c0 20 53 51 4c 20 5c 22 25 73 5c 22 5c 6e 22 2c 20   SQL \"%s\"\n", 
180d0 7a 46 69 72 73 74 43 6d 64 29 3b 0a 20 20 20 20  zFirstCmd);.    
180e0 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20      return rc;. 
180f0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
18100 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52 75 6e  else{.    /* Run
18110 20 63 6f 6d 6d 61 6e 64 73 20 72 65 63 65 69 76   commands receiv
18120 65 64 20 66 72 6f 6d 20 73 74 61 6e 64 61 72 64  ed from standard
18130 20 69 6e 70 75 74 0a 20 20 20 20 2a 2f 0a 20 20   input.    */.  
18140 20 20 69 66 28 20 73 74 64 69 6e 5f 69 73 5f 69    if( stdin_is_i
18150 6e 74 65 72 61 63 74 69 76 65 20 29 7b 0a 20 20  nteractive ){.  
18160 20 20 20 20 63 68 61 72 20 2a 7a 48 6f 6d 65 3b      char *zHome;
18170 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 48 69  .      char *zHi
18180 73 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20 20  story = 0;.     
18190 20 69 6e 74 20 6e 48 69 73 74 6f 72 79 3b 0a 20   int nHistory;. 
181a0 20 20 20 20 20 70 72 69 6e 74 66 28 0a 20 20 20       printf(.   
181b0 20 20 20 20 20 22 53 51 4c 69 74 65 20 76 65 72       "SQLite ver
181c0 73 69 6f 6e 20 25 73 20 25 2e 31 39 73 5c 6e 22  sion %s %.19s\n"
181d0 20 2f 2a 65 78 74 72 61 2d 76 65 72 73 69 6f 6e   /*extra-version
181e0 2d 69 6e 66 6f 2a 2f 0a 20 20 20 20 20 20 20 20  -info*/.        
181f0 22 45 6e 74 65 72 20 5c 22 2e 68 65 6c 70 5c 22  "Enter \".help\"
18200 20 66 6f 72 20 69 6e 73 74 72 75 63 74 69 6f 6e   for instruction
18210 73 5c 6e 22 0a 20 20 20 20 20 20 20 20 22 45 6e  s\n".        "En
18220 74 65 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ter SQL statemen
18230 74 73 20 74 65 72 6d 69 6e 61 74 65 64 20 77 69  ts terminated wi
18240 74 68 20 61 20 5c 22 3b 5c 22 5c 6e 22 2c 0a 20  th a \";\"\n",. 
18250 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c         sqlite3_l
18260 69 62 76 65 72 73 69 6f 6e 28 29 2c 20 73 71 6c  ibversion(), sql
18270 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29 0a  ite3_sourceid().
18280 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 7a        );.      z
18290 48 6f 6d 65 20 3d 20 66 69 6e 64 5f 68 6f 6d 65  Home = find_home
182a0 5f 64 69 72 28 29 3b 0a 20 20 20 20 20 20 69 66  _dir();.      if
182b0 28 20 7a 48 6f 6d 65 20 29 7b 0a 20 20 20 20 20  ( zHome ){.     
182c0 20 20 20 6e 48 69 73 74 6f 72 79 20 3d 20 73 74     nHistory = st
182d0 72 6c 65 6e 33 30 28 7a 48 6f 6d 65 29 20 2b 20  rlen30(zHome) + 
182e0 32 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  20;.        if( 
182f0 28 7a 48 69 73 74 6f 72 79 20 3d 20 6d 61 6c 6c  (zHistory = mall
18300 6f 63 28 6e 48 69 73 74 6f 72 79 29 29 21 3d 30  oc(nHistory))!=0
18310 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
18320 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 6e  lite3_snprintf(n
18330 48 69 73 74 6f 72 79 2c 20 7a 48 69 73 74 6f 72  History, zHistor
18340 79 2c 22 25 73 2f 2e 73 71 6c 69 74 65 5f 68 69  y,"%s/.sqlite_hi
18350 73 74 6f 72 79 22 2c 20 7a 48 6f 6d 65 29 3b 0a  story", zHome);.
18360 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
18370 7d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 48 41  }.#if defined(HA
18380 56 45 5f 52 45 41 44 4c 49 4e 45 29 20 26 26 20  VE_READLINE) && 
18390 48 41 56 45 5f 52 45 41 44 4c 49 4e 45 3d 3d 31  HAVE_READLINE==1
183a0 0a 20 20 20 20 20 20 69 66 28 20 7a 48 69 73 74  .      if( zHist
183b0 6f 72 79 20 29 20 72 65 61 64 5f 68 69 73 74 6f  ory ) read_histo
183c0 72 79 28 7a 48 69 73 74 6f 72 79 29 3b 0a 23 65  ry(zHistory);.#e
183d0 6e 64 69 66 0a 20 20 20 20 20 20 72 63 20 3d 20  ndif.      rc = 
183e0 70 72 6f 63 65 73 73 5f 69 6e 70 75 74 28 26 64  process_input(&d
183f0 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69  ata, 0);.      i
18400 66 28 20 7a 48 69 73 74 6f 72 79 20 29 7b 0a 20  f( zHistory ){. 
18410 20 20 20 20 20 20 20 73 74 69 66 6c 65 5f 68 69         stifle_hi
18420 73 74 6f 72 79 28 31 30 30 29 3b 0a 20 20 20 20  story(100);.    
18430 20 20 20 20 77 72 69 74 65 5f 68 69 73 74 6f 72      write_histor
18440 79 28 7a 48 69 73 74 6f 72 79 29 3b 0a 20 20 20  y(zHistory);.   
18450 20 20 20 20 20 66 72 65 65 28 7a 48 69 73 74 6f       free(zHisto
18460 72 79 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ry);.      }.   
18470 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
18480 20 3d 20 70 72 6f 63 65 73 73 5f 69 6e 70 75 74   = process_input
18490 28 26 64 61 74 61 2c 20 73 74 64 69 6e 29 3b 0a  (&data, stdin);.
184a0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 65 74 5f      }.  }.  set_
184b0 74 61 62 6c 65 5f 6e 61 6d 65 28 26 64 61 74 61  table_name(&data
184c0 2c 20 30 29 3b 0a 20 20 69 66 28 20 64 61 74 61  , 0);.  if( data
184d0 2e 64 62 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  .db ){.    sqlit
184e0 65 33 5f 63 6c 6f 73 65 28 64 61 74 61 2e 64 62  e3_close(data.db
184f0 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
18500 72 63 3b 0a 7d 0a                                rc;.}.