/ Hex Artifact Content
Login

Artifact f0e8b54c58a8a13cc046f5af6d72de7e0a118a2b:


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 49 66 20 72 65 71 75 65 73 74 65 64 2c 20 69   If requested, i
02b0: 6e 63 6c 75 64 65 20 74 68 65 20 53 51 4c 69 74  nclude the SQLit
02c0: 65 20 63 6f 6d 70 69 6c 65 72 20 6f 70 74 69 6f  e compiler optio
02d0: 6e 73 20 66 69 6c 65 20 66 6f 72 20 4d 53 56 43  ns file for MSVC
02e0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
02f0: 28 49 4e 43 4c 55 44 45 5f 4d 53 56 43 5f 48 29  (INCLUDE_MSVC_H)
0300: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76 63 2e  .#include "msvc.
0310: 68 22 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h".#endif../*.**
0320: 20 4e 6f 20 73 75 70 70 6f 72 74 20 66 6f 72 20   No support for 
0330: 6c 6f 61 64 61 62 6c 65 20 65 78 74 65 6e 73 69  loadable extensi
0340: 6f 6e 73 20 69 6e 20 56 78 57 6f 72 6b 73 2e 0a  ons in VxWorks..
0350: 2a 2f 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28  */.#if (defined(
0360: 5f 5f 52 54 50 5f 5f 29 20 7c 7c 20 64 65 66 69  __RTP__) || defi
0370: 6e 65 64 28 5f 57 52 53 5f 4b 45 52 4e 45 4c 29  ned(_WRS_KERNEL)
0380: 29 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49  ) && !SQLITE_OMI
0390: 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
03a0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
03b0: 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e  _OMIT_LOAD_EXTEN
03c0: 53 49 4f 4e 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  SION 1.#endif../
03d0: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 6c 61 72 67  *.** Enable larg
03e0: 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 20 66  e-file support f
03f0: 6f 72 20 66 6f 70 65 6e 28 29 20 61 6e 64 20 66  or fopen() and f
0400: 72 69 65 6e 64 73 20 6f 6e 20 75 6e 69 78 2e 0a  riends on unix..
0410: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
0420: 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a 23 20  E_DISABLE_LFS.# 
0430: 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 5f 46 49  define _LARGE_FI
0440: 4c 45 20 20 20 20 20 20 20 31 0a 23 20 69 66 6e  LE       1.# ifn
0450: 64 65 66 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54  def _FILE_OFFSET
0460: 5f 42 49 54 53 0a 23 20 20 20 64 65 66 69 6e 65  _BITS.#   define
0470: 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49   _FILE_OFFSET_BI
0480: 54 53 20 36 34 0a 23 20 65 6e 64 69 66 0a 23 20  TS 64.# endif.# 
0490: 64 65 66 69 6e 65 20 5f 4c 41 52 47 45 46 49 4c  define _LARGEFIL
04a0: 45 5f 53 4f 55 52 43 45 20 31 0a 23 65 6e 64 69  E_SOURCE 1.#endi
04b0: 66 0a 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  f..#include <std
04c0: 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  lib.h>.#include 
04d0: 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c  <string.h>.#incl
04e0: 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69  ude <stdio.h>.#i
04f0: 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68  nclude <assert.h
0500: 3e 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69  >.#include "sqli
0510: 74 65 33 2e 68 22 0a 23 69 66 20 53 51 4c 49 54  te3.h".#if SQLIT
0520: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
0530: 41 54 49 4f 4e 0a 23 20 69 6e 63 6c 75 64 65 20  ATION.# include 
0540: 22 73 71 6c 69 74 65 33 75 73 65 72 61 75 74 68  "sqlite3userauth
0550: 2e 68 22 0a 23 65 6e 64 69 66 0a 23 69 6e 63 6c  .h".#endif.#incl
0560: 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 69  ude <ctype.h>.#i
0570: 6e 63 6c 75 64 65 20 3c 73 74 64 61 72 67 2e 68  nclude <stdarg.h
0580: 3e 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  >..#if !defined(
0590: 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65 66 69  _WIN32) && !defi
05a0: 6e 65 64 28 57 49 4e 33 32 29 0a 23 20 69 6e 63  ned(WIN32).# inc
05b0: 6c 75 64 65 20 3c 73 69 67 6e 61 6c 2e 68 3e 0a  lude <signal.h>.
05c0: 23 20 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f  # if !defined(__
05d0: 52 54 50 5f 5f 29 20 26 26 20 21 64 65 66 69 6e  RTP__) && !defin
05e0: 65 64 28 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 0a  ed(_WRS_KERNEL).
05f0: 23 20 20 69 6e 63 6c 75 64 65 20 3c 70 77 64 2e  #  include <pwd.
0600: 68 3e 0a 23 20 65 6e 64 69 66 0a 23 20 69 6e 63  h>.# endif.# inc
0610: 6c 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e 0a  lude <unistd.h>.
0620: 23 20 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74  # include <sys/t
0630: 79 70 65 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a  ypes.h>.#endif..
0640: 23 69 66 20 48 41 56 45 5f 52 45 41 44 4c 49 4e  #if HAVE_READLIN
0650: 45 0a 23 20 69 6e 63 6c 75 64 65 20 3c 72 65 61  E.# include <rea
0660: 64 6c 69 6e 65 2f 72 65 61 64 6c 69 6e 65 2e 68  dline/readline.h
0670: 3e 0a 23 20 69 6e 63 6c 75 64 65 20 3c 72 65 61  >.# include <rea
0680: 64 6c 69 6e 65 2f 68 69 73 74 6f 72 79 2e 68 3e  dline/history.h>
0690: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 48 41 56  .#endif..#if HAV
06a0: 45 5f 45 44 49 54 4c 49 4e 45 0a 23 20 69 6e 63  E_EDITLINE.# inc
06b0: 6c 75 64 65 20 3c 65 64 69 74 6c 69 6e 65 2f 72  lude <editline/r
06c0: 65 61 64 6c 69 6e 65 2e 68 3e 0a 23 65 6e 64 69  eadline.h>.#endi
06d0: 66 0a 0a 23 69 66 20 48 41 56 45 5f 45 44 49 54  f..#if HAVE_EDIT
06e0: 4c 49 4e 45 20 7c 7c 20 48 41 56 45 5f 52 45 41  LINE || HAVE_REA
06f0: 44 4c 49 4e 45 0a 0a 23 20 64 65 66 69 6e 65 20  DLINE..# define 
0700: 73 68 65 6c 6c 5f 61 64 64 5f 68 69 73 74 6f 72  shell_add_histor
0710: 79 28 58 29 20 61 64 64 5f 68 69 73 74 6f 72 79  y(X) add_history
0720: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 68 65  (X).# define she
0730: 6c 6c 5f 72 65 61 64 5f 68 69 73 74 6f 72 79 28  ll_read_history(
0740: 58 29 20 72 65 61 64 5f 68 69 73 74 6f 72 79 28  X) read_history(
0750: 58 29 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c  X).# define shel
0760: 6c 5f 77 72 69 74 65 5f 68 69 73 74 6f 72 79 28  l_write_history(
0770: 58 29 20 77 72 69 74 65 5f 68 69 73 74 6f 72 79  X) write_history
0780: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 68 65  (X).# define she
0790: 6c 6c 5f 73 74 69 66 6c 65 5f 68 69 73 74 6f 72  ll_stifle_histor
07a0: 79 28 58 29 20 73 74 69 66 6c 65 5f 68 69 73 74  y(X) stifle_hist
07b0: 6f 72 79 28 58 29 0a 23 20 64 65 66 69 6e 65 20  ory(X).# define 
07c0: 73 68 65 6c 6c 5f 72 65 61 64 6c 69 6e 65 28 58  shell_readline(X
07d0: 29 20 72 65 61 64 6c 69 6e 65 28 58 29 0a 0a 23  ) readline(X)..#
07e0: 65 6c 69 66 20 48 41 56 45 5f 4c 49 4e 45 4e 4f  elif HAVE_LINENO
07f0: 49 53 45 0a 0a 23 20 69 6e 63 6c 75 64 65 20 22  ISE..# include "
0800: 6c 69 6e 65 6e 6f 69 73 65 2e 68 22 0a 23 20 64  linenoise.h".# d
0810: 65 66 69 6e 65 20 73 68 65 6c 6c 5f 61 64 64 5f  efine shell_add_
0820: 68 69 73 74 6f 72 79 28 58 29 20 6c 69 6e 65 6e  history(X) linen
0830: 6f 69 73 65 48 69 73 74 6f 72 79 41 64 64 28 58  oiseHistoryAdd(X
0840: 29 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c 6c  ).# define shell
0850: 5f 72 65 61 64 5f 68 69 73 74 6f 72 79 28 58 29  _read_history(X)
0860: 20 6c 69 6e 65 6e 6f 69 73 65 48 69 73 74 6f 72   linenoiseHistor
0870: 79 4c 6f 61 64 28 58 29 0a 23 20 64 65 66 69 6e  yLoad(X).# defin
0880: 65 20 73 68 65 6c 6c 5f 77 72 69 74 65 5f 68 69  e shell_write_hi
0890: 73 74 6f 72 79 28 58 29 20 6c 69 6e 65 6e 6f 69  story(X) linenoi
08a0: 73 65 48 69 73 74 6f 72 79 53 61 76 65 28 58 29  seHistorySave(X)
08b0: 0a 23 20 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f  .# define shell_
08c0: 73 74 69 66 6c 65 5f 68 69 73 74 6f 72 79 28 58  stifle_history(X
08d0: 29 20 6c 69 6e 65 6e 6f 69 73 65 48 69 73 74 6f  ) linenoiseHisto
08e0: 72 79 53 65 74 4d 61 78 4c 65 6e 28 58 29 0a 23  rySetMaxLen(X).#
08f0: 20 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f 72 65   define shell_re
0900: 61 64 6c 69 6e 65 28 58 29 20 6c 69 6e 65 6e 6f  adline(X) lineno
0910: 69 73 65 28 58 29 0a 0a 23 65 6c 73 65 0a 0a 23  ise(X)..#else..#
0920: 20 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f 72 65   define shell_re
0930: 61 64 5f 68 69 73 74 6f 72 79 28 58 29 0a 23 20  ad_history(X).# 
0940: 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f 77 72 69  define shell_wri
0950: 74 65 5f 68 69 73 74 6f 72 79 28 58 29 0a 23 20  te_history(X).# 
0960: 64 65 66 69 6e 65 20 73 68 65 6c 6c 5f 73 74 69  define shell_sti
0970: 66 6c 65 5f 68 69 73 74 6f 72 79 28 58 29 0a 0a  fle_history(X)..
0980: 23 20 64 65 66 69 6e 65 20 53 48 45 4c 4c 5f 55  # define SHELL_U
0990: 53 45 5f 4c 4f 43 41 4c 5f 47 45 54 4c 49 4e 45  SE_LOCAL_GETLINE
09a0: 20 31 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 20   1.#endif...#if 
09b0: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
09c0: 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  || defined(WIN32
09d0: 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 69 6f 2e  ).# include <io.
09e0: 68 3e 0a 23 20 69 6e 63 6c 75 64 65 20 3c 66 63  h>.# include <fc
09f0: 6e 74 6c 2e 68 3e 0a 23 20 64 65 66 69 6e 65 20  ntl.h>.# define 
0a00: 69 73 61 74 74 79 28 68 29 20 5f 69 73 61 74 74  isatty(h) _isatt
0a10: 79 28 68 29 0a 23 20 69 66 6e 64 65 66 20 61 63  y(h).# ifndef ac
0a20: 63 65 73 73 0a 23 20 20 64 65 66 69 6e 65 20 61  cess.#  define a
0a30: 63 63 65 73 73 28 66 2c 6d 29 20 5f 61 63 63 65  ccess(f,m) _acce
0a40: 73 73 28 28 66 29 2c 28 6d 29 29 0a 23 20 65 6e  ss((f),(m)).# en
0a50: 64 69 66 0a 23 20 75 6e 64 65 66 20 70 6f 70 65  dif.# undef pope
0a60: 6e 0a 23 20 64 65 66 69 6e 65 20 70 6f 70 65 6e  n.# define popen
0a70: 20 5f 70 6f 70 65 6e 0a 23 20 75 6e 64 65 66 20   _popen.# undef 
0a80: 70 63 6c 6f 73 65 0a 23 20 64 65 66 69 6e 65 20  pclose.# define 
0a90: 70 63 6c 6f 73 65 20 5f 70 63 6c 6f 73 65 0a 23  pclose _pclose.#
0aa0: 65 6c 73 65 0a 20 2f 2a 20 4d 61 6b 65 20 73 75  else. /* Make su
0ab0: 72 65 20 69 73 61 74 74 79 28 29 20 68 61 73 20  re isatty() has 
0ac0: 61 20 70 72 6f 74 6f 74 79 70 65 2e 20 2a 2f 0a  a prototype. */.
0ad0: 20 65 78 74 65 72 6e 20 69 6e 74 20 69 73 61 74   extern int isat
0ae0: 74 79 28 69 6e 74 29 3b 0a 0a 23 20 69 66 20 21  ty(int);..# if !
0af0: 64 65 66 69 6e 65 64 28 5f 5f 52 54 50 5f 5f 29  defined(__RTP__)
0b00: 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57 52   && !defined(_WR
0b10: 53 5f 4b 45 52 4e 45 4c 29 0a 20 20 2f 2a 20 70  S_KERNEL).  /* p
0b20: 6f 70 65 6e 20 61 6e 64 20 70 63 6c 6f 73 65 20  open and pclose 
0b30: 61 72 65 20 6e 6f 74 20 43 38 39 20 66 75 6e 63  are not C89 func
0b40: 74 69 6f 6e 73 20 61 6e 64 20 73 6f 20 61 72 65  tions and so are
0b50: 0a 20 20 2a 2a 20 73 6f 6d 65 74 69 6d 65 73 20  .  ** sometimes 
0b60: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
0b70: 20 3c 73 74 64 69 6f 2e 68 3e 20 68 65 61 64 65   <stdio.h> heade
0b80: 72 20 2a 2f 0a 20 20 20 65 78 74 65 72 6e 20 46  r */.   extern F
0b90: 49 4c 45 20 2a 70 6f 70 65 6e 28 63 6f 6e 73 74  ILE *popen(const
0ba0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
0bb0: 72 2a 29 3b 0a 20 20 20 65 78 74 65 72 6e 20 69  r*);.   extern i
0bc0: 6e 74 20 70 63 6c 6f 73 65 28 46 49 4c 45 2a 29  nt pclose(FILE*)
0bd0: 3b 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  ;.# else.#  defi
0be0: 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ne SQLITE_OMIT_P
0bf0: 4f 50 45 4e 20 31 0a 23 20 65 6e 64 69 66 0a 23  OPEN 1.# endif.#
0c00: 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
0c10: 65 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 2f  ed(_WIN32_WCE)./
0c20: 2a 20 57 69 6e 64 6f 77 73 20 43 45 20 28 61 72  * Windows CE (ar
0c30: 6d 2d 77 69 6e 63 65 2d 6d 69 6e 67 77 33 32 63  m-wince-mingw32c
0c40: 65 2d 67 63 63 29 20 64 6f 65 73 20 6e 6f 74 20  e-gcc) does not 
0c50: 70 72 6f 76 69 64 65 20 69 73 61 74 74 79 28 29  provide isatty()
0c60: 0a 20 2a 20 74 68 75 73 20 77 65 20 61 6c 77 61  . * thus we alwa
0c70: 79 73 20 61 73 73 75 6d 65 20 74 68 61 74 20 77  ys assume that w
0c80: 65 20 68 61 76 65 20 61 20 63 6f 6e 73 6f 6c 65  e have a console
0c90: 2e 20 54 68 61 74 20 63 61 6e 20 62 65 0a 20 2a  . That can be. *
0ca0: 20 6f 76 65 72 72 69 64 64 65 6e 20 77 69 74 68   overridden with
0cb0: 20 74 68 65 20 2d 62 61 74 63 68 20 63 6f 6d 6d   the -batch comm
0cc0: 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e  and line option.
0cd0: 0a 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 61  . */.#define isa
0ce0: 74 74 79 28 78 29 20 31 0a 23 65 6e 64 69 66 0a  tty(x) 1.#endif.
0cf0: 0a 2f 2a 20 63 74 79 70 65 20 6d 61 63 72 6f 73  ./* ctype macros
0d00: 20 74 68 61 74 20 77 6f 72 6b 20 77 69 74 68 20   that work with 
0d10: 73 69 67 6e 65 64 20 63 68 61 72 61 63 74 65 72  signed character
0d20: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 53  s */.#define IsS
0d30: 70 61 63 65 28 58 29 20 20 69 73 73 70 61 63 65  pace(X)  isspace
0d40: 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
0d50: 58 29 0a 23 64 65 66 69 6e 65 20 49 73 44 69 67  X).#define IsDig
0d60: 69 74 28 58 29 20 20 69 73 64 69 67 69 74 28 28  it(X)  isdigit((
0d70: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 58 29  unsigned char)X)
0d80: 0a 23 64 65 66 69 6e 65 20 54 6f 4c 6f 77 65 72  .#define ToLower
0d90: 28 58 29 20 20 28 63 68 61 72 29 74 6f 6c 6f 77  (X)  (char)tolow
0da0: 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
0db0: 72 29 58 29 0a 0a 23 69 66 20 64 65 66 69 6e 65  r)X)..#if define
0dc0: 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65 66  d(_WIN32) || def
0dd0: 69 6e 65 64 28 57 49 4e 33 32 29 0a 23 69 6e 63  ined(WIN32).#inc
0de0: 6c 75 64 65 20 3c 77 69 6e 64 6f 77 73 2e 68 3e  lude <windows.h>
0df0: 0a 0a 2f 2a 20 73 74 72 69 6e 67 20 63 6f 6e 76  ../* string conv
0e00: 65 72 73 69 6f 6e 20 72 6f 75 74 69 6e 65 73 20  ersion routines 
0e10: 6f 6e 6c 79 20 6e 65 65 64 65 64 20 6f 6e 20 57  only needed on W
0e20: 69 6e 33 32 20 2a 2f 0a 65 78 74 65 72 6e 20 63  in32 */.extern c
0e30: 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 77 69 6e  har *sqlite3_win
0e40: 33 32 5f 75 6e 69 63 6f 64 65 5f 74 6f 5f 75 74  32_unicode_to_ut
0e50: 66 38 28 4c 50 43 57 53 54 52 29 3b 0a 65 78 74  f8(LPCWSTR);.ext
0e60: 65 72 6e 20 63 68 61 72 20 2a 73 71 6c 69 74 65  ern char *sqlite
0e70: 33 5f 77 69 6e 33 32 5f 6d 62 63 73 5f 74 6f 5f  3_win32_mbcs_to_
0e80: 75 74 66 38 5f 76 32 28 63 6f 6e 73 74 20 63 68  utf8_v2(const ch
0e90: 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 65 78 74 65  ar *, int);.exte
0ea0: 72 6e 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  rn char *sqlite3
0eb0: 5f 77 69 6e 33 32 5f 75 74 66 38 5f 74 6f 5f 6d  _win32_utf8_to_m
0ec0: 62 63 73 5f 76 32 28 63 6f 6e 73 74 20 63 68 61  bcs_v2(const cha
0ed0: 72 20 2a 2c 20 69 6e 74 29 3b 0a 65 78 74 65 72  r *, int);.exter
0ee0: 6e 20 4c 50 57 53 54 52 20 73 71 6c 69 74 65 33  n LPWSTR sqlite3
0ef0: 5f 77 69 6e 33 32 5f 75 74 66 38 5f 74 6f 5f 75  _win32_utf8_to_u
0f00: 6e 69 63 6f 64 65 28 63 6f 6e 73 74 20 63 68 61  nicode(const cha
0f10: 72 20 2a 7a 54 65 78 74 29 3b 0a 23 65 6e 64 69  r *zText);.#endi
0f20: 66 0a 0a 2f 2a 20 4f 6e 20 57 69 6e 64 6f 77 73  f../* On Windows
0f30: 2c 20 77 65 20 6e 6f 72 6d 61 6c 6c 79 20 72 75  , we normally ru
0f40: 6e 20 77 69 74 68 20 6f 75 74 70 75 74 20 6d 6f  n with output mo
0f50: 64 65 20 6f 66 20 54 45 58 54 20 73 6f 20 74 68  de of TEXT so th
0f60: 61 74 20 5c 6e 20 63 68 61 72 61 63 74 65 72 73  at \n characters
0f70: 0a 2a 2a 20 61 72 65 20 61 75 74 6f 6d 61 74 69  .** are automati
0f80: 63 61 6c 6c 79 20 74 72 61 6e 73 6c 61 74 65 64  cally translated
0f90: 20 69 6e 74 6f 20 5c 72 5c 6e 2e 20 20 48 6f 77   into \r\n.  How
0fa0: 65 76 65 72 2c 20 74 68 69 73 20 62 65 68 61 76  ever, this behav
0fb0: 69 6f 72 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20  ior needs.** to 
0fc0: 62 65 20 64 69 73 61 62 6c 65 64 20 69 6e 20 73  be disabled in s
0fd0: 6f 6d 65 20 63 61 73 65 73 20 28 65 78 3a 20 77  ome cases (ex: w
0fe0: 68 65 6e 20 67 65 6e 65 72 61 74 69 6e 67 20 43  hen generating C
0ff0: 53 56 20 6f 75 74 70 75 74 20 61 6e 64 20 77 68  SV output and wh
1000: 65 6e 0a 2a 2a 20 72 65 6e 64 65 72 69 6e 67 20  en.** rendering 
1010: 71 75 6f 74 65 64 20 73 74 72 69 6e 67 73 20 74  quoted strings t
1020: 68 61 74 20 63 6f 6e 74 61 69 6e 20 5c 6e 20 63  hat contain \n c
1030: 68 61 72 61 63 74 65 72 73 29 2e 20 20 54 68 65  haracters).  The
1040: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 72 6f   following.** ro
1050: 75 74 69 6e 65 73 20 74 61 6b 65 20 63 61 72 65  utines take care
1060: 20 6f 66 20 74 68 61 74 2e 0a 2a 2f 0a 23 69 66   of that..*/.#if
1070: 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29   defined(_WIN32)
1080: 20 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33   || defined(WIN3
1090: 32 29 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73  2).static void s
10a0: 65 74 42 69 6e 61 72 79 4d 6f 64 65 28 46 49 4c  etBinaryMode(FIL
10b0: 45 20 2a 66 69 6c 65 2c 20 69 6e 74 20 69 73 4f  E *file, int isO
10c0: 75 74 70 75 74 29 7b 0a 20 20 69 66 28 20 69 73  utput){.  if( is
10d0: 4f 75 74 70 75 74 20 29 20 66 66 6c 75 73 68 28  Output ) fflush(
10e0: 66 69 6c 65 29 3b 0a 20 20 5f 73 65 74 6d 6f 64  file);.  _setmod
10f0: 65 28 5f 66 69 6c 65 6e 6f 28 66 69 6c 65 29 2c  e(_fileno(file),
1100: 20 5f 4f 5f 42 49 4e 41 52 59 29 3b 0a 7d 0a 73   _O_BINARY);.}.s
1110: 74 61 74 69 63 20 76 6f 69 64 20 73 65 74 54 65  tatic void setTe
1120: 78 74 4d 6f 64 65 28 46 49 4c 45 20 2a 66 69 6c  xtMode(FILE *fil
1130: 65 2c 20 69 6e 74 20 69 73 4f 75 74 70 75 74 29  e, int isOutput)
1140: 7b 0a 20 20 69 66 28 20 69 73 4f 75 74 70 75 74  {.  if( isOutput
1150: 20 29 20 66 66 6c 75 73 68 28 66 69 6c 65 29 3b   ) fflush(file);
1160: 0a 20 20 5f 73 65 74 6d 6f 64 65 28 5f 66 69 6c  .  _setmode(_fil
1170: 65 6e 6f 28 66 69 6c 65 29 2c 20 5f 4f 5f 54 45  eno(file), _O_TE
1180: 58 54 29 3b 0a 7d 0a 23 65 6c 73 65 0a 23 20 64  XT);.}.#else.# d
1190: 65 66 69 6e 65 20 73 65 74 42 69 6e 61 72 79 4d  efine setBinaryM
11a0: 6f 64 65 28 58 2c 59 29 0a 23 20 64 65 66 69 6e  ode(X,Y).# defin
11b0: 65 20 73 65 74 54 65 78 74 4d 6f 64 65 28 58 2c  e setTextMode(X,
11c0: 59 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 54  Y).#endif.../* T
11d0: 72 75 65 20 69 66 20 74 68 65 20 74 69 6d 65 72  rue if the timer
11e0: 20 69 73 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 73   is enabled */.s
11f0: 74 61 74 69 63 20 69 6e 74 20 65 6e 61 62 6c 65  tatic int enable
1200: 54 69 6d 65 72 20 3d 20 30 3b 0a 0a 2f 2a 20 52  Timer = 0;../* R
1210: 65 74 75 72 6e 20 74 68 65 20 63 75 72 72 65 6e  eturn the curren
1220: 74 20 77 61 6c 6c 2d 63 6c 6f 63 6b 20 74 69 6d  t wall-clock tim
1230: 65 20 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c 69  e */.static sqli
1240: 74 65 33 5f 69 6e 74 36 34 20 74 69 6d 65 4f 66  te3_int64 timeOf
1250: 44 61 79 28 76 6f 69 64 29 7b 0a 20 20 73 74 61  Day(void){.  sta
1260: 74 69 63 20 73 71 6c 69 74 65 33 5f 76 66 73 20  tic sqlite3_vfs 
1270: 2a 63 6c 6f 63 6b 56 66 73 20 3d 20 30 3b 0a 20  *clockVfs = 0;. 
1280: 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 74   sqlite3_int64 t
1290: 3b 0a 20 20 69 66 28 20 63 6c 6f 63 6b 56 66 73  ;.  if( clockVfs
12a0: 3d 3d 30 20 29 20 63 6c 6f 63 6b 56 66 73 20 3d  ==0 ) clockVfs =
12b0: 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e   sqlite3_vfs_fin
12c0: 64 28 30 29 3b 0a 20 20 69 66 28 20 63 6c 6f 63  d(0);.  if( cloc
12d0: 6b 56 66 73 2d 3e 69 56 65 72 73 69 6f 6e 3e 3d  kVfs->iVersion>=
12e0: 32 20 26 26 20 63 6c 6f 63 6b 56 66 73 2d 3e 78  2 && clockVfs->x
12f0: 43 75 72 72 65 6e 74 54 69 6d 65 49 6e 74 36 34  CurrentTimeInt64
1300: 21 3d 30 20 29 7b 0a 20 20 20 20 63 6c 6f 63 6b  !=0 ){.    clock
1310: 56 66 73 2d 3e 78 43 75 72 72 65 6e 74 54 69 6d  Vfs->xCurrentTim
1320: 65 49 6e 74 36 34 28 63 6c 6f 63 6b 56 66 73 2c  eInt64(clockVfs,
1330: 20 26 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   &t);.  }else{. 
1340: 20 20 20 64 6f 75 62 6c 65 20 72 3b 0a 20 20 20     double r;.   
1350: 20 63 6c 6f 63 6b 56 66 73 2d 3e 78 43 75 72 72   clockVfs->xCurr
1360: 65 6e 74 54 69 6d 65 28 63 6c 6f 63 6b 56 66 73  entTime(clockVfs
1370: 2c 20 26 72 29 3b 0a 20 20 20 20 74 20 3d 20 28  , &r);.    t = (
1380: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 28 72  sqlite3_int64)(r
1390: 2a 38 36 34 30 30 30 30 30 2e 30 29 3b 0a 20 20  *86400000.0);.  
13a0: 7d 0a 20 20 72 65 74 75 72 6e 20 74 3b 0a 7d 0a  }.  return t;.}.
13b0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 57  .#if !defined(_W
13c0: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
13d0: 64 28 57 49 4e 33 32 29 20 26 26 20 21 64 65 66  d(WIN32) && !def
13e0: 69 6e 65 64 28 5f 5f 6d 69 6e 75 78 29 0a 23 69  ined(__minux).#i
13f0: 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 69 6d 65  nclude <sys/time
1400: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79  .h>.#include <sy
1410: 73 2f 72 65 73 6f 75 72 63 65 2e 68 3e 0a 0a 2f  s/resource.h>../
1420: 2a 20 56 78 57 6f 72 6b 73 20 64 6f 65 73 20 6e  * VxWorks does n
1430: 6f 74 20 73 75 70 70 6f 72 74 20 67 65 74 72 75  ot support getru
1440: 73 61 67 65 28 29 20 61 73 20 66 61 72 20 61 73  sage() as far as
1450: 20 77 65 20 63 61 6e 20 64 65 74 65 72 6d 69 6e   we can determin
1460: 65 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  e */.#if defined
1470: 28 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 20 7c 7c  (_WRS_KERNEL) ||
1480: 20 64 65 66 69 6e 65 64 28 5f 5f 52 54 50 5f 5f   defined(__RTP__
1490: 29 0a 73 74 72 75 63 74 20 72 75 73 61 67 65 20  ).struct rusage 
14a0: 7b 0a 20 20 73 74 72 75 63 74 20 74 69 6d 65 76  {.  struct timev
14b0: 61 6c 20 72 75 5f 75 74 69 6d 65 3b 20 2f 2a 20  al ru_utime; /* 
14c0: 75 73 65 72 20 43 50 55 20 74 69 6d 65 20 75 73  user CPU time us
14d0: 65 64 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 74  ed */.  struct t
14e0: 69 6d 65 76 61 6c 20 72 75 5f 73 74 69 6d 65 3b  imeval ru_stime;
14f0: 20 2f 2a 20 73 79 73 74 65 6d 20 43 50 55 20 74   /* system CPU t
1500: 69 6d 65 20 75 73 65 64 20 2a 2f 0a 7d 3b 0a 23  ime used */.};.#
1510: 64 65 66 69 6e 65 20 67 65 74 72 75 73 61 67 65  define getrusage
1520: 28 41 2c 42 29 20 6d 65 6d 73 65 74 28 42 2c 30  (A,B) memset(B,0
1530: 2c 73 69 7a 65 6f 66 28 2a 42 29 29 0a 23 65 6e  ,sizeof(*B)).#en
1540: 64 69 66 0a 0a 2f 2a 20 53 61 76 65 64 20 72 65  dif../* Saved re
1550: 73 6f 75 72 63 65 20 69 6e 66 6f 72 6d 61 74 69  source informati
1560: 6f 6e 20 66 6f 72 20 74 68 65 20 62 65 67 69 6e  on for the begin
1570: 6e 69 6e 67 20 6f 66 20 61 6e 20 6f 70 65 72 61  ning of an opera
1580: 74 69 6f 6e 20 2a 2f 0a 73 74 61 74 69 63 20 73  tion */.static s
1590: 74 72 75 63 74 20 72 75 73 61 67 65 20 73 42 65  truct rusage sBe
15a0: 67 69 6e 3b 20 20 2f 2a 20 43 50 55 20 74 69 6d  gin;  /* CPU tim
15b0: 65 20 61 74 20 73 74 61 72 74 20 2a 2f 0a 73 74  e at start */.st
15c0: 61 74 69 63 20 73 71 6c 69 74 65 33 5f 69 6e 74  atic sqlite3_int
15d0: 36 34 20 69 42 65 67 69 6e 3b 20 20 2f 2a 20 57  64 iBegin;  /* W
15e0: 61 6c 6c 2d 63 6c 6f 63 6b 20 74 69 6d 65 20 61  all-clock time a
15f0: 74 20 73 74 61 72 74 20 2a 2f 0a 0a 2f 2a 0a 2a  t start */../*.*
1600: 2a 20 42 65 67 69 6e 20 74 69 6d 69 6e 67 20 61  * Begin timing a
1610: 6e 20 6f 70 65 72 61 74 69 6f 6e 0a 2a 2f 0a 73  n operation.*/.s
1620: 74 61 74 69 63 20 76 6f 69 64 20 62 65 67 69 6e  tatic void begin
1630: 54 69 6d 65 72 28 76 6f 69 64 29 7b 0a 20 20 69  Timer(void){.  i
1640: 66 28 20 65 6e 61 62 6c 65 54 69 6d 65 72 20 29  f( enableTimer )
1650: 7b 0a 20 20 20 20 67 65 74 72 75 73 61 67 65 28  {.    getrusage(
1660: 52 55 53 41 47 45 5f 53 45 4c 46 2c 20 26 73 42  RUSAGE_SELF, &sB
1670: 65 67 69 6e 29 3b 0a 20 20 20 20 69 42 65 67 69  egin);.    iBegi
1680: 6e 20 3d 20 74 69 6d 65 4f 66 44 61 79 28 29 3b  n = timeOfDay();
1690: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72  .  }.}../* Retur
16a0: 6e 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65  n the difference
16b0: 20 6f 66 20 74 77 6f 20 74 69 6d 65 5f 73 74 72   of two time_str
16c0: 75 63 74 73 20 69 6e 20 73 65 63 6f 6e 64 73 20  ucts in seconds 
16d0: 2a 2f 0a 73 74 61 74 69 63 20 64 6f 75 62 6c 65  */.static double
16e0: 20 74 69 6d 65 44 69 66 66 28 73 74 72 75 63 74   timeDiff(struct
16f0: 20 74 69 6d 65 76 61 6c 20 2a 70 53 74 61 72 74   timeval *pStart
1700: 2c 20 73 74 72 75 63 74 20 74 69 6d 65 76 61 6c  , struct timeval
1710: 20 2a 70 45 6e 64 29 7b 0a 20 20 72 65 74 75 72   *pEnd){.  retur
1720: 6e 20 28 70 45 6e 64 2d 3e 74 76 5f 75 73 65 63  n (pEnd->tv_usec
1730: 20 2d 20 70 53 74 61 72 74 2d 3e 74 76 5f 75 73   - pStart->tv_us
1740: 65 63 29 2a 30 2e 30 30 30 30 30 31 20 2b 0a 20  ec)*0.000001 +. 
1750: 20 20 20 20 20 20 20 20 28 64 6f 75 62 6c 65 29          (double)
1760: 28 70 45 6e 64 2d 3e 74 76 5f 73 65 63 20 2d 20  (pEnd->tv_sec - 
1770: 70 53 74 61 72 74 2d 3e 74 76 5f 73 65 63 29 3b  pStart->tv_sec);
1780: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  .}../*.** Print 
1790: 74 68 65 20 74 69 6d 69 6e 67 20 72 65 73 75 6c  the timing resul
17a0: 74 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ts..*/.static vo
17b0: 69 64 20 65 6e 64 54 69 6d 65 72 28 76 6f 69 64  id endTimer(void
17c0: 29 7b 0a 20 20 69 66 28 20 65 6e 61 62 6c 65 54  ){.  if( enableT
17d0: 69 6d 65 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  imer ){.    sqli
17e0: 74 65 33 5f 69 6e 74 36 34 20 69 45 6e 64 20 3d  te3_int64 iEnd =
17f0: 20 74 69 6d 65 4f 66 44 61 79 28 29 3b 0a 20 20   timeOfDay();.  
1800: 20 20 73 74 72 75 63 74 20 72 75 73 61 67 65 20    struct rusage 
1810: 73 45 6e 64 3b 0a 20 20 20 20 67 65 74 72 75 73  sEnd;.    getrus
1820: 61 67 65 28 52 55 53 41 47 45 5f 53 45 4c 46 2c  age(RUSAGE_SELF,
1830: 20 26 73 45 6e 64 29 3b 0a 20 20 20 20 70 72 69   &sEnd);.    pri
1840: 6e 74 66 28 22 52 75 6e 20 54 69 6d 65 3a 20 72  ntf("Run Time: r
1850: 65 61 6c 20 25 2e 33 66 20 75 73 65 72 20 25 66  eal %.3f user %f
1860: 20 73 79 73 20 25 66 5c 6e 22 2c 0a 20 20 20 20   sys %f\n",.    
1870: 20 20 20 28 69 45 6e 64 20 2d 20 69 42 65 67 69     (iEnd - iBegi
1880: 6e 29 2a 30 2e 30 30 31 2c 0a 20 20 20 20 20 20  n)*0.001,.      
1890: 20 74 69 6d 65 44 69 66 66 28 26 73 42 65 67 69   timeDiff(&sBegi
18a0: 6e 2e 72 75 5f 75 74 69 6d 65 2c 20 26 73 45 6e  n.ru_utime, &sEn
18b0: 64 2e 72 75 5f 75 74 69 6d 65 29 2c 0a 20 20 20  d.ru_utime),.   
18c0: 20 20 20 20 74 69 6d 65 44 69 66 66 28 26 73 42      timeDiff(&sB
18d0: 65 67 69 6e 2e 72 75 5f 73 74 69 6d 65 2c 20 26  egin.ru_stime, &
18e0: 73 45 6e 64 2e 72 75 5f 73 74 69 6d 65 29 29 3b  sEnd.ru_stime));
18f0: 0a 20 20 7d 0a 7d 0a 0a 23 64 65 66 69 6e 65 20  .  }.}..#define 
1900: 42 45 47 49 4e 5f 54 49 4d 45 52 20 62 65 67 69  BEGIN_TIMER begi
1910: 6e 54 69 6d 65 72 28 29 0a 23 64 65 66 69 6e 65  nTimer().#define
1920: 20 45 4e 44 5f 54 49 4d 45 52 20 65 6e 64 54 69   END_TIMER endTi
1930: 6d 65 72 28 29 0a 23 64 65 66 69 6e 65 20 48 41  mer().#define HA
1940: 53 5f 54 49 4d 45 52 20 31 0a 0a 23 65 6c 69 66  S_TIMER 1..#elif
1950: 20 28 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32   (defined(_WIN32
1960: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e  ) || defined(WIN
1970: 33 32 29 29 0a 0a 2f 2a 20 53 61 76 65 64 20 72  32))../* Saved r
1980: 65 73 6f 75 72 63 65 20 69 6e 66 6f 72 6d 61 74  esource informat
1990: 69 6f 6e 20 66 6f 72 20 74 68 65 20 62 65 67 69  ion for the begi
19a0: 6e 6e 69 6e 67 20 6f 66 20 61 6e 20 6f 70 65 72  nning of an oper
19b0: 61 74 69 6f 6e 20 2a 2f 0a 73 74 61 74 69 63 20  ation */.static 
19c0: 48 41 4e 44 4c 45 20 68 50 72 6f 63 65 73 73 3b  HANDLE hProcess;
19d0: 0a 73 74 61 74 69 63 20 46 49 4c 45 54 49 4d 45  .static FILETIME
19e0: 20 66 74 4b 65 72 6e 65 6c 42 65 67 69 6e 3b 0a   ftKernelBegin;.
19f0: 73 74 61 74 69 63 20 46 49 4c 45 54 49 4d 45 20  static FILETIME 
1a00: 66 74 55 73 65 72 42 65 67 69 6e 3b 0a 73 74 61  ftUserBegin;.sta
1a10: 74 69 63 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  tic sqlite3_int6
1a20: 34 20 66 74 57 61 6c 6c 42 65 67 69 6e 3b 0a 74  4 ftWallBegin;.t
1a30: 79 70 65 64 65 66 20 42 4f 4f 4c 20 28 57 49 4e  ypedef BOOL (WIN
1a40: 41 50 49 20 2a 47 45 54 50 52 4f 43 54 49 4d 45  API *GETPROCTIME
1a50: 53 29 28 48 41 4e 44 4c 45 2c 20 4c 50 46 49 4c  S)(HANDLE, LPFIL
1a60: 45 54 49 4d 45 2c 20 4c 50 46 49 4c 45 54 49 4d  ETIME, LPFILETIM
1a70: 45 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  E,.             
1a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a90: 20 20 20 20 20 20 20 4c 50 46 49 4c 45 54 49 4d         LPFILETIM
1aa0: 45 2c 20 4c 50 46 49 4c 45 54 49 4d 45 29 3b 0a  E, LPFILETIME);.
1ab0: 73 74 61 74 69 63 20 47 45 54 50 52 4f 43 54 49  static GETPROCTI
1ac0: 4d 45 53 20 67 65 74 50 72 6f 63 65 73 73 54 69  MES getProcessTi
1ad0: 6d 65 73 41 64 64 72 20 3d 20 4e 55 4c 4c 3b 0a  mesAddr = NULL;.
1ae0: 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20  ./*.** Check to 
1af0: 73 65 65 20 69 66 20 77 65 20 68 61 76 65 20 74  see if we have t
1b00: 69 6d 65 72 20 73 75 70 70 6f 72 74 2e 20 20 52  imer support.  R
1b10: 65 74 75 72 6e 20 31 20 69 66 20 6e 65 63 65 73  eturn 1 if neces
1b20: 73 61 72 79 0a 2a 2a 20 73 75 70 70 6f 72 74 20  sary.** support 
1b30: 66 6f 75 6e 64 20 28 6f 72 20 66 6f 75 6e 64 20  found (or found 
1b40: 70 72 65 76 69 6f 75 73 6c 79 29 2e 0a 2a 2f 0a  previously)..*/.
1b50: 73 74 61 74 69 63 20 69 6e 74 20 68 61 73 54 69  static int hasTi
1b60: 6d 65 72 28 76 6f 69 64 29 7b 0a 20 20 69 66 28  mer(void){.  if(
1b70: 20 67 65 74 50 72 6f 63 65 73 73 54 69 6d 65 73   getProcessTimes
1b80: 41 64 64 72 20 29 7b 0a 20 20 20 20 72 65 74 75  Addr ){.    retu
1b90: 72 6e 20 31 3b 0a 20 20 7d 20 65 6c 73 65 20 7b  rn 1;.  } else {
1ba0: 0a 20 20 20 20 2f 2a 20 47 65 74 50 72 6f 63 65  .    /* GetProce
1bb0: 73 73 54 69 6d 65 73 28 29 20 69 73 6e 27 74 20  ssTimes() isn't 
1bc0: 73 75 70 70 6f 72 74 65 64 20 69 6e 20 57 49 4e  supported in WIN
1bd0: 39 35 20 61 6e 64 20 73 6f 6d 65 20 6f 74 68 65  95 and some othe
1be0: 72 20 57 69 6e 64 6f 77 73 0a 20 20 20 20 2a 2a  r Windows.    **
1bf0: 20 76 65 72 73 69 6f 6e 73 2e 20 53 65 65 20 69   versions. See i
1c00: 66 20 74 68 65 20 76 65 72 73 69 6f 6e 20 77 65  f the version we
1c10: 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20   are running on 
1c20: 68 61 73 20 69 74 2c 20 61 6e 64 20 69 66 20 69  has it, and if i
1c30: 74 0a 20 20 20 20 2a 2a 20 64 6f 65 73 2c 20 73  t.    ** does, s
1c40: 61 76 65 20 6f 66 66 20 61 20 70 6f 69 6e 74 65  ave off a pointe
1c50: 72 20 74 6f 20 69 74 20 61 6e 64 20 74 68 65 20  r to it and the 
1c60: 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20  current process 
1c70: 68 61 6e 64 6c 65 2e 0a 20 20 20 20 2a 2f 0a 20  handle..    */. 
1c80: 20 20 20 68 50 72 6f 63 65 73 73 20 3d 20 47 65     hProcess = Ge
1c90: 74 43 75 72 72 65 6e 74 50 72 6f 63 65 73 73 28  tCurrentProcess(
1ca0: 29 3b 0a 20 20 20 20 69 66 28 20 68 50 72 6f 63  );.    if( hProc
1cb0: 65 73 73 20 29 7b 0a 20 20 20 20 20 20 48 49 4e  ess ){.      HIN
1cc0: 53 54 41 4e 43 45 20 68 69 6e 73 74 4c 69 62 20  STANCE hinstLib 
1cd0: 3d 20 4c 6f 61 64 4c 69 62 72 61 72 79 28 54 45  = LoadLibrary(TE
1ce0: 58 54 28 22 4b 65 72 6e 65 6c 33 32 2e 64 6c 6c  XT("Kernel32.dll
1cf0: 22 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 4e  "));.      if( N
1d00: 55 4c 4c 20 21 3d 20 68 69 6e 73 74 4c 69 62 20  ULL != hinstLib 
1d10: 29 7b 0a 20 20 20 20 20 20 20 20 67 65 74 50 72  ){.        getPr
1d20: 6f 63 65 73 73 54 69 6d 65 73 41 64 64 72 20 3d  ocessTimesAddr =
1d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 47 45  .            (GE
1d40: 54 50 52 4f 43 54 49 4d 45 53 29 20 47 65 74 50  TPROCTIMES) GetP
1d50: 72 6f 63 41 64 64 72 65 73 73 28 68 69 6e 73 74  rocAddress(hinst
1d60: 4c 69 62 2c 20 22 47 65 74 50 72 6f 63 65 73 73  Lib, "GetProcess
1d70: 54 69 6d 65 73 22 29 3b 0a 20 20 20 20 20 20 20  Times");.       
1d80: 20 69 66 28 20 4e 55 4c 4c 20 21 3d 20 67 65 74   if( NULL != get
1d90: 50 72 6f 63 65 73 73 54 69 6d 65 73 41 64 64 72  ProcessTimesAddr
1da0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65   ){.          re
1db0: 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 20 20  turn 1;.        
1dc0: 7d 0a 20 20 20 20 20 20 20 20 46 72 65 65 4c 69  }.        FreeLi
1dd0: 62 72 61 72 79 28 68 69 6e 73 74 4c 69 62 29 3b  brary(hinstLib);
1de0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1df0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d   }.  return 0;.}
1e00: 0a 0a 2f 2a 0a 2a 2a 20 42 65 67 69 6e 20 74 69  ../*.** Begin ti
1e10: 6d 69 6e 67 20 61 6e 20 6f 70 65 72 61 74 69 6f  ming an operatio
1e20: 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  n.*/.static void
1e30: 20 62 65 67 69 6e 54 69 6d 65 72 28 76 6f 69 64   beginTimer(void
1e40: 29 7b 0a 20 20 69 66 28 20 65 6e 61 62 6c 65 54  ){.  if( enableT
1e50: 69 6d 65 72 20 26 26 20 67 65 74 50 72 6f 63 65  imer && getProce
1e60: 73 73 54 69 6d 65 73 41 64 64 72 20 29 7b 0a 20  ssTimesAddr ){. 
1e70: 20 20 20 46 49 4c 45 54 49 4d 45 20 66 74 43 72     FILETIME ftCr
1e80: 65 61 74 69 6f 6e 2c 20 66 74 45 78 69 74 3b 0a  eation, ftExit;.
1e90: 20 20 20 20 67 65 74 50 72 6f 63 65 73 73 54 69      getProcessTi
1ea0: 6d 65 73 41 64 64 72 28 68 50 72 6f 63 65 73 73  mesAddr(hProcess
1eb0: 2c 26 66 74 43 72 65 61 74 69 6f 6e 2c 26 66 74  ,&ftCreation,&ft
1ec0: 45 78 69 74 2c 0a 20 20 20 20 20 20 20 20 20 20  Exit,.          
1ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 66                &f
1ee0: 74 4b 65 72 6e 65 6c 42 65 67 69 6e 2c 26 66 74  tKernelBegin,&ft
1ef0: 55 73 65 72 42 65 67 69 6e 29 3b 0a 20 20 20 20  UserBegin);.    
1f00: 66 74 57 61 6c 6c 42 65 67 69 6e 20 3d 20 74 69  ftWallBegin = ti
1f10: 6d 65 4f 66 44 61 79 28 29 3b 0a 20 20 7d 0a 7d  meOfDay();.  }.}
1f20: 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 68 65 20  ../* Return the 
1f30: 64 69 66 66 65 72 65 6e 63 65 20 6f 66 20 74 77  difference of tw
1f40: 6f 20 46 49 4c 45 54 49 4d 45 20 73 74 72 75 63  o FILETIME struc
1f50: 74 73 20 69 6e 20 73 65 63 6f 6e 64 73 20 2a 2f  ts in seconds */
1f60: 0a 73 74 61 74 69 63 20 64 6f 75 62 6c 65 20 74  .static double t
1f70: 69 6d 65 44 69 66 66 28 46 49 4c 45 54 49 4d 45  imeDiff(FILETIME
1f80: 20 2a 70 53 74 61 72 74 2c 20 46 49 4c 45 54 49   *pStart, FILETI
1f90: 4d 45 20 2a 70 45 6e 64 29 7b 0a 20 20 73 71 6c  ME *pEnd){.  sql
1fa0: 69 74 65 5f 69 6e 74 36 34 20 69 36 34 53 74 61  ite_int64 i64Sta
1fb0: 72 74 20 3d 20 2a 28 28 73 71 6c 69 74 65 5f 69  rt = *((sqlite_i
1fc0: 6e 74 36 34 20 2a 29 20 70 53 74 61 72 74 29 3b  nt64 *) pStart);
1fd0: 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  .  sqlite_int64 
1fe0: 69 36 34 45 6e 64 20 3d 20 2a 28 28 73 71 6c 69  i64End = *((sqli
1ff0: 74 65 5f 69 6e 74 36 34 20 2a 29 20 70 45 6e 64  te_int64 *) pEnd
2000: 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 64 6f 75  );.  return (dou
2010: 62 6c 65 29 20 28 28 69 36 34 45 6e 64 20 2d 20  ble) ((i64End - 
2020: 69 36 34 53 74 61 72 74 29 20 2f 20 31 30 30 30  i64Start) / 1000
2030: 30 30 30 30 2e 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  0000.0);.}../*.*
2040: 2a 20 50 72 69 6e 74 20 74 68 65 20 74 69 6d 69  * Print the timi
2050: 6e 67 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 73  ng results..*/.s
2060: 74 61 74 69 63 20 76 6f 69 64 20 65 6e 64 54 69  tatic void endTi
2070: 6d 65 72 28 76 6f 69 64 29 7b 0a 20 20 69 66 28  mer(void){.  if(
2080: 20 65 6e 61 62 6c 65 54 69 6d 65 72 20 26 26 20   enableTimer && 
2090: 67 65 74 50 72 6f 63 65 73 73 54 69 6d 65 73 41  getProcessTimesA
20a0: 64 64 72 29 7b 0a 20 20 20 20 46 49 4c 45 54 49  ddr){.    FILETI
20b0: 4d 45 20 66 74 43 72 65 61 74 69 6f 6e 2c 20 66  ME ftCreation, f
20c0: 74 45 78 69 74 2c 20 66 74 4b 65 72 6e 65 6c 45  tExit, ftKernelE
20d0: 6e 64 2c 20 66 74 55 73 65 72 45 6e 64 3b 0a 20  nd, ftUserEnd;. 
20e0: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34     sqlite3_int64
20f0: 20 66 74 57 61 6c 6c 45 6e 64 20 3d 20 74 69 6d   ftWallEnd = tim
2100: 65 4f 66 44 61 79 28 29 3b 0a 20 20 20 20 67 65  eOfDay();.    ge
2110: 74 50 72 6f 63 65 73 73 54 69 6d 65 73 41 64 64  tProcessTimesAdd
2120: 72 28 68 50 72 6f 63 65 73 73 2c 26 66 74 43 72  r(hProcess,&ftCr
2130: 65 61 74 69 6f 6e 2c 26 66 74 45 78 69 74 2c 26  eation,&ftExit,&
2140: 66 74 4b 65 72 6e 65 6c 45 6e 64 2c 26 66 74 55  ftKernelEnd,&ftU
2150: 73 65 72 45 6e 64 29 3b 0a 20 20 20 20 70 72 69  serEnd);.    pri
2160: 6e 74 66 28 22 52 75 6e 20 54 69 6d 65 3a 20 72  ntf("Run Time: r
2170: 65 61 6c 20 25 2e 33 66 20 75 73 65 72 20 25 66  eal %.3f user %f
2180: 20 73 79 73 20 25 66 5c 6e 22 2c 0a 20 20 20 20   sys %f\n",.    
2190: 20 20 20 28 66 74 57 61 6c 6c 45 6e 64 20 2d 20     (ftWallEnd - 
21a0: 66 74 57 61 6c 6c 42 65 67 69 6e 29 2a 30 2e 30  ftWallBegin)*0.0
21b0: 30 31 2c 0a 20 20 20 20 20 20 20 74 69 6d 65 44  01,.       timeD
21c0: 69 66 66 28 26 66 74 55 73 65 72 42 65 67 69 6e  iff(&ftUserBegin
21d0: 2c 20 26 66 74 55 73 65 72 45 6e 64 29 2c 0a 20  , &ftUserEnd),. 
21e0: 20 20 20 20 20 20 74 69 6d 65 44 69 66 66 28 26        timeDiff(&
21f0: 66 74 4b 65 72 6e 65 6c 42 65 67 69 6e 2c 20 26  ftKernelBegin, &
2200: 66 74 4b 65 72 6e 65 6c 45 6e 64 29 29 3b 0a 20  ftKernelEnd));. 
2210: 20 7d 0a 7d 0a 0a 23 64 65 66 69 6e 65 20 42 45   }.}..#define BE
2220: 47 49 4e 5f 54 49 4d 45 52 20 62 65 67 69 6e 54  GIN_TIMER beginT
2230: 69 6d 65 72 28 29 0a 23 64 65 66 69 6e 65 20 45  imer().#define E
2240: 4e 44 5f 54 49 4d 45 52 20 65 6e 64 54 69 6d 65  ND_TIMER endTime
2250: 72 28 29 0a 23 64 65 66 69 6e 65 20 48 41 53 5f  r().#define HAS_
2260: 54 49 4d 45 52 20 68 61 73 54 69 6d 65 72 28 29  TIMER hasTimer()
2270: 0a 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  ..#else.#define 
2280: 42 45 47 49 4e 5f 54 49 4d 45 52 0a 23 64 65 66  BEGIN_TIMER.#def
2290: 69 6e 65 20 45 4e 44 5f 54 49 4d 45 52 0a 23 64  ine END_TIMER.#d
22a0: 65 66 69 6e 65 20 48 41 53 5f 54 49 4d 45 52 20  efine HAS_TIMER 
22b0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
22c0: 55 73 65 64 20 74 6f 20 70 72 65 76 65 6e 74 20  Used to prevent 
22d0: 77 61 72 6e 69 6e 67 73 20 61 62 6f 75 74 20 75  warnings about u
22e0: 6e 75 73 65 64 20 70 61 72 61 6d 65 74 65 72 73  nused parameters
22f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53  .*/.#define UNUS
2300: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20  ED_PARAMETER(x) 
2310: 28 76 6f 69 64 29 28 78 29 0a 0a 2f 2a 0a 2a 2a  (void)(x)../*.**
2320: 20 49 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   If the followin
2330: 67 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  g flag is set, t
2340: 68 65 6e 20 63 6f 6d 6d 61 6e 64 20 65 78 65 63  hen command exec
2350: 75 74 69 6f 6e 20 73 74 6f 70 73 0a 2a 2a 20 61  ution stops.** a
2360: 74 20 61 6e 20 65 72 72 6f 72 20 69 66 20 77 65  t an error if we
2370: 20 61 72 65 20 6e 6f 74 20 69 6e 74 65 72 61 63   are not interac
2380: 74 69 76 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tive..*/.static 
2390: 69 6e 74 20 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f  int bail_on_erro
23a0: 72 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  r = 0;../*.** Th
23b0: 72 65 61 74 20 73 74 64 69 6e 20 61 73 20 61 6e  reat stdin as an
23c0: 20 69 6e 74 65 72 61 63 74 69 76 65 20 69 6e 70   interactive inp
23d0: 75 74 20 69 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ut if the follow
23e0: 69 6e 67 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  ing variable.** 
23f0: 69 73 20 74 72 75 65 2e 20 20 4f 74 68 65 72 77  is true.  Otherw
2400: 69 73 65 2c 20 61 73 73 75 6d 65 20 73 74 64 69  ise, assume stdi
2410: 6e 20 69 73 20 63 6f 6e 6e 65 63 74 65 64 20 74  n is connected t
2420: 6f 20 61 20 66 69 6c 65 20 6f 72 20 70 69 70 65  o a file or pipe
2430: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
2440: 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63  stdin_is_interac
2450: 74 69 76 65 20 3d 20 31 3b 0a 0a 2f 2a 0a 2a 2a  tive = 1;../*.**
2460: 20 4f 6e 20 57 69 6e 64 6f 77 73 20 73 79 73 74   On Windows syst
2470: 65 6d 73 20 77 65 20 68 61 76 65 20 74 6f 20 6b  ems we have to k
2480: 6e 6f 77 20 69 66 20 73 74 61 6e 64 61 72 64 20  now if standard 
2490: 6f 75 74 70 75 74 20 69 73 20 61 20 63 6f 6e 73  output is a cons
24a0: 6f 6c 65 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20  ole.** in order 
24b0: 74 6f 20 74 72 61 6e 73 6c 61 74 65 20 55 54 46  to translate UTF
24c0: 2d 38 20 69 6e 74 6f 20 4d 42 43 53 2e 20 20 54  -8 into MBCS.  T
24d0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72  he following var
24e0: 69 61 62 6c 65 20 69 73 0a 2a 2a 20 74 72 75 65  iable is.** true
24f0: 20 69 66 20 74 72 61 6e 73 6c 61 74 69 6f 6e 20   if translation 
2500: 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a  is required..*/.
2510: 73 74 61 74 69 63 20 69 6e 74 20 73 74 64 6f 75  static int stdou
2520: 74 5f 69 73 5f 63 6f 6e 73 6f 6c 65 20 3d 20 31  t_is_console = 1
2530: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
2540: 6c 6f 77 69 6e 67 20 69 73 20 74 68 65 20 6f 70  lowing is the op
2550: 65 6e 20 53 51 4c 69 74 65 20 64 61 74 61 62 61  en SQLite databa
2560: 73 65 2e 20 20 57 65 20 6d 61 6b 65 20 61 20 70  se.  We make a p
2570: 6f 69 6e 74 65 72 0a 2a 2a 20 74 6f 20 74 68 69  ointer.** to thi
2580: 73 20 64 61 74 61 62 61 73 65 20 61 20 73 74 61  s database a sta
2590: 74 69 63 20 76 61 72 69 61 62 6c 65 20 73 6f 20  tic variable so 
25a0: 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 61  that it can be a
25b0: 63 63 65 73 73 65 64 0a 2a 2a 20 62 79 20 74 68  ccessed.** by th
25c0: 65 20 53 49 47 49 4e 54 20 68 61 6e 64 6c 65 72  e SIGINT handler
25d0: 20 74 6f 20 69 6e 74 65 72 72 75 70 74 20 64 61   to interrupt da
25e0: 74 61 62 61 73 65 20 70 72 6f 63 65 73 73 69 6e  tabase processin
25f0: 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c  g..*/.static sql
2600: 69 74 65 33 20 2a 67 6c 6f 62 61 6c 44 62 20 3d  ite3 *globalDb =
2610: 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 54 72 75 65 20   0;../*.** True 
2620: 69 66 20 61 6e 20 69 6e 74 65 72 72 75 70 74 20  if an interrupt 
2630: 28 43 6f 6e 74 72 6f 6c 2d 43 29 20 68 61 73 20  (Control-C) has 
2640: 62 65 65 6e 20 72 65 63 65 69 76 65 64 2e 0a 2a  been received..*
2650: 2f 0a 73 74 61 74 69 63 20 76 6f 6c 61 74 69 6c  /.static volatil
2660: 65 20 69 6e 74 20 73 65 65 6e 49 6e 74 65 72 72  e int seenInterr
2670: 75 70 74 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20  upt = 0;../*.** 
2680: 54 68 69 73 20 69 73 20 74 68 65 20 6e 61 6d 65  This is the name
2690: 20 6f 66 20 6f 75 72 20 70 72 6f 67 72 61 6d 2e   of our program.
26a0: 20 49 74 20 69 73 20 73 65 74 20 69 6e 20 6d 61   It is set in ma
26b0: 69 6e 28 29 2c 20 75 73 65 64 0a 2a 2a 20 69 6e  in(), used.** in
26c0: 20 61 20 6e 75 6d 62 65 72 20 6f 66 20 6f 74 68   a number of oth
26d0: 65 72 20 70 6c 61 63 65 73 2c 20 6d 6f 73 74 6c  er places, mostl
26e0: 79 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  y for error mess
26f0: 61 67 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ages..*/.static 
2700: 63 68 61 72 20 2a 41 72 67 76 30 3b 0a 0a 2f 2a  char *Argv0;../*
2710: 0a 2a 2a 20 50 72 6f 6d 70 74 20 73 74 72 69 6e  .** Prompt strin
2720: 67 73 2e 20 49 6e 69 74 69 61 6c 69 7a 65 64 20  gs. Initialized 
2730: 69 6e 20 6d 61 69 6e 2e 20 53 65 74 74 61 62 6c  in main. Settabl
2740: 65 20 77 69 74 68 0a 2a 2a 20 20 20 2e 70 72 6f  e with.**   .pro
2750: 6d 70 74 20 6d 61 69 6e 20 63 6f 6e 74 69 6e 75  mpt main continu
2760: 65 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72  e.*/.static char
2770: 20 6d 61 69 6e 50 72 6f 6d 70 74 5b 32 30 5d 3b   mainPrompt[20];
2780: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 6c 69       /* First li
2790: 6e 65 20 70 72 6f 6d 70 74 2e 20 64 65 66 61 75  ne prompt. defau
27a0: 6c 74 3a 20 22 73 71 6c 69 74 65 3e 20 22 2a 2f  lt: "sqlite> "*/
27b0: 0a 73 74 61 74 69 63 20 63 68 61 72 20 63 6f 6e  .static char con
27c0: 74 69 6e 75 65 50 72 6f 6d 70 74 5b 32 30 5d 3b  tinuePrompt[20];
27d0: 20 2f 2a 20 43 6f 6e 74 69 6e 75 61 74 69 6f 6e   /* Continuation
27e0: 20 70 72 6f 6d 70 74 2e 20 64 65 66 61 75 6c 74   prompt. default
27f0: 3a 20 22 20 20 20 2e 2e 2e 3e 20 22 20 2a 2f 0a  : "   ...> " */.
2800: 0a 2f 2a 0a 2a 2a 20 52 65 6e 64 65 72 20 6f 75  ./*.** Render ou
2810: 74 70 75 74 20 6c 69 6b 65 20 66 70 72 69 6e 74  tput like fprint
2820: 66 28 29 2e 20 20 45 78 63 65 70 74 2c 20 69 66  f().  Except, if
2830: 20 74 68 65 20 6f 75 74 70 75 74 20 69 73 20 67   the output is g
2840: 6f 69 6e 67 20 74 6f 20 74 68 65 0a 2a 2a 20 63  oing to the.** c
2850: 6f 6e 73 6f 6c 65 20 61 6e 64 20 69 66 20 74 68  onsole and if th
2860: 69 73 20 69 73 20 72 75 6e 6e 69 6e 67 20 6f 6e  is is running on
2870: 20 61 20 57 69 6e 64 6f 77 73 20 6d 61 63 68 69   a Windows machi
2880: 6e 65 2c 20 74 72 61 6e 73 6c 61 74 65 20 74 68  ne, translate th
2890: 65 0a 2a 2a 20 6f 75 74 70 75 74 20 66 72 6f 6d  e.** output from
28a0: 20 55 54 46 2d 38 20 69 6e 74 6f 20 4d 42 43 53   UTF-8 into MBCS
28b0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
28c0: 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69  (_WIN32) || defi
28d0: 6e 65 64 28 57 49 4e 33 32 29 0a 76 6f 69 64 20  ned(WIN32).void 
28e0: 75 74 66 38 5f 70 72 69 6e 74 66 28 46 49 4c 45  utf8_printf(FILE
28f0: 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 63 68 61   *out, const cha
2900: 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29  r *zFormat, ...)
2910: 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a  {.  va_list ap;.
2920: 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a    va_start(ap, z
2930: 46 6f 72 6d 61 74 29 3b 0a 20 20 69 66 28 20 73  Format);.  if( s
2940: 74 64 6f 75 74 5f 69 73 5f 63 6f 6e 73 6f 6c 65  tdout_is_console
2950: 20 26 26 20 28 6f 75 74 3d 3d 73 74 64 6f 75 74   && (out==stdout
2960: 20 7c 7c 20 6f 75 74 3d 3d 73 74 64 65 72 72 29   || out==stderr)
2970: 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 31   ){.    char *z1
2980: 20 3d 20 73 71 6c 69 74 65 33 5f 76 6d 70 72 69   = sqlite3_vmpri
2990: 6e 74 66 28 7a 46 6f 72 6d 61 74 2c 20 61 70 29  ntf(zFormat, ap)
29a0: 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 32 20 3d  ;.    char *z2 =
29b0: 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 75   sqlite3_win32_u
29c0: 74 66 38 5f 74 6f 5f 6d 62 63 73 5f 76 32 28 7a  tf8_to_mbcs_v2(z
29d0: 31 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  1, 0);.    sqlit
29e0: 65 33 5f 66 72 65 65 28 7a 31 29 3b 0a 20 20 20  e3_free(z1);.   
29f0: 20 66 70 75 74 73 28 7a 32 2c 20 6f 75 74 29 3b   fputs(z2, out);
2a00: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
2a10: 65 28 7a 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  e(z2);.  }else{.
2a20: 20 20 20 20 76 66 70 72 69 6e 74 66 28 6f 75 74      vfprintf(out
2a30: 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a  , zFormat, ap);.
2a40: 20 20 7d 0a 20 20 76 61 5f 65 6e 64 28 61 70 29    }.  va_end(ap)
2a50: 3b 0a 7d 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  ;.}.#elif !defin
2a60: 65 64 28 75 74 66 38 5f 70 72 69 6e 74 66 29 0a  ed(utf8_printf).
2a70: 23 20 64 65 66 69 6e 65 20 75 74 66 38 5f 70 72  # define utf8_pr
2a80: 69 6e 74 66 20 66 70 72 69 6e 74 66 0a 23 65 6e  intf fprintf.#en
2a90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 6e 64 65  dif../*.** Rende
2aa0: 72 20 6f 75 74 70 75 74 20 6c 69 6b 65 20 66 70  r output like fp
2ab0: 72 69 6e 74 66 28 29 2e 20 20 54 68 69 73 20 73  rintf().  This s
2ac0: 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65  hould not be use
2ad0: 64 20 6f 6e 20 61 6e 79 74 68 69 6e 67 20 74 68  d on anything th
2ae0: 61 74 0a 2a 2a 20 69 6e 63 6c 75 64 65 73 20 73  at.** includes s
2af0: 74 72 69 6e 67 20 66 6f 72 6d 61 74 74 69 6e 67  tring formatting
2b00: 20 28 65 2e 67 2e 20 22 25 73 22 29 2e 0a 2a 2f   (e.g. "%s")..*/
2b10: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 72 61  .#if !defined(ra
2b20: 77 5f 70 72 69 6e 74 66 29 0a 23 20 64 65 66 69  w_printf).# defi
2b30: 6e 65 20 72 61 77 5f 70 72 69 6e 74 66 20 66 70  ne raw_printf fp
2b40: 72 69 6e 74 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  rintf.#endif../*
2b50: 0a 2a 2a 20 57 72 69 74 65 20 49 2f 4f 20 74 72  .** Write I/O tr
2b60: 61 63 65 73 20 74 6f 20 74 68 65 20 66 6f 6c 6c  aces to the foll
2b70: 6f 77 69 6e 67 20 73 74 72 65 61 6d 2e 0a 2a 2f  owing stream..*/
2b80: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2b90: 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 73 74  NABLE_IOTRACE.st
2ba0: 61 74 69 63 20 46 49 4c 45 20 2a 69 6f 74 72 61  atic FILE *iotra
2bb0: 63 65 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a  ce = 0;.#endif..
2bc0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  /*.** This routi
2bd0: 6e 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 70 72  ne works like pr
2be0: 69 6e 74 66 20 69 6e 20 74 68 61 74 20 69 74 73  intf in that its
2bf0: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   first argument 
2c00: 69 73 20 61 0a 2a 2a 20 66 6f 72 6d 61 74 20 73  is a.** format s
2c10: 74 72 69 6e 67 20 61 6e 64 20 73 75 62 73 65 71  tring and subseq
2c20: 75 65 6e 74 20 61 72 67 75 6d 65 6e 74 73 20 61  uent arguments a
2c30: 72 65 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20  re values to be 
2c40: 73 75 62 73 74 69 74 75 74 65 64 0a 2a 2a 20 69  substituted.** i
2c50: 6e 20 70 6c 61 63 65 20 6f 66 20 25 20 66 69 65  n place of % fie
2c60: 6c 64 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74  lds.  The result
2c70: 20 6f 66 20 66 6f 72 6d 61 74 74 69 6e 67 20 74   of formatting t
2c80: 68 69 73 20 73 74 72 69 6e 67 0a 2a 2a 20 69 73  his string.** is
2c90: 20 77 72 69 74 74 65 6e 20 74 6f 20 69 6f 74 72   written to iotr
2ca0: 61 63 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ace..*/.#ifdef S
2cb0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54  QLITE_ENABLE_IOT
2cc0: 52 41 43 45 0a 73 74 61 74 69 63 20 76 6f 69 64  RACE.static void
2cd0: 20 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 69 6f   SQLITE_CDECL io
2ce0: 74 72 61 63 65 50 72 69 6e 74 66 28 63 6f 6e 73  tracePrintf(cons
2cf0: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c  t char *zFormat,
2d00: 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74   ...){.  va_list
2d10: 20 61 70 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a   ap;.  char *z;.
2d20: 20 20 69 66 28 20 69 6f 74 72 61 63 65 3d 3d 30    if( iotrace==0
2d30: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 76 61 5f   ) return;.  va_
2d40: 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61  start(ap, zForma
2d50: 74 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65  t);.  z = sqlite
2d60: 33 5f 76 6d 70 72 69 6e 74 66 28 7a 46 6f 72 6d  3_vmprintf(zForm
2d70: 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e  at, ap);.  va_en
2d80: 64 28 61 70 29 3b 0a 20 20 75 74 66 38 5f 70 72  d(ap);.  utf8_pr
2d90: 69 6e 74 66 28 69 6f 74 72 61 63 65 2c 20 22 25  intf(iotrace, "%
2da0: 73 22 2c 20 7a 29 3b 0a 20 20 73 71 6c 69 74 65  s", z);.  sqlite
2db0: 33 5f 66 72 65 65 28 7a 29 3b 0a 7d 0a 23 65 6e  3_free(z);.}.#en
2dc0: 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  dif.../*.** Dete
2dd0: 72 6d 69 6e 65 73 20 69 66 20 61 20 73 74 72 69  rmines if a stri
2de0: 6e 67 20 69 73 20 61 20 6e 75 6d 62 65 72 20 6f  ng is a number o
2df0: 66 20 6e 6f 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  f not..*/.static
2e00: 20 69 6e 74 20 69 73 4e 75 6d 62 65 72 28 63 6f   int isNumber(co
2e10: 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
2e20: 20 2a 72 65 61 6c 6e 75 6d 29 7b 0a 20 20 69 66   *realnum){.  if
2e30: 28 20 2a 7a 3d 3d 27 2d 27 20 7c 7c 20 2a 7a 3d  ( *z=='-' || *z=
2e40: 3d 27 2b 27 20 29 20 7a 2b 2b 3b 0a 20 20 69 66  ='+' ) z++;.  if
2e50: 28 20 21 49 73 44 69 67 69 74 28 2a 7a 29 20 29  ( !IsDigit(*z) )
2e60: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  {.    return 0;.
2e70: 20 20 7d 0a 20 20 7a 2b 2b 3b 0a 20 20 69 66 28    }.  z++;.  if(
2e80: 20 72 65 61 6c 6e 75 6d 20 29 20 2a 72 65 61 6c   realnum ) *real
2e90: 6e 75 6d 20 3d 20 30 3b 0a 20 20 77 68 69 6c 65  num = 0;.  while
2ea0: 28 20 49 73 44 69 67 69 74 28 2a 7a 29 20 29 7b  ( IsDigit(*z) ){
2eb0: 20 7a 2b 2b 3b 20 7d 0a 20 20 69 66 28 20 2a 7a   z++; }.  if( *z
2ec0: 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20 7a 2b 2b  =='.' ){.    z++
2ed0: 3b 0a 20 20 20 20 69 66 28 20 21 49 73 44 69 67  ;.    if( !IsDig
2ee0: 69 74 28 2a 7a 29 20 29 20 72 65 74 75 72 6e 20  it(*z) ) return 
2ef0: 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 49 73  0;.    while( Is
2f00: 44 69 67 69 74 28 2a 7a 29 20 29 7b 20 7a 2b 2b  Digit(*z) ){ z++
2f10: 3b 20 7d 0a 20 20 20 20 69 66 28 20 72 65 61 6c  ; }.    if( real
2f20: 6e 75 6d 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d  num ) *realnum =
2f30: 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20 2a 7a   1;.  }.  if( *z
2f40: 3d 3d 27 65 27 20 7c 7c 20 2a 7a 3d 3d 27 45 27  =='e' || *z=='E'
2f50: 20 29 7b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 20   ){.    z++;.   
2f60: 20 69 66 28 20 2a 7a 3d 3d 27 2b 27 20 7c 7c 20   if( *z=='+' || 
2f70: 2a 7a 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20  *z=='-' ) z++;. 
2f80: 20 20 20 69 66 28 20 21 49 73 44 69 67 69 74 28     if( !IsDigit(
2f90: 2a 7a 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  *z) ) return 0;.
2fa0: 20 20 20 20 77 68 69 6c 65 28 20 49 73 44 69 67      while( IsDig
2fb0: 69 74 28 2a 7a 29 20 29 7b 20 7a 2b 2b 3b 20 7d  it(*z) ){ z++; }
2fc0: 0a 20 20 20 20 69 66 28 20 72 65 61 6c 6e 75 6d  .    if( realnum
2fd0: 20 29 20 2a 72 65 61 6c 6e 75 6d 20 3d 20 31 3b   ) *realnum = 1;
2fe0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 2a 7a  .  }.  return *z
2ff0: 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 20  ==0;.}../*.** A 
3000: 67 6c 6f 62 61 6c 20 63 68 61 72 2a 20 61 6e 64  global char* and
3010: 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
3020: 20 74 6f 20 61 63 63 65 73 73 20 69 74 73 20 63   to access its c
3030: 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 2a 2a 20  urrent value.** 
3040: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 53  from within an S
3050: 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  QL statement. Th
3060: 69 73 20 70 72 6f 67 72 61 6d 20 75 73 65 64 20  is program used 
3070: 74 6f 20 75 73 65 20 74 68 65 0a 2a 2a 20 73 71  to use the.** sq
3080: 6c 69 74 65 5f 65 78 65 63 5f 70 72 69 6e 74 66  lite_exec_printf
3090: 28 29 20 41 50 49 20 74 6f 20 73 75 62 73 74 69  () API to substi
30a0: 74 75 65 20 61 20 73 74 72 69 6e 67 20 69 6e 74  tue a string int
30b0: 6f 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  o an SQL stateme
30c0: 6e 74 2e 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65  nt..** The corre
30d0: 63 74 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69  ct way to do thi
30e0: 73 20 77 69 74 68 20 73 71 6c 69 74 65 33 20 69  s with sqlite3 i
30f0: 73 20 74 6f 20 75 73 65 20 74 68 65 20 62 69 6e  s to use the bin
3100: 64 20 41 50 49 2c 20 62 75 74 0a 2a 2a 20 73 69  d API, but.** si
3110: 6e 63 65 20 74 68 65 20 73 68 65 6c 6c 20 69 73  nce the shell is
3120: 20 62 75 69 6c 74 20 61 72 6f 75 6e 64 20 74 68   built around th
3130: 65 20 63 61 6c 6c 62 61 63 6b 20 70 61 72 61 64  e callback parad
3140: 69 67 6d 20 69 74 20 77 6f 75 6c 64 20 62 65 20  igm it would be 
3150: 61 20 6c 6f 74 0a 2a 2a 20 6f 66 20 77 6f 72 6b  a lot.** of work
3160: 2e 20 49 6e 73 74 65 61 64 20 6a 75 73 74 20 75  . Instead just u
3170: 73 65 20 74 68 69 73 20 68 61 63 6b 2c 20 77 68  se this hack, wh
3180: 69 63 68 20 69 73 20 71 75 69 74 65 20 68 61 72  ich is quite har
3190: 6d 6c 65 73 73 2e 0a 2a 2f 0a 73 74 61 74 69 63  mless..*/.static
31a0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 68   const char *zSh
31b0: 65 6c 6c 53 74 61 74 69 63 20 3d 20 30 3b 0a 73  ellStatic = 0;.s
31c0: 74 61 74 69 63 20 76 6f 69 64 20 73 68 65 6c 6c  tatic void shell
31d0: 73 74 61 74 69 63 46 75 6e 63 28 0a 20 20 73 71  staticFunc(.  sq
31e0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63  lite3_context *c
31f0: 6f 6e 74 65 78 74 2c 0a 20 20 69 6e 74 20 61 72  ontext,.  int ar
3200: 67 63 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  gc,.  sqlite3_va
3210: 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  lue **argv.){.  
3220: 61 73 73 65 72 74 28 20 30 3d 3d 61 72 67 63 20  assert( 0==argc 
3230: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 53 68  );.  assert( zSh
3240: 65 6c 6c 53 74 61 74 69 63 20 29 3b 0a 20 20 55  ellStatic );.  U
3250: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
3260: 61 72 67 63 29 3b 0a 20 20 55 4e 55 53 45 44 5f  argc);.  UNUSED_
3270: 50 41 52 41 4d 45 54 45 52 28 61 72 67 76 29 3b  PARAMETER(argv);
3280: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
3290: 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20  t_text(context, 
32a0: 7a 53 68 65 6c 6c 53 74 61 74 69 63 2c 20 2d 31  zShellStatic, -1
32b0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
32c0: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70  ;.}.../*.** Comp
32d0: 75 74 65 20 61 20 73 74 72 69 6e 67 20 6c 65 6e  ute a string len
32e0: 67 74 68 20 74 68 61 74 20 69 73 20 6c 69 6d 69  gth that is limi
32f0: 74 65 64 20 74 6f 20 77 68 61 74 20 63 61 6e 20  ted to what can 
3300: 62 65 20 73 74 6f 72 65 64 20 69 6e 0a 2a 2a 20  be stored in.** 
3310: 6c 6f 77 65 72 20 33 30 20 62 69 74 73 20 6f 66  lower 30 bits of
3320: 20 61 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64   a 32-bit signed
3330: 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 73 74 61   integer..*/.sta
3340: 74 69 63 20 69 6e 74 20 73 74 72 6c 65 6e 33 30  tic int strlen30
3350: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
3360: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
3370: 32 20 3d 20 7a 3b 0a 20 20 77 68 69 6c 65 28 20  2 = z;.  while( 
3380: 2a 7a 32 20 29 7b 20 7a 32 2b 2b 3b 20 7d 0a 20  *z2 ){ z2++; }. 
3390: 20 72 65 74 75 72 6e 20 30 78 33 66 66 66 66 66   return 0x3fffff
33a0: 66 66 20 26 20 28 69 6e 74 29 28 7a 32 20 2d 20  ff & (int)(z2 - 
33b0: 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  z);.}../*.** Thi
33c0: 73 20 72 6f 75 74 69 6e 65 20 72 65 61 64 73 20  s routine reads 
33d0: 61 20 6c 69 6e 65 20 6f 66 20 74 65 78 74 20 66  a line of text f
33e0: 72 6f 6d 20 46 49 4c 45 20 69 6e 2c 20 73 74 6f  rom FILE in, sto
33f0: 72 65 73 0a 2a 2a 20 74 68 65 20 74 65 78 74 20  res.** the text 
3400: 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e  in memory obtain
3410: 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ed from malloc()
3420: 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20 70   and returns a p
3430: 6f 69 6e 74 65 72 0a 2a 2a 20 74 6f 20 74 68 65  ointer.** to the
3440: 20 74 65 78 74 2e 20 20 4e 55 4c 4c 20 69 73 20   text.  NULL is 
3450: 72 65 74 75 72 6e 65 64 20 61 74 20 65 6e 64 20  returned at end 
3460: 6f 66 20 66 69 6c 65 2c 20 6f 72 20 69 66 20 6d  of file, or if m
3470: 61 6c 6c 6f 63 28 29 0a 2a 2a 20 66 61 69 6c 73  alloc().** fails
3480: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 7a 4c 69 6e 65  ..**.** If zLine
3490: 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65   is not NULL the
34a0: 6e 20 69 74 20 69 73 20 61 20 6d 61 6c 6c 6f 63  n it is a malloc
34b0: 65 64 20 62 75 66 66 65 72 20 72 65 74 75 72 6e  ed buffer return
34c0: 65 64 20 66 72 6f 6d 0a 2a 2a 20 61 20 70 72 65  ed from.** a pre
34d0: 76 69 6f 75 73 20 63 61 6c 6c 20 74 6f 20 74 68  vious call to th
34e0: 69 73 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20  is routine that 
34f0: 6d 61 79 20 62 65 20 72 65 75 73 65 64 2e 0a 2a  may be reused..*
3500: 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 6c  /.static char *l
3510: 6f 63 61 6c 5f 67 65 74 6c 69 6e 65 28 63 68 61  ocal_getline(cha
3520: 72 20 2a 7a 4c 69 6e 65 2c 20 46 49 4c 45 20 2a  r *zLine, FILE *
3530: 69 6e 29 7b 0a 20 20 69 6e 74 20 6e 4c 69 6e 65  in){.  int nLine
3540: 20 3d 20 7a 4c 69 6e 65 3d 3d 30 20 3f 20 30 20   = zLine==0 ? 0 
3550: 3a 20 31 30 30 3b 0a 20 20 69 6e 74 20 6e 20 3d  : 100;.  int n =
3560: 20 30 3b 0a 0a 20 20 77 68 69 6c 65 28 20 31 20   0;..  while( 1 
3570: 29 7b 0a 20 20 20 20 69 66 28 20 6e 2b 31 30 30  ){.    if( n+100
3580: 3e 6e 4c 69 6e 65 20 29 7b 0a 20 20 20 20 20 20  >nLine ){.      
3590: 6e 4c 69 6e 65 20 3d 20 6e 4c 69 6e 65 2a 32 20  nLine = nLine*2 
35a0: 2b 20 31 30 30 3b 0a 20 20 20 20 20 20 7a 4c 69  + 100;.      zLi
35b0: 6e 65 20 3d 20 72 65 61 6c 6c 6f 63 28 7a 4c 69  ne = realloc(zLi
35c0: 6e 65 2c 20 6e 4c 69 6e 65 29 3b 0a 20 20 20 20  ne, nLine);.    
35d0: 20 20 69 66 28 20 7a 4c 69 6e 65 3d 3d 30 20 29    if( zLine==0 )
35e0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d   return 0;.    }
35f0: 0a 20 20 20 20 69 66 28 20 66 67 65 74 73 28 26  .    if( fgets(&
3600: 7a 4c 69 6e 65 5b 6e 5d 2c 20 6e 4c 69 6e 65 20  zLine[n], nLine 
3610: 2d 20 6e 2c 20 69 6e 29 3d 3d 30 20 29 7b 0a 20  - n, in)==0 ){. 
3620: 20 20 20 20 20 69 66 28 20 6e 3d 3d 30 20 29 7b       if( n==0 ){
3630: 0a 20 20 20 20 20 20 20 20 66 72 65 65 28 7a 4c  .        free(zL
3640: 69 6e 65 29 3b 0a 20 20 20 20 20 20 20 20 72 65  ine);.        re
3650: 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 7d 0a  turn 0;.      }.
3660: 20 20 20 20 20 20 7a 4c 69 6e 65 5b 6e 5d 20 3d        zLine[n] =
3670: 20 30 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   0;.      break;
3680: 0a 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c 65  .    }.    while
3690: 28 20 7a 4c 69 6e 65 5b 6e 5d 20 29 20 6e 2b 2b  ( zLine[n] ) n++
36a0: 3b 0a 20 20 20 20 69 66 28 20 6e 3e 30 20 26 26  ;.    if( n>0 &&
36b0: 20 7a 4c 69 6e 65 5b 6e 2d 31 5d 3d 3d 27 5c 6e   zLine[n-1]=='\n
36c0: 27 20 29 7b 0a 20 20 20 20 20 20 6e 2d 2d 3b 0a  ' ){.      n--;.
36d0: 20 20 20 20 20 20 69 66 28 20 6e 3e 30 20 26 26        if( n>0 &&
36e0: 20 7a 4c 69 6e 65 5b 6e 2d 31 5d 3d 3d 27 5c 72   zLine[n-1]=='\r
36f0: 27 20 29 20 6e 2d 2d 3b 0a 20 20 20 20 20 20 7a  ' ) n--;.      z
3700: 4c 69 6e 65 5b 6e 5d 20 3d 20 30 3b 0a 20 20 20  Line[n] = 0;.   
3710: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
3720: 20 20 7d 0a 23 69 66 20 64 65 66 69 6e 65 64 28    }.#if defined(
3730: 5f 57 49 4e 33 32 29 20 7c 7c 20 64 65 66 69 6e  _WIN32) || defin
3740: 65 64 28 57 49 4e 33 32 29 0a 20 20 2f 2a 20 46  ed(WIN32).  /* F
3750: 6f 72 20 69 6e 74 65 72 61 63 74 69 76 65 20 69  or interactive i
3760: 6e 70 75 74 20 6f 6e 20 57 69 6e 64 6f 77 73 20  nput on Windows 
3770: 73 79 73 74 65 6d 73 2c 20 74 72 61 6e 73 6c 61  systems, transla
3780: 74 65 20 74 68 65 0a 20 20 2a 2a 20 6d 75 6c 74  te the.  ** mult
3790: 69 2d 62 79 74 65 20 63 68 61 72 61 63 74 65 72  i-byte character
37a0: 73 65 74 20 63 68 61 72 61 63 74 65 72 73 20 69  set characters i
37b0: 6e 74 6f 20 55 54 46 2d 38 2e 20 2a 2f 0a 20 20  nto UTF-8. */.  
37c0: 69 66 28 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74  if( stdin_is_int
37d0: 65 72 61 63 74 69 76 65 20 26 26 20 69 6e 3d 3d  eractive && in==
37e0: 73 74 64 69 6e 20 29 7b 0a 20 20 20 20 63 68 61  stdin ){.    cha
37f0: 72 20 2a 7a 54 72 61 6e 73 20 3d 20 73 71 6c 69  r *zTrans = sqli
3800: 74 65 33 5f 77 69 6e 33 32 5f 6d 62 63 73 5f 74  te3_win32_mbcs_t
3810: 6f 5f 75 74 66 38 5f 76 32 28 7a 4c 69 6e 65 2c  o_utf8_v2(zLine,
3820: 20 30 29 3b 0a 20 20 20 20 69 66 28 20 7a 54 72   0);.    if( zTr
3830: 61 6e 73 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ans ){.      int
3840: 20 6e 54 72 61 6e 73 20 3d 20 73 74 72 6c 65 6e   nTrans = strlen
3850: 33 30 28 7a 54 72 61 6e 73 29 2b 31 3b 0a 20 20  30(zTrans)+1;.  
3860: 20 20 20 20 69 66 28 20 6e 54 72 61 6e 73 3e 6e      if( nTrans>n
3870: 4c 69 6e 65 20 29 7b 0a 20 20 20 20 20 20 20 20  Line ){.        
3880: 7a 4c 69 6e 65 20 3d 20 72 65 61 6c 6c 6f 63 28  zLine = realloc(
3890: 7a 4c 69 6e 65 2c 20 6e 54 72 61 6e 73 29 3b 0a  zLine, nTrans);.
38a0: 20 20 20 20 20 20 20 20 69 66 28 20 7a 4c 69 6e          if( zLin
38b0: 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  e==0 ){.        
38c0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
38d0: 54 72 61 6e 73 29 3b 0a 20 20 20 20 20 20 20 20  Trans);.        
38e0: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20    return 0;.    
38f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
3900: 20 20 20 20 6d 65 6d 63 70 79 28 7a 4c 69 6e 65      memcpy(zLine
3910: 2c 20 7a 54 72 61 6e 73 2c 20 6e 54 72 61 6e 73  , zTrans, nTrans
3920: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
3930: 5f 66 72 65 65 28 7a 54 72 61 6e 73 29 3b 0a 20  _free(zTrans);. 
3940: 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20     }.  }.#endif 
3950: 2f 2a 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33  /* defined(_WIN3
3960: 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 57 49  2) || defined(WI
3970: 4e 33 32 29 20 2a 2f 0a 20 20 72 65 74 75 72 6e  N32) */.  return
3980: 20 7a 4c 69 6e 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a   zLine;.}../*.**
3990: 20 52 65 74 72 69 65 76 65 20 61 20 73 69 6e 67   Retrieve a sing
39a0: 6c 65 20 6c 69 6e 65 20 6f 66 20 69 6e 70 75 74  le line of input
39b0: 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   text..**.** If 
39c0: 69 6e 3d 3d 30 20 74 68 65 6e 20 72 65 61 64 20  in==0 then read 
39d0: 66 72 6f 6d 20 73 74 61 6e 64 61 72 64 20 69 6e  from standard in
39e0: 70 75 74 20 61 6e 64 20 70 72 6f 6d 70 74 20 62  put and prompt b
39f0: 65 66 6f 72 65 20 65 61 63 68 20 6c 69 6e 65 2e  efore each line.
3a00: 0a 2a 2a 20 49 66 20 69 73 43 6f 6e 74 69 6e 75  .** If isContinu
3a10: 61 74 69 6f 6e 20 69 73 20 74 72 75 65 2c 20 74  ation is true, t
3a20: 68 65 6e 20 61 20 63 6f 6e 74 69 6e 75 61 74 69  hen a continuati
3a30: 6f 6e 20 70 72 6f 6d 70 74 20 69 73 20 61 70 70  on prompt is app
3a40: 72 6f 70 72 69 61 74 65 2e 0a 2a 2a 20 49 66 20  ropriate..** If 
3a50: 69 73 43 6f 6e 74 69 6e 75 61 74 69 6f 6e 20 69  isContinuation i
3a60: 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  s zero, then the
3a70: 20 6d 61 69 6e 20 70 72 6f 6d 70 74 20 73 68 6f   main prompt sho
3a80: 75 6c 64 20 62 65 20 75 73 65 64 2e 0a 2a 2a 0a  uld be used..**.
3a90: 2a 2a 20 49 66 20 7a 50 72 69 6f 72 20 69 73 20  ** If zPrior is 
3aa0: 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74  not NULL then it
3ab0: 20 69 73 20 61 20 62 75 66 66 65 72 20 66 72 6f   is a buffer fro
3ac0: 6d 20 61 20 70 72 69 6f 72 20 63 61 6c 6c 20 74  m a prior call t
3ad0: 6f 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e  o this.** routin
3ae0: 65 20 74 68 61 74 20 63 61 6e 20 62 65 20 72 65  e that can be re
3af0: 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  used..**.** The 
3b00: 72 65 73 75 6c 74 20 69 73 20 73 74 6f 72 65 64  result is stored
3b10: 20 69 6e 20 73 70 61 63 65 20 6f 62 74 61 69 6e   in space obtain
3b20: 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ed from malloc()
3b30: 20 61 6e 64 20 6d 75 73 74 20 65 69 74 68 65 72   and must either
3b40: 0a 2a 2a 20 62 65 20 66 72 65 65 64 20 62 79 20  .** be freed by 
3b50: 74 68 65 20 63 61 6c 6c 65 72 20 6f 72 20 65 6c  the caller or el
3b60: 73 65 20 70 61 73 73 65 64 20 62 61 63 6b 20 69  se passed back i
3b70: 6e 74 6f 20 74 68 69 73 20 72 6f 75 74 69 6e 65  nto this routine
3b80: 20 76 69 61 20 74 68 65 0a 2a 2a 20 7a 50 72 69   via the.** zPri
3b90: 6f 72 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20  or argument for 
3ba0: 72 65 75 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  reuse..*/.static
3bb0: 20 63 68 61 72 20 2a 6f 6e 65 5f 69 6e 70 75 74   char *one_input
3bc0: 5f 6c 69 6e 65 28 46 49 4c 45 20 2a 69 6e 2c 20  _line(FILE *in, 
3bd0: 63 68 61 72 20 2a 7a 50 72 69 6f 72 2c 20 69 6e  char *zPrior, in
3be0: 74 20 69 73 43 6f 6e 74 69 6e 75 61 74 69 6f 6e  t isContinuation
3bf0: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 50 72 6f 6d  ){.  char *zProm
3c00: 70 74 3b 0a 20 20 63 68 61 72 20 2a 7a 52 65 73  pt;.  char *zRes
3c10: 75 6c 74 3b 0a 20 20 69 66 28 20 69 6e 21 3d 30  ult;.  if( in!=0
3c20: 20 29 7b 0a 20 20 20 20 7a 52 65 73 75 6c 74 20   ){.    zResult 
3c30: 3d 20 6c 6f 63 61 6c 5f 67 65 74 6c 69 6e 65 28  = local_getline(
3c40: 7a 50 72 69 6f 72 2c 20 69 6e 29 3b 0a 20 20 7d  zPrior, in);.  }
3c50: 65 6c 73 65 7b 0a 20 20 20 20 7a 50 72 6f 6d 70  else{.    zPromp
3c60: 74 20 3d 20 69 73 43 6f 6e 74 69 6e 75 61 74 69  t = isContinuati
3c70: 6f 6e 20 3f 20 63 6f 6e 74 69 6e 75 65 50 72 6f  on ? continuePro
3c80: 6d 70 74 20 3a 20 6d 61 69 6e 50 72 6f 6d 70 74  mpt : mainPrompt
3c90: 3b 0a 23 69 66 20 53 48 45 4c 4c 5f 55 53 45 5f  ;.#if SHELL_USE_
3ca0: 4c 4f 43 41 4c 5f 47 45 54 4c 49 4e 45 0a 20 20  LOCAL_GETLINE.  
3cb0: 20 20 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a    printf("%s", z
3cc0: 50 72 6f 6d 70 74 29 3b 0a 20 20 20 20 66 66 6c  Prompt);.    ffl
3cd0: 75 73 68 28 73 74 64 6f 75 74 29 3b 0a 20 20 20  ush(stdout);.   
3ce0: 20 7a 52 65 73 75 6c 74 20 3d 20 6c 6f 63 61 6c   zResult = local
3cf0: 5f 67 65 74 6c 69 6e 65 28 7a 50 72 69 6f 72 2c  _getline(zPrior,
3d00: 20 73 74 64 69 6e 29 3b 0a 23 65 6c 73 65 0a 20   stdin);.#else. 
3d10: 20 20 20 66 72 65 65 28 7a 50 72 69 6f 72 29 3b     free(zPrior);
3d20: 0a 20 20 20 20 7a 52 65 73 75 6c 74 20 3d 20 73  .    zResult = s
3d30: 68 65 6c 6c 5f 72 65 61 64 6c 69 6e 65 28 7a 50  hell_readline(zP
3d40: 72 6f 6d 70 74 29 3b 0a 20 20 20 20 69 66 28 20  rompt);.    if( 
3d50: 7a 52 65 73 75 6c 74 20 26 26 20 2a 7a 52 65 73  zResult && *zRes
3d60: 75 6c 74 20 29 20 73 68 65 6c 6c 5f 61 64 64 5f  ult ) shell_add_
3d70: 68 69 73 74 6f 72 79 28 7a 52 65 73 75 6c 74 29  history(zResult)
3d80: 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 72  ;.#endif.  }.  r
3d90: 65 74 75 72 6e 20 7a 52 65 73 75 6c 74 3b 0a 7d  eturn zResult;.}
3da0: 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
3db0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53  LITE_ENABLE_SESS
3dc0: 49 4f 4e 29 0a 2f 2a 0a 2a 2a 20 53 74 61 74 65  ION)./*.** State
3dd0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72   information for
3de0: 20 61 20 73 69 6e 67 6c 65 20 6f 70 65 6e 20 73   a single open s
3df0: 65 73 73 69 6f 6e 0a 2a 2f 0a 74 79 70 65 64 65  ession.*/.typede
3e00: 66 20 73 74 72 75 63 74 20 4f 70 65 6e 53 65 73  f struct OpenSes
3e10: 73 69 6f 6e 20 4f 70 65 6e 53 65 73 73 69 6f 6e  sion OpenSession
3e20: 3b 0a 73 74 72 75 63 74 20 4f 70 65 6e 53 65 73  ;.struct OpenSes
3e30: 73 69 6f 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a  sion {.  char *z
3e40: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
3e50: 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61    /* Symbolic na
3e60: 6d 65 20 66 6f 72 20 74 68 69 73 20 73 65 73 73  me for this sess
3e70: 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  ion */.  int nFi
3e80: 6c 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  lter;           
3e90: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 78    /* Number of x
3ea0: 46 69 6c 74 65 72 20 72 65 6a 65 63 74 69 6f 6e  Filter rejection
3eb0: 20 47 4c 4f 42 20 70 61 74 74 65 72 6e 73 20 2a   GLOB patterns *
3ec0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 46 69 6c  /.  char **azFil
3ed0: 74 65 72 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ter;         /* 
3ee0: 41 72 72 61 79 20 6f 66 20 78 46 69 6c 74 65 72  Array of xFilter
3ef0: 20 72 65 6a 65 63 74 69 6f 6e 20 47 4c 4f 42 20   rejection GLOB 
3f00: 70 61 74 74 65 72 6e 73 20 2a 2f 0a 20 20 73 71  patterns */.  sq
3f10: 6c 69 74 65 33 5f 73 65 73 73 69 6f 6e 20 2a 70  lite3_session *p
3f20: 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 70  ;      /* The op
3f30: 65 6e 20 73 65 73 73 69 6f 6e 20 2a 2f 0a 7d 3b  en session */.};
3f40: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53  .#endif../*.** S
3f50: 68 65 6c 6c 20 6f 75 74 70 75 74 20 6d 6f 64 65  hell output mode
3f60: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
3f70: 6d 20 62 65 66 6f 72 65 20 22 2e 65 78 70 6c 61  m before ".expla
3f80: 69 6e 20 6f 6e 22 2c 0a 2a 2a 20 73 61 76 65 64  in on",.** saved
3f90: 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
3fa0: 62 65 20 72 65 73 74 6f 72 65 64 20 62 79 20 22  be restored by "
3fb0: 2e 65 78 70 6c 61 69 6e 20 6f 66 66 22 0a 2a 2f  .explain off".*/
3fc0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
3fd0: 53 61 76 65 64 4d 6f 64 65 49 6e 66 6f 20 53 61  SavedModeInfo Sa
3fe0: 76 65 64 4d 6f 64 65 49 6e 66 6f 3b 0a 73 74 72  vedModeInfo;.str
3ff0: 75 63 74 20 53 61 76 65 64 4d 6f 64 65 49 6e 66  uct SavedModeInf
4000: 6f 20 7b 0a 20 20 69 6e 74 20 76 61 6c 69 64 3b  o {.  int valid;
4010: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 73 20            /* Is 
4020: 74 68 65 72 65 20 6c 65 67 69 74 20 64 61 74 61  there legit data
4030: 20 69 6e 20 68 65 72 65 3f 20 2a 2f 0a 20 20 69   in here? */.  i
4040: 6e 74 20 6d 6f 64 65 3b 20 20 20 20 20 20 20 20  nt mode;        
4050: 20 20 20 2f 2a 20 4d 6f 64 65 20 70 72 69 6f 72     /* Mode prior
4060: 20 74 6f 20 22 2e 65 78 70 6c 61 69 6e 20 6f 6e   to ".explain on
4070: 22 20 2a 2f 0a 20 20 69 6e 74 20 73 68 6f 77 48  " */.  int showH
4080: 65 61 64 65 72 3b 20 20 20 20 20 2f 2a 20 54 68  eader;     /* Th
4090: 65 20 22 2e 68 65 61 64 65 72 22 20 73 65 74 74  e ".header" sett
40a0: 69 6e 67 20 70 72 69 6f 72 20 74 6f 20 22 2e 65  ing prior to ".e
40b0: 78 70 6c 61 69 6e 20 6f 6e 22 20 2a 2f 0a 20 20  xplain on" */.  
40c0: 69 6e 74 20 63 6f 6c 57 69 64 74 68 5b 31 30 30  int colWidth[100
40d0: 5d 3b 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 77 69  ];  /* Column wi
40e0: 64 74 68 73 20 70 72 69 6f 72 20 74 6f 20 22 2e  dths prior to ".
40f0: 65 78 70 6c 61 69 6e 20 6f 6e 22 20 2a 2f 0a 7d  explain on" */.}
4100: 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 61 74 65 20 69  ;../*.** State i
4110: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
4120: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
4130: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6f 6e 74  nnection is cont
4140: 61 69 6e 65 64 20 69 6e 20 61 6e 0a 2a 2a 20 69  ained in an.** i
4150: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
4160: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
4170: 72 65 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  re..*/.typedef s
4180: 74 72 75 63 74 20 53 68 65 6c 6c 53 74 61 74 65  truct ShellState
4190: 20 53 68 65 6c 6c 53 74 61 74 65 3b 0a 73 74 72   ShellState;.str
41a0: 75 63 74 20 53 68 65 6c 6c 53 74 61 74 65 20 7b  uct ShellState {
41b0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
41c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
41d0: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 69   database */.  i
41e0: 6e 74 20 65 63 68 6f 4f 6e 3b 20 20 20 20 20 20  nt echoOn;      
41f0: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
4200: 20 65 63 68 6f 20 69 6e 70 75 74 20 63 6f 6d 6d   echo input comm
4210: 61 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 61 75  ands */.  int au
4220: 74 6f 45 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  toExplain;      
4230: 20 2f 2a 20 41 75 74 6f 6d 61 74 69 63 61 6c 6c   /* Automaticall
4240: 79 20 74 75 72 6e 20 6f 6e 20 2e 65 78 70 6c 61  y turn on .expla
4250: 69 6e 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74  in mode */.  int
4260: 20 61 75 74 6f 45 51 50 3b 20 20 20 20 20 20 20   autoEQP;       
4270: 20 20 20 20 2f 2a 20 52 75 6e 20 45 58 50 4c 41      /* Run EXPLA
4280: 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 70 72  IN QUERY PLAN pr
4290: 69 6f 72 20 74 6f 20 73 65 61 63 68 20 53 51 4c  ior to seach SQL
42a0: 20 73 74 6d 74 20 2a 2f 0a 20 20 69 6e 74 20 73   stmt */.  int s
42b0: 74 61 74 73 4f 6e 3b 20 20 20 20 20 20 20 20 20  tatsOn;         
42c0: 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73    /* True to dis
42d0: 70 6c 61 79 20 6d 65 6d 6f 72 79 20 73 74 61 74  play memory stat
42e0: 73 20 62 65 66 6f 72 65 20 65 61 63 68 20 66 69  s before each fi
42f0: 6e 61 6c 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20  nalize */.  int 
4300: 73 63 61 6e 73 74 61 74 73 4f 6e 3b 20 20 20 20  scanstatsOn;    
4310: 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69     /* True to di
4320: 73 70 6c 61 79 20 73 63 61 6e 20 73 74 61 74 73  splay scan stats
4330: 20 62 65 66 6f 72 65 20 65 61 63 68 20 66 69 6e   before each fin
4340: 61 6c 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 63  alize */.  int c
4350: 6f 75 6e 74 43 68 61 6e 67 65 73 3b 20 20 20 20  ountChanges;    
4360: 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73    /* True to dis
4370: 70 6c 61 79 20 63 68 61 6e 67 65 20 63 6f 75 6e  play change coun
4380: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 61 63 6b  ts */.  int back
4390: 73 6c 61 73 68 4f 6e 3b 20 20 20 20 20 20 20 2f  slashOn;       /
43a0: 2a 20 52 65 73 6f 6c 76 65 20 43 2d 73 74 79 6c  * Resolve C-styl
43b0: 65 20 5c 78 20 65 73 63 61 70 65 73 20 69 6e 20  e \x escapes in 
43c0: 53 51 4c 20 69 6e 70 75 74 20 74 65 78 74 20 2a  SQL input text *
43d0: 2f 0a 20 20 69 6e 74 20 6f 75 74 43 6f 75 6e 74  /.  int outCount
43e0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
43f0: 76 65 72 74 20 74 6f 20 73 74 64 6f 75 74 20 77  vert to stdout w
4400: 68 65 6e 20 72 65 61 63 68 69 6e 67 20 7a 65 72  hen reaching zer
4410: 6f 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20  o */.  int cnt; 
4420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4430: 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 63 6f 72   Number of recor
4440: 64 73 20 64 69 73 70 6c 61 79 65 64 20 73 6f 20  ds displayed so 
4450: 66 61 72 20 2a 2f 0a 20 20 46 49 4c 45 20 2a 6f  far */.  FILE *o
4460: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
4470: 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74 73  /* Write results
4480: 20 68 65 72 65 20 2a 2f 0a 20 20 46 49 4c 45 20   here */.  FILE 
4490: 2a 74 72 61 63 65 4f 75 74 3b 20 20 20 20 20 20  *traceOut;      
44a0: 20 20 2f 2a 20 4f 75 74 70 75 74 20 66 6f 72 20    /* Output for 
44b0: 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 20  sqlite3_trace() 
44c0: 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
44e0: 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
44f0: 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6d 6f  seen */.  int mo
4500: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
4510: 20 2f 2a 20 41 6e 20 6f 75 74 70 75 74 20 6d 6f   /* An output mo
4520: 64 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20  de setting */.  
4530: 69 6e 74 20 63 4d 6f 64 65 3b 20 20 20 20 20 20  int cMode;      
4540: 20 20 20 20 20 20 20 2f 2a 20 74 65 6d 70 6f 72         /* tempor
4550: 61 72 79 20 6f 75 74 70 75 74 20 6d 6f 64 65 20  ary output mode 
4560: 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
4570: 71 75 65 72 79 20 2a 2f 0a 20 20 69 6e 74 20 6e  query */.  int n
4580: 6f 72 6d 61 6c 4d 6f 64 65 3b 20 20 20 20 20 20  ormalMode;      
4590: 20 20 2f 2a 20 4f 75 74 70 75 74 20 6d 6f 64 65    /* Output mode
45a0: 20 62 65 66 6f 72 65 20 22 2e 65 78 70 6c 61 69   before ".explai
45b0: 6e 20 6f 6e 22 20 2a 2f 0a 20 20 69 6e 74 20 77  n on" */.  int w
45c0: 72 69 74 61 62 6c 65 53 63 68 65 6d 61 3b 20 20  ritableSchema;  
45d0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 50 52 41    /* True if PRA
45e0: 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68  GMA writable_sch
45f0: 65 6d 61 3d 4f 4e 20 2a 2f 0a 20 20 69 6e 74 20  ema=ON */.  int 
4600: 73 68 6f 77 48 65 61 64 65 72 3b 20 20 20 20 20  showHeader;     
4610: 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 73 68     /* True to sh
4620: 6f 77 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ow column names 
4630: 69 6e 20 4c 69 73 74 20 6f 72 20 43 6f 6c 75 6d  in List or Colum
4640: 6e 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  n mode */.  int 
4650: 6e 43 68 65 63 6b 3b 20 20 20 20 20 20 20 20 20  nCheck;         
4660: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
4670: 22 2e 63 68 65 63 6b 22 20 63 6f 6d 6d 61 6e 64  ".check" command
4680: 73 20 72 75 6e 20 2a 2f 0a 20 20 75 6e 73 69 67  s run */.  unsig
4690: 6e 65 64 20 73 68 65 6c 6c 46 6c 67 73 3b 20 20  ned shellFlgs;  
46a0: 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61    /* Various fla
46b0: 67 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44  gs */.  char *zD
46c0: 65 73 74 54 61 62 6c 65 3b 20 20 20 20 20 20 2f  estTable;      /
46d0: 2a 20 4e 61 6d 65 20 6f 66 20 64 65 73 74 69 6e  * Name of destin
46e0: 61 74 69 6f 6e 20 74 61 62 6c 65 20 77 68 65 6e  ation table when
46f0: 20 4d 4f 44 45 5f 49 6e 73 65 72 74 20 2a 2f 0a   MODE_Insert */.
4700: 20 20 63 68 61 72 20 7a 54 65 73 74 63 61 73 65    char zTestcase
4710: 5b 33 30 5d 3b 20 20 20 20 2f 2a 20 4e 61 6d 65  [30];    /* Name
4720: 20 6f 66 20 63 75 72 72 65 6e 74 20 74 65 73 74   of current test
4730: 20 63 61 73 65 20 2a 2f 0a 20 20 63 68 61 72 20   case */.  char 
4740: 63 6f 6c 53 65 70 61 72 61 74 6f 72 5b 32 30 5d  colSeparator[20]
4750: 3b 20 2f 2a 20 43 6f 6c 75 6d 6e 20 73 65 70 61  ; /* Column sepa
4760: 72 61 74 6f 72 20 63 68 61 72 61 63 74 65 72 20  rator character 
4770: 66 6f 72 20 73 65 76 65 72 61 6c 20 6d 6f 64 65  for several mode
4780: 73 20 2a 2f 0a 20 20 63 68 61 72 20 72 6f 77 53  s */.  char rowS
4790: 65 70 61 72 61 74 6f 72 5b 32 30 5d 3b 20 2f 2a  eparator[20]; /*
47a0: 20 52 6f 77 20 73 65 70 61 72 61 74 6f 72 20 63   Row separator c
47b0: 68 61 72 61 63 74 65 72 20 66 6f 72 20 4d 4f 44  haracter for MOD
47c0: 45 5f 41 73 63 69 69 20 2a 2f 0a 20 20 69 6e 74  E_Ascii */.  int
47d0: 20 63 6f 6c 57 69 64 74 68 5b 31 30 30 5d 3b 20   colWidth[100]; 
47e0: 20 20 20 20 2f 2a 20 52 65 71 75 65 73 74 65 64      /* Requested
47f0: 20 77 69 64 74 68 20 6f 66 20 65 61 63 68 20 63   width of each c
4800: 6f 6c 75 6d 6e 20 77 68 65 6e 20 69 6e 20 63 6f  olumn when in co
4810: 6c 75 6d 6e 20 6d 6f 64 65 2a 2f 0a 20 20 69 6e  lumn mode*/.  in
4820: 74 20 61 63 74 75 61 6c 57 69 64 74 68 5b 31 30  t actualWidth[10
4830: 30 5d 3b 20 20 2f 2a 20 41 63 74 75 61 6c 20 77  0];  /* Actual w
4840: 69 64 74 68 20 6f 66 20 65 61 63 68 20 63 6f 6c  idth of each col
4850: 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 6e 75  umn */.  char nu
4860: 6c 6c 56 61 6c 75 65 5b 32 30 5d 3b 20 20 20 20  llValue[20];    
4870: 2f 2a 20 54 68 65 20 74 65 78 74 20 74 6f 20 70  /* The text to p
4880: 72 69 6e 74 20 77 68 65 6e 20 61 20 4e 55 4c 4c  rint when a NULL
4890: 20 63 6f 6d 65 73 20 62 61 63 6b 20 66 72 6f 6d   comes back from
48a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
48b0: 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65            ** the
48c0: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63   database */.  c
48d0: 68 61 72 20 6f 75 74 66 69 6c 65 5b 46 49 4c 45  har outfile[FILE
48e0: 4e 41 4d 45 5f 4d 41 58 5d 3b 20 2f 2a 20 46 69  NAME_MAX]; /* Fi
48f0: 6c 65 6e 61 6d 65 20 66 6f 72 20 2a 6f 75 74 20  lename for *out 
4900: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
4910: 2a 7a 44 62 46 69 6c 65 6e 61 6d 65 3b 20 20 20  *zDbFilename;   
4920: 20 2f 2a 20 6e 61 6d 65 20 6f 66 20 74 68 65 20   /* name of the 
4930: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
4940: 0a 20 20 63 68 61 72 20 2a 7a 46 72 65 65 4f 6e  .  char *zFreeOn
4950: 43 6c 6f 73 65 3b 20 20 20 20 20 20 20 20 20 2f  Close;         /
4960: 2a 20 46 69 6c 65 6e 61 6d 65 20 74 6f 20 66 72  * Filename to fr
4970: 65 65 20 77 68 65 6e 20 63 6c 6f 73 69 6e 67 20  ee when closing 
4980: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
4990: 2a 7a 56 66 73 3b 20 20 20 20 20 20 20 20 20 20  *zVfs;          
49a0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 56 46 53 20   /* Name of VFS 
49b0: 74 6f 20 75 73 65 20 2a 2f 0a 20 20 73 71 6c 69  to use */.  sqli
49c0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
49d0: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 73 74     /* Current st
49e0: 61 74 65 6d 65 6e 74 20 69 66 20 61 6e 79 2e 20  atement if any. 
49f0: 2a 2f 0a 20 20 46 49 4c 45 20 2a 70 4c 6f 67 3b  */.  FILE *pLog;
4a00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
4a10: 72 69 74 65 20 6c 6f 67 20 6f 75 74 70 75 74 20  rite log output 
4a20: 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  here */.  int *a
4a30: 69 49 6e 64 65 6e 74 3b 20 20 20 20 20 20 20 20  iIndent;        
4a40: 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 69 6e 64   /* Array of ind
4a50: 65 6e 74 73 20 75 73 65 64 20 69 6e 20 4d 4f 44  ents used in MOD
4a60: 45 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 69  E_Explain */.  i
4a70: 6e 74 20 6e 49 6e 64 65 6e 74 3b 20 20 20 20 20  nt nIndent;     
4a80: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
4a90: 20 61 72 72 61 79 20 61 69 49 6e 64 65 6e 74 5b   array aiIndent[
4aa0: 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 49 6e 64 65  ] */.  int iInde
4ab0: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
4ac0: 20 49 6e 64 65 78 20 6f 66 20 63 75 72 72 65 6e   Index of curren
4ad0: 74 20 6f 70 20 69 6e 20 61 69 49 6e 64 65 6e 74  t op in aiIndent
4ae0: 5b 5d 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  [] */.#if define
4af0: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
4b00: 53 45 53 53 49 4f 4e 29 0a 20 20 69 6e 74 20 6e  SESSION).  int n
4b10: 53 65 73 73 69 6f 6e 3b 20 20 20 20 20 20 20 20  Session;        
4b20: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4b30: 66 20 61 63 74 69 76 65 20 73 65 73 73 69 6f 6e  f active session
4b40: 73 20 2a 2f 0a 20 20 4f 70 65 6e 53 65 73 73 69  s */.  OpenSessi
4b50: 6f 6e 20 61 53 65 73 73 69 6f 6e 5b 34 5d 3b 20  on aSession[4]; 
4b60: 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 65 73   /* Array of ses
4b70: 73 69 6f 6e 73 2e 20 20 5b 30 5d 20 69 73 20 69  sions.  [0] is i
4b80: 6e 20 66 6f 63 75 73 2e 20 2a 2f 0a 23 65 6e 64  n focus. */.#end
4b90: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  if.};../*.** The
4ba0: 73 65 20 61 72 65 20 74 68 65 20 61 6c 6c 6f 77  se are the allow
4bb0: 65 64 20 73 68 65 6c 6c 46 6c 67 73 20 76 61 6c  ed shellFlgs val
4bc0: 75 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ues.*/.#define S
4bd0: 48 46 4c 47 5f 53 63 72 61 74 63 68 20 20 20 20  HFLG_Scratch    
4be0: 20 30 78 30 30 30 30 31 20 20 20 20 20 2f 2a 20   0x00001     /* 
4bf0: 54 68 65 20 2d 2d 73 63 72 61 74 63 68 20 6f 70  The --scratch op
4c00: 74 69 6f 6e 20 69 73 20 75 73 65 64 20 2a 2f 0a  tion is used */.
4c10: 23 64 65 66 69 6e 65 20 53 48 46 4c 47 5f 50 61  #define SHFLG_Pa
4c20: 67 65 63 61 63 68 65 20 20 20 30 78 30 30 30 30  gecache   0x0000
4c30: 32 20 20 20 20 20 2f 2a 20 54 68 65 20 2d 2d 70  2     /* The --p
4c40: 61 67 65 63 61 63 68 65 20 6f 70 74 69 6f 6e 20  agecache option 
4c50: 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  is used */.#defi
4c60: 6e 65 20 53 48 46 4c 47 5f 4c 6f 6f 6b 61 73 69  ne SHFLG_Lookasi
4c70: 64 65 20 20 20 30 78 30 30 30 30 34 20 20 20 20  de   0x00004    
4c80: 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 65   /* Lookaside me
4c90: 6d 6f 72 79 20 69 73 20 75 73 65 64 20 2a 2f 0a  mory is used */.
4ca0: 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 61 72 65  ./*.** These are
4cb0: 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 6d 6f 64   the allowed mod
4cc0: 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  es..*/.#define M
4cd0: 4f 44 45 5f 4c 69 6e 65 20 20 20 20 20 30 20 20  ODE_Line     0  
4ce0: 2f 2a 20 4f 6e 65 20 63 6f 6c 75 6d 6e 20 70 65  /* One column pe
4cf0: 72 20 6c 69 6e 65 2e 20 20 42 6c 61 6e 6b 20 6c  r line.  Blank l
4d00: 69 6e 65 20 62 65 74 77 65 65 6e 20 72 65 63 6f  ine between reco
4d10: 72 64 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  rds */.#define M
4d20: 4f 44 45 5f 43 6f 6c 75 6d 6e 20 20 20 31 20 20  ODE_Column   1  
4d30: 2f 2a 20 4f 6e 65 20 72 65 63 6f 72 64 20 70 65  /* One record pe
4d40: 72 20 6c 69 6e 65 20 69 6e 20 6e 65 61 74 20 63  r line in neat c
4d50: 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  olumns */.#defin
4d60: 65 20 4d 4f 44 45 5f 4c 69 73 74 20 20 20 20 20  e MODE_List     
4d70: 32 20 20 2f 2a 20 4f 6e 65 20 72 65 63 6f 72 64  2  /* One record
4d80: 20 70 65 72 20 6c 69 6e 65 20 77 69 74 68 20 61   per line with a
4d90: 20 73 65 70 61 72 61 74 6f 72 20 2a 2f 0a 23 64   separator */.#d
4da0: 65 66 69 6e 65 20 4d 4f 44 45 5f 53 65 6d 69 20  efine MODE_Semi 
4db0: 20 20 20 20 33 20 20 2f 2a 20 53 61 6d 65 20 61      3  /* Same a
4dc0: 73 20 4d 4f 44 45 5f 4c 69 73 74 20 62 75 74 20  s MODE_List but 
4dd0: 61 70 70 65 6e 64 20 22 3b 22 20 74 6f 20 65 61  append ";" to ea
4de0: 63 68 20 6c 69 6e 65 20 2a 2f 0a 23 64 65 66 69  ch line */.#defi
4df0: 6e 65 20 4d 4f 44 45 5f 48 74 6d 6c 20 20 20 20  ne MODE_Html    
4e00: 20 34 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20   4  /* Generate 
4e10: 61 6e 20 58 48 54 4d 4c 20 74 61 62 6c 65 20 2a  an XHTML table *
4e20: 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 49  /.#define MODE_I
4e30: 6e 73 65 72 74 20 20 20 35 20 20 2f 2a 20 47 65  nsert   5  /* Ge
4e40: 6e 65 72 61 74 65 20 53 51 4c 20 22 69 6e 73 65  nerate SQL "inse
4e50: 72 74 22 20 73 74 61 74 65 6d 65 6e 74 73 20 2a  rt" statements *
4e60: 2f 0a 23 64 65 66 69 6e 65 20 4d 4f 44 45 5f 51  /.#define MODE_Q
4e70: 75 6f 74 65 20 20 20 20 36 20 20 2f 2a 20 51 75  uote    6  /* Qu
4e80: 6f 74 65 20 76 61 6c 75 65 73 20 61 73 20 66 6f  ote values as fo
4e90: 72 20 53 51 4c 20 2a 2f 0a 23 64 65 66 69 6e 65  r SQL */.#define
4ea0: 20 4d 4f 44 45 5f 54 63 6c 20 20 20 20 20 20 37   MODE_Tcl      7
4eb0: 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 41 4e    /* Generate AN
4ec0: 53 49 2d 43 20 6f 72 20 54 43 4c 20 71 75 6f 74  SI-C or TCL quot
4ed0: 65 64 20 65 6c 65 6d 65 6e 74 73 20 2a 2f 0a 23  ed elements */.#
4ee0: 64 65 66 69 6e 65 20 4d 4f 44 45 5f 43 73 76 20  define MODE_Csv 
4ef0: 20 20 20 20 20 38 20 20 2f 2a 20 51 75 6f 74 65       8  /* Quote
4f00: 20 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62 65 72   strings, number
4f10: 73 20 61 72 65 20 70 6c 61 69 6e 20 2a 2f 0a 23  s are plain */.#
4f20: 64 65 66 69 6e 65 20 4d 4f 44 45 5f 45 78 70 6c  define MODE_Expl
4f30: 61 69 6e 20 20 39 20 20 2f 2a 20 4c 69 6b 65 20  ain  9  /* Like 
4f40: 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 2c 20 62 75 74  MODE_Column, but
4f50: 20 64 6f 20 6e 6f 74 20 74 72 75 6e 63 61 74 65   do not truncate
4f60: 20 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65   data */.#define
4f70: 20 4d 4f 44 45 5f 41 73 63 69 69 20 20 20 31 30   MODE_Ascii   10
4f80: 20 20 2f 2a 20 55 73 65 20 41 53 43 49 49 20 75    /* Use ASCII u
4f90: 6e 69 74 20 61 6e 64 20 72 65 63 6f 72 64 20 73  nit and record s
4fa0: 65 70 61 72 61 74 6f 72 73 20 28 30 78 31 46 2f  eparators (0x1F/
4fb0: 30 78 31 45 29 20 2a 2f 0a 23 64 65 66 69 6e 65  0x1E) */.#define
4fc0: 20 4d 4f 44 45 5f 50 72 65 74 74 79 20 20 31 31   MODE_Pretty  11
4fd0: 20 20 2f 2a 20 50 72 65 74 74 79 2d 70 72 69 6e    /* Pretty-prin
4fe0: 74 20 73 63 68 65 6d 61 73 20 2a 2f 0a 0a 73 74  t schemas */..st
4ff0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
5000: 2a 6d 6f 64 65 44 65 73 63 72 5b 5d 20 3d 20 7b  *modeDescr[] = {
5010: 0a 20 20 22 6c 69 6e 65 22 2c 0a 20 20 22 63 6f  .  "line",.  "co
5020: 6c 75 6d 6e 22 2c 0a 20 20 22 6c 69 73 74 22 2c  lumn",.  "list",
5030: 0a 20 20 22 73 65 6d 69 22 2c 0a 20 20 22 68 74  .  "semi",.  "ht
5040: 6d 6c 22 2c 0a 20 20 22 69 6e 73 65 72 74 22 2c  ml",.  "insert",
5050: 0a 20 20 22 71 75 6f 74 65 22 2c 0a 20 20 22 74  .  "quote",.  "t
5060: 63 6c 22 2c 0a 20 20 22 63 73 76 22 2c 0a 20 20  cl",.  "csv",.  
5070: 22 65 78 70 6c 61 69 6e 22 2c 0a 20 20 22 61 73  "explain",.  "as
5080: 63 69 69 22 2c 0a 20 20 22 70 72 65 74 74 79 70  cii",.  "prettyp
5090: 72 69 6e 74 22 2c 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  rint",.};../*.**
50a0: 20 54 68 65 73 65 20 61 72 65 20 74 68 65 20 63   These are the c
50b0: 6f 6c 75 6d 6e 2f 72 6f 77 2f 6c 69 6e 65 20 73  olumn/row/line s
50c0: 65 70 61 72 61 74 6f 72 73 20 75 73 65 64 20 62  eparators used b
50d0: 79 20 74 68 65 20 76 61 72 69 6f 75 73 0a 2a 2a  y the various.**
50e0: 20 69 6d 70 6f 72 74 2f 65 78 70 6f 72 74 20 6d   import/export m
50f0: 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  odes..*/.#define
5100: 20 53 45 50 5f 43 6f 6c 75 6d 6e 20 20 20 20 22   SEP_Column    "
5110: 7c 22 0a 23 64 65 66 69 6e 65 20 53 45 50 5f 52  |".#define SEP_R
5120: 6f 77 20 20 20 20 20 20 20 22 5c 6e 22 0a 23 64  ow       "\n".#d
5130: 65 66 69 6e 65 20 53 45 50 5f 54 61 62 20 20 20  efine SEP_Tab   
5140: 20 20 20 20 22 5c 74 22 0a 23 64 65 66 69 6e 65      "\t".#define
5150: 20 53 45 50 5f 53 70 61 63 65 20 20 20 20 20 22   SEP_Space     "
5160: 20 22 0a 23 64 65 66 69 6e 65 20 53 45 50 5f 43   ".#define SEP_C
5170: 6f 6d 6d 61 20 20 20 20 20 22 2c 22 0a 23 64 65  omma     ",".#de
5180: 66 69 6e 65 20 53 45 50 5f 43 72 4c 66 20 20 20  fine SEP_CrLf   
5190: 20 20 20 22 5c 72 5c 6e 22 0a 23 64 65 66 69 6e     "\r\n".#defin
51a0: 65 20 53 45 50 5f 55 6e 69 74 20 20 20 20 20 20  e SEP_Unit      
51b0: 22 5c 78 31 46 22 0a 23 64 65 66 69 6e 65 20 53  "\x1F".#define S
51c0: 45 50 5f 52 65 63 6f 72 64 20 20 20 20 22 5c 78  EP_Record    "\x
51d0: 31 45 22 0a 0a 2f 2a 0a 2a 2a 20 4e 75 6d 62 65  1E"../*.** Numbe
51e0: 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
51f0: 20 61 6e 20 61 72 72 61 79 0a 2a 2f 0a 23 64 65   an array.*/.#de
5200: 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58  fine ArraySize(X
5210: 29 20 20 28 69 6e 74 29 28 73 69 7a 65 6f 66 28  )  (int)(sizeof(
5220: 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29  X)/sizeof(X[0]))
5230: 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 61 6c 6c 62 61  ../*.** A callba
5240: 63 6b 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  ck for the sqlit
5250: 65 33 5f 6c 6f 67 28 29 20 69 6e 74 65 72 66 61  e3_log() interfa
5260: 63 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ce..*/.static vo
5270: 69 64 20 73 68 65 6c 6c 4c 6f 67 28 76 6f 69 64  id shellLog(void
5280: 20 2a 70 41 72 67 2c 20 69 6e 74 20 69 45 72 72   *pArg, int iErr
5290: 43 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  Code, const char
52a0: 20 2a 7a 4d 73 67 29 7b 0a 20 20 53 68 65 6c 6c   *zMsg){.  Shell
52b0: 53 74 61 74 65 20 2a 70 20 3d 20 28 53 68 65 6c  State *p = (Shel
52c0: 6c 53 74 61 74 65 2a 29 70 41 72 67 3b 0a 20 20  lState*)pArg;.  
52d0: 69 66 28 20 70 2d 3e 70 4c 6f 67 3d 3d 30 20 29  if( p->pLog==0 )
52e0: 20 72 65 74 75 72 6e 3b 0a 20 20 75 74 66 38 5f   return;.  utf8_
52f0: 70 72 69 6e 74 66 28 70 2d 3e 70 4c 6f 67 2c 20  printf(p->pLog, 
5300: 22 28 25 64 29 20 25 73 5c 6e 22 2c 20 69 45 72  "(%d) %s\n", iEr
5310: 72 43 6f 64 65 2c 20 7a 4d 73 67 29 3b 0a 20 20  rCode, zMsg);.  
5320: 66 66 6c 75 73 68 28 70 2d 3e 70 4c 6f 67 29 3b  fflush(p->pLog);
5330: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74  .}../*.** Output
5340: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
5350: 67 20 61 73 20 61 20 68 65 78 2d 65 6e 63 6f 64  g as a hex-encod
5360: 65 64 20 62 6c 6f 62 20 28 65 67 2e 20 58 27 31  ed blob (eg. X'1
5370: 32 33 34 27 20 29 0a 2a 2f 0a 73 74 61 74 69 63  234' ).*/.static
5380: 20 76 6f 69 64 20 6f 75 74 70 75 74 5f 68 65 78   void output_hex
5390: 5f 62 6c 6f 62 28 46 49 4c 45 20 2a 6f 75 74 2c  _blob(FILE *out,
53a0: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 42 6c   const void *pBl
53b0: 6f 62 2c 20 69 6e 74 20 6e 42 6c 6f 62 29 7b 0a  ob, int nBlob){.
53c0: 20 20 69 6e 74 20 69 3b 0a 20 20 63 68 61 72 20    int i;.  char 
53d0: 2a 7a 42 6c 6f 62 20 3d 20 28 63 68 61 72 20 2a  *zBlob = (char *
53e0: 29 70 42 6c 6f 62 3b 0a 20 20 72 61 77 5f 70 72  )pBlob;.  raw_pr
53f0: 69 6e 74 66 28 6f 75 74 2c 22 58 27 22 29 3b 0a  intf(out,"X'");.
5400: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 42 6c    for(i=0; i<nBl
5410: 6f 62 3b 20 69 2b 2b 29 7b 20 72 61 77 5f 70 72  ob; i++){ raw_pr
5420: 69 6e 74 66 28 6f 75 74 2c 22 25 30 32 78 22 2c  intf(out,"%02x",
5430: 7a 42 6c 6f 62 5b 69 5d 26 30 78 66 66 29 3b 20  zBlob[i]&0xff); 
5440: 7d 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f  }.  raw_printf(o
5450: 75 74 2c 22 27 22 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  ut,"'");.}../*.*
5460: 2a 20 4f 75 74 70 75 74 20 74 68 65 20 67 69 76  * Output the giv
5470: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 71  en string as a q
5480: 75 6f 74 65 64 20 73 74 72 69 6e 67 20 75 73 69  uoted string usi
5490: 6e 67 20 53 51 4c 20 71 75 6f 74 69 6e 67 20 63  ng SQL quoting c
54a0: 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 73  onventions..*/.s
54b0: 74 61 74 69 63 20 76 6f 69 64 20 6f 75 74 70 75  tatic void outpu
54c0: 74 5f 71 75 6f 74 65 64 5f 73 74 72 69 6e 67 28  t_quoted_string(
54d0: 46 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74  FILE *out, const
54e0: 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74   char *z){.  int
54f0: 20 69 3b 0a 20 20 69 6e 74 20 6e 53 69 6e 67 6c   i;.  int nSingl
5500: 65 20 3d 20 30 3b 0a 20 20 73 65 74 42 69 6e 61  e = 0;.  setBina
5510: 72 79 4d 6f 64 65 28 6f 75 74 2c 20 31 29 3b 0a  ryMode(out, 1);.
5520: 20 20 66 6f 72 28 69 3d 30 3b 20 7a 5b 69 5d 3b    for(i=0; z[i];
5530: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 7a   i++){.    if( z
5540: 5b 69 5d 3d 3d 27 5c 27 27 20 29 20 6e 53 69 6e  [i]=='\'' ) nSin
5550: 67 6c 65 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66 28  gle++;.  }.  if(
5560: 20 6e 53 69 6e 67 6c 65 3d 3d 30 20 29 7b 0a 20   nSingle==0 ){. 
5570: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 6f     utf8_printf(o
5580: 75 74 2c 22 27 25 73 27 22 2c 7a 29 3b 0a 20 20  ut,"'%s'",z);.  
5590: 7d 65 6c 73 65 7b 0a 20 20 20 20 72 61 77 5f 70  }else{.    raw_p
55a0: 72 69 6e 74 66 28 6f 75 74 2c 22 27 22 29 3b 0a  rintf(out,"'");.
55b0: 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 20 29 7b      while( *z ){
55c0: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
55d0: 7a 5b 69 5d 20 26 26 20 7a 5b 69 5d 21 3d 27 5c  z[i] && z[i]!='\
55e0: 27 27 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20  ''; i++){}.     
55f0: 20 69 66 28 20 69 3d 3d 30 20 29 7b 0a 20 20 20   if( i==0 ){.   
5600: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
5610: 6f 75 74 2c 22 27 27 22 29 3b 0a 20 20 20 20 20  out,"''");.     
5620: 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 7d 65     z++;.      }e
5630: 6c 73 65 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 5c  lse if( z[i]=='\
5640: 27 27 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74  '' ){.        ut
5650: 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 25  f8_printf(out,"%
5660: 2e 2a 73 27 27 22 2c 69 2c 7a 29 3b 0a 20 20 20  .*s''",i,z);.   
5670: 20 20 20 20 20 7a 20 2b 3d 20 69 2b 31 3b 0a 20       z += i+1;. 
5680: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
5690: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
56a0: 6f 75 74 2c 22 25 73 22 2c 7a 29 3b 0a 20 20 20  out,"%s",z);.   
56b0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
56c0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 61    }.    }.    ra
56d0: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 27 22  w_printf(out,"'"
56e0: 29 3b 0a 20 20 7d 0a 20 20 73 65 74 54 65 78 74  );.  }.  setText
56f0: 4d 6f 64 65 28 6f 75 74 2c 20 31 29 3b 0a 7d 0a  Mode(out, 1);.}.
5700: 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 74 68  ./*.** Output th
5710: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
5720: 73 20 61 20 71 75 6f 74 65 64 20 61 63 63 6f 72  s a quoted accor
5730: 64 69 6e 67 20 74 6f 20 43 20 6f 72 20 54 43 4c  ding to C or TCL
5740: 20 71 75 6f 74 69 6e 67 20 72 75 6c 65 73 2e 0a   quoting rules..
5750: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f  */.static void o
5760: 75 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 46  utput_c_string(F
5770: 49 4c 45 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20  ILE *out, const 
5780: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 75 6e 73 69  char *z){.  unsi
5790: 67 6e 65 64 20 69 6e 74 20 63 3b 0a 20 20 66 70  gned int c;.  fp
57a0: 75 74 63 28 27 22 27 2c 20 6f 75 74 29 3b 0a 20  utc('"', out);. 
57b0: 20 77 68 69 6c 65 28 20 28 63 20 3d 20 2a 28 7a   while( (c = *(z
57c0: 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 69  ++))!=0 ){.    i
57d0: 66 28 20 63 3d 3d 27 5c 5c 27 20 29 7b 0a 20 20  f( c=='\\' ){.  
57e0: 20 20 20 20 66 70 75 74 63 28 63 2c 20 6f 75 74      fputc(c, out
57f0: 29 3b 0a 20 20 20 20 20 20 66 70 75 74 63 28 63  );.      fputc(c
5800: 2c 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73  , out);.    }els
5810: 65 20 69 66 28 20 63 3d 3d 27 22 27 20 29 7b 0a  e if( c=='"' ){.
5820: 20 20 20 20 20 20 66 70 75 74 63 28 27 5c 5c 27        fputc('\\'
5830: 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20 20 66 70  , out);.      fp
5840: 75 74 63 28 27 22 27 2c 20 6f 75 74 29 3b 0a 20  utc('"', out);. 
5850: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
5860: 27 5c 74 27 20 29 7b 0a 20 20 20 20 20 20 66 70  '\t' ){.      fp
5870: 75 74 63 28 27 5c 5c 27 2c 20 6f 75 74 29 3b 0a  utc('\\', out);.
5880: 20 20 20 20 20 20 66 70 75 74 63 28 27 74 27 2c        fputc('t',
5890: 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65   out);.    }else
58a0: 20 69 66 28 20 63 3d 3d 27 5c 6e 27 20 29 7b 0a   if( c=='\n' ){.
58b0: 20 20 20 20 20 20 66 70 75 74 63 28 27 5c 5c 27        fputc('\\'
58c0: 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20 20 66 70  , out);.      fp
58d0: 75 74 63 28 27 6e 27 2c 20 6f 75 74 29 3b 0a 20  utc('n', out);. 
58e0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
58f0: 27 5c 72 27 20 29 7b 0a 20 20 20 20 20 20 66 70  '\r' ){.      fp
5900: 75 74 63 28 27 5c 5c 27 2c 20 6f 75 74 29 3b 0a  utc('\\', out);.
5910: 20 20 20 20 20 20 66 70 75 74 63 28 27 72 27 2c        fputc('r',
5920: 20 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65   out);.    }else
5930: 20 69 66 28 20 21 69 73 70 72 69 6e 74 28 63 26   if( !isprint(c&
5940: 30 78 66 66 29 20 29 7b 0a 20 20 20 20 20 20 72  0xff) ){.      r
5950: 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
5960: 5c 5c 25 30 33 6f 22 2c 20 63 26 30 78 66 66 29  \\%03o", c&0xff)
5970: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
5980: 20 20 20 66 70 75 74 63 28 63 2c 20 6f 75 74 29     fputc(c, out)
5990: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66 70  ;.    }.  }.  fp
59a0: 75 74 63 28 27 22 27 2c 20 6f 75 74 29 3b 0a 7d  utc('"', out);.}
59b0: 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 74  ../*.** Output t
59c0: 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20  he given string 
59d0: 77 69 74 68 20 63 68 61 72 61 63 74 65 72 73 20  with characters 
59e0: 74 68 61 74 20 61 72 65 20 73 70 65 63 69 61 6c  that are special
59f0: 20 74 6f 0a 2a 2a 20 48 54 4d 4c 20 65 73 63 61   to.** HTML esca
5a00: 70 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ped..*/.static v
5a10: 6f 69 64 20 6f 75 74 70 75 74 5f 68 74 6d 6c 5f  oid output_html_
5a20: 73 74 72 69 6e 67 28 46 49 4c 45 20 2a 6f 75 74  string(FILE *out
5a30: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29  , const char *z)
5a40: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28  {.  int i;.  if(
5a50: 20 7a 3d 3d 30 20 29 20 7a 20 3d 20 22 22 3b 0a   z==0 ) z = "";.
5a60: 20 20 77 68 69 6c 65 28 20 2a 7a 20 29 7b 0a 20    while( *z ){. 
5a70: 20 20 20 66 6f 72 28 69 3d 30 3b 20 20 20 7a 5b     for(i=0;   z[
5a80: 69 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 26  i].            &
5a90: 26 20 7a 5b 69 5d 21 3d 27 3c 27 0a 20 20 20 20  & z[i]!='<'.    
5aa0: 20 20 20 20 20 20 20 20 26 26 20 7a 5b 69 5d 21          && z[i]!
5ab0: 3d 27 26 27 0a 20 20 20 20 20 20 20 20 20 20 20  ='&'.           
5ac0: 20 26 26 20 7a 5b 69 5d 21 3d 27 3e 27 0a 20 20   && z[i]!='>'.  
5ad0: 20 20 20 20 20 20 20 20 20 20 26 26 20 7a 5b 69            && z[i
5ae0: 5d 21 3d 27 5c 22 27 0a 20 20 20 20 20 20 20 20  ]!='\"'.        
5af0: 20 20 20 20 26 26 20 7a 5b 69 5d 21 3d 27 5c 27      && z[i]!='\'
5b00: 27 3b 0a 20 20 20 20 20 20 20 20 69 2b 2b 29 7b  ';.        i++){
5b10: 7d 0a 20 20 20 20 69 66 28 20 69 3e 30 20 29 7b  }.    if( i>0 ){
5b20: 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
5b30: 74 66 28 6f 75 74 2c 22 25 2e 2a 73 22 2c 69 2c  tf(out,"%.*s",i,
5b40: 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  z);.    }.    if
5b50: 28 20 7a 5b 69 5d 3d 3d 27 3c 27 20 29 7b 0a 20  ( z[i]=='<' ){. 
5b60: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
5b70: 6f 75 74 2c 22 26 6c 74 3b 22 29 3b 0a 20 20 20  out,"&lt;");.   
5b80: 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b 69 5d 3d   }else if( z[i]=
5b90: 3d 27 26 27 20 29 7b 0a 20 20 20 20 20 20 72 61  ='&' ){.      ra
5ba0: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 26 61  w_printf(out,"&a
5bb0: 6d 70 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65  mp;");.    }else
5bc0: 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 3e 27 20 29   if( z[i]=='>' )
5bd0: 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
5be0: 74 66 28 6f 75 74 2c 22 26 67 74 3b 22 29 3b 0a  tf(out,"&gt;");.
5bf0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b      }else if( z[
5c00: 69 5d 3d 3d 27 5c 22 27 20 29 7b 0a 20 20 20 20  i]=='\"' ){.    
5c10: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 6f 75 74    raw_printf(out
5c20: 2c 22 26 71 75 6f 74 3b 22 29 3b 0a 20 20 20 20  ,"&quot;");.    
5c30: 7d 65 6c 73 65 20 69 66 28 20 7a 5b 69 5d 3d 3d  }else if( z[i]==
5c40: 27 5c 27 27 20 29 7b 0a 20 20 20 20 20 20 72 61  '\'' ){.      ra
5c50: 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 22 26 23  w_printf(out,"&#
5c60: 33 39 3b 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65  39;");.    }else
5c70: 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  {.      break;. 
5c80: 20 20 20 7d 0a 20 20 20 20 7a 20 2b 3d 20 69 20     }.    z += i 
5c90: 2b 20 31 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  + 1;.  }.}../*.*
5ca0: 2a 20 49 66 20 61 20 66 69 65 6c 64 20 63 6f 6e  * If a field con
5cb0: 74 61 69 6e 73 20 61 6e 79 20 63 68 61 72 61 63  tains any charac
5cc0: 74 65 72 20 69 64 65 6e 74 69 66 69 65 64 20 62  ter identified b
5cd0: 79 20 61 20 31 20 69 6e 20 74 68 65 20 66 6f 6c  y a 1 in the fol
5ce0: 6c 6f 77 69 6e 67 0a 2a 2a 20 61 72 72 61 79 2c  lowing.** array,
5cf0: 20 74 68 65 6e 20 74 68 65 20 73 74 72 69 6e 67   then the string
5d00: 20 6d 75 73 74 20 62 65 20 71 75 6f 74 65 64 20   must be quoted 
5d10: 66 6f 72 20 43 53 56 2e 0a 2a 2f 0a 73 74 61 74  for CSV..*/.stat
5d20: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 6e 65  ic const char ne
5d30: 65 64 43 73 76 51 75 6f 74 65 5b 5d 20 3d 20 7b  edCsvQuote[] = {
5d40: 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  .  1, 1, 1, 1, 1
5d50: 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20  , 1, 1, 1,   1, 
5d60: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
5d70: 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20  , 1,.  1, 1, 1, 
5d80: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20  1, 1, 1, 1, 1,  
5d90: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
5da0: 31 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20 30 2c  1, 1, 1,.  1, 0,
5db0: 20 31 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   1, 0, 0, 0, 0, 
5dc0: 31 2c 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c  1,   0, 0, 0, 0,
5dd0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 0a 20 20 30   0, 0, 0, 0,.  0
5de0: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
5df0: 20 30 2c 20 30 2c 20 20 20 30 2c 20 30 2c 20 30   0, 0,   0, 0, 0
5e00: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
5e10: 0a 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  .  0, 0, 0, 0, 0
5e20: 2c 20 30 2c 20 30 2c 20 30 2c 20 20 20 30 2c 20  , 0, 0, 0,   0, 
5e30: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
5e40: 2c 20 30 2c 0a 20 20 30 2c 20 30 2c 20 30 2c 20  , 0,.  0, 0, 0, 
5e50: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 20  0, 0, 0, 0, 0,  
5e60: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
5e70: 30 2c 20 30 2c 20 30 2c 0a 20 20 30 2c 20 30 2c  0, 0, 0,.  0, 0,
5e80: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20   0, 0, 0, 0, 0, 
5e90: 30 2c 20 20 20 30 2c 20 30 2c 20 30 2c 20 30 2c  0,   0, 0, 0, 0,
5ea0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 0a 20 20 30   0, 0, 0, 0,.  0
5eb0: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
5ec0: 20 30 2c 20 30 2c 20 20 20 30 2c 20 30 2c 20 30   0, 0,   0, 0, 0
5ed0: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c  , 0, 0, 0, 0, 1,
5ee0: 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  .  1, 1, 1, 1, 1
5ef0: 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20  , 1, 1, 1,   1, 
5f00: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
5f10: 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20  , 1,.  1, 1, 1, 
5f20: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20  1, 1, 1, 1, 1,  
5f30: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
5f40: 31 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c  1, 1, 1,.  1, 1,
5f50: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
5f60: 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c  1,   1, 1, 1, 1,
5f70: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20 31   1, 1, 1, 1,.  1
5f80: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
5f90: 20 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31   1, 1,   1, 1, 1
5fa0: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
5fb0: 0a 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  .  1, 1, 1, 1, 1
5fc0: 2c 20 31 2c 20 31 2c 20 31 2c 20 20 20 31 2c 20  , 1, 1, 1,   1, 
5fd0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31  1, 1, 1, 1, 1, 1
5fe0: 2c 20 31 2c 0a 20 20 31 2c 20 31 2c 20 31 2c 20  , 1,.  1, 1, 1, 
5ff0: 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 20  1, 1, 1, 1, 1,  
6000: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
6010: 31 2c 20 31 2c 20 31 2c 0a 20 20 31 2c 20 31 2c  1, 1, 1,.  1, 1,
6020: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 1, 1, 1, 1, 
6030: 31 2c 20 20 20 31 2c 20 31 2c 20 31 2c 20 31 2c  1,   1, 1, 1, 1,
6040: 20 31 2c 20 31 2c 20 31 2c 20 31 2c 0a 20 20 31   1, 1, 1, 1,.  1
6050: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
6060: 20 31 2c 20 31 2c 20 20 20 31 2c 20 31 2c 20 31   1, 1,   1, 1, 1
6070: 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 1, 1, 1, 1,
6080: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 75 74 70 75  .};../*.** Outpu
6090: 74 20 61 20 73 69 6e 67 6c 65 20 74 65 72 6d 20  t a single term 
60a0: 6f 66 20 43 53 56 2e 20 20 41 63 74 75 61 6c 6c  of CSV.  Actuall
60b0: 79 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  y, p->colSeparat
60c0: 6f 72 20 69 73 20 75 73 65 64 20 66 6f 72 0a 2a  or is used for.*
60d0: 2a 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 2c  * the separator,
60e0: 20 77 68 69 63 68 20 6d 61 79 20 6f 72 20 6d 61   which may or ma
60f0: 79 20 6e 6f 74 20 62 65 20 61 20 63 6f 6d 6d 61  y not be a comma
6100: 2e 20 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 20  .  p->nullValue 
6110: 69 73 0a 2a 2a 20 74 68 65 20 6e 75 6c 6c 20 76  is.** the null v
6120: 61 6c 75 65 2e 20 20 53 74 72 69 6e 67 73 20 61  alue.  Strings a
6130: 72 65 20 71 75 6f 74 65 64 20 69 66 20 6e 65 63  re quoted if nec
6140: 65 73 73 61 72 79 2e 20 20 54 68 65 20 73 65 70  essary.  The sep
6150: 61 72 61 74 6f 72 0a 2a 2a 20 69 73 20 6f 6e 6c  arator.** is onl
6160: 79 20 69 73 73 75 65 64 20 69 66 20 62 53 65 70  y issued if bSep
6170: 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 73 74 61   is true..*/.sta
6180: 74 69 63 20 76 6f 69 64 20 6f 75 74 70 75 74 5f  tic void output_
6190: 63 73 76 28 53 68 65 6c 6c 53 74 61 74 65 20 2a  csv(ShellState *
61a0: 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  p, const char *z
61b0: 2c 20 69 6e 74 20 62 53 65 70 29 7b 0a 20 20 46  , int bSep){.  F
61c0: 49 4c 45 20 2a 6f 75 74 20 3d 20 70 2d 3e 6f 75  ILE *out = p->ou
61d0: 74 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b  t;.  if( z==0 ){
61e0: 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
61f0: 28 6f 75 74 2c 22 25 73 22 2c 70 2d 3e 6e 75 6c  (out,"%s",p->nul
6200: 6c 56 61 6c 75 65 29 3b 0a 20 20 7d 65 6c 73 65  lValue);.  }else
6210: 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
6220: 20 69 6e 74 20 6e 53 65 70 20 3d 20 73 74 72 6c   int nSep = strl
6230: 65 6e 33 30 28 70 2d 3e 63 6f 6c 53 65 70 61 72  en30(p->colSepar
6240: 61 74 6f 72 29 3b 0a 20 20 20 20 66 6f 72 28 69  ator);.    for(i
6250: 3d 30 3b 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a  =0; z[i]; i++){.
6260: 20 20 20 20 20 20 69 66 28 20 6e 65 65 64 43 73        if( needCs
6270: 76 51 75 6f 74 65 5b 28 28 75 6e 73 69 67 6e 65  vQuote[((unsigne
6280: 64 20 63 68 61 72 2a 29 7a 29 5b 69 5d 5d 0a 20  d char*)z)[i]]. 
6290: 20 20 20 20 20 20 20 20 7c 7c 20 28 7a 5b 69 5d          || (z[i]
62a0: 3d 3d 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  ==p->colSeparato
62b0: 72 5b 30 5d 20 26 26 0a 20 20 20 20 20 20 20 20  r[0] &&.        
62c0: 20 20 20 20 20 28 6e 53 65 70 3d 3d 31 20 7c 7c       (nSep==1 ||
62d0: 20 6d 65 6d 63 6d 70 28 7a 2c 20 70 2d 3e 63 6f   memcmp(z, p->co
62e0: 6c 53 65 70 61 72 61 74 6f 72 2c 20 6e 53 65 70  lSeparator, nSep
62f0: 29 3d 3d 30 29 29 20 29 7b 0a 20 20 20 20 20 20  )==0)) ){.      
6300: 20 20 69 20 3d 20 30 3b 0a 20 20 20 20 20 20 20    i = 0;.       
6310: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
6320: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69 3d      }.    if( i=
6330: 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 75 74 63  =0 ){.      putc
6340: 28 27 22 27 2c 20 6f 75 74 29 3b 0a 20 20 20 20  ('"', out);.    
6350: 20 20 66 6f 72 28 69 3d 30 3b 20 7a 5b 69 5d 3b    for(i=0; z[i];
6360: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
6370: 66 28 20 7a 5b 69 5d 3d 3d 27 22 27 20 29 20 70  f( z[i]=='"' ) p
6380: 75 74 63 28 27 22 27 2c 20 6f 75 74 29 3b 0a 20  utc('"', out);. 
6390: 20 20 20 20 20 20 20 70 75 74 63 28 7a 5b 69 5d         putc(z[i]
63a0: 2c 20 6f 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a  , out);.      }.
63b0: 20 20 20 20 20 20 70 75 74 63 28 27 22 27 2c 20        putc('"', 
63c0: 6f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  out);.    }else{
63d0: 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
63e0: 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20 7a 29  tf(out, "%s", z)
63f0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
6400: 28 20 62 53 65 70 20 29 7b 0a 20 20 20 20 75 74  ( bSep ){.    ut
6410: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
6420: 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53 65  , "%s", p->colSe
6430: 70 61 72 61 74 6f 72 29 3b 0a 20 20 7d 0a 7d 0a  parator);.  }.}.
6440: 0a 23 69 66 64 65 66 20 53 49 47 49 4e 54 0a 2f  .#ifdef SIGINT./
6450: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
6460: 65 20 72 75 6e 73 20 77 68 65 6e 20 74 68 65 20  e runs when the 
6470: 75 73 65 72 20 70 72 65 73 73 65 73 20 43 74 72  user presses Ctr
6480: 6c 2d 43 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  l-C.*/.static vo
6490: 69 64 20 69 6e 74 65 72 72 75 70 74 5f 68 61 6e  id interrupt_han
64a0: 64 6c 65 72 28 69 6e 74 20 4e 6f 74 55 73 65 64  dler(int NotUsed
64b0: 29 7b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41  ){.  UNUSED_PARA
64c0: 4d 45 54 45 52 28 4e 6f 74 55 73 65 64 29 3b 0a  METER(NotUsed);.
64d0: 20 20 73 65 65 6e 49 6e 74 65 72 72 75 70 74 2b    seenInterrupt+
64e0: 2b 3b 0a 20 20 69 66 28 20 73 65 65 6e 49 6e 74  +;.  if( seenInt
64f0: 65 72 72 75 70 74 3e 32 20 29 20 65 78 69 74 28  errupt>2 ) exit(
6500: 31 29 3b 0a 20 20 69 66 28 20 67 6c 6f 62 61 6c  1);.  if( global
6510: 44 62 20 29 20 73 71 6c 69 74 65 33 5f 69 6e 74  Db ) sqlite3_int
6520: 65 72 72 75 70 74 28 67 6c 6f 62 61 6c 44 62 29  errupt(globalDb)
6530: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;.}.#endif..#ifn
6540: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
6550: 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 2f 2a  AUTHORIZATION./*
6560: 0a 2a 2a 20 57 68 65 6e 20 74 68 65 20 22 2e 61  .** When the ".a
6570: 75 74 68 20 4f 4e 22 20 69 73 20 73 65 74 2c 20  uth ON" is set, 
6580: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 75  the following au
6590: 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61 63  thorizer callbac
65a0: 6b 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e  k is.** invoked.
65b0: 20 20 49 74 20 61 6c 77 61 79 73 20 72 65 74 75    It always retu
65c0: 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 2e 0a 2a  rns SQLITE_OK..*
65d0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 68 65  /.static int she
65e0: 6c 6c 41 75 74 68 28 0a 20 20 76 6f 69 64 20 2a  llAuth(.  void *
65f0: 70 43 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 69  pClientData,.  i
6600: 6e 74 20 6f 70 2c 0a 20 20 63 6f 6e 73 74 20 63  nt op,.  const c
6610: 68 61 72 20 2a 7a 41 31 2c 0a 20 20 63 6f 6e 73  har *zA1,.  cons
6620: 74 20 63 68 61 72 20 2a 7a 41 32 2c 0a 20 20 63  t char *zA2,.  c
6630: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 33 2c 0a  onst char *zA3,.
6640: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
6650: 34 0a 29 7b 0a 20 20 53 68 65 6c 6c 53 74 61 74  4.){.  ShellStat
6660: 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53 74 61  e *p = (ShellSta
6670: 74 65 2a 29 70 43 6c 69 65 6e 74 44 61 74 61 3b  te*)pClientData;
6680: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
6690: 63 68 61 72 20 2a 61 7a 41 63 74 69 6f 6e 5b 5d  char *azAction[]
66a0: 20 3d 20 7b 20 30 2c 0a 20 20 20 20 20 22 43 52   = { 0,.     "CR
66b0: 45 41 54 45 5f 49 4e 44 45 58 22 2c 20 20 20 20  EATE_INDEX",    
66c0: 20 20 20 20 20 22 43 52 45 41 54 45 5f 54 41 42       "CREATE_TAB
66d0: 4c 45 22 2c 20 20 20 20 20 20 20 20 20 22 43 52  LE",         "CR
66e0: 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45 58 22  EATE_TEMP_INDEX"
66f0: 2c 0a 20 20 20 20 20 22 43 52 45 41 54 45 5f 54  ,.     "CREATE_T
6700: 45 4d 50 5f 54 41 42 4c 45 22 2c 20 20 20 20 22  EMP_TABLE",    "
6710: 43 52 45 41 54 45 5f 54 45 4d 50 5f 54 52 49 47  CREATE_TEMP_TRIG
6720: 47 45 52 22 2c 20 20 22 43 52 45 41 54 45 5f 54  GER",  "CREATE_T
6730: 45 4d 50 5f 56 49 45 57 22 2c 0a 20 20 20 20 20  EMP_VIEW",.     
6740: 22 43 52 45 41 54 45 5f 54 52 49 47 47 45 52 22  "CREATE_TRIGGER"
6750: 2c 20 20 20 20 20 20 20 22 43 52 45 41 54 45 5f  ,       "CREATE_
6760: 56 49 45 57 22 2c 20 20 20 20 20 20 20 20 20 20  VIEW",          
6770: 22 44 45 4c 45 54 45 22 2c 0a 20 20 20 20 20 22  "DELETE",.     "
6780: 44 52 4f 50 5f 49 4e 44 45 58 22 2c 20 20 20 20  DROP_INDEX",    
6790: 20 20 20 20 20 20 20 22 44 52 4f 50 5f 54 41 42         "DROP_TAB
67a0: 4c 45 22 2c 20 20 20 20 20 20 20 20 20 20 20 22  LE",           "
67b0: 44 52 4f 50 5f 54 45 4d 50 5f 49 4e 44 45 58 22  DROP_TEMP_INDEX"
67c0: 2c 0a 20 20 20 20 20 22 44 52 4f 50 5f 54 45 4d  ,.     "DROP_TEM
67d0: 50 5f 54 41 42 4c 45 22 2c 20 20 20 20 20 20 22  P_TABLE",      "
67e0: 44 52 4f 50 5f 54 45 4d 50 5f 54 52 49 47 47 45  DROP_TEMP_TRIGGE
67f0: 52 22 2c 20 20 20 20 22 44 52 4f 50 5f 54 45 4d  R",    "DROP_TEM
6800: 50 5f 56 49 45 57 22 2c 0a 20 20 20 20 20 22 44  P_VIEW",.     "D
6810: 52 4f 50 5f 54 52 49 47 47 45 52 22 2c 20 20 20  ROP_TRIGGER",   
6820: 20 20 20 20 20 20 22 44 52 4f 50 5f 56 49 45 57        "DROP_VIEW
6830: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 22 49  ",            "I
6840: 4e 53 45 52 54 22 2c 0a 20 20 20 20 20 22 50 52  NSERT",.     "PR
6850: 41 47 4d 41 22 2c 20 20 20 20 20 20 20 20 20 20  AGMA",          
6860: 20 20 20 20 20 22 52 45 41 44 22 2c 20 20 20 20       "READ",    
6870: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 45               "SE
6880: 4c 45 43 54 22 2c 0a 20 20 20 20 20 22 54 52 41  LECT",.     "TRA
6890: 4e 53 41 43 54 49 4f 4e 22 2c 20 20 20 20 20 20  NSACTION",      
68a0: 20 20 20 20 22 55 50 44 41 54 45 22 2c 20 20 20      "UPDATE",   
68b0: 20 20 20 20 20 20 20 20 20 20 20 20 22 41 54 54              "ATT
68c0: 41 43 48 22 2c 0a 20 20 20 20 20 22 44 45 54 41  ACH",.     "DETA
68d0: 43 48 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  CH",            
68e0: 20 20 20 22 41 4c 54 45 52 5f 54 41 42 4c 45 22     "ALTER_TABLE"
68f0: 2c 20 20 20 20 20 20 20 20 20 20 22 52 45 49 4e  ,          "REIN
6900: 44 45 58 22 2c 0a 20 20 20 20 20 22 41 4e 41 4c  DEX",.     "ANAL
6910: 59 5a 45 22 2c 20 20 20 20 20 20 20 20 20 20 20  YZE",           
6920: 20 20 20 22 43 52 45 41 54 45 5f 56 54 41 42 4c     "CREATE_VTABL
6930: 45 22 2c 20 20 20 20 20 20 20 20 22 44 52 4f 50  E",        "DROP
6940: 5f 56 54 41 42 4c 45 22 2c 0a 20 20 20 20 20 22  _VTABLE",.     "
6950: 46 55 4e 43 54 49 4f 4e 22 2c 20 20 20 20 20 20  FUNCTION",      
6960: 20 20 20 20 20 20 20 22 53 41 56 45 50 4f 49 4e         "SAVEPOIN
6970: 54 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 22  T",            "
6980: 52 45 43 55 52 53 49 56 45 22 0a 20 20 7d 3b 0a  RECURSIVE".  };.
6990: 20 20 69 6e 74 20 69 3b 0a 20 20 63 6f 6e 73 74    int i;.  const
69a0: 20 63 68 61 72 20 2a 61 7a 5b 34 5d 3b 0a 20 20   char *az[4];.  
69b0: 61 7a 5b 30 5d 20 3d 20 7a 41 31 3b 0a 20 20 61  az[0] = zA1;.  a
69c0: 7a 5b 31 5d 20 3d 20 7a 41 32 3b 0a 20 20 61 7a  z[1] = zA2;.  az
69d0: 5b 32 5d 20 3d 20 7a 41 33 3b 0a 20 20 61 7a 5b  [2] = zA3;.  az[
69e0: 33 5d 20 3d 20 7a 41 34 3b 0a 20 20 75 74 66 38  3] = zA4;.  utf8
69f0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
6a00: 22 61 75 74 68 6f 72 69 7a 65 72 3a 20 25 73 22  "authorizer: %s"
6a10: 2c 20 61 7a 41 63 74 69 6f 6e 5b 6f 70 5d 29 3b  , azAction[op]);
6a20: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 34 3b  .  for(i=0; i<4;
6a30: 20 69 2b 2b 29 7b 0a 20 20 20 20 72 61 77 5f 70   i++){.    raw_p
6a40: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 20  rintf(p->out, " 
6a50: 22 29 3b 0a 20 20 20 20 69 66 28 20 61 7a 5b 69  ");.    if( az[i
6a60: 5d 20 29 7b 0a 20 20 20 20 20 20 6f 75 74 70 75  ] ){.      outpu
6a70: 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75  t_c_string(p->ou
6a80: 74 2c 20 61 7a 5b 69 5d 29 3b 0a 20 20 20 20 7d  t, az[i]);.    }
6a90: 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
6aa0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
6ab0: 4e 55 4c 4c 22 29 3b 0a 20 20 20 20 7d 0a 20 20  NULL");.    }.  
6ac0: 7d 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70  }.  raw_printf(p
6ad0: 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20  ->out, "\n");.  
6ae0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
6af0: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  ;.}.#endif.../*.
6b00: 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63  ** This is the c
6b10: 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65 20  allback routine 
6b20: 74 68 61 74 20 74 68 65 20 73 68 65 6c 6c 0a 2a  that the shell.*
6b30: 2a 20 69 6e 76 6f 6b 65 73 20 66 6f 72 20 65 61  * invokes for ea
6b40: 63 68 20 72 6f 77 20 6f 66 20 61 20 71 75 65 72  ch row of a quer
6b50: 79 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61  y result..*/.sta
6b60: 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 5f 63 61  tic int shell_ca
6b70: 6c 6c 62 61 63 6b 28 0a 20 20 76 6f 69 64 20 2a  llback(.  void *
6b80: 70 41 72 67 2c 0a 20 20 69 6e 74 20 6e 41 72 67  pArg,.  int nArg
6b90: 2c 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ,        /* Numb
6ba0: 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c  er of result col
6bb0: 75 6d 6e 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  umns */.  char *
6bc0: 2a 61 7a 41 72 67 2c 20 20 20 20 2f 2a 20 54 65  *azArg,    /* Te
6bd0: 78 74 20 6f 66 20 65 61 63 68 20 72 65 73 75 6c  xt of each resul
6be0: 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  t column */.  ch
6bf0: 61 72 20 2a 2a 61 7a 43 6f 6c 2c 20 20 20 20 2f  ar **azCol,    /
6c00: 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a  * Column names *
6c10: 2f 0a 20 20 69 6e 74 20 2a 61 69 54 79 70 65 20  /.  int *aiType 
6c20: 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 74       /* Column t
6c30: 79 70 65 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ypes */.){.  int
6c40: 20 69 3b 0a 20 20 53 68 65 6c 6c 53 74 61 74 65   i;.  ShellState
6c50: 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53 74 61 74   *p = (ShellStat
6c60: 65 2a 29 70 41 72 67 3b 0a 0a 20 20 73 77 69 74  e*)pArg;..  swit
6c70: 63 68 28 20 70 2d 3e 63 4d 6f 64 65 20 29 7b 0a  ch( p->cMode ){.
6c80: 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 4c 69      case MODE_Li
6c90: 6e 65 3a 20 7b 0a 20 20 20 20 20 20 69 6e 74 20  ne: {.      int 
6ca0: 77 20 3d 20 35 3b 0a 20 20 20 20 20 20 69 66 28  w = 5;.      if(
6cb0: 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61   azArg==0 ) brea
6cc0: 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  k;.      for(i=0
6cd0: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
6ce0: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20          int len 
6cf0: 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a 43 6f 6c  = strlen30(azCol
6d00: 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a  [i] ? azCol[i] :
6d10: 20 22 22 29 3b 0a 20 20 20 20 20 20 20 20 69 66   "");.        if
6d20: 28 20 6c 65 6e 3e 77 20 29 20 77 20 3d 20 6c 65  ( len>w ) w = le
6d30: 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  n;.      }.     
6d40: 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3e 30 20   if( p->cnt++>0 
6d50: 29 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d  ) utf8_printf(p-
6d60: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72  >out, "%s", p->r
6d70: 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  owSeparator);.  
6d80: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
6d90: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
6da0: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
6db0: 2d 3e 6f 75 74 2c 22 25 2a 73 20 3d 20 25 73 25  ->out,"%*s = %s%
6dc0: 73 22 2c 20 77 2c 20 61 7a 43 6f 6c 5b 69 5d 2c  s", w, azCol[i],
6dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6de0: 20 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72   azArg[i] ? azAr
6df0: 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61  g[i] : p->nullVa
6e00: 6c 75 65 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72  lue, p->rowSepar
6e10: 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ator);.      }. 
6e20: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
6e30: 7d 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f  }.    case MODE_
6e40: 45 78 70 6c 61 69 6e 3a 0a 20 20 20 20 63 61 73  Explain:.    cas
6e50: 65 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3a 20 7b  e MODE_Column: {
6e60: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
6e70: 6e 73 74 20 69 6e 74 20 61 45 78 70 6c 61 69 6e  nst int aExplain
6e80: 57 69 64 74 68 73 5b 5d 20 3d 20 7b 34 2c 20 31  Widths[] = {4, 1
6e90: 33 2c 20 34 2c 20 34 2c 20 34 2c 20 31 33 2c 20  3, 4, 4, 4, 13, 
6ea0: 32 2c 20 31 33 7d 3b 0a 20 20 20 20 20 20 63 6f  2, 13};.      co
6eb0: 6e 73 74 20 69 6e 74 20 2a 63 6f 6c 57 69 64 74  nst int *colWidt
6ec0: 68 3b 0a 20 20 20 20 20 20 69 6e 74 20 73 68 6f  h;.      int sho
6ed0: 77 48 64 72 3b 0a 20 20 20 20 20 20 63 68 61 72  wHdr;.      char
6ee0: 20 2a 72 6f 77 53 65 70 3b 0a 20 20 20 20 20 20   *rowSep;.      
6ef0: 69 66 28 20 70 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f  if( p->cMode==MO
6f00: 44 45 5f 43 6f 6c 75 6d 6e 20 29 7b 0a 20 20 20  DE_Column ){.   
6f10: 20 20 20 20 20 63 6f 6c 57 69 64 74 68 20 3d 20       colWidth = 
6f20: 70 2d 3e 63 6f 6c 57 69 64 74 68 3b 0a 20 20 20  p->colWidth;.   
6f30: 20 20 20 20 20 73 68 6f 77 48 64 72 20 3d 20 70       showHdr = p
6f40: 2d 3e 73 68 6f 77 48 65 61 64 65 72 3b 0a 20 20  ->showHeader;.  
6f50: 20 20 20 20 20 20 72 6f 77 53 65 70 20 3d 20 70        rowSep = p
6f60: 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 3b 0a  ->rowSeparator;.
6f70: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
6f80: 20 20 20 20 20 63 6f 6c 57 69 64 74 68 20 3d 20       colWidth = 
6f90: 61 45 78 70 6c 61 69 6e 57 69 64 74 68 73 3b 0a  aExplainWidths;.
6fa0: 20 20 20 20 20 20 20 20 73 68 6f 77 48 64 72 20          showHdr 
6fb0: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 6f 77  = 1;.        row
6fc0: 53 65 70 20 3d 20 53 45 50 5f 52 6f 77 3b 0a 20  Sep = SEP_Row;. 
6fd0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
6fe0: 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 29 7b 0a   p->cnt++==0 ){.
6ff0: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b          for(i=0;
7000: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
7010: 20 20 20 20 20 20 20 20 20 69 6e 74 20 77 2c 20           int w, 
7020: 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  n;.          if(
7030: 20 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e   i<ArraySize(p->
7040: 63 6f 6c 57 69 64 74 68 29 20 29 7b 0a 20 20 20  colWidth) ){.   
7050: 20 20 20 20 20 20 20 20 20 77 20 3d 20 63 6f 6c           w = col
7060: 57 69 64 74 68 5b 69 5d 3b 0a 20 20 20 20 20 20  Width[i];.      
7070: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7080: 20 20 20 20 20 20 20 77 20 3d 20 30 3b 0a 20 20         w = 0;.  
7090: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
70a0: 20 20 20 20 69 66 28 20 77 3d 3d 30 20 29 7b 0a      if( w==0 ){.
70b0: 20 20 20 20 20 20 20 20 20 20 20 20 77 20 3d 20              w = 
70c0: 73 74 72 6c 65 6e 33 30 28 61 7a 43 6f 6c 5b 69  strlen30(azCol[i
70d0: 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22  ] ? azCol[i] : "
70e0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
70f0: 69 66 28 20 77 3c 31 30 20 29 20 77 20 3d 20 31  if( w<10 ) w = 1
7100: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  0;.            n
7110: 20 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a 41 72   = strlen30(azAr
7120: 67 20 26 26 20 61 7a 41 72 67 5b 69 5d 20 3f 20  g && azArg[i] ? 
7130: 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75  azArg[i] : p->nu
7140: 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20 20 20  llValue);.      
7150: 20 20 20 20 20 20 69 66 28 20 77 3c 6e 20 29 20        if( w<n ) 
7160: 77 20 3d 20 6e 3b 0a 20 20 20 20 20 20 20 20 20  w = n;.         
7170: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28   }.          if(
7180: 20 69 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e   i<ArraySize(p->
7190: 61 63 74 75 61 6c 57 69 64 74 68 29 20 29 7b 0a  actualWidth) ){.
71a0: 20 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e 61              p->a
71b0: 63 74 75 61 6c 57 69 64 74 68 5b 69 5d 20 3d 20  ctualWidth[i] = 
71c0: 77 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  w;.          }. 
71d0: 20 20 20 20 20 20 20 20 20 69 66 28 20 73 68 6f           if( sho
71e0: 77 48 64 72 20 29 7b 0a 20 20 20 20 20 20 20 20  wHdr ){.        
71f0: 20 20 20 20 69 66 28 20 77 3c 30 20 29 7b 0a 20      if( w<0 ){. 
7200: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66               utf
7210: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
7220: 22 25 2a 2e 2a 73 25 73 22 2c 2d 77 2c 2d 77 2c  "%*.*s%s",-w,-w,
7230: 61 7a 43 6f 6c 5b 69 5d 2c 0a 20 20 20 20 20 20  azCol[i],.      
7240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7250: 69 3d 3d 6e 41 72 67 2d 31 20 3f 20 72 6f 77 53  i==nArg-1 ? rowS
7260: 65 70 20 3a 20 22 20 20 22 29 3b 0a 20 20 20 20  ep : "  ");.    
7270: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
7280: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66               utf
7290: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
72a0: 22 25 2d 2a 2e 2a 73 25 73 22 2c 77 2c 77 2c 61  "%-*.*s%s",w,w,a
72b0: 7a 43 6f 6c 5b 69 5d 2c 0a 20 20 20 20 20 20 20  zCol[i],.       
72c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
72d0: 3d 3d 6e 41 72 67 2d 31 20 3f 20 72 6f 77 53 65  ==nArg-1 ? rowSe
72e0: 70 20 3a 20 22 20 20 22 29 3b 0a 20 20 20 20 20  p : "  ");.     
72f0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
7300: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
7310: 20 20 20 20 20 20 20 69 66 28 20 73 68 6f 77 48         if( showH
7320: 64 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  dr ){.          
7330: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
7340: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
7350: 20 20 20 69 6e 74 20 77 3b 0a 20 20 20 20 20 20     int w;.      
7360: 20 20 20 20 20 20 69 66 28 20 69 3c 41 72 72 61        if( i<Arra
7370: 79 53 69 7a 65 28 70 2d 3e 61 63 74 75 61 6c 57  ySize(p->actualW
7380: 69 64 74 68 29 20 29 7b 0a 20 20 20 20 20 20 20  idth) ){.       
7390: 20 20 20 20 20 20 20 20 77 20 3d 20 70 2d 3e 61          w = p->a
73a0: 63 74 75 61 6c 57 69 64 74 68 5b 69 5d 3b 0a 20  ctualWidth[i];. 
73b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
73c0: 28 20 77 3c 30 20 29 20 77 20 3d 20 2d 77 3b 0a  ( w<0 ) w = -w;.
73d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73              }els
73e0: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e{.             
73f0: 20 20 77 20 3d 20 31 30 3b 0a 20 20 20 20 20 20    w = 10;.      
7400: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
7410: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
7420: 70 2d 3e 6f 75 74 2c 22 25 2d 2a 2e 2a 73 25 73  p->out,"%-*.*s%s
7430: 22 2c 77 2c 77 2c 0a 20 20 20 20 20 20 20 20 20  ",w,w,.         
7440: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 2d            "-----
7450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7480: 2d 2d 2d 2d 2d 22 0a 20 20 20 20 20 20 20 20 20  -----".         
7490: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 2d            "-----
74a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
74b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
74c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
74d0: 2d 2d 2d 2d 2d 22 2c 0a 20 20 20 20 20 20 20 20  -----",.        
74e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 3d 3d 6e              i==n
74f0: 41 72 67 2d 31 20 3f 20 72 6f 77 53 65 70 20 3a  Arg-1 ? rowSep :
7500: 20 22 20 20 22 29 3b 0a 20 20 20 20 20 20 20 20   "  ");.        
7510: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
7520: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
7530: 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b  azArg==0 ) break
7540: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  ;.      for(i=0;
7550: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
7560: 20 20 20 20 20 20 20 69 6e 74 20 77 3b 0a 20 20         int w;.  
7570: 20 20 20 20 20 20 69 66 28 20 69 3c 41 72 72 61        if( i<Arra
7580: 79 53 69 7a 65 28 70 2d 3e 61 63 74 75 61 6c 57  ySize(p->actualW
7590: 69 64 74 68 29 20 29 7b 0a 20 20 20 20 20 20 20  idth) ){.       
75a0: 20 20 20 20 77 20 3d 20 70 2d 3e 61 63 74 75 61      w = p->actua
75b0: 6c 57 69 64 74 68 5b 69 5d 3b 0a 20 20 20 20 20  lWidth[i];.     
75c0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
75d0: 20 20 20 20 20 77 20 3d 20 31 30 3b 0a 20 20 20       w = 10;.   
75e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
75f0: 66 28 20 70 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f 44  f( p->cMode==MOD
7600: 45 5f 45 78 70 6c 61 69 6e 20 26 26 20 61 7a 41  E_Explain && azA
7610: 72 67 5b 69 5d 20 26 26 20 73 74 72 6c 65 6e 33  rg[i] && strlen3
7620: 30 28 61 7a 41 72 67 5b 69 5d 29 3e 77 20 29 7b  0(azArg[i])>w ){
7630: 0a 20 20 20 20 20 20 20 20 20 20 77 20 3d 20 73  .          w = s
7640: 74 72 6c 65 6e 33 30 28 61 7a 41 72 67 5b 69 5d  trlen30(azArg[i]
7650: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
7660: 20 20 20 20 20 69 66 28 20 69 3d 3d 31 20 26 26       if( i==1 &&
7670: 20 70 2d 3e 61 69 49 6e 64 65 6e 74 20 26 26 20   p->aiIndent && 
7680: 70 2d 3e 70 53 74 6d 74 20 29 7b 0a 20 20 20 20  p->pStmt ){.    
7690: 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 49 6e        if( p->iIn
76a0: 64 65 6e 74 3c 70 2d 3e 6e 49 6e 64 65 6e 74 20  dent<p->nIndent 
76b0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ){.            u
76c0: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
76d0: 74 2c 20 22 25 2a 2e 73 22 2c 20 70 2d 3e 61 69  t, "%*.s", p->ai
76e0: 49 6e 64 65 6e 74 5b 70 2d 3e 69 49 6e 64 65 6e  Indent[p->iInden
76f0: 74 5d 2c 20 22 22 29 3b 0a 20 20 20 20 20 20 20  t], "");.       
7700: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 70     }.          p
7710: 2d 3e 69 49 6e 64 65 6e 74 2b 2b 3b 0a 20 20 20  ->iIndent++;.   
7720: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
7730: 66 28 20 77 3c 30 20 29 7b 0a 20 20 20 20 20 20  f( w<0 ){.      
7740: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
7750: 70 2d 3e 6f 75 74 2c 22 25 2a 2e 2a 73 25 73 22  p->out,"%*.*s%s"
7760: 2c 2d 77 2c 2d 77 2c 0a 20 20 20 20 20 20 20 20  ,-w,-w,.        
7770: 20 20 20 20 20 20 61 7a 41 72 67 5b 69 5d 20 3f        azArg[i] ?
7780: 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e   azArg[i] : p->n
7790: 75 6c 6c 56 61 6c 75 65 2c 0a 20 20 20 20 20 20  ullValue,.      
77a0: 20 20 20 20 20 20 20 20 69 3d 3d 6e 41 72 67 2d          i==nArg-
77b0: 31 20 3f 20 72 6f 77 53 65 70 20 3a 20 22 20 20  1 ? rowSep : "  
77c0: 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ");.        }els
77d0: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66  e{.          utf
77e0: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
77f0: 22 25 2d 2a 2e 2a 73 25 73 22 2c 77 2c 77 2c 0a  "%-*.*s%s",w,w,.
7800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a                az
7810: 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69  Arg[i] ? azArg[i
7820: 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65  ] : p->nullValue
7830: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
7840: 69 3d 3d 6e 41 72 67 2d 31 20 3f 20 72 6f 77 53  i==nArg-1 ? rowS
7850: 65 70 20 3a 20 22 20 20 22 29 3b 0a 20 20 20 20  ep : "  ");.    
7860: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
7870: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
7880: 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 53  .    case MODE_S
7890: 65 6d 69 3a 20 7b 20 20 20 2f 2a 20 2e 73 63 68  emi: {   /* .sch
78a0: 65 6d 61 20 61 6e 64 20 2e 66 75 6c 6c 73 63 68  ema and .fullsch
78b0: 65 6d 61 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20  ema output */.  
78c0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
78d0: 70 2d 3e 6f 75 74 2c 20 22 25 73 3b 5c 6e 22 2c  p->out, "%s;\n",
78e0: 20 61 7a 41 72 67 5b 30 5d 29 3b 0a 20 20 20 20   azArg[0]);.    
78f0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
7900: 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 50 72 65     case MODE_Pre
7910: 74 74 79 3a 20 7b 20 20 2f 2a 20 2e 73 63 68 65  tty: {  /* .sche
7920: 6d 61 20 61 6e 64 20 2e 66 75 6c 6c 73 63 68 65  ma and .fullsche
7930: 6d 61 20 77 69 74 68 20 2d 2d 69 6e 64 65 6e 74  ma with --indent
7940: 20 2a 2f 0a 20 20 20 20 20 20 63 68 61 72 20 2a   */.      char *
7950: 7a 3b 0a 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a  z;.      int j;.
7960: 20 20 20 20 20 20 69 6e 74 20 6e 50 61 72 65 6e        int nParen
7970: 20 3d 20 30 3b 0a 20 20 20 20 20 20 63 68 61 72   = 0;.      char
7980: 20 63 45 6e 64 20 3d 20 30 3b 0a 20 20 20 20 20   cEnd = 0;.     
7990: 20 63 68 61 72 20 63 3b 0a 20 20 20 20 20 20 69   char c;.      i
79a0: 6e 74 20 6e 4c 69 6e 65 20 3d 20 30 3b 0a 20 20  nt nLine = 0;.  
79b0: 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67      assert( nArg
79c0: 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 69 66 28  ==1 );.      if(
79d0: 20 61 7a 41 72 67 5b 30 5d 3d 3d 30 20 29 20 62   azArg[0]==0 ) b
79e0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20  reak;.      if( 
79f0: 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28  sqlite3_strlike(
7a00: 22 43 52 45 41 54 45 20 56 49 45 57 25 22 2c 20  "CREATE VIEW%", 
7a10: 61 7a 41 72 67 5b 30 5d 2c 20 30 29 3d 3d 30 0a  azArg[0], 0)==0.
7a20: 20 20 20 20 20 20 20 7c 7c 20 73 71 6c 69 74 65         || sqlite
7a30: 33 5f 73 74 72 6c 69 6b 65 28 22 43 52 45 41 54  3_strlike("CREAT
7a40: 45 20 54 52 49 47 25 22 2c 20 61 7a 41 72 67 5b  E TRIG%", azArg[
7a50: 30 5d 2c 20 30 29 3d 3d 30 0a 20 20 20 20 20 20  0], 0)==0.      
7a60: 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
7a70: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
7a80: 25 73 3b 5c 6e 22 2c 20 61 7a 41 72 67 5b 30 5d  %s;\n", azArg[0]
7a90: 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  );.        break
7aa0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
7ab0: 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  z = sqlite3_mpri
7ac0: 6e 74 66 28 22 25 73 22 2c 20 61 7a 41 72 67 5b  ntf("%s", azArg[
7ad0: 30 5d 29 3b 0a 20 20 20 20 20 20 6a 20 3d 20 30  0]);.      j = 0
7ae0: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  ;.      for(i=0;
7af0: 20 49 73 53 70 61 63 65 28 7a 5b 69 5d 29 3b 20   IsSpace(z[i]); 
7b00: 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 66 6f 72  i++){}.      for
7b10: 28 3b 20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30  (; (c = z[i])!=0
7b20: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
7b30: 69 66 28 20 49 73 53 70 61 63 65 28 63 29 20 29  if( IsSpace(c) )
7b40: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
7b50: 49 73 53 70 61 63 65 28 7a 5b 6a 2d 31 5d 29 20  IsSpace(z[j-1]) 
7b60: 7c 7c 20 7a 5b 6a 2d 31 5d 3d 3d 27 28 27 20 29  || z[j-1]=='(' )
7b70: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
7b80: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 63 3d     }else if( (c=
7b90: 3d 27 28 27 20 7c 7c 20 63 3d 3d 27 29 27 29 20  ='(' || c==')') 
7ba0: 26 26 20 6a 3e 30 20 26 26 20 49 73 53 70 61 63  && j>0 && IsSpac
7bb0: 65 28 7a 5b 6a 2d 31 5d 29 20 29 7b 0a 20 20 20  e(z[j-1]) ){.   
7bc0: 20 20 20 20 20 20 20 6a 2d 2d 3b 0a 20 20 20 20         j--;.    
7bd0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7a 5b      }.        z[
7be0: 6a 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20  j++] = c;.      
7bf0: 7d 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 6a  }.      while( j
7c00: 3e 30 20 26 26 20 49 73 53 70 61 63 65 28 7a 5b  >0 && IsSpace(z[
7c10: 6a 2d 31 5d 29 20 29 7b 20 6a 2d 2d 3b 20 7d 0a  j-1]) ){ j--; }.
7c20: 20 20 20 20 20 20 7a 5b 6a 5d 20 3d 20 30 3b 0a        z[j] = 0;.
7c30: 20 20 20 20 20 20 69 66 28 20 73 74 72 6c 65 6e        if( strlen
7c40: 33 30 28 7a 29 3e 3d 37 39 20 29 7b 0a 20 20 20  30(z)>=79 ){.   
7c50: 20 20 20 20 20 66 6f 72 28 69 3d 6a 3d 30 3b 20       for(i=j=0; 
7c60: 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 3b 20 69  (c = z[i])!=0; i
7c70: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ++){.          i
7c80: 66 28 20 63 3d 3d 63 45 6e 64 20 29 7b 0a 20 20  f( c==cEnd ){.  
7c90: 20 20 20 20 20 20 20 20 20 20 63 45 6e 64 20 3d            cEnd =
7ca0: 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65   0;.          }e
7cb0: 6c 73 65 20 69 66 28 20 63 3d 3d 27 22 27 20 7c  lse if( c=='"' |
7cc0: 7c 20 63 3d 3d 27 5c 27 27 20 7c 7c 20 63 3d 3d  | c=='\'' || c==
7cd0: 27 60 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20  '`' ){.         
7ce0: 20 20 20 63 45 6e 64 20 3d 20 63 3b 0a 20 20 20     cEnd = c;.   
7cf0: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
7d00: 20 63 3d 3d 27 5b 27 20 29 7b 0a 20 20 20 20 20   c=='[' ){.     
7d10: 20 20 20 20 20 20 20 63 45 6e 64 20 3d 20 27 5d         cEnd = ']
7d20: 27 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  ';.          }el
7d30: 73 65 20 69 66 28 20 63 3d 3d 27 28 27 20 29 7b  se if( c=='(' ){
7d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 50 61  .            nPa
7d50: 72 65 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20  ren++;.         
7d60: 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 29   }else if( c==')
7d70: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ' ){.           
7d80: 20 6e 50 61 72 65 6e 2d 2d 3b 0a 20 20 20 20 20   nParen--;.     
7d90: 20 20 20 20 20 20 20 69 66 28 20 6e 4c 69 6e 65         if( nLine
7da0: 3e 30 20 26 26 20 6e 50 61 72 65 6e 3d 3d 30 20  >0 && nParen==0 
7db0: 26 26 20 6a 3e 30 20 29 7b 0a 20 20 20 20 20 20  && j>0 ){.      
7dc0: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
7dd0: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2e 2a  ntf(p->out, "%.*
7de0: 73 5c 6e 22 2c 20 6a 2c 20 7a 29 3b 0a 20 20 20  s\n", j, z);.   
7df0: 20 20 20 20 20 20 20 20 20 20 20 6a 20 3d 20 30             j = 0
7e00: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
7e10: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
7e20: 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 63        z[j++] = c
7e30: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
7e40: 6e 50 61 72 65 6e 3d 3d 31 20 26 26 20 28 63 3d  nParen==1 && (c=
7e50: 3d 27 28 27 20 7c 7c 20 63 3d 3d 27 2c 27 20 7c  ='(' || c==',' |
7e60: 7c 20 63 3d 3d 27 5c 6e 27 29 20 29 7b 0a 20 20  | c=='\n') ){.  
7e70: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63 3d            if( c=
7e80: 3d 27 5c 6e 27 20 29 20 6a 2d 2d 3b 0a 20 20 20  ='\n' ) j--;.   
7e90: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
7ea0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2e  intf(p->out, "%.
7eb0: 2a 73 5c 6e 20 20 22 2c 20 6a 2c 20 7a 29 3b 0a  *s\n  ", j, z);.
7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 6a 20 3d 20              j = 
7ed0: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  0;.            n
7ee0: 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20 20 20 20 20  Line++;.        
7ef0: 20 20 20 20 77 68 69 6c 65 28 20 49 73 53 70 61      while( IsSpa
7f00: 63 65 28 7a 5b 69 2b 31 5d 29 20 29 7b 20 69 2b  ce(z[i+1]) ){ i+
7f10: 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d  +; }.          }
7f20: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
7f30: 20 20 20 7a 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20     z[j] = 0;.   
7f40: 20 20 20 7d 0a 20 20 20 20 20 20 75 74 66 38 5f     }.      utf8_
7f50: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
7f60: 25 73 3b 5c 6e 22 2c 20 7a 29 3b 0a 20 20 20 20  %s;\n", z);.    
7f70: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
7f80: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
7f90: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d      }.    case M
7fa0: 4f 44 45 5f 4c 69 73 74 3a 20 7b 0a 20 20 20 20  ODE_List: {.    
7fb0: 20 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d    if( p->cnt++==
7fc0: 30 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64  0 && p->showHead
7fd0: 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f  er ){.        fo
7fe0: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
7ff0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  ++){.          u
8000: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
8010: 74 2c 22 25 73 25 73 22 2c 61 7a 43 6f 6c 5b 69  t,"%s%s",azCol[i
8020: 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ],.             
8030: 20 20 20 20 20 69 3d 3d 6e 41 72 67 2d 31 20 3f       i==nArg-1 ?
8040: 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72   p->rowSeparator
8050: 20 3a 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74   : p->colSeparat
8060: 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  or);.        }. 
8070: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
8080: 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61   azArg==0 ) brea
8090: 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  k;.      for(i=0
80a0: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
80b0: 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 20          char *z 
80c0: 3d 20 61 7a 41 72 67 5b 69 5d 3b 0a 20 20 20 20  = azArg[i];.    
80d0: 20 20 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 7a      if( z==0 ) z
80e0: 20 3d 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 3b   = p->nullValue;
80f0: 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
8100: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
8110: 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20 69  ", z);.        i
8120: 66 28 20 69 3c 6e 41 72 67 2d 31 20 29 7b 0a 20  f( i<nArg-1 ){. 
8130: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
8140: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
8150: 22 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  ", p->colSeparat
8160: 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  or);.        }el
8170: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74  se{.          ut
8180: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
8190: 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53 65  , "%s", p->rowSe
81a0: 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20  parator);.      
81b0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
81c0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
81d0: 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 48 74 6d     case MODE_Htm
81e0: 6c 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20 70  l: {.      if( p
81f0: 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26 20 70 2d  ->cnt++==0 && p-
8200: 3e 73 68 6f 77 48 65 61 64 65 72 20 29 7b 0a 20  >showHeader ){. 
8210: 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
8220: 66 28 70 2d 3e 6f 75 74 2c 22 3c 54 52 3e 22 29  f(p->out,"<TR>")
8230: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d  ;.        for(i=
8240: 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
8250: 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
8260: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 54  rintf(p->out,"<T
8270: 48 3e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  H>");.          
8280: 6f 75 74 70 75 74 5f 68 74 6d 6c 5f 73 74 72 69  output_html_stri
8290: 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 43 6f 6c  ng(p->out, azCol
82a0: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [i]);.          
82b0: 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
82c0: 74 2c 22 3c 2f 54 48 3e 5c 6e 22 29 3b 0a 20 20  t,"</TH>\n");.  
82d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
82e0: 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
82f0: 74 2c 22 3c 2f 54 52 3e 5c 6e 22 29 3b 0a 20 20  t,"</TR>\n");.  
8300: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
8310: 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b  azArg==0 ) break
8320: 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  ;.      raw_prin
8330: 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 54 52 3e 22  tf(p->out,"<TR>"
8340: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
8350: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
8360: 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
8370: 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 54 44 3e 22  tf(p->out,"<TD>"
8380: 29 3b 0a 20 20 20 20 20 20 20 20 6f 75 74 70 75  );.        outpu
8390: 74 5f 68 74 6d 6c 5f 73 74 72 69 6e 67 28 70 2d  t_html_string(p-
83a0: 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d 20 3f  >out, azArg[i] ?
83b0: 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e   azArg[i] : p->n
83c0: 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20 20  ullValue);.     
83d0: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
83e0: 3e 6f 75 74 2c 22 3c 2f 54 44 3e 5c 6e 22 29 3b  >out,"</TD>\n");
83f0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
8400: 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
8410: 2c 22 3c 2f 54 52 3e 5c 6e 22 29 3b 0a 20 20 20  ,"</TR>\n");.   
8420: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
8430: 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 54 63      case MODE_Tc
8440: 6c 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20 70  l: {.      if( p
8450: 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26 20 70 2d  ->cnt++==0 && p-
8460: 3e 73 68 6f 77 48 65 61 64 65 72 20 29 7b 0a 20  >showHeader ){. 
8470: 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20         for(i=0; 
8480: 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
8490: 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f 63          output_c
84a0: 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 61  _string(p->out,a
84b0: 7a 43 6f 6c 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b  zCol[i] ? azCol[
84c0: 69 5d 20 3a 20 22 22 29 3b 0a 20 20 20 20 20 20  i] : "");.      
84d0: 20 20 20 20 69 66 28 69 3c 6e 41 72 67 2d 31 29      if(i<nArg-1)
84e0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
84f0: 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f  out, "%s", p->co
8500: 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20  lSeparator);.   
8510: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 75       }.        u
8520: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
8530: 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53  t, "%s", p->rowS
8540: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
8550: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41   }.      if( azA
8560: 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  rg==0 ) break;. 
8570: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
8580: 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
8590: 20 20 20 20 6f 75 74 70 75 74 5f 63 5f 73 74 72      output_c_str
85a0: 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72  ing(p->out, azAr
85b0: 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69 5d 20  g[i] ? azArg[i] 
85c0: 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b  : p->nullValue);
85d0: 0a 20 20 20 20 20 20 20 20 69 66 28 69 3c 6e 41  .        if(i<nA
85e0: 72 67 2d 31 29 20 75 74 66 38 5f 70 72 69 6e 74  rg-1) utf8_print
85f0: 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20  f(p->out, "%s", 
8600: 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29  p->colSeparator)
8610: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
8620: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
8630: 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77  ut, "%s", p->row
8640: 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20  Separator);.    
8650: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
8660: 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 43 73 76     case MODE_Csv
8670: 3a 20 7b 0a 20 20 20 20 20 20 73 65 74 42 69 6e  : {.      setBin
8680: 61 72 79 4d 6f 64 65 28 70 2d 3e 6f 75 74 2c 20  aryMode(p->out, 
8690: 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d  1);.      if( p-
86a0: 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26 20 70 2d 3e  >cnt++==0 && p->
86b0: 73 68 6f 77 48 65 61 64 65 72 20 29 7b 0a 20 20  showHeader ){.  
86c0: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
86d0: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
86e0: 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f 63 73         output_cs
86f0: 76 28 70 2c 20 61 7a 43 6f 6c 5b 69 5d 20 3f 20  v(p, azCol[i] ? 
8700: 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 2c 20 69  azCol[i] : "", i
8710: 3c 6e 41 72 67 2d 31 29 3b 0a 20 20 20 20 20 20  <nArg-1);.      
8720: 20 20 7d 0a 20 20 20 20 20 20 20 20 75 74 66 38    }.        utf8
8730: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
8740: 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53 65 70 61  "%s", p->rowSepa
8750: 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a  rator);.      }.
8760: 20 20 20 20 20 20 69 66 28 20 6e 41 72 67 3e 30        if( nArg>0
8770: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
8780: 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
8790: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74  ){.          out
87a0: 70 75 74 5f 63 73 76 28 70 2c 20 61 7a 41 72 67  put_csv(p, azArg
87b0: 5b 69 5d 2c 20 69 3c 6e 41 72 67 2d 31 29 3b 0a  [i], i<nArg-1);.
87c0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
87d0: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
87e0: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72  >out, "%s", p->r
87f0: 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  owSeparator);.  
8800: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74 54      }.      setT
8810: 65 78 74 4d 6f 64 65 28 70 2d 3e 6f 75 74 2c 20  extMode(p->out, 
8820: 31 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  1);.      break;
8830: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
8840: 4d 4f 44 45 5f 51 75 6f 74 65 3a 0a 20 20 20 20  MODE_Quote:.    
8850: 63 61 73 65 20 4d 4f 44 45 5f 49 6e 73 65 72 74  case MODE_Insert
8860: 3a 20 7b 0a 20 20 20 20 20 20 70 2d 3e 63 6e 74  : {.      p->cnt
8870: 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 61 7a  ++;.      if( az
8880: 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  Arg==0 ) break;.
8890: 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 4d 6f        if( p->cMo
88a0: 64 65 3d 3d 4d 4f 44 45 5f 49 6e 73 65 72 74 20  de==MODE_Insert 
88b0: 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
88c0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 49  printf(p->out,"I
88d0: 4e 53 45 52 54 20 49 4e 54 4f 20 25 73 22 2c 70  NSERT INTO %s",p
88e0: 2d 3e 7a 44 65 73 74 54 61 62 6c 65 29 3b 0a 20  ->zDestTable);. 
88f0: 20 20 20 20 20 20 20 69 66 28 20 70 2d 3e 73 68         if( p->sh
8900: 6f 77 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20  owHeader ){.    
8910: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
8920: 28 70 2d 3e 6f 75 74 2c 22 28 22 29 3b 0a 20 20  (p->out,"(");.  
8930: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b          for(i=0;
8940: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
8950: 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20             char 
8960: 2a 7a 53 65 70 20 3d 20 69 3e 30 20 3f 20 22 2c  *zSep = i>0 ? ",
8970: 22 3a 20 22 22 3b 0a 20 20 20 20 20 20 20 20 20  ": "";.         
8980: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
8990: 2d 3e 6f 75 74 2c 20 22 25 73 25 73 22 2c 20 7a  ->out, "%s%s", z
89a0: 53 65 70 2c 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a  Sep, azCol[i]);.
89b0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
89c0: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
89d0: 28 70 2d 3e 6f 75 74 2c 22 29 22 29 3b 0a 20 20  (p->out,")");.  
89e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
89f0: 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
8a00: 74 2c 22 20 56 41 4c 55 45 53 28 22 29 3b 0a 20  t," VALUES(");. 
8a10: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 66 6f 72       }.      for
8a20: 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
8a30: 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72  +){.        char
8a40: 20 2a 7a 53 65 70 20 3d 20 69 3e 30 20 3f 20 22   *zSep = i>0 ? "
8a50: 2c 22 3a 20 22 22 3b 0a 20 20 20 20 20 20 20 20  ,": "";.        
8a60: 69 66 28 20 28 61 7a 41 72 67 5b 69 5d 3d 3d 30  if( (azArg[i]==0
8a70: 29 20 7c 7c 20 28 61 69 54 79 70 65 20 26 26 20  ) || (aiType && 
8a80: 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54  aiType[i]==SQLIT
8a90: 45 5f 4e 55 4c 4c 29 20 29 7b 0a 20 20 20 20 20  E_NULL) ){.     
8aa0: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
8ab0: 28 70 2d 3e 6f 75 74 2c 22 25 73 4e 55 4c 4c 22  (p->out,"%sNULL"
8ac0: 2c 7a 53 65 70 29 3b 0a 20 20 20 20 20 20 20 20  ,zSep);.        
8ad0: 7d 65 6c 73 65 20 69 66 28 20 61 69 54 79 70 65  }else if( aiType
8ae0: 20 26 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53   && aiType[i]==S
8af0: 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a 20 20  QLITE_TEXT ){.  
8b00: 20 20 20 20 20 20 20 20 69 66 28 20 7a 53 65 70          if( zSep
8b10: 5b 30 5d 20 29 20 75 74 66 38 5f 70 72 69 6e 74  [0] ) utf8_print
8b20: 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22 2c 7a 53  f(p->out,"%s",zS
8b30: 65 70 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f  ep);.          o
8b40: 75 74 70 75 74 5f 71 75 6f 74 65 64 5f 73 74 72  utput_quoted_str
8b50: 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72  ing(p->out, azAr
8b60: 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d  g[i]);.        }
8b70: 65 6c 73 65 20 69 66 28 20 61 69 54 79 70 65 20  else if( aiType 
8b80: 26 26 20 28 61 69 54 79 70 65 5b 69 5d 3d 3d 53  && (aiType[i]==S
8b90: 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 0a 20 20  QLITE_INTEGER.  
8ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8bb0: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 69             || ai
8bc0: 54 79 70 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f  Type[i]==SQLITE_
8bd0: 46 4c 4f 41 54 29 20 29 7b 0a 20 20 20 20 20 20  FLOAT) ){.      
8be0: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
8bf0: 70 2d 3e 6f 75 74 2c 22 25 73 25 73 22 2c 7a 53  p->out,"%s%s",zS
8c00: 65 70 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  ep, azArg[i]);. 
8c10: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
8c20: 20 61 69 54 79 70 65 20 26 26 20 61 69 54 79 70   aiType && aiTyp
8c30: 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 42 4c 4f  e[i]==SQLITE_BLO
8c40: 42 20 26 26 20 70 2d 3e 70 53 74 6d 74 20 29 7b  B && p->pStmt ){
8c50: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74  .          const
8c60: 20 76 6f 69 64 20 2a 70 42 6c 6f 62 20 3d 20 73   void *pBlob = s
8c70: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c  qlite3_column_bl
8c80: 6f 62 28 70 2d 3e 70 53 74 6d 74 2c 20 69 29 3b  ob(p->pStmt, i);
8c90: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e  .          int n
8ca0: 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f 63  Blob = sqlite3_c
8cb0: 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 70 2d 3e 70  olumn_bytes(p->p
8cc0: 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20  Stmt, i);.      
8cd0: 20 20 20 20 69 66 28 20 7a 53 65 70 5b 30 5d 20      if( zSep[0] 
8ce0: 29 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d  ) utf8_printf(p-
8cf0: 3e 6f 75 74 2c 22 25 73 22 2c 7a 53 65 70 29 3b  >out,"%s",zSep);
8d00: 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74 70 75  .          outpu
8d10: 74 5f 68 65 78 5f 62 6c 6f 62 28 70 2d 3e 6f 75  t_hex_blob(p->ou
8d20: 74 2c 20 70 42 6c 6f 62 2c 20 6e 42 6c 6f 62 29  t, pBlob, nBlob)
8d30: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
8d40: 69 66 28 20 69 73 4e 75 6d 62 65 72 28 61 7a 41  if( isNumber(azA
8d50: 72 67 5b 69 5d 2c 20 30 29 20 29 7b 0a 20 20 20  rg[i], 0) ){.   
8d60: 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
8d70: 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 25 73 22  tf(p->out,"%s%s"
8d80: 2c 7a 53 65 70 2c 20 61 7a 41 72 67 5b 69 5d 29  ,zSep, azArg[i])
8d90: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
8da0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 7a  .          if( z
8db0: 53 65 70 5b 30 5d 20 29 20 75 74 66 38 5f 70 72  Sep[0] ) utf8_pr
8dc0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22  intf(p->out,"%s"
8dd0: 2c 7a 53 65 70 29 3b 0a 20 20 20 20 20 20 20 20  ,zSep);.        
8de0: 20 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64 5f    output_quoted_
8df0: 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61  string(p->out, a
8e00: 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20  zArg[i]);.      
8e10: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
8e20: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
8e30: 6f 75 74 2c 70 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f  out,p->cMode==MO
8e40: 44 45 5f 51 75 6f 74 65 3f 22 5c 6e 22 3a 22 29  DE_Quote?"\n":")
8e50: 3b 5c 6e 22 29 3b 0a 20 20 20 20 20 20 62 72 65  ;\n");.      bre
8e60: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  ak;.    }.    ca
8e70: 73 65 20 4d 4f 44 45 5f 41 73 63 69 69 3a 20 7b  se MODE_Ascii: {
8e80: 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 6e  .      if( p->cn
8e90: 74 2b 2b 3d 3d 30 20 26 26 20 70 2d 3e 73 68 6f  t++==0 && p->sho
8ea0: 77 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20 20  wHeader ){.     
8eb0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41     for(i=0; i<nA
8ec0: 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
8ed0: 20 20 20 20 69 66 28 20 69 3e 30 20 29 20 75 74      if( i>0 ) ut
8ee0: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
8ef0: 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53 65  , "%s", p->colSe
8f00: 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20  parator);.      
8f10: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
8f20: 70 2d 3e 6f 75 74 2c 22 25 73 22 2c 61 7a 43 6f  p->out,"%s",azCo
8f30: 6c 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b 69 5d 20  l[i] ? azCol[i] 
8f40: 3a 20 22 22 29 3b 0a 20 20 20 20 20 20 20 20 7d  : "");.        }
8f50: 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
8f60: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
8f70: 22 2c 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74  ", p->rowSeparat
8f80: 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  or);.      }.   
8f90: 20 20 20 69 66 28 20 61 7a 41 72 67 3d 3d 30 20     if( azArg==0 
8fa0: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 66  ) break;.      f
8fb0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
8fc0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66  i++){.        if
8fd0: 28 20 69 3e 30 20 29 20 75 74 66 38 5f 70 72 69  ( i>0 ) utf8_pri
8fe0: 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22  ntf(p->out, "%s"
8ff0: 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  , p->colSeparato
9000: 72 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38  r);.        utf8
9010: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
9020: 25 73 22 2c 61 7a 41 72 67 5b 69 5d 20 3f 20 61  %s",azArg[i] ? a
9030: 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c  zArg[i] : p->nul
9040: 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 7d  lValue);.      }
9050: 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
9060: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c  tf(p->out, "%s",
9070: 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72   p->rowSeparator
9080: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
9090: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
90a0: 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  rn 0;.}../*.** T
90b0: 68 69 73 20 69 73 20 74 68 65 20 63 61 6c 6c 62  his is the callb
90c0: 61 63 6b 20 72 6f 75 74 69 6e 65 20 74 68 61 74  ack routine that
90d0: 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
90e0: 61 72 79 0a 2a 2a 20 69 6e 76 6f 6b 65 73 20 66  ary.** invokes f
90f0: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 61  or each row of a
9100: 20 71 75 65 72 79 20 72 65 73 75 6c 74 2e 0a 2a   query result..*
9110: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 61 6c  /.static int cal
9120: 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 41 72 67  lback(void *pArg
9130: 2c 20 69 6e 74 20 6e 41 72 67 2c 20 63 68 61 72  , int nArg, char
9140: 20 2a 2a 61 7a 41 72 67 2c 20 63 68 61 72 20 2a   **azArg, char *
9150: 2a 61 7a 43 6f 6c 29 7b 0a 20 20 2f 2a 20 73 69  *azCol){.  /* si
9160: 6e 63 65 20 77 65 20 64 6f 6e 27 74 20 68 61 76  nce we don't hav
9170: 65 20 74 79 70 65 20 69 6e 66 6f 2c 20 63 61 6c  e type info, cal
9180: 6c 20 74 68 65 20 73 68 65 6c 6c 5f 63 61 6c 6c  l the shell_call
9190: 62 61 63 6b 20 77 69 74 68 20 61 20 4e 55 4c 4c  back with a NULL
91a0: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 72 65 74 75   value */.  retu
91b0: 72 6e 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63  rn shell_callbac
91c0: 6b 28 70 41 72 67 2c 20 6e 41 72 67 2c 20 61 7a  k(pArg, nArg, az
91d0: 41 72 67 2c 20 61 7a 43 6f 6c 2c 20 4e 55 4c 4c  Arg, azCol, NULL
91e0: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20  );.}../*.** Set 
91f0: 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  the destination 
9200: 74 61 62 6c 65 20 66 69 65 6c 64 20 6f 66 20 74  table field of t
9210: 68 65 20 53 68 65 6c 6c 53 74 61 74 65 20 73 74  he ShellState st
9220: 72 75 63 74 75 72 65 20 74 6f 0a 2a 2a 20 74 68  ructure to.** th
9230: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
9240: 62 6c 65 20 67 69 76 65 6e 2e 20 20 45 73 63 61  ble given.  Esca
9250: 70 65 20 61 6e 79 20 71 75 6f 74 65 20 63 68 61  pe any quote cha
9260: 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 0a 2a  racters in the.*
9270: 2a 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 2a 2f  * table name..*/
9280: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 65 74  .static void set
9290: 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 53 68 65 6c  _table_name(Shel
92a0: 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f 6e 73 74  lState *p, const
92b0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 7b 0a 20   char *zName){. 
92c0: 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 6e 74   int i, n;.  int
92d0: 20 6e 65 65 64 51 75 6f 74 65 3b 0a 20 20 63 68   needQuote;.  ch
92e0: 61 72 20 2a 7a 3b 0a 0a 20 20 69 66 28 20 70 2d  ar *z;..  if( p-
92f0: 3e 7a 44 65 73 74 54 61 62 6c 65 20 29 7b 0a 20  >zDestTable ){. 
9300: 20 20 20 66 72 65 65 28 70 2d 3e 7a 44 65 73 74     free(p->zDest
9310: 54 61 62 6c 65 29 3b 0a 20 20 20 20 70 2d 3e 7a  Table);.    p->z
9320: 44 65 73 74 54 61 62 6c 65 20 3d 20 30 3b 0a 20  DestTable = 0;. 
9330: 20 7d 0a 20 20 69 66 28 20 7a 4e 61 6d 65 3d 3d   }.  if( zName==
9340: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 6e 65  0 ) return;.  ne
9350: 65 64 51 75 6f 74 65 20 3d 20 21 69 73 61 6c 70  edQuote = !isalp
9360: 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ha((unsigned cha
9370: 72 29 2a 7a 4e 61 6d 65 29 20 26 26 20 2a 7a 4e  r)*zName) && *zN
9380: 61 6d 65 21 3d 27 5f 27 3b 0a 20 20 66 6f 72 28  ame!='_';.  for(
9390: 69 3d 6e 3d 30 3b 20 7a 4e 61 6d 65 5b 69 5d 3b  i=n=0; zName[i];
93a0: 20 69 2b 2b 2c 20 6e 2b 2b 29 7b 0a 20 20 20 20   i++, n++){.    
93b0: 69 66 28 20 21 69 73 61 6c 6e 75 6d 28 28 75 6e  if( !isalnum((un
93c0: 73 69 67 6e 65 64 20 63 68 61 72 29 7a 4e 61 6d  signed char)zNam
93d0: 65 5b 69 5d 29 20 26 26 20 7a 4e 61 6d 65 5b 69  e[i]) && zName[i
93e0: 5d 21 3d 27 5f 27 20 29 7b 0a 20 20 20 20 20 20  ]!='_' ){.      
93f0: 6e 65 65 64 51 75 6f 74 65 20 3d 20 31 3b 0a 20  needQuote = 1;. 
9400: 20 20 20 20 20 69 66 28 20 7a 4e 61 6d 65 5b 69       if( zName[i
9410: 5d 3d 3d 27 5c 27 27 20 29 20 6e 2b 2b 3b 0a 20  ]=='\'' ) n++;. 
9420: 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 6e     }.  }.  if( n
9430: 65 65 64 51 75 6f 74 65 20 29 20 6e 20 2b 3d 20  eedQuote ) n += 
9440: 32 3b 0a 20 20 7a 20 3d 20 70 2d 3e 7a 44 65 73  2;.  z = p->zDes
9450: 74 54 61 62 6c 65 20 3d 20 6d 61 6c 6c 6f 63 28  tTable = malloc(
9460: 20 6e 2b 31 20 29 3b 0a 20 20 69 66 28 20 7a 3d   n+1 );.  if( z=
9470: 3d 30 20 29 7b 0a 20 20 20 20 72 61 77 5f 70 72  =0 ){.    raw_pr
9480: 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72  intf(stderr,"Err
9490: 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  or: out of memor
94a0: 79 5c 6e 22 29 3b 0a 20 20 20 20 65 78 69 74 28  y\n");.    exit(
94b0: 31 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 30 3b  1);.  }.  n = 0;
94c0: 0a 20 20 69 66 28 20 6e 65 65 64 51 75 6f 74 65  .  if( needQuote
94d0: 20 29 20 7a 5b 6e 2b 2b 5d 20 3d 20 27 5c 27 27   ) z[n++] = '\''
94e0: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 7a 4e 61  ;.  for(i=0; zNa
94f0: 6d 65 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20  me[i]; i++){.   
9500: 20 7a 5b 6e 2b 2b 5d 20 3d 20 7a 4e 61 6d 65 5b   z[n++] = zName[
9510: 69 5d 3b 0a 20 20 20 20 69 66 28 20 7a 4e 61 6d  i];.    if( zNam
9520: 65 5b 69 5d 3d 3d 27 5c 27 27 20 29 20 7a 5b 6e  e[i]=='\'' ) z[n
9530: 2b 2b 5d 20 3d 20 27 5c 27 27 3b 0a 20 20 7d 0a  ++] = '\'';.  }.
9540: 20 20 69 66 28 20 6e 65 65 64 51 75 6f 74 65 20    if( needQuote 
9550: 29 20 7a 5b 6e 2b 2b 5d 20 3d 20 27 5c 27 27 3b  ) z[n++] = '\'';
9560: 0a 20 20 7a 5b 6e 5d 20 3d 20 30 3b 0a 7d 0a 0a  .  z[n] = 0;.}..
9570: 2f 2a 20 7a 49 6e 20 69 73 20 65 69 74 68 65 72  /* zIn is either
9580: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
9590: 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 20  NULL-terminated 
95a0: 73 74 72 69 6e 67 20 69 6e 20 6d 65 6d 6f 72 79  string in memory
95b0: 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f   obtained.** fro
95c0: 6d 20 6d 61 6c 6c 6f 63 28 29 2c 20 6f 72 20 61  m malloc(), or a
95d0: 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 54   NULL pointer. T
95e0: 68 65 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65  he string pointe
95f0: 64 20 74 6f 20 62 79 20 7a 41 70 70 65 6e 64 20  d to by zAppend 
9600: 69 73 0a 2a 2a 20 61 64 64 65 64 20 74 6f 20 7a  is.** added to z
9610: 49 6e 2c 20 61 6e 64 20 74 68 65 20 72 65 73 75  In, and the resu
9620: 6c 74 20 72 65 74 75 72 6e 65 64 20 69 6e 20 6d  lt returned in m
9630: 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66  emory obtained f
9640: 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a  rom malloc()..**
9650: 20 7a 49 6e 2c 20 69 66 20 69 74 20 77 61 73 20   zIn, if it was 
9660: 6e 6f 74 20 4e 55 4c 4c 2c 20 69 73 20 66 72 65  not NULL, is fre
9670: 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
9680: 20 74 68 69 72 64 20 61 72 67 75 6d 65 6e 74 2c   third argument,
9690: 20 71 75 6f 74 65 2c 20 69 73 20 6e 6f 74 20 27   quote, is not '
96a0: 5c 30 27 2c 20 74 68 65 6e 20 69 74 20 69 73 20  \0', then it is 
96b0: 75 73 65 64 20 61 73 20 61 0a 2a 2a 20 71 75 6f  used as a.** quo
96c0: 74 65 20 63 68 61 72 61 63 74 65 72 20 66 6f 72  te character for
96d0: 20 7a 41 70 70 65 6e 64 2e 0a 2a 2f 0a 73 74 61   zAppend..*/.sta
96e0: 74 69 63 20 63 68 61 72 20 2a 61 70 70 65 6e 64  tic char *append
96f0: 54 65 78 74 28 63 68 61 72 20 2a 7a 49 6e 2c 20  Text(char *zIn, 
9700: 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 41 70 70  char const *zApp
9710: 65 6e 64 2c 20 63 68 61 72 20 71 75 6f 74 65 29  end, char quote)
9720: 7b 0a 20 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 69  {.  int len;.  i
9730: 6e 74 20 69 3b 0a 20 20 69 6e 74 20 6e 41 70 70  nt i;.  int nApp
9740: 65 6e 64 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a  end = strlen30(z
9750: 41 70 70 65 6e 64 29 3b 0a 20 20 69 6e 74 20 6e  Append);.  int n
9760: 49 6e 20 3d 20 28 7a 49 6e 3f 73 74 72 6c 65 6e  In = (zIn?strlen
9770: 33 30 28 7a 49 6e 29 3a 30 29 3b 0a 0a 20 20 6c  30(zIn):0);..  l
9780: 65 6e 20 3d 20 6e 41 70 70 65 6e 64 2b 6e 49 6e  en = nAppend+nIn
9790: 2b 31 3b 0a 20 20 69 66 28 20 71 75 6f 74 65 20  +1;.  if( quote 
97a0: 29 7b 0a 20 20 20 20 6c 65 6e 20 2b 3d 20 32 3b  ){.    len += 2;
97b0: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
97c0: 6e 41 70 70 65 6e 64 3b 20 69 2b 2b 29 7b 0a 20  nAppend; i++){. 
97d0: 20 20 20 20 20 69 66 28 20 7a 41 70 70 65 6e 64       if( zAppend
97e0: 5b 69 5d 3d 3d 71 75 6f 74 65 20 29 20 6c 65 6e  [i]==quote ) len
97f0: 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  ++;.    }.  }.. 
9800: 20 7a 49 6e 20 3d 20 28 63 68 61 72 20 2a 29 72   zIn = (char *)r
9810: 65 61 6c 6c 6f 63 28 7a 49 6e 2c 20 6c 65 6e 29  ealloc(zIn, len)
9820: 3b 0a 20 20 69 66 28 20 21 7a 49 6e 20 29 7b 0a  ;.  if( !zIn ){.
9830: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
9840: 7d 0a 0a 20 20 69 66 28 20 71 75 6f 74 65 20 29  }..  if( quote )
9850: 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 73 72  {.    char *zCsr
9860: 20 3d 20 26 7a 49 6e 5b 6e 49 6e 5d 3b 0a 20 20   = &zIn[nIn];.  
9870: 20 20 2a 7a 43 73 72 2b 2b 20 3d 20 71 75 6f 74    *zCsr++ = quot
9880: 65 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  e;.    for(i=0; 
9890: 69 3c 6e 41 70 70 65 6e 64 3b 20 69 2b 2b 29 7b  i<nAppend; i++){
98a0: 0a 20 20 20 20 20 20 2a 7a 43 73 72 2b 2b 20 3d  .      *zCsr++ =
98b0: 20 7a 41 70 70 65 6e 64 5b 69 5d 3b 0a 20 20 20   zAppend[i];.   
98c0: 20 20 20 69 66 28 20 7a 41 70 70 65 6e 64 5b 69     if( zAppend[i
98d0: 5d 3d 3d 71 75 6f 74 65 20 29 20 2a 7a 43 73 72  ]==quote ) *zCsr
98e0: 2b 2b 20 3d 20 71 75 6f 74 65 3b 0a 20 20 20 20  ++ = quote;.    
98f0: 7d 0a 20 20 20 20 2a 7a 43 73 72 2b 2b 20 3d 20  }.    *zCsr++ = 
9900: 71 75 6f 74 65 3b 0a 20 20 20 20 2a 7a 43 73 72  quote;.    *zCsr
9910: 2b 2b 20 3d 20 27 5c 30 27 3b 0a 20 20 20 20 61  ++ = '\0';.    a
9920: 73 73 65 72 74 28 20 28 7a 43 73 72 2d 7a 49 6e  ssert( (zCsr-zIn
9930: 29 3d 3d 6c 65 6e 20 29 3b 0a 20 20 7d 65 6c 73  )==len );.  }els
9940: 65 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 26 7a  e{.    memcpy(&z
9950: 49 6e 5b 6e 49 6e 5d 2c 20 7a 41 70 70 65 6e 64  In[nIn], zAppend
9960: 2c 20 6e 41 70 70 65 6e 64 29 3b 0a 20 20 20 20  , nAppend);.    
9970: 7a 49 6e 5b 6c 65 6e 2d 31 5d 20 3d 20 27 5c 30  zIn[len-1] = '\0
9980: 27 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  ';.  }..  return
9990: 20 7a 49 6e 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20   zIn;.}.../*.** 
99a0: 45 78 65 63 75 74 65 20 61 20 71 75 65 72 79 20  Execute a query 
99b0: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 77  statement that w
99c0: 69 6c 6c 20 67 65 6e 65 72 61 74 65 20 53 51 4c  ill generate SQL
99d0: 20 6f 75 74 70 75 74 2e 20 20 50 72 69 6e 74 0a   output.  Print.
99e0: 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  ** the result co
99f0: 6c 75 6d 6e 73 2c 20 63 6f 6d 6d 61 2d 73 65 70  lumns, comma-sep
9a00: 61 72 61 74 65 64 2c 20 6f 6e 20 61 20 6c 69 6e  arated, on a lin
9a10: 65 20 61 6e 64 20 74 68 65 6e 20 61 64 64 20 61  e and then add a
9a20: 0a 2a 2a 20 73 65 6d 69 63 6f 6c 6f 6e 20 74 65  .** semicolon te
9a30: 72 6d 69 6e 61 74 6f 72 20 74 6f 20 74 68 65 20  rminator to the 
9a40: 65 6e 64 20 6f 66 20 74 68 61 74 20 6c 69 6e 65  end of that line
9a50: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 6e  ..**.** If the n
9a60: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
9a70: 20 69 73 20 31 20 61 6e 64 20 74 68 61 74 20 63   is 1 and that c
9a80: 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 74  olumn contains t
9a90: 65 78 74 20 22 2d 2d 22 0a 2a 2a 20 74 68 65 6e  ext "--".** then
9aa0: 20 77 72 69 74 65 20 74 68 65 20 73 65 6d 69 63   write the semic
9ab0: 6f 6c 6f 6e 20 6f 6e 20 61 20 73 65 70 61 72 61  olon on a separa
9ac0: 74 65 20 6c 69 6e 65 2e 20 20 54 68 61 74 20 77  te line.  That w
9ad0: 61 79 2c 20 69 66 20 61 0a 2a 2a 20 22 2d 2d 22  ay, if a.** "--"
9ae0: 20 63 6f 6d 6d 65 6e 74 20 6f 63 63 75 72 73 20   comment occurs 
9af0: 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
9b00: 65 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  e statement, the
9b10: 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 77 6f 6e 27   comment.** won'
9b20: 74 20 63 6f 6e 73 75 6d 65 20 74 68 65 20 73 65  t consume the se
9b30: 6d 69 63 6f 6c 6f 6e 20 74 65 72 6d 69 6e 61 74  micolon terminat
9b40: 6f 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  or..*/.static in
9b50: 74 20 72 75 6e 5f 74 61 62 6c 65 5f 64 75 6d 70  t run_table_dump
9b60: 5f 71 75 65 72 79 28 0a 20 20 53 68 65 6c 6c 53  _query(.  ShellS
9b70: 74 61 74 65 20 2a 70 2c 20 20 20 20 20 20 20 20  tate *p,        
9b80: 20 20 20 2f 2a 20 51 75 65 72 79 20 63 6f 6e 74     /* Query cont
9b90: 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ext */.  const c
9ba0: 68 61 72 20 2a 7a 53 65 6c 65 63 74 2c 20 20 20  har *zSelect,   
9bb0: 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74    /* SELECT stat
9bc0: 65 6d 65 6e 74 20 74 6f 20 65 78 74 72 61 63 74  ement to extract
9bd0: 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 63 6f   content */.  co
9be0: 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 72 73 74  nst char *zFirst
9bf0: 52 6f 77 20 20 20 20 2f 2a 20 50 72 69 6e 74 20  Row    /* Print 
9c00: 62 65 66 6f 72 65 20 66 69 72 73 74 20 72 6f 77  before first row
9c10: 2c 20 69 66 20 6e 6f 74 20 4e 55 4c 4c 20 2a 2f  , if not NULL */
9c20: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
9c30: 6d 74 20 2a 70 53 65 6c 65 63 74 3b 0a 20 20 69  mt *pSelect;.  i
9c40: 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 6e 52 65  nt rc;.  int nRe
9c50: 73 75 6c 74 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  sult;.  int i;. 
9c60: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a   const char *z;.
9c70: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
9c80: 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c  repare_v2(p->db,
9c90: 20 7a 53 65 6c 65 63 74 2c 20 2d 31 2c 20 26 70   zSelect, -1, &p
9ca0: 53 65 6c 65 63 74 2c 20 30 29 3b 0a 20 20 69 66  Select, 0);.  if
9cb0: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
9cc0: 7c 7c 20 21 70 53 65 6c 65 63 74 20 29 7b 0a 20  || !pSelect ){. 
9cd0: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
9ce0: 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 20 45 52  ->out, "/**** ER
9cf0: 52 4f 52 3a 20 28 25 64 29 20 25 73 20 2a 2a 2a  ROR: (%d) %s ***
9d00: 2a 2a 2f 5c 6e 22 2c 20 72 63 2c 0a 20 20 20 20  **/\n", rc,.    
9d10: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
9d20: 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62  te3_errmsg(p->db
9d30: 29 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26  ));.    if( (rc&
9d40: 30 78 66 66 29 21 3d 53 51 4c 49 54 45 5f 43 4f  0xff)!=SQLITE_CO
9d50: 52 52 55 50 54 20 29 20 70 2d 3e 6e 45 72 72 2b  RRUPT ) p->nErr+
9d60: 2b 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63  +;.    return rc
9d70: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
9d80: 69 74 65 33 5f 73 74 65 70 28 70 53 65 6c 65 63  ite3_step(pSelec
9d90: 74 29 3b 0a 20 20 6e 52 65 73 75 6c 74 20 3d 20  t);.  nResult = 
9da0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
9db0: 6f 75 6e 74 28 70 53 65 6c 65 63 74 29 3b 0a 20  ount(pSelect);. 
9dc0: 20 77 68 69 6c 65 28 20 72 63 3d 3d 53 51 4c 49   while( rc==SQLI
9dd0: 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 69 66  TE_ROW ){.    if
9de0: 28 20 7a 46 69 72 73 74 52 6f 77 20 29 7b 0a 20  ( zFirstRow ){. 
9df0: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
9e00: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a  (p->out, "%s", z
9e10: 46 69 72 73 74 52 6f 77 29 3b 0a 20 20 20 20 20  FirstRow);.     
9e20: 20 7a 46 69 72 73 74 52 6f 77 20 3d 20 30 3b 0a   zFirstRow = 0;.
9e30: 20 20 20 20 7d 0a 20 20 20 20 7a 20 3d 20 28 63      }.    z = (c
9e40: 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
9e50: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
9e60: 53 65 6c 65 63 74 2c 20 30 29 3b 0a 20 20 20 20  Select, 0);.    
9e70: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
9e80: 75 74 2c 20 22 25 73 22 2c 20 7a 29 3b 0a 20 20  ut, "%s", z);.  
9e90: 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 6e 52 65    for(i=1; i<nRe
9ea0: 73 75 6c 74 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  sult; i++){.    
9eb0: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
9ec0: 3e 6f 75 74 2c 20 22 2c 25 73 22 2c 20 73 71 6c  >out, ",%s", sql
9ed0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
9ee0: 28 70 53 65 6c 65 63 74 2c 20 69 29 29 3b 0a 20  (pSelect, i));. 
9ef0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 3d 3d     }.    if( z==
9f00: 30 20 29 20 7a 20 3d 20 22 22 3b 0a 20 20 20 20  0 ) z = "";.    
9f10: 77 68 69 6c 65 28 20 7a 5b 30 5d 20 26 26 20 28  while( z[0] && (
9f20: 7a 5b 30 5d 21 3d 27 2d 27 20 7c 7c 20 7a 5b 31  z[0]!='-' || z[1
9f30: 5d 21 3d 27 2d 27 29 20 29 20 7a 2b 2b 3b 0a 20  ]!='-') ) z++;. 
9f40: 20 20 20 69 66 28 20 7a 5b 30 5d 20 29 7b 0a 20     if( z[0] ){. 
9f50: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
9f60: 70 2d 3e 6f 75 74 2c 20 22 5c 6e 3b 5c 6e 22 29  p->out, "\n;\n")
9f70: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
9f80: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
9f90: 3e 6f 75 74 2c 20 22 3b 5c 6e 22 29 3b 0a 20 20  >out, ";\n");.  
9fa0: 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c    }.    rc = sql
9fb0: 69 74 65 33 5f 73 74 65 70 28 70 53 65 6c 65 63  ite3_step(pSelec
9fc0: 74 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  t);.  }.  rc = s
9fd0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
9fe0: 70 53 65 6c 65 63 74 29 3b 0a 20 20 69 66 28 20  pSelect);.  if( 
9ff0: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
a000: 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
a010: 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 20  (p->out, "/**** 
a020: 45 52 52 4f 52 3a 20 28 25 64 29 20 25 73 20 2a  ERROR: (%d) %s *
a030: 2a 2a 2a 2a 2f 5c 6e 22 2c 20 72 63 2c 0a 20 20  ****/\n", rc,.  
a040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
a050: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e  lite3_errmsg(p->
a060: 64 62 29 29 3b 0a 20 20 20 20 69 66 28 20 28 72  db));.    if( (r
a070: 63 26 30 78 66 66 29 21 3d 53 51 4c 49 54 45 5f  c&0xff)!=SQLITE_
a080: 43 4f 52 52 55 50 54 20 29 20 70 2d 3e 6e 45 72  CORRUPT ) p->nEr
a090: 72 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  r++;.  }.  retur
a0a0: 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41  n rc;.}../*.** A
a0b0: 6c 6c 6f 63 61 74 65 20 73 70 61 63 65 20 61 6e  llocate space an
a0c0: 64 20 73 61 76 65 20 6f 66 66 20 63 75 72 72 65  d save off curre
a0d0: 6e 74 20 65 72 72 6f 72 20 73 74 72 69 6e 67 2e  nt error string.
a0e0: 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20  .*/.static char 
a0f0: 2a 73 61 76 65 5f 65 72 72 5f 6d 73 67 28 0a 20  *save_err_msg(. 
a100: 20 73 71 6c 69 74 65 33 20 2a 64 62 20 20 20 20   sqlite3 *db    
a110: 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
a120: 61 73 65 20 74 6f 20 71 75 65 72 79 20 2a 2f 0a  ase to query */.
a130: 29 7b 0a 20 20 69 6e 74 20 6e 45 72 72 4d 73 67  ){.  int nErrMsg
a140: 20 3d 20 31 2b 73 74 72 6c 65 6e 33 30 28 73 71   = 1+strlen30(sq
a150: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29  lite3_errmsg(db)
a160: 29 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  );.  char *zErrM
a170: 73 67 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c  sg = sqlite3_mal
a180: 6c 6f 63 36 34 28 6e 45 72 72 4d 73 67 29 3b 0a  loc64(nErrMsg);.
a190: 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b    if( zErrMsg ){
a1a0: 0a 20 20 20 20 6d 65 6d 63 70 79 28 7a 45 72 72  .    memcpy(zErr
a1b0: 4d 73 67 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  Msg, sqlite3_err
a1c0: 6d 73 67 28 64 62 29 2c 20 6e 45 72 72 4d 73 67  msg(db), nErrMsg
a1d0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
a1e0: 7a 45 72 72 4d 73 67 3b 0a 7d 0a 0a 23 69 66 64  zErrMsg;.}..#ifd
a1f0: 65 66 20 5f 5f 6c 69 6e 75 78 5f 5f 0a 2f 2a 0a  ef __linux__./*.
a200: 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 69  ** Attempt to di
a210: 73 70 6c 61 79 20 49 2f 4f 20 73 74 61 74 73 20  splay I/O stats 
a220: 6f 6e 20 4c 69 6e 75 78 20 75 73 69 6e 67 20 2f  on Linux using /
a230: 70 72 6f 63 2f 50 49 44 2f 69 6f 0a 2a 2f 0a 73  proc/PID/io.*/.s
a240: 74 61 74 69 63 20 76 6f 69 64 20 64 69 73 70 6c  tatic void displ
a250: 61 79 4c 69 6e 75 78 49 6f 53 74 61 74 73 28 46  ayLinuxIoStats(F
a260: 49 4c 45 20 2a 6f 75 74 29 7b 0a 20 20 46 49 4c  ILE *out){.  FIL
a270: 45 20 2a 69 6e 3b 0a 20 20 63 68 61 72 20 7a 5b  E *in;.  char z[
a280: 32 30 30 5d 3b 0a 20 20 73 71 6c 69 74 65 33 5f  200];.  sqlite3_
a290: 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28  snprintf(sizeof(
a2a0: 7a 29 2c 20 7a 2c 20 22 2f 70 72 6f 63 2f 25 64  z), z, "/proc/%d
a2b0: 2f 69 6f 22 2c 20 67 65 74 70 69 64 28 29 29 3b  /io", getpid());
a2c0: 0a 20 20 69 6e 20 3d 20 66 6f 70 65 6e 28 7a 2c  .  in = fopen(z,
a2d0: 20 22 72 62 22 29 3b 0a 20 20 69 66 28 20 69 6e   "rb");.  if( in
a2e0: 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ==0 ) return;.  
a2f0: 77 68 69 6c 65 28 20 66 67 65 74 73 28 7a 2c 20  while( fgets(z, 
a300: 73 69 7a 65 6f 66 28 7a 29 2c 20 69 6e 29 21 3d  sizeof(z), in)!=
a310: 30 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20  0 ){.    static 
a320: 63 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 0a 20  const struct {. 
a330: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
a340: 2a 7a 50 61 74 74 65 72 6e 3b 0a 20 20 20 20 20  *zPattern;.     
a350: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 65   const char *zDe
a360: 73 63 3b 0a 20 20 20 20 7d 20 61 54 72 61 6e 73  sc;.    } aTrans
a370: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22  [] = {.      { "
a380: 72 63 68 61 72 3a 20 22 2c 20 20 20 20 20 20 20  rchar: ",       
a390: 20 20 20 20 20 20 20 20 20 20 20 22 42 79 74 65             "Byte
a3a0: 73 20 72 65 63 65 69 76 65 64 20 62 79 20 72 65  s received by re
a3b0: 61 64 28 29 3a 22 20 7d 2c 0a 20 20 20 20 20 20  ad():" },.      
a3c0: 7b 20 22 77 63 68 61 72 3a 20 22 2c 20 20 20 20  { "wchar: ",    
a3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42                "B
a3e0: 79 74 65 73 20 73 65 6e 74 20 74 6f 20 77 72 69  ytes sent to wri
a3f0: 74 65 28 29 3a 22 20 20 20 20 7d 2c 0a 20 20 20  te():"    },.   
a400: 20 20 20 7b 20 22 73 79 73 63 72 3a 20 22 2c 20     { "syscr: ", 
a410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a420: 20 22 52 65 61 64 28 29 20 73 79 73 74 65 6d 20   "Read() system 
a430: 63 61 6c 6c 73 3a 22 20 20 20 20 20 20 7d 2c 0a  calls:"      },.
a440: 20 20 20 20 20 20 7b 20 22 73 79 73 63 77 3a 20        { "syscw: 
a450: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
a460: 20 20 20 20 22 57 72 69 74 65 28 29 20 73 79 73      "Write() sys
a470: 74 65 6d 20 63 61 6c 6c 73 3a 22 20 20 20 20 20  tem calls:"     
a480: 7d 2c 0a 20 20 20 20 20 20 7b 20 22 72 65 61 64  },.      { "read
a490: 5f 62 79 74 65 73 3a 20 22 2c 20 20 20 20 20 20  _bytes: ",      
a4a0: 20 20 20 20 20 20 20 22 42 79 74 65 73 20 72 65         "Bytes re
a4b0: 61 64 20 66 72 6f 6d 20 73 74 6f 72 61 67 65 3a  ad from storage:
a4c0: 22 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 77  "  },.      { "w
a4d0: 72 69 74 65 5f 62 79 74 65 73 3a 20 22 2c 20 20  rite_bytes: ",  
a4e0: 20 20 20 20 20 20 20 20 20 20 22 42 79 74 65 73            "Bytes
a4f0: 20 77 72 69 74 74 65 6e 20 74 6f 20 73 74 6f 72   written to stor
a500: 61 67 65 3a 22 20 7d 2c 0a 20 20 20 20 20 20 7b  age:" },.      {
a510: 20 22 63 61 6e 63 65 6c 6c 65 64 5f 77 72 69 74   "cancelled_writ
a520: 65 5f 62 79 74 65 73 3a 20 22 2c 20 20 22 43 61  e_bytes: ",  "Ca
a530: 6e 63 65 6c 6c 65 64 20 77 72 69 74 65 20 62 79  ncelled write by
a540: 74 65 73 3a 22 20 20 20 20 7d 2c 0a 20 20 20 20  tes:"    },.    
a550: 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  };.    int i;.  
a560: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72    for(i=0; i<Arr
a570: 61 79 53 69 7a 65 28 61 54 72 61 6e 73 29 3b 20  aySize(aTrans); 
a580: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  i++){.      int 
a590: 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28  n = (int)strlen(
a5a0: 61 54 72 61 6e 73 5b 69 5d 2e 7a 50 61 74 74 65  aTrans[i].zPatte
a5b0: 72 6e 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73  rn);.      if( s
a5c0: 74 72 6e 63 6d 70 28 61 54 72 61 6e 73 5b 69 5d  trncmp(aTrans[i]
a5d0: 2e 7a 50 61 74 74 65 72 6e 2c 20 7a 2c 20 6e 29  .zPattern, z, n)
a5e0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 75  ==0 ){.        u
a5f0: 74 66 38 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20  tf8_printf(out, 
a600: 22 25 2d 33 36 73 20 25 73 22 2c 20 61 54 72 61  "%-36s %s", aTra
a610: 6e 73 5b 69 5d 2e 7a 44 65 73 63 2c 20 26 7a 5b  ns[i].zDesc, &z[
a620: 6e 5d 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65  n]);.        bre
a630: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
a640: 7d 0a 20 20 7d 0a 20 20 66 63 6c 6f 73 65 28 69  }.  }.  fclose(i
a650: 6e 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f  n);.}.#endif.../
a660: 2a 0a 2a 2a 20 44 69 73 70 6c 61 79 20 6d 65 6d  *.** Display mem
a670: 6f 72 79 20 73 74 61 74 73 2e 0a 2a 2f 0a 73 74  ory stats..*/.st
a680: 61 74 69 63 20 69 6e 74 20 64 69 73 70 6c 61 79  atic int display
a690: 5f 73 74 61 74 73 28 0a 20 20 73 71 6c 69 74 65  _stats(.  sqlite
a6a0: 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20  3 *db,          
a6b0: 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
a6c0: 65 20 74 6f 20 71 75 65 72 79 20 2a 2f 0a 20 20  e to query */.  
a6d0: 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 41 72 67  ShellState *pArg
a6e0: 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50  ,           /* P
a6f0: 6f 69 6e 74 65 72 20 74 6f 20 53 68 65 6c 6c 53  ointer to ShellS
a700: 74 61 74 65 20 2a 2f 0a 20 20 69 6e 74 20 62 52  tate */.  int bR
a710: 65 73 65 74 20 20 20 20 20 20 20 20 20 20 20 20  eset            
a720: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
a730: 20 72 65 73 65 74 20 74 68 65 20 73 74 61 74 73   reset the stats
a740: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 43 75   */.){.  int iCu
a750: 72 3b 0a 20 20 69 6e 74 20 69 48 69 77 74 72 3b  r;.  int iHiwtr;
a760: 0a 0a 20 20 69 66 28 20 70 41 72 67 20 26 26 20  ..  if( pArg && 
a770: 70 41 72 67 2d 3e 6f 75 74 20 29 7b 0a 0a 20 20  pArg->out ){..  
a780: 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72 20    iHiwtr = iCur 
a790: 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65  = -1;.    sqlite
a7a0: 33 5f 73 74 61 74 75 73 28 53 51 4c 49 54 45 5f  3_status(SQLITE_
a7b0: 53 54 41 54 55 53 5f 4d 45 4d 4f 52 59 5f 55 53  STATUS_MEMORY_US
a7c0: 45 44 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77  ED, &iCur, &iHiw
a7d0: 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20  tr, bReset);.   
a7e0: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67   raw_printf(pArg
a7f0: 2d 3e 6f 75 74 2c 0a 20 20 20 20 20 20 20 20 20  ->out,.         
a800: 20 20 20 22 4d 65 6d 6f 72 79 20 55 73 65 64 3a     "Memory Used:
a810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a820: 20 20 20 20 20 20 20 20 20 25 64 20 28 6d 61 78           %d (max
a830: 20 25 64 29 20 62 79 74 65 73 5c 6e 22 2c 0a 20   %d) bytes\n",. 
a840: 20 20 20 20 20 20 20 20 20 20 20 69 43 75 72 2c             iCur,
a850: 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20 69 48   iHiwtr);.    iH
a860: 69 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31  iwtr = iCur = -1
a870: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74  ;.    sqlite3_st
a880: 61 74 75 73 28 53 51 4c 49 54 45 5f 53 54 41 54  atus(SQLITE_STAT
a890: 55 53 5f 4d 41 4c 4c 4f 43 5f 43 4f 55 4e 54 2c  US_MALLOC_COUNT,
a8a0: 20 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c   &iCur, &iHiwtr,
a8b0: 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61   bReset);.    ra
a8c0: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
a8d0: 75 74 2c 20 22 4e 75 6d 62 65 72 20 6f 66 20 4f  ut, "Number of O
a8e0: 75 74 73 74 61 6e 64 69 6e 67 20 41 6c 6c 6f 63  utstanding Alloc
a8f0: 61 74 69 6f 6e 73 3a 20 20 20 25 64 20 28 6d 61  ations:   %d (ma
a900: 78 20 25 64 29 5c 6e 22 2c 0a 20 20 20 20 20 20  x %d)\n",.      
a910: 20 20 20 20 20 20 69 43 75 72 2c 20 69 48 69 77        iCur, iHiw
a920: 74 72 29 3b 0a 20 20 20 20 69 66 28 20 70 41 72  tr);.    if( pAr
a930: 67 2d 3e 73 68 65 6c 6c 46 6c 67 73 20 26 20 53  g->shellFlgs & S
a940: 48 46 4c 47 5f 50 61 67 65 63 61 63 68 65 20 29  HFLG_Pagecache )
a950: 7b 0a 20 20 20 20 20 20 69 48 69 77 74 72 20 3d  {.      iHiwtr =
a960: 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20   iCur = -1;.    
a970: 20 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73    sqlite3_status
a980: 28 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50  (SQLITE_STATUS_P
a990: 41 47 45 43 41 43 48 45 5f 55 53 45 44 2c 20 26  AGECACHE_USED, &
a9a0: 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62  iCur, &iHiwtr, b
a9b0: 52 65 73 65 74 29 3b 0a 20 20 20 20 20 20 72 61  Reset);.      ra
a9c0: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
a9d0: 75 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ut,.            
a9e0: 20 20 22 4e 75 6d 62 65 72 20 6f 66 20 50 63 61    "Number of Pca
a9f0: 63 68 65 20 50 61 67 65 73 20 55 73 65 64 3a 20  che Pages Used: 
aa00: 20 20 20 20 20 20 20 20 25 64 20 28 6d 61 78 20          %d (max 
aa10: 25 64 29 20 70 61 67 65 73 5c 6e 22 2c 0a 20 20  %d) pages\n",.  
aa20: 20 20 20 20 20 20 20 20 20 20 20 20 69 43 75 72              iCur
aa30: 2c 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20 7d  , iHiwtr);.    }
aa40: 0a 20 20 20 20 69 48 69 77 74 72 20 3d 20 69 43  .    iHiwtr = iC
aa50: 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c  ur = -1;.    sql
aa60: 69 74 65 33 5f 73 74 61 74 75 73 28 53 51 4c 49  ite3_status(SQLI
aa70: 54 45 5f 53 54 41 54 55 53 5f 50 41 47 45 43 41  TE_STATUS_PAGECA
aa80: 43 48 45 5f 4f 56 45 52 46 4c 4f 57 2c 20 26 69  CHE_OVERFLOW, &i
aa90: 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52  Cur, &iHiwtr, bR
aaa0: 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70  eset);.    raw_p
aab0: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
aac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 75  .            "Nu
aad0: 6d 62 65 72 20 6f 66 20 50 63 61 63 68 65 20 4f  mber of Pcache O
aae0: 76 65 72 66 6c 6f 77 20 42 79 74 65 73 3a 20 20  verflow Bytes:  
aaf0: 20 20 20 25 64 20 28 6d 61 78 20 25 64 29 20 62     %d (max %d) b
ab00: 79 74 65 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20  ytes\n",.       
ab10: 20 20 20 20 20 69 43 75 72 2c 20 69 48 69 77 74       iCur, iHiwt
ab20: 72 29 3b 0a 20 20 20 20 69 66 28 20 70 41 72 67  r);.    if( pArg
ab30: 2d 3e 73 68 65 6c 6c 46 6c 67 73 20 26 20 53 48  ->shellFlgs & SH
ab40: 46 4c 47 5f 53 63 72 61 74 63 68 20 29 7b 0a 20  FLG_Scratch ){. 
ab50: 20 20 20 20 20 69 48 69 77 74 72 20 3d 20 69 43       iHiwtr = iC
ab60: 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 73  ur = -1;.      s
ab70: 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 53 51  qlite3_status(SQ
ab80: 4c 49 54 45 5f 53 54 41 54 55 53 5f 53 43 52 41  LITE_STATUS_SCRA
ab90: 54 43 48 5f 55 53 45 44 2c 20 26 69 43 75 72 2c  TCH_USED, &iCur,
aba0: 20 26 69 48 69 77 74 72 2c 20 62 52 65 73 65 74   &iHiwtr, bReset
abb0: 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  );.      raw_pri
abc0: 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 0a 20  ntf(pArg->out,. 
abd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 75               "Nu
abe0: 6d 62 65 72 20 6f 66 20 53 63 72 61 74 63 68 20  mber of Scratch 
abf0: 41 6c 6c 6f 63 61 74 69 6f 6e 73 20 55 73 65 64  Allocations Used
ac00: 3a 20 20 25 64 20 28 6d 61 78 20 25 64 29 5c 6e  :  %d (max %d)\n
ac10: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
ac20: 20 69 43 75 72 2c 20 69 48 69 77 74 72 29 3b 0a   iCur, iHiwtr);.
ac30: 20 20 20 20 7d 0a 20 20 20 20 69 48 69 77 74 72      }.    iHiwtr
ac40: 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20   = iCur = -1;.  
ac50: 20 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73    sqlite3_status
ac60: 28 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 53  (SQLITE_STATUS_S
ac70: 43 52 41 54 43 48 5f 4f 56 45 52 46 4c 4f 57 2c  CRATCH_OVERFLOW,
ac80: 20 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c   &iCur, &iHiwtr,
ac90: 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61   bReset);.    ra
aca0: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
acb0: 75 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ut,.            
acc0: 22 4e 75 6d 62 65 72 20 6f 66 20 53 63 72 61 74  "Number of Scrat
acd0: 63 68 20 4f 76 65 72 66 6c 6f 77 20 42 79 74 65  ch Overflow Byte
ace0: 73 3a 20 20 20 20 25 64 20 28 6d 61 78 20 25 64  s:    %d (max %d
acf0: 29 20 62 79 74 65 73 5c 6e 22 2c 0a 20 20 20 20  ) bytes\n",.    
ad00: 20 20 20 20 20 20 20 20 69 43 75 72 2c 20 69 48          iCur, iH
ad10: 69 77 74 72 29 3b 0a 20 20 20 20 69 48 69 77 74  iwtr);.    iHiwt
ad20: 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20  r = iCur = -1;. 
ad30: 20 20 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75     sqlite3_statu
ad40: 73 28 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f  s(SQLITE_STATUS_
ad50: 4d 41 4c 4c 4f 43 5f 53 49 5a 45 2c 20 26 69 43  MALLOC_SIZE, &iC
ad60: 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52 65  ur, &iHiwtr, bRe
ad70: 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70 72  set);.    raw_pr
ad80: 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20  intf(pArg->out, 
ad90: 22 4c 61 72 67 65 73 74 20 41 6c 6c 6f 63 61 74  "Largest Allocat
ada0: 69 6f 6e 3a 20 20 20 20 20 20 20 20 20 20 20 20  ion:            
adb0: 20 20 20 20 20 20 25 64 20 62 79 74 65 73 5c 6e        %d bytes\n
adc0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ",.            i
add0: 48 69 77 74 72 29 3b 0a 20 20 20 20 69 48 69 77  Hiwtr);.    iHiw
ade0: 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a  tr = iCur = -1;.
adf0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 61 74      sqlite3_stat
ae00: 75 73 28 53 51 4c 49 54 45 5f 53 54 41 54 55 53  us(SQLITE_STATUS
ae10: 5f 50 41 47 45 43 41 43 48 45 5f 53 49 5a 45 2c  _PAGECACHE_SIZE,
ae20: 20 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c   &iCur, &iHiwtr,
ae30: 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61   bReset);.    ra
ae40: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
ae50: 75 74 2c 20 22 4c 61 72 67 65 73 74 20 50 63 61  ut, "Largest Pca
ae60: 63 68 65 20 41 6c 6c 6f 63 61 74 69 6f 6e 3a 20  che Allocation: 
ae70: 20 20 20 20 20 20 20 20 20 20 25 64 20 62 79 74            %d byt
ae80: 65 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  es\n",.         
ae90: 20 20 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20     iHiwtr);.    
aea0: 69 48 69 77 74 72 20 3d 20 69 43 75 72 20 3d 20  iHiwtr = iCur = 
aeb0: 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  -1;.    sqlite3_
aec0: 73 74 61 74 75 73 28 53 51 4c 49 54 45 5f 53 54  status(SQLITE_ST
aed0: 41 54 55 53 5f 53 43 52 41 54 43 48 5f 53 49 5a  ATUS_SCRATCH_SIZ
aee0: 45 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77 74  E, &iCur, &iHiwt
aef0: 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20  r, bReset);.    
af00: 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  raw_printf(pArg-
af10: 3e 6f 75 74 2c 20 22 4c 61 72 67 65 73 74 20 53  >out, "Largest S
af20: 63 72 61 74 63 68 20 41 6c 6c 6f 63 61 74 69 6f  cratch Allocatio
af30: 6e 3a 20 20 20 20 20 20 20 20 20 20 25 64 20 62  n:          %d b
af40: 79 74 65 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20  ytes\n",.       
af50: 20 20 20 20 20 69 48 69 77 74 72 29 3b 0a 23 69       iHiwtr);.#i
af60: 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53  fdef YYTRACKMAXS
af70: 54 41 43 4b 44 45 50 54 48 0a 20 20 20 20 69 48  TACKDEPTH.    iH
af80: 69 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31  iwtr = iCur = -1
af90: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74  ;.    sqlite3_st
afa0: 61 74 75 73 28 53 51 4c 49 54 45 5f 53 54 41 54  atus(SQLITE_STAT
afb0: 55 53 5f 50 41 52 53 45 52 5f 53 54 41 43 4b 2c  US_PARSER_STACK,
afc0: 20 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c   &iCur, &iHiwtr,
afd0: 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61   bReset);.    ra
afe0: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
aff0: 75 74 2c 20 22 44 65 65 70 65 73 74 20 50 61 72  ut, "Deepest Par
b000: 73 65 72 20 53 74 61 63 6b 3a 20 20 20 20 20 20  ser Stack:      
b010: 20 20 20 20 20 20 20 20 20 20 25 64 20 28 6d 61            %d (ma
b020: 78 20 25 64 29 5c 6e 22 2c 0a 20 20 20 20 20 20  x %d)\n",.      
b030: 20 20 20 20 20 20 69 43 75 72 2c 20 69 48 69 77        iCur, iHiw
b040: 74 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a  tr);.#endif.  }.
b050: 0a 20 20 69 66 28 20 70 41 72 67 20 26 26 20 70  .  if( pArg && p
b060: 41 72 67 2d 3e 6f 75 74 20 26 26 20 64 62 20 29  Arg->out && db )
b070: 7b 0a 20 20 20 20 69 66 28 20 70 41 72 67 2d 3e  {.    if( pArg->
b080: 73 68 65 6c 6c 46 6c 67 73 20 26 20 53 48 46 4c  shellFlgs & SHFL
b090: 47 5f 4c 6f 6f 6b 61 73 69 64 65 20 29 7b 0a 20  G_Lookaside ){. 
b0a0: 20 20 20 20 20 69 48 69 77 74 72 20 3d 20 69 43       iHiwtr = iC
b0b0: 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 73  ur = -1;.      s
b0c0: 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73  qlite3_db_status
b0d0: 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54  (db, SQLITE_DBST
b0e0: 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 55  ATUS_LOOKASIDE_U
b0f0: 53 45 44 2c 0a 20 20 20 20 20 20 20 20 20 20 20  SED,.           
b100: 20 20 20 20 20 20 20 20 20 20 20 20 20 26 69 43               &iC
b110: 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52 65  ur, &iHiwtr, bRe
b120: 73 65 74 29 3b 0a 20 20 20 20 20 20 72 61 77 5f  set);.      raw_
b130: 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74  printf(pArg->out
b140: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
b150: 22 4c 6f 6f 6b 61 73 69 64 65 20 53 6c 6f 74 73  "Lookaside Slots
b160: 20 55 73 65 64 3a 20 20 20 20 20 20 20 20 20 20   Used:          
b170: 20 20 20 20 20 20 25 64 20 28 6d 61 78 20 25 64        %d (max %d
b180: 29 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  )\n",.          
b190: 20 20 20 20 69 43 75 72 2c 20 69 48 69 77 74 72      iCur, iHiwtr
b1a0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
b1b0: 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c 20 53  _db_status(db, S
b1c0: 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 4c  QLITE_DBSTATUS_L
b1d0: 4f 4f 4b 41 53 49 44 45 5f 48 49 54 2c 0a 20 20  OOKASIDE_HIT,.  
b1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1f0: 20 20 20 20 20 20 26 69 43 75 72 2c 20 26 69 48        &iCur, &iH
b200: 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20  iwtr, bReset);. 
b210: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
b220: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 53 75 63 63  pArg->out, "Succ
b230: 65 73 73 66 75 6c 20 6c 6f 6f 6b 61 73 69 64 65  essful lookaside
b240: 20 61 74 74 65 6d 70 74 73 3a 20 20 20 20 20 20   attempts:      
b250: 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20   %d\n",.        
b260: 20 20 20 20 20 20 69 48 69 77 74 72 29 3b 0a 20        iHiwtr);. 
b270: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f       sqlite3_db_
b280: 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54  status(db, SQLIT
b290: 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41  E_DBSTATUS_LOOKA
b2a0: 53 49 44 45 5f 4d 49 53 53 5f 53 49 5a 45 2c 0a  SIDE_MISS_SIZE,.
b2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2c0: 20 20 20 20 20 20 20 20 26 69 43 75 72 2c 20 26          &iCur, &
b2d0: 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b  iHiwtr, bReset);
b2e0: 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
b2f0: 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4c 6f  f(pArg->out, "Lo
b300: 6f 6b 61 73 69 64 65 20 66 61 69 6c 75 72 65 73  okaside failures
b310: 20 64 75 65 20 74 6f 20 73 69 7a 65 3a 20 20 20   due to size:   
b320: 20 20 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20     %d\n",.      
b330: 20 20 20 20 20 20 20 20 69 48 69 77 74 72 29 3b          iHiwtr);
b340: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64  .      sqlite3_d
b350: 62 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c  b_status(db, SQL
b360: 49 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f  ITE_DBSTATUS_LOO
b370: 4b 41 53 49 44 45 5f 4d 49 53 53 5f 46 55 4c 4c  KASIDE_MISS_FULL
b380: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
b390: 20 20 20 20 20 20 20 20 20 20 26 69 43 75 72 2c            &iCur,
b3a0: 20 26 69 48 69 77 74 72 2c 20 62 52 65 73 65 74   &iHiwtr, bReset
b3b0: 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  );.      raw_pri
b3c0: 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22  ntf(pArg->out, "
b3d0: 4c 6f 6f 6b 61 73 69 64 65 20 66 61 69 6c 75 72  Lookaside failur
b3e0: 65 73 20 64 75 65 20 74 6f 20 4f 4f 4d 3a 20 20  es due to OOM:  
b3f0: 20 20 20 20 20 25 64 5c 6e 22 2c 0a 20 20 20 20       %d\n",.    
b400: 20 20 20 20 20 20 20 20 20 20 69 48 69 77 74 72            iHiwtr
b410: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 48 69  );.    }.    iHi
b420: 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b  wtr = iCur = -1;
b430: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  .    sqlite3_db_
b440: 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54  status(db, SQLIT
b450: 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45  E_DBSTATUS_CACHE
b460: 5f 55 53 45 44 2c 20 26 69 43 75 72 2c 20 26 69  _USED, &iCur, &i
b470: 48 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a  Hiwtr, bReset);.
b480: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
b490: 41 72 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65 72  Arg->out, "Pager
b4a0: 20 48 65 61 70 20 55 73 61 67 65 3a 20 20 20 20   Heap Usage:    
b4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4c0: 25 64 20 62 79 74 65 73 5c 6e 22 2c 0a 20 20 20  %d bytes\n",.   
b4d0: 20 20 20 20 20 20 20 20 20 69 43 75 72 29 3b 0a           iCur);.
b4e0: 20 20 20 20 69 48 69 77 74 72 20 3d 20 69 43 75      iHiwtr = iCu
b4f0: 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69  r = -1;.    sqli
b500: 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62  te3_db_status(db
b510: 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55  , SQLITE_DBSTATU
b520: 53 5f 43 41 43 48 45 5f 48 49 54 2c 20 26 69 43  S_CACHE_HIT, &iC
b530: 75 72 2c 20 26 69 48 69 77 74 72 2c 20 31 29 3b  ur, &iHiwtr, 1);
b540: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
b550: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65  pArg->out, "Page
b560: 20 63 61 63 68 65 20 68 69 74 73 3a 20 20 20 20   cache hits:    
b570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b580: 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20   %d\n", iCur);. 
b590: 20 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72     iHiwtr = iCur
b5a0: 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74   = -1;.    sqlit
b5b0: 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c  e3_db_status(db,
b5c0: 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53   SQLITE_DBSTATUS
b5d0: 5f 43 41 43 48 45 5f 4d 49 53 53 2c 20 26 69 43  _CACHE_MISS, &iC
b5e0: 75 72 2c 20 26 69 48 69 77 74 72 2c 20 31 29 3b  ur, &iHiwtr, 1);
b5f0: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
b600: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 50 61 67 65  pArg->out, "Page
b610: 20 63 61 63 68 65 20 6d 69 73 73 65 73 3a 20 20   cache misses:  
b620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b630: 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20   %d\n", iCur);. 
b640: 20 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72     iHiwtr = iCur
b650: 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74   = -1;.    sqlit
b660: 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c  e3_db_status(db,
b670: 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53   SQLITE_DBSTATUS
b680: 5f 43 41 43 48 45 5f 57 52 49 54 45 2c 20 26 69  _CACHE_WRITE, &i
b690: 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 31 29  Cur, &iHiwtr, 1)
b6a0: 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  ;.    raw_printf
b6b0: 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 50 61 67  (pArg->out, "Pag
b6c0: 65 20 63 61 63 68 65 20 77 72 69 74 65 73 3a 20  e cache writes: 
b6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6e0: 20 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a    %d\n", iCur);.
b6f0: 20 20 20 20 69 48 69 77 74 72 20 3d 20 69 43 75      iHiwtr = iCu
b700: 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69  r = -1;.    sqli
b710: 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62  te3_db_status(db
b720: 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55  , SQLITE_DBSTATU
b730: 53 5f 53 43 48 45 4d 41 5f 55 53 45 44 2c 20 26  S_SCHEMA_USED, &
b740: 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62  iCur, &iHiwtr, b
b750: 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f  Reset);.    raw_
b760: 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74  printf(pArg->out
b770: 2c 20 22 53 63 68 65 6d 61 20 48 65 61 70 20 55  , "Schema Heap U
b780: 73 61 67 65 3a 20 20 20 20 20 20 20 20 20 20 20  sage:           
b790: 20 20 20 20 20 20 20 20 25 64 20 62 79 74 65 73          %d bytes
b7a0: 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
b7b0: 20 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69 77   iCur);.    iHiw
b7c0: 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a  tr = iCur = -1;.
b7d0: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73      sqlite3_db_s
b7e0: 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45  tatus(db, SQLITE
b7f0: 5f 44 42 53 54 41 54 55 53 5f 53 54 4d 54 5f 55  _DBSTATUS_STMT_U
b800: 53 45 44 2c 20 26 69 43 75 72 2c 20 26 69 48 69  SED, &iCur, &iHi
b810: 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20  wtr, bReset);.  
b820: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72    raw_printf(pAr
b830: 67 2d 3e 6f 75 74 2c 20 22 53 74 61 74 65 6d 65  g->out, "Stateme
b840: 6e 74 20 48 65 61 70 2f 4c 6f 6f 6b 61 73 69 64  nt Heap/Lookasid
b850: 65 20 55 73 61 67 65 3a 20 20 20 20 20 20 25 64  e Usage:      %d
b860: 20 62 79 74 65 73 5c 6e 22 2c 0a 20 20 20 20 20   bytes\n",.     
b870: 20 20 20 20 20 20 20 69 43 75 72 29 3b 0a 20 20         iCur);.  
b880: 7d 0a 0a 20 20 69 66 28 20 70 41 72 67 20 26 26  }..  if( pArg &&
b890: 20 70 41 72 67 2d 3e 6f 75 74 20 26 26 20 64 62   pArg->out && db
b8a0: 20 26 26 20 70 41 72 67 2d 3e 70 53 74 6d 74 20   && pArg->pStmt 
b8b0: 29 7b 0a 20 20 20 20 69 43 75 72 20 3d 20 73 71  ){.    iCur = sq
b8c0: 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75  lite3_stmt_statu
b8d0: 73 28 70 41 72 67 2d 3e 70 53 74 6d 74 2c 20 53  s(pArg->pStmt, S
b8e0: 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
b8f0: 5f 46 55 4c 4c 53 43 41 4e 5f 53 54 45 50 2c 0a  _FULLSCAN_STEP,.
b900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
b920: 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f  Reset);.    raw_
b930: 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74  printf(pArg->out
b940: 2c 20 22 46 75 6c 6c 73 63 61 6e 20 53 74 65 70  , "Fullscan Step
b950: 73 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s:              
b960: 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69          %d\n", i
b970: 43 75 72 29 3b 0a 20 20 20 20 69 43 75 72 20 3d  Cur);.    iCur =
b980: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74   sqlite3_stmt_st
b990: 61 74 75 73 28 70 41 72 67 2d 3e 70 53 74 6d 74  atus(pArg->pStmt
b9a0: 2c 20 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41  , SQLITE_STMTSTA
b9b0: 54 55 53 5f 53 4f 52 54 2c 20 62 52 65 73 65 74  TUS_SORT, bReset
b9c0: 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74  );.    raw_print
b9d0: 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 53 6f  f(pArg->out, "So
b9e0: 72 74 20 4f 70 65 72 61 74 69 6f 6e 73 3a 20 20  rt Operations:  
b9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba00: 20 20 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b     %d\n", iCur);
ba10: 0a 20 20 20 20 69 43 75 72 20 3d 20 73 71 6c 69  .    iCur = sqli
ba20: 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28  te3_stmt_status(
ba30: 70 41 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51 4c  pArg->pStmt, SQL
ba40: 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 41  ITE_STMTSTATUS_A
ba50: 55 54 4f 49 4e 44 45 58 2c 62 52 65 73 65 74 29  UTOINDEX,bReset)
ba60: 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  ;.    raw_printf
ba70: 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 41 75 74  (pArg->out, "Aut
ba80: 6f 69 6e 64 65 78 20 49 6e 73 65 72 74 73 3a 20  oindex Inserts: 
ba90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
baa0: 20 20 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a    %d\n", iCur);.
bab0: 20 20 20 20 69 43 75 72 20 3d 20 73 71 6c 69 74      iCur = sqlit
bac0: 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 70  e3_stmt_status(p
bad0: 41 72 67 2d 3e 70 53 74 6d 74 2c 20 53 51 4c 49  Arg->pStmt, SQLI
bae0: 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d  TE_STMTSTATUS_VM
baf0: 5f 53 54 45 50 2c 20 62 52 65 73 65 74 29 3b 0a  _STEP, bReset);.
bb00: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
bb10: 41 72 67 2d 3e 6f 75 74 2c 20 22 56 69 72 74 75  Arg->out, "Virtu
bb20: 61 6c 20 4d 61 63 68 69 6e 65 20 53 74 65 70 73  al Machine Steps
bb30: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
bb40: 25 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20  %d\n", iCur);.  
bb50: 7d 0a 0a 23 69 66 64 65 66 20 5f 5f 6c 69 6e 75  }..#ifdef __linu
bb60: 78 5f 5f 0a 20 20 64 69 73 70 6c 61 79 4c 69 6e  x__.  displayLin
bb70: 75 78 49 6f 53 74 61 74 73 28 70 41 72 67 2d 3e  uxIoStats(pArg->
bb80: 6f 75 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  out);.#endif..  
bb90: 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 6d 6f 76 65  /* Do not remove
bba0: 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 72 65   this machine re
bbb0: 61 64 61 62 6c 65 20 63 6f 6d 6d 65 6e 74 3a 20  adable comment: 
bbc0: 65 78 74 72 61 2d 73 74 61 74 73 2d 6f 75 74 70  extra-stats-outp
bbd0: 75 74 2d 68 65 72 65 20 2a 2f 0a 0a 20 20 72 65  ut-here */..  re
bbe0: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
bbf0: 20 44 69 73 70 6c 61 79 20 73 63 61 6e 20 73 74   Display scan st
bc00: 61 74 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ats..*/.static v
bc10: 6f 69 64 20 64 69 73 70 6c 61 79 5f 73 63 61 6e  oid display_scan
bc20: 73 74 61 74 73 28 0a 20 20 73 71 6c 69 74 65 33  stats(.  sqlite3
bc30: 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20   *db,           
bc40: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
bc50: 62 61 73 65 20 74 6f 20 71 75 65 72 79 20 2a 2f  base to query */
bc60: 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  .  ShellState *p
bc70: 41 72 67 20 20 20 20 20 20 20 20 20 20 20 20 20  Arg             
bc80: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
bc90: 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 2f 0a 29   ShellState */.)
bca0: 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  {.#ifndef SQLITE
bcb0: 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
bcc0: 4e 53 54 41 54 55 53 0a 20 20 55 4e 55 53 45 44  NSTATUS.  UNUSED
bcd0: 5f 50 41 52 41 4d 45 54 45 52 28 64 62 29 3b 0a  _PARAMETER(db);.
bce0: 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54    UNUSED_PARAMET
bcf0: 45 52 28 70 41 72 67 29 3b 0a 23 65 6c 73 65 0a  ER(pArg);.#else.
bd00: 20 20 69 6e 74 20 69 2c 20 6b 2c 20 6e 2c 20 6d    int i, k, n, m
bd10: 78 3b 0a 20 20 72 61 77 5f 70 72 69 6e 74 66 28  x;.  raw_printf(
bd20: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 2d 2d 2d 2d  pArg->out, "----
bd30: 2d 2d 2d 2d 20 73 63 61 6e 73 74 61 74 73 20 2d  ---- scanstats -
bd40: 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 29 3b 0a 20 20 6d  -------\n");.  m
bd50: 78 20 3d 20 30 3b 0a 20 20 66 6f 72 28 6b 3d 30  x = 0;.  for(k=0
bd60: 3b 20 6b 3c 3d 6d 78 3b 20 6b 2b 2b 29 7b 0a 20  ; k<=mx; k++){. 
bd70: 20 20 20 64 6f 75 62 6c 65 20 72 45 73 74 4c 6f     double rEstLo
bd80: 6f 70 20 3d 20 31 2e 30 3b 0a 20 20 20 20 66 6f  op = 1.0;.    fo
bd90: 72 28 69 3d 6e 3d 30 3b 20 31 3b 20 69 2b 2b 29  r(i=n=0; 1; i++)
bda0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
bdb0: 73 74 6d 74 20 2a 70 20 3d 20 70 41 72 67 2d 3e  stmt *p = pArg->
bdc0: 70 53 74 6d 74 3b 0a 20 20 20 20 20 20 73 71 6c  pStmt;.      sql
bdd0: 69 74 65 33 5f 69 6e 74 36 34 20 6e 4c 6f 6f 70  ite3_int64 nLoop
bde0: 2c 20 6e 56 69 73 69 74 3b 0a 20 20 20 20 20 20  , nVisit;.      
bdf0: 64 6f 75 62 6c 65 20 72 45 73 74 3b 0a 20 20 20  double rEst;.   
be00: 20 20 20 69 6e 74 20 69 53 69 64 3b 0a 20 20 20     int iSid;.   
be10: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
be20: 45 78 70 6c 61 69 6e 3b 0a 20 20 20 20 20 20 69  Explain;.      i
be30: 66 28 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f  f( sqlite3_stmt_
be40: 73 63 61 6e 73 74 61 74 75 73 28 70 2c 20 69 2c  scanstatus(p, i,
be50: 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41 54   SQLITE_SCANSTAT
be60: 5f 4e 4c 4f 4f 50 2c 20 28 76 6f 69 64 2a 29 26  _NLOOP, (void*)&
be70: 6e 4c 6f 6f 70 29 20 29 7b 0a 20 20 20 20 20 20  nLoop) ){.      
be80: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
be90: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
bea0: 74 6d 74 5f 73 63 61 6e 73 74 61 74 75 73 28 70  tmt_scanstatus(p
beb0: 2c 20 69 2c 20 53 51 4c 49 54 45 5f 53 43 41 4e  , i, SQLITE_SCAN
bec0: 53 54 41 54 5f 53 45 4c 45 43 54 49 44 2c 20 28  STAT_SELECTID, (
bed0: 76 6f 69 64 2a 29 26 69 53 69 64 29 3b 0a 20 20  void*)&iSid);.  
bee0: 20 20 20 20 69 66 28 20 69 53 69 64 3e 6d 78 20      if( iSid>mx 
bef0: 29 20 6d 78 20 3d 20 69 53 69 64 3b 0a 20 20 20  ) mx = iSid;.   
bf00: 20 20 20 69 66 28 20 69 53 69 64 21 3d 6b 20 29     if( iSid!=k )
bf10: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
bf20: 20 69 66 28 20 6e 3d 3d 30 20 29 7b 0a 20 20 20   if( n==0 ){.   
bf30: 20 20 20 20 20 72 45 73 74 4c 6f 6f 70 20 3d 20       rEstLoop = 
bf40: 28 64 6f 75 62 6c 65 29 6e 4c 6f 6f 70 3b 0a 20  (double)nLoop;. 
bf50: 20 20 20 20 20 20 20 69 66 28 20 6b 3e 30 20 29         if( k>0 )
bf60: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67   raw_printf(pArg
bf70: 2d 3e 6f 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d  ->out, "--------
bf80: 20 73 75 62 71 75 65 72 79 20 25 64 20 2d 2d 2d   subquery %d ---
bf90: 2d 2d 2d 2d 5c 6e 22 2c 20 6b 29 3b 0a 20 20 20  ----\n", k);.   
bfa0: 20 20 20 7d 0a 20 20 20 20 20 20 6e 2b 2b 3b 0a     }.      n++;.
bfb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74        sqlite3_st
bfc0: 6d 74 5f 73 63 61 6e 73 74 61 74 75 73 28 70 2c  mt_scanstatus(p,
bfd0: 20 69 2c 20 53 51 4c 49 54 45 5f 53 43 41 4e 53   i, SQLITE_SCANS
bfe0: 54 41 54 5f 4e 56 49 53 49 54 2c 20 28 76 6f 69  TAT_NVISIT, (voi
bff0: 64 2a 29 26 6e 56 69 73 69 74 29 3b 0a 20 20 20  d*)&nVisit);.   
c000: 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f     sqlite3_stmt_
c010: 73 63 61 6e 73 74 61 74 75 73 28 70 2c 20 69 2c  scanstatus(p, i,
c020: 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41 54   SQLITE_SCANSTAT
c030: 5f 45 53 54 2c 20 28 76 6f 69 64 2a 29 26 72 45  _EST, (void*)&rE
c040: 73 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  st);.      sqlit
c050: 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74  e3_stmt_scanstat
c060: 75 73 28 70 2c 20 69 2c 20 53 51 4c 49 54 45 5f  us(p, i, SQLITE_
c070: 53 43 41 4e 53 54 41 54 5f 45 58 50 4c 41 49 4e  SCANSTAT_EXPLAIN
c080: 2c 20 28 76 6f 69 64 2a 29 26 7a 45 78 70 6c 61  , (void*)&zExpla
c090: 69 6e 29 3b 0a 20 20 20 20 20 20 75 74 66 38 5f  in);.      utf8_
c0a0: 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74  printf(pArg->out
c0b0: 2c 20 22 4c 6f 6f 70 20 25 32 64 3a 20 25 73 5c  , "Loop %2d: %s\
c0c0: 6e 22 2c 20 6e 2c 20 7a 45 78 70 6c 61 69 6e 29  n", n, zExplain)
c0d0: 3b 0a 20 20 20 20 20 20 72 45 73 74 4c 6f 6f 70  ;.      rEstLoop
c0e0: 20 2a 3d 20 72 45 73 74 3b 0a 20 20 20 20 20 20   *= rEst;.      
c0f0: 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  raw_printf(pArg-
c100: 3e 6f 75 74 2c 0a 20 20 20 20 20 20 20 20 20 20  >out,.          
c110: 22 20 20 20 20 20 20 20 20 20 6e 4c 6f 6f 70 3d  "         nLoop=
c120: 25 2d 38 6c 6c 64 20 6e 52 6f 77 3d 25 2d 38 6c  %-8lld nRow=%-8l
c130: 6c 64 20 65 73 74 52 6f 77 3d 25 2d 38 6c 6c 64  ld estRow=%-8lld
c140: 20 65 73 74 52 6f 77 2f 4c 6f 6f 70 3d 25 2d 38   estRow/Loop=%-8
c150: 67 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  g\n",.          
c160: 6e 4c 6f 6f 70 2c 20 6e 56 69 73 69 74 2c 20 28  nLoop, nVisit, (
c170: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 28 72  sqlite3_int64)(r
c180: 45 73 74 4c 6f 6f 70 2b 30 2e 35 29 2c 20 72 45  EstLoop+0.5), rE
c190: 73 74 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  st.      );.    
c1a0: 7d 0a 20 20 7d 0a 20 20 72 61 77 5f 70 72 69 6e  }.  }.  raw_prin
c1b0: 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 2d  tf(pArg->out, "-
c1c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
c1d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 29 3b 0a  ----------\n");.
c1e0: 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  #endif.}../*.** 
c1f0: 50 61 72 61 6d 65 74 65 72 20 61 7a 41 72 72 61  Parameter azArra
c200: 79 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 7a 65  y points to a ze
c210: 72 6f 2d 74 65 72 6d 69 6e 61 74 65 64 20 61 72  ro-terminated ar
c220: 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 2e 20  ray of strings. 
c230: 7a 53 74 72 0a 2a 2a 20 70 6f 69 6e 74 73 20 74  zStr.** points t
c240: 6f 20 61 20 73 69 6e 67 6c 65 20 6e 75 6c 2d 74  o a single nul-t
c250: 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69 6e 67  erminated string
c260: 2e 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72  . Return non-zer
c270: 6f 20 69 66 20 7a 53 74 72 0a 2a 2a 20 69 73 20  o if zStr.** is 
c280: 65 71 75 61 6c 2c 20 61 63 63 6f 72 64 69 6e 67  equal, according
c290: 20 74 6f 20 73 74 72 63 6d 70 28 29 2c 20 74 6f   to strcmp(), to
c2a0: 20 61 6e 79 20 6f 66 20 74 68 65 20 73 74 72 69   any of the stri
c2b0: 6e 67 73 20 69 6e 20 74 68 65 20 61 72 72 61 79  ngs in the array
c2c0: 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20  ..** Otherwise, 
c2d0: 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0a 2a 2f 0a  return zero..*/.
c2e0: 73 74 61 74 69 63 20 69 6e 74 20 73 74 72 5f 69  static int str_i
c2f0: 6e 5f 61 72 72 61 79 28 63 6f 6e 73 74 20 63 68  n_array(const ch
c300: 61 72 20 2a 7a 53 74 72 2c 20 63 6f 6e 73 74 20  ar *zStr, const 
c310: 63 68 61 72 20 2a 2a 61 7a 41 72 72 61 79 29 7b  char **azArray){
c320: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28  .  int i;.  for(
c330: 69 3d 30 3b 20 61 7a 41 72 72 61 79 5b 69 5d 3b  i=0; azArray[i];
c340: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 30   i++){.    if( 0
c350: 3d 3d 73 74 72 63 6d 70 28 7a 53 74 72 2c 20 61  ==strcmp(zStr, a
c360: 7a 41 72 72 61 79 5b 69 5d 29 20 29 20 72 65 74  zArray[i]) ) ret
c370: 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74  urn 1;.  }.  ret
c380: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
c390: 49 66 20 63 6f 6d 70 69 6c 65 64 20 73 74 61 74  If compiled stat
c3a0: 65 6d 65 6e 74 20 70 53 71 6c 20 61 70 70 65 61  ement pSql appea
c3b0: 72 73 20 74 6f 20 62 65 20 61 6e 20 45 58 50 4c  rs to be an EXPL
c3c0: 41 49 4e 20 73 74 61 74 65 6d 65 6e 74 2c 20 61  AIN statement, a
c3d0: 6c 6c 6f 63 61 74 65 0a 2a 2a 20 61 6e 64 20 70  llocate.** and p
c3e0: 6f 70 75 6c 61 74 65 20 74 68 65 20 53 68 65 6c  opulate the Shel
c3f0: 6c 53 74 61 74 65 2e 61 69 49 6e 64 65 6e 74 5b  lState.aiIndent[
c400: 5d 20 61 72 72 61 79 20 77 69 74 68 20 74 68 65  ] array with the
c410: 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 73 70   number of.** sp
c420: 61 63 65 73 20 65 61 63 68 20 6f 70 63 6f 64 65  aces each opcode
c430: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
c440: 74 65 64 20 62 65 66 6f 72 65 20 69 74 20 69 73  ted before it is
c450: 20 6f 75 74 70 75 74 2e 0a 2a 2a 0a 2a 2a 20 54   output..**.** T
c460: 68 65 20 69 6e 64 65 6e 74 69 6e 67 20 72 75 6c  he indenting rul
c470: 65 73 20 61 72 65 3a 0a 2a 2a 0a 2a 2a 20 20 20  es are:.**.**   
c480: 20 20 2a 20 46 6f 72 20 65 61 63 68 20 22 4e 65    * For each "Ne
c490: 78 74 22 2c 20 22 50 72 65 76 22 2c 20 22 56 4e  xt", "Prev", "VN
c4a0: 65 78 74 22 20 6f 72 20 22 56 50 72 65 76 22 20  ext" or "VPrev" 
c4b0: 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 69 6e 64  instruction, ind
c4c0: 65 6e 74 0a 2a 2a 20 20 20 20 20 20 20 61 6c 6c  ent.**       all
c4d0: 20 6f 70 63 6f 64 65 73 20 74 68 61 74 20 6f 63   opcodes that oc
c4e0: 63 75 72 20 62 65 74 77 65 65 6e 20 74 68 65 20  cur between the 
c4f0: 70 32 20 6a 75 6d 70 20 64 65 73 74 69 6e 61 74  p2 jump destinat
c500: 69 6f 6e 20 61 6e 64 20 74 68 65 20 6f 70 63 6f  ion and the opco
c510: 64 65 0a 2a 2a 20 20 20 20 20 20 20 69 74 73 65  de.**       itse
c520: 6c 66 20 62 79 20 32 20 73 70 61 63 65 73 2e 0a  lf by 2 spaces..
c530: 2a 2a 0a 2a 2a 20 20 20 20 20 2a 20 46 6f 72 20  **.**     * For 
c540: 65 61 63 68 20 22 47 6f 74 6f 22 2c 20 69 66 20  each "Goto", if 
c550: 74 68 65 20 6a 75 6d 70 20 64 65 73 74 69 6e 61  the jump destina
c560: 74 69 6f 6e 20 69 73 20 65 61 72 6c 69 65 72 20  tion is earlier 
c570: 69 6e 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a  in the program.*
c580: 2a 20 20 20 20 20 20 20 61 6e 64 20 65 6e 64 73  *       and ends
c590: 20 6f 6e 20 6f 6e 65 20 6f 66 3a 0a 2a 2a 20 20   on one of:.**  
c5a0: 20 20 20 20 20 20 20 20 59 69 65 6c 64 20 20 53          Yield  S
c5b0: 65 65 6b 47 74 20 20 53 65 65 6b 4c 74 20 20 52  eekGt  SeekLt  R
c5c0: 6f 77 53 65 74 52 65 61 64 20 20 52 65 77 69 6e  owSetRead  Rewin
c5d0: 64 0a 2a 2a 20 20 20 20 20 20 20 6f 72 20 69 66  d.**       or if
c5e0: 20 74 68 65 20 50 31 20 70 61 72 61 6d 65 74 65   the P1 paramete
c5f0: 72 20 69 73 20 6f 6e 65 20 69 6e 73 74 65 61 64  r is one instead
c600: 20 6f 66 20 7a 65 72 6f 2c 0a 2a 2a 20 20 20 20   of zero,.**    
c610: 20 20 20 74 68 65 6e 20 69 6e 64 65 6e 74 20 61     then indent a
c620: 6c 6c 20 6f 70 63 6f 64 65 73 20 62 65 74 77 65  ll opcodes betwe
c630: 65 6e 20 74 68 65 20 65 61 72 6c 69 65 72 20 69  en the earlier i
c640: 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 20 20  nstruction.**   
c650: 20 20 20 20 61 6e 64 20 22 47 6f 74 6f 22 20 62      and "Goto" b
c660: 79 20 32 20 73 70 61 63 65 73 2e 0a 2a 2f 0a 73  y 2 spaces..*/.s
c670: 74 61 74 69 63 20 76 6f 69 64 20 65 78 70 6c 61  tatic void expla
c680: 69 6e 5f 64 61 74 61 5f 70 72 65 70 61 72 65 28  in_data_prepare(
c690: 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 73  ShellState *p, s
c6a0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 71  qlite3_stmt *pSq
c6b0: 6c 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  l){.  const char
c6c0: 20 2a 7a 53 71 6c 3b 20 20 20 20 20 20 20 20 20   *zSql;         
c6d0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 65 78        /* The tex
c6e0: 74 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61  t of the SQL sta
c6f0: 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73  tement */.  cons
c700: 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20  t char *z;      
c710: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
c720: 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20  sed to check if 
c730: 74 68 69 73 20 69 73 20 61 6e 20 45 58 50 4c 41  this is an EXPLA
c740: 49 4e 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 62 59  IN */.  int *abY
c750: 69 65 6c 64 20 3d 20 30 3b 20 20 20 20 20 20 20  ield = 0;       
c760: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
c770: 69 66 20 6f 70 20 69 73 20 61 6e 20 4f 50 5f 59  if op is an OP_Y
c780: 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  ield */.  int nA
c790: 6c 6c 6f 63 20 3d 20 30 3b 20 20 20 20 20 20 20  lloc = 0;       
c7a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
c7b0: 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 70  ocated size of p
c7c0: 2d 3e 61 69 49 6e 64 65 6e 74 5b 5d 2c 20 61 62  ->aiIndent[], ab
c7d0: 59 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 69  Yield */.  int i
c7e0: 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Op;             
c7f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
c800: 64 65 78 20 6f 66 20 6f 70 65 72 61 74 69 6f 6e  dex of operation
c810: 20 69 6e 20 70 2d 3e 61 69 49 6e 64 65 6e 74 5b   in p->aiIndent[
c820: 5d 20 2a 2f 0a 0a 20 20 63 6f 6e 73 74 20 63 68  ] */..  const ch
c830: 61 72 20 2a 61 7a 4e 65 78 74 5b 5d 20 3d 20 7b  ar *azNext[] = {
c840: 20 22 4e 65 78 74 22 2c 20 22 50 72 65 76 22 2c   "Next", "Prev",
c850: 20 22 56 50 72 65 76 22 2c 20 22 56 4e 65 78 74   "VPrev", "VNext
c860: 22 2c 20 22 53 6f 72 74 65 72 4e 65 78 74 22 2c  ", "SorterNext",
c870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c880: 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 65 78              "Nex
c890: 74 49 66 4f 70 65 6e 22 2c 20 22 50 72 65 76 49  tIfOpen", "PrevI
c8a0: 66 4f 70 65 6e 22 2c 20 30 20 7d 3b 0a 20 20 63  fOpen", 0 };.  c
c8b0: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 59 69 65  onst char *azYie
c8c0: 6c 64 5b 5d 20 3d 20 7b 20 22 59 69 65 6c 64 22  ld[] = { "Yield"
c8d0: 2c 20 22 53 65 65 6b 4c 54 22 2c 20 22 53 65 65  , "SeekLT", "See
c8e0: 6b 47 54 22 2c 20 22 52 6f 77 53 65 74 52 65 61  kGT", "RowSetRea
c8f0: 64 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  d",.            
c900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c910: 22 52 65 77 69 6e 64 22 2c 20 30 20 7d 3b 0a 20  "Rewind", 0 };. 
c920: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 47   const char *azG
c930: 6f 74 6f 5b 5d 20 3d 20 7b 20 22 47 6f 74 6f 22  oto[] = { "Goto"
c940: 2c 20 30 20 7d 3b 0a 0a 20 20 2f 2a 20 54 72 79  , 0 };..  /* Try
c950: 20 74 6f 20 66 69 67 75 72 65 20 6f 75 74 20 69   to figure out i
c960: 66 20 74 68 69 73 20 69 73 20 72 65 61 6c 6c 79  f this is really
c970: 20 61 6e 20 45 58 50 4c 41 49 4e 20 73 74 61 74   an EXPLAIN stat
c980: 65 6d 65 6e 74 2e 20 49 66 20 74 68 69 73 0a 20  ement. If this. 
c990: 20 2a 2a 20 63 61 6e 6e 6f 74 20 62 65 20 76 65   ** cannot be ve
c9a0: 72 69 66 69 65 64 2c 20 72 65 74 75 72 6e 20 65  rified, return e
c9b0: 61 72 6c 79 2e 20 20 2a 2f 0a 20 20 69 66 28 20  arly.  */.  if( 
c9c0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
c9d0: 6f 75 6e 74 28 70 53 71 6c 29 21 3d 38 20 29 7b  ount(pSql)!=8 ){
c9e0: 0a 20 20 20 20 70 2d 3e 63 4d 6f 64 65 20 3d 20  .    p->cMode = 
c9f0: 70 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20 72 65 74  p->mode;.    ret
ca00: 75 72 6e 3b 0a 20 20 7d 0a 20 20 7a 53 71 6c 20  urn;.  }.  zSql 
ca10: 3d 20 73 71 6c 69 74 65 33 5f 73 71 6c 28 70 53  = sqlite3_sql(pS
ca20: 71 6c 29 3b 0a 20 20 69 66 28 20 7a 53 71 6c 3d  ql);.  if( zSql=
ca30: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 66  =0 ) return;.  f
ca40: 6f 72 28 7a 3d 7a 53 71 6c 3b 20 2a 7a 3d 3d 27  or(z=zSql; *z=='
ca50: 20 27 20 7c 7c 20 2a 7a 3d 3d 27 5c 74 27 20 7c   ' || *z=='\t' |
ca60: 7c 20 2a 7a 3d 3d 27 5c 6e 27 20 7c 7c 20 2a 7a  | *z=='\n' || *z
ca70: 3d 3d 27 5c 66 27 20 7c 7c 20 2a 7a 3d 3d 27 5c  =='\f' || *z=='\
ca80: 72 27 3b 20 7a 2b 2b 29 3b 0a 20 20 69 66 28 20  r'; z++);.  if( 
ca90: 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70  sqlite3_strnicmp
caa0: 28 7a 2c 20 22 65 78 70 6c 61 69 6e 22 2c 20 37  (z, "explain", 7
cab0: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 63 4d 6f 64  ) ){.    p->cMod
cac0: 65 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20 20  e = p->mode;.   
cad0: 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20   return;.  }..  
cae0: 66 6f 72 28 69 4f 70 3d 30 3b 20 53 51 4c 49 54  for(iOp=0; SQLIT
caf0: 45 5f 52 4f 57 3d 3d 73 71 6c 69 74 65 33 5f 73  E_ROW==sqlite3_s
cb00: 74 65 70 28 70 53 71 6c 29 3b 20 69 4f 70 2b 2b  tep(pSql); iOp++
cb10: 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  ){.    int i;.  
cb20: 20 20 69 6e 74 20 69 41 64 64 72 20 3d 20 73 71    int iAddr = sq
cb30: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
cb40: 28 70 53 71 6c 2c 20 30 29 3b 0a 20 20 20 20 63  (pSql, 0);.    c
cb50: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 20 3d  onst char *zOp =
cb60: 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
cb70: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
cb80: 74 28 70 53 71 6c 2c 20 31 29 3b 0a 0a 20 20 20  t(pSql, 1);..   
cb90: 20 2f 2a 20 53 65 74 20 70 32 20 74 6f 20 74 68   /* Set p2 to th
cba0: 65 20 50 32 20 66 69 65 6c 64 20 6f 66 20 74 68  e P2 field of th
cbb0: 65 20 63 75 72 72 65 6e 74 20 6f 70 63 6f 64 65  e current opcode
cbc0: 2e 20 54 68 65 6e 2c 20 61 73 73 75 6d 69 6e 67  . Then, assuming
cbd0: 20 74 68 61 74 0a 20 20 20 20 2a 2a 20 70 32 20   that.    ** p2 
cbe0: 69 73 20 61 6e 20 69 6e 73 74 72 75 63 74 69 6f  is an instructio
cbf0: 6e 20 61 64 64 72 65 73 73 2c 20 73 65 74 20 76  n address, set v
cc00: 61 72 69 61 62 6c 65 20 70 32 6f 70 20 74 6f 20  ariable p2op to 
cc10: 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 61  the index of tha
cc20: 74 0a 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63  t.    ** instruc
cc30: 74 69 6f 6e 20 69 6e 20 74 68 65 20 61 69 49 6e  tion in the aiIn
cc40: 64 65 6e 74 5b 5d 20 61 72 72 61 79 2e 20 70 32  dent[] array. p2
cc50: 20 61 6e 64 20 70 32 6f 70 20 6d 61 79 20 62 65   and p2op may be
cc60: 20 64 69 66 66 65 72 65 6e 74 20 69 66 0a 20 20   different if.  
cc70: 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74    ** the current
cc80: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
cc90: 70 61 72 74 20 6f 66 20 61 20 73 75 62 2d 70 72  part of a sub-pr
cca0: 6f 67 72 61 6d 20 67 65 6e 65 72 61 74 65 64 20  ogram generated 
ccb0: 62 79 20 61 6e 0a 20 20 20 20 2a 2a 20 53 51 4c  by an.    ** SQL
ccc0: 20 74 72 69 67 67 65 72 20 6f 72 20 66 6f 72 65   trigger or fore
ccd0: 69 67 6e 20 6b 65 79 2e 20 20 2a 2f 0a 20 20 20  ign key.  */.   
cce0: 20 69 6e 74 20 70 32 20 3d 20 73 71 6c 69 74 65   int p2 = sqlite
ccf0: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 71  3_column_int(pSq
cd00: 6c 2c 20 33 29 3b 0a 20 20 20 20 69 6e 74 20 70  l, 3);.    int p
cd10: 32 6f 70 20 3d 20 28 70 32 20 2b 20 28 69 4f 70  2op = (p2 + (iOp
cd20: 2d 69 41 64 64 72 29 29 3b 0a 0a 20 20 20 20 2f  -iAddr));..    /
cd30: 2a 20 47 72 6f 77 20 74 68 65 20 70 2d 3e 61 69  * Grow the p->ai
cd40: 49 6e 64 65 6e 74 20 61 72 72 61 79 20 61 73 20  Indent array as 
cd50: 72 65 71 75 69 72 65 64 20 2a 2f 0a 20 20 20 20  required */.    
cd60: 69 66 28 20 69 4f 70 3e 3d 6e 41 6c 6c 6f 63 20  if( iOp>=nAlloc 
cd70: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 69 4f 70  ){.      if( iOp
cd80: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ==0 ){.        /
cd90: 2a 20 44 6f 20 66 75 72 74 68 65 72 20 76 65 72  * Do further ver
cda0: 66 69 63 61 74 69 6f 6e 20 74 68 61 74 20 74 68  fication that th
cdb0: 69 73 20 69 73 20 65 78 70 6c 61 69 6e 20 6f 75  is is explain ou
cdc0: 74 70 75 74 2e 20 20 41 62 6f 72 74 20 69 66 0a  tput.  Abort if.
cdd0: 20 20 20 20 20 20 20 20 2a 2a 20 69 74 20 69 73          ** it is
cde0: 20 6e 6f 74 20 2a 2f 0a 20 20 20 20 20 20 20 20   not */.        
cdf0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
ce00: 72 20 2a 65 78 70 6c 61 69 6e 43 6f 6c 73 5b 5d  r *explainCols[]
ce10: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20   = {.           
ce20: 22 61 64 64 72 22 2c 20 22 6f 70 63 6f 64 65 22  "addr", "opcode"
ce30: 2c 20 22 70 31 22 2c 20 22 70 32 22 2c 20 22 70  , "p1", "p2", "p
ce40: 33 22 2c 20 22 70 34 22 2c 20 22 70 35 22 2c 20  3", "p4", "p5", 
ce50: 22 63 6f 6d 6d 65 6e 74 22 20 7d 3b 0a 20 20 20  "comment" };.   
ce60: 20 20 20 20 20 69 6e 74 20 6a 6a 3b 0a 20 20 20       int jj;.   
ce70: 20 20 20 20 20 66 6f 72 28 6a 6a 3d 30 3b 20 6a       for(jj=0; j
ce80: 6a 3c 41 72 72 61 79 53 69 7a 65 28 65 78 70 6c  j<ArraySize(expl
ce90: 61 69 6e 43 6f 6c 73 29 3b 20 6a 6a 2b 2b 29 7b  ainCols); jj++){
cea0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 73  .          if( s
ceb0: 74 72 63 6d 70 28 73 71 6c 69 74 65 33 5f 63 6f  trcmp(sqlite3_co
cec0: 6c 75 6d 6e 5f 6e 61 6d 65 28 70 53 71 6c 2c 6a  lumn_name(pSql,j
ced0: 6a 29 2c 65 78 70 6c 61 69 6e 43 6f 6c 73 5b 6a  j),explainCols[j
cee0: 6a 5d 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  j])!=0 ){.      
cef0: 20 20 20 20 20 20 70 2d 3e 63 4d 6f 64 65 20 3d        p->cMode =
cf00: 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20 20 20   p->mode;.      
cf10: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65        sqlite3_re
cf20: 73 65 74 28 70 53 71 6c 29 3b 0a 20 20 20 20 20  set(pSql);.     
cf30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20         return;. 
cf40: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
cf50: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
cf60: 20 20 20 6e 41 6c 6c 6f 63 20 2b 3d 20 31 30 30     nAlloc += 100
cf70: 3b 0a 20 20 20 20 20 20 70 2d 3e 61 69 49 6e 64  ;.      p->aiInd
cf80: 65 6e 74 20 3d 20 28 69 6e 74 2a 29 73 71 6c 69  ent = (int*)sqli
cf90: 74 65 33 5f 72 65 61 6c 6c 6f 63 36 34 28 70 2d  te3_realloc64(p-
cfa0: 3e 61 69 49 6e 64 65 6e 74 2c 20 6e 41 6c 6c 6f  >aiIndent, nAllo
cfb0: 63 2a 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0a  c*sizeof(int));.
cfc0: 20 20 20 20 20 20 61 62 59 69 65 6c 64 20 3d 20        abYield = 
cfd0: 28 69 6e 74 2a 29 73 71 6c 69 74 65 33 5f 72 65  (int*)sqlite3_re
cfe0: 61 6c 6c 6f 63 36 34 28 61 62 59 69 65 6c 64 2c  alloc64(abYield,
cff0: 20 6e 41 6c 6c 6f 63 2a 73 69 7a 65 6f 66 28 69   nAlloc*sizeof(i
d000: 6e 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  nt));.    }.    
d010: 61 62 59 69 65 6c 64 5b 69 4f 70 5d 20 3d 20 73  abYield[iOp] = s
d020: 74 72 5f 69 6e 5f 61 72 72 61 79 28 7a 4f 70 2c  tr_in_array(zOp,
d030: 20 61 7a 59 69 65 6c 64 29 3b 0a 20 20 20 20 70   azYield);.    p
d040: 2d 3e 61 69 49 6e 64 65 6e 74 5b 69 4f 70 5d 20  ->aiIndent[iOp] 
d050: 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 6e 49 6e 64  = 0;.    p->nInd
d060: 65 6e 74 20 3d 20 69 4f 70 2b 31 3b 0a 0a 20 20  ent = iOp+1;..  
d070: 20 20 69 66 28 20 73 74 72 5f 69 6e 5f 61 72 72    if( str_in_arr
d080: 61 79 28 7a 4f 70 2c 20 61 7a 4e 65 78 74 29 20  ay(zOp, azNext) 
d090: 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 70  ){.      for(i=p
d0a0: 32 6f 70 3b 20 69 3c 69 4f 70 3b 20 69 2b 2b 29  2op; i<iOp; i++)
d0b0: 20 70 2d 3e 61 69 49 6e 64 65 6e 74 5b 69 5d 20   p->aiIndent[i] 
d0c0: 2b 3d 20 32 3b 0a 20 20 20 20 7d 0a 20 20 20 20  += 2;.    }.    
d0d0: 69 66 28 20 73 74 72 5f 69 6e 5f 61 72 72 61 79  if( str_in_array
d0e0: 28 7a 4f 70 2c 20 61 7a 47 6f 74 6f 29 20 26 26  (zOp, azGoto) &&
d0f0: 20 70 32 6f 70 3c 70 2d 3e 6e 49 6e 64 65 6e 74   p2op<p->nIndent
d100: 0a 20 20 20 20 20 26 26 20 28 61 62 59 69 65 6c  .     && (abYiel
d110: 64 5b 70 32 6f 70 5d 20 7c 7c 20 73 71 6c 69 74  d[p2op] || sqlit
d120: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53  e3_column_int(pS
d130: 71 6c 2c 20 32 29 29 0a 20 20 20 20 29 7b 0a 20  ql, 2)).    ){. 
d140: 20 20 20 20 20 66 6f 72 28 69 3d 70 32 6f 70 3b       for(i=p2op;
d150: 20 69 3c 69 4f 70 3b 20 69 2b 2b 29 20 70 2d 3e   i<iOp; i++) p->
d160: 61 69 49 6e 64 65 6e 74 5b 69 5d 20 2b 3d 20 32  aiIndent[i] += 2
d170: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 70  ;.    }.  }..  p
d180: 2d 3e 69 49 6e 64 65 6e 74 20 3d 20 30 3b 0a 20  ->iIndent = 0;. 
d190: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 62   sqlite3_free(ab
d1a0: 59 69 65 6c 64 29 3b 0a 20 20 73 71 6c 69 74 65  Yield);.  sqlite
d1b0: 33 5f 72 65 73 65 74 28 70 53 71 6c 29 3b 0a 7d  3_reset(pSql);.}
d1c0: 0a 0a 2f 2a 0a 2a 2a 20 46 72 65 65 20 74 68 65  ../*.** Free the
d1d0: 20 61 72 72 61 79 20 61 6c 6c 6f 63 61 74 65 64   array allocated
d1e0: 20 62 79 20 65 78 70 6c 61 69 6e 5f 64 61 74 61   by explain_data
d1f0: 5f 70 72 65 70 61 72 65 28 29 2e 0a 2a 2f 0a 73  _prepare()..*/.s
d200: 74 61 74 69 63 20 76 6f 69 64 20 65 78 70 6c 61  tatic void expla
d210: 69 6e 5f 64 61 74 61 5f 64 65 6c 65 74 65 28 53  in_data_delete(S
d220: 68 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20  hellState *p){. 
d230: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 2d   sqlite3_free(p-
d240: 3e 61 69 49 6e 64 65 6e 74 29 3b 0a 20 20 70 2d  >aiIndent);.  p-
d250: 3e 61 69 49 6e 64 65 6e 74 20 3d 20 30 3b 0a 20  >aiIndent = 0;. 
d260: 20 70 2d 3e 6e 49 6e 64 65 6e 74 20 3d 20 30 3b   p->nIndent = 0;
d270: 0a 20 20 70 2d 3e 69 49 6e 64 65 6e 74 20 3d 20  .  p->iIndent = 
d280: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61  0;.}../*.** Disa
d290: 62 6c 65 20 61 6e 64 20 72 65 73 74 6f 72 65 20  ble and restore 
d2a0: 2e 77 68 65 72 65 74 72 61 63 65 20 61 6e 64 20  .wheretrace and 
d2b0: 2e 73 65 6c 65 63 74 74 72 61 63 65 20 73 65 74  .selecttrace set
d2c0: 74 69 6e 67 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  tings..*/.#if de
d2d0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
d2e0: 55 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  UG) && defined(S
d2f0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c  QLITE_ENABLE_SEL
d300: 45 43 54 54 52 41 43 45 29 0a 65 78 74 65 72 6e  ECTTRACE).extern
d310: 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65   int sqlite3Sele
d320: 63 74 54 72 61 63 65 3b 0a 73 74 61 74 69 63 20  ctTrace;.static 
d330: 69 6e 74 20 73 61 76 65 64 53 65 6c 65 63 74 54  int savedSelectT
d340: 72 61 63 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66  race;.#endif.#if
d350: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
d360: 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65  DEBUG) && define
d370: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
d380: 57 48 45 52 45 54 52 41 43 45 29 0a 65 78 74 65  WHERETRACE).exte
d390: 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 57 68  rn int sqlite3Wh
d3a0: 65 72 65 54 72 61 63 65 3b 0a 73 74 61 74 69 63  ereTrace;.static
d3b0: 20 69 6e 74 20 73 61 76 65 64 57 68 65 72 65 54   int savedWhereT
d3c0: 72 61 63 65 3b 0a 23 65 6e 64 69 66 0a 73 74 61  race;.#endif.sta
d3d0: 74 69 63 20 76 6f 69 64 20 64 69 73 61 62 6c 65  tic void disable
d3e0: 5f 64 65 62 75 67 5f 74 72 61 63 65 5f 6d 6f 64  _debug_trace_mod
d3f0: 65 73 28 76 6f 69 64 29 7b 0a 23 69 66 20 64 65  es(void){.#if de
d400: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
d410: 55 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  UG) && defined(S
d420: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c  QLITE_ENABLE_SEL
d430: 45 43 54 54 52 41 43 45 29 0a 20 20 73 61 76 65  ECTTRACE).  save
d440: 64 53 65 6c 65 63 74 54 72 61 63 65 20 3d 20 73  dSelectTrace = s
d450: 71 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63  qlite3SelectTrac
d460: 65 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 6c 65  e;.  sqlite3Sele
d470: 63 74 54 72 61 63 65 20 3d 20 30 3b 0a 23 65 6e  ctTrace = 0;.#en
d480: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
d490: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
d4a0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
d4b0: 45 4e 41 42 4c 45 5f 57 48 45 52 45 54 52 41 43  ENABLE_WHERETRAC
d4c0: 45 29 0a 20 20 73 61 76 65 64 57 68 65 72 65 54  E).  savedWhereT
d4d0: 72 61 63 65 20 3d 20 73 71 6c 69 74 65 33 57 68  race = sqlite3Wh
d4e0: 65 72 65 54 72 61 63 65 3b 0a 20 20 73 71 6c 69  ereTrace;.  sqli
d4f0: 74 65 33 57 68 65 72 65 54 72 61 63 65 20 3d 20  te3WhereTrace = 
d500: 30 3b 0a 23 65 6e 64 69 66 0a 7d 0a 73 74 61 74  0;.#endif.}.stat
d510: 69 63 20 76 6f 69 64 20 72 65 73 74 6f 72 65 5f  ic void restore_
d520: 64 65 62 75 67 5f 74 72 61 63 65 5f 6d 6f 64 65  debug_trace_mode
d530: 73 28 76 6f 69 64 29 7b 0a 23 69 66 20 64 65 66  s(void){.#if def
d540: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
d550: 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
d560: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45  LITE_ENABLE_SELE
d570: 43 54 54 52 41 43 45 29 0a 20 20 73 71 6c 69 74  CTTRACE).  sqlit
d580: 65 33 53 65 6c 65 63 74 54 72 61 63 65 20 3d 20  e3SelectTrace = 
d590: 73 61 76 65 64 53 65 6c 65 63 74 54 72 61 63 65  savedSelectTrace
d5a0: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
d5b0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
d5c0: 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
d5d0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 57 48 45 52  LITE_ENABLE_WHER
d5e0: 45 54 52 41 43 45 29 0a 20 20 73 71 6c 69 74 65  ETRACE).  sqlite
d5f0: 33 57 68 65 72 65 54 72 61 63 65 20 3d 20 73 61  3WhereTrace = sa
d600: 76 65 64 57 68 65 72 65 54 72 61 63 65 3b 0a 23  vedWhereTrace;.#
d610: 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  endif.}../*.** R
d620: 75 6e 20 61 20 70 72 65 70 61 72 65 64 20 73 74  un a prepared st
d630: 61 74 65 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69  atement.*/.stati
d640: 63 20 76 6f 69 64 20 65 78 65 63 5f 70 72 65 70  c void exec_prep
d650: 61 72 65 64 5f 73 74 6d 74 28 0a 20 20 53 68 65  ared_stmt(.  She
d660: 6c 6c 53 74 61 74 65 20 2a 70 41 72 67 2c 20 20  llState *pArg,  
d670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d690: 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 68 65 6c   Pointer to Shel
d6a0: 6c 53 74 61 74 65 20 2a 2f 0a 20 20 73 71 6c 69  lState */.  sqli
d6b0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
d6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d6e0: 53 74 61 74 6d 65 6e 74 20 74 6f 20 72 75 6e 20  Statment to run 
d6f0: 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 61 6c 6c  */.  int (*xCall
d700: 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  back)(void*,int,
d710: 63 68 61 72 2a 2a 2c 63 68 61 72 2a 2a 2c 69 6e  char**,char**,in
d720: 74 2a 29 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63  t*)   /* Callbac
d730: 6b 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b  k function */.){
d740: 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 2f 2a  .  int rc;..  /*
d750: 20 70 65 72 66 6f 72 6d 20 74 68 65 20 66 69 72   perform the fir
d760: 73 74 20 73 74 65 70 2e 20 20 74 68 69 73 20 77  st step.  this w
d770: 69 6c 6c 20 74 65 6c 6c 20 75 73 20 69 66 20 77  ill tell us if w
d780: 65 0a 20 20 2a 2a 20 68 61 76 65 20 61 20 72 65  e.  ** have a re
d790: 73 75 6c 74 20 73 65 74 20 6f 72 20 6e 6f 74 20  sult set or not 
d7a0: 61 6e 64 20 68 6f 77 20 77 69 64 65 20 69 74 20  and how wide it 
d7b0: 69 73 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20  is..  */.  rc = 
d7c0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74  sqlite3_step(pSt
d7d0: 6d 74 29 3b 0a 20 20 2f 2a 20 69 66 20 77 65 20  mt);.  /* if we 
d7e0: 68 61 76 65 20 61 20 72 65 73 75 6c 74 20 73 65  have a result se
d7f0: 74 2e 2e 2e 20 2a 2f 0a 20 20 69 66 28 20 53 51  t... */.  if( SQ
d800: 4c 49 54 45 5f 52 4f 57 20 3d 3d 20 72 63 20 29  LITE_ROW == rc )
d810: 7b 0a 20 20 20 20 2f 2a 20 69 66 20 77 65 20 68  {.    /* if we h
d820: 61 76 65 20 61 20 63 61 6c 6c 62 61 63 6b 2e 2e  ave a callback..
d830: 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 78 43 61  . */.    if( xCa
d840: 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20  llback ){.      
d850: 2f 2a 20 61 6c 6c 6f 63 61 74 65 20 73 70 61 63  /* allocate spac
d860: 65 20 66 6f 72 20 63 6f 6c 20 6e 61 6d 65 20 70  e for col name p
d870: 74 72 2c 20 76 61 6c 75 65 20 70 74 72 2c 20 61  tr, value ptr, a
d880: 6e 64 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 20  nd type */.     
d890: 20 69 6e 74 20 6e 43 6f 6c 20 3d 20 73 71 6c 69   int nCol = sqli
d8a0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
d8b0: 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 76  (pStmt);.      v
d8c0: 6f 69 64 20 2a 70 44 61 74 61 20 3d 20 73 71 6c  oid *pData = sql
d8d0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 33 2a  ite3_malloc64(3*
d8e0: 6e 43 6f 6c 2a 73 69 7a 65 6f 66 28 63 6f 6e 73  nCol*sizeof(cons
d8f0: 74 20 63 68 61 72 2a 29 20 2b 20 31 29 3b 0a 20  t char*) + 1);. 
d900: 20 20 20 20 20 69 66 28 20 21 70 44 61 74 61 20       if( !pData 
d910: 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
d920: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
d930: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
d940: 20 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 73     char **azCols
d950: 20 3d 20 28 63 68 61 72 20 2a 2a 29 70 44 61 74   = (char **)pDat
d960: 61 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 73  a;      /* Names
d970: 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d   of result colum
d980: 6e 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 63 68  ns */.        ch
d990: 61 72 20 2a 2a 61 7a 56 61 6c 73 20 3d 20 26 61  ar **azVals = &a
d9a0: 7a 43 6f 6c 73 5b 6e 43 6f 6c 5d 3b 20 20 20 20  zCols[nCol];    
d9b0: 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f     /* Results */
d9c0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 2a 61 69  .        int *ai
d9d0: 54 79 70 65 73 20 3d 20 28 69 6e 74 20 2a 29 26  Types = (int *)&
d9e0: 61 7a 56 61 6c 73 5b 6e 43 6f 6c 5d 3b 20 2f 2a  azVals[nCol]; /*
d9f0: 20 52 65 73 75 6c 74 20 74 79 70 65 73 20 2a 2f   Result types */
da00: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 2c 20  .        int i, 
da10: 78 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  x;.        asser
da20: 74 28 73 69 7a 65 6f 66 28 69 6e 74 29 20 3c 3d  t(sizeof(int) <=
da30: 20 73 69 7a 65 6f 66 28 63 68 61 72 20 2a 29 29   sizeof(char *))
da40: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 61 76  ;.        /* sav
da50: 65 20 6f 66 66 20 70 74 72 73 20 74 6f 20 63 6f  e off ptrs to co
da60: 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  lumn names */.  
da70: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
da80: 3c 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nCol; i++){.   
da90: 20 20 20 20 20 20 20 61 7a 43 6f 6c 73 5b 69 5d         azCols[i]
daa0: 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74   = (char *)sqlit
dab0: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 70  e3_column_name(p
dac0: 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20  Stmt, i);.      
dad0: 20 20 7d 0a 20 20 20 20 20 20 20 20 64 6f 7b 0a    }.        do{.
dae0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 65 78 74            /* ext
daf0: 72 61 63 74 20 74 68 65 20 64 61 74 61 20 61 6e  ract the data an
db00: 64 20 64 61 74 61 20 74 79 70 65 73 20 2a 2f 0a  d data types */.
db10: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d            for(i=
db20: 30 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b 29 7b  0; i<nCol; i++){
db30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 69 54  .            aiT
db40: 79 70 65 73 5b 69 5d 20 3d 20 78 20 3d 20 73 71  ypes[i] = x = sq
db50: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70  lite3_column_typ
db60: 65 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20  e(pStmt, i);.   
db70: 20 20 20 20 20 20 20 20 20 69 66 28 20 78 3d 3d           if( x==
db80: 53 51 4c 49 54 45 5f 42 4c 4f 42 20 26 26 20 70  SQLITE_BLOB && p
db90: 41 72 67 20 26 26 20 70 41 72 67 2d 3e 63 4d 6f  Arg && pArg->cMo
dba0: 64 65 3d 3d 4d 4f 44 45 5f 49 6e 73 65 72 74 20  de==MODE_Insert 
dbb0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ){.             
dbc0: 20 61 7a 56 61 6c 73 5b 69 5d 20 3d 20 22 22 3b   azVals[i] = "";
dbd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 65 6c  .            }el
dbe0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
dbf0: 20 20 61 7a 56 61 6c 73 5b 69 5d 20 3d 20 28 63    azVals[i] = (c
dc00: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  har*)sqlite3_col
dc10: 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20  umn_text(pStmt, 
dc20: 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  i);.            
dc30: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  }.            if
dc40: 28 20 21 61 7a 56 61 6c 73 5b 69 5d 20 26 26 20  ( !azVals[i] && 
dc50: 28 61 69 54 79 70 65 73 5b 69 5d 21 3d 53 51 4c  (aiTypes[i]!=SQL
dc60: 49 54 45 5f 4e 55 4c 4c 29 20 29 7b 0a 20 20 20  ITE_NULL) ){.   
dc70: 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
dc80: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
dc90: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
dca0: 6b 3b 20 2f 2a 20 66 72 6f 6d 20 66 6f 72 20 2a  k; /* from for *
dcb0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  /.            }.
dcc0: 20 20 20 20 20 20 20 20 20 20 7d 20 2f 2a 20 65            } /* e
dcd0: 6e 64 20 66 6f 72 20 2a 2f 0a 0a 20 20 20 20 20  nd for */..     
dce0: 20 20 20 20 20 2f 2a 20 69 66 20 64 61 74 61 20       /* if data 
dcf0: 61 6e 64 20 74 79 70 65 73 20 65 78 74 72 61 63  and types extrac
dd00: 74 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c 79  ted successfully
dd10: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ... */.         
dd20: 20 69 66 28 20 53 51 4c 49 54 45 5f 52 4f 57 20   if( SQLITE_ROW 
dd30: 3d 3d 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20  == rc ){.       
dd40: 20 20 20 20 20 2f 2a 20 63 61 6c 6c 20 74 68 65       /* call the
dd50: 20 73 75 70 70 6c 69 65 64 20 63 61 6c 6c 62 61   supplied callba
dd60: 63 6b 20 77 69 74 68 20 74 68 65 20 72 65 73 75  ck with the resu
dd70: 6c 74 20 72 6f 77 20 64 61 74 61 20 2a 2f 0a 20  lt row data */. 
dd80: 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 78             if( x
dd90: 43 61 6c 6c 62 61 63 6b 28 70 41 72 67 2c 20 6e  Callback(pArg, n
dda0: 43 6f 6c 2c 20 61 7a 56 61 6c 73 2c 20 61 7a 43  Col, azVals, azC
ddb0: 6f 6c 73 2c 20 61 69 54 79 70 65 73 29 20 29 7b  ols, aiTypes) ){
ddc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
ddd0: 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  c = SQLITE_ABORT
dde0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 65  ;.            }e
ddf0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
de00: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
de10: 73 74 65 70 28 70 53 74 6d 74 29 3b 0a 20 20 20  step(pStmt);.   
de20: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
de30: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
de40: 20 77 68 69 6c 65 28 20 53 51 4c 49 54 45 5f 52   while( SQLITE_R
de50: 4f 57 20 3d 3d 20 72 63 20 29 3b 0a 20 20 20 20  OW == rc );.    
de60: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
de70: 28 70 44 61 74 61 29 3b 0a 20 20 20 20 20 20 7d  (pData);.      }
de80: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
de90: 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 72 63    do{.        rc
dea0: 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28   = sqlite3_step(
deb0: 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 7d 20  pStmt);.      } 
dec0: 77 68 69 6c 65 28 20 72 63 20 3d 3d 20 53 51 4c  while( rc == SQL
ded0: 49 54 45 5f 52 4f 57 20 29 3b 0a 20 20 20 20 7d  ITE_ROW );.    }
dee0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78  .  }.}../*.** Ex
def0: 65 63 75 74 65 20 61 20 73 74 61 74 65 6d 65 6e  ecute a statemen
df00: 74 20 6f 72 20 73 65 74 20 6f 66 20 73 74 61 74  t or set of stat
df10: 65 6d 65 6e 74 73 2e 20 20 50 72 69 6e 74 0a 2a  ements.  Print.*
df20: 2a 20 61 6e 79 20 72 65 73 75 6c 74 20 72 6f 77  * any result row
df30: 73 2f 63 6f 6c 75 6d 6e 73 20 64 65 70 65 6e 64  s/columns depend
df40: 69 6e 67 20 6f 6e 20 74 68 65 20 63 75 72 72 65  ing on the curre
df50: 6e 74 20 6d 6f 64 65 0a 2a 2a 20 73 65 74 20 76  nt mode.** set v
df60: 69 61 20 74 68 65 20 73 75 70 70 6c 69 65 64 20  ia the supplied 
df70: 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 0a 2a 2a 20  callback..**.** 
df80: 54 68 69 73 20 69 73 20 76 65 72 79 20 73 69 6d  This is very sim
df90: 69 6c 61 72 20 74 6f 20 53 51 4c 69 74 65 27 73  ilar to SQLite's
dfa0: 20 62 75 69 6c 74 2d 69 6e 20 73 71 6c 69 74 65   built-in sqlite
dfb0: 33 5f 65 78 65 63 28 29 0a 2a 2a 20 66 75 6e 63  3_exec().** func
dfc0: 74 69 6f 6e 20 65 78 63 65 70 74 20 69 74 20 74  tion except it t
dfd0: 61 6b 65 73 20 61 20 73 6c 69 67 68 74 6c 79 20  akes a slightly 
dfe0: 64 69 66 66 65 72 65 6e 74 20 63 61 6c 6c 62 61  different callba
dff0: 63 6b 0a 2a 2a 20 61 6e 64 20 63 61 6c 6c 62 61  ck.** and callba
e000: 63 6b 20 64 61 74 61 20 61 72 67 75 6d 65 6e 74  ck data argument
e010: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
e020: 73 68 65 6c 6c 5f 65 78 65 63 28 0a 20 20 73 71  shell_exec(.  sq
e030: 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20  lite3 *db,      
e040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e050: 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 6f 70          /* An op
e060: 65 6e 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  en database */. 
e070: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71   const char *zSq
e080: 6c 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l,              
e090: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51             /* SQ
e0a0: 4c 20 74 6f 20 62 65 20 65 76 61 6c 75 61 74 65  L to be evaluate
e0b0: 64 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 61  d */.  int (*xCa
e0c0: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e  llback)(void*,in
e0d0: 74 2c 63 68 61 72 2a 2a 2c 63 68 61 72 2a 2a 2c  t,char**,char**,
e0e0: 69 6e 74 2a 29 2c 20 20 20 2f 2a 20 43 61 6c 6c  int*),   /* Call
e0f0: 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  back function */
e100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e120: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e130: 28 6e 6f 74 20 74 68 65 20 73 61 6d 65 20 61 73  (not the same as
e140: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 29 20 2a   sqlite3_exec) *
e150: 2f 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a  /.  ShellState *
e160: 70 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20  pArg,           
e170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e180: 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 68 65 6c   Pointer to Shel
e190: 6c 53 74 61 74 65 20 2a 2f 0a 20 20 63 68 61 72  lState */.  char
e1a0: 20 2a 2a 70 7a 45 72 72 4d 73 67 20 20 20 20 20   **pzErrMsg     
e1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1c0: 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d        /* Error m
e1d0: 73 67 20 77 72 69 74 74 65 6e 20 68 65 72 65 20  sg written here 
e1e0: 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  */.){.  sqlite3_
e1f0: 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 4e 55  stmt *pStmt = NU
e200: 4c 4c 3b 20 20 20 20 20 2f 2a 20 53 74 61 74 65  LL;     /* State
e210: 6d 65 6e 74 20 74 6f 20 65 78 65 63 75 74 65 2e  ment to execute.
e220: 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53   */.  int rc = S
e230: 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20  QLITE_OK;       
e240: 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20        /* Return 
e250: 43 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  Code */.  int rc
e260: 32 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  2;.  const char 
e270: 2a 7a 4c 65 66 74 6f 76 65 72 3b 20 20 20 20 20  *zLeftover;     
e280: 20 20 20 20 20 2f 2a 20 54 61 69 6c 20 6f 66 20       /* Tail of 
e290: 75 6e 70 72 6f 63 65 73 73 65 64 20 53 51 4c 20  unprocessed SQL 
e2a0: 2a 2f 0a 0a 20 20 69 66 28 20 70 7a 45 72 72 4d  */..  if( pzErrM
e2b0: 73 67 20 29 7b 0a 20 20 20 20 2a 70 7a 45 72 72  sg ){.    *pzErr
e2c0: 4d 73 67 20 3d 20 4e 55 4c 4c 3b 0a 20 20 7d 0a  Msg = NULL;.  }.
e2d0: 0a 20 20 77 68 69 6c 65 28 20 7a 53 71 6c 5b 30  .  while( zSql[0
e2e0: 5d 20 26 26 20 28 53 51 4c 49 54 45 5f 4f 4b 20  ] && (SQLITE_OK 
e2f0: 3d 3d 20 72 63 29 20 29 7b 0a 20 20 20 20 73 74  == rc) ){.    st
e300: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
e310: 2a 7a 53 74 6d 74 53 71 6c 3b 0a 20 20 20 20 72  *zStmtSql;.    r
e320: 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
e330: 61 72 65 5f 76 32 28 64 62 2c 20 7a 53 71 6c 2c  are_v2(db, zSql,
e340: 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 26 7a 4c   -1, &pStmt, &zL
e350: 65 66 74 6f 76 65 72 29 3b 0a 20 20 20 20 69 66  eftover);.    if
e360: 28 20 53 51 4c 49 54 45 5f 4f 4b 20 21 3d 20 72  ( SQLITE_OK != r
e370: 63 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  c ){.      if( p
e380: 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20  zErrMsg ){.     
e390: 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 73     *pzErrMsg = s
e3a0: 61 76 65 5f 65 72 72 5f 6d 73 67 28 64 62 29 3b  ave_err_msg(db);
e3b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
e3c0: 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21 70  se{.      if( !p
e3d0: 53 74 6d 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Stmt ){.        
e3e0: 2f 2a 20 74 68 69 73 20 68 61 70 70 65 6e 73 20  /* this happens 
e3f0: 66 6f 72 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 72  for a comment or
e400: 20 77 68 69 74 65 2d 73 70 61 63 65 20 2a 2f 0a   white-space */.
e410: 20 20 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 7a          zSql = z
e420: 4c 65 66 74 6f 76 65 72 3b 0a 20 20 20 20 20 20  Leftover;.      
e430: 20 20 77 68 69 6c 65 28 20 49 73 53 70 61 63 65    while( IsSpace
e440: 28 7a 53 71 6c 5b 30 5d 29 20 29 20 7a 53 71 6c  (zSql[0]) ) zSql
e450: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 74  ++;.        cont
e460: 69 6e 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20  inue;.      }.  
e470: 20 20 20 20 7a 53 74 6d 74 53 71 6c 20 3d 20 73      zStmtSql = s
e480: 71 6c 69 74 65 33 5f 73 71 6c 28 70 53 74 6d 74  qlite3_sql(pStmt
e490: 29 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  );.      while( 
e4a0: 49 73 53 70 61 63 65 28 7a 53 74 6d 74 53 71 6c  IsSpace(zStmtSql
e4b0: 5b 30 5d 29 20 29 20 7a 53 74 6d 74 53 71 6c 2b  [0]) ) zStmtSql+
e4c0: 2b 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 73 61 76  +;..      /* sav
e4d0: 65 20 6f 66 66 20 74 68 65 20 70 72 65 70 61 72  e off the prepar
e4e0: 65 64 20 73 74 61 74 6d 65 6e 74 20 68 61 6e 64  ed statment hand
e4f0: 6c 65 20 61 6e 64 20 72 65 73 65 74 20 72 6f 77  le and reset row
e500: 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20   count */.      
e510: 69 66 28 20 70 41 72 67 20 29 7b 0a 20 20 20 20  if( pArg ){.    
e520: 20 20 20 20 70 41 72 67 2d 3e 70 53 74 6d 74 20      pArg->pStmt 
e530: 3d 20 70 53 74 6d 74 3b 0a 20 20 20 20 20 20 20  = pStmt;.       
e540: 20 70 41 72 67 2d 3e 63 6e 74 20 3d 20 30 3b 0a   pArg->cnt = 0;.
e550: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
e560: 2a 20 65 63 68 6f 20 74 68 65 20 73 71 6c 20 73  * echo the sql s
e570: 74 61 74 65 6d 65 6e 74 20 69 66 20 65 63 68 6f  tatement if echo
e580: 20 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28   on */.      if(
e590: 20 70 41 72 67 20 26 26 20 70 41 72 67 2d 3e 65   pArg && pArg->e
e5a0: 63 68 6f 4f 6e 20 29 7b 0a 20 20 20 20 20 20 20  choOn ){.       
e5b0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 41 72   utf8_printf(pAr
e5c0: 67 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e 22 2c 20  g->out, "%s\n", 
e5d0: 7a 53 74 6d 74 53 71 6c 20 3f 20 7a 53 74 6d 74  zStmtSql ? zStmt
e5e0: 53 71 6c 20 3a 20 7a 53 71 6c 29 3b 0a 20 20 20  Sql : zSql);.   
e5f0: 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53     }..      /* S
e600: 68 6f 77 20 74 68 65 20 45 58 50 4c 41 49 4e 20  how the EXPLAIN 
e610: 51 55 45 52 59 20 50 4c 41 4e 20 69 66 20 2e 65  QUERY PLAN if .e
e620: 71 70 20 69 73 20 6f 6e 20 2a 2f 0a 20 20 20 20  qp is on */.    
e630: 20 20 69 66 28 20 70 41 72 67 20 26 26 20 70 41    if( pArg && pA
e640: 72 67 2d 3e 61 75 74 6f 45 51 50 20 26 26 20 73  rg->autoEQP && s
e650: 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28 22  qlite3_strlike("
e660: 45 58 50 4c 41 49 4e 25 22 2c 7a 53 74 6d 74 53  EXPLAIN%",zStmtS
e670: 71 6c 2c 30 29 21 3d 30 20 29 7b 0a 20 20 20 20  ql,0)!=0 ){.    
e680: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74      sqlite3_stmt
e690: 20 2a 70 45 78 70 6c 61 69 6e 3b 0a 20 20 20 20   *pExplain;.    
e6a0: 20 20 20 20 63 68 61 72 20 2a 7a 45 51 50 3b 0a      char *zEQP;.
e6b0: 20 20 20 20 20 20 20 20 64 69 73 61 62 6c 65 5f          disable_
e6c0: 64 65 62 75 67 5f 74 72 61 63 65 5f 6d 6f 64 65  debug_trace_mode
e6d0: 73 28 29 3b 0a 20 20 20 20 20 20 20 20 7a 45 51  s();.        zEQ
e6e0: 50 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  P = sqlite3_mpri
e6f0: 6e 74 66 28 22 45 58 50 4c 41 49 4e 20 51 55 45  ntf("EXPLAIN QUE
e700: 52 59 20 50 4c 41 4e 20 25 73 22 2c 20 7a 53 74  RY PLAN %s", zSt
e710: 6d 74 53 71 6c 29 3b 0a 20 20 20 20 20 20 20 20  mtSql);.        
e720: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
e730: 70 61 72 65 5f 76 32 28 64 62 2c 20 7a 45 51 50  pare_v2(db, zEQP
e740: 2c 20 2d 31 2c 20 26 70 45 78 70 6c 61 69 6e 2c  , -1, &pExplain,
e750: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28   0);.        if(
e760: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
e770: 7b 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c  {.          whil
e780: 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  e( sqlite3_step(
e790: 70 45 78 70 6c 61 69 6e 29 3d 3d 53 51 4c 49 54  pExplain)==SQLIT
e7a0: 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 20  E_ROW ){.       
e7b0: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
e7c0: 70 41 72 67 2d 3e 6f 75 74 2c 22 2d 2d 45 51 50  pArg->out,"--EQP
e7d0: 2d 2d 20 25 64 2c 22 2c 73 71 6c 69 74 65 33 5f  -- %d,",sqlite3_
e7e0: 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 45 78 70 6c  column_int(pExpl
e7f0: 61 69 6e 2c 20 30 29 29 3b 0a 20 20 20 20 20 20  ain, 0));.      
e800: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
e810: 28 70 41 72 67 2d 3e 6f 75 74 2c 22 25 64 2c 22  (pArg->out,"%d,"
e820: 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  , sqlite3_column
e830: 5f 69 6e 74 28 70 45 78 70 6c 61 69 6e 2c 20 31  _int(pExplain, 1
e840: 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ));.            
e850: 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  raw_printf(pArg-
e860: 3e 6f 75 74 2c 22 25 64 2c 22 2c 20 73 71 6c 69  >out,"%d,", sqli
e870: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70  te3_column_int(p
e880: 45 78 70 6c 61 69 6e 2c 20 32 29 29 3b 0a 20 20  Explain, 2));.  
e890: 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
e8a0: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
e8b0: 22 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f  "%s\n", sqlite3_
e8c0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 45 78 70  column_text(pExp
e8d0: 6c 61 69 6e 2c 20 33 29 29 3b 0a 20 20 20 20 20  lain, 3));.     
e8e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
e8f0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
e900: 5f 66 69 6e 61 6c 69 7a 65 28 70 45 78 70 6c 61  _finalize(pExpla
e910: 69 6e 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  in);.        sql
e920: 69 74 65 33 5f 66 72 65 65 28 7a 45 51 50 29 3b  ite3_free(zEQP);
e930: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 41 72  .        if( pAr
e940: 67 2d 3e 61 75 74 6f 45 51 50 3e 3d 32 20 29 7b  g->autoEQP>=2 ){
e950: 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  .          /* Al
e960: 73 6f 20 64 6f 20 61 6e 20 45 58 50 4c 41 49 4e  so do an EXPLAIN
e970: 20 66 6f 72 20 22 2e 65 71 70 20 66 75 6c 6c 22   for ".eqp full"
e980: 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20 20   mode */.       
e990: 20 20 20 7a 45 51 50 20 3d 20 73 71 6c 69 74 65     zEQP = sqlite
e9a0: 33 5f 6d 70 72 69 6e 74 66 28 22 45 58 50 4c 41  3_mprintf("EXPLA
e9b0: 49 4e 20 25 73 22 2c 20 7a 53 74 6d 74 53 71 6c  IN %s", zStmtSql
e9c0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  );.          rc 
e9d0: 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
e9e0: 65 5f 76 32 28 64 62 2c 20 7a 45 51 50 2c 20 2d  e_v2(db, zEQP, -
e9f0: 31 2c 20 26 70 45 78 70 6c 61 69 6e 2c 20 30 29  1, &pExplain, 0)
ea00: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
ea10: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
ea20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 41 72  .            pAr
ea30: 67 2d 3e 63 4d 6f 64 65 20 3d 20 4d 4f 44 45 5f  g->cMode = MODE_
ea40: 45 78 70 6c 61 69 6e 3b 0a 20 20 20 20 20 20 20  Explain;.       
ea50: 20 20 20 20 20 65 78 70 6c 61 69 6e 5f 64 61 74       explain_dat
ea60: 61 5f 70 72 65 70 61 72 65 28 70 41 72 67 2c 20  a_prepare(pArg, 
ea70: 70 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20 20 20  pExplain);.     
ea80: 20 20 20 20 20 20 20 65 78 65 63 5f 70 72 65 70         exec_prep
ea90: 61 72 65 64 5f 73 74 6d 74 28 70 41 72 67 2c 20  ared_stmt(pArg, 
eaa0: 70 45 78 70 6c 61 69 6e 2c 20 78 43 61 6c 6c 62  pExplain, xCallb
eab0: 61 63 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ack);.          
eac0: 20 20 65 78 70 6c 61 69 6e 5f 64 61 74 61 5f 64    explain_data_d
ead0: 65 6c 65 74 65 28 70 41 72 67 29 3b 0a 20 20 20  elete(pArg);.   
eae0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
eaf0: 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c     sqlite3_final
eb00: 69 7a 65 28 70 45 78 70 6c 61 69 6e 29 3b 0a 20  ize(pExplain);. 
eb10: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
eb20: 5f 66 72 65 65 28 7a 45 51 50 29 3b 0a 20 20 20  _free(zEQP);.   
eb30: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72       }.        r
eb40: 65 73 74 6f 72 65 5f 64 65 62 75 67 5f 74 72 61  estore_debug_tra
eb50: 63 65 5f 6d 6f 64 65 73 28 29 3b 0a 20 20 20 20  ce_modes();.    
eb60: 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 70    }..      if( p
eb70: 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20 20 70  Arg ){.        p
eb80: 41 72 67 2d 3e 63 4d 6f 64 65 20 3d 20 70 41 72  Arg->cMode = pAr
eb90: 67 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20 20 20 20  g->mode;.       
eba0: 20 69 66 28 20 70 41 72 67 2d 3e 61 75 74 6f 45   if( pArg->autoE
ebb0: 78 70 6c 61 69 6e 0a 20 20 20 20 20 20 20 20 20  xplain.         
ebc0: 26 26 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  && sqlite3_colum
ebd0: 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 3d 3d  n_count(pStmt)==
ebe0: 38 0a 20 20 20 20 20 20 20 20 20 26 26 20 73 71  8.         && sq
ebf0: 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28 22 45  lite3_strlike("E
ec00: 58 50 4c 41 49 4e 25 22 2c 20 7a 53 74 6d 74 53  XPLAIN%", zStmtS
ec10: 71 6c 2c 30 29 3d 3d 30 0a 20 20 20 20 20 20 20  ql,0)==0.       
ec20: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 41   ){.          pA
ec30: 72 67 2d 3e 63 4d 6f 64 65 20 3d 20 4d 4f 44 45  rg->cMode = MODE
ec40: 5f 45 78 70 6c 61 69 6e 3b 0a 20 20 20 20 20 20  _Explain;.      
ec50: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20    }..        /* 
ec60: 49 66 20 74 68 65 20 73 68 65 6c 6c 20 69 73 20  If the shell is 
ec70: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 22 2e 65  currently in ".e
ec80: 78 70 6c 61 69 6e 22 20 6d 6f 64 65 2c 20 67 61  xplain" mode, ga
ec90: 74 68 65 72 20 74 68 65 20 65 78 74 72 61 0a 20  ther the extra. 
eca0: 20 20 20 20 20 20 20 2a 2a 20 64 61 74 61 20 72         ** data r
ecb0: 65 71 75 69 72 65 64 20 74 6f 20 61 64 64 20 69  equired to add i
ecc0: 6e 64 65 6e 74 73 20 74 6f 20 74 68 65 20 6f 75  ndents to the ou
ecd0: 74 70 75 74 2e 2a 2f 0a 20 20 20 20 20 20 20 20  tput.*/.        
ece0: 69 66 28 20 70 41 72 67 2d 3e 63 4d 6f 64 65 3d  if( pArg->cMode=
ecf0: 3d 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20 29 7b  =MODE_Explain ){
ed00: 0a 20 20 20 20 20 20 20 20 20 20 65 78 70 6c 61  .          expla
ed10: 69 6e 5f 64 61 74 61 5f 70 72 65 70 61 72 65 28  in_data_prepare(
ed20: 70 41 72 67 2c 20 70 53 74 6d 74 29 3b 0a 20 20  pArg, pStmt);.  
ed30: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
ed40: 0a 20 20 20 20 20 20 65 78 65 63 5f 70 72 65 70  .      exec_prep
ed50: 61 72 65 64 5f 73 74 6d 74 28 70 41 72 67 2c 20  ared_stmt(pArg, 
ed60: 70 53 74 6d 74 2c 20 78 43 61 6c 6c 62 61 63 6b  pStmt, xCallback
ed70: 29 3b 0a 20 20 20 20 20 20 65 78 70 6c 61 69 6e  );.      explain
ed80: 5f 64 61 74 61 5f 64 65 6c 65 74 65 28 70 41 72  _data_delete(pAr
ed90: 67 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 70 72  g);..      /* pr
eda0: 69 6e 74 20 75 73 61 67 65 20 73 74 61 74 73 20  int usage stats 
edb0: 69 66 20 73 74 61 74 73 20 6f 6e 20 2a 2f 0a 20  if stats on */. 
edc0: 20 20 20 20 20 69 66 28 20 70 41 72 67 20 26 26       if( pArg &&
edd0: 20 70 41 72 67 2d 3e 73 74 61 74 73 4f 6e 20 29   pArg->statsOn )
ede0: 7b 0a 20 20 20 20 20 20 20 20 64 69 73 70 6c 61  {.        displa
edf0: 79 5f 73 74 61 74 73 28 64 62 2c 20 70 41 72 67  y_stats(db, pArg
ee00: 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  , 0);.      }.. 
ee10: 20 20 20 20 20 2f 2a 20 70 72 69 6e 74 20 6c 6f       /* print lo
ee20: 6f 70 2d 63 6f 75 6e 74 65 72 73 20 69 66 20 72  op-counters if r
ee30: 65 71 75 69 72 65 64 20 2a 2f 0a 20 20 20 20 20  equired */.     
ee40: 20 69 66 28 20 70 41 72 67 20 26 26 20 70 41 72   if( pArg && pAr
ee50: 67 2d 3e 73 63 61 6e 73 74 61 74 73 4f 6e 20 29  g->scanstatsOn )
ee60: 7b 0a 20 20 20 20 20 20 20 20 64 69 73 70 6c 61  {.        displa
ee70: 79 5f 73 63 61 6e 73 74 61 74 73 28 64 62 2c 20  y_scanstats(db, 
ee80: 70 41 72 67 29 3b 0a 20 20 20 20 20 20 7d 0a 0a  pArg);.      }..
ee90: 20 20 20 20 20 20 2f 2a 20 46 69 6e 61 6c 69 7a        /* Finaliz
eea0: 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  e the statement 
eeb0: 6a 75 73 74 20 65 78 65 63 75 74 65 64 2e 20 49  just executed. I
eec0: 66 20 74 68 69 73 20 66 61 69 6c 73 2c 20 73 61  f this fails, sa
eed0: 76 65 20 61 0a 20 20 20 20 20 20 2a 2a 20 63 6f  ve a.      ** co
eee0: 70 79 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20  py of the error 
eef0: 6d 65 73 73 61 67 65 2e 20 4f 74 68 65 72 77 69  message. Otherwi
ef00: 73 65 2c 20 73 65 74 20 7a 53 71 6c 20 74 6f 20  se, set zSql to 
ef10: 70 6f 69 6e 74 20 74 6f 20 74 68 65 0a 20 20 20  point to the.   
ef20: 20 20 20 2a 2a 20 6e 65 78 74 20 73 74 61 74 65     ** next state
ef30: 6d 65 6e 74 20 74 6f 20 65 78 65 63 75 74 65 2e  ment to execute.
ef40: 20 2a 2f 0a 20 20 20 20 20 20 72 63 32 20 3d 20   */.      rc2 = 
ef50: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
ef60: 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 69  (pStmt);.      i
ef70: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f  f( rc!=SQLITE_NO
ef80: 4d 45 4d 20 29 20 72 63 20 3d 20 72 63 32 3b 0a  MEM ) rc = rc2;.
ef90: 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
efa0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
efb0: 20 20 20 7a 53 71 6c 20 3d 20 7a 4c 65 66 74 6f     zSql = zLefto
efc0: 76 65 72 3b 0a 20 20 20 20 20 20 20 20 77 68 69  ver;.        whi
efd0: 6c 65 28 20 49 73 53 70 61 63 65 28 7a 53 71 6c  le( IsSpace(zSql
efe0: 5b 30 5d 29 20 29 20 7a 53 71 6c 2b 2b 3b 0a 20  [0]) ) zSql++;. 
eff0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70       }else if( p
f000: 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20  zErrMsg ){.     
f010: 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 73     *pzErrMsg = s
f020: 61 76 65 5f 65 72 72 5f 6d 73 67 28 64 62 29 3b  ave_err_msg(db);
f030: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
f040: 2f 2a 20 63 6c 65 61 72 20 73 61 76 65 64 20 73  /* clear saved s
f050: 74 6d 74 20 68 61 6e 64 6c 65 20 2a 2f 0a 20 20  tmt handle */.  
f060: 20 20 20 20 69 66 28 20 70 41 72 67 20 29 7b 0a      if( pArg ){.
f070: 20 20 20 20 20 20 20 20 70 41 72 67 2d 3e 70 53          pArg->pS
f080: 74 6d 74 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20  tmt = NULL;.    
f090: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 20 2f 2a    }.    }.  } /*
f0a0: 20 65 6e 64 20 77 68 69 6c 65 20 2a 2f 0a 0a 20   end while */.. 
f0b0: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 0a   return rc;.}...
f0c0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 20  /*.** This is a 
f0d0: 64 69 66 66 65 72 65 6e 74 20 63 61 6c 6c 62 61  different callba
f0e0: 63 6b 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20  ck routine used 
f0f0: 66 6f 72 20 64 75 6d 70 69 6e 67 20 74 68 65 20  for dumping the 
f100: 64 61 74 61 62 61 73 65 2e 0a 2a 2a 20 45 61 63  database..** Eac
f110: 68 20 72 6f 77 20 72 65 63 65 69 76 65 64 20 62  h row received b
f120: 79 20 74 68 69 73 20 63 61 6c 6c 62 61 63 6b 20  y this callback 
f130: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 74 61  consists of a ta
f140: 62 6c 65 20 6e 61 6d 65 2c 0a 2a 2a 20 74 68 65  ble name,.** the
f150: 20 74 61 62 6c 65 20 74 79 70 65 20 28 22 69 6e   table type ("in
f160: 64 65 78 22 20 6f 72 20 22 74 61 62 6c 65 22 29  dex" or "table")
f170: 20 61 6e 64 20 53 51 4c 20 74 6f 20 63 72 65 61   and SQL to crea
f180: 74 65 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a  te the table..**
f190: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 68   This routine sh
f1a0: 6f 75 6c 64 20 70 72 69 6e 74 20 74 65 78 74 20  ould print text 
f1b0: 73 75 66 66 69 63 69 65 6e 74 20 74 6f 20 72 65  sufficient to re
f1c0: 63 72 65 61 74 65 20 74 68 65 20 74 61 62 6c 65  create the table
f1d0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
f1e0: 64 75 6d 70 5f 63 61 6c 6c 62 61 63 6b 28 76 6f  dump_callback(vo
f1f0: 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20 6e 41  id *pArg, int nA
f200: 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a 41 72 67  rg, char **azArg
f210: 2c 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 29 7b  , char **azCol){
f220: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 6f 6e  .  int rc;.  con
f230: 73 74 20 63 68 61 72 20 2a 7a 54 61 62 6c 65 3b  st char *zTable;
f240: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
f250: 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68  Type;.  const ch
f260: 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 63 6f 6e 73  ar *zSql;.  cons
f270: 74 20 63 68 61 72 20 2a 7a 50 72 65 70 53 74 6d  t char *zPrepStm
f280: 74 20 3d 20 30 3b 0a 20 20 53 68 65 6c 6c 53 74  t = 0;.  ShellSt
f290: 61 74 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53  ate *p = (ShellS
f2a0: 74 61 74 65 20 2a 29 70 41 72 67 3b 0a 0a 20 20  tate *)pArg;..  
f2b0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
f2c0: 28 61 7a 43 6f 6c 29 3b 0a 20 20 69 66 28 20 6e  (azCol);.  if( n
f2d0: 41 72 67 21 3d 33 20 29 20 72 65 74 75 72 6e 20  Arg!=3 ) return 
f2e0: 31 3b 0a 20 20 7a 54 61 62 6c 65 20 3d 20 61 7a  1;.  zTable = az
f2f0: 41 72 67 5b 30 5d 3b 0a 20 20 7a 54 79 70 65 20  Arg[0];.  zType 
f300: 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 7a 53  = azArg[1];.  zS
f310: 71 6c 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a 0a  ql = azArg[2];..
f320: 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 54 61    if( strcmp(zTa
f330: 62 6c 65 2c 20 22 73 71 6c 69 74 65 5f 73 65 71  ble, "sqlite_seq
f340: 75 65 6e 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20  uence")==0 ){.  
f350: 20 20 7a 50 72 65 70 53 74 6d 74 20 3d 20 22 44    zPrepStmt = "D
f360: 45 4c 45 54 45 20 46 52 4f 4d 20 73 71 6c 69 74  ELETE FROM sqlit
f370: 65 5f 73 65 71 75 65 6e 63 65 3b 5c 6e 22 3b 0a  e_sequence;\n";.
f380: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69    }else if( sqli
f390: 74 65 33 5f 73 74 72 67 6c 6f 62 28 22 73 71 6c  te3_strglob("sql
f3a0: 69 74 65 5f 73 74 61 74 3f 22 2c 20 7a 54 61 62  ite_stat?", zTab
f3b0: 6c 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 61  le)==0 ){.    ra
f3c0: 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
f3d0: 20 22 41 4e 41 4c 59 5a 45 20 73 71 6c 69 74 65   "ANALYZE sqlite
f3e0: 5f 6d 61 73 74 65 72 3b 5c 6e 22 29 3b 0a 20 20  _master;\n");.  
f3f0: 7d 65 6c 73 65 20 69 66 28 20 73 74 72 6e 63 6d  }else if( strncm
f400: 70 28 7a 54 61 62 6c 65 2c 20 22 73 71 6c 69 74  p(zTable, "sqlit
f410: 65 5f 22 2c 20 37 29 3d 3d 30 20 29 7b 0a 20 20  e_", 7)==0 ){.  
f420: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65    return 0;.  }e
f430: 6c 73 65 20 69 66 28 20 73 74 72 6e 63 6d 70 28  lse if( strncmp(
f440: 7a 53 71 6c 2c 20 22 43 52 45 41 54 45 20 56 49  zSql, "CREATE VI
f450: 52 54 55 41 4c 20 54 41 42 4c 45 22 2c 20 32 30  RTUAL TABLE", 20
f460: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63 68 61 72  )==0 ){.    char
f470: 20 2a 7a 49 6e 73 3b 0a 20 20 20 20 69 66 28 20   *zIns;.    if( 
f480: 21 70 2d 3e 77 72 69 74 61 62 6c 65 53 63 68 65  !p->writableSche
f490: 6d 61 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  ma ){.      raw_
f4a0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
f4b0: 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f  PRAGMA writable_
f4c0: 73 63 68 65 6d 61 3d 4f 4e 3b 5c 6e 22 29 3b 0a  schema=ON;\n");.
f4d0: 20 20 20 20 20 20 70 2d 3e 77 72 69 74 61 62 6c        p->writabl
f4e0: 65 53 63 68 65 6d 61 20 3d 20 31 3b 0a 20 20 20  eSchema = 1;.   
f4f0: 20 7d 0a 20 20 20 20 7a 49 6e 73 20 3d 20 73 71   }.    zIns = sq
f500: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 0a 20  lite3_mprintf(. 
f510: 20 20 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e        "INSERT IN
f520: 54 4f 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  TO sqlite_master
f530: 28 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e  (type,name,tbl_n
f540: 61 6d 65 2c 72 6f 6f 74 70 61 67 65 2c 73 71 6c  ame,rootpage,sql
f550: 29 22 0a 20 20 20 20 20 20 20 22 56 41 4c 55 45  )".       "VALUE
f560: 53 28 27 74 61 62 6c 65 27 2c 27 25 71 27 2c 27  S('table','%q','
f570: 25 71 27 2c 30 2c 27 25 71 27 29 3b 22 2c 0a 20  %q',0,'%q');",. 
f580: 20 20 20 20 20 20 7a 54 61 62 6c 65 2c 20 7a 54        zTable, zT
f590: 61 62 6c 65 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  able, zSql);.   
f5a0: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
f5b0: 6f 75 74 2c 20 22 25 73 5c 6e 22 2c 20 7a 49 6e  out, "%s\n", zIn
f5c0: 73 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  s);.    sqlite3_
f5d0: 66 72 65 65 28 7a 49 6e 73 29 3b 0a 20 20 20 20  free(zIns);.    
f5e0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73  return 0;.  }els
f5f0: 65 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  e{.    utf8_prin
f600: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 3b 5c  tf(p->out, "%s;\
f610: 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 7d 0a 0a  n", zSql);.  }..
f620: 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 54 79    if( strcmp(zTy
f630: 70 65 2c 20 22 74 61 62 6c 65 22 29 3d 3d 30 20  pe, "table")==0 
f640: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ){.    sqlite3_s
f650: 74 6d 74 20 2a 70 54 61 62 6c 65 49 6e 66 6f 20  tmt *pTableInfo 
f660: 3d 20 30 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a  = 0;.    char *z
f670: 53 65 6c 65 63 74 20 3d 20 30 3b 0a 20 20 20 20  Select = 0;.    
f680: 63 68 61 72 20 2a 7a 54 61 62 6c 65 49 6e 66 6f  char *zTableInfo
f690: 20 3d 20 30 3b 0a 20 20 20 20 63 68 61 72 20 2a   = 0;.    char *
f6a0: 7a 54 6d 70 20 3d 20 30 3b 0a 20 20 20 20 69 6e  zTmp = 0;.    in
f6b0: 74 20 6e 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 20  t nRow = 0;..   
f6c0: 20 7a 54 61 62 6c 65 49 6e 66 6f 20 3d 20 61 70   zTableInfo = ap
f6d0: 70 65 6e 64 54 65 78 74 28 7a 54 61 62 6c 65 49  pendText(zTableI
f6e0: 6e 66 6f 2c 20 22 50 52 41 47 4d 41 20 74 61 62  nfo, "PRAGMA tab
f6f0: 6c 65 5f 69 6e 66 6f 28 22 2c 20 30 29 3b 0a 20  le_info(", 0);. 
f700: 20 20 20 7a 54 61 62 6c 65 49 6e 66 6f 20 3d 20     zTableInfo = 
f710: 61 70 70 65 6e 64 54 65 78 74 28 7a 54 61 62 6c  appendText(zTabl
f720: 65 49 6e 66 6f 2c 20 7a 54 61 62 6c 65 2c 20 27  eInfo, zTable, '
f730: 22 27 29 3b 0a 20 20 20 20 7a 54 61 62 6c 65 49  "');.    zTableI
f740: 6e 66 6f 20 3d 20 61 70 70 65 6e 64 54 65 78 74  nfo = appendText
f750: 28 7a 54 61 62 6c 65 49 6e 66 6f 2c 20 22 29 3b  (zTableInfo, ");
f760: 22 2c 20 30 29 3b 0a 0a 20 20 20 20 72 63 20 3d  ", 0);..    rc =
f770: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
f780: 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 54 61 62 6c  _v2(p->db, zTabl
f790: 65 49 6e 66 6f 2c 20 2d 31 2c 20 26 70 54 61 62  eInfo, -1, &pTab
f7a0: 6c 65 49 6e 66 6f 2c 20 30 29 3b 0a 20 20 20 20  leInfo, 0);.    
f7b0: 66 72 65 65 28 7a 54 61 62 6c 65 49 6e 66 6f 29  free(zTableInfo)
f7c0: 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
f7d0: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 21 70 54 61 62  LITE_OK || !pTab
f7e0: 6c 65 49 6e 66 6f 20 29 7b 0a 20 20 20 20 20 20  leInfo ){.      
f7f0: 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a  return 1;.    }.
f800: 0a 20 20 20 20 7a 53 65 6c 65 63 74 20 3d 20 61  .    zSelect = a
f810: 70 70 65 6e 64 54 65 78 74 28 7a 53 65 6c 65 63  ppendText(zSelec
f820: 74 2c 20 22 53 45 4c 45 43 54 20 27 49 4e 53 45  t, "SELECT 'INSE
f830: 52 54 20 49 4e 54 4f 20 27 20 7c 7c 20 22 2c 20  RT INTO ' || ", 
f840: 30 29 3b 0a 20 20 20 20 2f 2a 20 41 6c 77 61 79  0);.    /* Alway
f850: 73 20 71 75 6f 74 65 20 74 68 65 20 74 61 62 6c  s quote the tabl
f860: 65 20 6e 61 6d 65 2c 20 65 76 65 6e 20 69 66 20  e name, even if 
f870: 69 74 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  it appears to be
f880: 20 70 75 72 65 20 61 73 63 69 69 2c 0a 20 20 20   pure ascii,.   
f890: 20 2a 2a 20 69 6e 20 63 61 73 65 20 69 74 20 69   ** in case it i
f8a0: 73 20 61 20 6b 65 79 77 6f 72 64 2e 20 45 78 3a  s a keyword. Ex:
f8b0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 22 74    INSERT INTO "t
f8c0: 61 62 6c 65 22 20 2e 2e 2e 20 2a 2f 0a 20 20 20  able" ... */.   
f8d0: 20 7a 54 6d 70 20 3d 20 61 70 70 65 6e 64 54 65   zTmp = appendTe
f8e0: 78 74 28 7a 54 6d 70 2c 20 7a 54 61 62 6c 65 2c  xt(zTmp, zTable,
f8f0: 20 27 22 27 29 3b 0a 20 20 20 20 69 66 28 20 7a   '"');.    if( z
f900: 54 6d 70 20 29 7b 0a 20 20 20 20 20 20 7a 53 65  Tmp ){.      zSe
f910: 6c 65 63 74 20 3d 20 61 70 70 65 6e 64 54 65 78  lect = appendTex
f920: 74 28 7a 53 65 6c 65 63 74 2c 20 7a 54 6d 70 2c  t(zSelect, zTmp,
f930: 20 27 5c 27 27 29 3b 0a 20 20 20 20 20 20 66 72   '\'');.      fr
f940: 65 65 28 7a 54 6d 70 29 3b 0a 20 20 20 20 7d 0a  ee(zTmp);.    }.
f950: 20 20 20 20 7a 53 65 6c 65 63 74 20 3d 20 61 70      zSelect = ap
f960: 70 65 6e 64 54 65 78 74 28 7a 53 65 6c 65 63 74  pendText(zSelect
f970: 2c 20 22 20 7c 7c 20 27 20 56 41 4c 55 45 53 28  , " || ' VALUES(
f980: 27 20 7c 7c 20 22 2c 20 30 29 3b 0a 20 20 20 20  ' || ", 0);.    
f990: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65  rc = sqlite3_ste
f9a0: 70 28 70 54 61 62 6c 65 49 6e 66 6f 29 3b 0a 20  p(pTableInfo);. 
f9b0: 20 20 20 77 68 69 6c 65 28 20 72 63 3d 3d 53 51     while( rc==SQ
f9c0: 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20  LITE_ROW ){.    
f9d0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
f9e0: 65 78 74 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  ext = (const cha
f9f0: 72 20 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  r *)sqlite3_colu
fa00: 6d 6e 5f 74 65 78 74 28 70 54 61 62 6c 65 49 6e  mn_text(pTableIn
fa10: 66 6f 2c 20 31 29 3b 0a 20 20 20 20 20 20 7a 53  fo, 1);.      zS
fa20: 65 6c 65 63 74 20 3d 20 61 70 70 65 6e 64 54 65  elect = appendTe
fa30: 78 74 28 7a 53 65 6c 65 63 74 2c 20 22 71 75 6f  xt(zSelect, "quo
fa40: 74 65 28 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  te(", 0);.      
fa50: 7a 53 65 6c 65 63 74 20 3d 20 61 70 70 65 6e 64  zSelect = append
fa60: 54 65 78 74 28 7a 53 65 6c 65 63 74 2c 20 7a 54  Text(zSelect, zT
fa70: 65 78 74 2c 20 27 22 27 29 3b 0a 20 20 20 20 20  ext, '"');.     
fa80: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74   rc = sqlite3_st
fa90: 65 70 28 70 54 61 62 6c 65 49 6e 66 6f 29 3b 0a  ep(pTableInfo);.
faa0: 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
fab0: 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20  LITE_ROW ){.    
fac0: 20 20 20 20 7a 53 65 6c 65 63 74 20 3d 20 61 70      zSelect = ap
fad0: 70 65 6e 64 54 65 78 74 28 7a 53 65 6c 65 63 74  pendText(zSelect
fae0: 2c 20 22 29 2c 20 22 2c 20 30 29 3b 0a 20 20 20  , "), ", 0);.   
faf0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
fb00: 20 20 7a 53 65 6c 65 63 74 20 3d 20 61 70 70 65    zSelect = appe
fb10: 6e 64 54 65 78 74 28 7a 53 65 6c 65 63 74 2c 20  ndText(zSelect, 
fb20: 22 29 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  ") ", 0);.      
fb30: 7d 0a 20 20 20 20 20 20 6e 52 6f 77 2b 2b 3b 0a  }.      nRow++;.
fb40: 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73      }.    rc = s
fb50: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
fb60: 70 54 61 62 6c 65 49 6e 66 6f 29 3b 0a 20 20 20  pTableInfo);.   
fb70: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
fb80: 4f 4b 20 7c 7c 20 6e 52 6f 77 3d 3d 30 20 29 7b  OK || nRow==0 ){
fb90: 0a 20 20 20 20 20 20 66 72 65 65 28 7a 53 65 6c  .      free(zSel
fba0: 65 63 74 29 3b 0a 20 20 20 20 20 20 72 65 74 75  ect);.      retu
fbb0: 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rn 1;.    }.    
fbc0: 7a 53 65 6c 65 63 74 20 3d 20 61 70 70 65 6e 64  zSelect = append
fbd0: 54 65 78 74 28 7a 53 65 6c 65 63 74 2c 20 22 7c  Text(zSelect, "|
fbe0: 7c 20 27 29 27 20 46 52 4f 4d 20 20 22 2c 20 30  | ')' FROM  ", 0
fbf0: 29 3b 0a 20 20 20 20 7a 53 65 6c 65 63 74 20 3d  );.    zSelect =
fc00: 20 61 70 70 65 6e 64 54 65 78 74 28 7a 53 65 6c   appendText(zSel
fc10: 65 63 74 2c 20 7a 54 61 62 6c 65 2c 20 27 22 27  ect, zTable, '"'
fc20: 29 3b 0a 0a 20 20 20 20 72 63 20 3d 20 72 75 6e  );..    rc = run
fc30: 5f 74 61 62 6c 65 5f 64 75 6d 70 5f 71 75 65 72  _table_dump_quer
fc40: 79 28 70 2c 20 7a 53 65 6c 65 63 74 2c 20 7a 50  y(p, zSelect, zP
fc50: 72 65 70 53 74 6d 74 29 3b 0a 20 20 20 20 69 66  repStmt);.    if
fc60: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 43 4f 52  ( rc==SQLITE_COR
fc70: 52 55 50 54 20 29 7b 0a 20 20 20 20 20 20 7a 53  RUPT ){.      zS
fc80: 65 6c 65 63 74 20 3d 20 61 70 70 65 6e 64 54 65  elect = appendTe
fc90: 78 74 28 7a 53 65 6c 65 63 74 2c 20 22 20 4f 52  xt(zSelect, " OR
fca0: 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53  DER BY rowid DES
fcb0: 43 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 72 75  C", 0);.      ru
fcc0: 6e 5f 74 61 62 6c 65 5f 64 75 6d 70 5f 71 75 65  n_table_dump_que
fcd0: 72 79 28 70 2c 20 7a 53 65 6c 65 63 74 2c 20 30  ry(p, zSelect, 0
fce0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 72 65  );.    }.    fre
fcf0: 65 28 7a 53 65 6c 65 63 74 29 3b 0a 20 20 7d 0a  e(zSelect);.  }.
fd00: 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
fd10: 2a 0a 2a 2a 20 52 75 6e 20 7a 51 75 65 72 79 2e  *.** Run zQuery.
fd20: 20 20 55 73 65 20 64 75 6d 70 5f 63 61 6c 6c 62    Use dump_callb
fd30: 61 63 6b 28 29 20 61 73 20 74 68 65 20 63 61 6c  ack() as the cal
fd40: 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65 20 73 6f  lback routine so
fd50: 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 6e   that.** the con
fd60: 74 65 6e 74 73 20 6f 66 20 74 68 65 20 71 75 65  tents of the que
fd70: 72 79 20 61 72 65 20 6f 75 74 70 75 74 20 61 73  ry are output as
fd80: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e   SQL statements.
fd90: 0a 2a 2a 0a 2a 2a 20 49 66 20 77 65 20 67 65 74  .**.** If we get
fda0: 20 61 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   a SQLITE_CORRUP
fdb0: 54 20 65 72 72 6f 72 2c 20 72 65 72 75 6e 20 74  T error, rerun t
fdc0: 68 65 20 71 75 65 72 79 20 61 66 74 65 72 20 61  he query after a
fdd0: 70 70 65 6e 64 69 6e 67 0a 2a 2a 20 22 4f 52 44  ppending.** "ORD
fde0: 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43  ER BY rowid DESC
fdf0: 22 20 74 6f 20 74 68 65 20 65 6e 64 2e 0a 2a 2f  " to the end..*/
fe00: 0a 73 74 61 74 69 63 20 69 6e 74 20 72 75 6e 5f  .static int run_
fe10: 73 63 68 65 6d 61 5f 64 75 6d 70 5f 71 75 65 72  schema_dump_quer
fe20: 79 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20  y(.  ShellState 
fe30: 2a 70 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  *p,.  const char
fe40: 20 2a 7a 51 75 65 72 79 0a 29 7b 0a 20 20 69 6e   *zQuery.){.  in
fe50: 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45  t rc;.  char *zE
fe60: 72 72 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73  rr = 0;.  rc = s
fe70: 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64  qlite3_exec(p->d
fe80: 62 2c 20 7a 51 75 65 72 79 2c 20 64 75 6d 70 5f  b, zQuery, dump_
fe90: 63 61 6c 6c 62 61 63 6b 2c 20 70 2c 20 26 7a 45  callback, p, &zE
fea0: 72 72 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  rr);.  if( rc==S
feb0: 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 29 7b  QLITE_CORRUPT ){
fec0: 0a 20 20 20 20 63 68 61 72 20 2a 7a 51 32 3b 0a  .    char *zQ2;.
fed0: 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 73 74      int len = st
fee0: 72 6c 65 6e 33 30 28 7a 51 75 65 72 79 29 3b 0a  rlen30(zQuery);.
fef0: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
ff00: 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20  ->out, "/****** 
ff10: 43 4f 52 52 55 50 54 49 4f 4e 20 45 52 52 4f 52  CORRUPTION ERROR
ff20: 20 2a 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 29 3b 0a 20   *******/\n");. 
ff30: 20 20 20 69 66 28 20 7a 45 72 72 20 29 7b 0a 20     if( zErr ){. 
ff40: 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
ff50: 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a  (p->out, "/*****
ff60: 2a 20 25 73 20 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 2c  * %s ******/\n",
ff70: 20 7a 45 72 72 29 3b 0a 20 20 20 20 20 20 73 71   zErr);.      sq
ff80: 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29  lite3_free(zErr)
ff90: 3b 0a 20 20 20 20 20 20 7a 45 72 72 20 3d 20 30  ;.      zErr = 0
ffa0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 51 32 20  ;.    }.    zQ2 
ffb0: 3d 20 6d 61 6c 6c 6f 63 28 20 6c 65 6e 2b 31 30  = malloc( len+10
ffc0: 30 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 51 32  0 );.    if( zQ2
ffd0: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 72 63 3b  ==0 ) return rc;
ffe0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
fff0: 72 69 6e 74 66 28 6c 65 6e 2b 31 30 30 2c 20 7a  rintf(len+100, z
10000 51 32 2c 20 22 25 73 20 4f 52 44 45 52 20 42 59  Q2, "%s ORDER BY
10010 20 72 6f 77 69 64 20 44 45 53 43 22 2c 20 7a 51   rowid DESC", zQ
10020 75 65 72 79 29 3b 0a 20 20 20 20 72 63 20 3d 20  uery);.    rc = 
10030 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e  sqlite3_exec(p->
10040 64 62 2c 20 7a 51 32 2c 20 64 75 6d 70 5f 63 61  db, zQ2, dump_ca
10050 6c 6c 62 61 63 6b 2c 20 70 2c 20 26 7a 45 72 72  llback, p, &zErr
10060 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b  );.    if( rc ){
10070 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
10080 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a  tf(p->out, "/***
10090 2a 2a 2a 20 45 52 52 4f 52 3a 20 25 73 20 2a 2a  *** ERROR: %s **
100a0 2a 2a 2a 2a 2f 5c 6e 22 2c 20 7a 45 72 72 29 3b  ****/\n", zErr);
100b0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
100c0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
100d0 52 52 55 50 54 3b 0a 20 20 20 20 7d 0a 20 20 20  RRUPT;.    }.   
100e0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45   sqlite3_free(zE
100f0 72 72 29 3b 0a 20 20 20 20 66 72 65 65 28 7a 51  rr);.    free(zQ
10100 32 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  2);.  }.  return
10110 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65   rc;.}../*.** Te
10120 78 74 20 6f 66 20 61 20 68 65 6c 70 20 6d 65 73  xt of a help mes
10130 73 61 67 65 0a 2a 2f 0a 73 74 61 74 69 63 20 63  sage.*/.static c
10140 68 61 72 20 7a 48 65 6c 70 5b 5d 20 3d 0a 23 69  har zHelp[] =.#i
10150 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
10160 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
10170 20 20 22 2e 61 75 74 68 20 4f 4e 7c 4f 46 46 20    ".auth ON|OFF 
10180 20 20 20 20 20 20 20 20 20 20 53 68 6f 77 20 61            Show a
10190 75 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61  uthorizer callba
101a0 63 6b 73 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20  cks\n".#endif.  
101b0 22 2e 62 61 63 6b 75 70 20 3f 44 42 3f 20 46 49  ".backup ?DB? FI
101c0 4c 45 20 20 20 20 20 20 42 61 63 6b 75 70 20 44  LE      Backup D
101d0 42 20 28 64 65 66 61 75 6c 74 20 5c 22 6d 61 69  B (default \"mai
101e0 6e 5c 22 29 20 74 6f 20 46 49 4c 45 5c 6e 22 0a  n\") to FILE\n".
101f0 20 20 22 2e 62 61 69 6c 20 6f 6e 7c 6f 66 66 20    ".bail on|off 
10200 20 20 20 20 20 20 20 20 20 20 53 74 6f 70 20 61            Stop a
10210 66 74 65 72 20 68 69 74 74 69 6e 67 20 61 6e 20  fter hitting an 
10220 65 72 72 6f 72 2e 20 20 44 65 66 61 75 6c 74 20  error.  Default 
10230 4f 46 46 5c 6e 22 0a 20 20 22 2e 62 69 6e 61 72  OFF\n".  ".binar
10240 79 20 6f 6e 7c 6f 66 66 20 20 20 20 20 20 20 20  y on|off        
10250 20 54 75 72 6e 20 62 69 6e 61 72 79 20 6f 75 74   Turn binary out
10260 70 75 74 20 6f 6e 20 6f 72 20 6f 66 66 2e 20 20  put on or off.  
10270 44 65 66 61 75 6c 74 20 4f 46 46 5c 6e 22 0a 20  Default OFF\n". 
10280 20 22 2e 63 68 61 6e 67 65 73 20 6f 6e 7c 6f 66   ".changes on|of
10290 66 20 20 20 20 20 20 20 20 53 68 6f 77 20 6e 75  f        Show nu
102a0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 63 68 61  mber of rows cha
102b0 6e 67 65 64 20 62 79 20 53 51 4c 5c 6e 22 0a 20  nged by SQL\n". 
102c0 20 22 2e 63 68 65 63 6b 20 47 4c 4f 42 20 20 20   ".check GLOB   
102d0 20 20 20 20 20 20 20 20 20 46 61 69 6c 20 69 66           Fail if
102e0 20 6f 75 74 70 75 74 20 73 69 6e 63 65 20 2e 74   output since .t
102f0 65 73 74 63 61 73 65 20 64 6f 65 73 20 6e 6f 74  estcase does not
10300 20 6d 61 74 63 68 5c 6e 22 0a 20 20 22 2e 63 6c   match\n".  ".cl
10310 6f 6e 65 20 4e 45 57 44 42 20 20 20 20 20 20 20  one NEWDB       
10320 20 20 20 20 43 6c 6f 6e 65 20 64 61 74 61 20 69      Clone data i
10330 6e 74 6f 20 4e 45 57 44 42 20 66 72 6f 6d 20 74  nto NEWDB from t
10340 68 65 20 65 78 69 73 74 69 6e 67 20 64 61 74 61  he existing data
10350 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64 61 74 61  base\n".  ".data
10360 62 61 73 65 73 20 20 20 20 20 20 20 20 20 20 20  bases           
10370 20 20 4c 69 73 74 20 6e 61 6d 65 73 20 61 6e 64    List names and
10380 20 66 69 6c 65 73 20 6f 66 20 61 74 74 61 63 68   files of attach
10390 65 64 20 64 61 74 61 62 61 73 65 73 5c 6e 22 0a  ed databases\n".
103a0 20 20 22 2e 64 62 69 6e 66 6f 20 3f 44 42 3f 20    ".dbinfo ?DB? 
103b0 20 20 20 20 20 20 20 20 20 20 53 68 6f 77 20 73            Show s
103c0 74 61 74 75 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tatus informatio
103d0 6e 20 61 62 6f 75 74 20 74 68 65 20 64 61 74 61  n about the data
103e0 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64 75 6d 70  base\n".  ".dump
103f0 20 3f 54 41 42 4c 45 3f 20 2e 2e 2e 20 20 20 20   ?TABLE? ...    
10400 20 20 44 75 6d 70 20 74 68 65 20 64 61 74 61 62    Dump the datab
10410 61 73 65 20 69 6e 20 61 6e 20 53 51 4c 20 74 65  ase in an SQL te
10420 78 74 20 66 6f 72 6d 61 74 5c 6e 22 0a 20 20 22  xt format\n".  "
10430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10440 20 20 20 20 20 20 20 20 20 49 66 20 54 41 42 4c           If TABL
10450 45 20 73 70 65 63 69 66 69 65 64 2c 20 6f 6e 6c  E specified, onl
10460 79 20 64 75 6d 70 20 74 61 62 6c 65 73 20 6d 61  y dump tables ma
10470 74 63 68 69 6e 67 5c 6e 22 0a 20 20 22 20 20 20  tching\n".  "   
10480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10490 20 20 20 20 20 20 4c 49 4b 45 20 70 61 74 74 65        LIKE patte
104a0 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a 20 20 22  rn TABLE.\n".  "
104b0 2e 65 63 68 6f 20 6f 6e 7c 6f 66 66 20 20 20 20  .echo on|off    
104c0 20 20 20 20 20 20 20 54 75 72 6e 20 63 6f 6d 6d         Turn comm
104d0 61 6e 64 20 65 63 68 6f 20 6f 6e 20 6f 72 20 6f  and echo on or o
104e0 66 66 5c 6e 22 0a 20 20 22 2e 65 71 70 20 6f 6e  ff\n".  ".eqp on
104f0 7c 6f 66 66 7c 66 75 6c 6c 20 20 20 20 20 20 20  |off|full       
10500 45 6e 61 62 6c 65 20 6f 72 20 64 69 73 61 62 6c  Enable or disabl
10510 65 20 61 75 74 6f 6d 61 74 69 63 20 45 58 50 4c  e automatic EXPL
10520 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 5c 6e  AIN QUERY PLAN\n
10530 22 0a 20 20 22 2e 65 78 69 74 20 20 20 20 20 20  ".  ".exit      
10540 20 20 20 20 20 20 20 20 20 20 20 20 45 78 69 74              Exit
10550 20 74 68 69 73 20 70 72 6f 67 72 61 6d 5c 6e 22   this program\n"
10560 0a 20 20 22 2e 65 78 70 6c 61 69 6e 20 3f 6f 6e  .  ".explain ?on
10570 7c 6f 66 66 7c 61 75 74 6f 3f 20 54 75 72 6e 20  |off|auto? Turn 
10580 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 6d  EXPLAIN output m
10590 6f 64 65 20 6f 6e 20 6f 72 20 6f 66 66 20 6f 72  ode on or off or
105a0 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 5c 6e 22   to automatic\n"
105b0 0a 20 20 22 2e 66 75 6c 6c 73 63 68 65 6d 61 20  .  ".fullschema 
105c0 3f 2d 2d 69 6e 64 65 6e 74 3f 20 53 68 6f 77 20  ?--indent? Show 
105d0 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20 63  schema and the c
105e0 6f 6e 74 65 6e 74 20 6f 66 20 73 71 6c 69 74 65  ontent of sqlite
105f0 5f 73 74 61 74 20 74 61 62 6c 65 73 5c 6e 22 0a  _stat tables\n".
10600 20 20 22 2e 68 65 61 64 65 72 73 20 6f 6e 7c 6f    ".headers on|o
10610 66 66 20 20 20 20 20 20 20 20 54 75 72 6e 20 64  ff        Turn d
10620 69 73 70 6c 61 79 20 6f 66 20 68 65 61 64 65 72  isplay of header
10630 73 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 20  s on or off\n". 
10640 20 22 2e 68 65 6c 70 20 20 20 20 20 20 20 20 20   ".help         
10650 20 20 20 20 20 20 20 20 20 53 68 6f 77 20 74 68           Show th
10660 69 73 20 6d 65 73 73 61 67 65 5c 6e 22 0a 20 20  is message\n".  
10670 22 2e 69 6d 70 6f 72 74 20 46 49 4c 45 20 54 41  ".import FILE TA
10680 42 4c 45 20 20 20 20 20 49 6d 70 6f 72 74 20 64  BLE     Import d
10690 61 74 61 20 66 72 6f 6d 20 46 49 4c 45 20 69 6e  ata from FILE in
106a0 74 6f 20 54 41 42 4c 45 5c 6e 22 0a 20 20 22 2e  to TABLE\n".  ".
106b0 69 6e 64 65 78 65 73 20 3f 54 41 42 4c 45 3f 20  indexes ?TABLE? 
106c0 20 20 20 20 20 20 53 68 6f 77 20 6e 61 6d 65 73        Show names
106d0 20 6f 66 20 61 6c 6c 20 69 6e 64 65 78 65 73 5c   of all indexes\
106e0 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
106f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
10700 66 20 54 41 42 4c 45 20 73 70 65 63 69 66 69 65  f TABLE specifie
10710 64 2c 20 6f 6e 6c 79 20 73 68 6f 77 20 69 6e 64  d, only show ind
10720 65 78 65 73 20 66 6f 72 20 74 61 62 6c 65 73 5c  exes for tables\
10730 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
10750 61 74 63 68 69 6e 67 20 4c 49 4b 45 20 70 61 74  atching LIKE pat
10760 74 65 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a 23  tern TABLE.\n".#
10770 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
10780 42 4c 45 5f 49 4f 54 52 41 43 45 0a 20 20 22 2e  BLE_IOTRACE.  ".
10790 69 6f 74 72 61 63 65 20 46 49 4c 45 20 20 20 20  iotrace FILE    
107a0 20 20 20 20 20 20 45 6e 61 62 6c 65 20 49 2f 4f        Enable I/O
107b0 20 64 69 61 67 6e 6f 73 74 69 63 20 6c 6f 67 67   diagnostic logg
107c0 69 6e 67 20 74 6f 20 46 49 4c 45 5c 6e 22 0a 23  ing to FILE\n".#
107d0 65 6e 64 69 66 0a 20 20 22 2e 6c 69 6d 69 74 20  endif.  ".limit 
107e0 3f 4c 49 4d 49 54 3f 20 3f 56 41 4c 3f 20 20 20  ?LIMIT? ?VAL?   
107f0 44 69 73 70 6c 61 79 20 6f 72 20 63 68 61 6e 67  Display or chang
10800 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61  e the value of a
10810 6e 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5c 6e  n SQLITE_LIMIT\n
10820 22 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ".#ifndef SQLITE
10830 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e  _OMIT_LOAD_EXTEN
10840 53 49 4f 4e 0a 20 20 22 2e 6c 6f 61 64 20 46 49  SION.  ".load FI
10850 4c 45 20 3f 45 4e 54 52 59 3f 20 20 20 20 20 4c  LE ?ENTRY?     L
10860 6f 61 64 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e  oad an extension
10870 20 6c 69 62 72 61 72 79 5c 6e 22 0a 23 65 6e 64   library\n".#end
10880 69 66 0a 20 20 22 2e 6c 6f 67 20 46 49 4c 45 7c  if.  ".log FILE|
10890 6f 66 66 20 20 20 20 20 20 20 20 20 20 54 75 72  off          Tur
108a0 6e 20 6c 6f 67 67 69 6e 67 20 6f 6e 20 6f 72 20  n logging on or 
108b0 6f 66 66 2e 20 20 46 49 4c 45 20 63 61 6e 20 62  off.  FILE can b
108c0 65 20 73 74 64 65 72 72 2f 73 74 64 6f 75 74 5c  e stderr/stdout\
108d0 6e 22 0a 20 20 22 2e 6d 6f 64 65 20 4d 4f 44 45  n".  ".mode MODE
108e0 20 3f 54 41 42 4c 45 3f 20 20 20 20 20 53 65 74   ?TABLE?     Set
108f0 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 77 68 65   output mode whe
10900 72 65 20 4d 4f 44 45 20 69 73 20 6f 6e 65 20 6f  re MODE is one o
10910 66 3a 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20  f:\n".  "       
10920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10930 20 20 61 73 63 69 69 20 20 20 20 43 6f 6c 75 6d    ascii    Colum
10940 6e 73 2f 72 6f 77 73 20 64 65 6c 69 6d 69 74 65  ns/rows delimite
10950 64 20 62 79 20 30 78 31 46 20 61 6e 64 20 30 78  d by 0x1F and 0x
10960 31 45 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20  1E\n".  "       
10970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10980 20 20 63 73 76 20 20 20 20 20 20 43 6f 6d 6d 61    csv      Comma
10990 2d 73 65 70 61 72 61 74 65 64 20 76 61 6c 75 65  -separated value
109a0 73 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20  s\n".  "        
109b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109c0 20 63 6f 6c 75 6d 6e 20 20 20 4c 65 66 74 2d 61   column   Left-a
109d0 6c 69 67 6e 65 64 20 63 6f 6c 75 6d 6e 73 2e 20  ligned columns. 
109e0 20 28 53 65 65 20 2e 77 69 64 74 68 29 5c 6e 22   (See .width)\n"
109f0 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20  .  "            
10a00 20 20 20 20 20 20 20 20 20 20 20 20 20 68 74 6d               htm
10a10 6c 20 20 20 20 20 48 54 4d 4c 20 3c 74 61 62 6c  l     HTML <tabl
10a20 65 3e 20 63 6f 64 65 5c 6e 22 0a 20 20 22 20 20  e> code\n".  "  
10a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a40 20 20 20 20 20 20 20 69 6e 73 65 72 74 20 20 20         insert   
10a50 53 51 4c 20 69 6e 73 65 72 74 20 73 74 61 74 65  SQL insert state
10a60 6d 65 6e 74 73 20 66 6f 72 20 54 41 42 4c 45 5c  ments for TABLE\
10a70 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
10a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
10a90 69 6e 65 20 20 20 20 20 4f 6e 65 20 76 61 6c 75  ine     One valu
10aa0 65 20 70 65 72 20 6c 69 6e 65 5c 6e 22 0a 20 20  e per line\n".  
10ab0 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
10ac0 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 20 20            list  
10ad0 20 20 20 56 61 6c 75 65 73 20 64 65 6c 69 6d 69     Values delimi
10ae0 74 65 64 20 62 79 20 2e 73 65 70 61 72 61 74 6f  ted by .separato
10af0 72 20 73 74 72 69 6e 67 73 5c 6e 22 0a 20 20 22  r strings\n".  "
10b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b10 20 20 20 20 20 20 20 20 20 71 75 6f 74 65 20 20           quote  
10b20 20 20 45 73 63 61 70 65 20 61 6e 73 77 65 72 73    Escape answers
10b30 20 61 73 20 66 6f 72 20 53 51 4c 5c 6e 22 0a 20   as for SQL\n". 
10b40 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20   "              
10b50 20 20 20 20 20 20 20 20 20 20 20 74 61 62 73 20             tabs 
10b60 20 20 20 20 54 61 62 2d 73 65 70 61 72 61 74 65      Tab-separate
10b70 64 20 76 61 6c 75 65 73 5c 6e 22 0a 20 20 22 20  d values\n".  " 
10b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b90 20 20 20 20 20 20 20 20 74 63 6c 20 20 20 20 20          tcl     
10ba0 20 54 43 4c 20 6c 69 73 74 20 65 6c 65 6d 65 6e   TCL list elemen
10bb0 74 73 5c 6e 22 0a 20 20 22 2e 6e 75 6c 6c 76 61  ts\n".  ".nullva
10bc0 6c 75 65 20 53 54 52 49 4e 47 20 20 20 20 20 20  lue STRING      
10bd0 55 73 65 20 53 54 52 49 4e 47 20 69 6e 20 70 6c  Use STRING in pl
10be0 61 63 65 20 6f 66 20 4e 55 4c 4c 20 76 61 6c 75  ace of NULL valu
10bf0 65 73 5c 6e 22 0a 20 20 22 2e 6f 6e 63 65 20 46  es\n".  ".once F
10c00 49 4c 45 4e 41 4d 45 20 20 20 20 20 20 20 20 20  ILENAME         
10c10 4f 75 74 70 75 74 20 66 6f 72 20 74 68 65 20 6e  Output for the n
10c20 65 78 74 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 20  ext SQL command 
10c30 6f 6e 6c 79 20 74 6f 20 46 49 4c 45 4e 41 4d 45  only to FILENAME
10c40 5c 6e 22 0a 20 20 22 2e 6f 70 65 6e 20 3f 2d 2d  \n".  ".open ?--
10c50 6e 65 77 3f 20 3f 46 49 4c 45 3f 20 20 20 43 6c  new? ?FILE?   Cl
10c60 6f 73 65 20 65 78 69 73 74 69 6e 67 20 64 61 74  ose existing dat
10c70 61 62 61 73 65 20 61 6e 64 20 72 65 6f 70 65 6e  abase and reopen
10c80 20 46 49 4c 45 5c 6e 22 0a 20 20 22 20 20 20 20   FILE\n".  "    
10c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ca0 20 20 20 20 20 54 68 65 20 2d 2d 6e 65 77 20 73       The --new s
10cb0 74 61 72 74 73 20 77 69 74 68 20 61 6e 20 65 6d  tarts with an em
10cc0 70 74 79 20 66 69 6c 65 5c 6e 22 0a 20 20 22 2e  pty file\n".  ".
10cd0 6f 75 74 70 75 74 20 3f 46 49 4c 45 4e 41 4d 45  output ?FILENAME
10ce0 3f 20 20 20 20 20 53 65 6e 64 20 6f 75 74 70 75  ?     Send outpu
10cf0 74 20 74 6f 20 46 49 4c 45 4e 41 4d 45 20 6f 72  t to FILENAME or
10d00 20 73 74 64 6f 75 74 5c 6e 22 0a 20 20 22 2e 70   stdout\n".  ".p
10d10 72 69 6e 74 20 53 54 52 49 4e 47 2e 2e 2e 20 20  rint STRING...  
10d20 20 20 20 20 20 50 72 69 6e 74 20 6c 69 74 65 72       Print liter
10d30 61 6c 20 53 54 52 49 4e 47 5c 6e 22 0a 20 20 22  al STRING\n".  "
10d40 2e 70 72 6f 6d 70 74 20 4d 41 49 4e 20 43 4f 4e  .prompt MAIN CON
10d50 54 49 4e 55 45 20 20 52 65 70 6c 61 63 65 20 74  TINUE  Replace t
10d60 68 65 20 73 74 61 6e 64 61 72 64 20 70 72 6f 6d  he standard prom
10d70 70 74 73 5c 6e 22 0a 20 20 22 2e 71 75 69 74 20  pts\n".  ".quit 
10d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d90 20 45 78 69 74 20 74 68 69 73 20 70 72 6f 67 72   Exit this progr
10da0 61 6d 5c 6e 22 0a 20 20 22 2e 72 65 61 64 20 46  am\n".  ".read F
10db0 49 4c 45 4e 41 4d 45 20 20 20 20 20 20 20 20 20  ILENAME         
10dc0 45 78 65 63 75 74 65 20 53 51 4c 20 69 6e 20 46  Execute SQL in F
10dd0 49 4c 45 4e 41 4d 45 5c 6e 22 0a 20 20 22 2e 72  ILENAME\n".  ".r
10de0 65 73 74 6f 72 65 20 3f 44 42 3f 20 46 49 4c 45  estore ?DB? FILE
10df0 20 20 20 20 20 52 65 73 74 6f 72 65 20 63 6f 6e       Restore con
10e00 74 65 6e 74 20 6f 66 20 44 42 20 28 64 65 66 61  tent of DB (defa
10e10 75 6c 74 20 5c 22 6d 61 69 6e 5c 22 29 20 66 72  ult \"main\") fr
10e20 6f 6d 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e 73  om FILE\n".  ".s
10e30 61 76 65 20 46 49 4c 45 20 20 20 20 20 20 20 20  ave FILE        
10e40 20 20 20 20 20 57 72 69 74 65 20 69 6e 2d 6d 65       Write in-me
10e50 6d 6f 72 79 20 64 61 74 61 62 61 73 65 20 69 6e  mory database in
10e60 74 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 22 2e 73  to FILE\n".  ".s
10e70 63 61 6e 73 74 61 74 73 20 6f 6e 7c 6f 66 66 20  canstats on|off 
10e80 20 20 20 20 20 54 75 72 6e 20 73 71 6c 69 74 65       Turn sqlite
10e90 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74 75  3_stmt_scanstatu
10ea0 73 28 29 20 6d 65 74 72 69 63 73 20 6f 6e 20 6f  s() metrics on o
10eb0 72 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 73 63 68  r off\n".  ".sch
10ec0 65 6d 61 20 3f 50 41 54 54 45 52 4e 3f 20 20 20  ema ?PATTERN?   
10ed0 20 20 20 53 68 6f 77 20 74 68 65 20 43 52 45 41     Show the CREA
10ee0 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 6d 61  TE statements ma
10ef0 74 63 68 69 6e 67 20 50 41 54 54 45 52 4e 5c 6e  tching PATTERN\n
10f00 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
10f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
10f20 64 64 20 2d 2d 69 6e 64 65 6e 74 20 66 6f 72 20  dd --indent for 
10f30 70 72 65 74 74 79 2d 70 72 69 6e 74 69 6e 67 5c  pretty-printing\
10f40 6e 22 0a 20 20 22 2e 73 65 70 61 72 61 74 6f 72  n".  ".separator
10f50 20 43 4f 4c 20 3f 52 4f 57 3f 20 20 20 43 68 61   COL ?ROW?   Cha
10f60 6e 67 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 73  nge the column s
10f70 65 70 61 72 61 74 6f 72 20 61 6e 64 20 6f 70 74  eparator and opt
10f80 69 6f 6e 61 6c 6c 79 20 74 68 65 20 72 6f 77 5c  ionally the row\
10f90 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
10fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
10fb0 65 70 61 72 61 74 6f 72 20 66 6f 72 20 62 6f 74  eparator for bot
10fc0 68 20 74 68 65 20 6f 75 74 70 75 74 20 6d 6f 64  h the output mod
10fd0 65 20 61 6e 64 20 2e 69 6d 70 6f 72 74 5c 6e 22  e and .import\n"
10fe0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
10ff0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49  ITE_ENABLE_SESSI
11000 4f 4e 29 0a 20 20 22 2e 73 65 73 73 69 6f 6e 20  ON).  ".session 
11010 43 4d 44 20 2e 2e 2e 20 20 20 20 20 20 20 43 72  CMD ...       Cr
11020 65 61 74 65 20 6f 72 20 63 6f 6e 74 72 6f 6c 20  eate or control 
11030 73 65 73 73 69 6f 6e 73 5c 6e 22 0a 23 65 6e 64  sessions\n".#end
11040 69 66 0a 20 20 22 2e 73 68 65 6c 6c 20 43 4d 44  if.  ".shell CMD
11050 20 41 52 47 53 2e 2e 2e 20 20 20 20 20 52 75 6e   ARGS...     Run
11060 20 43 4d 44 20 41 52 47 53 2e 2e 2e 20 69 6e 20   CMD ARGS... in 
11070 61 20 73 79 73 74 65 6d 20 73 68 65 6c 6c 5c 6e  a system shell\n
11080 22 0a 20 20 22 2e 73 68 6f 77 20 20 20 20 20 20  ".  ".show      
11090 20 20 20 20 20 20 20 20 20 20 20 20 53 68 6f 77              Show
110a0 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c   the current val
110b0 75 65 73 20 66 6f 72 20 76 61 72 69 6f 75 73 20  ues for various 
110c0 73 65 74 74 69 6e 67 73 5c 6e 22 0a 20 20 22 2e  settings\n".  ".
110d0 73 74 61 74 73 20 3f 6f 6e 7c 6f 66 66 3f 20 20  stats ?on|off?  
110e0 20 20 20 20 20 20 53 68 6f 77 20 73 74 61 74 73        Show stats
110f0 20 6f 72 20 74 75 72 6e 20 73 74 61 74 73 20 6f   or turn stats o
11100 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 20 20 22 2e  n or off\n".  ".
11110 73 79 73 74 65 6d 20 43 4d 44 20 41 52 47 53 2e  system CMD ARGS.
11120 2e 2e 20 20 20 20 52 75 6e 20 43 4d 44 20 41 52  ..    Run CMD AR
11130 47 53 2e 2e 2e 20 69 6e 20 61 20 73 79 73 74 65  GS... in a syste
11140 6d 20 73 68 65 6c 6c 5c 6e 22 0a 20 20 22 2e 74  m shell\n".  ".t
11150 61 62 6c 65 73 20 3f 54 41 42 4c 45 3f 20 20 20  ables ?TABLE?   
11160 20 20 20 20 20 4c 69 73 74 20 6e 61 6d 65 73 20       List names 
11170 6f 66 20 74 61 62 6c 65 73 5c 6e 22 0a 20 20 22  of tables\n".  "
11180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11190 20 20 20 20 20 20 20 20 20 49 66 20 54 41 42 4c           If TABL
111a0 45 20 73 70 65 63 69 66 69 65 64 2c 20 6f 6e 6c  E specified, onl
111b0 79 20 6c 69 73 74 20 74 61 62 6c 65 73 20 6d 61  y list tables ma
111c0 74 63 68 69 6e 67 5c 6e 22 0a 20 20 22 20 20 20  tching\n".  "   
111d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111e0 20 20 20 20 20 20 4c 49 4b 45 20 70 61 74 74 65        LIKE patte
111f0 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a 20 20 22  rn TABLE.\n".  "
11200 2e 74 65 73 74 63 61 73 65 20 4e 41 4d 45 20 20  .testcase NAME  
11210 20 20 20 20 20 20 20 42 65 67 69 6e 20 72 65 64         Begin red
11220 69 72 65 63 74 69 6e 67 20 6f 75 74 70 75 74 20  irecting output 
11230 74 6f 20 27 74 65 73 74 63 61 73 65 2d 6f 75 74  to 'testcase-out
11240 2e 74 78 74 27 5c 6e 22 0a 20 20 22 2e 74 69 6d  .txt'\n".  ".tim
11250 65 6f 75 74 20 4d 53 20 20 20 20 20 20 20 20 20  eout MS         
11260 20 20 20 54 72 79 20 6f 70 65 6e 69 6e 67 20 6c     Try opening l
11270 6f 63 6b 65 64 20 74 61 62 6c 65 73 20 66 6f 72  ocked tables for
11280 20 4d 53 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73   MS milliseconds
11290 5c 6e 22 0a 20 20 22 2e 74 69 6d 65 72 20 6f 6e  \n".  ".timer on
112a0 7c 6f 66 66 20 20 20 20 20 20 20 20 20 20 54 75  |off          Tu
112b0 72 6e 20 53 51 4c 20 74 69 6d 65 72 20 6f 6e 20  rn SQL timer on 
112c0 6f 72 20 6f 66 66 5c 6e 22 0a 20 20 22 2e 74 72  or off\n".  ".tr
112d0 61 63 65 20 46 49 4c 45 7c 6f 66 66 20 20 20 20  ace FILE|off    
112e0 20 20 20 20 4f 75 74 70 75 74 20 65 61 63 68 20      Output each 
112f0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 73  SQL statement as
11300 20 69 74 20 69 73 20 72 75 6e 5c 6e 22 0a 20 20   it is run\n".  
11310 22 2e 76 66 73 69 6e 66 6f 20 3f 41 55 58 3f 20  ".vfsinfo ?AUX? 
11320 20 20 20 20 20 20 20 20 49 6e 66 6f 72 6d 61 74          Informat
11330 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 74 6f  ion about the to
11340 70 2d 6c 65 76 65 6c 20 56 46 53 5c 6e 22 0a 20  p-level VFS\n". 
11350 20 22 2e 76 66 73 6c 69 73 74 20 20 20 20 20 20   ".vfslist      
11360 20 20 20 20 20 20 20 20 20 4c 69 73 74 20 61 6c           List al
11370 6c 20 61 76 61 69 6c 61 62 6c 65 20 56 46 53 65  l available VFSe
11380 73 5c 6e 22 0a 20 20 22 2e 76 66 73 6e 61 6d 65  s\n".  ".vfsname
11390 20 3f 41 55 58 3f 20 20 20 20 20 20 20 20 20 50   ?AUX?         P
113a0 72 69 6e 74 20 74 68 65 20 6e 61 6d 65 20 6f 66  rint the name of
113b0 20 74 68 65 20 56 46 53 20 73 74 61 63 6b 5c 6e   the VFS stack\n
113c0 22 0a 20 20 22 2e 77 69 64 74 68 20 4e 55 4d 31  ".  ".width NUM1
113d0 20 4e 55 4d 32 20 2e 2e 2e 20 20 20 53 65 74 20   NUM2 ...   Set 
113e0 63 6f 6c 75 6d 6e 20 77 69 64 74 68 73 20 66 6f  column widths fo
113f0 72 20 5c 22 63 6f 6c 75 6d 6e 5c 22 20 6d 6f 64  r \"column\" mod
11400 65 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20  e\n".  "        
11410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11420 20 4e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73   Negative values
11430 20 72 69 67 68 74 2d 6a 75 73 74 69 66 79 5c 6e   right-justify\n
11440 22 0a 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  ".;..#if defined
11450 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
11460 45 53 53 49 4f 4e 29 0a 2f 2a 0a 2a 2a 20 50 72  ESSION)./*.** Pr
11470 69 6e 74 20 68 65 6c 70 20 69 6e 66 6f 72 6d 61  int help informa
11480 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 22 2e 73  tion for the ".s
11490 65 73 73 69 6f 6e 73 22 20 63 6f 6d 6d 61 6e 64  essions" command
114a0 0a 2a 2f 0a 76 6f 69 64 20 73 65 73 73 69 6f 6e  .*/.void session
114b0 5f 68 65 6c 70 28 53 68 65 6c 6c 53 74 61 74 65  _help(ShellState
114c0 20 2a 70 29 7b 0a 20 20 72 61 77 5f 70 72 69 6e   *p){.  raw_prin
114d0 74 66 28 70 2d 3e 6f 75 74 2c 0a 20 20 20 20 22  tf(p->out,.    "
114e0 2e 73 65 73 73 69 6f 6e 20 3f 4e 41 4d 45 3f 20  .session ?NAME? 
114f0 53 55 42 43 4f 4d 4d 41 4e 44 20 3f 41 52 47 53  SUBCOMMAND ?ARGS
11500 2e 2e 2e 3f 5c 6e 22 0a 20 20 20 20 22 49 66 20  ...?\n".    "If 
11510 3f 4e 41 4d 45 3f 20 69 73 20 6f 6d 69 74 74 65  ?NAME? is omitte
11520 64 2c 20 74 68 65 20 66 69 72 73 74 20 64 65 66  d, the first def
11530 69 6e 65 64 20 73 65 73 73 69 6f 6e 20 69 73 20  ined session is 
11540 75 73 65 64 2e 5c 6e 22 0a 20 20 20 20 22 53 75  used.\n".    "Su
11550 62 63 6f 6d 6d 61 6e 64 73 3a 5c 6e 22 0a 20 20  bcommands:\n".  
11560 20 20 22 20 20 20 61 74 74 61 63 68 20 54 41 42    "   attach TAB
11570 4c 45 20 20 20 20 20 20 20 20 20 20 20 20 20 41  LE             A
11580 74 74 61 63 68 20 54 41 42 4c 45 5c 6e 22 0a 20  ttach TABLE\n". 
11590 20 20 20 22 20 20 20 63 68 61 6e 67 65 73 65 74     "   changeset
115a0 20 46 49 4c 45 20 20 20 20 20 20 20 20 20 20 20   FILE           
115b0 57 72 69 74 65 20 61 20 63 68 61 6e 67 65 73 65  Write a changese
115c0 74 20 69 6e 74 6f 20 46 49 4c 45 5c 6e 22 0a 20  t into FILE\n". 
115d0 20 20 20 22 20 20 20 63 6c 6f 73 65 20 20 20 20     "   close    
115e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115f0 43 6c 6f 73 65 20 6f 6e 65 20 73 65 73 73 69 6f  Close one sessio
11600 6e 5c 6e 22 0a 20 20 20 20 22 20 20 20 65 6e 61  n\n".    "   ena
11610 62 6c 65 20 3f 42 4f 4f 4c 45 41 4e 3f 20 20 20  ble ?BOOLEAN?   
11620 20 20 20 20 20 20 53 65 74 20 6f 72 20 71 75 65        Set or que
11630 72 79 20 74 68 65 20 65 6e 61 62 6c 65 20 62 69  ry the enable bi
11640 74 5c 6e 22 0a 20 20 20 20 22 20 20 20 66 69 6c  t\n".    "   fil
11650 74 65 72 20 47 4c 4f 42 2e 2e 2e 20 20 20 20 20  ter GLOB...     
11660 20 20 20 20 20 20 52 65 6a 65 63 74 20 74 61 62        Reject tab
11670 6c 65 73 20 6d 61 74 63 68 69 6e 67 20 47 4c 4f  les matching GLO
11680 42 73 5c 6e 22 0a 20 20 20 20 22 20 20 20 69 6e  Bs\n".    "   in
11690 64 69 72 65 63 74 20 3f 42 4f 4f 4c 45 41 4e 3f  direct ?BOOLEAN?
116a0 20 20 20 20 20 20 20 4d 61 72 6b 20 6f 72 20 71         Mark or q
116b0 75 65 72 79 20 74 68 65 20 69 6e 64 69 72 65 63  uery the indirec
116c0 74 20 73 74 61 74 75 73 5c 6e 22 0a 20 20 20 20  t status\n".    
116d0 22 20 20 20 69 73 65 6d 70 74 79 20 20 20 20 20  "   isempty     
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 51 75 65               Que
116f0 72 79 20 77 68 65 74 68 65 72 20 74 68 65 20 73  ry whether the s
11700 65 73 73 69 6f 6e 20 69 73 20 65 6d 70 74 79 5c  ession is empty\
11710 6e 22 0a 20 20 20 20 22 20 20 20 6c 69 73 74 20  n".    "   list 
11720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11730 20 20 20 20 4c 69 73 74 20 63 75 72 72 65 6e 74      List current
11740 6c 79 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e 20  ly open session 
11750 6e 61 6d 65 73 5c 6e 22 0a 20 20 20 20 22 20 20  names\n".    "  
11760 20 6f 70 65 6e 20 44 42 20 4e 41 4d 45 20 20 20   open DB NAME   
11770 20 20 20 20 20 20 20 20 20 20 4f 70 65 6e 20 61            Open a
11780 20 6e 65 77 20 73 65 73 73 69 6f 6e 20 6f 6e 20   new session on 
11790 44 42 5c 6e 22 0a 20 20 20 20 22 20 20 20 70 61  DB\n".    "   pa
117a0 74 63 68 73 65 74 20 46 49 4c 45 20 20 20 20 20  tchset FILE     
117b0 20 20 20 20 20 20 20 57 72 69 74 65 20 61 20 70         Write a p
117c0 61 74 63 68 73 65 74 20 69 6e 74 6f 20 46 49 4c  atchset into FIL
117d0 45 5c 6e 22 0a 20 20 29 3b 0a 7d 0a 23 65 6e 64  E\n".  );.}.#end
117e0 69 66 0a 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20  if.../* Forward 
117f0 72 65 66 65 72 65 6e 63 65 20 2a 2f 0a 73 74 61  reference */.sta
11800 74 69 63 20 69 6e 74 20 70 72 6f 63 65 73 73 5f  tic int process_
11810 69 6e 70 75 74 28 53 68 65 6c 6c 53 74 61 74 65  input(ShellState
11820 20 2a 70 2c 20 46 49 4c 45 20 2a 69 6e 29 3b 0a   *p, FILE *in);.
11830 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65  ../*.** Read the
11840 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66 69   content of a fi
11850 6c 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 6f  le into memory o
11860 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
11870 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 29 2e  ite3_malloc64().
11880 0a 2a 2a 20 54 68 65 20 63 61 6c 6c 65 72 20 69  .** The caller i
11890 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  s responsible fo
118a0 72 20 66 72 65 65 69 6e 67 20 74 68 65 20 6d 65  r freeing the me
118b0 6d 6f 72 79 2e 0a 2a 2a 0a 2a 2a 20 4e 55 4c 4c  mory..**.** NULL
118c0 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20   is returned if 
118d0 61 6e 79 20 65 72 72 6f 72 20 69 73 20 65 6e 63  any error is enc
118e0 6f 75 6e 74 65 72 65 64 2e 0a 2a 2f 0a 73 74 61  ountered..*/.sta
118f0 74 69 63 20 63 68 61 72 20 2a 72 65 61 64 46 69  tic char *readFi
11900 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  le(const char *z
11910 4e 61 6d 65 29 7b 0a 20 20 46 49 4c 45 20 2a 69  Name){.  FILE *i
11920 6e 20 3d 20 66 6f 70 65 6e 28 7a 4e 61 6d 65 2c  n = fopen(zName,
11930 20 22 72 62 22 29 3b 0a 20 20 6c 6f 6e 67 20 6e   "rb");.  long n
11940 49 6e 3b 0a 20 20 73 69 7a 65 5f 74 20 6e 52 65  In;.  size_t nRe
11950 61 64 3b 0a 20 20 63 68 61 72 20 2a 70 42 75 66  ad;.  char *pBuf
11960 3b 0a 20 20 69 66 28 20 69 6e 3d 3d 30 20 29 20  ;.  if( in==0 ) 
11970 72 65 74 75 72 6e 20 30 3b 0a 20 20 66 73 65 65  return 0;.  fsee
11980 6b 28 69 6e 2c 20 30 2c 20 53 45 45 4b 5f 45 4e  k(in, 0, SEEK_EN
11990 44 29 3b 0a 20 20 6e 49 6e 20 3d 20 66 74 65 6c  D);.  nIn = ftel
119a0 6c 28 69 6e 29 3b 0a 20 20 72 65 77 69 6e 64 28  l(in);.  rewind(
119b0 69 6e 29 3b 0a 20 20 70 42 75 66 20 3d 20 73 71  in);.  pBuf = sq
119c0 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 20  lite3_malloc64( 
119d0 6e 49 6e 2b 31 20 29 3b 0a 20 20 69 66 28 20 70  nIn+1 );.  if( p
119e0 42 75 66 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  Buf==0 ) return 
119f0 30 3b 0a 20 20 6e 52 65 61 64 20 3d 20 66 72 65  0;.  nRead = fre
11a00 61 64 28 70 42 75 66 2c 20 6e 49 6e 2c 20 31 2c  ad(pBuf, nIn, 1,
11a10 20 69 6e 29 3b 0a 20 20 66 63 6c 6f 73 65 28 69   in);.  fclose(i
11a20 6e 29 3b 0a 20 20 69 66 28 20 6e 52 65 61 64 21  n);.  if( nRead!
11a30 3d 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =1 ){.    sqlite
11a40 33 5f 66 72 65 65 28 70 42 75 66 29 3b 0a 20 20  3_free(pBuf);.  
11a50 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
11a60 20 20 70 42 75 66 5b 6e 49 6e 5d 20 3d 20 30 3b    pBuf[nIn] = 0;
11a70 0a 20 20 72 65 74 75 72 6e 20 70 42 75 66 3b 0a  .  return pBuf;.
11a80 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65  }../*.** Impleme
11a90 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 22  ntation of the "
11aa0 72 65 61 64 66 69 6c 65 28 58 29 22 20 53 51 4c  readfile(X)" SQL
11ab0 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20   function.  The 
11ac0 65 6e 74 69 72 65 20 63 6f 6e 74 65 6e 74 0a 2a  entire content.*
11ad0 2a 20 6f 66 20 74 68 65 20 66 69 6c 65 20 6e 61  * of the file na
11ae0 6d 65 64 20 58 20 69 73 20 72 65 61 64 20 61 6e  med X is read an
11af0 64 20 72 65 74 75 72 6e 65 64 20 61 73 20 61 20  d returned as a 
11b00 42 4c 4f 42 2e 20 20 4e 55 4c 4c 20 69 73 20 72  BLOB.  NULL is r
11b10 65 74 75 72 6e 65 64 0a 2a 2a 20 69 66 20 74 68  eturned.** if th
11b20 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20  e file does not 
11b30 65 78 69 73 74 20 6f 72 20 69 73 20 75 6e 72 65  exist or is unre
11b40 61 64 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69  adable..*/.stati
11b50 63 20 76 6f 69 64 20 72 65 61 64 66 69 6c 65 46  c void readfileF
11b60 75 6e 63 28 0a 20 20 73 71 6c 69 74 65 33 5f 63  unc(.  sqlite3_c
11b70 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c  ontext *context,
11b80 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 73  .  int argc,.  s
11b90 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
11ba0 72 67 76 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 63  rgv.){.  const c
11bb0 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 76 6f  har *zName;.  vo
11bc0 69 64 20 2a 70 42 75 66 3b 0a 0a 20 20 55 4e 55  id *pBuf;..  UNU
11bd0 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 61 72  SED_PARAMETER(ar
11be0 67 63 29 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 28  gc);.  zName = (
11bf0 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
11c00 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61  te3_value_text(a
11c10 72 67 76 5b 30 5d 29 3b 0a 20 20 69 66 28 20 7a  rgv[0]);.  if( z
11c20 4e 61 6d 65 3d 3d 30 20 29 20 72 65 74 75 72 6e  Name==0 ) return
11c30 3b 0a 20 20 70 42 75 66 20 3d 20 72 65 61 64 46  ;.  pBuf = readF
11c40 69 6c 65 28 7a 4e 61 6d 65 29 3b 0a 20 20 69 66  ile(zName);.  if
11c50 28 20 70 42 75 66 20 29 20 73 71 6c 69 74 65 33  ( pBuf ) sqlite3
11c60 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e  _result_blob(con
11c70 74 65 78 74 2c 20 70 42 75 66 2c 20 2d 31 2c 20  text, pBuf, -1, 
11c80 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 7d  sqlite3_free);.}
11c90 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e  ../*.** Implemen
11ca0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 22 77  tation of the "w
11cb0 72 69 74 65 66 69 6c 65 28 58 2c 59 29 22 20 53  ritefile(X,Y)" S
11cc0 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  QL function.  Th
11cd0 65 20 61 72 67 75 6d 65 6e 74 20 59 0a 2a 2a 20  e argument Y.** 
11ce0 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  is written into 
11cf0 66 69 6c 65 20 58 2e 20 20 54 68 65 20 6e 75 6d  file X.  The num
11d00 62 65 72 20 6f 66 20 62 79 74 65 73 20 77 72 69  ber of bytes wri
11d10 74 74 65 6e 20 69 73 20 72 65 74 75 72 6e 65 64  tten is returned
11d20 2e 20 20 4f 72 0a 2a 2a 20 4e 55 4c 4c 20 69 73  .  Or.** NULL is
11d30 20 72 65 74 75 72 6e 65 64 20 69 66 20 73 6f 6d   returned if som
11d40 65 74 68 69 6e 67 20 67 6f 65 73 20 77 72 6f 6e  ething goes wron
11d50 67 2c 20 73 75 63 68 20 61 73 20 62 65 69 6e 67  g, such as being
11d60 20 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 0a   unable to open.
11d70 2a 2a 20 66 69 6c 65 20 58 20 66 6f 72 20 77 72  ** file X for wr
11d80 69 74 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63  iting..*/.static
11d90 20 76 6f 69 64 20 77 72 69 74 65 66 69 6c 65 46   void writefileF
11da0 75 6e 63 28 0a 20 20 73 71 6c 69 74 65 33 5f 63  unc(.  sqlite3_c
11db0 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c  ontext *context,
11dc0 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 73  .  int argc,.  s
11dd0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
11de0 72 67 76 0a 29 7b 0a 20 20 46 49 4c 45 20 2a 6f  rgv.){.  FILE *o
11df0 75 74 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  ut;.  const char
11e00 20 2a 7a 3b 0a 20 20 73 71 6c 69 74 65 33 5f 69   *z;.  sqlite3_i
11e10 6e 74 36 34 20 72 63 3b 0a 20 20 63 6f 6e 73 74  nt64 rc;.  const
11e20 20 63 68 61 72 20 2a 7a 46 69 6c 65 3b 0a 0a 20   char *zFile;.. 
11e30 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
11e40 52 28 61 72 67 63 29 3b 0a 20 20 7a 46 69 6c 65  R(argc);.  zFile
11e50 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
11e60 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
11e70 78 74 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 69  xt(argv[0]);.  i
11e80 66 28 20 7a 46 69 6c 65 3d 3d 30 20 29 20 72 65  f( zFile==0 ) re
11e90 74 75 72 6e 3b 0a 20 20 6f 75 74 20 3d 20 66 6f  turn;.  out = fo
11ea0 70 65 6e 28 7a 46 69 6c 65 2c 20 22 77 62 22 29  pen(zFile, "wb")
11eb0 3b 0a 20 20 69 66 28 20 6f 75 74 3d 3d 30 20 29  ;.  if( out==0 )
11ec0 20 72 65 74 75 72 6e 3b 0a 20 20 7a 20 3d 20 28   return;.  z = (
11ed0 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
11ee0 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 61  te3_value_blob(a
11ef0 72 67 76 5b 31 5d 29 3b 0a 20 20 69 66 28 20 7a  rgv[1]);.  if( z
11f00 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
11f10 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
11f20 72 63 20 3d 20 66 77 72 69 74 65 28 7a 2c 20 31  rc = fwrite(z, 1
11f30 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
11f40 62 79 74 65 73 28 61 72 67 76 5b 31 5d 29 2c 20  bytes(argv[1]), 
11f50 6f 75 74 29 3b 0a 20 20 7d 0a 20 20 66 63 6c 6f  out);.  }.  fclo
11f60 73 65 28 6f 75 74 29 3b 0a 20 20 73 71 6c 69 74  se(out);.  sqlit
11f70 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28  e3_result_int64(
11f80 63 6f 6e 74 65 78 74 2c 20 72 63 29 3b 0a 7d 0a  context, rc);.}.
11f90 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
11fa0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49  ITE_ENABLE_SESSI
11fb0 4f 4e 29 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20  ON)./*.** Close 
11fc0 61 20 73 69 6e 67 6c 65 20 4f 70 65 6e 53 65 73  a single OpenSes
11fd0 73 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20  sion object and 
11fe0 72 65 6c 65 61 73 65 20 61 6c 6c 20 6f 66 20 69  release all of i
11ff0 74 73 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a  ts associated.**
12000 20 72 65 73 6f 75 72 63 65 73 2e 0a 2a 2f 0a 73   resources..*/.s
12010 74 61 74 69 63 20 76 6f 69 64 20 73 65 73 73 69  tatic void sessi
12020 6f 6e 5f 63 6c 6f 73 65 28 4f 70 65 6e 53 65 73  on_close(OpenSes
12030 73 69 6f 6e 20 2a 70 53 65 73 73 69 6f 6e 29 7b  sion *pSession){
12040 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69  .  int i;.  sqli
12050 74 65 33 73 65 73 73 69 6f 6e 5f 64 65 6c 65 74  te3session_delet
12060 65 28 70 53 65 73 73 69 6f 6e 2d 3e 70 29 3b 0a  e(pSession->p);.
12070 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70    sqlite3_free(p
12080 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 29 3b  Session->zName);
12090 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 53  .  for(i=0; i<pS
120a0 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 3b  ession->nFilter;
120b0 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74   i++){.    sqlit
120c0 65 33 5f 66 72 65 65 28 70 53 65 73 73 69 6f 6e  e3_free(pSession
120d0 2d 3e 61 7a 46 69 6c 74 65 72 5b 69 5d 29 3b 0a  ->azFilter[i]);.
120e0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72    }.  sqlite3_fr
120f0 65 65 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46  ee(pSession->azF
12100 69 6c 74 65 72 29 3b 0a 20 20 6d 65 6d 73 65 74  ilter);.  memset
12110 28 70 53 65 73 73 69 6f 6e 2c 20 30 2c 20 73 69  (pSession, 0, si
12120 7a 65 6f 66 28 4f 70 65 6e 53 65 73 73 69 6f 6e  zeof(OpenSession
12130 29 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ));.}.#endif../*
12140 0a 2a 2a 20 43 6c 6f 73 65 20 61 6c 6c 20 4f 70  .** Close all Op
12150 65 6e 53 65 73 73 69 6f 6e 20 6f 62 6a 65 63 74  enSession object
12160 73 20 61 6e 64 20 72 65 6c 65 61 73 65 20 61 6c  s and release al
12170 6c 20 61 73 73 6f 63 69 61 74 65 64 20 72 65 73  l associated res
12180 6f 75 72 63 65 73 2e 0a 2a 2f 0a 23 69 66 20 64  ources..*/.#if d
12190 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
121a0 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 73 74  ABLE_SESSION).st
121b0 61 74 69 63 20 76 6f 69 64 20 73 65 73 73 69 6f  atic void sessio
121c0 6e 5f 63 6c 6f 73 65 5f 61 6c 6c 28 53 68 65 6c  n_close_all(Shel
121d0 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 69 6e  lState *p){.  in
121e0 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  t i;.  for(i=0; 
121f0 69 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69  i<p->nSession; i
12200 2b 2b 29 7b 0a 20 20 20 20 73 65 73 73 69 6f 6e  ++){.    session
12210 5f 63 6c 6f 73 65 28 26 70 2d 3e 61 53 65 73 73  _close(&p->aSess
12220 69 6f 6e 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 70  ion[i]);.  }.  p
12230 2d 3e 6e 53 65 73 73 69 6f 6e 20 3d 20 30 3b 0a  ->nSession = 0;.
12240 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  }.#else.# define
12250 20 73 65 73 73 69 6f 6e 5f 63 6c 6f 73 65 5f 61   session_close_a
12260 6c 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ll(X).#endif../*
12270 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69  .** Implementati
12280 6f 6e 20 6f 66 20 74 68 65 20 78 46 69 6c 74 65  on of the xFilte
12290 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  r function for a
122a0 6e 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e 2e 20  n open session. 
122b0 20 4f 6d 69 74 0a 2a 2a 20 61 6e 79 20 74 61 62   Omit.** any tab
122c0 6c 65 73 20 6e 61 6d 65 64 20 62 79 20 22 2e 73  les named by ".s
122d0 65 73 73 69 6f 6e 20 66 69 6c 74 65 72 22 20 62  ession filter" b
122e0 75 74 20 6c 65 74 20 61 6c 6c 20 6f 74 68 65 72  ut let all other
122f0 20 74 61 62 6c 65 20 74 68 72 6f 75 67 68 2e 0a   table through..
12300 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
12310 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53  QLITE_ENABLE_SES
12320 53 49 4f 4e 29 0a 73 74 61 74 69 63 20 69 6e 74  SION).static int
12330 20 73 65 73 73 69 6f 6e 5f 66 69 6c 74 65 72 28   session_filter(
12340 76 6f 69 64 20 2a 70 43 74 78 2c 20 63 6f 6e 73  void *pCtx, cons
12350 74 20 63 68 61 72 20 2a 7a 54 61 62 29 7b 0a 20  t char *zTab){. 
12360 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20 2a 70 53   OpenSession *pS
12370 65 73 73 69 6f 6e 20 3d 20 28 4f 70 65 6e 53 65  ession = (OpenSe
12380 73 73 69 6f 6e 2a 29 70 43 74 78 3b 0a 20 20 69  ssion*)pCtx;.  i
12390 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  nt i;.  for(i=0;
123a0 20 69 3c 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69   i<pSession->nFi
123b0 6c 74 65 72 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  lter; i++){.    
123c0 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 67  if( sqlite3_strg
123d0 6c 6f 62 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a  lob(pSession->az
123e0 46 69 6c 74 65 72 5b 69 5d 2c 20 7a 54 61 62 29  Filter[i], zTab)
123f0 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
12400 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a    }.  return 1;.
12410 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
12420 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61  Make sure the da
12430 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2e 20  tabase is open. 
12440 20 49 66 20 69 74 20 69 73 20 6e 6f 74 2c 20 74   If it is not, t
12450 68 65 6e 20 6f 70 65 6e 20 69 74 2e 20 20 49 66  hen open it.  If
12460 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65  .** the database
12470 20 66 61 69 6c 73 20 74 6f 20 6f 70 65 6e 2c 20   fails to open, 
12480 70 72 69 6e 74 20 61 6e 20 65 72 72 6f 72 20 6d  print an error m
12490 65 73 73 61 67 65 20 61 6e 64 20 65 78 69 74 2e  essage and exit.
124a0 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
124b0 6f 70 65 6e 5f 64 62 28 53 68 65 6c 6c 53 74 61  open_db(ShellSta
124c0 74 65 20 2a 70 2c 20 69 6e 74 20 6b 65 65 70 41  te *p, int keepA
124d0 6c 69 76 65 29 7b 0a 20 20 69 66 28 20 70 2d 3e  live){.  if( p->
124e0 64 62 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  db==0 ){.    sql
124f0 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28  ite3_initialize(
12500 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6f  );.    sqlite3_o
12510 70 65 6e 28 70 2d 3e 7a 44 62 46 69 6c 65 6e 61  pen(p->zDbFilena
12520 6d 65 2c 20 26 70 2d 3e 64 62 29 3b 0a 20 20 20  me, &p->db);.   
12530 20 67 6c 6f 62 61 6c 44 62 20 3d 20 70 2d 3e 64   globalDb = p->d
12540 62 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62  b;.    if( p->db
12550 20 26 26 20 73 71 6c 69 74 65 33 5f 65 72 72 63   && sqlite3_errc
12560 6f 64 65 28 70 2d 3e 64 62 29 3d 3d 53 51 4c 49  ode(p->db)==SQLI
12570 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73  TE_OK ){.      s
12580 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
12590 6e 63 74 69 6f 6e 28 70 2d 3e 64 62 2c 20 22 73  nction(p->db, "s
125a0 68 65 6c 6c 73 74 61 74 69 63 22 2c 20 30 2c 20  hellstatic", 0, 
125b0 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 0a  SQLITE_UTF8, 0,.
125c0 20 20 20 20 20 20 20 20 20 20 73 68 65 6c 6c 73            shells
125d0 74 61 74 69 63 46 75 6e 63 2c 20 30 2c 20 30 29  taticFunc, 0, 0)
125e0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
125f0 70 2d 3e 64 62 3d 3d 30 20 7c 7c 20 53 51 4c 49  p->db==0 || SQLI
12600 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 5f 65  TE_OK!=sqlite3_e
12610 72 72 63 6f 64 65 28 70 2d 3e 64 62 29 20 29 7b  rrcode(p->db) ){
12620 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
12630 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72  tf(stderr,"Error
12640 3a 20 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e  : unable to open
12650 20 64 61 74 61 62 61 73 65 20 5c 22 25 73 5c 22   database \"%s\"
12660 3a 20 25 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20  : %s\n",.       
12670 20 20 20 70 2d 3e 7a 44 62 46 69 6c 65 6e 61 6d     p->zDbFilenam
12680 65 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  e, sqlite3_errms
12690 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20  g(p->db));.     
126a0 20 69 66 28 20 6b 65 65 70 41 6c 69 76 65 20 29   if( keepAlive )
126b0 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 65   return;.      e
126c0 78 69 74 28 31 29 3b 0a 20 20 20 20 7d 0a 23 69  xit(1);.    }.#i
126d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
126e0 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
126f0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 6e 61  .    sqlite3_ena
12700 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble_load_extensi
12710 6f 6e 28 70 2d 3e 64 62 2c 20 31 29 3b 0a 23 65  on(p->db, 1);.#e
12720 6e 64 69 66 0a 20 20 20 20 73 71 6c 69 74 65 33  ndif.    sqlite3
12730 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
12740 28 70 2d 3e 64 62 2c 20 22 72 65 61 64 66 69 6c  (p->db, "readfil
12750 65 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55 54  e", 1, SQLITE_UT
12760 46 38 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20  F8, 0,.         
12770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12780 20 20 20 72 65 61 64 66 69 6c 65 46 75 6e 63 2c     readfileFunc,
12790 20 30 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69   0, 0);.    sqli
127a0 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
127b0 69 6f 6e 28 70 2d 3e 64 62 2c 20 22 77 72 69 74  ion(p->db, "writ
127c0 65 66 69 6c 65 22 2c 20 32 2c 20 53 51 4c 49 54  efile", 2, SQLIT
127d0 45 5f 55 54 46 38 2c 20 30 2c 0a 20 20 20 20 20  E_UTF8, 0,.     
127e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127f0 20 20 20 20 20 20 20 77 72 69 74 65 66 69 6c 65         writefile
12800 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20 20 7d  Func, 0, 0);.  }
12810 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 6f 20 43 2d 6c  .}../*.** Do C-l
12820 61 6e 67 75 61 67 65 20 73 74 79 6c 65 20 64 65  anguage style de
12830 71 75 6f 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20  quoting..**.**  
12840 20 20 5c 61 20 20 20 20 2d 3e 20 61 6c 61 72 6d    \a    -> alarm
12850 0a 2a 2a 20 20 20 20 5c 62 20 20 20 20 2d 3e 20  .**    \b    -> 
12860 62 61 63 6b 73 70 61 63 65 0a 2a 2a 20 20 20 20  backspace.**    
12870 5c 74 20 20 20 20 2d 3e 20 74 61 62 0a 2a 2a 20  \t    -> tab.** 
12880 20 20 20 5c 6e 20 20 20 20 2d 3e 20 6e 65 77 6c     \n    -> newl
12890 69 6e 65 0a 2a 2a 20 20 20 20 5c 76 20 20 20 20  ine.**    \v    
128a0 2d 3e 20 76 65 72 74 69 63 61 6c 20 74 61 62 0a  -> vertical tab.
128b0 2a 2a 20 20 20 20 5c 66 20 20 20 20 2d 3e 20 66  **    \f    -> f
128c0 6f 72 6d 20 66 65 65 64 0a 2a 2a 20 20 20 20 5c  orm feed.**    \
128d0 72 20 20 20 20 2d 3e 20 63 61 72 72 69 61 67 65  r    -> carriage
128e0 20 72 65 74 75 72 6e 0a 2a 2a 20 20 20 20 5c 73   return.**    \s
128f0 20 20 20 20 2d 3e 20 73 70 61 63 65 0a 2a 2a 20      -> space.** 
12900 20 20 20 5c 22 20 20 20 20 2d 3e 20 22 0a 2a 2a     \"    -> ".**
12910 20 20 20 20 5c 27 20 20 20 20 2d 3e 20 27 0a 2a      \'    -> '.*
12920 2a 20 20 20 20 5c 5c 20 20 20 20 2d 3e 20 62 61  *    \\    -> ba
12930 63 6b 73 6c 61 73 68 0a 2a 2a 20 20 20 20 5c 4e  ckslash.**    \N
12940 4e 4e 20 20 2d 3e 20 61 73 63 69 69 20 63 68 61  NN  -> ascii cha
12950 72 61 63 74 65 72 20 4e 4e 4e 20 69 6e 20 6f 63  racter NNN in oc
12960 74 61 6c 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  tal.*/.static vo
12970 69 64 20 72 65 73 6f 6c 76 65 5f 62 61 63 6b 73  id resolve_backs
12980 6c 61 73 68 65 73 28 63 68 61 72 20 2a 7a 29 7b  lashes(char *z){
12990 0a 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 63  .  int i, j;.  c
129a0 68 61 72 20 63 3b 0a 20 20 77 68 69 6c 65 28 20  har c;.  while( 
129b0 2a 7a 20 26 26 20 2a 7a 21 3d 27 5c 5c 27 20 29  *z && *z!='\\' )
129c0 20 7a 2b 2b 3b 0a 20 20 66 6f 72 28 69 3d 6a 3d   z++;.  for(i=j=
129d0 30 3b 20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d 30  0; (c = z[i])!=0
129e0 3b 20 69 2b 2b 2c 20 6a 2b 2b 29 7b 0a 20 20 20  ; i++, j++){.   
129f0 20 69 66 28 20 63 3d 3d 27 5c 5c 27 20 26 26 20   if( c=='\\' && 
12a00 7a 5b 69 2b 31 5d 21 3d 30 20 29 7b 0a 20 20 20  z[i+1]!=0 ){.   
12a10 20 20 20 63 20 3d 20 7a 5b 2b 2b 69 5d 3b 0a 20     c = z[++i];. 
12a20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 61 27 20       if( c=='a' 
12a30 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27  ){.        c = '
12a40 5c 61 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  \a';.      }else
12a50 20 69 66 28 20 63 3d 3d 27 62 27 20 29 7b 0a 20   if( c=='b' ){. 
12a60 20 20 20 20 20 20 20 63 20 3d 20 27 5c 62 27 3b         c = '\b';
12a70 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
12a80 20 63 3d 3d 27 74 27 20 29 7b 0a 20 20 20 20 20   c=='t' ){.     
12a90 20 20 20 63 20 3d 20 27 5c 74 27 3b 0a 20 20 20     c = '\t';.   
12aa0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
12ab0 27 6e 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63  'n' ){.        c
12ac0 20 3d 20 27 5c 6e 27 3b 0a 20 20 20 20 20 20 7d   = '\n';.      }
12ad0 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 76 27 20  else if( c=='v' 
12ae0 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27  ){.        c = '
12af0 5c 76 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  \v';.      }else
12b00 20 69 66 28 20 63 3d 3d 27 66 27 20 29 7b 0a 20   if( c=='f' ){. 
12b10 20 20 20 20 20 20 20 63 20 3d 20 27 5c 66 27 3b         c = '\f';
12b20 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
12b30 20 63 3d 3d 27 72 27 20 29 7b 0a 20 20 20 20 20   c=='r' ){.     
12b40 20 20 20 63 20 3d 20 27 5c 72 27 3b 0a 20 20 20     c = '\r';.   
12b50 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
12b60 27 22 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63  '"' ){.        c
12b70 20 3d 20 27 22 27 3b 0a 20 20 20 20 20 20 7d 65   = '"';.      }e
12b80 6c 73 65 20 69 66 28 20 63 3d 3d 27 5c 27 27 20  lse if( c=='\'' 
12b90 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27  ){.        c = '
12ba0 5c 27 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  \'';.      }else
12bb0 20 69 66 28 20 63 3d 3d 27 5c 5c 27 20 29 7b 0a   if( c=='\\' ){.
12bc0 20 20 20 20 20 20 20 20 63 20 3d 20 27 5c 5c 27          c = '\\'
12bd0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
12be0 28 20 63 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27  ( c>='0' && c<='
12bf0 37 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20  7' ){.        c 
12c00 2d 3d 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20  -= '0';.        
12c10 69 66 28 20 7a 5b 69 2b 31 5d 3e 3d 27 30 27 20  if( z[i+1]>='0' 
12c20 26 26 20 7a 5b 69 2b 31 5d 3c 3d 27 37 27 20 29  && z[i+1]<='7' )
12c30 7b 0a 20 20 20 20 20 20 20 20 20 20 69 2b 2b 3b  {.          i++;
12c40 0a 20 20 20 20 20 20 20 20 20 20 63 20 3d 20 28  .          c = (
12c50 63 3c 3c 33 29 20 2b 20 7a 5b 69 5d 20 2d 20 27  c<<3) + z[i] - '
12c60 30 27 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  0';.          if
12c70 28 20 7a 5b 69 2b 31 5d 3e 3d 27 30 27 20 26 26  ( z[i+1]>='0' &&
12c80 20 7a 5b 69 2b 31 5d 3c 3d 27 37 27 20 29 7b 0a   z[i+1]<='7' ){.
12c90 20 20 20 20 20 20 20 20 20 20 20 20 69 2b 2b 3b              i++;
12ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 20 3d  .            c =
12cb0 20 28 63 3c 3c 33 29 20 2b 20 7a 5b 69 5d 20 2d   (c<<3) + z[i] -
12cc0 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20 20 20   '0';.          
12cd0 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
12ce0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 5b    }.    }.    z[
12cf0 6a 5d 20 3d 20 63 3b 0a 20 20 7d 0a 20 20 69 66  j] = c;.  }.  if
12d00 28 20 6a 3c 69 20 29 20 7a 5b 6a 5d 20 3d 20 30  ( j<i ) z[j] = 0
12d10 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
12d20 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61  n the value of a
12d30 20 68 65 78 61 64 65 63 69 6d 61 6c 20 64 69 67   hexadecimal dig
12d40 69 74 2e 20 20 52 65 74 75 72 6e 20 2d 31 20 69  it.  Return -1 i
12d50 66 20 74 68 65 20 69 6e 70 75 74 0a 2a 2a 20 69  f the input.** i
12d60 73 20 6e 6f 74 20 61 20 68 65 78 20 64 69 67 69  s not a hex digi
12d70 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  t..*/.static int
12d80 20 68 65 78 44 69 67 69 74 56 61 6c 75 65 28 63   hexDigitValue(c
12d90 68 61 72 20 63 29 7b 0a 20 20 69 66 28 20 63 3e  har c){.  if( c>
12da0 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27 20 29  ='0' && c<='9' )
12db0 20 72 65 74 75 72 6e 20 63 20 2d 20 27 30 27 3b   return c - '0';
12dc0 0a 20 20 69 66 28 20 63 3e 3d 27 61 27 20 26 26  .  if( c>='a' &&
12dd0 20 63 3c 3d 27 66 27 20 29 20 72 65 74 75 72 6e   c<='f' ) return
12de0 20 63 20 2d 20 27 61 27 20 2b 20 31 30 3b 0a 20   c - 'a' + 10;. 
12df0 20 69 66 28 20 63 3e 3d 27 41 27 20 26 26 20 63   if( c>='A' && c
12e00 3c 3d 27 46 27 20 29 20 72 65 74 75 72 6e 20 63  <='F' ) return c
12e10 20 2d 20 27 41 27 20 2b 20 31 30 3b 0a 20 20 72   - 'A' + 10;.  r
12e20 65 74 75 72 6e 20 2d 31 3b 0a 7d 0a 0a 2f 2a 0a  eturn -1;.}../*.
12e30 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 7a 41 72  ** Interpret zAr
12e40 67 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20  g as an integer 
12e50 76 61 6c 75 65 2c 20 70 6f 73 73 69 62 6c 79 20  value, possibly 
12e60 77 69 74 68 20 73 75 66 66 69 78 65 73 2e 0a 2a  with suffixes..*
12e70 2f 0a 73 74 61 74 69 63 20 73 71 6c 69 74 65 33  /.static sqlite3
12e80 5f 69 6e 74 36 34 20 69 6e 74 65 67 65 72 56 61  _int64 integerVa
12e90 6c 75 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  lue(const char *
12ea0 7a 41 72 67 29 7b 0a 20 20 73 71 6c 69 74 65 33  zArg){.  sqlite3
12eb0 5f 69 6e 74 36 34 20 76 20 3d 20 30 3b 0a 20 20  _int64 v = 0;.  
12ec0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72  static const str
12ed0 75 63 74 20 7b 20 63 68 61 72 20 2a 7a 53 75 66  uct { char *zSuf
12ee0 66 69 78 3b 20 69 6e 74 20 69 4d 75 6c 74 3b 20  fix; int iMult; 
12ef0 7d 20 61 4d 75 6c 74 5b 5d 20 3d 20 7b 0a 20 20  } aMult[] = {.  
12f00 20 20 7b 20 22 4b 69 42 22 2c 20 31 30 32 34 20    { "KiB", 1024 
12f10 7d 2c 0a 20 20 20 20 7b 20 22 4d 69 42 22 2c 20  },.    { "MiB", 
12f20 31 30 32 34 2a 31 30 32 34 20 7d 2c 0a 20 20 20  1024*1024 },.   
12f30 20 7b 20 22 47 69 42 22 2c 20 31 30 32 34 2a 31   { "GiB", 1024*1
12f40 30 32 34 2a 31 30 32 34 20 7d 2c 0a 20 20 20 20  024*1024 },.    
12f50 7b 20 22 4b 42 22 2c 20 20 31 30 30 30 20 7d 2c  { "KB",  1000 },
12f60 0a 20 20 20 20 7b 20 22 4d 42 22 2c 20 20 31 30  .    { "MB",  10
12f70 30 30 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20 22  00000 },.    { "
12f80 47 42 22 2c 20 20 31 30 30 30 30 30 30 30 30 30  GB",  1000000000
12f90 20 7d 2c 0a 20 20 20 20 7b 20 22 4b 22 2c 20 20   },.    { "K",  
12fa0 20 31 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20 22   1000 },.    { "
12fb0 4d 22 2c 20 20 20 31 30 30 30 30 30 30 20 7d 2c  M",   1000000 },
12fc0 0a 20 20 20 20 7b 20 22 47 22 2c 20 20 20 31 30  .    { "G",   10
12fd0 30 30 30 30 30 30 30 30 20 7d 2c 0a 20 20 7d 3b  00000000 },.  };
12fe0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20  .  int i;.  int 
12ff0 69 73 4e 65 67 20 3d 20 30 3b 0a 20 20 69 66 28  isNeg = 0;.  if(
13000 20 7a 41 72 67 5b 30 5d 3d 3d 27 2d 27 20 29 7b   zArg[0]=='-' ){
13010 0a 20 20 20 20 69 73 4e 65 67 20 3d 20 31 3b 0a  .    isNeg = 1;.
13020 20 20 20 20 7a 41 72 67 2b 2b 3b 0a 20 20 7d 65      zArg++;.  }e
13030 6c 73 65 20 69 66 28 20 7a 41 72 67 5b 30 5d 3d  lse if( zArg[0]=
13040 3d 27 2b 27 20 29 7b 0a 20 20 20 20 7a 41 72 67  ='+' ){.    zArg
13050 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 41  ++;.  }.  if( zA
13060 72 67 5b 30 5d 3d 3d 27 30 27 20 26 26 20 7a 41  rg[0]=='0' && zA
13070 72 67 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a 20 20  rg[1]=='x' ){.  
13080 20 20 69 6e 74 20 78 3b 0a 20 20 20 20 7a 41 72    int x;.    zAr
13090 67 20 2b 3d 20 32 3b 0a 20 20 20 20 77 68 69 6c  g += 2;.    whil
130a0 65 28 20 28 78 20 3d 20 68 65 78 44 69 67 69 74  e( (x = hexDigit
130b0 56 61 6c 75 65 28 7a 41 72 67 5b 30 5d 29 29 3e  Value(zArg[0]))>
130c0 3d 30 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20  =0 ){.      v = 
130d0 28 76 3c 3c 34 29 20 2b 20 78 3b 0a 20 20 20 20  (v<<4) + x;.    
130e0 20 20 7a 41 72 67 2b 2b 3b 0a 20 20 20 20 7d 0a    zArg++;.    }.
130f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 68 69    }else{.    whi
13100 6c 65 28 20 49 73 44 69 67 69 74 28 7a 41 72 67  le( IsDigit(zArg
13110 5b 30 5d 29 20 29 7b 0a 20 20 20 20 20 20 76 20  [0]) ){.      v 
13120 3d 20 76 2a 31 30 20 2b 20 7a 41 72 67 5b 30 5d  = v*10 + zArg[0]
13130 20 2d 20 27 30 27 3b 0a 20 20 20 20 20 20 7a 41   - '0';.      zA
13140 72 67 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rg++;.    }.  }.
13150 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72    for(i=0; i<Arr
13160 61 79 53 69 7a 65 28 61 4d 75 6c 74 29 3b 20 69  aySize(aMult); i
13170 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c  ++){.    if( sql
13180 69 74 65 33 5f 73 74 72 69 63 6d 70 28 61 4d 75  ite3_stricmp(aMu
13190 6c 74 5b 69 5d 2e 7a 53 75 66 66 69 78 2c 20 7a  lt[i].zSuffix, z
131a0 41 72 67 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Arg)==0 ){.     
131b0 20 76 20 2a 3d 20 61 4d 75 6c 74 5b 69 5d 2e 69   v *= aMult[i].i
131c0 4d 75 6c 74 3b 0a 20 20 20 20 20 20 62 72 65 61  Mult;.      brea
131d0 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  k;.    }.  }.  r
131e0 65 74 75 72 6e 20 69 73 4e 65 67 3f 20 2d 76 20  eturn isNeg? -v 
131f0 3a 20 76 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e  : v;.}../*.** In
13200 74 65 72 70 72 65 74 20 7a 41 72 67 20 61 73 20  terpret zArg as 
13210 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65  either an intege
13220 72 20 6f 72 20 61 20 62 6f 6f 6c 65 61 6e 20 76  r or a boolean v
13230 61 6c 75 65 2e 20 20 52 65 74 75 72 6e 20 31 20  alue.  Return 1 
13240 6f 72 20 30 0a 2a 2a 20 66 6f 72 20 54 52 55 45  or 0.** for TRUE
13250 20 61 6e 64 20 46 41 4c 53 45 2e 20 20 52 65 74   and FALSE.  Ret
13260 75 72 6e 20 74 68 65 20 69 6e 74 65 67 65 72 20  urn the integer 
13270 76 61 6c 75 65 20 69 66 20 61 70 70 72 6f 70 72  value if appropr
13280 69 61 74 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  iate..*/.static 
13290 69 6e 74 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65  int booleanValue
132a0 28 63 68 61 72 20 2a 7a 41 72 67 29 7b 0a 20 20  (char *zArg){.  
132b0 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 7a 41 72  int i;.  if( zAr
132c0 67 5b 30 5d 3d 3d 27 30 27 20 26 26 20 7a 41 72  g[0]=='0' && zAr
132d0 67 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a 20 20 20  g[1]=='x' ){.   
132e0 20 66 6f 72 28 69 3d 32 3b 20 68 65 78 44 69 67   for(i=2; hexDig
132f0 69 74 56 61 6c 75 65 28 7a 41 72 67 5b 69 5d 29  itValue(zArg[i])
13300 3e 3d 30 3b 20 69 2b 2b 29 7b 7d 0a 20 20 7d 65  >=0; i++){}.  }e
13310 6c 73 65 7b 0a 20 20 20 20 66 6f 72 28 69 3d 30  lse{.    for(i=0
13320 3b 20 7a 41 72 67 5b 69 5d 3e 3d 27 30 27 20 26  ; zArg[i]>='0' &
13330 26 20 7a 41 72 67 5b 69 5d 3c 3d 27 39 27 3b 20  & zArg[i]<='9'; 
13340 69 2b 2b 29 7b 7d 0a 20 20 7d 0a 20 20 69 66 28  i++){}.  }.  if(
13350 20 69 3e 30 20 26 26 20 7a 41 72 67 5b 69 5d 3d   i>0 && zArg[i]=
13360 3d 30 20 29 20 72 65 74 75 72 6e 20 28 69 6e 74  =0 ) return (int
13370 29 28 69 6e 74 65 67 65 72 56 61 6c 75 65 28 7a  )(integerValue(z
13380 41 72 67 29 20 26 20 30 78 66 66 66 66 66 66 66  Arg) & 0xfffffff
13390 66 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  f);.  if( sqlite
133a0 33 5f 73 74 72 69 63 6d 70 28 7a 41 72 67 2c 20  3_stricmp(zArg, 
133b0 22 6f 6e 22 29 3d 3d 30 20 7c 7c 20 73 71 6c 69  "on")==0 || sqli
133c0 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 41 72 67  te3_stricmp(zArg
133d0 2c 22 79 65 73 22 29 3d 3d 30 20 29 7b 0a 20 20  ,"yes")==0 ){.  
133e0 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a    return 1;.  }.
133f0 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74    if( sqlite3_st
13400 72 69 63 6d 70 28 7a 41 72 67 2c 20 22 6f 66 66  ricmp(zArg, "off
13410 22 29 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33  ")==0 || sqlite3
13420 5f 73 74 72 69 63 6d 70 28 7a 41 72 67 2c 22 6e  _stricmp(zArg,"n
13430 6f 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65  o")==0 ){.    re
13440 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 75 74  turn 0;.  }.  ut
13450 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
13460 2c 20 22 45 52 52 4f 52 3a 20 4e 6f 74 20 61 20  , "ERROR: Not a 
13470 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 5c  boolean value: \
13480 22 25 73 5c 22 2e 20 41 73 73 75 6d 69 6e 67 20  "%s\". Assuming 
13490 5c 22 6e 6f 5c 22 2e 5c 6e 22 2c 0a 20 20 20 20  \"no\".\n",.    
134a0 20 20 20 20 20 20 7a 41 72 67 29 3b 0a 20 20 72        zArg);.  r
134b0 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn 0;.}../*.*
134c0 2a 20 43 6c 6f 73 65 20 61 6e 20 6f 75 74 70 75  * Close an outpu
134d0 74 20 66 69 6c 65 2c 20 61 73 73 75 6d 69 6e 67  t file, assuming
134e0 20 69 74 20 69 73 20 6e 6f 74 20 73 74 64 65 72   it is not stder
134f0 72 20 6f 72 20 73 74 64 6f 75 74 0a 2a 2f 0a 73  r or stdout.*/.s
13500 74 61 74 69 63 20 76 6f 69 64 20 6f 75 74 70 75  tatic void outpu
13510 74 5f 66 69 6c 65 5f 63 6c 6f 73 65 28 46 49 4c  t_file_close(FIL
13520 45 20 2a 66 29 7b 0a 20 20 69 66 28 20 66 20 26  E *f){.  if( f &
13530 26 20 66 21 3d 73 74 64 6f 75 74 20 26 26 20 66  & f!=stdout && f
13540 21 3d 73 74 64 65 72 72 20 29 20 66 63 6c 6f 73  !=stderr ) fclos
13550 65 28 66 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  e(f);.}../*.** T
13560 72 79 20 74 6f 20 6f 70 65 6e 20 61 6e 20 6f 75  ry to open an ou
13570 74 70 75 74 20 66 69 6c 65 2e 20 20 20 54 68 65  tput file.   The
13580 20 6e 61 6d 65 73 20 22 73 74 64 6f 75 74 22 20   names "stdout" 
13590 61 6e 64 20 22 73 74 64 65 72 72 22 20 61 72 65  and "stderr" are
135a0 0a 2a 2a 20 72 65 63 6f 67 6e 69 7a 65 64 20 61  .** recognized a
135b0 6e 64 20 64 6f 20 74 68 65 20 72 69 67 68 74 20  nd do the right 
135c0 74 68 69 6e 67 2e 20 20 4e 55 4c 4c 20 69 73 20  thing.  NULL is 
135d0 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20  returned if the 
135e0 6f 75 74 70 75 74 0a 2a 2a 20 66 69 6c 65 6e 61  output.** filena
135f0 6d 65 20 69 73 20 22 6f 66 66 22 2e 0a 2a 2f 0a  me is "off"..*/.
13600 73 74 61 74 69 63 20 46 49 4c 45 20 2a 6f 75 74  static FILE *out
13610 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 63 6f  put_file_open(co
13620 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 29  nst char *zFile)
13630 7b 0a 20 20 46 49 4c 45 20 2a 66 3b 0a 20 20 69  {.  FILE *f;.  i
13640 66 28 20 73 74 72 63 6d 70 28 7a 46 69 6c 65 2c  f( strcmp(zFile,
13650 22 73 74 64 6f 75 74 22 29 3d 3d 30 20 29 7b 0a  "stdout")==0 ){.
13660 20 20 20 20 66 20 3d 20 73 74 64 6f 75 74 3b 0a      f = stdout;.
13670 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
13680 6d 70 28 7a 46 69 6c 65 2c 20 22 73 74 64 65 72  mp(zFile, "stder
13690 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 66 20  r")==0 ){.    f 
136a0 3d 20 73 74 64 65 72 72 3b 0a 20 20 7d 65 6c 73  = stderr;.  }els
136b0 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 46 69  e if( strcmp(zFi
136c0 6c 65 2c 20 22 6f 66 66 22 29 3d 3d 30 20 29 7b  le, "off")==0 ){
136d0 0a 20 20 20 20 66 20 3d 20 30 3b 0a 20 20 7d 65  .    f = 0;.  }e
136e0 6c 73 65 7b 0a 20 20 20 20 66 20 3d 20 66 6f 70  lse{.    f = fop
136f0 65 6e 28 7a 46 69 6c 65 2c 20 22 77 62 22 29 3b  en(zFile, "wb");
13700 0a 20 20 20 20 69 66 28 20 66 3d 3d 30 20 29 7b  .    if( f==0 ){
13710 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
13720 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
13730 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c  r: cannot open \
13740 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c 65 29  "%s\"\n", zFile)
13750 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
13760 74 75 72 6e 20 66 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn f;.}../*.**
13770 20 41 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 68   A routine for h
13780 61 6e 64 6c 69 6e 67 20 6f 75 74 70 75 74 20 66  andling output f
13790 72 6f 6d 20 73 71 6c 69 74 65 33 5f 74 72 61 63  rom sqlite3_trac
137a0 65 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  e()..*/.static i
137b0 6e 74 20 73 71 6c 5f 74 72 61 63 65 5f 63 61 6c  nt sql_trace_cal
137c0 6c 62 61 63 6b 28 0a 20 20 75 6e 73 69 67 6e 65  lback(.  unsigne
137d0 64 20 6d 54 79 70 65 2c 0a 20 20 76 6f 69 64 20  d mType,.  void 
137e0 2a 70 41 72 67 2c 0a 20 20 76 6f 69 64 20 2a 70  *pArg,.  void *p
137f0 50 2c 0a 20 20 76 6f 69 64 20 2a 70 58 0a 29 7b  P,.  void *pX.){
13800 0a 20 20 46 49 4c 45 20 2a 66 20 3d 20 28 46 49  .  FILE *f = (FI
13810 4c 45 2a 29 70 41 72 67 3b 0a 20 20 55 4e 55 53  LE*)pArg;.  UNUS
13820 45 44 5f 50 41 52 41 4d 45 54 45 52 28 6d 54 79  ED_PARAMETER(mTy
13830 70 65 29 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41  pe);.  UNUSED_PA
13840 52 41 4d 45 54 45 52 28 70 50 29 3b 0a 20 20 69  RAMETER(pP);.  i
13850 66 28 20 66 20 29 7b 0a 20 20 20 20 63 6f 6e 73  f( f ){.    cons
13860 74 20 63 68 61 72 20 2a 7a 20 3d 20 28 63 6f 6e  t char *z = (con
13870 73 74 20 63 68 61 72 2a 29 70 58 3b 0a 20 20 20  st char*)pX;.   
13880 20 69 6e 74 20 69 20 3d 20 28 69 6e 74 29 73 74   int i = (int)st
13890 72 6c 65 6e 28 7a 29 3b 0a 20 20 20 20 77 68 69  rlen(z);.    whi
138a0 6c 65 28 20 69 3e 30 20 26 26 20 7a 5b 69 2d 31  le( i>0 && z[i-1
138b0 5d 3d 3d 27 3b 27 20 29 7b 20 69 2d 2d 3b 20 7d  ]==';' ){ i--; }
138c0 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
138d0 28 66 2c 20 22 25 2e 2a 73 3b 5c 6e 22 2c 20 69  (f, "%.*s;\n", i
138e0 2c 20 7a 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  , z);.  }.  retu
138f0 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41  rn 0;.}../*.** A
13900 20 6e 6f 2d 6f 70 20 72 6f 75 74 69 6e 65 20 74   no-op routine t
13910 68 61 74 20 72 75 6e 73 20 77 69 74 68 20 74 68  hat runs with th
13920 65 20 22 2e 62 72 65 61 6b 70 6f 69 6e 74 22 20  e ".breakpoint" 
13930 64 6f 63 2d 63 6f 6d 6d 61 6e 64 2e 20 20 54 68  doc-command.  Th
13940 69 73 20 69 73 0a 2a 2a 20 61 20 75 73 65 66 75  is is.** a usefu
13950 6c 20 73 70 6f 74 20 74 6f 20 73 65 74 20 61 20  l spot to set a 
13960 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f  debugger breakpo
13970 69 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  int..*/.static v
13980 6f 69 64 20 74 65 73 74 5f 62 72 65 61 6b 70 6f  oid test_breakpo
13990 69 6e 74 28 76 6f 69 64 29 7b 0a 20 20 73 74 61  int(void){.  sta
139a0 74 69 63 20 69 6e 74 20 6e 43 61 6c 6c 20 3d 20  tic int nCall = 
139b0 30 3b 0a 20 20 6e 43 61 6c 6c 2b 2b 3b 0a 7d 0a  0;.  nCall++;.}.
139c0 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
139d0 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20   used to read a 
139e0 43 53 56 20 61 6e 64 20 6f 74 68 65 72 20 66 69  CSV and other fi
139f0 6c 65 73 20 66 6f 72 20 69 6d 70 6f 72 74 2e 0a  les for import..
13a00 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
13a10 74 20 49 6d 70 6f 72 74 43 74 78 20 49 6d 70 6f  t ImportCtx Impo
13a20 72 74 43 74 78 3b 0a 73 74 72 75 63 74 20 49 6d  rtCtx;.struct Im
13a30 70 6f 72 74 43 74 78 20 7b 0a 20 20 63 6f 6e 73  portCtx {.  cons
13a40 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 3b 20 20  t char *zFile;  
13a50 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69  /* Name of the i
13a60 6e 70 75 74 20 66 69 6c 65 20 2a 2f 0a 20 20 46  nput file */.  F
13a70 49 4c 45 20 2a 69 6e 3b 20 20 20 20 20 20 20 20  ILE *in;        
13a80 20 20 20 2f 2a 20 52 65 61 64 20 74 68 65 20 43     /* Read the C
13a90 53 56 20 74 65 78 74 20 66 72 6f 6d 20 74 68 69  SV text from thi
13aa0 73 20 69 6e 70 75 74 20 73 74 72 65 61 6d 20 2a  s input stream *
13ab0 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  /.  char *z;    
13ac0 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 75 6d          /* Accum
13ad0 75 6c 61 74 65 64 20 74 65 78 74 20 66 6f 72 20  ulated text for 
13ae0 61 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74  a field */.  int
13af0 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   n;             
13b00 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
13b10 74 65 73 20 69 6e 20 7a 20 2a 2f 0a 20 20 69 6e  tes in z */.  in
13b20 74 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20  t nAlloc;       
13b30 20 20 2f 2a 20 53 70 61 63 65 20 61 6c 6c 6f 63    /* Space alloc
13b40 61 74 65 64 20 66 6f 72 20 7a 5b 5d 20 2a 2f 0a  ated for z[] */.
13b50 20 20 69 6e 74 20 6e 4c 69 6e 65 3b 20 20 20 20    int nLine;    
13b60 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
13b70 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20 2a 2f 0a   line number */.
13b80 20 20 69 6e 74 20 63 54 65 72 6d 3b 20 20 20 20    int cTerm;    
13b90 20 20 20 20 20 20 2f 2a 20 43 68 61 72 61 63 74        /* Charact
13ba0 65 72 20 74 68 61 74 20 74 65 72 6d 69 6e 61 74  er that terminat
13bb0 65 64 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  ed the most rece
13bc0 6e 74 20 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e  nt field */.  in
13bd0 74 20 63 43 6f 6c 53 65 70 3b 20 20 20 20 20 20  t cColSep;      
13be0 20 20 2f 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 20    /* The column 
13bf0 73 65 70 61 72 61 74 6f 72 20 63 68 61 72 61 63  separator charac
13c00 74 65 72 2e 20 20 28 55 73 75 61 6c 6c 79 20 22  ter.  (Usually "
13c10 2c 22 29 20 2a 2f 0a 20 20 69 6e 74 20 63 52 6f  ,") */.  int cRo
13c20 77 53 65 70 3b 20 20 20 20 20 20 20 20 2f 2a 20  wSep;        /* 
13c30 54 68 65 20 72 6f 77 20 73 65 70 61 72 61 74 6f  The row separato
13c40 72 20 63 68 61 72 61 63 74 65 72 2e 20 20 28 55  r character.  (U
13c50 73 75 61 6c 6c 79 20 22 5c 6e 22 29 20 2a 2f 0a  sually "\n") */.
13c60 7d 3b 0a 0a 2f 2a 20 41 70 70 65 6e 64 20 61 20  };../* Append a 
13c70 73 69 6e 67 6c 65 20 62 79 74 65 20 74 6f 20 7a  single byte to z
13c80 5b 5d 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  [] */.static voi
13c90 64 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f  d import_append_
13ca0 63 68 61 72 28 49 6d 70 6f 72 74 43 74 78 20 2a  char(ImportCtx *
13cb0 70 2c 20 69 6e 74 20 63 29 7b 0a 20 20 69 66 28  p, int c){.  if(
13cc0 20 70 2d 3e 6e 2b 31 3e 3d 70 2d 3e 6e 41 6c 6c   p->n+1>=p->nAll
13cd0 6f 63 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 41 6c  oc ){.    p->nAl
13ce0 6c 6f 63 20 2b 3d 20 70 2d 3e 6e 41 6c 6c 6f 63  loc += p->nAlloc
13cf0 20 2b 20 31 30 30 3b 0a 20 20 20 20 70 2d 3e 7a   + 100;.    p->z
13d00 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c   = sqlite3_reall
13d10 6f 63 36 34 28 70 2d 3e 7a 2c 20 70 2d 3e 6e 41  oc64(p->z, p->nA
13d20 6c 6c 6f 63 29 3b 0a 20 20 20 20 69 66 28 20 70  lloc);.    if( p
13d30 2d 3e 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ->z==0 ){.      
13d40 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
13d50 72 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  r, "out of memor
13d60 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 65 78 69  y\n");.      exi
13d70 74 28 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  t(1);.    }.  }.
13d80 20 20 70 2d 3e 7a 5b 70 2d 3e 6e 2b 2b 5d 20 3d    p->z[p->n++] =
13d90 20 28 63 68 61 72 29 63 3b 0a 7d 0a 0a 2f 2a 20   (char)c;.}../* 
13da0 52 65 61 64 20 61 20 73 69 6e 67 6c 65 20 66 69  Read a single fi
13db0 65 6c 64 20 6f 66 20 43 53 56 20 74 65 78 74 2e  eld of CSV text.
13dc0 20 20 43 6f 6d 70 61 74 69 62 6c 65 20 77 69 74    Compatible wit
13dd0 68 20 72 66 63 34 31 38 30 20 61 6e 64 20 65 78  h rfc4180 and ex
13de0 74 65 6e 64 65 64 0a 2a 2a 20 77 69 74 68 20 74  tended.** with t
13df0 68 65 20 6f 70 74 69 6f 6e 20 6f 66 20 68 61 76  he option of hav
13e00 69 6e 67 20 61 20 73 65 70 61 72 61 74 6f 72 20  ing a separator 
13e10 6f 74 68 65 72 20 74 68 61 6e 20 22 2c 22 2e 0a  other than ","..
13e20 2a 2a 0a 2a 2a 20 20 20 2b 20 20 49 6e 70 75 74  **.**   +  Input
13e30 20 63 6f 6d 65 73 20 66 72 6f 6d 20 70 2d 3e 69   comes from p->i
13e40 6e 2e 0a 2a 2a 20 20 20 2b 20 20 53 74 6f 72 65  n..**   +  Store
13e50 20 72 65 73 75 6c 74 73 20 69 6e 20 70 2d 3e 7a   results in p->z
13e60 20 6f 66 20 6c 65 6e 67 74 68 20 70 2d 3e 6e 2e   of length p->n.
13e70 20 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20    Space to hold 
13e80 70 2d 3e 7a 20 63 6f 6d 65 73 0a 2a 2a 20 20 20  p->z comes.**   
13e90 20 20 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f     from sqlite3_
13ea0 6d 61 6c 6c 6f 63 36 34 28 29 2e 0a 2a 2a 20 20  malloc64()..**  
13eb0 20 2b 20 20 55 73 65 20 70 2d 3e 63 53 65 70 20   +  Use p->cSep 
13ec0 61 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 73 65  as the column se
13ed0 70 61 72 61 74 6f 72 2e 20 20 54 68 65 20 64 65  parator.  The de
13ee0 66 61 75 6c 74 20 69 73 20 22 2c 22 2e 0a 2a 2a  fault is ","..**
13ef0 20 20 20 2b 20 20 55 73 65 20 70 2d 3e 72 53 65     +  Use p->rSe
13f00 70 20 61 73 20 74 68 65 20 72 6f 77 20 73 65 70  p as the row sep
13f10 61 72 61 74 6f 72 2e 20 20 54 68 65 20 64 65 66  arator.  The def
13f20 61 75 6c 74 20 69 73 20 22 5c 6e 22 2e 0a 2a 2a  ault is "\n"..**
13f30 20 20 20 2b 20 20 4b 65 65 70 20 74 72 61 63 6b     +  Keep track
13f40 20 6f 66 20 74 68 65 20 6c 69 6e 65 20 6e 75 6d   of the line num
13f50 62 65 72 20 69 6e 20 70 2d 3e 6e 4c 69 6e 65 2e  ber in p->nLine.
13f60 0a 2a 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 74  .**   +  Store t
13f70 68 65 20 63 68 61 72 61 63 74 65 72 20 74 68 61  he character tha
13f80 74 20 74 65 72 6d 69 6e 61 74 65 73 20 74 68 65  t terminates the
13f90 20 66 69 65 6c 64 20 69 6e 20 70 2d 3e 63 54 65   field in p->cTe
13fa0 72 6d 2e 20 20 53 74 6f 72 65 0a 2a 2a 20 20 20  rm.  Store.**   
13fb0 20 20 20 45 4f 46 20 6f 6e 20 65 6e 64 2d 6f 66     EOF on end-of
13fc0 2d 66 69 6c 65 2e 0a 2a 2a 20 20 20 2b 20 20 52  -file..**   +  R
13fd0 65 70 6f 72 74 20 73 79 6e 74 61 78 20 65 72 72  eport syntax err
13fe0 6f 72 73 20 6f 6e 20 73 74 64 65 72 72 0a 2a 2f  ors on stderr.*/
13ff0 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 53 51  .static char *SQ
14000 4c 49 54 45 5f 43 44 45 43 4c 20 63 73 76 5f 72  LITE_CDECL csv_r
14010 65 61 64 5f 6f 6e 65 5f 66 69 65 6c 64 28 49 6d  ead_one_field(Im
14020 70 6f 72 74 43 74 78 20 2a 70 29 7b 0a 20 20 69  portCtx *p){.  i
14030 6e 74 20 63 3b 0a 20 20 69 6e 74 20 63 53 65 70  nt c;.  int cSep
14040 20 3d 20 70 2d 3e 63 43 6f 6c 53 65 70 3b 0a 20   = p->cColSep;. 
14050 20 69 6e 74 20 72 53 65 70 20 3d 20 70 2d 3e 63   int rSep = p->c
14060 52 6f 77 53 65 70 3b 0a 20 20 70 2d 3e 6e 20 3d  RowSep;.  p->n =
14070 20 30 3b 0a 20 20 63 20 3d 20 66 67 65 74 63 28   0;.  c = fgetc(
14080 70 2d 3e 69 6e 29 3b 0a 20 20 69 66 28 20 63 3d  p->in);.  if( c=
14090 3d 45 4f 46 20 7c 7c 20 73 65 65 6e 49 6e 74 65  =EOF || seenInte
140a0 72 72 75 70 74 20 29 7b 0a 20 20 20 20 70 2d 3e  rrupt ){.    p->
140b0 63 54 65 72 6d 20 3d 20 45 4f 46 3b 0a 20 20 20  cTerm = EOF;.   
140c0 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
140d0 20 69 66 28 20 63 3d 3d 27 22 27 20 29 7b 0a 20   if( c=='"' ){. 
140e0 20 20 20 69 6e 74 20 70 63 2c 20 70 70 63 3b 0a     int pc, ppc;.
140f0 20 20 20 20 69 6e 74 20 73 74 61 72 74 4c 69 6e      int startLin
14100 65 20 3d 20 70 2d 3e 6e 4c 69 6e 65 3b 0a 20 20  e = p->nLine;.  
14110 20 20 69 6e 74 20 63 51 75 6f 74 65 20 3d 20 63    int cQuote = c
14120 3b 0a 20 20 20 20 70 63 20 3d 20 70 70 63 20 3d  ;.    pc = ppc =
14130 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 31   0;.    while( 1
14140 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 66 67   ){.      c = fg
14150 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 20 20  etc(p->in);.    
14160 20 20 69 66 28 20 63 3d 3d 72 53 65 70 20 29 20    if( c==rSep ) 
14170 70 2d 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 20 20  p->nLine++;.    
14180 20 20 69 66 28 20 63 3d 3d 63 51 75 6f 74 65 20    if( c==cQuote 
14190 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  ){.        if( p
141a0 63 3d 3d 63 51 75 6f 74 65 20 29 7b 0a 20 20 20  c==cQuote ){.   
141b0 20 20 20 20 20 20 20 70 63 20 3d 20 30 3b 0a 20         pc = 0;. 
141c0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
141d0 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  e;.        }.   
141e0 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
141f0 63 3d 3d 63 53 65 70 20 26 26 20 70 63 3d 3d 63  c==cSep && pc==c
14200 51 75 6f 74 65 29 0a 20 20 20 20 20 20 20 7c 7c  Quote).       ||
14210 20 28 63 3d 3d 72 53 65 70 20 26 26 20 70 63 3d   (c==rSep && pc=
14220 3d 63 51 75 6f 74 65 29 0a 20 20 20 20 20 20 20  =cQuote).       
14230 7c 7c 20 28 63 3d 3d 72 53 65 70 20 26 26 20 70  || (c==rSep && p
14240 63 3d 3d 27 5c 72 27 20 26 26 20 70 70 63 3d 3d  c=='\r' && ppc==
14250 63 51 75 6f 74 65 29 0a 20 20 20 20 20 20 20 7c  cQuote).       |
14260 7c 20 28 63 3d 3d 45 4f 46 20 26 26 20 70 63 3d  | (c==EOF && pc=
14270 3d 63 51 75 6f 74 65 29 0a 20 20 20 20 20 20 29  =cQuote).      )
14280 7b 0a 20 20 20 20 20 20 20 20 64 6f 7b 20 70 2d  {.        do{ p-
14290 3e 6e 2d 2d 3b 20 7d 77 68 69 6c 65 28 20 70 2d  >n--; }while( p-
142a0 3e 7a 5b 70 2d 3e 6e 5d 21 3d 63 51 75 6f 74 65  >z[p->n]!=cQuote
142b0 20 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 63   );.        p->c
142c0 54 65 72 6d 20 3d 20 63 3b 0a 20 20 20 20 20 20  Term = c;.      
142d0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
142e0 0a 20 20 20 20 20 20 69 66 28 20 70 63 3d 3d 63  .      if( pc==c
142f0 51 75 6f 74 65 20 26 26 20 63 21 3d 27 5c 72 27  Quote && c!='\r'
14300 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38   ){.        utf8
14310 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
14320 22 25 73 3a 25 64 3a 20 75 6e 65 73 63 61 70 65  "%s:%d: unescape
14330 64 20 25 63 20 63 68 61 72 61 63 74 65 72 5c 6e  d %c character\n
14340 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
14350 20 20 20 70 2d 3e 7a 46 69 6c 65 2c 20 70 2d 3e     p->zFile, p->
14360 6e 4c 69 6e 65 2c 20 63 51 75 6f 74 65 29 3b 0a  nLine, cQuote);.
14370 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
14380 28 20 63 3d 3d 45 4f 46 20 29 7b 0a 20 20 20 20  ( c==EOF ){.    
14390 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
143a0 73 74 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20  stderr, "%s:%d: 
143b0 75 6e 74 65 72 6d 69 6e 61 74 65 64 20 25 63 2d  unterminated %c-
143c0 71 75 6f 74 65 64 20 66 69 65 6c 64 5c 6e 22 2c  quoted field\n",
143d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
143e0 20 70 2d 3e 7a 46 69 6c 65 2c 20 73 74 61 72 74   p->zFile, start
143f0 4c 69 6e 65 2c 20 63 51 75 6f 74 65 29 3b 0a 20  Line, cQuote);. 
14400 20 20 20 20 20 20 20 70 2d 3e 63 54 65 72 6d 20         p->cTerm 
14410 3d 20 63 3b 0a 20 20 20 20 20 20 20 20 62 72 65  = c;.        bre
14420 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
14430 20 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f    import_append_
14440 63 68 61 72 28 70 2c 20 63 29 3b 0a 20 20 20 20  char(p, c);.    
14450 20 20 70 70 63 20 3d 20 70 63 3b 0a 20 20 20 20    ppc = pc;.    
14460 20 20 70 63 20 3d 20 63 3b 0a 20 20 20 20 7d 0a    pc = c;.    }.
14470 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 68 69    }else{.    whi
14480 6c 65 28 20 63 21 3d 45 4f 46 20 26 26 20 63 21  le( c!=EOF && c!
14490 3d 63 53 65 70 20 26 26 20 63 21 3d 72 53 65 70  =cSep && c!=rSep
144a0 20 29 7b 0a 20 20 20 20 20 20 69 6d 70 6f 72 74   ){.      import
144b0 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 70 2c 20  _append_char(p, 
144c0 63 29 3b 0a 20 20 20 20 20 20 63 20 3d 20 66 67  c);.      c = fg
144d0 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 20 20  etc(p->in);.    
144e0 7d 0a 20 20 20 20 69 66 28 20 63 3d 3d 72 53 65  }.    if( c==rSe
144f0 70 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 4c  p ){.      p->nL
14500 69 6e 65 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28  ine++;.      if(
14510 20 70 2d 3e 6e 3e 30 20 26 26 20 70 2d 3e 7a 5b   p->n>0 && p->z[
14520 70 2d 3e 6e 2d 31 5d 3d 3d 27 5c 72 27 20 29 20  p->n-1]=='\r' ) 
14530 70 2d 3e 6e 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20  p->n--;.    }.  
14540 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20 63 3b 0a    p->cTerm = c;.
14550 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e 7a 20 29    }.  if( p->z )
14560 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 20 3d 20 30 3b   p->z[p->n] = 0;
14570 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 7a 3b 0a  .  return p->z;.
14580 7d 0a 0a 2f 2a 20 52 65 61 64 20 61 20 73 69 6e  }../* Read a sin
14590 67 6c 65 20 66 69 65 6c 64 20 6f 66 20 41 53 43  gle field of ASC
145a0 49 49 20 64 65 6c 69 6d 69 74 65 64 20 74 65 78  II delimited tex
145b0 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 2b 20 20 49 6e  t..**.**   +  In
145c0 70 75 74 20 63 6f 6d 65 73 20 66 72 6f 6d 20 70  put comes from p
145d0 2d 3e 69 6e 2e 0a 2a 2a 20 20 20 2b 20 20 53 74  ->in..**   +  St
145e0 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
145f0 2d 3e 7a 20 6f 66 20 6c 65 6e 67 74 68 20 70 2d  ->z of length p-
14600 3e 6e 2e 20 20 53 70 61 63 65 20 74 6f 20 68 6f  >n.  Space to ho
14610 6c 64 20 70 2d 3e 7a 20 63 6f 6d 65 73 0a 2a 2a  ld p->z comes.**
14620 20 20 20 20 20 20 66 72 6f 6d 20 73 71 6c 69 74        from sqlit
14630 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 29 2e 0a 2a  e3_malloc64()..*
14640 2a 20 20 20 2b 20 20 55 73 65 20 70 2d 3e 63 53  *   +  Use p->cS
14650 65 70 20 61 73 20 74 68 65 20 63 6f 6c 75 6d 6e  ep as the column
14660 20 73 65 70 61 72 61 74 6f 72 2e 20 20 54 68 65   separator.  The
14670 20 64 65 66 61 75 6c 74 20 69 73 20 22 5c 78 31   default is "\x1
14680 46 22 2e 0a 2a 2a 20 20 20 2b 20 20 55 73 65 20  F"..**   +  Use 
14690 70 2d 3e 72 53 65 70 20 61 73 20 74 68 65 20 72  p->rSep as the r
146a0 6f 77 20 73 65 70 61 72 61 74 6f 72 2e 20 20 54  ow separator.  T
146b0 68 65 20 64 65 66 61 75 6c 74 20 69 73 20 22 5c  he default is "\
146c0 78 31 45 22 2e 0a 2a 2a 20 20 20 2b 20 20 4b 65  x1E"..**   +  Ke
146d0 65 70 20 74 72 61 63 6b 20 6f 66 20 74 68 65 20  ep track of the 
146e0 72 6f 77 20 6e 75 6d 62 65 72 20 69 6e 20 70 2d  row number in p-
146f0 3e 6e 4c 69 6e 65 2e 0a 2a 2a 20 20 20 2b 20 20  >nLine..**   +  
14700 53 74 6f 72 65 20 74 68 65 20 63 68 61 72 61 63  Store the charac
14710 74 65 72 20 74 68 61 74 20 74 65 72 6d 69 6e 61  ter that termina
14720 74 65 73 20 74 68 65 20 66 69 65 6c 64 20 69 6e  tes the field in
14730 20 70 2d 3e 63 54 65 72 6d 2e 20 20 53 74 6f 72   p->cTerm.  Stor
14740 65 0a 2a 2a 20 20 20 20 20 20 45 4f 46 20 6f 6e  e.**      EOF on
14750 20 65 6e 64 2d 6f 66 2d 66 69 6c 65 2e 0a 2a 2a   end-of-file..**
14760 20 20 20 2b 20 20 52 65 70 6f 72 74 20 73 79 6e     +  Report syn
14770 74 61 78 20 65 72 72 6f 72 73 20 6f 6e 20 73 74  tax errors on st
14780 64 65 72 72 0a 2a 2f 0a 73 74 61 74 69 63 20 63  derr.*/.static c
14790 68 61 72 20 2a 53 51 4c 49 54 45 5f 43 44 45 43  har *SQLITE_CDEC
147a0 4c 20 61 73 63 69 69 5f 72 65 61 64 5f 6f 6e 65  L ascii_read_one
147b0 5f 66 69 65 6c 64 28 49 6d 70 6f 72 74 43 74 78  _field(ImportCtx
147c0 20 2a 70 29 7b 0a 20 20 69 6e 74 20 63 3b 0a 20   *p){.  int c;. 
147d0 20 69 6e 74 20 63 53 65 70 20 3d 20 70 2d 3e 63   int cSep = p->c
147e0 43 6f 6c 53 65 70 3b 0a 20 20 69 6e 74 20 72 53  ColSep;.  int rS
147f0 65 70 20 3d 20 70 2d 3e 63 52 6f 77 53 65 70 3b  ep = p->cRowSep;
14800 0a 20 20 70 2d 3e 6e 20 3d 20 30 3b 0a 20 20 63  .  p->n = 0;.  c
14810 20 3d 20 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b   = fgetc(p->in);
14820 0a 20 20 69 66 28 20 63 3d 3d 45 4f 46 20 7c 7c  .  if( c==EOF ||
14830 20 73 65 65 6e 49 6e 74 65 72 72 75 70 74 20 29   seenInterrupt )
14840 7b 0a 20 20 20 20 70 2d 3e 63 54 65 72 6d 20 3d  {.    p->cTerm =
14850 20 45 4f 46 3b 0a 20 20 20 20 72 65 74 75 72 6e   EOF;.    return
14860 20 30 3b 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28   0;.  }.  while(
14870 20 63 21 3d 45 4f 46 20 26 26 20 63 21 3d 63 53   c!=EOF && c!=cS
14880 65 70 20 26 26 20 63 21 3d 72 53 65 70 20 29 7b  ep && c!=rSep ){
14890 0a 20 20 20 20 69 6d 70 6f 72 74 5f 61 70 70 65  .    import_appe
148a0 6e 64 5f 63 68 61 72 28 70 2c 20 63 29 3b 0a 20  nd_char(p, c);. 
148b0 20 20 20 63 20 3d 20 66 67 65 74 63 28 70 2d 3e     c = fgetc(p->
148c0 69 6e 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63  in);.  }.  if( c
148d0 3d 3d 72 53 65 70 20 29 7b 0a 20 20 20 20 70 2d  ==rSep ){.    p-
148e0 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20 7d 0a 20 20  >nLine++;.  }.  
148f0 70 2d 3e 63 54 65 72 6d 20 3d 20 63 3b 0a 20 20  p->cTerm = c;.  
14900 69 66 28 20 70 2d 3e 7a 20 29 20 70 2d 3e 7a 5b  if( p->z ) p->z[
14910 70 2d 3e 6e 5d 20 3d 20 30 3b 0a 20 20 72 65 74  p->n] = 0;.  ret
14920 75 72 6e 20 70 2d 3e 7a 3b 0a 7d 0a 0a 2f 2a 0a  urn p->z;.}../*.
14930 2a 2a 20 54 72 79 20 74 6f 20 74 72 61 6e 73 66  ** Try to transf
14940 65 72 20 64 61 74 61 20 66 6f 72 20 74 61 62 6c  er data for tabl
14950 65 20 7a 54 61 62 6c 65 2e 20 20 49 66 20 61 6e  e zTable.  If an
14960 20 65 72 72 6f 72 20 69 73 20 73 65 65 6e 20 77   error is seen w
14970 68 69 6c 65 0a 2a 2a 20 6d 6f 76 69 6e 67 20 66  hile.** moving f
14980 6f 72 77 61 72 64 2c 20 74 72 79 20 74 6f 20 67  orward, try to g
14990 6f 20 62 61 63 6b 77 61 72 64 73 2e 20 20 54 68  o backwards.  Th
149a0 65 20 62 61 63 6b 77 61 72 64 73 20 6d 6f 76 65  e backwards move
149b0 6d 65 6e 74 20 77 6f 6e 27 74 0a 2a 2a 20 77 6f  ment won't.** wo
149c0 72 6b 20 66 6f 72 20 57 49 54 48 4f 55 54 20 52  rk for WITHOUT R
149d0 4f 57 49 44 20 74 61 62 6c 65 73 2e 0a 2a 2f 0a  OWID tables..*/.
149e0 73 74 61 74 69 63 20 76 6f 69 64 20 74 72 79 54  static void tryT
149f0 6f 43 6c 6f 6e 65 44 61 74 61 28 0a 20 20 53 68  oCloneData(.  Sh
14a00 65 6c 6c 53 74 61 74 65 20 2a 70 2c 0a 20 20 73  ellState *p,.  s
14a10 71 6c 69 74 65 33 20 2a 6e 65 77 44 62 2c 0a 20  qlite3 *newDb,. 
14a20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
14a30 62 6c 65 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  ble.){.  sqlite3
14a40 5f 73 74 6d 74 20 2a 70 51 75 65 72 79 20 3d 20  _stmt *pQuery = 
14a50 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  0;.  sqlite3_stm
14a60 74 20 2a 70 49 6e 73 65 72 74 20 3d 20 30 3b 0a  t *pInsert = 0;.
14a70 20 20 63 68 61 72 20 2a 7a 51 75 65 72 79 20 3d    char *zQuery =
14a80 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 49 6e 73   0;.  char *zIns
14a90 65 72 74 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72  ert = 0;.  int r
14aa0 63 3b 0a 20 20 69 6e 74 20 69 2c 20 6a 2c 20 6e  c;.  int i, j, n
14ab0 3b 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 20 3d  ;.  int nTable =
14ac0 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 54 61   (int)strlen(zTa
14ad0 62 6c 65 29 3b 0a 20 20 69 6e 74 20 6b 20 3d 20  ble);.  int k = 
14ae0 30 3b 0a 20 20 69 6e 74 20 63 6e 74 20 3d 20 30  0;.  int cnt = 0
14af0 3b 0a 20 20 63 6f 6e 73 74 20 69 6e 74 20 73 70  ;.  const int sp
14b00 69 6e 52 61 74 65 20 3d 20 31 30 30 30 30 3b 0a  inRate = 10000;.
14b10 0a 20 20 7a 51 75 65 72 79 20 3d 20 73 71 6c 69  .  zQuery = sqli
14b20 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c  te3_mprintf("SEL
14b30 45 43 54 20 2a 20 46 52 4f 4d 20 5c 22 25 77 5c  ECT * FROM \"%w\
14b40 22 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20 72  "", zTable);.  r
14b50 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
14b60 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 51  are_v2(p->db, zQ
14b70 75 65 72 79 2c 20 2d 31 2c 20 26 70 51 75 65 72  uery, -1, &pQuer
14b80 79 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63 20  y, 0);.  if( rc 
14b90 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  ){.    utf8_prin
14ba0 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
14bb0 72 20 25 64 3a 20 25 73 20 6f 6e 20 5b 25 73 5d  r %d: %s on [%s]
14bc0 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
14bd0 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65   sqlite3_extende
14be0 64 5f 65 72 72 63 6f 64 65 28 70 2d 3e 64 62 29  d_errcode(p->db)
14bf0 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
14c00 28 70 2d 3e 64 62 29 2c 0a 20 20 20 20 20 20 20  (p->db),.       
14c10 20 20 20 20 20 7a 51 75 65 72 79 29 3b 0a 20 20       zQuery);.  
14c20 20 20 67 6f 74 6f 20 65 6e 64 5f 64 61 74 61 5f    goto end_data_
14c30 78 66 65 72 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20  xfer;.  }.  n = 
14c40 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
14c50 6f 75 6e 74 28 70 51 75 65 72 79 29 3b 0a 20 20  ount(pQuery);.  
14c60 7a 49 6e 73 65 72 74 20 3d 20 73 71 6c 69 74 65  zInsert = sqlite
14c70 33 5f 6d 61 6c 6c 6f 63 36 34 28 32 30 30 20 2b  3_malloc64(200 +
14c80 20 6e 54 61 62 6c 65 20 2b 20 6e 2a 33 29 3b 0a   nTable + n*3);.
14c90 20 20 69 66 28 20 7a 49 6e 73 65 72 74 3d 3d 30    if( zInsert==0
14ca0 20 29 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e   ){.    raw_prin
14cb0 74 66 28 73 74 64 65 72 72 2c 20 22 6f 75 74 20  tf(stderr, "out 
14cc0 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20  of memory\n");. 
14cd0 20 20 20 67 6f 74 6f 20 65 6e 64 5f 64 61 74 61     goto end_data
14ce0 5f 78 66 65 72 3b 0a 20 20 7d 0a 20 20 73 71 6c  _xfer;.  }.  sql
14cf0 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 32 30  ite3_snprintf(20
14d00 30 2b 6e 54 61 62 6c 65 2c 7a 49 6e 73 65 72 74  0+nTable,zInsert
14d10 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
14d20 20 20 20 20 20 22 49 4e 53 45 52 54 20 4f 52 20       "INSERT OR 
14d30 49 47 4e 4f 52 45 20 49 4e 54 4f 20 5c 22 25 73  IGNORE INTO \"%s
14d40 5c 22 20 56 41 4c 55 45 53 28 3f 22 2c 20 7a 54  \" VALUES(?", zT
14d50 61 62 6c 65 29 3b 0a 20 20 69 20 3d 20 28 69 6e  able);.  i = (in
14d60 74 29 73 74 72 6c 65 6e 28 7a 49 6e 73 65 72 74  t)strlen(zInsert
14d70 29 3b 0a 20 20 66 6f 72 28 6a 3d 31 3b 20 6a 3c  );.  for(j=1; j<
14d80 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 6d 65 6d  n; j++){.    mem
14d90 63 70 79 28 7a 49 6e 73 65 72 74 2b 69 2c 20 22  cpy(zInsert+i, "
14da0 2c 3f 22 2c 20 32 29 3b 0a 20 20 20 20 69 20 2b  ,?", 2);.    i +
14db0 3d 20 32 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70  = 2;.  }.  memcp
14dc0 79 28 7a 49 6e 73 65 72 74 2b 69 2c 20 22 29 3b  y(zInsert+i, ");
14dd0 22 2c 20 33 29 3b 0a 20 20 72 63 20 3d 20 73 71  ", 3);.  rc = sq
14de0 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
14df0 28 6e 65 77 44 62 2c 20 7a 49 6e 73 65 72 74 2c  (newDb, zInsert,
14e00 20 2d 31 2c 20 26 70 49 6e 73 65 72 74 2c 20 30   -1, &pInsert, 0
14e10 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  );.  if( rc ){. 
14e20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
14e30 74 64 65 72 72 2c 20 22 45 72 72 6f 72 20 25 64  tderr, "Error %d
14e40 3a 20 25 73 20 6f 6e 20 5b 25 73 5d 5c 6e 22 2c  : %s on [%s]\n",
14e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
14e60 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72  ite3_extended_er
14e70 72 63 6f 64 65 28 6e 65 77 44 62 29 2c 20 73 71  rcode(newDb), sq
14e80 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 6e 65 77  lite3_errmsg(new
14e90 44 62 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  Db),.           
14ea0 20 7a 51 75 65 72 79 29 3b 0a 20 20 20 20 67 6f   zQuery);.    go
14eb0 74 6f 20 65 6e 64 5f 64 61 74 61 5f 78 66 65 72  to end_data_xfer
14ec0 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 6b 3d 30 3b  ;.  }.  for(k=0;
14ed0 20 6b 3c 32 3b 20 6b 2b 2b 29 7b 0a 20 20 20 20   k<2; k++){.    
14ee0 77 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c  while( (rc = sql
14ef0 69 74 65 33 5f 73 74 65 70 28 70 51 75 65 72 79  ite3_step(pQuery
14f00 29 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  ))==SQLITE_ROW )
14f10 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  {.      for(i=0;
14f20 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20   i<n; i++){.    
14f30 20 20 20 20 73 77 69 74 63 68 28 20 73 71 6c 69      switch( sqli
14f40 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28  te3_column_type(
14f50 70 51 75 65 72 79 2c 20 69 29 20 29 7b 0a 20 20  pQuery, i) ){.  
14f60 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
14f70 49 54 45 5f 4e 55 4c 4c 3a 20 7b 0a 20 20 20 20  ITE_NULL: {.    
14f80 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
14f90 62 69 6e 64 5f 6e 75 6c 6c 28 70 49 6e 73 65 72  bind_null(pInser
14fa0 74 2c 20 69 2b 31 29 3b 0a 20 20 20 20 20 20 20  t, i+1);.       
14fb0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
14fc0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
14fd0 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e    case SQLITE_IN
14fe0 54 45 47 45 52 3a 20 7b 0a 20 20 20 20 20 20 20  TEGER: {.       
14ff0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e       sqlite3_bin
15000 64 5f 69 6e 74 36 34 28 70 49 6e 73 65 72 74 2c  d_int64(pInsert,
15010 20 69 2b 31 2c 20 73 71 6c 69 74 65 33 5f 63 6f   i+1, sqlite3_co
15020 6c 75 6d 6e 5f 69 6e 74 36 34 28 70 51 75 65 72  lumn_int64(pQuer
15030 79 2c 69 29 29 3b 0a 20 20 20 20 20 20 20 20 20  y,i));.         
15040 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
15050 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
15060 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4c 4f 41  case SQLITE_FLOA
15070 54 3a 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  T: {.           
15080 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f   sqlite3_bind_do
15090 75 62 6c 65 28 70 49 6e 73 65 72 74 2c 20 69 2b  uble(pInsert, i+
150a0 31 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  1, sqlite3_colum
150b0 6e 5f 64 6f 75 62 6c 65 28 70 51 75 65 72 79 2c  n_double(pQuery,
150c0 69 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  i));.           
150d0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
150e0 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 63 61    }.          ca
150f0 73 65 20 53 51 4c 49 54 45 5f 54 45 58 54 3a 20  se SQLITE_TEXT: 
15100 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
15110 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
15120 70 49 6e 73 65 72 74 2c 20 69 2b 31 2c 0a 20 20  pInsert, i+1,.  
15130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15140 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73             (cons
15150 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  t char*)sqlite3_
15160 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 51 75 65  column_text(pQue
15170 72 79 2c 69 29 2c 0a 20 20 20 20 20 20 20 20 20  ry,i),.         
15180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15190 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53      -1, SQLITE_S
151a0 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
151b0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
151c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
151d0 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42 4c 4f   case SQLITE_BLO
151e0 42 3a 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  B: {.           
151f0 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c   sqlite3_bind_bl
15200 6f 62 28 70 49 6e 73 65 72 74 2c 20 69 2b 31 2c  ob(pInsert, i+1,
15210 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
15220 62 6c 6f 62 28 70 51 75 65 72 79 2c 69 29 2c 0a  blob(pQuery,i),.
15230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15250 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
15260 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
15270 28 70 51 75 65 72 79 2c 69 29 2c 0a 20 20 20 20  (pQuery,i),.    
15280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152a0 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 53          SQLITE_S
152b0 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
152c0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
152d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
152e0 0a 20 20 20 20 20 20 7d 20 2f 2a 20 45 6e 64 20  .      } /* End 
152f0 66 6f 72 20 2a 2f 0a 20 20 20 20 20 20 72 63 20  for */.      rc 
15300 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  = sqlite3_step(p
15310 49 6e 73 65 72 74 29 3b 0a 20 20 20 20 20 20 69  Insert);.      i
15320 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
15330 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 52   && rc!=SQLITE_R
15340 4f 57 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45  OW && rc!=SQLITE
15350 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 20  _DONE ){.       
15360 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
15370 65 72 72 2c 20 22 45 72 72 6f 72 20 25 64 3a 20  err, "Error %d: 
15380 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65  %s\n", sqlite3_e
15390 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28  xtended_errcode(
153a0 6e 65 77 44 62 29 2c 0a 20 20 20 20 20 20 20 20  newDb),.        
153b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153c0 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 6e  sqlite3_errmsg(n
153d0 65 77 44 62 29 29 3b 0a 20 20 20 20 20 20 7d 0a  ewDb));.      }.
153e0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65        sqlite3_re
153f0 73 65 74 28 70 49 6e 73 65 72 74 29 3b 0a 20 20  set(pInsert);.  
15400 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20      cnt++;.     
15410 20 69 66 28 20 28 63 6e 74 25 73 70 69 6e 52 61   if( (cnt%spinRa
15420 74 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  te)==0 ){.      
15430 20 20 70 72 69 6e 74 66 28 22 25 63 5c 62 22 2c    printf("%c\b",
15440 20 22 7c 2f 2d 5c 5c 22 5b 28 63 6e 74 2f 73 70   "|/-\\"[(cnt/sp
15450 69 6e 52 61 74 65 29 25 34 5d 29 3b 0a 20 20 20  inRate)%4]);.   
15460 20 20 20 20 20 66 66 6c 75 73 68 28 73 74 64 6f       fflush(stdo
15470 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ut);.      }.   
15480 20 7d 20 2f 2a 20 45 6e 64 20 77 68 69 6c 65 20   } /* End while 
15490 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  */.    if( rc==S
154a0 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20 62 72 65  QLITE_DONE ) bre
154b0 61 6b 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  ak;.    sqlite3_
154c0 66 69 6e 61 6c 69 7a 65 28 70 51 75 65 72 79 29  finalize(pQuery)
154d0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
154e0 65 65 28 7a 51 75 65 72 79 29 3b 0a 20 20 20 20  ee(zQuery);.    
154f0 7a 51 75 65 72 79 20 3d 20 73 71 6c 69 74 65 33  zQuery = sqlite3
15500 5f 6d 70 72 69 6e 74 66 28 22 53 45 4c 45 43 54  _mprintf("SELECT
15510 20 2a 20 46 52 4f 4d 20 5c 22 25 77 5c 22 20 4f   * FROM \"%w\" O
15520 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45  RDER BY rowid DE
15530 53 43 3b 22 2c 0a 20 20 20 20 20 20 20 20 20 20  SC;",.          
15540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15550 20 20 20 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20     zTable);.    
15560 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
15570 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a  pare_v2(p->db, z
15580 51 75 65 72 79 2c 20 2d 31 2c 20 26 70 51 75 65  Query, -1, &pQue
15590 72 79 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20  ry, 0);.    if( 
155a0 72 63 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  rc ){.      utf8
155b0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
155c0 22 57 61 72 6e 69 6e 67 3a 20 63 61 6e 6e 6f 74  "Warning: cannot
155d0 20 73 74 65 70 20 5c 22 25 73 5c 22 20 62 61 63   step \"%s\" bac
155e0 6b 77 61 72 64 73 22 2c 20 7a 54 61 62 6c 65 29  kwards", zTable)
155f0 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
15600 20 20 20 7d 0a 20 20 7d 20 2f 2a 20 45 6e 64 20     }.  } /* End 
15610 66 6f 72 28 6b 3d 30 2e 2e 2e 29 20 2a 2f 0a 0a  for(k=0...) */..
15620 65 6e 64 5f 64 61 74 61 5f 78 66 65 72 3a 0a 20  end_data_xfer:. 
15630 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
15640 65 28 70 51 75 65 72 79 29 3b 0a 20 20 73 71 6c  e(pQuery);.  sql
15650 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 49  ite3_finalize(pI
15660 6e 73 65 72 74 29 3b 0a 20 20 73 71 6c 69 74 65  nsert);.  sqlite
15670 33 5f 66 72 65 65 28 7a 51 75 65 72 79 29 3b 0a  3_free(zQuery);.
15680 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
15690 49 6e 73 65 72 74 29 3b 0a 7d 0a 0a 0a 2f 2a 0a  Insert);.}.../*.
156a0 2a 2a 20 54 72 79 20 74 6f 20 74 72 61 6e 73 66  ** Try to transf
156b0 65 72 20 61 6c 6c 20 72 6f 77 73 20 6f 66 20 74  er all rows of t
156c0 68 65 20 73 63 68 65 6d 61 20 74 68 61 74 20 6d  he schema that m
156d0 61 74 63 68 20 7a 57 68 65 72 65 2e 20 20 46 6f  atch zWhere.  Fo
156e0 72 0a 2a 2a 20 65 61 63 68 20 72 6f 77 2c 20 69  r.** each row, i
156f0 6e 76 6f 6b 65 20 78 46 6f 72 45 61 63 68 28 29  nvoke xForEach()
15700 20 6f 6e 20 74 68 65 20 6f 62 6a 65 63 74 20 64   on the object d
15710 65 66 69 6e 65 64 20 62 79 20 74 68 61 74 20 72  efined by that r
15720 6f 77 2e 0a 2a 2a 20 49 66 20 61 6e 20 65 72 72  ow..** If an err
15730 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
15740 64 20 77 68 69 6c 65 20 6d 6f 76 69 6e 67 20 66  d while moving f
15750 6f 72 77 61 72 64 20 74 68 72 6f 75 67 68 20 74  orward through t
15760 68 65 0a 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 73  he.** sqlite_mas
15770 74 65 72 20 74 61 62 6c 65 2c 20 74 72 79 20 61  ter table, try a
15780 67 61 69 6e 20 6d 6f 76 69 6e 67 20 62 61 63 6b  gain moving back
15790 77 61 72 64 73 2e 0a 2a 2f 0a 73 74 61 74 69 63  wards..*/.static
157a0 20 76 6f 69 64 20 74 72 79 54 6f 43 6c 6f 6e 65   void tryToClone
157b0 53 63 68 65 6d 61 28 0a 20 20 53 68 65 6c 6c 53  Schema(.  ShellS
157c0 74 61 74 65 20 2a 70 2c 0a 20 20 73 71 6c 69 74  tate *p,.  sqlit
157d0 65 33 20 2a 6e 65 77 44 62 2c 0a 20 20 63 6f 6e  e3 *newDb,.  con
157e0 73 74 20 63 68 61 72 20 2a 7a 57 68 65 72 65 2c  st char *zWhere,
157f0 0a 20 20 76 6f 69 64 20 28 2a 78 46 6f 72 45 61  .  void (*xForEa
15800 63 68 29 28 53 68 65 6c 6c 53 74 61 74 65 2a 2c  ch)(ShellState*,
15810 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
15820 68 61 72 2a 29 0a 29 7b 0a 20 20 73 71 6c 69 74  har*).){.  sqlit
15830 65 33 5f 73 74 6d 74 20 2a 70 51 75 65 72 79 20  e3_stmt *pQuery 
15840 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 51 75  = 0;.  char *zQu
15850 65 72 79 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72  ery = 0;.  int r
15860 63 3b 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69 67  c;.  const unsig
15870 6e 65 64 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  ned char *zName;
15880 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  .  const unsigne
15890 64 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20  d char *zSql;.  
158a0 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20  char *zErrMsg = 
158b0 30 3b 0a 0a 20 20 7a 51 75 65 72 79 20 3d 20 73  0;..  zQuery = s
158c0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
158d0 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 73 71 6c  SELECT name, sql
158e0 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
158f0 74 65 72 22 0a 20 20 20 20 20 20 20 20 20 20 20  ter".           
15900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15910 22 20 57 48 45 52 45 20 25 73 22 2c 20 7a 57 68  " WHERE %s", zWh
15920 65 72 65 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  ere);.  rc = sql
15930 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
15940 70 2d 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20 2d  p->db, zQuery, -
15950 31 2c 20 26 70 51 75 65 72 79 2c 20 30 29 3b 0a  1, &pQuery, 0);.
15960 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
15970 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
15980 72 72 2c 20 22 45 72 72 6f 72 3a 20 28 25 64 29  rr, "Error: (%d)
15990 20 25 73 20 6f 6e 20 5b 25 73 5d 5c 6e 22 2c 0a   %s on [%s]\n",.
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159b0 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65      sqlite3_exte
159c0 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 70 2d 3e  nded_errcode(p->
159d0 64 62 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  db), sqlite3_err
159e0 6d 73 67 28 70 2d 3e 64 62 29 2c 0a 20 20 20 20  msg(p->db),.    
159f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a00 7a 51 75 65 72 79 29 3b 0a 20 20 20 20 67 6f 74  zQuery);.    got
15a10 6f 20 65 6e 64 5f 73 63 68 65 6d 61 5f 78 66 65  o end_schema_xfe
15a20 72 3b 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28 20  r;.  }.  while( 
15a30 28 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74  (rc = sqlite3_st
15a40 65 70 28 70 51 75 65 72 79 29 29 3d 3d 53 51 4c  ep(pQuery))==SQL
15a50 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 7a  ITE_ROW ){.    z
15a60 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 5f 63  Name = sqlite3_c
15a70 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 51 75 65 72  olumn_text(pQuer
15a80 79 2c 20 30 29 3b 0a 20 20 20 20 7a 53 71 6c 20  y, 0);.    zSql 
15a90 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
15aa0 5f 74 65 78 74 28 70 51 75 65 72 79 2c 20 31 29  _text(pQuery, 1)
15ab0 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 25 73  ;.    printf("%s
15ac0 2e 2e 2e 20 22 2c 20 7a 4e 61 6d 65 29 3b 20 66  ... ", zName); f
15ad0 66 6c 75 73 68 28 73 74 64 6f 75 74 29 3b 0a 20  flush(stdout);. 
15ae0 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28     sqlite3_exec(
15af0 6e 65 77 44 62 2c 20 28 63 6f 6e 73 74 20 63 68  newDb, (const ch
15b00 61 72 2a 29 7a 53 71 6c 2c 20 30 2c 20 30 2c 20  ar*)zSql, 0, 0, 
15b10 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69  &zErrMsg);.    i
15b20 66 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20  f( zErrMsg ){.  
15b30 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
15b40 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
15b50 25 73 5c 6e 53 51 4c 3a 20 5b 25 73 5d 5c 6e 22  %s\nSQL: [%s]\n"
15b60 2c 20 7a 45 72 72 4d 73 67 2c 20 7a 53 71 6c 29  , zErrMsg, zSql)
15b70 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
15b80 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20  free(zErrMsg);. 
15b90 20 20 20 20 20 7a 45 72 72 4d 73 67 20 3d 20 30       zErrMsg = 0
15ba0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
15bb0 78 46 6f 72 45 61 63 68 20 29 7b 0a 20 20 20 20  xForEach ){.    
15bc0 20 20 78 46 6f 72 45 61 63 68 28 70 2c 20 6e 65    xForEach(p, ne
15bd0 77 44 62 2c 20 28 63 6f 6e 73 74 20 63 68 61 72  wDb, (const char
15be0 2a 29 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a  *)zName);.    }.
15bf0 20 20 20 20 70 72 69 6e 74 66 28 22 64 6f 6e 65      printf("done
15c00 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  \n");.  }.  if( 
15c10 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc!=SQLITE_DONE 
15c20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66  ){.    sqlite3_f
15c30 69 6e 61 6c 69 7a 65 28 70 51 75 65 72 79 29 3b  inalize(pQuery);
15c40 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
15c50 65 28 7a 51 75 65 72 79 29 3b 0a 20 20 20 20 7a  e(zQuery);.    z
15c60 51 75 65 72 79 20 3d 20 73 71 6c 69 74 65 33 5f  Query = sqlite3_
15c70 6d 70 72 69 6e 74 66 28 22 53 45 4c 45 43 54 20  mprintf("SELECT 
15c80 6e 61 6d 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73  name, sql FROM s
15c90 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20  qlite_master".  
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cb0 20 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45             " WHE
15cc0 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20 72  RE %s ORDER BY r
15cd0 6f 77 69 64 20 44 45 53 43 22 2c 20 7a 57 68 65  owid DESC", zWhe
15ce0 72 65 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  re);.    rc = sq
15cf0 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
15d00 28 70 2d 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20  (p->db, zQuery, 
15d10 2d 31 2c 20 26 70 51 75 65 72 79 2c 20 30 29 3b  -1, &pQuery, 0);
15d20 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20  .    if( rc ){. 
15d30 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
15d40 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
15d50 20 28 25 64 29 20 25 73 20 6f 6e 20 5b 25 73 5d   (%d) %s on [%s]
15d60 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
15d70 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
15d80 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
15d90 6f 64 65 28 70 2d 3e 64 62 29 2c 20 73 71 6c 69  ode(p->db), sqli
15da0 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62  te3_errmsg(p->db
15db0 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
15dc0 20 20 20 20 20 20 20 20 20 7a 51 75 65 72 79 29           zQuery)
15dd0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 65 6e 64  ;.      goto end
15de0 5f 73 63 68 65 6d 61 5f 78 66 65 72 3b 0a 20 20  _schema_xfer;.  
15df0 20 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 28    }.    while( (
15e00 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65  rc = sqlite3_ste
15e10 70 28 70 51 75 65 72 79 29 29 3d 3d 53 51 4c 49  p(pQuery))==SQLI
15e20 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20  TE_ROW ){.      
15e30 7a 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 5f  zName = sqlite3_
15e40 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 51 75 65  column_text(pQue
15e50 72 79 2c 20 30 29 3b 0a 20 20 20 20 20 20 7a 53  ry, 0);.      zS
15e60 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  ql = sqlite3_col
15e70 75 6d 6e 5f 74 65 78 74 28 70 51 75 65 72 79 2c  umn_text(pQuery,
15e80 20 31 29 3b 0a 20 20 20 20 20 20 70 72 69 6e 74   1);.      print
15e90 66 28 22 25 73 2e 2e 2e 20 22 2c 20 7a 4e 61 6d  f("%s... ", zNam
15ea0 65 29 3b 20 66 66 6c 75 73 68 28 73 74 64 6f 75  e); fflush(stdou
15eb0 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  t);.      sqlite
15ec0 33 5f 65 78 65 63 28 6e 65 77 44 62 2c 20 28 63  3_exec(newDb, (c
15ed0 6f 6e 73 74 20 63 68 61 72 2a 29 7a 53 71 6c 2c  onst char*)zSql,
15ee0 20 30 2c 20 30 2c 20 26 7a 45 72 72 4d 73 67 29   0, 0, &zErrMsg)
15ef0 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 45 72 72  ;.      if( zErr
15f00 4d 73 67 20 29 7b 0a 20 20 20 20 20 20 20 20 75  Msg ){.        u
15f10 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
15f20 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 53  r, "Error: %s\nS
15f30 51 4c 3a 20 5b 25 73 5d 5c 6e 22 2c 20 7a 45 72  QL: [%s]\n", zEr
15f40 72 4d 73 67 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  rMsg, zSql);.   
15f50 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
15f60 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  e(zErrMsg);.    
15f70 20 20 20 20 7a 45 72 72 4d 73 67 20 3d 20 30 3b      zErrMsg = 0;
15f80 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
15f90 66 28 20 78 46 6f 72 45 61 63 68 20 29 7b 0a 20  f( xForEach ){. 
15fa0 20 20 20 20 20 20 20 78 46 6f 72 45 61 63 68 28         xForEach(
15fb0 70 2c 20 6e 65 77 44 62 2c 20 28 63 6f 6e 73 74  p, newDb, (const
15fc0 20 63 68 61 72 2a 29 7a 4e 61 6d 65 29 3b 0a 20   char*)zName);. 
15fd0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 72 69       }.      pri
15fe0 6e 74 66 28 22 64 6f 6e 65 5c 6e 22 29 3b 0a 20  ntf("done\n");. 
15ff0 20 20 20 7d 0a 20 20 7d 0a 65 6e 64 5f 73 63 68     }.  }.end_sch
16000 65 6d 61 5f 78 66 65 72 3a 0a 20 20 73 71 6c 69  ema_xfer:.  sqli
16010 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 51 75  te3_finalize(pQu
16020 65 72 79 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  ery);.  sqlite3_
16030 66 72 65 65 28 7a 51 75 65 72 79 29 3b 0a 7d 0a  free(zQuery);.}.
16040 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  ./*.** Open a ne
16050 77 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  w database file 
16060 6e 61 6d 65 64 20 22 7a 4e 65 77 44 62 22 2e 20  named "zNewDb". 
16070 20 54 72 79 20 74 6f 20 72 65 63 6f 76 65 72 20   Try to recover 
16080 61 73 20 6d 75 63 68 20 69 6e 66 6f 72 6d 61 74  as much informat
16090 69 6f 6e 0a 2a 2a 20 61 73 20 70 6f 73 73 69 62  ion.** as possib
160a0 6c 65 20 6f 75 74 20 6f 66 20 74 68 65 20 6d 61  le out of the ma
160b0 69 6e 20 64 61 74 61 62 61 73 65 20 28 77 68 69  in database (whi
160c0 63 68 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72  ch might be corr
160d0 75 70 74 29 20 61 6e 64 20 77 72 69 74 65 20 69  upt) and write i
160e0 74 0a 2a 2a 20 69 6e 74 6f 20 7a 4e 65 77 44 62  t.** into zNewDb
160f0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
16100 20 74 72 79 54 6f 43 6c 6f 6e 65 28 53 68 65 6c   tryToClone(Shel
16110 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f 6e 73 74  lState *p, const
16120 20 63 68 61 72 20 2a 7a 4e 65 77 44 62 29 7b 0a   char *zNewDb){.
16130 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69    int rc;.  sqli
16140 74 65 33 20 2a 6e 65 77 44 62 20 3d 20 30 3b 0a  te3 *newDb = 0;.
16150 20 20 69 66 28 20 61 63 63 65 73 73 28 7a 4e 65    if( access(zNe
16160 77 44 62 2c 30 29 3d 3d 30 20 29 7b 0a 20 20 20  wDb,0)==0 ){.   
16170 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
16180 65 72 72 2c 20 22 46 69 6c 65 20 5c 22 25 73 5c  err, "File \"%s\
16190 22 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  " already exists
161a0 2e 5c 6e 22 2c 20 7a 4e 65 77 44 62 29 3b 0a 20  .\n", zNewDb);. 
161b0 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20     return;.  }. 
161c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70   rc = sqlite3_op
161d0 65 6e 28 7a 4e 65 77 44 62 2c 20 26 6e 65 77 44  en(zNewDb, &newD
161e0 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  b);.  if( rc ){.
161f0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
16200 73 74 64 65 72 72 2c 20 22 43 61 6e 6e 6f 74 20  stderr, "Cannot 
16210 63 72 65 61 74 65 20 6f 75 74 70 75 74 20 64 61  create output da
16220 74 61 62 61 73 65 3a 20 25 73 5c 6e 22 2c 0a 20  tabase: %s\n",. 
16230 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
16240 65 33 5f 65 72 72 6d 73 67 28 6e 65 77 44 62 29  e3_errmsg(newDb)
16250 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
16260 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e  sqlite3_exec(p->
16270 64 62 2c 20 22 50 52 41 47 4d 41 20 77 72 69 74  db, "PRAGMA writ
16280 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b 22  able_schema=ON;"
16290 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  , 0, 0, 0);.    
162a0 73 71 6c 69 74 65 33 5f 65 78 65 63 28 6e 65 77  sqlite3_exec(new
162b0 44 62 2c 20 22 42 45 47 49 4e 20 45 58 43 4c 55  Db, "BEGIN EXCLU
162c0 53 49 56 45 3b 22 2c 20 30 2c 20 30 2c 20 30 29  SIVE;", 0, 0, 0)
162d0 3b 0a 20 20 20 20 74 72 79 54 6f 43 6c 6f 6e 65  ;.    tryToClone
162e0 53 63 68 65 6d 61 28 70 2c 20 6e 65 77 44 62 2c  Schema(p, newDb,
162f0 20 22 74 79 70 65 3d 27 74 61 62 6c 65 27 22 2c   "type='table'",
16300 20 74 72 79 54 6f 43 6c 6f 6e 65 44 61 74 61 29   tryToCloneData)
16310 3b 0a 20 20 20 20 74 72 79 54 6f 43 6c 6f 6e 65  ;.    tryToClone
16320 53 63 68 65 6d 61 28 70 2c 20 6e 65 77 44 62 2c  Schema(p, newDb,
16330 20 22 74 79 70 65 21 3d 27 74 61 62 6c 65 27 22   "type!='table'"
16340 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
16350 33 5f 65 78 65 63 28 6e 65 77 44 62 2c 20 22 43  3_exec(newDb, "C
16360 4f 4d 4d 49 54 3b 22 2c 20 30 2c 20 30 2c 20 30  OMMIT;", 0, 0, 0
16370 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65  );.    sqlite3_e
16380 78 65 63 28 70 2d 3e 64 62 2c 20 22 50 52 41 47  xec(p->db, "PRAG
16390 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
163a0 6d 61 3d 4f 46 46 3b 22 2c 20 30 2c 20 30 2c 20  ma=OFF;", 0, 0, 
163b0 30 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  0);.  }.  sqlite
163c0 33 5f 63 6c 6f 73 65 28 6e 65 77 44 62 29 3b 0a  3_close(newDb);.
163d0 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61 6e 67 65 20  }../*.** Change 
163e0 74 68 65 20 6f 75 74 70 75 74 20 66 69 6c 65 20  the output file 
163f0 62 61 63 6b 20 74 6f 20 73 74 64 6f 75 74 0a 2a  back to stdout.*
16400 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6f 75  /.static void ou
16410 74 70 75 74 5f 72 65 73 65 74 28 53 68 65 6c 6c  tput_reset(Shell
16420 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 69 66 28  State *p){.  if(
16430 20 70 2d 3e 6f 75 74 66 69 6c 65 5b 30 5d 3d 3d   p->outfile[0]==
16440 27 7c 27 20 29 7b 0a 23 69 66 6e 64 65 66 20 53  '|' ){.#ifndef S
16450 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 4f 50 45 4e  QLITE_OMIT_POPEN
16460 0a 20 20 20 20 70 63 6c 6f 73 65 28 70 2d 3e 6f  .    pclose(p->o
16470 75 74 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65  ut);.#endif.  }e
16480 6c 73 65 7b 0a 20 20 20 20 6f 75 74 70 75 74 5f  lse{.    output_
16490 66 69 6c 65 5f 63 6c 6f 73 65 28 70 2d 3e 6f 75  file_close(p->ou
164a0 74 29 3b 0a 20 20 7d 0a 20 20 70 2d 3e 6f 75 74  t);.  }.  p->out
164b0 66 69 6c 65 5b 30 5d 20 3d 20 30 3b 0a 20 20 70  file[0] = 0;.  p
164c0 2d 3e 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a  ->out = stdout;.
164d0 7d 0a 0a 2f 2a 0a 2a 2a 20 52 75 6e 20 61 6e 20  }../*.** Run an 
164e0 53 51 4c 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20  SQL command and 
164f0 72 65 74 75 72 6e 20 74 68 65 20 73 69 6e 67 6c  return the singl
16500 65 20 69 6e 74 65 67 65 72 20 72 65 73 75 6c 74  e integer result
16510 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
16520 64 62 5f 69 6e 74 28 53 68 65 6c 6c 53 74 61 74  db_int(ShellStat
16530 65 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72  e *p, const char
16540 20 2a 7a 53 71 6c 29 7b 0a 20 20 73 71 6c 69 74   *zSql){.  sqlit
16550 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
16560 20 20 69 6e 74 20 72 65 73 20 3d 20 30 3b 0a 20    int res = 0;. 
16570 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
16580 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c  _v2(p->db, zSql,
16590 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b   -1, &pStmt, 0);
165a0 0a 20 20 69 66 28 20 70 53 74 6d 74 20 26 26 20  .  if( pStmt && 
165b0 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74  sqlite3_step(pSt
165c0 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20  mt)==SQLITE_ROW 
165d0 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c  ){.    res = sql
165e0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28  ite3_column_int(
165f0 70 53 74 6d 74 2c 30 29 3b 0a 20 20 7d 0a 20 20  pStmt,0);.  }.  
16600 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
16610 28 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72  (pStmt);.  retur
16620 6e 20 72 65 73 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  n res;.}../*.** 
16630 43 6f 6e 76 65 72 74 20 61 20 32 2d 62 79 74 65  Convert a 2-byte
16640 20 6f 72 20 34 2d 62 79 74 65 20 62 69 67 2d 65   or 4-byte big-e
16650 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 69 6e  ndian integer in
16660 74 6f 20 61 20 6e 61 74 69 76 65 20 69 6e 74 65  to a native inte
16670 67 65 72 0a 2a 2f 0a 73 74 61 74 69 63 20 75 6e  ger.*/.static un
16680 73 69 67 6e 65 64 20 69 6e 74 20 67 65 74 32 62  signed int get2b
16690 79 74 65 49 6e 74 28 75 6e 73 69 67 6e 65 64 20  yteInt(unsigned 
166a0 63 68 61 72 20 2a 61 29 7b 0a 20 20 72 65 74 75  char *a){.  retu
166b0 72 6e 20 28 61 5b 30 5d 3c 3c 38 29 20 2b 20 61  rn (a[0]<<8) + a
166c0 5b 31 5d 3b 0a 7d 0a 73 74 61 74 69 63 20 75 6e  [1];.}.static un
166d0 73 69 67 6e 65 64 20 69 6e 74 20 67 65 74 34 62  signed int get4b
166e0 79 74 65 49 6e 74 28 75 6e 73 69 67 6e 65 64 20  yteInt(unsigned 
166f0 63 68 61 72 20 2a 61 29 7b 0a 20 20 72 65 74 75  char *a){.  retu
16700 72 6e 20 28 61 5b 30 5d 3c 3c 32 34 29 20 2b 20  rn (a[0]<<24) + 
16710 28 61 5b 31 5d 3c 3c 31 36 29 20 2b 20 28 61 5b  (a[1]<<16) + (a[
16720 32 5d 3c 3c 38 29 20 2b 20 61 5b 33 5d 3b 0a 7d  2]<<8) + a[3];.}
16730 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e  ../*.** Implemen
16740 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 22 2e  tation of the ".
16750 69 6e 66 6f 22 20 63 6f 6d 6d 61 6e 64 2e 0a 2a  info" command..*
16760 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 31 20 6f 6e  *.** Return 1 on
16770 20 65 72 72 6f 72 2c 20 32 20 74 6f 20 65 78 69   error, 2 to exi
16780 74 2c 20 61 6e 64 20 30 20 6f 74 68 65 72 77 69  t, and 0 otherwi
16790 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  se..*/.static in
167a0 74 20 73 68 65 6c 6c 5f 64 62 69 6e 66 6f 5f 63  t shell_dbinfo_c
167b0 6f 6d 6d 61 6e 64 28 53 68 65 6c 6c 53 74 61 74  ommand(ShellStat
167c0 65 20 2a 70 2c 20 69 6e 74 20 6e 41 72 67 2c 20  e *p, int nArg, 
167d0 63 68 61 72 20 2a 2a 61 7a 41 72 67 29 7b 0a 20  char **azArg){. 
167e0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74   static const st
167f0 72 75 63 74 20 7b 20 63 6f 6e 73 74 20 63 68 61  ruct { const cha
16800 72 20 2a 7a 4e 61 6d 65 3b 20 69 6e 74 20 6f 66  r *zName; int of
16810 73 74 3b 20 7d 20 61 46 69 65 6c 64 5b 5d 20 3d  st; } aField[] =
16820 20 7b 0a 20 20 20 20 20 7b 20 22 66 69 6c 65 20   {.     { "file 
16830 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 3a 22  change counter:"
16840 2c 20 20 32 34 20 20 7d 2c 0a 20 20 20 20 20 7b  ,  24  },.     {
16850 20 22 64 61 74 61 62 61 73 65 20 70 61 67 65 20   "database page 
16860 63 6f 75 6e 74 3a 22 2c 20 20 32 38 20 20 7d 2c  count:",  28  },
16870 0a 20 20 20 20 20 7b 20 22 66 72 65 65 6c 69 73  .     { "freelis
16880 74 20 70 61 67 65 20 63 6f 75 6e 74 3a 22 2c 20  t page count:", 
16890 20 33 36 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22   36  },.     { "
168a0 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 3a 22 2c  schema cookie:",
168b0 20 20 20 20 20 20 20 20 34 30 20 20 7d 2c 0a 20          40  },. 
168c0 20 20 20 20 7b 20 22 73 63 68 65 6d 61 20 66 6f      { "schema fo
168d0 72 6d 61 74 3a 22 2c 20 20 20 20 20 20 20 20 34  rmat:",        4
168e0 34 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 64 65  4  },.     { "de
168f0 66 61 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65  fault cache size
16900 3a 22 2c 20 20 20 34 38 20 20 7d 2c 0a 20 20 20  :",   48  },.   
16910 20 20 7b 20 22 61 75 74 6f 76 61 63 75 75 6d 20    { "autovacuum 
16920 74 6f 70 20 72 6f 6f 74 3a 22 2c 20 20 35 32 20  top root:",  52 
16930 20 7d 2c 0a 20 20 20 20 20 7b 20 22 69 6e 63 72   },.     { "incr
16940 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 3a 22  emental vacuum:"
16950 2c 20 20 20 36 34 20 20 7d 2c 0a 20 20 20 20 20  ,   64  },.     
16960 7b 20 22 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  { "text encoding
16970 3a 22 2c 20 20 20 20 20 20 20 20 35 36 20 20 7d  :",        56  }
16980 2c 0a 20 20 20 20 20 7b 20 22 75 73 65 72 20 76  ,.     { "user v
16990 65 72 73 69 6f 6e 3a 22 2c 20 20 20 20 20 20 20  ersion:",       
169a0 20 20 36 30 20 20 7d 2c 0a 20 20 20 20 20 7b 20    60  },.     { 
169b0 22 61 70 70 6c 69 63 61 74 69 6f 6e 20 69 64 3a  "application id:
169c0 22 2c 20 20 20 20 20 20 20 36 38 20 20 7d 2c 0a  ",       68  },.
169d0 20 20 20 20 20 7b 20 22 73 6f 66 74 77 61 72 65       { "software
169e0 20 76 65 72 73 69 6f 6e 3a 22 2c 20 20 20 20 20   version:",     
169f0 39 36 20 20 7d 2c 0a 20 20 7d 3b 0a 20 20 73 74  96  },.  };.  st
16a00 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63  atic const struc
16a10 74 20 7b 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  t { const char *
16a20 7a 4e 61 6d 65 3b 20 63 6f 6e 73 74 20 63 68 61  zName; const cha
16a30 72 20 2a 7a 53 71 6c 3b 20 7d 20 61 51 75 65 72  r *zSql; } aQuer
16a40 79 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20 22  y[] = {.     { "
16a50 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  number of tables
16a60 3a 22 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45  :",.       "SELE
16a70 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
16a80 20 25 73 20 57 48 45 52 45 20 74 79 70 65 3d 27   %s WHERE type='
16a90 74 61 62 6c 65 27 22 20 7d 2c 0a 20 20 20 20 20  table'" },.     
16aa0 7b 20 22 6e 75 6d 62 65 72 20 6f 66 20 69 6e 64  { "number of ind
16ab0 65 78 65 73 3a 22 2c 0a 20 20 20 20 20 20 20 22  exes:",.       "
16ac0 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
16ad0 46 52 4f 4d 20 25 73 20 57 48 45 52 45 20 74 79  FROM %s WHERE ty
16ae0 70 65 3d 27 69 6e 64 65 78 27 22 20 7d 2c 0a 20  pe='index'" },. 
16af0 20 20 20 20 7b 20 22 6e 75 6d 62 65 72 20 6f 66      { "number of
16b00 20 74 72 69 67 67 65 72 73 3a 22 2c 0a 20 20 20   triggers:",.   
16b10 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e      "SELECT coun
16b20 74 28 2a 29 20 46 52 4f 4d 20 25 73 20 57 48 45  t(*) FROM %s WHE
16b30 52 45 20 74 79 70 65 3d 27 74 72 69 67 67 65 72  RE type='trigger
16b40 27 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 6e 75  '" },.     { "nu
16b50 6d 62 65 72 20 6f 66 20 76 69 65 77 73 3a 22 2c  mber of views:",
16b60 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  .       "SELECT 
16b70 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 25 73  count(*) FROM %s
16b80 20 57 48 45 52 45 20 74 79 70 65 3d 27 76 69 65   WHERE type='vie
16b90 77 27 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73  w'" },.     { "s
16ba0 63 68 65 6d 61 20 73 69 7a 65 3a 22 2c 0a 20 20  chema size:",.  
16bb0 20 20 20 20 20 22 53 45 4c 45 43 54 20 74 6f 74       "SELECT tot
16bc0 61 6c 28 6c 65 6e 67 74 68 28 73 71 6c 29 29 20  al(length(sql)) 
16bd0 46 52 4f 4d 20 25 73 22 20 7d 2c 0a 20 20 7d 3b  FROM %s" },.  };
16be0 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  .  sqlite3_file 
16bf0 2a 70 46 69 6c 65 20 3d 20 30 3b 0a 20 20 69 6e  *pFile = 0;.  in
16c00 74 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a 53 63  t i;.  char *zSc
16c10 68 65 6d 61 54 61 62 3b 0a 20 20 63 68 61 72 20  hemaTab;.  char 
16c20 2a 7a 44 62 20 3d 20 6e 41 72 67 3e 3d 32 20 3f  *zDb = nArg>=2 ?
16c30 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 6d 61 69   azArg[1] : "mai
16c40 6e 22 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63  n";.  unsigned c
16c50 68 61 72 20 61 48 64 72 5b 31 30 30 5d 3b 0a 20  har aHdr[100];. 
16c60 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a   open_db(p, 0);.
16c70 20 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29    if( p->db==0 )
16c80 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 73 71 6c   return 1;.  sql
16c90 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
16ca0 6c 28 70 2d 3e 64 62 2c 20 7a 44 62 2c 20 53 51  l(p->db, zDb, SQ
16cb0 4c 49 54 45 5f 46 43 4e 54 4c 5f 46 49 4c 45 5f  LITE_FCNTL_FILE_
16cc0 50 4f 49 4e 54 45 52 2c 20 26 70 46 69 6c 65 29  POINTER, &pFile)
16cd0 3b 0a 20 20 69 66 28 20 70 46 69 6c 65 3d 3d 30  ;.  if( pFile==0
16ce0 20 7c 7c 20 70 46 69 6c 65 2d 3e 70 4d 65 74 68   || pFile->pMeth
16cf0 6f 64 73 3d 3d 30 20 7c 7c 20 70 46 69 6c 65 2d  ods==0 || pFile-
16d00 3e 70 4d 65 74 68 6f 64 73 2d 3e 78 52 65 61 64  >pMethods->xRead
16d10 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ==0 ){.    retur
16d20 6e 20 31 3b 0a 20 20 7d 0a 20 20 69 20 3d 20 70  n 1;.  }.  i = p
16d30 46 69 6c 65 2d 3e 70 4d 65 74 68 6f 64 73 2d 3e  File->pMethods->
16d40 78 52 65 61 64 28 70 46 69 6c 65 2c 20 61 48 64  xRead(pFile, aHd
16d50 72 2c 20 31 30 30 2c 20 30 29 3b 0a 20 20 69 66  r, 100, 0);.  if
16d60 28 20 69 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  ( i!=SQLITE_OK )
16d70 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  {.    raw_printf
16d80 28 73 74 64 65 72 72 2c 20 22 75 6e 61 62 6c 65  (stderr, "unable
16d90 20 74 6f 20 72 65 61 64 20 64 61 74 61 62 61 73   to read databas
16da0 65 20 68 65 61 64 65 72 5c 6e 22 29 3b 0a 20 20  e header\n");.  
16db0 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a    return 1;.  }.
16dc0 20 20 69 20 3d 20 67 65 74 32 62 79 74 65 49 6e    i = get2byteIn
16dd0 74 28 61 48 64 72 2b 31 36 29 3b 0a 20 20 69 66  t(aHdr+16);.  if
16de0 28 20 69 3d 3d 31 20 29 20 69 20 3d 20 36 35 35  ( i==1 ) i = 655
16df0 33 36 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e 74  36;.  utf8_print
16e00 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 32 30 73  f(p->out, "%-20s
16e10 20 25 64 5c 6e 22 2c 20 22 64 61 74 61 62 61 73   %d\n", "databas
16e20 65 20 70 61 67 65 20 73 69 7a 65 3a 22 2c 20 69  e page size:", i
16e30 29 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e 74 66  );.  utf8_printf
16e40 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 32 30 73 20  (p->out, "%-20s 
16e50 25 64 5c 6e 22 2c 20 22 77 72 69 74 65 20 66 6f  %d\n", "write fo
16e60 72 6d 61 74 3a 22 2c 20 61 48 64 72 5b 31 38 5d  rmat:", aHdr[18]
16e70 29 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e 74 66  );.  utf8_printf
16e80 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 32 30 73 20  (p->out, "%-20s 
16e90 25 64 5c 6e 22 2c 20 22 72 65 61 64 20 66 6f 72  %d\n", "read for
16ea0 6d 61 74 3a 22 2c 20 61 48 64 72 5b 31 39 5d 29  mat:", aHdr[19])
16eb0 3b 0a 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28  ;.  utf8_printf(
16ec0 70 2d 3e 6f 75 74 2c 20 22 25 2d 32 30 73 20 25  p->out, "%-20s %
16ed0 64 5c 6e 22 2c 20 22 72 65 73 65 72 76 65 64 20  d\n", "reserved 
16ee0 62 79 74 65 73 3a 22 2c 20 61 48 64 72 5b 32 30  bytes:", aHdr[20
16ef0 5d 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  ]);.  for(i=0; i
16f00 3c 41 72 72 61 79 53 69 7a 65 28 61 46 69 65 6c  <ArraySize(aFiel
16f10 64 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 6e  d); i++){.    in
16f20 74 20 6f 66 73 74 20 3d 20 61 46 69 65 6c 64 5b  t ofst = aField[
16f30 69 5d 2e 6f 66 73 74 3b 0a 20 20 20 20 75 6e 73  i].ofst;.    uns
16f40 69 67 6e 65 64 20 69 6e 74 20 76 61 6c 20 3d 20  igned int val = 
16f50 67 65 74 34 62 79 74 65 49 6e 74 28 61 48 64 72  get4byteInt(aHdr
16f60 20 2b 20 6f 66 73 74 29 3b 0a 20 20 20 20 75 74   + ofst);.    ut
16f70 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
16f80 2c 20 22 25 2d 32 30 73 20 25 75 22 2c 20 61 46  , "%-20s %u", aF
16f90 69 65 6c 64 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 76  ield[i].zName, v
16fa0 61 6c 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28  al);.    switch(
16fb0 20 6f 66 73 74 20 29 7b 0a 20 20 20 20 20 20 63   ofst ){.      c
16fc0 61 73 65 20 35 36 3a 20 7b 0a 20 20 20 20 20 20  ase 56: {.      
16fd0 20 20 69 66 28 20 76 61 6c 3d 3d 31 20 29 20 72    if( val==1 ) r
16fe0 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
16ff0 2c 20 22 20 28 75 74 66 38 29 22 29 3b 0a 20 20  , " (utf8)");.  
17000 20 20 20 20 20 20 69 66 28 20 76 61 6c 3d 3d 32        if( val==2
17010 20 29 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d   ) raw_printf(p-
17020 3e 6f 75 74 2c 20 22 20 28 75 74 66 31 36 6c 65  >out, " (utf16le
17030 29 22 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  )");.        if(
17040 20 76 61 6c 3d 3d 33 20 29 20 72 61 77 5f 70 72   val==3 ) raw_pr
17050 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 20 28  intf(p->out, " (
17060 75 74 66 31 36 62 65 29 22 29 3b 0a 20 20 20 20  utf16be)");.    
17070 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 61    }.    }.    ra
17080 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
17090 20 22 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 69 66   "\n");.  }.  if
170a0 28 20 7a 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20  ( zDb==0 ){.    
170b0 7a 53 63 68 65 6d 61 54 61 62 20 3d 20 73 71 6c  zSchemaTab = sql
170c0 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 6d 61  ite3_mprintf("ma
170d0 69 6e 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  in.sqlite_master
170e0 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
170f0 73 74 72 63 6d 70 28 7a 44 62 2c 22 74 65 6d 70  strcmp(zDb,"temp
17100 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 7a 53 63  ")==0 ){.    zSc
17110 68 65 6d 61 54 61 62 20 3d 20 73 71 6c 69 74 65  hemaTab = sqlite
17120 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
17130 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
17140 74 65 72 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ter");.  }else{.
17150 20 20 20 20 7a 53 63 68 65 6d 61 54 61 62 20 3d      zSchemaTab =
17160 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
17170 28 22 5c 22 25 77 5c 22 2e 73 71 6c 69 74 65 5f  ("\"%w\".sqlite_
17180 6d 61 73 74 65 72 22 2c 20 7a 44 62 29 3b 0a 20  master", zDb);. 
17190 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c   }.  for(i=0; i<
171a0 41 72 72 61 79 53 69 7a 65 28 61 51 75 65 72 79  ArraySize(aQuery
171b0 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 63 68 61  ); i++){.    cha
171c0 72 20 2a 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65  r *zSql = sqlite
171d0 33 5f 6d 70 72 69 6e 74 66 28 61 51 75 65 72 79  3_mprintf(aQuery
171e0 5b 69 5d 2e 7a 53 71 6c 2c 20 7a 53 63 68 65 6d  [i].zSql, zSchem
171f0 61 54 61 62 29 3b 0a 20 20 20 20 69 6e 74 20 76  aTab);.    int v
17200 61 6c 20 3d 20 64 62 5f 69 6e 74 28 70 2c 20 7a  al = db_int(p, z
17210 53 71 6c 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Sql);.    sqlite
17220 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20  3_free(zSql);.  
17230 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
17240 3e 6f 75 74 2c 20 22 25 2d 32 30 73 20 25 64 5c  >out, "%-20s %d\
17250 6e 22 2c 20 61 51 75 65 72 79 5b 69 5d 2e 7a 4e  n", aQuery[i].zN
17260 61 6d 65 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20  ame, val);.  }. 
17270 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53   sqlite3_free(zS
17280 63 68 65 6d 61 54 61 62 29 3b 0a 20 20 72 65 74  chemaTab);.  ret
17290 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
172a0 50 72 69 6e 74 20 74 68 65 20 63 75 72 72 65 6e  Print the curren
172b0 74 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  t sqlite3_errmsg
172c0 28 29 20 76 61 6c 75 65 20 74 6f 20 73 74 64 65  () value to stde
172d0 72 72 20 61 6e 64 20 72 65 74 75 72 6e 20 31 2e  rr and return 1.
172e0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
172f0 68 65 6c 6c 44 61 74 61 62 61 73 65 45 72 72 6f  hellDatabaseErro
17300 72 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  r(sqlite3 *db){.
17310 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
17320 72 72 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72  rr = sqlite3_err
17330 6d 73 67 28 64 62 29 3b 0a 20 20 75 74 66 38 5f  msg(db);.  utf8_
17340 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
17350 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45  Error: %s\n", zE
17360 72 72 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b  rr);.  return 1;
17370 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  .}../*.** Print 
17380 61 6e 20 6f 75 74 2d 6f 66 2d 6d 65 6d 6f 72 79  an out-of-memory
17390 20 6d 65 73 73 61 67 65 20 74 6f 20 73 74 64 65   message to stde
173a0 72 72 20 61 6e 64 20 72 65 74 75 72 6e 20 31 2e  rr and return 1.
173b0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
173c0 68 65 6c 6c 4e 6f 6d 65 6d 45 72 72 6f 72 28 76  hellNomemError(v
173d0 6f 69 64 29 7b 0a 20 20 72 61 77 5f 70 72 69 6e  oid){.  raw_prin
173e0 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
173f0 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  r: out of memory
17400 5c 6e 22 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  \n");.  return 1
17410 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 61  ;.}../*.** Compa
17420 72 65 20 74 68 65 20 70 61 74 74 65 72 6e 20 69  re the pattern i
17430 6e 20 7a 47 6c 6f 62 5b 5d 20 61 67 61 69 6e 73  n zGlob[] agains
17440 74 20 74 68 65 20 74 65 78 74 20 69 6e 20 7a 5b  t the text in z[
17450 5d 2e 20 20 52 65 74 75 72 6e 20 54 52 55 45 0a  ].  Return TRUE.
17460 2a 2a 20 69 66 20 74 68 65 79 20 6d 61 74 63 68  ** if they match
17470 20 61 6e 64 20 46 41 4c 53 45 20 28 30 29 20 69   and FALSE (0) i
17480 66 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 6d 61  f they do not ma
17490 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 47 6c 6f 62 62  tch..**.** Globb
174a0 69 6e 67 20 72 75 6c 65 73 3a 0a 2a 2a 0a 2a 2a  ing rules:.**.**
174b0 20 20 20 20 20 20 27 2a 27 20 20 20 20 20 20 20        '*'       
174c0 4d 61 74 63 68 65 73 20 61 6e 79 20 73 65 71 75  Matches any sequ
174d0 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20  ence of zero or 
174e0 6d 6f 72 65 20 63 68 61 72 61 63 74 65 72 73 2e  more characters.
174f0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 27 3f 27 20  .**.**      '?' 
17500 20 20 20 20 20 20 4d 61 74 63 68 65 73 20 65 78        Matches ex
17510 61 63 74 6c 79 20 6f 6e 65 20 63 68 61 72 61 63  actly one charac
17520 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 5b  ter..**.**     [
17530 2e 2e 2e 5d 20 20 20 20 20 20 4d 61 74 63 68 65  ...]      Matche
17540 73 20 6f 6e 65 20 63 68 61 72 61 63 74 65 72 20  s one character 
17550 66 72 6f 6d 20 74 68 65 20 65 6e 63 6c 6f 73 65  from the enclose
17560 64 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 20 20 20  d list of.**    
17570 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72              char
17580 61 63 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 20 20  acters..**.**   
17590 20 20 5b 5e 2e 2e 2e 5d 20 20 20 20 20 4d 61 74    [^...]     Mat
175a0 63 68 65 73 20 6f 6e 65 20 63 68 61 72 61 63 74  ches one charact
175b0 65 72 20 6e 6f 74 20 69 6e 20 74 68 65 20 65 6e  er not in the en
175c0 63 6c 6f 73 65 64 20 6c 69 73 74 2e 0a 2a 2a 0a  closed list..**.
175d0 2a 2a 20 20 20 20 20 20 27 23 27 20 20 20 20 20  **      '#'     
175e0 20 20 4d 61 74 63 68 65 73 20 61 6e 79 20 73 65    Matches any se
175f0 71 75 65 6e 63 65 20 6f 66 20 6f 6e 65 20 6f 72  quence of one or
17600 20 6d 6f 72 65 20 64 69 67 69 74 73 20 77 69 74   more digits wit
17610 68 20 61 6e 0a 2a 2a 20 20 20 20 20 20 20 20 20  h an.**         
17620 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 61 6c 20         optional 
17630 2b 20 6f 72 20 2d 20 73 69 67 6e 20 69 6e 20 66  + or - sign in f
17640 72 6f 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  ront.**.**      
17650 27 20 27 20 20 20 20 20 20 20 41 6e 79 20 73 70  ' '       Any sp
17660 61 6e 20 6f 66 20 77 68 69 74 65 73 70 61 63 65  an of whitespace
17670 20 6d 61 74 63 68 65 73 20 61 6e 79 20 6f 74 68   matches any oth
17680 65 72 20 73 70 61 6e 20 6f 66 0a 2a 2a 20 20 20  er span of.**   
17690 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
176a0 74 65 73 70 61 63 65 2e 0a 2a 2a 0a 2a 2a 20 45  tespace..**.** E
176b0 78 74 72 61 20 77 68 69 74 65 73 70 61 63 65 20  xtra whitespace 
176c0 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 7a 5b  at the end of z[
176d0 5d 20 69 73 20 69 67 6e 6f 72 65 64 2e 0a 2a 2f  ] is ignored..*/
176e0 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
176f0 63 61 73 65 5f 67 6c 6f 62 28 63 6f 6e 73 74 20  case_glob(const 
17700 63 68 61 72 20 2a 7a 47 6c 6f 62 2c 20 63 6f 6e  char *zGlob, con
17710 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69  st char *z){.  i
17720 6e 74 20 63 2c 20 63 32 3b 0a 20 20 69 6e 74 20  nt c, c2;.  int 
17730 69 6e 76 65 72 74 3b 0a 20 20 69 6e 74 20 73 65  invert;.  int se
17740 65 6e 3b 0a 0a 20 20 77 68 69 6c 65 28 20 28 63  en;..  while( (c
17750 20 3d 20 28 2a 28 7a 47 6c 6f 62 2b 2b 29 29 29   = (*(zGlob++)))
17760 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 49  !=0 ){.    if( I
17770 73 53 70 61 63 65 28 63 29 20 29 7b 0a 20 20 20  sSpace(c) ){.   
17780 20 20 20 69 66 28 20 21 49 73 53 70 61 63 65 28     if( !IsSpace(
17790 2a 7a 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  *z) ) return 0;.
177a0 20 20 20 20 20 20 77 68 69 6c 65 28 20 49 73 53        while( IsS
177b0 70 61 63 65 28 2a 7a 47 6c 6f 62 29 20 29 20 7a  pace(*zGlob) ) z
177c0 47 6c 6f 62 2b 2b 3b 0a 20 20 20 20 20 20 77 68  Glob++;.      wh
177d0 69 6c 65 28 20 49 73 53 70 61 63 65 28 2a 7a 29  ile( IsSpace(*z)
177e0 20 29 20 7a 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73   ) z++;.    }els
177f0 65 20 69 66 28 20 63 3d 3d 27 2a 27 20 29 7b 0a  e if( c=='*' ){.
17800 20 20 20 20 20 20 77 68 69 6c 65 28 20 28 63 3d        while( (c=
17810 28 2a 28 7a 47 6c 6f 62 2b 2b 29 29 29 20 3d 3d  (*(zGlob++))) ==
17820 20 27 2a 27 20 7c 7c 20 63 3d 3d 27 3f 27 20 29   '*' || c=='?' )
17830 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 3d  {.        if( c=
17840 3d 27 3f 27 20 26 26 20 28 2a 28 7a 2b 2b 29 29  ='?' && (*(z++))
17850 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
17860 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
17870 28 20 63 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ( c==0 ){.      
17880 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20    return 1;.    
17890 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27    }else if( c=='
178a0 5b 27 20 29 7b 0a 20 20 20 20 20 20 20 20 77 68  [' ){.        wh
178b0 69 6c 65 28 20 2a 7a 20 26 26 20 74 65 73 74 63  ile( *z && testc
178c0 61 73 65 5f 67 6c 6f 62 28 7a 47 6c 6f 62 2d 31  ase_glob(zGlob-1
178d0 2c 7a 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ,z)==0 ){.      
178e0 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 20      z++;.       
178f0 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   }.        retur
17900 6e 20 28 2a 7a 29 21 3d 30 3b 0a 20 20 20 20 20  n (*z)!=0;.     
17910 20 7d 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20   }.      while( 
17920 28 63 32 20 3d 20 28 2a 28 7a 2b 2b 29 29 29 21  (c2 = (*(z++)))!
17930 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 77 68  =0 ){.        wh
17940 69 6c 65 28 20 63 32 21 3d 63 20 29 7b 0a 20 20  ile( c2!=c ){.  
17950 20 20 20 20 20 20 20 20 63 32 20 3d 20 2a 28 7a          c2 = *(z
17960 2b 2b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  ++);.          i
17970 66 28 20 63 32 3d 3d 30 20 29 20 72 65 74 75 72  f( c2==0 ) retur
17980 6e 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  n 0;.        }. 
17990 20 20 20 20 20 20 20 69 66 28 20 74 65 73 74 63         if( testc
179a0 61 73 65 5f 67 6c 6f 62 28 7a 47 6c 6f 62 2c 7a  ase_glob(zGlob,z
179b0 29 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20  ) ) return 1;.  
179c0 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
179d0 72 6e 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20  rn 0;.    }else 
179e0 69 66 28 20 63 3d 3d 27 3f 27 20 29 7b 0a 20 20  if( c=='?' ){.  
179f0 20 20 20 20 69 66 28 20 28 2a 28 7a 2b 2b 29 29      if( (*(z++))
17a00 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
17a10 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
17a20 3d 27 5b 27 20 29 7b 0a 20 20 20 20 20 20 69 6e  ='[' ){.      in
17a30 74 20 70 72 69 6f 72 5f 63 20 3d 20 30 3b 0a 20  t prior_c = 0;. 
17a40 20 20 20 20 20 73 65 65 6e 20 3d 20 30 3b 0a 20       seen = 0;. 
17a50 20 20 20 20 20 69 6e 76 65 72 74 20 3d 20 30 3b       invert = 0;
17a60 0a 20 20 20 20 20 20 63 20 3d 20 2a 28 7a 2b 2b  .      c = *(z++
17a70 29 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d  );.      if( c==
17a80 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
17a90 20 20 20 20 63 32 20 3d 20 2a 28 7a 47 6c 6f 62      c2 = *(zGlob
17aa0 2b 2b 29 3b 0a 20 20 20 20 20 20 69 66 28 20 63  ++);.      if( c
17ab0 32 3d 3d 27 5e 27 20 29 7b 0a 20 20 20 20 20 20  2=='^' ){.      
17ac0 20 20 69 6e 76 65 72 74 20 3d 20 31 3b 0a 20 20    invert = 1;.  
17ad0 20 20 20 20 20 20 63 32 20 3d 20 2a 28 7a 47 6c        c2 = *(zGl
17ae0 6f 62 2b 2b 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ob++);.      }. 
17af0 20 20 20 20 20 69 66 28 20 63 32 3d 3d 27 5d 27       if( c2==']'
17b00 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
17b10 63 3d 3d 27 5d 27 20 29 20 73 65 65 6e 20 3d 20  c==']' ) seen = 
17b20 31 3b 0a 20 20 20 20 20 20 20 20 63 32 20 3d 20  1;.        c2 = 
17b30 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20  *(zGlob++);.    
17b40 20 20 7d 0a 20 20 20 20 20 20 77 68 69 6c 65 28    }.      while(
17b50 20 63 32 20 26 26 20 63 32 21 3d 27 5d 27 20 29   c2 && c2!=']' )
17b60 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 32  {.        if( c2
17b70 3d 3d 27 2d 27 20 26 26 20 7a 47 6c 6f 62 5b 30  =='-' && zGlob[0
17b80 5d 21 3d 27 5d 27 20 26 26 20 7a 47 6c 6f 62 5b  ]!=']' && zGlob[
17b90 30 5d 21 3d 30 20 26 26 20 70 72 69 6f 72 5f 63  0]!=0 && prior_c
17ba0 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  >0 ){.          
17bb0 63 32 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b  c2 = *(zGlob++);
17bc0 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63  .          if( c
17bd0 3e 3d 70 72 69 6f 72 5f 63 20 26 26 20 63 3c 3d  >=prior_c && c<=
17be0 63 32 20 29 20 73 65 65 6e 20 3d 20 31 3b 0a 20  c2 ) seen = 1;. 
17bf0 20 20 20 20 20 20 20 20 20 70 72 69 6f 72 5f 63           prior_c
17c00 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 0;.        }e
17c10 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69  lse{.          i
17c20 66 28 20 63 3d 3d 63 32 20 29 7b 0a 20 20 20 20  f( c==c2 ){.    
17c30 20 20 20 20 20 20 20 20 73 65 65 6e 20 3d 20 31          seen = 1
17c40 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
17c50 20 20 20 20 20 20 20 20 70 72 69 6f 72 5f 63 20          prior_c 
17c60 3d 20 63 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a  = c2;.        }.
17c70 20 20 20 20 20 20 20 20 63 32 20 3d 20 2a 28 7a          c2 = *(z
17c80 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20 20 20 7d  Glob++);.      }
17c90 0a 20 20 20 20 20 20 69 66 28 20 63 32 3d 3d 30  .      if( c2==0
17ca0 20 7c 7c 20 28 73 65 65 6e 20 5e 20 69 6e 76 65   || (seen ^ inve
17cb0 72 74 29 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  rt)==0 ) return 
17cc0 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
17cd0 20 63 3d 3d 27 23 27 20 29 7b 0a 20 20 20 20 20   c=='#' ){.     
17ce0 20 69 66 28 20 28 7a 5b 30 5d 3d 3d 27 2d 27 20   if( (z[0]=='-' 
17cf0 7c 7c 20 7a 5b 30 5d 3d 3d 27 2b 27 29 20 26 26  || z[0]=='+') &&
17d00 20 49 73 44 69 67 69 74 28 7a 5b 31 5d 29 20 29   IsDigit(z[1]) )
17d10 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20   z++;.      if( 
17d20 21 49 73 44 69 67 69 74 28 7a 5b 30 5d 29 20 29  !IsDigit(z[0]) )
17d30 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20   return 0;.     
17d40 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 77 68 69 6c   z++;.      whil
17d50 65 28 20 49 73 44 69 67 69 74 28 7a 5b 30 5d 29  e( IsDigit(z[0])
17d60 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 20 20 7d   ){ z++; }.    }
17d70 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20  else{.      if( 
17d80 63 21 3d 28 2a 28 7a 2b 2b 29 29 20 29 20 72 65  c!=(*(z++)) ) re
17d90 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 20  turn 0;.    }.  
17da0 7d 0a 20 20 77 68 69 6c 65 28 20 49 73 53 70 61  }.  while( IsSpa
17db0 63 65 28 2a 7a 29 20 29 7b 20 7a 2b 2b 3b 20 7d  ce(*z) ){ z++; }
17dc0 0a 20 20 72 65 74 75 72 6e 20 2a 7a 3d 3d 30 3b  .  return *z==0;
17dd0 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 61  .}.../*.** Compa
17de0 72 65 20 74 68 65 20 73 74 72 69 6e 67 20 61 73  re the string as
17df0 20 61 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20   a command-line 
17e00 6f 70 74 69 6f 6e 20 77 69 74 68 20 65 69 74 68  option with eith
17e10 65 72 20 6f 6e 65 20 6f 72 20 74 77 6f 0a 2a 2a  er one or two.**
17e20 20 69 6e 69 74 69 61 6c 20 22 2d 22 20 63 68 61   initial "-" cha
17e30 72 61 63 74 65 72 73 2e 0a 2a 2f 0a 73 74 61 74  racters..*/.stat
17e40 69 63 20 69 6e 74 20 6f 70 74 69 6f 6e 4d 61 74  ic int optionMat
17e50 63 68 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  ch(const char *z
17e60 53 74 72 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  Str, const char 
17e70 2a 7a 4f 70 74 29 7b 0a 20 20 69 66 28 20 7a 53  *zOpt){.  if( zS
17e80 74 72 5b 30 5d 21 3d 27 2d 27 20 29 20 72 65 74  tr[0]!='-' ) ret
17e90 75 72 6e 20 30 3b 0a 20 20 7a 53 74 72 2b 2b 3b  urn 0;.  zStr++;
17ea0 0a 20 20 69 66 28 20 7a 53 74 72 5b 30 5d 3d 3d  .  if( zStr[0]==
17eb0 27 2d 27 20 29 20 7a 53 74 72 2b 2b 3b 0a 20 20  '-' ) zStr++;.  
17ec0 72 65 74 75 72 6e 20 73 74 72 63 6d 70 28 7a 53  return strcmp(zS
17ed0 74 72 2c 20 7a 4f 70 74 29 3d 3d 30 3b 0a 7d 0a  tr, zOpt)==0;.}.
17ee0 0a 2f 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 20  ./*.** Delete a 
17ef0 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 68 65  file..*/.int she
17f00 6c 6c 44 65 6c 65 74 65 46 69 6c 65 28 63 6f 6e  llDeleteFile(con
17f10 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61  st char *zFilena
17f20 6d 65 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 23  me){.  int rc;.#
17f30 69 66 64 65 66 20 5f 57 49 4e 33 32 0a 20 20 77  ifdef _WIN32.  w
17f40 63 68 61 72 5f 74 20 2a 7a 20 3d 20 73 71 6c 69  char_t *z = sqli
17f50 74 65 33 5f 77 69 6e 33 32 5f 75 74 66 38 5f 74  te3_win32_utf8_t
17f60 6f 5f 75 6e 69 63 6f 64 65 28 7a 46 69 6c 65 6e  o_unicode(zFilen
17f70 61 6d 65 29 3b 0a 20 20 72 63 20 3d 20 5f 77 75  ame);.  rc = _wu
17f80 6e 6c 69 6e 6b 28 7a 29 3b 0a 20 20 73 71 6c 69  nlink(z);.  sqli
17f90 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 23 65 6c  te3_free(z);.#el
17fa0 73 65 0a 20 20 72 63 20 3d 20 75 6e 6c 69 6e 6b  se.  rc = unlink
17fb0 28 7a 46 69 6c 65 6e 61 6d 65 29 3b 0a 23 65 6e  (zFilename);.#en
17fc0 64 69 66 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  dif.  return rc;
17fd0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 61 6e 20  .}../*.** If an 
17fe0 69 6e 70 75 74 20 6c 69 6e 65 20 62 65 67 69 6e  input line begin
17ff0 73 20 77 69 74 68 20 22 2e 22 20 74 68 65 6e 20  s with "." then 
18000 69 6e 76 6f 6b 65 20 74 68 69 73 20 72 6f 75 74  invoke this rout
18010 69 6e 65 20 74 6f 0a 2a 2a 20 70 72 6f 63 65 73  ine to.** proces
18020 73 20 74 68 61 74 20 6c 69 6e 65 2e 0a 2a 2a 0a  s that line..**.
18030 2a 2a 20 52 65 74 75 72 6e 20 31 20 6f 6e 20 65  ** Return 1 on e
18040 72 72 6f 72 2c 20 32 20 74 6f 20 65 78 69 74 2c  rror, 2 to exit,
18050 20 61 6e 64 20 30 20 6f 74 68 65 72 77 69 73 65   and 0 otherwise
18060 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
18070 64 6f 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 28  do_meta_command(
18080 63 68 61 72 20 2a 7a 4c 69 6e 65 2c 20 53 68 65  char *zLine, She
18090 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 69  llState *p){.  i
180a0 6e 74 20 68 20 3d 20 31 3b 0a 20 20 69 6e 74 20  nt h = 1;.  int 
180b0 6e 41 72 67 20 3d 20 30 3b 0a 20 20 69 6e 74 20  nArg = 0;.  int 
180c0 6e 2c 20 63 3b 0a 20 20 69 6e 74 20 72 63 20 3d  n, c;.  int rc =
180d0 20 30 3b 0a 20 20 63 68 61 72 20 2a 61 7a 41 72   0;.  char *azAr
180e0 67 5b 35 30 5d 3b 0a 0a 20 20 2f 2a 20 50 61 72  g[50];..  /* Par
180f0 73 65 20 74 68 65 20 69 6e 70 75 74 20 6c 69 6e  se the input lin
18100 65 20 69 6e 74 6f 20 74 6f 6b 65 6e 73 2e 0a 20  e into tokens.. 
18110 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20 7a 4c 69   */.  while( zLi
18120 6e 65 5b 68 5d 20 26 26 20 6e 41 72 67 3c 41 72  ne[h] && nArg<Ar
18130 72 61 79 53 69 7a 65 28 61 7a 41 72 67 29 20 29  raySize(azArg) )
18140 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 49 73 53  {.    while( IsS
18150 70 61 63 65 28 7a 4c 69 6e 65 5b 68 5d 29 20 29  pace(zLine[h]) )
18160 7b 20 68 2b 2b 3b 20 7d 0a 20 20 20 20 69 66 28  { h++; }.    if(
18170 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 30 20 29 20 62   zLine[h]==0 ) b
18180 72 65 61 6b 3b 0a 20 20 20 20 69 66 28 20 7a 4c  reak;.    if( zL
18190 69 6e 65 5b 68 5d 3d 3d 27 5c 27 27 20 7c 7c 20  ine[h]=='\'' || 
181a0 7a 4c 69 6e 65 5b 68 5d 3d 3d 27 22 27 20 29 7b  zLine[h]=='"' ){
181b0 0a 20 20 20 20 20 20 69 6e 74 20 64 65 6c 69 6d  .      int delim
181c0 20 3d 20 7a 4c 69 6e 65 5b 68 2b 2b 5d 3b 0a 20   = zLine[h++];. 
181d0 20 20 20 20 20 61 7a 41 72 67 5b 6e 41 72 67 2b       azArg[nArg+
181e0 2b 5d 20 3d 20 26 7a 4c 69 6e 65 5b 68 5d 3b 0a  +] = &zLine[h];.
181f0 20 20 20 20 20 20 77 68 69 6c 65 28 20 7a 4c 69        while( zLi
18200 6e 65 5b 68 5d 20 26 26 20 7a 4c 69 6e 65 5b 68  ne[h] && zLine[h
18210 5d 21 3d 64 65 6c 69 6d 20 29 7b 0a 20 20 20 20  ]!=delim ){.    
18220 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 5b 68 5d      if( zLine[h]
18230 3d 3d 27 5c 5c 27 20 26 26 20 64 65 6c 69 6d 3d  =='\\' && delim=
18240 3d 27 22 27 20 26 26 20 7a 4c 69 6e 65 5b 68 2b  ='"' && zLine[h+
18250 31 5d 21 3d 30 20 29 20 68 2b 2b 3b 0a 20 20 20  1]!=0 ) h++;.   
18260 20 20 20 20 20 68 2b 2b 3b 0a 20 20 20 20 20 20       h++;.      
18270 7d 0a 20 20 20 20 20 20 69 66 28 20 7a 4c 69 6e  }.      if( zLin
18280 65 5b 68 5d 3d 3d 64 65 6c 69 6d 20 29 7b 0a 20  e[h]==delim ){. 
18290 20 20 20 20 20 20 20 7a 4c 69 6e 65 5b 68 2b 2b         zLine[h++
182a0 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  ] = 0;.      }. 
182b0 20 20 20 20 20 69 66 28 20 64 65 6c 69 6d 3d 3d       if( delim==
182c0 27 22 27 20 29 20 72 65 73 6f 6c 76 65 5f 62 61  '"' ) resolve_ba
182d0 63 6b 73 6c 61 73 68 65 73 28 61 7a 41 72 67 5b  ckslashes(azArg[
182e0 6e 41 72 67 2d 31 5d 29 3b 0a 20 20 20 20 7d 65  nArg-1]);.    }e
182f0 6c 73 65 7b 0a 20 20 20 20 20 20 61 7a 41 72 67  lse{.      azArg
18300 5b 6e 41 72 67 2b 2b 5d 20 3d 20 26 7a 4c 69 6e  [nArg++] = &zLin
18310 65 5b 68 5d 3b 0a 20 20 20 20 20 20 77 68 69 6c  e[h];.      whil
18320 65 28 20 7a 4c 69 6e 65 5b 68 5d 20 26 26 20 21  e( zLine[h] && !
18330 49 73 53 70 61 63 65 28 7a 4c 69 6e 65 5b 68 5d  IsSpace(zLine[h]
18340 29 20 29 7b 20 68 2b 2b 3b 20 7d 0a 20 20 20 20  ) ){ h++; }.    
18350 20 20 69 66 28 20 7a 4c 69 6e 65 5b 68 5d 20 29    if( zLine[h] )
18360 20 7a 4c 69 6e 65 5b 68 2b 2b 5d 20 3d 20 30 3b   zLine[h++] = 0;
18370 0a 20 20 20 20 20 20 72 65 73 6f 6c 76 65 5f 62  .      resolve_b
18380 61 63 6b 73 6c 61 73 68 65 73 28 61 7a 41 72 67  ackslashes(azArg
18390 5b 6e 41 72 67 2d 31 5d 29 3b 0a 20 20 20 20 7d  [nArg-1]);.    }
183a0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 50 72 6f 63 65  .  }..  /* Proce
183b0 73 73 20 74 68 65 20 69 6e 70 75 74 20 6c 69 6e  ss the input lin
183c0 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 6e 41  e..  */.  if( nA
183d0 72 67 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  rg==0 ) return 0
183e0 3b 20 2f 2a 20 6e 6f 20 74 6f 6b 65 6e 73 2c 20  ; /* no tokens, 
183f0 6e 6f 20 65 72 72 6f 72 20 2a 2f 0a 20 20 6e 20  no error */.  n 
18400 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a 41 72 67  = strlen30(azArg
18410 5b 30 5d 29 3b 0a 20 20 63 20 3d 20 61 7a 41 72  [0]);.  c = azAr
18420 67 5b 30 5d 5b 30 5d 3b 0a 0a 23 69 66 6e 64 65  g[0][0];..#ifnde
18430 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
18440 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 69 66  THORIZATION.  if
18450 28 20 63 3d 3d 27 61 27 20 26 26 20 73 74 72 6e  ( c=='a' && strn
18460 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 61  cmp(azArg[0], "a
18470 75 74 68 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  uth", n)==0 ){. 
18480 20 20 20 69 66 28 20 6e 41 72 67 21 3d 32 20 29     if( nArg!=2 )
18490 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
184a0 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
184b0 65 3a 20 2e 61 75 74 68 20 4f 4e 7c 4f 46 46 5c  e: .auth ON|OFF\
184c0 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
184d0 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65  1;.      goto me
184e0 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
184f0 0a 20 20 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f  .    }.    open_
18500 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 69 66  db(p, 0);.    if
18510 28 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61  ( booleanValue(a
18520 7a 41 72 67 5b 31 5d 29 20 29 7b 0a 20 20 20 20  zArg[1]) ){.    
18530 20 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75    sqlite3_set_au
18540 74 68 6f 72 69 7a 65 72 28 70 2d 3e 64 62 2c 20  thorizer(p->db, 
18550 73 68 65 6c 6c 41 75 74 68 2c 20 70 29 3b 0a 20  shellAuth, p);. 
18560 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
18570 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74 68  sqlite3_set_auth
18580 6f 72 69 7a 65 72 28 70 2d 3e 64 62 2c 20 30 2c  orizer(p->db, 0,
18590 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c   0);.    }.  }el
185a0 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  se.#endif..  if(
185b0 20 28 63 3d 3d 27 62 27 20 26 26 20 6e 3e 3d 33   (c=='b' && n>=3
185c0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
185d0 67 5b 30 5d 2c 20 22 62 61 63 6b 75 70 22 2c 20  g[0], "backup", 
185e0 6e 29 3d 3d 30 29 0a 20 20 20 7c 7c 20 28 63 3d  n)==0).   || (c=
185f0 3d 27 73 27 20 26 26 20 6e 3e 3d 33 20 26 26 20  ='s' && n>=3 && 
18600 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
18610 2c 20 22 73 61 76 65 22 2c 20 6e 29 3d 3d 30 29  , "save", n)==0)
18620 0a 20 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20  .  ){.    const 
18630 63 68 61 72 20 2a 7a 44 65 73 74 46 69 6c 65 20  char *zDestFile 
18640 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  = 0;.    const c
18650 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b 0a 20 20  har *zDb = 0;.  
18660 20 20 73 71 6c 69 74 65 33 20 2a 70 44 65 73 74    sqlite3 *pDest
18670 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 61  ;.    sqlite3_ba
18680 63 6b 75 70 20 2a 70 42 61 63 6b 75 70 3b 0a 20  ckup *pBackup;. 
18690 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 66 6f     int j;.    fo
186a0 72 28 6a 3d 31 3b 20 6a 3c 6e 41 72 67 3b 20 6a  r(j=1; j<nArg; j
186b0 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  ++){.      const
186c0 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67   char *z = azArg
186d0 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  [j];.      if( z
186e0 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  [0]=='-' ){.    
186f0 20 20 20 20 77 68 69 6c 65 28 20 7a 5b 30 5d 3d      while( z[0]=
18700 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20 20 20  ='-' ) z++;.    
18710 20 20 20 20 2f 2a 20 4e 6f 20 6f 70 74 69 6f 6e      /* No option
18720 73 20 74 6f 20 70 72 6f 63 65 73 73 20 61 74 20  s to process at 
18730 74 68 69 73 20 74 69 6d 65 20 2a 2f 0a 20 20 20  this time */.   
18740 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
18750 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
18760 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6f 70  err, "unknown op
18770 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 61 7a 41  tion: %s\n", azA
18780 72 67 5b 6a 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[j]);.        
18790 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20    return 1;.    
187a0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
187b0 65 20 69 66 28 20 7a 44 65 73 74 46 69 6c 65 3d  e if( zDestFile=
187c0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 44  =0 ){.        zD
187d0 65 73 74 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b  estFile = azArg[
187e0 6a 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  j];.      }else 
187f0 69 66 28 20 7a 44 62 3d 3d 30 20 29 7b 0a 20 20  if( zDb==0 ){.  
18800 20 20 20 20 20 20 7a 44 62 20 3d 20 7a 44 65 73        zDb = zDes
18810 74 46 69 6c 65 3b 0a 20 20 20 20 20 20 20 20 7a  tFile;.        z
18820 44 65 73 74 46 69 6c 65 20 3d 20 61 7a 41 72 67  DestFile = azArg
18830 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  [j];.      }else
18840 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
18850 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 74 6f  intf(stderr, "to
18860 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e 74 73  o many arguments
18870 20 74 6f 20 2e 62 61 63 6b 75 70 5c 6e 22 29 3b   to .backup\n");
18880 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
18890 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  1;.      }.    }
188a0 0a 20 20 20 20 69 66 28 20 7a 44 65 73 74 46 69  .    if( zDestFi
188b0 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  le==0 ){.      r
188c0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
188d0 2c 20 22 6d 69 73 73 69 6e 67 20 46 49 4c 45 4e  , "missing FILEN
188e0 41 4d 45 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20  AME argument on 
188f0 2e 62 61 63 6b 75 70 5c 6e 22 29 3b 0a 20 20 20  .backup\n");.   
18900 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
18910 20 7d 0a 20 20 20 20 69 66 28 20 7a 44 62 3d 3d   }.    if( zDb==
18920 30 20 29 20 7a 44 62 20 3d 20 22 6d 61 69 6e 22  0 ) zDb = "main"
18930 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
18940 65 33 5f 6f 70 65 6e 28 7a 44 65 73 74 46 69 6c  e3_open(zDestFil
18950 65 2c 20 26 70 44 65 73 74 29 3b 0a 20 20 20 20  e, &pDest);.    
18960 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
18970 4b 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  K ){.      utf8_
18980 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
18990 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70  Error: cannot op
189a0 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 44  en \"%s\"\n", zD
189b0 65 73 74 46 69 6c 65 29 3b 0a 20 20 20 20 20 20  estFile);.      
189c0 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 44  sqlite3_close(pD
189d0 65 73 74 29 3b 0a 20 20 20 20 20 20 72 65 74 75  est);.      retu
189e0 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rn 1;.    }.    
189f0 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20  open_db(p, 0);. 
18a00 20 20 20 70 42 61 63 6b 75 70 20 3d 20 73 71 6c     pBackup = sql
18a10 69 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e 69 74  ite3_backup_init
18a20 28 70 44 65 73 74 2c 20 22 6d 61 69 6e 22 2c 20  (pDest, "main", 
18a30 70 2d 3e 64 62 2c 20 7a 44 62 29 3b 0a 20 20 20  p->db, zDb);.   
18a40 20 69 66 28 20 70 42 61 63 6b 75 70 3d 3d 30 20   if( pBackup==0 
18a50 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
18a60 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
18a70 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69  ror: %s\n", sqli
18a80 74 65 33 5f 65 72 72 6d 73 67 28 70 44 65 73 74  te3_errmsg(pDest
18a90 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ));.      sqlite
18aa0 33 5f 63 6c 6f 73 65 28 70 44 65 73 74 29 3b 0a  3_close(pDest);.
18ab0 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
18ac0 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c 65 28      }.    while(
18ad0 20 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 5f    (rc = sqlite3_
18ae0 62 61 63 6b 75 70 5f 73 74 65 70 28 70 42 61 63  backup_step(pBac
18af0 6b 75 70 2c 31 30 30 29 29 3d 3d 53 51 4c 49 54  kup,100))==SQLIT
18b00 45 5f 4f 4b 20 29 7b 7d 0a 20 20 20 20 73 71 6c  E_OK ){}.    sql
18b10 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69  ite3_backup_fini
18b20 73 68 28 70 42 61 63 6b 75 70 29 3b 0a 20 20 20  sh(pBackup);.   
18b30 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
18b40 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 72 63  DONE ){.      rc
18b50 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
18b60 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
18b70 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
18b80 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65  r: %s\n", sqlite
18b90 33 5f 65 72 72 6d 73 67 28 70 44 65 73 74 29 29  3_errmsg(pDest))
18ba0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
18bb0 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
18bc0 33 5f 63 6c 6f 73 65 28 70 44 65 73 74 29 3b 0a  3_close(pDest);.
18bd0 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
18be0 3d 3d 27 62 27 20 26 26 20 6e 3e 3d 33 20 26 26  =='b' && n>=3 &&
18bf0 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
18c00 5d 2c 20 22 62 61 69 6c 22 2c 20 6e 29 3d 3d 30  ], "bail", n)==0
18c10 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   ){.    if( nArg
18c20 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 62 61 69  ==2 ){.      bai
18c30 6c 5f 6f 6e 5f 65 72 72 6f 72 20 3d 20 62 6f 6f  l_on_error = boo
18c40 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b  leanValue(azArg[
18c50 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  1]);.    }else{.
18c60 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
18c70 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
18c80 20 2e 62 61 69 6c 20 6f 6e 7c 6f 66 66 5c 6e 22   .bail on|off\n"
18c90 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
18ca0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
18cb0 20 20 69 66 28 20 63 3d 3d 27 62 27 20 26 26 20    if( c=='b' && 
18cc0 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28  n>=3 && strncmp(
18cd0 61 7a 41 72 67 5b 30 5d 2c 20 22 62 69 6e 61 72  azArg[0], "binar
18ce0 79 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  y", n)==0 ){.   
18cf0 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a   if( nArg==2 ){.
18d00 20 20 20 20 20 20 69 66 28 20 62 6f 6f 6c 65 61        if( boolea
18d10 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29  nValue(azArg[1])
18d20 20 29 7b 0a 20 20 20 20 20 20 20 20 73 65 74 42   ){.        setB
18d30 69 6e 61 72 79 4d 6f 64 65 28 70 2d 3e 6f 75 74  inaryMode(p->out
18d40 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  , 1);.      }els
18d50 65 7b 0a 20 20 20 20 20 20 20 20 73 65 74 54 65  e{.        setTe
18d60 78 74 4d 6f 64 65 28 70 2d 3e 6f 75 74 2c 20 31  xtMode(p->out, 1
18d70 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
18d80 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
18d90 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
18da0 55 73 61 67 65 3a 20 2e 62 69 6e 61 72 79 20 6f  Usage: .binary o
18db0 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20  n|off\n");.     
18dc0 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20   rc = 1;.    }. 
18dd0 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 20 54 68 65   }else..  /* The
18de0 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 22 2e   undocumented ".
18df0 62 72 65 61 6b 70 6f 69 6e 74 22 20 63 6f 6d 6d  breakpoint" comm
18e00 61 6e 64 20 63 61 75 73 65 73 20 61 20 63 61 6c  and causes a cal
18e10 6c 20 74 6f 20 74 68 65 20 6e 6f 2d 6f 70 0a 20  l to the no-op. 
18e20 20 2a 2a 20 72 6f 75 74 69 6e 65 20 6e 61 6d 65   ** routine name
18e30 64 20 74 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e  d test_breakpoin
18e40 74 28 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  t()..  */.  if( 
18e50 63 3d 3d 27 62 27 20 26 26 20 6e 3e 3d 33 20 26  c=='b' && n>=3 &
18e60 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
18e70 30 5d 2c 20 22 62 72 65 61 6b 70 6f 69 6e 74 22  0], "breakpoint"
18e80 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 74  , n)==0 ){.    t
18e90 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 28 29  est_breakpoint()
18ea0 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  ;.  }else..  if(
18eb0 20 63 3d 3d 27 63 27 20 26 26 20 6e 3e 3d 33 20   c=='c' && n>=3 
18ec0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
18ed0 5b 30 5d 2c 20 22 63 68 61 6e 67 65 73 22 2c 20  [0], "changes", 
18ee0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  n)==0 ){.    if(
18ef0 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20   nArg==2 ){.    
18f00 20 20 70 2d 3e 63 6f 75 6e 74 43 68 61 6e 67 65    p->countChange
18f10 73 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65  s = booleanValue
18f20 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20  (azArg[1]);.    
18f30 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77  }else{.      raw
18f40 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
18f50 22 55 73 61 67 65 3a 20 2e 63 68 61 6e 67 65 73  "Usage: .changes
18f60 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20   on|off\n");.   
18f70 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d     rc = 1;.    }
18f80 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 20 43  .  }else..  /* C
18f90 61 6e 63 65 6c 20 6f 75 74 70 75 74 20 72 65 64  ancel output red
18fa0 69 72 65 63 74 69 6f 6e 2c 20 69 66 20 69 74 20  irection, if it 
18fb0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 73 65 74  is currently set
18fc0 20 28 62 79 20 2e 74 65 73 74 63 61 73 65 29 0a   (by .testcase).
18fd0 20 20 2a 2a 20 54 68 65 6e 20 72 65 61 64 20 74    ** Then read t
18fe0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
18ff0 65 20 74 65 73 74 63 61 73 65 2d 6f 75 74 2e 74  e testcase-out.t
19000 78 74 20 66 69 6c 65 20 61 6e 64 20 63 6f 6d 70  xt file and comp
19010 61 72 65 20 61 67 61 69 6e 73 74 0a 20 20 2a 2a  are against.  **
19020 20 61 7a 41 72 67 5b 31 5d 2e 20 20 49 66 20 74   azArg[1].  If t
19030 68 65 72 65 20 61 72 65 20 64 69 66 66 65 72 65  here are differe
19040 6e 63 65 73 2c 20 72 65 70 6f 72 74 20 61 6e 20  nces, report an 
19050 65 72 72 6f 72 20 61 6e 64 20 65 78 69 74 2e 0a  error and exit..
19060 20 20 2a 2f 0a 20 20 69 66 28 20 63 3d 3d 27 63    */.  if( c=='c
19070 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72  ' && n>=3 && str
19080 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
19090 63 68 65 63 6b 22 2c 20 6e 29 3d 3d 30 20 29 7b  check", n)==0 ){
190a0 0a 20 20 20 20 63 68 61 72 20 2a 7a 52 65 73 20  .    char *zRes 
190b0 3d 20 30 3b 0a 20 20 20 20 6f 75 74 70 75 74 5f  = 0;.    output_
190c0 72 65 73 65 74 28 70 29 3b 0a 20 20 20 20 69 66  reset(p);.    if
190d0 28 20 6e 41 72 67 21 3d 32 20 29 7b 0a 20 20 20  ( nArg!=2 ){.   
190e0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
190f0 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 63  derr, "Usage: .c
19100 68 65 63 6b 20 47 4c 4f 42 2d 50 41 54 54 45 52  heck GLOB-PATTER
19110 4e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20  N\n");.      rc 
19120 3d 20 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 2;.    }else i
19130 66 28 20 28 7a 52 65 73 20 3d 20 72 65 61 64 46  f( (zRes = readF
19140 69 6c 65 28 22 74 65 73 74 63 61 73 65 2d 6f 75  ile("testcase-ou
19150 74 2e 74 78 74 22 29 29 3d 3d 30 20 29 7b 0a 20  t.txt"))==0 ){. 
19160 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
19170 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
19180 63 61 6e 6e 6f 74 20 72 65 61 64 20 27 74 65 73  cannot read 'tes
19190 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 27 5c 6e  tcase-out.txt'\n
191a0 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 32  ");.      rc = 2
191b0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
191c0 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28 61 7a  testcase_glob(az
191d0 41 72 67 5b 31 5d 2c 7a 52 65 73 29 3d 3d 30 20  Arg[1],zRes)==0 
191e0 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
191f0 69 6e 74 66 28 73 74 64 65 72 72 2c 0a 20 20 20  intf(stderr,.   
19200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 74                "t
19210 65 73 74 63 61 73 65 2d 25 73 20 46 41 49 4c 45  estcase-%s FAILE
19220 44 5c 6e 20 45 78 70 65 63 74 65 64 3a 20 5b 25  D\n Expected: [%
19230 73 5d 5c 6e 20 20 20 20 20 20 47 6f 74 3a 20 5b  s]\n      Got: [
19240 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  %s]\n",.        
19250 20 20 20 20 20 20 20 20 20 70 2d 3e 7a 54 65 73           p->zTes
19260 74 63 61 73 65 2c 20 61 7a 41 72 67 5b 31 5d 2c  tcase, azArg[1],
19270 20 7a 52 65 73 29 3b 0a 20 20 20 20 20 20 72 63   zRes);.      rc
19280 20 3d 20 32 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 2;.    }else{
19290 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
192a0 74 66 28 73 74 64 6f 75 74 2c 20 22 74 65 73 74  tf(stdout, "test
192b0 63 61 73 65 2d 25 73 20 6f 6b 5c 6e 22 2c 20 70  case-%s ok\n", p
192c0 2d 3e 7a 54 65 73 74 63 61 73 65 29 3b 0a 20 20  ->zTestcase);.  
192d0 20 20 20 20 70 2d 3e 6e 43 68 65 63 6b 2b 2b 3b      p->nCheck++;
192e0 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
192f0 65 33 5f 66 72 65 65 28 7a 52 65 73 29 3b 0a 20  e3_free(zRes);. 
19300 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
19310 3d 27 63 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='c' && strncmp(
19320 61 7a 41 72 67 5b 30 5d 2c 20 22 63 6c 6f 6e 65  azArg[0], "clone
19330 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
19340 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20  if( nArg==2 ){. 
19350 20 20 20 20 20 74 72 79 54 6f 43 6c 6f 6e 65 28       tryToClone(
19360 70 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20  p, azArg[1]);.  
19370 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
19380 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
19390 2c 20 22 55 73 61 67 65 3a 20 2e 63 6c 6f 6e 65  , "Usage: .clone
193a0 20 46 49 4c 45 4e 41 4d 45 5c 6e 22 29 3b 0a 20   FILENAME\n");. 
193b0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
193c0 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66   }.  }else..  if
193d0 28 20 63 3d 3d 27 64 27 20 26 26 20 6e 3e 31 20  ( c=='d' && n>1 
193e0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
193f0 5b 30 5d 2c 20 22 64 61 74 61 62 61 73 65 73 22  [0], "databases"
19400 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 53  , n)==0 ){.    S
19410 68 65 6c 6c 53 74 61 74 65 20 64 61 74 61 3b 0a  hellState data;.
19420 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73      char *zErrMs
19430 67 20 3d 20 30 3b 0a 20 20 20 20 6f 70 65 6e 5f  g = 0;.    open_
19440 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 6d 65  db(p, 0);.    me
19450 6d 63 70 79 28 26 64 61 74 61 2c 20 70 2c 20 73  mcpy(&data, p, s
19460 69 7a 65 6f 66 28 64 61 74 61 29 29 3b 0a 20 20  izeof(data));.  
19470 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61 64 65    data.showHeade
19480 72 20 3d 20 31 3b 0a 20 20 20 20 64 61 74 61 2e  r = 1;.    data.
19490 63 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64  cMode = data.mod
194a0 65 20 3d 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3b  e = MODE_Column;
194b0 0a 20 20 20 20 64 61 74 61 2e 63 6f 6c 57 69 64  .    data.colWid
194c0 74 68 5b 30 5d 20 3d 20 33 3b 0a 20 20 20 20 64  th[0] = 3;.    d
194d0 61 74 61 2e 63 6f 6c 57 69 64 74 68 5b 31 5d 20  ata.colWidth[1] 
194e0 3d 20 31 35 3b 0a 20 20 20 20 64 61 74 61 2e 63  = 15;.    data.c
194f0 6f 6c 57 69 64 74 68 5b 32 5d 20 3d 20 35 38 3b  olWidth[2] = 58;
19500 0a 20 20 20 20 64 61 74 61 2e 63 6e 74 20 3d 20  .    data.cnt = 
19510 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65  0;.    sqlite3_e
19520 78 65 63 28 70 2d 3e 64 62 2c 20 22 50 52 41 47  xec(p->db, "PRAG
19530 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74  MA database_list
19540 3b 20 22 2c 20 63 61 6c 6c 62 61 63 6b 2c 20 26  ; ", callback, &
19550 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b  data, &zErrMsg);
19560 0a 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67  .    if( zErrMsg
19570 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
19580 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72  rintf(stderr,"Er
19590 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72  ror: %s\n", zErr
195a0 4d 73 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  Msg);.      sqli
195b0 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67  te3_free(zErrMsg
195c0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
195d0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
195e0 20 20 69 66 28 20 63 3d 3d 27 64 27 20 26 26 20    if( c=='d' && 
195f0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
19600 2c 20 22 64 62 69 6e 66 6f 22 2c 20 6e 29 3d 3d  , "dbinfo", n)==
19610 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 68  0 ){.    rc = sh
19620 65 6c 6c 5f 64 62 69 6e 66 6f 5f 63 6f 6d 6d 61  ell_dbinfo_comma
19630 6e 64 28 70 2c 20 6e 41 72 67 2c 20 61 7a 41 72  nd(p, nArg, azAr
19640 67 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69  g);.  }else..  i
19650 66 28 20 63 3d 3d 27 64 27 20 26 26 20 73 74 72  f( c=='d' && str
19660 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
19670 64 75 6d 70 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  dump", n)==0 ){.
19680 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
19690 29 3b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 70  );.    /* When p
196a0 6c 61 79 69 6e 67 20 62 61 63 6b 20 61 20 22 64  laying back a "d
196b0 75 6d 70 22 2c 20 74 68 65 20 63 6f 6e 74 65 6e  ump", the conten
196c0 74 20 6d 69 67 68 74 20 61 70 70 65 61 72 20 69  t might appear i
196d0 6e 20 61 6e 20 6f 72 64 65 72 0a 20 20 20 20 2a  n an order.    *
196e0 2a 20 77 68 69 63 68 20 63 61 75 73 65 73 20 69  * which causes i
196f0 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
19700 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
19710 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2e   to be violated.
19720 0a 20 20 20 20 2a 2a 20 53 6f 20 64 69 73 61 62  .    ** So disab
19730 6c 65 20 66 6f 72 65 69 67 6e 2d 6b 65 79 20 63  le foreign-key c
19740 6f 6e 73 74 72 61 69 6e 74 20 65 6e 66 6f 72 63  onstraint enforc
19750 65 6d 65 6e 74 20 74 6f 20 70 72 65 76 65 6e 74  ement to prevent
19760 20 70 72 6f 62 6c 65 6d 73 2e 20 2a 2f 0a 20 20   problems. */.  
19770 20 20 69 66 28 20 6e 41 72 67 21 3d 31 20 26 26    if( nArg!=1 &&
19780 20 6e 41 72 67 21 3d 32 20 29 7b 0a 20 20 20 20   nArg!=2 ){.    
19790 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
197a0 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 64 75  err, "Usage: .du
197b0 6d 70 20 3f 4c 49 4b 45 2d 50 41 54 54 45 52 4e  mp ?LIKE-PATTERN
197c0 3f 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20  ?\n");.      rc 
197d0 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  = 1;.      goto 
197e0 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
197f0 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 61 77  t;.    }.    raw
19800 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
19810 22 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f  "PRAGMA foreign_
19820 6b 65 79 73 3d 4f 46 46 3b 5c 6e 22 29 3b 0a 20  keys=OFF;\n");. 
19830 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
19840 3e 6f 75 74 2c 20 22 42 45 47 49 4e 20 54 52 41  >out, "BEGIN TRA
19850 4e 53 41 43 54 49 4f 4e 3b 5c 6e 22 29 3b 0a 20  NSACTION;\n");. 
19860 20 20 20 70 2d 3e 77 72 69 74 61 62 6c 65 53 63     p->writableSc
19870 68 65 6d 61 20 3d 20 30 3b 0a 20 20 20 20 73 71  hema = 0;.    sq
19880 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
19890 2c 20 22 53 41 56 45 50 4f 49 4e 54 20 64 75 6d  , "SAVEPOINT dum
198a0 70 3b 20 50 52 41 47 4d 41 20 77 72 69 74 61 62  p; PRAGMA writab
198b0 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 22 2c 20 30  le_schema=ON", 0
198c0 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 70 2d 3e  , 0, 0);.    p->
198d0 6e 45 72 72 20 3d 20 30 3b 0a 20 20 20 20 69 66  nErr = 0;.    if
198e0 28 20 6e 41 72 67 3d 3d 31 20 29 7b 0a 20 20 20  ( nArg==1 ){.   
198f0 20 20 20 72 75 6e 5f 73 63 68 65 6d 61 5f 64 75     run_schema_du
19900 6d 70 5f 71 75 65 72 79 28 70 2c 0a 20 20 20 20  mp_query(p,.    
19910 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65      "SELECT name
19920 2c 20 74 79 70 65 2c 20 73 71 6c 20 46 52 4f 4d  , type, sql FROM
19930 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22   sqlite_master "
19940 0a 20 20 20 20 20 20 20 20 22 57 48 45 52 45 20  .        "WHERE 
19950 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44  sql NOT NULL AND
19960 20 74 79 70 65 3d 3d 27 74 61 62 6c 65 27 20 41   type=='table' A
19970 4e 44 20 6e 61 6d 65 21 3d 27 73 71 6c 69 74 65  ND name!='sqlite
19980 5f 73 65 71 75 65 6e 63 65 27 22 0a 20 20 20 20  _sequence'".    
19990 20 20 29 3b 0a 20 20 20 20 20 20 72 75 6e 5f 73    );.      run_s
199a0 63 68 65 6d 61 5f 64 75 6d 70 5f 71 75 65 72 79  chema_dump_query
199b0 28 70 2c 0a 20 20 20 20 20 20 20 20 22 53 45 4c  (p,.        "SEL
199c0 45 43 54 20 6e 61 6d 65 2c 20 74 79 70 65 2c 20  ECT name, type, 
199d0 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  sql FROM sqlite_
199e0 6d 61 73 74 65 72 20 22 0a 20 20 20 20 20 20 20  master ".       
199f0 20 22 57 48 45 52 45 20 6e 61 6d 65 3d 3d 27 73   "WHERE name=='s
19a00 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 27 22  qlite_sequence'"
19a10 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20  .      );.      
19a20 72 75 6e 5f 74 61 62 6c 65 5f 64 75 6d 70 5f 71  run_table_dump_q
19a30 75 65 72 79 28 70 2c 0a 20 20 20 20 20 20 20 20  uery(p,.        
19a40 22 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d  "SELECT sql FROM
19a50 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22   sqlite_master "
19a60 0a 20 20 20 20 20 20 20 20 22 57 48 45 52 45 20  .        "WHERE 
19a70 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c 20 41 4e 44  sql NOT NULL AND
19a80 20 74 79 70 65 20 49 4e 20 28 27 69 6e 64 65 78   type IN ('index
19a90 27 2c 27 74 72 69 67 67 65 72 27 2c 27 76 69 65  ','trigger','vie
19aa0 77 27 29 22 2c 20 30 0a 20 20 20 20 20 20 29 3b  w')", 0.      );
19ab0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
19ac0 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 66    int i;.      f
19ad0 6f 72 28 69 3d 31 3b 20 69 3c 6e 41 72 67 3b 20  or(i=1; i<nArg; 
19ae0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 7a 53  i++){.        zS
19af0 68 65 6c 6c 53 74 61 74 69 63 20 3d 20 61 7a 41  hellStatic = azA
19b00 72 67 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 72  rg[i];.        r
19b10 75 6e 5f 73 63 68 65 6d 61 5f 64 75 6d 70 5f 71  un_schema_dump_q
19b20 75 65 72 79 28 70 2c 0a 20 20 20 20 20 20 20 20  uery(p,.        
19b30 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20    "SELECT name, 
19b40 74 79 70 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73  type, sql FROM s
19b50 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22 0a 20  qlite_master ". 
19b60 20 20 20 20 20 20 20 20 20 22 57 48 45 52 45 20           "WHERE 
19b70 74 62 6c 5f 6e 61 6d 65 20 4c 49 4b 45 20 73 68  tbl_name LIKE sh
19b80 65 6c 6c 73 74 61 74 69 63 28 29 20 41 4e 44 20  ellstatic() AND 
19b90 74 79 70 65 3d 3d 27 74 61 62 6c 65 27 22 0a 20  type=='table'". 
19ba0 20 20 20 20 20 20 20 20 20 22 20 20 41 4e 44 20           "  AND 
19bb0 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c 22 29 3b 0a  sql NOT NULL");.
19bc0 20 20 20 20 20 20 20 20 72 75 6e 5f 74 61 62 6c          run_tabl
19bd0 65 5f 64 75 6d 70 5f 71 75 65 72 79 28 70 2c 0a  e_dump_query(p,.
19be0 20 20 20 20 20 20 20 20 20 20 22 53 45 4c 45 43            "SELEC
19bf0 54 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74  T sql FROM sqlit
19c00 65 5f 6d 61 73 74 65 72 20 22 0a 20 20 20 20 20  e_master ".     
19c10 20 20 20 20 20 22 57 48 45 52 45 20 73 71 6c 20       "WHERE sql 
19c20 4e 4f 54 20 4e 55 4c 4c 22 0a 20 20 20 20 20 20  NOT NULL".      
19c30 20 20 20 20 22 20 20 41 4e 44 20 74 79 70 65 20      "  AND type 
19c40 49 4e 20 28 27 69 6e 64 65 78 27 2c 27 74 72 69  IN ('index','tri
19c50 67 67 65 72 27 2c 27 76 69 65 77 27 29 22 0a 20  gger','view')". 
19c60 20 20 20 20 20 20 20 20 20 22 20 20 41 4e 44 20           "  AND 
19c70 74 62 6c 5f 6e 61 6d 65 20 4c 49 4b 45 20 73 68  tbl_name LIKE sh
19c80 65 6c 6c 73 74 61 74 69 63 28 29 22 2c 20 30 0a  ellstatic()", 0.
19c90 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20          );.     
19ca0 20 20 20 7a 53 68 65 6c 6c 53 74 61 74 69 63 20     zShellStatic 
19cb0 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
19cc0 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 77 72   }.    if( p->wr
19cd0 69 74 61 62 6c 65 53 63 68 65 6d 61 20 29 7b 0a  itableSchema ){.
19ce0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
19cf0 28 70 2d 3e 6f 75 74 2c 20 22 50 52 41 47 4d 41  (p->out, "PRAGMA
19d00 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61   writable_schema
19d10 3d 4f 46 46 3b 5c 6e 22 29 3b 0a 20 20 20 20 20  =OFF;\n");.     
19d20 20 70 2d 3e 77 72 69 74 61 62 6c 65 53 63 68 65   p->writableSche
19d30 6d 61 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  ma = 0;.    }.  
19d40 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70    sqlite3_exec(p
19d50 2d 3e 64 62 2c 20 22 50 52 41 47 4d 41 20 77 72  ->db, "PRAGMA wr
19d60 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 46  itable_schema=OF
19d70 46 3b 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20  F;", 0, 0, 0);. 
19d80 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28     sqlite3_exec(
19d90 70 2d 3e 64 62 2c 20 22 52 45 4c 45 41 53 45 20  p->db, "RELEASE 
19da0 64 75 6d 70 3b 22 2c 20 30 2c 20 30 2c 20 30 29  dump;", 0, 0, 0)
19db0 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66  ;.    raw_printf
19dc0 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e 6e 45 72 72  (p->out, p->nErr
19dd0 20 3f 20 22 52 4f 4c 4c 42 41 43 4b 3b 20 2d 2d   ? "ROLLBACK; --
19de0 20 64 75 65 20 74 6f 20 65 72 72 6f 72 73 5c 6e   due to errors\n
19df0 22 20 3a 20 22 43 4f 4d 4d 49 54 3b 5c 6e 22 29  " : "COMMIT;\n")
19e00 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  ;.  }else..  if(
19e10 20 63 3d 3d 27 65 27 20 26 26 20 73 74 72 6e 63   c=='e' && strnc
19e20 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 65 63  mp(azArg[0], "ec
19e30 68 6f 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  ho", n)==0 ){.  
19e40 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b    if( nArg==2 ){
19e50 0a 20 20 20 20 20 20 70 2d 3e 65 63 68 6f 4f 6e  .      p->echoOn
19e60 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28   = booleanValue(
19e70 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d  azArg[1]);.    }
19e80 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
19e90 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
19ea0 55 73 61 67 65 3a 20 2e 65 63 68 6f 20 6f 6e 7c  Usage: .echo on|
19eb0 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  off\n");.      r
19ec0 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  c = 1;.    }.  }
19ed0 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
19ee0 65 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  e' && strncmp(az
19ef0 41 72 67 5b 30 5d 2c 20 22 65 71 70 22 2c 20 6e  Arg[0], "eqp", n
19f00 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
19f10 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20  nArg==2 ){.     
19f20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 41 72   if( strcmp(azAr
19f30 67 5b 31 5d 2c 22 66 75 6c 6c 22 29 3d 3d 30 20  g[1],"full")==0 
19f40 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 61 75  ){.        p->au
19f50 74 6f 45 51 50 20 3d 20 32 3b 0a 20 20 20 20 20  toEQP = 2;.     
19f60 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
19f70 70 2d 3e 61 75 74 6f 45 51 50 20 3d 20 62 6f 6f  p->autoEQP = boo
19f80 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b  leanValue(azArg[
19f90 31 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  1]);.      }.   
19fa0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61   }else{.      ra
19fb0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
19fc0 20 22 55 73 61 67 65 3a 20 2e 65 71 70 20 6f 6e   "Usage: .eqp on
19fd0 7c 6f 66 66 7c 66 75 6c 6c 5c 6e 22 29 3b 0a 20  |off|full\n");. 
19fe0 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
19ff0 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66   }.  }else..  if
1a000 28 20 63 3d 3d 27 65 27 20 26 26 20 73 74 72 6e  ( c=='e' && strn
1a010 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 65  cmp(azArg[0], "e
1a020 78 69 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  xit", n)==0 ){. 
1a030 20 20 20 69 66 28 20 6e 41 72 67 3e 31 20 26 26     if( nArg>1 &&
1a040 20 28 72 63 20 3d 20 28 69 6e 74 29 69 6e 74 65   (rc = (int)inte
1a050 67 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b 31  gerValue(azArg[1
1a060 5d 29 29 21 3d 30 20 29 20 65 78 69 74 28 72 63  ]))!=0 ) exit(rc
1a070 29 3b 0a 20 20 20 20 72 63 20 3d 20 32 3b 0a 20  );.    rc = 2;. 
1a080 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
1a090 3d 27 65 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='e' && strncmp(
1a0a0 61 7a 41 72 67 5b 30 5d 2c 20 22 65 78 70 6c 61  azArg[0], "expla
1a0b0 69 6e 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  in", n)==0 ){.  
1a0c0 20 20 69 6e 74 20 76 61 6c 20 3d 20 31 3b 0a 20    int val = 1;. 
1a0d0 20 20 20 69 66 28 20 6e 41 72 67 3e 3d 32 20 29     if( nArg>=2 )
1a0e0 7b 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 63  {.      if( strc
1a0f0 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 61 75 74  mp(azArg[1],"aut
1a100 6f 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  o")==0 ){.      
1a110 20 20 76 61 6c 20 3d 20 39 39 3b 0a 20 20 20 20    val = 99;.    
1a120 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1a130 20 76 61 6c 20 3d 20 20 62 6f 6f 6c 65 61 6e 56   val =  booleanV
1a140 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a  alue(azArg[1]);.
1a150 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1a160 20 20 69 66 28 20 76 61 6c 3d 3d 31 20 26 26 20    if( val==1 && 
1a170 70 2d 3e 6d 6f 64 65 21 3d 4d 4f 44 45 5f 45 78  p->mode!=MODE_Ex
1a180 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 70  plain ){.      p
1a190 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 20 3d 20 70  ->normalMode = p
1a1a0 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20 20 20 70 2d  ->mode;.      p-
1a1b0 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 45 78 70  >mode = MODE_Exp
1a1c0 6c 61 69 6e 3b 0a 20 20 20 20 20 20 70 2d 3e 61  lain;.      p->a
1a1d0 75 74 6f 45 78 70 6c 61 69 6e 20 3d 20 30 3b 0a  utoExplain = 0;.
1a1e0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 76 61      }else if( va
1a1f0 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  l==0 ){.      if
1a200 28 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f  ( p->mode==MODE_
1a210 45 78 70 6c 61 69 6e 20 29 20 70 2d 3e 6d 6f 64  Explain ) p->mod
1a220 65 20 3d 20 70 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64  e = p->normalMod
1a230 65 3b 0a 20 20 20 20 20 20 70 2d 3e 61 75 74 6f  e;.      p->auto
1a240 45 78 70 6c 61 69 6e 20 3d 20 30 3b 0a 20 20 20  Explain = 0;.   
1a250 20 7d 65 6c 73 65 20 69 66 28 20 76 61 6c 3d 3d   }else if( val==
1a260 39 39 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  99 ){.      if( 
1a270 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78  p->mode==MODE_Ex
1a280 70 6c 61 69 6e 20 29 20 70 2d 3e 6d 6f 64 65 20  plain ) p->mode 
1a290 3d 20 70 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 3b  = p->normalMode;
1a2a0 0a 20 20 20 20 20 20 70 2d 3e 61 75 74 6f 45 78  .      p->autoEx
1a2b0 70 6c 61 69 6e 20 3d 20 31 3b 0a 20 20 20 20 7d  plain = 1;.    }
1a2c0 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
1a2d0 63 3d 3d 27 66 27 20 26 26 20 73 74 72 6e 63 6d  c=='f' && strncm
1a2e0 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 66 75 6c  p(azArg[0], "ful
1a2f0 6c 73 63 68 65 6d 61 22 2c 20 6e 29 3d 3d 30 20  lschema", n)==0 
1a300 29 7b 0a 20 20 20 20 53 68 65 6c 6c 53 74 61 74  ){.    ShellStat
1a310 65 20 64 61 74 61 3b 0a 20 20 20 20 63 68 61 72  e data;.    char
1a320 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20   *zErrMsg = 0;. 
1a330 20 20 20 69 6e 74 20 64 6f 53 74 61 74 73 20 3d     int doStats =
1a340 20 30 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 26   0;.    memcpy(&
1a350 64 61 74 61 2c 20 70 2c 20 73 69 7a 65 6f 66 28  data, p, sizeof(
1a360 64 61 74 61 29 29 3b 0a 20 20 20 20 64 61 74 61  data));.    data
1a370 2e 73 68 6f 77 48 65 61 64 65 72 20 3d 20 30 3b  .showHeader = 0;
1a380 0a 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20  .    data.cMode 
1a390 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f  = data.mode = MO
1a3a0 44 45 5f 53 65 6d 69 3b 0a 20 20 20 20 69 66 28  DE_Semi;.    if(
1a3b0 20 6e 41 72 67 3d 3d 32 20 26 26 20 6f 70 74 69   nArg==2 && opti
1a3c0 6f 6e 4d 61 74 63 68 28 61 7a 41 72 67 5b 31 5d  onMatch(azArg[1]
1a3d0 2c 20 22 69 6e 64 65 6e 74 22 29 20 29 7b 0a 20  , "indent") ){. 
1a3e0 20 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20       data.cMode 
1a3f0 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f  = data.mode = MO
1a400 44 45 5f 50 72 65 74 74 79 3b 0a 20 20 20 20 20  DE_Pretty;.     
1a410 20 6e 41 72 67 20 3d 20 31 3b 0a 20 20 20 20 7d   nArg = 1;.    }
1a420 0a 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d 31  .    if( nArg!=1
1a430 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
1a440 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
1a450 61 67 65 3a 20 2e 66 75 6c 6c 73 63 68 65 6d 61  age: .fullschema
1a460 20 3f 2d 2d 69 6e 64 65 6e 74 3f 5c 6e 22 29 3b   ?--indent?\n");
1a470 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
1a480 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
1a490 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
1a4a0 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70   }.    open_db(p
1a4b0 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  , 0);.    rc = s
1a4c0 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64  qlite3_exec(p->d
1a4d0 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43  b,.       "SELEC
1a4e0 54 20 73 71 6c 20 46 52 4f 4d 22 0a 20 20 20 20  T sql FROM".    
1a4f0 20 20 20 22 20 20 28 53 45 4c 45 43 54 20 73 71     "  (SELECT sq
1a500 6c 20 73 71 6c 2c 20 74 79 70 65 20 74 79 70 65  l sql, type type
1a510 2c 20 74 62 6c 5f 6e 61 6d 65 20 74 62 6c 5f 6e  , tbl_name tbl_n
1a520 61 6d 65 2c 20 6e 61 6d 65 20 6e 61 6d 65 2c 20  ame, name name, 
1a530 72 6f 77 69 64 20 78 22 0a 20 20 20 20 20 20 20  rowid x".       
1a540 22 20 20 20 20 20 46 52 4f 4d 20 73 71 6c 69 74  "     FROM sqlit
1a550 65 5f 6d 61 73 74 65 72 20 55 4e 49 4f 4e 20 41  e_master UNION A
1a560 4c 4c 22 0a 20 20 20 20 20 20 20 22 20 20 20 53  LL".       "   S
1a570 45 4c 45 43 54 20 73 71 6c 2c 20 74 79 70 65 2c  ELECT sql, type,
1a580 20 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c   tbl_name, name,
1a590 20 72 6f 77 69 64 20 46 52 4f 4d 20 73 71 6c 69   rowid FROM sqli
1a5a0 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29 20  te_temp_master) 
1a5b0 22 0a 20 20 20 20 20 20 20 22 57 48 45 52 45 20  ".       "WHERE 
1a5c0 74 79 70 65 21 3d 27 6d 65 74 61 27 20 41 4e 44  type!='meta' AND
1a5d0 20 73 71 6c 20 4e 4f 54 4e 55 4c 4c 20 41 4e 44   sql NOTNULL AND
1a5e0 20 6e 61 6d 65 20 4e 4f 54 20 4c 49 4b 45 20 27   name NOT LIKE '
1a5f0 73 71 6c 69 74 65 5f 25 27 20 22 0a 20 20 20 20  sqlite_%' ".    
1a600 20 20 20 22 4f 52 44 45 52 20 42 59 20 72 6f 77     "ORDER BY row
1a610 69 64 22 2c 0a 20 20 20 20 20 20 20 63 61 6c 6c  id",.       call
1a620 62 61 63 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45  back, &data, &zE
1a630 72 72 4d 73 67 0a 20 20 20 20 29 3b 0a 20 20 20  rrMsg.    );.   
1a640 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1a650 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  OK ){.      sqli
1a660 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
1a670 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1a680 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70  te3_prepare_v2(p
1a690 2d 3e 64 62 2c 0a 20 20 20 20 20 20 20 20 20 20  ->db,.          
1a6a0 20 20 20 20 20 22 53 45 4c 45 43 54 20 72 6f 77       "SELECT row
1a6b0 69 64 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  id FROM sqlite_m
1a6c0 61 73 74 65 72 22 0a 20 20 20 20 20 20 20 20 20  aster".         
1a6d0 20 20 20 20 20 20 22 20 57 48 45 52 45 20 6e 61        " WHERE na
1a6e0 6d 65 20 47 4c 4f 42 20 27 73 71 6c 69 74 65 5f  me GLOB 'sqlite_
1a6f0 73 74 61 74 5b 31 33 34 5d 27 22 2c 0a 20 20 20  stat[134]'",.   
1a700 20 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20              -1, 
1a710 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20  &pStmt, 0);.    
1a720 20 20 64 6f 53 74 61 74 73 20 3d 20 73 71 6c 69    doStats = sqli
1a730 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3d  te3_step(pStmt)=
1a740 3d 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 20  =SQLITE_ROW;.   
1a750 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c     sqlite3_final
1a760 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  ize(pStmt);.    
1a770 7d 0a 20 20 20 20 69 66 28 20 64 6f 53 74 61 74  }.    if( doStat
1a780 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61  s==0 ){.      ra
1a790 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
1a7a0 20 22 2f 2a 20 4e 6f 20 53 54 41 54 20 74 61 62   "/* No STAT tab
1a7b0 6c 65 73 20 61 76 61 69 6c 61 62 6c 65 20 2a 2f  les available */
1a7c0 5c 6e 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  \n");.    }else{
1a7d0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
1a7e0 66 28 70 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59  f(p->out, "ANALY
1a7f0 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  ZE sqlite_master
1a800 3b 5c 6e 22 29 3b 0a 20 20 20 20 20 20 73 71 6c  ;\n");.      sql
1a810 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c  ite3_exec(p->db,
1a820 20 22 53 45 4c 45 43 54 20 27 41 4e 41 4c 59 5a   "SELECT 'ANALYZ
1a830 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 27  E sqlite_master'
1a840 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
1a850 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 2c 20        callback, 
1a860 26 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29  &data, &zErrMsg)
1a870 3b 0a 20 20 20 20 20 20 64 61 74 61 2e 63 4d 6f  ;.      data.cMo
1a880 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d  de = data.mode =
1a890 20 4d 4f 44 45 5f 49 6e 73 65 72 74 3b 0a 20 20   MODE_Insert;.  
1a8a0 20 20 20 20 64 61 74 61 2e 7a 44 65 73 74 54 61      data.zDestTa
1a8b0 62 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f 73 74  ble = "sqlite_st
1a8c0 61 74 31 22 3b 0a 20 20 20 20 20 20 73 68 65 6c  at1";.      shel
1a8d0 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 53  l_exec(p->db, "S
1a8e0 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c  ELECT * FROM sql
1a8f0 69 74 65 5f 73 74 61 74 31 22 2c 0a 20 20 20 20  ite_stat1",.    
1a900 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68 65               she
1a910 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61  ll_callback, &da
1a920 74 61 2c 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20  ta,&zErrMsg);.  
1a930 20 20 20 20 64 61 74 61 2e 7a 44 65 73 74 54 61      data.zDestTa
1a940 62 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f 73 74  ble = "sqlite_st
1a950 61 74 33 22 3b 0a 20 20 20 20 20 20 73 68 65 6c  at3";.      shel
1a960 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 53  l_exec(p->db, "S
1a970 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c  ELECT * FROM sql
1a980 69 74 65 5f 73 74 61 74 33 22 2c 0a 20 20 20 20  ite_stat3",.    
1a990 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68 65               she
1a9a0 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61  ll_callback, &da
1a9b0 74 61 2c 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20  ta,&zErrMsg);.  
1a9c0 20 20 20 20 64 61 74 61 2e 7a 44 65 73 74 54 61      data.zDestTa
1a9d0 62 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f 73 74  ble = "sqlite_st
1a9e0 61 74 34 22 3b 0a 20 20 20 20 20 20 73 68 65 6c  at4";.      shel
1a9f0 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 53  l_exec(p->db, "S
1aa00 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c  ELECT * FROM sql
1aa10 69 74 65 5f 73 74 61 74 34 22 2c 0a 20 20 20 20  ite_stat4",.    
1aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68 65               she
1aa30 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61  ll_callback, &da
1aa40 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20  ta, &zErrMsg);. 
1aa50 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
1aa60 70 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59 5a 45  p->out, "ANALYZE
1aa70 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 5c   sqlite_master;\
1aa80 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  n");.    }.  }el
1aa90 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 68 27  se..  if( c=='h'
1aaa0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
1aab0 67 5b 30 5d 2c 20 22 68 65 61 64 65 72 73 22 2c  g[0], "headers",
1aac0 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66   n)==0 ){.    if
1aad0 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20  ( nArg==2 ){.   
1aae0 20 20 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72     p->showHeader
1aaf0 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28   = booleanValue(
1ab00 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d  azArg[1]);.    }
1ab10 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
1ab20 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1ab30 55 73 61 67 65 3a 20 2e 68 65 61 64 65 72 73 20  Usage: .headers 
1ab40 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20  on|off\n");.    
1ab50 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a    rc = 1;.    }.
1ab60 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
1ab70 3d 3d 27 68 27 20 26 26 20 73 74 72 6e 63 6d 70  =='h' && strncmp
1ab80 28 61 7a 41 72 67 5b 30 5d 2c 20 22 68 65 6c 70  (azArg[0], "help
1ab90 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
1aba0 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
1abb0 75 74 2c 20 22 25 73 22 2c 20 7a 48 65 6c 70 29  ut, "%s", zHelp)
1abc0 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  ;.  }else..  if(
1abd0 20 63 3d 3d 27 69 27 20 26 26 20 73 74 72 6e 63   c=='i' && strnc
1abe0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6d  mp(azArg[0], "im
1abf0 70 6f 72 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  port", n)==0 ){.
1ac00 20 20 20 20 63 68 61 72 20 2a 7a 54 61 62 6c 65      char *zTable
1ac10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ac20 2f 2a 20 49 6e 73 65 72 74 20 64 61 74 61 20 69  /* Insert data i
1ac30 6e 74 6f 20 74 68 69 73 20 74 61 62 6c 65 20 2a  nto this table *
1ac40 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 46 69 6c  /.    char *zFil
1ac50 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1ac60 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 66 69 6c    /* Name of fil
1ac70 65 20 74 6f 20 65 78 74 72 61 20 63 6f 6e 74 65  e to extra conte
1ac80 6e 74 20 66 72 6f 6d 20 2a 2f 0a 20 20 20 20 73  nt from */.    s
1ac90 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
1aca0 6d 74 20 3d 20 4e 55 4c 4c 3b 20 2f 2a 20 41 20  mt = NULL; /* A 
1acb0 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 20  statement */.   
1acc0 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20   int nCol;      
1acd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ace0 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
1acf0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 2a  s in the table *
1ad00 2f 0a 20 20 20 20 69 6e 74 20 6e 42 79 74 65 3b  /.    int nByte;
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
1ad30 79 74 65 73 20 69 6e 20 61 6e 20 53 51 4c 20 73  ytes in an SQL s
1ad40 74 72 69 6e 67 20 2a 2f 0a 20 20 20 20 69 6e 74  tring */.    int
1ad50 20 69 2c 20 6a 3b 20 20 20 20 20 20 20 20 20 20   i, j;          
1ad60 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
1ad70 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 20   counters */.   
1ad80 20 69 6e 74 20 6e 65 65 64 43 6f 6d 6d 69 74 3b   int needCommit;
1ad90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ada0 54 72 75 65 20 74 6f 20 43 4f 4d 4d 49 54 20 6f  True to COMMIT o
1adb0 72 20 52 4f 4c 4c 42 41 43 4b 20 61 74 20 65 6e  r ROLLBACK at en
1adc0 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 53 65  d */.    int nSe
1add0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1ade0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1adf0 66 20 62 79 74 65 73 20 69 6e 20 70 2d 3e 63 6f  f bytes in p->co
1ae00 6c 53 65 70 61 72 61 74 6f 72 5b 5d 20 2a 2f 0a  lSeparator[] */.
1ae10 20 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20      char *zSql; 
1ae20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae30 2f 2a 20 41 6e 20 53 51 4c 20 73 74 61 74 65 6d  /* An SQL statem
1ae40 65 6e 74 20 2a 2f 0a 20 20 20 20 49 6d 70 6f 72  ent */.    Impor
1ae50 74 43 74 78 20 73 43 74 78 3b 20 20 20 20 20 20  tCtx sCtx;      
1ae60 20 20 20 20 20 20 20 2f 2a 20 52 65 61 64 65 72         /* Reader
1ae70 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20   context */.    
1ae80 63 68 61 72 20 2a 28 53 51 4c 49 54 45 5f 43 44  char *(SQLITE_CD
1ae90 45 43 4c 20 2a 78 52 65 61 64 29 28 49 6d 70 6f  ECL *xRead)(Impo
1aea0 72 74 43 74 78 2a 29 3b 20 2f 2a 20 46 75 6e 63  rtCtx*); /* Func
1aeb0 20 74 6f 20 72 65 61 64 20 6f 6e 65 20 76 61 6c   to read one val
1aec0 75 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 28 53  ue */.    int (S
1aed0 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 78 43 6c  QLITE_CDECL *xCl
1aee0 6f 73 65 72 29 28 46 49 4c 45 2a 29 3b 20 20 20  oser)(FILE*);   
1aef0 20 20 20 2f 2a 20 46 75 6e 63 20 74 6f 20 63 6c     /* Func to cl
1af00 6f 73 65 20 66 69 6c 65 20 2a 2f 0a 0a 20 20 20  ose file */..   
1af10 20 69 66 28 20 6e 41 72 67 21 3d 33 20 29 7b 0a   if( nArg!=3 ){.
1af20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
1af30 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
1af40 20 2e 69 6d 70 6f 72 74 20 46 49 4c 45 20 54 41   .import FILE TA
1af50 42 4c 45 5c 6e 22 29 3b 0a 20 20 20 20 20 20 67  BLE\n");.      g
1af60 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
1af70 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20  _exit;.    }.   
1af80 20 7a 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b 31   zFile = azArg[1
1af90 5d 3b 0a 20 20 20 20 7a 54 61 62 6c 65 20 3d 20  ];.    zTable = 
1afa0 61 7a 41 72 67 5b 32 5d 3b 0a 20 20 20 20 73 65  azArg[2];.    se
1afb0 65 6e 49 6e 74 65 72 72 75 70 74 20 3d 20 30 3b  enInterrupt = 0;
1afc0 0a 20 20 20 20 6d 65 6d 73 65 74 28 26 73 43 74  .    memset(&sCt
1afd0 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 74  x, 0, sizeof(sCt
1afe0 78 29 29 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62  x));.    open_db
1aff0 28 70 2c 20 30 29 3b 0a 20 20 20 20 6e 53 65 70  (p, 0);.    nSep
1b000 20 3d 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e 63   = strlen30(p->c
1b010 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  olSeparator);.  
1b020 20 20 69 66 28 20 6e 53 65 70 3d 3d 30 20 29 7b    if( nSep==0 ){
1b030 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
1b040 66 28 73 74 64 65 72 72 2c 0a 20 20 20 20 20 20  f(stderr,.      
1b050 20 20 20 20 20 20 20 20 20 20 20 22 45 72 72 6f             "Erro
1b060 72 3a 20 6e 6f 6e 2d 6e 75 6c 6c 20 63 6f 6c 75  r: non-null colu
1b070 6d 6e 20 73 65 70 61 72 61 74 6f 72 20 72 65 71  mn separator req
1b080 75 69 72 65 64 20 66 6f 72 20 69 6d 70 6f 72 74  uired for import
1b090 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75  \n");.      retu
1b0a0 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rn 1;.    }.    
1b0b0 69 66 28 20 6e 53 65 70 3e 31 20 29 7b 0a 20 20  if( nSep>1 ){.  
1b0c0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
1b0d0 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6d  tderr, "Error: m
1b0e0 75 6c 74 69 2d 63 68 61 72 61 63 74 65 72 20 63  ulti-character c
1b0f0 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 73  olumn separators
1b100 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 22 0a 20 20   not allowed".  
1b110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b120 20 20 20 20 22 20 66 6f 72 20 69 6d 70 6f 72 74      " for import
1b130 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75  \n");.      retu
1b140 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rn 1;.    }.    
1b150 6e 53 65 70 20 3d 20 73 74 72 6c 65 6e 33 30 28  nSep = strlen30(
1b160 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29  p->rowSeparator)
1b170 3b 0a 20 20 20 20 69 66 28 20 6e 53 65 70 3d 3d  ;.    if( nSep==
1b180 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  0 ){.      raw_p
1b190 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
1b1a0 72 72 6f 72 3a 20 6e 6f 6e 2d 6e 75 6c 6c 20 72  rror: non-null r
1b1b0 6f 77 20 73 65 70 61 72 61 74 6f 72 20 72 65 71  ow separator req
1b1c0 75 69 72 65 64 20 66 6f 72 20 69 6d 70 6f 72 74  uired for import
1b1d0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75  \n");.      retu
1b1e0 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rn 1;.    }.    
1b1f0 69 66 28 20 6e 53 65 70 3d 3d 32 20 26 26 20 70  if( nSep==2 && p
1b200 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 43 73 76  ->mode==MODE_Csv
1b210 20 26 26 20 73 74 72 63 6d 70 28 70 2d 3e 72 6f   && strcmp(p->ro
1b220 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f  wSeparator, SEP_
1b230 43 72 4c 66 29 3d 3d 30 20 29 7b 0a 20 20 20 20  CrLf)==0 ){.    
1b240 20 20 2f 2a 20 57 68 65 6e 20 69 6d 70 6f 72 74    /* When import
1b250 69 6e 67 20 43 53 56 20 28 6f 6e 6c 79 29 2c 20  ing CSV (only), 
1b260 69 66 20 74 68 65 20 72 6f 77 20 73 65 70 61 72  if the row separ
1b270 61 74 6f 72 20 69 73 20 73 65 74 20 74 6f 20 74  ator is set to t
1b280 68 65 0a 20 20 20 20 20 20 2a 2a 20 64 65 66 61  he.      ** defa
1b290 75 6c 74 20 6f 75 74 70 75 74 20 72 6f 77 20 73  ult output row s
1b2a0 65 70 61 72 61 74 6f 72 2c 20 63 68 61 6e 67 65  eparator, change
1b2b0 20 69 74 20 74 6f 20 74 68 65 20 64 65 66 61 75   it to the defau
1b2c0 6c 74 20 69 6e 70 75 74 0a 20 20 20 20 20 20 2a  lt input.      *
1b2d0 2a 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 2e  * row separator.
1b2e0 20 20 54 68 69 73 20 61 76 6f 69 64 73 20 68 61    This avoids ha
1b2f0 76 69 6e 67 20 74 6f 20 6d 61 69 6e 74 61 69 6e  ving to maintain
1b300 20 64 69 66 66 65 72 65 6e 74 20 69 6e 70 75 74   different input
1b310 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 6f 75  .      ** and ou
1b320 74 70 75 74 20 72 6f 77 20 73 65 70 61 72 61 74  tput row separat
1b330 6f 72 73 2e 20 2a 2f 0a 20 20 20 20 20 20 73 71  ors. */.      sq
1b340 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
1b350 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61  izeof(p->rowSepa
1b360 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65  rator), p->rowSe
1b370 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 52 6f 77  parator, SEP_Row
1b380 29 3b 0a 20 20 20 20 20 20 6e 53 65 70 20 3d 20  );.      nSep = 
1b390 73 74 72 6c 65 6e 33 30 28 70 2d 3e 72 6f 77 53  strlen30(p->rowS
1b3a0 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 7d  eparator);.    }
1b3b0 0a 20 20 20 20 69 66 28 20 6e 53 65 70 3e 31 20  .    if( nSep>1 
1b3c0 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
1b3d0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
1b3e0 6f 72 3a 20 6d 75 6c 74 69 2d 63 68 61 72 61 63  or: multi-charac
1b3f0 74 65 72 20 72 6f 77 20 73 65 70 61 72 61 74 6f  ter row separato
1b400 72 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 22 0a  rs not allowed".
1b410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b420 20 20 20 20 20 20 22 20 66 6f 72 20 69 6d 70 6f        " for impo
1b430 72 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65  rt\n");.      re
1b440 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20  turn 1;.    }.  
1b450 20 20 73 43 74 78 2e 7a 46 69 6c 65 20 3d 20 7a    sCtx.zFile = z
1b460 46 69 6c 65 3b 0a 20 20 20 20 73 43 74 78 2e 6e  File;.    sCtx.n
1b470 4c 69 6e 65 20 3d 20 31 3b 0a 20 20 20 20 69 66  Line = 1;.    if
1b480 28 20 73 43 74 78 2e 7a 46 69 6c 65 5b 30 5d 3d  ( sCtx.zFile[0]=
1b490 3d 27 7c 27 20 29 7b 0a 23 69 66 64 65 66 20 53  ='|' ){.#ifdef S
1b4a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 4f 50 45 4e  QLITE_OMIT_POPEN
1b4b0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
1b4c0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
1b4d0 3a 20 70 69 70 65 73 20 61 72 65 20 6e 6f 74 20  : pipes are not 
1b4e0 73 75 70 70 6f 72 74 65 64 20 69 6e 20 74 68 69  supported in thi
1b4f0 73 20 4f 53 5c 6e 22 29 3b 0a 20 20 20 20 20 20  s OS\n");.      
1b500 72 65 74 75 72 6e 20 31 3b 0a 23 65 6c 73 65 0a  return 1;.#else.
1b510 20 20 20 20 20 20 73 43 74 78 2e 69 6e 20 3d 20        sCtx.in = 
1b520 70 6f 70 65 6e 28 73 43 74 78 2e 7a 46 69 6c 65  popen(sCtx.zFile
1b530 2b 31 2c 20 22 72 22 29 3b 0a 20 20 20 20 20 20  +1, "r");.      
1b540 73 43 74 78 2e 7a 46 69 6c 65 20 3d 20 22 3c 70  sCtx.zFile = "<p
1b550 69 70 65 3e 22 3b 0a 20 20 20 20 20 20 78 43 6c  ipe>";.      xCl
1b560 6f 73 65 72 20 3d 20 70 63 6c 6f 73 65 3b 0a 23  oser = pclose;.#
1b570 65 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b  endif.    }else{
1b580 0a 20 20 20 20 20 20 73 43 74 78 2e 69 6e 20 3d  .      sCtx.in =
1b590 20 66 6f 70 65 6e 28 73 43 74 78 2e 7a 46 69 6c   fopen(sCtx.zFil
1b5a0 65 2c 20 22 72 62 22 29 3b 0a 20 20 20 20 20 20  e, "rb");.      
1b5b0 78 43 6c 6f 73 65 72 20 3d 20 66 63 6c 6f 73 65  xCloser = fclose
1b5c0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
1b5d0 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 41 73  p->mode==MODE_As
1b5e0 63 69 69 20 29 7b 0a 20 20 20 20 20 20 78 52 65  cii ){.      xRe
1b5f0 61 64 20 3d 20 61 73 63 69 69 5f 72 65 61 64 5f  ad = ascii_read_
1b600 6f 6e 65 5f 66 69 65 6c 64 3b 0a 20 20 20 20 7d  one_field;.    }
1b610 65 6c 73 65 7b 0a 20 20 20 20 20 20 78 52 65 61  else{.      xRea
1b620 64 20 3d 20 63 73 76 5f 72 65 61 64 5f 6f 6e 65  d = csv_read_one
1b630 5f 66 69 65 6c 64 3b 0a 20 20 20 20 7d 0a 20 20  _field;.    }.  
1b640 20 20 69 66 28 20 73 43 74 78 2e 69 6e 3d 3d 30    if( sCtx.in==0
1b650 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70   ){.      utf8_p
1b660 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
1b670 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65  rror: cannot ope
1b680 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69  n \"%s\"\n", zFi
1b690 6c 65 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  le);.      retur
1b6a0 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  n 1;.    }.    s
1b6b0 43 74 78 2e 63 43 6f 6c 53 65 70 20 3d 20 70 2d  Ctx.cColSep = p-
1b6c0 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 5b 30 5d  >colSeparator[0]
1b6d0 3b 0a 20 20 20 20 73 43 74 78 2e 63 52 6f 77 53  ;.    sCtx.cRowS
1b6e0 65 70 20 3d 20 70 2d 3e 72 6f 77 53 65 70 61 72  ep = p->rowSepar
1b6f0 61 74 6f 72 5b 30 5d 3b 0a 20 20 20 20 7a 53 71  ator[0];.    zSq
1b700 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  l = sqlite3_mpri
1b710 6e 74 66 28 22 53 45 4c 45 43 54 20 2a 20 46 52  ntf("SELECT * FR
1b720 4f 4d 20 25 73 22 2c 20 7a 54 61 62 6c 65 29 3b  OM %s", zTable);
1b730 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30  .    if( zSql==0
1b740 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
1b750 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
1b760 72 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f  ror: out of memo
1b770 72 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 78 43  ry\n");.      xC
1b780 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a  loser(sCtx.in);.
1b790 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
1b7a0 20 20 20 20 7d 0a 20 20 20 20 6e 42 79 74 65 20      }.    nByte 
1b7b0 3d 20 73 74 72 6c 65 6e 33 30 28 7a 53 71 6c 29  = strlen30(zSql)
1b7c0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
1b7d0 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d  e3_prepare_v2(p-
1b7e0 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26  >db, zSql, -1, &
1b7f0 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 69  pStmt, 0);.    i
1b800 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63 68 61  mport_append_cha
1b810 72 28 26 73 43 74 78 2c 20 30 29 3b 20 20 20 20  r(&sCtx, 0);    
1b820 2f 2a 20 54 6f 20 65 6e 73 75 72 65 20 73 43 74  /* To ensure sCt
1b830 78 2e 7a 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  x.z is allocated
1b840 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 20 26   */.    if( rc &
1b850 26 20 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f  & sqlite3_strglo
1b860 62 28 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  b("no such table
1b870 3a 20 2a 22 2c 20 73 71 6c 69 74 65 33 5f 65 72  : *", sqlite3_er
1b880 72 6d 73 67 28 70 2d 3e 64 62 29 29 3d 3d 30 20  rmsg(p->db))==0 
1b890 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a  ){.      char *z
1b8a0 43 72 65 61 74 65 20 3d 20 73 71 6c 69 74 65 33  Create = sqlite3
1b8b0 5f 6d 70 72 69 6e 74 66 28 22 43 52 45 41 54 45  _mprintf("CREATE
1b8c0 20 54 41 42 4c 45 20 25 73 22 2c 20 7a 54 61 62   TABLE %s", zTab
1b8d0 6c 65 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20  le);.      char 
1b8e0 63 53 65 70 20 3d 20 27 28 27 3b 0a 20 20 20 20  cSep = '(';.    
1b8f0 20 20 77 68 69 6c 65 28 20 78 52 65 61 64 28 26    while( xRead(&
1b900 73 43 74 78 29 20 29 7b 0a 20 20 20 20 20 20 20  sCtx) ){.       
1b910 20 7a 43 72 65 61 74 65 20 3d 20 73 71 6c 69 74   zCreate = sqlit
1b920 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 7a 25 63  e3_mprintf("%z%c
1b930 5c 6e 20 20 5c 22 25 77 5c 22 20 54 45 58 54 22  \n  \"%w\" TEXT"
1b940 2c 20 7a 43 72 65 61 74 65 2c 20 63 53 65 70 2c  , zCreate, cSep,
1b950 20 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20   sCtx.z);.      
1b960 20 20 63 53 65 70 20 3d 20 27 2c 27 3b 0a 20 20    cSep = ',';.  
1b970 20 20 20 20 20 20 69 66 28 20 73 43 74 78 2e 63        if( sCtx.c
1b980 54 65 72 6d 21 3d 73 43 74 78 2e 63 43 6f 6c 53  Term!=sCtx.cColS
1b990 65 70 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  ep ) break;.    
1b9a0 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63 53    }.      if( cS
1b9b0 65 70 3d 3d 27 28 27 20 29 7b 0a 20 20 20 20 20  ep=='(' ){.     
1b9c0 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
1b9d0 7a 43 72 65 61 74 65 29 3b 0a 20 20 20 20 20 20  zCreate);.      
1b9e0 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73    sqlite3_free(s
1b9f0 43 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20  Ctx.z);.        
1ba00 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29  xCloser(sCtx.in)
1ba10 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70  ;.        utf8_p
1ba20 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 25 73  rintf(stderr,"%s
1ba30 3a 20 65 6d 70 74 79 20 66 69 6c 65 5c 6e 22 2c  : empty file\n",
1ba40 20 73 43 74 78 2e 7a 46 69 6c 65 29 3b 0a 20 20   sCtx.zFile);.  
1ba50 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
1ba60 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 43        }.      zC
1ba70 72 65 61 74 65 20 3d 20 73 71 6c 69 74 65 33 5f  reate = sqlite3_
1ba80 6d 70 72 69 6e 74 66 28 22 25 7a 5c 6e 29 22 2c  mprintf("%z\n)",
1ba90 20 7a 43 72 65 61 74 65 29 3b 0a 20 20 20 20 20   zCreate);.     
1baa0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
1bab0 65 63 28 70 2d 3e 64 62 2c 20 7a 43 72 65 61 74  ec(p->db, zCreat
1bac0 65 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20  e, 0, 0, 0);.   
1bad0 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
1bae0 7a 43 72 65 61 74 65 29 3b 0a 20 20 20 20 20 20  zCreate);.      
1baf0 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20  if( rc ){.      
1bb00 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
1bb10 64 65 72 72 2c 20 22 43 52 45 41 54 45 20 54 41  derr, "CREATE TA
1bb20 42 4c 45 20 25 73 28 2e 2e 2e 29 20 66 61 69 6c  BLE %s(...) fail
1bb30 65 64 3a 20 25 73 5c 6e 22 2c 20 7a 54 61 62 6c  ed: %s\n", zTabl
1bb40 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
1bb50 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73     sqlite3_errms
1bb60 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20  g(p->db));.     
1bb70 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
1bb80 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20 20  sCtx.z);.       
1bb90 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e   xCloser(sCtx.in
1bba0 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
1bbb0 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  n 1;.      }.   
1bbc0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
1bbd0 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62  prepare_v2(p->db
1bbe0 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74  , zSql, -1, &pSt
1bbf0 6d 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20  mt, 0);.    }.  
1bc00 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
1bc10 53 71 6c 29 3b 0a 20 20 20 20 69 66 28 20 72 63  Sql);.    if( rc
1bc20 20 29 7b 0a 20 20 20 20 20 20 69 66 20 28 70 53   ){.      if (pS
1bc30 74 6d 74 29 20 73 71 6c 69 74 65 33 5f 66 69 6e  tmt) sqlite3_fin
1bc40 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
1bc50 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
1bc60 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 25  stderr,"Error: %
1bc70 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72  s\n", sqlite3_er
1bc80 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20  rmsg(p->db));.  
1bc90 20 20 20 20 78 43 6c 6f 73 65 72 28 73 43 74 78      xCloser(sCtx
1bca0 2e 69 6e 29 3b 0a 20 20 20 20 20 20 72 65 74 75  .in);.      retu
1bcb0 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rn 1;.    }.    
1bcc0 6e 43 6f 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  nCol = sqlite3_c
1bcd0 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d  olumn_count(pStm
1bce0 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  t);.    sqlite3_
1bcf0 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
1bd00 0a 20 20 20 20 70 53 74 6d 74 20 3d 20 30 3b 0a  .    pStmt = 0;.
1bd10 20 20 20 20 69 66 28 20 6e 43 6f 6c 3d 3d 30 20      if( nCol==0 
1bd20 29 20 72 65 74 75 72 6e 20 30 3b 20 2f 2a 20 6e  ) return 0; /* n
1bd30 6f 20 63 6f 6c 75 6d 6e 73 2c 20 6e 6f 20 65 72  o columns, no er
1bd40 72 6f 72 20 2a 2f 0a 20 20 20 20 7a 53 71 6c 20  ror */.    zSql 
1bd50 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  = sqlite3_malloc
1bd60 36 34 28 20 6e 42 79 74 65 2a 32 20 2b 20 32 30  64( nByte*2 + 20
1bd70 20 2b 20 6e 43 6f 6c 2a 32 20 29 3b 0a 20 20 20   + nCol*2 );.   
1bd80 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a   if( zSql==0 ){.
1bd90 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
1bda0 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
1bdb0 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e   out of memory\n
1bdc0 22 29 3b 0a 20 20 20 20 20 20 78 43 6c 6f 73 65  ");.      xClose
1bdd0 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20 20 20  r(sCtx.in);.    
1bde0 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20    return 1;.    
1bdf0 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  }.    sqlite3_sn
1be00 70 72 69 6e 74 66 28 6e 42 79 74 65 2b 32 30 2c  printf(nByte+20,
1be10 20 7a 53 71 6c 2c 20 22 49 4e 53 45 52 54 20 49   zSql, "INSERT I
1be20 4e 54 4f 20 5c 22 25 77 5c 22 20 56 41 4c 55 45  NTO \"%w\" VALUE
1be30 53 28 3f 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20  S(?", zTable);. 
1be40 20 20 20 6a 20 3d 20 73 74 72 6c 65 6e 33 30 28     j = strlen30(
1be50 7a 53 71 6c 29 3b 0a 20 20 20 20 66 6f 72 28 69  zSql);.    for(i
1be60 3d 31 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b 2b 29  =1; i<nCol; i++)
1be70 7b 0a 20 20 20 20 20 20 7a 53 71 6c 5b 6a 2b 2b  {.      zSql[j++
1be80 5d 20 3d 20 27 2c 27 3b 0a 20 20 20 20 20 20 7a  ] = ',';.      z
1be90 53 71 6c 5b 6a 2b 2b 5d 20 3d 20 27 3f 27 3b 0a  Sql[j++] = '?';.
1bea0 20 20 20 20 7d 0a 20 20 20 20 7a 53 71 6c 5b 6a      }.    zSql[j
1beb0 2b 2b 5d 20 3d 20 27 29 27 3b 0a 20 20 20 20 7a  ++] = ')';.    z
1bec0 53 71 6c 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20 20  Sql[j] = 0;.    
1bed0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
1bee0 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a  pare_v2(p->db, z
1bef0 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c  Sql, -1, &pStmt,
1bf00 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
1bf10 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20  _free(zSql);.   
1bf20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
1bf30 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
1bf40 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c  err, "Error: %s\
1bf50 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  n", sqlite3_errm
1bf60 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20  sg(p->db));.    
1bf70 20 20 69 66 20 28 70 53 74 6d 74 29 20 73 71 6c    if (pStmt) sql
1bf80 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53  ite3_finalize(pS
1bf90 74 6d 74 29 3b 0a 20 20 20 20 20 20 78 43 6c 6f  tmt);.      xClo
1bfa0 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20  ser(sCtx.in);.  
1bfb0 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
1bfc0 20 20 7d 0a 20 20 20 20 6e 65 65 64 43 6f 6d 6d    }.    needComm
1bfd0 69 74 20 3d 20 73 71 6c 69 74 65 33 5f 67 65 74  it = sqlite3_get
1bfe0 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 70 2d 3e 64  _autocommit(p->d
1bff0 62 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 65 64  b);.    if( need
1c000 43 6f 6d 6d 69 74 20 29 20 73 71 6c 69 74 65 33  Commit ) sqlite3
1c010 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22 42 45  _exec(p->db, "BE
1c020 47 49 4e 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a  GIN", 0, 0, 0);.
1c030 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 69 6e      do{.      in
1c040 74 20 73 74 61 72 74 4c 69 6e 65 20 3d 20 73 43  t startLine = sC
1c050 74 78 2e 6e 4c 69 6e 65 3b 0a 20 20 20 20 20 20  tx.nLine;.      
1c060 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b  for(i=0; i<nCol;
1c070 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 63   i++){.        c
1c080 68 61 72 20 2a 7a 20 3d 20 78 52 65 61 64 28 26  har *z = xRead(&
1c090 73 43 74 78 29 3b 0a 20 20 20 20 20 20 20 20 2f  sCtx);.        /
1c0a0 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 44 69 64  *.        ** Did
1c0b0 20 77 65 20 72 65 61 63 68 20 65 6e 64 2d 6f 66   we reach end-of
1c0c0 2d 66 69 6c 65 20 62 65 66 6f 72 65 20 66 69 6e  -file before fin
1c0d0 64 69 6e 67 20 61 6e 79 20 63 6f 6c 75 6d 6e 73  ding any columns
1c0e0 3f 0a 20 20 20 20 20 20 20 20 2a 2a 20 49 66 20  ?.        ** If 
1c0f0 73 6f 2c 20 73 74 6f 70 20 69 6e 73 74 65 61 64  so, stop instead
1c100 20 6f 66 20 4e 55 4c 4c 20 66 69 6c 6c 69 6e 67   of NULL filling
1c110 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 63   the remaining c
1c120 6f 6c 75 6d 6e 73 2e 0a 20 20 20 20 20 20 20 20  olumns..        
1c130 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a  */.        if( z
1c140 3d 3d 30 20 26 26 20 69 3d 3d 30 20 29 20 62 72  ==0 && i==0 ) br
1c150 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 2f 2a 0a  eak;.        /*.
1c160 20 20 20 20 20 20 20 20 2a 2a 20 44 69 64 20 77          ** Did w
1c170 65 20 72 65 61 63 68 20 65 6e 64 2d 6f 66 2d 66  e reach end-of-f
1c180 69 6c 65 20 4f 52 20 65 6e 64 2d 6f 66 2d 6c 69  ile OR end-of-li
1c190 6e 65 20 62 65 66 6f 72 65 20 66 69 6e 64 69 6e  ne before findin
1c1a0 67 20 61 6e 79 0a 20 20 20 20 20 20 20 20 2a 2a  g any.        **
1c1b0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 41 53 43 49   columns in ASCI
1c1c0 49 20 6d 6f 64 65 3f 20 20 49 66 20 73 6f 2c 20  I mode?  If so, 
1c1d0 73 74 6f 70 20 69 6e 73 74 65 61 64 20 6f 66 20  stop instead of 
1c1e0 4e 55 4c 4c 20 66 69 6c 6c 69 6e 67 0a 20 20 20  NULL filling.   
1c1f0 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65 6d 61       ** the rema
1c200 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 20  ining columns.. 
1c210 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
1c220 20 20 69 66 28 20 70 2d 3e 6d 6f 64 65 3d 3d 4d    if( p->mode==M
1c230 4f 44 45 5f 41 73 63 69 69 20 26 26 20 28 7a 3d  ODE_Ascii && (z=
1c240 3d 30 20 7c 7c 20 7a 5b 30 5d 3d 3d 30 29 20 26  =0 || z[0]==0) &
1c250 26 20 69 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  & i==0 ) break;.
1c260 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1c270 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c  bind_text(pStmt,
1c280 20 69 2b 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c   i+1, z, -1, SQL
1c290 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
1c2a0 20 20 20 20 20 20 20 20 69 66 28 20 69 3c 6e 43          if( i<nC
1c2b0 6f 6c 2d 31 20 26 26 20 73 43 74 78 2e 63 54 65  ol-1 && sCtx.cTe
1c2c0 72 6d 21 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70  rm!=sCtx.cColSep
1c2d0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74   ){.          ut
1c2e0 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
1c2f0 2c 20 22 25 73 3a 25 64 3a 20 65 78 70 65 63 74  , "%s:%d: expect
1c300 65 64 20 25 64 20 63 6f 6c 75 6d 6e 73 20 62 75  ed %d columns bu
1c310 74 20 66 6f 75 6e 64 20 25 64 20 2d 20 22 0a 20  t found %d - ". 
1c320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c330 20 20 20 20 20 20 20 20 20 22 66 69 6c 6c 69 6e           "fillin
1c340 67 20 74 68 65 20 72 65 73 74 20 77 69 74 68 20  g the rest with 
1c350 4e 55 4c 4c 5c 6e 22 2c 0a 20 20 20 20 20 20 20  NULL\n",.       
1c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c370 20 20 20 73 43 74 78 2e 7a 46 69 6c 65 2c 20 73     sCtx.zFile, s
1c380 74 61 72 74 4c 69 6e 65 2c 20 6e 43 6f 6c 2c 20  tartLine, nCol, 
1c390 69 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20  i+1);.          
1c3a0 69 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 20 20  i += 2;.        
1c3b0 20 20 77 68 69 6c 65 28 20 69 3c 3d 6e 43 6f 6c    while( i<=nCol
1c3c0 20 29 7b 20 73 71 6c 69 74 65 33 5f 62 69 6e 64   ){ sqlite3_bind
1c3d0 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 29 3b  _null(pStmt, i);
1c3e0 20 69 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20   i++; }.        
1c3f0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
1c400 69 66 28 20 73 43 74 78 2e 63 54 65 72 6d 3d 3d  if( sCtx.cTerm==
1c410 73 43 74 78 2e 63 43 6f 6c 53 65 70 20 29 7b 0a  sCtx.cColSep ){.
1c420 20 20 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20          do{.    
1c430 20 20 20 20 20 20 78 52 65 61 64 28 26 73 43 74        xRead(&sCt
1c440 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 2b  x);.          i+
1c450 2b 3b 0a 20 20 20 20 20 20 20 20 7d 77 68 69 6c  +;.        }whil
1c460 65 28 20 73 43 74 78 2e 63 54 65 72 6d 3d 3d 73  e( sCtx.cTerm==s
1c470 43 74 78 2e 63 43 6f 6c 53 65 70 20 29 3b 0a 20  Ctx.cColSep );. 
1c480 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
1c490 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 3a 25  tf(stderr, "%s:%
1c4a0 64 3a 20 65 78 70 65 63 74 65 64 20 25 64 20 63  d: expected %d c
1c4b0 6f 6c 75 6d 6e 73 20 62 75 74 20 66 6f 75 6e 64  olumns but found
1c4c0 20 25 64 20 2d 20 22 0a 20 20 20 20 20 20 20 20   %d - ".        
1c4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4e0 22 65 78 74 72 61 73 20 69 67 6e 6f 72 65 64 5c  "extras ignored\
1c4f0 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n",.            
1c500 20 20 20 20 20 20 20 20 20 20 20 20 73 43 74 78              sCtx
1c510 2e 7a 46 69 6c 65 2c 20 73 74 61 72 74 4c 69 6e  .zFile, startLin
1c520 65 2c 20 6e 43 6f 6c 2c 20 69 29 3b 0a 20 20 20  e, nCol, i);.   
1c530 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 69     }.      if( i
1c540 3e 3d 6e 43 6f 6c 20 29 7b 0a 20 20 20 20 20 20  >=nCol ){.      
1c550 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70    sqlite3_step(p
1c560 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 72  Stmt);.        r
1c570 63 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73 65  c = sqlite3_rese
1c580 74 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20  t(pStmt);.      
1c590 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1c5a0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
1c5b0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
1c5c0 65 72 72 2c 20 22 25 73 3a 25 64 3a 20 49 4e 53  err, "%s:%d: INS
1c5d0 45 52 54 20 66 61 69 6c 65 64 3a 20 25 73 5c 6e  ERT failed: %s\n
1c5e0 22 2c 20 73 43 74 78 2e 7a 46 69 6c 65 2c 0a 20  ", sCtx.zFile,. 
1c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c600 20 20 20 20 20 73 74 61 72 74 4c 69 6e 65 2c 20       startLine, 
1c610 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70  sqlite3_errmsg(p
1c620 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 20 20  ->db));.        
1c630 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 77  }.      }.    }w
1c640 68 69 6c 65 28 20 73 43 74 78 2e 63 54 65 72 6d  hile( sCtx.cTerm
1c650 21 3d 45 4f 46 20 29 3b 0a 0a 20 20 20 20 78 43  !=EOF );..    xC
1c660 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a  loser(sCtx.in);.
1c670 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
1c680 28 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 73 71  (sCtx.z);.    sq
1c690 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
1c6a0 53 74 6d 74 29 3b 0a 20 20 20 20 69 66 28 20 6e  Stmt);.    if( n
1c6b0 65 65 64 43 6f 6d 6d 69 74 20 29 20 73 71 6c 69  eedCommit ) sqli
1c6c0 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  te3_exec(p->db, 
1c6d0 22 43 4f 4d 4d 49 54 22 2c 20 30 2c 20 30 2c 20  "COMMIT", 0, 0, 
1c6e0 30 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69  0);.  }else..  i
1c6f0 66 28 20 63 3d 3d 27 69 27 20 26 26 20 28 73 74  f( c=='i' && (st
1c700 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
1c710 22 69 6e 64 69 63 65 73 22 2c 20 6e 29 3d 3d 30  "indices", n)==0
1c720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c730 20 20 7c 7c 20 73 74 72 6e 63 6d 70 28 61 7a 41    || strncmp(azA
1c740 72 67 5b 30 5d 2c 20 22 69 6e 64 65 78 65 73 22  rg[0], "indexes"
1c750 2c 20 6e 29 3d 3d 30 29 20 29 7b 0a 20 20 20 20  , n)==0) ){.    
1c760 53 68 65 6c 6c 53 74 61 74 65 20 64 61 74 61 3b  ShellState data;
1c770 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  .    char *zErrM
1c780 73 67 20 3d 20 30 3b 0a 20 20 20 20 6f 70 65 6e  sg = 0;.    open
1c790 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 6d  _db(p, 0);.    m
1c7a0 65 6d 63 70 79 28 26 64 61 74 61 2c 20 70 2c 20  emcpy(&data, p, 
1c7b0 73 69 7a 65 6f 66 28 64 61 74 61 29 29 3b 0a 20  sizeof(data));. 
1c7c0 20 20 20 64 61 74 61 2e 73 68 6f 77 48 65 61 64     data.showHead
1c7d0 65 72 20 3d 20 30 3b 0a 20 20 20 20 64 61 74 61  er = 0;.    data
1c7e0 2e 63 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d 6f  .cMode = data.mo
1c7f0 64 65 20 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a  de = MODE_List;.
1c800 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 31 20      if( nArg==1 
1c810 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
1c820 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
1c830 2c 0a 20 20 20 20 20 20 20 20 22 53 45 4c 45 43  ,.        "SELEC
1c840 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
1c850 74 65 5f 6d 61 73 74 65 72 20 22 0a 20 20 20 20  te_master ".    
1c860 20 20 20 20 22 57 48 45 52 45 20 74 79 70 65 3d      "WHERE type=
1c870 27 69 6e 64 65 78 27 20 41 4e 44 20 6e 61 6d 65  'index' AND name
1c880 20 4e 4f 54 20 4c 49 4b 45 20 27 73 71 6c 69 74   NOT LIKE 'sqlit
1c890 65 5f 25 27 20 22 0a 20 20 20 20 20 20 20 20 22  e_%' ".        "
1c8a0 55 4e 49 4f 4e 20 41 4c 4c 20 22 0a 20 20 20 20  UNION ALL ".    
1c8b0 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65      "SELECT name
1c8c0 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
1c8d0 70 5f 6d 61 73 74 65 72 20 22 0a 20 20 20 20 20  p_master ".     
1c8e0 20 20 20 22 57 48 45 52 45 20 74 79 70 65 3d 27     "WHERE type='
1c8f0 69 6e 64 65 78 27 20 22 0a 20 20 20 20 20 20 20  index' ".       
1c900 20 22 4f 52 44 45 52 20 42 59 20 31 22 2c 0a 20   "ORDER BY 1",. 
1c910 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 2c         callback,
1c920 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67   &data, &zErrMsg
1c930 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 7d 65  .      );.    }e
1c940 6c 73 65 20 69 66 28 20 6e 41 72 67 3d 3d 32 20  lse if( nArg==2 
1c950 29 7b 0a 20 20 20 20 20 20 7a 53 68 65 6c 6c 53  ){.      zShellS
1c960 74 61 74 69 63 20 3d 20 61 7a 41 72 67 5b 31 5d  tatic = azArg[1]
1c970 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
1c980 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c  ite3_exec(p->db,
1c990 0a 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  .        "SELECT
1c9a0 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
1c9b0 65 5f 6d 61 73 74 65 72 20 22 0a 20 20 20 20 20  e_master ".     
1c9c0 20 20 20 22 57 48 45 52 45 20 74 79 70 65 3d 27     "WHERE type='
1c9d0 69 6e 64 65 78 27 20 41 4e 44 20 74 62 6c 5f 6e  index' AND tbl_n
1c9e0 61 6d 65 20 4c 49 4b 45 20 73 68 65 6c 6c 73 74  ame LIKE shellst
1c9f0 61 74 69 63 28 29 20 22 0a 20 20 20 20 20 20 20  atic() ".       
1ca00 20 22 55 4e 49 4f 4e 20 41 4c 4c 20 22 0a 20 20   "UNION ALL ".  
1ca10 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61        "SELECT na
1ca20 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
1ca30 65 6d 70 5f 6d 61 73 74 65 72 20 22 0a 20 20 20  emp_master ".   
1ca40 20 20 20 20 20 22 57 48 45 52 45 20 74 79 70 65       "WHERE type
1ca50 3d 27 69 6e 64 65 78 27 20 41 4e 44 20 74 62 6c  ='index' AND tbl
1ca60 5f 6e 61 6d 65 20 4c 49 4b 45 20 73 68 65 6c 6c  _name LIKE shell
1ca70 73 74 61 74 69 63 28 29 20 22 0a 20 20 20 20 20  static() ".     
1ca80 20 20 20 22 4f 52 44 45 52 20 42 59 20 31 22 2c     "ORDER BY 1",
1ca90 0a 20 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63  .        callbac
1caa0 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d  k, &data, &zErrM
1cab0 73 67 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  sg.      );.    
1cac0 20 20 7a 53 68 65 6c 6c 53 74 61 74 69 63 20 3d    zShellStatic =
1cad0 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
1cae0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
1caf0 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
1cb00 2e 69 6e 64 65 78 65 73 20 3f 4c 49 4b 45 2d 50  .indexes ?LIKE-P
1cb10 41 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20  ATTERN?\n");.   
1cb20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
1cb30 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61   goto meta_comma
1cb40 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20  nd_exit;.    }. 
1cb50 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29     if( zErrMsg )
1cb60 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
1cb70 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f  ntf(stderr,"Erro
1cb80 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73  r: %s\n", zErrMs
1cb90 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  g);.      sqlite
1cba0 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b  3_free(zErrMsg);
1cbb0 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
1cbc0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 20     }else if( rc 
1cbd0 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  != SQLITE_OK ){.
1cbe0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
1cbf0 28 73 74 64 65 72 72 2c 0a 20 20 20 20 20 20 20  (stderr,.       
1cc00 20 20 20 20 20 20 20 20 20 20 22 45 72 72 6f 72            "Error
1cc10 3a 20 71 75 65 72 79 69 6e 67 20 73 71 6c 69 74  : querying sqlit
1cc20 65 5f 6d 61 73 74 65 72 20 61 6e 64 20 73 71 6c  e_master and sql
1cc30 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 5c  ite_temp_master\
1cc40 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
1cc50 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
1cc60 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1cc70 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 20  ENABLE_IOTRACE. 
1cc80 20 69 66 28 20 63 3d 3d 27 69 27 20 26 26 20 73   if( c=='i' && s
1cc90 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
1cca0 20 22 69 6f 74 72 61 63 65 22 2c 20 6e 29 3d 3d   "iotrace", n)==
1ccb0 30 20 29 7b 0a 20 20 20 20 53 51 4c 49 54 45 5f  0 ){.    SQLITE_
1ccc0 41 50 49 20 65 78 74 65 72 6e 20 76 6f 69 64 20  API extern void 
1ccd0 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73  (SQLITE_CDECL *s
1cce0 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63  qlite3IoTrace)(c
1ccf0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
1cd00 3b 0a 20 20 20 20 69 66 28 20 69 6f 74 72 61 63  ;.    if( iotrac
1cd10 65 20 26 26 20 69 6f 74 72 61 63 65 21 3d 73 74  e && iotrace!=st
1cd20 64 6f 75 74 20 29 20 66 63 6c 6f 73 65 28 69 6f  dout ) fclose(io
1cd30 74 72 61 63 65 29 3b 0a 20 20 20 20 69 6f 74 72  trace);.    iotr
1cd40 61 63 65 20 3d 20 30 3b 0a 20 20 20 20 69 66 28  ace = 0;.    if(
1cd50 20 6e 41 72 67 3c 32 20 29 7b 0a 20 20 20 20 20   nArg<2 ){.     
1cd60 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
1cd70 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 0;.    }else i
1cd80 66 28 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b  f( strcmp(azArg[
1cd90 31 5d 2c 20 22 2d 22 29 3d 3d 30 20 29 7b 0a 20  1], "-")==0 ){. 
1cda0 20 20 20 20 20 73 71 6c 69 74 65 33 49 6f 54 72       sqlite3IoTr
1cdb0 61 63 65 20 3d 20 69 6f 74 72 61 63 65 50 72 69  ace = iotracePri
1cdc0 6e 74 66 3b 0a 20 20 20 20 20 20 69 6f 74 72 61  ntf;.      iotra
1cdd0 63 65 20 3d 20 73 74 64 6f 75 74 3b 0a 20 20 20  ce = stdout;.   
1cde0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6f   }else{.      io
1cdf0 74 72 61 63 65 20 3d 20 66 6f 70 65 6e 28 61 7a  trace = fopen(az
1ce00 41 72 67 5b 31 5d 2c 20 22 77 22 29 3b 0a 20 20  Arg[1], "w");.  
1ce10 20 20 20 20 69 66 28 20 69 6f 74 72 61 63 65 3d      if( iotrace=
1ce20 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74  =0 ){.        ut
1ce30 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
1ce40 2c 20 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74  , "Error: cannot
1ce50 20 6f 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c   open \"%s\"\n",
1ce60 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
1ce70 20 20 20 20 73 71 6c 69 74 65 33 49 6f 54 72 61      sqlite3IoTra
1ce80 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  ce = 0;.        
1ce90 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65  rc = 1;.      }e
1cea0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
1ceb0 69 74 65 33 49 6f 54 72 61 63 65 20 3d 20 69 6f  ite3IoTrace = io
1cec0 74 72 61 63 65 50 72 69 6e 74 66 3b 0a 20 20 20  tracePrintf;.   
1ced0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
1cee0 73 65 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  se.#endif.  if( 
1cef0 63 3d 3d 27 6c 27 20 26 26 20 6e 3e 3d 35 20 26  c=='l' && n>=5 &
1cf00 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
1cf10 30 5d 2c 20 22 6c 69 6d 69 74 73 22 2c 20 6e 29  0], "limits", n)
1cf20 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74 69  ==0 ){.    stati
1cf30 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 7b  c const struct {
1cf40 0a 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  .       const ch
1cf50 61 72 20 2a 7a 4c 69 6d 69 74 4e 61 6d 65 3b 20  ar *zLimitName; 
1cf60 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 61 20 6c    /* Name of a l
1cf70 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 69  imit */.       i
1cf80 6e 74 20 6c 69 6d 69 74 43 6f 64 65 3b 20 20 20  nt limitCode;   
1cf90 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
1cfa0 67 65 72 20 63 6f 64 65 20 66 6f 72 20 74 68 61  ger code for tha
1cfb0 74 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 7d  t limit */.    }
1cfc0 20 61 4c 69 6d 69 74 5b 5d 20 3d 20 7b 0a 20 20   aLimit[] = {.  
1cfd0 20 20 20 20 7b 20 22 6c 65 6e 67 74 68 22 2c 20      { "length", 
1cfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1cff0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
1d000 54 48 20 20 20 20 20 20 20 20 20 20 20 20 20 20  TH              
1d010 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
1d020 20 22 73 71 6c 5f 6c 65 6e 67 74 68 22 2c 20 20   "sql_length",  
1d030 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
1d040 5f 4c 49 4d 49 54 5f 53 51 4c 5f 4c 45 4e 47 54  _LIMIT_SQL_LENGT
1d050 48 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  H               
1d060 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 63 6f 6c   },.      { "col
1d070 75 6d 6e 22 2c 20 20 20 20 20 20 20 20 20 20 20  umn",           
1d080 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49       SQLITE_LIMI
1d090 54 5f 43 4f 4c 55 4d 4e 20 20 20 20 20 20 20 20  T_COLUMN        
1d0a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
1d0b0 20 20 20 20 20 7b 20 22 65 78 70 72 5f 64 65 70       { "expr_dep
1d0c0 74 68 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  th",            
1d0d0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 45 58 50  SQLITE_LIMIT_EXP
1d0e0 52 5f 44 45 50 54 48 20 20 20 20 20 20 20 20 20  R_DEPTH         
1d0f0 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
1d100 7b 20 22 63 6f 6d 70 6f 75 6e 64 5f 73 65 6c 65  { "compound_sele
1d110 63 74 22 2c 20 20 20 20 20 20 20 53 51 4c 49 54  ct",       SQLIT
1d120 45 5f 4c 49 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44  E_LIMIT_COMPOUND
1d130 5f 53 45 4c 45 43 54 20 20 20 20 20 20 20 20 20  _SELECT         
1d140 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 76 64    },.      { "vd
1d150 62 65 5f 6f 70 22 2c 20 20 20 20 20 20 20 20 20  be_op",         
1d160 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d        SQLITE_LIM
1d170 49 54 5f 56 44 42 45 5f 4f 50 20 20 20 20 20 20  IT_VDBE_OP      
1d180 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
1d190 20 20 20 20 20 20 7b 20 22 66 75 6e 63 74 69 6f        { "functio
1d1a0 6e 5f 61 72 67 22 2c 20 20 20 20 20 20 20 20 20  n_arg",         
1d1b0 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 46 55   SQLITE_LIMIT_FU
1d1c0 4e 43 54 49 4f 4e 5f 41 52 47 20 20 20 20 20 20  NCTION_ARG      
1d1d0 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
1d1e0 20 7b 20 22 61 74 74 61 63 68 65 64 22 2c 20 20   { "attached",  
1d1f0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
1d200 54 45 5f 4c 49 4d 49 54 5f 41 54 54 41 43 48 45  TE_LIMIT_ATTACHE
1d210 44 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  D               
1d220 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 6c     },.      { "l
1d230 69 6b 65 5f 70 61 74 74 65 72 6e 5f 6c 65 6e 67  ike_pattern_leng
1d240 74 68 22 2c 20 20 20 53 51 4c 49 54 45 5f 4c 49  th",   SQLITE_LI
1d250 4d 49 54 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e  MIT_LIKE_PATTERN
1d260 5f 4c 45 4e 47 54 48 20 20 20 20 20 20 20 7d 2c  _LENGTH       },
1d270 0a 20 20 20 20 20 20 7b 20 22 76 61 72 69 61 62  .      { "variab
1d280 6c 65 5f 6e 75 6d 62 65 72 22 2c 20 20 20 20 20  le_number",     
1d290 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56    SQLITE_LIMIT_V
1d2a0 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 20  ARIABLE_NUMBER  
1d2b0 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
1d2c0 20 20 7b 20 22 74 72 69 67 67 65 72 5f 64 65 70    { "trigger_dep
1d2d0 74 68 22 2c 20 20 20 20 20 20 20 20 20 53 51 4c  th",         SQL
1d2e0 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45  ITE_LIMIT_TRIGGE
1d2f0 52 5f 44 45 50 54 48 20 20 20 20 20 20 20 20 20  R_DEPTH         
1d300 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
1d310 77 6f 72 6b 65 72 5f 74 68 72 65 61 64 73 22 2c  worker_threads",
1d320 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c          SQLITE_L
1d330 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  IMIT_WORKER_THRE
1d340 41 44 53 20 20 20 20 20 20 20 20 20 20 20 20 7d  ADS            }
1d350 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74  ,.    };.    int
1d360 20 69 2c 20 6e 32 3b 0a 20 20 20 20 6f 70 65 6e   i, n2;.    open
1d370 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 69  _db(p, 0);.    i
1d380 66 28 20 6e 41 72 67 3d 3d 31 20 29 7b 0a 20 20  f( nArg==1 ){.  
1d390 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41      for(i=0; i<A
1d3a0 72 72 61 79 53 69 7a 65 28 61 4c 69 6d 69 74 29  rraySize(aLimit)
1d3b0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
1d3c0 70 72 69 6e 74 66 28 22 25 32 30 73 20 25 64 5c  printf("%20s %d\
1d3d0 6e 22 2c 20 61 4c 69 6d 69 74 5b 69 5d 2e 7a 4c  n", aLimit[i].zL
1d3e0 69 6d 69 74 4e 61 6d 65 2c 0a 20 20 20 20 20 20  imitName,.      
1d3f0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1d400 5f 6c 69 6d 69 74 28 70 2d 3e 64 62 2c 20 61 4c  _limit(p->db, aL
1d410 69 6d 69 74 5b 69 5d 2e 6c 69 6d 69 74 43 6f 64  imit[i].limitCod
1d420 65 2c 20 2d 31 29 29 3b 0a 20 20 20 20 20 20 7d  e, -1));.      }
1d430 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6e  .    }else if( n
1d440 41 72 67 3e 33 20 29 7b 0a 20 20 20 20 20 20 72  Arg>3 ){.      r
1d450 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
1d460 2c 20 22 55 73 61 67 65 3a 20 2e 6c 69 6d 69 74  , "Usage: .limit
1d470 20 4e 41 4d 45 20 3f 4e 45 57 2d 56 41 4c 55 45   NAME ?NEW-VALUE
1d480 3f 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20  ?\n");.      rc 
1d490 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  = 1;.      goto 
1d4a0 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
1d4b0 74 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  t;.    }else{.  
1d4c0 20 20 20 20 69 6e 74 20 69 4c 69 6d 69 74 20 3d      int iLimit =
1d4d0 20 2d 31 3b 0a 20 20 20 20 20 20 6e 32 20 3d 20   -1;.      n2 = 
1d4e0 73 74 72 6c 65 6e 33 30 28 61 7a 41 72 67 5b 31  strlen30(azArg[1
1d4f0 5d 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  ]);.      for(i=
1d500 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28 61  0; i<ArraySize(a
1d510 4c 69 6d 69 74 29 3b 20 69 2b 2b 29 7b 0a 20 20  Limit); i++){.  
1d520 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
1d530 33 5f 73 74 72 6e 69 63 6d 70 28 61 4c 69 6d 69  3_strnicmp(aLimi
1d540 74 5b 69 5d 2e 7a 4c 69 6d 69 74 4e 61 6d 65 2c  t[i].zLimitName,
1d550 20 61 7a 41 72 67 5b 31 5d 2c 20 6e 32 29 3d 3d   azArg[1], n2)==
1d560 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  0 ){.          i
1d570 66 28 20 69 4c 69 6d 69 74 3c 30 20 29 7b 0a 20  f( iLimit<0 ){. 
1d580 20 20 20 20 20 20 20 20 20 20 20 69 4c 69 6d 69             iLimi
1d590 74 20 3d 20 69 3b 0a 20 20 20 20 20 20 20 20 20  t = i;.         
1d5a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1d5b0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
1d5c0 73 74 64 65 72 72 2c 20 22 61 6d 62 69 67 75 6f  stderr, "ambiguo
1d5d0 75 73 20 6c 69 6d 69 74 3a 20 5c 22 25 73 5c 22  us limit: \"%s\"
1d5e0 5c 6e 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a  \n", azArg[1]);.
1d5f0 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
1d600 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   1;.            
1d610 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e  goto meta_comman
1d620 64 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 20 20  d_exit;.        
1d630 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
1d640 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
1d650 69 4c 69 6d 69 74 3c 30 20 29 7b 0a 20 20 20 20  iLimit<0 ){.    
1d660 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
1d670 73 74 64 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e  stderr, "unknown
1d680 20 6c 69 6d 69 74 3a 20 5c 22 25 73 5c 22 5c 6e   limit: \"%s\"\n
1d690 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
1d6a0 20 20 20 20 20 20 20 20 20 20 22 65 6e 74 65 72            "enter
1d6b0 20 5c 22 2e 6c 69 6d 69 74 73 5c 22 20 77 69 74   \".limits\" wit
1d6c0 68 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20 66  h no arguments f
1d6d0 6f 72 20 61 20 6c 69 73 74 2e 5c 6e 22 2c 0a 20  or a list.\n",. 
1d6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6f0 20 20 20 20 20 20 20 20 61 7a 41 72 67 5b 31 5d          azArg[1]
1d700 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
1d710 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  1;.        goto 
1d720 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
1d730 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
1d740 20 69 66 28 20 6e 41 72 67 3d 3d 33 20 29 7b 0a   if( nArg==3 ){.
1d750 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1d760 6c 69 6d 69 74 28 70 2d 3e 64 62 2c 20 61 4c 69  limit(p->db, aLi
1d770 6d 69 74 5b 69 4c 69 6d 69 74 5d 2e 6c 69 6d 69  mit[iLimit].limi
1d780 74 43 6f 64 65 2c 0a 20 20 20 20 20 20 20 20 20  tCode,.         
1d790 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
1d7a0 74 29 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61  t)integerValue(a
1d7b0 7a 41 72 67 5b 32 5d 29 29 3b 0a 20 20 20 20 20  zArg[2]));.     
1d7c0 20 7d 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28   }.      printf(
1d7d0 22 25 32 30 73 20 25 64 5c 6e 22 2c 20 61 4c 69  "%20s %d\n", aLi
1d7e0 6d 69 74 5b 69 4c 69 6d 69 74 5d 2e 7a 4c 69 6d  mit[iLimit].zLim
1d7f0 69 74 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  itName,.        
1d800 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d       sqlite3_lim
1d810 69 74 28 70 2d 3e 64 62 2c 20 61 4c 69 6d 69 74  it(p->db, aLimit
1d820 5b 69 4c 69 6d 69 74 5d 2e 6c 69 6d 69 74 43 6f  [iLimit].limitCo
1d830 64 65 2c 20 2d 31 29 29 3b 0a 20 20 20 20 7d 0a  de, -1));.    }.
1d840 20 20 7d 65 6c 73 65 0a 0a 23 69 66 6e 64 65 66    }else..#ifndef
1d850 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
1d860 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 69 66  D_EXTENSION.  if
1d870 28 20 63 3d 3d 27 6c 27 20 26 26 20 73 74 72 6e  ( c=='l' && strn
1d880 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6c  cmp(azArg[0], "l
1d890 6f 61 64 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  oad", n)==0 ){. 
1d8a0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
1d8b0 46 69 6c 65 2c 20 2a 7a 50 72 6f 63 3b 0a 20 20  File, *zProc;.  
1d8c0 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20    char *zErrMsg 
1d8d0 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 6e 41 72  = 0;.    if( nAr
1d8e0 67 3c 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77  g<2 ){.      raw
1d8f0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1d900 22 55 73 61 67 65 3a 20 2e 6c 6f 61 64 20 46 49  "Usage: .load FI
1d910 4c 45 20 3f 45 4e 54 52 59 50 4f 49 4e 54 3f 5c  LE ?ENTRYPOINT?\
1d920 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
1d930 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65  1;.      goto me
1d940 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
1d950 0a 20 20 20 20 7d 0a 20 20 20 20 7a 46 69 6c 65  .    }.    zFile
1d960 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20   = azArg[1];.   
1d970 20 7a 50 72 6f 63 20 3d 20 6e 41 72 67 3e 3d 33   zProc = nArg>=3
1d980 20 3f 20 61 7a 41 72 67 5b 32 5d 20 3a 20 30 3b   ? azArg[2] : 0;
1d990 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20  .    open_db(p, 
1d9a0 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  0);.    rc = sql
1d9b0 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  ite3_load_extens
1d9c0 69 6f 6e 28 70 2d 3e 64 62 2c 20 7a 46 69 6c 65  ion(p->db, zFile
1d9d0 2c 20 7a 50 72 6f 63 2c 20 26 7a 45 72 72 4d 73  , zProc, &zErrMs
1d9e0 67 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  g);.    if( rc!=
1d9f0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1da00 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
1da10 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25  tderr, "Error: %
1da20 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 29 3b 0a  s\n", zErrMsg);.
1da30 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
1da40 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  ee(zErrMsg);.   
1da50 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d     rc = 1;.    }
1da60 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
1da70 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 26 26  .  if( c=='l' &&
1da80 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
1da90 5d 2c 20 22 6c 6f 67 22 2c 20 6e 29 3d 3d 30 20  ], "log", n)==0 
1daa0 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 21  ){.    if( nArg!
1dab0 3d 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  =2 ){.      raw_
1dac0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1dad0 55 73 61 67 65 3a 20 2e 6c 6f 67 20 46 49 4c 45  Usage: .log FILE
1dae0 4e 41 4d 45 5c 6e 22 29 3b 0a 20 20 20 20 20 20  NAME\n");.      
1daf0 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  rc = 1;.    }els
1db00 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  e{.      const c
1db10 68 61 72 20 2a 7a 46 69 6c 65 20 3d 20 61 7a 41  har *zFile = azA
1db20 72 67 5b 31 5d 3b 0a 20 20 20 20 20 20 6f 75 74  rg[1];.      out
1db30 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73 65 28 70  put_file_close(p
1db40 2d 3e 70 4c 6f 67 29 3b 0a 20 20 20 20 20 20 70  ->pLog);.      p
1db50 2d 3e 70 4c 6f 67 20 3d 20 6f 75 74 70 75 74 5f  ->pLog = output_
1db60 66 69 6c 65 5f 6f 70 65 6e 28 7a 46 69 6c 65 29  file_open(zFile)
1db70 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
1db80 0a 20 20 69 66 28 20 63 3d 3d 27 6d 27 20 26 26  .  if( c=='m' &&
1db90 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
1dba0 5d 2c 20 22 6d 6f 64 65 22 2c 20 6e 29 3d 3d 30  ], "mode", n)==0
1dbb0 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   ){.    const ch
1dbc0 61 72 20 2a 7a 4d 6f 64 65 20 3d 20 6e 41 72 67  ar *zMode = nArg
1dbd0 3e 3d 32 20 3f 20 61 7a 41 72 67 5b 31 5d 20 3a  >=2 ? azArg[1] :
1dbe0 20 22 22 3b 0a 20 20 20 20 69 6e 74 20 6e 32 20   "";.    int n2 
1dbf0 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 4d  = (int)strlen(zM
1dc00 6f 64 65 29 3b 0a 20 20 20 20 69 6e 74 20 63 32  ode);.    int c2
1dc10 20 3d 20 7a 4d 6f 64 65 5b 30 5d 3b 0a 20 20 20   = zMode[0];.   
1dc20 20 69 66 28 20 63 32 3d 3d 27 6c 27 20 26 26 20   if( c2=='l' && 
1dc30 6e 32 3e 32 20 26 26 20 73 74 72 6e 63 6d 70 28  n2>2 && strncmp(
1dc40 61 7a 41 72 67 5b 31 5d 2c 22 6c 69 6e 65 73 22  azArg[1],"lines"
1dc50 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ,n2)==0 ){.     
1dc60 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f   p->mode = MODE_
1dc70 4c 69 6e 65 3b 0a 20 20 20 20 7d 65 6c 73 65 20  Line;.    }else 
1dc80 69 66 28 20 63 32 3d 3d 27 63 27 20 26 26 20 73  if( c2=='c' && s
1dc90 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c  trncmp(azArg[1],
1dca0 22 63 6f 6c 75 6d 6e 73 22 2c 6e 32 29 3d 3d 30  "columns",n2)==0
1dcb0 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64   ){.      p->mod
1dcc0 65 20 3d 20 4d 4f 44 45 5f 43 6f 6c 75 6d 6e 3b  e = MODE_Column;
1dcd0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63  .    }else if( c
1dce0 32 3d 3d 27 6c 27 20 26 26 20 6e 32 3e 32 20 26  2=='l' && n2>2 &
1dcf0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
1dd00 31 5d 2c 22 6c 69 73 74 22 2c 6e 32 29 3d 3d 30  1],"list",n2)==0
1dd10 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64   ){.      p->mod
1dd20 65 20 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a 20  e = MODE_List;. 
1dd30 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 32 3d     }else if( c2=
1dd40 3d 27 68 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='h' && strncmp(
1dd50 61 7a 41 72 67 5b 31 5d 2c 22 68 74 6d 6c 22 2c  azArg[1],"html",
1dd60 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  n2)==0 ){.      
1dd70 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 48  p->mode = MODE_H
1dd80 74 6d 6c 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  tml;.    }else i
1dd90 66 28 20 63 32 3d 3d 27 74 27 20 26 26 20 73 74  f( c2=='t' && st
1dda0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22  rncmp(azArg[1],"
1ddb0 74 63 6c 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20  tcl",n2)==0 ){. 
1ddc0 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d       p->mode = M
1ddd0 4f 44 45 5f 54 63 6c 3b 0a 20 20 20 20 20 20 73  ODE_Tcl;.      s
1dde0 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
1ddf0 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70  sizeof(p->colSep
1de00 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53  arator), p->colS
1de10 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 53 70  eparator, SEP_Sp
1de20 61 63 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  ace);.    }else 
1de30 69 66 28 20 63 32 3d 3d 27 63 27 20 26 26 20 73  if( c2=='c' && s
1de40 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c  trncmp(azArg[1],
1de50 22 63 73 76 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a  "csv",n2)==0 ){.
1de60 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20        p->mode = 
1de70 4d 4f 44 45 5f 43 73 76 3b 0a 20 20 20 20 20 20  MODE_Csv;.      
1de80 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
1de90 28 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65  (sizeof(p->colSe
1dea0 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c  parator), p->col
1deb0 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 43  Separator, SEP_C
1dec0 6f 6d 6d 61 29 3b 0a 20 20 20 20 20 20 73 71 6c  omma);.      sql
1ded0 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
1dee0 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72  zeof(p->rowSepar
1def0 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70  ator), p->rowSep
1df00 61 72 61 74 6f 72 2c 20 53 45 50 5f 43 72 4c 66  arator, SEP_CrLf
1df10 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
1df20 20 63 32 3d 3d 27 74 27 20 26 26 20 73 74 72 6e   c2=='t' && strn
1df30 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 74 61  cmp(azArg[1],"ta
1df40 62 73 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20 20  bs",n2)==0 ){.  
1df50 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f      p->mode = MO
1df60 44 45 5f 4c 69 73 74 3b 0a 20 20 20 20 20 20 73  DE_List;.      s
1df70 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
1df80 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53 65 70  sizeof(p->colSep
1df90 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53  arator), p->colS
1dfa0 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 54 61  eparator, SEP_Ta
1dfb0 62 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  b);.    }else if
1dfc0 28 20 63 32 3d 3d 27 69 27 20 26 26 20 73 74 72  ( c2=='i' && str
1dfd0 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 69  ncmp(azArg[1],"i
1dfe0 6e 73 65 72 74 22 2c 6e 32 29 3d 3d 30 20 29 7b  nsert",n2)==0 ){
1dff0 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d  .      p->mode =
1e000 20 4d 4f 44 45 5f 49 6e 73 65 72 74 3b 0a 20 20   MODE_Insert;.  
1e010 20 20 20 20 73 65 74 5f 74 61 62 6c 65 5f 6e 61      set_table_na
1e020 6d 65 28 70 2c 20 6e 41 72 67 3e 3d 33 20 3f 20  me(p, nArg>=3 ? 
1e030 61 7a 41 72 67 5b 32 5d 20 3a 20 22 74 61 62 6c  azArg[2] : "tabl
1e040 65 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  e");.    }else i
1e050 66 28 20 63 32 3d 3d 27 71 27 20 26 26 20 73 74  f( c2=='q' && st
1e060 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22  rncmp(azArg[1],"
1e070 71 75 6f 74 65 22 2c 6e 32 29 3d 3d 30 20 29 7b  quote",n2)==0 ){
1e080 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d  .      p->mode =
1e090 20 4d 4f 44 45 5f 51 75 6f 74 65 3b 0a 20 20 20   MODE_Quote;.   
1e0a0 20 7d 65 6c 73 65 20 69 66 28 20 63 32 3d 3d 27   }else if( c2=='
1e0b0 61 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  a' && strncmp(az
1e0c0 41 72 67 5b 31 5d 2c 22 61 73 63 69 69 22 2c 6e  Arg[1],"ascii",n
1e0d0 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70  2)==0 ){.      p
1e0e0 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 41 73  ->mode = MODE_As
1e0f0 63 69 69 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  cii;.      sqlit
1e100 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
1e110 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  of(p->colSeparat
1e120 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72  or), p->colSepar
1e130 61 74 6f 72 2c 20 53 45 50 5f 55 6e 69 74 29 3b  ator, SEP_Unit);
1e140 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
1e150 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70  nprintf(sizeof(p
1e160 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 2c  ->rowSeparator),
1e170 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72   p->rowSeparator
1e180 2c 20 53 45 50 5f 52 65 63 6f 72 64 29 3b 0a 20  , SEP_Record);. 
1e190 20 20 20 7d 65 6c 73 65 20 7b 0a 20 20 20 20 20     }else {.     
1e1a0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
1e1b0 72 72 2c 20 22 45 72 72 6f 72 3a 20 6d 6f 64 65  rr, "Error: mode
1e1c0 20 73 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f   should be one o
1e1d0 66 3a 20 22 0a 20 20 20 20 20 20 20 20 20 22 61  f: ".         "a
1e1e0 73 63 69 69 20 63 6f 6c 75 6d 6e 20 63 73 76 20  scii column csv 
1e1f0 68 74 6d 6c 20 69 6e 73 65 72 74 20 6c 69 6e 65  html insert line
1e200 20 6c 69 73 74 20 74 61 62 73 20 74 63 6c 5c 6e   list tabs tcl\n
1e210 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
1e220 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 63  ;.    }.    p->c
1e230 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a  Mode = p->mode;.
1e240 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
1e250 3d 3d 27 6e 27 20 26 26 20 73 74 72 6e 63 6d 70  =='n' && strncmp
1e260 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6e 75 6c 6c  (azArg[0], "null
1e270 76 61 6c 75 65 22 2c 20 6e 29 3d 3d 30 20 29 7b  value", n)==0 ){
1e280 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32  .    if( nArg==2
1e290 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1e2a0 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
1e2b0 66 28 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 2c  f(p->nullValue),
1e2c0 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 2c 0a 20   p->nullValue,. 
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2e0 20 20 20 20 20 20 22 25 2e 2a 73 22 2c 20 28 69        "%.*s", (i
1e2f0 6e 74 29 41 72 72 61 79 53 69 7a 65 28 70 2d 3e  nt)ArraySize(p->
1e300 6e 75 6c 6c 56 61 6c 75 65 29 2d 31 2c 20 61 7a  nullValue)-1, az
1e310 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c  Arg[1]);.    }el
1e320 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72  se{.      raw_pr
1e330 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
1e340 61 67 65 3a 20 2e 6e 75 6c 6c 76 61 6c 75 65 20  age: .nullvalue 
1e350 53 54 52 49 4e 47 5c 6e 22 29 3b 0a 20 20 20 20  STRING\n");.    
1e360 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a    rc = 1;.    }.
1e370 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
1e380 3d 3d 27 6f 27 20 26 26 20 73 74 72 6e 63 6d 70  =='o' && strncmp
1e390 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6f 70 65 6e  (azArg[0], "open
1e3a0 22 2c 20 6e 29 3d 3d 30 20 26 26 20 6e 3e 3d 32  ", n)==0 && n>=2
1e3b0 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   ){.    char *zN
1e3c0 65 77 46 69 6c 65 6e 61 6d 65 3b 20 20 2f 2a 20  ewFilename;  /* 
1e3d0 4e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  Name of the data
1e3e0 62 61 73 65 20 66 69 6c 65 20 74 6f 20 6f 70 65  base file to ope
1e3f0 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4e 61  n */.    int iNa
1e400 6d 65 20 3d 20 31 3b 20 20 20 20 20 20 20 2f 2a  me = 1;       /*
1e410 20 49 6e 64 65 78 20 69 6e 20 61 7a 41 72 67 5b   Index in azArg[
1e420 5d 20 6f 66 20 74 68 65 20 66 69 6c 65 6e 61 6d  ] of the filenam
1e430 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77  e */.    int new
1e440 46 6c 61 67 20 3d 20 30 3b 20 20 20 20 20 2f 2a  Flag = 0;     /*
1e450 20 54 72 75 65 20 74 6f 20 64 65 6c 65 74 65 20   True to delete 
1e460 66 69 6c 65 20 62 65 66 6f 72 65 20 6f 70 65 6e  file before open
1e470 69 6e 67 20 2a 2f 0a 20 20 20 20 2f 2a 20 43 6c  ing */.    /* Cl
1e480 6f 73 65 20 74 68 65 20 65 78 69 73 74 69 6e 67  ose the existing
1e490 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20   database */.   
1e4a0 20 73 65 73 73 69 6f 6e 5f 63 6c 6f 73 65 5f 61   session_close_a
1e4b0 6c 6c 28 70 29 3b 0a 20 20 20 20 73 71 6c 69 74  ll(p);.    sqlit
1e4c0 65 33 5f 63 6c 6f 73 65 28 70 2d 3e 64 62 29 3b  e3_close(p->db);
1e4d0 0a 20 20 20 20 70 2d 3e 64 62 20 3d 20 30 3b 0a  .    p->db = 0;.
1e4e0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
1e4f0 28 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f 73 65  (p->zFreeOnClose
1e500 29 3b 0a 20 20 20 20 70 2d 3e 7a 46 72 65 65 4f  );.    p->zFreeO
1e510 6e 43 6c 6f 73 65 20 3d 20 30 3b 0a 20 20 20 20  nClose = 0;.    
1e520 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 63 6f 6d  /* Check for com
1e530 6d 61 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d 65  mand-line argume
1e540 6e 74 73 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69  nts */.    for(i
1e550 4e 61 6d 65 3d 31 3b 20 69 4e 61 6d 65 3c 6e 41  Name=1; iName<nA
1e560 72 67 20 26 26 20 61 7a 41 72 67 5b 69 4e 61 6d  rg && azArg[iNam
1e570 65 5d 5b 30 5d 3d 3d 27 2d 27 3b 20 69 4e 61 6d  e][0]=='-'; iNam
1e580 65 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73  e++){.      cons
1e590 74 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a 41 72  t char *z = azAr
1e5a0 67 5b 69 4e 61 6d 65 5d 3b 0a 20 20 20 20 20 20  g[iName];.      
1e5b0 69 66 28 20 6f 70 74 69 6f 6e 4d 61 74 63 68 28  if( optionMatch(
1e5c0 7a 2c 22 6e 65 77 22 29 20 29 7b 0a 20 20 20 20  z,"new") ){.    
1e5d0 20 20 20 20 6e 65 77 46 6c 61 67 20 3d 20 31 3b      newFlag = 1;
1e5e0 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
1e5f0 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20   z[0]=='-' ){.  
1e600 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
1e610 66 28 73 74 64 65 72 72 2c 20 22 75 6e 6b 6e 6f  f(stderr, "unkno
1e620 77 6e 20 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e 22  wn option: %s\n"
1e630 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20 72 63  , z);.        rc
1e640 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f   = 1;.        go
1e650 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
1e660 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  exit;.      }.  
1e670 20 20 7d 0a 20 20 20 20 2f 2a 20 49 66 20 61 20    }.    /* If a 
1e680 66 69 6c 65 6e 61 6d 65 20 69 73 20 73 70 65 63  filename is spec
1e690 69 66 69 65 64 2c 20 74 72 79 20 74 6f 20 6f 70  ified, try to op
1e6a0 65 6e 20 69 74 20 66 69 72 73 74 20 2a 2f 0a 20  en it first */. 
1e6b0 20 20 20 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 20     zNewFilename 
1e6c0 3d 20 6e 41 72 67 3e 69 4e 61 6d 65 20 3f 20 73  = nArg>iName ? s
1e6d0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
1e6e0 25 73 22 2c 20 61 7a 41 72 67 5b 69 4e 61 6d 65  %s", azArg[iName
1e6f0 5d 29 20 3a 20 30 3b 0a 20 20 20 20 69 66 28 20  ]) : 0;.    if( 
1e700 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 20 29 7b 0a  zNewFilename ){.
1e710 20 20 20 20 20 20 69 66 28 20 6e 65 77 46 6c 61        if( newFla
1e720 67 20 29 20 73 68 65 6c 6c 44 65 6c 65 74 65 46  g ) shellDeleteF
1e730 69 6c 65 28 7a 4e 65 77 46 69 6c 65 6e 61 6d 65  ile(zNewFilename
1e740 29 3b 0a 20 20 20 20 20 20 70 2d 3e 7a 44 62 46  );.      p->zDbF
1e750 69 6c 65 6e 61 6d 65 20 3d 20 7a 4e 65 77 46 69  ilename = zNewFi
1e760 6c 65 6e 61 6d 65 3b 0a 20 20 20 20 20 20 6f 70  lename;.      op
1e770 65 6e 5f 64 62 28 70 2c 20 31 29 3b 0a 20 20 20  en_db(p, 1);.   
1e780 20 20 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20     if( p->db==0 
1e790 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
1e7a0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1e7b0 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70  Error: cannot op
1e7c0 65 6e 20 27 25 73 27 5c 6e 22 2c 20 7a 4e 65 77  en '%s'\n", zNew
1e7d0 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 20 20 20  Filename);.     
1e7e0 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
1e7f0 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 29 3b 0a 20  zNewFilename);. 
1e800 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1e810 20 20 20 20 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c      p->zFreeOnCl
1e820 6f 73 65 20 3d 20 7a 4e 65 77 46 69 6c 65 6e 61  ose = zNewFilena
1e830 6d 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  me;.      }.    
1e840 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 3d  }.    if( p->db=
1e850 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41  =0 ){.      /* A
1e860 73 20 61 20 66 61 6c 6c 2d 62 61 63 6b 20 6f 70  s a fall-back op
1e870 65 6e 20 61 20 54 45 4d 50 20 64 61 74 61 62 61  en a TEMP databa
1e880 73 65 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 7a  se */.      p->z
1e890 44 62 46 69 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a  DbFilename = 0;.
1e8a0 20 20 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c        open_db(p,
1e8b0 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c   0);.    }.  }el
1e8c0 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6f 27  se..  if( c=='o'
1e8d0 0a 20 20 20 26 26 20 28 73 74 72 6e 63 6d 70 28  .   && (strncmp(
1e8e0 61 7a 41 72 67 5b 30 5d 2c 20 22 6f 75 74 70 75  azArg[0], "outpu
1e8f0 74 22 2c 20 6e 29 3d 3d 30 20 7c 7c 20 73 74 72  t", n)==0 || str
1e900 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
1e910 6f 6e 63 65 22 2c 20 6e 29 3d 3d 30 29 0a 20 20  once", n)==0).  
1e920 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  ){.    const cha
1e930 72 20 2a 7a 46 69 6c 65 20 3d 20 6e 41 72 67 3e  r *zFile = nArg>
1e940 3d 32 20 3f 20 61 7a 41 72 67 5b 31 5d 20 3a 20  =2 ? azArg[1] : 
1e950 22 73 74 64 6f 75 74 22 3b 0a 20 20 20 20 69 66  "stdout";.    if
1e960 28 20 6e 41 72 67 3e 32 20 29 7b 0a 20 20 20 20  ( nArg>2 ){.    
1e970 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
1e980 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 25  derr, "Usage: .%
1e990 73 20 46 49 4c 45 5c 6e 22 2c 20 61 7a 41 72 67  s FILE\n", azArg
1e9a0 5b 30 5d 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  [0]);.      rc =
1e9b0 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
1e9c0 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
1e9d0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
1e9e0 6e 3e 31 20 26 26 20 73 74 72 6e 63 6d 70 28 61  n>1 && strncmp(a
1e9f0 7a 41 72 67 5b 30 5d 2c 20 22 6f 6e 63 65 22 2c  zArg[0], "once",
1ea00 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20   n)==0 ){.      
1ea10 69 66 28 20 6e 41 72 67 3c 32 20 29 7b 0a 20 20  if( nArg<2 ){.  
1ea20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
1ea30 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
1ea40 20 2e 6f 6e 63 65 20 46 49 4c 45 5c 6e 22 29 3b   .once FILE\n");
1ea50 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b  .        rc = 1;
1ea60 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65  .        goto me
1ea70 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b  ta_command_exit;
1ea80 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
1ea90 2d 3e 6f 75 74 43 6f 75 6e 74 20 3d 20 32 3b 0a  ->outCount = 2;.
1eaa0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1eab0 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 20 3d 20 30   p->outCount = 0
1eac0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6f 75 74 70  ;.    }.    outp
1ead0 75 74 5f 72 65 73 65 74 28 70 29 3b 0a 20 20 20  ut_reset(p);.   
1eae0 20 69 66 28 20 7a 46 69 6c 65 5b 30 5d 3d 3d 27   if( zFile[0]=='
1eaf0 7c 27 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c  |' ){.#ifdef SQL
1eb00 49 54 45 5f 4f 4d 49 54 5f 50 4f 50 45 4e 0a 20  ITE_OMIT_POPEN. 
1eb10 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
1eb20 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
1eb30 70 69 70 65 73 20 61 72 65 20 6e 6f 74 20 73 75  pipes are not su
1eb40 70 70 6f 72 74 65 64 20 69 6e 20 74 68 69 73 20  pported in this 
1eb50 4f 53 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  OS\n");.      rc
1eb60 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 2d 3e 6f   = 1;.      p->o
1eb70 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a 23 65 6c  ut = stdout;.#el
1eb80 73 65 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74 20  se.      p->out 
1eb90 3d 20 70 6f 70 65 6e 28 7a 46 69 6c 65 20 2b 20  = popen(zFile + 
1eba0 31 2c 20 22 77 22 29 3b 0a 20 20 20 20 20 20 69  1, "w");.      i
1ebb0 66 28 20 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a  f( p->out==0 ){.
1ebc0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
1ebd0 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f  ntf(stderr,"Erro
1ebe0 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 70  r: cannot open p
1ebf0 69 70 65 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a  ipe \"%s\"\n", z
1ec00 46 69 6c 65 20 2b 20 31 29 3b 0a 20 20 20 20 20  File + 1);.     
1ec10 20 20 20 70 2d 3e 6f 75 74 20 3d 20 73 74 64 6f     p->out = stdo
1ec20 75 74 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  ut;.        rc =
1ec30 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   1;.      }else{
1ec40 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1ec50 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
1ec60 28 70 2d 3e 6f 75 74 66 69 6c 65 29 2c 20 70 2d  (p->outfile), p-
1ec70 3e 6f 75 74 66 69 6c 65 2c 20 22 25 73 22 2c 20  >outfile, "%s", 
1ec80 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 7d 0a  zFile);.      }.
1ec90 23 65 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73 65  #endif.    }else
1eca0 7b 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d  {.      p->out =
1ecb0 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f 6f 70 65   output_file_ope
1ecc0 6e 28 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20 20  n(zFile);.      
1ecd0 69 66 28 20 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b  if( p->out==0 ){
1ece0 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 74 72  .        if( str
1ecf0 63 6d 70 28 7a 46 69 6c 65 2c 22 6f 66 66 22 29  cmp(zFile,"off")
1ed00 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
1ed10 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
1ed20 65 72 72 2c 22 45 72 72 6f 72 3a 20 63 61 6e 6e  err,"Error: cann
1ed30 6f 74 20 77 72 69 74 65 20 74 6f 20 5c 22 25 73  ot write to \"%s
1ed40 5c 22 5c 6e 22 2c 20 7a 46 69 6c 65 29 3b 0a 20  \"\n", zFile);. 
1ed50 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1ed60 20 70 2d 3e 6f 75 74 20 3d 20 73 74 64 6f 75 74   p->out = stdout
1ed70 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31  ;.        rc = 1
1ed80 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ;.      } else {
1ed90 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1eda0 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
1edb0 28 70 2d 3e 6f 75 74 66 69 6c 65 29 2c 20 70 2d  (p->outfile), p-
1edc0 3e 6f 75 74 66 69 6c 65 2c 20 22 25 73 22 2c 20  >outfile, "%s", 
1edd0 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 7d 0a  zFile);.      }.
1ede0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
1edf0 20 69 66 28 20 63 3d 3d 27 70 27 20 26 26 20 6e   if( c=='p' && n
1ee00 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61  >=3 && strncmp(a
1ee10 7a 41 72 67 5b 30 5d 2c 20 22 70 72 69 6e 74 22  zArg[0], "print"
1ee20 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  , n)==0 ){.    i
1ee30 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d  nt i;.    for(i=
1ee40 31 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  1; i<nArg; i++){
1ee50 0a 20 20 20 20 20 20 69 66 28 20 69 3e 31 20 29  .      if( i>1 )
1ee60 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
1ee70 75 74 2c 20 22 20 22 29 3b 0a 20 20 20 20 20 20  ut, " ");.      
1ee80 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
1ee90 75 74 2c 20 22 25 73 22 2c 20 61 7a 41 72 67 5b  ut, "%s", azArg[
1eea0 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  i]);.    }.    r
1eeb0 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
1eec0 2c 20 22 5c 6e 22 29 3b 0a 20 20 7d 65 6c 73 65  , "\n");.  }else
1eed0 0a 0a 20 20 69 66 28 20 63 3d 3d 27 70 27 20 26  ..  if( c=='p' &
1eee0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
1eef0 30 5d 2c 20 22 70 72 6f 6d 70 74 22 2c 20 6e 29  0], "prompt", n)
1ef00 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
1ef10 41 72 67 20 3e 3d 20 32 29 20 7b 0a 20 20 20 20  Arg >= 2) {.    
1ef20 20 20 73 74 72 6e 63 70 79 28 6d 61 69 6e 50 72    strncpy(mainPr
1ef30 6f 6d 70 74 2c 61 7a 41 72 67 5b 31 5d 2c 28 69  ompt,azArg[1],(i
1ef40 6e 74 29 41 72 72 61 79 53 69 7a 65 28 6d 61 69  nt)ArraySize(mai
1ef50 6e 50 72 6f 6d 70 74 29 2d 31 29 3b 0a 20 20 20  nPrompt)-1);.   
1ef60 20 7d 0a 20 20 20 20 69 66 28 20 6e 41 72 67 20   }.    if( nArg 
1ef70 3e 3d 20 33 29 20 7b 0a 20 20 20 20 20 20 73 74  >= 3) {.      st
1ef80 72 6e 63 70 79 28 63 6f 6e 74 69 6e 75 65 50 72  rncpy(continuePr
1ef90 6f 6d 70 74 2c 61 7a 41 72 67 5b 32 5d 2c 28 69  ompt,azArg[2],(i
1efa0 6e 74 29 41 72 72 61 79 53 69 7a 65 28 63 6f 6e  nt)ArraySize(con
1efb0 74 69 6e 75 65 50 72 6f 6d 70 74 29 2d 31 29 3b  tinuePrompt)-1);
1efc0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
1efd0 20 20 69 66 28 20 63 3d 3d 27 71 27 20 26 26 20    if( c=='q' && 
1efe0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
1eff0 2c 20 22 71 75 69 74 22 2c 20 6e 29 3d 3d 30 20  , "quit", n)==0 
1f000 29 7b 0a 20 20 20 20 72 63 20 3d 20 32 3b 0a 20  ){.    rc = 2;. 
1f010 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
1f020 3d 27 72 27 20 26 26 20 6e 3e 3d 33 20 26 26 20  ='r' && n>=3 && 
1f030 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
1f040 2c 20 22 72 65 61 64 22 2c 20 6e 29 3d 3d 30 20  , "read", n)==0 
1f050 29 7b 0a 20 20 20 20 46 49 4c 45 20 2a 61 6c 74  ){.    FILE *alt
1f060 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d  ;.    if( nArg!=
1f070 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  2 ){.      raw_p
1f080 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
1f090 73 61 67 65 3a 20 2e 72 65 61 64 20 46 49 4c 45  sage: .read FILE
1f0a0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
1f0b0 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
1f0c0 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
1f0d0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 6c 74 20  ;.    }.    alt 
1f0e0 3d 20 66 6f 70 65 6e 28 61 7a 41 72 67 5b 31 5d  = fopen(azArg[1]
1f0f0 2c 20 22 72 62 22 29 3b 0a 20 20 20 20 69 66 28  , "rb");.    if(
1f100 20 61 6c 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20   alt==0 ){.     
1f110 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
1f120 65 72 72 2c 22 45 72 72 6f 72 3a 20 63 61 6e 6e  err,"Error: cann
1f130 6f 74 20 6f 70 65 6e 20 5c 22 25 73 5c 22 5c 6e  ot open \"%s\"\n
1f140 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20  ", azArg[1]);.  
1f150 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
1f160 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
1f170 3d 20 70 72 6f 63 65 73 73 5f 69 6e 70 75 74 28  = process_input(
1f180 70 2c 20 61 6c 74 29 3b 0a 20 20 20 20 20 20 66  p, alt);.      f
1f190 63 6c 6f 73 65 28 61 6c 74 29 3b 0a 20 20 20 20  close(alt);.    
1f1a0 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
1f1b0 20 63 3d 3d 27 72 27 20 26 26 20 6e 3e 3d 33 20   c=='r' && n>=3 
1f1c0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
1f1d0 5b 30 5d 2c 20 22 72 65 73 74 6f 72 65 22 2c 20  [0], "restore", 
1f1e0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e  n)==0 ){.    con
1f1f0 73 74 20 63 68 61 72 20 2a 7a 53 72 63 46 69 6c  st char *zSrcFil
1f200 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  e;.    const cha
1f210 72 20 2a 7a 44 62 3b 0a 20 20 20 20 73 71 6c 69  r *zDb;.    sqli
1f220 74 65 33 20 2a 70 53 72 63 3b 0a 20 20 20 20 73  te3 *pSrc;.    s
1f230 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 70  qlite3_backup *p
1f240 42 61 63 6b 75 70 3b 0a 20 20 20 20 69 6e 74 20  Backup;.    int 
1f250 6e 54 69 6d 65 6f 75 74 20 3d 20 30 3b 0a 0a 20  nTimeout = 0;.. 
1f260 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29     if( nArg==2 )
1f270 7b 0a 20 20 20 20 20 20 7a 53 72 63 46 69 6c 65  {.      zSrcFile
1f280 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20   = azArg[1];.   
1f290 20 20 20 7a 44 62 20 3d 20 22 6d 61 69 6e 22 3b     zDb = "main";
1f2a0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6e  .    }else if( n
1f2b0 41 72 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20  Arg==3 ){.      
1f2c0 7a 53 72 63 46 69 6c 65 20 3d 20 61 7a 41 72 67  zSrcFile = azArg
1f2d0 5b 32 5d 3b 0a 20 20 20 20 20 20 7a 44 62 20 3d  [2];.      zDb =
1f2e0 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 7d   azArg[1];.    }
1f2f0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f  else{.      raw_
1f300 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1f310 55 73 61 67 65 3a 20 2e 72 65 73 74 6f 72 65 20  Usage: .restore 
1f320 3f 44 42 3f 20 46 49 4c 45 5c 6e 22 29 3b 0a 20  ?DB? FILE\n");. 
1f330 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
1f340 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d     goto meta_com
1f350 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d  mand_exit;.    }
1f360 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1f370 33 5f 6f 70 65 6e 28 7a 53 72 63 46 69 6c 65 2c  3_open(zSrcFile,
1f380 20 26 70 53 72 63 29 3b 0a 20 20 20 20 69 66 28   &pSrc);.    if(
1f390 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1f3a0 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
1f3b0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
1f3c0 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  or: cannot open 
1f3d0 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 53 72 63 46  \"%s\"\n", zSrcF
1f3e0 69 6c 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ile);.      sqli
1f3f0 74 65 33 5f 63 6c 6f 73 65 28 70 53 72 63 29 3b  te3_close(pSrc);
1f400 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b  .      return 1;
1f410 0a 20 20 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f  .    }.    open_
1f420 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 70 42  db(p, 0);.    pB
1f430 61 63 6b 75 70 20 3d 20 73 71 6c 69 74 65 33 5f  ackup = sqlite3_
1f440 62 61 63 6b 75 70 5f 69 6e 69 74 28 70 2d 3e 64  backup_init(p->d
1f450 62 2c 20 7a 44 62 2c 20 70 53 72 63 2c 20 22 6d  b, zDb, pSrc, "m
1f460 61 69 6e 22 29 3b 0a 20 20 20 20 69 66 28 20 70  ain");.    if( p
1f470 42 61 63 6b 75 70 3d 3d 30 20 29 7b 0a 20 20 20  Backup==0 ){.   
1f480 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
1f490 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25  tderr, "Error: %
1f4a0 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72  s\n", sqlite3_er
1f4b0 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20  rmsg(p->db));.  
1f4c0 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73      sqlite3_clos
1f4d0 65 28 70 53 72 63 29 3b 0a 20 20 20 20 20 20 72  e(pSrc);.      r
1f4e0 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
1f4f0 20 20 20 77 68 69 6c 65 28 20 28 72 63 20 3d 20     while( (rc = 
1f500 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 73  sqlite3_backup_s
1f510 74 65 70 28 70 42 61 63 6b 75 70 2c 31 30 30 29  tep(pBackup,100)
1f520 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  )==SQLITE_OK.   
1f530 20 20 20 20 20 20 20 7c 7c 20 72 63 3d 3d 53 51         || rc==SQ
1f540 4c 49 54 45 5f 42 55 53 59 20 20 29 7b 0a 20 20  LITE_BUSY  ){.  
1f550 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1f560 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
1f570 20 20 20 69 66 28 20 6e 54 69 6d 65 6f 75 74 2b     if( nTimeout+
1f580 2b 20 3e 3d 20 33 20 29 20 62 72 65 61 6b 3b 0a  + >= 3 ) break;.
1f590 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1f5a0 73 6c 65 65 70 28 31 30 30 29 3b 0a 20 20 20 20  sleep(100);.    
1f5b0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
1f5c0 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e  lite3_backup_fin
1f5d0 69 73 68 28 70 42 61 63 6b 75 70 29 3b 0a 20 20  ish(pBackup);.  
1f5e0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1f5f0 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 72  _DONE ){.      r
1f600 63 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  c = 0;.    }else
1f610 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1f620 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  BUSY || rc==SQLI
1f630 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20  TE_LOCKED ){.   
1f640 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
1f650 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 73 6f  derr, "Error: so
1f660 75 72 63 65 20 64 61 74 61 62 61 73 65 20 69 73  urce database is
1f670 20 62 75 73 79 5c 6e 22 29 3b 0a 20 20 20 20 20   busy\n");.     
1f680 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c   rc = 1;.    }el
1f690 73 65 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70  se{.      utf8_p
1f6a0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
1f6b0 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c  rror: %s\n", sql
1f6c0 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64  ite3_errmsg(p->d
1f6d0 62 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  b));.      rc = 
1f6e0 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  1;.    }.    sql
1f6f0 69 74 65 33 5f 63 6c 6f 73 65 28 70 53 72 63 29  ite3_close(pSrc)
1f700 3b 0a 20 20 7d 65 6c 73 65 0a 0a 0a 20 20 69 66  ;.  }else...  if
1f710 28 20 63 3d 3d 27 73 27 20 26 26 20 73 74 72 6e  ( c=='s' && strn
1f720 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73  cmp(azArg[0], "s
1f730 63 61 6e 73 74 61 74 73 22 2c 20 6e 29 3d 3d 30  canstats", n)==0
1f740 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   ){.    if( nArg
1f750 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  ==2 ){.      p->
1f760 73 63 61 6e 73 74 61 74 73 4f 6e 20 3d 20 62 6f  scanstatsOn = bo
1f770 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67  oleanValue(azArg
1f780 5b 31 5d 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  [1]);.#ifndef SQ
1f790 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
1f7a0 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20  _SCANSTATUS.    
1f7b0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
1f7c0 65 72 72 2c 20 22 57 61 72 6e 69 6e 67 3a 20 2e  err, "Warning: .
1f7d0 73 63 61 6e 73 74 61 74 73 20 6e 6f 74 20 61 76  scanstats not av
1f7e0 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 69 73 20  ailable in this 
1f7f0 62 75 69 6c 64 2e 5c 6e 22 29 3b 0a 23 65 6e 64  build.\n");.#end
1f800 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  if.    }else{.  
1f810 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
1f820 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
1f830 73 63 61 6e 73 74 61 74 73 20 6f 6e 7c 6f 66 66  scanstats on|off
1f840 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
1f850 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
1f860 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20  e..  if( c=='s' 
1f870 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
1f880 5b 30 5d 2c 20 22 73 63 68 65 6d 61 22 2c 20 6e  [0], "schema", n
1f890 29 3d 3d 30 20 29 7b 0a 20 20 20 20 53 68 65 6c  )==0 ){.    Shel
1f8a0 6c 53 74 61 74 65 20 64 61 74 61 3b 0a 20 20 20  lState data;.   
1f8b0 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d   char *zErrMsg =
1f8c0 20 30 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28   0;.    open_db(
1f8d0 70 2c 20 30 29 3b 0a 20 20 20 20 6d 65 6d 63 70  p, 0);.    memcp
1f8e0 79 28 26 64 61 74 61 2c 20 70 2c 20 73 69 7a 65  y(&data, p, size
1f8f0 6f 66 28 64 61 74 61 29 29 3b 0a 20 20 20 20 64  of(data));.    d
1f900 61 74 61 2e 73 68 6f 77 48 65 61 64 65 72 20 3d  ata.showHeader =
1f910 20 30 3b 0a 20 20 20 20 64 61 74 61 2e 63 4d 6f   0;.    data.cMo
1f920 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d  de = data.mode =
1f930 20 4d 4f 44 45 5f 53 65 6d 69 3b 0a 20 20 20 20   MODE_Semi;.    
1f940 69 66 28 20 6e 41 72 67 3e 3d 32 20 26 26 20 6f  if( nArg>=2 && o
1f950 70 74 69 6f 6e 4d 61 74 63 68 28 61 7a 41 72 67  ptionMatch(azArg
1f960 5b 31 5d 2c 20 22 69 6e 64 65 6e 74 22 29 20 29  [1], "indent") )
1f970 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 63 4d 6f  {.      data.cMo
1f980 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d  de = data.mode =
1f990 20 4d 4f 44 45 5f 50 72 65 74 74 79 3b 0a 20 20   MODE_Pretty;.  
1f9a0 20 20 20 20 6e 41 72 67 2d 2d 3b 0a 20 20 20 20      nArg--;.    
1f9b0 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 20    if( nArg==2 ) 
1f9c0 61 7a 41 72 67 5b 31 5d 20 3d 20 61 7a 41 72 67  azArg[1] = azArg
1f9d0 5b 32 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  [2];.    }.    i
1f9e0 66 28 20 6e 41 72 67 3d 3d 32 20 26 26 20 61 7a  f( nArg==2 && az
1f9f0 41 72 67 5b 31 5d 5b 30 5d 21 3d 27 2d 27 20 29  Arg[1][0]!='-' )
1fa00 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20  {.      int i;. 
1fa10 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 61 7a       for(i=0; az
1fa20 41 72 67 5b 31 5d 5b 69 5d 3b 20 69 2b 2b 29 20  Arg[1][i]; i++) 
1fa30 61 7a 41 72 67 5b 31 5d 5b 69 5d 20 3d 20 54 6f  azArg[1][i] = To
1fa40 4c 6f 77 65 72 28 61 7a 41 72 67 5b 31 5d 5b 69  Lower(azArg[1][i
1fa50 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 74  ]);.      if( st
1fa60 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 73  rcmp(azArg[1],"s
1fa70 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 29 3d 3d  qlite_master")==
1fa80 30 20 29 7b 0a 20 20 20 20 20 20 20 20 63 68 61  0 ){.        cha
1fa90 72 20 2a 6e 65 77 5f 61 72 67 76 5b 32 5d 2c 20  r *new_argv[2], 
1faa0 2a 6e 65 77 5f 63 6f 6c 76 5b 32 5d 3b 0a 20 20  *new_colv[2];.  
1fab0 20 20 20 20 20 20 6e 65 77 5f 61 72 67 76 5b 30        new_argv[0
1fac0 5d 20 3d 20 22 43 52 45 41 54 45 20 54 41 42 4c  ] = "CREATE TABL
1fad0 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  E sqlite_master 
1fae0 28 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20  (\n".           
1faf0 20 20 20 20 20 20 20 20 20 20 20 22 20 20 74 79             "  ty
1fb00 70 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20  pe text,\n".    
1fb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb20 20 20 22 20 20 6e 61 6d 65 20 74 65 78 74 2c 5c    "  name text,\
1fb30 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n".             
1fb40 20 20 20 20 20 20 20 20 20 22 20 20 74 62 6c 5f           "  tbl_
1fb50 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20  name text,\n".  
1fb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb70 20 20 20 20 22 20 20 72 6f 6f 74 70 61 67 65 20      "  rootpage 
1fb80 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20 20 20  integer,\n".    
1fb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fba0 20 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e 22    "  sql text\n"
1fbb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fbc0 20 20 20 20 20 20 20 22 29 22 3b 0a 20 20 20 20         ")";.    
1fbd0 20 20 20 20 6e 65 77 5f 61 72 67 76 5b 31 5d 20      new_argv[1] 
1fbe0 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 6e 65 77  = 0;.        new
1fbf0 5f 63 6f 6c 76 5b 30 5d 20 3d 20 22 73 71 6c 22  _colv[0] = "sql"
1fc00 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 63 6f  ;.        new_co
1fc10 6c 76 5b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20  lv[1] = 0;.     
1fc20 20 20 20 63 61 6c 6c 62 61 63 6b 28 26 64 61 74     callback(&dat
1fc30 61 2c 20 31 2c 20 6e 65 77 5f 61 72 67 76 2c 20  a, 1, new_argv, 
1fc40 6e 65 77 5f 63 6f 6c 76 29 3b 0a 20 20 20 20 20  new_colv);.     
1fc50 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
1fc60 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  K;.      }else i
1fc70 66 28 20 73 74 72 63 6d 70 28 61 7a 41 72 67 5b  f( strcmp(azArg[
1fc80 31 5d 2c 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  1],"sqlite_temp_
1fc90 6d 61 73 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20  master")==0 ){. 
1fca0 20 20 20 20 20 20 20 63 68 61 72 20 2a 6e 65 77         char *new
1fcb0 5f 61 72 67 76 5b 32 5d 2c 20 2a 6e 65 77 5f 63  _argv[2], *new_c
1fcc0 6f 6c 76 5b 32 5d 3b 0a 20 20 20 20 20 20 20 20  olv[2];.        
1fcd0 6e 65 77 5f 61 72 67 76 5b 30 5d 20 3d 20 22 43  new_argv[0] = "C
1fce0 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
1fcf0 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
1fd00 74 65 72 20 28 5c 6e 22 0a 20 20 20 20 20 20 20  ter (\n".       
1fd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1fd20 20 20 74 79 70 65 20 74 65 78 74 2c 5c 6e 22 0a    type text,\n".
1fd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd40 20 20 20 20 20 20 22 20 20 6e 61 6d 65 20 74 65        "  name te
1fd50 78 74 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20 20  xt,\n".         
1fd60 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20               "  
1fd70 74 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e  tbl_name text,\n
1fd80 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
1fd90 20 20 20 20 20 20 20 20 22 20 20 72 6f 6f 74 70          "  rootp
1fda0 61 67 65 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a  age integer,\n".
1fdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdc0 20 20 20 20 20 20 22 20 20 73 71 6c 20 74 65 78        "  sql tex
1fdd0 74 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20  t\n".           
1fde0 20 20 20 20 20 20 20 20 20 20 20 22 29 22 3b 0a             ")";.
1fdf0 20 20 20 20 20 20 20 20 6e 65 77 5f 61 72 67 76          new_argv
1fe00 5b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  [1] = 0;.       
1fe10 20 6e 65 77 5f 63 6f 6c 76 5b 30 5d 20 3d 20 22   new_colv[0] = "
1fe20 73 71 6c 22 3b 0a 20 20 20 20 20 20 20 20 6e 65  sql";.        ne
1fe30 77 5f 63 6f 6c 76 5b 31 5d 20 3d 20 30 3b 0a 20  w_colv[1] = 0;. 
1fe40 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 28         callback(
1fe50 26 64 61 74 61 2c 20 31 2c 20 6e 65 77 5f 61 72  &data, 1, new_ar
1fe60 67 76 2c 20 6e 65 77 5f 63 6f 6c 76 29 3b 0a 20  gv, new_colv);. 
1fe70 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
1fe80 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c  TE_OK;.      }el
1fe90 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 53 68 65  se{.        zShe
1fea0 6c 6c 53 74 61 74 69 63 20 3d 20 61 7a 41 72 67  llStatic = azArg
1feb0 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 72 63 20  [1];.        rc 
1fec0 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70  = sqlite3_exec(p
1fed0 2d 3e 64 62 2c 0a 20 20 20 20 20 20 20 20 20 20  ->db,.          
1fee0 22 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d  "SELECT sql FROM
1fef0 20 22 0a 20 20 20 20 20 20 20 20 20 20 22 20 20   ".          "  
1ff00 28 53 45 4c 45 43 54 20 73 71 6c 20 73 71 6c 2c  (SELECT sql sql,
1ff10 20 74 79 70 65 20 74 79 70 65 2c 20 74 62 6c 5f   type type, tbl_
1ff20 6e 61 6d 65 20 74 62 6c 5f 6e 61 6d 65 2c 20 6e  name tbl_name, n
1ff30 61 6d 65 20 6e 61 6d 65 2c 20 72 6f 77 69 64 20  ame name, rowid 
1ff40 78 22 0a 20 20 20 20 20 20 20 20 20 20 22 20 20  x".          "  
1ff50 20 20 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d     FROM sqlite_m
1ff60 61 73 74 65 72 20 55 4e 49 4f 4e 20 41 4c 4c 22  aster UNION ALL"
1ff70 0a 20 20 20 20 20 20 20 20 20 20 22 20 20 20 53  .          "   S
1ff80 45 4c 45 43 54 20 73 71 6c 2c 20 74 79 70 65 2c  ELECT sql, type,
1ff90 20 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c   tbl_name, name,
1ffa0 20 72 6f 77 69 64 20 46 52 4f 4d 20 73 71 6c 69   rowid FROM sqli
1ffb0 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29 20  te_temp_master) 
1ffc0 22 0a 20 20 20 20 20 20 20 20 20 20 22 57 48 45  ".          "WHE
1ffd0 52 45 20 6c 6f 77 65 72 28 74 62 6c 5f 6e 61 6d  RE lower(tbl_nam
1ffe0 65 29 20 4c 49 4b 45 20 73 68 65 6c 6c 73 74 61  e) LIKE shellsta
1fff0 74 69 63 28 29 22 0a 20 20 20 20 20 20 20 20 20  tic()".         
20000 20 22 20 20 41 4e 44 20 74 79 70 65 21 3d 27 6d   "  AND type!='m
20010 65 74 61 27 20 41 4e 44 20 73 71 6c 20 4e 4f 54  eta' AND sql NOT
20020 4e 55 4c 4c 20 22 0a 20 20 20 20 20 20 20 20 20  NULL ".         
20030 20 22 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64   "ORDER BY rowid
20040 22 2c 0a 20 20 20 20 20 20 20 20 20 20 63 61 6c  ",.          cal
20050 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c 20 26 7a  lback, &data, &z
20060 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20  ErrMsg);.       
20070 20 7a 53 68 65 6c 6c 53 74 61 74 69 63 20 3d 20   zShellStatic = 
20080 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
20090 65 6c 73 65 20 69 66 28 20 6e 41 72 67 3d 3d 31  else if( nArg==1
200a0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   ){.      rc = s
200b0 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64  qlite3_exec(p->d
200c0 62 2c 0a 20 20 20 20 20 20 20 20 20 22 53 45 4c  b,.         "SEL
200d0 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 22 0a 20  ECT sql FROM ". 
200e0 20 20 20 20 20 20 20 20 22 20 20 28 53 45 4c 45          "  (SELE
200f0 43 54 20 73 71 6c 20 73 71 6c 2c 20 74 79 70 65  CT sql sql, type
20100 20 74 79 70 65 2c 20 74 62 6c 5f 6e 61 6d 65 20   type, tbl_name 
20110 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 20 6e  tbl_name, name n
20120 61 6d 65 2c 20 72 6f 77 69 64 20 78 22 0a 20 20  ame, rowid x".  
20130 20 20 20 20 20 20 20 22 20 20 20 20 20 46 52 4f         "     FRO
20140 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
20150 55 4e 49 4f 4e 20 41 4c 4c 22 0a 20 20 20 20 20  UNION ALL".     
20160 20 20 20 20 22 20 20 20 53 45 4c 45 43 54 20 73      "   SELECT s
20170 71 6c 2c 20 74 79 70 65 2c 20 74 62 6c 5f 6e 61  ql, type, tbl_na
20180 6d 65 2c 20 6e 61 6d 65 2c 20 72 6f 77 69 64 20  me, name, rowid 
20190 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
201a0 5f 6d 61 73 74 65 72 29 20 22 0a 20 20 20 20 20  _master) ".     
201b0 20 20 20 20 22 57 48 45 52 45 20 74 79 70 65 21      "WHERE type!
201c0 3d 27 6d 65 74 61 27 20 41 4e 44 20 73 71 6c 20  ='meta' AND sql 
201d0 4e 4f 54 4e 55 4c 4c 20 41 4e 44 20 6e 61 6d 65  NOTNULL AND name
201e0 20 4e 4f 54 20 4c 49 4b 45 20 27 73 71 6c 69 74   NOT LIKE 'sqlit
201f0 65 5f 25 27 20 22 0a 20 20 20 20 20 20 20 20 20  e_%' ".         
20200 22 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22  "ORDER BY rowid"
20210 2c 0a 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62  ,.         callb
20220 61 63 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45 72  ack, &data, &zEr
20230 72 4d 73 67 0a 20 20 20 20 20 20 29 3b 0a 20 20  rMsg.      );.  
20240 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
20250 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
20260 2c 20 22 55 73 61 67 65 3a 20 2e 73 63 68 65 6d  , "Usage: .schem
20270 61 20 3f 2d 2d 69 6e 64 65 6e 74 3f 20 3f 4c 49  a ?--indent? ?LI
20280 4b 45 2d 50 41 54 54 45 52 4e 3f 5c 6e 22 29 3b  KE-PATTERN?\n");
20290 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
202a0 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
202b0 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
202c0 20 7d 0a 20 20 20 20 69 66 28 20 7a 45 72 72 4d   }.    if( zErrM
202d0 73 67 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  sg ){.      utf8
202e0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
202f0 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45  Error: %s\n", zE
20300 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 73 71  rrMsg);.      sq
20310 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d  lite3_free(zErrM
20320 73 67 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  sg);.      rc = 
20330 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  1;.    }else if(
20340 20 72 63 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b   rc != SQLITE_OK
20350 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
20360 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72  intf(stderr,"Err
20370 6f 72 3a 20 71 75 65 72 79 69 6e 67 20 73 63 68  or: querying sch
20380 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 5c  ema information\
20390 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
203a0 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
203b0 20 20 20 20 72 63 20 3d 20 30 3b 0a 20 20 20 20      rc = 0;.    
203c0 7d 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 20 64  }.  }else..#if d
203d0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
203e0 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64 28  BUG) && defined(
203f0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45  SQLITE_ENABLE_SE
20400 4c 45 43 54 54 52 41 43 45 29 0a 20 20 69 66 28  LECTTRACE).  if(
20410 20 63 3d 3d 27 73 27 20 26 26 20 6e 3d 3d 31 31   c=='s' && n==11
20420 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
20430 67 5b 30 5d 2c 20 22 73 65 6c 65 63 74 74 72 61  g[0], "selecttra
20440 63 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  ce", n)==0 ){.  
20450 20 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 54    sqlite3SelectT
20460 72 61 63 65 20 3d 20 69 6e 74 65 67 65 72 56 61  race = integerVa
20470 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  lue(azArg[1]);. 
20480 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 23   }else.#endif..#
20490 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
204a0 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e  E_ENABLE_SESSION
204b0 29 0a 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26  ).  if( c=='s' &
204c0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
204d0 30 5d 2c 22 73 65 73 73 69 6f 6e 22 2c 6e 29 3d  0],"session",n)=
204e0 3d 30 20 26 26 20 6e 3e 3d 33 20 29 7b 0a 20 20  =0 && n>=3 ){.  
204f0 20 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20 2a 70    OpenSession *p
20500 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e 61 53  Session = &p->aS
20510 65 73 73 69 6f 6e 5b 30 5d 3b 0a 20 20 20 20 63  ession[0];.    c
20520 68 61 72 20 2a 2a 61 7a 43 6d 64 20 3d 20 26 61  har **azCmd = &a
20530 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 69 6e 74  zArg[1];.    int
20540 20 69 53 65 73 20 3d 20 30 3b 0a 20 20 20 20 69   iSes = 0;.    i
20550 6e 74 20 6e 43 6d 64 20 3d 20 6e 41 72 67 20 2d  nt nCmd = nArg -
20560 20 31 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   1;.    int i;. 
20570 20 20 20 69 66 28 20 6e 41 72 67 3c 3d 31 20 29     if( nArg<=1 )
20580 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79   goto session_sy
20590 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20  ntax_error;.    
205a0 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20  open_db(p, 0);. 
205b0 20 20 20 69 66 28 20 6e 41 72 67 3e 3d 33 20 29     if( nArg>=3 )
205c0 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 53 65 73  {.      for(iSes
205d0 3d 30 3b 20 69 53 65 73 3c 70 2d 3e 6e 53 65 73  =0; iSes<p->nSes
205e0 73 69 6f 6e 3b 20 69 53 65 73 2b 2b 29 7b 0a 20  sion; iSes++){. 
205f0 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d         if( strcm
20600 70 28 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 69 53  p(p->aSession[iS
20610 65 73 5d 2e 7a 4e 61 6d 65 2c 20 61 7a 41 72 67  es].zName, azArg
20620 5b 31 5d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  [1])==0 ) break;
20630 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
20640 66 28 20 69 53 65 73 3c 70 2d 3e 6e 53 65 73 73  f( iSes<p->nSess
20650 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ion ){.        p
20660 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e 61 53  Session = &p->aS
20670 65 73 73 69 6f 6e 5b 69 53 65 73 5d 3b 0a 20 20  ession[iSes];.  
20680 20 20 20 20 20 20 61 7a 43 6d 64 2b 2b 3b 0a 20        azCmd++;. 
20690 20 20 20 20 20 20 20 6e 43 6d 64 2d 2d 3b 0a 20         nCmd--;. 
206a0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
206b0 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d 20 26      pSession = &
206c0 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 30 5d 3b 0a  p->aSession[0];.
206d0 20 20 20 20 20 20 20 20 69 53 65 73 20 3d 20 30          iSes = 0
206e0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
206f0 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e  .    /* .session
20700 20 61 74 74 61 63 68 20 54 41 42 4c 45 0a 20 20   attach TABLE.  
20710 20 20 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    ** Invoke the 
20720 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 61  sqlite3session_a
20730 74 74 61 63 68 28 29 20 69 6e 74 65 72 66 61 63  ttach() interfac
20740 65 20 74 6f 20 61 74 74 61 63 68 20 61 20 70 61  e to attach a pa
20750 72 74 69 63 75 6c 61 72 0a 20 20 20 20 2a 2a 20  rticular.    ** 
20760 74 61 62 6c 65 20 73 6f 20 74 68 61 74 20 69 74  table so that it
20770 20 69 73 20 6e 65 76 65 72 20 66 69 6c 74 65 72   is never filter
20780 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ed..    */.    i
20790 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b  f( strcmp(azCmd[
207a0 30 5d 2c 22 61 74 74 61 63 68 22 29 3d 3d 30 20  0],"attach")==0 
207b0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d  ){.      if( nCm
207c0 64 21 3d 32 20 29 20 67 6f 74 6f 20 73 65 73 73  d!=2 ) goto sess
207d0 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72  ion_syntax_error
207e0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 53 65 73  ;.      if( pSes
207f0 73 69 6f 6e 2d 3e 70 3d 3d 30 20 29 7b 0a 20 20  sion->p==0 ){.  
20800 20 20 20 20 20 20 73 65 73 73 69 6f 6e 5f 6e 6f        session_no
20810 74 5f 6f 70 65 6e 3a 0a 20 20 20 20 20 20 20 20  t_open:.        
20820 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
20830 72 2c 20 22 45 52 52 4f 52 3a 20 4e 6f 20 73 65  r, "ERROR: No se
20840 73 73 69 6f 6e 73 20 61 72 65 20 6f 70 65 6e 5c  ssions are open\
20850 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  n");.      }else
20860 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
20870 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 61 74  qlite3session_at
20880 74 61 63 68 28 70 53 65 73 73 69 6f 6e 2d 3e 70  tach(pSession->p
20890 2c 20 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20 20 20  , azCmd[1]);.   
208a0 20 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20       if( rc ){. 
208b0 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69           raw_pri
208c0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 52 52  ntf(stderr, "ERR
208d0 4f 52 3a 20 73 71 6c 69 74 65 33 73 65 73 73 69  OR: sqlite3sessi
208e0 6f 6e 5f 61 74 74 61 63 68 28 29 20 72 65 74 75  on_attach() retu
208f0 72 6e 73 20 25 64 5c 6e 22 2c 20 72 63 29 3b 0a  rns %d\n", rc);.
20900 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 30            rc = 0
20910 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
20920 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20    }.    }else.. 
20930 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 63     /* .session c
20940 68 61 6e 67 65 73 65 74 20 46 49 4c 45 0a 20 20  hangeset FILE.  
20950 20 20 2a 2a 20 2e 73 65 73 73 69 6f 6e 20 70 61    ** .session pa
20960 74 63 68 73 65 74 20 46 49 4c 45 0a 20 20 20 20  tchset FILE.    
20970 2a 2a 20 57 72 69 74 65 20 61 20 63 68 61 6e 67  ** Write a chang
20980 65 73 65 74 20 6f 72 20 70 61 74 63 68 73 65 74  eset or patchset
20990 20 69 6e 74 6f 20 61 20 66 69 6c 65 2e 20 20 54   into a file.  T
209a0 68 65 20 66 69 6c 65 20 69 73 20 6f 76 65 72 77  he file is overw
209b0 72 69 74 74 65 6e 2e 0a 20 20 20 20 2a 2f 0a 20  ritten..    */. 
209c0 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a     if( strcmp(az
209d0 43 6d 64 5b 30 5d 2c 22 63 68 61 6e 67 65 73 65  Cmd[0],"changese
209e0 74 22 29 3d 3d 30 20 7c 7c 20 73 74 72 63 6d 70  t")==0 || strcmp
209f0 28 61 7a 43 6d 64 5b 30 5d 2c 22 70 61 74 63 68  (azCmd[0],"patch
20a00 73 65 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  set")==0 ){.    
20a10 20 20 46 49 4c 45 20 2a 6f 75 74 20 3d 20 30 3b    FILE *out = 0;
20a20 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 21  .      if( nCmd!
20a30 3d 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f  =2 ) goto sessio
20a40 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a  n_syntax_error;.
20a50 20 20 20 20 20 20 69 66 28 20 70 53 65 73 73 69        if( pSessi
20a60 6f 6e 2d 3e 70 3d 3d 30 20 29 20 67 6f 74 6f 20  on->p==0 ) goto 
20a70 73 65 73 73 69 6f 6e 5f 6e 6f 74 5f 6f 70 65 6e  session_not_open
20a80 3b 0a 20 20 20 20 20 20 6f 75 74 20 3d 20 66 6f  ;.      out = fo
20a90 70 65 6e 28 61 7a 43 6d 64 5b 31 5d 2c 20 22 77  pen(azCmd[1], "w
20aa0 62 22 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f  b");.      if( o
20ab0 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ut==0 ){.       
20ac0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
20ad0 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 63 61 6e  err, "ERROR: can
20ae0 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73 5c 22 20  not open \"%s\" 
20af0 66 6f 72 20 77 72 69 74 69 6e 67 5c 6e 22 2c 20  for writing\n", 
20b00 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20 20 20 20 20  azCmd[1]);.     
20b10 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
20b20 69 6e 74 20 73 7a 43 68 6e 67 3b 0a 20 20 20 20  int szChng;.    
20b30 20 20 20 20 76 6f 69 64 20 2a 70 43 68 6e 67 3b      void *pChng;
20b40 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 7a 43  .        if( azC
20b50 6d 64 5b 30 5d 5b 30 5d 3d 3d 27 63 27 20 29 7b  md[0][0]=='c' ){
20b60 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
20b70 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 63  sqlite3session_c
20b80 68 61 6e 67 65 73 65 74 28 70 53 65 73 73 69 6f  hangeset(pSessio
20b90 6e 2d 3e 70 2c 20 26 73 7a 43 68 6e 67 2c 20 26  n->p, &szChng, &
20ba0 70 43 68 6e 67 29 3b 0a 20 20 20 20 20 20 20 20  pChng);.        
20bb0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
20bc0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 73 65 73   rc = sqlite3ses
20bd0 73 69 6f 6e 5f 70 61 74 63 68 73 65 74 28 70 53  sion_patchset(pS
20be0 65 73 73 69 6f 6e 2d 3e 70 2c 20 26 73 7a 43 68  ession->p, &szCh
20bf0 6e 67 2c 20 26 70 43 68 6e 67 29 3b 0a 20 20 20  ng, &pChng);.   
20c00 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
20c10 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20  f( rc ){.       
20c20 20 20 20 70 72 69 6e 74 66 28 22 45 72 72 6f 72     printf("Error
20c30 3a 20 65 72 72 6f 72 20 63 6f 64 65 20 25 64 5c  : error code %d\
20c40 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 20  n", rc);.       
20c50 20 20 20 72 63 20 3d 20 30 3b 0a 20 20 20 20 20     rc = 0;.     
20c60 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
20c70 20 70 43 68 6e 67 0a 20 20 20 20 20 20 20 20 20   pChng.         
20c80 20 26 26 20 66 77 72 69 74 65 28 70 43 68 6e 67   && fwrite(pChng
20c90 2c 20 73 7a 43 68 6e 67 2c 20 31 2c 20 6f 75 74  , szChng, 1, out
20ca0 29 21 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=1 ){.        
20cb0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
20cc0 65 72 72 2c 20 22 45 52 52 4f 52 3a 20 46 61 69  err, "ERROR: Fai
20cd0 6c 65 64 20 74 6f 20 77 72 69 74 65 20 65 6e 74  led to write ent
20ce0 69 72 65 20 25 64 2d 62 79 74 65 20 6f 75 74 70  ire %d-byte outp
20cf0 75 74 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  ut\n",.         
20d00 20 20 20 20 20 20 20 20 20 73 7a 43 68 6e 67 29           szChng)
20d10 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
20d20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
20d30 28 70 43 68 6e 67 29 3b 0a 20 20 20 20 20 20 20  (pChng);.       
20d40 20 66 63 6c 6f 73 65 28 6f 75 74 29 3b 0a 20 20   fclose(out);.  
20d50 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a      }.    }else.
20d60 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e  .    /* .session
20d70 20 63 6c 6f 73 65 0a 20 20 20 20 2a 2a 20 43 6c   close.    ** Cl
20d80 6f 73 65 20 74 68 65 20 69 64 65 6e 74 69 66 69  ose the identifi
20d90 65 64 20 73 65 73 73 69 6f 6e 0a 20 20 20 20 2a  ed session.    *
20da0 2f 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d 70  /.    if( strcmp
20db0 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 63 6c 6f 73  (azCmd[0], "clos
20dc0 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  e")==0 ){.      
20dd0 69 66 28 20 6e 43 6d 64 21 3d 31 20 29 20 67 6f  if( nCmd!=1 ) go
20de0 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79 6e 74 61  to session_synta
20df0 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 69  x_error;.      i
20e00 66 28 20 70 2d 3e 6e 53 65 73 73 69 6f 6e 20 29  f( p->nSession )
20e10 7b 0a 20 20 20 20 20 20 20 20 73 65 73 73 69 6f  {.        sessio
20e20 6e 5f 63 6c 6f 73 65 28 70 53 65 73 73 69 6f 6e  n_close(pSession
20e30 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 61 53  );.        p->aS
20e40 65 73 73 69 6f 6e 5b 69 53 65 73 5d 20 3d 20 70  ession[iSes] = p
20e50 2d 3e 61 53 65 73 73 69 6f 6e 5b 2d 2d 70 2d 3e  ->aSession[--p->
20e60 6e 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20 20 20  nSession];.     
20e70 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20   }.    }else..  
20e80 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 65 6e    /* .session en
20e90 61 62 6c 65 20 3f 42 4f 4f 4c 45 41 4e 3f 0a 20  able ?BOOLEAN?. 
20ea0 20 20 20 2a 2a 20 51 75 65 72 79 20 6f 72 20 73     ** Query or s
20eb0 65 74 20 74 68 65 20 65 6e 61 62 6c 65 20 66 6c  et the enable fl
20ec0 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  ag.    */.    if
20ed0 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30  ( strcmp(azCmd[0
20ee0 5d 2c 20 22 65 6e 61 62 6c 65 22 29 3d 3d 30 20  ], "enable")==0 
20ef0 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b  ){.      int ii;
20f00 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 3e  .      if( nCmd>
20f10 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  2 ) goto session
20f20 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
20f30 20 20 20 20 20 69 69 20 3d 20 6e 43 6d 64 3d 3d       ii = nCmd==
20f40 31 20 3f 20 2d 31 20 3a 20 62 6f 6f 6c 65 61 6e  1 ? -1 : boolean
20f50 56 61 6c 75 65 28 61 7a 43 6d 64 5b 31 5d 29 3b  Value(azCmd[1]);
20f60 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53  .      if( p->nS
20f70 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  ession ){.      
20f80 20 20 69 69 20 3d 20 73 71 6c 69 74 65 33 73 65    ii = sqlite3se
20f90 73 73 69 6f 6e 5f 65 6e 61 62 6c 65 28 70 53 65  ssion_enable(pSe
20fa0 73 73 69 6f 6e 2d 3e 70 2c 20 69 69 29 3b 0a 20  ssion->p, ii);. 
20fb0 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
20fc0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 73 65 73 73  tf(p->out, "sess
20fd0 69 6f 6e 20 25 73 20 65 6e 61 62 6c 65 20 66 6c  ion %s enable fl
20fe0 61 67 20 3d 20 25 64 5c 6e 22 2c 0a 20 20 20 20  ag = %d\n",.    
20ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21000 70 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 2c  pSession->zName,
21010 20 69 69 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20   ii);.      }.  
21020 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20    }else..    /* 
21030 2e 73 65 73 73 69 6f 6e 20 66 69 6c 74 65 72 20  .session filter 
21040 47 4c 4f 42 20 2e 2e 2e 2e 0a 20 20 20 20 2a 2a  GLOB .....    **
21050 20 53 65 74 20 61 20 6c 69 73 74 20 6f 66 20 47   Set a list of G
21060 4c 4f 42 20 70 61 74 74 65 72 6e 73 20 6f 66 20  LOB patterns of 
21070 74 61 62 6c 65 20 6e 61 6d 65 73 20 74 6f 20 62  table names to b
21080 65 20 65 78 63 6c 75 64 65 64 2e 0a 20 20 20 20  e excluded..    
21090 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d  */.    if( strcm
210a0 70 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 66 69 6c  p(azCmd[0], "fil
210b0 74 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ter")==0 ){.    
210c0 20 20 69 6e 74 20 69 69 2c 20 6e 42 79 74 65 3b    int ii, nByte;
210d0 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 3c  .      if( nCmd<
210e0 32 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  2 ) goto session
210f0 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
21100 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53 65 73       if( p->nSes
21110 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  sion ){.        
21120 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 53 65  for(ii=0; ii<pSe
21130 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 3b 20  ssion->nFilter; 
21140 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
21150 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 53   sqlite3_free(pS
21160 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72  ession->azFilter
21170 5b 69 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d  [ii]);.        }
21180 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
21190 5f 66 72 65 65 28 70 53 65 73 73 69 6f 6e 2d 3e  _free(pSession->
211a0 61 7a 46 69 6c 74 65 72 29 3b 0a 20 20 20 20 20  azFilter);.     
211b0 20 20 20 6e 42 79 74 65 20 3d 20 73 69 7a 65 6f     nByte = sizeo
211c0 66 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69  f(pSession->azFi
211d0 6c 74 65 72 5b 30 5d 29 2a 28 6e 43 6d 64 2d 31  lter[0])*(nCmd-1
211e0 29 3b 0a 20 20 20 20 20 20 20 20 70 53 65 73 73  );.        pSess
211f0 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72 20 3d 20  ion->azFilter = 
21200 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 20  sqlite3_malloc( 
21210 6e 42 79 74 65 20 29 3b 0a 20 20 20 20 20 20 20  nByte );.       
21220 20 69 66 28 20 70 53 65 73 73 69 6f 6e 2d 3e 61   if( pSession->a
21230 7a 46 69 6c 74 65 72 3d 3d 30 20 29 7b 0a 20 20  zFilter==0 ){.  
21240 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
21250 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
21260 72 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79  r: out or memory
21270 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  \n");.          
21280 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20 20 20  exit(1);.       
21290 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69   }.        for(i
212a0 69 3d 31 3b 20 69 69 3c 6e 43 6d 64 3b 20 69 69  i=1; ii<nCmd; ii
212b0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  ++){.          p
212c0 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65  Session->azFilte
212d0 72 5b 69 69 2d 31 5d 20 3d 20 73 71 6c 69 74 65  r[ii-1] = sqlite
212e0 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
212f0 61 7a 43 6d 64 5b 69 69 5d 29 3b 0a 20 20 20 20  azCmd[ii]);.    
21300 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 53      }.        pS
21310 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 20  ession->nFilter 
21320 3d 20 69 69 2d 31 3b 0a 20 20 20 20 20 20 7d 0a  = ii-1;.      }.
21330 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f      }else..    /
21340 2a 20 2e 73 65 73 73 69 6f 6e 20 69 6e 64 69 72  * .session indir
21350 65 63 74 20 3f 42 4f 4f 4c 45 41 4e 3f 0a 20 20  ect ?BOOLEAN?.  
21360 20 20 2a 2a 20 51 75 65 72 79 20 6f 72 20 73 65    ** Query or se
21370 74 20 74 68 65 20 69 6e 64 69 72 65 63 74 20 66  t the indirect f
21380 6c 61 67 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  lag.    */.    i
21390 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b  f( strcmp(azCmd[
213a0 30 5d 2c 20 22 69 6e 64 69 72 65 63 74 22 29 3d  0], "indirect")=
213b0 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
213c0 69 69 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 43  ii;.      if( nC
213d0 6d 64 3e 32 20 29 20 67 6f 74 6f 20 73 65 73 73  md>2 ) goto sess
213e0 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72  ion_syntax_error
213f0 3b 0a 20 20 20 20 20 20 69 69 20 3d 20 6e 43 6d  ;.      ii = nCm
21400 64 3d 3d 31 20 3f 20 2d 31 20 3a 20 62 6f 6f 6c  d==1 ? -1 : bool
21410 65 61 6e 56 61 6c 75 65 28 61 7a 43 6d 64 5b 31  eanValue(azCmd[1
21420 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d  ]);.      if( p-
21430 3e 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20 20 20  >nSession ){.   
21440 20 20 20 20 20 69 69 20 3d 20 73 71 6c 69 74 65       ii = sqlite
21450 33 73 65 73 73 69 6f 6e 5f 69 6e 64 69 72 65 63  3session_indirec
21460 74 28 70 53 65 73 73 69 6f 6e 2d 3e 70 2c 20 69  t(pSession->p, i
21470 69 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38  i);.        utf8
21480 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
21490 22 73 65 73 73 69 6f 6e 20 25 73 20 69 6e 64 69  "session %s indi
214a0 72 65 63 74 20 66 6c 61 67 20 3d 20 25 64 5c 6e  rect flag = %d\n
214b0 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
214c0 20 20 20 20 20 20 20 70 53 65 73 73 69 6f 6e 2d         pSession-
214d0 3e 7a 4e 61 6d 65 2c 20 69 69 29 3b 0a 20 20 20  >zName, ii);.   
214e0 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a     }.    }else..
214f0 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20      /* .session 
21500 69 73 65 6d 70 74 79 0a 20 20 20 20 2a 2a 20 44  isempty.    ** D
21510 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the 
21520 73 65 73 73 69 6f 6e 20 69 73 20 65 6d 70 74 79  session is empty
21530 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
21540 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c  strcmp(azCmd[0],
21550 20 22 69 73 65 6d 70 74 79 22 29 3d 3d 30 20 29   "isempty")==0 )
21560 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a  {.      int ii;.
21570 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 21 3d        if( nCmd!=
21580 31 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  1 ) goto session
21590 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
215a0 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53 65 73       if( p->nSes
215b0 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  sion ){.        
215c0 69 69 20 3d 20 73 71 6c 69 74 65 33 73 65 73 73  ii = sqlite3sess
215d0 69 6f 6e 5f 69 73 65 6d 70 74 79 28 70 53 65 73  ion_isempty(pSes
215e0 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20 20 20 20  sion->p);.      
215f0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
21600 3e 6f 75 74 2c 20 22 73 65 73 73 69 6f 6e 20 25  >out, "session %
21610 73 20 69 73 65 6d 70 74 79 20 66 6c 61 67 20 3d  s isempty flag =
21620 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20   %d\n",.        
21630 20 20 20 20 20 20 20 20 20 20 20 20 70 53 65 73              pSes
21640 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 2c 20 69 69 29  sion->zName, ii)
21650 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
21660 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73  lse..    /* .ses
21670 73 69 6f 6e 20 6c 69 73 74 0a 20 20 20 20 2a 2a  sion list.    **
21680 20 4c 69 73 74 20 61 6c 6c 20 63 75 72 72 65 6e   List all curren
21690 74 6c 79 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e  tly open session
216a0 73 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  s.    */.    if(
216b0 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d   strcmp(azCmd[0]
216c0 2c 22 6c 69 73 74 22 29 3d 3d 30 20 29 7b 0a 20  ,"list")==0 ){. 
216d0 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
216e0 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69 2b 2b  p->nSession; i++
216f0 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
21700 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
21710 25 64 20 25 73 5c 6e 22 2c 20 69 2c 20 70 2d 3e  %d %s\n", i, p->
21720 61 53 65 73 73 69 6f 6e 5b 69 5d 2e 7a 4e 61 6d  aSession[i].zNam
21730 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
21740 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73  }else..    /* .s
21750 65 73 73 69 6f 6e 20 6f 70 65 6e 20 44 42 20 4e  ession open DB N
21760 41 4d 45 0a 20 20 20 20 2a 2a 20 4f 70 65 6e 20  AME.    ** Open 
21770 61 20 6e 65 77 20 73 65 73 73 69 6f 6e 20 63 61  a new session ca
21780 6c 6c 65 64 20 4e 41 4d 45 20 6f 6e 20 74 68 65  lled NAME on the
21790 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
217a0 73 65 20 44 42 2e 0a 20 20 20 20 2a 2a 20 44 42  se DB..    ** DB
217b0 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 22 6d 61   is normally "ma
217c0 69 6e 22 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  in"..    */.    
217d0 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64  if( strcmp(azCmd
217e0 5b 30 5d 2c 22 6f 70 65 6e 22 29 3d 3d 30 20 29  [0],"open")==0 )
217f0 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4e  {.      char *zN
21800 61 6d 65 3b 0a 20 20 20 20 20 20 69 66 28 20 6e  ame;.      if( n
21810 43 6d 64 21 3d 33 20 29 20 67 6f 74 6f 20 73 65  Cmd!=3 ) goto se
21820 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72 72  ssion_syntax_err
21830 6f 72 3b 0a 20 20 20 20 20 20 7a 4e 61 6d 65 20  or;.      zName 
21840 3d 20 61 7a 43 6d 64 5b 32 5d 3b 0a 20 20 20 20  = azCmd[2];.    
21850 20 20 69 66 28 20 7a 4e 61 6d 65 5b 30 5d 3d 3d    if( zName[0]==
21860 30 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e  0 ) goto session
21870 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20  _syntax_error;. 
21880 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
21890 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20 69 2b 2b  p->nSession; i++
218a0 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  ){.        if( s
218b0 74 72 63 6d 70 28 70 2d 3e 61 53 65 73 73 69 6f  trcmp(p->aSessio
218c0 6e 5b 69 5d 2e 7a 4e 61 6d 65 2c 7a 4e 61 6d 65  n[i].zName,zName
218d0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
218e0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
218f0 64 65 72 72 2c 20 22 53 65 73 73 69 6f 6e 20 5c  derr, "Session \
21900 22 25 73 5c 22 20 61 6c 72 65 61 64 79 20 65 78  "%s\" already ex
21910 69 73 74 73 5c 6e 22 2c 20 7a 4e 61 6d 65 29 3b  ists\n", zName);
21920 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
21930 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
21940 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
21950 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70     }.      if( p
21960 2d 3e 6e 53 65 73 73 69 6f 6e 3e 3d 41 72 72 61  ->nSession>=Arra
21970 79 53 69 7a 65 28 70 2d 3e 61 53 65 73 73 69 6f  ySize(p->aSessio
21980 6e 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  n) ){.        ra
21990 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
219a0 20 22 4d 61 78 69 6d 75 6d 20 6f 66 20 25 64 20   "Maximum of %d 
219b0 73 65 73 73 69 6f 6e 73 5c 6e 22 2c 20 41 72 72  sessions\n", Arr
219c0 61 79 53 69 7a 65 28 70 2d 3e 61 53 65 73 73 69  aySize(p->aSessi
219d0 6f 6e 29 29 3b 0a 20 20 20 20 20 20 20 20 67 6f  on));.        go
219e0 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
219f0 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  exit;.      }.  
21a00 20 20 20 20 70 53 65 73 73 69 6f 6e 20 3d 20 26      pSession = &
21a10 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 70 2d 3e 6e  p->aSession[p->n
21a20 53 65 73 73 69 6f 6e 5d 3b 0a 20 20 20 20 20 20  Session];.      
21a30 72 63 20 3d 20 73 71 6c 69 74 65 33 73 65 73 73  rc = sqlite3sess
21a40 69 6f 6e 5f 63 72 65 61 74 65 28 70 2d 3e 64 62  ion_create(p->db
21a50 2c 20 61 7a 43 6d 64 5b 31 5d 2c 20 26 70 53 65  , azCmd[1], &pSe
21a60 73 73 69 6f 6e 2d 3e 70 29 3b 0a 20 20 20 20 20  ssion->p);.     
21a70 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
21a80 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
21a90 64 65 72 72 2c 20 22 43 61 6e 6e 6f 74 20 6f 70  derr, "Cannot op
21aa0 65 6e 20 73 65 73 73 69 6f 6e 3a 20 65 72 72 6f  en session: erro
21ab0 72 20 63 6f 64 65 3d 25 64 5c 6e 22 2c 20 72 63  r code=%d\n", rc
21ac0 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
21ad0 30 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  0;.        goto 
21ae0 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
21af0 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
21b00 20 70 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74   pSession->nFilt
21b10 65 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 71  er = 0;.      sq
21b20 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 74 61 62  lite3session_tab
21b30 6c 65 5f 66 69 6c 74 65 72 28 70 53 65 73 73 69  le_filter(pSessi
21b40 6f 6e 2d 3e 70 2c 20 73 65 73 73 69 6f 6e 5f 66  on->p, session_f
21b50 69 6c 74 65 72 2c 20 70 53 65 73 73 69 6f 6e 29  ilter, pSession)
21b60 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 65 73 73  ;.      p->nSess
21b70 69 6f 6e 2b 2b 3b 0a 20 20 20 20 20 20 70 53 65  ion++;.      pSe
21b80 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 20 3d 20 73  ssion->zName = s
21b90 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
21ba0 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  %s", zName);.   
21bb0 20 7d 65 6c 73 65 0a 20 20 20 20 2f 2a 20 49 66   }else.    /* If
21bc0 20 6e 6f 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65   no command name
21bd0 20 6d 61 74 63 68 65 73 2c 20 73 68 6f 77 20 61   matches, show a
21be0 20 73 79 6e 74 61 78 20 65 72 72 6f 72 20 2a 2f   syntax error */
21bf0 0a 20 20 20 20 73 65 73 73 69 6f 6e 5f 73 79 6e  .    session_syn
21c00 74 61 78 5f 65 72 72 6f 72 3a 0a 20 20 20 20 73  tax_error:.    s
21c10 65 73 73 69 6f 6e 5f 68 65 6c 70 28 70 29 3b 0a  ession_help(p);.
21c20 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a    }else.#endif..
21c30 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
21c40 42 55 47 0a 20 20 2f 2a 20 55 6e 64 6f 63 75 6d  BUG.  /* Undocum
21c50 65 6e 74 65 64 20 63 6f 6d 6d 61 6e 64 73 20 66  ented commands f
21c60 6f 72 20 69 6e 74 65 72 6e 61 6c 20 74 65 73 74  or internal test
21c70 69 6e 67 2e 20 20 53 75 62 6a 65 63 74 20 74 6f  ing.  Subject to
21c80 20 63 68 61 6e 67 65 0a 20 20 2a 2a 20 77 69 74   change.  ** wit
21c90 68 6f 75 74 20 6e 6f 74 69 63 65 2e 20 2a 2f 0a  hout notice. */.
21ca0 20 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20    if( c=='s' && 
21cb0 6e 3e 3d 31 30 20 26 26 20 73 74 72 6e 63 6d 70  n>=10 && strncmp
21cc0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 65 6c 66  (azArg[0], "self
21cd0 74 65 73 74 2d 22 2c 20 39 29 3d 3d 30 20 29 7b  test-", 9)==0 ){
21ce0 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d 70  .    if( strncmp
21cf0 28 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22 62 6f  (azArg[0]+9, "bo
21d00 6f 6c 65 61 6e 22 2c 20 6e 2d 39 29 3d 3d 30 20  olean", n-9)==0 
21d10 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c 20  ){.      int i, 
21d20 76 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31  v;.      for(i=1
21d30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
21d40 20 20 20 20 20 20 20 20 76 20 3d 20 62 6f 6f 6c          v = bool
21d50 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 69  eanValue(azArg[i
21d60 5d 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38  ]);.        utf8
21d70 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
21d80 22 25 73 3a 20 25 64 20 30 78 25 78 5c 6e 22 2c  "%s: %d 0x%x\n",
21d90 20 61 7a 41 72 67 5b 69 5d 2c 20 76 2c 20 76 29   azArg[i], v, v)
21da0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
21db0 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28      if( strncmp(
21dc0 61 7a 41 72 67 5b 30 5d 2b 39 2c 20 22 69 6e 74  azArg[0]+9, "int
21dd0 65 67 65 72 22 2c 20 6e 2d 39 29 3d 3d 30 20 29  eger", n-9)==0 )
21de0 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 20 73  {.      int i; s
21df0 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 76 3b 0a  qlite3_int64 v;.
21e00 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b 20 69        for(i=1; i
21e10 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
21e20 20 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32       char zBuf[2
21e30 30 30 5d 3b 0a 20 20 20 20 20 20 20 20 76 20 3d  00];.        v =
21e40 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a   integerValue(az
21e50 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[i]);.       
21e60 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
21e70 66 28 73 69 7a 65 6f 66 28 7a 42 75 66 29 2c 7a  f(sizeof(zBuf),z
21e80 42 75 66 2c 22 25 73 3a 20 25 6c 6c 64 20 30 78  Buf,"%s: %lld 0x
21e90 25 6c 6c 78 5c 6e 22 2c 20 61 7a 41 72 67 5b 69  %llx\n", azArg[i
21ea0 5d 2c 76 2c 76 29 3b 0a 20 20 20 20 20 20 20 20  ],v,v);.        
21eb0 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
21ec0 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66 29 3b  ut, "%s", zBuf);
21ed0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
21ee0 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20   }else.#endif.. 
21ef0 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 73   if( c=='s' && s
21f00 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
21f10 20 22 73 65 70 61 72 61 74 6f 72 22 2c 20 6e 29   "separator", n)
21f20 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
21f30 41 72 67 3c 32 20 7c 7c 20 6e 41 72 67 3e 33 20  Arg<2 || nArg>3 
21f40 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
21f50 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
21f60 67 65 3a 20 2e 73 65 70 61 72 61 74 6f 72 20 43  ge: .separator C
21f70 4f 4c 20 3f 52 4f 57 3f 5c 6e 22 29 3b 0a 20 20  OL ?ROW?\n");.  
21f80 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
21f90 7d 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e 3d  }.    if( nArg>=
21fa0 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  2 ){.      sqlit
21fb0 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
21fc0 6f 66 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  of(p->colSeparat
21fd0 6f 72 29 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72  or), p->colSepar
21fe0 61 74 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20  ator,.          
21ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 25 2e               "%.
22000 2a 73 22 2c 20 28 69 6e 74 29 41 72 72 61 79 53  *s", (int)ArrayS
22010 69 7a 65 28 70 2d 3e 63 6f 6c 53 65 70 61 72 61  ize(p->colSepara
22020 74 6f 72 29 2d 31 2c 20 61 7a 41 72 67 5b 31 5d  tor)-1, azArg[1]
22030 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
22040 20 6e 41 72 67 3e 3d 33 20 29 7b 0a 20 20 20 20   nArg>=3 ){.    
22050 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
22060 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77  tf(sizeof(p->row
22070 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72  Separator), p->r
22080 6f 77 53 65 70 61 72 61 74 6f 72 2c 0a 20 20 20  owSeparator,.   
22090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220a0 20 20 20 20 22 25 2e 2a 73 22 2c 20 28 69 6e 74      "%.*s", (int
220b0 29 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 72 6f  )ArraySize(p->ro
220c0 77 53 65 70 61 72 61 74 6f 72 29 2d 31 2c 20 61  wSeparator)-1, a
220d0 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20 7d 0a  zArg[2]);.    }.
220e0 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63    }else..  if( c
220f0 3d 3d 27 73 27 0a 20 20 20 26 26 20 28 73 74 72  =='s'.   && (str
22100 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
22110 73 68 65 6c 6c 22 2c 20 6e 29 3d 3d 30 20 7c 7c  shell", n)==0 ||
22120 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
22130 5d 2c 22 73 79 73 74 65 6d 22 2c 6e 29 3d 3d 30  ],"system",n)==0
22140 29 0a 20 20 29 7b 0a 20 20 20 20 63 68 61 72 20  ).  ){.    char 
22150 2a 7a 43 6d 64 3b 0a 20 20 20 20 69 6e 74 20 69  *zCmd;.    int i
22160 2c 20 78 3b 0a 20 20 20 20 69 66 28 20 6e 41 72  , x;.    if( nAr
22170 67 3c 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77  g<2 ){.      raw
22180 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
22190 22 55 73 61 67 65 3a 20 2e 73 79 73 74 65 6d 20  "Usage: .system 
221a0 43 4f 4d 4d 41 4e 44 5c 6e 22 29 3b 0a 20 20 20  COMMAND\n");.   
221b0 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
221c0 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61   goto meta_comma
221d0 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20  nd_exit;.    }. 
221e0 20 20 20 7a 43 6d 64 20 3d 20 73 71 6c 69 74 65     zCmd = sqlite
221f0 33 5f 6d 70 72 69 6e 74 66 28 73 74 72 63 68 72  3_mprintf(strchr
22200 28 61 7a 41 72 67 5b 31 5d 2c 27 20 27 29 3d 3d  (azArg[1],' ')==
22210 30 3f 22 25 73 22 3a 22 5c 22 25 73 5c 22 22 2c  0?"%s":"\"%s\"",
22220 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
22230 66 6f 72 28 69 3d 32 3b 20 69 3c 6e 41 72 67 3b  for(i=2; i<nArg;
22240 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 7a 43 6d   i++){.      zCm
22250 64 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  d = sqlite3_mpri
22260 6e 74 66 28 73 74 72 63 68 72 28 61 7a 41 72 67  ntf(strchr(azArg
22270 5b 69 5d 2c 27 20 27 29 3d 3d 30 3f 22 25 7a 20  [i],' ')==0?"%z 
22280 25 73 22 3a 22 25 7a 20 5c 22 25 73 5c 22 22 2c  %s":"%z \"%s\"",
22290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
222a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 43                zC
222b0 6d 64 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20  md, azArg[i]);. 
222c0 20 20 20 7d 0a 20 20 20 20 78 20 3d 20 73 79 73     }.    x = sys
222d0 74 65 6d 28 7a 43 6d 64 29 3b 0a 20 20 20 20 73  tem(zCmd);.    s
222e0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 43 6d 64  qlite3_free(zCmd
222f0 29 3b 0a 20 20 20 20 69 66 28 20 78 20 29 20 72  );.    if( x ) r
22300 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
22310 2c 20 22 53 79 73 74 65 6d 20 63 6f 6d 6d 61 6e  , "System comman
22320 64 20 72 65 74 75 72 6e 73 20 25 64 5c 6e 22 2c  d returns %d\n",
22330 20 78 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20   x);.  }else..  
22340 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 73 74  if( c=='s' && st
22350 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
22360 22 73 68 6f 77 22 2c 20 6e 29 3d 3d 30 20 29 7b  "show", n)==0 ){
22370 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
22380 74 20 63 68 61 72 20 2a 61 7a 42 6f 6f 6c 5b 5d  t char *azBool[]
22390 20 3d 20 7b 20 22 6f 66 66 22 2c 20 22 6f 6e 22   = { "off", "on"
223a0 2c 20 22 66 75 6c 6c 22 2c 20 22 75 6e 6b 22 20  , "full", "unk" 
223b0 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  };.    int i;.  
223c0 20 20 69 66 28 20 6e 41 72 67 21 3d 31 20 29 7b    if( nArg!=1 ){
223d0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
223e0 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
223f0 3a 20 2e 73 68 6f 77 5c 6e 22 29 3b 0a 20 20 20  : .show\n");.   
22400 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
22410 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61   goto meta_comma
22420 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20  nd_exit;.    }. 
22430 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
22440 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32 73 3a  ->out, "%12.12s:
22450 20 25 73 5c 6e 22 2c 22 65 63 68 6f 22 2c 20 61   %s\n","echo", a
22460 7a 42 6f 6f 6c 5b 70 2d 3e 65 63 68 6f 4f 6e 21  zBool[p->echoOn!
22470 3d 30 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70  =0]);.    utf8_p
22480 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
22490 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 65  12.12s: %s\n","e
224a0 71 70 22 2c 20 61 7a 42 6f 6f 6c 5b 70 2d 3e 61  qp", azBool[p->a
224b0 75 74 6f 45 51 50 26 33 5d 29 3b 0a 20 20 20 20  utoEQP&3]);.    
224c0 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
224d0 75 74 2c 20 22 25 31 32 2e 31 32 73 3a 20 25 73  ut, "%12.12s: %s
224e0 5c 6e 22 2c 22 65 78 70 6c 61 69 6e 22 2c 0a 20  \n","explain",. 
224f0 20 20 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 3d          p->mode=
22500 3d 4d 4f 44 45 5f 45 78 70 6c 61 69 6e 20 3f 20  =MODE_Explain ? 
22510 22 6f 6e 22 20 3a 20 70 2d 3e 61 75 74 6f 45 78  "on" : p->autoEx
22520 70 6c 61 69 6e 20 3f 20 22 61 75 74 6f 22 20 3a  plain ? "auto" :
22530 20 22 6f 66 66 22 29 3b 0a 20 20 20 20 75 74 66   "off");.    utf
22540 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
22550 22 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c  "%12.12s: %s\n",
22560 22 68 65 61 64 65 72 73 22 2c 20 61 7a 42 6f 6f  "headers", azBoo
22570 6c 5b 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 21  l[p->showHeader!
22580 3d 30 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70  =0]);.    utf8_p
22590 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
225a0 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 6d  12.12s: %s\n","m
225b0 6f 64 65 22 2c 20 6d 6f 64 65 44 65 73 63 72 5b  ode", modeDescr[
225c0 70 2d 3e 6d 6f 64 65 5d 29 3b 0a 20 20 20 20 75  p->mode]);.    u
225d0 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
225e0 74 2c 20 22 25 31 32 2e 31 32 73 3a 20 22 2c 20  t, "%12.12s: ", 
225f0 22 6e 75 6c 6c 76 61 6c 75 65 22 29 3b 0a 20 20  "nullvalue");.  
22600 20 20 20 20 6f 75 74 70 75 74 5f 63 5f 73 74 72      output_c_str
22610 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e 6e  ing(p->out, p->n
22620 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20 20  ullValue);.     
22630 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
22640 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 20 20 75  ut, "\n");.    u
22650 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
22660 74 2c 22 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e  t,"%12.12s: %s\n
22670 22 2c 22 6f 75 74 70 75 74 22 2c 0a 20 20 20 20  ","output",.    
22680 20 20 20 20 20 20 20 20 73 74 72 6c 65 6e 33 30          strlen30
22690 28 70 2d 3e 6f 75 74 66 69 6c 65 29 20 3f 20 70  (p->outfile) ? p
226a0 2d 3e 6f 75 74 66 69 6c 65 20 3a 20 22 73 74 64  ->outfile : "std
226b0 6f 75 74 22 29 3b 0a 20 20 20 20 75 74 66 38 5f  out");.    utf8_
226c0 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
226d0 31 32 2e 31 32 73 3a 20 22 2c 20 22 63 6f 6c 73  12.12s: ", "cols
226e0 65 70 61 72 61 74 6f 72 22 29 3b 0a 20 20 20 20  eparator");.    
226f0 20 20 6f 75 74 70 75 74 5f 63 5f 73 74 72 69 6e    output_c_strin
22700 67 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e 63 6f 6c  g(p->out, p->col
22710 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20  Separator);.    
22720 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e    raw_printf(p->
22730 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 20 20  out, "\n");.    
22740 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
22750 75 74 2c 22 25 31 32 2e 31 32 73 3a 20 22 2c 20  ut,"%12.12s: ", 
22760 22 72 6f 77 73 65 70 61 72 61 74 6f 72 22 29 3b  "rowseparator");
22770 0a 20 20 20 20 20 20 6f 75 74 70 75 74 5f 63 5f  .      output_c_
22780 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 70  string(p->out, p
22790 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b  ->rowSeparator);
227a0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
227b0 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b  f(p->out, "\n");
227c0 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
227d0 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31 32  (p->out, "%12.12
227e0 73 3a 20 25 73 5c 6e 22 2c 22 73 74 61 74 73 22  s: %s\n","stats"
227f0 2c 20 61 7a 42 6f 6f 6c 5b 70 2d 3e 73 74 61 74  , azBool[p->stat
22800 73 4f 6e 21 3d 30 5d 29 3b 0a 20 20 20 20 75 74  sOn!=0]);.    ut
22810 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
22820 2c 20 22 25 31 32 2e 31 32 73 3a 20 22 2c 20 22  , "%12.12s: ", "
22830 77 69 64 74 68 22 29 3b 0a 20 20 20 20 66 6f 72  width");.    for
22840 20 28 69 3d 30 3b 69 3c 28 69 6e 74 29 41 72 72   (i=0;i<(int)Arr
22850 61 79 53 69 7a 65 28 70 2d 3e 63 6f 6c 57 69 64  aySize(p->colWid
22860 74 68 29 20 26 26 20 70 2d 3e 63 6f 6c 57 69 64  th) && p->colWid
22870 74 68 5b 69 5d 20 21 3d 20 30 3b 69 2b 2b 29 20  th[i] != 0;i++) 
22880 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
22890 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 22  tf(p->out, "%d "
228a0 2c 20 70 2d 3e 63 6f 6c 57 69 64 74 68 5b 69 5d  , p->colWidth[i]
228b0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 61 77  );.    }.    raw
228c0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
228d0 22 5c 6e 22 29 3b 0a 20 20 20 20 75 74 66 38 5f  "\n");.    utf8_
228e0 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
228f0 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 20  %12.12s: %s\n", 
22900 22 66 69 6c 65 6e 61 6d 65 22 2c 0a 20 20 20 20  "filename",.    
22910 20 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e 7a              p->z
22920 44 62 46 69 6c 65 6e 61 6d 65 20 3f 20 70 2d 3e  DbFilename ? p->
22930 7a 44 62 46 69 6c 65 6e 61 6d 65 20 3a 20 22 22  zDbFilename : ""
22940 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66  );.  }else..  if
22950 28 20 63 3d 3d 27 73 27 20 26 26 20 73 74 72 6e  ( c=='s' && strn
22960 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73  cmp(azArg[0], "s
22970 74 61 74 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  tats", n)==0 ){.
22980 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20      if( nArg==2 
22990 29 7b 0a 20 20 20 20 20 20 70 2d 3e 73 74 61 74  ){.      p->stat
229a0 73 4f 6e 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c  sOn = booleanVal
229b0 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20  ue(azArg[1]);.  
229c0 20 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67    }else if( nArg
229d0 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 64 69 73  ==1 ){.      dis
229e0 70 6c 61 79 5f 73 74 61 74 73 28 70 2d 3e 64 62  play_stats(p->db
229f0 2c 20 70 2c 20 30 29 3b 0a 20 20 20 20 7d 65 6c  , p, 0);.    }el
22a00 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72  se{.      raw_pr
22a10 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
22a20 61 67 65 3a 20 2e 73 74 61 74 73 20 3f 6f 6e 7c  age: .stats ?on|
22a30 6f 66 66 3f 5c 6e 22 29 3b 0a 20 20 20 20 20 20  off?\n");.      
22a40 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  rc = 1;.    }.  
22a50 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
22a60 27 74 27 20 26 26 20 6e 3e 31 20 26 26 20 73 74  't' && n>1 && st
22a70 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
22a80 22 74 61 62 6c 65 73 22 2c 20 6e 29 3d 3d 30 20  "tables", n)==0 
22a90 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ){.    sqlite3_s
22aa0 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 20 20  tmt *pStmt;.    
22ab0 63 68 61 72 20 2a 2a 61 7a 52 65 73 75 6c 74 3b  char **azResult;
22ac0 0a 20 20 20 20 69 6e 74 20 6e 52 6f 77 2c 20 6e  .    int nRow, n
22ad0 41 6c 6c 6f 63 3b 0a 20 20 20 20 63 68 61 72 20  Alloc;.    char 
22ae0 2a 7a 53 71 6c 20 3d 20 30 3b 0a 20 20 20 20 69  *zSql = 0;.    i
22af0 6e 74 20 69 69 3b 0a 20 20 20 20 6f 70 65 6e 5f  nt ii;.    open_
22b00 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 72 63  db(p, 0);.    rc
22b10 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61   = sqlite3_prepa
22b20 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 22 50 52  re_v2(p->db, "PR
22b30 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69  AGMA database_li
22b40 73 74 22 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c  st", -1, &pStmt,
22b50 20 30 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20   0);.    if( rc 
22b60 29 20 72 65 74 75 72 6e 20 73 68 65 6c 6c 44 61  ) return shellDa
22b70 74 61 62 61 73 65 45 72 72 6f 72 28 70 2d 3e 64  tabaseError(p->d
22b80 62 29 3b 0a 0a 20 20 20 20 2f 2a 20 43 72 65 61  b);..    /* Crea
22b90 74 65 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d  te an SQL statem
22ba0 65 6e 74 20 74 6f 20 71 75 65 72 79 20 66 6f 72  ent to query for
22bb0 20 74 68 65 20 6c 69 73 74 20 6f 66 20 74 61 62   the list of tab
22bc0 6c 65 73 20 69 6e 20 74 68 65 0a 20 20 20 20 2a  les in the.    *
22bd0 2a 20 6d 61 69 6e 20 61 6e 64 20 61 6c 6c 20 61  * main and all a
22be0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
22bf0 73 20 77 68 65 72 65 20 74 68 65 20 74 61 62 6c  s where the tabl
22c00 65 20 6e 61 6d 65 20 6d 61 74 63 68 65 73 20 74  e name matches t
22c10 68 65 0a 20 20 20 20 2a 2a 20 4c 49 4b 45 20 70  he.    ** LIKE p
22c20 61 74 74 65 72 6e 20 62 6f 75 6e 64 20 74 6f 20  attern bound to 
22c30 76 61 72 69 61 62 6c 65 20 22 3f 31 22 2e 20 2a  variable "?1". *
22c40 2f 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c  /.    zSql = sql
22c50 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 0a 20 20  ite3_mprintf(.  
22c60 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61        "SELECT na
22c70 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
22c80 61 73 74 65 72 22 0a 20 20 20 20 20 20 20 20 22  aster".        "
22c90 20 57 48 45 52 45 20 74 79 70 65 20 49 4e 20 28   WHERE type IN (
22ca0 27 74 61 62 6c 65 27 2c 27 76 69 65 77 27 29 22  'table','view')"
22cb0 0a 20 20 20 20 20 20 20 20 22 20 20 20 41 4e 44  .        "   AND
22cc0 20 6e 61 6d 65 20 4e 4f 54 20 4c 49 4b 45 20 27   name NOT LIKE '
22cd0 73 71 6c 69 74 65 5f 25 25 27 22 0a 20 20 20 20  sqlite_%%'".    
22ce0 20 20 20 20 22 20 20 20 41 4e 44 20 6e 61 6d 65      "   AND name
22cf0 20 4c 49 4b 45 20 3f 31 22 29 3b 0a 20 20 20 20   LIKE ?1");.    
22d00 77 68 69 6c 65 28 20 7a 53 71 6c 20 26 26 20 73  while( zSql && s
22d10 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d  qlite3_step(pStm
22d20 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  t)==SQLITE_ROW )
22d30 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
22d40 61 72 20 2a 7a 44 62 4e 61 6d 65 20 3d 20 28 63  ar *zDbName = (c
22d50 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
22d60 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
22d70 53 74 6d 74 2c 20 31 29 3b 0a 20 20 20 20 20 20  Stmt, 1);.      
22d80 69 66 28 20 7a 44 62 4e 61 6d 65 3d 3d 30 20 7c  if( zDbName==0 |
22d90 7c 20 73 74 72 63 6d 70 28 7a 44 62 4e 61 6d 65  | strcmp(zDbName
22da0 2c 22 6d 61 69 6e 22 29 3d 3d 30 20 29 20 63 6f  ,"main")==0 ) co
22db0 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69 66  ntinue;.      if
22dc0 28 20 73 74 72 63 6d 70 28 7a 44 62 4e 61 6d 65  ( strcmp(zDbName
22dd0 2c 22 74 65 6d 70 22 29 3d 3d 30 20 29 7b 0a 20  ,"temp")==0 ){. 
22de0 20 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 73 71         zSql = sq
22df0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 0a 20  lite3_mprintf(. 
22e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e10 22 25 7a 20 55 4e 49 4f 4e 20 41 4c 4c 20 22 0a  "%z UNION ALL ".
22e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e30 20 22 53 45 4c 45 43 54 20 27 74 65 6d 70 2e 27   "SELECT 'temp.'
22e40 20 7c 7c 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71   || name FROM sq
22e50 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
22e60 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
22e70 20 20 20 22 20 57 48 45 52 45 20 74 79 70 65 20     " WHERE type 
22e80 49 4e 20 28 27 74 61 62 6c 65 27 2c 27 76 69 65  IN ('table','vie
22e90 77 27 29 22 0a 20 20 20 20 20 20 20 20 20 20 20  w')".           
22ea0 20 20 20 20 20 20 22 20 20 20 41 4e 44 20 6e 61        "   AND na
22eb0 6d 65 20 4e 4f 54 20 4c 49 4b 45 20 27 73 71 6c  me NOT LIKE 'sql
22ec0 69 74 65 5f 25 25 27 22 0a 20 20 20 20 20 20 20  ite_%%'".       
22ed0 20 20 20 20 20 20 20 20 20 20 22 20 20 20 41 4e            "   AN
22ee0 44 20 6e 61 6d 65 20 4c 49 4b 45 20 3f 31 22 2c  D name LIKE ?1",
22ef0 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 7d 65   zSql);.      }e
22f00 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 53 71  lse{.        zSq
22f10 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  l = sqlite3_mpri
22f20 6e 74 66 28 0a 20 20 20 20 20 20 20 20 20 20 20  ntf(.           
22f30 20 20 20 20 20 20 22 25 7a 20 55 4e 49 4f 4e 20        "%z UNION 
22f40 41 4c 4c 20 22 0a 20 20 20 20 20 20 20 20 20 20  ALL ".          
22f50 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 27         "SELECT '
22f60 25 71 2e 27 20 7c 7c 20 6e 61 6d 65 20 46 52 4f  %q.' || name FRO
22f70 4d 20 5c 22 25 77 5c 22 2e 73 71 6c 69 74 65 5f  M \"%w\".sqlite_
22f80 6d 61 73 74 65 72 22 0a 20 20 20 20 20 20 20 20  master".        
22f90 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52 45           " WHERE
22fa0 20 74 79 70 65 20 49 4e 20 28 27 74 61 62 6c 65   type IN ('table
22fb0 27 2c 27 76 69 65 77 27 29 22 0a 20 20 20 20 20  ','view')".     
22fc0 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20 20              "   
22fd0 41 4e 44 20 6e 61 6d 65 20 4e 4f 54 20 4c 49 4b  AND name NOT LIK
22fe0 45 20 27 73 71 6c 69 74 65 5f 25 25 27 22 0a 20  E 'sqlite_%%'". 
22ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23000 22 20 20 20 41 4e 44 20 6e 61 6d 65 20 4c 49 4b  "   AND name LIK
23010 45 20 3f 31 22 2c 20 7a 53 71 6c 2c 20 7a 44 62  E ?1", zSql, zDb
23020 4e 61 6d 65 2c 20 7a 44 62 4e 61 6d 65 29 3b 0a  Name, zDbName);.
23030 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
23040 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66    rc = sqlite3_f
23050 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a  inalize(pStmt);.
23060 20 20 20 20 69 66 28 20 7a 53 71 6c 20 26 26 20      if( zSql && 
23070 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
23080 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 73 71  .      zSql = sq
23090 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25  lite3_mprintf("%
230a0 7a 20 4f 52 44 45 52 20 42 59 20 31 22 2c 20 7a  z ORDER BY 1", z
230b0 53 71 6c 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Sql);.      if( 
230c0 7a 53 71 6c 20 29 20 72 63 20 3d 20 73 71 6c 69  zSql ) rc = sqli
230d0 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70  te3_prepare_v2(p
230e0 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20  ->db, zSql, -1, 
230f0 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20  &pStmt, 0);.    
23100 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  }.    sqlite3_fr
23110 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66  ee(zSql);.    if
23120 28 20 21 7a 53 71 6c 20 29 20 72 65 74 75 72 6e  ( !zSql ) return
23130 20 73 68 65 6c 6c 4e 6f 6d 65 6d 45 72 72 6f 72   shellNomemError
23140 28 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  ();.    if( rc )
23150 20 72 65 74 75 72 6e 20 73 68 65 6c 6c 44 61 74   return shellDat
23160 61 62 61 73 65 45 72 72 6f 72 28 70 2d 3e 64 62  abaseError(p->db
23170 29 3b 0a 0a 20 20 20 20 2f 2a 20 52 75 6e 20 74  );..    /* Run t
23180 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
23190 20 70 72 65 70 61 72 65 64 20 62 79 20 74 68 65   prepared by the
231a0 20 61 62 6f 76 65 20 62 6c 6f 63 6b 2e 20 53 74   above block. St
231b0 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 0a  ore the results.
231c0 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 61 72 72      ** as an arr
231d0 61 79 20 6f 66 20 6e 75 6c 2d 74 65 72 6d 69 6e  ay of nul-termin
231e0 61 74 65 64 20 73 74 72 69 6e 67 73 20 69 6e 20  ated strings in 
231f0 61 7a 52 65 73 75 6c 74 5b 5d 2e 20 20 2a 2f 0a  azResult[].  */.
23200 20 20 20 20 6e 52 6f 77 20 3d 20 6e 41 6c 6c 6f      nRow = nAllo
23210 63 20 3d 20 30 3b 0a 20 20 20 20 61 7a 52 65 73  c = 0;.    azRes
23220 75 6c 74 20 3d 20 30 3b 0a 20 20 20 20 69 66 28  ult = 0;.    if(
23230 20 6e 41 72 67 3e 31 20 29 7b 0a 20 20 20 20 20   nArg>1 ){.     
23240 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
23250 78 74 28 70 53 74 6d 74 2c 20 31 2c 20 61 7a 41  xt(pStmt, 1, azA
23260 72 67 5b 31 5d 2c 20 2d 31 2c 20 53 51 4c 49 54  rg[1], -1, SQLIT
23270 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  E_TRANSIENT);.  
23280 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
23290 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
232a0 28 70 53 74 6d 74 2c 20 31 2c 20 22 25 22 2c 20  (pStmt, 1, "%", 
232b0 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  -1, SQLITE_STATI
232c0 43 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77 68  C);.    }.    wh
232d0 69 6c 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65  ile( sqlite3_ste
232e0 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45  p(pStmt)==SQLITE
232f0 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 69 66  _ROW ){.      if
23300 28 20 6e 52 6f 77 3e 3d 6e 41 6c 6c 6f 63 20 29  ( nRow>=nAlloc )
23310 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a  {.        char *
23320 2a 61 7a 4e 65 77 3b 0a 20 20 20 20 20 20 20 20  *azNew;.        
23330 69 6e 74 20 6e 32 20 3d 20 6e 41 6c 6c 6f 63 2a  int n2 = nAlloc*
23340 32 20 2b 20 31 30 3b 0a 20 20 20 20 20 20 20 20  2 + 10;.        
23350 61 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 5f  azNew = sqlite3_
23360 72 65 61 6c 6c 6f 63 36 34 28 61 7a 52 65 73 75  realloc64(azResu
23370 6c 74 2c 20 73 69 7a 65 6f 66 28 61 7a 52 65 73  lt, sizeof(azRes
23380 75 6c 74 5b 30 5d 29 2a 6e 32 29 3b 0a 20 20 20  ult[0])*n2);.   
23390 20 20 20 20 20 69 66 28 20 61 7a 4e 65 77 3d 3d       if( azNew==
233a0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  0 ){.          r
233b0 63 20 3d 20 73 68 65 6c 6c 4e 6f 6d 65 6d 45 72  c = shellNomemEr
233c0 72 6f 72 28 29 3b 0a 20 20 20 20 20 20 20 20 20  ror();.         
233d0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
233e0 7d 0a 20 20 20 20 20 20 20 20 6e 41 6c 6c 6f 63  }.        nAlloc
233f0 20 3d 20 6e 32 3b 0a 20 20 20 20 20 20 20 20 61   = n2;.        a
23400 7a 52 65 73 75 6c 74 20 3d 20 61 7a 4e 65 77 3b  zResult = azNew;
23410 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
23420 7a 52 65 73 75 6c 74 5b 6e 52 6f 77 5d 20 3d 20  zResult[nRow] = 
23430 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
23440 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f  "%s", sqlite3_co
23450 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c  lumn_text(pStmt,
23460 20 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20   0));.      if( 
23470 30 3d 3d 61 7a 52 65 73 75 6c 74 5b 6e 52 6f 77  0==azResult[nRow
23480 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  ] ){.        rc 
23490 3d 20 73 68 65 6c 6c 4e 6f 6d 65 6d 45 72 72 6f  = shellNomemErro
234a0 72 28 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65  r();.        bre
234b0 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
234c0 20 20 6e 52 6f 77 2b 2b 3b 0a 20 20 20 20 7d 0a    nRow++;.    }.
234d0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
234e0 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 21  finalize(pStmt)!
234f0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
23500 20 20 20 20 72 63 20 3d 20 73 68 65 6c 6c 44 61      rc = shellDa
23510 74 61 62 61 73 65 45 72 72 6f 72 28 70 2d 3e 64  tabaseError(p->d
23520 62 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  b);.    }..    /
23530 2a 20 50 72 65 74 74 79 2d 70 72 69 6e 74 20 74  * Pretty-print t
23540 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 61  he contents of a
23550 72 72 61 79 20 61 7a 52 65 73 75 6c 74 5b 5d 20  rray azResult[] 
23560 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20 2a 2f  to the output */
23570 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 30 20 26  .    if( rc==0 &
23580 26 20 6e 52 6f 77 3e 30 20 29 7b 0a 20 20 20 20  & nRow>0 ){.    
23590 20 20 69 6e 74 20 6c 65 6e 2c 20 6d 61 78 6c 65    int len, maxle
235a0 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 6e 74  n = 0;.      int
235b0 20 69 2c 20 6a 3b 0a 20 20 20 20 20 20 69 6e 74   i, j;.      int
235c0 20 6e 50 72 69 6e 74 43 6f 6c 2c 20 6e 50 72 69   nPrintCol, nPri
235d0 6e 74 52 6f 77 3b 0a 20 20 20 20 20 20 66 6f 72  ntRow;.      for
235e0 28 69 3d 30 3b 20 69 3c 6e 52 6f 77 3b 20 69 2b  (i=0; i<nRow; i+
235f0 2b 29 7b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20  +){.        len 
23600 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a 52 65 73  = strlen30(azRes
23610 75 6c 74 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  ult[i]);.       
23620 20 69 66 28 20 6c 65 6e 3e 6d 61 78 6c 65 6e 20   if( len>maxlen 
23630 29 20 6d 61 78 6c 65 6e 20 3d 20 6c 65 6e 3b 0a  ) maxlen = len;.
23640 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 50        }.      nP
23650 72 69 6e 74 43 6f 6c 20 3d 20 38 30 2f 28 6d 61  rintCol = 80/(ma
23660 78 6c 65 6e 2b 32 29 3b 0a 20 20 20 20 20 20 69  xlen+2);.      i
23670 66 28 20 6e 50 72 69 6e 74 43 6f 6c 3c 31 20 29  f( nPrintCol<1 )
23680 20 6e 50 72 69 6e 74 43 6f 6c 20 3d 20 31 3b 0a   nPrintCol = 1;.
23690 20 20 20 20 20 20 6e 50 72 69 6e 74 52 6f 77 20        nPrintRow 
236a0 3d 20 28 6e 52 6f 77 20 2b 20 6e 50 72 69 6e 74  = (nRow + nPrint
236b0 43 6f 6c 20 2d 20 31 29 2f 6e 50 72 69 6e 74 43  Col - 1)/nPrintC
236c0 6f 6c 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  ol;.      for(i=
236d0 30 3b 20 69 3c 6e 50 72 69 6e 74 52 6f 77 3b 20  0; i<nPrintRow; 
236e0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 66 6f  i++){.        fo
236f0 72 28 6a 3d 69 3b 20 6a 3c 6e 52 6f 77 3b 20 6a  r(j=i; j<nRow; j
23700 2b 3d 6e 50 72 69 6e 74 52 6f 77 29 7b 0a 20 20  +=nPrintRow){.  
23710 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 53          char *zS
23720 70 20 3d 20 6a 3c 6e 50 72 69 6e 74 52 6f 77 20  p = j<nPrintRow 
23730 3f 20 22 22 20 3a 20 22 20 20 22 3b 0a 20 20 20  ? "" : "  ";.   
23740 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
23750 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 25 2d  tf(p->out, "%s%-
23760 2a 73 22 2c 20 7a 53 70 2c 20 6d 61 78 6c 65 6e  *s", zSp, maxlen
23770 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
23780 20 20 20 20 20 20 20 20 61 7a 52 65 73 75 6c 74          azResult
23790 5b 6a 5d 20 3f 20 61 7a 52 65 73 75 6c 74 5b 6a  [j] ? azResult[j
237a0 5d 3a 22 22 29 3b 0a 20 20 20 20 20 20 20 20 7d  ]:"");.        }
237b0 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
237c0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22  ntf(p->out, "\n"
237d0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
237e0 0a 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20  ..    for(ii=0; 
237f0 69 69 3c 6e 52 6f 77 3b 20 69 69 2b 2b 29 20 73  ii<nRow; ii++) s
23800 71 6c 69 74 65 33 5f 66 72 65 65 28 61 7a 52 65  qlite3_free(azRe
23810 73 75 6c 74 5b 69 69 5d 29 3b 0a 20 20 20 20 73  sult[ii]);.    s
23820 71 6c 69 74 65 33 5f 66 72 65 65 28 61 7a 52 65  qlite3_free(azRe
23830 73 75 6c 74 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a  sult);.  }else..
23840 20 20 2f 2a 20 42 65 67 69 6e 20 72 65 64 69 72    /* Begin redir
23850 65 63 74 69 6e 67 20 6f 75 74 70 75 74 20 74 6f  ecting output to
23860 20 74 68 65 20 66 69 6c 65 20 22 74 65 73 74 63   the file "testc
23870 61 73 65 2d 6f 75 74 2e 74 78 74 22 20 2a 2f 0a  ase-out.txt" */.
23880 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26 20    if( c=='t' && 
23890 73 74 72 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  strcmp(azArg[0],
238a0 22 74 65 73 74 63 61 73 65 22 29 3d 3d 30 20 29  "testcase")==0 )
238b0 7b 0a 20 20 20 20 6f 75 74 70 75 74 5f 72 65 73  {.    output_res
238c0 65 74 28 70 29 3b 0a 20 20 20 20 70 2d 3e 6f 75  et(p);.    p->ou
238d0 74 20 3d 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f  t = output_file_
238e0 6f 70 65 6e 28 22 74 65 73 74 63 61 73 65 2d 6f  open("testcase-o
238f0 75 74 2e 74 78 74 22 29 3b 0a 20 20 20 20 69 66  ut.txt");.    if
23900 28 20 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20  ( p->out==0 ){. 
23910 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
23920 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
23930 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 27 74 65   cannot open 'te
23940 73 74 63 61 73 65 2d 6f 75 74 2e 74 78 74 27 5c  stcase-out.txt'\
23950 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  n");.    }.    i
23960 66 28 20 6e 41 72 67 3e 3d 32 20 29 7b 0a 20 20  f( nArg>=2 ){.  
23970 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
23980 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 7a  intf(sizeof(p->z
23990 54 65 73 74 63 61 73 65 29 2c 20 70 2d 3e 7a 54  Testcase), p->zT
239a0 65 73 74 63 61 73 65 2c 20 22 25 73 22 2c 20 61  estcase, "%s", a
239b0 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65  zArg[1]);.    }e
239c0 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
239d0 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65  e3_snprintf(size
239e0 6f 66 28 70 2d 3e 7a 54 65 73 74 63 61 73 65 29  of(p->zTestcase)
239f0 2c 20 70 2d 3e 7a 54 65 73 74 63 61 73 65 2c 20  , p->zTestcase, 
23a00 22 3f 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  "?");.    }.  }e
23a10 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 74  lse..  if( c=='t
23a20 27 20 26 26 20 6e 3e 3d 38 20 26 26 20 73 74 72  ' && n>=8 && str
23a30 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
23a40 74 65 73 74 63 74 72 6c 22 2c 20 6e 29 3d 3d 30  testctrl", n)==0
23a50 20 26 26 20 6e 41 72 67 3e 3d 32 20 29 7b 0a 20   && nArg>=2 ){. 
23a60 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
23a70 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20  struct {.       
23a80 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 72  const char *zCtr
23a90 6c 4e 61 6d 65 3b 20 20 20 2f 2a 20 4e 61 6d 65  lName;   /* Name
23aa0 20 6f 66 20 61 20 74 65 73 74 2d 63 6f 6e 74 72   of a test-contr
23ab0 6f 6c 20 6f 70 74 69 6f 6e 20 2a 2f 0a 20 20 20  ol option */.   
23ac0 20 20 20 20 69 6e 74 20 63 74 72 6c 43 6f 64 65      int ctrlCode
23ad0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
23ae0 49 6e 74 65 67 65 72 20 63 6f 64 65 20 66 6f 72  Integer code for
23af0 20 74 68 61 74 20 6f 70 74 69 6f 6e 20 2a 2f 0a   that option */.
23b00 20 20 20 20 7d 20 61 43 74 72 6c 5b 5d 20 3d 20      } aCtrl[] = 
23b10 7b 0a 20 20 20 20 20 20 7b 20 22 70 72 6e 67 5f  {.      { "prng_
23b20 73 61 76 65 22 2c 20 20 20 20 20 20 20 20 20 20  save",          
23b30 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54     SQLITE_TESTCT
23b40 52 4c 5f 50 52 4e 47 5f 53 41 56 45 20 20 20 20  RL_PRNG_SAVE    
23b50 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
23b60 20 20 20 7b 20 22 70 72 6e 67 5f 72 65 73 74 6f     { "prng_resto
23b70 72 65 22 2c 20 20 20 20 20 20 20 20 20 20 53 51  re",          SQ
23b80 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52  LITE_TESTCTRL_PR
23b90 4e 47 5f 52 45 53 54 4f 52 45 20 20 20 20 20 20  NG_RESTORE      
23ba0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
23bb0 22 70 72 6e 67 5f 72 65 73 65 74 22 2c 20 20 20  "prng_reset",   
23bc0 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
23bd0 54 45 53 54 43 54 52 4c 5f 50 52 4e 47 5f 52 45  TESTCTRL_PRNG_RE
23be0 53 45 54 20 20 20 20 20 20 20 20 20 20 20 20 20  SET             
23bf0 7d 2c 0a 20 20 20 20 20 20 7b 20 22 62 69 74 76  },.      { "bitv
23c00 65 63 5f 74 65 73 74 22 2c 20 20 20 20 20 20 20  ec_test",       
23c10 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43      SQLITE_TESTC
23c20 54 52 4c 5f 42 49 54 56 45 43 5f 54 45 53 54 20  TRL_BITVEC_TEST 
23c30 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
23c40 20 20 20 20 7b 20 22 66 61 75 6c 74 5f 69 6e 73      { "fault_ins
23c50 74 61 6c 6c 22 2c 20 20 20 20 20 20 20 20 20 53  tall",         S
23c60 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 46  QLITE_TESTCTRL_F
23c70 41 55 4c 54 5f 49 4e 53 54 41 4c 4c 20 20 20 20  AULT_INSTALL    
23c80 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
23c90 20 22 62 65 6e 69 67 6e 5f 6d 61 6c 6c 6f 63 5f   "benign_malloc_
23ca0 68 6f 6f 6b 73 22 2c 20 20 20 53 51 4c 49 54 45  hooks",   SQLITE
23cb0 5f 54 45 53 54 43 54 52 4c 5f 42 45 4e 49 47 4e  _TESTCTRL_BENIGN
23cc0 5f 4d 41 4c 4c 4f 43 5f 48 4f 4f 4b 53 20 20 20  _MALLOC_HOOKS   
23cd0 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 70 65 6e   },.      { "pen
23ce0 64 69 6e 67 5f 62 79 74 65 22 2c 20 20 20 20 20  ding_byte",     
23cf0 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54       SQLITE_TEST
23d00 43 54 52 4c 5f 50 45 4e 44 49 4e 47 5f 42 59 54  CTRL_PENDING_BYT
23d10 45 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20  E           },. 
23d20 20 20 20 20 20 7b 20 22 61 73 73 65 72 74 22 2c       { "assert",
23d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d40 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
23d50 41 53 53 45 52 54 20 20 20 20 20 20 20 20 20 20  ASSERT          
23d60 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
23d70 7b 20 22 61 6c 77 61 79 73 22 2c 20 20 20 20 20  { "always",     
23d80 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
23d90 45 5f 54 45 53 54 43 54 52 4c 5f 41 4c 57 41 59  E_TESTCTRL_ALWAY
23da0 53 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  S               
23db0 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 72 65    },.      { "re
23dc0 73 65 72 76 65 22 2c 20 20 20 20 20 20 20 20 20  serve",         
23dd0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53        SQLITE_TES
23de0 54 43 54 52 4c 5f 52 45 53 45 52 56 45 20 20 20  TCTRL_RESERVE   
23df0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
23e00 20 20 20 20 20 20 7b 20 22 6f 70 74 69 6d 69 7a        { "optimiz
23e10 61 74 69 6f 6e 73 22 2c 20 20 20 20 20 20 20 20  ations",        
23e20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
23e30 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 20 20  _OPTIMIZATIONS  
23e40 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
23e50 20 7b 20 22 69 73 6b 65 79 77 6f 72 64 22 2c 20   { "iskeyword", 
23e60 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
23e70 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 53 4b 45  TE_TESTCTRL_ISKE
23e80 59 57 4f 52 44 20 20 20 20 20 20 20 20 20 20 20  YWORD           
23e90 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 73     },.      { "s
23ea0 63 72 61 74 63 68 6d 61 6c 6c 6f 63 22 2c 20 20  cratchmalloc",  
23eb0 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45         SQLITE_TE
23ec0 53 54 43 54 52 4c 5f 53 43 52 41 54 43 48 4d 41  STCTRL_SCRATCHMA
23ed0 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 7d 2c  LLOC          },
23ee0 0a 20 20 20 20 20 20 7b 20 22 62 79 74 65 6f 72  .      { "byteor
23ef0 64 65 72 22 2c 20 20 20 20 20 20 20 20 20 20 20  der",           
23f00 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52    SQLITE_TESTCTR
23f10 4c 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 20  L_BYTEORDER     
23f20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
23f30 20 20 7b 20 22 6e 65 76 65 72 5f 63 6f 72 72 75    { "never_corru
23f40 70 74 22 2c 20 20 20 20 20 20 20 20 20 53 51 4c  pt",         SQL
23f50 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4e 45 56  ITE_TESTCTRL_NEV
23f60 45 52 5f 43 4f 52 52 55 50 54 20 20 20 20 20 20  ER_CORRUPT      
23f70 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
23f80 69 6d 70 6f 73 74 65 72 22 2c 20 20 20 20 20 20  imposter",      
23f90 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54          SQLITE_T
23fa0 45 53 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52  ESTCTRL_IMPOSTER
23fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
23fc0 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74  ,.    };.    int
23fd0 20 74 65 73 74 63 74 72 6c 20 3d 20 2d 31 3b 0a   testctrl = -1;.
23fe0 20 20 20 20 69 6e 74 20 72 63 32 20 3d 20 30 3b      int rc2 = 0;
23ff0 0a 20 20 20 20 69 6e 74 20 69 2c 20 6e 32 3b 0a  .    int i, n2;.
24000 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
24010 29 3b 0a 0a 20 20 20 20 2f 2a 20 63 6f 6e 76 65  );..    /* conve
24020 72 74 20 74 65 73 74 63 74 72 6c 20 74 65 78 74  rt testctrl text
24030 20 6f 70 74 69 6f 6e 20 74 6f 20 76 61 6c 75 65   option to value
24040 2e 20 61 6c 6c 6f 77 20 61 6e 79 20 75 6e 69 71  . allow any uniq
24050 75 65 20 70 72 65 66 69 78 0a 20 20 20 20 2a 2a  ue prefix.    **
24060 20 6f 66 20 74 68 65 20 6f 70 74 69 6f 6e 20 6e   of the option n
24070 61 6d 65 2c 20 6f 72 20 61 20 6e 75 6d 65 72 69  ame, or a numeri
24080 63 61 6c 20 76 61 6c 75 65 2e 20 2a 2f 0a 20 20  cal value. */.  
24090 20 20 6e 32 20 3d 20 73 74 72 6c 65 6e 33 30 28    n2 = strlen30(
240a0 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 66  azArg[1]);.    f
240b0 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53  or(i=0; i<ArrayS
240c0 69 7a 65 28 61 43 74 72 6c 29 3b 20 69 2b 2b 29  ize(aCtrl); i++)
240d0 7b 0a 20 20 20 20 20 20 69 66 28 20 73 74 72 6e  {.      if( strn
240e0 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 20 61 43  cmp(azArg[1], aC
240f0 74 72 6c 5b 69 5d 2e 7a 43 74 72 6c 4e 61 6d 65  trl[i].zCtrlName
24100 2c 20 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20  , n2)==0 ){.    
24110 20 20 20 20 69 66 28 20 74 65 73 74 63 74 72 6c      if( testctrl
24120 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  <0 ){.          
24130 74 65 73 74 63 74 72 6c 20 3d 20 61 43 74 72 6c  testctrl = aCtrl
24140 5b 69 5d 2e 63 74 72 6c 43 6f 64 65 3b 0a 20 20  [i].ctrlCode;.  
24150 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
24160 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
24170 74 66 28 73 74 64 65 72 72 2c 20 22 61 6d 62 69  tf(stderr, "ambi
24180 67 75 6f 75 73 20 6f 70 74 69 6f 6e 20 6e 61 6d  guous option nam
24190 65 3a 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a  e: \"%s\"\n", az
241a0 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[1]);.       
241b0 20 20 20 74 65 73 74 63 74 72 6c 20 3d 20 2d 31     testctrl = -1
241c0 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ;.          brea
241d0 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  k;.        }.   
241e0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
241f0 66 28 20 74 65 73 74 63 74 72 6c 3c 30 20 29 20  f( testctrl<0 ) 
24200 74 65 73 74 63 74 72 6c 20 3d 20 28 69 6e 74 29  testctrl = (int)
24210 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41  integerValue(azA
24220 72 67 5b 31 5d 29 3b 0a 20 20 20 20 69 66 28 20  rg[1]);.    if( 
24230 28 74 65 73 74 63 74 72 6c 3c 53 51 4c 49 54 45  (testctrl<SQLITE
24240 5f 54 45 53 54 43 54 52 4c 5f 46 49 52 53 54 29  _TESTCTRL_FIRST)
24250 20 7c 7c 20 28 74 65 73 74 63 74 72 6c 3e 53 51   || (testctrl>SQ
24260 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4c 41  LITE_TESTCTRL_LA
24270 53 54 29 20 29 7b 0a 20 20 20 20 20 20 75 74 66  ST) ){.      utf
24280 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
24290 22 45 72 72 6f 72 3a 20 69 6e 76 61 6c 69 64 20  "Error: invalid 
242a0 74 65 73 74 63 74 72 6c 20 6f 70 74 69 6f 6e 3a  testctrl option:
242b0 20 25 73 5c 6e 22 2c 20 61 7a 41 72 67 5b 31 5d   %s\n", azArg[1]
242c0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
242d0 20 20 20 20 73 77 69 74 63 68 28 74 65 73 74 63      switch(testc
242e0 74 72 6c 29 7b 0a 0a 20 20 20 20 20 20 20 20 2f  trl){..        /
242f0 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
24300 6f 6e 74 72 6f 6c 28 69 6e 74 2c 20 64 62 2c 20  ontrol(int, db, 
24310 69 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20 20 20  int) */.        
24320 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54  case SQLITE_TEST
24330 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f  CTRL_OPTIMIZATIO
24340 4e 53 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65  NS:.        case
24350 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
24360 5f 52 45 53 45 52 56 45 3a 0a 20 20 20 20 20 20  _RESERVE:.      
24370 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 33 20      if( nArg==3 
24380 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ){.            i
24390 6e 74 20 6f 70 74 20 3d 20 28 69 6e 74 29 73 74  nt opt = (int)st
243a0 72 74 6f 6c 28 61 7a 41 72 67 5b 32 5d 2c 20 30  rtol(azArg[2], 0
243b0 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
243c0 20 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f    rc2 = sqlite3_
243d0 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73  test_control(tes
243e0 74 63 74 72 6c 2c 20 70 2d 3e 64 62 2c 20 6f 70  tctrl, p->db, op
243f0 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  t);.            
24400 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
24410 74 2c 20 22 25 64 20 28 30 78 25 30 38 78 29 5c  t, "%d (0x%08x)\
24420 6e 22 2c 20 72 63 32 2c 20 72 63 32 29 3b 0a 20  n", rc2, rc2);. 
24430 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else 
24440 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 74  {.            ut
24450 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
24460 2c 22 45 72 72 6f 72 3a 20 74 65 73 74 63 74 72  ,"Error: testctr
24470 6c 20 25 73 20 74 61 6b 65 73 20 61 20 73 69 6e  l %s takes a sin
24480 67 6c 65 20 69 6e 74 20 6f 70 74 69 6f 6e 5c 6e  gle int option\n
24490 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
244a0 20 20 20 20 20 20 20 61 7a 41 72 67 5b 31 5d 29         azArg[1])
244b0 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
244c0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a          break;..
244d0 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74          /* sqlit
244e0 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
244f0 69 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20 20 20  int) */.        
24500 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54  case SQLITE_TEST
24510 43 54 52 4c 5f 50 52 4e 47 5f 53 41 56 45 3a 0a  CTRL_PRNG_SAVE:.
24520 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
24530 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e  ITE_TESTCTRL_PRN
24540 47 5f 52 45 53 54 4f 52 45 3a 0a 20 20 20 20 20  G_RESTORE:.     
24550 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54     case SQLITE_T
24560 45 53 54 43 54 52 4c 5f 50 52 4e 47 5f 52 45 53  ESTCTRL_PRNG_RES
24570 45 54 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65  ET:.        case
24580 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
24590 5f 42 59 54 45 4f 52 44 45 52 3a 0a 20 20 20 20  _BYTEORDER:.    
245a0 20 20 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d        if( nArg==
245b0 32 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  2 ){.           
245c0 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74   rc2 = sqlite3_t
245d0 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74  est_control(test
245e0 63 74 72 6c 29 3b 0a 20 20 20 20 20 20 20 20 20  ctrl);.         
245f0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
24600 3e 6f 75 74 2c 20 22 25 64 20 28 30 78 25 30 38  >out, "%d (0x%08
24610 78 29 5c 6e 22 2c 20 72 63 32 2c 20 72 63 32 29  x)\n", rc2, rc2)
24620 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ;.          } el
24630 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
24640 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
24650 65 72 72 2c 22 45 72 72 6f 72 3a 20 74 65 73 74  err,"Error: test
24660 63 74 72 6c 20 25 73 20 74 61 6b 65 73 20 6e 6f  ctrl %s takes no
24670 20 6f 70 74 69 6f 6e 73 5c 6e 22 2c 0a 20 20 20   options\n",.   
24680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24690 20 20 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b 0a       azArg[1]);.
246a0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
246b0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20        break;..  
246c0 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33        /* sqlite3
246d0 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e  _test_control(in
246e0 74 2c 20 75 69 6e 74 29 20 2a 2f 0a 20 20 20 20  t, uint) */.    
246f0 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
24700 54 45 53 54 43 54 52 4c 5f 50 45 4e 44 49 4e 47  TESTCTRL_PENDING
24710 5f 42 59 54 45 3a 0a 20 20 20 20 20 20 20 20 20  _BYTE:.         
24720 20 69 66 28 20 6e 41 72 67 3d 3d 33 20 29 7b 0a   if( nArg==3 ){.
24730 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 73 69              unsi
24740 67 6e 65 64 20 69 6e 74 20 6f 70 74 20 3d 20 28  gned int opt = (
24750 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 69 6e 74  unsigned int)int
24760 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b  egerValue(azArg[
24770 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  2]);.           
24780 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74   rc2 = sqlite3_t
24790 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74  est_control(test
247a0 63 74 72 6c 2c 20 6f 70 74 29 3b 0a 20 20 20 20  ctrl, opt);.    
247b0 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
247c0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 28  tf(p->out, "%d (
247d0 30 78 25 30 38 78 29 5c 6e 22 2c 20 72 63 32 2c  0x%08x)\n", rc2,
247e0 20 72 63 32 29 3b 0a 20 20 20 20 20 20 20 20 20   rc2);.         
247f0 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
24800 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
24810 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a  f(stderr,"Error:
24820 20 74 65 73 74 63 74 72 6c 20 25 73 20 74 61 6b   testctrl %s tak
24830 65 73 20 61 20 73 69 6e 67 6c 65 20 75 6e 73 69  es a single unsi
24840 67 6e 65 64 22 0a 20 20 20 20 20 20 20 20 20 20  gned".          
24850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24860 20 22 20 69 6e 74 20 6f 70 74 69 6f 6e 5c 6e 22   " int option\n"
24870 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  , azArg[1]);.   
24880 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
24890 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20     break;..     
248a0 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 74 65     /* sqlite3_te
248b0 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74 2c 20  st_control(int, 
248c0 69 6e 74 29 20 2a 2f 0a 20 20 20 20 20 20 20 20  int) */.        
248d0 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54  case SQLITE_TEST
248e0 43 54 52 4c 5f 41 53 53 45 52 54 3a 0a 20 20 20  CTRL_ASSERT:.   
248f0 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
24900 5f 54 45 53 54 43 54 52 4c 5f 41 4c 57 41 59 53  _TESTCTRL_ALWAYS
24910 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53  :.        case S
24920 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4e  QLITE_TESTCTRL_N
24930 45 56 45 52 5f 43 4f 52 52 55 50 54 3a 0a 20 20  EVER_CORRUPT:.  
24940 20 20 20 20 20 20 20 20 69 66 28 20 6e 41 72 67          if( nArg
24950 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==3 ){.         
24960 20 20 20 69 6e 74 20 6f 70 74 20 3d 20 62 6f 6f     int opt = boo
24970 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b  leanValue(azArg[
24980 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  2]);.           
24990 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f 74   rc2 = sqlite3_t
249a0 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65 73 74  est_control(test
249b0 63 74 72 6c 2c 20 6f 70 74 29 3b 0a 20 20 20 20  ctrl, opt);.    
249c0 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
249d0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 28  tf(p->out, "%d (
249e0 30 78 25 30 38 78 29 5c 6e 22 2c 20 72 63 32 2c  0x%08x)\n", rc2,
249f0 20 72 63 32 29 3b 0a 20 20 20 20 20 20 20 20 20   rc2);.         
24a00 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
24a10 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
24a20 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a  f(stderr,"Error:
24a30 20 74 65 73 74 63 74 72 6c 20 25 73 20 74 61 6b   testctrl %s tak
24a40 65 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 20  es a single int 
24a50 6f 70 74 69 6f 6e 5c 6e 22 2c 0a 20 20 20 20 20  option\n",.     
24a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a70 20 20 20 20 20 20 20 61 7a 41 72 67 5b 31 5d 29         azArg[1])
24a80 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
24a90 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a          break;..
24aa0 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74          /* sqlit
24ab0 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
24ac0 69 6e 74 2c 20 63 68 61 72 20 2a 29 20 2a 2f 0a  int, char *) */.
24ad0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f  #ifdef SQLITE_N_
24ae0 4b 45 59 57 4f 52 44 0a 20 20 20 20 20 20 20 20  KEYWORD.        
24af0 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54  case SQLITE_TEST
24b00 43 54 52 4c 5f 49 53 4b 45 59 57 4f 52 44 3a 0a  CTRL_ISKEYWORD:.
24b10 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6e 41            if( nA
24b20 72 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20  rg==3 ){.       
24b30 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
24b40 2a 6f 70 74 20 3d 20 61 7a 41 72 67 5b 32 5d 3b  *opt = azArg[2];
24b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63 32  .            rc2
24b60 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f   = sqlite3_test_
24b70 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63 74 72 6c  control(testctrl
24b80 2c 20 6f 70 74 29 3b 0a 20 20 20 20 20 20 20 20  , opt);.        
24b90 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
24ba0 2d 3e 6f 75 74 2c 20 22 25 64 20 28 30 78 25 30  ->out, "%d (0x%0
24bb0 38 78 29 5c 6e 22 2c 20 72 63 32 2c 20 72 63 32  8x)\n", rc2, rc2
24bc0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  );.          } e
24bd0 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  lse {.          
24be0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
24bf0 64 65 72 72 2c 0a 20 20 20 20 20 20 20 20 20 20  derr,.          
24c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 45                "E
24c10 72 72 6f 72 3a 20 74 65 73 74 63 74 72 6c 20 25  rror: testctrl %
24c20 73 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65  s takes a single
24c30 20 63 68 61 72 20 2a 20 6f 70 74 69 6f 6e 5c 6e   char * option\n
24c40 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
24c50 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67             azArg
24c60 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [1]);.          
24c70 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  }.          brea
24c80 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20  k;.#endif..     
24c90 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54     case SQLITE_T
24ca0 45 53 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52  ESTCTRL_IMPOSTER
24cb0 3a 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  :.          if( 
24cc0 6e 41 72 67 3d 3d 35 20 29 7b 0a 20 20 20 20 20  nArg==5 ){.     
24cd0 20 20 20 20 20 20 20 72 63 32 20 3d 20 73 71 6c         rc2 = sql
24ce0 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
24cf0 6c 28 74 65 73 74 63 74 72 6c 2c 20 70 2d 3e 64  l(testctrl, p->d
24d00 62 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  b,.             
24d10 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41               azA
24d20 72 67 5b 32 5d 2c 0a 20 20 20 20 20 20 20 20 20  rg[2],.         
24d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d40 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a   integerValue(az
24d50 41 72 67 5b 33 5d 29 2c 0a 20 20 20 20 20 20 20  Arg[3]),.       
24d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d70 20 20 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28     integerValue(
24d80 61 7a 41 72 67 5b 34 5d 29 29 3b 0a 20 20 20 20  azArg[4]));.    
24d90 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
24da0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 28  tf(p->out, "%d (
24db0 30 78 25 30 38 78 29 5c 6e 22 2c 20 72 63 32 2c  0x%08x)\n", rc2,
24dc0 20 72 63 32 29 3b 0a 20 20 20 20 20 20 20 20 20   rc2);.         
24dd0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
24de0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
24df0 74 64 65 72 72 2c 22 55 73 61 67 65 3a 20 2e 74  tderr,"Usage: .t
24e00 65 73 74 63 74 72 6c 20 69 6d 70 6f 73 74 65 72  estctrl imposter
24e10 20 64 62 4e 61 6d 65 20 6f 6e 6f 66 66 20 74 6e   dbName onoff tn
24e20 75 6d 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  um\n");.        
24e30 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72    }.          br
24e40 65 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20 63 61  eak;..        ca
24e50 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  se SQLITE_TESTCT
24e60 52 4c 5f 42 49 54 56 45 43 5f 54 45 53 54 3a 0a  RL_BITVEC_TEST:.
24e70 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
24e80 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 46 41 55  ITE_TESTCTRL_FAU
24e90 4c 54 5f 49 4e 53 54 41 4c 4c 3a 0a 20 20 20 20  LT_INSTALL:.    
24ea0 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
24eb0 54 45 53 54 43 54 52 4c 5f 42 45 4e 49 47 4e 5f  TESTCTRL_BENIGN_
24ec0 4d 41 4c 4c 4f 43 5f 48 4f 4f 4b 53 3a 0a 20 20  MALLOC_HOOKS:.  
24ed0 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
24ee0 45 5f 54 45 53 54 43 54 52 4c 5f 53 43 52 41 54  E_TESTCTRL_SCRAT
24ef0 43 48 4d 41 4c 4c 4f 43 3a 0a 20 20 20 20 20 20  CHMALLOC:.      
24f00 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20    default:.     
24f10 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
24f20 28 73 74 64 65 72 72 2c 0a 20 20 20 20 20 20 20  (stderr,.       
24f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
24f40 45 72 72 6f 72 3a 20 43 4c 49 20 73 75 70 70 6f  Error: CLI suppo
24f50 72 74 20 66 6f 72 20 74 65 73 74 63 74 72 6c 20  rt for testctrl 
24f60 25 73 20 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74  %s not implement
24f70 65 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  ed\n",.         
24f80 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41               azA
24f90 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[1]);.        
24fa0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
24fb0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
24fc0 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26 20    if( c=='t' && 
24fd0 6e 3e 34 20 26 26 20 73 74 72 6e 63 6d 70 28 61  n>4 && strncmp(a
24fe0 7a 41 72 67 5b 30 5d 2c 20 22 74 69 6d 65 6f 75  zArg[0], "timeou
24ff0 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  t", n)==0 ){.   
25000 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a   open_db(p, 0);.
25010 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79      sqlite3_busy
25020 5f 74 69 6d 65 6f 75 74 28 70 2d 3e 64 62 2c 20  _timeout(p->db, 
25030 6e 41 72 67 3e 3d 32 20 3f 20 28 69 6e 74 29 69  nArg>=2 ? (int)i
25040 6e 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72  ntegerValue(azAr
25050 67 5b 31 5d 29 20 3a 20 30 29 3b 0a 20 20 7d 65  g[1]) : 0);.  }e
25060 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 74  lse..  if( c=='t
25070 27 20 26 26 20 6e 3e 3d 35 20 26 26 20 73 74 72  ' && n>=5 && str
25080 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
25090 74 69 6d 65 72 22 2c 20 6e 29 3d 3d 30 20 29 7b  timer", n)==0 ){
250a0 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32  .    if( nArg==2
250b0 20 29 7b 0a 20 20 20 20 20 20 65 6e 61 62 6c 65   ){.      enable
250c0 54 69 6d 65 72 20 3d 20 62 6f 6f 6c 65 61 6e 56  Timer = booleanV
250d0 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a  alue(azArg[1]);.
250e0 20 20 20 20 20 20 69 66 28 20 65 6e 61 62 6c 65        if( enable
250f0 54 69 6d 65 72 20 26 26 20 21 48 41 53 5f 54 49  Timer && !HAS_TI
25100 4d 45 52 20 29 7b 0a 20 20 20 20 20 20 20 20 72  MER ){.        r
25110 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
25120 2c 20 22 45 72 72 6f 72 3a 20 74 69 6d 65 72 20  , "Error: timer 
25130 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e  not available on
25140 20 74 68 69 73 20 73 79 73 74 65 6d 2e 5c 6e 22   this system.\n"
25150 29 3b 0a 20 20 20 20 20 20 20 20 65 6e 61 62 6c  );.        enabl
25160 65 54 69 6d 65 72 20 3d 20 30 3b 0a 20 20 20 20  eTimer = 0;.    
25170 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
25180 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
25190 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
251a0 2e 74 69 6d 65 72 20 6f 6e 7c 6f 66 66 5c 6e 22  .timer on|off\n"
251b0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
251c0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
251d0 20 20 69 66 28 20 63 3d 3d 27 74 27 20 26 26 20    if( c=='t' && 
251e0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
251f0 2c 20 22 74 72 61 63 65 22 2c 20 6e 29 3d 3d 30  , "trace", n)==0
25200 20 29 7b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28   ){.    open_db(
25210 70 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 6e  p, 0);.    if( n
25220 41 72 67 21 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg!=2 ){.      
25230 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
25240 72 2c 20 22 55 73 61 67 65 3a 20 2e 74 72 61 63  r, "Usage: .trac
25250 65 20 46 49 4c 45 7c 6f 66 66 5c 6e 22 29 3b 0a  e FILE|off\n");.
25260 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
25270 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
25280 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
25290 7d 0a 20 20 20 20 6f 75 74 70 75 74 5f 66 69 6c  }.    output_fil
252a0 65 5f 63 6c 6f 73 65 28 70 2d 3e 74 72 61 63 65  e_close(p->trace
252b0 4f 75 74 29 3b 0a 20 20 20 20 70 2d 3e 74 72 61  Out);.    p->tra
252c0 63 65 4f 75 74 20 3d 20 6f 75 74 70 75 74 5f 66  ceOut = output_f
252d0 69 6c 65 5f 6f 70 65 6e 28 61 7a 41 72 67 5b 31  ile_open(azArg[1
252e0 5d 29 3b 0a 23 69 66 20 21 64 65 66 69 6e 65 64  ]);.#if !defined
252f0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41  (SQLITE_OMIT_TRA
25300 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  CE) && !defined(
25310 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
25320 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 20 20 20 20  TING_POINT).    
25330 69 66 28 20 70 2d 3e 74 72 61 63 65 4f 75 74 3d  if( p->traceOut=
25340 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
25350 74 65 33 5f 74 72 61 63 65 5f 76 32 28 70 2d 3e  te3_trace_v2(p->
25360 64 62 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  db, 0, 0, 0);.  
25370 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
25380 71 6c 69 74 65 33 5f 74 72 61 63 65 5f 76 32 28  qlite3_trace_v2(
25390 70 2d 3e 64 62 2c 20 53 51 4c 49 54 45 5f 54 52  p->db, SQLITE_TR
253a0 41 43 45 5f 53 54 4d 54 2c 20 73 71 6c 5f 74 72  ACE_STMT, sql_tr
253b0 61 63 65 5f 63 61 6c 6c 62 61 63 6b 2c 70 2d 3e  ace_callback,p->
253c0 74 72 61 63 65 4f 75 74 29 3b 0a 20 20 20 20 7d  traceOut);.    }
253d0 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 0a  .#endif.  }else.
253e0 0a 23 69 66 20 53 51 4c 49 54 45 5f 55 53 45 52  .#if SQLITE_USER
253f0 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a  _AUTHENTICATION.
25400 20 20 69 66 28 20 63 3d 3d 27 75 27 20 26 26 20    if( c=='u' && 
25410 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
25420 2c 20 22 75 73 65 72 22 2c 20 6e 29 3d 3d 30 20  , "user", n)==0 
25430 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3c  ){.    if( nArg<
25440 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  2 ){.      raw_p
25450 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
25460 73 61 67 65 3a 20 2e 75 73 65 72 20 53 55 42 43  sage: .user SUBC
25470 4f 4d 4d 41 4e 44 20 2e 2e 2e 5c 6e 22 29 3b 0a  OMMAND ...\n");.
25480 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
25490 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f      goto meta_co
254a0 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20  mmand_exit;.    
254b0 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  }.    open_db(p,
254c0 20 30 29 3b 0a 20 20 20 20 69 66 28 20 73 74 72   0);.    if( str
254d0 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 6f  cmp(azArg[1],"lo
254e0 67 69 6e 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  gin")==0 ){.    
254f0 20 20 69 66 28 20 6e 41 72 67 21 3d 34 20 29 7b    if( nArg!=4 ){
25500 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
25510 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
25520 67 65 3a 20 2e 75 73 65 72 20 6c 6f 67 69 6e 20  ge: .user login 
25530 55 53 45 52 20 50 41 53 53 57 4f 52 44 5c 6e 22  USER PASSWORD\n"
25540 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
25550 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  1;.        goto 
25560 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
25570 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
25580 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 75 73   rc = sqlite3_us
25590 65 72 5f 61 75 74 68 65 6e 74 69 63 61 74 65 28  er_authenticate(
255a0 70 2d 3e 64 62 2c 20 61 7a 41 72 67 5b 32 5d 2c  p->db, azArg[2],
255b0 20 61 7a 41 72 67 5b 33 5d 2c 0a 20 20 20 20 20   azArg[3],.     
255c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
255e0 69 6e 74 29 73 74 72 6c 65 6e 28 61 7a 41 72 67  int)strlen(azArg
255f0 5b 33 5d 29 29 3b 0a 20 20 20 20 20 20 69 66 28  [3]));.      if(
25600 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 75   rc ){.        u
25610 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
25620 72 2c 20 22 41 75 74 68 65 6e 74 69 63 61 74 69  r, "Authenticati
25630 6f 6e 20 66 61 69 6c 65 64 20 66 6f 72 20 75 73  on failed for us
25640 65 72 20 25 73 5c 6e 22 2c 20 61 7a 41 72 67 5b  er %s\n", azArg[
25650 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  2]);.        rc 
25660 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 1;.      }.   
25670 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
25680 70 28 61 7a 41 72 67 5b 31 5d 2c 22 61 64 64 22  p(azArg[1],"add"
25690 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  )==0 ){.      if
256a0 28 20 6e 41 72 67 21 3d 35 20 29 7b 0a 20 20 20  ( nArg!=5 ){.   
256b0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
256c0 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
256d0 2e 75 73 65 72 20 61 64 64 20 55 53 45 52 20 50  .user add USER P
256e0 41 53 53 57 4f 52 44 20 49 53 41 44 4d 49 4e 5c  ASSWORD ISADMIN\
256f0 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  n");.        rc 
25700 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  = 1;.        got
25710 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
25720 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  xit;.      }.   
25730 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
25740 75 73 65 72 5f 61 64 64 28 70 2d 3e 64 62 2c 20  user_add(p->db, 
25750 61 7a 41 72 67 5b 32 5d 2c 0a 20 20 20 20 20 20  azArg[2],.      
25760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25770 20 20 20 20 20 20 61 7a 41 72 67 5b 33 5d 2c 20        azArg[3], 
25780 28 69 6e 74 29 73 74 72 6c 65 6e 28 61 7a 41 72  (int)strlen(azAr
25790 67 5b 33 5d 29 2c 0a 20 20 20 20 20 20 20 20 20  g[3]),.         
257a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257b0 20 20 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28     booleanValue(
257c0 61 7a 41 72 67 5b 34 5d 29 29 3b 0a 20 20 20 20  azArg[4]));.    
257d0 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
257e0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
257f0 74 64 65 72 72 2c 20 22 55 73 65 72 2d 41 64 64  tderr, "User-Add
25800 20 66 61 69 6c 65 64 3a 20 25 64 5c 6e 22 2c 20   failed: %d\n", 
25810 72 63 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  rc);.        rc 
25820 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 1;.      }.   
25830 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
25840 70 28 61 7a 41 72 67 5b 31 5d 2c 22 65 64 69 74  p(azArg[1],"edit
25850 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  ")==0 ){.      i
25860 66 28 20 6e 41 72 67 21 3d 35 20 29 7b 0a 20 20  f( nArg!=5 ){.  
25870 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
25880 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
25890 20 2e 75 73 65 72 20 65 64 69 74 20 55 53 45 52   .user edit USER
258a0 20 50 41 53 53 57 4f 52 44 20 49 53 41 44 4d 49   PASSWORD ISADMI
258b0 4e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 72  N\n");.        r
258c0 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 67  c = 1;.        g
258d0 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
258e0 5f 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20  _exit;.      }. 
258f0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
25900 33 5f 75 73 65 72 5f 63 68 61 6e 67 65 28 70 2d  3_user_change(p-
25910 3e 64 62 2c 20 61 7a 41 72 67 5b 32 5d 2c 0a 20  >db, azArg[2],. 
25920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25930 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41               azA
25940 72 67 5b 33 5d 2c 20 28 69 6e 74 29 73 74 72 6c  rg[3], (int)strl
25950 65 6e 28 61 7a 41 72 67 5b 33 5d 29 2c 0a 20 20  en(azArg[3]),.  
25960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25970 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
25980 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 34  eanValue(azArg[4
25990 5d 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  ]));.      if( r
259a0 63 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77  c ){.        raw
259b0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
259c0 22 55 73 65 72 2d 45 64 69 74 20 66 61 69 6c 65  "User-Edit faile
259d0 64 3a 20 25 64 5c 6e 22 2c 20 72 63 29 3b 0a 20  d: %d\n", rc);. 
259e0 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
259f0 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
25a00 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 41 72   if( strcmp(azAr
25a10 67 5b 31 5d 2c 22 64 65 6c 65 74 65 22 29 3d 3d  g[1],"delete")==
25a20 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e  0 ){.      if( n
25a30 41 72 67 21 3d 33 20 29 7b 0a 20 20 20 20 20 20  Arg!=3 ){.      
25a40 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
25a50 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 75 73  err, "Usage: .us
25a60 65 72 20 64 65 6c 65 74 65 20 55 53 45 52 5c 6e  er delete USER\n
25a70 22 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  ");.        rc =
25a80 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   1;.        goto
25a90 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
25aa0 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  it;.      }.    
25ab0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 75    rc = sqlite3_u
25ac0 73 65 72 5f 64 65 6c 65 74 65 28 70 2d 3e 64 62  ser_delete(p->db
25ad0 2c 20 61 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20  , azArg[2]);.   
25ae0 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
25af0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
25b00 73 74 64 65 72 72 2c 20 22 55 73 65 72 2d 44 65  stderr, "User-De
25b10 6c 65 74 65 20 66 61 69 6c 65 64 3a 20 25 64 5c  lete failed: %d\
25b20 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 20  n", rc);.       
25b30 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d   rc = 1;.      }
25b40 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
25b50 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
25b60 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 75 73  err, "Usage: .us
25b70 65 72 20 6c 6f 67 69 6e 7c 61 64 64 7c 65 64 69  er login|add|edi
25b80 74 7c 64 65 6c 65 74 65 20 2e 2e 2e 5c 6e 22 29  t|delete ...\n")
25b90 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
25ba0 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
25bb0 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
25bc0 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64    }.  }else.#end
25bd0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45  if /* SQLITE_USE
25be0 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
25bf0 20 2a 2f 0a 0a 20 20 69 66 28 20 63 3d 3d 27 76   */..  if( c=='v
25c00 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
25c10 72 67 5b 30 5d 2c 20 22 76 65 72 73 69 6f 6e 22  rg[0], "version"
25c20 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 75  , n)==0 ){.    u
25c30 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
25c40 74 2c 20 22 53 51 4c 69 74 65 20 25 73 20 25 73  t, "SQLite %s %s
25c50 5c 6e 22 20 2f 2a 65 78 74 72 61 2d 76 65 72 73  \n" /*extra-vers
25c60 69 6f 6e 2d 69 6e 66 6f 2a 2f 2c 0a 20 20 20 20  ion-info*/,.    
25c70 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 62 76      sqlite3_libv
25c80 65 72 73 69 6f 6e 28 29 2c 20 73 71 6c 69 74 65  ersion(), sqlite
25c90 33 5f 73 6f 75 72 63 65 69 64 28 29 29 3b 0a 20  3_sourceid());. 
25ca0 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
25cb0 3d 27 76 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='v' && strncmp(
25cc0 61 7a 41 72 67 5b 30 5d 2c 20 22 76 66 73 69 6e  azArg[0], "vfsin
25cd0 66 6f 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  fo", n)==0 ){.  
25ce0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
25cf0 62 4e 61 6d 65 20 3d 20 6e 41 72 67 3d 3d 32 20  bName = nArg==2 
25d00 3f 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 6d 61  ? azArg[1] : "ma
25d10 69 6e 22 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  in";.    sqlite3
25d20 5f 76 66 73 20 2a 70 56 66 73 3b 0a 20 20 20 20  _vfs *pVfs;.    
25d30 69 66 28 20 70 2d 3e 64 62 20 29 7b 0a 20 20 20  if( p->db ){.   
25d40 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f     sqlite3_file_
25d50 63 6f 6e 74 72 6f 6c 28 70 2d 3e 64 62 2c 20 7a  control(p->db, z
25d60 44 62 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46  DbName, SQLITE_F
25d70 43 4e 54 4c 5f 56 46 53 5f 50 4f 49 4e 54 45 52  CNTL_VFS_POINTER
25d80 2c 20 26 70 56 66 73 29 3b 0a 20 20 20 20 20 20  , &pVfs);.      
25d90 69 66 28 20 70 56 66 73 20 29 7b 0a 20 20 20 20  if( pVfs ){.    
25da0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
25db0 70 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 7a 4e 61  p->out, "vfs.zNa
25dc0 6d 65 20 20 20 20 20 20 3d 20 5c 22 25 73 5c 22  me      = \"%s\"
25dd0 5c 6e 22 2c 20 70 56 66 73 2d 3e 7a 4e 61 6d 65  \n", pVfs->zName
25de0 29 3b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  );.        raw_p
25df0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76  rintf(p->out, "v
25e00 66 73 2e 69 56 65 72 73 69 6f 6e 20 20 20 3d 20  fs.iVersion   = 
25e10 25 64 5c 6e 22 2c 20 70 56 66 73 2d 3e 69 56 65  %d\n", pVfs->iVe
25e20 72 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20  rsion);.        
25e30 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
25e40 74 2c 20 22 76 66 73 2e 73 7a 4f 73 46 69 6c 65  t, "vfs.szOsFile
25e50 20 20 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73     = %d\n", pVfs
25e60 2d 3e 73 7a 4f 73 46 69 6c 65 29 3b 0a 20 20 20  ->szOsFile);.   
25e70 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
25e80 70 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 6d 78 50  p->out, "vfs.mxP
25e90 61 74 68 6e 61 6d 65 20 3d 20 25 64 5c 6e 22 2c  athname = %d\n",
25ea0 20 70 56 66 73 2d 3e 6d 78 50 61 74 68 6e 61 6d   pVfs->mxPathnam
25eb0 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
25ec0 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
25ed0 20 63 3d 3d 27 76 27 20 26 26 20 73 74 72 6e 63   c=='v' && strnc
25ee0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 76 66  mp(azArg[0], "vf
25ef0 73 6c 69 73 74 22 2c 20 6e 29 3d 3d 30 20 29 7b  slist", n)==0 ){
25f00 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73  .    sqlite3_vfs
25f10 20 2a 70 56 66 73 3b 0a 20 20 20 20 73 71 6c 69   *pVfs;.    sqli
25f20 74 65 33 5f 76 66 73 20 2a 70 43 75 72 72 65 6e  te3_vfs *pCurren
25f30 74 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70  t = 0;.    if( p
25f40 2d 3e 64 62 20 29 7b 0a 20 20 20 20 20 20 73 71  ->db ){.      sq
25f50 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
25f60 6f 6c 28 70 2d 3e 64 62 2c 20 22 6d 61 69 6e 22  ol(p->db, "main"
25f70 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 56  , SQLITE_FCNTL_V
25f80 46 53 5f 50 4f 49 4e 54 45 52 2c 20 26 70 43 75  FS_POINTER, &pCu
25f90 72 72 65 6e 74 29 3b 0a 20 20 20 20 7d 0a 20 20  rrent);.    }.  
25fa0 20 20 66 6f 72 28 70 56 66 73 3d 73 71 6c 69 74    for(pVfs=sqlit
25fb0 65 33 5f 76 66 73 5f 66 69 6e 64 28 30 29 3b 20  e3_vfs_find(0); 
25fc0 70 56 66 73 3b 20 70 56 66 73 3d 70 56 66 73 2d  pVfs; pVfs=pVfs-
25fd0 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 75  >pNext){.      u
25fe0 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
25ff0 74 2c 20 22 76 66 73 2e 7a 4e 61 6d 65 20 20 20  t, "vfs.zName   
26000 20 20 20 3d 20 5c 22 25 73 5c 22 25 73 5c 6e 22     = \"%s\"%s\n"
26010 2c 20 70 56 66 73 2d 3e 7a 4e 61 6d 65 2c 0a 20  , pVfs->zName,. 
26020 20 20 20 20 20 20 20 20 20 20 70 56 66 73 3d 3d            pVfs==
26030 70 43 75 72 72 65 6e 74 20 3f 20 22 20 20 3c 2d  pCurrent ? "  <-
26040 2d 2d 20 43 55 52 52 45 4e 54 22 20 3a 20 22 22  -- CURRENT" : ""
26050 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  );.      raw_pri
26060 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76 66 73  ntf(p->out, "vfs
26070 2e 69 56 65 72 73 69 6f 6e 20 20 20 3d 20 25 64  .iVersion   = %d
26080 5c 6e 22 2c 20 70 56 66 73 2d 3e 69 56 65 72 73  \n", pVfs->iVers
26090 69 6f 6e 29 3b 0a 20 20 20 20 20 20 72 61 77 5f  ion);.      raw_
260a0 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
260b0 76 66 73 2e 73 7a 4f 73 46 69 6c 65 20 20 20 3d  vfs.szOsFile   =
260c0 20 25 64 5c 6e 22 2c 20 70 56 66 73 2d 3e 73 7a   %d\n", pVfs->sz
260d0 4f 73 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 72  OsFile);.      r
260e0 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
260f0 2c 20 22 76 66 73 2e 6d 78 50 61 74 68 6e 61 6d  , "vfs.mxPathnam
26100 65 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73 2d  e = %d\n", pVfs-
26110 3e 6d 78 50 61 74 68 6e 61 6d 65 29 3b 0a 20 20  >mxPathname);.  
26120 20 20 20 20 69 66 28 20 70 56 66 73 2d 3e 70 4e      if( pVfs->pN
26130 65 78 74 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ext ){.        r
26140 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
26150 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  , "-------------
26160 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
26170 2d 2d 2d 2d 2d 2d 5c 6e 22 29 3b 0a 20 20 20 20  ------\n");.    
26180 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
26190 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 76 27 20  e..  if( c=='v' 
261a0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
261b0 5b 30 5d 2c 20 22 76 66 73 6e 61 6d 65 22 2c 20  [0], "vfsname", 
261c0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e  n)==0 ){.    con
261d0 73 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65  st char *zDbName
261e0 20 3d 20 6e 41 72 67 3d 3d 32 20 3f 20 61 7a 41   = nArg==2 ? azA
261f0 72 67 5b 31 5d 20 3a 20 22 6d 61 69 6e 22 3b 0a  rg[1] : "main";.
26200 20 20 20 20 63 68 61 72 20 2a 7a 56 66 73 4e 61      char *zVfsNa
26210 6d 65 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  me = 0;.    if( 
26220 70 2d 3e 64 62 20 29 7b 0a 20 20 20 20 20 20 73  p->db ){.      s
26230 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74  qlite3_file_cont
26240 72 6f 6c 28 70 2d 3e 64 62 2c 20 7a 44 62 4e 61  rol(p->db, zDbNa
26250 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  me, SQLITE_FCNTL
26260 5f 56 46 53 4e 41 4d 45 2c 20 26 7a 56 66 73 4e  _VFSNAME, &zVfsN
26270 61 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ame);.      if( 
26280 7a 56 66 73 4e 61 6d 65 20 29 7b 0a 20 20 20 20  zVfsName ){.    
26290 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
262a0 70 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e 22 2c 20  p->out, "%s\n", 
262b0 7a 56 66 73 4e 61 6d 65 29 3b 0a 20 20 20 20 20  zVfsName);.     
262c0 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
262d0 7a 56 66 73 4e 61 6d 65 29 3b 0a 20 20 20 20 20  zVfsName);.     
262e0 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
262f0 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
26300 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64  LITE_DEBUG) && d
26310 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
26320 41 42 4c 45 5f 57 48 45 52 45 54 52 41 43 45 29  ABLE_WHERETRACE)
26330 0a 20 20 69 66 28 20 63 3d 3d 27 77 27 20 26 26  .  if( c=='w' &&
26340 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30   strncmp(azArg[0
26350 5d 2c 20 22 77 68 65 72 65 74 72 61 63 65 22 2c  ], "wheretrace",
26360 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71   n)==0 ){.    sq
26370 6c 69 74 65 33 57 68 65 72 65 54 72 61 63 65 20  lite3WhereTrace 
26380 3d 20 6e 41 72 67 3e 3d 32 20 3f 20 62 6f 6f 6c  = nArg>=2 ? bool
26390 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31  eanValue(azArg[1
263a0 5d 29 20 3a 20 30 78 66 66 3b 0a 20 20 7d 65 6c  ]) : 0xff;.  }el
263b0 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  se.#endif..  if(
263c0 20 63 3d 3d 27 77 27 20 26 26 20 73 74 72 6e 63   c=='w' && strnc
263d0 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 77 69  mp(azArg[0], "wi
263e0 64 74 68 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  dth", n)==0 ){. 
263f0 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 61 73     int j;.    as
26400 73 65 72 74 28 20 6e 41 72 67 3c 3d 41 72 72 61  sert( nArg<=Arra
26410 79 53 69 7a 65 28 61 7a 41 72 67 29 20 29 3b 0a  ySize(azArg) );.
26420 20 20 20 20 66 6f 72 28 6a 3d 31 3b 20 6a 3c 6e      for(j=1; j<n
26430 41 72 67 20 26 26 20 6a 3c 41 72 72 61 79 53 69  Arg && j<ArraySi
26440 7a 65 28 70 2d 3e 63 6f 6c 57 69 64 74 68 29 3b  ze(p->colWidth);
26450 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 70 2d 3e   j++){.      p->
26460 63 6f 6c 57 69 64 74 68 5b 6a 2d 31 5d 20 3d 20  colWidth[j-1] = 
26470 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75  (int)integerValu
26480 65 28 61 7a 41 72 67 5b 6a 5d 29 3b 0a 20 20 20  e(azArg[j]);.   
26490 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 7b 0a   }.  }else..  {.
264a0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
264b0 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
264c0 75 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d 61 6e 64 20  unknown command 
264d0 6f 72 20 69 6e 76 61 6c 69 64 20 61 72 67 75 6d  or invalid argum
264e0 65 6e 74 73 3a 20 22 0a 20 20 20 20 20 20 22 20  ents: ".      " 
264f0 5c 22 25 73 5c 22 2e 20 45 6e 74 65 72 20 5c 22  \"%s\". Enter \"
26500 2e 68 65 6c 70 5c 22 20 66 6f 72 20 68 65 6c 70  .help\" for help
26510 5c 6e 22 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a  \n", azArg[0]);.
26520 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 7d 0a      rc = 1;.  }.
26530 0a 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78  .meta_command_ex
26540 69 74 3a 0a 20 20 69 66 28 20 70 2d 3e 6f 75 74  it:.  if( p->out
26550 43 6f 75 6e 74 20 29 7b 0a 20 20 20 20 70 2d 3e  Count ){.    p->
26560 6f 75 74 43 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20  outCount--;.    
26570 69 66 28 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 3d  if( p->outCount=
26580 3d 30 20 29 20 6f 75 74 70 75 74 5f 72 65 73 65  =0 ) output_rese
26590 74 28 70 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  t(p);.  }.  retu
265a0 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
265b0 52 65 74 75 72 6e 20 54 52 55 45 20 69 66 20 61  Return TRUE if a
265c0 20 73 65 6d 69 63 6f 6c 6f 6e 20 6f 63 63 75 72   semicolon occur
265d0 73 20 61 6e 79 77 68 65 72 65 20 69 6e 20 74 68  s anywhere in th
265e0 65 20 66 69 72 73 74 20 4e 20 63 68 61 72 61 63  e first N charac
265f0 74 65 72 73 0a 2a 2a 20 6f 66 20 73 74 72 69 6e  ters.** of strin
26600 67 20 7a 5b 5d 2e 0a 2a 2f 0a 73 74 61 74 69 63  g z[]..*/.static
26610 20 69 6e 74 20 6c 69 6e 65 5f 63 6f 6e 74 61 69   int line_contai
26620 6e 73 5f 73 65 6d 69 63 6f 6c 6f 6e 28 63 6f 6e  ns_semicolon(con
26630 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
26640 4e 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66  N){.  int i;.  f
26650 6f 72 28 69 3d 30 3b 20 69 3c 4e 3b 20 69 2b 2b  or(i=0; i<N; i++
26660 29 7b 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 3b  ){  if( z[i]==';
26670 27 20 29 20 72 65 74 75 72 6e 20 31 3b 20 7d 0a  ' ) return 1; }.
26680 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
26690 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65  *.** Test to see
266a0 20 69 66 20 61 20 6c 69 6e 65 20 63 6f 6e 73 69   if a line consi
266b0 73 74 73 20 65 6e 74 69 72 65 6c 79 20 6f 66 20  sts entirely of 
266c0 77 68 69 74 65 73 70 61 63 65 2e 0a 2a 2f 0a 73  whitespace..*/.s
266d0 74 61 74 69 63 20 69 6e 74 20 5f 61 6c 6c 5f 77  tatic int _all_w
266e0 68 69 74 65 73 70 61 63 65 28 63 6f 6e 73 74 20  hitespace(const 
266f0 63 68 61 72 20 2a 7a 29 7b 0a 20 20 66 6f 72 28  char *z){.  for(
26700 3b 20 2a 7a 3b 20 7a 2b 2b 29 7b 0a 20 20 20 20  ; *z; z++){.    
26710 69 66 28 20 49 73 53 70 61 63 65 28 7a 5b 30 5d  if( IsSpace(z[0]
26720 29 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  ) ) continue;.  
26730 20 20 69 66 28 20 2a 7a 3d 3d 27 2f 27 20 26 26    if( *z=='/' &&
26740 20 7a 5b 31 5d 3d 3d 27 2a 27 20 29 7b 0a 20 20   z[1]=='*' ){.  
26750 20 20 20 20 7a 20 2b 3d 20 32 3b 0a 20 20 20 20      z += 2;.    
26760 20 20 77 68 69 6c 65 28 20 2a 7a 20 26 26 20 28    while( *z && (
26770 2a 7a 21 3d 27 2a 27 20 7c 7c 20 7a 5b 31 5d 21  *z!='*' || z[1]!
26780 3d 27 2f 27 29 20 29 7b 20 7a 2b 2b 3b 20 7d 0a  ='/') ){ z++; }.
26790 20 20 20 20 20 20 69 66 28 20 2a 7a 3d 3d 30 20        if( *z==0 
267a0 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
267b0 20 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 63 6f 6e    z++;.      con
267c0 74 69 6e 75 65 3b 0a 20 20 20 20 7d 0a 20 20 20  tinue;.    }.   
267d0 20 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 26 26 20   if( *z=='-' && 
267e0 7a 5b 31 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20  z[1]=='-' ){.   
267f0 20 20 20 7a 20 2b 3d 20 32 3b 0a 20 20 20 20 20     z += 2;.     
26800 20 77 68 69 6c 65 28 20 2a 7a 20 26 26 20 2a 7a   while( *z && *z
26810 21 3d 27 5c 6e 27 20 29 7b 20 7a 2b 2b 3b 20 7d  !='\n' ){ z++; }
26820 0a 20 20 20 20 20 20 69 66 28 20 2a 7a 3d 3d 30  .      if( *z==0
26830 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20   ) return 1;.   
26840 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20     continue;.   
26850 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b   }.    return 0;
26860 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b  .  }.  return 1;
26870 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
26880 20 54 52 55 45 20 69 66 20 74 68 65 20 6c 69 6e   TRUE if the lin
26890 65 20 74 79 70 65 64 20 69 6e 20 69 73 20 61 6e  e typed in is an
268a0 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 20 74 65 72   SQL command ter
268b0 6d 69 6e 61 74 6f 72 20 6f 74 68 65 72 0a 2a 2a  minator other.**
268c0 20 74 68 61 6e 20 61 20 73 65 6d 69 2d 63 6f 6c   than a semi-col
268d0 6f 6e 2e 20 20 54 68 65 20 53 51 4c 20 53 65 72  on.  The SQL Ser
268e0 76 65 72 20 73 74 79 6c 65 20 22 67 6f 22 20 63  ver style "go" c
268f0 6f 6d 6d 61 6e 64 20 69 73 20 75 6e 64 65 72 73  ommand is unders
26900 74 6f 6f 64 0a 2a 2a 20 61 73 20 69 73 20 74 68  tood.** as is th
26910 65 20 4f 72 61 63 6c 65 20 22 2f 22 2e 0a 2a 2f  e Oracle "/"..*/
26920 0a 73 74 61 74 69 63 20 69 6e 74 20 6c 69 6e 65  .static int line
26930 5f 69 73 5f 63 6f 6d 6d 61 6e 64 5f 74 65 72 6d  _is_command_term
26940 69 6e 61 74 6f 72 28 63 6f 6e 73 74 20 63 68 61  inator(const cha
26950 72 20 2a 7a 4c 69 6e 65 29 7b 0a 20 20 77 68 69  r *zLine){.  whi
26960 6c 65 28 20 49 73 53 70 61 63 65 28 7a 4c 69 6e  le( IsSpace(zLin
26970 65 5b 30 5d 29 20 29 7b 20 7a 4c 69 6e 65 2b 2b  e[0]) ){ zLine++
26980 3b 20 7d 3b 0a 20 20 69 66 28 20 7a 4c 69 6e 65  ; };.  if( zLine
26990 5b 30 5d 3d 3d 27 2f 27 20 26 26 20 5f 61 6c 6c  [0]=='/' && _all
269a0 5f 77 68 69 74 65 73 70 61 63 65 28 26 7a 4c 69  _whitespace(&zLi
269b0 6e 65 5b 31 5d 29 20 29 7b 0a 20 20 20 20 72 65  ne[1]) ){.    re
269c0 74 75 72 6e 20 31 3b 20 20 2f 2a 20 4f 72 61 63  turn 1;  /* Orac
269d0 6c 65 20 2a 2f 0a 20 20 7d 0a 20 20 69 66 28 20  le */.  }.  if( 
269e0 54 6f 4c 6f 77 65 72 28 7a 4c 69 6e 65 5b 30 5d  ToLower(zLine[0]
269f0 29 3d 3d 27 67 27 20 26 26 20 54 6f 4c 6f 77 65  )=='g' && ToLowe
26a00 72 28 7a 4c 69 6e 65 5b 31 5d 29 3d 3d 27 6f 27  r(zLine[1])=='o'
26a10 0a 20 20 20 20 20 20 20 20 20 26 26 20 5f 61 6c  .         && _al
26a20 6c 5f 77 68 69 74 65 73 70 61 63 65 28 26 7a 4c  l_whitespace(&zL
26a30 69 6e 65 5b 32 5d 29 20 29 7b 0a 20 20 20 20 72  ine[2]) ){.    r
26a40 65 74 75 72 6e 20 31 3b 20 20 2f 2a 20 53 51 4c  eturn 1;  /* SQL
26a50 20 53 65 72 76 65 72 20 2a 2f 0a 20 20 7d 0a 20   Server */.  }. 
26a60 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a   return 0;.}../*
26a70 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
26a80 69 66 20 7a 53 71 6c 20 69 73 20 61 20 63 6f 6d  if zSql is a com
26a90 70 6c 65 74 65 20 53 51 4c 20 73 74 61 74 65 6d  plete SQL statem
26aa0 65 6e 74 2e 20 20 52 65 74 75 72 6e 20 66 61 6c  ent.  Return fal
26ab0 73 65 20 69 66 20 69 74 0a 2a 2a 20 65 6e 64 73  se if it.** ends
26ac0 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f   in the middle o
26ad0 66 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72  f a string liter
26ae0 61 6c 20 6f 72 20 43 2d 73 74 79 6c 65 20 63 6f  al or C-style co
26af0 6d 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  mment..*/.static
26b00 20 69 6e 74 20 6c 69 6e 65 5f 69 73 5f 63 6f 6d   int line_is_com
26b10 70 6c 65 74 65 28 63 68 61 72 20 2a 7a 53 71 6c  plete(char *zSql
26b20 2c 20 69 6e 74 20 6e 53 71 6c 29 7b 0a 20 20 69  , int nSql){.  i
26b30 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 7a 53 71  nt rc;.  if( zSq
26b40 6c 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b  l==0 ) return 1;
26b50 0a 20 20 7a 53 71 6c 5b 6e 53 71 6c 5d 20 3d 20  .  zSql[nSql] = 
26b60 27 3b 27 3b 0a 20 20 7a 53 71 6c 5b 6e 53 71 6c  ';';.  zSql[nSql
26b70 2b 31 5d 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20  +1] = 0;.  rc = 
26b80 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65  sqlite3_complete
26b90 28 7a 53 71 6c 29 3b 0a 20 20 7a 53 71 6c 5b 6e  (zSql);.  zSql[n
26ba0 53 71 6c 5d 20 3d 20 30 3b 0a 20 20 72 65 74 75  Sql] = 0;.  retu
26bb0 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
26bc0 52 65 61 64 20 69 6e 70 75 74 20 66 72 6f 6d 20  Read input from 
26bd0 2a 69 6e 20 61 6e 64 20 70 72 6f 63 65 73 73 20  *in and process 
26be0 69 74 2e 20 20 49 66 20 2a 69 6e 3d 3d 30 20 74  it.  If *in==0 t
26bf0 68 65 6e 20 69 6e 70 75 74 0a 2a 2a 20 69 73 20  hen input.** is 
26c00 69 6e 74 65 72 61 63 74 69 76 65 20 2d 20 74 68  interactive - th
26c10 65 20 75 73 65 72 20 69 73 20 74 79 70 69 6e 67  e user is typing
26c20 20 69 74 20 69 74 2e 20 20 4f 74 68 65 72 77 69   it it.  Otherwi
26c30 73 65 2c 20 69 6e 70 75 74 0a 2a 2a 20 69 73 20  se, input.** is 
26c40 63 6f 6d 69 6e 67 20 66 72 6f 6d 20 61 20 66 69  coming from a fi
26c50 6c 65 20 6f 72 20 64 65 76 69 63 65 2e 20 20 41  le or device.  A
26c60 20 70 72 6f 6d 70 74 20 69 73 20 69 73 73 75 65   prompt is issue
26c70 64 20 61 6e 64 20 68 69 73 74 6f 72 79 0a 2a 2a  d and history.**
26c80 20 69 73 20 73 61 76 65 64 20 6f 6e 6c 79 20 69   is saved only i
26c90 66 20 69 6e 70 75 74 20 69 73 20 69 6e 74 65 72  f input is inter
26ca0 61 63 74 69 76 65 2e 20 20 41 6e 20 69 6e 74 65  active.  An inte
26cb0 72 72 75 70 74 20 73 69 67 6e 61 6c 20 77 69 6c  rrupt signal wil
26cc0 6c 0a 2a 2a 20 63 61 75 73 65 20 74 68 69 73 20  l.** cause this 
26cd0 72 6f 75 74 69 6e 65 20 74 6f 20 65 78 69 74 20  routine to exit 
26ce0 69 6d 6d 65 64 69 61 74 65 6c 79 2c 20 75 6e 6c  immediately, unl
26cf0 65 73 73 20 69 6e 70 75 74 20 69 73 20 69 6e 74  ess input is int
26d00 65 72 61 63 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20  eractive..**.** 
26d10 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
26d20 72 20 6f 66 20 65 72 72 6f 72 73 2e 0a 2a 2f 0a  r of errors..*/.
26d30 73 74 61 74 69 63 20 69 6e 74 20 70 72 6f 63 65  static int proce
26d40 73 73 5f 69 6e 70 75 74 28 53 68 65 6c 6c 53 74  ss_input(ShellSt
26d50 61 74 65 20 2a 70 2c 20 46 49 4c 45 20 2a 69 6e  ate *p, FILE *in
26d60 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4c 69 6e 65  ){.  char *zLine
26d70 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
26d80 2a 20 41 20 73 69 6e 67 6c 65 20 69 6e 70 75 74  * A single input
26d90 20 6c 69 6e 65 20 2a 2f 0a 20 20 63 68 61 72 20   line */.  char 
26da0 2a 7a 53 71 6c 20 3d 20 30 3b 20 20 20 20 20 20  *zSql = 0;      
26db0 20 20 20 20 20 2f 2a 20 41 63 63 75 6d 75 6c 61       /* Accumula
26dc0 74 65 64 20 53 51 4c 20 74 65 78 74 20 2a 2f 0a  ted SQL text */.
26dd0 20 20 69 6e 74 20 6e 4c 69 6e 65 3b 20 20 20 20    int nLine;    
26de0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
26df0 65 6e 67 74 68 20 6f 66 20 63 75 72 72 65 6e 74  ength of current
26e00 20 6c 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 6e   line */.  int n
26e10 53 71 6c 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Sql = 0;        
26e20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66       /* Bytes of
26e30 20 7a 53 71 6c 5b 5d 20 75 73 65 64 20 2a 2f 0a   zSql[] used */.
26e40 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 20 3d 20 30    int nAlloc = 0
26e50 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;           /* A
26e60 6c 6c 6f 63 61 74 65 64 20 7a 53 71 6c 5b 5d 20  llocated zSql[] 
26e70 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
26e80 53 71 6c 50 72 69 6f 72 20 3d 20 30 3b 20 20 20  SqlPrior = 0;   
26e90 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66       /* Bytes of
26ea0 20 7a 53 71 6c 5b 5d 20 75 73 65 64 20 62 79 20   zSql[] used by 
26eb0 70 72 69 6f 72 20 6c 69 6e 65 20 2a 2f 0a 20 20  prior line */.  
26ec0 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20  char *zErrMsg;  
26ed0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
26ee0 6f 72 20 6d 65 73 73 61 67 65 20 72 65 74 75 72  or message retur
26ef0 6e 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  ned */.  int rc;
26f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f10 20 20 20 2f 2a 20 45 72 72 6f 72 20 63 6f 64 65     /* Error code
26f20 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6e 74   */.  int errCnt
26f30 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
26f40 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
26f50 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
26f60 74 20 6c 69 6e 65 6e 6f 20 3d 20 30 3b 20 20 20  t lineno = 0;   
26f70 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
26f80 6e 74 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20 2a  nt line number *
26f90 2f 0a 20 20 69 6e 74 20 73 74 61 72 74 6c 69 6e  /.  int startlin
26fa0 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 2f 2a  e = 0;        /*
26fb0 20 4c 69 6e 65 20 6e 75 6d 62 65 72 20 66 6f 72   Line number for
26fc0 20 73 74 61 72 74 20 6f 66 20 63 75 72 72 65 6e   start of curren
26fd0 74 20 69 6e 70 75 74 20 2a 2f 0a 0a 20 20 77 68  t input */..  wh
26fe0 69 6c 65 28 20 65 72 72 43 6e 74 3d 3d 30 20 7c  ile( errCnt==0 |
26ff0 7c 20 21 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72  | !bail_on_error
27000 20 7c 7c 20 28 69 6e 3d 3d 30 20 26 26 20 73 74   || (in==0 && st
27010 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69  din_is_interacti
27020 76 65 29 20 29 7b 0a 20 20 20 20 66 66 6c 75 73  ve) ){.    fflus
27030 68 28 70 2d 3e 6f 75 74 29 3b 0a 20 20 20 20 7a  h(p->out);.    z
27040 4c 69 6e 65 20 3d 20 6f 6e 65 5f 69 6e 70 75 74  Line = one_input
27050 5f 6c 69 6e 65 28 69 6e 2c 20 7a 4c 69 6e 65 2c  _line(in, zLine,
27060 20 6e 53 71 6c 3e 30 29 3b 0a 20 20 20 20 69 66   nSql>0);.    if
27070 28 20 7a 4c 69 6e 65 3d 3d 30 20 29 7b 0a 20 20  ( zLine==0 ){.  
27080 20 20 20 20 2f 2a 20 45 6e 64 20 6f 66 20 69 6e      /* End of in
27090 70 75 74 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  put */.      if(
270a0 20 69 6e 3d 3d 30 20 26 26 20 73 74 64 69 6e 5f   in==0 && stdin_
270b0 69 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20 29  is_interactive )
270c0 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 20   printf("\n");. 
270d0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
270e0 7d 0a 20 20 20 20 69 66 28 20 73 65 65 6e 49 6e  }.    if( seenIn
270f0 74 65 72 72 75 70 74 20 29 7b 0a 20 20 20 20 20  terrupt ){.     
27100 20 69 66 28 20 69 6e 21 3d 30 20 29 20 62 72 65   if( in!=0 ) bre
27110 61 6b 3b 0a 20 20 20 20 20 20 73 65 65 6e 49 6e  ak;.      seenIn
27120 74 65 72 72 75 70 74 20 3d 20 30 3b 0a 20 20 20  terrupt = 0;.   
27130 20 7d 0a 20 20 20 20 6c 69 6e 65 6e 6f 2b 2b 3b   }.    lineno++;
27140 0a 20 20 20 20 69 66 28 20 6e 53 71 6c 3d 3d 30  .    if( nSql==0
27150 20 26 26 20 5f 61 6c 6c 5f 77 68 69 74 65 73 70   && _all_whitesp
27160 61 63 65 28 7a 4c 69 6e 65 29 20 29 7b 0a 20 20  ace(zLine) ){.  
27170 20 20 20 20 69 66 28 20 70 2d 3e 65 63 68 6f 4f      if( p->echoO
27180 6e 20 29 20 70 72 69 6e 74 66 28 22 25 73 5c 6e  n ) printf("%s\n
27190 22 2c 20 7a 4c 69 6e 65 29 3b 0a 20 20 20 20 20  ", zLine);.     
271a0 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 7d   continue;.    }
271b0 0a 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 20 26  .    if( zLine &
271c0 26 20 7a 4c 69 6e 65 5b 30 5d 3d 3d 27 2e 27 20  & zLine[0]=='.' 
271d0 26 26 20 6e 53 71 6c 3d 3d 30 20 29 7b 0a 20 20  && nSql==0 ){.  
271e0 20 20 20 20 69 66 28 20 70 2d 3e 65 63 68 6f 4f      if( p->echoO
271f0 6e 20 29 20 70 72 69 6e 74 66 28 22 25 73 5c 6e  n ) printf("%s\n
27200 22 2c 20 7a 4c 69 6e 65 29 3b 0a 20 20 20 20 20  ", zLine);.     
27210 20 72 63 20 3d 20 64 6f 5f 6d 65 74 61 5f 63 6f   rc = do_meta_co
27220 6d 6d 61 6e 64 28 7a 4c 69 6e 65 2c 20 70 29 3b  mmand(zLine, p);
27230 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 32  .      if( rc==2
27240 20 29 7b 20 2f 2a 20 65 78 69 74 20 72 65 71 75   ){ /* exit requ
27250 65 73 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 20  ested */.       
27260 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 65   break;.      }e
27270 6c 73 65 20 69 66 28 20 72 63 20 29 7b 0a 20 20  lse if( rc ){.  
27280 20 20 20 20 20 20 65 72 72 43 6e 74 2b 2b 3b 0a        errCnt++;.
27290 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 6f        }.      co
272a0 6e 74 69 6e 75 65 3b 0a 20 20 20 20 7d 0a 20 20  ntinue;.    }.  
272b0 20 20 69 66 28 20 6c 69 6e 65 5f 69 73 5f 63 6f    if( line_is_co
272c0 6d 6d 61 6e 64 5f 74 65 72 6d 69 6e 61 74 6f 72  mmand_terminator
272d0 28 7a 4c 69 6e 65 29 20 26 26 20 6c 69 6e 65 5f  (zLine) && line_
272e0 69 73 5f 63 6f 6d 70 6c 65 74 65 28 7a 53 71 6c  is_complete(zSql
272f0 2c 20 6e 53 71 6c 29 20 29 7b 0a 20 20 20 20 20  , nSql) ){.     
27300 20 6d 65 6d 63 70 79 28 7a 4c 69 6e 65 2c 22 3b   memcpy(zLine,";
27310 22 2c 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ",2);.    }.    
27320 6e 4c 69 6e 65 20 3d 20 73 74 72 6c 65 6e 33 30  nLine = strlen30
27330 28 7a 4c 69 6e 65 29 3b 0a 20 20 20 20 69 66 28  (zLine);.    if(
27340 20 6e 53 71 6c 2b 6e 4c 69 6e 65 2b 32 3e 3d 6e   nSql+nLine+2>=n
27350 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20 6e  Alloc ){.      n
27360 41 6c 6c 6f 63 20 3d 20 6e 53 71 6c 2b 6e 4c 69  Alloc = nSql+nLi
27370 6e 65 2b 31 30 30 3b 0a 20 20 20 20 20 20 7a 53  ne+100;.      zS
27380 71 6c 20 3d 20 72 65 61 6c 6c 6f 63 28 7a 53 71  ql = realloc(zSq
27390 6c 2c 20 6e 41 6c 6c 6f 63 29 3b 0a 20 20 20 20  l, nAlloc);.    
273a0 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b    if( zSql==0 ){
273b0 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69  .        raw_pri
273c0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
273d0 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  or: out of memor
273e0 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 65  y\n");.        e
273f0 78 69 74 28 31 29 3b 0a 20 20 20 20 20 20 7d 0a  xit(1);.      }.
27400 20 20 20 20 7d 0a 20 20 20 20 6e 53 71 6c 50 72      }.    nSqlPr
27410 69 6f 72 20 3d 20 6e 53 71 6c 3b 0a 20 20 20 20  ior = nSql;.    
27420 69 66 28 20 6e 53 71 6c 3d 3d 30 20 29 7b 0a 20  if( nSql==0 ){. 
27430 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20       int i;.    
27440 20 20 66 6f 72 28 69 3d 30 3b 20 7a 4c 69 6e 65    for(i=0; zLine
27450 5b 69 5d 20 26 26 20 49 73 53 70 61 63 65 28 7a  [i] && IsSpace(z
27460 4c 69 6e 65 5b 69 5d 29 3b 20 69 2b 2b 29 7b 7d  Line[i]); i++){}
27470 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e  .      assert( n
27480 41 6c 6c 6f 63 3e 30 20 26 26 20 7a 53 71 6c 21  Alloc>0 && zSql!
27490 3d 30 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 63  =0 );.      memc
274a0 70 79 28 7a 53 71 6c 2c 20 7a 4c 69 6e 65 2b 69  py(zSql, zLine+i
274b0 2c 20 6e 4c 69 6e 65 2b 31 2d 69 29 3b 0a 20 20  , nLine+1-i);.  
274c0 20 20 20 20 73 74 61 72 74 6c 69 6e 65 20 3d 20      startline = 
274d0 6c 69 6e 65 6e 6f 3b 0a 20 20 20 20 20 20 6e 53  lineno;.      nS
274e0 71 6c 20 3d 20 6e 4c 69 6e 65 2d 69 3b 0a 20 20  ql = nLine-i;.  
274f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
27500 53 71 6c 5b 6e 53 71 6c 2b 2b 5d 20 3d 20 27 5c  Sql[nSql++] = '\
27510 6e 27 3b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79  n';.      memcpy
27520 28 7a 53 71 6c 2b 6e 53 71 6c 2c 20 7a 4c 69 6e  (zSql+nSql, zLin
27530 65 2c 20 6e 4c 69 6e 65 2b 31 29 3b 0a 20 20 20  e, nLine+1);.   
27540 20 20 20 6e 53 71 6c 20 2b 3d 20 6e 4c 69 6e 65     nSql += nLine
27550 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
27560 6e 53 71 6c 20 26 26 20 6c 69 6e 65 5f 63 6f 6e  nSql && line_con
27570 74 61 69 6e 73 5f 73 65 6d 69 63 6f 6c 6f 6e 28  tains_semicolon(
27580 26 7a 53 71 6c 5b 6e 53 71 6c 50 72 69 6f 72 5d  &zSql[nSqlPrior]
27590 2c 20 6e 53 71 6c 2d 6e 53 71 6c 50 72 69 6f 72  , nSql-nSqlPrior
275a0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
275b0 20 20 26 26 20 73 71 6c 69 74 65 33 5f 63 6f 6d    && sqlite3_com
275c0 70 6c 65 74 65 28 7a 53 71 6c 29 20 29 7b 0a 20  plete(zSql) ){. 
275d0 20 20 20 20 20 70 2d 3e 63 6e 74 20 3d 20 30 3b       p->cnt = 0;
275e0 0a 20 20 20 20 20 20 6f 70 65 6e 5f 64 62 28 70  .      open_db(p
275f0 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
27600 70 2d 3e 62 61 63 6b 73 6c 61 73 68 4f 6e 20 29  p->backslashOn )
27610 20 72 65 73 6f 6c 76 65 5f 62 61 63 6b 73 6c 61   resolve_backsla
27620 73 68 65 73 28 7a 53 71 6c 29 3b 0a 20 20 20 20  shes(zSql);.    
27630 20 20 42 45 47 49 4e 5f 54 49 4d 45 52 3b 0a 20    BEGIN_TIMER;. 
27640 20 20 20 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f       rc = shell_
27650 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a 53 71 6c  exec(p->db, zSql
27660 2c 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b  , shell_callback
27670 2c 20 70 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a  , p, &zErrMsg);.
27680 20 20 20 20 20 20 45 4e 44 5f 54 49 4d 45 52 3b        END_TIMER;
27690 0a 20 20 20 20 20 20 69 66 28 20 72 63 20 7c 7c  .      if( rc ||
276a0 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20   zErrMsg ){.    
276b0 20 20 20 20 63 68 61 72 20 7a 50 72 65 66 69 78      char zPrefix
276c0 5b 31 30 30 5d 3b 0a 20 20 20 20 20 20 20 20 69  [100];.        i
276d0 66 28 20 69 6e 21 3d 30 20 7c 7c 20 21 73 74 64  f( in!=0 || !std
276e0 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76  in_is_interactiv
276f0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  e ){.          s
27700 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
27710 73 69 7a 65 6f 66 28 7a 50 72 65 66 69 78 29 2c  sizeof(zPrefix),
27720 20 7a 50 72 65 66 69 78 2c 0a 20 20 20 20 20 20   zPrefix,.      
27730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27740 20 20 20 20 20 22 45 72 72 6f 72 3a 20 6e 65 61       "Error: nea
27750 72 20 6c 69 6e 65 20 25 64 3a 22 2c 20 73 74 61  r line %d:", sta
27760 72 74 6c 69 6e 65 29 3b 0a 20 20 20 20 20 20 20  rtline);.       
27770 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
27780 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
27790 74 66 28 73 69 7a 65 6f 66 28 7a 50 72 65 66 69  tf(sizeof(zPrefi
277a0 78 29 2c 20 7a 50 72 65 66 69 78 2c 20 22 45 72  x), zPrefix, "Er
277b0 72 6f 72 3a 22 29 3b 0a 20 20 20 20 20 20 20 20  ror:");.        
277c0 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 45  }.        if( zE
277d0 72 72 4d 73 67 21 3d 30 20 29 7b 0a 20 20 20 20  rrMsg!=0 ){.    
277e0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
277f0 66 28 73 74 64 65 72 72 2c 20 22 25 73 20 25 73  f(stderr, "%s %s
27800 5c 6e 22 2c 20 7a 50 72 65 66 69 78 2c 20 7a 45  \n", zPrefix, zE
27810 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20 20  rrMsg);.        
27820 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
27830 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20  ErrMsg);.       
27840 20 20 20 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a     zErrMsg = 0;.
27850 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
27860 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
27870 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73  intf(stderr, "%s
27880 20 25 73 5c 6e 22 2c 20 7a 50 72 65 66 69 78 2c   %s\n", zPrefix,
27890 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
278a0 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20 20  p->db));.       
278b0 20 7d 0a 20 20 20 20 20 20 20 20 65 72 72 43 6e   }.        errCn
278c0 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  t++;.      }else
278d0 20 69 66 28 20 70 2d 3e 63 6f 75 6e 74 43 68 61   if( p->countCha
278e0 6e 67 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20  nges ){.        
278f0 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
27900 74 2c 20 22 63 68 61 6e 67 65 73 3a 20 25 33 64  t, "changes: %3d
27910 20 20 20 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73     total_changes
27920 3a 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20  : %d\n",.       
27930 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
27940 5f 63 68 61 6e 67 65 73 28 70 2d 3e 64 62 29 2c  _changes(p->db),
27950 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63   sqlite3_total_c
27960 68 61 6e 67 65 73 28 70 2d 3e 64 62 29 29 3b 0a  hanges(p->db));.
27970 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 53        }.      nS
27980 71 6c 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 66  ql = 0;.      if
27990 28 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 20 29 7b  ( p->outCount ){
279a0 0a 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f  .        output_
279b0 72 65 73 65 74 28 70 29 3b 0a 20 20 20 20 20 20  reset(p);.      
279c0 20 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 20 3d 20    p->outCount = 
279d0 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
279e0 65 6c 73 65 20 69 66 28 20 6e 53 71 6c 20 26 26  else if( nSql &&
279f0 20 5f 61 6c 6c 5f 77 68 69 74 65 73 70 61 63 65   _all_whitespace
27a00 28 7a 53 71 6c 29 20 29 7b 0a 20 20 20 20 20 20  (zSql) ){.      
27a10 69 66 28 20 70 2d 3e 65 63 68 6f 4f 6e 20 29 20  if( p->echoOn ) 
27a20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 7a  printf("%s\n", z
27a30 53 71 6c 29 3b 0a 20 20 20 20 20 20 6e 53 71 6c  Sql);.      nSql
27a40 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 0;.    }.  }.
27a50 20 20 69 66 28 20 6e 53 71 6c 20 29 7b 0a 20 20    if( nSql ){.  
27a60 20 20 69 66 28 20 21 5f 61 6c 6c 5f 77 68 69 74    if( !_all_whit
27a70 65 73 70 61 63 65 28 7a 53 71 6c 29 20 29 7b 0a  espace(zSql) ){.
27a80 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
27a90 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
27aa0 3a 20 69 6e 63 6f 6d 70 6c 65 74 65 20 53 51 4c  : incomplete SQL
27ab0 3a 20 25 73 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a  : %s\n", zSql);.
27ac0 20 20 20 20 20 20 65 72 72 43 6e 74 2b 2b 3b 0a        errCnt++;.
27ad0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66 72 65 65      }.  }.  free
27ae0 28 7a 53 71 6c 29 3b 0a 20 20 66 72 65 65 28 7a  (zSql);.  free(z
27af0 4c 69 6e 65 29 3b 0a 20 20 72 65 74 75 72 6e 20  Line);.  return 
27b00 65 72 72 43 6e 74 3e 30 3b 0a 7d 0a 0a 2f 2a 0a  errCnt>0;.}../*.
27b10 2a 2a 20 52 65 74 75 72 6e 20 61 20 70 61 74 68  ** Return a path
27b20 6e 61 6d 65 20 77 68 69 63 68 20 69 73 20 74 68  name which is th
27b30 65 20 75 73 65 72 27 73 20 68 6f 6d 65 20 64 69  e user's home di
27b40 72 65 63 74 6f 72 79 2e 20 20 41 0a 2a 2a 20 30  rectory.  A.** 0
27b50 20 72 65 74 75 72 6e 20 69 6e 64 69 63 61 74 65   return indicate
27b60 73 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f  s an error of so
27b70 6d 65 20 6b 69 6e 64 2e 0a 2a 2f 0a 73 74 61 74  me kind..*/.stat
27b80 69 63 20 63 68 61 72 20 2a 66 69 6e 64 5f 68 6f  ic char *find_ho
27b90 6d 65 5f 64 69 72 28 69 6e 74 20 63 6c 65 61 72  me_dir(int clear
27ba0 46 6c 61 67 29 7b 0a 20 20 73 74 61 74 69 63 20  Flag){.  static 
27bb0 63 68 61 72 20 2a 68 6f 6d 65 5f 64 69 72 20 3d  char *home_dir =
27bc0 20 4e 55 4c 4c 3b 0a 20 20 69 66 28 20 63 6c 65   NULL;.  if( cle
27bd0 61 72 46 6c 61 67 20 29 7b 0a 20 20 20 20 66 72  arFlag ){.    fr
27be0 65 65 28 68 6f 6d 65 5f 64 69 72 29 3b 0a 20 20  ee(home_dir);.  
27bf0 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20 30 3b 0a    home_dir = 0;.
27c00 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
27c10 7d 0a 20 20 69 66 28 20 68 6f 6d 65 5f 64 69 72  }.  if( home_dir
27c20 20 29 20 72 65 74 75 72 6e 20 68 6f 6d 65 5f 64   ) return home_d
27c30 69 72 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  ir;..#if !define
27c40 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
27c50 66 69 6e 65 64 28 57 49 4e 33 32 29 20 26 26 20  fined(WIN32) && 
27c60 21 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f  !defined(_WIN32_
27c70 57 43 45 29 20 5c 0a 20 20 20 20 20 26 26 20 21  WCE) \.     && !
27c80 64 65 66 69 6e 65 64 28 5f 5f 52 54 50 5f 5f 29  defined(__RTP__)
27c90 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57 52   && !defined(_WR
27ca0 53 5f 4b 45 52 4e 45 4c 29 0a 20 20 7b 0a 20 20  S_KERNEL).  {.  
27cb0 20 20 73 74 72 75 63 74 20 70 61 73 73 77 64 20    struct passwd 
27cc0 2a 70 77 65 6e 74 3b 0a 20 20 20 20 75 69 64 5f  *pwent;.    uid_
27cd0 74 20 75 69 64 20 3d 20 67 65 74 75 69 64 28 29  t uid = getuid()
27ce0 3b 0a 20 20 20 20 69 66 28 20 28 70 77 65 6e 74  ;.    if( (pwent
27cf0 3d 67 65 74 70 77 75 69 64 28 75 69 64 29 29 20  =getpwuid(uid)) 
27d00 21 3d 20 4e 55 4c 4c 29 20 7b 0a 20 20 20 20 20  != NULL) {.     
27d10 20 68 6f 6d 65 5f 64 69 72 20 3d 20 70 77 65 6e   home_dir = pwen
27d20 74 2d 3e 70 77 5f 64 69 72 3b 0a 20 20 20 20 7d  t->pw_dir;.    }
27d30 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .  }.#endif..#if
27d40 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f   defined(_WIN32_
27d50 57 43 45 29 0a 20 20 2f 2a 20 57 69 6e 64 6f 77  WCE).  /* Window
27d60 73 20 43 45 20 28 61 72 6d 2d 77 69 6e 63 65 2d  s CE (arm-wince-
27d70 6d 69 6e 67 77 33 32 63 65 2d 67 63 63 29 20 64  mingw32ce-gcc) d
27d80 6f 65 73 20 6e 6f 74 20 70 72 6f 76 69 64 65 20  oes not provide 
27d90 67 65 74 65 6e 76 28 29 0a 20 20 20 2a 2f 0a 20  getenv().   */. 
27da0 20 68 6f 6d 65 5f 64 69 72 20 3d 20 22 2f 22 3b   home_dir = "/";
27db0 0a 23 65 6c 73 65 0a 0a 23 69 66 20 64 65 66 69  .#else..#if defi
27dc0 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c 20 64  ned(_WIN32) || d
27dd0 65 66 69 6e 65 64 28 57 49 4e 33 32 29 0a 20 20  efined(WIN32).  
27de0 69 66 20 28 21 68 6f 6d 65 5f 64 69 72 29 20 7b  if (!home_dir) {
27df0 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20  .    home_dir = 
27e00 67 65 74 65 6e 76 28 22 55 53 45 52 50 52 4f 46  getenv("USERPROF
27e10 49 4c 45 22 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  ILE");.  }.#endi
27e20 66 0a 0a 20 20 69 66 20 28 21 68 6f 6d 65 5f 64  f..  if (!home_d
27e30 69 72 29 20 7b 0a 20 20 20 20 68 6f 6d 65 5f 64  ir) {.    home_d
27e40 69 72 20 3d 20 67 65 74 65 6e 76 28 22 48 4f 4d  ir = getenv("HOM
27e50 45 22 29 3b 0a 20 20 7d 0a 0a 23 69 66 20 64 65  E");.  }..#if de
27e60 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 7c 7c  fined(_WIN32) ||
27e70 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29 0a   defined(WIN32).
27e80 20 20 69 66 20 28 21 68 6f 6d 65 5f 64 69 72 29    if (!home_dir)
27e90 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 72   {.    char *zDr
27ea0 69 76 65 2c 20 2a 7a 50 61 74 68 3b 0a 20 20 20  ive, *zPath;.   
27eb0 20 69 6e 74 20 6e 3b 0a 20 20 20 20 7a 44 72 69   int n;.    zDri
27ec0 76 65 20 3d 20 67 65 74 65 6e 76 28 22 48 4f 4d  ve = getenv("HOM
27ed0 45 44 52 49 56 45 22 29 3b 0a 20 20 20 20 7a 50  EDRIVE");.    zP
27ee0 61 74 68 20 3d 20 67 65 74 65 6e 76 28 22 48 4f  ath = getenv("HO
27ef0 4d 45 50 41 54 48 22 29 3b 0a 20 20 20 20 69 66  MEPATH");.    if
27f00 28 20 7a 44 72 69 76 65 20 26 26 20 7a 50 61 74  ( zDrive && zPat
27f10 68 20 29 7b 0a 20 20 20 20 20 20 6e 20 3d 20 73  h ){.      n = s
27f20 74 72 6c 65 6e 33 30 28 7a 44 72 69 76 65 29 20  trlen30(zDrive) 
27f30 2b 20 73 74 72 6c 65 6e 33 30 28 7a 50 61 74 68  + strlen30(zPath
27f40 29 20 2b 20 31 3b 0a 20 20 20 20 20 20 68 6f 6d  ) + 1;.      hom
27f50 65 5f 64 69 72 20 3d 20 6d 61 6c 6c 6f 63 28 20  e_dir = malloc( 
27f60 6e 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 68  n );.      if( h
27f70 6f 6d 65 5f 64 69 72 3d 3d 30 20 29 20 72 65 74  ome_dir==0 ) ret
27f80 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 73 71 6c  urn 0;.      sql
27f90 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 6e 2c  ite3_snprintf(n,
27fa0 20 68 6f 6d 65 5f 64 69 72 2c 20 22 25 73 25 73   home_dir, "%s%s
27fb0 22 2c 20 7a 44 72 69 76 65 2c 20 7a 50 61 74 68  ", zDrive, zPath
27fc0 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
27fd0 68 6f 6d 65 5f 64 69 72 3b 0a 20 20 20 20 7d 0a  home_dir;.    }.
27fe0 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20 22      home_dir = "
27ff0 63 3a 5c 5c 22 3b 0a 20 20 7d 0a 23 65 6e 64 69  c:\\";.  }.#endi
28000 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 21 5f 57  f..#endif /* !_W
28010 49 4e 33 32 5f 57 43 45 20 2a 2f 0a 0a 20 20 69  IN32_WCE */..  i
28020 66 28 20 68 6f 6d 65 5f 64 69 72 20 29 7b 0a 20  f( home_dir ){. 
28030 20 20 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c 65     int n = strle
28040 6e 33 30 28 68 6f 6d 65 5f 64 69 72 29 20 2b 20  n30(home_dir) + 
28050 31 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 20 3d  1;.    char *z =
28060 20 6d 61 6c 6c 6f 63 28 20 6e 20 29 3b 0a 20 20   malloc( n );.  
28070 20 20 69 66 28 20 7a 20 29 20 6d 65 6d 63 70 79    if( z ) memcpy
28080 28 7a 2c 20 68 6f 6d 65 5f 64 69 72 2c 20 6e 29  (z, home_dir, n)
28090 3b 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d  ;.    home_dir =
280a0 20 7a 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72   z;.  }..  retur
280b0 6e 20 68 6f 6d 65 5f 64 69 72 3b 0a 7d 0a 0a 2f  n home_dir;.}../
280c0 2a 0a 2a 2a 20 52 65 61 64 20 69 6e 70 75 74 20  *.** Read input 
280d0 66 72 6f 6d 20 74 68 65 20 66 69 6c 65 20 67 69  from the file gi
280e0 76 65 6e 20 62 79 20 73 71 6c 69 74 65 72 63 5f  ven by sqliterc_
280f0 6f 76 65 72 72 69 64 65 2e 20 20 4f 72 20 69 66  override.  Or if
28100 20 74 68 61 74 0a 2a 2a 20 70 61 72 61 6d 65 74   that.** paramet
28110 65 72 20 69 73 20 4e 55 4c 4c 2c 20 74 61 6b 65  er is NULL, take
28120 20 69 6e 70 75 74 20 66 72 6f 6d 20 7e 2f 2e 73   input from ~/.s
28130 71 6c 69 74 65 72 63 0a 2a 2a 0a 2a 2a 20 52 65  qliterc.**.** Re
28140 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
28150 20 6f 66 20 65 72 72 6f 72 73 2e 0a 2a 2f 0a 73   of errors..*/.s
28160 74 61 74 69 63 20 76 6f 69 64 20 70 72 6f 63 65  tatic void proce
28170 73 73 5f 73 71 6c 69 74 65 72 63 28 0a 20 20 53  ss_sqliterc(.  S
28180 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 20 20  hellState *p,   
28190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
281a0 2a 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  * Configuration 
281b0 64 61 74 61 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  data */.  const 
281c0 63 68 61 72 20 2a 73 71 6c 69 74 65 72 63 5f 6f  char *sqliterc_o
281d0 76 65 72 72 69 64 65 20 20 20 2f 2a 20 4e 61 6d  verride   /* Nam
281e0 65 20 6f 66 20 63 6f 6e 66 69 67 20 66 69 6c 65  e of config file
281f0 2e 20 4e 55 4c 4c 20 74 6f 20 75 73 65 20 64 65  . NULL to use de
28200 66 61 75 6c 74 20 2a 2f 0a 29 7b 0a 20 20 63 68  fault */.){.  ch
28210 61 72 20 2a 68 6f 6d 65 5f 64 69 72 20 3d 20 4e  ar *home_dir = N
28220 55 4c 4c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  ULL;.  const cha
28230 72 20 2a 73 71 6c 69 74 65 72 63 20 3d 20 73 71  r *sqliterc = sq
28240 6c 69 74 65 72 63 5f 6f 76 65 72 72 69 64 65 3b  literc_override;
28250 0a 20 20 63 68 61 72 20 2a 7a 42 75 66 20 3d 20  .  char *zBuf = 
28260 30 3b 0a 20 20 46 49 4c 45 20 2a 69 6e 20 3d 20  0;.  FILE *in = 
28270 4e 55 4c 4c 3b 0a 0a 20 20 69 66 20 28 73 71 6c  NULL;..  if (sql
28280 69 74 65 72 63 20 3d 3d 20 4e 55 4c 4c 29 20 7b  iterc == NULL) {
28290 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20  .    home_dir = 
282a0 66 69 6e 64 5f 68 6f 6d 65 5f 64 69 72 28 30 29  find_home_dir(0)
282b0 3b 0a 20 20 20 20 69 66 28 20 68 6f 6d 65 5f 64  ;.    if( home_d
282c0 69 72 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  ir==0 ){.      r
282d0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
282e0 2c 20 22 2d 2d 20 77 61 72 6e 69 6e 67 3a 20 63  , "-- warning: c
282f0 61 6e 6e 6f 74 20 66 69 6e 64 20 68 6f 6d 65 20  annot find home 
28300 64 69 72 65 63 74 6f 72 79 3b 22 0a 20 20 20 20  directory;".    
28310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28320 20 20 22 20 63 61 6e 6e 6f 74 20 72 65 61 64 20    " cannot read 
28330 7e 2f 2e 73 71 6c 69 74 65 72 63 5c 6e 22 29 3b  ~/.sqliterc\n");
28340 0a 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  .      return;. 
28350 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
28360 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 3b 0a 20  _initialize();. 
28370 20 20 20 7a 42 75 66 20 3d 20 73 71 6c 69 74 65     zBuf = sqlite
28380 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 2f 2e 73  3_mprintf("%s/.s
28390 71 6c 69 74 65 72 63 22 2c 68 6f 6d 65 5f 64 69  qliterc",home_di
283a0 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 72 63  r);.    sqliterc
283b0 20 3d 20 7a 42 75 66 3b 0a 20 20 7d 0a 20 20 69   = zBuf;.  }.  i
283c0 6e 20 3d 20 66 6f 70 65 6e 28 73 71 6c 69 74 65  n = fopen(sqlite
283d0 72 63 2c 22 72 62 22 29 3b 0a 20 20 69 66 28 20  rc,"rb");.  if( 
283e0 69 6e 20 29 7b 0a 20 20 20 20 69 66 28 20 73 74  in ){.    if( st
283f0 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69  din_is_interacti
28400 76 65 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  ve ){.      utf8
28410 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
28420 2d 2d 20 4c 6f 61 64 69 6e 67 20 72 65 73 6f 75  -- Loading resou
28430 72 63 65 73 20 66 72 6f 6d 20 25 73 5c 6e 22 2c  rces from %s\n",
28440 73 71 6c 69 74 65 72 63 29 3b 0a 20 20 20 20 7d  sqliterc);.    }
28450 0a 20 20 20 20 70 72 6f 63 65 73 73 5f 69 6e 70  .    process_inp
28460 75 74 28 70 2c 69 6e 29 3b 0a 20 20 20 20 66 63  ut(p,in);.    fc
28470 6c 6f 73 65 28 69 6e 29 3b 0a 20 20 7d 0a 20 20  lose(in);.  }.  
28480 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 42 75  sqlite3_free(zBu
28490 66 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 68 6f  f);.}../*.** Sho
284a0 77 20 61 76 61 69 6c 61 62 6c 65 20 63 6f 6d 6d  w available comm
284b0 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73  and line options
284c0 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73 74  .*/.static const
284d0 20 63 68 61 72 20 7a 4f 70 74 69 6f 6e 73 5b 5d   char zOptions[]
284e0 20 3d 0a 20 20 22 20 20 20 2d 61 73 63 69 69 20   =.  "   -ascii 
284f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
28500 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f  t output mode to
28510 20 27 61 73 63 69 69 27 5c 6e 22 0a 20 20 22 20   'ascii'\n".  " 
28520 20 20 2d 62 61 69 6c 20 20 20 20 20 20 20 20 20    -bail         
28530 20 20 20 20 20 20 20 73 74 6f 70 20 61 66 74 65         stop afte
28540 72 20 68 69 74 74 69 6e 67 20 61 6e 20 65 72 72  r hitting an err
28550 6f 72 5c 6e 22 0a 20 20 22 20 20 20 2d 62 61 74  or\n".  "   -bat
28560 63 68 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ch              
28570 20 66 6f 72 63 65 20 62 61 74 63 68 20 49 2f 4f   force batch I/O
28580 5c 6e 22 0a 20 20 22 20 20 20 2d 63 6f 6c 75 6d  \n".  "   -colum
28590 6e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  n              s
285a0 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74  et output mode t
285b0 6f 20 27 63 6f 6c 75 6d 6e 27 5c 6e 22 0a 20 20  o 'column'\n".  
285c0 22 20 20 20 2d 63 6d 64 20 43 4f 4d 4d 41 4e 44  "   -cmd COMMAND
285d0 20 20 20 20 20 20 20 20 20 72 75 6e 20 5c 22 43           run \"C
285e0 4f 4d 4d 41 4e 44 5c 22 20 62 65 66 6f 72 65 20  OMMAND\" before 
285f0 72 65 61 64 69 6e 67 20 73 74 64 69 6e 5c 6e 22  reading stdin\n"
28600 0a 20 20 22 20 20 20 2d 63 73 76 20 20 20 20 20  .  "   -csv     
28610 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
28620 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f 20 27  output mode to '
28630 63 73 76 27 5c 6e 22 0a 20 20 22 20 20 20 2d 65  csv'\n".  "   -e
28640 63 68 6f 20 20 20 20 20 20 20 20 20 20 20 20 20  cho             
28650 20 20 20 70 72 69 6e 74 20 63 6f 6d 6d 61 6e 64     print command
28660 73 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  s before executi
28670 6f 6e 5c 6e 22 0a 20 20 22 20 20 20 2d 69 6e 69  on\n".  "   -ini
28680 74 20 46 49 4c 45 4e 41 4d 45 20 20 20 20 20 20  t FILENAME      
28690 20 72 65 61 64 2f 70 72 6f 63 65 73 73 20 6e 61   read/process na
286a0 6d 65 64 20 66 69 6c 65 5c 6e 22 0a 20 20 22 20  med file\n".  " 
286b0 20 20 2d 5b 6e 6f 5d 68 65 61 64 65 72 20 20 20    -[no]header   
286c0 20 20 20 20 20 20 20 74 75 72 6e 20 68 65 61 64         turn head
286d0 65 72 73 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22  ers on or off\n"
286e0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
286f0 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
28700 53 33 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  S3) || defined(S
28710 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
28720 53 59 53 35 29 0a 20 20 22 20 20 20 2d 68 65 61  SYS5).  "   -hea
28730 70 20 53 49 5a 45 20 20 20 20 20 20 20 20 20 20  p SIZE          
28740 20 53 69 7a 65 20 6f 66 20 68 65 61 70 20 66 6f   Size of heap fo
28750 72 20 6d 65 6d 73 79 73 33 20 6f 72 20 6d 65 6d  r memsys3 or mem
28760 73 79 73 35 5c 6e 22 0a 23 65 6e 64 69 66 0a 20  sys5\n".#endif. 
28770 20 22 20 20 20 2d 68 65 6c 70 20 20 20 20 20 20   "   -help      
28780 20 20 20 20 20 20 20 20 20 20 73 68 6f 77 20 74            show t
28790 68 69 73 20 6d 65 73 73 61 67 65 5c 6e 22 0a 20  his message\n". 
287a0 20 22 20 20 20 2d 68 74 6d 6c 20 20 20 20 20 20   "   -html      
287b0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6f 75            set ou
287c0 74 70 75 74 20 6d 6f 64 65 20 74 6f 20 48 54 4d  tput mode to HTM
287d0 4c 5c 6e 22 0a 20 20 22 20 20 20 2d 69 6e 74 65  L\n".  "   -inte
287e0 72 61 63 74 69 76 65 20 20 20 20 20 20 20 20 20  ractive         
287f0 66 6f 72 63 65 20 69 6e 74 65 72 61 63 74 69 76  force interactiv
28800 65 20 49 2f 4f 5c 6e 22 0a 20 20 22 20 20 20 2d  e I/O\n".  "   -
28810 6c 69 6e 65 20 20 20 20 20 20 20 20 20 20 20 20  line            
28820 20 20 20 20 73 65 74 20 6f 75 74 70 75 74 20 6d      set output m
28830 6f 64 65 20 74 6f 20 27 6c 69 6e 65 27 5c 6e 22  ode to 'line'\n"
28840 0a 20 20 22 20 20 20 2d 6c 69 73 74 20 20 20 20  .  "   -list    
28850 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
28860 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f 20 27  output mode to '
28870 6c 69 73 74 27 5c 6e 22 0a 20 20 22 20 20 20 2d  list'\n".  "   -
28880 6c 6f 6f 6b 61 73 69 64 65 20 53 49 5a 45 20 4e  lookaside SIZE N
28890 20 20 20 20 75 73 65 20 4e 20 65 6e 74 72 69 65      use N entrie
288a0 73 20 6f 66 20 53 5a 20 62 79 74 65 73 20 66 6f  s of SZ bytes fo
288b0 72 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f  r lookaside memo
288c0 72 79 5c 6e 22 0a 20 20 22 20 20 20 2d 6d 6d 61  ry\n".  "   -mma
288d0 70 20 4e 20 20 20 20 20 20 20 20 20 20 20 20 20  p N             
288e0 20 64 65 66 61 75 6c 74 20 6d 6d 61 70 20 73 69   default mmap si
288f0 7a 65 20 73 65 74 20 74 6f 20 4e 5c 6e 22 0a 23  ze set to N\n".#
28900 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
28910 42 4c 45 5f 4d 55 4c 54 49 50 4c 45 58 0a 20 20  BLE_MULTIPLEX.  
28920 22 20 20 20 2d 6d 75 6c 74 69 70 6c 65 78 20 20  "   -multiplex  
28930 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c 65 20           enable 
28940 74 68 65 20 6d 75 6c 74 69 70 6c 65 78 6f 72 20  the multiplexor 
28950 56 46 53 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20  VFS\n".#endif.  
28960 22 20 20 20 2d 6e 65 77 6c 69 6e 65 20 53 45 50  "   -newline SEP
28970 20 20 20 20 20 20 20 20 20 73 65 74 20 6f 75 74           set out
28980 70 75 74 20 72 6f 77 20 73 65 70 61 72 61 74 6f  put row separato
28990 72 2e 20 44 65 66 61 75 6c 74 3a 20 27 5c 5c 6e  r. Default: '\\n
289a0 27 5c 6e 22 0a 20 20 22 20 20 20 2d 6e 75 6c 6c  '\n".  "   -null
289b0 76 61 6c 75 65 20 54 45 58 54 20 20 20 20 20 20  value TEXT      
289c0 73 65 74 20 74 65 78 74 20 73 74 72 69 6e 67 20  set text string 
289d0 66 6f 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e  for NULL values.
289e0 20 44 65 66 61 75 6c 74 20 27 27 5c 6e 22 0a 20   Default ''\n". 
289f0 20 22 20 20 20 2d 70 61 67 65 63 61 63 68 65 20   "   -pagecache 
28a00 53 49 5a 45 20 4e 20 20 20 20 75 73 65 20 4e 20  SIZE N    use N 
28a10 73 6c 6f 74 73 20 6f 66 20 53 5a 20 62 79 74 65  slots of SZ byte
28a20 73 20 65 61 63 68 20 66 6f 72 20 70 61 67 65 20  s each for page 
28a30 63 61 63 68 65 20 6d 65 6d 6f 72 79 5c 6e 22 0a  cache memory\n".
28a40 20 20 22 20 20 20 2d 73 63 72 61 74 63 68 20 53    "   -scratch S
28a50 49 5a 45 20 4e 20 20 20 20 20 20 75 73 65 20 4e  IZE N      use N
28a60 20 73 6c 6f 74 73 20 6f 66 20 53 5a 20 62 79 74   slots of SZ byt
28a70 65 73 20 65 61 63 68 20 66 6f 72 20 73 63 72 61  es each for scra
28a80 74 63 68 20 6d 65 6d 6f 72 79 5c 6e 22 0a 20 20  tch memory\n".  
28a90 22 20 20 20 2d 73 65 70 61 72 61 74 6f 72 20 53  "   -separator S
28aa0 45 50 20 20 20 20 20 20 20 73 65 74 20 6f 75 74  EP       set out
28ab0 70 75 74 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72  put column separ
28ac0 61 74 6f 72 2e 20 44 65 66 61 75 6c 74 3a 20 27  ator. Default: '
28ad0 7c 27 5c 6e 22 0a 20 20 22 20 20 20 2d 73 74 61  |'\n".  "   -sta
28ae0 74 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ts              
28af0 20 70 72 69 6e 74 20 6d 65 6d 6f 72 79 20 73 74   print memory st
28b00 61 74 73 20 62 65 66 6f 72 65 20 65 61 63 68 20  ats before each 
28b10 66 69 6e 61 6c 69 7a 65 5c 6e 22 0a 20 20 22 20  finalize\n".  " 
28b20 20 20 2d 76 65 72 73 69 6f 6e 20 20 20 20 20 20    -version      
28b30 20 20 20 20 20 20 20 73 68 6f 77 20 53 51 4c 69         show SQLi
28b40 74 65 20 76 65 72 73 69 6f 6e 5c 6e 22 0a 20 20  te version\n".  
28b50 22 20 20 20 2d 76 66 73 20 4e 41 4d 45 20 20 20  "   -vfs NAME   
28b60 20 20 20 20 20 20 20 20 20 75 73 65 20 4e 41 4d           use NAM
28b70 45 20 61 73 20 74 68 65 20 64 65 66 61 75 6c 74  E as the default
28b80 20 56 46 53 5c 6e 22 0a 23 69 66 64 65 66 20 53   VFS\n".#ifdef S
28b90 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 56 46 53  QLITE_ENABLE_VFS
28ba0 54 52 41 43 45 0a 20 20 22 20 20 20 2d 76 66 73  TRACE.  "   -vfs
28bb0 74 72 61 63 65 20 20 20 20 20 20 20 20 20 20 20  trace           
28bc0 20 65 6e 61 62 6c 65 20 74 72 61 63 69 6e 67 20   enable tracing 
28bd0 6f 66 20 61 6c 6c 20 56 46 53 20 63 61 6c 6c 73  of all VFS calls
28be0 5c 6e 22 0a 23 65 6e 64 69 66 0a 3b 0a 73 74 61  \n".#endif.;.sta
28bf0 74 69 63 20 76 6f 69 64 20 75 73 61 67 65 28 69  tic void usage(i
28c00 6e 74 20 73 68 6f 77 44 65 74 61 69 6c 29 7b 0a  nt showDetail){.
28c10 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
28c20 64 65 72 72 2c 0a 20 20 20 20 20 20 22 55 73 61  derr,.      "Usa
28c30 67 65 3a 20 25 73 20 5b 4f 50 54 49 4f 4e 53 5d  ge: %s [OPTIONS]
28c40 20 46 49 4c 45 4e 41 4d 45 20 5b 53 51 4c 5d 5c   FILENAME [SQL]\
28c50 6e 22 0a 20 20 20 20 20 20 22 46 49 4c 45 4e 41  n".      "FILENA
28c60 4d 45 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  ME is the name o
28c70 66 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74 61  f an SQLite data
28c80 62 61 73 65 2e 20 41 20 6e 65 77 20 64 61 74 61  base. A new data
28c90 62 61 73 65 20 69 73 20 63 72 65 61 74 65 64 5c  base is created\
28ca0 6e 22 0a 20 20 20 20 20 20 22 69 66 20 74 68 65  n".      "if the
28cb0 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 70   file does not p
28cc0 72 65 76 69 6f 75 73 6c 79 20 65 78 69 73 74 2e  reviously exist.
28cd0 5c 6e 22 2c 20 41 72 67 76 30 29 3b 0a 20 20 69  \n", Argv0);.  i
28ce0 66 28 20 73 68 6f 77 44 65 74 61 69 6c 20 29 7b  f( showDetail ){
28cf0 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
28d00 28 73 74 64 65 72 72 2c 20 22 4f 50 54 49 4f 4e  (stderr, "OPTION
28d10 53 20 69 6e 63 6c 75 64 65 3a 5c 6e 25 73 22 2c  S include:\n%s",
28d20 20 7a 4f 70 74 69 6f 6e 73 29 3b 0a 20 20 7d 65   zOptions);.  }e
28d30 6c 73 65 7b 0a 20 20 20 20 72 61 77 5f 70 72 69  lse{.    raw_pri
28d40 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 65  ntf(stderr, "Use
28d50 20 74 68 65 20 2d 68 65 6c 70 20 6f 70 74 69 6f   the -help optio
28d60 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  n for additional
28d70 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 5c 6e 22 29   information\n")
28d80 3b 0a 20 20 7d 0a 20 20 65 78 69 74 28 31 29 3b  ;.  }.  exit(1);
28d90 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61  .}../*.** Initia
28da0 6c 69 7a 65 20 74 68 65 20 73 74 61 74 65 20 69  lize the state i
28db0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 64 61  nformation in da
28dc0 74 61 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  ta.*/.static voi
28dd0 64 20 6d 61 69 6e 5f 69 6e 69 74 28 53 68 65 6c  d main_init(Shel
28de0 6c 53 74 61 74 65 20 2a 64 61 74 61 29 20 7b 0a  lState *data) {.
28df0 20 20 6d 65 6d 73 65 74 28 64 61 74 61 2c 20 30    memset(data, 0
28e00 2c 20 73 69 7a 65 6f 66 28 2a 64 61 74 61 29 29  , sizeof(*data))
28e10 3b 0a 20 20 64 61 74 61 2d 3e 6e 6f 72 6d 61 6c  ;.  data->normal
28e20 4d 6f 64 65 20 3d 20 64 61 74 61 2d 3e 63 4d 6f  Mode = data->cMo
28e30 64 65 20 3d 20 64 61 74 61 2d 3e 6d 6f 64 65 20  de = data->mode 
28e40 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a 20 20 64  = MODE_List;.  d
28e50 61 74 61 2d 3e 61 75 74 6f 45 78 70 6c 61 69 6e  ata->autoExplain
28e60 20 3d 20 31 3b 0a 20 20 6d 65 6d 63 70 79 28 64   = 1;.  memcpy(d
28e70 61 74 61 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f  ata->colSeparato
28e80 72 2c 53 45 50 5f 43 6f 6c 75 6d 6e 2c 20 32 29  r,SEP_Column, 2)
28e90 3b 0a 20 20 6d 65 6d 63 70 79 28 64 61 74 61 2d  ;.  memcpy(data-
28ea0 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 53 45  >rowSeparator,SE
28eb0 50 5f 52 6f 77 2c 20 32 29 3b 0a 20 20 64 61 74  P_Row, 2);.  dat
28ec0 61 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 3d 20  a->showHeader = 
28ed0 30 3b 0a 20 20 64 61 74 61 2d 3e 73 68 65 6c 6c  0;.  data->shell
28ee0 46 6c 67 73 20 3d 20 53 48 46 4c 47 5f 4c 6f 6f  Flgs = SHFLG_Loo
28ef0 6b 61 73 69 64 65 3b 0a 20 20 73 71 6c 69 74 65  kaside;.  sqlite
28f00 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f  3_config(SQLITE_
28f10 43 4f 4e 46 49 47 5f 55 52 49 2c 20 31 29 3b 0a  CONFIG_URI, 1);.
28f20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67    sqlite3_config
28f30 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c  (SQLITE_CONFIG_L
28f40 4f 47 2c 20 73 68 65 6c 6c 4c 6f 67 2c 20 64 61  OG, shellLog, da
28f50 74 61 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  ta);.  sqlite3_c
28f60 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e  onfig(SQLITE_CON
28f70 46 49 47 5f 4d 55 4c 54 49 54 48 52 45 41 44 29  FIG_MULTITHREAD)
28f80 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72  ;.  sqlite3_snpr
28f90 69 6e 74 66 28 73 69 7a 65 6f 66 28 6d 61 69 6e  intf(sizeof(main
28fa0 50 72 6f 6d 70 74 29 2c 20 6d 61 69 6e 50 72 6f  Prompt), mainPro
28fb0 6d 70 74 2c 22 73 71 6c 69 74 65 3e 20 22 29 3b  mpt,"sqlite> ");
28fc0 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69  .  sqlite3_snpri
28fd0 6e 74 66 28 73 69 7a 65 6f 66 28 63 6f 6e 74 69  ntf(sizeof(conti
28fe0 6e 75 65 50 72 6f 6d 70 74 29 2c 20 63 6f 6e 74  nuePrompt), cont
28ff0 69 6e 75 65 50 72 6f 6d 70 74 2c 22 20 20 20 2e  inuePrompt,"   .
29000 2e 2e 3e 20 22 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ..> ");.}../*.**
29010 20 4f 75 74 70 75 74 20 74 65 78 74 20 74 6f 20   Output text to 
29020 74 68 65 20 63 6f 6e 73 6f 6c 65 20 69 6e 20 61  the console in a
29030 20 66 6f 6e 74 20 74 68 61 74 20 61 74 74 72 61   font that attra
29040 63 74 73 20 65 78 74 72 61 20 61 74 74 65 6e 74  cts extra attent
29050 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 5f  ion..*/.#ifdef _
29060 57 49 4e 33 32 0a 73 74 61 74 69 63 20 76 6f 69  WIN32.static voi
29070 64 20 70 72 69 6e 74 42 6f 6c 64 28 63 6f 6e 73  d printBold(cons
29080 74 20 63 68 61 72 20 2a 7a 54 65 78 74 29 7b 0a  t char *zText){.
29090 20 20 48 41 4e 44 4c 45 20 6f 75 74 20 3d 20 47    HANDLE out = G
290a0 65 74 53 74 64 48 61 6e 64 6c 65 28 53 54 44 5f  etStdHandle(STD_
290b0 4f 55 54 50 55 54 5f 48 41 4e 44 4c 45 29 3b 0a  OUTPUT_HANDLE);.
290c0 20 20 43 4f 4e 53 4f 4c 45 5f 53 43 52 45 45 4e    CONSOLE_SCREEN
290d0 5f 42 55 46 46 45 52 5f 49 4e 46 4f 20 64 65 66  _BUFFER_INFO def
290e0 61 75 6c 74 53 63 72 65 65 6e 49 6e 66 6f 3b 0a  aultScreenInfo;.
290f0 20 20 47 65 74 43 6f 6e 73 6f 6c 65 53 63 72 65    GetConsoleScre
29100 65 6e 42 75 66 66 65 72 49 6e 66 6f 28 6f 75 74  enBufferInfo(out
29110 2c 20 26 64 65 66 61 75 6c 74 53 63 72 65 65 6e  , &defaultScreen
29120 49 6e 66 6f 29 3b 0a 20 20 53 65 74 43 6f 6e 73  Info);.  SetCons
29130 6f 6c 65 54 65 78 74 41 74 74 72 69 62 75 74 65  oleTextAttribute
29140 28 6f 75 74 2c 0a 20 20 20 20 20 20 20 20 20 46  (out,.         F
29150 4f 52 45 47 52 4f 55 4e 44 5f 52 45 44 7c 46 4f  OREGROUND_RED|FO
29160 52 45 47 52 4f 55 4e 44 5f 49 4e 54 45 4e 53 49  REGROUND_INTENSI
29170 54 59 0a 20 20 29 3b 0a 20 20 70 72 69 6e 74 66  TY.  );.  printf
29180 28 22 25 73 22 2c 20 7a 54 65 78 74 29 3b 0a 20  ("%s", zText);. 
29190 20 53 65 74 43 6f 6e 73 6f 6c 65 54 65 78 74 41   SetConsoleTextA
291a0 74 74 72 69 62 75 74 65 28 6f 75 74 2c 20 64 65  ttribute(out, de
291b0 66 61 75 6c 74 53 63 72 65 65 6e 49 6e 66 6f 2e  faultScreenInfo.
291c0 77 41 74 74 72 69 62 75 74 65 73 29 3b 0a 7d 0a  wAttributes);.}.
291d0 23 65 6c 73 65 0a 73 74 61 74 69 63 20 76 6f 69  #else.static voi
291e0 64 20 70 72 69 6e 74 42 6f 6c 64 28 63 6f 6e 73  d printBold(cons
291f0 74 20 63 68 61 72 20 2a 7a 54 65 78 74 29 7b 0a  t char *zText){.
29200 20 20 70 72 69 6e 74 66 28 22 5c 30 33 33 5b 31    printf("\033[1
29210 6d 25 73 5c 30 33 33 5b 30 6d 22 2c 20 7a 54 65  m%s\033[0m", zTe
29220 78 74 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  xt);.}.#endif../
29230 2a 0a 2a 2a 20 47 65 74 20 74 68 65 20 61 72 67  *.** Get the arg
29240 75 6d 65 6e 74 20 74 6f 20 61 6e 20 2d 2d 6f 70  ument to an --op
29250 74 69 6f 6e 2e 20 20 54 68 72 6f 77 20 61 6e 20  tion.  Throw an 
29260 65 72 72 6f 72 20 61 6e 64 20 64 69 65 20 69 66  error and die if
29270 20 6e 6f 20 61 72 67 75 6d 65 6e 74 0a 2a 2a 20   no argument.** 
29280 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2f  is available..*/
29290 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 63 6d  .static char *cm
292a0 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c  dline_option_val
292b0 75 65 28 69 6e 74 20 61 72 67 63 2c 20 63 68 61  ue(int argc, cha
292c0 72 20 2a 2a 61 72 67 76 2c 20 69 6e 74 20 69 29  r **argv, int i)
292d0 7b 0a 20 20 69 66 28 20 69 3d 3d 61 72 67 63 20  {.  if( i==argc 
292e0 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  ){.    utf8_prin
292f0 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 3a 20  tf(stderr, "%s: 
29300 45 72 72 6f 72 3a 20 6d 69 73 73 69 6e 67 20 61  Error: missing a
29310 72 67 75 6d 65 6e 74 20 74 6f 20 25 73 5c 6e 22  rgument to %s\n"
29320 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 72  ,.            ar
29330 67 76 5b 30 5d 2c 20 61 72 67 76 5b 61 72 67 63  gv[0], argv[argc
29340 2d 31 5d 29 3b 0a 20 20 20 20 65 78 69 74 28 31  -1]);.    exit(1
29350 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
29360 61 72 67 76 5b 69 5d 3b 0a 7d 0a 0a 23 69 66 6e  argv[i];.}..#ifn
29370 64 65 66 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c  def SQLITE_SHELL
29380 5f 49 53 5f 55 54 46 38 0a 23 20 20 69 66 20 28  _IS_UTF8.#  if (
29390 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
293a0 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  || defined(WIN32
293b0 29 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 4d  )) && defined(_M
293c0 53 43 5f 56 45 52 29 0a 23 20 20 20 20 64 65 66  SC_VER).#    def
293d0 69 6e 65 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c  ine SQLITE_SHELL
293e0 5f 49 53 5f 55 54 46 38 20 20 20 20 20 20 20 20  _IS_UTF8        
293f0 20 20 28 30 29 0a 23 20 20 65 6c 73 65 0a 23 20    (0).#  else.# 
29400 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
29410 5f 53 48 45 4c 4c 5f 49 53 5f 55 54 46 38 20 20  _SHELL_IS_UTF8  
29420 20 20 20 20 20 20 20 20 28 31 29 0a 23 20 20 65          (1).#  e
29430 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 23 69 66  ndif.#endif..#if
29440 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53   SQLITE_SHELL_IS
29450 5f 55 54 46 38 0a 69 6e 74 20 53 51 4c 49 54 45  _UTF8.int SQLITE
29460 5f 43 44 45 43 4c 20 6d 61 69 6e 28 69 6e 74 20  _CDECL main(int 
29470 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67  argc, char **arg
29480 76 29 7b 0a 23 65 6c 73 65 0a 69 6e 74 20 53 51  v){.#else.int SQ
29490 4c 49 54 45 5f 43 44 45 43 4c 20 77 6d 61 69 6e  LITE_CDECL wmain
294a0 28 69 6e 74 20 61 72 67 63 2c 20 77 63 68 61 72  (int argc, wchar
294b0 5f 74 20 2a 2a 77 61 72 67 76 29 7b 0a 20 20 63  _t **wargv){.  c
294c0 68 61 72 20 2a 2a 61 72 67 76 3b 0a 23 65 6e 64  har **argv;.#end
294d0 69 66 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  if.  char *zErrM
294e0 73 67 20 3d 20 30 3b 0a 20 20 53 68 65 6c 6c 53  sg = 0;.  ShellS
294f0 74 61 74 65 20 64 61 74 61 3b 0a 20 20 63 6f 6e  tate data;.  con
29500 73 74 20 63 68 61 72 20 2a 7a 49 6e 69 74 46 69  st char *zInitFi
29510 6c 65 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69 3b  le = 0;.  int i;
29520 0a 20 20 69 6e 74 20 72 63 20 3d 20 30 3b 0a 20  .  int rc = 0;. 
29530 20 69 6e 74 20 77 61 72 6e 49 6e 6d 65 6d 6f 72   int warnInmemor
29540 79 44 62 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72  yDb = 0;.  int r
29550 65 61 64 53 74 64 69 6e 20 3d 20 31 3b 0a 20 20  eadStdin = 1;.  
29560 69 6e 74 20 6e 43 6d 64 20 3d 20 30 3b 0a 20 20  int nCmd = 0;.  
29570 63 68 61 72 20 2a 2a 61 7a 43 6d 64 20 3d 20 30  char **azCmd = 0
29580 3b 0a 0a 20 20 73 65 74 42 69 6e 61 72 79 4d 6f  ;..  setBinaryMo
29590 64 65 28 73 74 64 69 6e 2c 20 30 29 3b 0a 20 20  de(stdin, 0);.  
295a0 73 65 74 76 62 75 66 28 73 74 64 65 72 72 2c 20  setvbuf(stderr, 
295b0 30 2c 20 5f 49 4f 4e 42 46 2c 20 30 29 3b 20 2f  0, _IONBF, 0); /
295c0 2a 20 4d 61 6b 65 20 73 75 72 65 20 73 74 64 65  * Make sure stde
295d0 72 72 20 69 73 20 75 6e 62 75 66 66 65 72 65 64  rr is unbuffered
295e0 20 2a 2f 0a 20 20 73 74 64 69 6e 5f 69 73 5f 69   */.  stdin_is_i
295f0 6e 74 65 72 61 63 74 69 76 65 20 3d 20 69 73 61  nteractive = isa
29600 74 74 79 28 30 29 3b 0a 20 20 73 74 64 6f 75 74  tty(0);.  stdout
29610 5f 69 73 5f 63 6f 6e 73 6f 6c 65 20 3d 20 69 73  _is_console = is
29620 61 74 74 79 28 31 29 3b 0a 0a 23 69 66 20 55 53  atty(1);..#if US
29630 45 5f 53 59 53 54 45 4d 5f 53 51 4c 49 54 45 2b  E_SYSTEM_SQLITE+
29640 30 21 3d 31 0a 20 20 69 66 28 20 73 74 72 63 6d  0!=1.  if( strcm
29650 70 28 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65  p(sqlite3_source
29660 69 64 28 29 2c 53 51 4c 49 54 45 5f 53 4f 55 52  id(),SQLITE_SOUR
29670 43 45 5f 49 44 29 21 3d 30 20 29 7b 0a 20 20 20  CE_ID)!=0 ){.   
29680 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
29690 65 72 72 2c 20 22 53 51 4c 69 74 65 20 68 65 61  err, "SQLite hea
296a0 64 65 72 20 61 6e 64 20 73 6f 75 72 63 65 20 76  der and source v
296b0 65 72 73 69 6f 6e 20 6d 69 73 6d 61 74 63 68 5c  ersion mismatch\
296c0 6e 25 73 5c 6e 25 73 5c 6e 22 2c 0a 20 20 20 20  n%s\n%s\n",.    
296d0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
296e0 73 6f 75 72 63 65 69 64 28 29 2c 20 53 51 4c 49  sourceid(), SQLI
296f0 54 45 5f 53 4f 55 52 43 45 5f 49 44 29 3b 0a 20  TE_SOURCE_ID);. 
29700 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a     exit(1);.  }.
29710 23 65 6e 64 69 66 0a 20 20 6d 61 69 6e 5f 69 6e  #endif.  main_in
29720 69 74 28 26 64 61 74 61 29 3b 0a 23 69 66 20 21  it(&data);.#if !
29730 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53 5f  SQLITE_SHELL_IS_
29740 55 54 46 38 0a 20 20 73 71 6c 69 74 65 33 5f 69  UTF8.  sqlite3_i
29750 6e 69 74 69 61 6c 69 7a 65 28 29 3b 0a 20 20 61  nitialize();.  a
29760 72 67 76 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61  rgv = sqlite3_ma
29770 6c 6c 6f 63 36 34 28 73 69 7a 65 6f 66 28 61 72  lloc64(sizeof(ar
29780 67 76 5b 30 5d 29 2a 61 72 67 63 29 3b 0a 20 20  gv[0])*argc);.  
29790 69 66 28 20 61 72 67 76 3d 3d 30 20 29 7b 0a 20  if( argv==0 ){. 
297a0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
297b0 64 65 72 72 2c 20 22 6f 75 74 20 6f 66 20 6d 65  derr, "out of me
297c0 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20 65 78  mory\n");.    ex
297d0 69 74 28 31 29 3b 0a 20 20 7d 0a 20 20 66 6f 72  it(1);.  }.  for
297e0 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b  (i=0; i<argc; i+
297f0 2b 29 7b 0a 20 20 20 20 61 72 67 76 5b 69 5d 20  +){.    argv[i] 
29800 3d 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  = sqlite3_win32_
29810 75 6e 69 63 6f 64 65 5f 74 6f 5f 75 74 66 38 28  unicode_to_utf8(
29820 77 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20 69  wargv[i]);.    i
29830 66 28 20 61 72 67 76 5b 69 5d 3d 3d 30 20 29 7b  f( argv[i]==0 ){
29840 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
29850 66 28 73 74 64 65 72 72 2c 20 22 6f 75 74 20 6f  f(stderr, "out o
29860 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20  f memory\n");.  
29870 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20      exit(1);.   
29880 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
29890 61 73 73 65 72 74 28 20 61 72 67 63 3e 3d 31 20  assert( argc>=1 
298a0 26 26 20 61 72 67 76 20 26 26 20 61 72 67 76 5b  && argv && argv[
298b0 30 5d 20 29 3b 0a 20 20 41 72 67 76 30 20 3d 20  0] );.  Argv0 = 
298c0 61 72 67 76 5b 30 5d 3b 0a 0a 20 20 2f 2a 20 4d  argv[0];..  /* M
298d0 61 6b 65 20 73 75 72 65 20 77 65 20 68 61 76 65  ake sure we have
298e0 20 61 20 76 61 6c 69 64 20 73 69 67 6e 61 6c 20   a valid signal 
298f0 68 61 6e 64 6c 65 72 20 65 61 72 6c 79 2c 20 62  handler early, b
29900 65 66 6f 72 65 20 61 6e 79 74 68 69 6e 67 0a 20  efore anything. 
29910 20 2a 2a 20 65 6c 73 65 20 69 73 20 64 6f 6e 65   ** else is done
29920 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 49  ..  */.#ifdef SI
29930 47 49 4e 54 0a 20 20 73 69 67 6e 61 6c 28 53 49  GINT.  signal(SI
29940 47 49 4e 54 2c 20 69 6e 74 65 72 72 75 70 74 5f  GINT, interrupt_
29950 68 61 6e 64 6c 65 72 29 3b 0a 23 65 6e 64 69 66  handler);.#endif
29960 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
29970 53 48 45 4c 4c 5f 44 42 4e 41 4d 45 5f 50 52 4f  SHELL_DBNAME_PRO
29980 43 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 49 66 20  C.  {.    /* If 
29990 74 68 65 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c  the SQLITE_SHELL
299a0 5f 44 42 4e 41 4d 45 5f 50 52 4f 43 20 6d 61 63  _DBNAME_PROC mac
299b0 72 6f 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74  ro is defined, t
299c0 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e 61  hen it is the na
299d0 6d 65 0a 20 20 20 20 2a 2a 20 6f 66 20 61 20 43  me.    ** of a C
299e0 2d 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 77  -function that w
299f0 69 6c 6c 20 70 72 6f 76 69 64 65 20 74 68 65 20  ill provide the 
29a00 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  name of the data
29a10 62 61 73 65 20 66 69 6c 65 2e 20 20 55 73 65 0a  base file.  Use.
29a20 20 20 20 20 2a 2a 20 74 68 69 73 20 63 6f 6d 70      ** this comp
29a30 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
29a40 74 6f 20 65 6d 62 65 64 20 74 68 69 73 20 73 68  to embed this sh
29a50 65 6c 6c 20 70 72 6f 67 72 61 6d 20 69 6e 20 6c  ell program in l
29a60 61 72 67 65 72 0a 20 20 20 20 2a 2a 20 61 70 70  arger.    ** app
29a70 6c 69 63 61 74 69 6f 6e 73 2e 20 2a 2f 0a 20 20  lications. */.  
29a80 20 20 65 78 74 65 72 6e 20 76 6f 69 64 20 53 51    extern void SQ
29a90 4c 49 54 45 5f 53 48 45 4c 4c 5f 44 42 4e 41 4d  LITE_SHELL_DBNAM
29aa0 45 5f 50 52 4f 43 28 63 6f 6e 73 74 20 63 68 61  E_PROC(const cha
29ab0 72 2a 2a 29 3b 0a 20 20 20 20 53 51 4c 49 54 45  r**);.    SQLITE
29ac0 5f 53 48 45 4c 4c 5f 44 42 4e 41 4d 45 5f 50 52  _SHELL_DBNAME_PR
29ad0 4f 43 28 26 64 61 74 61 2e 7a 44 62 46 69 6c 65  OC(&data.zDbFile
29ae0 6e 61 6d 65 29 3b 0a 20 20 20 20 77 61 72 6e 49  name);.    warnI
29af0 6e 6d 65 6d 6f 72 79 44 62 20 3d 20 30 3b 0a 20  nmemoryDb = 0;. 
29b00 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20   }.#endif..  /* 
29b10 44 6f 20 61 6e 20 69 6e 69 74 69 61 6c 20 70 61  Do an initial pa
29b20 73 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 63  ss through the c
29b30 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 61 72 67 75  ommand-line argu
29b40 6d 65 6e 74 20 74 6f 20 6c 6f 63 61 74 65 0a 20  ment to locate. 
29b50 20 2a 2a 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   ** the name of 
29b60 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
29b70 65 2c 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  e, the name of t
29b80 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
29b90 6e 20 66 69 6c 65 2c 0a 20 20 2a 2a 20 74 68 65  n file,.  ** the
29ba0 20 73 69 7a 65 20 6f 66 20 74 68 65 20 61 6c 74   size of the alt
29bb0 65 72 6e 61 74 69 76 65 20 6d 61 6c 6c 6f 63 20  ernative malloc 
29bc0 68 65 61 70 2c 0a 20 20 2a 2a 20 61 6e 64 20 74  heap,.  ** and t
29bd0 68 65 20 66 69 72 73 74 20 63 6f 6d 6d 61 6e 64  he first command
29be0 20 74 6f 20 65 78 65 63 75 74 65 2e 0a 20 20 2a   to execute..  *
29bf0 2f 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 61  /.  for(i=1; i<a
29c00 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 63  rgc; i++){.    c
29c10 68 61 72 20 2a 7a 3b 0a 20 20 20 20 7a 20 3d 20  har *z;.    z = 
29c20 61 72 67 76 5b 69 5d 3b 0a 20 20 20 20 69 66 28  argv[i];.    if(
29c30 20 7a 5b 30 5d 21 3d 27 2d 27 20 29 7b 0a 20 20   z[0]!='-' ){.  
29c40 20 20 20 20 69 66 28 20 64 61 74 61 2e 7a 44 62      if( data.zDb
29c50 46 69 6c 65 6e 61 6d 65 3d 3d 30 20 29 7b 0a 20  Filename==0 ){. 
29c60 20 20 20 20 20 20 20 64 61 74 61 2e 7a 44 62 46         data.zDbF
29c70 69 6c 65 6e 61 6d 65 20 3d 20 7a 3b 0a 20 20 20  ilename = z;.   
29c80 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
29c90 20 20 2f 2a 20 45 78 63 65 73 73 73 20 61 72 67    /* Excesss arg
29ca0 75 6d 65 6e 74 73 20 61 72 65 20 69 6e 74 65 72  uments are inter
29cb0 70 72 65 74 65 64 20 61 73 20 53 51 4c 20 28 6f  preted as SQL (o
29cc0 72 20 64 6f 74 2d 63 6f 6d 6d 61 6e 64 73 29 20  r dot-commands) 
29cd0 61 6e 64 0a 20 20 20 20 20 20 20 20 2a 2a 20 6d  and.        ** m
29ce0 65 61 6e 20 74 68 61 74 20 6e 6f 74 68 69 6e 67  ean that nothing
29cf0 20 69 73 20 72 65 61 64 20 66 72 6f 6d 20 73 74   is read from st
29d00 64 69 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 72  din */.        r
29d10 65 61 64 53 74 64 69 6e 20 3d 20 30 3b 0a 20 20  eadStdin = 0;.  
29d20 20 20 20 20 20 20 6e 43 6d 64 2b 2b 3b 0a 20 20        nCmd++;.  
29d30 20 20 20 20 20 20 61 7a 43 6d 64 20 3d 20 72 65        azCmd = re
29d40 61 6c 6c 6f 63 28 61 7a 43 6d 64 2c 20 73 69 7a  alloc(azCmd, siz
29d50 65 6f 66 28 61 7a 43 6d 64 5b 30 5d 29 2a 6e 43  eof(azCmd[0])*nC
29d60 6d 64 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  md);.        if(
29d70 20 61 7a 43 6d 64 3d 3d 30 20 29 7b 0a 20 20 20   azCmd==0 ){.   
29d80 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
29d90 66 28 73 74 64 65 72 72 2c 20 22 6f 75 74 20 6f  f(stderr, "out o
29da0 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20  f memory\n");.  
29db0 20 20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b          exit(1);
29dc0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
29dd0 20 20 20 61 7a 43 6d 64 5b 6e 43 6d 64 2d 31 5d     azCmd[nCmd-1]
29de0 20 3d 20 7a 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = z;.      }.  
29df0 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 5b 31 5d    }.    if( z[1]
29e00 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20 20 20  =='-' ) z++;.   
29e10 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
29e20 73 65 70 61 72 61 74 6f 72 22 29 3d 3d 30 0a 20  separator")==0. 
29e30 20 20 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a 2c      || strcmp(z,
29e40 22 2d 6e 75 6c 6c 76 61 6c 75 65 22 29 3d 3d 30  "-nullvalue")==0
29e50 0a 20 20 20 20 20 7c 7c 20 73 74 72 63 6d 70 28  .     || strcmp(
29e60 7a 2c 22 2d 6e 65 77 6c 69 6e 65 22 29 3d 3d 30  z,"-newline")==0
29e70 0a 20 20 20 20 20 7c 7c 20 73 74 72 63 6d 70 28  .     || strcmp(
29e80 7a 2c 22 2d 63 6d 64 22 29 3d 3d 30 0a 20 20 20  z,"-cmd")==0.   
29e90 20 29 7b 0a 20 20 20 20 20 20 28 76 6f 69 64 29   ){.      (void)
29ea0 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76  cmdline_option_v
29eb0 61 6c 75 65 28 61 72 67 63 2c 20 61 72 67 76 2c  alue(argc, argv,
29ec0 20 2b 2b 69 29 3b 0a 20 20 20 20 7d 65 6c 73 65   ++i);.    }else
29ed0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
29ee0 69 6e 69 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20  init")==0 ){.   
29ef0 20 20 20 7a 49 6e 69 74 46 69 6c 65 20 3d 20 63     zInitFile = c
29f00 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61  mdline_option_va
29f10 6c 75 65 28 61 72 67 63 2c 20 61 72 67 76 2c 20  lue(argc, argv, 
29f20 2b 2b 69 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  ++i);.    }else 
29f30 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 62  if( strcmp(z,"-b
29f40 61 74 63 68 22 29 3d 3d 30 20 29 7b 0a 20 20 20  atch")==0 ){.   
29f50 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 63 68     /* Need to ch
29f60 65 63 6b 20 66 6f 72 20 62 61 74 63 68 20 6d 6f  eck for batch mo
29f70 64 65 20 68 65 72 65 20 74 6f 20 73 6f 20 77 65  de here to so we
29f80 20 63 61 6e 20 61 76 6f 69 64 20 70 72 69 6e 74   can avoid print
29f90 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 69 6e 66  ing.      ** inf
29fa0 6f 72 6d 61 74 69 6f 6e 61 6c 20 6d 65 73 73 61  ormational messa
29fb0 67 65 73 20 28 6c 69 6b 65 20 66 72 6f 6d 20 70  ges (like from p
29fc0 72 6f 63 65 73 73 5f 73 71 6c 69 74 65 72 63 29  rocess_sqliterc)
29fd0 20 62 65 66 6f 72 65 0a 20 20 20 20 20 20 2a 2a   before.      **
29fe0 20 77 65 20 64 6f 20 74 68 65 20 61 63 74 75 61   we do the actua
29ff0 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20  l processing of 
2a000 61 72 67 75 6d 65 6e 74 73 20 6c 61 74 65 72 20  arguments later 
2a010 69 6e 20 61 20 73 65 63 6f 6e 64 20 70 61 73 73  in a second pass
2a020 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
2a030 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61   stdin_is_intera
2a040 63 74 69 76 65 20 3d 20 30 3b 0a 20 20 20 20 7d  ctive = 0;.    }
2a050 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
2a060 7a 2c 22 2d 68 65 61 70 22 29 3d 3d 30 20 29 7b  z,"-heap")==0 ){
2a070 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2a080 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
2a090 53 33 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  S3) || defined(S
2a0a0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
2a0b0 53 59 53 35 29 0a 20 20 20 20 20 20 63 6f 6e 73  SYS5).      cons
2a0c0 74 20 63 68 61 72 20 2a 7a 53 69 7a 65 3b 0a 20  t char *zSize;. 
2a0d0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74       sqlite3_int
2a0e0 36 34 20 73 7a 48 65 61 70 3b 0a 0a 20 20 20 20  64 szHeap;..    
2a0f0 20 20 7a 53 69 7a 65 20 3d 20 63 6d 64 6c 69 6e    zSize = cmdlin
2a100 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61  e_option_value(a
2a110 72 67 63 2c 20 61 72 67 76 2c 20 2b 2b 69 29 3b  rgc, argv, ++i);
2a120 0a 20 20 20 20 20 20 73 7a 48 65 61 70 20 3d 20  .      szHeap = 
2a130 69 6e 74 65 67 65 72 56 61 6c 75 65 28 7a 53 69  integerValue(zSi
2a140 7a 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73  ze);.      if( s
2a150 7a 48 65 61 70 3e 30 78 37 66 66 66 30 30 30 30  zHeap>0x7fff0000
2a160 20 29 20 73 7a 48 65 61 70 20 3d 20 30 78 37 66   ) szHeap = 0x7f
2a170 66 66 30 30 30 30 3b 0a 20 20 20 20 20 20 73 71  ff0000;.      sq
2a180 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c  lite3_config(SQL
2a190 49 54 45 5f 43 4f 4e 46 49 47 5f 48 45 41 50 2c  ITE_CONFIG_HEAP,
2a1a0 20 6d 61 6c 6c 6f 63 28 28 69 6e 74 29 73 7a 48   malloc((int)szH
2a1b0 65 61 70 29 2c 20 28 69 6e 74 29 73 7a 48 65 61  eap), (int)szHea
2a1c0 70 2c 20 36 34 29 3b 0a 23 65 6c 73 65 0a 20 20  p, 64);.#else.  
2a1d0 20 20 20 20 28 76 6f 69 64 29 63 6d 64 6c 69 6e      (void)cmdlin
2a1e0 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61  e_option_value(a
2a1f0 72 67 63 2c 20 61 72 67 76 2c 20 2b 2b 69 29 3b  rgc, argv, ++i);
2a200 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73  .#endif.    }els
2a210 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
2a220 2d 73 63 72 61 74 63 68 22 29 3d 3d 30 20 29 7b  -scratch")==0 ){
2a230 0a 20 20 20 20 20 20 69 6e 74 20 6e 2c 20 73 7a  .      int n, sz
2a240 3b 0a 20 20 20 20 20 20 73 7a 20 3d 20 28 69 6e  ;.      sz = (in
2a250 74 29 69 6e 74 65 67 65 72 56 61 6c 75 65 28 63  t)integerValue(c
2a260 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61  mdline_option_va
2a270 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b  lue(argc,argv,++
2a280 69 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73  i));.      if( s
2a290 7a 3e 34 30 30 30 30 30 20 29 20 73 7a 20 3d 20  z>400000 ) sz = 
2a2a0 34 30 30 30 30 30 3b 0a 20 20 20 20 20 20 69 66  400000;.      if
2a2b0 28 20 73 7a 3c 32 35 30 30 20 29 20 73 7a 20 3d  ( sz<2500 ) sz =
2a2c0 20 32 35 30 30 3b 0a 20 20 20 20 20 20 6e 20 3d   2500;.      n =
2a2d0 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61 6c   (int)integerVal
2a2e0 75 65 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f  ue(cmdline_optio
2a2f0 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72 67  n_value(argc,arg
2a300 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20 69  v,++i));.      i
2a310 66 28 20 6e 3e 31 30 20 29 20 6e 20 3d 20 31 30  f( n>10 ) n = 10
2a320 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 3c 31 20  ;.      if( n<1 
2a330 29 20 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 73  ) n = 1;.      s
2a340 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51  qlite3_config(SQ
2a350 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 53 43 52 41  LITE_CONFIG_SCRA
2a360 54 43 48 2c 20 6d 61 6c 6c 6f 63 28 6e 2a 73 7a  TCH, malloc(n*sz
2a370 2b 31 29 2c 20 73 7a 2c 20 6e 29 3b 0a 20 20 20  +1), sz, n);.   
2a380 20 20 20 64 61 74 61 2e 73 68 65 6c 6c 46 6c 67     data.shellFlg
2a390 73 20 7c 3d 20 53 48 46 4c 47 5f 53 63 72 61 74  s |= SHFLG_Scrat
2a3a0 63 68 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ch;.    }else if
2a3b0 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 70 61 67  ( strcmp(z,"-pag
2a3c0 65 63 61 63 68 65 22 29 3d 3d 30 20 29 7b 0a 20  ecache")==0 ){. 
2a3d0 20 20 20 20 20 69 6e 74 20 6e 2c 20 73 7a 3b 0a       int n, sz;.
2a3e0 20 20 20 20 20 20 73 7a 20 3d 20 28 69 6e 74 29        sz = (int)
2a3f0 69 6e 74 65 67 65 72 56 61 6c 75 65 28 63 6d 64  integerValue(cmd
2a400 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75  line_option_valu
2a410 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29  e(argc,argv,++i)
2a420 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 7a 3e  );.      if( sz>
2a430 37 30 30 30 30 20 29 20 73 7a 20 3d 20 37 30 30  70000 ) sz = 700
2a440 30 30 3b 0a 20 20 20 20 20 20 69 66 28 20 73 7a  00;.      if( sz
2a450 3c 30 20 29 20 73 7a 20 3d 20 30 3b 0a 20 20 20  <0 ) sz = 0;.   
2a460 20 20 20 6e 20 3d 20 28 69 6e 74 29 69 6e 74 65     n = (int)inte
2a470 67 65 72 56 61 6c 75 65 28 63 6d 64 6c 69 6e 65  gerValue(cmdline
2a480 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72  _option_value(ar
2a490 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20  gc,argv,++i));. 
2a4a0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e       sqlite3_con
2a4b0 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49  fig(SQLITE_CONFI
2a4c0 47 5f 50 41 47 45 43 41 43 48 45 2c 0a 20 20 20  G_PAGECACHE,.   
2a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4e0 20 28 6e 3e 30 20 26 26 20 73 7a 3e 30 29 20 3f   (n>0 && sz>0) ?
2a4f0 20 6d 61 6c 6c 6f 63 28 6e 2a 73 7a 29 20 3a 20   malloc(n*sz) : 
2a500 30 2c 20 73 7a 2c 20 6e 29 3b 0a 20 20 20 20 20  0, sz, n);.     
2a510 20 64 61 74 61 2e 73 68 65 6c 6c 46 6c 67 73 20   data.shellFlgs 
2a520 7c 3d 20 53 48 46 4c 47 5f 50 61 67 65 63 61 63  |= SHFLG_Pagecac
2a530 68 65 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  he;.    }else if
2a540 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6c 6f 6f  ( strcmp(z,"-loo
2a550 6b 61 73 69 64 65 22 29 3d 3d 30 20 29 7b 0a 20  kaside")==0 ){. 
2a560 20 20 20 20 20 69 6e 74 20 6e 2c 20 73 7a 3b 0a       int n, sz;.
2a570 20 20 20 20 20 20 73 7a 20 3d 20 28 69 6e 74 29        sz = (int)
2a580 69 6e 74 65 67 65 72 56 61 6c 75 65 28 63 6d 64  integerValue(cmd
2a590 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75  line_option_valu
2a5a0 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29  e(argc,argv,++i)
2a5b0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 7a 3c  );.      if( sz<
2a5c0 30 20 29 20 73 7a 20 3d 20 30 3b 0a 20 20 20 20  0 ) sz = 0;.    
2a5d0 20 20 6e 20 3d 20 28 69 6e 74 29 69 6e 74 65 67    n = (int)integ
2a5e0 65 72 56 61 6c 75 65 28 63 6d 64 6c 69 6e 65 5f  erValue(cmdline_
2a5f0 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67  option_value(arg
2a600 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20  c,argv,++i));.  
2a610 20 20 20 20 69 66 28 20 6e 3c 30 20 29 20 6e 20      if( n<0 ) n 
2a620 3d 20 30 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  = 0;.      sqlit
2a630 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45  e3_config(SQLITE
2a640 5f 43 4f 4e 46 49 47 5f 4c 4f 4f 4b 41 53 49 44  _CONFIG_LOOKASID
2a650 45 2c 20 73 7a 2c 20 6e 29 3b 0a 20 20 20 20 20  E, sz, n);.     
2a660 20 69 66 28 20 73 7a 2a 6e 3d 3d 30 20 29 20 64   if( sz*n==0 ) d
2a670 61 74 61 2e 73 68 65 6c 6c 46 6c 67 73 20 26 3d  ata.shellFlgs &=
2a680 20 7e 53 48 46 4c 47 5f 4c 6f 6f 6b 61 73 69 64   ~SHFLG_Lookasid
2a690 65 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  e;.#ifdef SQLITE
2a6a0 5f 45 4e 41 42 4c 45 5f 56 46 53 54 52 41 43 45  _ENABLE_VFSTRACE
2a6b0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
2a6c0 74 72 63 6d 70 28 7a 2c 22 2d 76 66 73 74 72 61  trcmp(z,"-vfstra
2a6d0 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ce")==0 ){.     
2a6e0 20 65 78 74 65 72 6e 20 69 6e 74 20 76 66 73 74   extern int vfst
2a6f0 72 61 63 65 5f 72 65 67 69 73 74 65 72 28 0a 20  race_register(. 
2a700 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
2a710 61 72 20 2a 7a 54 72 61 63 65 4e 61 6d 65 2c 0a  ar *zTraceName,.
2a720 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
2a730 68 61 72 20 2a 7a 4f 6c 64 56 66 73 4e 61 6d 65  har *zOldVfsName
2a740 2c 0a 20 20 20 20 20 20 20 20 20 69 6e 74 20 28  ,.         int (
2a750 2a 78 4f 75 74 29 28 63 6f 6e 73 74 20 63 68 61  *xOut)(const cha
2a760 72 2a 2c 76 6f 69 64 2a 29 2c 0a 20 20 20 20 20  r*,void*),.     
2a770 20 20 20 20 76 6f 69 64 20 2a 70 4f 75 74 41 72      void *pOutAr
2a780 67 2c 0a 20 20 20 20 20 20 20 20 20 69 6e 74 20  g,.         int 
2a790 6d 61 6b 65 44 65 66 61 75 6c 74 0a 20 20 20 20  makeDefault.    
2a7a0 20 20 29 3b 0a 20 20 20 20 20 20 76 66 73 74 72    );.      vfstr
2a7b0 61 63 65 5f 72 65 67 69 73 74 65 72 28 22 74 72  ace_register("tr
2a7c0 61 63 65 22 2c 30 2c 28 69 6e 74 28 2a 29 28 63  ace",0,(int(*)(c
2a7d0 6f 6e 73 74 20 63 68 61 72 2a 2c 76 6f 69 64 2a  onst char*,void*
2a7e0 29 29 66 70 75 74 73 2c 73 74 64 65 72 72 2c 31  ))fputs,stderr,1
2a7f0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
2a800 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
2a810 55 4c 54 49 50 4c 45 58 0a 20 20 20 20 7d 65 6c  ULTIPLEX.    }el
2a820 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
2a830 22 2d 6d 75 6c 74 69 70 6c 65 78 22 29 3d 3d 30  "-multiplex")==0
2a840 20 29 7b 0a 20 20 20 20 20 20 65 78 74 65 72 6e   ){.      extern
2a850 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 75 6c   int sqlite3_mul
2a860 74 69 70 6c 65 5f 69 6e 69 74 69 61 6c 69 7a 65  tiple_initialize
2a870 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  (const char*,int
2a880 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
2a890 5f 6d 75 6c 74 69 70 6c 65 78 5f 69 6e 69 74 69  _multiplex_initi
2a8a0 61 6c 69 7a 65 28 30 2c 20 31 29 3b 0a 23 65 6e  alize(0, 1);.#en
2a8b0 64 69 66 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  dif.    }else if
2a8c0 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6d 6d 61  ( strcmp(z,"-mma
2a8d0 70 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  p")==0 ){.      
2a8e0 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a  sqlite3_int64 sz
2a8f0 20 3d 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28   = integerValue(
2a900 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76  cmdline_option_v
2a910 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c 2b  alue(argc,argv,+
2a920 2b 69 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  +i));.      sqli
2a930 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54  te3_config(SQLIT
2a940 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53 49  E_CONFIG_MMAP_SI
2a950 5a 45 2c 20 73 7a 2c 20 73 7a 29 3b 0a 20 20 20  ZE, sz, sz);.   
2a960 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
2a970 70 28 7a 2c 22 2d 76 66 73 22 29 3d 3d 30 20 29  p(z,"-vfs")==0 )
2a980 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
2a990 76 66 73 20 2a 70 56 66 73 20 3d 20 73 71 6c 69  vfs *pVfs = sqli
2a9a0 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 63 6d 64  te3_vfs_find(cmd
2a9b0 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75  line_option_valu
2a9c0 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29  e(argc,argv,++i)
2a9d0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 56 66  );.      if( pVf
2a9e0 73 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  s ){.        sql
2a9f0 69 74 65 33 5f 76 66 73 5f 72 65 67 69 73 74 65  ite3_vfs_registe
2aa00 72 28 70 56 66 73 2c 20 31 29 3b 0a 20 20 20 20  r(pVfs, 1);.    
2aa10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
2aa20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64   utf8_printf(std
2aa30 65 72 72 2c 20 22 6e 6f 20 73 75 63 68 20 56 46  err, "no such VF
2aa40 53 3a 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 72  S: \"%s\"\n", ar
2aa50 67 76 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  gv[i]);.        
2aa60 65 78 69 74 28 31 29 3b 0a 20 20 20 20 20 20 7d  exit(1);.      }
2aa70 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
2aa80 20 64 61 74 61 2e 7a 44 62 46 69 6c 65 6e 61 6d   data.zDbFilenam
2aa90 65 3d 3d 30 20 29 7b 0a 23 69 66 6e 64 65 66 20  e==0 ){.#ifndef 
2aaa0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f  SQLITE_OMIT_MEMO
2aab0 52 59 44 42 0a 20 20 20 20 64 61 74 61 2e 7a 44  RYDB.    data.zD
2aac0 62 46 69 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65  bFilename = ":me
2aad0 6d 6f 72 79 3a 22 3b 0a 20 20 20 20 77 61 72 6e  mory:";.    warn
2aae0 49 6e 6d 65 6d 6f 72 79 44 62 20 3d 20 61 72 67  InmemoryDb = arg
2aaf0 63 3d 3d 31 3b 0a 23 65 6c 73 65 0a 20 20 20 20  c==1;.#else.    
2ab00 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
2ab10 72 72 2c 22 25 73 3a 20 45 72 72 6f 72 3a 20 6e  rr,"%s: Error: n
2ab20 6f 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 6e  o database filen
2ab30 61 6d 65 20 73 70 65 63 69 66 69 65 64 5c 6e 22  ame specified\n"
2ab40 2c 20 41 72 67 76 30 29 3b 0a 20 20 20 20 72 65  , Argv0);.    re
2ab50 74 75 72 6e 20 31 3b 0a 23 65 6e 64 69 66 0a 20  turn 1;.#endif. 
2ab60 20 7d 0a 20 20 64 61 74 61 2e 6f 75 74 20 3d 20   }.  data.out = 
2ab70 73 74 64 6f 75 74 3b 0a 0a 20 20 2f 2a 20 47 6f  stdout;..  /* Go
2ab80 20 61 68 65 61 64 20 61 6e 64 20 6f 70 65 6e 20   ahead and open 
2ab90 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2aba0 65 20 69 66 20 69 74 20 61 6c 72 65 61 64 79 20  e if it already 
2abb0 65 78 69 73 74 73 2e 20 20 49 66 20 74 68 65 0a  exists.  If the.
2abc0 20 20 2a 2a 20 66 69 6c 65 20 64 6f 65 73 20 6e    ** file does n
2abd0 6f 74 20 65 78 69 73 74 2c 20 64 65 6c 61 79 20  ot exist, delay 
2abe0 6f 70 65 6e 69 6e 67 20 69 74 2e 20 20 54 68 69  opening it.  Thi
2abf0 73 20 70 72 65 76 65 6e 74 73 20 65 6d 70 74 79  s prevents empty
2ac00 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 66   database.  ** f
2ac10 69 6c 65 73 20 66 72 6f 6d 20 62 65 69 6e 67 20  iles from being 
2ac20 63 72 65 61 74 65 64 20 69 66 20 61 20 75 73 65  created if a use
2ac30 72 20 6d 69 73 74 79 70 65 73 20 74 68 65 20 64  r mistypes the d
2ac40 61 74 61 62 61 73 65 20 6e 61 6d 65 20 61 72 67  atabase name arg
2ac50 75 6d 65 6e 74 0a 20 20 2a 2a 20 74 6f 20 74 68  ument.  ** to th
2ac60 65 20 73 71 6c 69 74 65 20 63 6f 6d 6d 61 6e 64  e sqlite command
2ac70 2d 6c 69 6e 65 20 74 6f 6f 6c 2e 0a 20 20 2a 2f  -line tool..  */
2ac80 0a 20 20 69 66 28 20 61 63 63 65 73 73 28 64 61  .  if( access(da
2ac90 74 61 2e 7a 44 62 46 69 6c 65 6e 61 6d 65 2c 20  ta.zDbFilename, 
2aca0 30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 6f 70 65  0)==0 ){.    ope
2acb0 6e 5f 64 62 28 26 64 61 74 61 2c 20 30 29 3b 0a  n_db(&data, 0);.
2acc0 20 20 7d 0a 0a 20 20 2f 2a 20 50 72 6f 63 65 73    }..  /* Proces
2acd0 73 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61  s the initializa
2ace0 74 69 6f 6e 20 66 69 6c 65 20 69 66 20 74 68 65  tion file if the
2acf0 72 65 20 69 73 20 6f 6e 65 2e 20 20 49 66 20 6e  re is one.  If n
2ad00 6f 20 2d 69 6e 69 74 20 6f 70 74 69 6f 6e 0a 20  o -init option. 
2ad10 20 2a 2a 20 69 73 20 67 69 76 65 6e 20 6f 6e 20   ** is given on 
2ad20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
2ad30 2c 20 6c 6f 6f 6b 20 66 6f 72 20 61 20 66 69 6c  , look for a fil
2ad40 65 20 6e 61 6d 65 64 20 7e 2f 2e 73 71 6c 69 74  e named ~/.sqlit
2ad50 65 72 63 20 61 6e 64 0a 20 20 2a 2a 20 74 72 79  erc and.  ** try
2ad60 20 74 6f 20 70 72 6f 63 65 73 73 20 69 74 2e 0a   to process it..
2ad70 20 20 2a 2f 0a 20 20 70 72 6f 63 65 73 73 5f 73    */.  process_s
2ad80 71 6c 69 74 65 72 63 28 26 64 61 74 61 2c 7a 49  qliterc(&data,zI
2ad90 6e 69 74 46 69 6c 65 29 3b 0a 0a 20 20 2f 2a 20  nitFile);..  /* 
2ada0 4d 61 6b 65 20 61 20 73 65 63 6f 6e 64 20 70 61  Make a second pa
2adb0 73 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 63  ss through the c
2adc0 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 61 72 67 75  ommand-line argu
2add0 6d 65 6e 74 20 61 6e 64 20 73 65 74 0a 20 20 2a  ment and set.  *
2ade0 2a 20 6f 70 74 69 6f 6e 73 2e 20 20 54 68 69 73  * options.  This
2adf0 20 73 65 63 6f 6e 64 20 70 61 73 73 20 69 73 20   second pass is 
2ae00 64 65 6c 61 79 65 64 20 75 6e 74 69 6c 20 61 66  delayed until af
2ae10 74 65 72 20 74 68 65 20 69 6e 69 74 69 61 6c 69  ter the initiali
2ae20 7a 61 74 69 6f 6e 0a 20 20 2a 2a 20 66 69 6c 65  zation.  ** file
2ae30 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 73 6f   is processed so
2ae40 20 74 68 61 74 20 74 68 65 20 63 6f 6d 6d 61 6e   that the comman
2ae50 64 2d 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 73  d-line arguments
2ae60 20 77 69 6c 6c 20 6f 76 65 72 72 69 64 65 0a 20   will override. 
2ae70 20 2a 2a 20 73 65 74 74 69 6e 67 73 20 69 6e 20   ** settings in 
2ae80 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
2ae90 6f 6e 20 66 69 6c 65 2e 0a 20 20 2a 2f 0a 20 20  on file..  */.  
2aea0 66 6f 72 28 69 3d 31 3b 20 69 3c 61 72 67 63 3b  for(i=1; i<argc;
2aeb0 20 69 2b 2b 29 7b 0a 20 20 20 20 63 68 61 72 20   i++){.    char 
2aec0 2a 7a 20 3d 20 61 72 67 76 5b 69 5d 3b 0a 20 20  *z = argv[i];.  
2aed0 20 20 69 66 28 20 7a 5b 30 5d 21 3d 27 2d 27 20    if( z[0]!='-' 
2aee0 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
2aef0 69 66 28 20 7a 5b 31 5d 3d 3d 27 2d 27 20 29 7b  if( z[1]=='-' ){
2af00 20 7a 2b 2b 3b 20 7d 0a 20 20 20 20 69 66 28 20   z++; }.    if( 
2af10 73 74 72 63 6d 70 28 7a 2c 22 2d 69 6e 69 74 22  strcmp(z,"-init"
2af20 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 2b  )==0 ){.      i+
2af30 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  +;.    }else if(
2af40 20 73 74 72 63 6d 70 28 7a 2c 22 2d 68 74 6d 6c   strcmp(z,"-html
2af50 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64  ")==0 ){.      d
2af60 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f  ata.mode = MODE_
2af70 48 74 6d 6c 3b 0a 20 20 20 20 7d 65 6c 73 65 20  Html;.    }else 
2af80 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6c  if( strcmp(z,"-l
2af90 69 73 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ist")==0 ){.    
2afa0 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f    data.mode = MO
2afb0 44 45 5f 4c 69 73 74 3b 0a 20 20 20 20 7d 65 6c  DE_List;.    }el
2afc0 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
2afd0 22 2d 6c 69 6e 65 22 29 3d 3d 30 20 29 7b 0a 20  "-line")==0 ){. 
2afe0 20 20 20 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d       data.mode =
2aff0 20 4d 4f 44 45 5f 4c 69 6e 65 3b 0a 20 20 20 20   MODE_Line;.    
2b000 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
2b010 28 7a 2c 22 2d 63 6f 6c 75 6d 6e 22 29 3d 3d 30  (z,"-column")==0
2b020 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 6d   ){.      data.m
2b030 6f 64 65 20 3d 20 4d 4f 44 45 5f 43 6f 6c 75 6d  ode = MODE_Colum
2b040 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  n;.    }else if(
2b050 20 73 74 72 63 6d 70 28 7a 2c 22 2d 63 73 76 22   strcmp(z,"-csv"
2b060 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61  )==0 ){.      da
2b070 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 43  ta.mode = MODE_C
2b080 73 76 3b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79  sv;.      memcpy
2b090 28 64 61 74 61 2e 63 6f 6c 53 65 70 61 72 61 74  (data.colSeparat
2b0a0 6f 72 2c 22 2c 22 2c 32 29 3b 0a 20 20 20 20 7d  or,",",2);.    }
2b0b0 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
2b0c0 7a 2c 22 2d 61 73 63 69 69 22 29 3d 3d 30 20 29  z,"-ascii")==0 )
2b0d0 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 6d 6f 64  {.      data.mod
2b0e0 65 20 3d 20 4d 4f 44 45 5f 41 73 63 69 69 3b 0a  e = MODE_Ascii;.
2b0f0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
2b100 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 64 61  printf(sizeof(da
2b110 74 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29  ta.colSeparator)
2b120 2c 20 64 61 74 61 2e 63 6f 6c 53 65 70 61 72 61  , data.colSepara
2b130 74 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  tor,.           
2b140 20 20 20 20 20 20 20 20 20 20 20 20 53 45 50 5f              SEP_
2b150 55 6e 69 74 29 3b 0a 20 20 20 20 20 20 73 71 6c  Unit);.      sql
2b160 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
2b170 7a 65 6f 66 28 64 61 74 61 2e 72 6f 77 53 65 70  zeof(data.rowSep
2b180 61 72 61 74 6f 72 29 2c 20 64 61 74 61 2e 72 6f  arator), data.ro
2b190 77 53 65 70 61 72 61 74 6f 72 2c 0a 20 20 20 20  wSeparator,.    
2b1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1b0 20 20 20 53 45 50 5f 52 65 63 6f 72 64 29 3b 0a     SEP_Record);.
2b1c0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
2b1d0 72 63 6d 70 28 7a 2c 22 2d 73 65 70 61 72 61 74  rcmp(z,"-separat
2b1e0 6f 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  or")==0 ){.     
2b1f0 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2b200 66 28 73 69 7a 65 6f 66 28 64 61 74 61 2e 63 6f  f(sizeof(data.co
2b210 6c 53 65 70 61 72 61 74 6f 72 29 2c 20 64 61 74  lSeparator), dat
2b220 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c 0a  a.colSeparator,.
2b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b240 20 20 20 20 20 20 20 22 25 73 22 2c 63 6d 64 6c         "%s",cmdl
2b250 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65  ine_option_value
2b260 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29  (argc,argv,++i))
2b270 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
2b280 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 65 77 6c 69  strcmp(z,"-newli
2b290 6e 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ne")==0 ){.     
2b2a0 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2b2b0 66 28 73 69 7a 65 6f 66 28 64 61 74 61 2e 72 6f  f(sizeof(data.ro
2b2c0 77 53 65 70 61 72 61 74 6f 72 29 2c 20 64 61 74  wSeparator), dat
2b2d0 61 2e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 0a  a.rowSeparator,.
2b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2f0 20 20 20 20 20 20 20 22 25 73 22 2c 63 6d 64 6c         "%s",cmdl
2b300 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65  ine_option_value
2b310 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29  (argc,argv,++i))
2b320 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
2b330 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 75 6c 6c 76  strcmp(z,"-nullv
2b340 61 6c 75 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  alue")==0 ){.   
2b350 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
2b360 6e 74 66 28 73 69 7a 65 6f 66 28 64 61 74 61 2e  ntf(sizeof(data.
2b370 6e 75 6c 6c 56 61 6c 75 65 29 2c 20 64 61 74 61  nullValue), data
2b380 2e 6e 75 6c 6c 56 61 6c 75 65 2c 0a 20 20 20 20  .nullValue,.    
2b390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3a0 20 20 20 22 25 73 22 2c 63 6d 64 6c 69 6e 65 5f     "%s",cmdline_
2b3b0 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67  option_value(arg
2b3c0 63 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20  c,argv,++i));.  
2b3d0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
2b3e0 6d 70 28 7a 2c 22 2d 68 65 61 64 65 72 22 29 3d  mp(z,"-header")=
2b3f0 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61  =0 ){.      data
2b400 2e 73 68 6f 77 48 65 61 64 65 72 20 3d 20 31 3b  .showHeader = 1;
2b410 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
2b420 74 72 63 6d 70 28 7a 2c 22 2d 6e 6f 68 65 61 64  trcmp(z,"-nohead
2b430 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  er")==0 ){.     
2b440 20 64 61 74 61 2e 73 68 6f 77 48 65 61 64 65 72   data.showHeader
2b450 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 0;.    }else 
2b460 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 65  if( strcmp(z,"-e
2b470 63 68 6f 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  cho")==0 ){.    
2b480 20 20 64 61 74 61 2e 65 63 68 6f 4f 6e 20 3d 20    data.echoOn = 
2b490 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  1;.    }else if(
2b4a0 20 73 74 72 63 6d 70 28 7a 2c 22 2d 65 71 70 22   strcmp(z,"-eqp"
2b4b0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61  )==0 ){.      da
2b4c0 74 61 2e 61 75 74 6f 45 51 50 20 3d 20 31 3b 0a  ta.autoEQP = 1;.
2b4d0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
2b4e0 72 63 6d 70 28 7a 2c 22 2d 65 71 70 66 75 6c 6c  rcmp(z,"-eqpfull
2b4f0 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64  ")==0 ){.      d
2b500 61 74 61 2e 61 75 74 6f 45 51 50 20 3d 20 32 3b  ata.autoEQP = 2;
2b510 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
2b520 74 72 63 6d 70 28 7a 2c 22 2d 73 74 61 74 73 22  trcmp(z,"-stats"
2b530 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61  )==0 ){.      da
2b540 74 61 2e 73 74 61 74 73 4f 6e 20 3d 20 31 3b 0a  ta.statsOn = 1;.
2b550 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
2b560 72 63 6d 70 28 7a 2c 22 2d 73 63 61 6e 73 74 61  rcmp(z,"-scansta
2b570 74 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ts")==0 ){.     
2b580 20 64 61 74 61 2e 73 63 61 6e 73 74 61 74 73 4f   data.scanstatsO
2b590 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  n = 1;.    }else
2b5a0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
2b5b0 62 61 63 6b 73 6c 61 73 68 22 29 3d 3d 30 20 29  backslash")==0 )
2b5c0 7b 0a 20 20 20 20 20 20 2f 2a 20 55 6e 64 6f 63  {.      /* Undoc
2b5d0 75 6d 65 6e 74 65 64 20 63 6f 6d 6d 61 6e 64 2d  umented command-
2b5e0 6c 69 6e 65 20 6f 70 74 69 6f 6e 3a 20 2d 62 61  line option: -ba
2b5f0 63 6b 73 6c 61 73 68 0a 20 20 20 20 20 20 2a 2a  ckslash.      **
2b600 20 43 61 75 73 65 73 20 43 2d 73 74 79 6c 65 20   Causes C-style 
2b610 62 61 63 6b 73 6c 61 73 68 20 65 73 63 61 70 65  backslash escape
2b620 73 20 74 6f 20 62 65 20 65 76 61 6c 75 61 74 65  s to be evaluate
2b630 64 20 69 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  d in SQL stateme
2b640 6e 74 73 0a 20 20 20 20 20 20 2a 2a 20 70 72 69  nts.      ** pri
2b650 6f 72 20 74 6f 20 73 65 6e 64 69 6e 67 20 74 68  or to sending th
2b660 65 20 53 51 4c 20 69 6e 74 6f 20 53 51 4c 69 74  e SQL into SQLit
2b670 65 2e 20 20 55 73 65 66 75 6c 20 66 6f 72 20 69  e.  Useful for i
2b680 6e 6a 65 63 74 69 6e 67 0a 20 20 20 20 20 20 2a  njecting.      *
2b690 2a 20 63 72 61 7a 79 20 62 79 74 65 73 20 69 6e  * crazy bytes in
2b6a0 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 53   the middle of S
2b6b0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 66 6f  QL statements fo
2b6c0 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65  r testing and de
2b6d0 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 20 20 2a  bugging..      *
2b6e0 2f 0a 20 20 20 20 20 20 64 61 74 61 2e 62 61 63  /.      data.bac
2b6f0 6b 73 6c 61 73 68 4f 6e 20 3d 20 31 3b 0a 20 20  kslashOn = 1;.  
2b700 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
2b710 6d 70 28 7a 2c 22 2d 62 61 69 6c 22 29 3d 3d 30  mp(z,"-bail")==0
2b720 20 29 7b 0a 20 20 20 20 20 20 62 61 69 6c 5f 6f   ){.      bail_o
2b730 6e 5f 65 72 72 6f 72 20 3d 20 31 3b 0a 20 20 20  n_error = 1;.   
2b740 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
2b750 70 28 7a 2c 22 2d 76 65 72 73 69 6f 6e 22 29 3d  p(z,"-version")=
2b760 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e  =0 ){.      prin
2b770 74 66 28 22 25 73 20 25 73 5c 6e 22 2c 20 73 71  tf("%s %s\n", sq
2b780 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e  lite3_libversion
2b790 28 29 2c 20 73 71 6c 69 74 65 33 5f 73 6f 75 72  (), sqlite3_sour
2b7a0 63 65 69 64 28 29 29 3b 0a 20 20 20 20 20 20 72  ceid());.      r
2b7b0 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 65 6c  eturn 0;.    }el
2b7c0 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c  se if( strcmp(z,
2b7d0 22 2d 69 6e 74 65 72 61 63 74 69 76 65 22 29 3d  "-interactive")=
2b7e0 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 74 64 69  =0 ){.      stdi
2b7f0 6e 5f 69 73 5f 69 6e 74 65 72 61 63 74 69 76 65  n_is_interactive
2b800 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 1;.    }else 
2b810 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 62  if( strcmp(z,"-b
2b820 61 74 63 68 22 29 3d 3d 30 20 29 7b 0a 20 20 20  atch")==0 ){.   
2b830 20 20 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65     stdin_is_inte
2b840 72 61 63 74 69 76 65 20 3d 20 30 3b 0a 20 20 20  ractive = 0;.   
2b850 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
2b860 70 28 7a 2c 22 2d 68 65 61 70 22 29 3d 3d 30 20  p(z,"-heap")==0 
2b870 29 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20  ){.      i++;.  
2b880 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
2b890 6d 70 28 7a 2c 22 2d 73 63 72 61 74 63 68 22 29  mp(z,"-scratch")
2b8a0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 2b 3d  ==0 ){.      i+=
2b8b0 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  2;.    }else if(
2b8c0 20 73 74 72 63 6d 70 28 7a 2c 22 2d 70 61 67 65   strcmp(z,"-page
2b8d0 63 61 63 68 65 22 29 3d 3d 30 20 29 7b 0a 20 20  cache")==0 ){.  
2b8e0 20 20 20 20 69 2b 3d 32 3b 0a 20 20 20 20 7d 65      i+=2;.    }e
2b8f0 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
2b900 2c 22 2d 6c 6f 6f 6b 61 73 69 64 65 22 29 3d 3d  ,"-lookaside")==
2b910 30 20 29 7b 0a 20 20 20 20 20 20 69 2b 3d 32 3b  0 ){.      i+=2;
2b920 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
2b930 74 72 63 6d 70 28 7a 2c 22 2d 6d 6d 61 70 22 29  trcmp(z,"-mmap")
2b940 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 2b 2b  ==0 ){.      i++
2b950 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
2b960 73 74 72 63 6d 70 28 7a 2c 22 2d 76 66 73 22 29  strcmp(z,"-vfs")
2b970 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 2b 2b  ==0 ){.      i++
2b980 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2b990 45 4e 41 42 4c 45 5f 56 46 53 54 52 41 43 45 0a  ENABLE_VFSTRACE.
2b9a0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
2b9b0 72 63 6d 70 28 7a 2c 22 2d 76 66 73 74 72 61 63  rcmp(z,"-vfstrac
2b9c0 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  e")==0 ){.      
2b9d0 69 2b 2b 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  i++;.#endif.#ifd
2b9e0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2b9f0 5f 4d 55 4c 54 49 50 4c 45 58 0a 20 20 20 20 7d  _MULTIPLEX.    }
2ba00 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
2ba10 7a 2c 22 2d 6d 75 6c 74 69 70 6c 65 78 22 29 3d  z,"-multiplex")=
2ba20 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 2b 2b 3b  =0 ){.      i++;
2ba30 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73  .#endif.    }els
2ba40 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
2ba50 2d 68 65 6c 70 22 29 3d 3d 30 20 29 7b 0a 20 20  -help")==0 ){.  
2ba60 20 20 20 20 75 73 61 67 65 28 31 29 3b 0a 20 20      usage(1);.  
2ba70 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
2ba80 6d 70 28 7a 2c 22 2d 63 6d 64 22 29 3d 3d 30 20  mp(z,"-cmd")==0 
2ba90 29 7b 0a 20 20 20 20 20 20 2f 2a 20 52 75 6e 20  ){.      /* Run 
2baa0 63 6f 6d 6d 61 6e 64 73 20 74 68 61 74 20 66 6f  commands that fo
2bab0 6c 6c 6f 77 20 2d 63 6d 64 20 66 69 72 73 74 20  llow -cmd first 
2bac0 61 6e 64 20 73 65 70 61 72 61 74 65 6c 79 20 66  and separately f
2bad0 72 6f 6d 20 63 6f 6d 6d 61 6e 64 73 0a 20 20 20  rom commands.   
2bae0 20 20 20 2a 2a 20 74 68 61 74 20 73 69 6d 70 6c     ** that simpl
2baf0 79 20 61 70 70 65 61 72 20 6f 6e 20 74 68 65 20  y appear on the 
2bb00 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 2e 20 20 54  command-line.  T
2bb10 68 69 73 20 73 65 65 6d 73 20 67 6f 6f 66 79 2e  his seems goofy.
2bb20 20 20 49 74 20 77 6f 75 6c 64 0a 20 20 20 20 20    It would.     
2bb30 20 2a 2a 20 62 65 20 62 65 74 74 65 72 20 69 66   ** be better if
2bb40 20 61 6c 6c 20 63 6f 6d 6d 61 6e 64 73 20 72 61   all commands ra
2bb50 6e 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74  n in the order t
2bb60 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72 2e  hat they appear.
2bb70 20 20 42 75 74 0a 20 20 20 20 20 20 2a 2a 20 77    But.      ** w
2bb80 65 20 72 65 74 61 69 6e 20 74 68 65 20 67 6f 6f  e retain the goo
2bb90 66 79 20 62 65 68 61 76 69 6f 72 20 66 6f 72 20  fy behavior for 
2bba0 68 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61  historical compa
2bbb0 74 69 62 69 6c 69 74 79 2e 20 2a 2f 0a 20 20 20  tibility. */.   
2bbc0 20 20 20 69 66 28 20 69 3d 3d 61 72 67 63 2d 31     if( i==argc-1
2bbd0 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
2bbe0 7a 20 3d 20 63 6d 64 6c 69 6e 65 5f 6f 70 74 69  z = cmdline_opti
2bbf0 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72  on_value(argc,ar
2bc00 67 76 2c 2b 2b 69 29 3b 0a 20 20 20 20 20 20 69  gv,++i);.      i
2bc10 66 28 20 7a 5b 30 5d 3d 3d 27 2e 27 20 29 7b 0a  f( z[0]=='.' ){.
2bc20 20 20 20 20 20 20 20 20 72 63 20 3d 20 64 6f 5f          rc = do_
2bc30 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 28 7a 2c 20  meta_command(z, 
2bc40 26 64 61 74 61 29 3b 0a 20 20 20 20 20 20 20 20  &data);.        
2bc50 69 66 28 20 72 63 20 26 26 20 62 61 69 6c 5f 6f  if( rc && bail_o
2bc60 6e 5f 65 72 72 6f 72 20 29 20 72 65 74 75 72 6e  n_error ) return
2bc70 20 72 63 3d 3d 32 20 3f 20 30 20 3a 20 72 63 3b   rc==2 ? 0 : rc;
2bc80 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
2bc90 20 20 20 20 20 20 6f 70 65 6e 5f 64 62 28 26 64        open_db(&d
2bca0 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ata, 0);.       
2bcb0 20 72 63 20 3d 20 73 68 65 6c 6c 5f 65 78 65 63   rc = shell_exec
2bcc0 28 64 61 74 61 2e 64 62 2c 20 7a 2c 20 73 68 65  (data.db, z, she
2bcd0 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26 64 61  ll_callback, &da
2bce0 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20  ta, &zErrMsg);. 
2bcf0 20 20 20 20 20 20 20 69 66 28 20 7a 45 72 72 4d         if( zErrM
2bd00 73 67 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  sg!=0 ){.       
2bd10 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
2bd20 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 25 73  tderr,"Error: %s
2bd30 5c 6e 22 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20  \n", zErrMsg);. 
2bd40 20 20 20 20 20 20 20 20 20 69 66 28 20 62 61 69           if( bai
2bd50 6c 5f 6f 6e 5f 65 72 72 6f 72 20 29 20 72 65 74  l_on_error ) ret
2bd60 75 72 6e 20 72 63 21 3d 30 20 3f 20 72 63 20 3a  urn rc!=0 ? rc :
2bd70 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
2bd80 65 20 69 66 28 20 72 63 21 3d 30 20 29 7b 0a 20  e if( rc!=0 ){. 
2bd90 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
2bda0 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72  intf(stderr,"Err
2bdb0 6f 72 3a 20 75 6e 61 62 6c 65 20 74 6f 20 70 72  or: unable to pr
2bdc0 6f 63 65 73 73 20 53 51 4c 20 5c 22 25 73 5c 22  ocess SQL \"%s\"
2bdd0 5c 6e 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20  \n", z);.       
2bde0 20 20 20 69 66 28 20 62 61 69 6c 5f 6f 6e 5f 65     if( bail_on_e
2bdf0 72 72 6f 72 20 29 20 72 65 74 75 72 6e 20 72 63  rror ) return rc
2be00 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2be10 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
2be20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
2be30 28 73 74 64 65 72 72 2c 22 25 73 3a 20 45 72 72  (stderr,"%s: Err
2be40 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20 6f 70 74 69  or: unknown opti
2be50 6f 6e 3a 20 25 73 5c 6e 22 2c 20 41 72 67 76 30  on: %s\n", Argv0
2be60 2c 20 7a 29 3b 0a 20 20 20 20 20 20 72 61 77 5f  , z);.      raw_
2be70 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 55  printf(stderr,"U
2be80 73 65 20 2d 68 65 6c 70 20 66 6f 72 20 61 20 6c  se -help for a l
2be90 69 73 74 20 6f 66 20 6f 70 74 69 6f 6e 73 2e 5c  ist of options.\
2bea0 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  n");.      retur
2beb0 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64  n 1;.    }.    d
2bec0 61 74 61 2e 63 4d 6f 64 65 20 3d 20 64 61 74 61  ata.cMode = data
2bed0 2e 6d 6f 64 65 3b 0a 20 20 7d 0a 0a 20 20 69 66  .mode;.  }..  if
2bee0 28 20 21 72 65 61 64 53 74 64 69 6e 20 29 7b 0a  ( !readStdin ){.
2bef0 20 20 20 20 2f 2a 20 52 75 6e 20 61 6c 6c 20 61      /* Run all a
2bf00 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 64 6f  rguments that do
2bf10 20 6e 6f 74 20 62 65 67 69 6e 20 77 69 74 68 20   not begin with 
2bf20 27 2d 27 20 61 73 20 69 66 20 74 68 65 79 20 77  '-' as if they w
2bf30 65 72 65 20 73 65 70 61 72 61 74 65 0a 20 20 20  ere separate.   
2bf40 20 2a 2a 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65   ** command-line
2bf50 20 69 6e 70 75 74 73 2c 20 65 78 63 65 70 74 20   inputs, except 
2bf60 66 6f 72 20 74 68 65 20 61 72 67 54 6f 53 6b 69  for the argToSki
2bf70 70 20 61 72 67 75 6d 65 6e 74 20 77 68 69 63 68  p argument which
2bf80 20 63 6f 6e 74 61 69 6e 73 0a 20 20 20 20 2a 2a   contains.    **
2bf90 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2bfa0 6c 65 6e 61 6d 65 2e 0a 20 20 20 20 2a 2f 0a 20  lename..    */. 
2bfb0 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43     for(i=0; i<nC
2bfc0 6d 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  md; i++){.      
2bfd0 69 66 28 20 61 7a 43 6d 64 5b 69 5d 5b 30 5d 3d  if( azCmd[i][0]=
2bfe0 3d 27 2e 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='.' ){.        
2bff0 72 63 20 3d 20 64 6f 5f 6d 65 74 61 5f 63 6f 6d  rc = do_meta_com
2c000 6d 61 6e 64 28 61 7a 43 6d 64 5b 69 5d 2c 20 26  mand(azCmd[i], &
2c010 64 61 74 61 29 3b 0a 20 20 20 20 20 20 20 20 69  data);.        i
2c020 66 28 20 72 63 20 29 20 72 65 74 75 72 6e 20 72  f( rc ) return r
2c030 63 3d 3d 32 20 3f 20 30 20 3a 20 72 63 3b 0a 20  c==2 ? 0 : rc;. 
2c040 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
2c050 20 20 20 20 6f 70 65 6e 5f 64 62 28 26 64 61 74      open_db(&dat
2c060 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 72  a, 0);.        r
2c070 63 20 3d 20 73 68 65 6c 6c 5f 65 78 65 63 28 64  c = shell_exec(d
2c080 61 74 61 2e 64 62 2c 20 61 7a 43 6d 64 5b 69 5d  ata.db, azCmd[i]
2c090 2c 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b  , shell_callback
2c0a0 2c 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d 73  , &data, &zErrMs
2c0b0 67 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  g);.        if( 
2c0c0 7a 45 72 72 4d 73 67 21 3d 30 20 29 7b 0a 20 20  zErrMsg!=0 ){.  
2c0d0 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
2c0e0 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f  ntf(stderr,"Erro
2c0f0 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73  r: %s\n", zErrMs
2c100 67 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65  g);.          re
2c110 74 75 72 6e 20 72 63 21 3d 30 20 3f 20 72 63 20  turn rc!=0 ? rc 
2c120 3a 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  : 1;.        }el
2c130 73 65 20 69 66 28 20 72 63 21 3d 30 20 29 7b 0a  se if( rc!=0 ){.
2c140 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70            utf8_p
2c150 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72  rintf(stderr,"Er
2c160 72 6f 72 3a 20 75 6e 61 62 6c 65 20 74 6f 20 70  ror: unable to p
2c170 72 6f 63 65 73 73 20 53 51 4c 3a 20 25 73 5c 6e  rocess SQL: %s\n
2c180 22 2c 20 61 7a 43 6d 64 5b 69 5d 29 3b 0a 20 20  ", azCmd[i]);.  
2c190 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
2c1a0 63 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  c;.        }.   
2c1b0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 66     }.    }.    f
2c1c0 72 65 65 28 61 7a 43 6d 64 29 3b 0a 20 20 7d 65  ree(azCmd);.  }e
2c1d0 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52 75 6e 20  lse{.    /* Run 
2c1e0 63 6f 6d 6d 61 6e 64 73 20 72 65 63 65 69 76 65  commands receive
2c1f0 64 20 66 72 6f 6d 20 73 74 61 6e 64 61 72 64 20  d from standard 
2c200 69 6e 70 75 74 0a 20 20 20 20 2a 2f 0a 20 20 20  input.    */.   
2c210 20 69 66 28 20 73 74 64 69 6e 5f 69 73 5f 69 6e   if( stdin_is_in
2c220 74 65 72 61 63 74 69 76 65 20 29 7b 0a 20 20 20  teractive ){.   
2c230 20 20 20 63 68 61 72 20 2a 7a 48 6f 6d 65 3b 0a     char *zHome;.
2c240 20 20 20 20 20 20 63 68 61 72 20 2a 7a 48 69 73        char *zHis
2c250 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20  tory = 0;.      
2c260 69 6e 74 20 6e 48 69 73 74 6f 72 79 3b 0a 20 20  int nHistory;.  
2c270 20 20 20 20 70 72 69 6e 74 66 28 0a 20 20 20 20      printf(.    
2c280 20 20 20 20 22 53 51 4c 69 74 65 20 76 65 72 73      "SQLite vers
2c290 69 6f 6e 20 25 73 20 25 2e 31 39 73 5c 6e 22 20  ion %s %.19s\n" 
2c2a0 2f 2a 65 78 74 72 61 2d 76 65 72 73 69 6f 6e 2d  /*extra-version-
2c2b0 69 6e 66 6f 2a 2f 0a 20 20 20 20 20 20 20 20 22  info*/.        "
2c2c0 45 6e 74 65 72 20 5c 22 2e 68 65 6c 70 5c 22 20  Enter \".help\" 
2c2d0 66 6f 72 20 75 73 61 67 65 20 68 69 6e 74 73 2e  for usage hints.
2c2e0 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 73 71 6c  \n",.        sql
2c2f0 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28  ite3_libversion(
2c300 29 2c 20 73 71 6c 69 74 65 33 5f 73 6f 75 72 63  ), sqlite3_sourc
2c310 65 69 64 28 29 0a 20 20 20 20 20 20 29 3b 0a 20  eid().      );. 
2c320 20 20 20 20 20 69 66 28 20 77 61 72 6e 49 6e 6d       if( warnInm
2c330 65 6d 6f 72 79 44 62 20 29 7b 0a 20 20 20 20 20  emoryDb ){.     
2c340 20 20 20 70 72 69 6e 74 66 28 22 43 6f 6e 6e 65     printf("Conne
2c350 63 74 65 64 20 74 6f 20 61 20 22 29 3b 0a 20 20  cted to a ");.  
2c360 20 20 20 20 20 20 70 72 69 6e 74 42 6f 6c 64 28        printBold(
2c370 22 74 72 61 6e 73 69 65 6e 74 20 69 6e 2d 6d 65  "transient in-me
2c380 6d 6f 72 79 20 64 61 74 61 62 61 73 65 22 29 3b  mory database");
2c390 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28  .        printf(
2c3a0 22 2e 5c 6e 55 73 65 20 5c 22 2e 6f 70 65 6e 20  ".\nUse \".open 
2c3b0 46 49 4c 45 4e 41 4d 45 5c 22 20 74 6f 20 72 65  FILENAME\" to re
2c3c0 6f 70 65 6e 20 6f 6e 20 61 20 22 0a 20 20 20 20  open on a ".    
2c3d0 20 20 20 20 20 20 20 20 20 20 20 22 70 65 72 73             "pers
2c3e0 69 73 74 65 6e 74 20 64 61 74 61 62 61 73 65 2e  istent database.
2c3f0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  \n");.      }.  
2c400 20 20 20 20 7a 48 6f 6d 65 20 3d 20 66 69 6e 64      zHome = find
2c410 5f 68 6f 6d 65 5f 64 69 72 28 30 29 3b 0a 20 20  _home_dir(0);.  
2c420 20 20 20 20 69 66 28 20 7a 48 6f 6d 65 20 29 7b      if( zHome ){
2c430 0a 20 20 20 20 20 20 20 20 6e 48 69 73 74 6f 72  .        nHistor
2c440 79 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 48 6f  y = strlen30(zHo
2c450 6d 65 29 20 2b 20 32 30 3b 0a 20 20 20 20 20 20  me) + 20;.      
2c460 20 20 69 66 28 20 28 7a 48 69 73 74 6f 72 79 20    if( (zHistory 
2c470 3d 20 6d 61 6c 6c 6f 63 28 6e 48 69 73 74 6f 72  = malloc(nHistor
2c480 79 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  y))!=0 ){.      
2c490 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
2c4a0 69 6e 74 66 28 6e 48 69 73 74 6f 72 79 2c 20 7a  intf(nHistory, z
2c4b0 48 69 73 74 6f 72 79 2c 22 25 73 2f 2e 73 71 6c  History,"%s/.sql
2c4c0 69 74 65 5f 68 69 73 74 6f 72 79 22 2c 20 7a 48  ite_history", zH
2c4d0 6f 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ome);.        }.
2c4e0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
2c4f0 28 20 7a 48 69 73 74 6f 72 79 20 29 7b 20 73 68  ( zHistory ){ sh
2c500 65 6c 6c 5f 72 65 61 64 5f 68 69 73 74 6f 72 79  ell_read_history
2c510 28 7a 48 69 73 74 6f 72 79 29 3b 20 7d 0a 20 20  (zHistory); }.  
2c520 20 20 20 20 72 63 20 3d 20 70 72 6f 63 65 73 73      rc = process
2c530 5f 69 6e 70 75 74 28 26 64 61 74 61 2c 20 30 29  _input(&data, 0)
2c540 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 48 69 73  ;.      if( zHis
2c550 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 20 20  tory ){.        
2c560 73 68 65 6c 6c 5f 73 74 69 66 6c 65 5f 68 69 73  shell_stifle_his
2c570 74 6f 72 79 28 31 30 30 29 3b 0a 20 20 20 20 20  tory(100);.     
2c580 20 20 20 73 68 65 6c 6c 5f 77 72 69 74 65 5f 68     shell_write_h
2c590 69 73 74 6f 72 79 28 7a 48 69 73 74 6f 72 79 29  istory(zHistory)
2c5a0 3b 0a 20 20 20 20 20 20 20 20 66 72 65 65 28 7a  ;.        free(z
2c5b0 48 69 73 74 6f 72 79 29 3b 0a 20 20 20 20 20 20  History);.      
2c5c0 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
2c5d0 20 20 20 72 63 20 3d 20 70 72 6f 63 65 73 73 5f     rc = process_
2c5e0 69 6e 70 75 74 28 26 64 61 74 61 2c 20 73 74 64  input(&data, std
2c5f0 69 6e 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  in);.    }.  }. 
2c600 20 73 65 74 5f 74 61 62 6c 65 5f 6e 61 6d 65 28   set_table_name(
2c610 26 64 61 74 61 2c 20 30 29 3b 0a 20 20 69 66 28  &data, 0);.  if(
2c620 20 64 61 74 61 2e 64 62 20 29 7b 0a 20 20 20 20   data.db ){.    
2c630 73 65 73 73 69 6f 6e 5f 63 6c 6f 73 65 5f 61 6c  session_close_al
2c640 6c 28 26 64 61 74 61 29 3b 0a 20 20 20 20 73 71  l(&data);.    sq
2c650 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 61 74 61  lite3_close(data
2c660 2e 64 62 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  .db);.  }.  sqli
2c670 74 65 33 5f 66 72 65 65 28 64 61 74 61 2e 7a 46  te3_free(data.zF
2c680 72 65 65 4f 6e 43 6c 6f 73 65 29 3b 0a 20 20 66  reeOnClose);.  f
2c690 69 6e 64 5f 68 6f 6d 65 5f 64 69 72 28 31 29 3b  ind_home_dir(1);
2c6a0 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 48 45  .#if !SQLITE_SHE
2c6b0 4c 4c 5f 49 53 5f 55 54 46 38 0a 20 20 66 6f 72  LL_IS_UTF8.  for
2c6c0 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b  (i=0; i<argc; i+
2c6d0 2b 29 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  +) sqlite3_free(
2c6e0 61 72 67 76 5b 69 5d 29 3b 0a 20 20 73 71 6c 69  argv[i]);.  sqli
2c6f0 74 65 33 5f 66 72 65 65 28 61 72 67 76 29 3b 0a  te3_free(argv);.
2c700 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20  #endif.  return 
2c710 72 63 3b 0a 7d 0a                                rc;.}.