/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 6095531aa900decdaa765e0f3993fba7153c92c1:


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 2f 2a 0a 2a  ;.}.#endif../*.*
6b00: 2a 20 50 72 69 6e 74 20 61 20 73 63 68 65 6d 61  * Print a schema
6b10: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 50 61 72   statement.  Par
6b20: 74 20 6f 66 20 4d 4f 44 45 5f 53 65 6d 69 20 61  t of MODE_Semi a
6b30: 6e 64 20 4d 4f 44 45 5f 50 72 65 74 74 79 20 6f  nd MODE_Pretty o
6b40: 75 74 70 75 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  utput..**.** Thi
6b50: 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76 65 72  s routine conver
6b60: 74 73 20 73 6f 6d 65 20 43 52 45 41 54 45 20 54  ts some CREATE T
6b70: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 73 20  ABLE statements 
6b80: 66 6f 72 20 73 68 61 64 6f 77 20 74 61 62 6c 65  for shadow table
6b90: 73 0a 2a 2a 20 69 6e 20 46 54 53 33 2f 34 2f 35  s.** in FTS3/4/5
6ba0: 20 69 6e 74 6f 20 43 52 45 41 54 45 20 54 41 42   into CREATE TAB
6bb0: 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53  LE IF NOT EXISTS
6bc0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a   statements..*/.
6bd0: 73 74 61 74 69 63 20 76 6f 69 64 20 70 72 69 6e  static void prin
6be0: 74 53 63 68 65 6d 61 4c 69 6e 65 28 46 49 4c 45  tSchemaLine(FILE
6bf0: 20 2a 6f 75 74 2c 20 63 6f 6e 73 74 20 63 68 61   *out, const cha
6c00: 72 20 2a 7a 2c 20 63 6f 6e 73 74 20 63 68 61 72  r *z, const char
6c10: 20 2a 7a 54 61 69 6c 29 7b 0a 20 20 69 66 28 20   *zTail){.  if( 
6c20: 73 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62 28  sqlite3_strglob(
6c30: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 5b 27  "CREATE TABLE ['
6c40: 5c 22 5d 2a 22 2c 20 7a 29 3d 3d 30 20 29 7b 0a  \"]*", z)==0 ){.
6c50: 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
6c60: 6f 75 74 2c 20 22 43 52 45 41 54 45 20 54 41 42  out, "CREATE TAB
6c70: 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53  LE IF NOT EXISTS
6c80: 20 25 73 25 73 22 2c 20 7a 2b 31 33 2c 20 7a 54   %s%s", z+13, zT
6c90: 61 69 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ail);.  }else{. 
6ca0: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 6f     utf8_printf(o
6cb0: 75 74 2c 20 22 25 73 25 73 22 2c 20 7a 2c 20 7a  ut, "%s%s", z, z
6cc0: 54 61 69 6c 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61  Tail);.  }.}.sta
6cd0: 74 69 63 20 76 6f 69 64 20 70 72 69 6e 74 53 63  tic void printSc
6ce0: 68 65 6d 61 4c 69 6e 65 4e 28 46 49 4c 45 20 2a  hemaLineN(FILE *
6cf0: 6f 75 74 2c 20 63 68 61 72 20 2a 7a 2c 20 69 6e  out, char *z, in
6d00: 74 20 6e 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  t n, const char 
6d10: 2a 7a 54 61 69 6c 29 7b 0a 20 20 63 68 61 72 20  *zTail){.  char 
6d20: 63 20 3d 20 7a 5b 6e 5d 3b 0a 20 20 7a 5b 6e 5d  c = z[n];.  z[n]
6d30: 20 3d 20 30 3b 0a 20 20 70 72 69 6e 74 53 63 68   = 0;.  printSch
6d40: 65 6d 61 4c 69 6e 65 28 6f 75 74 2c 20 7a 2c 20  emaLine(out, z, 
6d50: 7a 54 61 69 6c 29 3b 0a 20 20 7a 5b 6e 5d 20 3d  zTail);.  z[n] =
6d60: 20 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69   c;.}../*.** Thi
6d70: 73 20 69 73 20 74 68 65 20 63 61 6c 6c 62 61 63  s is the callbac
6d80: 6b 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 74  k routine that t
6d90: 68 65 20 73 68 65 6c 6c 0a 2a 2a 20 69 6e 76 6f  he shell.** invo
6da0: 6b 65 73 20 66 6f 72 20 65 61 63 68 20 72 6f 77  kes for each row
6db0: 20 6f 66 20 61 20 71 75 65 72 79 20 72 65 73 75   of a query resu
6dc0: 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  lt..*/.static in
6dd0: 74 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b  t shell_callback
6de0: 28 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 2c 0a  (.  void *pArg,.
6df0: 20 20 69 6e 74 20 6e 41 72 67 2c 20 20 20 20 20    int nArg,     
6e00: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
6e10: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 2a  result columns *
6e20: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 41 72 67  /.  char **azArg
6e30: 2c 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20  ,    /* Text of 
6e40: 65 61 63 68 20 72 65 73 75 6c 74 20 63 6f 6c 75  each result colu
6e50: 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  mn */.  char **a
6e60: 7a 43 6f 6c 2c 20 20 20 20 2f 2a 20 43 6f 6c 75  zCol,    /* Colu
6e70: 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 69 6e  mn names */.  in
6e80: 74 20 2a 61 69 54 79 70 65 20 20 20 20 20 20 2f  t *aiType      /
6e90: 2a 20 43 6f 6c 75 6d 6e 20 74 79 70 65 73 20 2a  * Column types *
6ea0: 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  /.){.  int i;.  
6eb0: 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 20 3d 20  ShellState *p = 
6ec0: 28 53 68 65 6c 6c 53 74 61 74 65 2a 29 70 41 72  (ShellState*)pAr
6ed0: 67 3b 0a 0a 20 20 73 77 69 74 63 68 28 20 70 2d  g;..  switch( p-
6ee0: 3e 63 4d 6f 64 65 20 29 7b 0a 20 20 20 20 63 61  >cMode ){.    ca
6ef0: 73 65 20 4d 4f 44 45 5f 4c 69 6e 65 3a 20 7b 0a  se MODE_Line: {.
6f00: 20 20 20 20 20 20 69 6e 74 20 77 20 3d 20 35 3b        int w = 5;
6f10: 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41 72 67  .      if( azArg
6f20: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
6f30: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41     for(i=0; i<nA
6f40: 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
6f50: 20 20 69 6e 74 20 6c 65 6e 20 3d 20 73 74 72 6c    int len = strl
6f60: 65 6e 33 30 28 61 7a 43 6f 6c 5b 69 5d 20 3f 20  en30(azCol[i] ? 
6f70: 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b 0a  azCol[i] : "");.
6f80: 20 20 20 20 20 20 20 20 69 66 28 20 6c 65 6e 3e          if( len>
6f90: 77 20 29 20 77 20 3d 20 6c 65 6e 3b 0a 20 20 20  w ) w = len;.   
6fa0: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70     }.      if( p
6fb0: 2d 3e 63 6e 74 2b 2b 3e 30 20 29 20 75 74 66 38  ->cnt++>0 ) utf8
6fc0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
6fd0: 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53 65 70 61  "%s", p->rowSepa
6fe0: 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 66 6f  rator);.      fo
6ff0: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
7000: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66  ++){.        utf
7010: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
7020: 22 25 2a 73 20 3d 20 25 73 25 73 22 2c 20 77 2c  "%*s = %s%s", w,
7030: 20 61 7a 43 6f 6c 5b 69 5d 2c 0a 20 20 20 20 20   azCol[i],.     
7040: 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67             azArg
7050: 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69 5d 20 3a  [i] ? azArg[i] :
7060: 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 2c 20 70   p->nullValue, p
7070: 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 3b  ->rowSeparator);
7080: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62  .      }.      b
7090: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
70a0: 63 61 73 65 20 4d 4f 44 45 5f 45 78 70 6c 61 69  case MODE_Explai
70b0: 6e 3a 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45  n:.    case MODE
70c0: 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 20 20 20  _Column: {.     
70d0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e   static const in
70e0: 74 20 61 45 78 70 6c 61 69 6e 57 69 64 74 68 73  t aExplainWidths
70f0: 5b 5d 20 3d 20 7b 34 2c 20 31 33 2c 20 34 2c 20  [] = {4, 13, 4, 
7100: 34 2c 20 34 2c 20 31 33 2c 20 32 2c 20 31 33 7d  4, 4, 13, 2, 13}
7110: 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 69 6e  ;.      const in
7120: 74 20 2a 63 6f 6c 57 69 64 74 68 3b 0a 20 20 20  t *colWidth;.   
7130: 20 20 20 69 6e 74 20 73 68 6f 77 48 64 72 3b 0a     int showHdr;.
7140: 20 20 20 20 20 20 63 68 61 72 20 2a 72 6f 77 53        char *rowS
7150: 65 70 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d  ep;.      if( p-
7160: 3e 63 4d 6f 64 65 3d 3d 4d 4f 44 45 5f 43 6f 6c  >cMode==MODE_Col
7170: 75 6d 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 63  umn ){.        c
7180: 6f 6c 57 69 64 74 68 20 3d 20 70 2d 3e 63 6f 6c  olWidth = p->col
7190: 57 69 64 74 68 3b 0a 20 20 20 20 20 20 20 20 73  Width;.        s
71a0: 68 6f 77 48 64 72 20 3d 20 70 2d 3e 73 68 6f 77  howHdr = p->show
71b0: 48 65 61 64 65 72 3b 0a 20 20 20 20 20 20 20 20  Header;.        
71c0: 72 6f 77 53 65 70 20 3d 20 70 2d 3e 72 6f 77 53  rowSep = p->rowS
71d0: 65 70 61 72 61 74 6f 72 3b 0a 20 20 20 20 20 20  eparator;.      
71e0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 63  }else{.        c
71f0: 6f 6c 57 69 64 74 68 20 3d 20 61 45 78 70 6c 61  olWidth = aExpla
7200: 69 6e 57 69 64 74 68 73 3b 0a 20 20 20 20 20 20  inWidths;.      
7210: 20 20 73 68 6f 77 48 64 72 20 3d 20 31 3b 0a 20    showHdr = 1;. 
7220: 20 20 20 20 20 20 20 72 6f 77 53 65 70 20 3d 20         rowSep = 
7230: 53 45 50 5f 52 6f 77 3b 0a 20 20 20 20 20 20 7d  SEP_Row;.      }
7240: 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 6e  .      if( p->cn
7250: 74 2b 2b 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  t++==0 ){.      
7260: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
7270: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
7280: 20 20 20 69 6e 74 20 77 2c 20 6e 3b 0a 20 20 20     int w, n;.   
7290: 20 20 20 20 20 20 20 69 66 28 20 69 3c 41 72 72         if( i<Arr
72a0: 61 79 53 69 7a 65 28 70 2d 3e 63 6f 6c 57 69 64  aySize(p->colWid
72b0: 74 68 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  th) ){.         
72c0: 20 20 20 77 20 3d 20 63 6f 6c 57 69 64 74 68 5b     w = colWidth[
72d0: 69 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65  i];.          }e
72e0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
72f0: 20 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20   w = 0;.        
7300: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66    }.          if
7310: 28 20 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ( w==0 ){.      
7320: 20 20 20 20 20 20 77 20 3d 20 73 74 72 6c 65 6e        w = strlen
7330: 33 30 28 61 7a 43 6f 6c 5b 69 5d 20 3f 20 61 7a  30(azCol[i] ? az
7340: 43 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b 0a 20 20  Col[i] : "");.  
7350: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 77 3c            if( w<
7360: 31 30 20 29 20 77 20 3d 20 31 30 3b 0a 20 20 20  10 ) w = 10;.   
7370: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 73 74 72           n = str
7380: 6c 65 6e 33 30 28 61 7a 41 72 67 20 26 26 20 61  len30(azArg && a
7390: 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b  zArg[i] ? azArg[
73a0: 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75  i] : p->nullValu
73b0: 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e);.            
73c0: 69 66 28 20 77 3c 6e 20 29 20 77 20 3d 20 6e 3b  if( w<n ) w = n;
73d0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
73e0: 20 20 20 20 20 20 20 69 66 28 20 69 3c 41 72 72         if( i<Arr
73f0: 61 79 53 69 7a 65 28 70 2d 3e 61 63 74 75 61 6c  aySize(p->actual
7400: 57 69 64 74 68 29 20 29 7b 0a 20 20 20 20 20 20  Width) ){.      
7410: 20 20 20 20 20 20 70 2d 3e 61 63 74 75 61 6c 57        p->actualW
7420: 69 64 74 68 5b 69 5d 20 3d 20 77 3b 0a 20 20 20  idth[i] = w;.   
7430: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
7440: 20 20 20 69 66 28 20 73 68 6f 77 48 64 72 20 29     if( showHdr )
7450: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  {.            if
7460: 28 20 77 3c 30 20 29 7b 0a 20 20 20 20 20 20 20  ( w<0 ){.       
7470: 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
7480: 74 66 28 70 2d 3e 6f 75 74 2c 22 25 2a 2e 2a 73  tf(p->out,"%*.*s
7490: 25 73 22 2c 2d 77 2c 2d 77 2c 61 7a 43 6f 6c 5b  %s",-w,-w,azCol[
74a0: 69 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  i],.            
74b0: 20 20 20 20 20 20 20 20 20 20 69 3d 3d 6e 41 72            i==nAr
74c0: 67 2d 31 20 3f 20 72 6f 77 53 65 70 20 3a 20 22  g-1 ? rowSep : "
74d0: 20 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20    ");.          
74e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
74f0: 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
7500: 74 66 28 70 2d 3e 6f 75 74 2c 22 25 2d 2a 2e 2a  tf(p->out,"%-*.*
7510: 73 25 73 22 2c 77 2c 77 2c 61 7a 43 6f 6c 5b 69  s%s",w,w,azCol[i
7520: 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ],.             
7530: 20 20 20 20 20 20 20 20 20 69 3d 3d 6e 41 72 67           i==nArg
7540: 2d 31 20 3f 20 72 6f 77 53 65 70 20 3a 20 22 20  -1 ? rowSep : " 
7550: 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   ");.           
7560: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20   }.          }. 
7570: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
7580: 20 69 66 28 20 73 68 6f 77 48 64 72 20 29 7b 0a   if( showHdr ){.
7590: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d            for(i=
75a0: 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
75b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
75c0: 20 77 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   w;.            
75d0: 69 66 28 20 69 3c 41 72 72 61 79 53 69 7a 65 28  if( i<ArraySize(
75e0: 70 2d 3e 61 63 74 75 61 6c 57 69 64 74 68 29 20  p->actualWidth) 
75f0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ){.             
7600: 20 20 77 20 3d 20 70 2d 3e 61 63 74 75 61 6c 57    w = p->actualW
7610: 69 64 74 68 5b 69 5d 3b 0a 20 20 20 20 20 20 20  idth[i];.       
7620: 20 20 20 20 20 20 20 20 69 66 28 20 77 3c 30 20          if( w<0 
7630: 29 20 77 20 3d 20 2d 77 3b 0a 20 20 20 20 20 20  ) w = -w;.      
7640: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
7650: 20 20 20 20 20 20 20 20 20 20 20 20 77 20 3d 20              w = 
7660: 31 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  10;.            
7670: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 74  }.            ut
7680: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
7690: 2c 22 25 2d 2a 2e 2a 73 25 73 22 2c 77 2c 77 2c  ,"%-*.*s%s",w,w,
76a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
76b0: 20 20 20 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d      "-----------
76c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
76d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
76e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22  ---------------"
76f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7700: 20 20 20 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d      "-----------
7710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22  ---------------"
7740: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
7750: 20 20 20 20 20 20 69 3d 3d 6e 41 72 67 2d 31 20        i==nArg-1 
7760: 3f 20 72 6f 77 53 65 70 20 3a 20 22 20 20 22 29  ? rowSep : "  ")
7770: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
7780: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
7790: 20 20 20 20 20 20 69 66 28 20 61 7a 41 72 67 3d        if( azArg=
77a0: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
77b0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72    for(i=0; i<nAr
77c0: 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
77d0: 20 69 6e 74 20 77 3b 0a 20 20 20 20 20 20 20 20   int w;.        
77e0: 69 66 28 20 69 3c 41 72 72 61 79 53 69 7a 65 28  if( i<ArraySize(
77f0: 70 2d 3e 61 63 74 75 61 6c 57 69 64 74 68 29 20  p->actualWidth) 
7800: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 77 20  ){.           w 
7810: 3d 20 70 2d 3e 61 63 74 75 61 6c 57 69 64 74 68  = p->actualWidth
7820: 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  [i];.        }el
7830: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 77  se{.           w
7840: 20 3d 20 31 30 3b 0a 20 20 20 20 20 20 20 20 7d   = 10;.        }
7850: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 2d 3e  .        if( p->
7860: 63 4d 6f 64 65 3d 3d 4d 4f 44 45 5f 45 78 70 6c  cMode==MODE_Expl
7870: 61 69 6e 20 26 26 20 61 7a 41 72 67 5b 69 5d 20  ain && azArg[i] 
7880: 26 26 20 73 74 72 6c 65 6e 33 30 28 61 7a 41 72  && strlen30(azAr
7890: 67 5b 69 5d 29 3e 77 20 29 7b 0a 20 20 20 20 20  g[i])>w ){.     
78a0: 20 20 20 20 20 77 20 3d 20 73 74 72 6c 65 6e 33       w = strlen3
78b0: 30 28 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20  0(azArg[i]);.   
78c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
78d0: 66 28 20 69 3d 3d 31 20 26 26 20 70 2d 3e 61 69  f( i==1 && p->ai
78e0: 49 6e 64 65 6e 74 20 26 26 20 70 2d 3e 70 53 74  Indent && p->pSt
78f0: 6d 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  mt ){.          
7900: 69 66 28 20 70 2d 3e 69 49 6e 64 65 6e 74 3c 70  if( p->iIndent<p
7910: 2d 3e 6e 49 6e 64 65 6e 74 20 29 7b 0a 20 20 20  ->nIndent ){.   
7920: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
7930: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2a  intf(p->out, "%*
7940: 2e 73 22 2c 20 70 2d 3e 61 69 49 6e 64 65 6e 74  .s", p->aiIndent
7950: 5b 70 2d 3e 69 49 6e 64 65 6e 74 5d 2c 20 22 22  [p->iIndent], ""
7960: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
7970: 20 20 20 20 20 20 20 20 20 70 2d 3e 69 49 6e 64           p->iInd
7980: 65 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  ent++;.        }
7990: 0a 20 20 20 20 20 20 20 20 69 66 28 20 77 3c 30  .        if( w<0
79a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74   ){.          ut
79b0: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
79c0: 2c 22 25 2a 2e 2a 73 25 73 22 2c 2d 77 2c 2d 77  ,"%*.*s%s",-w,-w
79d0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
79e0: 61 7a 41 72 67 5b 69 5d 20 3f 20 61 7a 41 72 67  azArg[i] ? azArg
79f0: 5b 69 5d 20 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c  [i] : p->nullVal
7a00: 75 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue,.            
7a10: 20 20 69 3d 3d 6e 41 72 67 2d 31 20 3f 20 72 6f    i==nArg-1 ? ro
7a20: 77 53 65 70 20 3a 20 22 20 20 22 29 3b 0a 20 20  wSep : "  ");.  
7a30: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
7a40: 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
7a50: 74 66 28 70 2d 3e 6f 75 74 2c 22 25 2d 2a 2e 2a  tf(p->out,"%-*.*
7a60: 73 25 73 22 2c 77 2c 77 2c 0a 20 20 20 20 20 20  s%s",w,w,.      
7a70: 20 20 20 20 20 20 20 20 61 7a 41 72 67 5b 69 5d          azArg[i]
7a80: 20 3f 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d   ? azArg[i] : p-
7a90: 3e 6e 75 6c 6c 56 61 6c 75 65 2c 0a 20 20 20 20  >nullValue,.    
7aa0: 20 20 20 20 20 20 20 20 20 20 69 3d 3d 6e 41 72            i==nAr
7ab0: 67 2d 31 20 3f 20 72 6f 77 53 65 70 20 3a 20 22  g-1 ? rowSep : "
7ac0: 20 20 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a    ");.        }.
7ad0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72        }.      br
7ae0: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63  eak;.    }.    c
7af0: 61 73 65 20 4d 4f 44 45 5f 53 65 6d 69 3a 20 7b  ase MODE_Semi: {
7b00: 20 20 20 2f 2a 20 2e 73 63 68 65 6d 61 20 61 6e     /* .schema an
7b10: 64 20 2e 66 75 6c 6c 73 63 68 65 6d 61 20 6f 75  d .fullschema ou
7b20: 74 70 75 74 20 2a 2f 0a 20 20 20 20 20 20 70 72  tput */.      pr
7b30: 69 6e 74 53 63 68 65 6d 61 4c 69 6e 65 28 70 2d  intSchemaLine(p-
7b40: 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 30 5d 2c 20  >out, azArg[0], 
7b50: 22 3b 5c 6e 22 29 3b 0a 20 20 20 20 20 20 62 72  ";\n");.      br
7b60: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63  eak;.    }.    c
7b70: 61 73 65 20 4d 4f 44 45 5f 50 72 65 74 74 79 3a  ase MODE_Pretty:
7b80: 20 7b 20 20 2f 2a 20 2e 73 63 68 65 6d 61 20 61   {  /* .schema a
7b90: 6e 64 20 2e 66 75 6c 6c 73 63 68 65 6d 61 20 77  nd .fullschema w
7ba0: 69 74 68 20 2d 2d 69 6e 64 65 6e 74 20 2a 2f 0a  ith --indent */.
7bb0: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 3b 0a 20        char *z;. 
7bc0: 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20       int j;.    
7bd0: 20 20 69 6e 74 20 6e 50 61 72 65 6e 20 3d 20 30    int nParen = 0
7be0: 3b 0a 20 20 20 20 20 20 63 68 61 72 20 63 45 6e  ;.      char cEn
7bf0: 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 63 68 61  d = 0;.      cha
7c00: 72 20 63 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e  r c;.      int n
7c10: 4c 69 6e 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  Line = 0;.      
7c20: 61 73 73 65 72 74 28 20 6e 41 72 67 3d 3d 31 20  assert( nArg==1 
7c30: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41  );.      if( azA
7c40: 72 67 5b 30 5d 3d 3d 30 20 29 20 62 72 65 61 6b  rg[0]==0 ) break
7c50: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
7c60: 74 65 33 5f 73 74 72 6c 69 6b 65 28 22 43 52 45  te3_strlike("CRE
7c70: 41 54 45 20 56 49 45 57 25 22 2c 20 61 7a 41 72  ATE VIEW%", azAr
7c80: 67 5b 30 5d 2c 20 30 29 3d 3d 30 0a 20 20 20 20  g[0], 0)==0.    
7c90: 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 5f 73 74     || sqlite3_st
7ca0: 72 6c 69 6b 65 28 22 43 52 45 41 54 45 20 54 52  rlike("CREATE TR
7cb0: 49 47 25 22 2c 20 61 7a 41 72 67 5b 30 5d 2c 20  IG%", azArg[0], 
7cc0: 30 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  0)==0.      ){. 
7cd0: 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
7ce0: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 3b 5c  tf(p->out, "%s;\
7cf0: 6e 22 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a 20  n", azArg[0]);. 
7d00: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
7d10: 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 20 3d 20      }.      z = 
7d20: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
7d30: 22 25 73 22 2c 20 61 7a 41 72 67 5b 30 5d 29 3b  "%s", azArg[0]);
7d40: 0a 20 20 20 20 20 20 6a 20 3d 20 30 3b 0a 20 20  .      j = 0;.  
7d50: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 49 73 53      for(i=0; IsS
7d60: 70 61 63 65 28 7a 5b 69 5d 29 3b 20 69 2b 2b 29  pace(z[i]); i++)
7d70: 7b 7d 0a 20 20 20 20 20 20 66 6f 72 28 3b 20 28  {}.      for(; (
7d80: 63 20 3d 20 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b  c = z[i])!=0; i+
7d90: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  +){.        if( 
7da0: 49 73 53 70 61 63 65 28 63 29 20 29 7b 0a 20 20  IsSpace(c) ){.  
7db0: 20 20 20 20 20 20 20 20 69 66 28 20 49 73 53 70          if( IsSp
7dc0: 61 63 65 28 7a 5b 6a 2d 31 5d 29 20 7c 7c 20 7a  ace(z[j-1]) || z
7dd0: 5b 6a 2d 31 5d 3d 3d 27 28 27 20 29 20 63 6f 6e  [j-1]=='(' ) con
7de0: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 7d  tinue;.        }
7df0: 65 6c 73 65 20 69 66 28 20 28 63 3d 3d 27 28 27  else if( (c=='('
7e00: 20 7c 7c 20 63 3d 3d 27 29 27 29 20 26 26 20 6a   || c==')') && j
7e10: 3e 30 20 26 26 20 49 73 53 70 61 63 65 28 7a 5b  >0 && IsSpace(z[
7e20: 6a 2d 31 5d 29 20 29 7b 0a 20 20 20 20 20 20 20  j-1]) ){.       
7e30: 20 20 20 6a 2d 2d 3b 0a 20 20 20 20 20 20 20 20     j--;.        
7e40: 7d 0a 20 20 20 20 20 20 20 20 7a 5b 6a 2b 2b 5d  }.        z[j++]
7e50: 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = c;.      }.  
7e60: 20 20 20 20 77 68 69 6c 65 28 20 6a 3e 30 20 26      while( j>0 &
7e70: 26 20 49 73 53 70 61 63 65 28 7a 5b 6a 2d 31 5d  & IsSpace(z[j-1]
7e80: 29 20 29 7b 20 6a 2d 2d 3b 20 7d 0a 20 20 20 20  ) ){ j--; }.    
7e90: 20 20 7a 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20 20    z[j] = 0;.    
7ea0: 20 20 69 66 28 20 73 74 72 6c 65 6e 33 30 28 7a    if( strlen30(z
7eb0: 29 3e 3d 37 39 20 29 7b 0a 20 20 20 20 20 20 20  )>=79 ){.       
7ec0: 20 66 6f 72 28 69 3d 6a 3d 30 3b 20 28 63 20 3d   for(i=j=0; (c =
7ed0: 20 7a 5b 69 5d 29 21 3d 30 3b 20 69 2b 2b 29 7b   z[i])!=0; i++){
7ee0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 63  .          if( c
7ef0: 3d 3d 63 45 6e 64 20 29 7b 0a 20 20 20 20 20 20  ==cEnd ){.      
7f00: 20 20 20 20 20 20 63 45 6e 64 20 3d 20 30 3b 0a        cEnd = 0;.
7f10: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20            }else 
7f20: 69 66 28 20 63 3d 3d 27 22 27 20 7c 7c 20 63 3d  if( c=='"' || c=
7f30: 3d 27 5c 27 27 20 7c 7c 20 63 3d 3d 27 60 27 20  ='\'' || c=='`' 
7f40: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ){.            c
7f50: 45 6e 64 20 3d 20 63 3b 0a 20 20 20 20 20 20 20  End = c;.       
7f60: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
7f70: 27 5b 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20  '[' ){.         
7f80: 20 20 20 63 45 6e 64 20 3d 20 27 5d 27 3b 0a 20     cEnd = ']';. 
7f90: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69           }else i
7fa0: 66 28 20 63 3d 3d 27 28 27 20 29 7b 0a 20 20 20  f( c=='(' ){.   
7fb0: 20 20 20 20 20 20 20 20 20 6e 50 61 72 65 6e 2b           nParen+
7fc0: 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  +;.          }el
7fd0: 73 65 20 69 66 28 20 63 3d 3d 27 29 27 20 29 7b  se if( c==')' ){
7fe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 50 61  .            nPa
7ff0: 72 65 6e 2d 2d 3b 0a 20 20 20 20 20 20 20 20 20  ren--;.         
8000: 20 20 20 69 66 28 20 6e 4c 69 6e 65 3e 30 20 26     if( nLine>0 &
8010: 26 20 6e 50 61 72 65 6e 3d 3d 30 20 26 26 20 6a  & nParen==0 && j
8020: 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  >0 ){.          
8030: 20 20 20 20 70 72 69 6e 74 53 63 68 65 6d 61 4c      printSchemaL
8040: 69 6e 65 4e 28 70 2d 3e 6f 75 74 2c 20 7a 2c 20  ineN(p->out, z, 
8050: 6a 2c 20 22 5c 6e 22 29 3b 0a 20 20 20 20 20 20  j, "\n");.      
8060: 20 20 20 20 20 20 20 20 6a 20 3d 20 30 3b 0a 20          j = 0;. 
8070: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
8080: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
8090: 20 20 20 7a 5b 6a 2b 2b 5d 20 3d 20 63 3b 0a 20     z[j++] = c;. 
80a0: 20 20 20 20 20 20 20 20 20 69 66 28 20 6e 50 61           if( nPa
80b0: 72 65 6e 3d 3d 31 20 26 26 20 28 63 3d 3d 27 28  ren==1 && (c=='(
80c0: 27 20 7c 7c 20 63 3d 3d 27 2c 27 20 7c 7c 20 63  ' || c==',' || c
80d0: 3d 3d 27 5c 6e 27 29 20 29 7b 0a 20 20 20 20 20  =='\n') ){.     
80e0: 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 5c         if( c=='\
80f0: 6e 27 20 29 20 6a 2d 2d 3b 0a 20 20 20 20 20 20  n' ) j--;.      
8100: 20 20 20 20 20 20 70 72 69 6e 74 53 63 68 65 6d        printSchem
8110: 61 4c 69 6e 65 4e 28 70 2d 3e 6f 75 74 2c 20 7a  aLineN(p->out, z
8120: 2c 20 6a 2c 20 22 5c 6e 20 20 22 29 3b 0a 20 20  , j, "\n  ");.  
8130: 20 20 20 20 20 20 20 20 20 20 6a 20 3d 20 30 3b            j = 0;
8140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 4c 69  .            nLi
8150: 6e 65 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20  ne++;.          
8160: 20 20 77 68 69 6c 65 28 20 49 73 53 70 61 63 65    while( IsSpace
8170: 28 7a 5b 69 2b 31 5d 29 20 29 7b 20 69 2b 2b 3b  (z[i+1]) ){ i++;
8180: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20   }.          }. 
8190: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
81a0: 20 7a 5b 6a 5d 20 3d 20 30 3b 0a 20 20 20 20 20   z[j] = 0;.     
81b0: 20 7d 0a 20 20 20 20 20 20 70 72 69 6e 74 53 63   }.      printSc
81c0: 68 65 6d 61 4c 69 6e 65 28 70 2d 3e 6f 75 74 2c  hemaLine(p->out,
81d0: 20 7a 2c 20 22 3b 5c 6e 22 29 3b 0a 20 20 20 20   z, ";\n");.    
81e0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
81f0: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
8200: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 4d      }.    case M
8210: 4f 44 45 5f 4c 69 73 74 3a 20 7b 0a 20 20 20 20  ODE_List: {.    
8220: 20 20 69 66 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d    if( p->cnt++==
8230: 30 20 26 26 20 70 2d 3e 73 68 6f 77 48 65 61 64  0 && p->showHead
8240: 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f  er ){.        fo
8250: 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
8260: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75  ++){.          u
8270: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
8280: 74 2c 22 25 73 25 73 22 2c 61 7a 43 6f 6c 5b 69  t,"%s%s",azCol[i
8290: 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ],.             
82a0: 20 20 20 20 20 69 3d 3d 6e 41 72 67 2d 31 20 3f       i==nArg-1 ?
82b0: 20 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f 72   p->rowSeparator
82c0: 20 3a 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74   : p->colSeparat
82d0: 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  or);.        }. 
82e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
82f0: 20 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61   azArg==0 ) brea
8300: 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  k;.      for(i=0
8310: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
8320: 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 20          char *z 
8330: 3d 20 61 7a 41 72 67 5b 69 5d 3b 0a 20 20 20 20  = azArg[i];.    
8340: 20 20 20 20 69 66 28 20 7a 3d 3d 30 20 29 20 7a      if( z==0 ) z
8350: 20 3d 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 3b   = p->nullValue;
8360: 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
8370: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
8380: 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 20 20 69  ", z);.        i
8390: 66 28 20 69 3c 6e 41 72 67 2d 31 20 29 7b 0a 20  f( i<nArg-1 ){. 
83a0: 20 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72           utf8_pr
83b0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73  intf(p->out, "%s
83c0: 22 2c 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74  ", p->colSeparat
83d0: 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  or);.        }el
83e0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74  se{.          ut
83f0: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
8400: 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53 65  , "%s", p->rowSe
8410: 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20  parator);.      
8420: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
8430: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
8440: 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 48 74 6d     case MODE_Htm
8450: 6c 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20 70  l: {.      if( p
8460: 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26 20 70 2d  ->cnt++==0 && p-
8470: 3e 73 68 6f 77 48 65 61 64 65 72 20 29 7b 0a 20  >showHeader ){. 
8480: 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74         raw_print
8490: 66 28 70 2d 3e 6f 75 74 2c 22 3c 54 52 3e 22 29  f(p->out,"<TR>")
84a0: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d  ;.        for(i=
84b0: 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
84c0: 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
84d0: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 54  rintf(p->out,"<T
84e0: 48 3e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  H>");.          
84f0: 6f 75 74 70 75 74 5f 68 74 6d 6c 5f 73 74 72 69  output_html_stri
8500: 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 43 6f 6c  ng(p->out, azCol
8510: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [i]);.          
8520: 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
8530: 74 2c 22 3c 2f 54 48 3e 5c 6e 22 29 3b 0a 20 20  t,"</TH>\n");.  
8540: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
8550: 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
8560: 74 2c 22 3c 2f 54 52 3e 5c 6e 22 29 3b 0a 20 20  t,"</TR>\n");.  
8570: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
8580: 61 7a 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b  azArg==0 ) break
8590: 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  ;.      raw_prin
85a0: 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 54 52 3e 22  tf(p->out,"<TR>"
85b0: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
85c0: 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
85d0: 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
85e0: 74 66 28 70 2d 3e 6f 75 74 2c 22 3c 54 44 3e 22  tf(p->out,"<TD>"
85f0: 29 3b 0a 20 20 20 20 20 20 20 20 6f 75 74 70 75  );.        outpu
8600: 74 5f 68 74 6d 6c 5f 73 74 72 69 6e 67 28 70 2d  t_html_string(p-
8610: 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d 20 3f  >out, azArg[i] ?
8620: 20 61 7a 41 72 67 5b 69 5d 20 3a 20 70 2d 3e 6e   azArg[i] : p->n
8630: 75 6c 6c 56 61 6c 75 65 29 3b 0a 20 20 20 20 20  ullValue);.     
8640: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
8650: 3e 6f 75 74 2c 22 3c 2f 54 44 3e 5c 6e 22 29 3b  >out,"</TD>\n");
8660: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
8670: 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
8680: 2c 22 3c 2f 54 52 3e 5c 6e 22 29 3b 0a 20 20 20  ,"</TR>\n");.   
8690: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
86a0: 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 54 63      case MODE_Tc
86b0: 6c 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20 70  l: {.      if( p
86c0: 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26 20 70 2d  ->cnt++==0 && p-
86d0: 3e 73 68 6f 77 48 65 61 64 65 72 20 29 7b 0a 20  >showHeader ){. 
86e0: 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20         for(i=0; 
86f0: 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
8700: 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f 63          output_c
8710: 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 61  _string(p->out,a
8720: 7a 43 6f 6c 5b 69 5d 20 3f 20 61 7a 43 6f 6c 5b  zCol[i] ? azCol[
8730: 69 5d 20 3a 20 22 22 29 3b 0a 20 20 20 20 20 20  i] : "");.      
8740: 20 20 20 20 69 66 28 69 3c 6e 41 72 67 2d 31 29      if(i<nArg-1)
8750: 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
8760: 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f  out, "%s", p->co
8770: 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20  lSeparator);.   
8780: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 75       }.        u
8790: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
87a0: 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53  t, "%s", p->rowS
87b0: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
87c0: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 61 7a 41   }.      if( azA
87d0: 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  rg==0 ) break;. 
87e0: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
87f0: 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
8800: 20 20 20 20 6f 75 74 70 75 74 5f 63 5f 73 74 72      output_c_str
8810: 69 6e 67 28 70 2d 3e 6f 75 74 2c 20 61 7a 41 72  ing(p->out, azAr
8820: 67 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69 5d 20  g[i] ? azArg[i] 
8830: 3a 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b  : p->nullValue);
8840: 0a 20 20 20 20 20 20 20 20 69 66 28 69 3c 6e 41  .        if(i<nA
8850: 72 67 2d 31 29 20 75 74 66 38 5f 70 72 69 6e 74  rg-1) utf8_print
8860: 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20  f(p->out, "%s", 
8870: 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29  p->colSeparator)
8880: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
8890: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
88a0: 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77  ut, "%s", p->row
88b0: 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20  Separator);.    
88c0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
88d0: 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 43 73 76     case MODE_Csv
88e0: 3a 20 7b 0a 20 20 20 20 20 20 73 65 74 42 69 6e  : {.      setBin
88f0: 61 72 79 4d 6f 64 65 28 70 2d 3e 6f 75 74 2c 20  aryMode(p->out, 
8900: 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d  1);.      if( p-
8910: 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26 20 70 2d 3e  >cnt++==0 && p->
8920: 73 68 6f 77 48 65 61 64 65 72 20 29 7b 0a 20 20  showHeader ){.  
8930: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
8940: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
8950: 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f 63 73         output_cs
8960: 76 28 70 2c 20 61 7a 43 6f 6c 5b 69 5d 20 3f 20  v(p, azCol[i] ? 
8970: 61 7a 43 6f 6c 5b 69 5d 20 3a 20 22 22 2c 20 69  azCol[i] : "", i
8980: 3c 6e 41 72 67 2d 31 29 3b 0a 20 20 20 20 20 20  <nArg-1);.      
8990: 20 20 7d 0a 20 20 20 20 20 20 20 20 75 74 66 38    }.        utf8
89a0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
89b0: 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53 65 70 61  "%s", p->rowSepa
89c0: 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a  rator);.      }.
89d0: 20 20 20 20 20 20 69 66 28 20 6e 41 72 67 3e 30        if( nArg>0
89e0: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
89f0: 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
8a00: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6f 75 74  ){.          out
8a10: 70 75 74 5f 63 73 76 28 70 2c 20 61 7a 41 72 67  put_csv(p, azArg
8a20: 5b 69 5d 2c 20 69 3c 6e 41 72 67 2d 31 29 3b 0a  [i], i<nArg-1);.
8a30: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
8a40: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
8a50: 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72  >out, "%s", p->r
8a60: 6f 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20  owSeparator);.  
8a70: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74 54      }.      setT
8a80: 65 78 74 4d 6f 64 65 28 70 2d 3e 6f 75 74 2c 20  extMode(p->out, 
8a90: 31 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  1);.      break;
8aa0: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
8ab0: 4d 4f 44 45 5f 51 75 6f 74 65 3a 0a 20 20 20 20  MODE_Quote:.    
8ac0: 63 61 73 65 20 4d 4f 44 45 5f 49 6e 73 65 72 74  case MODE_Insert
8ad0: 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20 61 7a  : {.      if( az
8ae0: 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  Arg==0 ) break;.
8af0: 20 20 20 20 20 20 69 66 28 20 70 2d 3e 63 4d 6f        if( p->cMo
8b00: 64 65 3d 3d 4d 4f 44 45 5f 49 6e 73 65 72 74 20  de==MODE_Insert 
8b10: 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
8b20: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 49  printf(p->out,"I
8b30: 4e 53 45 52 54 20 49 4e 54 4f 20 25 73 22 2c 70  NSERT INTO %s",p
8b40: 2d 3e 7a 44 65 73 74 54 61 62 6c 65 29 3b 0a 20  ->zDestTable);. 
8b50: 20 20 20 20 20 20 20 69 66 28 20 70 2d 3e 73 68         if( p->sh
8b60: 6f 77 48 65 61 64 65 72 20 29 7b 0a 20 20 20 20  owHeader ){.    
8b70: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
8b80: 28 70 2d 3e 6f 75 74 2c 22 28 22 29 3b 0a 20 20  (p->out,"(");.  
8b90: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b          for(i=0;
8ba0: 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
8bb0: 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20             char 
8bc0: 2a 7a 53 65 70 20 3d 20 69 3e 30 20 3f 20 22 2c  *zSep = i>0 ? ",
8bd0: 22 3a 20 22 22 3b 0a 20 20 20 20 20 20 20 20 20  ": "";.         
8be0: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
8bf0: 2d 3e 6f 75 74 2c 20 22 25 73 25 73 22 2c 20 7a  ->out, "%s%s", z
8c00: 53 65 70 2c 20 61 7a 43 6f 6c 5b 69 5d 29 3b 0a  Sep, azCol[i]);.
8c10: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
8c20: 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
8c30: 28 70 2d 3e 6f 75 74 2c 22 29 22 29 3b 0a 20 20  (p->out,")");.  
8c40: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
8c50: 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
8c60: 74 2c 22 20 56 41 4c 55 45 53 28 22 29 3b 0a 20  t," VALUES(");. 
8c70: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70       }else if( p
8c80: 2d 3e 63 6e 74 3d 3d 30 20 26 26 20 70 2d 3e 73  ->cnt==0 && p->s
8c90: 68 6f 77 48 65 61 64 65 72 20 29 7b 0a 20 20 20  howHeader ){.   
8ca0: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
8cb0: 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
8cc0: 20 20 20 20 20 20 69 66 28 20 69 3e 30 20 29 20        if( i>0 ) 
8cd0: 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
8ce0: 74 2c 20 22 2c 22 29 3b 0a 20 20 20 20 20 20 20  t, ",");.       
8cf0: 20 20 20 6f 75 74 70 75 74 5f 71 75 6f 74 65 64     output_quoted
8d00: 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75 74 2c 20  _string(p->out, 
8d10: 61 7a 43 6f 6c 5b 69 5d 29 3b 0a 20 20 20 20 20  azCol[i]);.     
8d20: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 61 77     }.        raw
8d30: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
8d40: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  \n");.      }.  
8d50: 20 20 20 20 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20      p->cnt++;.  
8d60: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
8d70: 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
8d80: 20 20 20 63 68 61 72 20 2a 7a 53 65 70 20 3d 20     char *zSep = 
8d90: 69 3e 30 20 3f 20 22 2c 22 3a 20 22 22 3b 0a 20  i>0 ? ",": "";. 
8da0: 20 20 20 20 20 20 20 69 66 28 20 28 61 7a 41 72         if( (azAr
8db0: 67 5b 69 5d 3d 3d 30 29 20 7c 7c 20 28 61 69 54  g[i]==0) || (aiT
8dc0: 79 70 65 20 26 26 20 61 69 54 79 70 65 5b 69 5d  ype && aiType[i]
8dd0: 3d 3d 53 51 4c 49 54 45 5f 4e 55 4c 4c 29 20 29  ==SQLITE_NULL) )
8de0: 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38  {.          utf8
8df0: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
8e00: 25 73 4e 55 4c 4c 22 2c 7a 53 65 70 29 3b 0a 20  %sNULL",zSep);. 
8e10: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
8e20: 20 61 69 54 79 70 65 20 26 26 20 61 69 54 79 70   aiType && aiTyp
8e30: 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 54 45 58  e[i]==SQLITE_TEX
8e40: 54 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  T ){.          i
8e50: 66 28 20 7a 53 65 70 5b 30 5d 20 29 20 75 74 66  f( zSep[0] ) utf
8e60: 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
8e70: 22 25 73 22 2c 7a 53 65 70 29 3b 0a 20 20 20 20  "%s",zSep);.    
8e80: 20 20 20 20 20 20 6f 75 74 70 75 74 5f 71 75 6f        output_quo
8e90: 74 65 64 5f 73 74 72 69 6e 67 28 70 2d 3e 6f 75  ted_string(p->ou
8ea0: 74 2c 20 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20  t, azArg[i]);.  
8eb0: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
8ec0: 61 69 54 79 70 65 20 26 26 20 28 61 69 54 79 70  aiType && (aiTyp
8ed0: 65 5b 69 5d 3d 3d 53 51 4c 49 54 45 5f 49 4e 54  e[i]==SQLITE_INT
8ee0: 45 47 45 52 0a 20 20 20 20 20 20 20 20 20 20 20  EGER.           
8ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f00: 20 20 7c 7c 20 61 69 54 79 70 65 5b 69 5d 3d 3d    || aiType[i]==
8f10: 53 51 4c 49 54 45 5f 46 4c 4f 41 54 29 20 29 7b  SQLITE_FLOAT) ){
8f20: 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
8f30: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
8f40: 73 25 73 22 2c 7a 53 65 70 2c 20 61 7a 41 72 67  s%s",zSep, azArg
8f50: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  [i]);.        }e
8f60: 6c 73 65 20 69 66 28 20 61 69 54 79 70 65 20 26  lse if( aiType &
8f70: 26 20 61 69 54 79 70 65 5b 69 5d 3d 3d 53 51 4c  & aiType[i]==SQL
8f80: 49 54 45 5f 42 4c 4f 42 20 26 26 20 70 2d 3e 70  ITE_BLOB && p->p
8f90: 53 74 6d 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Stmt ){.        
8fa0: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 42    const void *pB
8fb0: 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  lob = sqlite3_co
8fc0: 6c 75 6d 6e 5f 62 6c 6f 62 28 70 2d 3e 70 53 74  lumn_blob(p->pSt
8fd0: 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20  mt, i);.        
8fe0: 20 20 69 6e 74 20 6e 42 6c 6f 62 20 3d 20 73 71    int nBlob = sq
8ff0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
9000: 65 73 28 70 2d 3e 70 53 74 6d 74 2c 20 69 29 3b  es(p->pStmt, i);
9010: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 7a  .          if( z
9020: 53 65 70 5b 30 5d 20 29 20 75 74 66 38 5f 70 72  Sep[0] ) utf8_pr
9030: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 73 22  intf(p->out,"%s"
9040: 2c 7a 53 65 70 29 3b 0a 20 20 20 20 20 20 20 20  ,zSep);.        
9050: 20 20 6f 75 74 70 75 74 5f 68 65 78 5f 62 6c 6f    output_hex_blo
9060: 62 28 70 2d 3e 6f 75 74 2c 20 70 42 6c 6f 62 2c  b(p->out, pBlob,
9070: 20 6e 42 6c 6f 62 29 3b 0a 20 20 20 20 20 20 20   nBlob);.       
9080: 20 7d 65 6c 73 65 20 69 66 28 20 69 73 4e 75 6d   }else if( isNum
9090: 62 65 72 28 61 7a 41 72 67 5b 69 5d 2c 20 30 29  ber(azArg[i], 0)
90a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74   ){.          ut
90b0: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
90c0: 2c 22 25 73 25 73 22 2c 7a 53 65 70 2c 20 61 7a  ,"%s%s",zSep, az
90d0: 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[i]);.       
90e0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
90f0: 20 20 69 66 28 20 7a 53 65 70 5b 30 5d 20 29 20    if( zSep[0] ) 
9100: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
9110: 75 74 2c 22 25 73 22 2c 7a 53 65 70 29 3b 0a 20  ut,"%s",zSep);. 
9120: 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 5f           output_
9130: 71 75 6f 74 65 64 5f 73 74 72 69 6e 67 28 70 2d  quoted_string(p-
9140: 3e 6f 75 74 2c 20 61 7a 41 72 67 5b 69 5d 29 3b  >out, azArg[i]);
9150: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
9160: 20 7d 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69   }.      raw_pri
9170: 6e 74 66 28 70 2d 3e 6f 75 74 2c 70 2d 3e 63 4d  ntf(p->out,p->cM
9180: 6f 64 65 3d 3d 4d 4f 44 45 5f 51 75 6f 74 65 3f  ode==MODE_Quote?
9190: 22 5c 6e 22 3a 22 29 3b 5c 6e 22 29 3b 0a 20 20  "\n":");\n");.  
91a0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
91b0: 0a 20 20 20 20 63 61 73 65 20 4d 4f 44 45 5f 41  .    case MODE_A
91c0: 73 63 69 69 3a 20 7b 0a 20 20 20 20 20 20 69 66  scii: {.      if
91d0: 28 20 70 2d 3e 63 6e 74 2b 2b 3d 3d 30 20 26 26  ( p->cnt++==0 &&
91e0: 20 70 2d 3e 73 68 6f 77 48 65 61 64 65 72 20 29   p->showHeader )
91f0: 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d  {.        for(i=
9200: 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
9210: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69  .          if( i
9220: 3e 30 20 29 20 75 74 66 38 5f 70 72 69 6e 74 66  >0 ) utf8_printf
9230: 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c 20 70  (p->out, "%s", p
9240: 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b  ->colSeparator);
9250: 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
9260: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
9270: 73 22 2c 61 7a 43 6f 6c 5b 69 5d 20 3f 20 61 7a  s",azCol[i] ? az
9280: 43 6f 6c 5b 69 5d 20 3a 20 22 22 29 3b 0a 20 20  Col[i] : "");.  
9290: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
92a0: 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f  utf8_printf(p->o
92b0: 75 74 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77  ut, "%s", p->row
92c0: 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20  Separator);.    
92d0: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 61 7a    }.      if( az
92e0: 41 72 67 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  Arg==0 ) break;.
92f0: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
9300: 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
9310: 20 20 20 20 20 69 66 28 20 69 3e 30 20 29 20 75       if( i>0 ) u
9320: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
9330: 74 2c 20 22 25 73 22 2c 20 70 2d 3e 63 6f 6c 53  t, "%s", p->colS
9340: 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20  eparator);.     
9350: 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
9360: 2d 3e 6f 75 74 2c 22 25 73 22 2c 61 7a 41 72 67  ->out,"%s",azArg
9370: 5b 69 5d 20 3f 20 61 7a 41 72 67 5b 69 5d 20 3a  [i] ? azArg[i] :
9380: 20 70 2d 3e 6e 75 6c 6c 56 61 6c 75 65 29 3b 0a   p->nullValue);.
9390: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 75 74        }.      ut
93a0: 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
93b0: 2c 20 22 25 73 22 2c 20 70 2d 3e 72 6f 77 53 65  , "%s", p->rowSe
93c0: 70 61 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20  parator);.      
93d0: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
93e0: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
93f0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  /*.** This is th
9400: 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69  e callback routi
9410: 6e 65 20 74 68 61 74 20 74 68 65 20 53 51 4c 69  ne that the SQLi
9420: 74 65 20 6c 69 62 72 61 72 79 0a 2a 2a 20 69 6e  te library.** in
9430: 76 6f 6b 65 73 20 66 6f 72 20 65 61 63 68 20 72  vokes for each r
9440: 6f 77 20 6f 66 20 61 20 71 75 65 72 79 20 72 65  ow of a query re
9450: 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  sult..*/.static 
9460: 69 6e 74 20 63 61 6c 6c 62 61 63 6b 28 76 6f 69  int callback(voi
9470: 64 20 2a 70 41 72 67 2c 20 69 6e 74 20 6e 41 72  d *pArg, int nAr
9480: 67 2c 20 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c  g, char **azArg,
9490: 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 29 7b 0a   char **azCol){.
94a0: 20 20 2f 2a 20 73 69 6e 63 65 20 77 65 20 64 6f    /* since we do
94b0: 6e 27 74 20 68 61 76 65 20 74 79 70 65 20 69 6e  n't have type in
94c0: 66 6f 2c 20 63 61 6c 6c 20 74 68 65 20 73 68 65  fo, call the she
94d0: 6c 6c 5f 63 61 6c 6c 62 61 63 6b 20 77 69 74 68  ll_callback with
94e0: 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 20 2a 2f   a NULL value */
94f0: 0a 20 20 72 65 74 75 72 6e 20 73 68 65 6c 6c 5f  .  return shell_
9500: 63 61 6c 6c 62 61 63 6b 28 70 41 72 67 2c 20 6e  callback(pArg, n
9510: 41 72 67 2c 20 61 7a 41 72 67 2c 20 61 7a 43 6f  Arg, azArg, azCo
9520: 6c 2c 20 4e 55 4c 4c 29 3b 0a 7d 0a 0a 2f 2a 0a  l, NULL);.}../*.
9530: 2a 2a 20 53 65 74 20 74 68 65 20 64 65 73 74 69  ** Set the desti
9540: 6e 61 74 69 6f 6e 20 74 61 62 6c 65 20 66 69 65  nation table fie
9550: 6c 64 20 6f 66 20 74 68 65 20 53 68 65 6c 6c 53  ld of the ShellS
9560: 74 61 74 65 20 73 74 72 75 63 74 75 72 65 20 74  tate structure t
9570: 6f 0a 2a 2a 20 74 68 65 20 6e 61 6d 65 20 6f 66  o.** the name of
9580: 20 74 68 65 20 74 61 62 6c 65 20 67 69 76 65 6e   the table given
9590: 2e 20 20 45 73 63 61 70 65 20 61 6e 79 20 71 75  .  Escape any qu
95a0: 6f 74 65 20 63 68 61 72 61 63 74 65 72 73 20 69  ote characters i
95b0: 6e 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20 6e  n the.** table n
95c0: 61 6d 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ame..*/.static v
95d0: 6f 69 64 20 73 65 74 5f 74 61 62 6c 65 5f 6e 61  oid set_table_na
95e0: 6d 65 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  me(ShellState *p
95f0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  , const char *zN
9600: 61 6d 65 29 7b 0a 20 20 69 6e 74 20 69 2c 20 6e  ame){.  int i, n
9610: 3b 0a 20 20 69 6e 74 20 6e 65 65 64 51 75 6f 74  ;.  int needQuot
9620: 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20  e;.  char *z;.. 
9630: 20 69 66 28 20 70 2d 3e 7a 44 65 73 74 54 61 62   if( p->zDestTab
9640: 6c 65 20 29 7b 0a 20 20 20 20 66 72 65 65 28 70  le ){.    free(p
9650: 2d 3e 7a 44 65 73 74 54 61 62 6c 65 29 3b 0a 20  ->zDestTable);. 
9660: 20 20 20 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65     p->zDestTable
9670: 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 0;.  }.  if( 
9680: 7a 4e 61 6d 65 3d 3d 30 20 29 20 72 65 74 75 72  zName==0 ) retur
9690: 6e 3b 0a 20 20 6e 65 65 64 51 75 6f 74 65 20 3d  n;.  needQuote =
96a0: 20 21 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67   !isalpha((unsig
96b0: 6e 65 64 20 63 68 61 72 29 2a 7a 4e 61 6d 65 29  ned char)*zName)
96c0: 20 26 26 20 2a 7a 4e 61 6d 65 21 3d 27 5f 27 3b   && *zName!='_';
96d0: 0a 20 20 66 6f 72 28 69 3d 6e 3d 30 3b 20 7a 4e  .  for(i=n=0; zN
96e0: 61 6d 65 5b 69 5d 3b 20 69 2b 2b 2c 20 6e 2b 2b  ame[i]; i++, n++
96f0: 29 7b 0a 20 20 20 20 69 66 28 20 21 69 73 61 6c  ){.    if( !isal
9700: 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68  num((unsigned ch
9710: 61 72 29 7a 4e 61 6d 65 5b 69 5d 29 20 26 26 20  ar)zName[i]) && 
9720: 7a 4e 61 6d 65 5b 69 5d 21 3d 27 5f 27 20 29 7b  zName[i]!='_' ){
9730: 0a 20 20 20 20 20 20 6e 65 65 64 51 75 6f 74 65  .      needQuote
9740: 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 66 28 20   = 1;.      if( 
9750: 7a 4e 61 6d 65 5b 69 5d 3d 3d 27 5c 27 27 20 29  zName[i]=='\'' )
9760: 20 6e 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   n++;.    }.  }.
9770: 20 20 69 66 28 20 6e 65 65 64 51 75 6f 74 65 20    if( needQuote 
9780: 29 20 6e 20 2b 3d 20 32 3b 0a 20 20 7a 20 3d 20  ) n += 2;.  z = 
9790: 70 2d 3e 7a 44 65 73 74 54 61 62 6c 65 20 3d 20  p->zDestTable = 
97a0: 6d 61 6c 6c 6f 63 28 20 6e 2b 31 20 29 3b 0a 20  malloc( n+1 );. 
97b0: 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20   if( z==0 ){.   
97c0: 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
97d0: 72 72 2c 22 45 72 72 6f 72 3a 20 6f 75 74 20 6f  rr,"Error: out o
97e0: 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20  f memory\n");.  
97f0: 20 20 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a 20    exit(1);.  }. 
9800: 20 6e 20 3d 20 30 3b 0a 20 20 69 66 28 20 6e 65   n = 0;.  if( ne
9810: 65 64 51 75 6f 74 65 20 29 20 7a 5b 6e 2b 2b 5d  edQuote ) z[n++]
9820: 20 3d 20 27 5c 27 27 3b 0a 20 20 66 6f 72 28 69   = '\'';.  for(i
9830: 3d 30 3b 20 7a 4e 61 6d 65 5b 69 5d 3b 20 69 2b  =0; zName[i]; i+
9840: 2b 29 7b 0a 20 20 20 20 7a 5b 6e 2b 2b 5d 20 3d  +){.    z[n++] =
9850: 20 7a 4e 61 6d 65 5b 69 5d 3b 0a 20 20 20 20 69   zName[i];.    i
9860: 66 28 20 7a 4e 61 6d 65 5b 69 5d 3d 3d 27 5c 27  f( zName[i]=='\'
9870: 27 20 29 20 7a 5b 6e 2b 2b 5d 20 3d 20 27 5c 27  ' ) z[n++] = '\'
9880: 27 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6e 65 65  ';.  }.  if( nee
9890: 64 51 75 6f 74 65 20 29 20 7a 5b 6e 2b 2b 5d 20  dQuote ) z[n++] 
98a0: 3d 20 27 5c 27 27 3b 0a 20 20 7a 5b 6e 5d 20 3d  = '\'';.  z[n] =
98b0: 20 30 3b 0a 7d 0a 0a 2f 2a 20 7a 49 6e 20 69 73   0;.}../* zIn is
98c0: 20 65 69 74 68 65 72 20 61 20 70 6f 69 6e 74 65   either a pointe
98d0: 72 20 74 6f 20 61 20 4e 55 4c 4c 2d 74 65 72 6d  r to a NULL-term
98e0: 69 6e 61 74 65 64 20 73 74 72 69 6e 67 20 69 6e  inated string in
98f0: 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64   memory obtained
9900: 0a 2a 2a 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  .** from malloc(
9910: 29 2c 20 6f 72 20 61 20 4e 55 4c 4c 20 70 6f 69  ), or a NULL poi
9920: 6e 74 65 72 2e 20 54 68 65 20 73 74 72 69 6e 67  nter. The string
9930: 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 7a   pointed to by z
9940: 41 70 70 65 6e 64 20 69 73 0a 2a 2a 20 61 64 64  Append is.** add
9950: 65 64 20 74 6f 20 7a 49 6e 2c 20 61 6e 64 20 74  ed to zIn, and t
9960: 68 65 20 72 65 73 75 6c 74 20 72 65 74 75 72 6e  he result return
9970: 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74  ed in memory obt
9980: 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f  ained from mallo
9990: 63 28 29 2e 0a 2a 2a 20 7a 49 6e 2c 20 69 66 20  c()..** zIn, if 
99a0: 69 74 20 77 61 73 20 6e 6f 74 20 4e 55 4c 4c 2c  it was not NULL,
99b0: 20 69 73 20 66 72 65 65 64 2e 0a 2a 2a 0a 2a 2a   is freed..**.**
99c0: 20 49 66 20 74 68 65 20 74 68 69 72 64 20 61 72   If the third ar
99d0: 67 75 6d 65 6e 74 2c 20 71 75 6f 74 65 2c 20 69  gument, quote, i
99e0: 73 20 6e 6f 74 20 27 5c 30 27 2c 20 74 68 65 6e  s not '\0', then
99f0: 20 69 74 20 69 73 20 75 73 65 64 20 61 73 20 61   it is used as a
9a00: 0a 2a 2a 20 71 75 6f 74 65 20 63 68 61 72 61 63  .** quote charac
9a10: 74 65 72 20 66 6f 72 20 7a 41 70 70 65 6e 64 2e  ter for zAppend.
9a20: 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20  .*/.static char 
9a30: 2a 61 70 70 65 6e 64 54 65 78 74 28 63 68 61 72  *appendText(char
9a40: 20 2a 7a 49 6e 2c 20 63 68 61 72 20 63 6f 6e 73   *zIn, char cons
9a50: 74 20 2a 7a 41 70 70 65 6e 64 2c 20 63 68 61 72  t *zAppend, char
9a60: 20 71 75 6f 74 65 29 7b 0a 20 20 69 6e 74 20 6c   quote){.  int l
9a70: 65 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69  en;.  int i;.  i
9a80: 6e 74 20 6e 41 70 70 65 6e 64 20 3d 20 73 74 72  nt nAppend = str
9a90: 6c 65 6e 33 30 28 7a 41 70 70 65 6e 64 29 3b 0a  len30(zAppend);.
9aa0: 20 20 69 6e 74 20 6e 49 6e 20 3d 20 28 7a 49 6e    int nIn = (zIn
9ab0: 3f 73 74 72 6c 65 6e 33 30 28 7a 49 6e 29 3a 30  ?strlen30(zIn):0
9ac0: 29 3b 0a 0a 20 20 6c 65 6e 20 3d 20 6e 41 70 70  );..  len = nApp
9ad0: 65 6e 64 2b 6e 49 6e 2b 31 3b 0a 20 20 69 66 28  end+nIn+1;.  if(
9ae0: 20 71 75 6f 74 65 20 29 7b 0a 20 20 20 20 6c 65   quote ){.    le
9af0: 6e 20 2b 3d 20 32 3b 0a 20 20 20 20 66 6f 72 28  n += 2;.    for(
9b00: 69 3d 30 3b 20 69 3c 6e 41 70 70 65 6e 64 3b 20  i=0; i<nAppend; 
9b10: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
9b20: 7a 41 70 70 65 6e 64 5b 69 5d 3d 3d 71 75 6f 74  zAppend[i]==quot
9b30: 65 20 29 20 6c 65 6e 2b 2b 3b 0a 20 20 20 20 7d  e ) len++;.    }
9b40: 0a 20 20 7d 0a 0a 20 20 7a 49 6e 20 3d 20 28 63  .  }..  zIn = (c
9b50: 68 61 72 20 2a 29 72 65 61 6c 6c 6f 63 28 7a 49  har *)realloc(zI
9b60: 6e 2c 20 6c 65 6e 29 3b 0a 20 20 69 66 28 20 21  n, len);.  if( !
9b70: 7a 49 6e 20 29 7b 0a 20 20 20 20 72 65 74 75 72  zIn ){.    retur
9b80: 6e 20 30 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  n 0;.  }..  if( 
9b90: 71 75 6f 74 65 20 29 7b 0a 20 20 20 20 63 68 61  quote ){.    cha
9ba0: 72 20 2a 7a 43 73 72 20 3d 20 26 7a 49 6e 5b 6e  r *zCsr = &zIn[n
9bb0: 49 6e 5d 3b 0a 20 20 20 20 2a 7a 43 73 72 2b 2b  In];.    *zCsr++
9bc0: 20 3d 20 71 75 6f 74 65 3b 0a 20 20 20 20 66 6f   = quote;.    fo
9bd0: 72 28 69 3d 30 3b 20 69 3c 6e 41 70 70 65 6e 64  r(i=0; i<nAppend
9be0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 2a 7a  ; i++){.      *z
9bf0: 43 73 72 2b 2b 20 3d 20 7a 41 70 70 65 6e 64 5b  Csr++ = zAppend[
9c00: 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 41  i];.      if( zA
9c10: 70 70 65 6e 64 5b 69 5d 3d 3d 71 75 6f 74 65 20  ppend[i]==quote 
9c20: 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 71 75 6f 74  ) *zCsr++ = quot
9c30: 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43  e;.    }.    *zC
9c40: 73 72 2b 2b 20 3d 20 71 75 6f 74 65 3b 0a 20 20  sr++ = quote;.  
9c50: 20 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 5c 30 27    *zCsr++ = '\0'
9c60: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 7a  ;.    assert( (z
9c70: 43 73 72 2d 7a 49 6e 29 3d 3d 6c 65 6e 20 29 3b  Csr-zIn)==len );
9c80: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6d 65  .  }else{.    me
9c90: 6d 63 70 79 28 26 7a 49 6e 5b 6e 49 6e 5d 2c 20  mcpy(&zIn[nIn], 
9ca0: 7a 41 70 70 65 6e 64 2c 20 6e 41 70 70 65 6e 64  zAppend, nAppend
9cb0: 29 3b 0a 20 20 20 20 7a 49 6e 5b 6c 65 6e 2d 31  );.    zIn[len-1
9cc0: 5d 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 0a 0a 20  ] = '\0';.  }.. 
9cd0: 20 72 65 74 75 72 6e 20 7a 49 6e 3b 0a 7d 0a 0a   return zIn;.}..
9ce0: 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61  ./*.** Execute a
9cf0: 20 71 75 65 72 79 20 73 74 61 74 65 6d 65 6e 74   query statement
9d00: 20 74 68 61 74 20 77 69 6c 6c 20 67 65 6e 65 72   that will gener
9d10: 61 74 65 20 53 51 4c 20 6f 75 74 70 75 74 2e 20  ate SQL output. 
9d20: 20 50 72 69 6e 74 0a 2a 2a 20 74 68 65 20 72 65   Print.** the re
9d30: 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2c 20 63 6f  sult columns, co
9d40: 6d 6d 61 2d 73 65 70 61 72 61 74 65 64 2c 20 6f  mma-separated, o
9d50: 6e 20 61 20 6c 69 6e 65 20 61 6e 64 20 74 68 65  n a line and the
9d60: 6e 20 61 64 64 20 61 0a 2a 2a 20 73 65 6d 69 63  n add a.** semic
9d70: 6f 6c 6f 6e 20 74 65 72 6d 69 6e 61 74 6f 72 20  olon terminator 
9d80: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
9d90: 61 74 20 6c 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49  at line..**.** I
9da0: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  f the number of 
9db0: 63 6f 6c 75 6d 6e 73 20 69 73 20 31 20 61 6e 64  columns is 1 and
9dc0: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e   that column con
9dd0: 74 61 69 6e 73 20 74 65 78 74 20 22 2d 2d 22 0a  tains text "--".
9de0: 2a 2a 20 74 68 65 6e 20 77 72 69 74 65 20 74 68  ** then write th
9df0: 65 20 73 65 6d 69 63 6f 6c 6f 6e 20 6f 6e 20 61  e semicolon on a
9e00: 20 73 65 70 61 72 61 74 65 20 6c 69 6e 65 2e 20   separate line. 
9e10: 20 54 68 61 74 20 77 61 79 2c 20 69 66 20 61 0a   That way, if a.
9e20: 2a 2a 20 22 2d 2d 22 20 63 6f 6d 6d 65 6e 74 20  ** "--" comment 
9e30: 6f 63 63 75 72 73 20 61 74 20 74 68 65 20 65 6e  occurs at the en
9e40: 64 20 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65  d of the stateme
9e50: 6e 74 2c 20 74 68 65 20 63 6f 6d 6d 65 6e 74 0a  nt, the comment.
9e60: 2a 2a 20 77 6f 6e 27 74 20 63 6f 6e 73 75 6d 65  ** won't consume
9e70: 20 74 68 65 20 73 65 6d 69 63 6f 6c 6f 6e 20 74   the semicolon t
9e80: 65 72 6d 69 6e 61 74 6f 72 2e 0a 2a 2f 0a 73 74  erminator..*/.st
9e90: 61 74 69 63 20 69 6e 74 20 72 75 6e 5f 74 61 62  atic int run_tab
9ea0: 6c 65 5f 64 75 6d 70 5f 71 75 65 72 79 28 0a 20  le_dump_query(. 
9eb0: 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20   ShellState *p, 
9ec0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 51 75 65            /* Que
9ed0: 72 79 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ry context */.  
9ee0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 65 6c  const char *zSel
9ef0: 65 63 74 2c 20 20 20 20 20 2f 2a 20 53 45 4c 45  ect,     /* SELE
9f00: 43 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  CT statement to 
9f10: 65 78 74 72 61 63 74 20 63 6f 6e 74 65 6e 74 20  extract content 
9f20: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
9f30: 2a 7a 46 69 72 73 74 52 6f 77 20 20 20 20 2f 2a  *zFirstRow    /*
9f40: 20 50 72 69 6e 74 20 62 65 66 6f 72 65 20 66 69   Print before fi
9f50: 72 73 74 20 72 6f 77 2c 20 69 66 20 6e 6f 74 20  rst row, if not 
9f60: 4e 55 4c 4c 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c  NULL */.){.  sql
9f70: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 65 6c 65  ite3_stmt *pSele
9f80: 63 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  ct;.  int rc;.  
9f90: 69 6e 74 20 6e 52 65 73 75 6c 74 3b 0a 20 20 69  int nResult;.  i
9fa0: 6e 74 20 69 3b 0a 20 20 63 6f 6e 73 74 20 63 68  nt i;.  const ch
9fb0: 61 72 20 2a 7a 3b 0a 20 20 72 63 20 3d 20 73 71  ar *z;.  rc = sq
9fc0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
9fd0: 28 70 2d 3e 64 62 2c 20 7a 53 65 6c 65 63 74 2c  (p->db, zSelect,
9fe0: 20 2d 31 2c 20 26 70 53 65 6c 65 63 74 2c 20 30   -1, &pSelect, 0
9ff0: 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
a000: 49 54 45 5f 4f 4b 20 7c 7c 20 21 70 53 65 6c 65  ITE_OK || !pSele
a010: 63 74 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70  ct ){.    utf8_p
a020: 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f  rintf(p->out, "/
a030: 2a 2a 2a 2a 20 45 52 52 4f 52 3a 20 28 25 64 29  **** ERROR: (%d)
a040: 20 25 73 20 2a 2a 2a 2a 2a 2f 5c 6e 22 2c 20 72   %s *****/\n", r
a050: 63 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  c,.             
a060: 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73     sqlite3_errms
a070: 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 69  g(p->db));.    i
a080: 66 28 20 28 72 63 26 30 78 66 66 29 21 3d 53 51  f( (rc&0xff)!=SQ
a090: 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 29 20 70  LITE_CORRUPT ) p
a0a0: 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 72 65  ->nErr++;.    re
a0b0: 74 75 72 6e 20 72 63 3b 0a 20 20 7d 0a 20 20 72  turn rc;.  }.  r
a0c0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70  c = sqlite3_step
a0d0: 28 70 53 65 6c 65 63 74 29 3b 0a 20 20 6e 52 65  (pSelect);.  nRe
a0e0: 73 75 6c 74 20 3d 20 73 71 6c 69 74 65 33 5f 63  sult = sqlite3_c
a0f0: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 65 6c  olumn_count(pSel
a100: 65 63 74 29 3b 0a 20 20 77 68 69 6c 65 28 20 72  ect);.  while( r
a110: 63 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b  c==SQLITE_ROW ){
a120: 0a 20 20 20 20 69 66 28 20 7a 46 69 72 73 74 52  .    if( zFirstR
a130: 6f 77 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  ow ){.      utf8
a140: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
a150: 22 25 73 22 2c 20 7a 46 69 72 73 74 52 6f 77 29  "%s", zFirstRow)
a160: 3b 0a 20 20 20 20 20 20 7a 46 69 72 73 74 52 6f  ;.      zFirstRo
a170: 77 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  w = 0;.    }.   
a180: 20 7a 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72   z = (const char
a190: 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
a1a0: 5f 74 65 78 74 28 70 53 65 6c 65 63 74 2c 20 30  _text(pSelect, 0
a1b0: 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
a1c0: 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 22 2c  tf(p->out, "%s",
a1d0: 20 7a 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31   z);.    for(i=1
a1e0: 3b 20 69 3c 6e 52 65 73 75 6c 74 3b 20 69 2b 2b  ; i<nResult; i++
a1f0: 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
a200: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2c 25  intf(p->out, ",%
a210: 73 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  s", sqlite3_colu
a220: 6d 6e 5f 74 65 78 74 28 70 53 65 6c 65 63 74 2c  mn_text(pSelect,
a230: 20 69 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20   i));.    }.    
a240: 69 66 28 20 7a 3d 3d 30 20 29 20 7a 20 3d 20 22  if( z==0 ) z = "
a250: 22 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 7a 5b  ";.    while( z[
a260: 30 5d 20 26 26 20 28 7a 5b 30 5d 21 3d 27 2d 27  0] && (z[0]!='-'
a270: 20 7c 7c 20 7a 5b 31 5d 21 3d 27 2d 27 29 20 29   || z[1]!='-') )
a280: 20 7a 2b 2b 3b 0a 20 20 20 20 69 66 28 20 7a 5b   z++;.    if( z[
a290: 30 5d 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  0] ){.      raw_
a2a0: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
a2b0: 5c 6e 3b 5c 6e 22 29 3b 0a 20 20 20 20 7d 65 6c  \n;\n");.    }el
a2c0: 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72  se{.      raw_pr
a2d0: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 3b 5c  intf(p->out, ";\
a2e0: 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  n");.    }.    r
a2f0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70  c = sqlite3_step
a300: 28 70 53 65 6c 65 63 74 29 3b 0a 20 20 7d 0a 20  (pSelect);.  }. 
a310: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69   rc = sqlite3_fi
a320: 6e 61 6c 69 7a 65 28 70 53 65 6c 65 63 74 29 3b  nalize(pSelect);
a330: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
a340: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 75 74 66 38  E_OK ){.    utf8
a350: 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
a360: 22 2f 2a 2a 2a 2a 20 45 52 52 4f 52 3a 20 28 25  "/**** ERROR: (%
a370: 64 29 20 25 73 20 2a 2a 2a 2a 2a 2f 5c 6e 22 2c  d) %s *****/\n",
a380: 20 72 63 2c 0a 20 20 20 20 20 20 20 20 20 20 20   rc,.           
a390: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72       sqlite3_err
a3a0: 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20  msg(p->db));.   
a3b0: 20 69 66 28 20 28 72 63 26 30 78 66 66 29 21 3d   if( (rc&0xff)!=
a3c0: 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 29  SQLITE_CORRUPT )
a3d0: 20 70 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 7d 0a   p->nErr++;.  }.
a3e0: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
a3f0: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 73  /*.** Allocate s
a400: 70 61 63 65 20 61 6e 64 20 73 61 76 65 20 6f 66  pace and save of
a410: 66 20 63 75 72 72 65 6e 74 20 65 72 72 6f 72 20  f current error 
a420: 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69  string..*/.stati
a430: 63 20 63 68 61 72 20 2a 73 61 76 65 5f 65 72 72  c char *save_err
a440: 5f 6d 73 67 28 0a 20 20 73 71 6c 69 74 65 33 20  _msg(.  sqlite3 
a450: 2a 64 62 20 20 20 20 20 20 20 20 20 20 20 20 2f  *db            /
a460: 2a 20 44 61 74 61 62 61 73 65 20 74 6f 20 71 75  * Database to qu
a470: 65 72 79 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  ery */.){.  int 
a480: 6e 45 72 72 4d 73 67 20 3d 20 31 2b 73 74 72 6c  nErrMsg = 1+strl
a490: 65 6e 33 30 28 73 71 6c 69 74 65 33 5f 65 72 72  en30(sqlite3_err
a4a0: 6d 73 67 28 64 62 29 29 3b 0a 20 20 63 68 61 72  msg(db));.  char
a4b0: 20 2a 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69   *zErrMsg = sqli
a4c0: 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 6e 45 72  te3_malloc64(nEr
a4d0: 72 4d 73 67 29 3b 0a 20 20 69 66 28 20 7a 45 72  rMsg);.  if( zEr
a4e0: 72 4d 73 67 20 29 7b 0a 20 20 20 20 6d 65 6d 63  rMsg ){.    memc
a4f0: 70 79 28 7a 45 72 72 4d 73 67 2c 20 73 71 6c 69  py(zErrMsg, sqli
a500: 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 2c 20  te3_errmsg(db), 
a510: 6e 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20  nErrMsg);.  }.  
a520: 72 65 74 75 72 6e 20 7a 45 72 72 4d 73 67 3b 0a  return zErrMsg;.
a530: 7d 0a 0a 23 69 66 64 65 66 20 5f 5f 6c 69 6e 75  }..#ifdef __linu
a540: 78 5f 5f 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70  x__./*.** Attemp
a550: 74 20 74 6f 20 64 69 73 70 6c 61 79 20 49 2f 4f  t to display I/O
a560: 20 73 74 61 74 73 20 6f 6e 20 4c 69 6e 75 78 20   stats on Linux 
a570: 75 73 69 6e 67 20 2f 70 72 6f 63 2f 50 49 44 2f  using /proc/PID/
a580: 69 6f 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  io.*/.static voi
a590: 64 20 64 69 73 70 6c 61 79 4c 69 6e 75 78 49 6f  d displayLinuxIo
a5a0: 53 74 61 74 73 28 46 49 4c 45 20 2a 6f 75 74 29  Stats(FILE *out)
a5b0: 7b 0a 20 20 46 49 4c 45 20 2a 69 6e 3b 0a 20 20  {.  FILE *in;.  
a5c0: 63 68 61 72 20 7a 5b 32 30 30 5d 3b 0a 20 20 73  char z[200];.  s
a5d0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
a5e0: 73 69 7a 65 6f 66 28 7a 29 2c 20 7a 2c 20 22 2f  sizeof(z), z, "/
a5f0: 70 72 6f 63 2f 25 64 2f 69 6f 22 2c 20 67 65 74  proc/%d/io", get
a600: 70 69 64 28 29 29 3b 0a 20 20 69 6e 20 3d 20 66  pid());.  in = f
a610: 6f 70 65 6e 28 7a 2c 20 22 72 62 22 29 3b 0a 20  open(z, "rb");. 
a620: 20 69 66 28 20 69 6e 3d 3d 30 20 29 20 72 65 74   if( in==0 ) ret
a630: 75 72 6e 3b 0a 20 20 77 68 69 6c 65 28 20 66 67  urn;.  while( fg
a640: 65 74 73 28 7a 2c 20 73 69 7a 65 6f 66 28 7a 29  ets(z, sizeof(z)
a650: 2c 20 69 6e 29 21 3d 30 20 29 7b 0a 20 20 20 20  , in)!=0 ){.    
a660: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72  static const str
a670: 75 63 74 20 7b 0a 20 20 20 20 20 20 63 6f 6e 73  uct {.      cons
a680: 74 20 63 68 61 72 20 2a 7a 50 61 74 74 65 72 6e  t char *zPattern
a690: 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  ;.      const ch
a6a0: 61 72 20 2a 7a 44 65 73 63 3b 0a 20 20 20 20 7d  ar *zDesc;.    }
a6b0: 20 61 54 72 61 6e 73 5b 5d 20 3d 20 7b 0a 20 20   aTrans[] = {.  
a6c0: 20 20 20 20 7b 20 22 72 63 68 61 72 3a 20 22 2c      { "rchar: ",
a6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6e0: 20 20 22 42 79 74 65 73 20 72 65 63 65 69 76 65    "Bytes receive
a6f0: 64 20 62 79 20 72 65 61 64 28 29 3a 22 20 7d 2c  d by read():" },
a700: 0a 20 20 20 20 20 20 7b 20 22 77 63 68 61 72 3a  .      { "wchar:
a710: 20 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20   ",             
a720: 20 20 20 20 20 22 42 79 74 65 73 20 73 65 6e 74       "Bytes sent
a730: 20 74 6f 20 77 72 69 74 65 28 29 3a 22 20 20 20   to write():"   
a740: 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 73 79 73   },.      { "sys
a750: 63 72 3a 20 22 2c 20 20 20 20 20 20 20 20 20 20  cr: ",          
a760: 20 20 20 20 20 20 20 20 22 52 65 61 64 28 29 20          "Read() 
a770: 73 79 73 74 65 6d 20 63 61 6c 6c 73 3a 22 20 20  system calls:"  
a780: 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
a790: 73 79 73 63 77 3a 20 22 2c 20 20 20 20 20 20 20  syscw: ",       
a7a0: 20 20 20 20 20 20 20 20 20 20 20 22 57 72 69 74             "Writ
a7b0: 65 28 29 20 73 79 73 74 65 6d 20 63 61 6c 6c 73  e() system calls
a7c0: 3a 22 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20  :"     },.      
a7d0: 7b 20 22 72 65 61 64 5f 62 79 74 65 73 3a 20 22  { "read_bytes: "
a7e0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 22 42  ,             "B
a7f0: 79 74 65 73 20 72 65 61 64 20 66 72 6f 6d 20 73  ytes read from s
a800: 74 6f 72 61 67 65 3a 22 20 20 7d 2c 0a 20 20 20  torage:"  },.   
a810: 20 20 20 7b 20 22 77 72 69 74 65 5f 62 79 74 65     { "write_byte
a820: 73 3a 20 22 2c 20 20 20 20 20 20 20 20 20 20 20  s: ",           
a830: 20 22 42 79 74 65 73 20 77 72 69 74 74 65 6e 20   "Bytes written 
a840: 74 6f 20 73 74 6f 72 61 67 65 3a 22 20 7d 2c 0a  to storage:" },.
a850: 20 20 20 20 20 20 7b 20 22 63 61 6e 63 65 6c 6c        { "cancell
a860: 65 64 5f 77 72 69 74 65 5f 62 79 74 65 73 3a 20  ed_write_bytes: 
a870: 22 2c 20 20 22 43 61 6e 63 65 6c 6c 65 64 20 77  ",  "Cancelled w
a880: 72 69 74 65 20 62 79 74 65 73 3a 22 20 20 20 20  rite bytes:"    
a890: 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e  },.    };.    in
a8a0: 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  t i;.    for(i=0
a8b0: 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28 61 54  ; i<ArraySize(aT
a8c0: 72 61 6e 73 29 3b 20 69 2b 2b 29 7b 0a 20 20 20  rans); i++){.   
a8d0: 20 20 20 69 6e 74 20 6e 20 3d 20 28 69 6e 74 29     int n = (int)
a8e0: 73 74 72 6c 65 6e 28 61 54 72 61 6e 73 5b 69 5d  strlen(aTrans[i]
a8f0: 2e 7a 50 61 74 74 65 72 6e 29 3b 0a 20 20 20 20  .zPattern);.    
a900: 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28 61 54    if( strncmp(aT
a910: 72 61 6e 73 5b 69 5d 2e 7a 50 61 74 74 65 72 6e  rans[i].zPattern
a920: 2c 20 7a 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  , z, n)==0 ){.  
a930: 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
a940: 66 28 6f 75 74 2c 20 22 25 2d 33 36 73 20 25 73  f(out, "%-36s %s
a950: 22 2c 20 61 54 72 61 6e 73 5b 69 5d 2e 7a 44 65  ", aTrans[i].zDe
a960: 73 63 2c 20 26 7a 5b 6e 5d 29 3b 0a 20 20 20 20  sc, &z[n]);.    
a970: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
a980: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66   }.    }.  }.  f
a990: 63 6c 6f 73 65 28 69 6e 29 3b 0a 7d 0a 23 65 6e  close(in);.}.#en
a9a0: 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 70  dif.../*.** Disp
a9b0: 6c 61 79 20 6d 65 6d 6f 72 79 20 73 74 61 74 73  lay memory stats
a9c0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
a9d0: 64 69 73 70 6c 61 79 5f 73 74 61 74 73 28 0a 20  display_stats(. 
a9e0: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20   sqlite3 *db,   
a9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aa00: 44 61 74 61 62 61 73 65 20 74 6f 20 71 75 65 72  Database to quer
aa10: 79 20 2a 2f 0a 20 20 53 68 65 6c 6c 53 74 61 74  y */.  ShellStat
aa20: 65 20 2a 70 41 72 67 2c 20 20 20 20 20 20 20 20  e *pArg,        
aa30: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
aa40: 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 2f 0a 20   ShellState */. 
aa50: 20 69 6e 74 20 62 52 65 73 65 74 20 20 20 20 20   int bReset     
aa60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aa70: 54 72 75 65 20 74 6f 20 72 65 73 65 74 20 74 68  True to reset th
aa80: 65 20 73 74 61 74 73 20 2a 2f 0a 29 7b 0a 20 20  e stats */.){.  
aa90: 69 6e 74 20 69 43 75 72 3b 0a 20 20 69 6e 74 20  int iCur;.  int 
aaa0: 69 48 69 77 74 72 3b 0a 0a 20 20 69 66 28 20 70  iHiwtr;..  if( p
aab0: 41 72 67 20 26 26 20 70 41 72 67 2d 3e 6f 75 74  Arg && pArg->out
aac0: 20 29 7b 0a 0a 20 20 20 20 69 48 69 77 74 72 20   ){..    iHiwtr 
aad0: 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20  = iCur = -1;.   
aae0: 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28   sqlite3_status(
aaf0: 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 4d 45  SQLITE_STATUS_ME
ab00: 4d 4f 52 59 5f 55 53 45 44 2c 20 26 69 43 75 72  MORY_USED, &iCur
ab10: 2c 20 26 69 48 69 77 74 72 2c 20 62 52 65 73 65  , &iHiwtr, bRese
ab20: 74 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e  t);.    raw_prin
ab30: 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 0a 20 20  tf(pArg->out,.  
ab40: 20 20 20 20 20 20 20 20 20 20 22 4d 65 6d 6f 72            "Memor
ab50: 79 20 55 73 65 64 3a 20 20 20 20 20 20 20 20 20  y Used:         
ab60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab70: 25 64 20 28 6d 61 78 20 25 64 29 20 62 79 74 65  %d (max %d) byte
ab80: 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  s\n",.          
ab90: 20 20 69 43 75 72 2c 20 69 48 69 77 74 72 29 3b    iCur, iHiwtr);
aba0: 0a 20 20 20 20 69 48 69 77 74 72 20 3d 20 69 43  .    iHiwtr = iC
abb0: 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c  ur = -1;.    sql
abc0: 69 74 65 33 5f 73 74 61 74 75 73 28 53 51 4c 49  ite3_status(SQLI
abd0: 54 45 5f 53 54 41 54 55 53 5f 4d 41 4c 4c 4f 43  TE_STATUS_MALLOC
abe0: 5f 43 4f 55 4e 54 2c 20 26 69 43 75 72 2c 20 26  _COUNT, &iCur, &
abf0: 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b  iHiwtr, bReset);
ac00: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
ac10: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4e 75 6d 62  pArg->out, "Numb
ac20: 65 72 20 6f 66 20 4f 75 74 73 74 61 6e 64 69 6e  er of Outstandin
ac30: 67 20 41 6c 6c 6f 63 61 74 69 6f 6e 73 3a 20 20  g Allocations:  
ac40: 20 25 64 20 28 6d 61 78 20 25 64 29 5c 6e 22 2c   %d (max %d)\n",
ac50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 43 75  .            iCu
ac60: 72 2c 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20  r, iHiwtr);.    
ac70: 69 66 28 20 70 41 72 67 2d 3e 73 68 65 6c 6c 46  if( pArg->shellF
ac80: 6c 67 73 20 26 20 53 48 46 4c 47 5f 50 61 67 65  lgs & SHFLG_Page
ac90: 63 61 63 68 65 20 29 7b 0a 20 20 20 20 20 20 69  cache ){.      i
aca0: 48 69 77 74 72 20 3d 20 69 43 75 72 20 3d 20 2d  Hiwtr = iCur = -
acb0: 31 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  1;.      sqlite3
acc0: 5f 73 74 61 74 75 73 28 53 51 4c 49 54 45 5f 53  _status(SQLITE_S
acd0: 54 41 54 55 53 5f 50 41 47 45 43 41 43 48 45 5f  TATUS_PAGECACHE_
ace0: 55 53 45 44 2c 20 26 69 43 75 72 2c 20 26 69 48  USED, &iCur, &iH
acf0: 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20  iwtr, bReset);. 
ad00: 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
ad10: 70 41 72 67 2d 3e 6f 75 74 2c 0a 20 20 20 20 20  pArg->out,.     
ad20: 20 20 20 20 20 20 20 20 20 22 4e 75 6d 62 65 72           "Number
ad30: 20 6f 66 20 50 63 61 63 68 65 20 50 61 67 65 73   of Pcache Pages
ad40: 20 55 73 65 64 3a 20 20 20 20 20 20 20 20 20 25   Used:         %
ad50: 64 20 28 6d 61 78 20 25 64 29 20 70 61 67 65 73  d (max %d) pages
ad60: 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
ad70: 20 20 20 69 43 75 72 2c 20 69 48 69 77 74 72 29     iCur, iHiwtr)
ad80: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 48 69 77  ;.    }.    iHiw
ad90: 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a  tr = iCur = -1;.
ada0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 61 74      sqlite3_stat
adb0: 75 73 28 53 51 4c 49 54 45 5f 53 54 41 54 55 53  us(SQLITE_STATUS
adc0: 5f 50 41 47 45 43 41 43 48 45 5f 4f 56 45 52 46  _PAGECACHE_OVERF
add0: 4c 4f 57 2c 20 26 69 43 75 72 2c 20 26 69 48 69  LOW, &iCur, &iHi
ade0: 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20  wtr, bReset);.  
adf0: 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72    raw_printf(pAr
ae00: 67 2d 3e 6f 75 74 2c 0a 20 20 20 20 20 20 20 20  g->out,.        
ae10: 20 20 20 20 22 4e 75 6d 62 65 72 20 6f 66 20 50      "Number of P
ae20: 63 61 63 68 65 20 4f 76 65 72 66 6c 6f 77 20 42  cache Overflow B
ae30: 79 74 65 73 3a 20 20 20 20 20 25 64 20 28 6d 61  ytes:     %d (ma
ae40: 78 20 25 64 29 20 62 79 74 65 73 5c 6e 22 2c 0a  x %d) bytes\n",.
ae50: 20 20 20 20 20 20 20 20 20 20 20 20 69 43 75 72              iCur
ae60: 2c 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20 69  , iHiwtr);.    i
ae70: 66 28 20 70 41 72 67 2d 3e 73 68 65 6c 6c 46 6c  f( pArg->shellFl
ae80: 67 73 20 26 20 53 48 46 4c 47 5f 53 63 72 61 74  gs & SHFLG_Scrat
ae90: 63 68 20 29 7b 0a 20 20 20 20 20 20 69 48 69 77  ch ){.      iHiw
aea0: 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a  tr = iCur = -1;.
aeb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74        sqlite3_st
aec0: 61 74 75 73 28 53 51 4c 49 54 45 5f 53 54 41 54  atus(SQLITE_STAT
aed0: 55 53 5f 53 43 52 41 54 43 48 5f 55 53 45 44 2c  US_SCRATCH_USED,
aee0: 20 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c   &iCur, &iHiwtr,
aef0: 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20 20 20   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 0a 20 20 20 20 20 20 20 20 20 20  >out,.          
af20: 20 20 20 20 22 4e 75 6d 62 65 72 20 6f 66 20 53      "Number of S
af30: 63 72 61 74 63 68 20 41 6c 6c 6f 63 61 74 69 6f  cratch Allocatio
af40: 6e 73 20 55 73 65 64 3a 20 20 25 64 20 28 6d 61  ns Used:  %d (ma
af50: 78 20 25 64 29 5c 6e 22 2c 0a 20 20 20 20 20 20  x %d)\n",.      
af60: 20 20 20 20 20 20 20 20 69 43 75 72 2c 20 69 48          iCur, iH
af70: 69 77 74 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  iwtr);.    }.   
af80: 20 69 48 69 77 74 72 20 3d 20 69 43 75 72 20 3d   iHiwtr = iCur =
af90: 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   -1;.    sqlite3
afa0: 5f 73 74 61 74 75 73 28 53 51 4c 49 54 45 5f 53  _status(SQLITE_S
afb0: 54 41 54 55 53 5f 53 43 52 41 54 43 48 5f 4f 56  TATUS_SCRATCH_OV
afc0: 45 52 46 4c 4f 57 2c 20 26 69 43 75 72 2c 20 26  ERFLOW, &iCur, &
afd0: 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b  iHiwtr, bReset);
afe0: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
aff0: 70 41 72 67 2d 3e 6f 75 74 2c 0a 20 20 20 20 20  pArg->out,.     
b000: 20 20 20 20 20 20 20 22 4e 75 6d 62 65 72 20 6f         "Number o
b010: 66 20 53 63 72 61 74 63 68 20 4f 76 65 72 66 6c  f Scratch Overfl
b020: 6f 77 20 42 79 74 65 73 3a 20 20 20 20 25 64 20  ow Bytes:    %d 
b030: 28 6d 61 78 20 25 64 29 20 62 79 74 65 73 5c 6e  (max %d) bytes\n
b040: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ",.            i
b050: 43 75 72 2c 20 69 48 69 77 74 72 29 3b 0a 20 20  Cur, iHiwtr);.  
b060: 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72 20    iHiwtr = iCur 
b070: 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65  = -1;.    sqlite
b080: 33 5f 73 74 61 74 75 73 28 53 51 4c 49 54 45 5f  3_status(SQLITE_
b090: 53 54 41 54 55 53 5f 4d 41 4c 4c 4f 43 5f 53 49  STATUS_MALLOC_SI
b0a0: 5a 45 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77  ZE, &iCur, &iHiw
b0b0: 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20  tr, bReset);.   
b0c0: 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67   raw_printf(pArg
b0d0: 2d 3e 6f 75 74 2c 20 22 4c 61 72 67 65 73 74 20  ->out, "Largest 
b0e0: 41 6c 6c 6f 63 61 74 69 6f 6e 3a 20 20 20 20 20  Allocation:     
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 25 64 20               %d 
b100: 62 79 74 65 73 5c 6e 22 2c 0a 20 20 20 20 20 20  bytes\n",.      
b110: 20 20 20 20 20 20 69 48 69 77 74 72 29 3b 0a 20        iHiwtr);. 
b120: 20 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72     iHiwtr = iCur
b130: 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74   = -1;.    sqlit
b140: 65 33 5f 73 74 61 74 75 73 28 53 51 4c 49 54 45  e3_status(SQLITE
b150: 5f 53 54 41 54 55 53 5f 50 41 47 45 43 41 43 48  _STATUS_PAGECACH
b160: 45 5f 53 49 5a 45 2c 20 26 69 43 75 72 2c 20 26  E_SIZE, &iCur, &
b170: 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b  iHiwtr, bReset);
b180: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
b190: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4c 61 72 67  pArg->out, "Larg
b1a0: 65 73 74 20 50 63 61 63 68 65 20 41 6c 6c 6f 63  est Pcache Alloc
b1b0: 61 74 69 6f 6e 3a 20 20 20 20 20 20 20 20 20 20  ation:          
b1c0: 20 25 64 20 62 79 74 65 73 5c 6e 22 2c 0a 20 20   %d bytes\n",.  
b1d0: 20 20 20 20 20 20 20 20 20 20 69 48 69 77 74 72            iHiwtr
b1e0: 29 3b 0a 20 20 20 20 69 48 69 77 74 72 20 3d 20  );.    iHiwtr = 
b1f0: 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73  iCur = -1;.    s
b200: 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 53 51  qlite3_status(SQ
b210: 4c 49 54 45 5f 53 54 41 54 55 53 5f 53 43 52 41  LITE_STATUS_SCRA
b220: 54 43 48 5f 53 49 5a 45 2c 20 26 69 43 75 72 2c  TCH_SIZE, &iCur,
b230: 20 26 69 48 69 77 74 72 2c 20 62 52 65 73 65 74   &iHiwtr, bReset
b240: 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74  );.    raw_print
b250: 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 4c 61  f(pArg->out, "La
b260: 72 67 65 73 74 20 53 63 72 61 74 63 68 20 41 6c  rgest Scratch Al
b270: 6c 6f 63 61 74 69 6f 6e 3a 20 20 20 20 20 20 20  location:       
b280: 20 20 20 25 64 20 62 79 74 65 73 5c 6e 22 2c 0a     %d bytes\n",.
b290: 20 20 20 20 20 20 20 20 20 20 20 20 69 48 69 77              iHiw
b2a0: 74 72 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52  tr);.#ifdef YYTR
b2b0: 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48  ACKMAXSTACKDEPTH
b2c0: 0a 20 20 20 20 69 48 69 77 74 72 20 3d 20 69 43  .    iHiwtr = iC
b2d0: 75 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c  ur = -1;.    sql
b2e0: 69 74 65 33 5f 73 74 61 74 75 73 28 53 51 4c 49  ite3_status(SQLI
b2f0: 54 45 5f 53 54 41 54 55 53 5f 50 41 52 53 45 52  TE_STATUS_PARSER
b300: 5f 53 54 41 43 4b 2c 20 26 69 43 75 72 2c 20 26  _STACK, &iCur, &
b310: 69 48 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b  iHiwtr, bReset);
b320: 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
b330: 70 41 72 67 2d 3e 6f 75 74 2c 20 22 44 65 65 70  pArg->out, "Deep
b340: 65 73 74 20 50 61 72 73 65 72 20 53 74 61 63 6b  est Parser Stack
b350: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
b360: 20 25 64 20 28 6d 61 78 20 25 64 29 5c 6e 22 2c   %d (max %d)\n",
b370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 43 75  .            iCu
b380: 72 2c 20 69 48 69 77 74 72 29 3b 0a 23 65 6e 64  r, iHiwtr);.#end
b390: 69 66 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 41  if.  }..  if( pA
b3a0: 72 67 20 26 26 20 70 41 72 67 2d 3e 6f 75 74 20  rg && pArg->out 
b3b0: 26 26 20 64 62 20 29 7b 0a 20 20 20 20 69 66 28  && db ){.    if(
b3c0: 20 70 41 72 67 2d 3e 73 68 65 6c 6c 46 6c 67 73   pArg->shellFlgs
b3d0: 20 26 20 53 48 46 4c 47 5f 4c 6f 6f 6b 61 73 69   & SHFLG_Lookasi
b3e0: 64 65 20 29 7b 0a 20 20 20 20 20 20 69 48 69 77  de ){.      iHiw
b3f0: 74 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a  tr = iCur = -1;.
b400: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62        sqlite3_db
b410: 5f 73 74 61 74 75 73 28 64 62 2c 20 53 51 4c 49  _status(db, SQLI
b420: 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b  TE_DBSTATUS_LOOK
b430: 41 53 49 44 45 5f 55 53 45 44 2c 0a 20 20 20 20  ASIDE_USED,.    
b440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b450: 20 20 20 20 26 69 43 75 72 2c 20 26 69 48 69 77      &iCur, &iHiw
b460: 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20 20 20  tr, bReset);.   
b470: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41     raw_printf(pA
b480: 72 67 2d 3e 6f 75 74 2c 0a 20 20 20 20 20 20 20  rg->out,.       
b490: 20 20 20 20 20 20 20 22 4c 6f 6f 6b 61 73 69 64         "Lookasid
b4a0: 65 20 53 6c 6f 74 73 20 55 73 65 64 3a 20 20 20  e Slots Used:   
b4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 25 64 20               %d 
b4c0: 28 6d 61 78 20 25 64 29 5c 6e 22 2c 0a 20 20 20  (max %d)\n",.   
b4d0: 20 20 20 20 20 20 20 20 20 20 20 69 43 75 72 2c             iCur,
b4e0: 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20 20 20   iHiwtr);.      
b4f0: 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75  sqlite3_db_statu
b500: 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53  s(db, SQLITE_DBS
b510: 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f  TATUS_LOOKASIDE_
b520: 48 49 54 2c 0a 20 20 20 20 20 20 20 20 20 20 20  HIT,.           
b530: 20 20 20 20 20 20 20 20 20 20 20 20 20 26 69 43               &iC
b540: 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52 65  ur, &iHiwtr, bRe
b550: 73 65 74 29 3b 0a 20 20 20 20 20 20 72 61 77 5f  set);.      raw_
b560: 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74  printf(pArg->out
b570: 2c 20 22 53 75 63 63 65 73 73 66 75 6c 20 6c 6f  , "Successful lo
b580: 6f 6b 61 73 69 64 65 20 61 74 74 65 6d 70 74 73  okaside attempts
b590: 3a 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 0a 20  :       %d\n",. 
b5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 48 69               iHi
b5b0: 77 74 72 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  wtr);.      sqli
b5c0: 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62  te3_db_status(db
b5d0: 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55  , SQLITE_DBSTATU
b5e0: 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49 53 53  S_LOOKASIDE_MISS
b5f0: 5f 53 49 5a 45 2c 0a 20 20 20 20 20 20 20 20 20  _SIZE,.         
b600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26                 &
b610: 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62  iCur, &iHiwtr, b
b620: 52 65 73 65 74 29 3b 0a 20 20 20 20 20 20 72 61  Reset);.      ra
b630: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
b640: 75 74 2c 20 22 4c 6f 6f 6b 61 73 69 64 65 20 66  ut, "Lookaside f
b650: 61 69 6c 75 72 65 73 20 64 75 65 20 74 6f 20 73  ailures due to s
b660: 69 7a 65 3a 20 20 20 20 20 20 25 64 5c 6e 22 2c  ize:      %d\n",
b670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
b680: 48 69 77 74 72 29 3b 0a 20 20 20 20 20 20 73 71  Hiwtr);.      sq
b690: 6c 69 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28  lite3_db_status(
b6a0: 64 62 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41  db, SQLITE_DBSTA
b6b0: 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49  TUS_LOOKASIDE_MI
b6c0: 53 53 5f 46 55 4c 4c 2c 0a 20 20 20 20 20 20 20  SS_FULL,.       
b6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6e0: 20 26 69 43 75 72 2c 20 26 69 48 69 77 74 72 2c   &iCur, &iHiwtr,
b6f0: 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20 20 20   bReset);.      
b700: 72 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  raw_printf(pArg-
b710: 3e 6f 75 74 2c 20 22 4c 6f 6f 6b 61 73 69 64 65  >out, "Lookaside
b720: 20 66 61 69 6c 75 72 65 73 20 64 75 65 20 74 6f   failures due to
b730: 20 4f 4f 4d 3a 20 20 20 20 20 20 20 25 64 5c 6e   OOM:       %d\n
b740: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
b750: 20 69 48 69 77 74 72 29 3b 0a 20 20 20 20 7d 0a   iHiwtr);.    }.
b760: 20 20 20 20 69 48 69 77 74 72 20 3d 20 69 43 75      iHiwtr = iCu
b770: 72 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69  r = -1;.    sqli
b780: 74 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62  te3_db_status(db
b790: 2c 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55  , SQLITE_DBSTATU
b7a0: 53 5f 43 41 43 48 45 5f 55 53 45 44 2c 20 26 69  S_CACHE_USED, &i
b7b0: 43 75 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52  Cur, &iHiwtr, bR
b7c0: 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70  eset);.    raw_p
b7d0: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
b7e0: 20 22 50 61 67 65 72 20 48 65 61 70 20 55 73 61   "Pager Heap Usa
b7f0: 67 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ge:             
b800: 20 20 20 20 20 20 20 25 64 20 62 79 74 65 73 5c         %d bytes\
b810: 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n",.            
b820: 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69 77 74  iCur);.    iHiwt
b830: 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20  r = iCur = -1;. 
b840: 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74     sqlite3_db_st
b850: 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f  atus(db, SQLITE_
b860: 44 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f 48  DBSTATUS_CACHE_H
b870: 49 54 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77  IT, &iCur, &iHiw
b880: 74 72 2c 20 31 29 3b 0a 20 20 20 20 72 61 77 5f  tr, 1);.    raw_
b890: 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74  printf(pArg->out
b8a0: 2c 20 22 50 61 67 65 20 63 61 63 68 65 20 68 69  , "Page cache hi
b8b0: 74 73 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ts:             
b8c0: 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69          %d\n", i
b8d0: 43 75 72 29 3b 0a 20 20 20 20 69 48 69 77 74 72  Cur);.    iHiwtr
b8e0: 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20   = iCur = -1;.  
b8f0: 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61    sqlite3_db_sta
b900: 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44  tus(db, SQLITE_D
b910: 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f 4d 49  BSTATUS_CACHE_MI
b920: 53 53 2c 20 26 69 43 75 72 2c 20 26 69 48 69 77  SS, &iCur, &iHiw
b930: 74 72 2c 20 31 29 3b 0a 20 20 20 20 72 61 77 5f  tr, 1);.    raw_
b940: 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74  printf(pArg->out
b950: 2c 20 22 50 61 67 65 20 63 61 63 68 65 20 6d 69  , "Page cache mi
b960: 73 73 65 73 3a 20 20 20 20 20 20 20 20 20 20 20  sses:           
b970: 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69          %d\n", i
b980: 43 75 72 29 3b 0a 20 20 20 20 69 48 69 77 74 72  Cur);.    iHiwtr
b990: 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20 20   = iCur = -1;.  
b9a0: 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74 61    sqlite3_db_sta
b9b0: 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f 44  tus(db, SQLITE_D
b9c0: 42 53 54 41 54 55 53 5f 43 41 43 48 45 5f 57 52  BSTATUS_CACHE_WR
b9d0: 49 54 45 2c 20 26 69 43 75 72 2c 20 26 69 48 69  ITE, &iCur, &iHi
b9e0: 77 74 72 2c 20 31 29 3b 0a 20 20 20 20 72 61 77  wtr, 1);.    raw
b9f0: 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
ba00: 74 2c 20 22 50 61 67 65 20 63 61 63 68 65 20 77  t, "Page cache w
ba10: 72 69 74 65 73 3a 20 20 20 20 20 20 20 20 20 20  rites:          
ba20: 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20           %d\n", 
ba30: 69 43 75 72 29 3b 0a 20 20 20 20 69 48 69 77 74  iCur);.    iHiwt
ba40: 72 20 3d 20 69 43 75 72 20 3d 20 2d 31 3b 0a 20  r = iCur = -1;. 
ba50: 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 73 74     sqlite3_db_st
ba60: 61 74 75 73 28 64 62 2c 20 53 51 4c 49 54 45 5f  atus(db, SQLITE_
ba70: 44 42 53 54 41 54 55 53 5f 53 43 48 45 4d 41 5f  DBSTATUS_SCHEMA_
ba80: 55 53 45 44 2c 20 26 69 43 75 72 2c 20 26 69 48  USED, &iCur, &iH
ba90: 69 77 74 72 2c 20 62 52 65 73 65 74 29 3b 0a 20  iwtr, bReset);. 
baa0: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41     raw_printf(pA
bab0: 72 67 2d 3e 6f 75 74 2c 20 22 53 63 68 65 6d 61  rg->out, "Schema
bac0: 20 48 65 61 70 20 55 73 61 67 65 3a 20 20 20 20   Heap Usage:    
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25                 %
bae0: 64 20 62 79 74 65 73 5c 6e 22 2c 0a 20 20 20 20  d bytes\n",.    
baf0: 20 20 20 20 20 20 20 20 69 43 75 72 29 3b 0a 20          iCur);. 
bb00: 20 20 20 69 48 69 77 74 72 20 3d 20 69 43 75 72     iHiwtr = iCur
bb10: 20 3d 20 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74   = -1;.    sqlit
bb20: 65 33 5f 64 62 5f 73 74 61 74 75 73 28 64 62 2c  e3_db_status(db,
bb30: 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53   SQLITE_DBSTATUS
bb40: 5f 53 54 4d 54 5f 55 53 45 44 2c 20 26 69 43 75  _STMT_USED, &iCu
bb50: 72 2c 20 26 69 48 69 77 74 72 2c 20 62 52 65 73  r, &iHiwtr, bRes
bb60: 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69  et);.    raw_pri
bb70: 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22  ntf(pArg->out, "
bb80: 53 74 61 74 65 6d 65 6e 74 20 48 65 61 70 2f 4c  Statement Heap/L
bb90: 6f 6f 6b 61 73 69 64 65 20 55 73 61 67 65 3a 20  ookaside Usage: 
bba0: 20 20 20 20 20 25 64 20 62 79 74 65 73 5c 6e 22       %d bytes\n"
bbb0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 43  ,.            iC
bbc0: 75 72 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ur);.  }..  if( 
bbd0: 70 41 72 67 20 26 26 20 70 41 72 67 2d 3e 6f 75  pArg && pArg->ou
bbe0: 74 20 26 26 20 64 62 20 26 26 20 70 41 72 67 2d  t && db && pArg-
bbf0: 3e 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 69 43  >pStmt ){.    iC
bc00: 75 72 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d  ur = sqlite3_stm
bc10: 74 5f 73 74 61 74 75 73 28 70 41 72 67 2d 3e 70  t_status(pArg->p
bc20: 53 74 6d 74 2c 20 53 51 4c 49 54 45 5f 53 54 4d  Stmt, SQLITE_STM
bc30: 54 53 54 41 54 55 53 5f 46 55 4c 4c 53 43 41 4e  TSTATUS_FULLSCAN
bc40: 5f 53 54 45 50 2c 0a 20 20 20 20 20 20 20 20 20  _STEP,.         
bc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc60: 20 20 20 20 20 20 62 52 65 73 65 74 29 3b 0a 20        bReset);. 
bc70: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41     raw_printf(pA
bc80: 72 67 2d 3e 6f 75 74 2c 20 22 46 75 6c 6c 73 63  rg->out, "Fullsc
bc90: 61 6e 20 53 74 65 70 73 3a 20 20 20 20 20 20 20  an Steps:       
bca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25                 %
bcb0: 64 5c 6e 22 2c 20 69 43 75 72 29 3b 0a 20 20 20  d\n", iCur);.   
bcc0: 20 69 43 75 72 20 3d 20 73 71 6c 69 74 65 33 5f   iCur = sqlite3_
bcd0: 73 74 6d 74 5f 73 74 61 74 75 73 28 70 41 72 67  stmt_status(pArg
bce0: 2d 3e 70 53 74 6d 74 2c 20 53 51 4c 49 54 45 5f  ->pStmt, SQLITE_
bcf0: 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 2c  STMTSTATUS_SORT,
bd00: 20 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61   bReset);.    ra
bd10: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
bd20: 75 74 2c 20 22 53 6f 72 74 20 4f 70 65 72 61 74  ut, "Sort Operat
bd30: 69 6f 6e 73 3a 20 20 20 20 20 20 20 20 20 20 20  ions:           
bd40: 20 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c            %d\n",
bd50: 20 69 43 75 72 29 3b 0a 20 20 20 20 69 43 75 72   iCur);.    iCur
bd60: 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f   = sqlite3_stmt_
bd70: 73 74 61 74 75 73 28 70 41 72 67 2d 3e 70 53 74  status(pArg->pSt
bd80: 6d 74 2c 20 53 51 4c 49 54 45 5f 53 54 4d 54 53  mt, SQLITE_STMTS
bd90: 54 41 54 55 53 5f 41 55 54 4f 49 4e 44 45 58 2c  TATUS_AUTOINDEX,
bda0: 62 52 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77  bReset);.    raw
bdb0: 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75  _printf(pArg->ou
bdc0: 74 2c 20 22 41 75 74 6f 69 6e 64 65 78 20 49 6e  t, "Autoindex In
bdd0: 73 65 72 74 73 3a 20 20 20 20 20 20 20 20 20 20  serts:          
bde0: 20 20 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20           %d\n", 
bdf0: 69 43 75 72 29 3b 0a 20 20 20 20 69 43 75 72 20  iCur);.    iCur 
be00: 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73  = sqlite3_stmt_s
be10: 74 61 74 75 73 28 70 41 72 67 2d 3e 70 53 74 6d  tatus(pArg->pStm
be20: 74 2c 20 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  t, SQLITE_STMTST
be30: 41 54 55 53 5f 56 4d 5f 53 54 45 50 2c 20 62 52  ATUS_VM_STEP, bR
be40: 65 73 65 74 29 3b 0a 20 20 20 20 72 61 77 5f 70  eset);.    raw_p
be50: 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c  rintf(pArg->out,
be60: 20 22 56 69 72 74 75 61 6c 20 4d 61 63 68 69 6e   "Virtual Machin
be70: 65 20 53 74 65 70 73 3a 20 20 20 20 20 20 20 20  e Steps:        
be80: 20 20 20 20 20 20 20 25 64 5c 6e 22 2c 20 69 43         %d\n", iC
be90: 75 72 29 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66  ur);.  }..#ifdef
bea0: 20 5f 5f 6c 69 6e 75 78 5f 5f 0a 20 20 64 69 73   __linux__.  dis
beb0: 70 6c 61 79 4c 69 6e 75 78 49 6f 53 74 61 74 73  playLinuxIoStats
bec0: 28 70 41 72 67 2d 3e 6f 75 74 29 3b 0a 23 65 6e  (pArg->out);.#en
bed0: 64 69 66 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74  dif..  /* Do not
bee0: 20 72 65 6d 6f 76 65 20 74 68 69 73 20 6d 61 63   remove this mac
bef0: 68 69 6e 65 20 72 65 61 64 61 62 6c 65 20 63 6f  hine readable co
bf00: 6d 6d 65 6e 74 3a 20 65 78 74 72 61 2d 73 74 61  mment: extra-sta
bf10: 74 73 2d 6f 75 74 70 75 74 2d 68 65 72 65 20 2a  ts-output-here *
bf20: 2f 0a 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d  /..  return 0;.}
bf30: 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 70 6c 61 79 20  ../*.** Display 
bf40: 73 63 61 6e 20 73 74 61 74 73 2e 0a 2a 2f 0a 73  scan stats..*/.s
bf50: 74 61 74 69 63 20 76 6f 69 64 20 64 69 73 70 6c  tatic void displ
bf60: 61 79 5f 73 63 61 6e 73 74 61 74 73 28 0a 20 20  ay_scanstats(.  
bf70: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20  sqlite3 *db,    
bf80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf90: 2f 2a 20 44 61 74 61 62 61 73 65 20 74 6f 20 71  /* Database to q
bfa0: 75 65 72 79 20 2a 2f 0a 20 20 53 68 65 6c 6c 53  uery */.  ShellS
bfb0: 74 61 74 65 20 2a 70 41 72 67 20 20 20 20 20 20  tate *pArg      
bfc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
bfd0: 6e 74 65 72 20 74 6f 20 53 68 65 6c 6c 53 74 61  nter to ShellSta
bfe0: 74 65 20 2a 2f 0a 29 7b 0a 23 69 66 6e 64 65 66  te */.){.#ifndef
bff0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
c000: 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20  TMT_SCANSTATUS. 
c010: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
c020: 52 28 64 62 29 3b 0a 20 20 55 4e 55 53 45 44 5f  R(db);.  UNUSED_
c030: 50 41 52 41 4d 45 54 45 52 28 70 41 72 67 29 3b  PARAMETER(pArg);
c040: 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 69 2c 20  .#else.  int i, 
c050: 6b 2c 20 6e 2c 20 6d 78 3b 0a 20 20 72 61 77 5f  k, n, mx;.  raw_
c060: 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74  printf(pArg->out
c070: 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 20 73 63 61 6e  , "-------- scan
c080: 73 74 61 74 73 20 2d 2d 2d 2d 2d 2d 2d 2d 5c 6e  stats --------\n
c090: 22 29 3b 0a 20 20 6d 78 20 3d 20 30 3b 0a 20 20  ");.  mx = 0;.  
c0a0: 66 6f 72 28 6b 3d 30 3b 20 6b 3c 3d 6d 78 3b 20  for(k=0; k<=mx; 
c0b0: 6b 2b 2b 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65  k++){.    double
c0c0: 20 72 45 73 74 4c 6f 6f 70 20 3d 20 31 2e 30 3b   rEstLoop = 1.0;
c0d0: 0a 20 20 20 20 66 6f 72 28 69 3d 6e 3d 30 3b 20  .    for(i=n=0; 
c0e0: 31 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73  1; i++){.      s
c0f0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 20 3d  qlite3_stmt *p =
c100: 20 70 41 72 67 2d 3e 70 53 74 6d 74 3b 0a 20 20   pArg->pStmt;.  
c110: 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36      sqlite3_int6
c120: 34 20 6e 4c 6f 6f 70 2c 20 6e 56 69 73 69 74 3b  4 nLoop, nVisit;
c130: 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20 72 45  .      double rE
c140: 73 74 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 53  st;.      int iS
c150: 69 64 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  id;.      const 
c160: 63 68 61 72 20 2a 7a 45 78 70 6c 61 69 6e 3b 0a  char *zExplain;.
c170: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
c180: 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74 75  3_stmt_scanstatu
c190: 73 28 70 2c 20 69 2c 20 53 51 4c 49 54 45 5f 53  s(p, i, SQLITE_S
c1a0: 43 41 4e 53 54 41 54 5f 4e 4c 4f 4f 50 2c 20 28  CANSTAT_NLOOP, (
c1b0: 76 6f 69 64 2a 29 26 6e 4c 6f 6f 70 29 20 29 7b  void*)&nLoop) ){
c1c0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
c1d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
c1e0: 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73  lite3_stmt_scans
c1f0: 74 61 74 75 73 28 70 2c 20 69 2c 20 53 51 4c 49  tatus(p, i, SQLI
c200: 54 45 5f 53 43 41 4e 53 54 41 54 5f 53 45 4c 45  TE_SCANSTAT_SELE
c210: 43 54 49 44 2c 20 28 76 6f 69 64 2a 29 26 69 53  CTID, (void*)&iS
c220: 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69  id);.      if( i
c230: 53 69 64 3e 6d 78 20 29 20 6d 78 20 3d 20 69 53  Sid>mx ) mx = iS
c240: 69 64 3b 0a 20 20 20 20 20 20 69 66 28 20 69 53  id;.      if( iS
c250: 69 64 21 3d 6b 20 29 20 63 6f 6e 74 69 6e 75 65  id!=k ) continue
c260: 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 3d 3d 30  ;.      if( n==0
c270: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 45 73 74   ){.        rEst
c280: 4c 6f 6f 70 20 3d 20 28 64 6f 75 62 6c 65 29 6e  Loop = (double)n
c290: 4c 6f 6f 70 3b 0a 20 20 20 20 20 20 20 20 69 66  Loop;.        if
c2a0: 28 20 6b 3e 30 20 29 20 72 61 77 5f 70 72 69 6e  ( k>0 ) raw_prin
c2b0: 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 20 22 2d  tf(pArg->out, "-
c2c0: 2d 2d 2d 2d 2d 2d 2d 20 73 75 62 71 75 65 72 79  ------- subquery
c2d0: 20 25 64 20 2d 2d 2d 2d 2d 2d 2d 5c 6e 22 2c 20   %d -------\n", 
c2e0: 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k);.      }.    
c2f0: 20 20 6e 2b 2b 3b 0a 20 20 20 20 20 20 73 71 6c    n++;.      sql
c300: 69 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74  ite3_stmt_scanst
c310: 61 74 75 73 28 70 2c 20 69 2c 20 53 51 4c 49 54  atus(p, i, SQLIT
c320: 45 5f 53 43 41 4e 53 54 41 54 5f 4e 56 49 53 49  E_SCANSTAT_NVISI
c330: 54 2c 20 28 76 6f 69 64 2a 29 26 6e 56 69 73 69  T, (void*)&nVisi
c340: 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  t);.      sqlite
c350: 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74 75  3_stmt_scanstatu
c360: 73 28 70 2c 20 69 2c 20 53 51 4c 49 54 45 5f 53  s(p, i, SQLITE_S
c370: 43 41 4e 53 54 41 54 5f 45 53 54 2c 20 28 76 6f  CANSTAT_EST, (vo
c380: 69 64 2a 29 26 72 45 73 74 29 3b 0a 20 20 20 20  id*)&rEst);.    
c390: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73    sqlite3_stmt_s
c3a0: 63 61 6e 73 74 61 74 75 73 28 70 2c 20 69 2c 20  canstatus(p, i, 
c3b0: 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41 54 5f  SQLITE_SCANSTAT_
c3c0: 45 58 50 4c 41 49 4e 2c 20 28 76 6f 69 64 2a 29  EXPLAIN, (void*)
c3d0: 26 7a 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20 20  &zExplain);.    
c3e0: 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 41    utf8_printf(pA
c3f0: 72 67 2d 3e 6f 75 74 2c 20 22 4c 6f 6f 70 20 25  rg->out, "Loop %
c400: 32 64 3a 20 25 73 5c 6e 22 2c 20 6e 2c 20 7a 45  2d: %s\n", n, zE
c410: 78 70 6c 61 69 6e 29 3b 0a 20 20 20 20 20 20 72  xplain);.      r
c420: 45 73 74 4c 6f 6f 70 20 2a 3d 20 72 45 73 74 3b  EstLoop *= rEst;
c430: 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
c440: 66 28 70 41 72 67 2d 3e 6f 75 74 2c 0a 20 20 20  f(pArg->out,.   
c450: 20 20 20 20 20 20 20 22 20 20 20 20 20 20 20 20         "        
c460: 20 6e 4c 6f 6f 70 3d 25 2d 38 6c 6c 64 20 6e 52   nLoop=%-8lld nR
c470: 6f 77 3d 25 2d 38 6c 6c 64 20 65 73 74 52 6f 77  ow=%-8lld estRow
c480: 3d 25 2d 38 6c 6c 64 20 65 73 74 52 6f 77 2f 4c  =%-8lld estRow/L
c490: 6f 6f 70 3d 25 2d 38 67 5c 6e 22 2c 0a 20 20 20  oop=%-8g\n",.   
c4a0: 20 20 20 20 20 20 20 6e 4c 6f 6f 70 2c 20 6e 56         nLoop, nV
c4b0: 69 73 69 74 2c 20 28 73 71 6c 69 74 65 33 5f 69  isit, (sqlite3_i
c4c0: 6e 74 36 34 29 28 72 45 73 74 4c 6f 6f 70 2b 30  nt64)(rEstLoop+0
c4d0: 2e 35 29 2c 20 72 45 73 74 0a 20 20 20 20 20 20  .5), rEst.      
c4e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  );.    }.  }.  r
c4f0: 61 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e  aw_printf(pArg->
c500: 6f 75 74 2c 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  out, "----------
c510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
c520: 2d 5c 6e 22 29 3b 0a 23 65 6e 64 69 66 0a 7d 0a  -\n");.#endif.}.
c530: 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72  ./*.** Parameter
c540: 20 61 7a 41 72 72 61 79 20 70 6f 69 6e 74 73 20   azArray points 
c550: 74 6f 20 61 20 7a 65 72 6f 2d 74 65 72 6d 69 6e  to a zero-termin
c560: 61 74 65 64 20 61 72 72 61 79 20 6f 66 20 73 74  ated array of st
c570: 72 69 6e 67 73 2e 20 7a 53 74 72 0a 2a 2a 20 70  rings. zStr.** p
c580: 6f 69 6e 74 73 20 74 6f 20 61 20 73 69 6e 67 6c  oints to a singl
c590: 65 20 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64  e nul-terminated
c5a0: 20 73 74 72 69 6e 67 2e 20 52 65 74 75 72 6e 20   string. Return 
c5b0: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 7a 53 74 72  non-zero if zStr
c5c0: 0a 2a 2a 20 69 73 20 65 71 75 61 6c 2c 20 61 63  .** is equal, ac
c5d0: 63 6f 72 64 69 6e 67 20 74 6f 20 73 74 72 63 6d  cording to strcm
c5e0: 70 28 29 2c 20 74 6f 20 61 6e 79 20 6f 66 20 74  p(), to any of t
c5f0: 68 65 20 73 74 72 69 6e 67 73 20 69 6e 20 74 68  he strings in th
c600: 65 20 61 72 72 61 79 2e 0a 2a 2a 20 4f 74 68 65  e array..** Othe
c610: 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 7a 65  rwise, return ze
c620: 72 6f 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ro..*/.static in
c630: 74 20 73 74 72 5f 69 6e 5f 61 72 72 61 79 28 63  t str_in_array(c
c640: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 72 2c  onst char *zStr,
c650: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a   const char **az
c660: 41 72 72 61 79 29 7b 0a 20 20 69 6e 74 20 69 3b  Array){.  int i;
c670: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 61 7a 41 72  .  for(i=0; azAr
c680: 72 61 79 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20  ray[i]; i++){.  
c690: 20 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28    if( 0==strcmp(
c6a0: 7a 53 74 72 2c 20 61 7a 41 72 72 61 79 5b 69 5d  zStr, azArray[i]
c6b0: 29 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20  ) ) return 1;.  
c6c0: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
c6d0: 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c  ./*.** If compil
c6e0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 70 53 71  ed statement pSq
c6f0: 6c 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20  l appears to be 
c700: 61 6e 20 45 58 50 4c 41 49 4e 20 73 74 61 74 65  an EXPLAIN state
c710: 6d 65 6e 74 2c 20 61 6c 6c 6f 63 61 74 65 0a 2a  ment, allocate.*
c720: 2a 20 61 6e 64 20 70 6f 70 75 6c 61 74 65 20 74  * and populate t
c730: 68 65 20 53 68 65 6c 6c 53 74 61 74 65 2e 61 69  he ShellState.ai
c740: 49 6e 64 65 6e 74 5b 5d 20 61 72 72 61 79 20 77  Indent[] array w
c750: 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ith the number o
c760: 66 0a 2a 2a 20 73 70 61 63 65 73 20 65 61 63 68  f.** spaces each
c770: 20 6f 70 63 6f 64 65 20 73 68 6f 75 6c 64 20 62   opcode should b
c780: 65 20 69 6e 64 65 6e 74 65 64 20 62 65 66 6f 72  e indented befor
c790: 65 20 69 74 20 69 73 20 6f 75 74 70 75 74 2e 0a  e it is output..
c7a0: 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 64 65 6e 74  **.** The indent
c7b0: 69 6e 67 20 72 75 6c 65 73 20 61 72 65 3a 0a 2a  ing rules are:.*
c7c0: 2a 0a 2a 2a 20 20 20 20 20 2a 20 46 6f 72 20 65  *.**     * For e
c7d0: 61 63 68 20 22 4e 65 78 74 22 2c 20 22 50 72 65  ach "Next", "Pre
c7e0: 76 22 2c 20 22 56 4e 65 78 74 22 20 6f 72 20 22  v", "VNext" or "
c7f0: 56 50 72 65 76 22 20 69 6e 73 74 72 75 63 74 69  VPrev" instructi
c800: 6f 6e 2c 20 69 6e 64 65 6e 74 0a 2a 2a 20 20 20  on, indent.**   
c810: 20 20 20 20 61 6c 6c 20 6f 70 63 6f 64 65 73 20      all opcodes 
c820: 74 68 61 74 20 6f 63 63 75 72 20 62 65 74 77 65  that occur betwe
c830: 65 6e 20 74 68 65 20 70 32 20 6a 75 6d 70 20 64  en the p2 jump d
c840: 65 73 74 69 6e 61 74 69 6f 6e 20 61 6e 64 20 74  estination and t
c850: 68 65 20 6f 70 63 6f 64 65 0a 2a 2a 20 20 20 20  he opcode.**    
c860: 20 20 20 69 74 73 65 6c 66 20 62 79 20 32 20 73     itself by 2 s
c870: 70 61 63 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  paces..**.**    
c880: 20 2a 20 46 6f 72 20 65 61 63 68 20 22 47 6f 74   * For each "Got
c890: 6f 22 2c 20 69 66 20 74 68 65 20 6a 75 6d 70 20  o", if the jump 
c8a0: 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 73 20 65  destination is e
c8b0: 61 72 6c 69 65 72 20 69 6e 20 74 68 65 20 70 72  arlier in the pr
c8c0: 6f 67 72 61 6d 0a 2a 2a 20 20 20 20 20 20 20 61  ogram.**       a
c8d0: 6e 64 20 65 6e 64 73 20 6f 6e 20 6f 6e 65 20 6f  nd ends on one o
c8e0: 66 3a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 59  f:.**          Y
c8f0: 69 65 6c 64 20 20 53 65 65 6b 47 74 20 20 53 65  ield  SeekGt  Se
c900: 65 6b 4c 74 20 20 52 6f 77 53 65 74 52 65 61 64  ekLt  RowSetRead
c910: 20 20 52 65 77 69 6e 64 0a 2a 2a 20 20 20 20 20    Rewind.**     
c920: 20 20 6f 72 20 69 66 20 74 68 65 20 50 31 20 70    or if the P1 p
c930: 61 72 61 6d 65 74 65 72 20 69 73 20 6f 6e 65 20  arameter is one 
c940: 69 6e 73 74 65 61 64 20 6f 66 20 7a 65 72 6f 2c  instead of zero,
c950: 0a 2a 2a 20 20 20 20 20 20 20 74 68 65 6e 20 69  .**       then i
c960: 6e 64 65 6e 74 20 61 6c 6c 20 6f 70 63 6f 64 65  ndent all opcode
c970: 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 65 61  s between the ea
c980: 72 6c 69 65 72 20 69 6e 73 74 72 75 63 74 69 6f  rlier instructio
c990: 6e 0a 2a 2a 20 20 20 20 20 20 20 61 6e 64 20 22  n.**       and "
c9a0: 47 6f 74 6f 22 20 62 79 20 32 20 73 70 61 63 65  Goto" by 2 space
c9b0: 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  s..*/.static voi
c9c0: 64 20 65 78 70 6c 61 69 6e 5f 64 61 74 61 5f 70  d explain_data_p
c9d0: 72 65 70 61 72 65 28 53 68 65 6c 6c 53 74 61 74  repare(ShellStat
c9e0: 65 20 2a 70 2c 20 73 71 6c 69 74 65 33 5f 73 74  e *p, sqlite3_st
c9f0: 6d 74 20 2a 70 53 71 6c 29 7b 0a 20 20 63 6f 6e  mt *pSql){.  con
ca00: 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20 20  st char *zSql;  
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ca20: 54 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20  The text of the 
ca30: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  SQL statement */
ca40: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
ca50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ca60: 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 63 68     /* Used to ch
ca70: 65 63 6b 20 69 66 20 74 68 69 73 20 69 73 20 61  eck if this is a
ca80: 6e 20 45 58 50 4c 41 49 4e 20 2a 2f 0a 20 20 69  n EXPLAIN */.  i
ca90: 6e 74 20 2a 61 62 59 69 65 6c 64 20 3d 20 30 3b  nt *abYield = 0;
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cab0: 2a 20 54 72 75 65 20 69 66 20 6f 70 20 69 73 20  * True if op is 
cac0: 61 6e 20 4f 50 5f 59 69 65 6c 64 20 2a 2f 0a 20  an OP_Yield */. 
cad0: 20 69 6e 74 20 6e 41 6c 6c 6f 63 20 3d 20 30 3b   int nAlloc = 0;
cae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
caf0: 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69   /* Allocated si
cb00: 7a 65 20 6f 66 20 70 2d 3e 61 69 49 6e 64 65 6e  ze of p->aiInden
cb10: 74 5b 5d 2c 20 61 62 59 69 65 6c 64 20 2a 2f 0a  t[], abYield */.
cb20: 20 20 69 6e 74 20 69 4f 70 3b 20 20 20 20 20 20    int iOp;      
cb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb40: 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 6f 70    /* Index of op
cb50: 65 72 61 74 69 6f 6e 20 69 6e 20 70 2d 3e 61 69  eration in p->ai
cb60: 49 6e 64 65 6e 74 5b 5d 20 2a 2f 0a 0a 20 20 63  Indent[] */..  c
cb70: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 4e 65 78  onst char *azNex
cb80: 74 5b 5d 20 3d 20 7b 20 22 4e 65 78 74 22 2c 20  t[] = { "Next", 
cb90: 22 50 72 65 76 22 2c 20 22 56 50 72 65 76 22 2c  "Prev", "VPrev",
cba0: 20 22 56 4e 65 78 74 22 2c 20 22 53 6f 72 74 65   "VNext", "Sorte
cbb0: 72 4e 65 78 74 22 2c 0a 20 20 20 20 20 20 20 20  rNext",.        
cbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbd0: 20 20 20 22 4e 65 78 74 49 66 4f 70 65 6e 22 2c     "NextIfOpen",
cbe0: 20 22 50 72 65 76 49 66 4f 70 65 6e 22 2c 20 30   "PrevIfOpen", 0
cbf0: 20 7d 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   };.  const char
cc00: 20 2a 61 7a 59 69 65 6c 64 5b 5d 20 3d 20 7b 20   *azYield[] = { 
cc10: 22 59 69 65 6c 64 22 2c 20 22 53 65 65 6b 4c 54  "Yield", "SeekLT
cc20: 22 2c 20 22 53 65 65 6b 47 54 22 2c 20 22 52 6f  ", "SeekGT", "Ro
cc30: 77 53 65 74 52 65 61 64 22 2c 0a 20 20 20 20 20  wSetRead",.     
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc50: 20 20 20 20 20 20 20 22 52 65 77 69 6e 64 22 2c         "Rewind",
cc60: 20 30 20 7d 3b 0a 20 20 63 6f 6e 73 74 20 63 68   0 };.  const ch
cc70: 61 72 20 2a 61 7a 47 6f 74 6f 5b 5d 20 3d 20 7b  ar *azGoto[] = {
cc80: 20 22 47 6f 74 6f 22 2c 20 30 20 7d 3b 0a 0a 20   "Goto", 0 };.. 
cc90: 20 2f 2a 20 54 72 79 20 74 6f 20 66 69 67 75 72   /* Try to figur
cca0: 65 20 6f 75 74 20 69 66 20 74 68 69 73 20 69 73  e out if this is
ccb0: 20 72 65 61 6c 6c 79 20 61 6e 20 45 58 50 4c 41   really an EXPLA
ccc0: 49 4e 20 73 74 61 74 65 6d 65 6e 74 2e 20 49 66  IN statement. If
ccd0: 20 74 68 69 73 0a 20 20 2a 2a 20 63 61 6e 6e 6f   this.  ** canno
cce0: 74 20 62 65 20 76 65 72 69 66 69 65 64 2c 20 72  t be verified, r
ccf0: 65 74 75 72 6e 20 65 61 72 6c 79 2e 20 20 2a 2f  eturn early.  */
cd00: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 63  .  if( sqlite3_c
cd10: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 71 6c  olumn_count(pSql
cd20: 29 21 3d 38 20 29 7b 0a 20 20 20 20 70 2d 3e 63  )!=8 ){.    p->c
cd30: 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a  Mode = p->mode;.
cd40: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a      return;.  }.
cd50: 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
cd60: 5f 73 71 6c 28 70 53 71 6c 29 3b 0a 20 20 69 66  _sql(pSql);.  if
cd70: 28 20 7a 53 71 6c 3d 3d 30 20 29 20 72 65 74 75  ( zSql==0 ) retu
cd80: 72 6e 3b 0a 20 20 66 6f 72 28 7a 3d 7a 53 71 6c  rn;.  for(z=zSql
cd90: 3b 20 2a 7a 3d 3d 27 20 27 20 7c 7c 20 2a 7a 3d  ; *z==' ' || *z=
cda0: 3d 27 5c 74 27 20 7c 7c 20 2a 7a 3d 3d 27 5c 6e  ='\t' || *z=='\n
cdb0: 27 20 7c 7c 20 2a 7a 3d 3d 27 5c 66 27 20 7c 7c  ' || *z=='\f' ||
cdc0: 20 2a 7a 3d 3d 27 5c 72 27 3b 20 7a 2b 2b 29 3b   *z=='\r'; z++);
cdd0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73  .  if( sqlite3_s
cde0: 74 72 6e 69 63 6d 70 28 7a 2c 20 22 65 78 70 6c  trnicmp(z, "expl
cdf0: 61 69 6e 22 2c 20 37 29 20 29 7b 0a 20 20 20 20  ain", 7) ){.    
ce00: 70 2d 3e 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f  p->cMode = p->mo
ce10: 64 65 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a  de;.    return;.
ce20: 20 20 7d 0a 0a 20 20 66 6f 72 28 69 4f 70 3d 30    }..  for(iOp=0
ce30: 3b 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d 73 71  ; SQLITE_ROW==sq
ce40: 6c 69 74 65 33 5f 73 74 65 70 28 70 53 71 6c 29  lite3_step(pSql)
ce50: 3b 20 69 4f 70 2b 2b 29 7b 0a 20 20 20 20 69 6e  ; iOp++){.    in
ce60: 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 69 41 64  t i;.    int iAd
ce70: 64 72 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  dr = sqlite3_col
ce80: 75 6d 6e 5f 69 6e 74 28 70 53 71 6c 2c 20 30 29  umn_int(pSql, 0)
ce90: 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  ;.    const char
cea0: 20 2a 7a 4f 70 20 3d 20 28 63 6f 6e 73 74 20 63   *zOp = (const c
ceb0: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  har*)sqlite3_col
cec0: 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20 31  umn_text(pSql, 1
ced0: 29 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 74 20 70  );..    /* Set p
cee0: 32 20 74 6f 20 74 68 65 20 50 32 20 66 69 65 6c  2 to the P2 fiel
cef0: 64 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  d of the current
cf00: 20 6f 70 63 6f 64 65 2e 20 54 68 65 6e 2c 20 61   opcode. Then, a
cf10: 73 73 75 6d 69 6e 67 20 74 68 61 74 0a 20 20 20  ssuming that.   
cf20: 20 2a 2a 20 70 32 20 69 73 20 61 6e 20 69 6e 73   ** p2 is an ins
cf30: 74 72 75 63 74 69 6f 6e 20 61 64 64 72 65 73 73  truction address
cf40: 2c 20 73 65 74 20 76 61 72 69 61 62 6c 65 20 70  , set variable p
cf50: 32 6f 70 20 74 6f 20 74 68 65 20 69 6e 64 65 78  2op to the index
cf60: 20 6f 66 20 74 68 61 74 0a 20 20 20 20 2a 2a 20   of that.    ** 
cf70: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74  instruction in t
cf80: 68 65 20 61 69 49 6e 64 65 6e 74 5b 5d 20 61 72  he aiIndent[] ar
cf90: 72 61 79 2e 20 70 32 20 61 6e 64 20 70 32 6f 70  ray. p2 and p2op
cfa0: 20 6d 61 79 20 62 65 20 64 69 66 66 65 72 65 6e   may be differen
cfb0: 74 20 69 66 0a 20 20 20 20 2a 2a 20 74 68 65 20  t if.    ** the 
cfc0: 63 75 72 72 65 6e 74 20 69 6e 73 74 72 75 63 74  current instruct
cfd0: 69 6f 6e 20 69 73 20 70 61 72 74 20 6f 66 20 61  ion is part of a
cfe0: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 67 65 6e   sub-program gen
cff0: 65 72 61 74 65 64 20 62 79 20 61 6e 0a 20 20 20  erated by an.   
d000: 20 2a 2a 20 53 51 4c 20 74 72 69 67 67 65 72 20   ** SQL trigger 
d010: 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 20  or foreign key. 
d020: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 70 32 20 3d   */.    int p2 =
d030: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
d040: 69 6e 74 28 70 53 71 6c 2c 20 33 29 3b 0a 20 20  int(pSql, 3);.  
d050: 20 20 69 6e 74 20 70 32 6f 70 20 3d 20 28 70 32    int p2op = (p2
d060: 20 2b 20 28 69 4f 70 2d 69 41 64 64 72 29 29 3b   + (iOp-iAddr));
d070: 0a 0a 20 20 20 20 2f 2a 20 47 72 6f 77 20 74 68  ..    /* Grow th
d080: 65 20 70 2d 3e 61 69 49 6e 64 65 6e 74 20 61 72  e p->aiIndent ar
d090: 72 61 79 20 61 73 20 72 65 71 75 69 72 65 64 20  ray as required 
d0a0: 2a 2f 0a 20 20 20 20 69 66 28 20 69 4f 70 3e 3d  */.    if( iOp>=
d0b0: 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20  nAlloc ){.      
d0c0: 69 66 28 20 69 4f 70 3d 3d 30 20 29 7b 0a 20 20  if( iOp==0 ){.  
d0d0: 20 20 20 20 20 20 2f 2a 20 44 6f 20 66 75 72 74        /* Do furt
d0e0: 68 65 72 20 76 65 72 66 69 63 61 74 69 6f 6e 20  her verfication 
d0f0: 74 68 61 74 20 74 68 69 73 20 69 73 20 65 78 70  that this is exp
d100: 6c 61 69 6e 20 6f 75 74 70 75 74 2e 20 20 41 62  lain output.  Ab
d110: 6f 72 74 20 69 66 0a 20 20 20 20 20 20 20 20 2a  ort if.        *
d120: 2a 20 69 74 20 69 73 20 6e 6f 74 20 2a 2f 0a 20  * it is not */. 
d130: 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f         static co
d140: 6e 73 74 20 63 68 61 72 20 2a 65 78 70 6c 61 69  nst char *explai
d150: 6e 43 6f 6c 73 5b 5d 20 3d 20 7b 0a 20 20 20 20  nCols[] = {.    
d160: 20 20 20 20 20 20 20 22 61 64 64 72 22 2c 20 22         "addr", "
d170: 6f 70 63 6f 64 65 22 2c 20 22 70 31 22 2c 20 22  opcode", "p1", "
d180: 70 32 22 2c 20 22 70 33 22 2c 20 22 70 34 22 2c  p2", "p3", "p4",
d190: 20 22 70 35 22 2c 20 22 63 6f 6d 6d 65 6e 74 22   "p5", "comment"
d1a0: 20 7d 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20   };.        int 
d1b0: 6a 6a 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  jj;.        for(
d1c0: 6a 6a 3d 30 3b 20 6a 6a 3c 41 72 72 61 79 53 69  jj=0; jj<ArraySi
d1d0: 7a 65 28 65 78 70 6c 61 69 6e 43 6f 6c 73 29 3b  ze(explainCols);
d1e0: 20 6a 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   jj++){.        
d1f0: 20 20 69 66 28 20 73 74 72 63 6d 70 28 73 71 6c    if( strcmp(sql
d200: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
d210: 28 70 53 71 6c 2c 6a 6a 29 2c 65 78 70 6c 61 69  (pSql,jj),explai
d220: 6e 43 6f 6c 73 5b 6a 6a 5d 29 21 3d 30 20 29 7b  nCols[jj])!=0 ){
d230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e  .            p->
d240: 63 4d 6f 64 65 20 3d 20 70 2d 3e 6d 6f 64 65 3b  cMode = p->mode;
d250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
d260: 69 74 65 33 5f 72 65 73 65 74 28 70 53 71 6c 29  ite3_reset(pSql)
d270: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ;.            re
d280: 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 20 20  turn;.          
d290: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
d2a0: 20 20 7d 0a 20 20 20 20 20 20 6e 41 6c 6c 6f 63    }.      nAlloc
d2b0: 20 2b 3d 20 31 30 30 3b 0a 20 20 20 20 20 20 70   += 100;.      p
d2c0: 2d 3e 61 69 49 6e 64 65 6e 74 20 3d 20 28 69 6e  ->aiIndent = (in
d2d0: 74 2a 29 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c  t*)sqlite3_reall
d2e0: 6f 63 36 34 28 70 2d 3e 61 69 49 6e 64 65 6e 74  oc64(p->aiIndent
d2f0: 2c 20 6e 41 6c 6c 6f 63 2a 73 69 7a 65 6f 66 28  , nAlloc*sizeof(
d300: 69 6e 74 29 29 3b 0a 20 20 20 20 20 20 61 62 59  int));.      abY
d310: 69 65 6c 64 20 3d 20 28 69 6e 74 2a 29 73 71 6c  ield = (int*)sql
d320: 69 74 65 33 5f 72 65 61 6c 6c 6f 63 36 34 28 61  ite3_realloc64(a
d330: 62 59 69 65 6c 64 2c 20 6e 41 6c 6c 6f 63 2a 73  bYield, nAlloc*s
d340: 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0a 20 20 20  izeof(int));.   
d350: 20 7d 0a 20 20 20 20 61 62 59 69 65 6c 64 5b 69   }.    abYield[i
d360: 4f 70 5d 20 3d 20 73 74 72 5f 69 6e 5f 61 72 72  Op] = str_in_arr
d370: 61 79 28 7a 4f 70 2c 20 61 7a 59 69 65 6c 64 29  ay(zOp, azYield)
d380: 3b 0a 20 20 20 20 70 2d 3e 61 69 49 6e 64 65 6e  ;.    p->aiInden
d390: 74 5b 69 4f 70 5d 20 3d 20 30 3b 0a 20 20 20 20  t[iOp] = 0;.    
d3a0: 70 2d 3e 6e 49 6e 64 65 6e 74 20 3d 20 69 4f 70  p->nIndent = iOp
d3b0: 2b 31 3b 0a 0a 20 20 20 20 69 66 28 20 73 74 72  +1;..    if( str
d3c0: 5f 69 6e 5f 61 72 72 61 79 28 7a 4f 70 2c 20 61  _in_array(zOp, a
d3d0: 7a 4e 65 78 74 29 20 29 7b 0a 20 20 20 20 20 20  zNext) ){.      
d3e0: 66 6f 72 28 69 3d 70 32 6f 70 3b 20 69 3c 69 4f  for(i=p2op; i<iO
d3f0: 70 3b 20 69 2b 2b 29 20 70 2d 3e 61 69 49 6e 64  p; i++) p->aiInd
d400: 65 6e 74 5b 69 5d 20 2b 3d 20 32 3b 0a 20 20 20  ent[i] += 2;.   
d410: 20 7d 0a 20 20 20 20 69 66 28 20 73 74 72 5f 69   }.    if( str_i
d420: 6e 5f 61 72 72 61 79 28 7a 4f 70 2c 20 61 7a 47  n_array(zOp, azG
d430: 6f 74 6f 29 20 26 26 20 70 32 6f 70 3c 70 2d 3e  oto) && p2op<p->
d440: 6e 49 6e 64 65 6e 74 0a 20 20 20 20 20 26 26 20  nIndent.     && 
d450: 28 61 62 59 69 65 6c 64 5b 70 32 6f 70 5d 20 7c  (abYield[p2op] |
d460: 7c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  | sqlite3_column
d470: 5f 69 6e 74 28 70 53 71 6c 2c 20 32 29 29 0a 20  _int(pSql, 2)). 
d480: 20 20 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28     ){.      for(
d490: 69 3d 70 32 6f 70 3b 20 69 3c 69 4f 70 3b 20 69  i=p2op; i<iOp; i
d4a0: 2b 2b 29 20 70 2d 3e 61 69 49 6e 64 65 6e 74 5b  ++) p->aiIndent[
d4b0: 69 5d 20 2b 3d 20 32 3b 0a 20 20 20 20 7d 0a 20  i] += 2;.    }. 
d4c0: 20 7d 0a 0a 20 20 70 2d 3e 69 49 6e 64 65 6e 74   }..  p->iIndent
d4d0: 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f   = 0;.  sqlite3_
d4e0: 66 72 65 65 28 61 62 59 69 65 6c 64 29 3b 0a 20  free(abYield);. 
d4f0: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70   sqlite3_reset(p
d500: 53 71 6c 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46  Sql);.}../*.** F
d510: 72 65 65 20 74 68 65 20 61 72 72 61 79 20 61 6c  ree the array al
d520: 6c 6f 63 61 74 65 64 20 62 79 20 65 78 70 6c 61  located by expla
d530: 69 6e 5f 64 61 74 61 5f 70 72 65 70 61 72 65 28  in_data_prepare(
d540: 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  )..*/.static voi
d550: 64 20 65 78 70 6c 61 69 6e 5f 64 61 74 61 5f 64  d explain_data_d
d560: 65 6c 65 74 65 28 53 68 65 6c 6c 53 74 61 74 65  elete(ShellState
d570: 20 2a 70 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f   *p){.  sqlite3_
d580: 66 72 65 65 28 70 2d 3e 61 69 49 6e 64 65 6e 74  free(p->aiIndent
d590: 29 3b 0a 20 20 70 2d 3e 61 69 49 6e 64 65 6e 74  );.  p->aiIndent
d5a0: 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 49 6e 64 65   = 0;.  p->nInde
d5b0: 6e 74 20 3d 20 30 3b 0a 20 20 70 2d 3e 69 49 6e  nt = 0;.  p->iIn
d5c0: 64 65 6e 74 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a  dent = 0;.}../*.
d5d0: 2a 2a 20 44 69 73 61 62 6c 65 20 61 6e 64 20 72  ** Disable and r
d5e0: 65 73 74 6f 72 65 20 2e 77 68 65 72 65 74 72 61  estore .wheretra
d5f0: 63 65 20 61 6e 64 20 2e 73 65 6c 65 63 74 74 72  ce and .selecttr
d600: 61 63 65 20 73 65 74 74 69 6e 67 73 2e 0a 2a 2f  ace settings..*/
d610: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
d620: 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64 65  ITE_DEBUG) && de
d630: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
d640: 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29  BLE_SELECTTRACE)
d650: 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69  .extern int sqli
d660: 74 65 33 53 65 6c 65 63 74 54 72 61 63 65 3b 0a  te3SelectTrace;.
d670: 73 74 61 74 69 63 20 69 6e 74 20 73 61 76 65 64  static int saved
d680: 53 65 6c 65 63 74 54 72 61 63 65 3b 0a 23 65 6e  SelectTrace;.#en
d690: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
d6a0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
d6b0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
d6c0: 45 4e 41 42 4c 45 5f 57 48 45 52 45 54 52 41 43  ENABLE_WHERETRAC
d6d0: 45 29 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71  E).extern int sq
d6e0: 6c 69 74 65 33 57 68 65 72 65 54 72 61 63 65 3b  lite3WhereTrace;
d6f0: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 61 76 65  .static int save
d700: 64 57 68 65 72 65 54 72 61 63 65 3b 0a 23 65 6e  dWhereTrace;.#en
d710: 64 69 66 0a 73 74 61 74 69 63 20 76 6f 69 64 20  dif.static void 
d720: 64 69 73 61 62 6c 65 5f 64 65 62 75 67 5f 74 72  disable_debug_tr
d730: 61 63 65 5f 6d 6f 64 65 73 28 76 6f 69 64 29 7b  ace_modes(void){
d740: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
d750: 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64 65  ITE_DEBUG) && de
d760: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
d770: 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29  BLE_SELECTTRACE)
d780: 0a 20 20 73 61 76 65 64 53 65 6c 65 63 74 54 72  .  savedSelectTr
d790: 61 63 65 20 3d 20 73 71 6c 69 74 65 33 53 65 6c  ace = sqlite3Sel
d7a0: 65 63 74 54 72 61 63 65 3b 0a 20 20 73 71 6c 69  ectTrace;.  sqli
d7b0: 74 65 33 53 65 6c 65 63 74 54 72 61 63 65 20 3d  te3SelectTrace =
d7c0: 20 30 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64   0;.#endif.#if d
d7d0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
d7e0: 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64 28  BUG) && defined(
d7f0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 57 48  SQLITE_ENABLE_WH
d800: 45 52 45 54 52 41 43 45 29 0a 20 20 73 61 76 65  ERETRACE).  save
d810: 64 57 68 65 72 65 54 72 61 63 65 20 3d 20 73 71  dWhereTrace = sq
d820: 6c 69 74 65 33 57 68 65 72 65 54 72 61 63 65 3b  lite3WhereTrace;
d830: 0a 20 20 73 71 6c 69 74 65 33 57 68 65 72 65 54  .  sqlite3WhereT
d840: 72 61 63 65 20 3d 20 30 3b 0a 23 65 6e 64 69 66  race = 0;.#endif
d850: 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72  .}.static void r
d860: 65 73 74 6f 72 65 5f 64 65 62 75 67 5f 74 72 61  estore_debug_tra
d870: 63 65 5f 6d 6f 64 65 73 28 76 6f 69 64 29 7b 0a  ce_modes(void){.
d880: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
d890: 54 45 5f 44 45 42 55 47 29 20 26 26 20 64 65 66  TE_DEBUG) && def
d8a0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
d8b0: 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a  LE_SELECTTRACE).
d8c0: 20 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 54    sqlite3SelectT
d8d0: 72 61 63 65 20 3d 20 73 61 76 65 64 53 65 6c 65  race = savedSele
d8e0: 63 74 54 72 61 63 65 3b 0a 23 65 6e 64 69 66 0a  ctTrace;.#endif.
d8f0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
d900: 54 45 5f 44 45 42 55 47 29 20 26 26 20 64 65 66  TE_DEBUG) && def
d910: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
d920: 4c 45 5f 57 48 45 52 45 54 52 41 43 45 29 0a 20  LE_WHERETRACE). 
d930: 20 73 71 6c 69 74 65 33 57 68 65 72 65 54 72 61   sqlite3WhereTra
d940: 63 65 20 3d 20 73 61 76 65 64 57 68 65 72 65 54  ce = savedWhereT
d950: 72 61 63 65 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a  race;.#endif.}..
d960: 2f 2a 0a 2a 2a 20 52 75 6e 20 61 20 70 72 65 70  /*.** Run a prep
d970: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ared statement.*
d980: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 65 78  /.static void ex
d990: 65 63 5f 70 72 65 70 61 72 65 64 5f 73 74 6d 74  ec_prepared_stmt
d9a0: 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a  (.  ShellState *
d9b0: 70 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20  pArg,           
d9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9d0: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
d9e0: 74 6f 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 2f  to ShellState */
d9f0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
da00: 2a 70 53 74 6d 74 2c 20 20 20 20 20 20 20 20 20  *pStmt,         
da10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da20: 20 20 20 20 2f 2a 20 53 74 61 74 6d 65 6e 74 20      /* Statment 
da30: 74 6f 20 72 75 6e 20 2a 2f 0a 20 20 69 6e 74 20  to run */.  int 
da40: 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  (*xCallback)(voi
da50: 64 2a 2c 69 6e 74 2c 63 68 61 72 2a 2a 2c 63 68  d*,int,char**,ch
da60: 61 72 2a 2a 2c 69 6e 74 2a 29 20 20 20 2f 2a 20  ar**,int*)   /* 
da70: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f  Callback functio
da80: 6e 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63  n */.){.  int rc
da90: 3b 0a 0a 20 20 2f 2a 20 70 65 72 66 6f 72 6d 20  ;..  /* perform 
daa0: 74 68 65 20 66 69 72 73 74 20 73 74 65 70 2e 20  the first step. 
dab0: 20 74 68 69 73 20 77 69 6c 6c 20 74 65 6c 6c 20   this will tell 
dac0: 75 73 20 69 66 20 77 65 0a 20 20 2a 2a 20 68 61  us if we.  ** ha
dad0: 76 65 20 61 20 72 65 73 75 6c 74 20 73 65 74 20  ve a result set 
dae0: 6f 72 20 6e 6f 74 20 61 6e 64 20 68 6f 77 20 77  or not and how w
daf0: 69 64 65 20 69 74 20 69 73 2e 0a 20 20 2a 2f 0a  ide it is..  */.
db00: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73    rc = sqlite3_s
db10: 74 65 70 28 70 53 74 6d 74 29 3b 0a 20 20 2f 2a  tep(pStmt);.  /*
db20: 20 69 66 20 77 65 20 68 61 76 65 20 61 20 72 65   if we have a re
db30: 73 75 6c 74 20 73 65 74 2e 2e 2e 20 2a 2f 0a 20  sult set... */. 
db40: 20 69 66 28 20 53 51 4c 49 54 45 5f 52 4f 57 20   if( SQLITE_ROW 
db50: 3d 3d 20 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20  == rc ){.    /* 
db60: 69 66 20 77 65 20 68 61 76 65 20 61 20 63 61 6c  if we have a cal
db70: 6c 62 61 63 6b 2e 2e 2e 20 2a 2f 0a 20 20 20 20  lback... */.    
db80: 69 66 28 20 78 43 61 6c 6c 62 61 63 6b 20 29 7b  if( xCallback ){
db90: 0a 20 20 20 20 20 20 2f 2a 20 61 6c 6c 6f 63 61  .      /* alloca
dba0: 74 65 20 73 70 61 63 65 20 66 6f 72 20 63 6f 6c  te space for col
dbb0: 20 6e 61 6d 65 20 70 74 72 2c 20 76 61 6c 75 65   name ptr, value
dbc0: 20 70 74 72 2c 20 61 6e 64 20 74 79 70 65 20 2a   ptr, and type *
dbd0: 2f 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 6c  /.      int nCol
dbe0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
dbf0: 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 3b 0a  n_count(pStmt);.
dc00: 20 20 20 20 20 20 76 6f 69 64 20 2a 70 44 61 74        void *pDat
dc10: 61 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  a = sqlite3_mall
dc20: 6f 63 36 34 28 33 2a 6e 43 6f 6c 2a 73 69 7a 65  oc64(3*nCol*size
dc30: 6f 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 20  of(const char*) 
dc40: 2b 20 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20  + 1);.      if( 
dc50: 21 70 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20  !pData ){.      
dc60: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
dc70: 4d 45 4d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  MEM;.      }else
dc80: 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a  {.        char *
dc90: 2a 61 7a 43 6f 6c 73 20 3d 20 28 63 68 61 72 20  *azCols = (char 
dca0: 2a 2a 29 70 44 61 74 61 3b 20 20 20 20 20 20 2f  **)pData;      /
dcb0: 2a 20 4e 61 6d 65 73 20 6f 66 20 72 65 73 75 6c  * Names of resul
dcc0: 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 20  t columns */.   
dcd0: 20 20 20 20 20 63 68 61 72 20 2a 2a 61 7a 56 61       char **azVa
dce0: 6c 73 20 3d 20 26 61 7a 43 6f 6c 73 5b 6e 43 6f  ls = &azCols[nCo
dcf0: 6c 5d 3b 20 20 20 20 20 20 20 2f 2a 20 52 65 73  l];       /* Res
dd00: 75 6c 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20  ults */.        
dd10: 69 6e 74 20 2a 61 69 54 79 70 65 73 20 3d 20 28  int *aiTypes = (
dd20: 69 6e 74 20 2a 29 26 61 7a 56 61 6c 73 5b 6e 43  int *)&azVals[nC
dd30: 6f 6c 5d 3b 20 2f 2a 20 52 65 73 75 6c 74 20 74  ol]; /* Result t
dd40: 79 70 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20  ypes */.        
dd50: 69 6e 74 20 69 2c 20 78 3b 0a 20 20 20 20 20 20  int i, x;.      
dd60: 20 20 61 73 73 65 72 74 28 73 69 7a 65 6f 66 28    assert(sizeof(
dd70: 69 6e 74 29 20 3c 3d 20 73 69 7a 65 6f 66 28 63  int) <= sizeof(c
dd80: 68 61 72 20 2a 29 29 3b 0a 20 20 20 20 20 20 20  har *));.       
dd90: 20 2f 2a 20 73 61 76 65 20 6f 66 66 20 70 74 72   /* save off ptr
dda0: 73 20 74 6f 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  s to column name
ddb0: 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72  s */.        for
ddc0: 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b  (i=0; i<nCol; i+
ddd0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 7a  +){.          az
dde0: 43 6f 6c 73 5b 69 5d 20 3d 20 28 63 68 61 72 20  Cols[i] = (char 
ddf0: 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
de00: 5f 6e 61 6d 65 28 70 53 74 6d 74 2c 20 69 29 3b  _name(pStmt, i);
de10: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
de20: 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 20     do{.         
de30: 20 2f 2a 20 65 78 74 72 61 63 74 20 74 68 65 20   /* extract the 
de40: 64 61 74 61 20 61 6e 64 20 64 61 74 61 20 74 79  data and data ty
de50: 70 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  pes */.         
de60: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c   for(i=0; i<nCol
de70: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
de80: 20 20 20 20 61 69 54 79 70 65 73 5b 69 5d 20 3d      aiTypes[i] =
de90: 20 78 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c   x = sqlite3_col
dea0: 75 6d 6e 5f 74 79 70 65 28 70 53 74 6d 74 2c 20  umn_type(pStmt, 
deb0: 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  i);.            
dec0: 69 66 28 20 78 3d 3d 53 51 4c 49 54 45 5f 42 4c  if( x==SQLITE_BL
ded0: 4f 42 20 26 26 20 70 41 72 67 20 26 26 20 70 41  OB && pArg && pA
dee0: 72 67 2d 3e 63 4d 6f 64 65 3d 3d 4d 4f 44 45 5f  rg->cMode==MODE_
def0: 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 20 20  Insert ){.      
df00: 20 20 20 20 20 20 20 20 61 7a 56 61 6c 73 5b 69          azVals[i
df10: 5d 20 3d 20 22 22 3b 0a 20 20 20 20 20 20 20 20  ] = "";.        
df20: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
df30: 20 20 20 20 20 20 20 20 20 61 7a 56 61 6c 73 5b           azVals[
df40: 69 5d 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69  i] = (char*)sqli
df50: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
df60: 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20  pStmt, i);.     
df70: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
df80: 20 20 20 20 20 69 66 28 20 21 61 7a 56 61 6c 73       if( !azVals
df90: 5b 69 5d 20 26 26 20 28 61 69 54 79 70 65 73 5b  [i] && (aiTypes[
dfa0: 69 5d 21 3d 53 51 4c 49 54 45 5f 4e 55 4c 4c 29  i]!=SQLITE_NULL)
dfb0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
dfc0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
dfd0: 4d 45 4d 3b 0a 20 20 20 20 20 20 20 20 20 20 20  MEM;.           
dfe0: 20 20 20 62 72 65 61 6b 3b 20 2f 2a 20 66 72 6f     break; /* fro
dff0: 6d 20 66 6f 72 20 2a 2f 0a 20 20 20 20 20 20 20  m for */.       
e000: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
e010: 20 7d 20 2f 2a 20 65 6e 64 20 66 6f 72 20 2a 2f   } /* end for */
e020: 0a 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  ..          /* i
e030: 66 20 64 61 74 61 20 61 6e 64 20 74 79 70 65 73  f data and types
e040: 20 65 78 74 72 61 63 74 65 64 20 73 75 63 63 65   extracted succe
e050: 73 73 66 75 6c 6c 79 2e 2e 2e 20 2a 2f 0a 20 20  ssfully... */.  
e060: 20 20 20 20 20 20 20 20 69 66 28 20 53 51 4c 49          if( SQLI
e070: 54 45 5f 52 4f 57 20 3d 3d 20 72 63 20 29 7b 0a  TE_ROW == rc ){.
e080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63              /* c
e090: 61 6c 6c 20 74 68 65 20 73 75 70 70 6c 69 65 64  all the supplied
e0a0: 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74   callback with t
e0b0: 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 64 61  he result row da
e0c0: 74 61 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ta */.          
e0d0: 20 20 69 66 28 20 78 43 61 6c 6c 62 61 63 6b 28    if( xCallback(
e0e0: 70 41 72 67 2c 20 6e 43 6f 6c 2c 20 61 7a 56 61  pArg, nCol, azVa
e0f0: 6c 73 2c 20 61 7a 43 6f 6c 73 2c 20 61 69 54 79  ls, azCols, aiTy
e100: 70 65 73 29 20 29 7b 0a 20 20 20 20 20 20 20 20  pes) ){.        
e110: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
e120: 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20 20 20 20  E_ABORT;.       
e130: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
e140: 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
e150: 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d  qlite3_step(pStm
e160: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  t);.            
e170: 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  }.          }.  
e180: 20 20 20 20 20 20 7d 20 77 68 69 6c 65 28 20 53        } while( S
e190: 51 4c 49 54 45 5f 52 4f 57 20 3d 3d 20 72 63 20  QLITE_ROW == rc 
e1a0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
e1b0: 65 33 5f 66 72 65 65 28 70 44 61 74 61 29 3b 0a  e3_free(pData);.
e1c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
e1d0: 65 7b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20  e{.      do{.   
e1e0: 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
e1f0: 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3b 0a 20  3_step(pStmt);. 
e200: 20 20 20 20 20 7d 20 77 68 69 6c 65 28 20 72 63       } while( rc
e210: 20 3d 3d 20 53 51 4c 49 54 45 5f 52 4f 57 20 29   == SQLITE_ROW )
e220: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  ;.    }.  }.}../
e230: 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 20 73  *.** Execute a s
e240: 74 61 74 65 6d 65 6e 74 20 6f 72 20 73 65 74 20  tatement or set 
e250: 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20  of statements.  
e260: 50 72 69 6e 74 0a 2a 2a 20 61 6e 79 20 72 65 73  Print.** any res
e270: 75 6c 74 20 72 6f 77 73 2f 63 6f 6c 75 6d 6e 73  ult rows/columns
e280: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68   depending on th
e290: 65 20 63 75 72 72 65 6e 74 20 6d 6f 64 65 0a 2a  e current mode.*
e2a0: 2a 20 73 65 74 20 76 69 61 20 74 68 65 20 73 75  * set via the su
e2b0: 70 70 6c 69 65 64 20 63 61 6c 6c 62 61 63 6b 2e  pplied callback.
e2c0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 76  .**.** This is v
e2d0: 65 72 79 20 73 69 6d 69 6c 61 72 20 74 6f 20 53  ery similar to S
e2e0: 51 4c 69 74 65 27 73 20 62 75 69 6c 74 2d 69 6e  QLite's built-in
e2f0: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 0a   sqlite3_exec().
e300: 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 65 78 63 65  ** function exce
e310: 70 74 20 69 74 20 74 61 6b 65 73 20 61 20 73 6c  pt it takes a sl
e320: 69 67 68 74 6c 79 20 64 69 66 66 65 72 65 6e 74  ightly different
e330: 20 63 61 6c 6c 62 61 63 6b 0a 2a 2a 20 61 6e 64   callback.** and
e340: 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 20 61   callback data a
e350: 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74  rgument..*/.stat
e360: 69 63 20 69 6e 74 20 73 68 65 6c 6c 5f 65 78 65  ic int shell_exe
e370: 63 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  c(.  sqlite3 *db
e380: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
e390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e3a0: 2a 20 41 6e 20 6f 70 65 6e 20 64 61 74 61 62 61  * An open databa
e3b0: 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  se */.  const ch
e3c0: 61 72 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20  ar *zSql,       
e3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3e0: 20 20 2f 2a 20 53 51 4c 20 74 6f 20 62 65 20 65    /* SQL to be e
e3f0: 76 61 6c 75 61 74 65 64 20 2a 2f 0a 20 20 69 6e  valuated */.  in
e400: 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76  t (*xCallback)(v
e410: 6f 69 64 2a 2c 69 6e 74 2c 63 68 61 72 2a 2a 2c  oid*,int,char**,
e420: 63 68 61 72 2a 2a 2c 69 6e 74 2a 29 2c 20 20 20  char**,int*),   
e430: 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  /* Callback func
e440: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20  tion */.        
e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e470: 20 20 20 20 2f 2a 20 28 6e 6f 74 20 74 68 65 20      /* (not the 
e480: 73 61 6d 65 20 61 73 20 73 71 6c 69 74 65 33 5f  same as sqlite3_
e490: 65 78 65 63 29 20 2a 2f 0a 20 20 53 68 65 6c 6c  exec) */.  Shell
e4a0: 53 74 61 74 65 20 2a 70 41 72 67 2c 20 20 20 20  State *pArg,    
e4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4c0: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
e4d0: 74 6f 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 2f  to ShellState */
e4e0: 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d  .  char **pzErrM
e4f0: 73 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20  sg              
e500: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e510: 45 72 72 6f 72 20 6d 73 67 20 77 72 69 74 74 65  Error msg writte
e520: 6e 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 73  n here */.){.  s
e530: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
e540: 6d 74 20 3d 20 4e 55 4c 4c 3b 20 20 20 20 20 2f  mt = NULL;     /
e550: 2a 20 53 74 61 74 65 6d 65 6e 74 20 74 6f 20 65  * Statement to e
e560: 78 65 63 75 74 65 2e 20 2a 2f 0a 20 20 69 6e 74  xecute. */.  int
e570: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
e580: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e590: 52 65 74 75 72 6e 20 43 6f 64 65 20 2a 2f 0a 20  Return Code */. 
e5a0: 20 69 6e 74 20 72 63 32 3b 0a 20 20 63 6f 6e 73   int rc2;.  cons
e5b0: 74 20 63 68 61 72 20 2a 7a 4c 65 66 74 6f 76 65  t char *zLeftove
e5c0: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  r;          /* T
e5d0: 61 69 6c 20 6f 66 20 75 6e 70 72 6f 63 65 73 73  ail of unprocess
e5e0: 65 64 20 53 51 4c 20 2a 2f 0a 0a 20 20 69 66 28  ed SQL */..  if(
e5f0: 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20   pzErrMsg ){.   
e600: 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 4e 55 4c   *pzErrMsg = NUL
e610: 4c 3b 0a 20 20 7d 0a 0a 20 20 77 68 69 6c 65 28  L;.  }..  while(
e620: 20 7a 53 71 6c 5b 30 5d 20 26 26 20 28 53 51 4c   zSql[0] && (SQL
e630: 49 54 45 5f 4f 4b 20 3d 3d 20 72 63 29 20 29 7b  ITE_OK == rc) ){
e640: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
e650: 74 20 63 68 61 72 20 2a 7a 53 74 6d 74 53 71 6c  t char *zStmtSql
e660: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
e670: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 64 62  e3_prepare_v2(db
e680: 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74  , zSql, -1, &pSt
e690: 6d 74 2c 20 26 7a 4c 65 66 74 6f 76 65 72 29 3b  mt, &zLeftover);
e6a0: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
e6b0: 4f 4b 20 21 3d 20 72 63 20 29 7b 0a 20 20 20 20  OK != rc ){.    
e6c0: 20 20 69 66 28 20 70 7a 45 72 72 4d 73 67 20 29    if( pzErrMsg )
e6d0: 7b 0a 20 20 20 20 20 20 20 20 2a 70 7a 45 72 72  {.        *pzErr
e6e0: 4d 73 67 20 3d 20 73 61 76 65 5f 65 72 72 5f 6d  Msg = save_err_m
e6f0: 73 67 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a  sg(db);.      }.
e700: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
e710: 20 69 66 28 20 21 70 53 74 6d 74 20 29 7b 0a 20   if( !pStmt ){. 
e720: 20 20 20 20 20 20 20 2f 2a 20 74 68 69 73 20 68         /* this h
e730: 61 70 70 65 6e 73 20 66 6f 72 20 61 20 63 6f 6d  appens for a com
e740: 6d 65 6e 74 20 6f 72 20 77 68 69 74 65 2d 73 70  ment or white-sp
e750: 61 63 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 7a  ace */.        z
e760: 53 71 6c 20 3d 20 7a 4c 65 66 74 6f 76 65 72 3b  Sql = zLeftover;
e770: 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20  .        while( 
e780: 49 73 53 70 61 63 65 28 7a 53 71 6c 5b 30 5d 29  IsSpace(zSql[0])
e790: 20 29 20 7a 53 71 6c 2b 2b 3b 0a 20 20 20 20 20   ) zSql++;.     
e7a0: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20     continue;.   
e7b0: 20 20 20 7d 0a 20 20 20 20 20 20 7a 53 74 6d 74     }.      zStmt
e7c0: 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 73 71  Sql = sqlite3_sq
e7d0: 6c 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20  l(pStmt);.      
e7e0: 69 66 28 20 7a 53 74 6d 74 53 71 6c 3d 3d 30 20  if( zStmtSql==0 
e7f0: 29 20 7a 53 74 6d 74 53 71 6c 20 3d 20 22 22 3b  ) zStmtSql = "";
e800: 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 49 73  .      while( Is
e810: 53 70 61 63 65 28 7a 53 74 6d 74 53 71 6c 5b 30  Space(zStmtSql[0
e820: 5d 29 20 29 20 7a 53 74 6d 74 53 71 6c 2b 2b 3b  ]) ) zStmtSql++;
e830: 0a 0a 20 20 20 20 20 20 2f 2a 20 73 61 76 65 20  ..      /* save 
e840: 6f 66 66 20 74 68 65 20 70 72 65 70 61 72 65 64  off the prepared
e850: 20 73 74 61 74 6d 65 6e 74 20 68 61 6e 64 6c 65   statment handle
e860: 20 61 6e 64 20 72 65 73 65 74 20 72 6f 77 20 63   and reset row c
e870: 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20 69 66  ount */.      if
e880: 28 20 70 41 72 67 20 29 7b 0a 20 20 20 20 20 20  ( pArg ){.      
e890: 20 20 70 41 72 67 2d 3e 70 53 74 6d 74 20 3d 20    pArg->pStmt = 
e8a0: 70 53 74 6d 74 3b 0a 20 20 20 20 20 20 20 20 70  pStmt;.        p
e8b0: 41 72 67 2d 3e 63 6e 74 20 3d 20 30 3b 0a 20 20  Arg->cnt = 0;.  
e8c0: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
e8d0: 65 63 68 6f 20 74 68 65 20 73 71 6c 20 73 74 61  echo the sql sta
e8e0: 74 65 6d 65 6e 74 20 69 66 20 65 63 68 6f 20 6f  tement if echo o
e8f0: 6e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  n */.      if( p
e900: 41 72 67 20 26 26 20 70 41 72 67 2d 3e 65 63 68  Arg && pArg->ech
e910: 6f 4f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 75  oOn ){.        u
e920: 74 66 38 5f 70 72 69 6e 74 66 28 70 41 72 67 2d  tf8_printf(pArg-
e930: 3e 6f 75 74 2c 20 22 25 73 5c 6e 22 2c 20 7a 53  >out, "%s\n", zS
e940: 74 6d 74 53 71 6c 20 3f 20 7a 53 74 6d 74 53 71  tmtSql ? zStmtSq
e950: 6c 20 3a 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20  l : zSql);.     
e960: 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 68 6f   }..      /* Sho
e970: 77 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55  w the EXPLAIN QU
e980: 45 52 59 20 50 4c 41 4e 20 69 66 20 2e 65 71 70  ERY PLAN if .eqp
e990: 20 69 73 20 6f 6e 20 2a 2f 0a 20 20 20 20 20 20   is on */.      
e9a0: 69 66 28 20 70 41 72 67 20 26 26 20 70 41 72 67  if( pArg && pArg
e9b0: 2d 3e 61 75 74 6f 45 51 50 20 26 26 20 73 71 6c  ->autoEQP && sql
e9c0: 69 74 65 33 5f 73 74 72 6c 69 6b 65 28 22 45 58  ite3_strlike("EX
e9d0: 50 4c 41 49 4e 25 22 2c 7a 53 74 6d 74 53 71 6c  PLAIN%",zStmtSql
e9e0: 2c 30 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ,0)!=0 ){.      
e9f0: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
ea00: 70 45 78 70 6c 61 69 6e 3b 0a 20 20 20 20 20 20  pExplain;.      
ea10: 20 20 63 68 61 72 20 2a 7a 45 51 50 3b 0a 20 20    char *zEQP;.  
ea20: 20 20 20 20 20 20 64 69 73 61 62 6c 65 5f 64 65        disable_de
ea30: 62 75 67 5f 74 72 61 63 65 5f 6d 6f 64 65 73 28  bug_trace_modes(
ea40: 29 3b 0a 20 20 20 20 20 20 20 20 7a 45 51 50 20  );.        zEQP 
ea50: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
ea60: 66 28 22 45 58 50 4c 41 49 4e 20 51 55 45 52 59  f("EXPLAIN QUERY
ea70: 20 50 4c 41 4e 20 25 73 22 2c 20 7a 53 74 6d 74   PLAN %s", zStmt
ea80: 53 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 72 63  Sql);.        rc
ea90: 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61   = sqlite3_prepa
eaa0: 72 65 5f 76 32 28 64 62 2c 20 7a 45 51 50 2c 20  re_v2(db, zEQP, 
eab0: 2d 31 2c 20 26 70 45 78 70 6c 61 69 6e 2c 20 30  -1, &pExplain, 0
eac0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
ead0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
eae0: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28            while(
eaf0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 45   sqlite3_step(pE
eb00: 78 70 6c 61 69 6e 29 3d 3d 53 51 4c 49 54 45 5f  xplain)==SQLITE_
eb10: 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ROW ){.         
eb20: 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 41     raw_printf(pA
eb30: 72 67 2d 3e 6f 75 74 2c 22 2d 2d 45 51 50 2d 2d  rg->out,"--EQP--
eb40: 20 25 64 2c 22 2c 73 71 6c 69 74 65 33 5f 63 6f   %d,",sqlite3_co
eb50: 6c 75 6d 6e 5f 69 6e 74 28 70 45 78 70 6c 61 69  lumn_int(pExplai
eb60: 6e 2c 20 30 29 29 3b 0a 20 20 20 20 20 20 20 20  n, 0));.        
eb70: 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
eb80: 41 72 67 2d 3e 6f 75 74 2c 22 25 64 2c 22 2c 20  Arg->out,"%d,", 
eb90: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
eba0: 6e 74 28 70 45 78 70 6c 61 69 6e 2c 20 31 29 29  nt(pExplain, 1))
ebb0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61  ;.            ra
ebc0: 77 5f 70 72 69 6e 74 66 28 70 41 72 67 2d 3e 6f  w_printf(pArg->o
ebd0: 75 74 2c 22 25 64 2c 22 2c 20 73 71 6c 69 74 65  ut,"%d,", sqlite
ebe0: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 45 78  3_column_int(pEx
ebf0: 70 6c 61 69 6e 2c 20 32 29 29 3b 0a 20 20 20 20  plain, 2));.    
ec00: 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
ec10: 6e 74 66 28 70 41 72 67 2d 3e 6f 75 74 2c 22 25  ntf(pArg->out,"%
ec20: 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f  s\n", sqlite3_co
ec30: 6c 75 6d 6e 5f 74 65 78 74 28 70 45 78 70 6c 61  lumn_text(pExpla
ec40: 69 6e 2c 20 33 29 29 3b 0a 20 20 20 20 20 20 20  in, 3));.       
ec50: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
ec60: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66         sqlite3_f
ec70: 69 6e 61 6c 69 7a 65 28 70 45 78 70 6c 61 69 6e  inalize(pExplain
ec80: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
ec90: 65 33 5f 66 72 65 65 28 7a 45 51 50 29 3b 0a 20  e3_free(zEQP);. 
eca0: 20 20 20 20 20 20 20 69 66 28 20 70 41 72 67 2d         if( pArg-
ecb0: 3e 61 75 74 6f 45 51 50 3e 3d 32 20 29 7b 0a 20  >autoEQP>=2 ){. 
ecc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f           /* Also
ecd0: 20 64 6f 20 61 6e 20 45 58 50 4c 41 49 4e 20 66   do an EXPLAIN f
ece0: 6f 72 20 22 2e 65 71 70 20 66 75 6c 6c 22 20 6d  or ".eqp full" m
ecf0: 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ode */.         
ed00: 20 7a 45 51 50 20 3d 20 73 71 6c 69 74 65 33 5f   zEQP = sqlite3_
ed10: 6d 70 72 69 6e 74 66 28 22 45 58 50 4c 41 49 4e  mprintf("EXPLAIN
ed20: 20 25 73 22 2c 20 7a 53 74 6d 74 53 71 6c 29 3b   %s", zStmtSql);
ed30: 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
ed40: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
ed50: 76 32 28 64 62 2c 20 7a 45 51 50 2c 20 2d 31 2c  v2(db, zEQP, -1,
ed60: 20 26 70 45 78 70 6c 61 69 6e 2c 20 30 29 3b 0a   &pExplain, 0);.
ed70: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
ed80: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
ed90: 20 20 20 20 20 20 20 20 20 20 20 70 41 72 67 2d             pArg-
eda0: 3e 63 4d 6f 64 65 20 3d 20 4d 4f 44 45 5f 45 78  >cMode = MODE_Ex
edb0: 70 6c 61 69 6e 3b 0a 20 20 20 20 20 20 20 20 20  plain;.         
edc0: 20 20 20 65 78 70 6c 61 69 6e 5f 64 61 74 61 5f     explain_data_
edd0: 70 72 65 70 61 72 65 28 70 41 72 67 2c 20 70 45  prepare(pArg, pE
ede0: 78 70 6c 61 69 6e 29 3b 0a 20 20 20 20 20 20 20  xplain);.       
edf0: 20 20 20 20 20 65 78 65 63 5f 70 72 65 70 61 72       exec_prepar
ee00: 65 64 5f 73 74 6d 74 28 70 41 72 67 2c 20 70 45  ed_stmt(pArg, pE
ee10: 78 70 6c 61 69 6e 2c 20 78 43 61 6c 6c 62 61 63  xplain, xCallbac
ee20: 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  k);.            
ee30: 65 78 70 6c 61 69 6e 5f 64 61 74 61 5f 64 65 6c  explain_data_del
ee40: 65 74 65 28 70 41 72 67 29 3b 0a 20 20 20 20 20  ete(pArg);.     
ee50: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
ee60: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
ee70: 65 28 70 45 78 70 6c 61 69 6e 29 3b 0a 20 20 20  e(pExplain);.   
ee80: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66         sqlite3_f
ee90: 72 65 65 28 7a 45 51 50 29 3b 0a 20 20 20 20 20  ree(zEQP);.     
eea0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 73     }.        res
eeb0: 74 6f 72 65 5f 64 65 62 75 67 5f 74 72 61 63 65  tore_debug_trace
eec0: 5f 6d 6f 64 65 73 28 29 3b 0a 20 20 20 20 20 20  _modes();.      
eed0: 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 70 41 72  }..      if( pAr
eee0: 67 20 29 7b 0a 20 20 20 20 20 20 20 20 70 41 72  g ){.        pAr
eef0: 67 2d 3e 63 4d 6f 64 65 20 3d 20 70 41 72 67 2d  g->cMode = pArg-
ef00: 3e 6d 6f 64 65 3b 0a 20 20 20 20 20 20 20 20 69  >mode;.        i
ef10: 66 28 20 70 41 72 67 2d 3e 61 75 74 6f 45 78 70  f( pArg->autoExp
ef20: 6c 61 69 6e 0a 20 20 20 20 20 20 20 20 20 26 26  lain.         &&
ef30: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
ef40: 63 6f 75 6e 74 28 70 53 74 6d 74 29 3d 3d 38 0a  count(pStmt)==8.
ef50: 20 20 20 20 20 20 20 20 20 26 26 20 73 71 6c 69           && sqli
ef60: 74 65 33 5f 73 74 72 6c 69 6b 65 28 22 45 58 50  te3_strlike("EXP
ef70: 4c 41 49 4e 25 22 2c 20 7a 53 74 6d 74 53 71 6c  LAIN%", zStmtSql
ef80: 2c 30 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 29  ,0)==0.        )
ef90: 7b 0a 20 20 20 20 20 20 20 20 20 20 70 41 72 67  {.          pArg
efa0: 2d 3e 63 4d 6f 64 65 20 3d 20 4d 4f 44 45 5f 45  ->cMode = MODE_E
efb0: 78 70 6c 61 69 6e 3b 0a 20 20 20 20 20 20 20 20  xplain;.        
efc0: 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66  }..        /* If
efd0: 20 74 68 65 20 73 68 65 6c 6c 20 69 73 20 63 75   the shell is cu
efe0: 72 72 65 6e 74 6c 79 20 69 6e 20 22 2e 65 78 70  rrently in ".exp
eff0: 6c 61 69 6e 22 20 6d 6f 64 65 2c 20 67 61 74 68  lain" mode, gath
f000: 65 72 20 74 68 65 20 65 78 74 72 61 0a 20 20 20  er the extra.   
f010: 20 20 20 20 20 2a 2a 20 64 61 74 61 20 72 65 71       ** data req
f020: 75 69 72 65 64 20 74 6f 20 61 64 64 20 69 6e 64  uired to add ind
f030: 65 6e 74 73 20 74 6f 20 74 68 65 20 6f 75 74 70  ents to the outp
f040: 75 74 2e 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  ut.*/.        if
f050: 28 20 70 41 72 67 2d 3e 63 4d 6f 64 65 3d 3d 4d  ( pArg->cMode==M
f060: 4f 44 45 5f 45 78 70 6c 61 69 6e 20 29 7b 0a 20  ODE_Explain ){. 
f070: 20 20 20 20 20 20 20 20 20 65 78 70 6c 61 69 6e           explain
f080: 5f 64 61 74 61 5f 70 72 65 70 61 72 65 28 70 41  _data_prepare(pA
f090: 72 67 2c 20 70 53 74 6d 74 29 3b 0a 20 20 20 20  rg, pStmt);.    
f0a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20      }.      }.. 
f0b0: 20 20 20 20 20 65 78 65 63 5f 70 72 65 70 61 72       exec_prepar
f0c0: 65 64 5f 73 74 6d 74 28 70 41 72 67 2c 20 70 53  ed_stmt(pArg, pS
f0d0: 74 6d 74 2c 20 78 43 61 6c 6c 62 61 63 6b 29 3b  tmt, xCallback);
f0e0: 0a 20 20 20 20 20 20 65 78 70 6c 61 69 6e 5f 64  .      explain_d
f0f0: 61 74 61 5f 64 65 6c 65 74 65 28 70 41 72 67 29  ata_delete(pArg)
f100: 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 70 72 69 6e  ;..      /* prin
f110: 74 20 75 73 61 67 65 20 73 74 61 74 73 20 69 66  t usage stats if
f120: 20 73 74 61 74 73 20 6f 6e 20 2a 2f 0a 20 20 20   stats on */.   
f130: 20 20 20 69 66 28 20 70 41 72 67 20 26 26 20 70     if( pArg && p
f140: 41 72 67 2d 3e 73 74 61 74 73 4f 6e 20 29 7b 0a  Arg->statsOn ){.
f150: 20 20 20 20 20 20 20 20 64 69 73 70 6c 61 79 5f          display_
f160: 73 74 61 74 73 28 64 62 2c 20 70 41 72 67 2c 20  stats(db, pArg, 
f170: 30 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  0);.      }..   
f180: 20 20 20 2f 2a 20 70 72 69 6e 74 20 6c 6f 6f 70     /* print loop
f190: 2d 63 6f 75 6e 74 65 72 73 20 69 66 20 72 65 71  -counters if req
f1a0: 75 69 72 65 64 20 2a 2f 0a 20 20 20 20 20 20 69  uired */.      i
f1b0: 66 28 20 70 41 72 67 20 26 26 20 70 41 72 67 2d  f( pArg && pArg-
f1c0: 3e 73 63 61 6e 73 74 61 74 73 4f 6e 20 29 7b 0a  >scanstatsOn ){.
f1d0: 20 20 20 20 20 20 20 20 64 69 73 70 6c 61 79 5f          display_
f1e0: 73 63 61 6e 73 74 61 74 73 28 64 62 2c 20 70 41  scanstats(db, pA
f1f0: 72 67 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  rg);.      }..  
f200: 20 20 20 20 2f 2a 20 46 69 6e 61 6c 69 7a 65 20      /* Finalize 
f210: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 6a 75  the statement ju
f220: 73 74 20 65 78 65 63 75 74 65 64 2e 20 49 66 20  st executed. If 
f230: 74 68 69 73 20 66 61 69 6c 73 2c 20 73 61 76 65  this fails, save
f240: 20 61 0a 20 20 20 20 20 20 2a 2a 20 63 6f 70 79   a.      ** copy
f250: 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 6d 65   of the error me
f260: 73 73 61 67 65 2e 20 4f 74 68 65 72 77 69 73 65  ssage. Otherwise
f270: 2c 20 73 65 74 20 7a 53 71 6c 20 74 6f 20 70 6f  , set zSql to po
f280: 69 6e 74 20 74 6f 20 74 68 65 0a 20 20 20 20 20  int to the.     
f290: 20 2a 2a 20 6e 65 78 74 20 73 74 61 74 65 6d 65   ** next stateme
f2a0: 6e 74 20 74 6f 20 65 78 65 63 75 74 65 2e 20 2a  nt to execute. *
f2b0: 2f 0a 20 20 20 20 20 20 72 63 32 20 3d 20 73 71  /.      rc2 = sq
f2c0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
f2d0: 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 69 66 28  Stmt);.      if(
f2e0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45   rc!=SQLITE_NOME
f2f0: 4d 20 29 20 72 63 20 3d 20 72 63 32 3b 0a 20 20  M ) rc = rc2;.  
f300: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
f310: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
f320: 20 7a 53 71 6c 20 3d 20 7a 4c 65 66 74 6f 76 65   zSql = zLeftove
f330: 72 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  r;.        while
f340: 28 20 49 73 53 70 61 63 65 28 7a 53 71 6c 5b 30  ( IsSpace(zSql[0
f350: 5d 29 20 29 20 7a 53 71 6c 2b 2b 3b 0a 20 20 20  ]) ) zSql++;.   
f360: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 7a 45     }else if( pzE
f370: 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20 20 20  rrMsg ){.       
f380: 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 73 61 76   *pzErrMsg = sav
f390: 65 5f 65 72 72 5f 6d 73 67 28 64 62 29 3b 0a 20  e_err_msg(db);. 
f3a0: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
f3b0: 20 63 6c 65 61 72 20 73 61 76 65 64 20 73 74 6d   clear saved stm
f3c0: 74 20 68 61 6e 64 6c 65 20 2a 2f 0a 20 20 20 20  t handle */.    
f3d0: 20 20 69 66 28 20 70 41 72 67 20 29 7b 0a 20 20    if( pArg ){.  
f3e0: 20 20 20 20 20 20 70 41 72 67 2d 3e 70 53 74 6d        pArg->pStm
f3f0: 74 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20  t = NULL;.      
f400: 7d 0a 20 20 20 20 7d 0a 20 20 7d 20 2f 2a 20 65  }.    }.  } /* e
f410: 6e 64 20 77 68 69 6c 65 20 2a 2f 0a 0a 20 20 72  nd while */..  r
f420: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a  eturn rc;.}.../*
f430: 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 20 64 69  .** This is a di
f440: 66 66 65 72 65 6e 74 20 63 61 6c 6c 62 61 63 6b  fferent callback
f450: 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 66 6f   routine used fo
f460: 72 20 64 75 6d 70 69 6e 67 20 74 68 65 20 64 61  r dumping the da
f470: 74 61 62 61 73 65 2e 0a 2a 2a 20 45 61 63 68 20  tabase..** Each 
f480: 72 6f 77 20 72 65 63 65 69 76 65 64 20 62 79 20  row received by 
f490: 74 68 69 73 20 63 61 6c 6c 62 61 63 6b 20 63 6f  this callback co
f4a0: 6e 73 69 73 74 73 20 6f 66 20 61 20 74 61 62 6c  nsists of a tabl
f4b0: 65 20 6e 61 6d 65 2c 0a 2a 2a 20 74 68 65 20 74  e name,.** the t
f4c0: 61 62 6c 65 20 74 79 70 65 20 28 22 69 6e 64 65  able type ("inde
f4d0: 78 22 20 6f 72 20 22 74 61 62 6c 65 22 29 20 61  x" or "table") a
f4e0: 6e 64 20 53 51 4c 20 74 6f 20 63 72 65 61 74 65  nd SQL to create
f4f0: 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 20 54   the table..** T
f500: 68 69 73 20 72 6f 75 74 69 6e 65 20 73 68 6f 75  his routine shou
f510: 6c 64 20 70 72 69 6e 74 20 74 65 78 74 20 73 75  ld print text su
f520: 66 66 69 63 69 65 6e 74 20 74 6f 20 72 65 63 72  fficient to recr
f530: 65 61 74 65 20 74 68 65 20 74 61 62 6c 65 2e 0a  eate the table..
f540: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 64 75  */.static int du
f550: 6d 70 5f 63 61 6c 6c 62 61 63 6b 28 76 6f 69 64  mp_callback(void
f560: 20 2a 70 41 72 67 2c 20 69 6e 74 20 6e 41 72 67   *pArg, int nArg
f570: 2c 20 63 68 61 72 20 2a 2a 61 7a 41 72 67 2c 20  , char **azArg, 
f580: 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 29 7b 0a 20  char **azCol){. 
f590: 20 69 6e 74 20 72 63 3b 0a 20 20 63 6f 6e 73 74   int rc;.  const
f5a0: 20 63 68 61 72 20 2a 7a 54 61 62 6c 65 3b 0a 20   char *zTable;. 
f5b0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
f5c0: 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  pe;.  const char
f5d0: 20 2a 7a 53 71 6c 3b 0a 20 20 63 6f 6e 73 74 20   *zSql;.  const 
f5e0: 63 68 61 72 20 2a 7a 50 72 65 70 53 74 6d 74 20  char *zPrepStmt 
f5f0: 3d 20 30 3b 0a 20 20 53 68 65 6c 6c 53 74 61 74  = 0;.  ShellStat
f600: 65 20 2a 70 20 3d 20 28 53 68 65 6c 6c 53 74 61  e *p = (ShellSta
f610: 74 65 20 2a 29 70 41 72 67 3b 0a 0a 20 20 55 4e  te *)pArg;..  UN
f620: 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 61  USED_PARAMETER(a
f630: 7a 43 6f 6c 29 3b 0a 20 20 69 66 28 20 6e 41 72  zCol);.  if( nAr
f640: 67 21 3d 33 20 29 20 72 65 74 75 72 6e 20 31 3b  g!=3 ) return 1;
f650: 0a 20 20 7a 54 61 62 6c 65 20 3d 20 61 7a 41 72  .  zTable = azAr
f660: 67 5b 30 5d 3b 0a 20 20 7a 54 79 70 65 20 3d 20  g[0];.  zType = 
f670: 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 7a 53 71 6c  azArg[1];.  zSql
f680: 20 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a 0a 20 20   = azArg[2];..  
f690: 69 66 28 20 73 74 72 63 6d 70 28 7a 54 61 62 6c  if( strcmp(zTabl
f6a0: 65 2c 20 22 73 71 6c 69 74 65 5f 73 65 71 75 65  e, "sqlite_seque
f6b0: 6e 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  nce")==0 ){.    
f6c0: 7a 50 72 65 70 53 74 6d 74 20 3d 20 22 44 45 4c  zPrepStmt = "DEL
f6d0: 45 54 45 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ETE FROM sqlite_
f6e0: 73 65 71 75 65 6e 63 65 3b 5c 6e 22 3b 0a 20 20  sequence;\n";.  
f6f0: 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
f700: 33 5f 73 74 72 67 6c 6f 62 28 22 73 71 6c 69 74  3_strglob("sqlit
f710: 65 5f 73 74 61 74 3f 22 2c 20 7a 54 61 62 6c 65  e_stat?", zTable
f720: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 61 77 5f  )==0 ){.    raw_
f730: 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
f740: 41 4e 41 4c 59 5a 45 20 73 71 6c 69 74 65 5f 6d  ANALYZE sqlite_m
f750: 61 73 74 65 72 3b 5c 6e 22 29 3b 0a 20 20 7d 65  aster;\n");.  }e
f760: 6c 73 65 20 69 66 28 20 73 74 72 6e 63 6d 70 28  lse if( strncmp(
f770: 7a 54 61 62 6c 65 2c 20 22 73 71 6c 69 74 65 5f  zTable, "sqlite_
f780: 22 2c 20 37 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", 7)==0 ){.    
f790: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73  return 0;.  }els
f7a0: 65 20 69 66 28 20 73 74 72 6e 63 6d 70 28 7a 53  e if( strncmp(zS
f7b0: 71 6c 2c 20 22 43 52 45 41 54 45 20 56 49 52 54  ql, "CREATE VIRT
f7c0: 55 41 4c 20 54 41 42 4c 45 22 2c 20 32 30 29 3d  UAL TABLE", 20)=
f7d0: 3d 30 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a  =0 ){.    char *
f7e0: 7a 49 6e 73 3b 0a 20 20 20 20 69 66 28 20 21 70  zIns;.    if( !p
f7f0: 2d 3e 77 72 69 74 61 62 6c 65 53 63 68 65 6d 61  ->writableSchema
f800: 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
f810: 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 50 52  intf(p->out, "PR
f820: 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63  AGMA writable_sc
f830: 68 65 6d 61 3d 4f 4e 3b 5c 6e 22 29 3b 0a 20 20  hema=ON;\n");.  
f840: 20 20 20 20 70 2d 3e 77 72 69 74 61 62 6c 65 53      p->writableS
f850: 63 68 65 6d 61 20 3d 20 31 3b 0a 20 20 20 20 7d  chema = 1;.    }
f860: 0a 20 20 20 20 7a 49 6e 73 20 3d 20 73 71 6c 69  .    zIns = sqli
f870: 74 65 33 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20  te3_mprintf(.   
f880: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
f890: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 28 74   sqlite_master(t
f8a0: 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d  ype,name,tbl_nam
f8b0: 65 2c 72 6f 6f 74 70 61 67 65 2c 73 71 6c 29 22  e,rootpage,sql)"
f8c0: 0a 20 20 20 20 20 20 20 22 56 41 4c 55 45 53 28  .       "VALUES(
f8d0: 27 74 61 62 6c 65 27 2c 27 25 71 27 2c 27 25 71  'table','%q','%q
f8e0: 27 2c 30 2c 27 25 71 27 29 3b 22 2c 0a 20 20 20  ',0,'%q');",.   
f8f0: 20 20 20 20 7a 54 61 62 6c 65 2c 20 7a 54 61 62      zTable, zTab
f900: 6c 65 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 75  le, zSql);.    u
f910: 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
f920: 74 2c 20 22 25 73 5c 6e 22 2c 20 7a 49 6e 73 29  t, "%s\n", zIns)
f930: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
f940: 65 65 28 7a 49 6e 73 29 3b 0a 20 20 20 20 72 65  ee(zIns);.    re
f950: 74 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  turn 0;.  }else{
f960: 0a 20 20 20 20 70 72 69 6e 74 53 63 68 65 6d 61  .    printSchema
f970: 4c 69 6e 65 28 70 2d 3e 6f 75 74 2c 20 7a 53 71  Line(p->out, zSq
f980: 6c 2c 20 22 3b 5c 6e 22 29 3b 0a 20 20 7d 0a 0a  l, ";\n");.  }..
f990: 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 54 79    if( strcmp(zTy
f9a0: 70 65 2c 20 22 74 61 62 6c 65 22 29 3d 3d 30 20  pe, "table")==0 
f9b0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ){.    sqlite3_s
f9c0: 74 6d 74 20 2a 70 54 61 62 6c 65 49 6e 66 6f 20  tmt *pTableInfo 
f9d0: 3d 20 30 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a  = 0;.    char *z
f9e0: 53 65 6c 65 63 74 20 3d 20 30 3b 0a 20 20 20 20  Select = 0;.    
f9f0: 63 68 61 72 20 2a 7a 54 61 62 6c 65 49 6e 66 6f  char *zTableInfo
fa00: 20 3d 20 30 3b 0a 20 20 20 20 63 68 61 72 20 2a   = 0;.    char *
fa10: 7a 54 6d 70 20 3d 20 30 3b 0a 20 20 20 20 69 6e  zTmp = 0;.    in
fa20: 74 20 6e 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 20  t nRow = 0;..   
fa30: 20 7a 54 61 62 6c 65 49 6e 66 6f 20 3d 20 61 70   zTableInfo = ap
fa40: 70 65 6e 64 54 65 78 74 28 7a 54 61 62 6c 65 49  pendText(zTableI
fa50: 6e 66 6f 2c 20 22 50 52 41 47 4d 41 20 74 61 62  nfo, "PRAGMA tab
fa60: 6c 65 5f 69 6e 66 6f 28 22 2c 20 30 29 3b 0a 20  le_info(", 0);. 
fa70: 20 20 20 7a 54 61 62 6c 65 49 6e 66 6f 20 3d 20     zTableInfo = 
fa80: 61 70 70 65 6e 64 54 65 78 74 28 7a 54 61 62 6c  appendText(zTabl
fa90: 65 49 6e 66 6f 2c 20 7a 54 61 62 6c 65 2c 20 27  eInfo, zTable, '
faa0: 22 27 29 3b 0a 20 20 20 20 7a 54 61 62 6c 65 49  "');.    zTableI
fab0: 6e 66 6f 20 3d 20 61 70 70 65 6e 64 54 65 78 74  nfo = appendText
fac0: 28 7a 54 61 62 6c 65 49 6e 66 6f 2c 20 22 29 3b  (zTableInfo, ");
fad0: 22 2c 20 30 29 3b 0a 0a 20 20 20 20 72 63 20 3d  ", 0);..    rc =
fae0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
faf0: 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 54 61 62 6c  _v2(p->db, zTabl
fb00: 65 49 6e 66 6f 2c 20 2d 31 2c 20 26 70 54 61 62  eInfo, -1, &pTab
fb10: 6c 65 49 6e 66 6f 2c 20 30 29 3b 0a 20 20 20 20  leInfo, 0);.    
fb20: 66 72 65 65 28 7a 54 61 62 6c 65 49 6e 66 6f 29  free(zTableInfo)
fb30: 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
fb40: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 21 70 54 61 62  LITE_OK || !pTab
fb50: 6c 65 49 6e 66 6f 20 29 7b 0a 20 20 20 20 20 20  leInfo ){.      
fb60: 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a  return 1;.    }.
fb70: 0a 20 20 20 20 7a 53 65 6c 65 63 74 20 3d 20 61  .    zSelect = a
fb80: 70 70 65 6e 64 54 65 78 74 28 7a 53 65 6c 65 63  ppendText(zSelec
fb90: 74 2c 20 22 53 45 4c 45 43 54 20 27 49 4e 53 45  t, "SELECT 'INSE
fba0: 52 54 20 49 4e 54 4f 20 27 20 7c 7c 20 22 2c 20  RT INTO ' || ", 
fbb0: 30 29 3b 0a 20 20 20 20 2f 2a 20 41 6c 77 61 79  0);.    /* Alway
fbc0: 73 20 71 75 6f 74 65 20 74 68 65 20 74 61 62 6c  s quote the tabl
fbd0: 65 20 6e 61 6d 65 2c 20 65 76 65 6e 20 69 66 20  e name, even if 
fbe0: 69 74 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  it appears to be
fbf0: 20 70 75 72 65 20 61 73 63 69 69 2c 0a 20 20 20   pure ascii,.   
fc00: 20 2a 2a 20 69 6e 20 63 61 73 65 20 69 74 20 69   ** in case it i
fc10: 73 20 61 20 6b 65 79 77 6f 72 64 2e 20 45 78 3a  s a keyword. Ex:
fc20: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 22 74    INSERT INTO "t
fc30: 61 62 6c 65 22 20 2e 2e 2e 20 2a 2f 0a 20 20 20  able" ... */.   
fc40: 20 7a 54 6d 70 20 3d 20 61 70 70 65 6e 64 54 65   zTmp = appendTe
fc50: 78 74 28 7a 54 6d 70 2c 20 7a 54 61 62 6c 65 2c  xt(zTmp, zTable,
fc60: 20 27 22 27 29 3b 0a 20 20 20 20 69 66 28 20 7a   '"');.    if( z
fc70: 54 6d 70 20 29 7b 0a 20 20 20 20 20 20 7a 53 65  Tmp ){.      zSe
fc80: 6c 65 63 74 20 3d 20 61 70 70 65 6e 64 54 65 78  lect = appendTex
fc90: 74 28 7a 53 65 6c 65 63 74 2c 20 7a 54 6d 70 2c  t(zSelect, zTmp,
fca0: 20 27 5c 27 27 29 3b 0a 20 20 20 20 20 20 66 72   '\'');.      fr
fcb0: 65 65 28 7a 54 6d 70 29 3b 0a 20 20 20 20 7d 0a  ee(zTmp);.    }.
fcc0: 20 20 20 20 7a 53 65 6c 65 63 74 20 3d 20 61 70      zSelect = ap
fcd0: 70 65 6e 64 54 65 78 74 28 7a 53 65 6c 65 63 74  pendText(zSelect
fce0: 2c 20 22 20 7c 7c 20 27 20 56 41 4c 55 45 53 28  , " || ' VALUES(
fcf0: 27 20 7c 7c 20 22 2c 20 30 29 3b 0a 20 20 20 20  ' || ", 0);.    
fd00: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65  rc = sqlite3_ste
fd10: 70 28 70 54 61 62 6c 65 49 6e 66 6f 29 3b 0a 20  p(pTableInfo);. 
fd20: 20 20 20 77 68 69 6c 65 28 20 72 63 3d 3d 53 51     while( rc==SQ
fd30: 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20  LITE_ROW ){.    
fd40: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
fd50: 65 78 74 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  ext = (const cha
fd60: 72 20 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  r *)sqlite3_colu
fd70: 6d 6e 5f 74 65 78 74 28 70 54 61 62 6c 65 49 6e  mn_text(pTableIn
fd80: 66 6f 2c 20 31 29 3b 0a 20 20 20 20 20 20 7a 53  fo, 1);.      zS
fd90: 65 6c 65 63 74 20 3d 20 61 70 70 65 6e 64 54 65  elect = appendTe
fda0: 78 74 28 7a 53 65 6c 65 63 74 2c 20 22 71 75 6f  xt(zSelect, "quo
fdb0: 74 65 28 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  te(", 0);.      
fdc0: 7a 53 65 6c 65 63 74 20 3d 20 61 70 70 65 6e 64  zSelect = append
fdd0: 54 65 78 74 28 7a 53 65 6c 65 63 74 2c 20 7a 54  Text(zSelect, zT
fde0: 65 78 74 2c 20 27 22 27 29 3b 0a 20 20 20 20 20  ext, '"');.     
fdf0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74   rc = sqlite3_st
fe00: 65 70 28 70 54 61 62 6c 65 49 6e 66 6f 29 3b 0a  ep(pTableInfo);.
fe10: 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
fe20: 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20  LITE_ROW ){.    
fe30: 20 20 20 20 7a 53 65 6c 65 63 74 20 3d 20 61 70      zSelect = ap
fe40: 70 65 6e 64 54 65 78 74 28 7a 53 65 6c 65 63 74  pendText(zSelect
fe50: 2c 20 22 29 2c 20 22 2c 20 30 29 3b 0a 20 20 20  , "), ", 0);.   
fe60: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
fe70: 20 20 7a 53 65 6c 65 63 74 20 3d 20 61 70 70 65    zSelect = appe
fe80: 6e 64 54 65 78 74 28 7a 53 65 6c 65 63 74 2c 20  ndText(zSelect, 
fe90: 22 29 20 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  ") ", 0);.      
fea0: 7d 0a 20 20 20 20 20 20 6e 52 6f 77 2b 2b 3b 0a  }.      nRow++;.
feb0: 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73      }.    rc = s
fec0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
fed0: 70 54 61 62 6c 65 49 6e 66 6f 29 3b 0a 20 20 20  pTableInfo);.   
fee0: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
fef0: 4f 4b 20 7c 7c 20 6e 52 6f 77 3d 3d 30 20 29 7b  OK || nRow==0 ){
ff00: 0a 20 20 20 20 20 20 66 72 65 65 28 7a 53 65 6c  .      free(zSel
ff10: 65 63 74 29 3b 0a 20 20 20 20 20 20 72 65 74 75  ect);.      retu
ff20: 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rn 1;.    }.    
ff30: 7a 53 65 6c 65 63 74 20 3d 20 61 70 70 65 6e 64  zSelect = append
ff40: 54 65 78 74 28 7a 53 65 6c 65 63 74 2c 20 22 7c  Text(zSelect, "|
ff50: 7c 20 27 29 27 20 46 52 4f 4d 20 20 22 2c 20 30  | ')' FROM  ", 0
ff60: 29 3b 0a 20 20 20 20 7a 53 65 6c 65 63 74 20 3d  );.    zSelect =
ff70: 20 61 70 70 65 6e 64 54 65 78 74 28 7a 53 65 6c   appendText(zSel
ff80: 65 63 74 2c 20 7a 54 61 62 6c 65 2c 20 27 22 27  ect, zTable, '"'
ff90: 29 3b 0a 0a 20 20 20 20 72 63 20 3d 20 72 75 6e  );..    rc = run
ffa0: 5f 74 61 62 6c 65 5f 64 75 6d 70 5f 71 75 65 72  _table_dump_quer
ffb0: 79 28 70 2c 20 7a 53 65 6c 65 63 74 2c 20 7a 50  y(p, zSelect, zP
ffc0: 72 65 70 53 74 6d 74 29 3b 0a 20 20 20 20 69 66  repStmt);.    if
ffd0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 43 4f 52  ( rc==SQLITE_COR
ffe0: 52 55 50 54 20 29 7b 0a 20 20 20 20 20 20 7a 53  RUPT ){.      zS
fff0: 65 6c 65 63 74 20 3d 20 61 70 70 65 6e 64 54 65  elect = appendTe
10000 78 74 28 7a 53 65 6c 65 63 74 2c 20 22 20 4f 52  xt(zSelect, " OR
10010 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53  DER BY rowid DES
10020 43 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 72 75  C", 0);.      ru
10030 6e 5f 74 61 62 6c 65 5f 64 75 6d 70 5f 71 75 65  n_table_dump_que
10040 72 79 28 70 2c 20 7a 53 65 6c 65 63 74 2c 20 30  ry(p, zSelect, 0
10050 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 72 65  );.    }.    fre
10060 65 28 7a 53 65 6c 65 63 74 29 3b 0a 20 20 7d 0a  e(zSelect);.  }.
10070 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
10080 2a 0a 2a 2a 20 52 75 6e 20 7a 51 75 65 72 79 2e  *.** Run zQuery.
10090 20 20 55 73 65 20 64 75 6d 70 5f 63 61 6c 6c 62    Use dump_callb
100a0 61 63 6b 28 29 20 61 73 20 74 68 65 20 63 61 6c  ack() as the cal
100b0 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65 20 73 6f  lback routine so
100c0 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 6e   that.** the con
100d0 74 65 6e 74 73 20 6f 66 20 74 68 65 20 71 75 65  tents of the que
100e0 72 79 20 61 72 65 20 6f 75 74 70 75 74 20 61 73  ry are output as
100f0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e   SQL statements.
10100 0a 2a 2a 0a 2a 2a 20 49 66 20 77 65 20 67 65 74  .**.** If we get
10110 20 61 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   a SQLITE_CORRUP
10120 54 20 65 72 72 6f 72 2c 20 72 65 72 75 6e 20 74  T error, rerun t
10130 68 65 20 71 75 65 72 79 20 61 66 74 65 72 20 61  he query after a
10140 70 70 65 6e 64 69 6e 67 0a 2a 2a 20 22 4f 52 44  ppending.** "ORD
10150 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43  ER BY rowid DESC
10160 22 20 74 6f 20 74 68 65 20 65 6e 64 2e 0a 2a 2f  " to the end..*/
10170 0a 73 74 61 74 69 63 20 69 6e 74 20 72 75 6e 5f  .static int run_
10180 73 63 68 65 6d 61 5f 64 75 6d 70 5f 71 75 65 72  schema_dump_quer
10190 79 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20  y(.  ShellState 
101a0 2a 70 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  *p,.  const char
101b0 20 2a 7a 51 75 65 72 79 0a 29 7b 0a 20 20 69 6e   *zQuery.){.  in
101c0 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45  t rc;.  char *zE
101d0 72 72 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73  rr = 0;.  rc = s
101e0 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64  qlite3_exec(p->d
101f0 62 2c 20 7a 51 75 65 72 79 2c 20 64 75 6d 70 5f  b, zQuery, dump_
10200 63 61 6c 6c 62 61 63 6b 2c 20 70 2c 20 26 7a 45  callback, p, &zE
10210 72 72 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  rr);.  if( rc==S
10220 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 29 7b  QLITE_CORRUPT ){
10230 0a 20 20 20 20 63 68 61 72 20 2a 7a 51 32 3b 0a  .    char *zQ2;.
10240 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 73 74      int len = st
10250 72 6c 65 6e 33 30 28 7a 51 75 65 72 79 29 3b 0a  rlen30(zQuery);.
10260 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
10270 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a 2a 20  ->out, "/****** 
10280 43 4f 52 52 55 50 54 49 4f 4e 20 45 52 52 4f 52  CORRUPTION ERROR
10290 20 2a 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 29 3b 0a 20   *******/\n");. 
102a0 20 20 20 69 66 28 20 7a 45 72 72 20 29 7b 0a 20     if( zErr ){. 
102b0 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
102c0 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a 2a 2a  (p->out, "/*****
102d0 2a 20 25 73 20 2a 2a 2a 2a 2a 2a 2f 5c 6e 22 2c  * %s ******/\n",
102e0 20 7a 45 72 72 29 3b 0a 20 20 20 20 20 20 73 71   zErr);.      sq
102f0 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29  lite3_free(zErr)
10300 3b 0a 20 20 20 20 20 20 7a 45 72 72 20 3d 20 30  ;.      zErr = 0
10310 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 51 32 20  ;.    }.    zQ2 
10320 3d 20 6d 61 6c 6c 6f 63 28 20 6c 65 6e 2b 31 30  = malloc( len+10
10330 30 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 51 32  0 );.    if( zQ2
10340 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 72 63 3b  ==0 ) return rc;
10350 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
10360 72 69 6e 74 66 28 6c 65 6e 2b 31 30 30 2c 20 7a  rintf(len+100, z
10370 51 32 2c 20 22 25 73 20 4f 52 44 45 52 20 42 59  Q2, "%s ORDER BY
10380 20 72 6f 77 69 64 20 44 45 53 43 22 2c 20 7a 51   rowid DESC", zQ
10390 75 65 72 79 29 3b 0a 20 20 20 20 72 63 20 3d 20  uery);.    rc = 
103a0 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e  sqlite3_exec(p->
103b0 64 62 2c 20 7a 51 32 2c 20 64 75 6d 70 5f 63 61  db, zQ2, dump_ca
103c0 6c 6c 62 61 63 6b 2c 20 70 2c 20 26 7a 45 72 72  llback, p, &zErr
103d0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b  );.    if( rc ){
103e0 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
103f0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 2f 2a 2a 2a  tf(p->out, "/***
10400 2a 2a 2a 20 45 52 52 4f 52 3a 20 25 73 20 2a 2a  *** ERROR: %s **
10410 2a 2a 2a 2a 2f 5c 6e 22 2c 20 7a 45 72 72 29 3b  ****/\n", zErr);
10420 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
10430 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
10440 52 52 55 50 54 3b 0a 20 20 20 20 7d 0a 20 20 20  RRUPT;.    }.   
10450 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45   sqlite3_free(zE
10460 72 72 29 3b 0a 20 20 20 20 66 72 65 65 28 7a 51  rr);.    free(zQ
10470 32 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  2);.  }.  return
10480 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65   rc;.}../*.** Te
10490 78 74 20 6f 66 20 61 20 68 65 6c 70 20 6d 65 73  xt of a help mes
104a0 73 61 67 65 0a 2a 2f 0a 73 74 61 74 69 63 20 63  sage.*/.static c
104b0 68 61 72 20 7a 48 65 6c 70 5b 5d 20 3d 0a 23 69  har zHelp[] =.#i
104c0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
104d0 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
104e0 20 20 22 2e 61 75 74 68 20 4f 4e 7c 4f 46 46 20    ".auth ON|OFF 
104f0 20 20 20 20 20 20 20 20 20 20 53 68 6f 77 20 61            Show a
10500 75 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61  uthorizer callba
10510 63 6b 73 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20  cks\n".#endif.  
10520 22 2e 62 61 63 6b 75 70 20 3f 44 42 3f 20 46 49  ".backup ?DB? FI
10530 4c 45 20 20 20 20 20 20 42 61 63 6b 75 70 20 44  LE      Backup D
10540 42 20 28 64 65 66 61 75 6c 74 20 5c 22 6d 61 69  B (default \"mai
10550 6e 5c 22 29 20 74 6f 20 46 49 4c 45 5c 6e 22 0a  n\") to FILE\n".
10560 20 20 22 2e 62 61 69 6c 20 6f 6e 7c 6f 66 66 20    ".bail on|off 
10570 20 20 20 20 20 20 20 20 20 20 53 74 6f 70 20 61            Stop a
10580 66 74 65 72 20 68 69 74 74 69 6e 67 20 61 6e 20  fter hitting an 
10590 65 72 72 6f 72 2e 20 20 44 65 66 61 75 6c 74 20  error.  Default 
105a0 4f 46 46 5c 6e 22 0a 20 20 22 2e 62 69 6e 61 72  OFF\n".  ".binar
105b0 79 20 6f 6e 7c 6f 66 66 20 20 20 20 20 20 20 20  y on|off        
105c0 20 54 75 72 6e 20 62 69 6e 61 72 79 20 6f 75 74   Turn binary out
105d0 70 75 74 20 6f 6e 20 6f 72 20 6f 66 66 2e 20 20  put on or off.  
105e0 44 65 66 61 75 6c 74 20 4f 46 46 5c 6e 22 0a 20  Default OFF\n". 
105f0 20 22 2e 63 68 61 6e 67 65 73 20 6f 6e 7c 6f 66   ".changes on|of
10600 66 20 20 20 20 20 20 20 20 53 68 6f 77 20 6e 75  f        Show nu
10610 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 63 68 61  mber of rows cha
10620 6e 67 65 64 20 62 79 20 53 51 4c 5c 6e 22 0a 20  nged by SQL\n". 
10630 20 22 2e 63 68 65 63 6b 20 47 4c 4f 42 20 20 20   ".check GLOB   
10640 20 20 20 20 20 20 20 20 20 46 61 69 6c 20 69 66           Fail if
10650 20 6f 75 74 70 75 74 20 73 69 6e 63 65 20 2e 74   output since .t
10660 65 73 74 63 61 73 65 20 64 6f 65 73 20 6e 6f 74  estcase does not
10670 20 6d 61 74 63 68 5c 6e 22 0a 20 20 22 2e 63 6c   match\n".  ".cl
10680 6f 6e 65 20 4e 45 57 44 42 20 20 20 20 20 20 20  one NEWDB       
10690 20 20 20 20 43 6c 6f 6e 65 20 64 61 74 61 20 69      Clone data i
106a0 6e 74 6f 20 4e 45 57 44 42 20 66 72 6f 6d 20 74  nto NEWDB from t
106b0 68 65 20 65 78 69 73 74 69 6e 67 20 64 61 74 61  he existing data
106c0 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64 61 74 61  base\n".  ".data
106d0 62 61 73 65 73 20 20 20 20 20 20 20 20 20 20 20  bases           
106e0 20 20 4c 69 73 74 20 6e 61 6d 65 73 20 61 6e 64    List names and
106f0 20 66 69 6c 65 73 20 6f 66 20 61 74 74 61 63 68   files of attach
10700 65 64 20 64 61 74 61 62 61 73 65 73 5c 6e 22 0a  ed databases\n".
10710 20 20 22 2e 64 62 69 6e 66 6f 20 3f 44 42 3f 20    ".dbinfo ?DB? 
10720 20 20 20 20 20 20 20 20 20 20 53 68 6f 77 20 73            Show s
10730 74 61 74 75 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tatus informatio
10740 6e 20 61 62 6f 75 74 20 74 68 65 20 64 61 74 61  n about the data
10750 62 61 73 65 5c 6e 22 0a 20 20 22 2e 64 75 6d 70  base\n".  ".dump
10760 20 3f 54 41 42 4c 45 3f 20 2e 2e 2e 20 20 20 20   ?TABLE? ...    
10770 20 20 44 75 6d 70 20 74 68 65 20 64 61 74 61 62    Dump the datab
10780 61 73 65 20 69 6e 20 61 6e 20 53 51 4c 20 74 65  ase in an SQL te
10790 78 74 20 66 6f 72 6d 61 74 5c 6e 22 0a 20 20 22  xt format\n".  "
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107b0 20 20 20 20 20 20 20 20 20 49 66 20 54 41 42 4c           If TABL
107c0 45 20 73 70 65 63 69 66 69 65 64 2c 20 6f 6e 6c  E specified, onl
107d0 79 20 64 75 6d 70 20 74 61 62 6c 65 73 20 6d 61  y dump tables ma
107e0 74 63 68 69 6e 67 5c 6e 22 0a 20 20 22 20 20 20  tching\n".  "   
107f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10800 20 20 20 20 20 20 4c 49 4b 45 20 70 61 74 74 65        LIKE patte
10810 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a 20 20 22  rn TABLE.\n".  "
10820 2e 65 63 68 6f 20 6f 6e 7c 6f 66 66 20 20 20 20  .echo on|off    
10830 20 20 20 20 20 20 20 54 75 72 6e 20 63 6f 6d 6d         Turn comm
10840 61 6e 64 20 65 63 68 6f 20 6f 6e 20 6f 72 20 6f  and echo on or o
10850 66 66 5c 6e 22 0a 20 20 22 2e 65 71 70 20 6f 6e  ff\n".  ".eqp on
10860 7c 6f 66 66 7c 66 75 6c 6c 20 20 20 20 20 20 20  |off|full       
10870 45 6e 61 62 6c 65 20 6f 72 20 64 69 73 61 62 6c  Enable or disabl
10880 65 20 61 75 74 6f 6d 61 74 69 63 20 45 58 50 4c  e automatic EXPL
10890 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 5c 6e  AIN QUERY PLAN\n
108a0 22 0a 20 20 22 2e 65 78 69 74 20 20 20 20 20 20  ".  ".exit      
108b0 20 20 20 20 20 20 20 20 20 20 20 20 45 78 69 74              Exit
108c0 20 74 68 69 73 20 70 72 6f 67 72 61 6d 5c 6e 22   this program\n"
108d0 0a 20 20 22 2e 65 78 70 6c 61 69 6e 20 3f 6f 6e  .  ".explain ?on
108e0 7c 6f 66 66 7c 61 75 74 6f 3f 20 54 75 72 6e 20  |off|auto? Turn 
108f0 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 6d  EXPLAIN output m
10900 6f 64 65 20 6f 6e 20 6f 72 20 6f 66 66 20 6f 72  ode on or off or
10910 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 5c 6e 22   to automatic\n"
10920 0a 20 20 22 2e 66 75 6c 6c 73 63 68 65 6d 61 20  .  ".fullschema 
10930 3f 2d 2d 69 6e 64 65 6e 74 3f 20 53 68 6f 77 20  ?--indent? Show 
10940 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20 63  schema and the c
10950 6f 6e 74 65 6e 74 20 6f 66 20 73 71 6c 69 74 65  ontent of sqlite
10960 5f 73 74 61 74 20 74 61 62 6c 65 73 5c 6e 22 0a  _stat tables\n".
10970 20 20 22 2e 68 65 61 64 65 72 73 20 6f 6e 7c 6f    ".headers on|o
10980 66 66 20 20 20 20 20 20 20 20 54 75 72 6e 20 64  ff        Turn d
10990 69 73 70 6c 61 79 20 6f 66 20 68 65 61 64 65 72  isplay of header
109a0 73 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a 20  s on or off\n". 
109b0 20 22 2e 68 65 6c 70 20 20 20 20 20 20 20 20 20   ".help         
109c0 20 20 20 20 20 20 20 20 20 53 68 6f 77 20 74 68           Show th
109d0 69 73 20 6d 65 73 73 61 67 65 5c 6e 22 0a 20 20  is message\n".  
109e0 22 2e 69 6d 70 6f 72 74 20 46 49 4c 45 20 54 41  ".import FILE TA
109f0 42 4c 45 20 20 20 20 20 49 6d 70 6f 72 74 20 64  BLE     Import d
10a00 61 74 61 20 66 72 6f 6d 20 46 49 4c 45 20 69 6e  ata from FILE in
10a10 74 6f 20 54 41 42 4c 45 5c 6e 22 0a 23 69 66 6e  to TABLE\n".#ifn
10a20 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
10a30 54 45 53 54 5f 43 4f 4e 54 52 4f 4c 0a 20 20 22  TEST_CONTROL.  "
10a40 2e 69 6d 70 6f 73 74 65 72 20 49 4e 44 45 58 20  .imposter INDEX 
10a50 54 41 42 4c 45 20 20 43 72 65 61 74 65 20 69 6d  TABLE  Create im
10a60 70 6f 73 74 65 72 20 74 61 62 6c 65 20 54 41 42  poster table TAB
10a70 4c 45 20 6f 6e 20 69 6e 64 65 78 20 49 4e 44 45  LE on index INDE
10a80 58 5c 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e  X\n".#endif.  ".
10a90 69 6e 64 65 78 65 73 20 3f 54 41 42 4c 45 3f 20  indexes ?TABLE? 
10aa0 20 20 20 20 20 20 53 68 6f 77 20 6e 61 6d 65 73        Show names
10ab0 20 6f 66 20 61 6c 6c 20 69 6e 64 65 78 65 73 5c   of all indexes\
10ac0 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
10ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
10ae0 66 20 54 41 42 4c 45 20 73 70 65 63 69 66 69 65  f TABLE specifie
10af0 64 2c 20 6f 6e 6c 79 20 73 68 6f 77 20 69 6e 64  d, only show ind
10b00 65 78 65 73 20 66 6f 72 20 74 61 62 6c 65 73 5c  exes for tables\
10b10 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
10b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
10b30 61 74 63 68 69 6e 67 20 4c 49 4b 45 20 70 61 74  atching LIKE pat
10b40 74 65 72 6e 20 54 41 42 4c 45 2e 5c 6e 22 0a 23  tern TABLE.\n".#
10b50 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
10b60 42 4c 45 5f 49 4f 54 52 41 43 45 0a 20 20 22 2e  BLE_IOTRACE.  ".
10b70 69 6f 74 72 61 63 65 20 46 49 4c 45 20 20 20 20  iotrace FILE    
10b80 20 20 20 20 20 20 45 6e 61 62 6c 65 20 49 2f 4f        Enable I/O
10b90 20 64 69 61 67 6e 6f 73 74 69 63 20 6c 6f 67 67   diagnostic logg
10ba0 69 6e 67 20 74 6f 20 46 49 4c 45 5c 6e 22 0a 23  ing to FILE\n".#
10bb0 65 6e 64 69 66 0a 20 20 22 2e 6c 69 6d 69 74 20  endif.  ".limit 
10bc0 3f 4c 49 4d 49 54 3f 20 3f 56 41 4c 3f 20 20 20  ?LIMIT? ?VAL?   
10bd0 44 69 73 70 6c 61 79 20 6f 72 20 63 68 61 6e 67  Display or chang
10be0 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61  e the value of a
10bf0 6e 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5c 6e  n SQLITE_LIMIT\n
10c00 22 0a 20 20 22 2e 6c 69 6e 74 20 4f 50 54 49 4f  ".  ".lint OPTIO
10c10 4e 53 20 20 20 20 20 20 20 20 20 20 52 65 70 6f  NS          Repo
10c20 72 74 20 70 6f 74 65 6e 74 69 61 6c 20 73 63 68  rt potential sch
10c30 65 6d 61 20 69 73 73 75 65 73 2e 20 4f 70 74 69  ema issues. Opti
10c40 6f 6e 73 3a 5c 6e 22 0a 20 20 22 20 20 20 20 20  ons:\n".  "     
10c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c60 20 20 20 20 66 6b 65 79 2d 69 6e 64 65 78 65 73      fkey-indexes
10c70 20 20 20 20 20 46 69 6e 64 20 6d 69 73 73 69 6e       Find missin
10c80 67 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 6e  g foreign key in
10c90 64 65 78 65 73 5c 6e 22 0a 23 69 66 6e 64 65 66  dexes\n".#ifndef
10ca0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
10cb0 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 22 2e  D_EXTENSION.  ".
10cc0 6c 6f 61 64 20 46 49 4c 45 20 3f 45 4e 54 52 59  load FILE ?ENTRY
10cd0 3f 20 20 20 20 20 4c 6f 61 64 20 61 6e 20 65 78  ?     Load an ex
10ce0 74 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72 79 5c  tension library\
10cf0 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 6c 6f  n".#endif.  ".lo
10d00 67 20 46 49 4c 45 7c 6f 66 66 20 20 20 20 20 20  g FILE|off      
10d10 20 20 20 20 54 75 72 6e 20 6c 6f 67 67 69 6e 67      Turn logging
10d20 20 6f 6e 20 6f 72 20 6f 66 66 2e 20 20 46 49 4c   on or off.  FIL
10d30 45 20 63 61 6e 20 62 65 20 73 74 64 65 72 72 2f  E can be stderr/
10d40 73 74 64 6f 75 74 5c 6e 22 0a 20 20 22 2e 6d 6f  stdout\n".  ".mo
10d50 64 65 20 4d 4f 44 45 20 3f 54 41 42 4c 45 3f 20  de MODE ?TABLE? 
10d60 20 20 20 20 53 65 74 20 6f 75 74 70 75 74 20 6d      Set output m
10d70 6f 64 65 20 77 68 65 72 65 20 4d 4f 44 45 20 69  ode where MODE i
10d80 73 20 6f 6e 65 20 6f 66 3a 5c 6e 22 0a 20 20 22  s one of:\n".  "
10d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10da0 20 20 20 20 20 20 20 20 20 61 73 63 69 69 20 20           ascii  
10db0 20 20 43 6f 6c 75 6d 6e 73 2f 72 6f 77 73 20 64    Columns/rows d
10dc0 65 6c 69 6d 69 74 65 64 20 62 79 20 30 78 31 46  elimited by 0x1F
10dd0 20 61 6e 64 20 30 78 31 45 5c 6e 22 0a 20 20 22   and 0x1E\n".  "
10de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10df0 20 20 20 20 20 20 20 20 20 63 73 76 20 20 20 20           csv    
10e00 20 20 43 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65    Comma-separate
10e10 64 20 76 61 6c 75 65 73 5c 6e 22 0a 20 20 22 20  d values\n".  " 
10e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e30 20 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 20 20          column  
10e40 20 4c 65 66 74 2d 61 6c 69 67 6e 65 64 20 63 6f   Left-aligned co
10e50 6c 75 6d 6e 73 2e 20 20 28 53 65 65 20 2e 77 69  lumns.  (See .wi
10e60 64 74 68 29 5c 6e 22 0a 20 20 22 20 20 20 20 20  dth)\n".  "     
10e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e80 20 20 20 20 68 74 6d 6c 20 20 20 20 20 48 54 4d      html     HTM
10e90 4c 20 3c 74 61 62 6c 65 3e 20 63 6f 64 65 5c 6e  L <table> code\n
10ea0 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20  ".  "           
10eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
10ec0 73 65 72 74 20 20 20 53 51 4c 20 69 6e 73 65 72  sert   SQL inser
10ed0 74 20 73 74 61 74 65 6d 65 6e 74 73 20 66 6f 72  t statements for
10ee0 20 54 41 42 4c 45 5c 6e 22 0a 20 20 22 20 20 20   TABLE\n".  "   
10ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f00 20 20 20 20 20 20 6c 69 6e 65 20 20 20 20 20 4f        line     O
10f10 6e 65 20 76 61 6c 75 65 20 70 65 72 20 6c 69 6e  ne value per lin
10f20 65 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20  e\n".  "        
10f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f40 20 6c 69 73 74 20 20 20 20 20 56 61 6c 75 65 73   list     Values
10f50 20 64 65 6c 69 6d 69 74 65 64 20 62 79 20 2e 73   delimited by .s
10f60 65 70 61 72 61 74 6f 72 20 73 74 72 69 6e 67 73  eparator strings
10f70 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20  \n".  "         
10f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f90 71 75 6f 74 65 20 20 20 20 45 73 63 61 70 65 20  quote    Escape 
10fa0 61 6e 73 77 65 72 73 20 61 73 20 66 6f 72 20 53  answers as for S
10fb0 51 4c 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20  QL\n".  "       
10fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fd0 20 20 74 61 62 73 20 20 20 20 20 54 61 62 2d 73    tabs     Tab-s
10fe0 65 70 61 72 61 74 65 64 20 76 61 6c 75 65 73 5c  eparated values\
10ff0 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20 20  n".  "          
11000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
11010 63 6c 20 20 20 20 20 20 54 43 4c 20 6c 69 73 74  cl      TCL list
11020 20 65 6c 65 6d 65 6e 74 73 5c 6e 22 0a 20 20 22   elements\n".  "
11030 2e 6e 75 6c 6c 76 61 6c 75 65 20 53 54 52 49 4e  .nullvalue STRIN
11040 47 20 20 20 20 20 20 55 73 65 20 53 54 52 49 4e  G      Use STRIN
11050 47 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 4e 55  G in place of NU
11060 4c 4c 20 76 61 6c 75 65 73 5c 6e 22 0a 20 20 22  LL values\n".  "
11070 2e 6f 6e 63 65 20 46 49 4c 45 4e 41 4d 45 20 20  .once FILENAME  
11080 20 20 20 20 20 20 20 4f 75 74 70 75 74 20 66 6f         Output fo
11090 72 20 74 68 65 20 6e 65 78 74 20 53 51 4c 20 63  r the next SQL c
110a0 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 20 74 6f 20 46  ommand only to F
110b0 49 4c 45 4e 41 4d 45 5c 6e 22 0a 20 20 22 2e 6f  ILENAME\n".  ".o
110c0 70 65 6e 20 3f 2d 2d 6e 65 77 3f 20 3f 46 49 4c  pen ?--new? ?FIL
110d0 45 3f 20 20 20 43 6c 6f 73 65 20 65 78 69 73 74  E?   Close exist
110e0 69 6e 67 20 64 61 74 61 62 61 73 65 20 61 6e 64  ing database and
110f0 20 72 65 6f 70 65 6e 20 46 49 4c 45 5c 6e 22 0a   reopen FILE\n".
11100 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20    "             
11110 20 20 20 20 20 20 20 20 20 20 20 20 54 68 65 20              The 
11120 2d 2d 6e 65 77 20 73 74 61 72 74 73 20 77 69 74  --new starts wit
11130 68 20 61 6e 20 65 6d 70 74 79 20 66 69 6c 65 5c  h an empty file\
11140 6e 22 0a 20 20 22 2e 6f 75 74 70 75 74 20 3f 46  n".  ".output ?F
11150 49 4c 45 4e 41 4d 45 3f 20 20 20 20 20 53 65 6e  ILENAME?     Sen
11160 64 20 6f 75 74 70 75 74 20 74 6f 20 46 49 4c 45  d output to FILE
11170 4e 41 4d 45 20 6f 72 20 73 74 64 6f 75 74 5c 6e  NAME or stdout\n
11180 22 0a 20 20 22 2e 70 72 69 6e 74 20 53 54 52 49  ".  ".print STRI
11190 4e 47 2e 2e 2e 20 20 20 20 20 20 20 50 72 69 6e  NG...       Prin
111a0 74 20 6c 69 74 65 72 61 6c 20 53 54 52 49 4e 47  t literal STRING
111b0 5c 6e 22 0a 20 20 22 2e 70 72 6f 6d 70 74 20 4d  \n".  ".prompt M
111c0 41 49 4e 20 43 4f 4e 54 49 4e 55 45 20 20 52 65  AIN CONTINUE  Re
111d0 70 6c 61 63 65 20 74 68 65 20 73 74 61 6e 64 61  place the standa
111e0 72 64 20 70 72 6f 6d 70 74 73 5c 6e 22 0a 20 20  rd prompts\n".  
111f0 22 2e 71 75 69 74 20 20 20 20 20 20 20 20 20 20  ".quit          
11200 20 20 20 20 20 20 20 20 45 78 69 74 20 74 68 69          Exit thi
11210 73 20 70 72 6f 67 72 61 6d 5c 6e 22 0a 20 20 22  s program\n".  "
11220 2e 72 65 61 64 20 46 49 4c 45 4e 41 4d 45 20 20  .read FILENAME  
11230 20 20 20 20 20 20 20 45 78 65 63 75 74 65 20 53         Execute S
11240 51 4c 20 69 6e 20 46 49 4c 45 4e 41 4d 45 5c 6e  QL in FILENAME\n
11250 22 0a 20 20 22 2e 72 65 73 74 6f 72 65 20 3f 44  ".  ".restore ?D
11260 42 3f 20 46 49 4c 45 20 20 20 20 20 52 65 73 74  B? FILE     Rest
11270 6f 72 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 44  ore content of D
11280 42 20 28 64 65 66 61 75 6c 74 20 5c 22 6d 61 69  B (default \"mai
11290 6e 5c 22 29 20 66 72 6f 6d 20 46 49 4c 45 5c 6e  n\") from FILE\n
112a0 22 0a 20 20 22 2e 73 61 76 65 20 46 49 4c 45 20  ".  ".save FILE 
112b0 20 20 20 20 20 20 20 20 20 20 20 20 57 72 69 74              Writ
112c0 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  e in-memory data
112d0 62 61 73 65 20 69 6e 74 6f 20 46 49 4c 45 5c 6e  base into FILE\n
112e0 22 0a 20 20 22 2e 73 63 61 6e 73 74 61 74 73 20  ".  ".scanstats 
112f0 6f 6e 7c 6f 66 66 20 20 20 20 20 20 54 75 72 6e  on|off      Turn
11300 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63   sqlite3_stmt_sc
11310 61 6e 73 74 61 74 75 73 28 29 20 6d 65 74 72 69  anstatus() metri
11320 63 73 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22 0a  cs on or off\n".
11330 20 20 22 2e 73 63 68 65 6d 61 20 3f 50 41 54 54    ".schema ?PATT
11340 45 52 4e 3f 20 20 20 20 20 20 53 68 6f 77 20 74  ERN?      Show t
11350 68 65 20 43 52 45 41 54 45 20 73 74 61 74 65 6d  he CREATE statem
11360 65 6e 74 73 20 6d 61 74 63 68 69 6e 67 20 50 41  ents matching PA
11370 54 54 45 52 4e 5c 6e 22 0a 20 20 22 20 20 20 20  TTERN\n".  "    
11380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11390 20 20 20 20 20 20 41 64 64 20 2d 2d 69 6e 64 65        Add --inde
113a0 6e 74 20 66 6f 72 20 70 72 65 74 74 79 2d 70 72  nt for pretty-pr
113b0 69 6e 74 69 6e 67 5c 6e 22 0a 20 20 22 2e 73 65  inting\n".  ".se
113c0 70 61 72 61 74 6f 72 20 43 4f 4c 20 3f 52 4f 57  parator COL ?ROW
113d0 3f 20 20 20 43 68 61 6e 67 65 20 74 68 65 20 63  ?   Change the c
113e0 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 20  olumn separator 
113f0 61 6e 64 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 74  and optionally t
11400 68 65 20 72 6f 77 5c 6e 22 0a 20 20 22 20 20 20  he row\n".  "   
11410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11420 20 20 20 20 20 20 73 65 70 61 72 61 74 6f 72 20        separator 
11430 66 6f 72 20 62 6f 74 68 20 74 68 65 20 6f 75 74  for both the out
11440 70 75 74 20 6d 6f 64 65 20 61 6e 64 20 2e 69 6d  put mode and .im
11450 70 6f 72 74 5c 6e 22 0a 23 69 66 20 64 65 66 69  port\n".#if defi
11460 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
11470 45 5f 53 45 53 53 49 4f 4e 29 0a 20 20 22 2e 73  E_SESSION).  ".s
11480 65 73 73 69 6f 6e 20 43 4d 44 20 2e 2e 2e 20 20  ession CMD ...  
11490 20 20 20 20 20 43 72 65 61 74 65 20 6f 72 20 63       Create or c
114a0 6f 6e 74 72 6f 6c 20 73 65 73 73 69 6f 6e 73 5c  ontrol sessions\
114b0 6e 22 0a 23 65 6e 64 69 66 0a 20 20 22 2e 73 68  n".#endif.  ".sh
114c0 65 6c 6c 20 43 4d 44 20 41 52 47 53 2e 2e 2e 20  ell CMD ARGS... 
114d0 20 20 20 20 52 75 6e 20 43 4d 44 20 41 52 47 53      Run CMD ARGS
114e0 2e 2e 2e 20 69 6e 20 61 20 73 79 73 74 65 6d 20  ... in a system 
114f0 73 68 65 6c 6c 5c 6e 22 0a 20 20 22 2e 73 68 6f  shell\n".  ".sho
11500 77 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  w               
11510 20 20 20 53 68 6f 77 20 74 68 65 20 63 75 72 72     Show the curr
11520 65 6e 74 20 76 61 6c 75 65 73 20 66 6f 72 20 76  ent values for v
11530 61 72 69 6f 75 73 20 73 65 74 74 69 6e 67 73 5c  arious settings\
11540 6e 22 0a 20 20 22 2e 73 74 61 74 73 20 3f 6f 6e  n".  ".stats ?on
11550 7c 6f 66 66 3f 20 20 20 20 20 20 20 20 53 68 6f  |off?        Sho
11560 77 20 73 74 61 74 73 20 6f 72 20 74 75 72 6e 20  w stats or turn 
11570 73 74 61 74 73 20 6f 6e 20 6f 72 20 6f 66 66 5c  stats on or off\
11580 6e 22 0a 20 20 22 2e 73 79 73 74 65 6d 20 43 4d  n".  ".system CM
11590 44 20 41 52 47 53 2e 2e 2e 20 20 20 20 52 75 6e  D ARGS...    Run
115a0 20 43 4d 44 20 41 52 47 53 2e 2e 2e 20 69 6e 20   CMD ARGS... in 
115b0 61 20 73 79 73 74 65 6d 20 73 68 65 6c 6c 5c 6e  a system shell\n
115c0 22 0a 20 20 22 2e 74 61 62 6c 65 73 20 3f 54 41  ".  ".tables ?TA
115d0 42 4c 45 3f 20 20 20 20 20 20 20 20 4c 69 73 74  BLE?        List
115e0 20 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c 65 73   names of tables
115f0 5c 6e 22 0a 20 20 22 20 20 20 20 20 20 20 20 20  \n".  "         
11600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11610 49 66 20 54 41 42 4c 45 20 73 70 65 63 69 66 69  If TABLE specifi
11620 65 64 2c 20 6f 6e 6c 79 20 6c 69 73 74 20 74 61  ed, only list ta
11630 62 6c 65 73 20 6d 61 74 63 68 69 6e 67 5c 6e 22  bles matching\n"
11640 0a 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20  .  "            
11650 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 49 4b               LIK
11660 45 20 70 61 74 74 65 72 6e 20 54 41 42 4c 45 2e  E pattern TABLE.
11670 5c 6e 22 0a 20 20 22 2e 74 65 73 74 63 61 73 65  \n".  ".testcase
11680 20 4e 41 4d 45 20 20 20 20 20 20 20 20 20 42 65   NAME         Be
11690 67 69 6e 20 72 65 64 69 72 65 63 74 69 6e 67 20  gin redirecting 
116a0 6f 75 74 70 75 74 20 74 6f 20 27 74 65 73 74 63  output to 'testc
116b0 61 73 65 2d 6f 75 74 2e 74 78 74 27 5c 6e 22 0a  ase-out.txt'\n".
116c0 20 20 22 2e 74 69 6d 65 6f 75 74 20 4d 53 20 20    ".timeout MS  
116d0 20 20 20 20 20 20 20 20 20 20 54 72 79 20 6f 70            Try op
116e0 65 6e 69 6e 67 20 6c 6f 63 6b 65 64 20 74 61 62  ening locked tab
116f0 6c 65 73 20 66 6f 72 20 4d 53 20 6d 69 6c 6c 69  les for MS milli
11700 73 65 63 6f 6e 64 73 5c 6e 22 0a 20 20 22 2e 74  seconds\n".  ".t
11710 69 6d 65 72 20 6f 6e 7c 6f 66 66 20 20 20 20 20  imer on|off     
11720 20 20 20 20 20 54 75 72 6e 20 53 51 4c 20 74 69       Turn SQL ti
11730 6d 65 72 20 6f 6e 20 6f 72 20 6f 66 66 5c 6e 22  mer on or off\n"
11740 0a 20 20 22 2e 74 72 61 63 65 20 46 49 4c 45 7c  .  ".trace FILE|
11750 6f 66 66 20 20 20 20 20 20 20 20 4f 75 74 70 75  off        Outpu
11760 74 20 65 61 63 68 20 53 51 4c 20 73 74 61 74 65  t each SQL state
11770 6d 65 6e 74 20 61 73 20 69 74 20 69 73 20 72 75  ment as it is ru
11780 6e 5c 6e 22 0a 20 20 22 2e 76 66 73 69 6e 66 6f  n\n".  ".vfsinfo
11790 20 3f 41 55 58 3f 20 20 20 20 20 20 20 20 20 49   ?AUX?         I
117a0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
117b0 20 74 68 65 20 74 6f 70 2d 6c 65 76 65 6c 20 56   the top-level V
117c0 46 53 5c 6e 22 0a 20 20 22 2e 76 66 73 6c 69 73  FS\n".  ".vfslis
117d0 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t               
117e0 4c 69 73 74 20 61 6c 6c 20 61 76 61 69 6c 61 62  List all availab
117f0 6c 65 20 56 46 53 65 73 5c 6e 22 0a 20 20 22 2e  le VFSes\n".  ".
11800 76 66 73 6e 61 6d 65 20 3f 41 55 58 3f 20 20 20  vfsname ?AUX?   
11810 20 20 20 20 20 20 50 72 69 6e 74 20 74 68 65 20        Print the 
11820 6e 61 6d 65 20 6f 66 20 74 68 65 20 56 46 53 20  name of the VFS 
11830 73 74 61 63 6b 5c 6e 22 0a 20 20 22 2e 77 69 64  stack\n".  ".wid
11840 74 68 20 4e 55 4d 31 20 4e 55 4d 32 20 2e 2e 2e  th NUM1 NUM2 ...
11850 20 20 20 53 65 74 20 63 6f 6c 75 6d 6e 20 77 69     Set column wi
11860 64 74 68 73 20 66 6f 72 20 5c 22 63 6f 6c 75 6d  dths for \"colum
11870 6e 5c 22 20 6d 6f 64 65 5c 6e 22 0a 20 20 22 20  n\" mode\n".  " 
11880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11890 20 20 20 20 20 20 20 20 4e 65 67 61 74 69 76 65          Negative
118a0 20 76 61 6c 75 65 73 20 72 69 67 68 74 2d 6a 75   values right-ju
118b0 73 74 69 66 79 5c 6e 22 0a 3b 0a 0a 23 69 66 20  stify\n".;..#if 
118c0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
118d0 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 2f  NABLE_SESSION)./
118e0 2a 0a 2a 2a 20 50 72 69 6e 74 20 68 65 6c 70 20  *.** Print help 
118f0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20  information for 
11900 74 68 65 20 22 2e 73 65 73 73 69 6f 6e 73 22 20  the ".sessions" 
11910 63 6f 6d 6d 61 6e 64 0a 2a 2f 0a 76 6f 69 64 20  command.*/.void 
11920 73 65 73 73 69 6f 6e 5f 68 65 6c 70 28 53 68 65  session_help(She
11930 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 72  llState *p){.  r
11940 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
11950 2c 0a 20 20 20 20 22 2e 73 65 73 73 69 6f 6e 20  ,.    ".session 
11960 3f 4e 41 4d 45 3f 20 53 55 42 43 4f 4d 4d 41 4e  ?NAME? SUBCOMMAN
11970 44 20 3f 41 52 47 53 2e 2e 2e 3f 5c 6e 22 0a 20  D ?ARGS...?\n". 
11980 20 20 20 22 49 66 20 3f 4e 41 4d 45 3f 20 69 73     "If ?NAME? is
11990 20 6f 6d 69 74 74 65 64 2c 20 74 68 65 20 66 69   omitted, the fi
119a0 72 73 74 20 64 65 66 69 6e 65 64 20 73 65 73 73  rst defined sess
119b0 69 6f 6e 20 69 73 20 75 73 65 64 2e 5c 6e 22 0a  ion is used.\n".
119c0 20 20 20 20 22 53 75 62 63 6f 6d 6d 61 6e 64 73      "Subcommands
119d0 3a 5c 6e 22 0a 20 20 20 20 22 20 20 20 61 74 74  :\n".    "   att
119e0 61 63 68 20 54 41 42 4c 45 20 20 20 20 20 20 20  ach TABLE       
119f0 20 20 20 20 20 20 41 74 74 61 63 68 20 54 41 42        Attach TAB
11a00 4c 45 5c 6e 22 0a 20 20 20 20 22 20 20 20 63 68  LE\n".    "   ch
11a10 61 6e 67 65 73 65 74 20 46 49 4c 45 20 20 20 20  angeset FILE    
11a20 20 20 20 20 20 20 20 57 72 69 74 65 20 61 20 63         Write a c
11a30 68 61 6e 67 65 73 65 74 20 69 6e 74 6f 20 46 49  hangeset into FI
11a40 4c 45 5c 6e 22 0a 20 20 20 20 22 20 20 20 63 6c  LE\n".    "   cl
11a50 6f 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  ose             
11a60 20 20 20 20 20 20 20 43 6c 6f 73 65 20 6f 6e 65         Close one
11a70 20 73 65 73 73 69 6f 6e 5c 6e 22 0a 20 20 20 20   session\n".    
11a80 22 20 20 20 65 6e 61 62 6c 65 20 3f 42 4f 4f 4c  "   enable ?BOOL
11a90 45 41 4e 3f 20 20 20 20 20 20 20 20 20 53 65 74  EAN?         Set
11aa0 20 6f 72 20 71 75 65 72 79 20 74 68 65 20 65 6e   or query the en
11ab0 61 62 6c 65 20 62 69 74 5c 6e 22 0a 20 20 20 20  able bit\n".    
11ac0 22 20 20 20 66 69 6c 74 65 72 20 47 4c 4f 42 2e  "   filter GLOB.
11ad0 2e 2e 20 20 20 20 20 20 20 20 20 20 20 52 65 6a  ..           Rej
11ae0 65 63 74 20 74 61 62 6c 65 73 20 6d 61 74 63 68  ect tables match
11af0 69 6e 67 20 47 4c 4f 42 73 5c 6e 22 0a 20 20 20  ing GLOBs\n".   
11b00 20 22 20 20 20 69 6e 64 69 72 65 63 74 20 3f 42   "   indirect ?B
11b10 4f 4f 4c 45 41 4e 3f 20 20 20 20 20 20 20 4d 61  OOLEAN?       Ma
11b20 72 6b 20 6f 72 20 71 75 65 72 79 20 74 68 65 20  rk or query the 
11b30 69 6e 64 69 72 65 63 74 20 73 74 61 74 75 73 5c  indirect status\
11b40 6e 22 0a 20 20 20 20 22 20 20 20 69 73 65 6d 70  n".    "   isemp
11b50 74 79 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ty              
11b60 20 20 20 20 51 75 65 72 79 20 77 68 65 74 68 65      Query whethe
11b70 72 20 74 68 65 20 73 65 73 73 69 6f 6e 20 69 73  r the session is
11b80 20 65 6d 70 74 79 5c 6e 22 0a 20 20 20 20 22 20   empty\n".    " 
11b90 20 20 6c 69 73 74 20 20 20 20 20 20 20 20 20 20    list          
11ba0 20 20 20 20 20 20 20 20 20 20 20 4c 69 73 74 20             List 
11bb0 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 73  currently open s
11bc0 65 73 73 69 6f 6e 20 6e 61 6d 65 73 5c 6e 22 0a  ession names\n".
11bd0 20 20 20 20 22 20 20 20 6f 70 65 6e 20 44 42 20      "   open DB 
11be0 4e 41 4d 45 20 20 20 20 20 20 20 20 20 20 20 20  NAME            
11bf0 20 4f 70 65 6e 20 61 20 6e 65 77 20 73 65 73 73   Open a new sess
11c00 69 6f 6e 20 6f 6e 20 44 42 5c 6e 22 0a 20 20 20  ion on DB\n".   
11c10 20 22 20 20 20 70 61 74 63 68 73 65 74 20 46 49   "   patchset FI
11c20 4c 45 20 20 20 20 20 20 20 20 20 20 20 20 57 72  LE            Wr
11c30 69 74 65 20 61 20 70 61 74 63 68 73 65 74 20 69  ite a patchset i
11c40 6e 74 6f 20 46 49 4c 45 5c 6e 22 0a 20 20 29 3b  nto FILE\n".  );
11c50 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 46  .}.#endif.../* F
11c60 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
11c70 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 70   */.static int p
11c80 72 6f 63 65 73 73 5f 69 6e 70 75 74 28 53 68 65  rocess_input(She
11c90 6c 6c 53 74 61 74 65 20 2a 70 2c 20 46 49 4c 45  llState *p, FILE
11ca0 20 2a 69 6e 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65   *in);../*.** Re
11cb0 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ad the content o
11cc0 66 20 66 69 6c 65 20 7a 4e 61 6d 65 20 69 6e 74  f file zName int
11cd0 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65  o memory obtaine
11ce0 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d  d from sqlite3_m
11cf0 61 6c 6c 6f 63 36 34 28 29 0a 2a 2a 20 61 6e 64  alloc64().** and
11d00 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65   return a pointe
11d10 72 20 74 6f 20 74 68 65 20 62 75 66 66 65 72 2e  r to the buffer.
11d20 20 54 68 65 20 63 61 6c 6c 65 72 20 69 73 20 72   The caller is r
11d30 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 66  esponsible for f
11d40 72 65 65 69 6e 67 20 0a 2a 2a 20 74 68 65 20 6d  reeing .** the m
11d50 65 6d 6f 72 79 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  emory. .**.** If
11d60 20 70 61 72 61 6d 65 74 65 72 20 70 6e 42 79 74   parameter pnByt
11d70 65 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 28  e is not NULL, (
11d80 2a 70 6e 42 79 74 65 29 20 69 73 20 73 65 74 20  *pnByte) is set 
11d90 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
11da0 20 62 79 74 65 73 0a 2a 2a 20 72 65 61 64 2e 0a   bytes.** read..
11db0 2a 2a 0a 2a 2a 20 46 6f 72 20 63 6f 6e 76 65 6e  **.** For conven
11dc0 69 65 6e 63 65 2c 20 61 20 6e 75 6c 2d 74 65 72  ience, a nul-ter
11dd0 6d 69 6e 61 74 6f 72 20 62 79 74 65 20 69 73 20  minator byte is 
11de0 61 6c 77 61 79 73 20 61 70 70 65 6e 64 65 64 20  always appended 
11df0 74 6f 20 74 68 65 20 64 61 74 61 20 72 65 61 64  to the data read
11e00 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 66 69 6c  .** from the fil
11e10 65 20 62 65 66 6f 72 65 20 74 68 65 20 62 75 66  e before the buf
11e20 66 65 72 20 69 73 20 72 65 74 75 72 6e 65 64 2e  fer is returned.
11e30 20 54 68 69 73 20 62 79 74 65 20 69 73 20 6e 6f   This byte is no
11e40 74 20 69 6e 63 6c 75 64 65 64 20 69 6e 0a 2a 2a  t included in.**
11e50 20 74 68 65 20 66 69 6e 61 6c 20 76 61 6c 75 65   the final value
11e60 20 6f 66 20 28 2a 70 6e 42 79 74 65 29 2c 20 69   of (*pnByte), i
11e70 66 20 61 70 70 6c 69 63 61 62 6c 65 2e 0a 2a 2a  f applicable..**
11e80 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20 72 65 74 75  .** NULL is retu
11e90 72 6e 65 64 20 69 66 20 61 6e 79 20 65 72 72 6f  rned if any erro
11ea0 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  r is encountered
11eb0 2e 20 54 68 65 20 66 69 6e 61 6c 20 76 61 6c 75  . The final valu
11ec0 65 20 6f 66 20 2a 70 6e 42 79 74 65 0a 2a 2a 20  e of *pnByte.** 
11ed0 69 73 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 20  is undefined in 
11ee0 74 68 69 73 20 63 61 73 65 2e 0a 2a 2f 0a 73 74  this case..*/.st
11ef0 61 74 69 63 20 63 68 61 72 20 2a 72 65 61 64 46  atic char *readF
11f00 69 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ile(const char *
11f10 7a 4e 61 6d 65 2c 20 69 6e 74 20 2a 70 6e 42 79  zName, int *pnBy
11f20 74 65 29 7b 0a 20 20 46 49 4c 45 20 2a 69 6e 20  te){.  FILE *in 
11f30 3d 20 66 6f 70 65 6e 28 7a 4e 61 6d 65 2c 20 22  = fopen(zName, "
11f40 72 62 22 29 3b 0a 20 20 6c 6f 6e 67 20 6e 49 6e  rb");.  long nIn
11f50 3b 0a 20 20 73 69 7a 65 5f 74 20 6e 52 65 61 64  ;.  size_t nRead
11f60 3b 0a 20 20 63 68 61 72 20 2a 70 42 75 66 3b 0a  ;.  char *pBuf;.
11f70 20 20 69 66 28 20 69 6e 3d 3d 30 20 29 20 72 65    if( in==0 ) re
11f80 74 75 72 6e 20 30 3b 0a 20 20 66 73 65 65 6b 28  turn 0;.  fseek(
11f90 69 6e 2c 20 30 2c 20 53 45 45 4b 5f 45 4e 44 29  in, 0, SEEK_END)
11fa0 3b 0a 20 20 6e 49 6e 20 3d 20 66 74 65 6c 6c 28  ;.  nIn = ftell(
11fb0 69 6e 29 3b 0a 20 20 72 65 77 69 6e 64 28 69 6e  in);.  rewind(in
11fc0 29 3b 0a 20 20 70 42 75 66 20 3d 20 73 71 6c 69  );.  pBuf = sqli
11fd0 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 20 6e 49  te3_malloc64( nI
11fe0 6e 2b 31 20 29 3b 0a 20 20 69 66 28 20 70 42 75  n+1 );.  if( pBu
11ff0 66 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  f==0 ) return 0;
12000 0a 20 20 6e 52 65 61 64 20 3d 20 66 72 65 61 64  .  nRead = fread
12010 28 70 42 75 66 2c 20 6e 49 6e 2c 20 31 2c 20 69  (pBuf, nIn, 1, i
12020 6e 29 3b 0a 20 20 66 63 6c 6f 73 65 28 69 6e 29  n);.  fclose(in)
12030 3b 0a 20 20 69 66 28 20 6e 52 65 61 64 21 3d 31  ;.  if( nRead!=1
12040 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
12050 66 72 65 65 28 70 42 75 66 29 3b 0a 20 20 20 20  free(pBuf);.    
12060 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
12070 70 42 75 66 5b 6e 49 6e 5d 20 3d 20 30 3b 0a 20  pBuf[nIn] = 0;. 
12080 20 69 66 28 20 70 6e 42 79 74 65 20 29 20 2a 70   if( pnByte ) *p
12090 6e 42 79 74 65 20 3d 20 6e 49 6e 3b 0a 20 20 72  nByte = nIn;.  r
120a0 65 74 75 72 6e 20 70 42 75 66 3b 0a 7d 0a 0a 2f  eturn pBuf;.}../
120b0 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74  *.** Implementat
120c0 69 6f 6e 20 6f 66 20 74 68 65 20 22 72 65 61 64  ion of the "read
120d0 66 69 6c 65 28 58 29 22 20 53 51 4c 20 66 75 6e  file(X)" SQL fun
120e0 63 74 69 6f 6e 2e 20 20 54 68 65 20 65 6e 74 69  ction.  The enti
120f0 72 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66  re content.** of
12100 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 64 20   the file named 
12110 58 20 69 73 20 72 65 61 64 20 61 6e 64 20 72 65  X is read and re
12120 74 75 72 6e 65 64 20 61 73 20 61 20 42 4c 4f 42  turned as a BLOB
12130 2e 20 20 4e 55 4c 4c 20 69 73 20 72 65 74 75 72  .  NULL is retur
12140 6e 65 64 0a 2a 2a 20 69 66 20 74 68 65 20 66 69  ned.** if the fi
12150 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  le does not exis
12160 74 20 6f 72 20 69 73 20 75 6e 72 65 61 64 61 62  t or is unreadab
12170 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  le..*/.static vo
12180 69 64 20 72 65 61 64 66 69 6c 65 46 75 6e 63 28  id readfileFunc(
12190 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
121a0 78 74 20 2a 63 6f 6e 74 65 78 74 2c 0a 20 20 69  xt *context,.  i
121b0 6e 74 20 61 72 67 63 2c 0a 20 20 73 71 6c 69 74  nt argc,.  sqlit
121c0 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a  e3_value **argv.
121d0 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ){.  const char 
121e0 2a 7a 4e 61 6d 65 3b 0a 20 20 76 6f 69 64 20 2a  *zName;.  void *
121f0 70 42 75 66 3b 0a 20 20 69 6e 74 20 6e 42 75 66  pBuf;.  int nBuf
12200 3b 0a 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41  ;..  UNUSED_PARA
12210 4d 45 54 45 52 28 61 72 67 63 29 3b 0a 20 20 7a  METER(argc);.  z
12220 4e 61 6d 65 20 3d 20 28 63 6f 6e 73 74 20 63 68  Name = (const ch
12230 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
12240 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29 3b  e_text(argv[0]);
12250 0a 20 20 69 66 28 20 7a 4e 61 6d 65 3d 3d 30 20  .  if( zName==0 
12260 29 20 72 65 74 75 72 6e 3b 0a 20 20 70 42 75 66  ) return;.  pBuf
12270 20 3d 20 72 65 61 64 46 69 6c 65 28 7a 4e 61 6d   = readFile(zNam
12280 65 2c 20 26 6e 42 75 66 29 3b 0a 20 20 69 66 28  e, &nBuf);.  if(
12290 20 70 42 75 66 20 29 20 73 71 6c 69 74 65 33 5f   pBuf ) sqlite3_
122a0 72 65 73 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e 74  result_blob(cont
122b0 65 78 74 2c 20 70 42 75 66 2c 20 6e 42 75 66 2c  ext, pBuf, nBuf,
122c0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a   sqlite3_free);.
122d0 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65  }../*.** Impleme
122e0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 22  ntation of the "
122f0 77 72 69 74 65 66 69 6c 65 28 58 2c 59 29 22 20  writefile(X,Y)" 
12300 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  SQL function.  T
12310 68 65 20 61 72 67 75 6d 65 6e 74 20 59 0a 2a 2a  he argument Y.**
12320 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f   is written into
12330 20 66 69 6c 65 20 58 2e 20 20 54 68 65 20 6e 75   file X.  The nu
12340 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 77 72  mber of bytes wr
12350 69 74 74 65 6e 20 69 73 20 72 65 74 75 72 6e 65  itten is returne
12360 64 2e 20 20 4f 72 0a 2a 2a 20 4e 55 4c 4c 20 69  d.  Or.** NULL i
12370 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 73 6f  s returned if so
12380 6d 65 74 68 69 6e 67 20 67 6f 65 73 20 77 72 6f  mething goes wro
12390 6e 67 2c 20 73 75 63 68 20 61 73 20 62 65 69 6e  ng, such as bein
123a0 67 20 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e  g unable to open
123b0 0a 2a 2a 20 66 69 6c 65 20 58 20 66 6f 72 20 77  .** file X for w
123c0 72 69 74 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69  riting..*/.stati
123d0 63 20 76 6f 69 64 20 77 72 69 74 65 66 69 6c 65  c void writefile
123e0 46 75 6e 63 28 0a 20 20 73 71 6c 69 74 65 33 5f  Func(.  sqlite3_
123f0 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74  context *context
12400 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20  ,.  int argc,.  
12410 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
12420 61 72 67 76 0a 29 7b 0a 20 20 46 49 4c 45 20 2a  argv.){.  FILE *
12430 6f 75 74 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  out;.  const cha
12440 72 20 2a 7a 3b 0a 20 20 73 71 6c 69 74 65 33 5f  r *z;.  sqlite3_
12450 69 6e 74 36 34 20 72 63 3b 0a 20 20 63 6f 6e 73  int64 rc;.  cons
12460 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 3b 0a 0a  t char *zFile;..
12470 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54    UNUSED_PARAMET
12480 45 52 28 61 72 67 63 29 3b 0a 20 20 7a 46 69 6c  ER(argc);.  zFil
12490 65 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  e = (const char*
124a0 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
124b0 65 78 74 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20  ext(argv[0]);.  
124c0 69 66 28 20 7a 46 69 6c 65 3d 3d 30 20 29 20 72  if( zFile==0 ) r
124d0 65 74 75 72 6e 3b 0a 20 20 6f 75 74 20 3d 20 66  eturn;.  out = f
124e0 6f 70 65 6e 28 7a 46 69 6c 65 2c 20 22 77 62 22  open(zFile, "wb"
124f0 29 3b 0a 20 20 69 66 28 20 6f 75 74 3d 3d 30 20  );.  if( out==0 
12500 29 20 72 65 74 75 72 6e 3b 0a 20 20 7a 20 3d 20  ) return;.  z = 
12510 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
12520 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28  ite3_value_blob(
12530 61 72 67 76 5b 31 5d 29 3b 0a 20 20 69 66 28 20  argv[1]);.  if( 
12540 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  z==0 ){.    rc =
12550 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
12560 20 72 63 20 3d 20 66 77 72 69 74 65 28 7a 2c 20   rc = fwrite(z, 
12570 31 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  1, sqlite3_value
12580 5f 62 79 74 65 73 28 61 72 67 76 5b 31 5d 29 2c  _bytes(argv[1]),
12590 20 6f 75 74 29 3b 0a 20 20 7d 0a 20 20 66 63 6c   out);.  }.  fcl
125a0 6f 73 65 28 6f 75 74 29 3b 0a 20 20 73 71 6c 69  ose(out);.  sqli
125b0 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34  te3_result_int64
125c0 28 63 6f 6e 74 65 78 74 2c 20 72 63 29 3b 0a 7d  (context, rc);.}
125d0 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
125e0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53  LITE_ENABLE_SESS
125f0 49 4f 4e 29 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65  ION)./*.** Close
12600 20 61 20 73 69 6e 67 6c 65 20 4f 70 65 6e 53 65   a single OpenSe
12610 73 73 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64  ssion object and
12620 20 72 65 6c 65 61 73 65 20 61 6c 6c 20 6f 66 20   release all of 
12630 69 74 73 20 61 73 73 6f 63 69 61 74 65 64 0a 2a  its associated.*
12640 2a 20 72 65 73 6f 75 72 63 65 73 2e 0a 2a 2f 0a  * resources..*/.
12650 73 74 61 74 69 63 20 76 6f 69 64 20 73 65 73 73  static void sess
12660 69 6f 6e 5f 63 6c 6f 73 65 28 4f 70 65 6e 53 65  ion_close(OpenSe
12670 73 73 69 6f 6e 20 2a 70 53 65 73 73 69 6f 6e 29  ssion *pSession)
12680 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c  {.  int i;.  sql
12690 69 74 65 33 73 65 73 73 69 6f 6e 5f 64 65 6c 65  ite3session_dele
126a0 74 65 28 70 53 65 73 73 69 6f 6e 2d 3e 70 29 3b  te(pSession->p);
126b0 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
126c0 70 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 29  pSession->zName)
126d0 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70  ;.  for(i=0; i<p
126e0 53 65 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72  Session->nFilter
126f0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  ; i++){.    sqli
12700 74 65 33 5f 66 72 65 65 28 70 53 65 73 73 69 6f  te3_free(pSessio
12710 6e 2d 3e 61 7a 46 69 6c 74 65 72 5b 69 5d 29 3b  n->azFilter[i]);
12720 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66  .  }.  sqlite3_f
12730 72 65 65 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a  ree(pSession->az
12740 46 69 6c 74 65 72 29 3b 0a 20 20 6d 65 6d 73 65  Filter);.  memse
12750 74 28 70 53 65 73 73 69 6f 6e 2c 20 30 2c 20 73  t(pSession, 0, s
12760 69 7a 65 6f 66 28 4f 70 65 6e 53 65 73 73 69 6f  izeof(OpenSessio
12770 6e 29 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  n));.}.#endif../
12780 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 6c 6c 20 4f  *.** Close all O
12790 70 65 6e 53 65 73 73 69 6f 6e 20 6f 62 6a 65 63  penSession objec
127a0 74 73 20 61 6e 64 20 72 65 6c 65 61 73 65 20 61  ts and release a
127b0 6c 6c 20 61 73 73 6f 63 69 61 74 65 64 20 72 65  ll associated re
127c0 73 6f 75 72 63 65 73 2e 0a 2a 2f 0a 23 69 66 20  sources..*/.#if 
127d0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
127e0 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 73  NABLE_SESSION).s
127f0 74 61 74 69 63 20 76 6f 69 64 20 73 65 73 73 69  tatic void sessi
12800 6f 6e 5f 63 6c 6f 73 65 5f 61 6c 6c 28 53 68 65  on_close_all(She
12810 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a 20 20 69  llState *p){.  i
12820 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  nt i;.  for(i=0;
12830 20 69 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 3b 20   i<p->nSession; 
12840 69 2b 2b 29 7b 0a 20 20 20 20 73 65 73 73 69 6f  i++){.    sessio
12850 6e 5f 63 6c 6f 73 65 28 26 70 2d 3e 61 53 65 73  n_close(&p->aSes
12860 73 69 6f 6e 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20  sion[i]);.  }.  
12870 70 2d 3e 6e 53 65 73 73 69 6f 6e 20 3d 20 30 3b  p->nSession = 0;
12880 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  .}.#else.# defin
12890 65 20 73 65 73 73 69 6f 6e 5f 63 6c 6f 73 65 5f  e session_close_
128a0 61 6c 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  all(X).#endif../
128b0 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74  *.** Implementat
128c0 69 6f 6e 20 6f 66 20 74 68 65 20 78 46 69 6c 74  ion of the xFilt
128d0 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  er function for 
128e0 61 6e 20 6f 70 65 6e 20 73 65 73 73 69 6f 6e 2e  an open session.
128f0 20 20 4f 6d 69 74 0a 2a 2a 20 61 6e 79 20 74 61    Omit.** any ta
12900 62 6c 65 73 20 6e 61 6d 65 64 20 62 79 20 22 2e  bles named by ".
12910 73 65 73 73 69 6f 6e 20 66 69 6c 74 65 72 22 20  session filter" 
12920 62 75 74 20 6c 65 74 20 61 6c 6c 20 6f 74 68 65  but let all othe
12930 72 20 74 61 62 6c 65 20 74 68 72 6f 75 67 68 2e  r table through.
12940 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
12950 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45  SQLITE_ENABLE_SE
12960 53 53 49 4f 4e 29 0a 73 74 61 74 69 63 20 69 6e  SSION).static in
12970 74 20 73 65 73 73 69 6f 6e 5f 66 69 6c 74 65 72  t session_filter
12980 28 76 6f 69 64 20 2a 70 43 74 78 2c 20 63 6f 6e  (void *pCtx, con
12990 73 74 20 63 68 61 72 20 2a 7a 54 61 62 29 7b 0a  st char *zTab){.
129a0 20 20 4f 70 65 6e 53 65 73 73 69 6f 6e 20 2a 70    OpenSession *p
129b0 53 65 73 73 69 6f 6e 20 3d 20 28 4f 70 65 6e 53  Session = (OpenS
129c0 65 73 73 69 6f 6e 2a 29 70 43 74 78 3b 0a 20 20  ession*)pCtx;.  
129d0 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30  int i;.  for(i=0
129e0 3b 20 69 3c 70 53 65 73 73 69 6f 6e 2d 3e 6e 46  ; i<pSession->nF
129f0 69 6c 74 65 72 3b 20 69 2b 2b 29 7b 0a 20 20 20  ilter; i++){.   
12a00 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72   if( sqlite3_str
12a10 67 6c 6f 62 28 70 53 65 73 73 69 6f 6e 2d 3e 61  glob(pSession->a
12a20 7a 46 69 6c 74 65 72 5b 69 5d 2c 20 7a 54 61 62  zFilter[i], zTab
12a30 29 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  )==0 ) return 0;
12a40 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b  .  }.  return 1;
12a50 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  .}.#endif../*.**
12a60 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 64   Make sure the d
12a70 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2e  atabase is open.
12a80 20 20 49 66 20 69 74 20 69 73 20 6e 6f 74 2c 20    If it is not, 
12a90 74 68 65 6e 20 6f 70 65 6e 20 69 74 2e 20 20 49  then open it.  I
12aa0 66 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73  f.** the databas
12ab0 65 20 66 61 69 6c 73 20 74 6f 20 6f 70 65 6e 2c  e fails to open,
12ac0 20 70 72 69 6e 74 20 61 6e 20 65 72 72 6f 72 20   print an error 
12ad0 6d 65 73 73 61 67 65 20 61 6e 64 20 65 78 69 74  message and exit
12ae0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
12af0 20 6f 70 65 6e 5f 64 62 28 53 68 65 6c 6c 53 74   open_db(ShellSt
12b00 61 74 65 20 2a 70 2c 20 69 6e 74 20 6b 65 65 70  ate *p, int keep
12b10 41 6c 69 76 65 29 7b 0a 20 20 69 66 28 20 70 2d  Alive){.  if( p-
12b20 3e 64 62 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  >db==0 ){.    sq
12b30 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
12b40 28 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  ();.    sqlite3_
12b50 6f 70 65 6e 28 70 2d 3e 7a 44 62 46 69 6c 65 6e  open(p->zDbFilen
12b60 61 6d 65 2c 20 26 70 2d 3e 64 62 29 3b 0a 20 20  ame, &p->db);.  
12b70 20 20 67 6c 6f 62 61 6c 44 62 20 3d 20 70 2d 3e    globalDb = p->
12b80 64 62 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64  db;.    if( p->d
12b90 62 20 26 26 20 73 71 6c 69 74 65 33 5f 65 72 72  b && sqlite3_err
12ba0 63 6f 64 65 28 70 2d 3e 64 62 29 3d 3d 53 51 4c  code(p->db)==SQL
12bb0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
12bc0 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
12bd0 75 6e 63 74 69 6f 6e 28 70 2d 3e 64 62 2c 20 22  unction(p->db, "
12be0 73 68 65 6c 6c 73 74 61 74 69 63 22 2c 20 30 2c  shellstatic", 0,
12bf0 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c   SQLITE_UTF8, 0,
12c00 0a 20 20 20 20 20 20 20 20 20 20 73 68 65 6c 6c  .          shell
12c10 73 74 61 74 69 63 46 75 6e 63 2c 20 30 2c 20 30  staticFunc, 0, 0
12c20 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
12c30 20 70 2d 3e 64 62 3d 3d 30 20 7c 7c 20 53 51 4c   p->db==0 || SQL
12c40 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 5f  ITE_OK!=sqlite3_
12c50 65 72 72 63 6f 64 65 28 70 2d 3e 64 62 29 20 29  errcode(p->db) )
12c60 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
12c70 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f  ntf(stderr,"Erro
12c80 72 3a 20 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65  r: unable to ope
12c90 6e 20 64 61 74 61 62 61 73 65 20 5c 22 25 73 5c  n database \"%s\
12ca0 22 3a 20 25 73 5c 6e 22 2c 0a 20 20 20 20 20 20  ": %s\n",.      
12cb0 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c 65 6e 61      p->zDbFilena
12cc0 6d 65 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  me, sqlite3_errm
12cd0 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20  sg(p->db));.    
12ce0 20 20 69 66 28 20 6b 65 65 70 41 6c 69 76 65 20    if( keepAlive 
12cf0 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  ) return;.      
12d00 65 78 69 74 28 31 29 3b 0a 20 20 20 20 7d 0a 23  exit(1);.    }.#
12d10 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
12d20 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
12d30 4e 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 6e  N.    sqlite3_en
12d40 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  able_load_extens
12d50 69 6f 6e 28 70 2d 3e 64 62 2c 20 31 29 3b 0a 23  ion(p->db, 1);.#
12d60 65 6e 64 69 66 0a 20 20 20 20 73 71 6c 69 74 65  endif.    sqlite
12d70 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
12d80 6e 28 70 2d 3e 64 62 2c 20 22 72 65 61 64 66 69  n(p->db, "readfi
12d90 6c 65 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55  le", 1, SQLITE_U
12da0 54 46 38 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  TF8, 0,.        
12db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dc0 20 20 20 20 72 65 61 64 66 69 6c 65 46 75 6e 63      readfileFunc
12dd0 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c  , 0, 0);.    sql
12de0 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
12df0 74 69 6f 6e 28 70 2d 3e 64 62 2c 20 22 77 72 69  tion(p->db, "wri
12e00 74 65 66 69 6c 65 22 2c 20 32 2c 20 53 51 4c 49  tefile", 2, SQLI
12e10 54 45 5f 55 54 46 38 2c 20 30 2c 0a 20 20 20 20  TE_UTF8, 0,.    
12e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e30 20 20 20 20 20 20 20 20 77 72 69 74 65 66 69 6c          writefil
12e40 65 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20 20  eFunc, 0, 0);.  
12e50 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 6f 20 43 2d  }.}../*.** Do C-
12e60 6c 61 6e 67 75 61 67 65 20 73 74 79 6c 65 20 64  language style d
12e70 65 71 75 6f 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  equoting..**.** 
12e80 20 20 20 5c 61 20 20 20 20 2d 3e 20 61 6c 61 72     \a    -> alar
12e90 6d 0a 2a 2a 20 20 20 20 5c 62 20 20 20 20 2d 3e  m.**    \b    ->
12ea0 20 62 61 63 6b 73 70 61 63 65 0a 2a 2a 20 20 20   backspace.**   
12eb0 20 5c 74 20 20 20 20 2d 3e 20 74 61 62 0a 2a 2a   \t    -> tab.**
12ec0 20 20 20 20 5c 6e 20 20 20 20 2d 3e 20 6e 65 77      \n    -> new
12ed0 6c 69 6e 65 0a 2a 2a 20 20 20 20 5c 76 20 20 20  line.**    \v   
12ee0 20 2d 3e 20 76 65 72 74 69 63 61 6c 20 74 61 62   -> vertical tab
12ef0 0a 2a 2a 20 20 20 20 5c 66 20 20 20 20 2d 3e 20  .**    \f    -> 
12f00 66 6f 72 6d 20 66 65 65 64 0a 2a 2a 20 20 20 20  form feed.**    
12f10 5c 72 20 20 20 20 2d 3e 20 63 61 72 72 69 61 67  \r    -> carriag
12f20 65 20 72 65 74 75 72 6e 0a 2a 2a 20 20 20 20 5c  e return.**    \
12f30 73 20 20 20 20 2d 3e 20 73 70 61 63 65 0a 2a 2a  s    -> space.**
12f40 20 20 20 20 5c 22 20 20 20 20 2d 3e 20 22 0a 2a      \"    -> ".*
12f50 2a 20 20 20 20 5c 27 20 20 20 20 2d 3e 20 27 0a  *    \'    -> '.
12f60 2a 2a 20 20 20 20 5c 5c 20 20 20 20 2d 3e 20 62  **    \\    -> b
12f70 61 63 6b 73 6c 61 73 68 0a 2a 2a 20 20 20 20 5c  ackslash.**    \
12f80 4e 4e 4e 20 20 2d 3e 20 61 73 63 69 69 20 63 68  NNN  -> ascii ch
12f90 61 72 61 63 74 65 72 20 4e 4e 4e 20 69 6e 20 6f  aracter NNN in o
12fa0 63 74 61 6c 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ctal.*/.static v
12fb0 6f 69 64 20 72 65 73 6f 6c 76 65 5f 62 61 63 6b  oid resolve_back
12fc0 73 6c 61 73 68 65 73 28 63 68 61 72 20 2a 7a 29  slashes(char *z)
12fd0 7b 0a 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 20  {.  int i, j;.  
12fe0 63 68 61 72 20 63 3b 0a 20 20 77 68 69 6c 65 28  char c;.  while(
12ff0 20 2a 7a 20 26 26 20 2a 7a 21 3d 27 5c 5c 27 20   *z && *z!='\\' 
13000 29 20 7a 2b 2b 3b 0a 20 20 66 6f 72 28 69 3d 6a  ) z++;.  for(i=j
13010 3d 30 3b 20 28 63 20 3d 20 7a 5b 69 5d 29 21 3d  =0; (c = z[i])!=
13020 30 3b 20 69 2b 2b 2c 20 6a 2b 2b 29 7b 0a 20 20  0; i++, j++){.  
13030 20 20 69 66 28 20 63 3d 3d 27 5c 5c 27 20 26 26    if( c=='\\' &&
13040 20 7a 5b 69 2b 31 5d 21 3d 30 20 29 7b 0a 20 20   z[i+1]!=0 ){.  
13050 20 20 20 20 63 20 3d 20 7a 5b 2b 2b 69 5d 3b 0a      c = z[++i];.
13060 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 61 27        if( c=='a'
13070 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20   ){.        c = 
13080 27 5c 61 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73  '\a';.      }els
13090 65 20 69 66 28 20 63 3d 3d 27 62 27 20 29 7b 0a  e if( c=='b' ){.
130a0 20 20 20 20 20 20 20 20 63 20 3d 20 27 5c 62 27          c = '\b'
130b0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
130c0 28 20 63 3d 3d 27 74 27 20 29 7b 0a 20 20 20 20  ( c=='t' ){.    
130d0 20 20 20 20 63 20 3d 20 27 5c 74 27 3b 0a 20 20      c = '\t';.  
130e0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
130f0 3d 27 6e 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='n' ){.        
13100 63 20 3d 20 27 5c 6e 27 3b 0a 20 20 20 20 20 20  c = '\n';.      
13110 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 76 27  }else if( c=='v'
13120 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20   ){.        c = 
13130 27 5c 76 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73  '\v';.      }els
13140 65 20 69 66 28 20 63 3d 3d 27 66 27 20 29 7b 0a  e if( c=='f' ){.
13150 20 20 20 20 20 20 20 20 63 20 3d 20 27 5c 66 27          c = '\f'
13160 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
13170 28 20 63 3d 3d 27 72 27 20 29 7b 0a 20 20 20 20  ( c=='r' ){.    
13180 20 20 20 20 63 20 3d 20 27 5c 72 27 3b 0a 20 20      c = '\r';.  
13190 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
131a0 3d 27 22 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='"' ){.        
131b0 63 20 3d 20 27 22 27 3b 0a 20 20 20 20 20 20 7d  c = '"';.      }
131c0 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 5c 27 27  else if( c=='\''
131d0 20 29 7b 0a 20 20 20 20 20 20 20 20 63 20 3d 20   ){.        c = 
131e0 27 5c 27 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73  '\'';.      }els
131f0 65 20 69 66 28 20 63 3d 3d 27 5c 5c 27 20 29 7b  e if( c=='\\' ){
13200 0a 20 20 20 20 20 20 20 20 63 20 3d 20 27 5c 5c  .        c = '\\
13210 27 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  ';.      }else i
13220 66 28 20 63 3e 3d 27 30 27 20 26 26 20 63 3c 3d  f( c>='0' && c<=
13230 27 37 27 20 29 7b 0a 20 20 20 20 20 20 20 20 63  '7' ){.        c
13240 20 2d 3d 20 27 30 27 3b 0a 20 20 20 20 20 20 20   -= '0';.       
13250 20 69 66 28 20 7a 5b 69 2b 31 5d 3e 3d 27 30 27   if( z[i+1]>='0'
13260 20 26 26 20 7a 5b 69 2b 31 5d 3c 3d 27 37 27 20   && z[i+1]<='7' 
13270 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 2b 2b  ){.          i++
13280 3b 0a 20 20 20 20 20 20 20 20 20 20 63 20 3d 20  ;.          c = 
13290 28 63 3c 3c 33 29 20 2b 20 7a 5b 69 5d 20 2d 20  (c<<3) + z[i] - 
132a0 27 30 27 3b 0a 20 20 20 20 20 20 20 20 20 20 69  '0';.          i
132b0 66 28 20 7a 5b 69 2b 31 5d 3e 3d 27 30 27 20 26  f( z[i+1]>='0' &
132c0 26 20 7a 5b 69 2b 31 5d 3c 3d 27 37 27 20 29 7b  & z[i+1]<='7' ){
132d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 2b 2b  .            i++
132e0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 20  ;.            c 
132f0 3d 20 28 63 3c 3c 33 29 20 2b 20 7a 5b 69 5d 20  = (c<<3) + z[i] 
13300 2d 20 27 30 27 3b 0a 20 20 20 20 20 20 20 20 20  - '0';.         
13310 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
13320 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a     }.    }.    z
13330 5b 6a 5d 20 3d 20 63 3b 0a 20 20 7d 0a 20 20 69  [j] = c;.  }.  i
13340 66 28 20 6a 3c 69 20 29 20 7a 5b 6a 5d 20 3d 20  f( j<i ) z[j] = 
13350 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  0;.}../*.** Retu
13360 72 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  rn the value of 
13370 61 20 68 65 78 61 64 65 63 69 6d 61 6c 20 64 69  a hexadecimal di
13380 67 69 74 2e 20 20 52 65 74 75 72 6e 20 2d 31 20  git.  Return -1 
13390 69 66 20 74 68 65 20 69 6e 70 75 74 0a 2a 2a 20  if the input.** 
133a0 69 73 20 6e 6f 74 20 61 20 68 65 78 20 64 69 67  is not a hex dig
133b0 69 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  it..*/.static in
133c0 74 20 68 65 78 44 69 67 69 74 56 61 6c 75 65 28  t hexDigitValue(
133d0 63 68 61 72 20 63 29 7b 0a 20 20 69 66 28 20 63  char c){.  if( c
133e0 3e 3d 27 30 27 20 26 26 20 63 3c 3d 27 39 27 20  >='0' && c<='9' 
133f0 29 20 72 65 74 75 72 6e 20 63 20 2d 20 27 30 27  ) return c - '0'
13400 3b 0a 20 20 69 66 28 20 63 3e 3d 27 61 27 20 26  ;.  if( c>='a' &
13410 26 20 63 3c 3d 27 66 27 20 29 20 72 65 74 75 72  & c<='f' ) retur
13420 6e 20 63 20 2d 20 27 61 27 20 2b 20 31 30 3b 0a  n c - 'a' + 10;.
13430 20 20 69 66 28 20 63 3e 3d 27 41 27 20 26 26 20    if( c>='A' && 
13440 63 3c 3d 27 46 27 20 29 20 72 65 74 75 72 6e 20  c<='F' ) return 
13450 63 20 2d 20 27 41 27 20 2b 20 31 30 3b 0a 20 20  c - 'A' + 10;.  
13460 72 65 74 75 72 6e 20 2d 31 3b 0a 7d 0a 0a 2f 2a  return -1;.}../*
13470 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 7a 41  .** Interpret zA
13480 72 67 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  rg as an integer
13490 20 76 61 6c 75 65 2c 20 70 6f 73 73 69 62 6c 79   value, possibly
134a0 20 77 69 74 68 20 73 75 66 66 69 78 65 73 2e 0a   with suffixes..
134b0 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c 69 74 65  */.static sqlite
134c0 33 5f 69 6e 74 36 34 20 69 6e 74 65 67 65 72 56  3_int64 integerV
134d0 61 6c 75 65 28 63 6f 6e 73 74 20 63 68 61 72 20  alue(const char 
134e0 2a 7a 41 72 67 29 7b 0a 20 20 73 71 6c 69 74 65  *zArg){.  sqlite
134f0 33 5f 69 6e 74 36 34 20 76 20 3d 20 30 3b 0a 20  3_int64 v = 0;. 
13500 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74   static const st
13510 72 75 63 74 20 7b 20 63 68 61 72 20 2a 7a 53 75  ruct { char *zSu
13520 66 66 69 78 3b 20 69 6e 74 20 69 4d 75 6c 74 3b  ffix; int iMult;
13530 20 7d 20 61 4d 75 6c 74 5b 5d 20 3d 20 7b 0a 20   } aMult[] = {. 
13540 20 20 20 7b 20 22 4b 69 42 22 2c 20 31 30 32 34     { "KiB", 1024
13550 20 7d 2c 0a 20 20 20 20 7b 20 22 4d 69 42 22 2c   },.    { "MiB",
13560 20 31 30 32 34 2a 31 30 32 34 20 7d 2c 0a 20 20   1024*1024 },.  
13570 20 20 7b 20 22 47 69 42 22 2c 20 31 30 32 34 2a    { "GiB", 1024*
13580 31 30 32 34 2a 31 30 32 34 20 7d 2c 0a 20 20 20  1024*1024 },.   
13590 20 7b 20 22 4b 42 22 2c 20 20 31 30 30 30 20 7d   { "KB",  1000 }
135a0 2c 0a 20 20 20 20 7b 20 22 4d 42 22 2c 20 20 31  ,.    { "MB",  1
135b0 30 30 30 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20  000000 },.    { 
135c0 22 47 42 22 2c 20 20 31 30 30 30 30 30 30 30 30  "GB",  100000000
135d0 30 20 7d 2c 0a 20 20 20 20 7b 20 22 4b 22 2c 20  0 },.    { "K", 
135e0 20 20 31 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20    1000 },.    { 
135f0 22 4d 22 2c 20 20 20 31 30 30 30 30 30 30 20 7d  "M",   1000000 }
13600 2c 0a 20 20 20 20 7b 20 22 47 22 2c 20 20 20 31  ,.    { "G",   1
13610 30 30 30 30 30 30 30 30 30 20 7d 2c 0a 20 20 7d  000000000 },.  }
13620 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74  ;.  int i;.  int
13630 20 69 73 4e 65 67 20 3d 20 30 3b 0a 20 20 69 66   isNeg = 0;.  if
13640 28 20 7a 41 72 67 5b 30 5d 3d 3d 27 2d 27 20 29  ( zArg[0]=='-' )
13650 7b 0a 20 20 20 20 69 73 4e 65 67 20 3d 20 31 3b  {.    isNeg = 1;
13660 0a 20 20 20 20 7a 41 72 67 2b 2b 3b 0a 20 20 7d  .    zArg++;.  }
13670 65 6c 73 65 20 69 66 28 20 7a 41 72 67 5b 30 5d  else if( zArg[0]
13680 3d 3d 27 2b 27 20 29 7b 0a 20 20 20 20 7a 41 72  =='+' ){.    zAr
13690 67 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a  g++;.  }.  if( z
136a0 41 72 67 5b 30 5d 3d 3d 27 30 27 20 26 26 20 7a  Arg[0]=='0' && z
136b0 41 72 67 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a 20  Arg[1]=='x' ){. 
136c0 20 20 20 69 6e 74 20 78 3b 0a 20 20 20 20 7a 41     int x;.    zA
136d0 72 67 20 2b 3d 20 32 3b 0a 20 20 20 20 77 68 69  rg += 2;.    whi
136e0 6c 65 28 20 28 78 20 3d 20 68 65 78 44 69 67 69  le( (x = hexDigi
136f0 74 56 61 6c 75 65 28 7a 41 72 67 5b 30 5d 29 29  tValue(zArg[0]))
13700 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 76 20 3d  >=0 ){.      v =
13710 20 28 76 3c 3c 34 29 20 2b 20 78 3b 0a 20 20 20   (v<<4) + x;.   
13720 20 20 20 7a 41 72 67 2b 2b 3b 0a 20 20 20 20 7d     zArg++;.    }
13730 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 68  .  }else{.    wh
13740 69 6c 65 28 20 49 73 44 69 67 69 74 28 7a 41 72  ile( IsDigit(zAr
13750 67 5b 30 5d 29 20 29 7b 0a 20 20 20 20 20 20 76  g[0]) ){.      v
13760 20 3d 20 76 2a 31 30 20 2b 20 7a 41 72 67 5b 30   = v*10 + zArg[0
13770 5d 20 2d 20 27 30 27 3b 0a 20 20 20 20 20 20 7a  ] - '0';.      z
13780 41 72 67 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d  Arg++;.    }.  }
13790 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72  .  for(i=0; i<Ar
137a0 72 61 79 53 69 7a 65 28 61 4d 75 6c 74 29 3b 20  raySize(aMult); 
137b0 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 73 71  i++){.    if( sq
137c0 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 61 4d  lite3_stricmp(aM
137d0 75 6c 74 5b 69 5d 2e 7a 53 75 66 66 69 78 2c 20  ult[i].zSuffix, 
137e0 7a 41 72 67 29 3d 3d 30 20 29 7b 0a 20 20 20 20  zArg)==0 ){.    
137f0 20 20 76 20 2a 3d 20 61 4d 75 6c 74 5b 69 5d 2e    v *= aMult[i].
13800 69 4d 75 6c 74 3b 0a 20 20 20 20 20 20 62 72 65  iMult;.      bre
13810 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ak;.    }.  }.  
13820 72 65 74 75 72 6e 20 69 73 4e 65 67 3f 20 2d 76  return isNeg? -v
13830 20 3a 20 76 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49   : v;.}../*.** I
13840 6e 74 65 72 70 72 65 74 20 7a 41 72 67 20 61 73  nterpret zArg as
13850 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
13860 65 72 20 6f 72 20 61 20 62 6f 6f 6c 65 61 6e 20  er or a boolean 
13870 76 61 6c 75 65 2e 20 20 52 65 74 75 72 6e 20 31  value.  Return 1
13880 20 6f 72 20 30 0a 2a 2a 20 66 6f 72 20 54 52 55   or 0.** for TRU
13890 45 20 61 6e 64 20 46 41 4c 53 45 2e 20 20 52 65  E and FALSE.  Re
138a0 74 75 72 6e 20 74 68 65 20 69 6e 74 65 67 65 72  turn the integer
138b0 20 76 61 6c 75 65 20 69 66 20 61 70 70 72 6f 70   value if approp
138c0 72 69 61 74 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  riate..*/.static
138d0 20 69 6e 74 20 62 6f 6f 6c 65 61 6e 56 61 6c 75   int booleanValu
138e0 65 28 63 68 61 72 20 2a 7a 41 72 67 29 7b 0a 20  e(char *zArg){. 
138f0 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 7a 41   int i;.  if( zA
13900 72 67 5b 30 5d 3d 3d 27 30 27 20 26 26 20 7a 41  rg[0]=='0' && zA
13910 72 67 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a 20 20  rg[1]=='x' ){.  
13920 20 20 66 6f 72 28 69 3d 32 3b 20 68 65 78 44 69    for(i=2; hexDi
13930 67 69 74 56 61 6c 75 65 28 7a 41 72 67 5b 69 5d  gitValue(zArg[i]
13940 29 3e 3d 30 3b 20 69 2b 2b 29 7b 7d 0a 20 20 7d  )>=0; i++){}.  }
13950 65 6c 73 65 7b 0a 20 20 20 20 66 6f 72 28 69 3d  else{.    for(i=
13960 30 3b 20 7a 41 72 67 5b 69 5d 3e 3d 27 30 27 20  0; zArg[i]>='0' 
13970 26 26 20 7a 41 72 67 5b 69 5d 3c 3d 27 39 27 3b  && zArg[i]<='9';
13980 20 69 2b 2b 29 7b 7d 0a 20 20 7d 0a 20 20 69 66   i++){}.  }.  if
13990 28 20 69 3e 30 20 26 26 20 7a 41 72 67 5b 69 5d  ( i>0 && zArg[i]
139a0 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 28 69 6e  ==0 ) return (in
139b0 74 29 28 69 6e 74 65 67 65 72 56 61 6c 75 65 28  t)(integerValue(
139c0 7a 41 72 67 29 20 26 20 30 78 66 66 66 66 66 66  zArg) & 0xffffff
139d0 66 66 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  ff);.  if( sqlit
139e0 65 33 5f 73 74 72 69 63 6d 70 28 7a 41 72 67 2c  e3_stricmp(zArg,
139f0 20 22 6f 6e 22 29 3d 3d 30 20 7c 7c 20 73 71 6c   "on")==0 || sql
13a00 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 41 72  ite3_stricmp(zAr
13a10 67 2c 22 79 65 73 22 29 3d 3d 30 20 29 7b 0a 20  g,"yes")==0 ){. 
13a20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
13a30 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73  .  if( sqlite3_s
13a40 74 72 69 63 6d 70 28 7a 41 72 67 2c 20 22 6f 66  tricmp(zArg, "of
13a50 66 22 29 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65  f")==0 || sqlite
13a60 33 5f 73 74 72 69 63 6d 70 28 7a 41 72 67 2c 22  3_stricmp(zArg,"
13a70 6e 6f 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72  no")==0 ){.    r
13a80 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 75  eturn 0;.  }.  u
13a90 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
13aa0 72 2c 20 22 45 52 52 4f 52 3a 20 4e 6f 74 20 61  r, "ERROR: Not a
13ab0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
13ac0 5c 22 25 73 5c 22 2e 20 41 73 73 75 6d 69 6e 67  \"%s\". Assuming
13ad0 20 5c 22 6e 6f 5c 22 2e 5c 6e 22 2c 0a 20 20 20   \"no\".\n",.   
13ae0 20 20 20 20 20 20 20 7a 41 72 67 29 3b 0a 20 20         zArg);.  
13af0 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a  return 0;.}../*.
13b00 2a 2a 20 43 6c 6f 73 65 20 61 6e 20 6f 75 74 70  ** Close an outp
13b10 75 74 20 66 69 6c 65 2c 20 61 73 73 75 6d 69 6e  ut file, assumin
13b20 67 20 69 74 20 69 73 20 6e 6f 74 20 73 74 64 65  g it is not stde
13b30 72 72 20 6f 72 20 73 74 64 6f 75 74 0a 2a 2f 0a  rr or stdout.*/.
13b40 73 74 61 74 69 63 20 76 6f 69 64 20 6f 75 74 70  static void outp
13b50 75 74 5f 66 69 6c 65 5f 63 6c 6f 73 65 28 46 49  ut_file_close(FI
13b60 4c 45 20 2a 66 29 7b 0a 20 20 69 66 28 20 66 20  LE *f){.  if( f 
13b70 26 26 20 66 21 3d 73 74 64 6f 75 74 20 26 26 20  && f!=stdout && 
13b80 66 21 3d 73 74 64 65 72 72 20 29 20 66 63 6c 6f  f!=stderr ) fclo
13b90 73 65 28 66 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  se(f);.}../*.** 
13ba0 54 72 79 20 74 6f 20 6f 70 65 6e 20 61 6e 20 6f  Try to open an o
13bb0 75 74 70 75 74 20 66 69 6c 65 2e 20 20 20 54 68  utput file.   Th
13bc0 65 20 6e 61 6d 65 73 20 22 73 74 64 6f 75 74 22  e names "stdout"
13bd0 20 61 6e 64 20 22 73 74 64 65 72 72 22 20 61 72   and "stderr" ar
13be0 65 0a 2a 2a 20 72 65 63 6f 67 6e 69 7a 65 64 20  e.** recognized 
13bf0 61 6e 64 20 64 6f 20 74 68 65 20 72 69 67 68 74  and do the right
13c00 20 74 68 69 6e 67 2e 20 20 4e 55 4c 4c 20 69 73   thing.  NULL is
13c10 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65   returned if the
13c20 20 6f 75 74 70 75 74 0a 2a 2a 20 66 69 6c 65 6e   output.** filen
13c30 61 6d 65 20 69 73 20 22 6f 66 66 22 2e 0a 2a 2f  ame is "off"..*/
13c40 0a 73 74 61 74 69 63 20 46 49 4c 45 20 2a 6f 75  .static FILE *ou
13c50 74 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 63  tput_file_open(c
13c60 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
13c70 29 7b 0a 20 20 46 49 4c 45 20 2a 66 3b 0a 20 20  ){.  FILE *f;.  
13c80 69 66 28 20 73 74 72 63 6d 70 28 7a 46 69 6c 65  if( strcmp(zFile
13c90 2c 22 73 74 64 6f 75 74 22 29 3d 3d 30 20 29 7b  ,"stdout")==0 ){
13ca0 0a 20 20 20 20 66 20 3d 20 73 74 64 6f 75 74 3b  .    f = stdout;
13cb0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72  .  }else if( str
13cc0 63 6d 70 28 7a 46 69 6c 65 2c 20 22 73 74 64 65  cmp(zFile, "stde
13cd0 72 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 66  rr")==0 ){.    f
13ce0 20 3d 20 73 74 64 65 72 72 3b 0a 20 20 7d 65 6c   = stderr;.  }el
13cf0 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 46  se if( strcmp(zF
13d00 69 6c 65 2c 20 22 6f 66 66 22 29 3d 3d 30 20 29  ile, "off")==0 )
13d10 7b 0a 20 20 20 20 66 20 3d 20 30 3b 0a 20 20 7d  {.    f = 0;.  }
13d20 65 6c 73 65 7b 0a 20 20 20 20 66 20 3d 20 66 6f  else{.    f = fo
13d30 70 65 6e 28 7a 46 69 6c 65 2c 20 22 77 62 22 29  pen(zFile, "wb")
13d40 3b 0a 20 20 20 20 69 66 28 20 66 3d 3d 30 20 29  ;.    if( f==0 )
13d50 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
13d60 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
13d70 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  or: cannot open 
13d80 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c 65  \"%s\"\n", zFile
13d90 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  );.    }.  }.  r
13da0 65 74 75 72 6e 20 66 3b 0a 7d 0a 0a 23 69 66 20  eturn f;.}..#if 
13db0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
13dc0 55 4e 54 45 53 54 41 42 4c 45 29 0a 23 69 66 20  UNTESTABLE).#if 
13dd0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
13de0 4f 4d 49 54 5f 54 52 41 43 45 29 20 26 26 20 21  OMIT_TRACE) && !
13df0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
13e00 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
13e10 4e 54 29 0a 2f 2a 0a 2a 2a 20 41 20 72 6f 75 74  NT)./*.** A rout
13e20 69 6e 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67  ine for handling
13e30 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 73 71 6c   output from sql
13e40 69 74 65 33 5f 74 72 61 63 65 28 29 2e 0a 2a 2f  ite3_trace()..*/
13e50 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 5f  .static int sql_
13e60 74 72 61 63 65 5f 63 61 6c 6c 62 61 63 6b 28 0a  trace_callback(.
13e70 20 20 75 6e 73 69 67 6e 65 64 20 6d 54 79 70 65    unsigned mType
13e80 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 2c 0a  ,.  void *pArg,.
13e90 20 20 76 6f 69 64 20 2a 70 50 2c 0a 20 20 76 6f    void *pP,.  vo
13ea0 69 64 20 2a 70 58 0a 29 7b 0a 20 20 46 49 4c 45  id *pX.){.  FILE
13eb0 20 2a 66 20 3d 20 28 46 49 4c 45 2a 29 70 41 72   *f = (FILE*)pAr
13ec0 67 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41  g;.  UNUSED_PARA
13ed0 4d 45 54 45 52 28 6d 54 79 70 65 29 3b 0a 20 20  METER(mType);.  
13ee0 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
13ef0 28 70 50 29 3b 0a 20 20 69 66 28 20 66 20 29 7b  (pP);.  if( f ){
13f00 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
13f10 2a 7a 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  *z = (const char
13f20 2a 29 70 58 3b 0a 20 20 20 20 69 6e 74 20 69 20  *)pX;.    int i 
13f30 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 29  = (int)strlen(z)
13f40 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 69 3e 30  ;.    while( i>0
13f50 20 26 26 20 7a 5b 69 2d 31 5d 3d 3d 27 3b 27 20   && z[i-1]==';' 
13f60 29 7b 20 69 2d 2d 3b 20 7d 0a 20 20 20 20 75 74  ){ i--; }.    ut
13f70 66 38 5f 70 72 69 6e 74 66 28 66 2c 20 22 25 2e  f8_printf(f, "%.
13f80 2a 73 3b 5c 6e 22 2c 20 69 2c 20 7a 29 3b 0a 20  *s;\n", i, z);. 
13f90 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d   }.  return 0;.}
13fa0 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a  .#endif.#endif..
13fb0 2f 2a 0a 2a 2a 20 41 20 6e 6f 2d 6f 70 20 72 6f  /*.** A no-op ro
13fc0 75 74 69 6e 65 20 74 68 61 74 20 72 75 6e 73 20  utine that runs 
13fd0 77 69 74 68 20 74 68 65 20 22 2e 62 72 65 61 6b  with the ".break
13fe0 70 6f 69 6e 74 22 20 64 6f 63 2d 63 6f 6d 6d 61  point" doc-comma
13ff0 6e 64 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20  nd.  This is.** 
14000 61 20 75 73 65 66 75 6c 20 73 70 6f 74 20 74 6f  a useful spot to
14010 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20   set a debugger 
14020 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 73  breakpoint..*/.s
14030 74 61 74 69 63 20 76 6f 69 64 20 74 65 73 74 5f  tatic void test_
14040 62 72 65 61 6b 70 6f 69 6e 74 28 76 6f 69 64 29  breakpoint(void)
14050 7b 0a 20 20 73 74 61 74 69 63 20 69 6e 74 20 6e  {.  static int n
14060 43 61 6c 6c 20 3d 20 30 3b 0a 20 20 6e 43 61 6c  Call = 0;.  nCal
14070 6c 2b 2b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e  l++;.}../*.** An
14080 20 6f 62 6a 65 63 74 20 75 73 65 64 20 74 6f 20   object used to 
14090 72 65 61 64 20 61 20 43 53 56 20 61 6e 64 20 6f  read a CSV and o
140a0 74 68 65 72 20 66 69 6c 65 73 20 66 6f 72 20 69  ther files for i
140b0 6d 70 6f 72 74 2e 0a 2a 2f 0a 74 79 70 65 64 65  mport..*/.typede
140c0 66 20 73 74 72 75 63 74 20 49 6d 70 6f 72 74 43  f struct ImportC
140d0 74 78 20 49 6d 70 6f 72 74 43 74 78 3b 0a 73 74  tx ImportCtx;.st
140e0 72 75 63 74 20 49 6d 70 6f 72 74 43 74 78 20 7b  ruct ImportCtx {
140f0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
14100 46 69 6c 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f  File;  /* Name o
14110 66 20 74 68 65 20 69 6e 70 75 74 20 66 69 6c 65  f the input file
14120 20 2a 2f 0a 20 20 46 49 4c 45 20 2a 69 6e 3b 20   */.  FILE *in; 
14130 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 61            /* Rea
14140 64 20 74 68 65 20 43 53 56 20 74 65 78 74 20 66  d the CSV text f
14150 72 6f 6d 20 74 68 69 73 20 69 6e 70 75 74 20 73  rom this input s
14160 74 72 65 61 6d 20 2a 2f 0a 20 20 63 68 61 72 20  tream */.  char 
14170 2a 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  *z;            /
14180 2a 20 41 63 63 75 6d 75 6c 61 74 65 64 20 74 65  * Accumulated te
14190 78 74 20 66 6f 72 20 61 20 66 69 65 6c 64 20 2a  xt for a field *
141a0 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20  /.  int n;      
141b0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
141c0 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 7a 20  r of bytes in z 
141d0 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b  */.  int nAlloc;
141e0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
141f0 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  e allocated for 
14200 7a 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 69  z[] */.  int nLi
14210 6e 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ne;          /* 
14220 43 75 72 72 65 6e 74 20 6c 69 6e 65 20 6e 75 6d  Current line num
14230 62 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 54 65  ber */.  int cTe
14240 72 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rm;          /* 
14250 43 68 61 72 61 63 74 65 72 20 74 68 61 74 20 74  Character that t
14260 65 72 6d 69 6e 61 74 65 64 20 74 68 65 20 6d 6f  erminated the mo
14270 73 74 20 72 65 63 65 6e 74 20 66 69 65 6c 64 20  st recent field 
14280 2a 2f 0a 20 20 69 6e 74 20 63 43 6f 6c 53 65 70  */.  int cColSep
14290 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
142a0 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72  column separator
142b0 20 63 68 61 72 61 63 74 65 72 2e 20 20 28 55 73   character.  (Us
142c0 75 61 6c 6c 79 20 22 2c 22 29 20 2a 2f 0a 20 20  ually ",") */.  
142d0 69 6e 74 20 63 52 6f 77 53 65 70 3b 20 20 20 20  int cRowSep;    
142e0 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 20 73      /* The row s
142f0 65 70 61 72 61 74 6f 72 20 63 68 61 72 61 63 74  eparator charact
14300 65 72 2e 20 20 28 55 73 75 61 6c 6c 79 20 22 5c  er.  (Usually "\
14310 6e 22 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 70  n") */.};../* Ap
14320 70 65 6e 64 20 61 20 73 69 6e 67 6c 65 20 62 79  pend a single by
14330 74 65 20 74 6f 20 7a 5b 5d 20 2a 2f 0a 73 74 61  te to z[] */.sta
14340 74 69 63 20 76 6f 69 64 20 69 6d 70 6f 72 74 5f  tic void import_
14350 61 70 70 65 6e 64 5f 63 68 61 72 28 49 6d 70 6f  append_char(Impo
14360 72 74 43 74 78 20 2a 70 2c 20 69 6e 74 20 63 29  rtCtx *p, int c)
14370 7b 0a 20 20 69 66 28 20 70 2d 3e 6e 2b 31 3e 3d  {.  if( p->n+1>=
14380 70 2d 3e 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20  p->nAlloc ){.   
14390 20 70 2d 3e 6e 41 6c 6c 6f 63 20 2b 3d 20 70 2d   p->nAlloc += p-
143a0 3e 6e 41 6c 6c 6f 63 20 2b 20 31 30 30 3b 0a 20  >nAlloc + 100;. 
143b0 20 20 20 70 2d 3e 7a 20 3d 20 73 71 6c 69 74 65     p->z = sqlite
143c0 33 5f 72 65 61 6c 6c 6f 63 36 34 28 70 2d 3e 7a  3_realloc64(p->z
143d0 2c 20 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20  , p->nAlloc);.  
143e0 20 20 69 66 28 20 70 2d 3e 7a 3d 3d 30 20 29 7b    if( p->z==0 ){
143f0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
14400 66 28 73 74 64 65 72 72 2c 20 22 6f 75 74 20 6f  f(stderr, "out o
14410 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20  f memory\n");.  
14420 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20      exit(1);.   
14430 20 7d 0a 20 20 7d 0a 20 20 70 2d 3e 7a 5b 70 2d   }.  }.  p->z[p-
14440 3e 6e 2b 2b 5d 20 3d 20 28 63 68 61 72 29 63 3b  >n++] = (char)c;
14450 0a 7d 0a 0a 2f 2a 20 52 65 61 64 20 61 20 73 69  .}../* Read a si
14460 6e 67 6c 65 20 66 69 65 6c 64 20 6f 66 20 43 53  ngle field of CS
14470 56 20 74 65 78 74 2e 20 20 43 6f 6d 70 61 74 69  V text.  Compati
14480 62 6c 65 20 77 69 74 68 20 72 66 63 34 31 38 30  ble with rfc4180
14490 20 61 6e 64 20 65 78 74 65 6e 64 65 64 0a 2a 2a   and extended.**
144a0 20 77 69 74 68 20 74 68 65 20 6f 70 74 69 6f 6e   with the option
144b0 20 6f 66 20 68 61 76 69 6e 67 20 61 20 73 65 70   of having a sep
144c0 61 72 61 74 6f 72 20 6f 74 68 65 72 20 74 68 61  arator other tha
144d0 6e 20 22 2c 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 2b  n ","..**.**   +
144e0 20 20 49 6e 70 75 74 20 63 6f 6d 65 73 20 66 72    Input comes fr
144f0 6f 6d 20 70 2d 3e 69 6e 2e 0a 2a 2a 20 20 20 2b  om p->in..**   +
14500 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
14510 69 6e 20 70 2d 3e 7a 20 6f 66 20 6c 65 6e 67 74  in p->z of lengt
14520 68 20 70 2d 3e 6e 2e 20 20 53 70 61 63 65 20 74  h p->n.  Space t
14530 6f 20 68 6f 6c 64 20 70 2d 3e 7a 20 63 6f 6d 65  o hold p->z come
14540 73 0a 2a 2a 20 20 20 20 20 20 66 72 6f 6d 20 73  s.**      from s
14550 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28  qlite3_malloc64(
14560 29 2e 0a 2a 2a 20 20 20 2b 20 20 55 73 65 20 70  )..**   +  Use p
14570 2d 3e 63 53 65 70 20 61 73 20 74 68 65 20 63 6f  ->cSep as the co
14580 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 2e 20  lumn separator. 
14590 20 54 68 65 20 64 65 66 61 75 6c 74 20 69 73 20   The default is 
145a0 22 2c 22 2e 0a 2a 2a 20 20 20 2b 20 20 55 73 65  ","..**   +  Use
145b0 20 70 2d 3e 72 53 65 70 20 61 73 20 74 68 65 20   p->rSep as the 
145c0 72 6f 77 20 73 65 70 61 72 61 74 6f 72 2e 20 20  row separator.  
145d0 54 68 65 20 64 65 66 61 75 6c 74 20 69 73 20 22  The default is "
145e0 5c 6e 22 2e 0a 2a 2a 20 20 20 2b 20 20 4b 65 65  \n"..**   +  Kee
145f0 70 20 74 72 61 63 6b 20 6f 66 20 74 68 65 20 6c  p track of the l
14600 69 6e 65 20 6e 75 6d 62 65 72 20 69 6e 20 70 2d  ine number in p-
14610 3e 6e 4c 69 6e 65 2e 0a 2a 2a 20 20 20 2b 20 20  >nLine..**   +  
14620 53 74 6f 72 65 20 74 68 65 20 63 68 61 72 61 63  Store the charac
14630 74 65 72 20 74 68 61 74 20 74 65 72 6d 69 6e 61  ter that termina
14640 74 65 73 20 74 68 65 20 66 69 65 6c 64 20 69 6e  tes the field in
14650 20 70 2d 3e 63 54 65 72 6d 2e 20 20 53 74 6f 72   p->cTerm.  Stor
14660 65 0a 2a 2a 20 20 20 20 20 20 45 4f 46 20 6f 6e  e.**      EOF on
14670 20 65 6e 64 2d 6f 66 2d 66 69 6c 65 2e 0a 2a 2a   end-of-file..**
14680 20 20 20 2b 20 20 52 65 70 6f 72 74 20 73 79 6e     +  Report syn
14690 74 61 78 20 65 72 72 6f 72 73 20 6f 6e 20 73 74  tax errors on st
146a0 64 65 72 72 0a 2a 2f 0a 73 74 61 74 69 63 20 63  derr.*/.static c
146b0 68 61 72 20 2a 53 51 4c 49 54 45 5f 43 44 45 43  har *SQLITE_CDEC
146c0 4c 20 63 73 76 5f 72 65 61 64 5f 6f 6e 65 5f 66  L csv_read_one_f
146d0 69 65 6c 64 28 49 6d 70 6f 72 74 43 74 78 20 2a  ield(ImportCtx *
146e0 70 29 7b 0a 20 20 69 6e 74 20 63 3b 0a 20 20 69  p){.  int c;.  i
146f0 6e 74 20 63 53 65 70 20 3d 20 70 2d 3e 63 43 6f  nt cSep = p->cCo
14700 6c 53 65 70 3b 0a 20 20 69 6e 74 20 72 53 65 70  lSep;.  int rSep
14710 20 3d 20 70 2d 3e 63 52 6f 77 53 65 70 3b 0a 20   = p->cRowSep;. 
14720 20 70 2d 3e 6e 20 3d 20 30 3b 0a 20 20 63 20 3d   p->n = 0;.  c =
14730 20 66 67 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20   fgetc(p->in);. 
14740 20 69 66 28 20 63 3d 3d 45 4f 46 20 7c 7c 20 73   if( c==EOF || s
14750 65 65 6e 49 6e 74 65 72 72 75 70 74 20 29 7b 0a  eenInterrupt ){.
14760 20 20 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20 45      p->cTerm = E
14770 4f 46 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30  OF;.    return 0
14780 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 3d 3d 27  ;.  }.  if( c=='
14790 22 27 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 63  "' ){.    int pc
147a0 2c 20 70 70 63 3b 0a 20 20 20 20 69 6e 74 20 73  , ppc;.    int s
147b0 74 61 72 74 4c 69 6e 65 20 3d 20 70 2d 3e 6e 4c  tartLine = p->nL
147c0 69 6e 65 3b 0a 20 20 20 20 69 6e 74 20 63 51 75  ine;.    int cQu
147d0 6f 74 65 20 3d 20 63 3b 0a 20 20 20 20 70 63 20  ote = c;.    pc 
147e0 3d 20 70 70 63 20 3d 20 30 3b 0a 20 20 20 20 77  = ppc = 0;.    w
147f0 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20 20  hile( 1 ){.     
14800 20 63 20 3d 20 66 67 65 74 63 28 70 2d 3e 69 6e   c = fgetc(p->in
14810 29 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d  );.      if( c==
14820 72 53 65 70 20 29 20 70 2d 3e 6e 4c 69 6e 65 2b  rSep ) p->nLine+
14830 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d  +;.      if( c==
14840 63 51 75 6f 74 65 20 29 7b 0a 20 20 20 20 20 20  cQuote ){.      
14850 20 20 69 66 28 20 70 63 3d 3d 63 51 75 6f 74 65    if( pc==cQuote
14860 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 63   ){.          pc
14870 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
14880 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
14890 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
148a0 20 20 69 66 28 20 28 63 3d 3d 63 53 65 70 20 26    if( (c==cSep &
148b0 26 20 70 63 3d 3d 63 51 75 6f 74 65 29 0a 20 20  & pc==cQuote).  
148c0 20 20 20 20 20 7c 7c 20 28 63 3d 3d 72 53 65 70       || (c==rSep
148d0 20 26 26 20 70 63 3d 3d 63 51 75 6f 74 65 29 0a   && pc==cQuote).
148e0 20 20 20 20 20 20 20 7c 7c 20 28 63 3d 3d 72 53         || (c==rS
148f0 65 70 20 26 26 20 70 63 3d 3d 27 5c 72 27 20 26  ep && pc=='\r' &
14900 26 20 70 70 63 3d 3d 63 51 75 6f 74 65 29 0a 20  & ppc==cQuote). 
14910 20 20 20 20 20 20 7c 7c 20 28 63 3d 3d 45 4f 46        || (c==EOF
14920 20 26 26 20 70 63 3d 3d 63 51 75 6f 74 65 29 0a   && pc==cQuote).
14930 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20        ){.       
14940 20 64 6f 7b 20 70 2d 3e 6e 2d 2d 3b 20 7d 77 68   do{ p->n--; }wh
14950 69 6c 65 28 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 21  ile( p->z[p->n]!
14960 3d 63 51 75 6f 74 65 20 29 3b 0a 20 20 20 20 20  =cQuote );.     
14970 20 20 20 70 2d 3e 63 54 65 72 6d 20 3d 20 63 3b     p->cTerm = c;
14980 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
14990 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
149a0 28 20 70 63 3d 3d 63 51 75 6f 74 65 20 26 26 20  ( pc==cQuote && 
149b0 63 21 3d 27 5c 72 27 20 29 7b 0a 20 20 20 20 20  c!='\r' ){.     
149c0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
149d0 74 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20 75  tderr, "%s:%d: u
149e0 6e 65 73 63 61 70 65 64 20 25 63 20 63 68 61 72  nescaped %c char
149f0 61 63 74 65 72 5c 6e 22 2c 0a 20 20 20 20 20 20  acter\n",.      
14a00 20 20 20 20 20 20 20 20 20 20 70 2d 3e 7a 46 69            p->zFi
14a10 6c 65 2c 20 70 2d 3e 6e 4c 69 6e 65 2c 20 63 51  le, p->nLine, cQ
14a20 75 6f 74 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20  uote);.      }. 
14a30 20 20 20 20 20 69 66 28 20 63 3d 3d 45 4f 46 20       if( c==EOF 
14a40 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f  ){.        utf8_
14a50 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
14a60 25 73 3a 25 64 3a 20 75 6e 74 65 72 6d 69 6e 61  %s:%d: untermina
14a70 74 65 64 20 25 63 2d 71 75 6f 74 65 64 20 66 69  ted %c-quoted fi
14a80 65 6c 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  eld\n",.        
14a90 20 20 20 20 20 20 20 20 70 2d 3e 7a 46 69 6c 65          p->zFile
14aa0 2c 20 73 74 61 72 74 4c 69 6e 65 2c 20 63 51 75  , startLine, cQu
14ab0 6f 74 65 29 3b 0a 20 20 20 20 20 20 20 20 70 2d  ote);.        p-
14ac0 3e 63 54 65 72 6d 20 3d 20 63 3b 0a 20 20 20 20  >cTerm = c;.    
14ad0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
14ae0 20 7d 0a 20 20 20 20 20 20 69 6d 70 6f 72 74 5f   }.      import_
14af0 61 70 70 65 6e 64 5f 63 68 61 72 28 70 2c 20 63  append_char(p, c
14b00 29 3b 0a 20 20 20 20 20 20 70 70 63 20 3d 20 70  );.      ppc = p
14b10 63 3b 0a 20 20 20 20 20 20 70 63 20 3d 20 63 3b  c;.      pc = c;
14b20 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
14b30 20 20 20 20 77 68 69 6c 65 28 20 63 21 3d 45 4f      while( c!=EO
14b40 46 20 26 26 20 63 21 3d 63 53 65 70 20 26 26 20  F && c!=cSep && 
14b50 63 21 3d 72 53 65 70 20 29 7b 0a 20 20 20 20 20  c!=rSep ){.     
14b60 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63   import_append_c
14b70 68 61 72 28 70 2c 20 63 29 3b 0a 20 20 20 20 20  har(p, c);.     
14b80 20 63 20 3d 20 66 67 65 74 63 28 70 2d 3e 69 6e   c = fgetc(p->in
14b90 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
14ba0 20 63 3d 3d 72 53 65 70 20 29 7b 0a 20 20 20 20   c==rSep ){.    
14bb0 20 20 70 2d 3e 6e 4c 69 6e 65 2b 2b 3b 0a 20 20    p->nLine++;.  
14bc0 20 20 20 20 69 66 28 20 70 2d 3e 6e 3e 30 20 26      if( p->n>0 &
14bd0 26 20 70 2d 3e 7a 5b 70 2d 3e 6e 2d 31 5d 3d 3d  & p->z[p->n-1]==
14be0 27 5c 72 27 20 29 20 70 2d 3e 6e 2d 2d 3b 0a 20  '\r' ) p->n--;. 
14bf0 20 20 20 7d 0a 20 20 20 20 70 2d 3e 63 54 65 72     }.    p->cTer
14c00 6d 20 3d 20 63 3b 0a 20 20 7d 0a 20 20 69 66 28  m = c;.  }.  if(
14c10 20 70 2d 3e 7a 20 29 20 70 2d 3e 7a 5b 70 2d 3e   p->z ) p->z[p->
14c20 6e 5d 20 3d 20 30 3b 0a 20 20 72 65 74 75 72 6e  n] = 0;.  return
14c30 20 70 2d 3e 7a 3b 0a 7d 0a 0a 2f 2a 20 52 65 61   p->z;.}../* Rea
14c40 64 20 61 20 73 69 6e 67 6c 65 20 66 69 65 6c 64  d a single field
14c50 20 6f 66 20 41 53 43 49 49 20 64 65 6c 69 6d 69   of ASCII delimi
14c60 74 65 64 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  ted text..**.** 
14c70 20 20 2b 20 20 49 6e 70 75 74 20 63 6f 6d 65 73    +  Input comes
14c80 20 66 72 6f 6d 20 70 2d 3e 69 6e 2e 0a 2a 2a 20   from p->in..** 
14c90 20 20 2b 20 20 53 74 6f 72 65 20 72 65 73 75 6c    +  Store resul
14ca0 74 73 20 69 6e 20 70 2d 3e 7a 20 6f 66 20 6c 65  ts in p->z of le
14cb0 6e 67 74 68 20 70 2d 3e 6e 2e 20 20 53 70 61 63  ngth p->n.  Spac
14cc0 65 20 74 6f 20 68 6f 6c 64 20 70 2d 3e 7a 20 63  e to hold p->z c
14cd0 6f 6d 65 73 0a 2a 2a 20 20 20 20 20 20 66 72 6f  omes.**      fro
14ce0 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
14cf0 36 34 28 29 2e 0a 2a 2a 20 20 20 2b 20 20 55 73  64()..**   +  Us
14d00 65 20 70 2d 3e 63 53 65 70 20 61 73 20 74 68 65  e p->cSep as the
14d10 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f   column separato
14d20 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  r.  The default 
14d30 69 73 20 22 5c 78 31 46 22 2e 0a 2a 2a 20 20 20  is "\x1F"..**   
14d40 2b 20 20 55 73 65 20 70 2d 3e 72 53 65 70 20 61  +  Use p->rSep a
14d50 73 20 74 68 65 20 72 6f 77 20 73 65 70 61 72 61  s the row separa
14d60 74 6f 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c  tor.  The defaul
14d70 74 20 69 73 20 22 5c 78 31 45 22 2e 0a 2a 2a 20  t is "\x1E"..** 
14d80 20 20 2b 20 20 4b 65 65 70 20 74 72 61 63 6b 20    +  Keep track 
14d90 6f 66 20 74 68 65 20 72 6f 77 20 6e 75 6d 62 65  of the row numbe
14da0 72 20 69 6e 20 70 2d 3e 6e 4c 69 6e 65 2e 0a 2a  r in p->nLine..*
14db0 2a 20 20 20 2b 20 20 53 74 6f 72 65 20 74 68 65  *   +  Store the
14dc0 20 63 68 61 72 61 63 74 65 72 20 74 68 61 74 20   character that 
14dd0 74 65 72 6d 69 6e 61 74 65 73 20 74 68 65 20 66  terminates the f
14de0 69 65 6c 64 20 69 6e 20 70 2d 3e 63 54 65 72 6d  ield in p->cTerm
14df0 2e 20 20 53 74 6f 72 65 0a 2a 2a 20 20 20 20 20  .  Store.**     
14e00 20 45 4f 46 20 6f 6e 20 65 6e 64 2d 6f 66 2d 66   EOF on end-of-f
14e10 69 6c 65 2e 0a 2a 2a 20 20 20 2b 20 20 52 65 70  ile..**   +  Rep
14e20 6f 72 74 20 73 79 6e 74 61 78 20 65 72 72 6f 72  ort syntax error
14e30 73 20 6f 6e 20 73 74 64 65 72 72 0a 2a 2f 0a 73  s on stderr.*/.s
14e40 74 61 74 69 63 20 63 68 61 72 20 2a 53 51 4c 49  tatic char *SQLI
14e50 54 45 5f 43 44 45 43 4c 20 61 73 63 69 69 5f 72  TE_CDECL ascii_r
14e60 65 61 64 5f 6f 6e 65 5f 66 69 65 6c 64 28 49 6d  ead_one_field(Im
14e70 70 6f 72 74 43 74 78 20 2a 70 29 7b 0a 20 20 69  portCtx *p){.  i
14e80 6e 74 20 63 3b 0a 20 20 69 6e 74 20 63 53 65 70  nt c;.  int cSep
14e90 20 3d 20 70 2d 3e 63 43 6f 6c 53 65 70 3b 0a 20   = p->cColSep;. 
14ea0 20 69 6e 74 20 72 53 65 70 20 3d 20 70 2d 3e 63   int rSep = p->c
14eb0 52 6f 77 53 65 70 3b 0a 20 20 70 2d 3e 6e 20 3d  RowSep;.  p->n =
14ec0 20 30 3b 0a 20 20 63 20 3d 20 66 67 65 74 63 28   0;.  c = fgetc(
14ed0 70 2d 3e 69 6e 29 3b 0a 20 20 69 66 28 20 63 3d  p->in);.  if( c=
14ee0 3d 45 4f 46 20 7c 7c 20 73 65 65 6e 49 6e 74 65  =EOF || seenInte
14ef0 72 72 75 70 74 20 29 7b 0a 20 20 20 20 70 2d 3e  rrupt ){.    p->
14f00 63 54 65 72 6d 20 3d 20 45 4f 46 3b 0a 20 20 20  cTerm = EOF;.   
14f10 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
14f20 20 77 68 69 6c 65 28 20 63 21 3d 45 4f 46 20 26   while( c!=EOF &
14f30 26 20 63 21 3d 63 53 65 70 20 26 26 20 63 21 3d  & c!=cSep && c!=
14f40 72 53 65 70 20 29 7b 0a 20 20 20 20 69 6d 70 6f  rSep ){.    impo
14f50 72 74 5f 61 70 70 65 6e 64 5f 63 68 61 72 28 70  rt_append_char(p
14f60 2c 20 63 29 3b 0a 20 20 20 20 63 20 3d 20 66 67  , c);.    c = fg
14f70 65 74 63 28 70 2d 3e 69 6e 29 3b 0a 20 20 7d 0a  etc(p->in);.  }.
14f80 20 20 69 66 28 20 63 3d 3d 72 53 65 70 20 29 7b    if( c==rSep ){
14f90 0a 20 20 20 20 70 2d 3e 6e 4c 69 6e 65 2b 2b 3b  .    p->nLine++;
14fa0 0a 20 20 7d 0a 20 20 70 2d 3e 63 54 65 72 6d 20  .  }.  p->cTerm 
14fb0 3d 20 63 3b 0a 20 20 69 66 28 20 70 2d 3e 7a 20  = c;.  if( p->z 
14fc0 29 20 70 2d 3e 7a 5b 70 2d 3e 6e 5d 20 3d 20 30  ) p->z[p->n] = 0
14fd0 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 7a 3b  ;.  return p->z;
14fe0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  .}../*.** Try to
14ff0 20 74 72 61 6e 73 66 65 72 20 64 61 74 61 20 66   transfer data f
15000 6f 72 20 74 61 62 6c 65 20 7a 54 61 62 6c 65 2e  or table zTable.
15010 20 20 49 66 20 61 6e 20 65 72 72 6f 72 20 69 73    If an error is
15020 20 73 65 65 6e 20 77 68 69 6c 65 0a 2a 2a 20 6d   seen while.** m
15030 6f 76 69 6e 67 20 66 6f 72 77 61 72 64 2c 20 74  oving forward, t
15040 72 79 20 74 6f 20 67 6f 20 62 61 63 6b 77 61 72  ry to go backwar
15050 64 73 2e 20 20 54 68 65 20 62 61 63 6b 77 61 72  ds.  The backwar
15060 64 73 20 6d 6f 76 65 6d 65 6e 74 20 77 6f 6e 27  ds movement won'
15070 74 0a 2a 2a 20 77 6f 72 6b 20 66 6f 72 20 57 49  t.** work for WI
15080 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
15090 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  es..*/.static vo
150a0 69 64 20 74 72 79 54 6f 43 6c 6f 6e 65 44 61 74  id tryToCloneDat
150b0 61 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20  a(.  ShellState 
150c0 2a 70 2c 0a 20 20 73 71 6c 69 74 65 33 20 2a 6e  *p,.  sqlite3 *n
150d0 65 77 44 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68  ewDb,.  const ch
150e0 61 72 20 2a 7a 54 61 62 6c 65 0a 29 7b 0a 20 20  ar *zTable.){.  
150f0 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 51  sqlite3_stmt *pQ
15100 75 65 72 79 20 3d 20 30 3b 0a 20 20 73 71 6c 69  uery = 0;.  sqli
15110 74 65 33 5f 73 74 6d 74 20 2a 70 49 6e 73 65 72  te3_stmt *pInser
15120 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a  t = 0;.  char *z
15130 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 63 68 61  Query = 0;.  cha
15140 72 20 2a 7a 49 6e 73 65 72 74 20 3d 20 30 3b 0a  r *zInsert = 0;.
15150 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
15160 69 2c 20 6a 2c 20 6e 3b 0a 20 20 69 6e 74 20 6e  i, j, n;.  int n
15170 54 61 62 6c 65 20 3d 20 28 69 6e 74 29 73 74 72  Table = (int)str
15180 6c 65 6e 28 7a 54 61 62 6c 65 29 3b 0a 20 20 69  len(zTable);.  i
15190 6e 74 20 6b 20 3d 20 30 3b 0a 20 20 69 6e 74 20  nt k = 0;.  int 
151a0 63 6e 74 20 3d 20 30 3b 0a 20 20 63 6f 6e 73 74  cnt = 0;.  const
151b0 20 69 6e 74 20 73 70 69 6e 52 61 74 65 20 3d 20   int spinRate = 
151c0 31 30 30 30 30 3b 0a 0a 20 20 7a 51 75 65 72 79  10000;..  zQuery
151d0 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
151e0 74 66 28 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  tf("SELECT * FRO
151f0 4d 20 5c 22 25 77 5c 22 22 2c 20 7a 54 61 62 6c  M \"%w\"", zTabl
15200 65 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  e);.  rc = sqlit
15210 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d  e3_prepare_v2(p-
15220 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20 2d 31 2c  >db, zQuery, -1,
15230 20 26 70 51 75 65 72 79 2c 20 30 29 3b 0a 20 20   &pQuery, 0);.  
15240 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 75 74  if( rc ){.    ut
15250 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
15260 2c 20 22 45 72 72 6f 72 20 25 64 3a 20 25 73 20  , "Error %d: %s 
15270 6f 6e 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20  on [%s]\n",.    
15280 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
15290 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
152a0 28 70 2d 3e 64 62 29 2c 20 73 71 6c 69 74 65 33  (p->db), sqlite3
152b0 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 2c 0a  _errmsg(p->db),.
152c0 20 20 20 20 20 20 20 20 20 20 20 20 7a 51 75 65              zQue
152d0 72 79 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e  ry);.    goto en
152e0 64 5f 64 61 74 61 5f 78 66 65 72 3b 0a 20 20 7d  d_data_xfer;.  }
152f0 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63  .  n = sqlite3_c
15300 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 51 75 65  olumn_count(pQue
15310 72 79 29 3b 0a 20 20 7a 49 6e 73 65 72 74 20 3d  ry);.  zInsert =
15320 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36   sqlite3_malloc6
15330 34 28 32 30 30 20 2b 20 6e 54 61 62 6c 65 20 2b  4(200 + nTable +
15340 20 6e 2a 33 29 3b 0a 20 20 69 66 28 20 7a 49 6e   n*3);.  if( zIn
15350 73 65 72 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72  sert==0 ){.    r
15360 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
15370 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  , "out of memory
15380 5c 6e 22 29 3b 0a 20 20 20 20 67 6f 74 6f 20 65  \n");.    goto e
15390 6e 64 5f 64 61 74 61 5f 78 66 65 72 3b 0a 20 20  nd_data_xfer;.  
153a0 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72  }.  sqlite3_snpr
153b0 69 6e 74 66 28 32 30 30 2b 6e 54 61 62 6c 65 2c  intf(200+nTable,
153c0 7a 49 6e 73 65 72 74 2c 0a 20 20 20 20 20 20 20  zInsert,.       
153d0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 4e 53              "INS
153e0 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 20 49 4e  ERT OR IGNORE IN
153f0 54 4f 20 5c 22 25 73 5c 22 20 56 41 4c 55 45 53  TO \"%s\" VALUES
15400 28 3f 22 2c 20 7a 54 61 62 6c 65 29 3b 0a 20 20  (?", zTable);.  
15410 69 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28  i = (int)strlen(
15420 7a 49 6e 73 65 72 74 29 3b 0a 20 20 66 6f 72 28  zInsert);.  for(
15430 6a 3d 31 3b 20 6a 3c 6e 3b 20 6a 2b 2b 29 7b 0a  j=1; j<n; j++){.
15440 20 20 20 20 6d 65 6d 63 70 79 28 7a 49 6e 73 65      memcpy(zInse
15450 72 74 2b 69 2c 20 22 2c 3f 22 2c 20 32 29 3b 0a  rt+i, ",?", 2);.
15460 20 20 20 20 69 20 2b 3d 20 32 3b 0a 20 20 7d 0a      i += 2;.  }.
15470 20 20 6d 65 6d 63 70 79 28 7a 49 6e 73 65 72 74    memcpy(zInsert
15480 2b 69 2c 20 22 29 3b 22 2c 20 33 29 3b 0a 20 20  +i, ");", 3);.  
15490 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
154a0 70 61 72 65 5f 76 32 28 6e 65 77 44 62 2c 20 7a  pare_v2(newDb, z
154b0 49 6e 73 65 72 74 2c 20 2d 31 2c 20 26 70 49 6e  Insert, -1, &pIn
154c0 73 65 72 74 2c 20 30 29 3b 0a 20 20 69 66 28 20  sert, 0);.  if( 
154d0 72 63 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70  rc ){.    utf8_p
154e0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
154f0 72 72 6f 72 20 25 64 3a 20 25 73 20 6f 6e 20 5b  rror %d: %s on [
15500 25 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20  %s]\n",.        
15510 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65      sqlite3_exte
15520 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 6e 65 77  nded_errcode(new
15530 44 62 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  Db), sqlite3_err
15540 6d 73 67 28 6e 65 77 44 62 29 2c 0a 20 20 20 20  msg(newDb),.    
15550 20 20 20 20 20 20 20 20 7a 51 75 65 72 79 29 3b          zQuery);
15560 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 64 61  .    goto end_da
15570 74 61 5f 78 66 65 72 3b 0a 20 20 7d 0a 20 20 66  ta_xfer;.  }.  f
15580 6f 72 28 6b 3d 30 3b 20 6b 3c 32 3b 20 6b 2b 2b  or(k=0; k<2; k++
15590 29 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 72  ){.    while( (r
155a0 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70  c = sqlite3_step
155b0 28 70 51 75 65 72 79 29 29 3d 3d 53 51 4c 49 54  (pQuery))==SQLIT
155c0 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 66  E_ROW ){.      f
155d0 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
155e0 29 7b 0a 20 20 20 20 20 20 20 20 73 77 69 74 63  ){.        switc
155f0 68 28 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  h( sqlite3_colum
15600 6e 5f 74 79 70 65 28 70 51 75 65 72 79 2c 20 69  n_type(pQuery, i
15610 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63  ) ){.          c
15620 61 73 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3a  ase SQLITE_NULL:
15630 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73   {.            s
15640 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c  qlite3_bind_null
15650 28 70 49 6e 73 65 72 74 2c 20 69 2b 31 29 3b 0a  (pInsert, i+1);.
15660 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
15670 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  k;.          }. 
15680 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
15690 4c 49 54 45 5f 49 4e 54 45 47 45 52 3a 20 7b 0a  LITE_INTEGER: {.
156a0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
156b0 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 70  te3_bind_int64(p
156c0 49 6e 73 65 72 74 2c 20 69 2b 31 2c 20 73 71 6c  Insert, i+1, sql
156d0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
156e0 34 28 70 51 75 65 72 79 2c 69 29 29 3b 0a 20 20  4(pQuery,i));.  
156f0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
15700 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
15710 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49         case SQLI
15720 54 45 5f 46 4c 4f 41 54 3a 20 7b 0a 20 20 20 20  TE_FLOAT: {.    
15730 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
15740 62 69 6e 64 5f 64 6f 75 62 6c 65 28 70 49 6e 73  bind_double(pIns
15750 65 72 74 2c 20 69 2b 31 2c 20 73 71 6c 69 74 65  ert, i+1, sqlite
15760 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28  3_column_double(
15770 70 51 75 65 72 79 2c 69 29 29 3b 0a 20 20 20 20  pQuery,i));.    
15780 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
15790 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
157a0 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
157b0 5f 54 45 58 54 3a 20 7b 0a 20 20 20 20 20 20 20  _TEXT: {.       
157c0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e       sqlite3_bin
157d0 64 5f 74 65 78 74 28 70 49 6e 73 65 72 74 2c 20  d_text(pInsert, 
157e0 69 2b 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20  i+1,.           
157f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15800 20 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73    (const char*)s
15810 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
15820 78 74 28 70 51 75 65 72 79 2c 69 29 2c 0a 20 20  xt(pQuery,i),.  
15830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15840 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20 53             -1, S
15850 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
15860 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
15870 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
15880 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
15890 49 54 45 5f 42 4c 4f 42 3a 20 7b 0a 20 20 20 20  ITE_BLOB: {.    
158a0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
158b0 62 69 6e 64 5f 62 6c 6f 62 28 70 49 6e 73 65 72  bind_blob(pInser
158c0 74 2c 20 69 2b 31 2c 20 73 71 6c 69 74 65 33 5f  t, i+1, sqlite3_
158d0 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 51 75 65  column_blob(pQue
158e0 72 79 2c 69 29 2c 0a 20 20 20 20 20 20 20 20 20  ry,i),.         
158f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15910 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d     sqlite3_colum
15920 6e 5f 62 79 74 65 73 28 70 51 75 65 72 79 2c 69  n_bytes(pQuery,i
15930 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
15940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
15960 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
15970 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
15980 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
15990 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20        }.      } 
159a0 2f 2a 20 45 6e 64 20 66 6f 72 20 2a 2f 0a 20 20  /* End for */.  
159b0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
159c0 5f 73 74 65 70 28 70 49 6e 73 65 72 74 29 3b 0a  _step(pInsert);.
159d0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
159e0 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63 21 3d 53  LITE_OK && rc!=S
159f0 51 4c 49 54 45 5f 52 4f 57 20 26 26 20 72 63 21  QLITE_ROW && rc!
15a00 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a  =SQLITE_DONE ){.
15a10 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
15a20 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
15a30 6f 72 20 25 64 3a 20 25 73 5c 6e 22 2c 20 73 71  or %d: %s\n", sq
15a40 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65  lite3_extended_e
15a50 72 72 63 6f 64 65 28 6e 65 77 44 62 29 2c 0a 20  rrcode(newDb),. 
15a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a70 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65         sqlite3_e
15a80 72 72 6d 73 67 28 6e 65 77 44 62 29 29 3b 0a 20  rrmsg(newDb));. 
15a90 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
15aa0 69 74 65 33 5f 72 65 73 65 74 28 70 49 6e 73 65  ite3_reset(pInse
15ab0 72 74 29 3b 0a 20 20 20 20 20 20 63 6e 74 2b 2b  rt);.      cnt++
15ac0 3b 0a 20 20 20 20 20 20 69 66 28 20 28 63 6e 74  ;.      if( (cnt
15ad0 25 73 70 69 6e 52 61 74 65 29 3d 3d 30 20 29 7b  %spinRate)==0 ){
15ae0 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28  .        printf(
15af0 22 25 63 5c 62 22 2c 20 22 7c 2f 2d 5c 5c 22 5b  "%c\b", "|/-\\"[
15b00 28 63 6e 74 2f 73 70 69 6e 52 61 74 65 29 25 34  (cnt/spinRate)%4
15b10 5d 29 3b 0a 20 20 20 20 20 20 20 20 66 66 6c 75  ]);.        fflu
15b20 73 68 28 73 74 64 6f 75 74 29 3b 0a 20 20 20 20  sh(stdout);.    
15b30 20 20 7d 0a 20 20 20 20 7d 20 2f 2a 20 45 6e 64    }.    } /* End
15b40 20 77 68 69 6c 65 20 2a 2f 0a 20 20 20 20 69 66   while */.    if
15b50 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc==SQLITE_DON
15b60 45 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 73  E ) break;.    s
15b70 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
15b80 70 51 75 65 72 79 29 3b 0a 20 20 20 20 73 71 6c  pQuery);.    sql
15b90 69 74 65 33 5f 66 72 65 65 28 7a 51 75 65 72 79  ite3_free(zQuery
15ba0 29 3b 0a 20 20 20 20 7a 51 75 65 72 79 20 3d 20  );.    zQuery = 
15bb0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
15bc0 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5c  "SELECT * FROM \
15bd0 22 25 77 5c 22 20 4f 52 44 45 52 20 42 59 20 72  "%w\" ORDER BY r
15be0 6f 77 69 64 20 44 45 53 43 3b 22 2c 0a 20 20 20  owid DESC;",.   
15bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c00 20 20 20 20 20 20 20 20 20 20 7a 54 61 62 6c 65            zTable
15c10 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
15c20 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70  te3_prepare_v2(p
15c30 2d 3e 64 62 2c 20 7a 51 75 65 72 79 2c 20 2d 31  ->db, zQuery, -1
15c40 2c 20 26 70 51 75 65 72 79 2c 20 30 29 3b 0a 20  , &pQuery, 0);. 
15c50 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
15c60 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
15c70 74 64 65 72 72 2c 20 22 57 61 72 6e 69 6e 67 3a  tderr, "Warning:
15c80 20 63 61 6e 6e 6f 74 20 73 74 65 70 20 5c 22 25   cannot step \"%
15c90 73 5c 22 20 62 61 63 6b 77 61 72 64 73 22 2c 20  s\" backwards", 
15ca0 7a 54 61 62 6c 65 29 3b 0a 20 20 20 20 20 20 62  zTable);.      b
15cb0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  reak;.    }.  } 
15cc0 2f 2a 20 45 6e 64 20 66 6f 72 28 6b 3d 30 2e 2e  /* End for(k=0..
15cd0 2e 29 20 2a 2f 0a 0a 65 6e 64 5f 64 61 74 61 5f  .) */..end_data_
15ce0 78 66 65 72 3a 0a 20 20 73 71 6c 69 74 65 33 5f  xfer:.  sqlite3_
15cf0 66 69 6e 61 6c 69 7a 65 28 70 51 75 65 72 79 29  finalize(pQuery)
15d00 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  ;.  sqlite3_fina
15d10 6c 69 7a 65 28 70 49 6e 73 65 72 74 29 3b 0a 20  lize(pInsert);. 
15d20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 51   sqlite3_free(zQ
15d30 75 65 72 79 29 3b 0a 20 20 73 71 6c 69 74 65 33  uery);.  sqlite3
15d40 5f 66 72 65 65 28 7a 49 6e 73 65 72 74 29 3b 0a  _free(zInsert);.
15d50 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  }.../*.** Try to
15d60 20 74 72 61 6e 73 66 65 72 20 61 6c 6c 20 72 6f   transfer all ro
15d70 77 73 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  ws of the schema
15d80 20 74 68 61 74 20 6d 61 74 63 68 20 7a 57 68 65   that match zWhe
15d90 72 65 2e 20 20 46 6f 72 0a 2a 2a 20 65 61 63 68  re.  For.** each
15da0 20 72 6f 77 2c 20 69 6e 76 6f 6b 65 20 78 46 6f   row, invoke xFo
15db0 72 45 61 63 68 28 29 20 6f 6e 20 74 68 65 20 6f  rEach() on the o
15dc0 62 6a 65 63 74 20 64 65 66 69 6e 65 64 20 62 79  bject defined by
15dd0 20 74 68 61 74 20 72 6f 77 2e 0a 2a 2a 20 49 66   that row..** If
15de0 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63   an error is enc
15df0 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 6d  ountered while m
15e00 6f 76 69 6e 67 20 66 6f 72 77 61 72 64 20 74 68  oving forward th
15e10 72 6f 75 67 68 20 74 68 65 0a 2a 2a 20 73 71 6c  rough the.** sql
15e20 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
15e30 2c 20 74 72 79 20 61 67 61 69 6e 20 6d 6f 76 69  , try again movi
15e40 6e 67 20 62 61 63 6b 77 61 72 64 73 2e 0a 2a 2f  ng backwards..*/
15e50 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 72 79  .static void try
15e60 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28 0a 20  ToCloneSchema(. 
15e70 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 2c 0a   ShellState *p,.
15e80 20 20 73 71 6c 69 74 65 33 20 2a 6e 65 77 44 62    sqlite3 *newDb
15e90 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ,.  const char *
15ea0 7a 57 68 65 72 65 2c 0a 20 20 76 6f 69 64 20 28  zWhere,.  void (
15eb0 2a 78 46 6f 72 45 61 63 68 29 28 53 68 65 6c 6c  *xForEach)(Shell
15ec0 53 74 61 74 65 2a 2c 73 71 6c 69 74 65 33 2a 2c  State*,sqlite3*,
15ed0 63 6f 6e 73 74 20 63 68 61 72 2a 29 0a 29 7b 0a  const char*).){.
15ee0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
15ef0 70 51 75 65 72 79 20 3d 20 30 3b 0a 20 20 63 68  pQuery = 0;.  ch
15f00 61 72 20 2a 7a 51 75 65 72 79 20 3d 20 30 3b 0a  ar *zQuery = 0;.
15f10 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 6f 6e 73    int rc;.  cons
15f20 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
15f30 2a 7a 4e 61 6d 65 3b 0a 20 20 63 6f 6e 73 74 20  *zName;.  const 
15f40 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 7a  unsigned char *z
15f50 53 71 6c 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72  Sql;.  char *zEr
15f60 72 4d 73 67 20 3d 20 30 3b 0a 0a 20 20 7a 51 75  rMsg = 0;..  zQu
15f70 65 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ery = sqlite3_mp
15f80 72 69 6e 74 66 28 22 53 45 4c 45 43 54 20 6e 61  rintf("SELECT na
15f90 6d 65 2c 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c  me, sql FROM sql
15fa0 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20  ite_master".    
15fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fc0 20 20 20 20 20 20 20 22 20 57 48 45 52 45 20 25         " WHERE %
15fd0 73 22 2c 20 7a 57 68 65 72 65 29 3b 0a 20 20 72  s", zWhere);.  r
15fe0 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
15ff0 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a 51  are_v2(p->db, zQ
16000 75 65 72 79 2c 20 2d 31 2c 20 26 70 51 75 65 72  uery, -1, &pQuer
16010 79 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63 20  y, 0);.  if( rc 
16020 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  ){.    utf8_prin
16030 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
16040 72 3a 20 28 25 64 29 20 25 73 20 6f 6e 20 5b 25  r: (%d) %s on [%
16050 73 5d 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  s]\n",.         
16060 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
16070 65 33 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63  e3_extended_errc
16080 6f 64 65 28 70 2d 3e 64 62 29 2c 20 73 71 6c 69  ode(p->db), sqli
16090 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62  te3_errmsg(p->db
160a0 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
160b0 20 20 20 20 20 20 20 7a 51 75 65 72 79 29 3b 0a         zQuery);.
160c0 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 73 63 68      goto end_sch
160d0 65 6d 61 5f 78 66 65 72 3b 0a 20 20 7d 0a 20 20  ema_xfer;.  }.  
160e0 77 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c  while( (rc = sql
160f0 69 74 65 33 5f 73 74 65 70 28 70 51 75 65 72 79  ite3_step(pQuery
16100 29 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  ))==SQLITE_ROW )
16110 7b 0a 20 20 20 20 7a 4e 61 6d 65 20 3d 20 73 71  {.    zName = sq
16120 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
16130 74 28 70 51 75 65 72 79 2c 20 30 29 3b 0a 20 20  t(pQuery, 0);.  
16140 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
16150 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 51 75  _column_text(pQu
16160 65 72 79 2c 20 31 29 3b 0a 20 20 20 20 70 72 69  ery, 1);.    pri
16170 6e 74 66 28 22 25 73 2e 2e 2e 20 22 2c 20 7a 4e  ntf("%s... ", zN
16180 61 6d 65 29 3b 20 66 66 6c 75 73 68 28 73 74 64  ame); fflush(std
16190 6f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  out);.    sqlite
161a0 33 5f 65 78 65 63 28 6e 65 77 44 62 2c 20 28 63  3_exec(newDb, (c
161b0 6f 6e 73 74 20 63 68 61 72 2a 29 7a 53 71 6c 2c  onst char*)zSql,
161c0 20 30 2c 20 30 2c 20 26 7a 45 72 72 4d 73 67 29   0, 0, &zErrMsg)
161d0 3b 0a 20 20 20 20 69 66 28 20 7a 45 72 72 4d 73  ;.    if( zErrMs
161e0 67 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f  g ){.      utf8_
161f0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
16200 45 72 72 6f 72 3a 20 25 73 5c 6e 53 51 4c 3a 20  Error: %s\nSQL: 
16210 5b 25 73 5d 5c 6e 22 2c 20 7a 45 72 72 4d 73 67  [%s]\n", zErrMsg
16220 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 73  , zSql);.      s
16230 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72  qlite3_free(zErr
16240 4d 73 67 29 3b 0a 20 20 20 20 20 20 7a 45 72 72  Msg);.      zErr
16250 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  Msg = 0;.    }. 
16260 20 20 20 69 66 28 20 78 46 6f 72 45 61 63 68 20     if( xForEach 
16270 29 7b 0a 20 20 20 20 20 20 78 46 6f 72 45 61 63  ){.      xForEac
16280 68 28 70 2c 20 6e 65 77 44 62 2c 20 28 63 6f 6e  h(p, newDb, (con
16290 73 74 20 63 68 61 72 2a 29 7a 4e 61 6d 65 29 3b  st char*)zName);
162a0 0a 20 20 20 20 7d 0a 20 20 20 20 70 72 69 6e 74  .    }.    print
162b0 66 28 22 64 6f 6e 65 5c 6e 22 29 3b 0a 20 20 7d  f("done\n");.  }
162c0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
162d0 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 73 71  E_DONE ){.    sq
162e0 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
162f0 51 75 65 72 79 29 3b 0a 20 20 20 20 73 71 6c 69  Query);.    sqli
16300 74 65 33 5f 66 72 65 65 28 7a 51 75 65 72 79 29  te3_free(zQuery)
16310 3b 0a 20 20 20 20 7a 51 75 65 72 79 20 3d 20 73  ;.    zQuery = s
16320 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
16330 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 73 71 6c  SELECT name, sql
16340 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
16350 74 65 72 22 0a 20 20 20 20 20 20 20 20 20 20 20  ter".           
16360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16370 20 20 22 20 57 48 45 52 45 20 25 73 20 4f 52 44    " WHERE %s ORD
16380 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43  ER BY rowid DESC
16390 22 2c 20 7a 57 68 65 72 65 29 3b 0a 20 20 20 20  ", zWhere);.    
163a0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
163b0 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a  pare_v2(p->db, z
163c0 51 75 65 72 79 2c 20 2d 31 2c 20 26 70 51 75 65  Query, -1, &pQue
163d0 72 79 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20  ry, 0);.    if( 
163e0 72 63 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  rc ){.      utf8
163f0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
16400 22 45 72 72 6f 72 3a 20 28 25 64 29 20 25 73 20  "Error: (%d) %s 
16410 6f 6e 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20 20 20  on [%s]\n",.    
16420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16430 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64    sqlite3_extend
16440 65 64 5f 65 72 72 63 6f 64 65 28 70 2d 3e 64 62  ed_errcode(p->db
16450 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ), sqlite3_errms
16460 67 28 70 2d 3e 64 62 29 2c 0a 20 20 20 20 20 20  g(p->db),.      
16470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16480 7a 51 75 65 72 79 29 3b 0a 20 20 20 20 20 20 67  zQuery);.      g
16490 6f 74 6f 20 65 6e 64 5f 73 63 68 65 6d 61 5f 78  oto end_schema_x
164a0 66 65 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77  fer;.    }.    w
164b0 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c 69  hile( (rc = sqli
164c0 74 65 33 5f 73 74 65 70 28 70 51 75 65 72 79 29  te3_step(pQuery)
164d0 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b  )==SQLITE_ROW ){
164e0 0a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 73  .      zName = s
164f0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
16500 78 74 28 70 51 75 65 72 79 2c 20 30 29 3b 0a 20  xt(pQuery, 0);. 
16510 20 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69       zSql = sqli
16520 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
16530 70 51 75 65 72 79 2c 20 31 29 3b 0a 20 20 20 20  pQuery, 1);.    
16540 20 20 70 72 69 6e 74 66 28 22 25 73 2e 2e 2e 20    printf("%s... 
16550 22 2c 20 7a 4e 61 6d 65 29 3b 20 66 66 6c 75 73  ", zName); fflus
16560 68 28 73 74 64 6f 75 74 29 3b 0a 20 20 20 20 20  h(stdout);.     
16570 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 6e 65   sqlite3_exec(ne
16580 77 44 62 2c 20 28 63 6f 6e 73 74 20 63 68 61 72  wDb, (const char
16590 2a 29 7a 53 71 6c 2c 20 30 2c 20 30 2c 20 26 7a  *)zSql, 0, 0, &z
165a0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 69  ErrMsg);.      i
165b0 66 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20  f( zErrMsg ){.  
165c0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
165d0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
165e0 3a 20 25 73 5c 6e 53 51 4c 3a 20 5b 25 73 5d 5c  : %s\nSQL: [%s]\
165f0 6e 22 2c 20 7a 45 72 72 4d 73 67 2c 20 7a 53 71  n", zErrMsg, zSq
16600 6c 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  l);.        sqli
16610 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67  te3_free(zErrMsg
16620 29 3b 0a 20 20 20 20 20 20 20 20 7a 45 72 72 4d  );.        zErrM
16630 73 67 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  sg = 0;.      }.
16640 20 20 20 20 20 20 69 66 28 20 78 46 6f 72 45 61        if( xForEa
16650 63 68 20 29 7b 0a 20 20 20 20 20 20 20 20 78 46  ch ){.        xF
16660 6f 72 45 61 63 68 28 70 2c 20 6e 65 77 44 62 2c  orEach(p, newDb,
16670 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a 4e   (const char*)zN
16680 61 6d 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ame);.      }.  
16690 20 20 20 20 70 72 69 6e 74 66 28 22 64 6f 6e 65      printf("done
166a0 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  \n");.    }.  }.
166b0 65 6e 64 5f 73 63 68 65 6d 61 5f 78 66 65 72 3a  end_schema_xfer:
166c0 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
166d0 69 7a 65 28 70 51 75 65 72 79 29 3b 0a 20 20 73  ize(pQuery);.  s
166e0 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 51 75 65  qlite3_free(zQue
166f0 72 79 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70  ry);.}../*.** Op
16700 65 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61 73  en a new databas
16710 65 20 66 69 6c 65 20 6e 61 6d 65 64 20 22 7a 4e  e file named "zN
16720 65 77 44 62 22 2e 20 20 54 72 79 20 74 6f 20 72  ewDb".  Try to r
16730 65 63 6f 76 65 72 20 61 73 20 6d 75 63 68 20 69  ecover as much i
16740 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 61 73  nformation.** as
16750 20 70 6f 73 73 69 62 6c 65 20 6f 75 74 20 6f 66   possible out of
16760 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
16770 73 65 20 28 77 68 69 63 68 20 6d 69 67 68 74 20  se (which might 
16780 62 65 20 63 6f 72 72 75 70 74 29 20 61 6e 64 20  be corrupt) and 
16790 77 72 69 74 65 20 69 74 0a 2a 2a 20 69 6e 74 6f  write it.** into
167a0 20 7a 4e 65 77 44 62 2e 0a 2a 2f 0a 73 74 61 74   zNewDb..*/.stat
167b0 69 63 20 76 6f 69 64 20 74 72 79 54 6f 43 6c 6f  ic void tryToClo
167c0 6e 65 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  ne(ShellState *p
167d0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  , const char *zN
167e0 65 77 44 62 29 7b 0a 20 20 69 6e 74 20 72 63 3b  ewDb){.  int rc;
167f0 0a 20 20 73 71 6c 69 74 65 33 20 2a 6e 65 77 44  .  sqlite3 *newD
16800 62 20 3d 20 30 3b 0a 20 20 69 66 28 20 61 63 63  b = 0;.  if( acc
16810 65 73 73 28 7a 4e 65 77 44 62 2c 30 29 3d 3d 30  ess(zNewDb,0)==0
16820 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72 69   ){.    utf8_pri
16830 6e 74 66 28 73 74 64 65 72 72 2c 20 22 46 69 6c  ntf(stderr, "Fil
16840 65 20 5c 22 25 73 5c 22 20 61 6c 72 65 61 64 79  e \"%s\" already
16850 20 65 78 69 73 74 73 2e 5c 6e 22 2c 20 7a 4e 65   exists.\n", zNe
16860 77 44 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  wDb);.    return
16870 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
16880 69 74 65 33 5f 6f 70 65 6e 28 7a 4e 65 77 44 62  ite3_open(zNewDb
16890 2c 20 26 6e 65 77 44 62 29 3b 0a 20 20 69 66 28  , &newDb);.  if(
168a0 20 72 63 20 29 7b 0a 20 20 20 20 75 74 66 38 5f   rc ){.    utf8_
168b0 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
168c0 43 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 6f 75  Cannot create ou
168d0 74 70 75 74 20 64 61 74 61 62 61 73 65 3a 20 25  tput database: %
168e0 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  s\n",.          
168f0 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67    sqlite3_errmsg
16900 28 6e 65 77 44 62 29 29 3b 0a 20 20 7d 65 6c 73  (newDb));.  }els
16910 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65  e{.    sqlite3_e
16920 78 65 63 28 70 2d 3e 64 62 2c 20 22 50 52 41 47  xec(p->db, "PRAG
16930 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
16940 6d 61 3d 4f 4e 3b 22 2c 20 30 2c 20 30 2c 20 30  ma=ON;", 0, 0, 0
16950 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65  );.    sqlite3_e
16960 78 65 63 28 6e 65 77 44 62 2c 20 22 42 45 47 49  xec(newDb, "BEGI
16970 4e 20 45 58 43 4c 55 53 49 56 45 3b 22 2c 20 30  N EXCLUSIVE;", 0
16980 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 74 72 79  , 0, 0);.    try
16990 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28 70 2c  ToCloneSchema(p,
169a0 20 6e 65 77 44 62 2c 20 22 74 79 70 65 3d 27 74   newDb, "type='t
169b0 61 62 6c 65 27 22 2c 20 74 72 79 54 6f 43 6c 6f  able'", tryToClo
169c0 6e 65 44 61 74 61 29 3b 0a 20 20 20 20 74 72 79  neData);.    try
169d0 54 6f 43 6c 6f 6e 65 53 63 68 65 6d 61 28 70 2c  ToCloneSchema(p,
169e0 20 6e 65 77 44 62 2c 20 22 74 79 70 65 21 3d 27   newDb, "type!='
169f0 74 61 62 6c 65 27 22 2c 20 30 29 3b 0a 20 20 20  table'", 0);.   
16a00 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 6e 65   sqlite3_exec(ne
16a10 77 44 62 2c 20 22 43 4f 4d 4d 49 54 3b 22 2c 20  wDb, "COMMIT;", 
16a20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 73 71  0, 0, 0);.    sq
16a30 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
16a40 2c 20 22 50 52 41 47 4d 41 20 77 72 69 74 61 62  , "PRAGMA writab
16a50 6c 65 5f 73 63 68 65 6d 61 3d 4f 46 46 3b 22 2c  le_schema=OFF;",
16a60 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20   0, 0, 0);.  }. 
16a70 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 6e   sqlite3_close(n
16a80 65 77 44 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  ewDb);.}../*.** 
16a90 43 68 61 6e 67 65 20 74 68 65 20 6f 75 74 70 75  Change the outpu
16aa0 74 20 66 69 6c 65 20 62 61 63 6b 20 74 6f 20 73  t file back to s
16ab0 74 64 6f 75 74 0a 2a 2f 0a 73 74 61 74 69 63 20  tdout.*/.static 
16ac0 76 6f 69 64 20 6f 75 74 70 75 74 5f 72 65 73 65  void output_rese
16ad0 74 28 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29  t(ShellState *p)
16ae0 7b 0a 20 20 69 66 28 20 70 2d 3e 6f 75 74 66 69  {.  if( p->outfi
16af0 6c 65 5b 30 5d 3d 3d 27 7c 27 20 29 7b 0a 23 69  le[0]=='|' ){.#i
16b00 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
16b10 54 5f 50 4f 50 45 4e 0a 20 20 20 20 70 63 6c 6f  T_POPEN.    pclo
16b20 73 65 28 70 2d 3e 6f 75 74 29 3b 0a 23 65 6e 64  se(p->out);.#end
16b30 69 66 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  if.  }else{.    
16b40 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63 6c 6f 73  output_file_clos
16b50 65 28 70 2d 3e 6f 75 74 29 3b 0a 20 20 7d 0a 20  e(p->out);.  }. 
16b60 20 70 2d 3e 6f 75 74 66 69 6c 65 5b 30 5d 20 3d   p->outfile[0] =
16b70 20 30 3b 0a 20 20 70 2d 3e 6f 75 74 20 3d 20 73   0;.  p->out = s
16b80 74 64 6f 75 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  tdout;.}../*.** 
16b90 52 75 6e 20 61 6e 20 53 51 4c 20 63 6f 6d 6d 61  Run an SQL comma
16ba0 6e 64 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68  nd and return th
16bb0 65 20 73 69 6e 67 6c 65 20 69 6e 74 65 67 65 72  e single integer
16bc0 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74   result..*/.stat
16bd0 69 63 20 69 6e 74 20 64 62 5f 69 6e 74 28 53 68  ic int db_int(Sh
16be0 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 63 6f 6e  ellState *p, con
16bf0 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 29 7b 0a  st char *zSql){.
16c00 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
16c10 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 65 73  pStmt;.  int res
16c20 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f   = 0;.  sqlite3_
16c30 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62  prepare_v2(p->db
16c40 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74  , zSql, -1, &pSt
16c50 6d 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 53  mt, 0);.  if( pS
16c60 74 6d 74 20 26 26 20 73 71 6c 69 74 65 33 5f 73  tmt && sqlite3_s
16c70 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49  tep(pStmt)==SQLI
16c80 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 72 65  TE_ROW ){.    re
16c90 73 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  s = sqlite3_colu
16ca0 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c 30 29 3b  mn_int(pStmt,0);
16cb0 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66  .  }.  sqlite3_f
16cc0 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a  inalize(pStmt);.
16cd0 20 20 72 65 74 75 72 6e 20 72 65 73 3b 0a 7d 0a    return res;.}.
16ce0 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61  ./*.** Convert a
16cf0 20 32 2d 62 79 74 65 20 6f 72 20 34 2d 62 79 74   2-byte or 4-byt
16d00 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
16d10 65 67 65 72 20 69 6e 74 6f 20 61 20 6e 61 74 69  eger into a nati
16d20 76 65 20 69 6e 74 65 67 65 72 0a 2a 2f 0a 73 74  ve integer.*/.st
16d30 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 69 6e  atic unsigned in
16d40 74 20 67 65 74 32 62 79 74 65 49 6e 74 28 75 6e  t get2byteInt(un
16d50 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61 29 7b  signed char *a){
16d60 0a 20 20 72 65 74 75 72 6e 20 28 61 5b 30 5d 3c  .  return (a[0]<
16d70 3c 38 29 20 2b 20 61 5b 31 5d 3b 0a 7d 0a 73 74  <8) + a[1];.}.st
16d80 61 74 69 63 20 75 6e 73 69 67 6e 65 64 20 69 6e  atic unsigned in
16d90 74 20 67 65 74 34 62 79 74 65 49 6e 74 28 75 6e  t get4byteInt(un
16da0 73 69 67 6e 65 64 20 63 68 61 72 20 2a 61 29 7b  signed char *a){
16db0 0a 20 20 72 65 74 75 72 6e 20 28 61 5b 30 5d 3c  .  return (a[0]<
16dc0 3c 32 34 29 20 2b 20 28 61 5b 31 5d 3c 3c 31 36  <24) + (a[1]<<16
16dd0 29 20 2b 20 28 61 5b 32 5d 3c 3c 38 29 20 2b 20  ) + (a[2]<<8) + 
16de0 61 5b 33 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  a[3];.}../*.** I
16df0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
16e00 20 74 68 65 20 22 2e 69 6e 66 6f 22 20 63 6f 6d   the ".info" com
16e10 6d 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75  mand..**.** Retu
16e20 72 6e 20 31 20 6f 6e 20 65 72 72 6f 72 2c 20 32  rn 1 on error, 2
16e30 20 74 6f 20 65 78 69 74 2c 20 61 6e 64 20 30 20   to exit, and 0 
16e40 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2f 0a 73 74  otherwise..*/.st
16e50 61 74 69 63 20 69 6e 74 20 73 68 65 6c 6c 5f 64  atic int shell_d
16e60 62 69 6e 66 6f 5f 63 6f 6d 6d 61 6e 64 28 53 68  binfo_command(Sh
16e70 65 6c 6c 53 74 61 74 65 20 2a 70 2c 20 69 6e 74  ellState *p, int
16e80 20 6e 41 72 67 2c 20 63 68 61 72 20 2a 2a 61 7a   nArg, char **az
16e90 41 72 67 29 7b 0a 20 20 73 74 61 74 69 63 20 63  Arg){.  static c
16ea0 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 20 63 6f  onst struct { co
16eb0 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  nst char *zName;
16ec0 20 69 6e 74 20 6f 66 73 74 3b 20 7d 20 61 46 69   int ofst; } aFi
16ed0 65 6c 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b  eld[] = {.     {
16ee0 20 22 66 69 6c 65 20 63 68 61 6e 67 65 20 63 6f   "file change co
16ef0 75 6e 74 65 72 3a 22 2c 20 20 32 34 20 20 7d 2c  unter:",  24  },
16f00 0a 20 20 20 20 20 7b 20 22 64 61 74 61 62 61 73  .     { "databas
16f10 65 20 70 61 67 65 20 63 6f 75 6e 74 3a 22 2c 20  e page count:", 
16f20 20 32 38 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22   28  },.     { "
16f30 66 72 65 65 6c 69 73 74 20 70 61 67 65 20 63 6f  freelist page co
16f40 75 6e 74 3a 22 2c 20 20 33 36 20 20 7d 2c 0a 20  unt:",  36  },. 
16f50 20 20 20 20 7b 20 22 73 63 68 65 6d 61 20 63 6f      { "schema co
16f60 6f 6b 69 65 3a 22 2c 20 20 20 20 20 20 20 20 34  okie:",        4
16f70 30 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 63  0  },.     { "sc
16f80 68 65 6d 61 20 66 6f 72 6d 61 74 3a 22 2c 20 20  hema format:",  
16f90 20 20 20 20 20 20 34 34 20 20 7d 2c 0a 20 20 20        44  },.   
16fa0 20 20 7b 20 22 64 65 66 61 75 6c 74 20 63 61 63    { "default cac
16fb0 68 65 20 73 69 7a 65 3a 22 2c 20 20 20 34 38 20  he size:",   48 
16fc0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 61 75 74 6f   },.     { "auto
16fd0 76 61 63 75 75 6d 20 74 6f 70 20 72 6f 6f 74 3a  vacuum top root:
16fe0 22 2c 20 20 35 32 20 20 7d 2c 0a 20 20 20 20 20  ",  52  },.     
16ff0 7b 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76  { "incremental v
17000 61 63 75 75 6d 3a 22 2c 20 20 20 36 34 20 20 7d  acuum:",   64  }
17010 2c 0a 20 20 20 20 20 7b 20 22 74 65 78 74 20 65  ,.     { "text e
17020 6e 63 6f 64 69 6e 67 3a 22 2c 20 20 20 20 20 20  ncoding:",      
17030 20 20 35 36 20 20 7d 2c 0a 20 20 20 20 20 7b 20    56  },.     { 
17040 22 75 73 65 72 20 76 65 72 73 69 6f 6e 3a 22 2c  "user version:",
17050 20 20 20 20 20 20 20 20 20 36 30 20 20 7d 2c 0a           60  },.
17060 20 20 20 20 20 7b 20 22 61 70 70 6c 69 63 61 74       { "applicat
17070 69 6f 6e 20 69 64 3a 22 2c 20 20 20 20 20 20 20  ion id:",       
17080 36 38 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73  68  },.     { "s
17090 6f 66 74 77 61 72 65 20 76 65 72 73 69 6f 6e 3a  oftware version:
170a0 22 2c 20 20 20 20 20 39 36 20 20 7d 2c 0a 20 20  ",     96  },.  
170b0 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  };.  static cons
170c0 74 20 73 74 72 75 63 74 20 7b 20 63 6f 6e 73 74  t struct { const
170d0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 63 6f   char *zName; co
170e0 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b 20  nst char *zSql; 
170f0 7d 20 61 51 75 65 72 79 5b 5d 20 3d 20 7b 0a 20  } aQuery[] = {. 
17100 20 20 20 20 7b 20 22 6e 75 6d 62 65 72 20 6f 66      { "number of
17110 20 74 61 62 6c 65 73 3a 22 2c 0a 20 20 20 20 20   tables:",.     
17120 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28    "SELECT count(
17130 2a 29 20 46 52 4f 4d 20 25 73 20 57 48 45 52 45  *) FROM %s WHERE
17140 20 74 79 70 65 3d 27 74 61 62 6c 65 27 22 20 7d   type='table'" }
17150 2c 0a 20 20 20 20 20 7b 20 22 6e 75 6d 62 65 72  ,.     { "number
17160 20 6f 66 20 69 6e 64 65 78 65 73 3a 22 2c 0a 20   of indexes:",. 
17170 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f        "SELECT co
17180 75 6e 74 28 2a 29 20 46 52 4f 4d 20 25 73 20 57  unt(*) FROM %s W
17190 48 45 52 45 20 74 79 70 65 3d 27 69 6e 64 65 78  HERE type='index
171a0 27 22 20 7d 2c 0a 20 20 20 20 20 7b 20 22 6e 75  '" },.     { "nu
171b0 6d 62 65 72 20 6f 66 20 74 72 69 67 67 65 72 73  mber of triggers
171c0 3a 22 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45  :",.       "SELE
171d0 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
171e0 20 25 73 20 57 48 45 52 45 20 74 79 70 65 3d 27   %s WHERE type='
171f0 74 72 69 67 67 65 72 27 22 20 7d 2c 0a 20 20 20  trigger'" },.   
17200 20 20 7b 20 22 6e 75 6d 62 65 72 20 6f 66 20 76    { "number of v
17210 69 65 77 73 3a 22 2c 0a 20 20 20 20 20 20 20 22  iews:",.       "
17220 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
17230 46 52 4f 4d 20 25 73 20 57 48 45 52 45 20 74 79  FROM %s WHERE ty
17240 70 65 3d 27 76 69 65 77 27 22 20 7d 2c 0a 20 20  pe='view'" },.  
17250 20 20 20 7b 20 22 73 63 68 65 6d 61 20 73 69 7a     { "schema siz
17260 65 3a 22 2c 0a 20 20 20 20 20 20 20 22 53 45 4c  e:",.       "SEL
17270 45 43 54 20 74 6f 74 61 6c 28 6c 65 6e 67 74 68  ECT total(length
17280 28 73 71 6c 29 29 20 46 52 4f 4d 20 25 73 22 20  (sql)) FROM %s" 
17290 7d 2c 0a 20 20 7d 3b 0a 20 20 73 71 6c 69 74 65  },.  };.  sqlite
172a0 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d 20  3_file *pFile = 
172b0 30 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68  0;.  int i;.  ch
172c0 61 72 20 2a 7a 53 63 68 65 6d 61 54 61 62 3b 0a  ar *zSchemaTab;.
172d0 20 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 6e 41    char *zDb = nA
172e0 72 67 3e 3d 32 20 3f 20 61 7a 41 72 67 5b 31 5d  rg>=2 ? azArg[1]
172f0 20 3a 20 22 6d 61 69 6e 22 3b 0a 20 20 75 6e 73   : "main";.  uns
17300 69 67 6e 65 64 20 63 68 61 72 20 61 48 64 72 5b  igned char aHdr[
17310 31 30 30 5d 3b 0a 20 20 6f 70 65 6e 5f 64 62 28  100];.  open_db(
17320 70 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 2d 3e  p, 0);.  if( p->
17330 64 62 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31  db==0 ) return 1
17340 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  ;.  sqlite3_file
17350 5f 63 6f 6e 74 72 6f 6c 28 70 2d 3e 64 62 2c 20  _control(p->db, 
17360 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54  zDb, SQLITE_FCNT
17370 4c 5f 46 49 4c 45 5f 50 4f 49 4e 54 45 52 2c 20  L_FILE_POINTER, 
17380 26 70 46 69 6c 65 29 3b 0a 20 20 69 66 28 20 70  &pFile);.  if( p
17390 46 69 6c 65 3d 3d 30 20 7c 7c 20 70 46 69 6c 65  File==0 || pFile
173a0 2d 3e 70 4d 65 74 68 6f 64 73 3d 3d 30 20 7c 7c  ->pMethods==0 ||
173b0 20 70 46 69 6c 65 2d 3e 70 4d 65 74 68 6f 64 73   pFile->pMethods
173c0 2d 3e 78 52 65 61 64 3d 3d 30 20 29 7b 0a 20 20  ->xRead==0 ){.  
173d0 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a    return 1;.  }.
173e0 20 20 69 20 3d 20 70 46 69 6c 65 2d 3e 70 4d 65    i = pFile->pMe
173f0 74 68 6f 64 73 2d 3e 78 52 65 61 64 28 70 46 69  thods->xRead(pFi
17400 6c 65 2c 20 61 48 64 72 2c 20 31 30 30 2c 20 30  le, aHdr, 100, 0
17410 29 3b 0a 20 20 69 66 28 20 69 21 3d 53 51 4c 49  );.  if( i!=SQLI
17420 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 61 77  TE_OK ){.    raw
17430 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
17440 22 75 6e 61 62 6c 65 20 74 6f 20 72 65 61 64 20  "unable to read 
17450 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72 5c  database header\
17460 6e 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  n");.    return 
17470 31 3b 0a 20 20 7d 0a 20 20 69 20 3d 20 67 65 74  1;.  }.  i = get
17480 32 62 79 74 65 49 6e 74 28 61 48 64 72 2b 31 36  2byteInt(aHdr+16
17490 29 3b 0a 20 20 69 66 28 20 69 3d 3d 31 20 29 20  );.  if( i==1 ) 
174a0 69 20 3d 20 36 35 35 33 36 3b 0a 20 20 75 74 66  i = 65536;.  utf
174b0 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  8_printf(p->out,
174c0 20 22 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22   "%-20s %d\n", "
174d0 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69  database page si
174e0 7a 65 3a 22 2c 20 69 29 3b 0a 20 20 75 74 66 38  ze:", i);.  utf8
174f0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
17500 22 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22 77  "%-20s %d\n", "w
17510 72 69 74 65 20 66 6f 72 6d 61 74 3a 22 2c 20 61  rite format:", a
17520 48 64 72 5b 31 38 5d 29 3b 0a 20 20 75 74 66 38  Hdr[18]);.  utf8
17530 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
17540 22 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22 72  "%-20s %d\n", "r
17550 65 61 64 20 66 6f 72 6d 61 74 3a 22 2c 20 61 48  ead format:", aH
17560 64 72 5b 31 39 5d 29 3b 0a 20 20 75 74 66 38 5f  dr[19]);.  utf8_
17570 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
17580 25 2d 32 30 73 20 25 64 5c 6e 22 2c 20 22 72 65  %-20s %d\n", "re
17590 73 65 72 76 65 64 20 62 79 74 65 73 3a 22 2c 20  served bytes:", 
175a0 61 48 64 72 5b 32 30 5d 29 3b 0a 20 20 66 6f 72  aHdr[20]);.  for
175b0 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a  (i=0; i<ArraySiz
175c0 65 28 61 46 69 65 6c 64 29 3b 20 69 2b 2b 29 7b  e(aField); i++){
175d0 0a 20 20 20 20 69 6e 74 20 6f 66 73 74 20 3d 20  .    int ofst = 
175e0 61 46 69 65 6c 64 5b 69 5d 2e 6f 66 73 74 3b 0a  aField[i].ofst;.
175f0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74      unsigned int
17600 20 76 61 6c 20 3d 20 67 65 74 34 62 79 74 65 49   val = get4byteI
17610 6e 74 28 61 48 64 72 20 2b 20 6f 66 73 74 29 3b  nt(aHdr + ofst);
17620 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
17630 28 70 2d 3e 6f 75 74 2c 20 22 25 2d 32 30 73 20  (p->out, "%-20s 
17640 25 75 22 2c 20 61 46 69 65 6c 64 5b 69 5d 2e 7a  %u", aField[i].z
17650 4e 61 6d 65 2c 20 76 61 6c 29 3b 0a 20 20 20 20  Name, val);.    
17660 73 77 69 74 63 68 28 20 6f 66 73 74 20 29 7b 0a  switch( ofst ){.
17670 20 20 20 20 20 20 63 61 73 65 20 35 36 3a 20 7b        case 56: {
17680 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 61 6c  .        if( val
17690 3d 3d 31 20 29 20 72 61 77 5f 70 72 69 6e 74 66  ==1 ) raw_printf
176a0 28 70 2d 3e 6f 75 74 2c 20 22 20 28 75 74 66 38  (p->out, " (utf8
176b0 29 22 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  )");.        if(
176c0 20 76 61 6c 3d 3d 32 20 29 20 72 61 77 5f 70 72   val==2 ) raw_pr
176d0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 20 28  intf(p->out, " (
176e0 75 74 66 31 36 6c 65 29 22 29 3b 0a 20 20 20 20  utf16le)");.    
176f0 20 20 20 20 69 66 28 20 76 61 6c 3d 3d 33 20 29      if( val==3 )
17700 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f   raw_printf(p->o
17710 75 74 2c 20 22 20 28 75 74 66 31 36 62 65 29 22  ut, " (utf16be)"
17720 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
17730 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
17740 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20  p->out, "\n");. 
17750 20 7d 0a 20 20 69 66 28 20 7a 44 62 3d 3d 30 20   }.  if( zDb==0 
17760 29 7b 0a 20 20 20 20 7a 53 63 68 65 6d 61 54 61  ){.    zSchemaTa
17770 62 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  b = sqlite3_mpri
17780 6e 74 66 28 22 6d 61 69 6e 2e 73 71 6c 69 74 65  ntf("main.sqlite
17790 5f 6d 61 73 74 65 72 22 29 3b 0a 20 20 7d 65 6c  _master");.  }el
177a0 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 44  se if( strcmp(zD
177b0 62 2c 22 74 65 6d 70 22 29 3d 3d 30 20 29 7b 0a  b,"temp")==0 ){.
177c0 20 20 20 20 7a 53 63 68 65 6d 61 54 61 62 20 3d      zSchemaTab =
177d0 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
177e0 28 22 25 73 22 2c 20 22 73 71 6c 69 74 65 5f 74  ("%s", "sqlite_t
177f0 65 6d 70 5f 6d 61 73 74 65 72 22 29 3b 0a 20 20  emp_master");.  
17800 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 53 63 68 65  }else{.    zSche
17810 6d 61 54 61 62 20 3d 20 73 71 6c 69 74 65 33 5f  maTab = sqlite3_
17820 6d 70 72 69 6e 74 66 28 22 5c 22 25 77 5c 22 2e  mprintf("\"%w\".
17830 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 2c 20  sqlite_master", 
17840 7a 44 62 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 28  zDb);.  }.  for(
17850 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65  i=0; i<ArraySize
17860 28 61 51 75 65 72 79 29 3b 20 69 2b 2b 29 7b 0a  (aQuery); i++){.
17870 20 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d      char *zSql =
17880 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
17890 28 61 51 75 65 72 79 5b 69 5d 2e 7a 53 71 6c 2c  (aQuery[i].zSql,
178a0 20 7a 53 63 68 65 6d 61 54 61 62 29 3b 0a 20 20   zSchemaTab);.  
178b0 20 20 69 6e 74 20 76 61 6c 20 3d 20 64 62 5f 69    int val = db_i
178c0 6e 74 28 70 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  nt(p, zSql);.   
178d0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53   sqlite3_free(zS
178e0 71 6c 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72  ql);.    utf8_pr
178f0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 2d  intf(p->out, "%-
17900 32 30 73 20 25 64 5c 6e 22 2c 20 61 51 75 65 72  20s %d\n", aQuer
17910 79 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 76 61 6c 29  y[i].zName, val)
17920 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ;.  }.  sqlite3_
17930 66 72 65 65 28 7a 53 63 68 65 6d 61 54 61 62 29  free(zSchemaTab)
17940 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  ;.  return 0;.}.
17950 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65  ./*.** Print the
17960 20 63 75 72 72 65 6e 74 20 73 71 6c 69 74 65 33   current sqlite3
17970 5f 65 72 72 6d 73 67 28 29 20 76 61 6c 75 65 20  _errmsg() value 
17980 74 6f 20 73 74 64 65 72 72 20 61 6e 64 20 72 65  to stderr and re
17990 74 75 72 6e 20 31 2e 0a 2a 2f 0a 73 74 61 74 69  turn 1..*/.stati
179a0 63 20 69 6e 74 20 73 68 65 6c 6c 44 61 74 61 62  c int shellDatab
179b0 61 73 65 45 72 72 6f 72 28 73 71 6c 69 74 65 33  aseError(sqlite3
179c0 20 2a 64 62 29 7b 0a 20 20 63 6f 6e 73 74 20 63   *db){.  const c
179d0 68 61 72 20 2a 7a 45 72 72 20 3d 20 73 71 6c 69  har *zErr = sqli
179e0 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 3b 0a  te3_errmsg(db);.
179f0 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
17a00 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25 73  derr, "Error: %s
17a10 5c 6e 22 2c 20 7a 45 72 72 29 3b 0a 20 20 72 65  \n", zErr);.  re
17a20 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 1;.}../*.**
17a30 20 50 72 69 6e 74 20 61 6e 20 6f 75 74 2d 6f 66   Print an out-of
17a40 2d 6d 65 6d 6f 72 79 20 6d 65 73 73 61 67 65 20  -memory message 
17a50 74 6f 20 73 74 64 65 72 72 20 61 6e 64 20 72 65  to stderr and re
17a60 74 75 72 6e 20 31 2e 0a 2a 2f 0a 73 74 61 74 69  turn 1..*/.stati
17a70 63 20 69 6e 74 20 73 68 65 6c 6c 4e 6f 6d 65 6d  c int shellNomem
17a80 45 72 72 6f 72 28 76 6f 69 64 29 7b 0a 20 20 72  Error(void){.  r
17a90 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
17aa0 2c 20 22 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66  , "Error: out of
17ab0 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 72   memory\n");.  r
17ac0 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn 1;.}../*.*
17ad0 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 70 61  * Compare the pa
17ae0 74 74 65 72 6e 20 69 6e 20 7a 47 6c 6f 62 5b 5d  ttern in zGlob[]
17af0 20 61 67 61 69 6e 73 74 20 74 68 65 20 74 65 78   against the tex
17b00 74 20 69 6e 20 7a 5b 5d 2e 20 20 52 65 74 75 72  t in z[].  Retur
17b10 6e 20 54 52 55 45 0a 2a 2a 20 69 66 20 74 68 65  n TRUE.** if the
17b20 79 20 6d 61 74 63 68 20 61 6e 64 20 46 41 4c 53  y match and FALS
17b30 45 20 28 30 29 20 69 66 20 74 68 65 79 20 64 6f  E (0) if they do
17b40 20 6e 6f 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a   not match..**.*
17b50 2a 20 47 6c 6f 62 62 69 6e 67 20 72 75 6c 65 73  * Globbing rules
17b60 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 27 2a 27  :.**.**      '*'
17b70 20 20 20 20 20 20 20 4d 61 74 63 68 65 73 20 61         Matches a
17b80 6e 79 20 73 65 71 75 65 6e 63 65 20 6f 66 20 7a  ny sequence of z
17b90 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61 72  ero or more char
17ba0 61 63 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 20 20  acters..**.**   
17bb0 20 20 20 27 3f 27 20 20 20 20 20 20 20 4d 61 74     '?'       Mat
17bc0 63 68 65 73 20 65 78 61 63 74 6c 79 20 6f 6e 65  ches exactly one
17bd0 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2a 0a 2a   character..**.*
17be0 2a 20 20 20 20 20 5b 2e 2e 2e 5d 20 20 20 20 20  *     [...]     
17bf0 20 4d 61 74 63 68 65 73 20 6f 6e 65 20 63 68 61   Matches one cha
17c00 72 61 63 74 65 72 20 66 72 6f 6d 20 74 68 65 20  racter from the 
17c10 65 6e 63 6c 6f 73 65 64 20 6c 69 73 74 20 6f 66  enclosed list of
17c20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
17c30 20 20 20 63 68 61 72 61 63 74 65 72 73 2e 0a 2a     characters..*
17c40 2a 0a 2a 2a 20 20 20 20 20 5b 5e 2e 2e 2e 5d 20  *.**     [^...] 
17c50 20 20 20 20 4d 61 74 63 68 65 73 20 6f 6e 65 20      Matches one 
17c60 63 68 61 72 61 63 74 65 72 20 6e 6f 74 20 69 6e  character not in
17c70 20 74 68 65 20 65 6e 63 6c 6f 73 65 64 20 6c 69   the enclosed li
17c80 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 27  st..**.**      '
17c90 23 27 20 20 20 20 20 20 20 4d 61 74 63 68 65 73  #'       Matches
17ca0 20 61 6e 79 20 73 65 71 75 65 6e 63 65 20 6f 66   any sequence of
17cb0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 64 69 67   one or more dig
17cc0 69 74 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 20  its with an.**  
17cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70                op
17ce0 74 69 6f 6e 61 6c 20 2b 20 6f 72 20 2d 20 73 69  tional + or - si
17cf0 67 6e 20 69 6e 20 66 72 6f 6e 74 0a 2a 2a 0a 2a  gn in front.**.*
17d00 2a 20 20 20 20 20 20 27 20 27 20 20 20 20 20 20  *      ' '      
17d10 20 41 6e 79 20 73 70 61 6e 20 6f 66 20 77 68 69   Any span of whi
17d20 74 65 73 70 61 63 65 20 6d 61 74 63 68 65 73 20  tespace matches 
17d30 61 6e 79 20 6f 74 68 65 72 20 73 70 61 6e 20 6f  any other span o
17d40 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  f.**            
17d50 20 20 20 20 77 68 69 74 65 73 70 61 63 65 2e 0a      whitespace..
17d60 2a 2a 0a 2a 2a 20 45 78 74 72 61 20 77 68 69 74  **.** Extra whit
17d70 65 73 70 61 63 65 20 61 74 20 74 68 65 20 65 6e  espace at the en
17d80 64 20 6f 66 20 7a 5b 5d 20 69 73 20 69 67 6e 6f  d of z[] is igno
17d90 72 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  red..*/.static i
17da0 6e 74 20 74 65 73 74 63 61 73 65 5f 67 6c 6f 62  nt testcase_glob
17db0 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 47 6c  (const char *zGl
17dc0 6f 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ob, const char *
17dd0 7a 29 7b 0a 20 20 69 6e 74 20 63 2c 20 63 32 3b  z){.  int c, c2;
17de0 0a 20 20 69 6e 74 20 69 6e 76 65 72 74 3b 0a 20  .  int invert;. 
17df0 20 69 6e 74 20 73 65 65 6e 3b 0a 0a 20 20 77 68   int seen;..  wh
17e00 69 6c 65 28 20 28 63 20 3d 20 28 2a 28 7a 47 6c  ile( (c = (*(zGl
17e10 6f 62 2b 2b 29 29 29 21 3d 30 20 29 7b 0a 20 20  ob++)))!=0 ){.  
17e20 20 20 69 66 28 20 49 73 53 70 61 63 65 28 63 29    if( IsSpace(c)
17e30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 21 49   ){.      if( !I
17e40 73 53 70 61 63 65 28 2a 7a 29 20 29 20 72 65 74  sSpace(*z) ) ret
17e50 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 77 68 69  urn 0;.      whi
17e60 6c 65 28 20 49 73 53 70 61 63 65 28 2a 7a 47 6c  le( IsSpace(*zGl
17e70 6f 62 29 20 29 20 7a 47 6c 6f 62 2b 2b 3b 0a 20  ob) ) zGlob++;. 
17e80 20 20 20 20 20 77 68 69 6c 65 28 20 49 73 53 70       while( IsSp
17e90 61 63 65 28 2a 7a 29 20 29 20 7a 2b 2b 3b 0a 20  ace(*z) ) z++;. 
17ea0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d     }else if( c==
17eb0 27 2a 27 20 29 7b 0a 20 20 20 20 20 20 77 68 69  '*' ){.      whi
17ec0 6c 65 28 20 28 63 3d 28 2a 28 7a 47 6c 6f 62 2b  le( (c=(*(zGlob+
17ed0 2b 29 29 29 20 3d 3d 20 27 2a 27 20 7c 7c 20 63  +))) == '*' || c
17ee0 3d 3d 27 3f 27 20 29 7b 0a 20 20 20 20 20 20 20  =='?' ){.       
17ef0 20 69 66 28 20 63 3d 3d 27 3f 27 20 26 26 20 28   if( c=='?' && (
17f00 2a 28 7a 2b 2b 29 29 3d 3d 30 20 29 20 72 65 74  *(z++))==0 ) ret
17f10 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  urn 0;.      }. 
17f20 20 20 20 20 20 69 66 28 20 63 3d 3d 30 20 29 7b       if( c==0 ){
17f30 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
17f40 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  1;.      }else i
17f50 66 28 20 63 3d 3d 27 5b 27 20 29 7b 0a 20 20 20  f( c=='[' ){.   
17f60 20 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 20 26       while( *z &
17f70 26 20 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28  & testcase_glob(
17f80 7a 47 6c 6f 62 2d 31 2c 7a 29 3d 3d 30 20 29 7b  zGlob-1,z)==0 ){
17f90 0a 20 20 20 20 20 20 20 20 20 20 7a 2b 2b 3b 0a  .          z++;.
17fa0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17fb0 20 20 72 65 74 75 72 6e 20 28 2a 7a 29 21 3d 30    return (*z)!=0
17fc0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
17fd0 77 68 69 6c 65 28 20 28 63 32 20 3d 20 28 2a 28  while( (c2 = (*(
17fe0 7a 2b 2b 29 29 29 21 3d 30 20 29 7b 0a 20 20 20  z++)))!=0 ){.   
17ff0 20 20 20 20 20 77 68 69 6c 65 28 20 63 32 21 3d       while( c2!=
18000 63 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63  c ){.          c
18010 32 20 3d 20 2a 28 7a 2b 2b 29 3b 0a 20 20 20 20  2 = *(z++);.    
18020 20 20 20 20 20 20 69 66 28 20 63 32 3d 3d 30 20        if( c2==0 
18030 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20  ) return 0;.    
18040 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
18050 28 20 74 65 73 74 63 61 73 65 5f 67 6c 6f 62 28  ( testcase_glob(
18060 7a 47 6c 6f 62 2c 7a 29 20 29 20 72 65 74 75 72  zGlob,z) ) retur
18070 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  n 1;.      }.   
18080 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20     return 0;.   
18090 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 3f   }else if( c=='?
180a0 27 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  ' ){.      if( (
180b0 2a 28 7a 2b 2b 29 29 3d 3d 30 20 29 20 72 65 74  *(z++))==0 ) ret
180c0 75 72 6e 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  urn 0;.    }else
180d0 20 69 66 28 20 63 3d 3d 27 5b 27 20 29 7b 0a 20   if( c=='[' ){. 
180e0 20 20 20 20 20 69 6e 74 20 70 72 69 6f 72 5f 63       int prior_c
180f0 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 65 65 6e   = 0;.      seen
18100 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 6e 76 65   = 0;.      inve
18110 72 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 63 20  rt = 0;.      c 
18120 3d 20 2a 28 7a 2b 2b 29 3b 0a 20 20 20 20 20 20  = *(z++);.      
18130 69 66 28 20 63 3d 3d 30 20 29 20 72 65 74 75 72  if( c==0 ) retur
18140 6e 20 30 3b 0a 20 20 20 20 20 20 63 32 20 3d 20  n 0;.      c2 = 
18150 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20  *(zGlob++);.    
18160 20 20 69 66 28 20 63 32 3d 3d 27 5e 27 20 29 7b    if( c2=='^' ){
18170 0a 20 20 20 20 20 20 20 20 69 6e 76 65 72 74 20  .        invert 
18180 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 63 32 20  = 1;.        c2 
18190 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a 20 20  = *(zGlob++);.  
181a0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
181b0 63 32 3d 3d 27 5d 27 20 29 7b 0a 20 20 20 20 20  c2==']' ){.     
181c0 20 20 20 69 66 28 20 63 3d 3d 27 5d 27 20 29 20     if( c==']' ) 
181d0 73 65 65 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20  seen = 1;.      
181e0 20 20 63 32 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b    c2 = *(zGlob++
181f0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
18200 20 77 68 69 6c 65 28 20 63 32 20 26 26 20 63 32   while( c2 && c2
18210 21 3d 27 5d 27 20 29 7b 0a 20 20 20 20 20 20 20  !=']' ){.       
18220 20 69 66 28 20 63 32 3d 3d 27 2d 27 20 26 26 20   if( c2=='-' && 
18230 7a 47 6c 6f 62 5b 30 5d 21 3d 27 5d 27 20 26 26  zGlob[0]!=']' &&
18240 20 7a 47 6c 6f 62 5b 30 5d 21 3d 30 20 26 26 20   zGlob[0]!=0 && 
18250 70 72 69 6f 72 5f 63 3e 30 20 29 7b 0a 20 20 20  prior_c>0 ){.   
18260 20 20 20 20 20 20 20 63 32 20 3d 20 2a 28 7a 47         c2 = *(zG
18270 6c 6f 62 2b 2b 29 3b 0a 20 20 20 20 20 20 20 20  lob++);.        
18280 20 20 69 66 28 20 63 3e 3d 70 72 69 6f 72 5f 63    if( c>=prior_c
18290 20 26 26 20 63 3c 3d 63 32 20 29 20 73 65 65 6e   && c<=c2 ) seen
182a0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20   = 1;.          
182b0 70 72 69 6f 72 5f 63 20 3d 20 30 3b 0a 20 20 20  prior_c = 0;.   
182c0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
182d0 20 20 20 20 20 20 69 66 28 20 63 3d 3d 63 32 20        if( c==c2 
182e0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ){.            s
182f0 65 65 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  een = 1;.       
18300 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 70     }.          p
18310 72 69 6f 72 5f 63 20 3d 20 63 32 3b 0a 20 20 20  rior_c = c2;.   
18320 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 63       }.        c
18330 32 20 3d 20 2a 28 7a 47 6c 6f 62 2b 2b 29 3b 0a  2 = *(zGlob++);.
18340 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
18350 28 20 63 32 3d 3d 30 20 7c 7c 20 28 73 65 65 6e  ( c2==0 || (seen
18360 20 5e 20 69 6e 76 65 72 74 29 3d 3d 30 20 29 20   ^ invert)==0 ) 
18370 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 65  return 0;.    }e
18380 6c 73 65 20 69 66 28 20 63 3d 3d 27 23 27 20 29  lse if( c=='#' )
18390 7b 0a 20 20 20 20 20 20 69 66 28 20 28 7a 5b 30  {.      if( (z[0
183a0 5d 3d 3d 27 2d 27 20 7c 7c 20 7a 5b 30 5d 3d 3d  ]=='-' || z[0]==
183b0 27 2b 27 29 20 26 26 20 49 73 44 69 67 69 74 28  '+') && IsDigit(
183c0 7a 5b 31 5d 29 20 29 20 7a 2b 2b 3b 0a 20 20 20  z[1]) ) z++;.   
183d0 20 20 20 69 66 28 20 21 49 73 44 69 67 69 74 28     if( !IsDigit(
183e0 7a 5b 30 5d 29 20 29 20 72 65 74 75 72 6e 20 30  z[0]) ) return 0
183f0 3b 0a 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20  ;.      z++;.   
18400 20 20 20 77 68 69 6c 65 28 20 49 73 44 69 67 69     while( IsDigi
18410 74 28 7a 5b 30 5d 29 20 29 7b 20 7a 2b 2b 3b 20  t(z[0]) ){ z++; 
18420 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
18430 20 20 20 69 66 28 20 63 21 3d 28 2a 28 7a 2b 2b     if( c!=(*(z++
18440 29 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  )) ) return 0;. 
18450 20 20 20 7d 0a 20 20 7d 0a 20 20 77 68 69 6c 65     }.  }.  while
18460 28 20 49 73 53 70 61 63 65 28 2a 7a 29 20 29 7b  ( IsSpace(*z) ){
18470 20 7a 2b 2b 3b 20 7d 0a 20 20 72 65 74 75 72 6e   z++; }.  return
18480 20 2a 7a 3d 3d 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a   *z==0;.}.../*.*
18490 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 73 74  * Compare the st
184a0 72 69 6e 67 20 61 73 20 61 20 63 6f 6d 6d 61 6e  ring as a comman
184b0 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 77 69  d-line option wi
184c0 74 68 20 65 69 74 68 65 72 20 6f 6e 65 20 6f 72  th either one or
184d0 20 74 77 6f 0a 2a 2a 20 69 6e 69 74 69 61 6c 20   two.** initial 
184e0 22 2d 22 20 63 68 61 72 61 63 74 65 72 73 2e 0a  "-" characters..
184f0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 6f 70  */.static int op
18500 74 69 6f 6e 4d 61 74 63 68 28 63 6f 6e 73 74 20  tionMatch(const 
18510 63 68 61 72 20 2a 7a 53 74 72 2c 20 63 6f 6e 73  char *zStr, cons
18520 74 20 63 68 61 72 20 2a 7a 4f 70 74 29 7b 0a 20  t char *zOpt){. 
18530 20 69 66 28 20 7a 53 74 72 5b 30 5d 21 3d 27 2d   if( zStr[0]!='-
18540 27 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  ' ) return 0;.  
18550 7a 53 74 72 2b 2b 3b 0a 20 20 69 66 28 20 7a 53  zStr++;.  if( zS
18560 74 72 5b 30 5d 3d 3d 27 2d 27 20 29 20 7a 53 74  tr[0]=='-' ) zSt
18570 72 2b 2b 3b 0a 20 20 72 65 74 75 72 6e 20 73 74  r++;.  return st
18580 72 63 6d 70 28 7a 53 74 72 2c 20 7a 4f 70 74 29  rcmp(zStr, zOpt)
18590 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65  ==0;.}../*.** De
185a0 6c 65 74 65 20 61 20 66 69 6c 65 2e 0a 2a 2f 0a  lete a file..*/.
185b0 69 6e 74 20 73 68 65 6c 6c 44 65 6c 65 74 65 46  int shellDeleteF
185c0 69 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ile(const char *
185d0 7a 46 69 6c 65 6e 61 6d 65 29 7b 0a 20 20 69 6e  zFilename){.  in
185e0 74 20 72 63 3b 0a 23 69 66 64 65 66 20 5f 57 49  t rc;.#ifdef _WI
185f0 4e 33 32 0a 20 20 77 63 68 61 72 5f 74 20 2a 7a  N32.  wchar_t *z
18600 20 3d 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32   = sqlite3_win32
18610 5f 75 74 66 38 5f 74 6f 5f 75 6e 69 63 6f 64 65  _utf8_to_unicode
18620 28 7a 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 72  (zFilename);.  r
18630 63 20 3d 20 5f 77 75 6e 6c 69 6e 6b 28 7a 29 3b  c = _wunlink(z);
18640 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
18650 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 72 63 20 3d  z);.#else.  rc =
18660 20 75 6e 6c 69 6e 6b 28 7a 46 69 6c 65 6e 61 6d   unlink(zFilenam
18670 65 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74  e);.#endif.  ret
18680 75 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  urn rc;.}.../*.*
18690 2a 20 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  * The implementa
186a0 74 69 6f 6e 20 6f 66 20 53 51 4c 20 73 63 61 6c  tion of SQL scal
186b0 61 72 20 66 75 6e 63 74 69 6f 6e 20 66 6b 65 79  ar function fkey
186c0 5f 63 6f 6c 6c 61 74 65 5f 63 6c 61 75 73 65 28  _collate_clause(
186d0 29 2c 20 75 73 65 64 0a 2a 2a 20 62 79 20 74 68  ), used.** by th
186e0 65 20 22 2e 6c 69 6e 74 20 66 6b 65 79 2d 69 6e  e ".lint fkey-in
186f0 64 65 78 65 73 22 20 63 6f 6d 6d 61 6e 64 2e 20  dexes" command. 
18700 54 68 69 73 20 73 63 61 6c 61 72 20 66 75 6e 63  This scalar func
18710 74 69 6f 6e 20 69 73 20 61 6c 77 61 79 73 0a 2a  tion is always.*
18720 2a 20 63 61 6c 6c 65 64 20 77 69 74 68 20 66 6f  * called with fo
18730 75 72 20 61 72 67 75 6d 65 6e 74 73 20 2d 20 74  ur arguments - t
18740 68 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20  he parent table 
18750 6e 61 6d 65 2c 20 74 68 65 20 70 61 72 65 6e 74  name, the parent
18760 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2c 0a 2a 2a   column name,.**
18770 20 74 68 65 20 63 68 69 6c 64 20 74 61 62 6c 65   the child table
18780 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 63 68   name and the ch
18790 69 6c 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e  ild column name.
187a0 0a 2a 2a 0a 2a 2a 20 20 20 66 6b 65 79 5f 63 6f  .**.**   fkey_co
187b0 6c 6c 61 74 65 5f 63 6c 61 75 73 65 28 27 70 61  llate_clause('pa
187c0 72 65 6e 74 2d 74 61 62 27 2c 20 27 70 61 72 65  rent-tab', 'pare
187d0 6e 74 2d 63 6f 6c 27 2c 20 27 63 68 69 6c 64 2d  nt-col', 'child-
187e0 74 61 62 27 2c 20 27 63 68 69 6c 64 2d 63 6f 6c  tab', 'child-col
187f0 27 29 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  ').**.** If eith
18800 65 72 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20  er of the named 
18810 74 61 62 6c 65 73 20 6f 72 20 63 6f 6c 75 6d 6e  tables or column
18820 73 20 64 6f 20 6e 6f 74 20 65 78 69 73 74 2c 20  s do not exist, 
18830 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a  this function.**
18840 20 72 65 74 75 72 6e 73 20 61 6e 20 65 6d 70 74   returns an empt
18850 79 20 73 74 72 69 6e 67 2e 20 41 6e 20 65 6d 70  y string. An emp
18860 74 79 20 73 74 72 69 6e 67 20 69 73 20 61 6c 73  ty string is als
18870 6f 20 72 65 74 75 72 6e 65 64 20 69 66 20 62 6f  o returned if bo
18880 74 68 20 74 61 62 6c 65 73 20 0a 2a 2a 20 61 6e  th tables .** an
18890 64 20 63 6f 6c 75 6d 6e 73 20 65 78 69 73 74 20  d columns exist 
188a0 62 75 74 20 68 61 76 65 20 74 68 65 20 73 61 6d  but have the sam
188b0 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
188c0 69 6f 6e 20 73 65 71 75 65 6e 63 65 2e 20 4f 72  ion sequence. Or
188d0 2c 0a 2a 2a 20 69 66 20 62 6f 74 68 20 65 78 69  ,.** if both exi
188e0 73 74 20 62 75 74 20 74 68 65 20 64 65 66 61 75  st but the defau
188f0 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
18900 75 65 6e 63 65 73 20 61 72 65 20 64 69 66 66 65  uences are diffe
18910 72 65 6e 74 2c 20 74 68 69 73 0a 2a 2a 20 66 75  rent, this.** fu
18920 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
18930 68 65 20 73 74 72 69 6e 67 20 22 20 43 4f 4c 4c  he string " COLL
18940 41 54 45 20 3c 70 61 72 65 6e 74 2d 63 6f 6c 6c  ATE <parent-coll
18950 61 74 69 6f 6e 3e 22 2c 20 77 68 65 72 65 0a 2a  ation>", where.*
18960 2a 20 3c 70 61 72 65 6e 74 2d 63 6f 6c 6c 61 74  * <parent-collat
18970 69 6f 6e 3e 20 69 73 20 74 68 65 20 64 65 66 61  ion> is the defa
18980 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult collation se
18990 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 70 61  quence of the pa
189a0 72 65 6e 74 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a  rent column..*/.
189b0 73 74 61 74 69 63 20 76 6f 69 64 20 73 68 65 6c  static void shel
189c0 6c 46 6b 65 79 43 6f 6c 6c 61 74 65 43 6c 61 75  lFkeyCollateClau
189d0 73 65 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  se(.  sqlite3_co
189e0 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20  ntext *pCtx, .  
189f0 69 6e 74 20 6e 56 61 6c 2c 20 0a 20 20 73 71 6c  int nVal, .  sql
18a00 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56  ite3_value **apV
18a10 61 6c 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  al.){.  sqlite3 
18a20 2a 64 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  *db = sqlite3_co
18a30 6e 74 65 78 74 5f 64 62 5f 68 61 6e 64 6c 65 28  ntext_db_handle(
18a40 70 43 74 78 29 3b 0a 20 20 63 6f 6e 73 74 20 63  pCtx);.  const c
18a50 68 61 72 20 2a 7a 50 61 72 65 6e 74 3b 0a 20 20  har *zParent;.  
18a60 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 61 72  const char *zPar
18a70 65 6e 74 43 6f 6c 3b 0a 20 20 63 6f 6e 73 74 20  entCol;.  const 
18a80 63 68 61 72 20 2a 7a 50 61 72 65 6e 74 53 65 71  char *zParentSeq
18a90 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
18aa0 7a 43 68 69 6c 64 3b 0a 20 20 63 6f 6e 73 74 20  zChild;.  const 
18ab0 63 68 61 72 20 2a 7a 43 68 69 6c 64 43 6f 6c 3b  char *zChildCol;
18ac0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
18ad0 43 68 69 6c 64 53 65 71 20 3d 20 30 3b 20 20 2f  ChildSeq = 0;  /
18ae0 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 6f 20  * Initialize to 
18af0 61 76 6f 69 64 20 66 61 6c 73 65 2d 70 6f 73 69  avoid false-posi
18b00 74 69 76 65 20 77 61 72 6e 69 6e 67 20 2a 2f 0a  tive warning */.
18b10 20 20 69 6e 74 20 72 63 3b 0a 20 20 0a 20 20 61    int rc;.  .  a
18b20 73 73 65 72 74 28 20 6e 56 61 6c 3d 3d 34 20 29  ssert( nVal==4 )
18b30 3b 0a 20 20 7a 50 61 72 65 6e 74 20 3d 20 28 63  ;.  zParent = (c
18b40 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
18b50 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 70  e3_value_text(ap
18b60 56 61 6c 5b 30 5d 29 3b 0a 20 20 7a 50 61 72 65  Val[0]);.  zPare
18b70 6e 74 43 6f 6c 20 3d 20 28 63 6f 6e 73 74 20 63  ntCol = (const c
18b80 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
18b90 75 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 31 5d  ue_text(apVal[1]
18ba0 29 3b 0a 20 20 7a 43 68 69 6c 64 20 3d 20 28 63  );.  zChild = (c
18bb0 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
18bc0 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 70  e3_value_text(ap
18bd0 56 61 6c 5b 32 5d 29 3b 0a 20 20 7a 43 68 69 6c  Val[2]);.  zChil
18be0 64 43 6f 6c 20 3d 20 28 63 6f 6e 73 74 20 63 68  dCol = (const ch
18bf0 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
18c00 65 5f 74 65 78 74 28 61 70 56 61 6c 5b 33 5d 29  e_text(apVal[3])
18c10 3b 0a 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73  ;..  sqlite3_res
18c20 75 6c 74 5f 74 65 78 74 28 70 43 74 78 2c 20 22  ult_text(pCtx, "
18c30 22 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54  ", -1, SQLITE_ST
18c40 41 54 49 43 29 3b 0a 20 20 72 63 20 3d 20 73 71  ATIC);.  rc = sq
18c50 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75  lite3_table_colu
18c60 6d 6e 5f 6d 65 74 61 64 61 74 61 28 0a 20 20 20  mn_metadata(.   
18c70 20 20 20 64 62 2c 20 22 6d 61 69 6e 22 2c 20 7a     db, "main", z
18c80 50 61 72 65 6e 74 2c 20 7a 50 61 72 65 6e 74 43  Parent, zParentC
18c90 6f 6c 2c 20 30 2c 20 26 7a 50 61 72 65 6e 74 53  ol, 0, &zParentS
18ca0 65 71 2c 20 30 2c 20 30 2c 20 30 0a 20 20 29 3b  eq, 0, 0, 0.  );
18cb0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
18cc0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d  E_OK ){.    rc =
18cd0 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63   sqlite3_table_c
18ce0 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 0a  olumn_metadata(.
18cf0 20 20 20 20 20 20 20 20 64 62 2c 20 22 6d 61 69          db, "mai
18d00 6e 22 2c 20 7a 43 68 69 6c 64 2c 20 7a 43 68 69  n", zChild, zChi
18d10 6c 64 43 6f 6c 2c 20 30 2c 20 26 7a 43 68 69 6c  ldCol, 0, &zChil
18d20 64 53 65 71 2c 20 30 2c 20 30 2c 20 30 0a 20 20  dSeq, 0, 0, 0.  
18d30 20 20 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20    );.  }..  if( 
18d40 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
18d50 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70   sqlite3_stricmp
18d60 28 7a 50 61 72 65 6e 74 53 65 71 2c 20 7a 43 68  (zParentSeq, zCh
18d70 69 6c 64 53 65 71 29 20 29 7b 0a 20 20 20 20 63  ildSeq) ){.    c
18d80 68 61 72 20 2a 7a 20 3d 20 73 71 6c 69 74 65 33  har *z = sqlite3
18d90 5f 6d 70 72 69 6e 74 66 28 22 20 43 4f 4c 4c 41  _mprintf(" COLLA
18da0 54 45 20 25 73 22 2c 20 7a 50 61 72 65 6e 74 53  TE %s", zParentS
18db0 65 71 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  eq);.    sqlite3
18dc0 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74  _result_text(pCt
18dd0 78 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  x, z, -1, SQLITE
18de0 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
18df0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29   sqlite3_free(z)
18e00 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  ;.  }.}.../*.** 
18e10 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  The implementati
18e20 6f 6e 20 6f 66 20 64 6f 74 2d 63 6f 6d 6d 61 6e  on of dot-comman
18e30 64 20 22 2e 6c 69 6e 74 20 66 6b 65 79 2d 69 6e  d ".lint fkey-in
18e40 64 65 78 65 73 22 2e 0a 2a 2f 0a 73 74 61 74 69  dexes"..*/.stati
18e50 63 20 69 6e 74 20 6c 69 6e 74 46 6b 65 79 49 6e  c int lintFkeyIn
18e60 64 65 78 65 73 28 0a 20 20 53 68 65 6c 6c 53 74  dexes(.  ShellSt
18e70 61 74 65 20 2a 70 53 74 61 74 65 2c 20 20 20 20  ate *pState,    
18e80 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
18e90 65 6e 74 20 73 68 65 6c 6c 20 74 6f 6f 6c 20 73  ent shell tool s
18ea0 74 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  tate */.  char *
18eb0 2a 61 7a 41 72 67 2c 20 20 20 20 20 20 20 20 20  *azArg,         
18ec0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
18ed0 61 79 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  ay of arguments 
18ee0 70 61 73 73 65 64 20 74 6f 20 64 6f 74 20 63 6f  passed to dot co
18ef0 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  mmand */.  int n
18f00 41 72 67 20 20 20 20 20 20 20 20 20 20 20 20 20  Arg             
18f10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
18f20 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
18f30 69 6e 20 61 7a 41 72 67 5b 5d 20 2a 2f 0a 29 7b  in azArg[] */.){
18f40 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
18f50 20 70 53 74 61 74 65 2d 3e 64 62 3b 20 20 20 20   pState->db;    
18f60 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 68     /* Database h
18f70 61 6e 64 6c 65 20 74 6f 20 71 75 65 72 79 20 22  andle to query "
18f80 6d 61 69 6e 22 20 64 62 20 6f 66 20 2a 2f 0a 20  main" db of */. 
18f90 20 46 49 4c 45 20 2a 6f 75 74 20 3d 20 70 53 74   FILE *out = pSt
18fa0 61 74 65 2d 3e 6f 75 74 3b 20 20 20 20 20 20 20  ate->out;       
18fb0 20 2f 2a 20 53 74 72 65 61 6d 20 74 6f 20 77 72   /* Stream to wr
18fc0 69 74 65 20 6e 6f 6e 2d 65 72 72 6f 72 20 6f 75  ite non-error ou
18fd0 74 70 75 74 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  tput to */.  int
18fe0 20 62 56 65 72 62 6f 73 65 20 3d 20 30 3b 20 20   bVerbose = 0;  
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19000 49 66 20 2d 76 65 72 62 6f 73 65 20 69 73 20 70  If -verbose is p
19010 72 65 73 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  resent */.  int 
19020 62 47 72 6f 75 70 42 79 50 61 72 65 6e 74 20 3d  bGroupByParent =
19030 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49   0;         /* I
19040 66 20 2d 67 72 6f 75 70 62 79 70 61 72 65 6e 74  f -groupbyparent
19050 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 20   is present */. 
19060 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19080 20 2f 2a 20 54 6f 20 69 74 65 72 61 74 65 20 74   /* To iterate t
19090 68 72 6f 75 67 68 20 61 7a 41 72 67 5b 5d 20 2a  hrough azArg[] *
190a0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
190b0 7a 49 6e 64 65 6e 74 20 3d 20 22 22 3b 20 20 20  zIndent = "";   
190c0 20 20 20 20 2f 2a 20 48 6f 77 20 6d 75 63 68 20      /* How much 
190d0 74 6f 20 69 6e 64 65 6e 74 20 43 52 45 41 54 45  to indent CREATE
190e0 20 49 4e 44 45 58 20 62 79 20 2a 2f 0a 20 20 69   INDEX by */.  i
190f0 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
19100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19110 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 2a 2f  * Return code */
19120 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
19130 2a 70 53 71 6c 20 3d 20 30 3b 20 20 20 20 20 20  *pSql = 0;      
19140 20 20 20 2f 2a 20 43 6f 6d 70 69 6c 65 64 20 76     /* Compiled v
19150 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 20 73 74  ersion of SQL st
19160 61 74 65 6d 65 6e 74 20 62 65 6c 6f 77 20 2a 2f  atement below */
19170 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 54 68 69 73  ..  /*.  ** This
19180 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
19190 74 20 72 65 74 75 72 6e 73 20 6f 6e 65 20 72 6f  t returns one ro
191a0 77 20 66 6f 72 20 65 61 63 68 20 66 6f 72 65 69  w for each forei
191b0 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
191c0 74 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 73 63  t.  ** in the sc
191d0 68 65 6d 61 20 6f 66 20 74 68 65 20 6d 61 69 6e  hema of the main
191e0 20 64 61 74 61 62 61 73 65 2e 20 54 68 65 20 63   database. The c
191f0 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 61 72 65  olumn values are
19200 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 30 2e 20 54  :.  **.  ** 0. T
19210 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 53 51  he text of an SQ
19220 4c 20 73 74 61 74 65 6d 65 6e 74 20 73 69 6d 69  L statement simi
19230 6c 61 72 20 74 6f 3a 0a 20 20 2a 2a 0a 20 20 2a  lar to:.  **.  *
19240 2a 20 20 20 20 20 20 22 45 58 50 4c 41 49 4e 20  *      "EXPLAIN 
19250 51 55 45 52 59 20 50 4c 41 4e 20 53 45 4c 45 43  QUERY PLAN SELEC
19260 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 63 68 69  T rowid FROM chi
19270 6c 64 5f 74 61 62 6c 65 20 57 48 45 52 45 20 63  ld_table WHERE c
19280 68 69 6c 64 5f 6b 65 79 3d 3f 22 0a 20 20 2a 2a  hild_key=?".  **
19290 0a 20 20 2a 2a 20 20 20 20 54 68 69 73 20 69 73  .  **    This is
192a0 20 74 68 65 20 73 61 6d 65 20 53 45 4c 45 43 54   the same SELECT
192b0 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67   that the foreig
192c0 6e 20 6b 65 79 73 20 69 6d 70 6c 65 6d 65 6e 74  n keys implement
192d0 61 74 69 6f 6e 20 6e 65 65 64 73 0a 20 20 2a 2a  ation needs.  **
192e0 20 20 20 20 74 6f 20 72 75 6e 20 69 6e 74 65 72      to run inter
192f0 6e 61 6c 6c 79 20 6f 6e 20 63 68 69 6c 64 20 74  nally on child t
19300 61 62 6c 65 73 2e 20 49 66 20 74 68 65 72 65 20  ables. If there 
19310 69 73 20 61 6e 20 69 6e 64 65 78 20 74 68 61 74  is an index that
19320 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 62 65 20   can.  **    be 
19330 75 73 65 64 20 74 6f 20 6f 70 74 69 6d 69 7a 65  used to optimize
19340 20 74 68 69 73 20 71 75 65 72 79 2c 20 74 68 65   this query, the
19350 6e 20 69 74 20 63 61 6e 20 61 6c 73 6f 20 62 65  n it can also be
19360 20 75 73 65 64 20 62 79 20 74 68 65 20 46 4b 0a   used by the FK.
19370 20 20 2a 2a 20 20 20 20 69 6d 70 6c 65 6d 65 6e    **    implemen
19380 74 61 74 69 6f 6e 20 74 6f 20 6f 70 74 69 6d 69  tation to optimi
19390 7a 65 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  ze DELETE or UPD
193a0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 6f  ATE statements o
193b0 6e 20 74 68 65 20 70 61 72 65 6e 74 0a 20 20 2a  n the parent.  *
193c0 2a 20 20 20 20 74 61 62 6c 65 2e 0a 20 20 2a 2a  *    table..  **
193d0 0a 20 20 2a 2a 20 31 2e 20 41 20 47 4c 4f 42 20  .  ** 1. A GLOB 
193e0 70 61 74 74 65 72 6e 20 73 75 69 74 61 62 6c 65  pattern suitable
193f0 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 72   for sqlite3_str
19400 67 6c 6f 62 28 29 2e 20 49 66 20 74 68 65 20 70  glob(). If the p
19410 6c 61 6e 20 6f 75 74 70 75 74 20 62 79 0a 20 20  lan output by.  
19420 2a 2a 20 20 20 20 74 68 65 20 45 58 50 4c 41 49  **    the EXPLAI
19430 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 63 6f 6d  N QUERY PLAN com
19440 6d 61 6e 64 20 6d 61 74 63 68 65 73 20 74 68 69  mand matches thi
19450 73 20 70 61 74 74 65 72 6e 2c 20 74 68 65 6e 20  s pattern, then 
19460 74 68 65 20 73 63 68 65 6d 61 0a 20 20 2a 2a 20  the schema.  ** 
19470 20 20 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 69     contains an i
19480 6e 64 65 78 20 74 68 61 74 20 63 61 6e 20 62 65  ndex that can be
19490 20 75 73 65 64 20 74 6f 20 6f 70 74 69 6d 69 7a   used to optimiz
194a0 65 20 74 68 65 20 71 75 65 72 79 2e 0a 20 20 2a  e the query..  *
194b0 2a 0a 20 20 2a 2a 20 32 2e 20 48 75 6d 61 6e 20  *.  ** 2. Human 
194c0 72 65 61 64 61 62 6c 65 20 74 65 78 74 20 74 68  readable text th
194d0 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
194e0 20 63 68 69 6c 64 20 74 61 62 6c 65 20 61 6e 64   child table and
194f0 20 63 6f 6c 75 6d 6e 73 2e 20 65 2e 67 2e 0a 20   columns. e.g.. 
19500 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 20 20 22   **.  **       "
19510 63 68 69 6c 64 5f 74 61 62 6c 65 28 63 68 69 6c  child_table(chil
19520 64 5f 6b 65 79 31 2c 20 63 68 69 6c 64 5f 6b 65  d_key1, child_ke
19530 79 32 29 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 33  y2)".  **.  ** 3
19540 2e 20 48 75 6d 61 6e 20 72 65 61 64 61 62 6c 65  . Human readable
19550 20 74 65 78 74 20 74 68 61 74 20 64 65 73 63 72   text that descr
19560 69 62 65 73 20 74 68 65 20 70 61 72 65 6e 74 20  ibes the parent 
19570 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
19580 73 2e 20 65 2e 67 2e 0a 20 20 2a 2a 0a 20 20 2a  s. e.g..  **.  *
19590 2a 20 20 20 20 20 20 20 22 70 61 72 65 6e 74 5f  *       "parent_
195a0 74 61 62 6c 65 28 70 61 72 65 6e 74 5f 6b 65 79  table(parent_key
195b0 31 2c 20 70 61 72 65 6e 74 5f 6b 65 79 32 29 22  1, parent_key2)"
195c0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 34 2e 20 41 20  .  **.  ** 4. A 
195d0 66 75 6c 6c 20 43 52 45 41 54 45 20 49 4e 44 45  full CREATE INDE
195e0 58 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20  X statement for 
195f0 61 6e 20 69 6e 64 65 78 20 74 68 61 74 20 63 6f  an index that co
19600 75 6c 64 20 62 65 20 75 73 65 64 20 74 6f 0a 20  uld be used to. 
19610 20 2a 2a 20 20 20 20 6f 70 74 69 6d 69 7a 65 20   **    optimize 
19620 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
19630 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 20 74   statements on t
19640 68 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65 2e  he parent table.
19650 20 65 2e 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20   e.g..  **.  ** 
19660 20 20 20 20 20 20 22 43 52 45 41 54 45 20 49 4e        "CREATE IN
19670 44 45 58 20 63 68 69 6c 64 5f 74 61 62 6c 65 5f  DEX child_table_
19680 63 68 69 6c 64 5f 6b 65 79 20 4f 4e 20 63 68 69  child_key ON chi
19690 6c 64 5f 74 61 62 6c 65 28 63 68 69 6c 64 5f 6b  ld_table(child_k
196a0 65 79 29 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 35  ey)".  **.  ** 5
196b0 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  . The name of th
196c0 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65 2e 0a  e parent table..
196d0 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 73 65 20    **.  ** These 
196e0 73 69 78 20 76 61 6c 75 65 73 20 61 72 65 20 75  six values are u
196f0 73 65 64 20 62 79 20 74 68 65 20 43 20 6c 6f 67  sed by the C log
19700 69 63 20 62 65 6c 6f 77 20 74 6f 20 67 65 6e 65  ic below to gene
19710 72 61 74 65 20 74 68 65 20 72 65 70 6f 72 74 2e  rate the report.
19720 0a 20 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  .  */.  const ch
19730 61 72 20 2a 7a 53 71 6c 20 3d 0a 20 20 22 53 45  ar *zSql =.  "SE
19740 4c 45 43 54 20 22 0a 20 20 20 20 22 20 20 20 20  LECT ".    "    
19750 20 27 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20   'EXPLAIN QUERY 
19760 50 4c 41 4e 20 53 45 4c 45 43 54 20 72 6f 77 69  PLAN SELECT rowi
19770 64 20 46 52 4f 4d 20 27 20 7c 7c 20 71 75 6f 74  d FROM ' || quot
19780 65 28 73 2e 6e 61 6d 65 29 20 7c 7c 20 27 20 57  e(s.name) || ' W
19790 48 45 52 45 20 27 22 0a 20 20 20 20 22 20 20 7c  HERE '".    "  |
197a0 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 71  | group_concat(q
197b0 75 6f 74 65 28 73 2e 6e 61 6d 65 29 20 7c 7c 20  uote(s.name) || 
197c0 27 2e 27 20 7c 7c 20 71 75 6f 74 65 28 66 2e 5b  '.' || quote(f.[
197d0 66 72 6f 6d 5d 29 20 7c 7c 20 27 3d 3f 27 20 22  from]) || '=?' "
197e0 0a 20 20 20 20 22 20 20 7c 7c 20 66 6b 65 79 5f  .    "  || fkey_
197f0 63 6f 6c 6c 61 74 65 5f 63 6c 61 75 73 65 28 66  collate_clause(f
19800 2e 5b 74 61 62 6c 65 5d 2c 20 66 2e 5b 74 6f 5d  .[table], f.[to]
19810 2c 20 73 2e 6e 61 6d 65 2c 20 66 2e 5b 66 72 6f  , s.name, f.[fro
19820 6d 5d 29 2c 27 20 41 4e 44 20 27 29 22 0a 20 20  m]),' AND ')".  
19830 20 20 22 2c 20 22 0a 20 20 20 20 22 20 20 20 20    ", ".    "    
19840 20 27 53 45 41 52 43 48 20 54 41 42 4c 45 20 27   'SEARCH TABLE '
19850 20 7c 7c 20 73 2e 6e 61 6d 65 20 7c 7c 20 27 20   || s.name || ' 
19860 55 53 49 4e 47 20 43 4f 56 45 52 49 4e 47 20 49  USING COVERING I
19870 4e 44 45 58 2a 28 27 22 0a 20 20 20 20 22 20 20  NDEX*('".    "  
19880 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  || group_concat(
19890 27 2a 3d 3f 27 2c 20 27 20 41 4e 44 20 27 29 20  '*=?', ' AND ') 
198a0 7c 7c 20 27 29 27 22 0a 20 20 20 20 22 2c 20 22  || ')'".    ", "
198b0 0a 20 20 20 20 22 20 20 20 20 20 73 2e 6e 61 6d  .    "     s.nam
198c0 65 20 20 7c 7c 20 27 28 27 20 7c 7c 20 67 72 6f  e  || '(' || gro
198d0 75 70 5f 63 6f 6e 63 61 74 28 66 2e 5b 66 72 6f  up_concat(f.[fro
198e0 6d 5d 2c 20 20 27 2c 20 27 29 20 7c 7c 20 27 29  m],  ', ') || ')
198f0 27 22 0a 20 20 20 20 22 2c 20 22 0a 20 20 20 20  '".    ", ".    
19900 22 20 20 20 20 20 66 2e 5b 74 61 62 6c 65 5d 20  "     f.[table] 
19910 7c 7c 20 27 28 27 20 7c 7c 20 67 72 6f 75 70 5f  || '(' || group_
19920 63 6f 6e 63 61 74 28 43 4f 41 4c 45 53 43 45 28  concat(COALESCE(
19930 66 2e 5b 74 6f 5d 2c 20 22 0a 20 20 20 20 22 20  f.[to], ".    " 
19940 20 20 20 20 20 20 28 53 45 4c 45 43 54 20 6e 61        (SELECT na
19950 6d 65 20 46 52 4f 4d 20 70 72 61 67 6d 61 5f 74  me FROM pragma_t
19960 61 62 6c 65 5f 69 6e 66 6f 28 66 2e 5b 74 61 62  able_info(f.[tab
19970 6c 65 5d 29 20 57 48 45 52 45 20 70 6b 3d 73 65  le]) WHERE pk=se
19980 71 2b 31 29 22 0a 20 20 20 20 22 20 20 20 20 20  q+1)".    "     
19990 29 29 20 7c 7c 20 27 29 27 22 0a 20 20 20 20 22  )) || ')'".    "
199a0 2c 20 22 0a 20 20 20 20 22 20 20 20 20 20 27 43  , ".    "     'C
199b0 52 45 41 54 45 20 49 4e 44 45 58 20 27 20 7c 7c  REATE INDEX ' ||
199c0 20 71 75 6f 74 65 28 73 2e 6e 61 6d 65 20 7c 7c   quote(s.name ||
199d0 27 5f 27 7c 7c 20 67 72 6f 75 70 5f 63 6f 6e 63  '_'|| group_conc
199e0 61 74 28 66 2e 5b 66 72 6f 6d 5d 2c 20 27 5f 27  at(f.[from], '_'
199f0 29 29 22 0a 20 20 20 20 22 20 20 7c 7c 20 27 20  ))".    "  || ' 
19a00 4f 4e 20 27 20 7c 7c 20 71 75 6f 74 65 28 73 2e  ON ' || quote(s.
19a10 6e 61 6d 65 29 20 7c 7c 20 27 28 27 22 0a 20 20  name) || '('".  
19a20 20 20 22 20 20 7c 7c 20 67 72 6f 75 70 5f 63 6f    "  || group_co
19a30 6e 63 61 74 28 71 75 6f 74 65 28 66 2e 5b 66 72  ncat(quote(f.[fr
19a40 6f 6d 5d 29 20 7c 7c 22 0a 20 20 20 20 22 20 20  om]) ||".    "  
19a50 20 20 20 20 20 20 66 6b 65 79 5f 63 6f 6c 6c 61        fkey_colla
19a60 74 65 5f 63 6c 61 75 73 65 28 66 2e 5b 74 61 62  te_clause(f.[tab
19a70 6c 65 5d 2c 20 66 2e 5b 74 6f 5d 2c 20 73 2e 6e  le], f.[to], s.n
19a80 61 6d 65 2c 20 66 2e 5b 66 72 6f 6d 5d 29 2c 20  ame, f.[from]), 
19a90 27 2c 20 27 29 22 0a 20 20 20 20 22 20 20 7c 7c  ', ')".    "  ||
19aa0 20 27 29 3b 27 22 0a 20 20 20 20 22 2c 20 22 0a   ');'".    ", ".
19ab0 20 20 20 20 22 20 20 20 20 20 66 2e 5b 74 61 62      "     f.[tab
19ac0 6c 65 5d 20 22 0a 0a 20 20 20 20 22 46 52 4f 4d  le] "..    "FROM
19ad0 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 41   sqlite_master A
19ae0 53 20 73 2c 20 70 72 61 67 6d 61 5f 66 6f 72 65  S s, pragma_fore
19af0 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 73 2e 6e  ign_key_list(s.n
19b00 61 6d 65 29 20 41 53 20 66 20 22 0a 20 20 20 20  ame) AS f ".    
19b10 22 47 52 4f 55 50 20 42 59 20 73 2e 6e 61 6d 65  "GROUP BY s.name
19b20 2c 20 66 2e 69 64 20 22 0a 20 20 20 20 22 4f 52  , f.id ".    "OR
19b30 44 45 52 20 42 59 20 28 43 41 53 45 20 57 48 45  DER BY (CASE WHE
19b40 4e 20 3f 20 54 48 45 4e 20 66 2e 5b 74 61 62 6c  N ? THEN f.[tabl
19b50 65 5d 20 45 4c 53 45 20 73 2e 6e 61 6d 65 20 45  e] ELSE s.name E
19b60 4e 44 29 22 0a 20 20 3b 0a 0a 20 20 66 6f 72 28  ND)".  ;..  for(
19b70 69 3d 32 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=2; i<nArg; i++
19b80 29 7b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20 28  ){.    int n = (
19b90 69 6e 74 29 73 74 72 6c 65 6e 28 61 7a 41 72 67  int)strlen(azArg
19ba0 5b 69 5d 29 3b 0a 20 20 20 20 69 66 28 20 6e 3e  [i]);.    if( n>
19bb0 31 20 26 26 20 73 71 6c 69 74 65 33 5f 73 74 72  1 && sqlite3_str
19bc0 6e 69 63 6d 70 28 22 2d 76 65 72 62 6f 73 65 22  nicmp("-verbose"
19bd0 2c 20 61 7a 41 72 67 5b 69 5d 2c 20 6e 29 3d 3d  , azArg[i], n)==
19be0 30 20 29 7b 0a 20 20 20 20 20 20 62 56 65 72 62  0 ){.      bVerb
19bf0 6f 73 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20  ose = 1;.    }. 
19c00 20 20 20 65 6c 73 65 20 69 66 28 20 6e 3e 31 20     else if( n>1 
19c10 26 26 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  && sqlite3_strni
19c20 63 6d 70 28 22 2d 67 72 6f 75 70 62 79 70 61 72  cmp("-groupbypar
19c30 65 6e 74 22 2c 20 61 7a 41 72 67 5b 69 5d 2c 20  ent", azArg[i], 
19c40 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 62  n)==0 ){.      b
19c50 47 72 6f 75 70 42 79 50 61 72 65 6e 74 20 3d 20  GroupByParent = 
19c60 31 3b 0a 20 20 20 20 20 20 7a 49 6e 64 65 6e 74  1;.      zIndent
19c70 20 3d 20 22 20 20 20 20 22 3b 0a 20 20 20 20 7d   = "    ";.    }
19c80 0a 20 20 20 20 65 6c 73 65 7b 0a 20 20 20 20 20  .    else{.     
19c90 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
19ca0 72 72 2c 20 22 55 73 61 67 65 3a 20 25 73 20 25  rr, "Usage: %s %
19cb0 73 20 3f 2d 76 65 72 62 6f 73 65 3f 20 3f 2d 67  s ?-verbose? ?-g
19cc0 72 6f 75 70 62 79 70 61 72 65 6e 74 3f 5c 6e 22  roupbyparent?\n"
19cd0 2c 0a 20 20 20 20 20 20 20 20 20 20 61 7a 41 72  ,.          azAr
19ce0 67 5b 30 5d 2c 20 61 7a 41 72 67 5b 31 5d 0a 20  g[0], azArg[1]. 
19cf0 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 65       );.      re
19d00 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
19d10 52 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 0a  R;.    }.  }.  .
19d20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 68    /* Register th
19d30 65 20 66 6b 65 79 5f 63 6f 6c 6c 61 74 65 5f 63  e fkey_collate_c
19d40 6c 61 75 73 65 28 29 20 53 51 4c 20 66 75 6e 63  lause() SQL func
19d50 74 69 6f 6e 20 2a 2f 0a 20 20 72 63 20 3d 20 73  tion */.  rc = s
19d60 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
19d70 6e 63 74 69 6f 6e 28 64 62 2c 20 22 66 6b 65 79  nction(db, "fkey
19d80 5f 63 6f 6c 6c 61 74 65 5f 63 6c 61 75 73 65 22  _collate_clause"
19d90 2c 20 34 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  , 4, SQLITE_UTF8
19da0 2c 0a 20 20 20 20 20 20 30 2c 20 73 68 65 6c 6c  ,.      0, shell
19db0 46 6b 65 79 43 6f 6c 6c 61 74 65 43 6c 61 75 73  FkeyCollateClaus
19dc0 65 2c 20 30 2c 20 30 0a 20 20 29 3b 0a 0a 0a 20  e, 0, 0.  );... 
19dd0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
19de0 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  OK ){.    rc = s
19df0 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
19e00 32 28 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20  2(db, zSql, -1, 
19e10 26 70 53 71 6c 2c 20 30 29 3b 0a 20 20 7d 0a 20  &pSql, 0);.  }. 
19e20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
19e30 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  OK ){.    sqlite
19e40 33 5f 62 69 6e 64 5f 69 6e 74 28 70 53 71 6c 2c  3_bind_int(pSql,
19e50 20 31 2c 20 62 47 72 6f 75 70 42 79 50 61 72 65   1, bGroupByPare
19e60 6e 74 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  nt);.  }..  if( 
19e70 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
19e80 0a 20 20 20 20 69 6e 74 20 72 63 32 3b 0a 20 20  .    int rc2;.  
19e90 20 20 63 68 61 72 20 2a 7a 50 72 65 76 20 3d 20    char *zPrev = 
19ea0 30 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 53 51  0;.    while( SQ
19eb0 4c 49 54 45 5f 52 4f 57 3d 3d 73 71 6c 69 74 65  LITE_ROW==sqlite
19ec0 33 5f 73 74 65 70 28 70 53 71 6c 29 20 29 7b 0a  3_step(pSql) ){.
19ed0 20 20 20 20 20 20 69 6e 74 20 72 65 73 20 3d 20        int res = 
19ee0 2d 31 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  -1;.      sqlite
19ef0 33 5f 73 74 6d 74 20 2a 70 45 78 70 6c 61 69 6e  3_stmt *pExplain
19f00 20 3d 20 30 3b 0a 20 20 20 20 20 20 63 6f 6e 73   = 0;.      cons
19f10 74 20 63 68 61 72 20 2a 7a 45 51 50 20 3d 20 28  t char *zEQP = (
19f20 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
19f30 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
19f40 70 53 71 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20  pSql, 0);.      
19f50 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 47 6c 6f  const char *zGlo
19f60 62 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  b = (const char*
19f70 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  )sqlite3_column_
19f80 74 65 78 74 28 70 53 71 6c 2c 20 31 29 3b 0a 20  text(pSql, 1);. 
19f90 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
19fa0 2a 7a 46 72 6f 6d 20 3d 20 28 63 6f 6e 73 74 20  *zFrom = (const 
19fb0 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f  char*)sqlite3_co
19fc0 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c 20  lumn_text(pSql, 
19fd0 32 29 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  2);.      const 
19fe0 63 68 61 72 20 2a 7a 54 61 72 67 65 74 20 3d 20  char *zTarget = 
19ff0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
1a000 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
1a010 28 70 53 71 6c 2c 20 33 29 3b 0a 20 20 20 20 20  (pSql, 3);.     
1a020 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 49   const char *zCI
1a030 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
1a040 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
1a050 65 78 74 28 70 53 71 6c 2c 20 34 29 3b 0a 20 20  ext(pSql, 4);.  
1a060 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1a070 7a 50 61 72 65 6e 74 20 3d 20 28 63 6f 6e 73 74  zParent = (const
1a080 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 63   char*)sqlite3_c
1a090 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 71 6c 2c  olumn_text(pSql,
1a0a0 20 35 29 3b 0a 0a 20 20 20 20 20 20 72 63 20 3d   5);..      rc =
1a0b0 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
1a0c0 5f 76 32 28 64 62 2c 20 7a 45 51 50 2c 20 2d 31  _v2(db, zEQP, -1
1a0d0 2c 20 26 70 45 78 70 6c 61 69 6e 2c 20 30 29 3b  , &pExplain, 0);
1a0e0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
1a0f0 51 4c 49 54 45 5f 4f 4b 20 29 20 62 72 65 61 6b  QLITE_OK ) break
1a100 3b 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c 49  ;.      if( SQLI
1a110 54 45 5f 52 4f 57 3d 3d 73 71 6c 69 74 65 33 5f  TE_ROW==sqlite3_
1a120 73 74 65 70 28 70 45 78 70 6c 61 69 6e 29 20 29  step(pExplain) )
1a130 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20  {.        const 
1a140 63 68 61 72 20 2a 7a 50 6c 61 6e 20 3d 20 28 63  char *zPlan = (c
1a150 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
1a160 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70  e3_column_text(p
1a170 45 78 70 6c 61 69 6e 2c 20 33 29 3b 0a 20 20 20  Explain, 3);.   
1a180 20 20 20 20 20 72 65 73 20 3d 20 28 30 3d 3d 73       res = (0==s
1a190 71 6c 69 74 65 33 5f 73 74 72 67 6c 6f 62 28 7a  qlite3_strglob(z
1a1a0 47 6c 6f 62 2c 20 7a 50 6c 61 6e 29 29 3b 0a 20  Glob, zPlan));. 
1a1b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 63 20       }.      rc 
1a1c0 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  = sqlite3_finali
1a1d0 7a 65 28 70 45 78 70 6c 61 69 6e 29 3b 0a 20 20  ze(pExplain);.  
1a1e0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1a1f0 54 45 5f 4f 4b 20 29 20 62 72 65 61 6b 3b 0a 0a  TE_OK ) break;..
1a200 20 20 20 20 20 20 69 66 28 20 72 65 73 3c 30 20        if( res<0 
1a210 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70  ){.        raw_p
1a220 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
1a230 72 72 6f 72 3a 20 69 6e 74 65 72 6e 61 6c 20 65  rror: internal e
1a240 72 72 6f 72 22 29 3b 0a 20 20 20 20 20 20 20 20  rror");.        
1a250 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 65 6c  break;.      }el
1a260 73 65 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  se{.        if( 
1a270 62 47 72 6f 75 70 42 79 50 61 72 65 6e 74 20 0a  bGroupByParent .
1a280 20 20 20 20 20 20 20 20 26 26 20 28 62 56 65 72          && (bVer
1a290 62 6f 73 65 20 7c 7c 20 72 65 73 3d 3d 30 29 0a  bose || res==0).
1a2a0 20 20 20 20 20 20 20 20 26 26 20 28 7a 50 72 65          && (zPre
1a2b0 76 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f  v==0 || sqlite3_
1a2c0 73 74 72 69 63 6d 70 28 7a 50 61 72 65 6e 74 2c  stricmp(zParent,
1a2d0 20 7a 50 72 65 76 29 29 20 0a 20 20 20 20 20 20   zPrev)) .      
1a2e0 20 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72    ){.          r
1a2f0 61 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22  aw_printf(out, "
1a300 2d 2d 20 50 61 72 65 6e 74 20 74 61 62 6c 65 20  -- Parent table 
1a310 25 73 5c 6e 22 2c 20 7a 50 61 72 65 6e 74 29 3b  %s\n", zParent);
1a320 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
1a330 65 33 5f 66 72 65 65 28 7a 50 72 65 76 29 3b 0a  e3_free(zPrev);.
1a340 20 20 20 20 20 20 20 20 20 20 7a 50 72 65 76 20            zPrev 
1a350 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
1a360 66 28 22 25 73 22 2c 20 7a 50 61 72 65 6e 74 29  f("%s", zParent)
1a370 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20  ;.        }..   
1a380 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20       if( res==0 
1a390 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61 77  ){.          raw
1a3a0 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73  _printf(out, "%s
1a3b0 25 73 20 2d 2d 3e 20 25 73 5c 6e 22 2c 20 7a 49  %s --> %s\n", zI
1a3c0 6e 64 65 6e 74 2c 20 7a 43 49 2c 20 7a 54 61 72  ndent, zCI, zTar
1a3d0 67 65 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  get);.        }e
1a3e0 6c 73 65 20 69 66 28 20 62 56 65 72 62 6f 73 65  lse if( bVerbose
1a3f0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61   ){.          ra
1a400 77 5f 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25  w_printf(out, "%
1a410 73 2f 2a 20 6e 6f 20 65 78 74 72 61 20 69 6e 64  s/* no extra ind
1a420 65 78 65 73 20 72 65 71 75 69 72 65 64 20 66 6f  exes required fo
1a430 72 20 25 73 20 2d 3e 20 25 73 20 2a 2f 5c 6e 22  r %s -> %s */\n"
1a440 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
1a450 20 7a 49 6e 64 65 6e 74 2c 20 7a 46 72 6f 6d 2c   zIndent, zFrom,
1a460 20 7a 54 61 72 67 65 74 0a 20 20 20 20 20 20 20   zTarget.       
1a470 20 20 20 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a     );.        }.
1a480 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1a490 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
1a4a0 50 72 65 76 29 3b 0a 0a 20 20 20 20 69 66 28 20  Prev);..    if( 
1a4b0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1a4c0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
1a4d0 66 28 73 74 64 65 72 72 2c 20 22 25 73 5c 6e 22  f(stderr, "%s\n"
1a4e0 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
1a4f0 28 64 62 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  (db));.    }..  
1a500 20 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33 5f    rc2 = sqlite3_
1a510 66 69 6e 61 6c 69 7a 65 28 70 53 71 6c 29 3b 0a  finalize(pSql);.
1a520 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1a530 54 45 5f 4f 4b 20 26 26 20 72 63 32 21 3d 53 51  TE_OK && rc2!=SQ
1a540 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1a550 20 72 63 20 3d 20 72 63 32 3b 0a 20 20 20 20 20   rc = rc2;.     
1a560 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
1a570 72 72 2c 20 22 25 73 5c 6e 22 2c 20 73 71 6c 69  rr, "%s\n", sqli
1a580 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 29 3b  te3_errmsg(db));
1a590 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
1a5a0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
1a5b0 74 64 65 72 72 2c 20 22 25 73 5c 6e 22 2c 20 73  tderr, "%s\n", s
1a5c0 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62  qlite3_errmsg(db
1a5d0 29 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  ));.  }..  retur
1a5e0 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  n rc;.}../*.** I
1a5f0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
1a600 20 22 2e 6c 69 6e 74 22 20 64 6f 74 20 63 6f 6d   ".lint" dot com
1a610 6d 61 6e 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  mand..*/.static 
1a620 69 6e 74 20 6c 69 6e 74 44 6f 74 43 6f 6d 6d 61  int lintDotComma
1a630 6e 64 28 0a 20 20 53 68 65 6c 6c 53 74 61 74 65  nd(.  ShellState
1a640 20 2a 70 53 74 61 74 65 2c 20 20 20 20 20 20 20   *pState,       
1a650 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
1a660 20 73 68 65 6c 6c 20 74 6f 6f 6c 20 73 74 61 74   shell tool stat
1a670 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  e */.  char **az
1a680 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20 20  Arg,            
1a690 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
1a6a0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73  of arguments pas
1a6b0 73 65 64 20 74 6f 20 64 6f 74 20 63 6f 6d 6d 61  sed to dot comma
1a6c0 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67  nd */.  int nArg
1a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1a6f0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
1a700 61 7a 41 72 67 5b 5d 20 2a 2f 0a 29 7b 0a 20 20  azArg[] */.){.  
1a710 69 6e 74 20 6e 3b 0a 20 20 6e 20 3d 20 28 6e 41  int n;.  n = (nA
1a720 72 67 3e 3d 32 20 3f 20 28 69 6e 74 29 73 74 72  rg>=2 ? (int)str
1a730 6c 65 6e 28 61 7a 41 72 67 5b 31 5d 29 20 3a 20  len(azArg[1]) : 
1a740 30 29 3b 0a 20 20 69 66 28 20 6e 3c 31 20 7c 7c  0);.  if( n<1 ||
1a750 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
1a760 70 28 61 7a 41 72 67 5b 31 5d 2c 20 22 66 6b 65  p(azArg[1], "fke
1a770 79 2d 69 6e 64 65 78 65 73 22 2c 20 6e 29 20 29  y-indexes", n) )
1a780 20 67 6f 74 6f 20 75 73 61 67 65 3b 0a 20 20 72   goto usage;.  r
1a790 65 74 75 72 6e 20 6c 69 6e 74 46 6b 65 79 49 6e  eturn lintFkeyIn
1a7a0 64 65 78 65 73 28 70 53 74 61 74 65 2c 20 61 7a  dexes(pState, az
1a7b0 41 72 67 2c 20 6e 41 72 67 29 3b 0a 0a 20 75 73  Arg, nArg);.. us
1a7c0 61 67 65 3a 0a 20 20 72 61 77 5f 70 72 69 6e 74  age:.  raw_print
1a7d0 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
1a7e0 20 25 73 20 73 75 62 2d 63 6f 6d 6d 61 6e 64 20   %s sub-command 
1a7f0 3f 73 77 69 74 63 68 65 73 2e 2e 2e 3f 5c 6e 22  ?switches...?\n"
1a800 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a 20 20 72  , azArg[0]);.  r
1a810 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
1a820 2c 20 22 57 68 65 72 65 20 73 75 62 2d 63 6f 6d  , "Where sub-com
1a830 6d 61 6e 64 73 20 61 72 65 3a 5c 6e 22 29 3b 0a  mands are:\n");.
1a840 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
1a850 65 72 72 2c 20 22 20 20 20 20 66 6b 65 79 2d 69  err, "    fkey-i
1a860 6e 64 65 78 65 73 5c 6e 22 29 3b 0a 20 20 72 65  ndexes\n");.  re
1a870 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
1a880 52 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  R;.}.../*.** If 
1a890 61 6e 20 69 6e 70 75 74 20 6c 69 6e 65 20 62 65  an input line be
1a8a0 67 69 6e 73 20 77 69 74 68 20 22 2e 22 20 74 68  gins with "." th
1a8b0 65 6e 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 72  en invoke this r
1a8c0 6f 75 74 69 6e 65 20 74 6f 0a 2a 2a 20 70 72 6f  outine to.** pro
1a8d0 63 65 73 73 20 74 68 61 74 20 6c 69 6e 65 2e 0a  cess that line..
1a8e0 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 31 20 6f  **.** Return 1 o
1a8f0 6e 20 65 72 72 6f 72 2c 20 32 20 74 6f 20 65 78  n error, 2 to ex
1a900 69 74 2c 20 61 6e 64 20 30 20 6f 74 68 65 72 77  it, and 0 otherw
1a910 69 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ise..*/.static i
1a920 6e 74 20 64 6f 5f 6d 65 74 61 5f 63 6f 6d 6d 61  nt do_meta_comma
1a930 6e 64 28 63 68 61 72 20 2a 7a 4c 69 6e 65 2c 20  nd(char *zLine, 
1a940 53 68 65 6c 6c 53 74 61 74 65 20 2a 70 29 7b 0a  ShellState *p){.
1a950 20 20 69 6e 74 20 68 20 3d 20 31 3b 0a 20 20 69    int h = 1;.  i
1a960 6e 74 20 6e 41 72 67 20 3d 20 30 3b 0a 20 20 69  nt nArg = 0;.  i
1a970 6e 74 20 6e 2c 20 63 3b 0a 20 20 69 6e 74 20 72  nt n, c;.  int r
1a980 63 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 61  c = 0;.  char *a
1a990 7a 41 72 67 5b 35 30 5d 3b 0a 0a 20 20 2f 2a 20  zArg[50];..  /* 
1a9a0 50 61 72 73 65 20 74 68 65 20 69 6e 70 75 74 20  Parse the input 
1a9b0 6c 69 6e 65 20 69 6e 74 6f 20 74 6f 6b 65 6e 73  line into tokens
1a9c0 2e 0a 20 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20  ..  */.  while( 
1a9d0 7a 4c 69 6e 65 5b 68 5d 20 26 26 20 6e 41 72 67  zLine[h] && nArg
1a9e0 3c 41 72 72 61 79 53 69 7a 65 28 61 7a 41 72 67  <ArraySize(azArg
1a9f0 29 20 29 7b 0a 20 20 20 20 77 68 69 6c 65 28 20  ) ){.    while( 
1aa00 49 73 53 70 61 63 65 28 7a 4c 69 6e 65 5b 68 5d  IsSpace(zLine[h]
1aa10 29 20 29 7b 20 68 2b 2b 3b 20 7d 0a 20 20 20 20  ) ){ h++; }.    
1aa20 69 66 28 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 30 20  if( zLine[h]==0 
1aa30 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 69 66 28  ) break;.    if(
1aa40 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 27 5c 27 27 20   zLine[h]=='\'' 
1aa50 7c 7c 20 7a 4c 69 6e 65 5b 68 5d 3d 3d 27 22 27  || zLine[h]=='"'
1aa60 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 64 65   ){.      int de
1aa70 6c 69 6d 20 3d 20 7a 4c 69 6e 65 5b 68 2b 2b 5d  lim = zLine[h++]
1aa80 3b 0a 20 20 20 20 20 20 61 7a 41 72 67 5b 6e 41  ;.      azArg[nA
1aa90 72 67 2b 2b 5d 20 3d 20 26 7a 4c 69 6e 65 5b 68  rg++] = &zLine[h
1aaa0 5d 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  ];.      while( 
1aab0 7a 4c 69 6e 65 5b 68 5d 20 26 26 20 7a 4c 69 6e  zLine[h] && zLin
1aac0 65 5b 68 5d 21 3d 64 65 6c 69 6d 20 29 7b 0a 20  e[h]!=delim ){. 
1aad0 20 20 20 20 20 20 20 69 66 28 20 7a 4c 69 6e 65         if( zLine
1aae0 5b 68 5d 3d 3d 27 5c 5c 27 20 26 26 20 64 65 6c  [h]=='\\' && del
1aaf0 69 6d 3d 3d 27 22 27 20 26 26 20 7a 4c 69 6e 65  im=='"' && zLine
1ab00 5b 68 2b 31 5d 21 3d 30 20 29 20 68 2b 2b 3b 0a  [h+1]!=0 ) h++;.
1ab10 20 20 20 20 20 20 20 20 68 2b 2b 3b 0a 20 20 20          h++;.   
1ab20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 7a     }.      if( z
1ab30 4c 69 6e 65 5b 68 5d 3d 3d 64 65 6c 69 6d 20 29  Line[h]==delim )
1ab40 7b 0a 20 20 20 20 20 20 20 20 7a 4c 69 6e 65 5b  {.        zLine[
1ab50 68 2b 2b 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  h++] = 0;.      
1ab60 7d 0a 20 20 20 20 20 20 69 66 28 20 64 65 6c 69  }.      if( deli
1ab70 6d 3d 3d 27 22 27 20 29 20 72 65 73 6f 6c 76 65  m=='"' ) resolve
1ab80 5f 62 61 63 6b 73 6c 61 73 68 65 73 28 61 7a 41  _backslashes(azA
1ab90 72 67 5b 6e 41 72 67 2d 31 5d 29 3b 0a 20 20 20  rg[nArg-1]);.   
1aba0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 7a   }else{.      az
1abb0 41 72 67 5b 6e 41 72 67 2b 2b 5d 20 3d 20 26 7a  Arg[nArg++] = &z
1abc0 4c 69 6e 65 5b 68 5d 3b 0a 20 20 20 20 20 20 77  Line[h];.      w
1abd0 68 69 6c 65 28 20 7a 4c 69 6e 65 5b 68 5d 20 26  hile( zLine[h] &
1abe0 26 20 21 49 73 53 70 61 63 65 28 7a 4c 69 6e 65  & !IsSpace(zLine
1abf0 5b 68 5d 29 20 29 7b 20 68 2b 2b 3b 20 7d 0a 20  [h]) ){ h++; }. 
1ac00 20 20 20 20 20 69 66 28 20 7a 4c 69 6e 65 5b 68       if( zLine[h
1ac10 5d 20 29 20 7a 4c 69 6e 65 5b 68 2b 2b 5d 20 3d  ] ) zLine[h++] =
1ac20 20 30 3b 0a 20 20 20 20 20 20 72 65 73 6f 6c 76   0;.      resolv
1ac30 65 5f 62 61 63 6b 73 6c 61 73 68 65 73 28 61 7a  e_backslashes(az
1ac40 41 72 67 5b 6e 41 72 67 2d 31 5d 29 3b 0a 20 20  Arg[nArg-1]);.  
1ac50 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 50 72    }.  }..  /* Pr
1ac60 6f 63 65 73 73 20 74 68 65 20 69 6e 70 75 74 20  ocess the input 
1ac70 6c 69 6e 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  line..  */.  if(
1ac80 20 6e 41 72 67 3d 3d 30 20 29 20 72 65 74 75 72   nArg==0 ) retur
1ac90 6e 20 30 3b 20 2f 2a 20 6e 6f 20 74 6f 6b 65 6e  n 0; /* no token
1aca0 73 2c 20 6e 6f 20 65 72 72 6f 72 20 2a 2f 0a 20  s, no error */. 
1acb0 20 6e 20 3d 20 73 74 72 6c 65 6e 33 30 28 61 7a   n = strlen30(az
1acc0 41 72 67 5b 30 5d 29 3b 0a 20 20 63 20 3d 20 61  Arg[0]);.  c = a
1acd0 7a 41 72 67 5b 30 5d 5b 30 5d 3b 0a 0a 23 69 66  zArg[0][0];..#if
1ace0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1acf0 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
1ad00 20 69 66 28 20 63 3d 3d 27 61 27 20 26 26 20 73   if( c=='a' && s
1ad10 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
1ad20 20 22 61 75 74 68 22 2c 20 6e 29 3d 3d 30 20 29   "auth", n)==0 )
1ad30 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d  {.    if( nArg!=
1ad40 32 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  2 ){.      raw_p
1ad50 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
1ad60 73 61 67 65 3a 20 2e 61 75 74 68 20 4f 4e 7c 4f  sage: .auth ON|O
1ad70 46 46 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  FF\n");.      rc
1ad80 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f   = 1;.      goto
1ad90 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
1ada0 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6f 70  it;.    }.    op
1adb0 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20  en_db(p, 0);.   
1adc0 20 69 66 28 20 62 6f 6f 6c 65 61 6e 56 61 6c 75   if( booleanValu
1add0 65 28 61 7a 41 72 67 5b 31 5d 29 20 29 7b 0a 20  e(azArg[1]) ){. 
1ade0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 74       sqlite3_set
1adf0 5f 61 75 74 68 6f 72 69 7a 65 72 28 70 2d 3e 64  _authorizer(p->d
1ae00 62 2c 20 73 68 65 6c 6c 41 75 74 68 2c 20 70 29  b, shellAuth, p)
1ae10 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1ae20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61     sqlite3_set_a
1ae30 75 74 68 6f 72 69 7a 65 72 28 70 2d 3e 64 62 2c  uthorizer(p->db,
1ae40 20 30 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20   0, 0);.    }.  
1ae50 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20  }else.#endif..  
1ae60 69 66 28 20 28 63 3d 3d 27 62 27 20 26 26 20 6e  if( (c=='b' && n
1ae70 3e 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61  >=3 && strncmp(a
1ae80 7a 41 72 67 5b 30 5d 2c 20 22 62 61 63 6b 75 70  zArg[0], "backup
1ae90 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 20 7c 7c 20  ", n)==0).   || 
1aea0 28 63 3d 3d 27 73 27 20 26 26 20 6e 3e 3d 33 20  (c=='s' && n>=3 
1aeb0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
1aec0 5b 30 5d 2c 20 22 73 61 76 65 22 2c 20 6e 29 3d  [0], "save", n)=
1aed0 3d 30 29 0a 20 20 29 7b 0a 20 20 20 20 63 6f 6e  =0).  ){.    con
1aee0 73 74 20 63 68 61 72 20 2a 7a 44 65 73 74 46 69  st char *zDestFi
1aef0 6c 65 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73  le = 0;.    cons
1af00 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b  t char *zDb = 0;
1af10 0a 20 20 20 20 73 71 6c 69 74 65 33 20 2a 70 44  .    sqlite3 *pD
1af20 65 73 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  est;.    sqlite3
1af30 5f 62 61 63 6b 75 70 20 2a 70 42 61 63 6b 75 70  _backup *pBackup
1af40 3b 0a 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20  ;.    int j;.   
1af50 20 66 6f 72 28 6a 3d 31 3b 20 6a 3c 6e 41 72 67   for(j=1; j<nArg
1af60 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f  ; j++){.      co
1af70 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 61 7a  nst char *z = az
1af80 41 72 67 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66  Arg[j];.      if
1af90 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20  ( z[0]=='-' ){. 
1afa0 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 7a 5b         while( z[
1afb0 30 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b 0a 20  0]=='-' ) z++;. 
1afc0 20 20 20 20 20 20 20 2f 2a 20 4e 6f 20 6f 70 74         /* No opt
1afd0 69 6f 6e 73 20 74 6f 20 70 72 6f 63 65 73 73 20  ions to process 
1afe0 61 74 20 74 68 69 73 20 74 69 6d 65 20 2a 2f 0a  at this time */.
1aff0 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
1b000 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
1b010 73 74 64 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e  stderr, "unknown
1b020 20 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20   option: %s\n", 
1b030 61 7a 41 72 67 5b 6a 5d 29 3b 0a 20 20 20 20 20  azArg[j]);.     
1b040 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
1b050 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
1b060 65 6c 73 65 20 69 66 28 20 7a 44 65 73 74 46 69  else if( zDestFi
1b070 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  le==0 ){.       
1b080 20 7a 44 65 73 74 46 69 6c 65 20 3d 20 61 7a 41   zDestFile = azA
1b090 72 67 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 65 6c  rg[j];.      }el
1b0a0 73 65 20 69 66 28 20 7a 44 62 3d 3d 30 20 29 7b  se if( zDb==0 ){
1b0b0 0a 20 20 20 20 20 20 20 20 7a 44 62 20 3d 20 7a  .        zDb = z
1b0c0 44 65 73 74 46 69 6c 65 3b 0a 20 20 20 20 20 20  DestFile;.      
1b0d0 20 20 7a 44 65 73 74 46 69 6c 65 20 3d 20 61 7a    zDestFile = az
1b0e0 41 72 67 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 65  Arg[j];.      }e
1b0f0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 61 77  lse{.        raw
1b100 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1b110 22 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65  "too many argume
1b120 6e 74 73 20 74 6f 20 2e 62 61 63 6b 75 70 5c 6e  nts to .backup\n
1b130 22 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  ");.        retu
1b140 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rn 1;.      }.  
1b150 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 44 65 73    }.    if( zDes
1b160 74 46 69 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20  tFile==0 ){.    
1b170 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
1b180 65 72 72 2c 20 22 6d 69 73 73 69 6e 67 20 46 49  err, "missing FI
1b190 4c 45 4e 41 4d 45 20 61 72 67 75 6d 65 6e 74 20  LENAME argument 
1b1a0 6f 6e 20 2e 62 61 63 6b 75 70 5c 6e 22 29 3b 0a  on .backup\n");.
1b1b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
1b1c0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 44      }.    if( zD
1b1d0 62 3d 3d 30 20 29 20 7a 44 62 20 3d 20 22 6d 61  b==0 ) zDb = "ma
1b1e0 69 6e 22 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  in";.    rc = sq
1b1f0 6c 69 74 65 33 5f 6f 70 65 6e 28 7a 44 65 73 74  lite3_open(zDest
1b200 46 69 6c 65 2c 20 26 70 44 65 73 74 29 3b 0a 20  File, &pDest);. 
1b210 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1b220 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 75 74  E_OK ){.      ut
1b230 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
1b240 2c 20 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74  , "Error: cannot
1b250 20 6f 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c   open \"%s\"\n",
1b260 20 7a 44 65 73 74 46 69 6c 65 29 3b 0a 20 20 20   zDestFile);.   
1b270 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65     sqlite3_close
1b280 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 72  (pDest);.      r
1b290 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
1b2a0 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29     open_db(p, 0)
1b2b0 3b 0a 20 20 20 20 70 42 61 63 6b 75 70 20 3d 20  ;.    pBackup = 
1b2c0 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 69  sqlite3_backup_i
1b2d0 6e 69 74 28 70 44 65 73 74 2c 20 22 6d 61 69 6e  nit(pDest, "main
1b2e0 22 2c 20 70 2d 3e 64 62 2c 20 7a 44 62 29 3b 0a  ", p->db, zDb);.
1b2f0 20 20 20 20 69 66 28 20 70 42 61 63 6b 75 70 3d      if( pBackup=
1b300 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  =0 ){.      utf8
1b310 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1b320 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73  "Error: %s\n", s
1b330 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 70 44  qlite3_errmsg(pD
1b340 65 73 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c  est));.      sql
1b350 69 74 65 33 5f 63 6c 6f 73 65 28 70 44 65 73 74  ite3_close(pDest
1b360 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
1b370 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77 68 69  1;.    }.    whi
1b380 6c 65 28 20 20 28 72 63 20 3d 20 73 71 6c 69 74  le(  (rc = sqlit
1b390 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70 28 70  e3_backup_step(p
1b3a0 42 61 63 6b 75 70 2c 31 30 30 29 29 3d 3d 53 51  Backup,100))==SQ
1b3b0 4c 49 54 45 5f 4f 4b 20 29 7b 7d 0a 20 20 20 20  LITE_OK ){}.    
1b3c0 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66  sqlite3_backup_f
1b3d0 69 6e 69 73 68 28 70 42 61 63 6b 75 70 29 3b 0a  inish(pBackup);.
1b3e0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1b3f0 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20  TE_DONE ){.     
1b400 20 72 63 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c   rc = 0;.    }el
1b410 73 65 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70  se{.      utf8_p
1b420 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
1b430 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 73 71 6c  rror: %s\n", sql
1b440 69 74 65 33 5f 65 72 72 6d 73 67 28 70 44 65 73  ite3_errmsg(pDes
1b450 74 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  t));.      rc = 
1b460 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  1;.    }.    sql
1b470 69 74 65 33 5f 63 6c 6f 73 65 28 70 44 65 73 74  ite3_close(pDest
1b480 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66  );.  }else..  if
1b490 28 20 63 3d 3d 27 62 27 20 26 26 20 6e 3e 3d 33  ( c=='b' && n>=3
1b4a0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
1b4b0 67 5b 30 5d 2c 20 22 62 61 69 6c 22 2c 20 6e 29  g[0], "bail", n)
1b4c0 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
1b4d0 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg==2 ){.      
1b4e0 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20 3d 20  bail_on_error = 
1b4f0 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41  booleanValue(azA
1b500 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73  rg[1]);.    }els
1b510 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  e{.      raw_pri
1b520 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
1b530 67 65 3a 20 2e 62 61 69 6c 20 6f 6e 7c 6f 66 66  ge: .bail on|off
1b540 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
1b550 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
1b560 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 62 27 20  e..  if( c=='b' 
1b570 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e 63  && n>=3 && strnc
1b580 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 62 69  mp(azArg[0], "bi
1b590 6e 61 72 79 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  nary", n)==0 ){.
1b5a0 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20      if( nArg==2 
1b5b0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62 6f 6f  ){.      if( boo
1b5c0 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b  leanValue(azArg[
1b5d0 31 5d 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73  1]) ){.        s
1b5e0 65 74 42 69 6e 61 72 79 4d 6f 64 65 28 70 2d 3e  etBinaryMode(p->
1b5f0 6f 75 74 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d  out, 1);.      }
1b600 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 65  else{.        se
1b610 74 54 65 78 74 4d 6f 64 65 28 70 2d 3e 6f 75 74  tTextMode(p->out
1b620 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 1);.      }.  
1b630 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
1b640 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
1b650 2c 20 22 55 73 61 67 65 3a 20 2e 62 69 6e 61 72  , "Usage: .binar
1b660 79 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20  y on|off\n");.  
1b670 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
1b680 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 20  }.  }else..  /* 
1b690 54 68 65 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64  The undocumented
1b6a0 20 22 2e 62 72 65 61 6b 70 6f 69 6e 74 22 20 63   ".breakpoint" c
1b6b0 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 61 20  ommand causes a 
1b6c0 63 61 6c 6c 20 74 6f 20 74 68 65 20 6e 6f 2d 6f  call to the no-o
1b6d0 70 0a 20 20 2a 2a 20 72 6f 75 74 69 6e 65 20 6e  p.  ** routine n
1b6e0 61 6d 65 64 20 74 65 73 74 5f 62 72 65 61 6b 70  amed test_breakp
1b6f0 6f 69 6e 74 28 29 2e 0a 20 20 2a 2f 0a 20 20 69  oint()..  */.  i
1b700 66 28 20 63 3d 3d 27 62 27 20 26 26 20 6e 3e 3d  f( c=='b' && n>=
1b710 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  3 && strncmp(azA
1b720 72 67 5b 30 5d 2c 20 22 62 72 65 61 6b 70 6f 69  rg[0], "breakpoi
1b730 6e 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  nt", n)==0 ){.  
1b740 20 20 74 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e    test_breakpoin
1b750 74 28 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20  t();.  }else..  
1b760 69 66 28 20 63 3d 3d 27 63 27 20 26 26 20 6e 3e  if( c=='c' && n>
1b770 3d 33 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  =3 && strncmp(az
1b780 41 72 67 5b 30 5d 2c 20 22 63 68 61 6e 67 65 73  Arg[0], "changes
1b790 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
1b7a0 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20  if( nArg==2 ){. 
1b7b0 20 20 20 20 20 70 2d 3e 63 6f 75 6e 74 43 68 61       p->countCha
1b7c0 6e 67 65 73 20 3d 20 62 6f 6f 6c 65 61 6e 56 61  nges = booleanVa
1b7d0 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  lue(azArg[1]);. 
1b7e0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1b7f0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
1b800 72 2c 20 22 55 73 61 67 65 3a 20 2e 63 68 61 6e  r, "Usage: .chan
1b810 67 65 73 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a  ges on|off\n");.
1b820 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
1b830 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f    }.  }else..  /
1b840 2a 20 43 61 6e 63 65 6c 20 6f 75 74 70 75 74 20  * Cancel output 
1b850 72 65 64 69 72 65 63 74 69 6f 6e 2c 20 69 66 20  redirection, if 
1b860 69 74 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  it is currently 
1b870 73 65 74 20 28 62 79 20 2e 74 65 73 74 63 61 73  set (by .testcas
1b880 65 29 0a 20 20 2a 2a 20 54 68 65 6e 20 72 65 61  e).  ** Then rea
1b890 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  d the content of
1b8a0 20 74 68 65 20 74 65 73 74 63 61 73 65 2d 6f 75   the testcase-ou
1b8b0 74 2e 74 78 74 20 66 69 6c 65 20 61 6e 64 20 63  t.txt file and c
1b8c0 6f 6d 70 61 72 65 20 61 67 61 69 6e 73 74 0a 20  ompare against. 
1b8d0 20 2a 2a 20 61 7a 41 72 67 5b 31 5d 2e 20 20 49   ** azArg[1].  I
1b8e0 66 20 74 68 65 72 65 20 61 72 65 20 64 69 66 66  f there are diff
1b8f0 65 72 65 6e 63 65 73 2c 20 72 65 70 6f 72 74 20  erences, report 
1b900 61 6e 20 65 72 72 6f 72 20 61 6e 64 20 65 78 69  an error and exi
1b910 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63 3d  t..  */.  if( c=
1b920 3d 27 63 27 20 26 26 20 6e 3e 3d 33 20 26 26 20  ='c' && n>=3 && 
1b930 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
1b940 2c 20 22 63 68 65 63 6b 22 2c 20 6e 29 3d 3d 30  , "check", n)==0
1b950 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 52   ){.    char *zR
1b960 65 73 20 3d 20 30 3b 0a 20 20 20 20 6f 75 74 70  es = 0;.    outp
1b970 75 74 5f 72 65 73 65 74 28 70 29 3b 0a 20 20 20  ut_reset(p);.   
1b980 20 69 66 28 20 6e 41 72 67 21 3d 32 20 29 7b 0a   if( nArg!=2 ){.
1b990 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
1b9a0 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
1b9b0 20 2e 63 68 65 63 6b 20 47 4c 4f 42 2d 50 41 54   .check GLOB-PAT
1b9c0 54 45 52 4e 5c 6e 22 29 3b 0a 20 20 20 20 20 20  TERN\n");.      
1b9d0 72 63 20 3d 20 32 3b 0a 20 20 20 20 7d 65 6c 73  rc = 2;.    }els
1b9e0 65 20 69 66 28 20 28 7a 52 65 73 20 3d 20 72 65  e if( (zRes = re
1b9f0 61 64 46 69 6c 65 28 22 74 65 73 74 63 61 73 65  adFile("testcase
1ba00 2d 6f 75 74 2e 74 78 74 22 2c 20 30 29 29 3d 3d  -out.txt", 0))==
1ba10 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  0 ){.      raw_p
1ba20 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
1ba30 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 72 65 61  rror: cannot rea
1ba40 64 20 27 74 65 73 74 63 61 73 65 2d 6f 75 74 2e  d 'testcase-out.
1ba50 74 78 74 27 5c 6e 22 29 3b 0a 20 20 20 20 20 20  txt'\n");.      
1ba60 72 63 20 3d 20 32 3b 0a 20 20 20 20 7d 65 6c 73  rc = 2;.    }els
1ba70 65 20 69 66 28 20 74 65 73 74 63 61 73 65 5f 67  e if( testcase_g
1ba80 6c 6f 62 28 61 7a 41 72 67 5b 31 5d 2c 7a 52 65  lob(azArg[1],zRe
1ba90 73 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75  s)==0 ){.      u
1baa0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
1bab0 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
1bac0 20 20 20 20 22 74 65 73 74 63 61 73 65 2d 25 73      "testcase-%s
1bad0 20 46 41 49 4c 45 44 5c 6e 20 45 78 70 65 63 74   FAILED\n Expect
1bae0 65 64 3a 20 5b 25 73 5d 5c 6e 20 20 20 20 20 20  ed: [%s]\n      
1baf0 47 6f 74 3a 20 5b 25 73 5d 5c 6e 22 2c 0a 20 20  Got: [%s]\n",.  
1bb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
1bb10 2d 3e 7a 54 65 73 74 63 61 73 65 2c 20 61 7a 41  ->zTestcase, azA
1bb20 72 67 5b 31 5d 2c 20 7a 52 65 73 29 3b 0a 20 20  rg[1], zRes);.  
1bb30 20 20 20 20 72 63 20 3d 20 32 3b 0a 20 20 20 20      rc = 2;.    
1bb40 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 75 74 66  }else{.      utf
1bb50 38 5f 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c  8_printf(stdout,
1bb60 20 22 74 65 73 74 63 61 73 65 2d 25 73 20 6f 6b   "testcase-%s ok
1bb70 5c 6e 22 2c 20 70 2d 3e 7a 54 65 73 74 63 61 73  \n", p->zTestcas
1bb80 65 29 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68  e);.      p->nCh
1bb90 65 63 6b 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  eck++;.    }.   
1bba0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 52   sqlite3_free(zR
1bbb0 65 73 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20  es);.  }else..  
1bbc0 69 66 28 20 63 3d 3d 27 63 27 20 26 26 20 73 74  if( c=='c' && st
1bbd0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
1bbe0 22 63 6c 6f 6e 65 22 2c 20 6e 29 3d 3d 30 20 29  "clone", n)==0 )
1bbf0 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d  {.    if( nArg==
1bc00 32 20 29 7b 0a 20 20 20 20 20 20 74 72 79 54 6f  2 ){.      tryTo
1bc10 43 6c 6f 6e 65 28 70 2c 20 61 7a 41 72 67 5b 31  Clone(p, azArg[1
1bc20 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ]);.    }else{. 
1bc30 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
1bc40 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
1bc50 2e 63 6c 6f 6e 65 20 46 49 4c 45 4e 41 4d 45 5c  .clone FILENAME\
1bc60 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  n");.      rc = 
1bc70 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
1bc80 0a 0a 20 20 69 66 28 20 63 3d 3d 27 64 27 20 26  ..  if( c=='d' &
1bc90 26 20 6e 3e 31 20 26 26 20 73 74 72 6e 63 6d 70  & n>1 && strncmp
1bca0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 64 61 74 61  (azArg[0], "data
1bcb0 62 61 73 65 73 22 2c 20 6e 29 3d 3d 30 20 29 7b  bases", n)==0 ){
1bcc0 0a 20 20 20 20 53 68 65 6c 6c 53 74 61 74 65 20  .    ShellState 
1bcd0 64 61 74 61 3b 0a 20 20 20 20 63 68 61 72 20 2a  data;.    char *
1bce0 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20  zErrMsg = 0;.   
1bcf0 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a   open_db(p, 0);.
1bd00 20 20 20 20 6d 65 6d 63 70 79 28 26 64 61 74 61      memcpy(&data
1bd10 2c 20 70 2c 20 73 69 7a 65 6f 66 28 64 61 74 61  , p, sizeof(data
1bd20 29 29 3b 0a 20 20 20 20 64 61 74 61 2e 73 68 6f  ));.    data.sho
1bd30 77 48 65 61 64 65 72 20 3d 20 30 3b 0a 20 20 20  wHeader = 0;.   
1bd40 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20 64 61   data.cMode = da
1bd50 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c  ta.mode = MODE_L
1bd60 69 73 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ist;.    sqlite3
1bd70 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
1bd80 28 64 61 74 61 2e 63 6f 6c 53 65 70 61 72 61 74  (data.colSeparat
1bd90 6f 72 29 2c 64 61 74 61 2e 63 6f 6c 53 65 70 61  or),data.colSepa
1bda0 72 61 74 6f 72 2c 22 3a 20 22 29 3b 0a 20 20 20  rator,": ");.   
1bdb0 20 64 61 74 61 2e 63 6e 74 20 3d 20 30 3b 0a 20   data.cnt = 0;. 
1bdc0 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28     sqlite3_exec(
1bdd0 70 2d 3e 64 62 2c 20 22 53 45 4c 45 43 54 20 6e  p->db, "SELECT n
1bde0 61 6d 65 2c 20 66 69 6c 65 20 46 52 4f 4d 20 70  ame, file FROM p
1bdf0 72 61 67 6d 61 5f 64 61 74 61 62 61 73 65 5f 6c  ragma_database_l
1be00 69 73 74 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ist",.          
1be10 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 2c         callback,
1be20 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67   &data, &zErrMsg
1be30 29 3b 0a 20 20 20 20 69 66 28 20 7a 45 72 72 4d  );.    if( zErrM
1be40 73 67 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  sg ){.      utf8
1be50 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
1be60 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45  Error: %s\n", zE
1be70 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 73 71  rrMsg);.      sq
1be80 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d  lite3_free(zErrM
1be90 73 67 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  sg);.      rc = 
1bea0 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
1beb0 0a 0a 20 20 69 66 28 20 63 3d 3d 27 64 27 20 26  ..  if( c=='d' &
1bec0 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
1bed0 30 5d 2c 20 22 64 62 69 6e 66 6f 22 2c 20 6e 29  0], "dbinfo", n)
1bee0 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
1bef0 73 68 65 6c 6c 5f 64 62 69 6e 66 6f 5f 63 6f 6d  shell_dbinfo_com
1bf00 6d 61 6e 64 28 70 2c 20 6e 41 72 67 2c 20 61 7a  mand(p, nArg, az
1bf10 41 72 67 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20  Arg);.  }else.. 
1bf20 20 69 66 28 20 63 3d 3d 27 64 27 20 26 26 20 73   if( c=='d' && s
1bf30 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
1bf40 20 22 64 75 6d 70 22 2c 20 6e 29 3d 3d 30 20 29   "dump", n)==0 )
1bf50 7b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c  {.    open_db(p,
1bf60 20 30 29 3b 0a 20 20 20 20 2f 2a 20 57 68 65 6e   0);.    /* When
1bf70 20 70 6c 61 79 69 6e 67 20 62 61 63 6b 20 61 20   playing back a 
1bf80 22 64 75 6d 70 22 2c 20 74 68 65 20 63 6f 6e 74  "dump", the cont
1bf90 65 6e 74 20 6d 69 67 68 74 20 61 70 70 65 61 72  ent might appear
1bfa0 20 69 6e 20 61 6e 20 6f 72 64 65 72 0a 20 20 20   in an order.   
1bfb0 20 2a 2a 20 77 68 69 63 68 20 63 61 75 73 65 73   ** which causes
1bfc0 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69   immediate forei
1bfd0 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
1bfe0 74 73 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65  ts to be violate
1bff0 64 2e 0a 20 20 20 20 2a 2a 20 53 6f 20 64 69 73  d..    ** So dis
1c000 61 62 6c 65 20 66 6f 72 65 69 67 6e 2d 6b 65 79  able foreign-key
1c010 20 63 6f 6e 73 74 72 61 69 6e 74 20 65 6e 66 6f   constraint enfo
1c020 72 63 65 6d 65 6e 74 20 74 6f 20 70 72 65 76 65  rcement to preve
1c030 6e 74 20 70 72 6f 62 6c 65 6d 73 2e 20 2a 2f 0a  nt problems. */.
1c040 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d 31 20      if( nArg!=1 
1c050 26 26 20 6e 41 72 67 21 3d 32 20 29 7b 0a 20 20  && nArg!=2 ){.  
1c060 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
1c070 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
1c080 64 75 6d 70 20 3f 4c 49 4b 45 2d 50 41 54 54 45  dump ?LIKE-PATTE
1c090 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  RN?\n");.      r
1c0a0 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74  c = 1;.      got
1c0b0 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
1c0c0 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  xit;.    }.    r
1c0d0 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
1c0e0 2c 20 22 50 52 41 47 4d 41 20 66 6f 72 65 69 67  , "PRAGMA foreig
1c0f0 6e 5f 6b 65 79 73 3d 4f 46 46 3b 5c 6e 22 29 3b  n_keys=OFF;\n");
1c100 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28  .    raw_printf(
1c110 70 2d 3e 6f 75 74 2c 20 22 42 45 47 49 4e 20 54  p->out, "BEGIN T
1c120 52 41 4e 53 41 43 54 49 4f 4e 3b 5c 6e 22 29 3b  RANSACTION;\n");
1c130 0a 20 20 20 20 70 2d 3e 77 72 69 74 61 62 6c 65  .    p->writable
1c140 53 63 68 65 6d 61 20 3d 20 30 3b 0a 20 20 20 20  Schema = 0;.    
1c150 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e  sqlite3_exec(p->
1c160 64 62 2c 20 22 53 41 56 45 50 4f 49 4e 54 20 64  db, "SAVEPOINT d
1c170 75 6d 70 3b 20 50 52 41 47 4d 41 20 77 72 69 74  ump; PRAGMA writ
1c180 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 22 2c  able_schema=ON",
1c190 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 70   0, 0, 0);.    p
1c1a0 2d 3e 6e 45 72 72 20 3d 20 30 3b 0a 20 20 20 20  ->nErr = 0;.    
1c1b0 69 66 28 20 6e 41 72 67 3d 3d 31 20 29 7b 0a 20  if( nArg==1 ){. 
1c1c0 20 20 20 20 20 72 75 6e 5f 73 63 68 65 6d 61 5f       run_schema_
1c1d0 64 75 6d 70 5f 71 75 65 72 79 28 70 2c 0a 20 20  dump_query(p,.  
1c1e0 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61        "SELECT na
1c1f0 6d 65 2c 20 74 79 70 65 2c 20 73 71 6c 20 46 52  me, type, sql FR
1c200 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
1c210 20 22 0a 20 20 20 20 20 20 20 20 22 57 48 45 52   ".        "WHER
1c220 45 20 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c 20 41  E sql NOT NULL A
1c230 4e 44 20 74 79 70 65 3d 3d 27 74 61 62 6c 65 27  ND type=='table'
1c240 20 41 4e 44 20 6e 61 6d 65 21 3d 27 73 71 6c 69   AND name!='sqli
1c250 74 65 5f 73 65 71 75 65 6e 63 65 27 22 0a 20 20  te_sequence'".  
1c260 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 75 6e      );.      run
1c270 5f 73 63 68 65 6d 61 5f 64 75 6d 70 5f 71 75 65  _schema_dump_que
1c280 72 79 28 70 2c 0a 20 20 20 20 20 20 20 20 22 53  ry(p,.        "S
1c290 45 4c 45 43 54 20 6e 61 6d 65 2c 20 74 79 70 65  ELECT name, type
1c2a0 2c 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74  , sql FROM sqlit
1c2b0 65 5f 6d 61 73 74 65 72 20 22 0a 20 20 20 20 20  e_master ".     
1c2c0 20 20 20 22 57 48 45 52 45 20 6e 61 6d 65 3d 3d     "WHERE name==
1c2d0 27 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65  'sqlite_sequence
1c2e0 27 22 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  '".      );.    
1c2f0 20 20 72 75 6e 5f 74 61 62 6c 65 5f 64 75 6d 70    run_table_dump
1c300 5f 71 75 65 72 79 28 70 2c 0a 20 20 20 20 20 20  _query(p,.      
1c310 20 20 22 53 45 4c 45 43 54 20 73 71 6c 20 46 52    "SELECT sql FR
1c320 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
1c330 20 22 0a 20 20 20 20 20 20 20 20 22 57 48 45 52   ".        "WHER
1c340 45 20 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c 20 41  E sql NOT NULL A
1c350 4e 44 20 74 79 70 65 20 49 4e 20 28 27 69 6e 64  ND type IN ('ind
1c360 65 78 27 2c 27 74 72 69 67 67 65 72 27 2c 27 76  ex','trigger','v
1c370 69 65 77 27 29 22 2c 20 30 0a 20 20 20 20 20 20  iew')", 0.      
1c380 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
1c390 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20      int i;.     
1c3a0 20 66 6f 72 28 69 3d 31 3b 20 69 3c 6e 41 72 67   for(i=1; i<nArg
1c3b0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
1c3c0 7a 53 68 65 6c 6c 53 74 61 74 69 63 20 3d 20 61  zShellStatic = a
1c3d0 7a 41 72 67 5b 69 5d 3b 0a 20 20 20 20 20 20 20  zArg[i];.       
1c3e0 20 72 75 6e 5f 73 63 68 65 6d 61 5f 64 75 6d 70   run_schema_dump
1c3f0 5f 71 75 65 72 79 28 70 2c 0a 20 20 20 20 20 20  _query(p,.      
1c400 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65      "SELECT name
1c410 2c 20 74 79 70 65 2c 20 73 71 6c 20 46 52 4f 4d  , type, sql FROM
1c420 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 22   sqlite_master "
1c430 0a 20 20 20 20 20 20 20 20 20 20 22 57 48 45 52  .          "WHER
1c440 45 20 74 62 6c 5f 6e 61 6d 65 20 4c 49 4b 45 20  E tbl_name LIKE 
1c450 73 68 65 6c 6c 73 74 61 74 69 63 28 29 20 41 4e  shellstatic() AN
1c460 44 20 74 79 70 65 3d 3d 27 74 61 62 6c 65 27 22  D type=='table'"
1c470 0a 20 20 20 20 20 20 20 20 20 20 22 20 20 41 4e  .          "  AN
1c480 44 20 73 71 6c 20 4e 4f 54 20 4e 55 4c 4c 22 29  D sql NOT NULL")
1c490 3b 0a 20 20 20 20 20 20 20 20 72 75 6e 5f 74 61  ;.        run_ta
1c4a0 62 6c 65 5f 64 75 6d 70 5f 71 75 65 72 79 28 70  ble_dump_query(p
1c4b0 2c 0a 20 20 20 20 20 20 20 20 20 20 22 53 45 4c  ,.          "SEL
1c4c0 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c  ECT sql FROM sql
1c4d0 69 74 65 5f 6d 61 73 74 65 72 20 22 0a 20 20 20  ite_master ".   
1c4e0 20 20 20 20 20 20 20 22 57 48 45 52 45 20 73 71         "WHERE sq
1c4f0 6c 20 4e 4f 54 20 4e 55 4c 4c 22 0a 20 20 20 20  l NOT NULL".    
1c500 20 20 20 20 20 20 22 20 20 41 4e 44 20 74 79 70        "  AND typ
1c510 65 20 49 4e 20 28 27 69 6e 64 65 78 27 2c 27 74  e IN ('index','t
1c520 72 69 67 67 65 72 27 2c 27 76 69 65 77 27 29 22  rigger','view')"
1c530 0a 20 20 20 20 20 20 20 20 20 20 22 20 20 41 4e  .          "  AN
1c540 44 20 74 62 6c 5f 6e 61 6d 65 20 4c 49 4b 45 20  D tbl_name LIKE 
1c550 73 68 65 6c 6c 73 74 61 74 69 63 28 29 22 2c 20  shellstatic()", 
1c560 30 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20  0.        );.   
1c570 20 20 20 20 20 7a 53 68 65 6c 6c 53 74 61 74 69       zShellStati
1c580 63 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  c = 0;.      }. 
1c590 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e     }.    if( p->
1c5a0 77 72 69 74 61 62 6c 65 53 63 68 65 6d 61 20 29  writableSchema )
1c5b0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
1c5c0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 50 52 41 47  tf(p->out, "PRAG
1c5d0 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
1c5e0 6d 61 3d 4f 46 46 3b 5c 6e 22 29 3b 0a 20 20 20  ma=OFF;\n");.   
1c5f0 20 20 20 70 2d 3e 77 72 69 74 61 62 6c 65 53 63     p->writableSc
1c600 68 65 6d 61 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  hema = 0;.    }.
1c610 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63      sqlite3_exec
1c620 28 70 2d 3e 64 62 2c 20 22 50 52 41 47 4d 41 20  (p->db, "PRAGMA 
1c630 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d  writable_schema=
1c640 4f 46 46 3b 22 2c 20 30 2c 20 30 2c 20 30 29 3b  OFF;", 0, 0, 0);
1c650 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65  .    sqlite3_exe
1c660 63 28 70 2d 3e 64 62 2c 20 22 52 45 4c 45 41 53  c(p->db, "RELEAS
1c670 45 20 64 75 6d 70 3b 22 2c 20 30 2c 20 30 2c 20  E dump;", 0, 0, 
1c680 30 29 3b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e  0);.    raw_prin
1c690 74 66 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e 6e 45  tf(p->out, p->nE
1c6a0 72 72 20 3f 20 22 52 4f 4c 4c 42 41 43 4b 3b 20  rr ? "ROLLBACK; 
1c6b0 2d 2d 20 64 75 65 20 74 6f 20 65 72 72 6f 72 73  -- due to errors
1c6c0 5c 6e 22 20 3a 20 22 43 4f 4d 4d 49 54 3b 5c 6e  \n" : "COMMIT;\n
1c6d0 22 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69  ");.  }else..  i
1c6e0 66 28 20 63 3d 3d 27 65 27 20 26 26 20 73 74 72  f( c=='e' && str
1c6f0 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
1c700 65 63 68 6f 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  echo", n)==0 ){.
1c710 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20      if( nArg==2 
1c720 29 7b 0a 20 20 20 20 20 20 70 2d 3e 65 63 68 6f  ){.      p->echo
1c730 4f 6e 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75  On = booleanValu
1c740 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  e(azArg[1]);.   
1c750 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61   }else{.      ra
1c760 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
1c770 20 22 55 73 61 67 65 3a 20 2e 65 63 68 6f 20 6f   "Usage: .echo o
1c780 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20  n|off\n");.     
1c790 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20   rc = 1;.    }. 
1c7a0 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
1c7b0 3d 27 65 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='e' && strncmp(
1c7c0 61 7a 41 72 67 5b 30 5d 2c 20 22 65 71 70 22 2c  azArg[0], "eqp",
1c7d0 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66   n)==0 ){.    if
1c7e0 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20  ( nArg==2 ){.   
1c7f0 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a     if( strcmp(az
1c800 41 72 67 5b 31 5d 2c 22 66 75 6c 6c 22 29 3d 3d  Arg[1],"full")==
1c810 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e  0 ){.        p->
1c820 61 75 74 6f 45 51 50 20 3d 20 32 3b 0a 20 20 20  autoEQP = 2;.   
1c830 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1c840 20 20 70 2d 3e 61 75 74 6f 45 51 50 20 3d 20 62    p->autoEQP = b
1c850 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72  ooleanValue(azAr
1c860 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  g[1]);.      }. 
1c870 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1c880 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
1c890 72 2c 20 22 55 73 61 67 65 3a 20 2e 65 71 70 20  r, "Usage: .eqp 
1c8a0 6f 6e 7c 6f 66 66 7c 66 75 6c 6c 5c 6e 22 29 3b  on|off|full\n");
1c8b0 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
1c8c0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
1c8d0 69 66 28 20 63 3d 3d 27 65 27 20 26 26 20 73 74  if( c=='e' && st
1c8e0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
1c8f0 22 65 78 69 74 22 2c 20 6e 29 3d 3d 30 20 29 7b  "exit", n)==0 ){
1c900 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e 31 20  .    if( nArg>1 
1c910 26 26 20 28 72 63 20 3d 20 28 69 6e 74 29 69 6e  && (rc = (int)in
1c920 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72 67  tegerValue(azArg
1c930 5b 31 5d 29 29 21 3d 30 20 29 20 65 78 69 74 28  [1]))!=0 ) exit(
1c940 72 63 29 3b 0a 20 20 20 20 72 63 20 3d 20 32 3b  rc);.    rc = 2;
1c950 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
1c960 63 3d 3d 27 65 27 20 26 26 20 73 74 72 6e 63 6d  c=='e' && strncm
1c970 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 65 78 70  p(azArg[0], "exp
1c980 6c 61 69 6e 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  lain", n)==0 ){.
1c990 20 20 20 20 69 6e 74 20 76 61 6c 20 3d 20 31 3b      int val = 1;
1c9a0 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3e 3d 32  .    if( nArg>=2
1c9b0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 74   ){.      if( st
1c9c0 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 61  rcmp(azArg[1],"a
1c9d0 75 74 6f 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  uto")==0 ){.    
1c9e0 20 20 20 20 76 61 6c 20 3d 20 39 39 3b 0a 20 20      val = 99;.  
1c9f0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1ca00 20 20 20 76 61 6c 20 3d 20 20 62 6f 6f 6c 65 61     val =  boolea
1ca10 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29  nValue(azArg[1])
1ca20 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1ca30 20 20 20 20 69 66 28 20 76 61 6c 3d 3d 31 20 26      if( val==1 &
1ca40 26 20 70 2d 3e 6d 6f 64 65 21 3d 4d 4f 44 45 5f  & p->mode!=MODE_
1ca50 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20  Explain ){.     
1ca60 20 70 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64 65 20 3d   p->normalMode =
1ca70 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20 20 20 20 20   p->mode;.      
1ca80 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 45  p->mode = MODE_E
1ca90 78 70 6c 61 69 6e 3b 0a 20 20 20 20 20 20 70 2d  xplain;.      p-
1caa0 3e 61 75 74 6f 45 78 70 6c 61 69 6e 20 3d 20 30  >autoExplain = 0
1cab0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
1cac0 76 61 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  val==0 ){.      
1cad0 69 66 28 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44  if( p->mode==MOD
1cae0 45 5f 45 78 70 6c 61 69 6e 20 29 20 70 2d 3e 6d  E_Explain ) p->m
1caf0 6f 64 65 20 3d 20 70 2d 3e 6e 6f 72 6d 61 6c 4d  ode = p->normalM
1cb00 6f 64 65 3b 0a 20 20 20 20 20 20 70 2d 3e 61 75  ode;.      p->au
1cb10 74 6f 45 78 70 6c 61 69 6e 20 3d 20 30 3b 0a 20  toExplain = 0;. 
1cb20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 76 61 6c     }else if( val
1cb30 3d 3d 39 39 20 29 7b 0a 20 20 20 20 20 20 69 66  ==99 ){.      if
1cb40 28 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f  ( p->mode==MODE_
1cb50 45 78 70 6c 61 69 6e 20 29 20 70 2d 3e 6d 6f 64  Explain ) p->mod
1cb60 65 20 3d 20 70 2d 3e 6e 6f 72 6d 61 6c 4d 6f 64  e = p->normalMod
1cb70 65 3b 0a 20 20 20 20 20 20 70 2d 3e 61 75 74 6f  e;.      p->auto
1cb80 45 78 70 6c 61 69 6e 20 3d 20 31 3b 0a 20 20 20  Explain = 1;.   
1cb90 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66   }.  }else..  if
1cba0 28 20 63 3d 3d 27 66 27 20 26 26 20 73 74 72 6e  ( c=='f' && strn
1cbb0 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 66  cmp(azArg[0], "f
1cbc0 75 6c 6c 73 63 68 65 6d 61 22 2c 20 6e 29 3d 3d  ullschema", n)==
1cbd0 30 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c 53 74  0 ){.    ShellSt
1cbe0 61 74 65 20 64 61 74 61 3b 0a 20 20 20 20 63 68  ate data;.    ch
1cbf0 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ar *zErrMsg = 0;
1cc00 0a 20 20 20 20 69 6e 74 20 64 6f 53 74 61 74 73  .    int doStats
1cc10 20 3d 20 30 3b 0a 20 20 20 20 6d 65 6d 63 70 79   = 0;.    memcpy
1cc20 28 26 64 61 74 61 2c 20 70 2c 20 73 69 7a 65 6f  (&data, p, sizeo
1cc30 66 28 64 61 74 61 29 29 3b 0a 20 20 20 20 64 61  f(data));.    da
1cc40 74 61 2e 73 68 6f 77 48 65 61 64 65 72 20 3d 20  ta.showHeader = 
1cc50 30 3b 0a 20 20 20 20 64 61 74 61 2e 63 4d 6f 64  0;.    data.cMod
1cc60 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20  e = data.mode = 
1cc70 4d 4f 44 45 5f 53 65 6d 69 3b 0a 20 20 20 20 69  MODE_Semi;.    i
1cc80 66 28 20 6e 41 72 67 3d 3d 32 20 26 26 20 6f 70  f( nArg==2 && op
1cc90 74 69 6f 6e 4d 61 74 63 68 28 61 7a 41 72 67 5b  tionMatch(azArg[
1cca0 31 5d 2c 20 22 69 6e 64 65 6e 74 22 29 20 29 7b  1], "indent") ){
1ccb0 0a 20 20 20 20 20 20 64 61 74 61 2e 63 4d 6f 64  .      data.cMod
1ccc0 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20  e = data.mode = 
1ccd0 4d 4f 44 45 5f 50 72 65 74 74 79 3b 0a 20 20 20  MODE_Pretty;.   
1cce0 20 20 20 6e 41 72 67 20 3d 20 31 3b 0a 20 20 20     nArg = 1;.   
1ccf0 20 7d 0a 20 20 20 20 69 66 28 20 6e 41 72 67 21   }.    if( nArg!
1cd00 3d 31 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  =1 ){.      raw_
1cd10 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1cd20 55 73 61 67 65 3a 20 2e 66 75 6c 6c 73 63 68 65  Usage: .fullsche
1cd30 6d 61 20 3f 2d 2d 69 6e 64 65 6e 74 3f 5c 6e 22  ma ?--indent?\n"
1cd40 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
1cd50 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61  .      goto meta
1cd60 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
1cd70 20 20 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62     }.    open_db
1cd80 28 70 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d  (p, 0);.    rc =
1cd90 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d   sqlite3_exec(p-
1cda0 3e 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c  >db,.       "SEL
1cdb0 45 43 54 20 73 71 6c 20 46 52 4f 4d 22 0a 20 20  ECT sql FROM".  
1cdc0 20 20 20 20 20 22 20 20 28 53 45 4c 45 43 54 20       "  (SELECT 
1cdd0 73 71 6c 20 73 71 6c 2c 20 74 79 70 65 20 74 79  sql sql, type ty
1cde0 70 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 74 62 6c  pe, tbl_name tbl
1cdf0 5f 6e 61 6d 65 2c 20 6e 61 6d 65 20 6e 61 6d 65  _name, name name
1ce00 2c 20 72 6f 77 69 64 20 78 22 0a 20 20 20 20 20  , rowid x".     
1ce10 20 20 22 20 20 20 20 20 46 52 4f 4d 20 73 71 6c    "     FROM sql
1ce20 69 74 65 5f 6d 61 73 74 65 72 20 55 4e 49 4f 4e  ite_master UNION
1ce30 20 41 4c 4c 22 0a 20 20 20 20 20 20 20 22 20 20   ALL".       "  
1ce40 20 53 45 4c 45 43 54 20 73 71 6c 2c 20 74 79 70   SELECT sql, typ
1ce50 65 2c 20 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d  e, tbl_name, nam
1ce60 65 2c 20 72 6f 77 69 64 20 46 52 4f 4d 20 73 71  e, rowid FROM sq
1ce70 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
1ce80 29 20 22 0a 20 20 20 20 20 20 20 22 57 48 45 52  ) ".       "WHER
1ce90 45 20 74 79 70 65 21 3d 27 6d 65 74 61 27 20 41  E type!='meta' A
1cea0 4e 44 20 73 71 6c 20 4e 4f 54 4e 55 4c 4c 20 41  ND sql NOTNULL A
1ceb0 4e 44 20 6e 61 6d 65 20 4e 4f 54 20 4c 49 4b 45  ND name NOT LIKE
1cec0 20 27 73 71 6c 69 74 65 5f 25 27 20 22 0a 20 20   'sqlite_%' ".  
1ced0 20 20 20 20 20 22 4f 52 44 45 52 20 42 59 20 72       "ORDER BY r
1cee0 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 63 61  owid",.       ca
1cef0 6c 6c 62 61 63 6b 2c 20 26 64 61 74 61 2c 20 26  llback, &data, &
1cf00 7a 45 72 72 4d 73 67 0a 20 20 20 20 29 3b 0a 20  zErrMsg.    );. 
1cf10 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
1cf20 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73 71  E_OK ){.      sq
1cf30 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
1cf40 74 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  t;.      rc = sq
1cf50 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
1cf60 28 70 2d 3e 64 62 2c 0a 20 20 20 20 20 20 20 20  (p->db,.        
1cf70 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 72         "SELECT r
1cf80 6f 77 69 64 20 46 52 4f 4d 20 73 71 6c 69 74 65  owid FROM sqlite
1cf90 5f 6d 61 73 74 65 72 22 0a 20 20 20 20 20 20 20  _master".       
1cfa0 20 20 20 20 20 20 20 20 22 20 57 48 45 52 45 20          " WHERE 
1cfb0 6e 61 6d 65 20 47 4c 4f 42 20 27 73 71 6c 69 74  name GLOB 'sqlit
1cfc0 65 5f 73 74 61 74 5b 31 33 34 5d 27 22 2c 0a 20  e_stat[134]'",. 
1cfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 31                -1
1cfe0 2c 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20  , &pStmt, 0);.  
1cff0 20 20 20 20 64 6f 53 74 61 74 73 20 3d 20 73 71      doStats = sq
1d000 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74  lite3_step(pStmt
1d010 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20  )==SQLITE_ROW;. 
1d020 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e       sqlite3_fin
1d030 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
1d040 20 20 7d 0a 20 20 20 20 69 66 28 20 64 6f 53 74    }.    if( doSt
1d050 61 74 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ats==0 ){.      
1d060 72 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  raw_printf(p->ou
1d070 74 2c 20 22 2f 2a 20 4e 6f 20 53 54 41 54 20 74  t, "/* No STAT t
1d080 61 62 6c 65 73 20 61 76 61 69 6c 61 62 6c 65 20  ables available 
1d090 2a 2f 5c 6e 22 29 3b 0a 20 20 20 20 7d 65 6c 73  */\n");.    }els
1d0a0 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  e{.      raw_pri
1d0b0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 41 4e 41  ntf(p->out, "ANA
1d0c0 4c 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74  LYZE sqlite_mast
1d0d0 65 72 3b 5c 6e 22 29 3b 0a 20 20 20 20 20 20 73  er;\n");.      s
1d0e0 71 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64  qlite3_exec(p->d
1d0f0 62 2c 20 22 53 45 4c 45 43 54 20 27 41 4e 41 4c  b, "SELECT 'ANAL
1d100 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  YZE sqlite_maste
1d110 72 27 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  r'",.           
1d120 20 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b          callback
1d130 2c 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d 73  , &data, &zErrMs
1d140 67 29 3b 0a 20 20 20 20 20 20 64 61 74 61 2e 63  g);.      data.c
1d150 4d 6f 64 65 20 3d 20 64 61 74 61 2e 6d 6f 64 65  Mode = data.mode
1d160 20 3d 20 4d 4f 44 45 5f 49 6e 73 65 72 74 3b 0a   = MODE_Insert;.
1d170 20 20 20 20 20 20 64 61 74 61 2e 7a 44 65 73 74        data.zDest
1d180 54 61 62 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f  Table = "sqlite_
1d190 73 74 61 74 31 22 3b 0a 20 20 20 20 20 20 73 68  stat1";.      sh
1d1a0 65 6c 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  ell_exec(p->db, 
1d1b0 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73  "SELECT * FROM s
1d1c0 71 6c 69 74 65 5f 73 74 61 74 31 22 2c 0a 20 20  qlite_stat1",.  
1d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1d1e0 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26  hell_callback, &
1d1f0 64 61 74 61 2c 26 7a 45 72 72 4d 73 67 29 3b 0a  data,&zErrMsg);.
1d200 20 20 20 20 20 20 64 61 74 61 2e 7a 44 65 73 74        data.zDest
1d210 54 61 62 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f  Table = "sqlite_
1d220 73 74 61 74 33 22 3b 0a 20 20 20 20 20 20 73 68  stat3";.      sh
1d230 65 6c 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  ell_exec(p->db, 
1d240 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73  "SELECT * FROM s
1d250 71 6c 69 74 65 5f 73 74 61 74 33 22 2c 0a 20 20  qlite_stat3",.  
1d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1d270 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26  hell_callback, &
1d280 64 61 74 61 2c 26 7a 45 72 72 4d 73 67 29 3b 0a  data,&zErrMsg);.
1d290 20 20 20 20 20 20 64 61 74 61 2e 7a 44 65 73 74        data.zDest
1d2a0 54 61 62 6c 65 20 3d 20 22 73 71 6c 69 74 65 5f  Table = "sqlite_
1d2b0 73 74 61 74 34 22 3b 0a 20 20 20 20 20 20 73 68  stat4";.      sh
1d2c0 65 6c 6c 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20  ell_exec(p->db, 
1d2d0 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73  "SELECT * FROM s
1d2e0 71 6c 69 74 65 5f 73 74 61 74 34 22 2c 0a 20 20  qlite_stat4",.  
1d2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1d300 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c 20 26  hell_callback, &
1d310 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67 29 3b  data, &zErrMsg);
1d320 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
1d330 66 28 70 2d 3e 6f 75 74 2c 20 22 41 4e 41 4c 59  f(p->out, "ANALY
1d340 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  ZE sqlite_master
1d350 3b 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  ;\n");.    }.  }
1d360 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
1d370 68 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  h' && strncmp(az
1d380 41 72 67 5b 30 5d 2c 20 22 68 65 61 64 65 72 73  Arg[0], "headers
1d390 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
1d3a0 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20  if( nArg==2 ){. 
1d3b0 20 20 20 20 20 70 2d 3e 73 68 6f 77 48 65 61 64       p->showHead
1d3c0 65 72 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75  er = booleanValu
1d3d0 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20  e(azArg[1]);.   
1d3e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 61   }else{.      ra
1d3f0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
1d400 20 22 55 73 61 67 65 3a 20 2e 68 65 61 64 65 72   "Usage: .header
1d410 73 20 6f 6e 7c 6f 66 66 5c 6e 22 29 3b 0a 20 20  s on|off\n");.  
1d420 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20      rc = 1;.    
1d430 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
1d440 20 63 3d 3d 27 68 27 20 26 26 20 73 74 72 6e 63   c=='h' && strnc
1d450 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 68 65  mp(azArg[0], "he
1d460 6c 70 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  lp", n)==0 ){.  
1d470 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d    utf8_printf(p-
1d480 3e 6f 75 74 2c 20 22 25 73 22 2c 20 7a 48 65 6c  >out, "%s", zHel
1d490 70 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69  p);.  }else..  i
1d4a0 66 28 20 63 3d 3d 27 69 27 20 26 26 20 73 74 72  f( c=='i' && str
1d4b0 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
1d4c0 69 6d 70 6f 72 74 22 2c 20 6e 29 3d 3d 30 20 29  import", n)==0 )
1d4d0 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 61 62  {.    char *zTab
1d4e0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
1d4f0 20 20 2f 2a 20 49 6e 73 65 72 74 20 64 61 74 61    /* Insert data
1d500 20 69 6e 74 6f 20 74 68 69 73 20 74 61 62 6c 65   into this table
1d510 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 46   */.    char *zF
1d520 69 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ile;            
1d530 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 66      /* Name of f
1d540 69 6c 65 20 74 6f 20 65 78 74 72 61 20 63 6f 6e  ile to extra con
1d550 74 65 6e 74 20 66 72 6f 6d 20 2a 2f 0a 20 20 20  tent from */.   
1d560 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
1d570 53 74 6d 74 20 3d 20 4e 55 4c 4c 3b 20 2f 2a 20  Stmt = NULL; /* 
1d580 41 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20  A statement */. 
1d590 20 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20     int nCol;    
1d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d5b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
1d5c0 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
1d5d0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 42 79 74   */.    int nByt
1d5e0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1d5f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1d600 20 62 79 74 65 73 20 69 6e 20 61 6e 20 53 51 4c   bytes in an SQL
1d610 20 73 74 72 69 6e 67 20 2a 2f 0a 20 20 20 20 69   string */.    i
1d620 6e 74 20 69 2c 20 6a 3b 20 20 20 20 20 20 20 20  nt i, j;        
1d630 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
1d640 6f 70 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20  op counters */. 
1d650 20 20 20 69 6e 74 20 6e 65 65 64 43 6f 6d 6d 69     int needCommi
1d660 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  t;             /
1d670 2a 20 54 72 75 65 20 74 6f 20 43 4f 4d 4d 49 54  * True to COMMIT
1d680 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 61 74 20   or ROLLBACK at 
1d690 65 6e 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  end */.    int n
1d6a0 53 65 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  Sep;            
1d6b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1d6c0 20 6f 66 20 62 79 74 65 73 20 69 6e 20 70 2d 3e   of bytes in p->
1d6d0 63 6f 6c 53 65 70 61 72 61 74 6f 72 5b 5d 20 2a  colSeparator[] *
1d6e0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 71 6c  /.    char *zSql
1d6f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d700 20 20 2f 2a 20 41 6e 20 53 51 4c 20 73 74 61 74    /* An SQL stat
1d710 65 6d 65 6e 74 20 2a 2f 0a 20 20 20 20 49 6d 70  ement */.    Imp
1d720 6f 72 74 43 74 78 20 73 43 74 78 3b 20 20 20 20  ortCtx sCtx;    
1d730 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 61 64           /* Read
1d740 65 72 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  er context */.  
1d750 20 20 63 68 61 72 20 2a 28 53 51 4c 49 54 45 5f    char *(SQLITE_
1d760 43 44 45 43 4c 20 2a 78 52 65 61 64 29 28 49 6d  CDECL *xRead)(Im
1d770 70 6f 72 74 43 74 78 2a 29 3b 20 2f 2a 20 46 75  portCtx*); /* Fu
1d780 6e 63 20 74 6f 20 72 65 61 64 20 6f 6e 65 20 76  nc to read one v
1d790 61 6c 75 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  alue */.    int 
1d7a0 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 78  (SQLITE_CDECL *x
1d7b0 43 6c 6f 73 65 72 29 28 46 49 4c 45 2a 29 3b 20  Closer)(FILE*); 
1d7c0 20 20 20 20 20 2f 2a 20 46 75 6e 63 20 74 6f 20       /* Func to 
1d7d0 63 6c 6f 73 65 20 66 69 6c 65 20 2a 2f 0a 0a 20  close file */.. 
1d7e0 20 20 20 69 66 28 20 6e 41 72 67 21 3d 33 20 29     if( nArg!=3 )
1d7f0 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
1d800 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
1d810 65 3a 20 2e 69 6d 70 6f 72 74 20 46 49 4c 45 20  e: .import FILE 
1d820 54 41 42 4c 45 5c 6e 22 29 3b 0a 20 20 20 20 20  TABLE\n");.     
1d830 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61   goto meta_comma
1d840 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20  nd_exit;.    }. 
1d850 20 20 20 7a 46 69 6c 65 20 3d 20 61 7a 41 72 67     zFile = azArg
1d860 5b 31 5d 3b 0a 20 20 20 20 7a 54 61 62 6c 65 20  [1];.    zTable 
1d870 3d 20 61 7a 41 72 67 5b 32 5d 3b 0a 20 20 20 20  = azArg[2];.    
1d880 73 65 65 6e 49 6e 74 65 72 72 75 70 74 20 3d 20  seenInterrupt = 
1d890 30 3b 0a 20 20 20 20 6d 65 6d 73 65 74 28 26 73  0;.    memset(&s
1d8a0 43 74 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  Ctx, 0, sizeof(s
1d8b0 43 74 78 29 29 3b 0a 20 20 20 20 6f 70 65 6e 5f  Ctx));.    open_
1d8c0 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 6e 53  db(p, 0);.    nS
1d8d0 65 70 20 3d 20 73 74 72 6c 65 6e 33 30 28 70 2d  ep = strlen30(p-
1d8e0 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 3b 0a  >colSeparator);.
1d8f0 20 20 20 20 69 66 28 20 6e 53 65 70 3d 3d 30 20      if( nSep==0 
1d900 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
1d910 6e 74 66 28 73 74 64 65 72 72 2c 0a 20 20 20 20  ntf(stderr,.    
1d920 20 20 20 20 20 20 20 20 20 20 20 20 20 22 45 72               "Er
1d930 72 6f 72 3a 20 6e 6f 6e 2d 6e 75 6c 6c 20 63 6f  ror: non-null co
1d940 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 20 72  lumn separator r
1d950 65 71 75 69 72 65 64 20 66 6f 72 20 69 6d 70 6f  equired for impo
1d960 72 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65  rt\n");.      re
1d970 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20  turn 1;.    }.  
1d980 20 20 69 66 28 20 6e 53 65 70 3e 31 20 29 7b 0a    if( nSep>1 ){.
1d990 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
1d9a0 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a  (stderr, "Error:
1d9b0 20 6d 75 6c 74 69 2d 63 68 61 72 61 63 74 65 72   multi-character
1d9c0 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f   column separato
1d9d0 72 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 22 0a  rs not allowed".
1d9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9f0 20 20 20 20 20 20 22 20 66 6f 72 20 69 6d 70 6f        " for impo
1da00 72 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65  rt\n");.      re
1da10 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20  turn 1;.    }.  
1da20 20 20 6e 53 65 70 20 3d 20 73 74 72 6c 65 6e 33    nSep = strlen3
1da30 30 28 70 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  0(p->rowSeparato
1da40 72 29 3b 0a 20 20 20 20 69 66 28 20 6e 53 65 70  r);.    if( nSep
1da50 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77  ==0 ){.      raw
1da60 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1da70 22 45 72 72 6f 72 3a 20 6e 6f 6e 2d 6e 75 6c 6c  "Error: non-null
1da80 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72 20 72   row separator r
1da90 65 71 75 69 72 65 64 20 66 6f 72 20 69 6d 70 6f  equired for impo
1daa0 72 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 65  rt\n");.      re
1dab0 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20  turn 1;.    }.  
1dac0 20 20 69 66 28 20 6e 53 65 70 3d 3d 32 20 26 26    if( nSep==2 &&
1dad0 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f 43   p->mode==MODE_C
1dae0 73 76 20 26 26 20 73 74 72 63 6d 70 28 70 2d 3e  sv && strcmp(p->
1daf0 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45  rowSeparator, SE
1db00 50 5f 43 72 4c 66 29 3d 3d 30 20 29 7b 0a 20 20  P_CrLf)==0 ){.  
1db10 20 20 20 20 2f 2a 20 57 68 65 6e 20 69 6d 70 6f      /* When impo
1db20 72 74 69 6e 67 20 43 53 56 20 28 6f 6e 6c 79 29  rting CSV (only)
1db30 2c 20 69 66 20 74 68 65 20 72 6f 77 20 73 65 70  , if the row sep
1db40 61 72 61 74 6f 72 20 69 73 20 73 65 74 20 74 6f  arator is set to
1db50 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 64 65   the.      ** de
1db60 66 61 75 6c 74 20 6f 75 74 70 75 74 20 72 6f 77  fault output row
1db70 20 73 65 70 61 72 61 74 6f 72 2c 20 63 68 61 6e   separator, chan
1db80 67 65 20 69 74 20 74 6f 20 74 68 65 20 64 65 66  ge it to the def
1db90 61 75 6c 74 20 69 6e 70 75 74 0a 20 20 20 20 20  ault input.     
1dba0 20 2a 2a 20 72 6f 77 20 73 65 70 61 72 61 74 6f   ** row separato
1dbb0 72 2e 20 20 54 68 69 73 20 61 76 6f 69 64 73 20  r.  This avoids 
1dbc0 68 61 76 69 6e 67 20 74 6f 20 6d 61 69 6e 74 61  having to mainta
1dbd0 69 6e 20 64 69 66 66 65 72 65 6e 74 20 69 6e 70  in different inp
1dbe0 75 74 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20  ut.      ** and 
1dbf0 6f 75 74 70 75 74 20 72 6f 77 20 73 65 70 61 72  output row separ
1dc00 61 74 6f 72 73 2e 20 2a 2f 0a 20 20 20 20 20 20  ators. */.      
1dc10 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
1dc20 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65  (sizeof(p->rowSe
1dc30 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77  parator), p->row
1dc40 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f 52  Separator, SEP_R
1dc50 6f 77 29 3b 0a 20 20 20 20 20 20 6e 53 65 70 20  ow);.      nSep 
1dc60 3d 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e 72 6f  = strlen30(p->ro
1dc70 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20  wSeparator);.   
1dc80 20 7d 0a 20 20 20 20 69 66 28 20 6e 53 65 70 3e   }.    if( nSep>
1dc90 31 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  1 ){.      raw_p
1dca0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45  rintf(stderr, "E
1dcb0 72 72 6f 72 3a 20 6d 75 6c 74 69 2d 63 68 61 72  rror: multi-char
1dcc0 61 63 74 65 72 20 72 6f 77 20 73 65 70 61 72 61  acter row separa
1dcd0 74 6f 72 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  tors not allowed
1dce0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
1dcf0 20 20 20 20 20 20 20 20 22 20 66 6f 72 20 69 6d          " for im
1dd00 70 6f 72 74 5c 6e 22 29 3b 0a 20 20 20 20 20 20  port\n");.      
1dd10 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a  return 1;.    }.
1dd20 20 20 20 20 73 43 74 78 2e 7a 46 69 6c 65 20 3d      sCtx.zFile =
1dd30 20 7a 46 69 6c 65 3b 0a 20 20 20 20 73 43 74 78   zFile;.    sCtx
1dd40 2e 6e 4c 69 6e 65 20 3d 20 31 3b 0a 20 20 20 20  .nLine = 1;.    
1dd50 69 66 28 20 73 43 74 78 2e 7a 46 69 6c 65 5b 30  if( sCtx.zFile[0
1dd60 5d 3d 3d 27 7c 27 20 29 7b 0a 23 69 66 64 65 66  ]=='|' ){.#ifdef
1dd70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 4f 50   SQLITE_OMIT_POP
1dd80 45 4e 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  EN.      raw_pri
1dd90 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72  ntf(stderr, "Err
1dda0 6f 72 3a 20 70 69 70 65 73 20 61 72 65 20 6e 6f  or: pipes are no
1ddb0 74 20 73 75 70 70 6f 72 74 65 64 20 69 6e 20 74  t supported in t
1ddc0 68 69 73 20 4f 53 5c 6e 22 29 3b 0a 20 20 20 20  his OS\n");.    
1ddd0 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6c 73    return 1;.#els
1dde0 65 0a 20 20 20 20 20 20 73 43 74 78 2e 69 6e 20  e.      sCtx.in 
1ddf0 3d 20 70 6f 70 65 6e 28 73 43 74 78 2e 7a 46 69  = popen(sCtx.zFi
1de00 6c 65 2b 31 2c 20 22 72 22 29 3b 0a 20 20 20 20  le+1, "r");.    
1de10 20 20 73 43 74 78 2e 7a 46 69 6c 65 20 3d 20 22    sCtx.zFile = "
1de20 3c 70 69 70 65 3e 22 3b 0a 20 20 20 20 20 20 78  <pipe>";.      x
1de30 43 6c 6f 73 65 72 20 3d 20 70 63 6c 6f 73 65 3b  Closer = pclose;
1de40 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73  .#endif.    }els
1de50 65 7b 0a 20 20 20 20 20 20 73 43 74 78 2e 69 6e  e{.      sCtx.in
1de60 20 3d 20 66 6f 70 65 6e 28 73 43 74 78 2e 7a 46   = fopen(sCtx.zF
1de70 69 6c 65 2c 20 22 72 62 22 29 3b 0a 20 20 20 20  ile, "rb");.    
1de80 20 20 78 43 6c 6f 73 65 72 20 3d 20 66 63 6c 6f    xCloser = fclo
1de90 73 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  se;.    }.    if
1dea0 28 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44 45 5f  ( p->mode==MODE_
1deb0 41 73 63 69 69 20 29 7b 0a 20 20 20 20 20 20 78  Ascii ){.      x
1dec0 52 65 61 64 20 3d 20 61 73 63 69 69 5f 72 65 61  Read = ascii_rea
1ded0 64 5f 6f 6e 65 5f 66 69 65 6c 64 3b 0a 20 20 20  d_one_field;.   
1dee0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 78 52   }else{.      xR
1def0 65 61 64 20 3d 20 63 73 76 5f 72 65 61 64 5f 6f  ead = csv_read_o
1df00 6e 65 5f 66 69 65 6c 64 3b 0a 20 20 20 20 7d 0a  ne_field;.    }.
1df10 20 20 20 20 69 66 28 20 73 43 74 78 2e 69 6e 3d      if( sCtx.in=
1df20 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66 38  =0 ){.      utf8
1df30 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
1df40 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f  "Error: cannot o
1df50 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a  pen \"%s\"\n", z
1df60 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 72 65 74  File);.      ret
1df70 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
1df80 20 73 43 74 78 2e 63 43 6f 6c 53 65 70 20 3d 20   sCtx.cColSep = 
1df90 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 5b  p->colSeparator[
1dfa0 30 5d 3b 0a 20 20 20 20 73 43 74 78 2e 63 52 6f  0];.    sCtx.cRo
1dfb0 77 53 65 70 20 3d 20 70 2d 3e 72 6f 77 53 65 70  wSep = p->rowSep
1dfc0 61 72 61 74 6f 72 5b 30 5d 3b 0a 20 20 20 20 7a  arator[0];.    z
1dfd0 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  Sql = sqlite3_mp
1dfe0 72 69 6e 74 66 28 22 53 45 4c 45 43 54 20 2a 20  rintf("SELECT * 
1dff0 46 52 4f 4d 20 25 73 22 2c 20 7a 54 61 62 6c 65  FROM %s", zTable
1e000 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d  );.    if( zSql=
1e010 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f  =0 ){.      raw_
1e020 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1e030 45 72 72 6f 72 3a 20 6f 75 74 20 6f 66 20 6d 65  Error: out of me
1e040 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20  mory\n");.      
1e050 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29  xCloser(sCtx.in)
1e060 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31  ;.      return 1
1e070 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 42 79 74  ;.    }.    nByt
1e080 65 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 53 71  e = strlen30(zSq
1e090 6c 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  l);.    rc = sql
1e0a0 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
1e0b0 70 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c  p->db, zSql, -1,
1e0c0 20 26 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20   &pStmt, 0);.   
1e0d0 20 69 6d 70 6f 72 74 5f 61 70 70 65 6e 64 5f 63   import_append_c
1e0e0 68 61 72 28 26 73 43 74 78 2c 20 30 29 3b 20 20  har(&sCtx, 0);  
1e0f0 20 20 2f 2a 20 54 6f 20 65 6e 73 75 72 65 20 73    /* To ensure s
1e100 43 74 78 2e 7a 20 69 73 20 61 6c 6c 6f 63 61 74  Ctx.z is allocat
1e110 65 64 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63  ed */.    if( rc
1e120 20 26 26 20 73 71 6c 69 74 65 33 5f 73 74 72 67   && sqlite3_strg
1e130 6c 6f 62 28 22 6e 6f 20 73 75 63 68 20 74 61 62  lob("no such tab
1e140 6c 65 3a 20 2a 22 2c 20 73 71 6c 69 74 65 33 5f  le: *", sqlite3_
1e150 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3d 3d  errmsg(p->db))==
1e160 30 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20  0 ){.      char 
1e170 2a 7a 43 72 65 61 74 65 20 3d 20 73 71 6c 69 74  *zCreate = sqlit
1e180 65 33 5f 6d 70 72 69 6e 74 66 28 22 43 52 45 41  e3_mprintf("CREA
1e190 54 45 20 54 41 42 4c 45 20 25 73 22 2c 20 7a 54  TE TABLE %s", zT
1e1a0 61 62 6c 65 29 3b 0a 20 20 20 20 20 20 63 68 61  able);.      cha
1e1b0 72 20 63 53 65 70 20 3d 20 27 28 27 3b 0a 20 20  r cSep = '(';.  
1e1c0 20 20 20 20 77 68 69 6c 65 28 20 78 52 65 61 64      while( xRead
1e1d0 28 26 73 43 74 78 29 20 29 7b 0a 20 20 20 20 20  (&sCtx) ){.     
1e1e0 20 20 20 7a 43 72 65 61 74 65 20 3d 20 73 71 6c     zCreate = sql
1e1f0 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 7a  ite3_mprintf("%z
1e200 25 63 5c 6e 20 20 5c 22 25 77 5c 22 20 54 45 58  %c\n  \"%w\" TEX
1e210 54 22 2c 20 7a 43 72 65 61 74 65 2c 20 63 53 65  T", zCreate, cSe
1e220 70 2c 20 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20  p, sCtx.z);.    
1e230 20 20 20 20 63 53 65 70 20 3d 20 27 2c 27 3b 0a      cSep = ',';.
1e240 20 20 20 20 20 20 20 20 69 66 28 20 73 43 74 78          if( sCtx
1e250 2e 63 54 65 72 6d 21 3d 73 43 74 78 2e 63 43 6f  .cTerm!=sCtx.cCo
1e260 6c 53 65 70 20 29 20 62 72 65 61 6b 3b 0a 20 20  lSep ) break;.  
1e270 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
1e280 63 53 65 70 3d 3d 27 28 27 20 29 7b 0a 20 20 20  cSep=='(' ){.   
1e290 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
1e2a0 65 28 7a 43 72 65 61 74 65 29 3b 0a 20 20 20 20  e(zCreate);.    
1e2b0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
1e2c0 28 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 20 20  (sCtx.z);.      
1e2d0 20 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69    xCloser(sCtx.i
1e2e0 6e 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38  n);.        utf8
1e2f0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
1e300 25 73 3a 20 65 6d 70 74 79 20 66 69 6c 65 5c 6e  %s: empty file\n
1e310 22 2c 20 73 43 74 78 2e 7a 46 69 6c 65 29 3b 0a  ", sCtx.zFile);.
1e320 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
1e330 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1e340 7a 43 72 65 61 74 65 20 3d 20 73 71 6c 69 74 65  zCreate = sqlite
1e350 33 5f 6d 70 72 69 6e 74 66 28 22 25 7a 5c 6e 29  3_mprintf("%z\n)
1e360 22 2c 20 7a 43 72 65 61 74 65 29 3b 0a 20 20 20  ", zCreate);.   
1e370 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
1e380 65 78 65 63 28 70 2d 3e 64 62 2c 20 7a 43 72 65  exec(p->db, zCre
1e390 61 74 65 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20  ate, 0, 0, 0);. 
1e3a0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
1e3b0 65 28 7a 43 72 65 61 74 65 29 3b 0a 20 20 20 20  e(zCreate);.    
1e3c0 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
1e3d0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
1e3e0 73 74 64 65 72 72 2c 20 22 43 52 45 41 54 45 20  stderr, "CREATE 
1e3f0 54 41 42 4c 45 20 25 73 28 2e 2e 2e 29 20 66 61  TABLE %s(...) fa
1e400 69 6c 65 64 3a 20 25 73 5c 6e 22 2c 20 7a 54 61  iled: %s\n", zTa
1e410 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ble,.           
1e420 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 72 72       sqlite3_err
1e430 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20  msg(p->db));.   
1e440 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
1e450 65 28 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20 20  e(sCtx.z);.     
1e460 20 20 20 78 43 6c 6f 73 65 72 28 73 43 74 78 2e     xCloser(sCtx.
1e470 69 6e 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74  in);.        ret
1e480 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  urn 1;.      }. 
1e490 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1e4a0 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e  3_prepare_v2(p->
1e4b0 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70  db, zSql, -1, &p
1e4c0 53 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  Stmt, 0);.    }.
1e4d0 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
1e4e0 28 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66 28 20  (zSql);.    if( 
1e4f0 72 63 20 29 7b 0a 20 20 20 20 20 20 69 66 20 28  rc ){.      if (
1e500 70 53 74 6d 74 29 20 73 71 6c 69 74 65 33 5f 66  pStmt) sqlite3_f
1e510 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a  inalize(pStmt);.
1e520 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
1e530 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a  f(stderr,"Error:
1e540 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f   %s\n", sqlite3_
1e550 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a  errmsg(p->db));.
1e560 20 20 20 20 20 20 78 43 6c 6f 73 65 72 28 73 43        xCloser(sC
1e570 74 78 2e 69 6e 29 3b 0a 20 20 20 20 20 20 72 65  tx.in);.      re
1e580 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20  turn 1;.    }.  
1e590 20 20 6e 43 6f 6c 20 3d 20 73 71 6c 69 74 65 33    nCol = sqlite3
1e5a0 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53  _column_count(pS
1e5b0 74 6d 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  tmt);.    sqlite
1e5c0 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
1e5d0 29 3b 0a 20 20 20 20 70 53 74 6d 74 20 3d 20 30  );.    pStmt = 0
1e5e0 3b 0a 20 20 20 20 69 66 28 20 6e 43 6f 6c 3d 3d  ;.    if( nCol==
1e5f0 30 20 29 20 72 65 74 75 72 6e 20 30 3b 20 2f 2a  0 ) return 0; /*
1e600 20 6e 6f 20 63 6f 6c 75 6d 6e 73 2c 20 6e 6f 20   no columns, no 
1e610 65 72 72 6f 72 20 2a 2f 0a 20 20 20 20 7a 53 71  error */.    zSq
1e620 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  l = sqlite3_mall
1e630 6f 63 36 34 28 20 6e 42 79 74 65 2a 32 20 2b 20  oc64( nByte*2 + 
1e640 32 30 20 2b 20 6e 43 6f 6c 2a 32 20 29 3b 0a 20  20 + nCol*2 );. 
1e650 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29     if( zSql==0 )
1e660 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
1e670 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
1e680 72 3a 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  r: out of memory
1e690 5c 6e 22 29 3b 0a 20 20 20 20 20 20 78 43 6c 6f  \n");.      xClo
1e6a0 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a 20 20  ser(sCtx.in);.  
1e6b0 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
1e6c0 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
1e6d0 73 6e 70 72 69 6e 74 66 28 6e 42 79 74 65 2b 32  snprintf(nByte+2
1e6e0 30 2c 20 7a 53 71 6c 2c 20 22 49 4e 53 45 52 54  0, zSql, "INSERT
1e6f0 20 49 4e 54 4f 20 5c 22 25 77 5c 22 20 56 41 4c   INTO \"%w\" VAL
1e700 55 45 53 28 3f 22 2c 20 7a 54 61 62 6c 65 29 3b  UES(?", zTable);
1e710 0a 20 20 20 20 6a 20 3d 20 73 74 72 6c 65 6e 33  .    j = strlen3
1e720 30 28 7a 53 71 6c 29 3b 0a 20 20 20 20 66 6f 72  0(zSql);.    for
1e730 28 69 3d 31 3b 20 69 3c 6e 43 6f 6c 3b 20 69 2b  (i=1; i<nCol; i+
1e740 2b 29 7b 0a 20 20 20 20 20 20 7a 53 71 6c 5b 6a  +){.      zSql[j
1e750 2b 2b 5d 20 3d 20 27 2c 27 3b 0a 20 20 20 20 20  ++] = ',';.     
1e760 20 7a 53 71 6c 5b 6a 2b 2b 5d 20 3d 20 27 3f 27   zSql[j++] = '?'
1e770 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 53 71 6c  ;.    }.    zSql
1e780 5b 6a 2b 2b 5d 20 3d 20 27 29 27 3b 0a 20 20 20  [j++] = ')';.   
1e790 20 7a 53 71 6c 5b 6a 5d 20 3d 20 30 3b 0a 20 20   zSql[j] = 0;.  
1e7a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
1e7b0 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c  repare_v2(p->db,
1e7c0 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d   zSql, -1, &pStm
1e7d0 74 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  t, 0);.    sqlit
1e7e0 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20  e3_free(zSql);. 
1e7f0 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
1e800 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
1e810 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 25  tderr, "Error: %
1e820 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65 72  s\n", sqlite3_er
1e830 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b 0a 20 20  rmsg(p->db));.  
1e840 20 20 20 20 69 66 20 28 70 53 74 6d 74 29 20 73      if (pStmt) s
1e850 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
1e860 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 78 43  pStmt);.      xC
1e870 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29 3b 0a  loser(sCtx.in);.
1e880 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
1e890 20 20 20 20 7d 0a 20 20 20 20 6e 65 65 64 43 6f      }.    needCo
1e8a0 6d 6d 69 74 20 3d 20 73 71 6c 69 74 65 33 5f 67  mmit = sqlite3_g
1e8b0 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 70 2d  et_autocommit(p-
1e8c0 3e 64 62 29 3b 0a 20 20 20 20 69 66 28 20 6e 65  >db);.    if( ne
1e8d0 65 64 43 6f 6d 6d 69 74 20 29 20 73 71 6c 69 74  edCommit ) sqlit
1e8e0 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 20 22  e3_exec(p->db, "
1e8f0 42 45 47 49 4e 22 2c 20 30 2c 20 30 2c 20 30 29  BEGIN", 0, 0, 0)
1e900 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20  ;.    do{.      
1e910 69 6e 74 20 73 74 61 72 74 4c 69 6e 65 20 3d 20  int startLine = 
1e920 73 43 74 78 2e 6e 4c 69 6e 65 3b 0a 20 20 20 20  sCtx.nLine;.    
1e930 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f    for(i=0; i<nCo
1e940 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  l; i++){.       
1e950 20 63 68 61 72 20 2a 7a 20 3d 20 78 52 65 61 64   char *z = xRead
1e960 28 26 73 43 74 78 29 3b 0a 20 20 20 20 20 20 20  (&sCtx);.       
1e970 20 2f 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 44   /*.        ** D
1e980 69 64 20 77 65 20 72 65 61 63 68 20 65 6e 64 2d  id we reach end-
1e990 6f 66 2d 66 69 6c 65 20 62 65 66 6f 72 65 20 66  of-file before f
1e9a0 69 6e 64 69 6e 67 20 61 6e 79 20 63 6f 6c 75 6d  inding any colum
1e9b0 6e 73 3f 0a 20 20 20 20 20 20 20 20 2a 2a 20 49  ns?.        ** I
1e9c0 66 20 73 6f 2c 20 73 74 6f 70 20 69 6e 73 74 65  f so, stop inste
1e9d0 61 64 20 6f 66 20 4e 55 4c 4c 20 66 69 6c 6c 69  ad of NULL filli
1e9e0 6e 67 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67  ng the remaining
1e9f0 20 63 6f 6c 75 6d 6e 73 2e 0a 20 20 20 20 20 20   columns..      
1ea00 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28    */.        if(
1ea10 20 7a 3d 3d 30 20 26 26 20 69 3d 3d 30 20 29 20   z==0 && i==0 ) 
1ea20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 2f  break;.        /
1ea30 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 44 69 64  *.        ** Did
1ea40 20 77 65 20 72 65 61 63 68 20 65 6e 64 2d 6f 66   we reach end-of
1ea50 2d 66 69 6c 65 20 4f 52 20 65 6e 64 2d 6f 66 2d  -file OR end-of-
1ea60 6c 69 6e 65 20 62 65 66 6f 72 65 20 66 69 6e 64  line before find
1ea70 69 6e 67 20 61 6e 79 0a 20 20 20 20 20 20 20 20  ing any.        
1ea80 2a 2a 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 41 53  ** columns in AS
1ea90 43 49 49 20 6d 6f 64 65 3f 20 20 49 66 20 73 6f  CII mode?  If so
1eaa0 2c 20 73 74 6f 70 20 69 6e 73 74 65 61 64 20 6f  , stop instead o
1eab0 66 20 4e 55 4c 4c 20 66 69 6c 6c 69 6e 67 0a 20  f NULL filling. 
1eac0 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65         ** the re
1ead0 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e  maining columns.
1eae0 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
1eaf0 20 20 20 20 69 66 28 20 70 2d 3e 6d 6f 64 65 3d      if( p->mode=
1eb00 3d 4d 4f 44 45 5f 41 73 63 69 69 20 26 26 20 28  =MODE_Ascii && (
1eb10 7a 3d 3d 30 20 7c 7c 20 7a 5b 30 5d 3d 3d 30 29  z==0 || z[0]==0)
1eb20 20 26 26 20 69 3d 3d 30 20 29 20 62 72 65 61 6b   && i==0 ) break
1eb30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
1eb40 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d  3_bind_text(pStm
1eb50 74 2c 20 69 2b 31 2c 20 7a 2c 20 2d 31 2c 20 53  t, i+1, z, -1, S
1eb60 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
1eb70 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 3c  ;.        if( i<
1eb80 6e 43 6f 6c 2d 31 20 26 26 20 73 43 74 78 2e 63  nCol-1 && sCtx.c
1eb90 54 65 72 6d 21 3d 73 43 74 78 2e 63 43 6f 6c 53  Term!=sCtx.cColS
1eba0 65 70 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ep ){.          
1ebb0 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
1ebc0 72 72 2c 20 22 25 73 3a 25 64 3a 20 65 78 70 65  rr, "%s:%d: expe
1ebd0 63 74 65 64 20 25 64 20 63 6f 6c 75 6d 6e 73 20  cted %d columns 
1ebe0 62 75 74 20 66 6f 75 6e 64 20 25 64 20 2d 20 22  but found %d - "
1ebf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ec00 20 20 20 20 20 20 20 20 20 20 20 22 66 69 6c 6c             "fill
1ec10 69 6e 67 20 74 68 65 20 72 65 73 74 20 77 69 74  ing the rest wit
1ec20 68 20 4e 55 4c 4c 5c 6e 22 2c 0a 20 20 20 20 20  h NULL\n",.     
1ec30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec40 20 20 20 20 20 73 43 74 78 2e 7a 46 69 6c 65 2c       sCtx.zFile,
1ec50 20 73 74 61 72 74 4c 69 6e 65 2c 20 6e 43 6f 6c   startLine, nCol
1ec60 2c 20 69 2b 31 29 3b 0a 20 20 20 20 20 20 20 20  , i+1);.        
1ec70 20 20 69 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20    i += 2;.      
1ec80 20 20 20 20 77 68 69 6c 65 28 20 69 3c 3d 6e 43      while( i<=nC
1ec90 6f 6c 20 29 7b 20 73 71 6c 69 74 65 33 5f 62 69  ol ){ sqlite3_bi
1eca0 6e 64 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69  nd_null(pStmt, i
1ecb0 29 3b 20 69 2b 2b 3b 20 7d 0a 20 20 20 20 20 20  ); i++; }.      
1ecc0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
1ecd0 20 20 69 66 28 20 73 43 74 78 2e 63 54 65 72 6d    if( sCtx.cTerm
1ece0 3d 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70 20 29  ==sCtx.cColSep )
1ecf0 7b 0a 20 20 20 20 20 20 20 20 64 6f 7b 0a 20 20  {.        do{.  
1ed00 20 20 20 20 20 20 20 20 78 52 65 61 64 28 26 73          xRead(&s
1ed10 43 74 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Ctx);.          
1ed20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 77 68  i++;.        }wh
1ed30 69 6c 65 28 20 73 43 74 78 2e 63 54 65 72 6d 3d  ile( sCtx.cTerm=
1ed40 3d 73 43 74 78 2e 63 43 6f 6c 53 65 70 20 29 3b  =sCtx.cColSep );
1ed50 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
1ed60 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73  intf(stderr, "%s
1ed70 3a 25 64 3a 20 65 78 70 65 63 74 65 64 20 25 64  :%d: expected %d
1ed80 20 63 6f 6c 75 6d 6e 73 20 62 75 74 20 66 6f 75   columns but fou
1ed90 6e 64 20 25 64 20 2d 20 22 0a 20 20 20 20 20 20  nd %d - ".      
1eda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edb0 20 20 22 65 78 74 72 61 73 20 69 67 6e 6f 72 65    "extras ignore
1edc0 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  d\n",.          
1edd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 43                sC
1ede0 74 78 2e 7a 46 69 6c 65 2c 20 73 74 61 72 74 4c  tx.zFile, startL
1edf0 69 6e 65 2c 20 6e 43 6f 6c 2c 20 69 29 3b 0a 20  ine, nCol, i);. 
1ee00 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
1ee10 20 69 3e 3d 6e 43 6f 6c 20 29 7b 0a 20 20 20 20   i>=nCol ){.    
1ee20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70      sqlite3_step
1ee30 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 20  (pStmt);.       
1ee40 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 72 65   rc = sqlite3_re
1ee50 73 65 74 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  set(pStmt);.    
1ee60 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1ee70 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1ee80 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
1ee90 74 64 65 72 72 2c 20 22 25 73 3a 25 64 3a 20 49  tderr, "%s:%d: I
1eea0 4e 53 45 52 54 20 66 61 69 6c 65 64 3a 20 25 73  NSERT failed: %s
1eeb0 5c 6e 22 2c 20 73 43 74 78 2e 7a 46 69 6c 65 2c  \n", sCtx.zFile,
1eec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eed0 20 20 20 20 20 20 20 73 74 61 72 74 4c 69 6e 65         startLine
1eee0 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
1eef0 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20  (p->db));.      
1ef00 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
1ef10 7d 77 68 69 6c 65 28 20 73 43 74 78 2e 63 54 65  }while( sCtx.cTe
1ef20 72 6d 21 3d 45 4f 46 20 29 3b 0a 0a 20 20 20 20  rm!=EOF );..    
1ef30 78 43 6c 6f 73 65 72 28 73 43 74 78 2e 69 6e 29  xCloser(sCtx.in)
1ef40 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72  ;.    sqlite3_fr
1ef50 65 65 28 73 43 74 78 2e 7a 29 3b 0a 20 20 20 20  ee(sCtx.z);.    
1ef60 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
1ef70 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 69 66 28  (pStmt);.    if(
1ef80 20 6e 65 65 64 43 6f 6d 6d 69 74 20 29 20 73 71   needCommit ) sq
1ef90 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
1efa0 2c 20 22 43 4f 4d 4d 49 54 22 2c 20 30 2c 20 30  , "COMMIT", 0, 0
1efb0 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 23  , 0);.  }else..#
1efc0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
1efd0 54 45 53 54 41 42 4c 45 0a 20 20 69 66 28 20 63  TESTABLE.  if( c
1efe0 3d 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d 70  =='i' && strncmp
1eff0 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6d 70 6f  (azArg[0], "impo
1f000 73 74 65 72 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  ster", n)==0 ){.
1f010 20 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a      char *zSql;.
1f020 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 69      char *zColli
1f030 73 74 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69  st = 0;.    sqli
1f040 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
1f050 0a 20 20 20 20 69 6e 74 20 74 6e 75 6d 20 3d 20  .    int tnum = 
1f060 30 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  0;.    int i;.  
1f070 20 20 69 66 28 20 6e 41 72 67 21 3d 33 20 29 7b    if( nArg!=3 ){
1f080 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e  .      utf8_prin
1f090 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
1f0a0 65 3a 20 2e 69 6d 70 6f 73 74 65 72 20 49 4e 44  e: .imposter IND
1f0b0 45 58 20 49 4d 50 4f 53 54 45 52 5c 6e 22 29 3b  EX IMPOSTER\n");
1f0c0 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
1f0d0 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
1f0e0 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
1f0f0 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70   }.    open_db(p
1f100 2c 20 30 29 3b 0a 20 20 20 20 7a 53 71 6c 20 3d  , 0);.    zSql =
1f110 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
1f120 28 22 53 45 4c 45 43 54 20 72 6f 6f 74 70 61 67  ("SELECT rootpag
1f130 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
1f140 73 74 65 72 22 0a 20 20 20 20 20 20 20 20 20 20  ster".          
1f150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f160 20 22 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 25   " WHERE name='%
1f170 71 27 20 41 4e 44 20 74 79 70 65 3d 27 69 6e 64  q' AND type='ind
1f180 65 78 27 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b  ex'", azArg[1]);
1f190 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 70 72 65  .    sqlite3_pre
1f1a0 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a  pare_v2(p->db, z
1f1b0 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c  Sql, -1, &pStmt,
1f1c0 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
1f1d0 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20  _free(zSql);.   
1f1e0 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74 65   if( sqlite3_ste
1f1f0 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45  p(pStmt)==SQLITE
1f200 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20 74 6e  _ROW ){.      tn
1f210 75 6d 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  um = sqlite3_col
1f220 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c 20 30  umn_int(pStmt, 0
1f230 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  );.    }.    sql
1f240 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53  ite3_finalize(pS
1f250 74 6d 74 29 3b 0a 20 20 20 20 69 66 28 20 74 6e  tmt);.    if( tn
1f260 75 6d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75  um==0 ){.      u
1f270 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
1f280 72 2c 20 22 6e 6f 20 73 75 63 68 20 69 6e 64 65  r, "no such inde
1f290 78 3a 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a  x: \"%s\"\n", az
1f2a0 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 72  Arg[1]);.      r
1f2b0 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74  c = 1;.      got
1f2c0 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
1f2d0 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a  xit;.    }.    z
1f2e0 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  Sql = sqlite3_mp
1f2f0 72 69 6e 74 66 28 22 50 52 41 47 4d 41 20 69 6e  rintf("PRAGMA in
1f300 64 65 78 5f 78 69 6e 66 6f 3d 27 25 71 27 22 2c  dex_xinfo='%q'",
1f310 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
1f320 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
1f330 70 61 72 65 5f 76 32 28 70 2d 3e 64 62 2c 20 7a  pare_v2(p->db, z
1f340 53 71 6c 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c  Sql, -1, &pStmt,
1f350 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
1f360 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20  _free(zSql);.   
1f370 20 69 20 3d 20 30 3b 0a 20 20 20 20 77 68 69 6c   i = 0;.    whil
1f380 65 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  e( sqlite3_step(
1f390 70 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52  pStmt)==SQLITE_R
1f3a0 4f 57 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72  OW ){.      char
1f3b0 20 7a 4c 61 62 65 6c 5b 32 30 5d 3b 0a 20 20 20   zLabel[20];.   
1f3c0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
1f3d0 43 6f 6c 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  Col = (const cha
1f3e0 72 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  r*)sqlite3_colum
1f3f0 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 32 29 3b  n_text(pStmt,2);
1f400 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20  .      i++;.    
1f410 20 20 69 66 28 20 7a 43 6f 6c 3d 3d 30 20 29 7b    if( zCol==0 ){
1f420 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
1f430 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28  ite3_column_int(
1f440 70 53 74 6d 74 2c 31 29 3d 3d 2d 31 20 29 7b 0a  pStmt,1)==-1 ){.
1f450 20 20 20 20 20 20 20 20 20 20 7a 43 6f 6c 20 3d            zCol =
1f460 20 22 5f 52 4f 57 49 44 5f 22 3b 0a 20 20 20 20   "_ROWID_";.    
1f470 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1f480 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
1f490 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 4c 61  rintf(sizeof(zLa
1f4a0 62 65 6c 29 2c 7a 4c 61 62 65 6c 2c 22 65 78 70  bel),zLabel,"exp
1f4b0 72 25 64 22 2c 69 29 3b 0a 20 20 20 20 20 20 20  r%d",i);.       
1f4c0 20 20 20 7a 43 6f 6c 20 3d 20 7a 4c 61 62 65 6c     zCol = zLabel
1f4d0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1f4e0 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 7a 43    }.      if( zC
1f4f0 6f 6c 6c 69 73 74 3d 3d 30 20 29 7b 0a 20 20 20  ollist==0 ){.   
1f500 20 20 20 20 20 7a 43 6f 6c 6c 69 73 74 20 3d 20       zCollist = 
1f510 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
1f520 22 5c 22 25 77 5c 22 22 2c 20 7a 43 6f 6c 29 3b  "\"%w\"", zCol);
1f530 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
1f540 20 20 20 20 20 20 7a 43 6f 6c 6c 69 73 74 20 3d        zCollist =
1f550 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
1f560 28 22 25 7a 2c 5c 22 25 77 5c 22 22 2c 20 7a 43  ("%z,\"%w\"", zC
1f570 6f 6c 6c 69 73 74 2c 20 7a 43 6f 6c 29 3b 0a 20  ollist, zCol);. 
1f580 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
1f590 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
1f5a0 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 7a 53  e(pStmt);.    zS
1f5b0 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
1f5c0 69 6e 74 66 28 0a 20 20 20 20 20 20 20 20 20 20  intf(.          
1f5d0 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 5c 22  "CREATE TABLE \"
1f5e0 25 77 5c 22 28 25 73 2c 50 52 49 4d 41 52 59 20  %w\"(%s,PRIMARY 
1f5f0 4b 45 59 28 25 73 29 29 57 49 54 48 4f 55 54 20  KEY(%s))WITHOUT 
1f600 52 4f 57 49 44 22 2c 0a 20 20 20 20 20 20 20 20  ROWID",.        
1f610 20 20 61 7a 41 72 67 5b 32 5d 2c 20 7a 43 6f 6c    azArg[2], zCol
1f620 6c 69 73 74 2c 20 7a 43 6f 6c 6c 69 73 74 29 3b  list, zCollist);
1f630 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
1f640 65 28 7a 43 6f 6c 6c 69 73 74 29 3b 0a 20 20 20  e(zCollist);.   
1f650 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 74 65   rc = sqlite3_te
1f660 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54  st_control(SQLIT
1f670 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d 50 4f 53  E_TESTCTRL_IMPOS
1f680 54 45 52 2c 20 70 2d 3e 64 62 2c 20 22 6d 61 69  TER, p->db, "mai
1f690 6e 22 2c 20 31 2c 20 74 6e 75 6d 29 3b 0a 20 20  n", 1, tnum);.  
1f6a0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1f6b0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20  _OK ){.      rc 
1f6c0 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 70  = sqlite3_exec(p
1f6d0 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 30 2c 20 30  ->db, zSql, 0, 0
1f6e0 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
1f6f0 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
1f700 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c  (SQLITE_TESTCTRL
1f710 5f 49 4d 50 4f 53 54 45 52 2c 20 70 2d 3e 64 62  _IMPOSTER, p->db
1f720 2c 20 22 6d 61 69 6e 22 2c 20 30 2c 20 30 29 3b  , "main", 0, 0);
1f730 0a 20 20 20 20 20 20 69 66 28 20 72 63 20 29 7b  .      if( rc ){
1f740 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
1f750 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
1f760 72 6f 72 20 69 6e 20 5b 25 73 5d 3a 20 25 73 5c  ror in [%s]: %s\
1f770 6e 22 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65  n", zSql, sqlite
1f780 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29  3_errmsg(p->db))
1f790 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
1f7a0 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
1f7b0 74 66 28 73 74 64 6f 75 74 2c 20 22 25 73 3b 5c  tf(stdout, "%s;\
1f7c0 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20  n", zSql);.     
1f7d0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
1f7e0 64 6f 75 74 2c 0a 20 20 20 20 20 20 20 20 20 20  dout,.          
1f7f0 20 22 57 41 52 4e 49 4e 47 3a 20 77 72 69 74 69   "WARNING: writi
1f800 6e 67 20 74 6f 20 61 6e 20 69 6d 70 6f 73 74 65  ng to an imposte
1f810 72 20 74 61 62 6c 65 20 77 69 6c 6c 20 63 6f 72  r table will cor
1f820 72 75 70 74 20 74 68 65 20 69 6e 64 65 78 21 5c  rupt the index!\
1f830 6e 22 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20  n".        );.  
1f840 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
1f850 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
1f860 66 28 73 74 64 65 72 72 2c 20 22 53 51 4c 49 54  f(stderr, "SQLIT
1f870 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d 50 4f 53  E_TESTCTRL_IMPOS
1f880 54 45 52 20 72 65 74 75 72 6e 73 20 25 64 5c 6e  TER returns %d\n
1f890 22 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 72 63  ", rc);.      rc
1f8a0 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 1;.    }.    
1f8b0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71  sqlite3_free(zSq
1f8c0 6c 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64  l);.  }else.#end
1f8d0 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
1f8e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 53 54 5f  QLITE_OMIT_TEST_
1f8f0 43 4f 4e 54 52 4f 4c 29 20 2a 2f 0a 0a 23 69 66  CONTROL) */..#if
1f900 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1f910 45 5f 49 4f 54 52 41 43 45 0a 20 20 69 66 28 20  E_IOTRACE.  if( 
1f920 63 3d 3d 27 69 27 20 26 26 20 73 74 72 6e 63 6d  c=='i' && strncm
1f930 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 69 6f 74  p(azArg[0], "iot
1f940 72 61 63 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  race", n)==0 ){.
1f950 20 20 20 20 53 51 4c 49 54 45 5f 41 50 49 20 65      SQLITE_API e
1f960 78 74 65 72 6e 20 76 6f 69 64 20 28 53 51 4c 49  xtern void (SQLI
1f970 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74 65  TE_CDECL *sqlite
1f980 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20  3IoTrace)(const 
1f990 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 20  char*, ...);.   
1f9a0 20 69 66 28 20 69 6f 74 72 61 63 65 20 26 26 20   if( iotrace && 
1f9b0 69 6f 74 72 61 63 65 21 3d 73 74 64 6f 75 74 20  iotrace!=stdout 
1f9c0 29 20 66 63 6c 6f 73 65 28 69 6f 74 72 61 63 65  ) fclose(iotrace
1f9d0 29 3b 0a 20 20 20 20 69 6f 74 72 61 63 65 20 3d  );.    iotrace =
1f9e0 20 30 3b 0a 20 20 20 20 69 66 28 20 6e 41 72 67   0;.    if( nArg
1f9f0 3c 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  <2 ){.      sqli
1fa00 74 65 33 49 6f 54 72 61 63 65 20 3d 20 30 3b 0a  te3IoTrace = 0;.
1fa10 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
1fa20 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 20 22  rcmp(azArg[1], "
1fa30 2d 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  -")==0 ){.      
1fa40 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 3d  sqlite3IoTrace =
1fa50 20 69 6f 74 72 61 63 65 50 72 69 6e 74 66 3b 0a   iotracePrintf;.
1fa60 20 20 20 20 20 20 69 6f 74 72 61 63 65 20 3d 20        iotrace = 
1fa70 73 74 64 6f 75 74 3b 0a 20 20 20 20 7d 65 6c 73  stdout;.    }els
1fa80 65 7b 0a 20 20 20 20 20 20 69 6f 74 72 61 63 65  e{.      iotrace
1fa90 20 3d 20 66 6f 70 65 6e 28 61 7a 41 72 67 5b 31   = fopen(azArg[1
1faa0 5d 2c 20 22 77 22 29 3b 0a 20 20 20 20 20 20 69  ], "w");.      i
1fab0 66 28 20 69 6f 74 72 61 63 65 3d 3d 30 20 29 7b  f( iotrace==0 ){
1fac0 0a 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72  .        utf8_pr
1fad0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
1fae0 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e  ror: cannot open
1faf0 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61 7a 41 72   \"%s\"\n", azAr
1fb00 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 73  g[1]);.        s
1fb10 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 3d 20  qlite3IoTrace = 
1fb20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  0;.        rc = 
1fb30 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  1;.      }else{.
1fb40 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 49          sqlite3I
1fb50 6f 54 72 61 63 65 20 3d 20 69 6f 74 72 61 63 65  oTrace = iotrace
1fb60 50 72 69 6e 74 66 3b 0a 20 20 20 20 20 20 7d 0a  Printf;.      }.
1fb70 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65      }.  }else.#e
1fb80 6e 64 69 66 0a 0a 20 20 69 66 28 20 63 3d 3d 27  ndif..  if( c=='
1fb90 6c 27 20 26 26 20 6e 3e 3d 35 20 26 26 20 73 74  l' && n>=5 && st
1fba0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
1fbb0 22 6c 69 6d 69 74 73 22 2c 20 6e 29 3d 3d 30 20  "limits", n)==0 
1fbc0 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
1fbd0 6e 73 74 20 73 74 72 75 63 74 20 7b 0a 20 20 20  nst struct {.   
1fbe0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1fbf0 7a 4c 69 6d 69 74 4e 61 6d 65 3b 20 20 20 2f 2a  zLimitName;   /*
1fc00 20 4e 61 6d 65 20 6f 66 20 61 20 6c 69 6d 69 74   Name of a limit
1fc10 20 2a 2f 0a 20 20 20 20 20 20 20 69 6e 74 20 6c   */.       int l
1fc20 69 6d 69 74 43 6f 64 65 3b 20 20 20 20 20 20 20  imitCode;       
1fc30 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
1fc40 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6c 69  code for that li
1fc50 6d 69 74 20 2a 2f 0a 20 20 20 20 7d 20 61 4c 69  mit */.    } aLi
1fc60 6d 69 74 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  mit[] = {.      
1fc70 7b 20 22 6c 65 6e 67 74 68 22 2c 20 20 20 20 20  { "length",     
1fc80 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
1fc90 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 20 20  E_LIMIT_LENGTH  
1fca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fcb0 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 73 71    },.      { "sq
1fcc0 6c 5f 6c 65 6e 67 74 68 22 2c 20 20 20 20 20 20  l_length",      
1fcd0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d        SQLITE_LIM
1fce0 49 54 5f 53 51 4c 5f 4c 45 4e 47 54 48 20 20 20  IT_SQL_LENGTH   
1fcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
1fd00 20 20 20 20 20 20 7b 20 22 63 6f 6c 75 6d 6e 22        { "column"
1fd10 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1fd20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f   SQLITE_LIMIT_CO
1fd30 4c 55 4d 4e 20 20 20 20 20 20 20 20 20 20 20 20  LUMN            
1fd40 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
1fd50 20 7b 20 22 65 78 70 72 5f 64 65 70 74 68 22 2c   { "expr_depth",
1fd60 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
1fd70 54 45 5f 4c 49 4d 49 54 5f 45 58 50 52 5f 44 45  TE_LIMIT_EXPR_DE
1fd80 50 54 48 20 20 20 20 20 20 20 20 20 20 20 20 20  PTH             
1fd90 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 63     },.      { "c
1fda0 6f 6d 70 6f 75 6e 64 5f 73 65 6c 65 63 74 22 2c  ompound_select",
1fdb0 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49         SQLITE_LI
1fdc0 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c  MIT_COMPOUND_SEL
1fdd0 45 43 54 20 20 20 20 20 20 20 20 20 20 20 7d 2c  ECT           },
1fde0 0a 20 20 20 20 20 20 7b 20 22 76 64 62 65 5f 6f  .      { "vdbe_o
1fdf0 70 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  p",             
1fe00 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56    SQLITE_LIMIT_V
1fe10 44 42 45 5f 4f 50 20 20 20 20 20 20 20 20 20 20  DBE_OP          
1fe20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
1fe30 20 20 7b 20 22 66 75 6e 63 74 69 6f 6e 5f 61 72    { "function_ar
1fe40 67 22 2c 20 20 20 20 20 20 20 20 20 20 53 51 4c  g",          SQL
1fe50 49 54 45 5f 4c 49 4d 49 54 5f 46 55 4e 43 54 49  ITE_LIMIT_FUNCTI
1fe60 4f 4e 5f 41 52 47 20 20 20 20 20 20 20 20 20 20  ON_ARG          
1fe70 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
1fe80 61 74 74 61 63 68 65 64 22 2c 20 20 20 20 20 20  attached",      
1fe90 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c          SQLITE_L
1fea0 49 4d 49 54 5f 41 54 54 41 43 48 45 44 20 20 20  IMIT_ATTACHED   
1feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1fec0 2c 0a 20 20 20 20 20 20 7b 20 22 6c 69 6b 65 5f  ,.      { "like_
1fed0 70 61 74 74 65 72 6e 5f 6c 65 6e 67 74 68 22 2c  pattern_length",
1fee0 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f     SQLITE_LIMIT_
1fef0 4c 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e  LIKE_PATTERN_LEN
1ff00 47 54 48 20 20 20 20 20 20 20 7d 2c 0a 20 20 20  GTH       },.   
1ff10 20 20 20 7b 20 22 76 61 72 69 61 62 6c 65 5f 6e     { "variable_n
1ff20 75 6d 62 65 72 22 2c 20 20 20 20 20 20 20 53 51  umber",       SQ
1ff30 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52 49 41  LITE_LIMIT_VARIA
1ff40 42 4c 45 5f 4e 55 4d 42 45 52 20 20 20 20 20 20  BLE_NUMBER      
1ff50 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
1ff60 22 74 72 69 67 67 65 72 5f 64 65 70 74 68 22 2c  "trigger_depth",
1ff70 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
1ff80 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45  LIMIT_TRIGGER_DE
1ff90 50 54 48 20 20 20 20 20 20 20 20 20 20 20 20 20  PTH             
1ffa0 7d 2c 0a 20 20 20 20 20 20 7b 20 22 77 6f 72 6b  },.      { "work
1ffb0 65 72 5f 74 68 72 65 61 64 73 22 2c 20 20 20 20  er_threads",    
1ffc0 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54      SQLITE_LIMIT
1ffd0 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20  _WORKER_THREADS 
1ffe0 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
1fff0 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 2c 20    };.    int i, 
20000 6e 32 3b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28  n2;.    open_db(
20010 70 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 6e  p, 0);.    if( n
20020 41 72 67 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20  Arg==1 ){.      
20030 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79  for(i=0; i<Array
20040 53 69 7a 65 28 61 4c 69 6d 69 74 29 3b 20 69 2b  Size(aLimit); i+
20050 2b 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e  +){.        prin
20060 74 66 28 22 25 32 30 73 20 25 64 5c 6e 22 2c 20  tf("%20s %d\n", 
20070 61 4c 69 6d 69 74 5b 69 5d 2e 7a 4c 69 6d 69 74  aLimit[i].zLimit
20080 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
20090 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d       sqlite3_lim
200a0 69 74 28 70 2d 3e 64 62 2c 20 61 4c 69 6d 69 74  it(p->db, aLimit
200b0 5b 69 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c 20 2d  [i].limitCode, -
200c0 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  1));.      }.   
200d0 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67 3e   }else if( nArg>
200e0 33 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  3 ){.      raw_p
200f0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
20100 73 61 67 65 3a 20 2e 6c 69 6d 69 74 20 4e 41 4d  sage: .limit NAM
20110 45 20 3f 4e 45 57 2d 56 41 4c 55 45 3f 5c 6e 22  E ?NEW-VALUE?\n"
20120 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
20130 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61  .      goto meta
20140 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
20150 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
20160 69 6e 74 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b  int iLimit = -1;
20170 0a 20 20 20 20 20 20 6e 32 20 3d 20 73 74 72 6c  .      n2 = strl
20180 65 6e 33 30 28 61 7a 41 72 67 5b 31 5d 29 3b 0a  en30(azArg[1]);.
20190 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
201a0 3c 41 72 72 61 79 53 69 7a 65 28 61 4c 69 6d 69  <ArraySize(aLimi
201b0 74 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  t); i++){.      
201c0 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 73 74    if( sqlite3_st
201d0 72 6e 69 63 6d 70 28 61 4c 69 6d 69 74 5b 69 5d  rnicmp(aLimit[i]
201e0 2e 7a 4c 69 6d 69 74 4e 61 6d 65 2c 20 61 7a 41  .zLimitName, azA
201f0 72 67 5b 31 5d 2c 20 6e 32 29 3d 3d 30 20 29 7b  rg[1], n2)==0 ){
20200 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69  .          if( i
20210 4c 69 6d 69 74 3c 30 20 29 7b 0a 20 20 20 20 20  Limit<0 ){.     
20220 20 20 20 20 20 20 20 69 4c 69 6d 69 74 20 3d 20         iLimit = 
20230 69 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  i;.          }el
20240 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
20250 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
20260 72 72 2c 20 22 61 6d 62 69 67 75 6f 75 73 20 6c  rr, "ambiguous l
20270 69 6d 69 74 3a 20 5c 22 25 73 5c 22 5c 6e 22 2c  imit: \"%s\"\n",
20280 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
20290 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
202a0 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f              goto
202b0 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
202c0 69 74 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  it;.          }.
202d0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
202e0 7d 0a 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d  }.      if( iLim
202f0 69 74 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20  it<0 ){.        
20300 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
20310 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6c 69 6d  rr, "unknown lim
20320 69 74 3a 20 5c 22 25 73 5c 22 5c 6e 22 0a 20 20  it: \"%s\"\n".  
20330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20340 20 20 20 20 20 20 22 65 6e 74 65 72 20 5c 22 2e        "enter \".
20350 6c 69 6d 69 74 73 5c 22 20 77 69 74 68 20 6e 6f  limits\" with no
20360 20 61 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 61   arguments for a
20370 20 6c 69 73 74 2e 5c 6e 22 2c 0a 20 20 20 20 20   list.\n",.     
20380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20390 20 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20      azArg[1]);. 
203a0 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20         rc = 1;. 
203b0 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
203c0 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
203d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
203e0 20 6e 41 72 67 3d 3d 33 20 29 7b 0a 20 20 20 20   nArg==3 ){.    
203f0 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69      sqlite3_limi
20400 74 28 70 2d 3e 64 62 2c 20 61 4c 69 6d 69 74 5b  t(p->db, aLimit[
20410 69 4c 69 6d 69 74 5d 2e 6c 69 6d 69 74 43 6f 64  iLimit].limitCod
20420 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
20430 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 69 6e           (int)in
20440 74 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72 67  tegerValue(azArg
20450 5b 32 5d 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20  [2]));.      }. 
20460 20 20 20 20 20 70 72 69 6e 74 66 28 22 25 32 30       printf("%20
20470 73 20 25 64 5c 6e 22 2c 20 61 4c 69 6d 69 74 5b  s %d\n", aLimit[
20480 69 4c 69 6d 69 74 5d 2e 7a 4c 69 6d 69 74 4e 61  iLimit].zLimitNa
20490 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  me,.            
204a0 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 70   sqlite3_limit(p
204b0 2d 3e 64 62 2c 20 61 4c 69 6d 69 74 5b 69 4c 69  ->db, aLimit[iLi
204c0 6d 69 74 5d 2e 6c 69 6d 69 74 43 6f 64 65 2c 20  mit].limitCode, 
204d0 2d 31 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  -1));.    }.  }e
204e0 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6c  lse..  if( c=='l
204f0 27 20 26 26 20 6e 3e 32 20 26 26 20 73 74 72 6e  ' && n>2 && strn
20500 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6c  cmp(azArg[0], "l
20510 69 6e 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  int", n)==0 ){. 
20520 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29     open_db(p, 0)
20530 3b 0a 20 20 20 20 6c 69 6e 74 44 6f 74 43 6f 6d  ;.    lintDotCom
20540 6d 61 6e 64 28 70 2c 20 61 7a 41 72 67 2c 20 6e  mand(p, azArg, n
20550 41 72 67 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 23  Arg);.  }else..#
20560 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
20570 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
20580 4e 0a 20 20 69 66 28 20 63 3d 3d 27 6c 27 20 26  N.  if( c=='l' &
20590 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
205a0 30 5d 2c 20 22 6c 6f 61 64 22 2c 20 6e 29 3d 3d  0], "load", n)==
205b0 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  0 ){.    const c
205c0 68 61 72 20 2a 7a 46 69 6c 65 2c 20 2a 7a 50 72  har *zFile, *zPr
205d0 6f 63 3b 0a 20 20 20 20 63 68 61 72 20 2a 7a 45  oc;.    char *zE
205e0 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 69  rrMsg = 0;.    i
205f0 66 28 20 6e 41 72 67 3c 32 20 29 7b 0a 20 20 20  f( nArg<2 ){.   
20600 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
20610 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 6c  derr, "Usage: .l
20620 6f 61 64 20 46 49 4c 45 20 3f 45 4e 54 52 59 50  oad FILE ?ENTRYP
20630 4f 49 4e 54 3f 5c 6e 22 29 3b 0a 20 20 20 20 20  OINT?\n");.     
20640 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67   rc = 1;.      g
20650 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
20660 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20  _exit;.    }.   
20670 20 7a 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b 31   zFile = azArg[1
20680 5d 3b 0a 20 20 20 20 7a 50 72 6f 63 20 3d 20 6e  ];.    zProc = n
20690 41 72 67 3e 3d 33 20 3f 20 61 7a 41 72 67 5b 32  Arg>=3 ? azArg[2
206a0 5d 20 3a 20 30 3b 0a 20 20 20 20 6f 70 65 6e 5f  ] : 0;.    open_
206b0 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 72 63  db(p, 0);.    rc
206c0 20 3d 20 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f   = sqlite3_load_
206d0 65 78 74 65 6e 73 69 6f 6e 28 70 2d 3e 64 62 2c  extension(p->db,
206e0 20 7a 46 69 6c 65 2c 20 7a 50 72 6f 63 2c 20 26   zFile, zProc, &
206f0 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69 66  zErrMsg);.    if
20700 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
20710 29 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  ){.      utf8_pr
20720 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 45 72  intf(stderr, "Er
20730 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72  ror: %s\n", zErr
20740 4d 73 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  Msg);.      sqli
20750 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67  te3_free(zErrMsg
20760 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b  );.      rc = 1;
20770 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23  .    }.  }else.#
20780 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 63 3d 3d  endif..  if( c==
20790 27 6c 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'l' && strncmp(a
207a0 7a 41 72 67 5b 30 5d 2c 20 22 6c 6f 67 22 2c 20  zArg[0], "log", 
207b0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  n)==0 ){.    if(
207c0 20 6e 41 72 67 21 3d 32 20 29 7b 0a 20 20 20 20   nArg!=2 ){.    
207d0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
207e0 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 6c 6f  err, "Usage: .lo
207f0 67 20 46 49 4c 45 4e 41 4d 45 5c 6e 22 29 3b 0a  g FILENAME\n");.
20800 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
20810 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63    }else{.      c
20820 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
20830 20 3d 20 61 7a 41 72 67 5b 31 5d 3b 0a 20 20 20   = azArg[1];.   
20840 20 20 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f 63     output_file_c
20850 6c 6f 73 65 28 70 2d 3e 70 4c 6f 67 29 3b 0a 20  lose(p->pLog);. 
20860 20 20 20 20 20 70 2d 3e 70 4c 6f 67 20 3d 20 6f       p->pLog = o
20870 75 74 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28  utput_file_open(
20880 7a 46 69 6c 65 29 3b 0a 20 20 20 20 7d 0a 20 20  zFile);.    }.  
20890 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
208a0 27 6d 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'm' && strncmp(a
208b0 7a 41 72 67 5b 30 5d 2c 20 22 6d 6f 64 65 22 2c  zArg[0], "mode",
208c0 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f   n)==0 ){.    co
208d0 6e 73 74 20 63 68 61 72 20 2a 7a 4d 6f 64 65 20  nst char *zMode 
208e0 3d 20 6e 41 72 67 3e 3d 32 20 3f 20 61 7a 41 72  = nArg>=2 ? azAr
208f0 67 5b 31 5d 20 3a 20 22 22 3b 0a 20 20 20 20 69  g[1] : "";.    i
20900 6e 74 20 6e 32 20 3d 20 28 69 6e 74 29 73 74 72  nt n2 = (int)str
20910 6c 65 6e 28 7a 4d 6f 64 65 29 3b 0a 20 20 20 20  len(zMode);.    
20920 69 6e 74 20 63 32 20 3d 20 7a 4d 6f 64 65 5b 30  int c2 = zMode[0
20930 5d 3b 0a 20 20 20 20 69 66 28 20 63 32 3d 3d 27  ];.    if( c2=='
20940 6c 27 20 26 26 20 6e 32 3e 32 20 26 26 20 73 74  l' && n2>2 && st
20950 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22  rncmp(azArg[1],"
20960 6c 69 6e 65 73 22 2c 6e 32 29 3d 3d 30 20 29 7b  lines",n2)==0 ){
20970 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d  .      p->mode =
20980 20 4d 4f 44 45 5f 4c 69 6e 65 3b 0a 20 20 20 20   MODE_Line;.    
20990 7d 65 6c 73 65 20 69 66 28 20 63 32 3d 3d 27 63  }else if( c2=='c
209a0 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
209b0 72 67 5b 31 5d 2c 22 63 6f 6c 75 6d 6e 73 22 2c  rg[1],"columns",
209c0 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  n2)==0 ){.      
209d0 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 43  p->mode = MODE_C
209e0 6f 6c 75 6d 6e 3b 0a 20 20 20 20 7d 65 6c 73 65  olumn;.    }else
209f0 20 69 66 28 20 63 32 3d 3d 27 6c 27 20 26 26 20   if( c2=='l' && 
20a00 6e 32 3e 32 20 26 26 20 73 74 72 6e 63 6d 70 28  n2>2 && strncmp(
20a10 61 7a 41 72 67 5b 31 5d 2c 22 6c 69 73 74 22 2c  azArg[1],"list",
20a20 6e 32 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  n2)==0 ){.      
20a30 70 2d 3e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c  p->mode = MODE_L
20a40 69 73 74 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ist;.    }else i
20a50 66 28 20 63 32 3d 3d 27 68 27 20 26 26 20 73 74  f( c2=='h' && st
20a60 72 6e 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22  rncmp(azArg[1],"
20a70 68 74 6d 6c 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a  html",n2)==0 ){.
20a80 20 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20        p->mode = 
20a90 4d 4f 44 45 5f 48 74 6d 6c 3b 0a 20 20 20 20 7d  MODE_Html;.    }
20aa0 65 6c 73 65 20 69 66 28 20 63 32 3d 3d 27 74 27  else if( c2=='t'
20ab0 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
20ac0 67 5b 31 5d 2c 22 74 63 6c 22 2c 6e 32 29 3d 3d  g[1],"tcl",n2)==
20ad0 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f  0 ){.      p->mo
20ae0 64 65 20 3d 20 4d 4f 44 45 5f 54 63 6c 3b 0a 20  de = MODE_Tcl;. 
20af0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
20b00 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e  rintf(sizeof(p->
20b10 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c 20 70  colSeparator), p
20b20 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c 20  ->colSeparator, 
20b30 53 45 50 5f 53 70 61 63 65 29 3b 0a 20 20 20 20  SEP_Space);.    
20b40 7d 65 6c 73 65 20 69 66 28 20 63 32 3d 3d 27 63  }else if( c2=='c
20b50 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
20b60 72 67 5b 31 5d 2c 22 63 73 76 22 2c 6e 32 29 3d  rg[1],"csv",n2)=
20b70 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d  =0 ){.      p->m
20b80 6f 64 65 20 3d 20 4d 4f 44 45 5f 43 73 76 3b 0a  ode = MODE_Csv;.
20b90 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
20ba0 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d  printf(sizeof(p-
20bb0 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c 20  >colSeparator), 
20bc0 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c  p->colSeparator,
20bd0 20 53 45 50 5f 43 6f 6d 6d 61 29 3b 0a 20 20 20   SEP_Comma);.   
20be0 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
20bf0 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e 72 6f  ntf(sizeof(p->ro
20c00 77 53 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e  wSeparator), p->
20c10 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 20 53 45  rowSeparator, SE
20c20 50 5f 43 72 4c 66 29 3b 0a 20 20 20 20 7d 65 6c  P_CrLf);.    }el
20c30 73 65 20 69 66 28 20 63 32 3d 3d 27 74 27 20 26  se if( c2=='t' &
20c40 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
20c50 31 5d 2c 22 74 61 62 73 22 2c 6e 32 29 3d 3d 30  1],"tabs",n2)==0
20c60 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 6f 64   ){.      p->mod
20c70 65 20 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a 20  e = MODE_List;. 
20c80 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
20c90 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e  rintf(sizeof(p->
20ca0 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c 20 70  colSeparator), p
20cb0 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 2c 20  ->colSeparator, 
20cc0 53 45 50 5f 54 61 62 29 3b 0a 20 20 20 20 7d 65  SEP_Tab);.    }e
20cd0 6c 73 65 20 69 66 28 20 63 32 3d 3d 27 69 27 20  lse if( c2=='i' 
20ce0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
20cf0 5b 31 5d 2c 22 69 6e 73 65 72 74 22 2c 6e 32 29  [1],"insert",n2)
20d00 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  ==0 ){.      p->
20d10 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 49 6e 73 65  mode = MODE_Inse
20d20 72 74 3b 0a 20 20 20 20 20 20 73 65 74 5f 74 61  rt;.      set_ta
20d30 62 6c 65 5f 6e 61 6d 65 28 70 2c 20 6e 41 72 67  ble_name(p, nArg
20d40 3e 3d 33 20 3f 20 61 7a 41 72 67 5b 32 5d 20 3a  >=3 ? azArg[2] :
20d50 20 22 74 61 62 6c 65 22 29 3b 0a 20 20 20 20 7d   "table");.    }
20d60 65 6c 73 65 20 69 66 28 20 63 32 3d 3d 27 71 27  else if( c2=='q'
20d70 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
20d80 67 5b 31 5d 2c 22 71 75 6f 74 65 22 2c 6e 32 29  g[1],"quote",n2)
20d90 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  ==0 ){.      p->
20da0 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 51 75 6f 74  mode = MODE_Quot
20db0 65 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  e;.    }else if(
20dc0 20 63 32 3d 3d 27 61 27 20 26 26 20 73 74 72 6e   c2=='a' && strn
20dd0 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 61 73  cmp(azArg[1],"as
20de0 63 69 69 22 2c 6e 32 29 3d 3d 30 20 29 7b 0a 20  cii",n2)==0 ){. 
20df0 20 20 20 20 20 70 2d 3e 6d 6f 64 65 20 3d 20 4d       p->mode = M
20e00 4f 44 45 5f 41 73 63 69 69 3b 0a 20 20 20 20 20  ODE_Ascii;.     
20e10 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
20e20 66 28 73 69 7a 65 6f 66 28 70 2d 3e 63 6f 6c 53  f(sizeof(p->colS
20e30 65 70 61 72 61 74 6f 72 29 2c 20 70 2d 3e 63 6f  eparator), p->co
20e40 6c 53 65 70 61 72 61 74 6f 72 2c 20 53 45 50 5f  lSeparator, SEP_
20e50 55 6e 69 74 29 3b 0a 20 20 20 20 20 20 73 71 6c  Unit);.      sql
20e60 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
20e70 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61 72  zeof(p->rowSepar
20e80 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65 70  ator), p->rowSep
20e90 61 72 61 74 6f 72 2c 20 53 45 50 5f 52 65 63 6f  arator, SEP_Reco
20ea0 72 64 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 7b  rd);.    }else {
20eb0 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
20ec0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
20ed0 3a 20 6d 6f 64 65 20 73 68 6f 75 6c 64 20 62 65  : mode should be
20ee0 20 6f 6e 65 20 6f 66 3a 20 22 0a 20 20 20 20 20   one of: ".     
20ef0 20 20 20 20 22 61 73 63 69 69 20 63 6f 6c 75 6d      "ascii colum
20f00 6e 20 63 73 76 20 68 74 6d 6c 20 69 6e 73 65 72  n csv html inser
20f10 74 20 6c 69 6e 65 20 6c 69 73 74 20 71 75 6f 74  t line list quot
20f20 65 20 74 61 62 73 20 74 63 6c 5c 6e 22 29 3b 0a  e tabs tcl\n");.
20f30 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
20f40 20 20 7d 0a 20 20 20 20 70 2d 3e 63 4d 6f 64 65    }.    p->cMode
20f50 20 3d 20 70 2d 3e 6d 6f 64 65 3b 0a 20 20 7d 65   = p->mode;.  }e
20f60 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6e  lse..  if( c=='n
20f70 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
20f80 72 67 5b 30 5d 2c 20 22 6e 75 6c 6c 76 61 6c 75  rg[0], "nullvalu
20f90 65 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  e", n)==0 ){.   
20fa0 20 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a   if( nArg==2 ){.
20fb0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
20fc0 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d  printf(sizeof(p-
20fd0 3e 6e 75 6c 6c 56 61 6c 75 65 29 2c 20 70 2d 3e  >nullValue), p->
20fe0 6e 75 6c 6c 56 61 6c 75 65 2c 0a 20 20 20 20 20  nullValue,.     
20ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21000 20 20 22 25 2e 2a 73 22 2c 20 28 69 6e 74 29 41    "%.*s", (int)A
21010 72 72 61 79 53 69 7a 65 28 70 2d 3e 6e 75 6c 6c  rraySize(p->null
21020 56 61 6c 75 65 29 2d 31 2c 20 61 7a 41 72 67 5b  Value)-1, azArg[
21030 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  1]);.    }else{.
21040 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
21050 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
21060 20 2e 6e 75 6c 6c 76 61 6c 75 65 20 53 54 52 49   .nullvalue STRI
21070 4e 47 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63  NG\n");.      rc
21080 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   = 1;.    }.  }e
21090 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 6f  lse..  if( c=='o
210a0 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  ' && strncmp(azA
210b0 72 67 5b 30 5d 2c 20 22 6f 70 65 6e 22 2c 20 6e  rg[0], "open", n
210c0 29 3d 3d 30 20 26 26 20 6e 3e 3d 32 20 29 7b 0a  )==0 && n>=2 ){.
210d0 20 20 20 20 63 68 61 72 20 2a 7a 4e 65 77 46 69      char *zNewFi
210e0 6c 65 6e 61 6d 65 3b 20 20 2f 2a 20 4e 61 6d 65  lename;  /* Name
210f0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
21100 20 66 69 6c 65 20 74 6f 20 6f 70 65 6e 20 2a 2f   file to open */
21110 0a 20 20 20 20 69 6e 74 20 69 4e 61 6d 65 20 3d  .    int iName =
21120 20 31 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 64   1;       /* Ind
21130 65 78 20 69 6e 20 61 7a 41 72 67 5b 5d 20 6f 66  ex in azArg[] of
21140 20 74 68 65 20 66 69 6c 65 6e 61 6d 65 20 2a 2f   the filename */
21150 0a 20 20 20 20 69 6e 74 20 6e 65 77 46 6c 61 67  .    int newFlag
21160 20 3d 20 30 3b 20 20 20 20 20 2f 2a 20 54 72 75   = 0;     /* Tru
21170 65 20 74 6f 20 64 65 6c 65 74 65 20 66 69 6c 65  e to delete file
21180 20 62 65 66 6f 72 65 20 6f 70 65 6e 69 6e 67 20   before opening 
21190 2a 2f 0a 20 20 20 20 2f 2a 20 43 6c 6f 73 65 20  */.    /* Close 
211a0 74 68 65 20 65 78 69 73 74 69 6e 67 20 64 61 74  the existing dat
211b0 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 73 65 73  abase */.    ses
211c0 73 69 6f 6e 5f 63 6c 6f 73 65 5f 61 6c 6c 28 70  sion_close_all(p
211d0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63  );.    sqlite3_c
211e0 6c 6f 73 65 28 70 2d 3e 64 62 29 3b 0a 20 20 20  lose(p->db);.   
211f0 20 70 2d 3e 64 62 20 3d 20 30 3b 0a 20 20 20 20   p->db = 0;.    
21200 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 2d 3e  sqlite3_free(p->
21210 7a 46 72 65 65 4f 6e 43 6c 6f 73 65 29 3b 0a 20  zFreeOnClose);. 
21220 20 20 20 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f     p->zFreeOnClo
21230 73 65 20 3d 20 30 3b 0a 20 20 20 20 2f 2a 20 43  se = 0;.    /* C
21240 68 65 63 6b 20 66 6f 72 20 63 6f 6d 6d 61 6e 64  heck for command
21250 2d 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 20  -line arguments 
21260 2a 2f 0a 20 20 20 20 66 6f 72 28 69 4e 61 6d 65  */.    for(iName
21270 3d 31 3b 20 69 4e 61 6d 65 3c 6e 41 72 67 20 26  =1; iName<nArg &
21280 26 20 61 7a 41 72 67 5b 69 4e 61 6d 65 5d 5b 30  & azArg[iName][0
21290 5d 3d 3d 27 2d 27 3b 20 69 4e 61 6d 65 2b 2b 29  ]=='-'; iName++)
212a0 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
212b0 61 72 20 2a 7a 20 3d 20 61 7a 41 72 67 5b 69 4e  ar *z = azArg[iN
212c0 61 6d 65 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  ame];.      if( 
212d0 6f 70 74 69 6f 6e 4d 61 74 63 68 28 7a 2c 22 6e  optionMatch(z,"n
212e0 65 77 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ew") ){.        
212f0 6e 65 77 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20  newFlag = 1;.   
21300 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b 30     }else if( z[0
21310 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20 20 20  ]=='-' ){.      
21320 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
21330 64 65 72 72 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6f  derr, "unknown o
21340 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 7a 29  ption: %s\n", z)
21350 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31  ;.        rc = 1
21360 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d  ;.        goto m
21370 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
21380 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
21390 20 20 20 20 2f 2a 20 49 66 20 61 20 66 69 6c 65      /* If a file
213a0 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65  name is specifie
213b0 64 2c 20 74 72 79 20 74 6f 20 6f 70 65 6e 20 69  d, try to open i
213c0 74 20 66 69 72 73 74 20 2a 2f 0a 20 20 20 20 7a  t first */.    z
213d0 4e 65 77 46 69 6c 65 6e 61 6d 65 20 3d 20 6e 41  NewFilename = nA
213e0 72 67 3e 69 4e 61 6d 65 20 3f 20 73 71 6c 69 74  rg>iName ? sqlit
213f0 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c  e3_mprintf("%s",
21400 20 61 7a 41 72 67 5b 69 4e 61 6d 65 5d 29 20 3a   azArg[iName]) :
21410 20 30 3b 0a 20 20 20 20 69 66 28 20 7a 4e 65 77   0;.    if( zNew
21420 46 69 6c 65 6e 61 6d 65 20 29 7b 0a 20 20 20 20  Filename ){.    
21430 20 20 69 66 28 20 6e 65 77 46 6c 61 67 20 29 20    if( newFlag ) 
21440 73 68 65 6c 6c 44 65 6c 65 74 65 46 69 6c 65 28  shellDeleteFile(
21450 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 29 3b 0a 20  zNewFilename);. 
21460 20 20 20 20 20 70 2d 3e 7a 44 62 46 69 6c 65 6e       p->zDbFilen
21470 61 6d 65 20 3d 20 7a 4e 65 77 46 69 6c 65 6e 61  ame = zNewFilena
21480 6d 65 3b 0a 20 20 20 20 20 20 6f 70 65 6e 5f 64  me;.      open_d
21490 62 28 70 2c 20 31 29 3b 0a 20 20 20 20 20 20 69  b(p, 1);.      i
214a0 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29 7b 0a 20  f( p->db==0 ){. 
214b0 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
214c0 74 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f  tf(stderr, "Erro
214d0 72 3a 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 27  r: cannot open '
214e0 25 73 27 5c 6e 22 2c 20 7a 4e 65 77 46 69 6c 65  %s'\n", zNewFile
214f0 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 73  name);.        s
21500 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 4e 65 77  qlite3_free(zNew
21510 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 20 20 20  Filename);.     
21520 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
21530 70 2d 3e 7a 46 72 65 65 4f 6e 43 6c 6f 73 65 20  p->zFreeOnClose 
21540 3d 20 7a 4e 65 77 46 69 6c 65 6e 61 6d 65 3b 0a  = zNewFilename;.
21550 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
21560 20 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29    if( p->db==0 )
21570 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 20 61 20  {.      /* As a 
21580 66 61 6c 6c 2d 62 61 63 6b 20 6f 70 65 6e 20 61  fall-back open a
21590 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 20 2a   TEMP database *
215a0 2f 0a 20 20 20 20 20 20 70 2d 3e 7a 44 62 46 69  /.      p->zDbFi
215b0 6c 65 6e 61 6d 65 20 3d 20 30 3b 0a 20 20 20 20  lename = 0;.    
215c0 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30 29 3b    open_db(p, 0);
215d0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
215e0 20 20 69 66 28 20 63 3d 3d 27 6f 27 0a 20 20 20    if( c=='o'.   
215f0 26 26 20 28 73 74 72 6e 63 6d 70 28 61 7a 41 72  && (strncmp(azAr
21600 67 5b 30 5d 2c 20 22 6f 75 74 70 75 74 22 2c 20  g[0], "output", 
21610 6e 29 3d 3d 30 20 7c 7c 20 73 74 72 6e 63 6d 70  n)==0 || strncmp
21620 28 61 7a 41 72 67 5b 30 5d 2c 20 22 6f 6e 63 65  (azArg[0], "once
21630 22 2c 20 6e 29 3d 3d 30 29 0a 20 20 29 7b 0a 20  ", n)==0).  ){. 
21640 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
21650 46 69 6c 65 20 3d 20 6e 41 72 67 3e 3d 32 20 3f  File = nArg>=2 ?
21660 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 73 74 64   azArg[1] : "std
21670 6f 75 74 22 3b 0a 20 20 20 20 69 66 28 20 6e 41  out";.    if( nA
21680 72 67 3e 32 20 29 7b 0a 20 20 20 20 20 20 75 74  rg>2 ){.      ut
21690 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
216a0 2c 20 22 55 73 61 67 65 3a 20 2e 25 73 20 46 49  , "Usage: .%s FI
216b0 4c 45 5c 6e 22 2c 20 61 7a 41 72 67 5b 30 5d 29  LE\n", azArg[0])
216c0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
216d0 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
216e0 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
216f0 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 3e 31 20    }.    if( n>1 
21700 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
21710 5b 30 5d 2c 20 22 6f 6e 63 65 22 2c 20 6e 29 3d  [0], "once", n)=
21720 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  =0 ){.      if( 
21730 6e 41 72 67 3c 32 20 29 7b 0a 20 20 20 20 20 20  nArg<2 ){.      
21740 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
21750 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 6f 6e  err, "Usage: .on
21760 63 65 20 46 49 4c 45 5c 6e 22 29 3b 0a 20 20 20  ce FILE\n");.   
21770 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
21780 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
21790 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
217a0 20 20 20 7d 0a 20 20 20 20 20 20 70 2d 3e 6f 75     }.      p->ou
217b0 74 43 6f 75 6e 74 20 3d 20 32 3b 0a 20 20 20 20  tCount = 2;.    
217c0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e  }else{.      p->
217d0 6f 75 74 43 6f 75 6e 74 20 3d 20 30 3b 0a 20 20  outCount = 0;.  
217e0 20 20 7d 0a 20 20 20 20 6f 75 74 70 75 74 5f 72    }.    output_r
217f0 65 73 65 74 28 70 29 3b 0a 20 20 20 20 69 66 28  eset(p);.    if(
21800 20 7a 46 69 6c 65 5b 30 5d 3d 3d 27 7c 27 20 29   zFile[0]=='|' )
21810 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
21820 4f 4d 49 54 5f 50 4f 50 45 4e 0a 20 20 20 20 20  OMIT_POPEN.     
21830 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
21840 72 72 2c 20 22 45 72 72 6f 72 3a 20 70 69 70 65  rr, "Error: pipe
21850 73 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72  s are not suppor
21860 74 65 64 20 69 6e 20 74 68 69 73 20 4f 53 5c 6e  ted in this OS\n
21870 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31  ");.      rc = 1
21880 3b 0a 20 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d  ;.      p->out =
21890 20 73 74 64 6f 75 74 3b 0a 23 65 6c 73 65 0a 20   stdout;.#else. 
218a0 20 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 70 6f       p->out = po
218b0 70 65 6e 28 7a 46 69 6c 65 20 2b 20 31 2c 20 22  pen(zFile + 1, "
218c0 77 22 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  w");.      if( p
218d0 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ->out==0 ){.    
218e0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
218f0 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 63  stderr,"Error: c
21900 61 6e 6e 6f 74 20 6f 70 65 6e 20 70 69 70 65 20  annot open pipe 
21910 5c 22 25 73 5c 22 5c 6e 22 2c 20 7a 46 69 6c 65  \"%s\"\n", zFile
21920 20 2b 20 31 29 3b 0a 20 20 20 20 20 20 20 20 70   + 1);.        p
21930 2d 3e 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a  ->out = stdout;.
21940 20 20 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a          rc = 1;.
21950 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
21960 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
21970 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e  rintf(sizeof(p->
21980 6f 75 74 66 69 6c 65 29 2c 20 70 2d 3e 6f 75 74  outfile), p->out
21990 66 69 6c 65 2c 20 22 25 73 22 2c 20 7a 46 69 6c  file, "%s", zFil
219a0 65 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64  e);.      }.#end
219b0 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  if.    }else{.  
219c0 20 20 20 20 70 2d 3e 6f 75 74 20 3d 20 6f 75 74      p->out = out
219d0 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 7a 46  put_file_open(zF
219e0 69 6c 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ile);.      if( 
219f0 70 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20  p->out==0 ){.   
21a00 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28       if( strcmp(
21a10 7a 46 69 6c 65 2c 22 6f 66 66 22 29 21 3d 30 20  zFile,"off")!=0 
21a20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66  ){.          utf
21a30 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
21a40 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 77  "Error: cannot w
21a50 72 69 74 65 20 74 6f 20 5c 22 25 73 5c 22 5c 6e  rite to \"%s\"\n
21a60 22 2c 20 7a 46 69 6c 65 29 3b 0a 20 20 20 20 20  ", zFile);.     
21a70 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 2d 3e     }.        p->
21a80 6f 75 74 20 3d 20 73 74 64 6f 75 74 3b 0a 20 20  out = stdout;.  
21a90 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
21aa0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
21ab0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
21ac0 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70 2d 3e  rintf(sizeof(p->
21ad0 6f 75 74 66 69 6c 65 29 2c 20 70 2d 3e 6f 75 74  outfile), p->out
21ae0 66 69 6c 65 2c 20 22 25 73 22 2c 20 7a 46 69 6c  file, "%s", zFil
21af0 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
21b00 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
21b10 20 63 3d 3d 27 70 27 20 26 26 20 6e 3e 3d 33 20   c=='p' && n>=3 
21b20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
21b30 5b 30 5d 2c 20 22 70 72 69 6e 74 22 2c 20 6e 29  [0], "print", n)
21b40 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  ==0 ){.    int i
21b50 3b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b 20 69  ;.    for(i=1; i
21b60 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
21b70 20 20 20 69 66 28 20 69 3e 31 20 29 20 72 61 77     if( i>1 ) raw
21b80 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
21b90 22 20 22 29 3b 0a 20 20 20 20 20 20 75 74 66 38  " ");.      utf8
21ba0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
21bb0 22 25 73 22 2c 20 61 7a 41 72 67 5b 69 5d 29 3b  "%s", azArg[i]);
21bc0 0a 20 20 20 20 7d 0a 20 20 20 20 72 61 77 5f 70  .    }.    raw_p
21bd0 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c  rintf(p->out, "\
21be0 6e 22 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20  n");.  }else..  
21bf0 69 66 28 20 63 3d 3d 27 70 27 20 26 26 20 73 74  if( c=='p' && st
21c00 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20  rncmp(azArg[0], 
21c10 22 70 72 6f 6d 70 74 22 2c 20 6e 29 3d 3d 30 20  "prompt", n)==0 
21c20 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 20  ){.    if( nArg 
21c30 3e 3d 20 32 29 20 7b 0a 20 20 20 20 20 20 73 74  >= 2) {.      st
21c40 72 6e 63 70 79 28 6d 61 69 6e 50 72 6f 6d 70 74  rncpy(mainPrompt
21c50 2c 61 7a 41 72 67 5b 31 5d 2c 28 69 6e 74 29 41  ,azArg[1],(int)A
21c60 72 72 61 79 53 69 7a 65 28 6d 61 69 6e 50 72 6f  rraySize(mainPro
21c70 6d 70 74 29 2d 31 29 3b 0a 20 20 20 20 7d 0a 20  mpt)-1);.    }. 
21c80 20 20 20 69 66 28 20 6e 41 72 67 20 3e 3d 20 33     if( nArg >= 3
21c90 29 20 7b 0a 20 20 20 20 20 20 73 74 72 6e 63 70  ) {.      strncp
21ca0 79 28 63 6f 6e 74 69 6e 75 65 50 72 6f 6d 70 74  y(continuePrompt
21cb0 2c 61 7a 41 72 67 5b 32 5d 2c 28 69 6e 74 29 41  ,azArg[2],(int)A
21cc0 72 72 61 79 53 69 7a 65 28 63 6f 6e 74 69 6e 75  rraySize(continu
21cd0 65 50 72 6f 6d 70 74 29 2d 31 29 3b 0a 20 20 20  ePrompt)-1);.   
21ce0 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66   }.  }else..  if
21cf0 28 20 63 3d 3d 27 71 27 20 26 26 20 73 74 72 6e  ( c=='q' && strn
21d00 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 71  cmp(azArg[0], "q
21d10 75 69 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  uit", n)==0 ){. 
21d20 20 20 20 72 63 20 3d 20 32 3b 0a 20 20 7d 65 6c     rc = 2;.  }el
21d30 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 72 27  se..  if( c=='r'
21d40 20 26 26 20 6e 3e 3d 33 20 26 26 20 73 74 72 6e   && n>=3 && strn
21d50 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 72  cmp(azArg[0], "r
21d60 65 61 64 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20  ead", n)==0 ){. 
21d70 20 20 20 46 49 4c 45 20 2a 61 6c 74 3b 0a 20 20     FILE *alt;.  
21d80 20 20 69 66 28 20 6e 41 72 67 21 3d 32 20 29 7b    if( nArg!=2 ){
21d90 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74  .      raw_print
21da0 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65  f(stderr, "Usage
21db0 3a 20 2e 72 65 61 64 20 46 49 4c 45 5c 6e 22 29  : .read FILE\n")
21dc0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
21dd0 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f        goto meta_
21de0 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20  command_exit;.  
21df0 20 20 7d 0a 20 20 20 20 61 6c 74 20 3d 20 66 6f    }.    alt = fo
21e00 70 65 6e 28 61 7a 41 72 67 5b 31 5d 2c 20 22 72  pen(azArg[1], "r
21e10 62 22 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 74  b");.    if( alt
21e20 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75 74 66  ==0 ){.      utf
21e30 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
21e40 22 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74 20 6f  "Error: cannot o
21e50 70 65 6e 20 5c 22 25 73 5c 22 5c 6e 22 2c 20 61  pen \"%s\"\n", a
21e60 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20  zArg[1]);.      
21e70 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  rc = 1;.    }els
21e80 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 70 72  e{.      rc = pr
21e90 6f 63 65 73 73 5f 69 6e 70 75 74 28 70 2c 20 61  ocess_input(p, a
21ea0 6c 74 29 3b 0a 20 20 20 20 20 20 66 63 6c 6f 73  lt);.      fclos
21eb0 65 28 61 6c 74 29 3b 0a 20 20 20 20 7d 0a 20 20  e(alt);.    }.  
21ec0 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
21ed0 27 72 27 20 26 26 20 6e 3e 3d 33 20 26 26 20 73  'r' && n>=3 && s
21ee0 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
21ef0 20 22 72 65 73 74 6f 72 65 22 2c 20 6e 29 3d 3d   "restore", n)==
21f00 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  0 ){.    const c
21f10 68 61 72 20 2a 7a 53 72 63 46 69 6c 65 3b 0a 20  har *zSrcFile;. 
21f20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
21f30 44 62 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  Db;.    sqlite3 
21f40 2a 70 53 72 63 3b 0a 20 20 20 20 73 71 6c 69 74  *pSrc;.    sqlit
21f50 65 33 5f 62 61 63 6b 75 70 20 2a 70 42 61 63 6b  e3_backup *pBack
21f60 75 70 3b 0a 20 20 20 20 69 6e 74 20 6e 54 69 6d  up;.    int nTim
21f70 65 6f 75 74 20 3d 20 30 3b 0a 0a 20 20 20 20 69  eout = 0;..    i
21f80 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20  f( nArg==2 ){.  
21f90 20 20 20 20 7a 53 72 63 46 69 6c 65 20 3d 20 61      zSrcFile = a
21fa0 7a 41 72 67 5b 31 5d 3b 0a 20 20 20 20 20 20 7a  zArg[1];.      z
21fb0 44 62 20 3d 20 22 6d 61 69 6e 22 3b 0a 20 20 20  Db = "main";.   
21fc0 20 7d 65 6c 73 65 20 69 66 28 20 6e 41 72 67 3d   }else if( nArg=
21fd0 3d 33 20 29 7b 0a 20 20 20 20 20 20 7a 53 72 63  =3 ){.      zSrc
21fe0 46 69 6c 65 20 3d 20 61 7a 41 72 67 5b 32 5d 3b  File = azArg[2];
21ff0 0a 20 20 20 20 20 20 7a 44 62 20 3d 20 61 7a 41  .      zDb = azA
22000 72 67 5b 31 5d 3b 0a 20 20 20 20 7d 65 6c 73 65  rg[1];.    }else
22010 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  {.      raw_prin
22020 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
22030 65 3a 20 2e 72 65 73 74 6f 72 65 20 3f 44 42 3f  e: .restore ?DB?
22040 20 46 49 4c 45 5c 6e 22 29 3b 0a 20 20 20 20 20   FILE\n");.     
22050 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67   rc = 1;.      g
22060 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64  oto meta_command
22070 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20  _exit;.    }.   
22080 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70   rc = sqlite3_op
22090 65 6e 28 7a 53 72 63 46 69 6c 65 2c 20 26 70 53  en(zSrcFile, &pS
220a0 72 63 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  rc);.    if( rc!
220b0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
220c0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
220d0 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
220e0 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 5c 22 25 73  cannot open \"%s
220f0 5c 22 5c 6e 22 2c 20 7a 53 72 63 46 69 6c 65 29  \"\n", zSrcFile)
22100 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
22110 63 6c 6f 73 65 28 70 53 72 63 29 3b 0a 20 20 20  close(pSrc);.   
22120 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
22130 20 7d 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70   }.    open_db(p
22140 2c 20 30 29 3b 0a 20 20 20 20 70 42 61 63 6b 75  , 0);.    pBacku
22150 70 20 3d 20 73 71 6c 69 74 65 33 5f 62 61 63 6b  p = sqlite3_back
22160 75 70 5f 69 6e 69 74 28 70 2d 3e 64 62 2c 20 7a  up_init(p->db, z
22170 44 62 2c 20 70 53 72 63 2c 20 22 6d 61 69 6e 22  Db, pSrc, "main"
22180 29 3b 0a 20 20 20 20 69 66 28 20 70 42 61 63 6b  );.    if( pBack
22190 75 70 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 75  up==0 ){.      u
221a0 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72  tf8_printf(stder
221b0 72 2c 20 22 45 72 72 6f 72 3a 20 25 73 5c 6e 22  r, "Error: %s\n"
221c0 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
221d0 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 20 20  (p->db));.      
221e0 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 70 53  sqlite3_close(pS
221f0 72 63 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  rc);.      retur
22200 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 77  n 1;.    }.    w
22210 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c 69  hile( (rc = sqli
22220 74 65 33 5f 62 61 63 6b 75 70 5f 73 74 65 70 28  te3_backup_step(
22230 70 42 61 63 6b 75 70 2c 31 30 30 29 29 3d 3d 53  pBackup,100))==S
22240 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 20 20  QLITE_OK.       
22250 20 20 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45     || rc==SQLITE
22260 5f 42 55 53 59 20 20 29 7b 0a 20 20 20 20 20 20  _BUSY  ){.      
22270 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
22280 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 69  USY ){.        i
22290 66 28 20 6e 54 69 6d 65 6f 75 74 2b 2b 20 3e 3d  f( nTimeout++ >=
222a0 20 33 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20   3 ) break;.    
222b0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6c 65 65      sqlite3_slee
222c0 70 28 31 30 30 29 3b 0a 20 20 20 20 20 20 7d 0a  p(100);.      }.
222d0 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
222e0 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28  3_backup_finish(
222f0 70 42 61 63 6b 75 70 29 3b 0a 20 20 20 20 69 66  pBackup);.    if
22300 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc==SQLITE_DON
22310 45 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  E ){.      rc = 
22320 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
22330 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
22340 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4c   || rc==SQLITE_L
22350 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 72  OCKED ){.      r
22360 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
22370 2c 20 22 45 72 72 6f 72 3a 20 73 6f 75 72 63 65  , "Error: source
22380 20 64 61 74 61 62 61 73 65 20 69 73 20 62 75 73   database is bus
22390 79 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20  y\n");.      rc 
223a0 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 1;.    }else{.
223b0 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74        utf8_print
223c0 66 28 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72  f(stderr, "Error
223d0 3a 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33  : %s\n", sqlite3
223e0 5f 65 72 72 6d 73 67 28 70 2d 3e 64 62 29 29 3b  _errmsg(p->db));
223f0 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
22400 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
22410 5f 63 6c 6f 73 65 28 70 53 72 63 29 3b 0a 20 20  _close(pSrc);.  
22420 7d 65 6c 73 65 0a 0a 0a 20 20 69 66 28 20 63 3d  }else...  if( c=
22430 3d 27 73 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='s' && strncmp(
22440 61 7a 41 72 67 5b 30 5d 2c 20 22 73 63 61 6e 73  azArg[0], "scans
22450 74 61 74 73 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  tats", n)==0 ){.
22460 20 20 20 20 69 66 28 20 6e 41 72 67 3d 3d 32 20      if( nArg==2 
22470 29 7b 0a 20 20 20 20 20 20 70 2d 3e 73 63 61 6e  ){.      p->scan
22480 73 74 61 74 73 4f 6e 20 3d 20 62 6f 6f 6c 65 61  statsOn = boolea
22490 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d 29  nValue(azArg[1])
224a0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
224b0 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
224c0 4e 53 54 41 54 55 53 0a 20 20 20 20 20 20 72 61  NSTATUS.      ra
224d0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
224e0 20 22 57 61 72 6e 69 6e 67 3a 20 2e 73 63 61 6e   "Warning: .scan
224f0 73 74 61 74 73 20 6e 6f 74 20 61 76 61 69 6c 61  stats not availa
22500 62 6c 65 20 69 6e 20 74 68 69 73 20 62 75 69 6c  ble in this buil
22510 64 2e 5c 6e 22 29 3b 0a 23 65 6e 64 69 66 0a 20  d.\n");.#endif. 
22520 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
22530 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
22540 72 2c 20 22 55 73 61 67 65 3a 20 2e 73 63 61 6e  r, "Usage: .scan
22550 73 74 61 74 73 20 6f 6e 7c 6f 66 66 5c 6e 22 29  stats on|off\n")
22560 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a  ;.      rc = 1;.
22570 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
22580 20 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 73   if( c=='s' && s
22590 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
225a0 20 22 73 63 68 65 6d 61 22 2c 20 6e 29 3d 3d 30   "schema", n)==0
225b0 20 29 7b 0a 20 20 20 20 53 68 65 6c 6c 53 74 61   ){.    ShellSta
225c0 74 65 20 64 61 74 61 3b 0a 20 20 20 20 63 68 61  te data;.    cha
225d0 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  r *zErrMsg = 0;.
225e0 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20 30      open_db(p, 0
225f0 29 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 26 64  );.    memcpy(&d
22600 61 74 61 2c 20 70 2c 20 73 69 7a 65 6f 66 28 64  ata, p, sizeof(d
22610 61 74 61 29 29 3b 0a 20 20 20 20 64 61 74 61 2e  ata));.    data.
22620 73 68 6f 77 48 65 61 64 65 72 20 3d 20 30 3b 0a  showHeader = 0;.
22630 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d      data.cMode =
22640 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44   data.mode = MOD
22650 45 5f 53 65 6d 69 3b 0a 20 20 20 20 69 66 28 20  E_Semi;.    if( 
22660 6e 41 72 67 3e 3d 32 20 26 26 20 6f 70 74 69 6f  nArg>=2 && optio
22670 6e 4d 61 74 63 68 28 61 7a 41 72 67 5b 31 5d 2c  nMatch(azArg[1],
22680 20 22 69 6e 64 65 6e 74 22 29 20 29 7b 0a 20 20   "indent") ){.  
22690 20 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d      data.cMode =
226a0 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44   data.mode = MOD
226b0 45 5f 50 72 65 74 74 79 3b 0a 20 20 20 20 20 20  E_Pretty;.      
226c0 6e 41 72 67 2d 2d 3b 0a 20 20 20 20 20 20 69 66  nArg--;.      if
226d0 28 20 6e 41 72 67 3d 3d 32 20 29 20 61 7a 41 72  ( nArg==2 ) azAr
226e0 67 5b 31 5d 20 3d 20 61 7a 41 72 67 5b 32 5d 3b  g[1] = azArg[2];
226f0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e  .    }.    if( n
22700 41 72 67 3d 3d 32 20 26 26 20 61 7a 41 72 67 5b  Arg==2 && azArg[
22710 31 5d 5b 30 5d 21 3d 27 2d 27 20 29 7b 0a 20 20  1][0]!='-' ){.  
22720 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20      int i;.     
22730 20 66 6f 72 28 69 3d 30 3b 20 61 7a 41 72 67 5b   for(i=0; azArg[
22740 31 5d 5b 69 5d 3b 20 69 2b 2b 29 20 61 7a 41 72  1][i]; i++) azAr
22750 67 5b 31 5d 5b 69 5d 20 3d 20 54 6f 4c 6f 77 65  g[1][i] = ToLowe
22760 72 28 61 7a 41 72 67 5b 31 5d 5b 69 5d 29 3b 0a  r(azArg[1][i]);.
22770 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70        if( strcmp
22780 28 61 7a 41 72 67 5b 31 5d 2c 22 73 71 6c 69 74  (azArg[1],"sqlit
22790 65 5f 6d 61 73 74 65 72 22 29 3d 3d 30 20 29 7b  e_master")==0 ){
227a0 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 6e  .        char *n
227b0 65 77 5f 61 72 67 76 5b 32 5d 2c 20 2a 6e 65 77  ew_argv[2], *new
227c0 5f 63 6f 6c 76 5b 32 5d 3b 0a 20 20 20 20 20 20  _colv[2];.      
227d0 20 20 6e 65 77 5f 61 72 67 76 5b 30 5d 20 3d 20    new_argv[0] = 
227e0 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71  "CREATE TABLE sq
227f0 6c 69 74 65 5f 6d 61 73 74 65 72 20 28 5c 6e 22  lite_master (\n"
22800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22810 20 20 20 20 20 20 20 22 20 20 74 79 70 65 20 74         "  type t
22820 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20  ext,\n".        
22830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                " 
22840 20 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20   name text,\n". 
22850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22860 20 20 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65       "  tbl_name
22870 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 20   text,\n".      
22880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22890 22 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74 65  "  rootpage inte
228a0 67 65 72 2c 5c 6e 22 0a 20 20 20 20 20 20 20 20  ger,\n".        
228b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                " 
228c0 20 73 71 6c 20 74 65 78 74 5c 6e 22 0a 20 20 20   sql text\n".   
228d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228e0 20 20 20 22 29 22 3b 0a 20 20 20 20 20 20 20 20     ")";.        
228f0 6e 65 77 5f 61 72 67 76 5b 31 5d 20 3d 20 30 3b  new_argv[1] = 0;
22900 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 63 6f 6c  .        new_col
22910 76 5b 30 5d 20 3d 20 22 73 71 6c 22 3b 0a 20 20  v[0] = "sql";.  
22920 20 20 20 20 20 20 6e 65 77 5f 63 6f 6c 76 5b 31        new_colv[1
22930 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 63  ] = 0;.        c
22940 61 6c 6c 62 61 63 6b 28 26 64 61 74 61 2c 20 31  allback(&data, 1
22950 2c 20 6e 65 77 5f 61 72 67 76 2c 20 6e 65 77 5f  , new_argv, new_
22960 63 6f 6c 76 29 3b 0a 20 20 20 20 20 20 20 20 72  colv);.        r
22970 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
22980 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
22990 74 72 63 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22  trcmp(azArg[1],"
229a0 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
229b0 65 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  er")==0 ){.     
229c0 20 20 20 63 68 61 72 20 2a 6e 65 77 5f 61 72 67     char *new_arg
229d0 76 5b 32 5d 2c 20 2a 6e 65 77 5f 63 6f 6c 76 5b  v[2], *new_colv[
229e0 32 5d 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f  2];.        new_
229f0 61 72 67 76 5b 30 5d 20 3d 20 22 43 52 45 41 54  argv[0] = "CREAT
22a00 45 20 54 45 4d 50 20 54 41 42 4c 45 20 73 71 6c  E TEMP TABLE sql
22a10 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20  ite_temp_master 
22a20 28 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20  (\n".           
22a30 20 20 20 20 20 20 20 20 20 20 20 22 20 20 74 79             "  ty
22a40 70 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20  pe text,\n".    
22a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a60 20 20 22 20 20 6e 61 6d 65 20 74 65 78 74 2c 5c    "  name text,\
22a70 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n".             
22a80 20 20 20 20 20 20 20 20 20 22 20 20 74 62 6c 5f           "  tbl_
22a90 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20  name text,\n".  
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ab0 20 20 20 20 22 20 20 72 6f 6f 74 70 61 67 65 20      "  rootpage 
22ac0 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20 20 20  integer,\n".    
22ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ae0 20 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e 22    "  sql text\n"
22af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22b00 20 20 20 20 20 20 20 22 29 22 3b 0a 20 20 20 20         ")";.    
22b10 20 20 20 20 6e 65 77 5f 61 72 67 76 5b 31 5d 20      new_argv[1] 
22b20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 6e 65 77  = 0;.        new
22b30 5f 63 6f 6c 76 5b 30 5d 20 3d 20 22 73 71 6c 22  _colv[0] = "sql"
22b40 3b 0a 20 20 20 20 20 20 20 20 6e 65 77 5f 63 6f  ;.        new_co
22b50 6c 76 5b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20  lv[1] = 0;.     
22b60 20 20 20 63 61 6c 6c 62 61 63 6b 28 26 64 61 74     callback(&dat
22b70 61 2c 20 31 2c 20 6e 65 77 5f 61 72 67 76 2c 20  a, 1, new_argv, 
22b80 6e 65 77 5f 63 6f 6c 76 29 3b 0a 20 20 20 20 20  new_colv);.     
22b90 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
22ba0 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  K;.      }else{.
22bb0 20 20 20 20 20 20 20 20 7a 53 68 65 6c 6c 53 74          zShellSt
22bc0 61 74 69 63 20 3d 20 61 7a 41 72 67 5b 31 5d 3b  atic = azArg[1];
22bd0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
22be0 6c 69 74 65 33 5f 65 78 65 63 28 70 2d 3e 64 62  lite3_exec(p->db
22bf0 2c 0a 20 20 20 20 20 20 20 20 20 20 22 53 45 4c  ,.          "SEL
22c00 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 22 0a 20  ECT sql FROM ". 
22c10 20 20 20 20 20 20 20 20 20 22 20 20 28 53 45 4c           "  (SEL
22c20 45 43 54 20 73 71 6c 20 73 71 6c 2c 20 74 79 70  ECT sql sql, typ
22c30 65 20 74 79 70 65 2c 20 74 62 6c 5f 6e 61 6d 65  e type, tbl_name
22c40 20 74 62 6c 5f 6e 61 6d 65 2c 20 6e 61 6d 65 20   tbl_name, name 
22c50 6e 61 6d 65 2c 20 72 6f 77 69 64 20 78 22 0a 20  name, rowid x". 
22c60 20 20 20 20 20 20 20 20 20 22 20 20 20 20 20 46           "     F
22c70 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
22c80 72 20 55 4e 49 4f 4e 20 41 4c 4c 22 0a 20 20 20  r UNION ALL".   
22c90 20 20 20 20 20 20 20 22 20 20 20 53 45 4c 45 43         "   SELEC
22ca0 54 20 73 71 6c 2c 20 74 79 70 65 2c 20 74 62 6c  T sql, type, tbl
22cb0 5f 6e 61 6d 65 2c 20 6e 61 6d 65 2c 20 72 6f 77  _name, name, row
22cc0 69 64 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  id FROM sqlite_t
22cd0 65 6d 70 5f 6d 61 73 74 65 72 29 20 22 0a 20 20  emp_master) ".  
22ce0 20 20 20 20 20 20 20 20 22 57 48 45 52 45 20 6c          "WHERE l
22cf0 6f 77 65 72 28 74 62 6c 5f 6e 61 6d 65 29 20 4c  ower(tbl_name) L
22d00 49 4b 45 20 73 68 65 6c 6c 73 74 61 74 69 63 28  IKE shellstatic(
22d10 29 22 0a 20 20 20 20 20 20 20 20 20 20 22 20 20  )".          "  
22d20 41 4e 44 20 74 79 70 65 21 3d 27 6d 65 74 61 27  AND type!='meta'
22d30 20 41 4e 44 20 73 71 6c 20 4e 4f 54 4e 55 4c 4c   AND sql NOTNULL
22d40 20 22 0a 20 20 20 20 20 20 20 20 20 20 22 4f 52   ".          "OR
22d50 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20  DER BY rowid",. 
22d60 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63           callbac
22d70 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d  k, &data, &zErrM
22d80 73 67 29 3b 0a 20 20 20 20 20 20 20 20 7a 53 68  sg);.        zSh
22d90 65 6c 6c 53 74 61 74 69 63 20 3d 20 30 3b 0a 20  ellStatic = 0;. 
22da0 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
22db0 20 69 66 28 20 6e 41 72 67 3d 3d 31 20 29 7b 0a   if( nArg==1 ){.
22dc0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
22dd0 65 33 5f 65 78 65 63 28 70 2d 3e 64 62 2c 0a 20  e3_exec(p->db,. 
22de0 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20          "SELECT 
22df0 73 71 6c 20 46 52 4f 4d 20 22 0a 20 20 20 20 20  sql FROM ".     
22e00 20 20 20 20 22 20 20 28 53 45 4c 45 43 54 20 73      "  (SELECT s
22e10 71 6c 20 73 71 6c 2c 20 74 79 70 65 20 74 79 70  ql sql, type typ
22e20 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 74 62 6c 5f  e, tbl_name tbl_
22e30 6e 61 6d 65 2c 20 6e 61 6d 65 20 6e 61 6d 65 2c  name, name name,
22e40 20 72 6f 77 69 64 20 78 22 0a 20 20 20 20 20 20   rowid x".      
22e50 20 20 20 22 20 20 20 20 20 46 52 4f 4d 20 73 71     "     FROM sq
22e60 6c 69 74 65 5f 6d 61 73 74 65 72 20 55 4e 49 4f  lite_master UNIO
22e70 4e 20 41 4c 4c 22 0a 20 20 20 20 20 20 20 20 20  N ALL".         
22e80 22 20 20 20 53 45 4c 45 43 54 20 73 71 6c 2c 20  "   SELECT sql, 
22e90 74 79 70 65 2c 20 74 62 6c 5f 6e 61 6d 65 2c 20  type, tbl_name, 
22ea0 6e 61 6d 65 2c 20 72 6f 77 69 64 20 46 52 4f 4d  name, rowid FROM
22eb0 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
22ec0 74 65 72 29 20 22 0a 20 20 20 20 20 20 20 20 20  ter) ".         
22ed0 22 57 48 45 52 45 20 74 79 70 65 21 3d 27 6d 65  "WHERE type!='me
22ee0 74 61 27 20 41 4e 44 20 73 71 6c 20 4e 4f 54 4e  ta' AND sql NOTN
22ef0 55 4c 4c 20 41 4e 44 20 6e 61 6d 65 20 4e 4f 54  ULL AND name NOT
22f00 20 4c 49 4b 45 20 27 73 71 6c 69 74 65 5f 25 27   LIKE 'sqlite_%'
22f10 20 22 0a 20 20 20 20 20 20 20 20 20 22 4f 52 44   ".         "ORD
22f20 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20  ER BY rowid",.  
22f30 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 2c         callback,
22f40 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67   &data, &zErrMsg
22f50 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 7d 65  .      );.    }e
22f60 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  lse{.      raw_p
22f70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
22f80 73 61 67 65 3a 20 2e 73 63 68 65 6d 61 20 3f 2d  sage: .schema ?-
22f90 2d 69 6e 64 65 6e 74 3f 20 3f 4c 49 4b 45 2d 50  -indent? ?LIKE-P
22fa0 41 54 54 45 52 4e 3f 5c 6e 22 29 3b 0a 20 20 20  ATTERN?\n");.   
22fb0 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20 20 20     rc = 1;.     
22fc0 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61   goto meta_comma
22fd0 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d 0a 20  nd_exit;.    }. 
22fe0 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29     if( zErrMsg )
22ff0 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72 69  {.      utf8_pri
23000 6e 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f  ntf(stderr,"Erro
23010 72 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73  r: %s\n", zErrMs
23020 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  g);.      sqlite
23030 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b  3_free(zErrMsg);
23040 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
23050 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 20     }else if( rc 
23060 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  != SQLITE_OK ){.
23070 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
23080 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20  (stderr,"Error: 
23090 71 75 65 72 79 69 6e 67 20 73 63 68 65 6d 61 20  querying schema 
230a0 69 6e 66 6f 72 6d 61 74 69 6f 6e 5c 6e 22 29 3b  information\n");
230b0 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
230c0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
230d0 72 63 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  rc = 0;.    }.  
230e0 7d 65 6c 73 65 0a 0a 23 69 66 20 64 65 66 69 6e  }else..#if defin
230f0 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
23100 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
23110 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54  TE_ENABLE_SELECT
23120 54 52 41 43 45 29 0a 20 20 69 66 28 20 63 3d 3d  TRACE).  if( c==
23130 27 73 27 20 26 26 20 6e 3d 3d 31 31 20 26 26 20  's' && n==11 && 
23140 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
23150 2c 20 22 73 65 6c 65 63 74 74 72 61 63 65 22 2c  , "selecttrace",
23160 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71   n)==0 ){.    sq
23170 6c 69 74 65 33 53 65 6c 65 63 74 54 72 61 63 65  lite3SelectTrace
23180 20 3d 20 69 6e 74 65 67 65 72 56 61 6c 75 65 28   = integerValue(
23190 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 7d 65 6c  azArg[1]);.  }el
231a0 73 65 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  se.#endif..#if d
231b0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
231c0 41 42 4c 45 5f 53 45 53 53 49 4f 4e 29 0a 20 20  ABLE_SESSION).  
231d0 69 66 28 20 63 3d 3d 27 73 27 20 26 26 20 73 74  if( c=='s' && st
231e0 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 22  rncmp(azArg[0],"
231f0 73 65 73 73 69 6f 6e 22 2c 6e 29 3d 3d 30 20 26  session",n)==0 &
23200 26 20 6e 3e 3d 33 20 29 7b 0a 20 20 20 20 4f 70  & n>=3 ){.    Op
23210 65 6e 53 65 73 73 69 6f 6e 20 2a 70 53 65 73 73  enSession *pSess
23220 69 6f 6e 20 3d 20 26 70 2d 3e 61 53 65 73 73 69  ion = &p->aSessi
23230 6f 6e 5b 30 5d 3b 0a 20 20 20 20 63 68 61 72 20  on[0];.    char 
23240 2a 2a 61 7a 43 6d 64 20 3d 20 26 61 7a 41 72 67  **azCmd = &azArg
23250 5b 31 5d 3b 0a 20 20 20 20 69 6e 74 20 69 53 65  [1];.    int iSe
23260 73 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 6e  s = 0;.    int n
23270 43 6d 64 20 3d 20 6e 41 72 67 20 2d 20 31 3b 0a  Cmd = nArg - 1;.
23280 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69      int i;.    i
23290 66 28 20 6e 41 72 67 3c 3d 31 20 29 20 67 6f 74  f( nArg<=1 ) got
232a0 6f 20 73 65 73 73 69 6f 6e 5f 73 79 6e 74 61 78  o session_syntax
232b0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 6f 70 65 6e  _error;.    open
232c0 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 69  _db(p, 0);.    i
232d0 66 28 20 6e 41 72 67 3e 3d 33 20 29 7b 0a 20 20  f( nArg>=3 ){.  
232e0 20 20 20 20 66 6f 72 28 69 53 65 73 3d 30 3b 20      for(iSes=0; 
232f0 69 53 65 73 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e  iSes<p->nSession
23300 3b 20 69 53 65 73 2b 2b 29 7b 0a 20 20 20 20 20  ; iSes++){.     
23310 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 70 2d     if( strcmp(p-
23320 3e 61 53 65 73 73 69 6f 6e 5b 69 53 65 73 5d 2e  >aSession[iSes].
23330 7a 4e 61 6d 65 2c 20 61 7a 41 72 67 5b 31 5d 29  zName, azArg[1])
23340 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
23350 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 69     }.      if( i
23360 53 65 73 3c 70 2d 3e 6e 53 65 73 73 69 6f 6e 20  Ses<p->nSession 
23370 29 7b 0a 20 20 20 20 20 20 20 20 70 53 65 73 73  ){.        pSess
23380 69 6f 6e 20 3d 20 26 70 2d 3e 61 53 65 73 73 69  ion = &p->aSessi
23390 6f 6e 5b 69 53 65 73 5d 3b 0a 20 20 20 20 20 20  on[iSes];.      
233a0 20 20 61 7a 43 6d 64 2b 2b 3b 0a 20 20 20 20 20    azCmd++;.     
233b0 20 20 20 6e 43 6d 64 2d 2d 3b 0a 20 20 20 20 20     nCmd--;.     
233c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
233d0 70 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e 61  pSession = &p->a
233e0 53 65 73 73 69 6f 6e 5b 30 5d 3b 0a 20 20 20 20  Session[0];.    
233f0 20 20 20 20 69 53 65 73 20 3d 20 30 3b 0a 20 20      iSes = 0;.  
23400 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
23410 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 61 74 74   /* .session att
23420 61 63 68 20 54 41 42 4c 45 0a 20 20 20 20 2a 2a  ach TABLE.    **
23430 20 49 6e 76 6f 6b 65 20 74 68 65 20 73 71 6c 69   Invoke the sqli
23440 74 65 33 73 65 73 73 69 6f 6e 5f 61 74 74 61 63  te3session_attac
23450 68 28 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f  h() interface to
23460 20 61 74 74 61 63 68 20 61 20 70 61 72 74 69 63   attach a partic
23470 75 6c 61 72 0a 20 20 20 20 2a 2a 20 74 61 62 6c  ular.    ** tabl
23480 65 20 73 6f 20 74 68 61 74 20 69 74 20 69 73 20  e so that it is 
23490 6e 65 76 65 72 20 66 69 6c 74 65 72 65 64 2e 0a  never filtered..
234a0 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73      */.    if( s
234b0 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 22  trcmp(azCmd[0],"
234c0 61 74 74 61 63 68 22 29 3d 3d 30 20 29 7b 0a 20  attach")==0 ){. 
234d0 20 20 20 20 20 69 66 28 20 6e 43 6d 64 21 3d 32       if( nCmd!=2
234e0 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f   ) goto session_
234f0 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20  syntax_error;.  
23500 20 20 20 20 69 66 28 20 70 53 65 73 73 69 6f 6e      if( pSession
23510 2d 3e 70 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ->p==0 ){.      
23520 20 20 73 65 73 73 69 6f 6e 5f 6e 6f 74 5f 6f 70    session_not_op
23530 65 6e 3a 0a 20 20 20 20 20 20 20 20 72 61 77 5f  en:.        raw_
23540 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
23550 45 52 52 4f 52 3a 20 4e 6f 20 73 65 73 73 69 6f  ERROR: No sessio
23560 6e 73 20 61 72 65 20 6f 70 65 6e 5c 6e 22 29 3b  ns are open\n");
23570 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
23580 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
23590 65 33 73 65 73 73 69 6f 6e 5f 61 74 74 61 63 68  e3session_attach
235a0 28 70 53 65 73 73 69 6f 6e 2d 3e 70 2c 20 61 7a  (pSession->p, az
235b0 43 6d 64 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20  Cmd[1]);.       
235c0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
235d0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
235e0 73 74 64 65 72 72 2c 20 22 45 52 52 4f 52 3a 20  stderr, "ERROR: 
235f0 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 61  sqlite3session_a
23600 74 74 61 63 68 28 29 20 72 65 74 75 72 6e 73 20  ttach() returns 
23610 25 64 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20  %d\n", rc);.    
23620 20 20 20 20 20 20 72 63 20 3d 20 30 3b 0a 20 20        rc = 0;.  
23630 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
23640 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f      }else..    /
23650 2a 20 2e 73 65 73 73 69 6f 6e 20 63 68 61 6e 67  * .session chang
23660 65 73 65 74 20 46 49 4c 45 0a 20 20 20 20 2a 2a  eset FILE.    **
23670 20 2e 73 65 73 73 69 6f 6e 20 70 61 74 63 68 73   .session patchs
23680 65 74 20 46 49 4c 45 0a 20 20 20 20 2a 2a 20 57  et FILE.    ** W
23690 72 69 74 65 20 61 20 63 68 61 6e 67 65 73 65 74  rite a changeset
236a0 20 6f 72 20 70 61 74 63 68 73 65 74 20 69 6e 74   or patchset int
236b0 6f 20 61 20 66 69 6c 65 2e 20 20 54 68 65 20 66  o a file.  The f
236c0 69 6c 65 20 69 73 20 6f 76 65 72 77 72 69 74 74  ile is overwritt
236d0 65 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  en..    */.    i
236e0 66 28 20 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b  f( strcmp(azCmd[
236f0 30 5d 2c 22 63 68 61 6e 67 65 73 65 74 22 29 3d  0],"changeset")=
23700 3d 30 20 7c 7c 20 73 74 72 63 6d 70 28 61 7a 43  =0 || strcmp(azC
23710 6d 64 5b 30 5d 2c 22 70 61 74 63 68 73 65 74 22  md[0],"patchset"
23720 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 46 49  )==0 ){.      FI
23730 4c 45 20 2a 6f 75 74 20 3d 20 30 3b 0a 20 20 20  LE *out = 0;.   
23740 20 20 20 69 66 28 20 6e 43 6d 64 21 3d 32 20 29     if( nCmd!=2 )
23750 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79   goto session_sy
23760 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20  ntax_error;.    
23770 20 20 69 66 28 20 70 53 65 73 73 69 6f 6e 2d 3e    if( pSession->
23780 70 3d 3d 30 20 29 20 67 6f 74 6f 20 73 65 73 73  p==0 ) goto sess
23790 69 6f 6e 5f 6e 6f 74 5f 6f 70 65 6e 3b 0a 20 20  ion_not_open;.  
237a0 20 20 20 20 6f 75 74 20 3d 20 66 6f 70 65 6e 28      out = fopen(
237b0 61 7a 43 6d 64 5b 31 5d 2c 20 22 77 62 22 29 3b  azCmd[1], "wb");
237c0 0a 20 20 20 20 20 20 69 66 28 20 6f 75 74 3d 3d  .      if( out==
237d0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74 66  0 ){.        utf
237e0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
237f0 20 22 45 52 52 4f 52 3a 20 63 61 6e 6e 6f 74 20   "ERROR: cannot 
23800 6f 70 65 6e 20 5c 22 25 73 5c 22 20 66 6f 72 20  open \"%s\" for 
23810 77 72 69 74 69 6e 67 5c 6e 22 2c 20 61 7a 43 6d  writing\n", azCm
23820 64 5b 31 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c  d[1]);.      }el
23830 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  se{.        int 
23840 73 7a 43 68 6e 67 3b 0a 20 20 20 20 20 20 20 20  szChng;.        
23850 76 6f 69 64 20 2a 70 43 68 6e 67 3b 0a 20 20 20  void *pChng;.   
23860 20 20 20 20 20 69 66 28 20 61 7a 43 6d 64 5b 30       if( azCmd[0
23870 5d 5b 30 5d 3d 3d 27 63 27 20 29 7b 0a 20 20 20  ][0]=='c' ){.   
23880 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
23890 74 65 33 73 65 73 73 69 6f 6e 5f 63 68 61 6e 67  te3session_chang
238a0 65 73 65 74 28 70 53 65 73 73 69 6f 6e 2d 3e 70  eset(pSession->p
238b0 2c 20 26 73 7a 43 68 6e 67 2c 20 26 70 43 68 6e  , &szChng, &pChn
238c0 67 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  g);.        }els
238d0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  e{.          rc 
238e0 3d 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e  = sqlite3session
238f0 5f 70 61 74 63 68 73 65 74 28 70 53 65 73 73 69  _patchset(pSessi
23900 6f 6e 2d 3e 70 2c 20 26 73 7a 43 68 6e 67 2c 20  on->p, &szChng, 
23910 26 70 43 68 6e 67 29 3b 0a 20 20 20 20 20 20 20  &pChng);.       
23920 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 72   }.        if( r
23930 63 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  c ){.          p
23940 72 69 6e 74 66 28 22 45 72 72 6f 72 3a 20 65 72  rintf("Error: er
23950 72 6f 72 20 63 6f 64 65 20 25 64 5c 6e 22 2c 20  ror code %d\n", 
23960 72 63 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72  rc);.          r
23970 63 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  c = 0;.        }
23980 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 43 68  .        if( pCh
23990 6e 67 0a 20 20 20 20 20 20 20 20 20 20 26 26 20  ng.          && 
239a0 66 77 72 69 74 65 28 70 43 68 6e 67 2c 20 73 7a  fwrite(pChng, sz
239b0 43 68 6e 67 2c 20 31 2c 20 6f 75 74 29 21 3d 31  Chng, 1, out)!=1
239c0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 61   ){.          ra
239d0 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
239e0 20 22 45 52 52 4f 52 3a 20 46 61 69 6c 65 64 20   "ERROR: Failed 
239f0 74 6f 20 77 72 69 74 65 20 65 6e 74 69 72 65 20  to write entire 
23a00 25 64 2d 62 79 74 65 20 6f 75 74 70 75 74 5c 6e  %d-byte output\n
23a10 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
23a20 20 20 20 20 20 73 7a 43 68 6e 67 29 3b 0a 20 20       szChng);.  
23a30 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
23a40 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 43 68  sqlite3_free(pCh
23a50 6e 67 29 3b 0a 20 20 20 20 20 20 20 20 66 63 6c  ng);.        fcl
23a60 6f 73 65 28 6f 75 74 29 3b 0a 20 20 20 20 20 20  ose(out);.      
23a70 7d 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20  }.    }else..   
23a80 20 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 63 6c 6f   /* .session clo
23a90 73 65 0a 20 20 20 20 2a 2a 20 43 6c 6f 73 65 20  se.    ** Close 
23aa0 74 68 65 20 69 64 65 6e 74 69 66 69 65 64 20 73  the identified s
23ab0 65 73 73 69 6f 6e 0a 20 20 20 20 2a 2f 0a 20 20  ession.    */.  
23ac0 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a 43    if( strcmp(azC
23ad0 6d 64 5b 30 5d 2c 20 22 63 6c 6f 73 65 22 29 3d  md[0], "close")=
23ae0 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  =0 ){.      if( 
23af0 6e 43 6d 64 21 3d 31 20 29 20 67 6f 74 6f 20 73  nCmd!=1 ) goto s
23b00 65 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f 65 72  ession_syntax_er
23b10 72 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ror;.      if( p
23b20 2d 3e 6e 53 65 73 73 69 6f 6e 20 29 7b 0a 20 20  ->nSession ){.  
23b30 20 20 20 20 20 20 73 65 73 73 69 6f 6e 5f 63 6c        session_cl
23b40 6f 73 65 28 70 53 65 73 73 69 6f 6e 29 3b 0a 20  ose(pSession);. 
23b50 20 20 20 20 20 20 20 70 2d 3e 61 53 65 73 73 69         p->aSessi
23b60 6f 6e 5b 69 53 65 73 5d 20 3d 20 70 2d 3e 61 53  on[iSes] = p->aS
23b70 65 73 73 69 6f 6e 5b 2d 2d 70 2d 3e 6e 53 65 73  ession[--p->nSes
23b80 73 69 6f 6e 5d 3b 0a 20 20 20 20 20 20 7d 0a 20  sion];.      }. 
23b90 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a     }else..    /*
23ba0 20 2e 73 65 73 73 69 6f 6e 20 65 6e 61 62 6c 65   .session enable
23bb0 20 3f 42 4f 4f 4c 45 41 4e 3f 0a 20 20 20 20 2a   ?BOOLEAN?.    *
23bc0 2a 20 51 75 65 72 79 20 6f 72 20 73 65 74 20 74  * Query or set t
23bd0 68 65 20 65 6e 61 62 6c 65 20 66 6c 61 67 0a 20  he enable flag. 
23be0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 74     */.    if( st
23bf0 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 20 22  rcmp(azCmd[0], "
23c00 65 6e 61 62 6c 65 22 29 3d 3d 30 20 29 7b 0a 20  enable")==0 ){. 
23c10 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20       int ii;.   
23c20 20 20 20 69 66 28 20 6e 43 6d 64 3e 32 20 29 20     if( nCmd>2 ) 
23c30 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79 6e  goto session_syn
23c40 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  tax_error;.     
23c50 20 69 69 20 3d 20 6e 43 6d 64 3d 3d 31 20 3f 20   ii = nCmd==1 ? 
23c60 2d 31 20 3a 20 62 6f 6f 6c 65 61 6e 56 61 6c 75  -1 : booleanValu
23c70 65 28 61 7a 43 6d 64 5b 31 5d 29 3b 0a 20 20 20  e(azCmd[1]);.   
23c80 20 20 20 69 66 28 20 70 2d 3e 6e 53 65 73 73 69     if( p->nSessi
23c90 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 69 69  on ){.        ii
23ca0 20 3d 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f   = sqlite3sessio
23cb0 6e 5f 65 6e 61 62 6c 65 28 70 53 65 73 73 69 6f  n_enable(pSessio
23cc0 6e 2d 3e 70 2c 20 69 69 29 3b 0a 20 20 20 20 20  n->p, ii);.     
23cd0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
23ce0 2d 3e 6f 75 74 2c 20 22 73 65 73 73 69 6f 6e 20  ->out, "session 
23cf0 25 73 20 65 6e 61 62 6c 65 20 66 6c 61 67 20 3d  %s enable flag =
23d00 20 25 64 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20   %d\n",.        
23d10 20 20 20 20 20 20 20 20 20 20 20 20 70 53 65 73              pSes
23d20 73 69 6f 6e 2d 3e 7a 4e 61 6d 65 2c 20 69 69 29  sion->zName, ii)
23d30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
23d40 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73  lse..    /* .ses
23d50 73 69 6f 6e 20 66 69 6c 74 65 72 20 47 4c 4f 42  sion filter GLOB
23d60 20 2e 2e 2e 2e 0a 20 20 20 20 2a 2a 20 53 65 74   .....    ** Set
23d70 20 61 20 6c 69 73 74 20 6f 66 20 47 4c 4f 42 20   a list of GLOB 
23d80 70 61 74 74 65 72 6e 73 20 6f 66 20 74 61 62 6c  patterns of tabl
23d90 65 20 6e 61 6d 65 73 20 74 6f 20 62 65 20 65 78  e names to be ex
23da0 63 6c 75 64 65 64 2e 0a 20 20 20 20 2a 2f 0a 20  cluded..    */. 
23db0 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 7a     if( strcmp(az
23dc0 43 6d 64 5b 30 5d 2c 20 22 66 69 6c 74 65 72 22  Cmd[0], "filter"
23dd0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e  )==0 ){.      in
23de0 74 20 69 69 2c 20 6e 42 79 74 65 3b 0a 20 20 20  t ii, nByte;.   
23df0 20 20 20 69 66 28 20 6e 43 6d 64 3c 32 20 29 20     if( nCmd<2 ) 
23e00 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79 6e  goto session_syn
23e10 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  tax_error;.     
23e20 20 69 66 28 20 70 2d 3e 6e 53 65 73 73 69 6f 6e   if( p->nSession
23e30 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
23e40 69 69 3d 30 3b 20 69 69 3c 70 53 65 73 73 69 6f  ii=0; ii<pSessio
23e50 6e 2d 3e 6e 46 69 6c 74 65 72 3b 20 69 69 2b 2b  n->nFilter; ii++
23e60 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
23e70 69 74 65 33 5f 66 72 65 65 28 70 53 65 73 73 69  ite3_free(pSessi
23e80 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72 5b 69 69 5d  on->azFilter[ii]
23e90 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
23ea0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
23eb0 65 28 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69  e(pSession->azFi
23ec0 6c 74 65 72 29 3b 0a 20 20 20 20 20 20 20 20 6e  lter);.        n
23ed0 42 79 74 65 20 3d 20 73 69 7a 65 6f 66 28 70 53  Byte = sizeof(pS
23ee0 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72  ession->azFilter
23ef0 5b 30 5d 29 2a 28 6e 43 6d 64 2d 31 29 3b 0a 20  [0])*(nCmd-1);. 
23f00 20 20 20 20 20 20 20 70 53 65 73 73 69 6f 6e 2d         pSession-
23f10 3e 61 7a 46 69 6c 74 65 72 20 3d 20 73 71 6c 69  >azFilter = sqli
23f20 74 65 33 5f 6d 61 6c 6c 6f 63 28 20 6e 42 79 74  te3_malloc( nByt
23f30 65 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  e );.        if(
23f40 20 70 53 65 73 73 69 6f 6e 2d 3e 61 7a 46 69 6c   pSession->azFil
23f50 74 65 72 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ter==0 ){.      
23f60 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
23f70 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f  tderr, "Error: o
23f80 75 74 20 6f 72 20 6d 65 6d 6f 72 79 5c 6e 22 29  ut or memory\n")
23f90 3b 0a 20 20 20 20 20 20 20 20 20 20 65 78 69 74  ;.          exit
23fa0 28 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  (1);.        }. 
23fb0 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 31 3b         for(ii=1;
23fc0 20 69 69 3c 6e 43 6d 64 3b 20 69 69 2b 2b 29 7b   ii<nCmd; ii++){
23fd0 0a 20 20 20 20 20 20 20 20 20 20 70 53 65 73 73  .          pSess
23fe0 69 6f 6e 2d 3e 61 7a 46 69 6c 74 65 72 5b 69 69  ion->azFilter[ii
23ff0 2d 31 5d 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  -1] = sqlite3_mp
24000 72 69 6e 74 66 28 22 25 73 22 2c 20 61 7a 43 6d  rintf("%s", azCm
24010 64 5b 69 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  d[ii]);.        
24020 7d 0a 20 20 20 20 20 20 20 20 70 53 65 73 73 69  }.        pSessi
24030 6f 6e 2d 3e 6e 46 69 6c 74 65 72 20 3d 20 69 69  on->nFilter = ii
24040 2d 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  -1;.      }.    
24050 7d 65 6c 73 65 0a 0a 20 20 20 20 2f 2a 20 2e 73  }else..    /* .s
24060 65 73 73 69 6f 6e 20 69 6e 64 69 72 65 63 74 20  ession indirect 
24070 3f 42 4f 4f 4c 45 41 4e 3f 0a 20 20 20 20 2a 2a  ?BOOLEAN?.    **
24080 20 51 75 65 72 79 20 6f 72 20 73 65 74 20 74 68   Query or set th
24090 65 20 69 6e 64 69 72 65 63 74 20 66 6c 61 67 0a  e indirect flag.
240a0 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73      */.    if( s
240b0 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 20  trcmp(azCmd[0], 
240c0 22 69 6e 64 69 72 65 63 74 22 29 3d 3d 30 20 29  "indirect")==0 )
240d0 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a  {.      int ii;.
240e0 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 3e 32        if( nCmd>2
240f0 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f   ) goto session_
24100 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20  syntax_error;.  
24110 20 20 20 20 69 69 20 3d 20 6e 43 6d 64 3d 3d 31      ii = nCmd==1
24120 20 3f 20 2d 31 20 3a 20 62 6f 6f 6c 65 61 6e 56   ? -1 : booleanV
24130 61 6c 75 65 28 61 7a 43 6d 64 5b 31 5d 29 3b 0a  alue(azCmd[1]);.
24140 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53 65        if( p->nSe
24150 73 73 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ssion ){.       
24160 20 69 69 20 3d 20 73 71 6c 69 74 65 33 73 65 73   ii = sqlite3ses
24170 73 69 6f 6e 5f 69 6e 64 69 72 65 63 74 28 70 53  sion_indirect(pS
24180 65 73 73 69 6f 6e 2d 3e 70 2c 20 69 69 29 3b 0a  ession->p, ii);.
24190 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
241a0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 73 65 73  ntf(p->out, "ses
241b0 73 69 6f 6e 20 25 73 20 69 6e 64 69 72 65 63 74  sion %s indirect
241c0 20 66 6c 61 67 20 3d 20 25 64 5c 6e 22 2c 0a 20   flag = %d\n",. 
241d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241e0 20 20 20 70 53 65 73 73 69 6f 6e 2d 3e 7a 4e 61     pSession->zNa
241f0 6d 65 2c 20 69 69 29 3b 0a 20 20 20 20 20 20 7d  me, ii);.      }
24200 0a 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20  .    }else..    
24210 2f 2a 20 2e 73 65 73 73 69 6f 6e 20 69 73 65 6d  /* .session isem
24220 70 74 79 0a 20 20 20 20 2a 2a 20 44 65 74 65 72  pty.    ** Deter
24230 6d 69 6e 65 20 69 66 20 74 68 65 20 73 65 73 73  mine if the sess
24240 69 6f 6e 20 69 73 20 65 6d 70 74 79 0a 20 20 20  ion is empty.   
24250 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 72 63   */.    if( strc
24260 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 20 22 69 73  mp(azCmd[0], "is
24270 65 6d 70 74 79 22 29 3d 3d 30 20 29 7b 0a 20 20  empty")==0 ){.  
24280 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20      int ii;.    
24290 20 20 69 66 28 20 6e 43 6d 64 21 3d 31 20 29 20    if( nCmd!=1 ) 
242a0 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79 6e  goto session_syn
242b0 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  tax_error;.     
242c0 20 69 66 28 20 70 2d 3e 6e 53 65 73 73 69 6f 6e   if( p->nSession
242d0 20 29 7b 0a 20 20 20 20 20 20 20 20 69 69 20 3d   ){.        ii =
242e0 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f   sqlite3session_
242f0 69 73 65 6d 70 74 79 28 70 53 65 73 73 69 6f 6e  isempty(pSession
24300 2d 3e 70 29 3b 0a 20 20 20 20 20 20 20 20 75 74  ->p);.        ut
24310 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
24320 2c 20 22 73 65 73 73 69 6f 6e 20 25 73 20 69 73  , "session %s is
24330 65 6d 70 74 79 20 66 6c 61 67 20 3d 20 25 64 5c  empty flag = %d\
24340 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n",.            
24350 20 20 20 20 20 20 20 20 70 53 65 73 73 69 6f 6e          pSession
24360 2d 3e 7a 4e 61 6d 65 2c 20 69 69 29 3b 0a 20 20  ->zName, ii);.  
24370 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 0a      }.    }else.
24380 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69 6f 6e  .    /* .session
24390 20 6c 69 73 74 0a 20 20 20 20 2a 2a 20 4c 69 73   list.    ** Lis
243a0 74 20 61 6c 6c 20 63 75 72 72 65 6e 74 6c 79 20  t all currently 
243b0 6f 70 65 6e 20 73 65 73 73 69 6f 6e 73 0a 20 20  open sessions.  
243c0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 74 72    */.    if( str
243d0 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c 22 6c 69  cmp(azCmd[0],"li
243e0 73 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  st")==0 ){.     
243f0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e   for(i=0; i<p->n
24400 53 65 73 73 69 6f 6e 3b 20 69 2b 2b 29 7b 0a 20  Session; i++){. 
24410 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
24420 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 25  tf(p->out, "%d %
24430 73 5c 6e 22 2c 20 69 2c 20 70 2d 3e 61 53 65 73  s\n", i, p->aSes
24440 73 69 6f 6e 5b 69 5d 2e 7a 4e 61 6d 65 29 3b 0a  sion[i].zName);.
24450 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
24460 65 0a 0a 20 20 20 20 2f 2a 20 2e 73 65 73 73 69  e..    /* .sessi
24470 6f 6e 20 6f 70 65 6e 20 44 42 20 4e 41 4d 45 0a  on open DB NAME.
24480 20 20 20 20 2a 2a 20 4f 70 65 6e 20 61 20 6e 65      ** Open a ne
24490 77 20 73 65 73 73 69 6f 6e 20 63 61 6c 6c 65 64  w session called
244a0 20 4e 41 4d 45 20 6f 6e 20 74 68 65 20 61 74 74   NAME on the att
244b0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 44  ached database D
244c0 42 2e 0a 20 20 20 20 2a 2a 20 44 42 20 69 73 20  B..    ** DB is 
244d0 6e 6f 72 6d 61 6c 6c 79 20 22 6d 61 69 6e 22 2e  normally "main".
244e0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
244f0 73 74 72 63 6d 70 28 61 7a 43 6d 64 5b 30 5d 2c  strcmp(azCmd[0],
24500 22 6f 70 65 6e 22 29 3d 3d 30 20 29 7b 0a 20 20  "open")==0 ){.  
24510 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
24520 0a 20 20 20 20 20 20 69 66 28 20 6e 43 6d 64 21  .      if( nCmd!
24530 3d 33 20 29 20 67 6f 74 6f 20 73 65 73 73 69 6f  =3 ) goto sessio
24540 6e 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a  n_syntax_error;.
24550 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 61 7a        zName = az
24560 43 6d 64 5b 32 5d 3b 0a 20 20 20 20 20 20 69 66  Cmd[2];.      if
24570 28 20 7a 4e 61 6d 65 5b 30 5d 3d 3d 30 20 29 20  ( zName[0]==0 ) 
24580 67 6f 74 6f 20 73 65 73 73 69 6f 6e 5f 73 79 6e  goto session_syn
24590 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  tax_error;.     
245a0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e   for(i=0; i<p->n
245b0 53 65 73 73 69 6f 6e 3b 20 69 2b 2b 29 7b 0a 20  Session; i++){. 
245c0 20 20 20 20 20 20 20 69 66 28 20 73 74 72 63 6d         if( strcm
245d0 70 28 70 2d 3e 61 53 65 73 73 69 6f 6e 5b 69 5d  p(p->aSession[i]
245e0 2e 7a 4e 61 6d 65 2c 7a 4e 61 6d 65 29 3d 3d 30  .zName,zName)==0
245f0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74   ){.          ut
24600 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
24610 2c 20 22 53 65 73 73 69 6f 6e 20 5c 22 25 73 5c  , "Session \"%s\
24620 22 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  " already exists
24630 5c 6e 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  \n", zName);.   
24640 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
24650 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
24660 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
24670 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 6e 53  .      if( p->nS
24680 65 73 73 69 6f 6e 3e 3d 41 72 72 61 79 53 69 7a  ession>=ArraySiz
24690 65 28 70 2d 3e 61 53 65 73 73 69 6f 6e 29 20 29  e(p->aSession) )
246a0 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  {.        raw_pr
246b0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 4d 61  intf(stderr, "Ma
246c0 78 69 6d 75 6d 20 6f 66 20 25 64 20 73 65 73 73  ximum of %d sess
246d0 69 6f 6e 73 5c 6e 22 2c 20 41 72 72 61 79 53 69  ions\n", ArraySi
246e0 7a 65 28 70 2d 3e 61 53 65 73 73 69 6f 6e 29 29  ze(p->aSession))
246f0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d  ;.        goto m
24700 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
24710 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
24720 70 53 65 73 73 69 6f 6e 20 3d 20 26 70 2d 3e 61  pSession = &p->a
24730 53 65 73 73 69 6f 6e 5b 70 2d 3e 6e 53 65 73 73  Session[p->nSess
24740 69 6f 6e 5d 3b 0a 20 20 20 20 20 20 72 63 20 3d  ion];.      rc =
24750 20 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f   sqlite3session_
24760 63 72 65 61 74 65 28 70 2d 3e 64 62 2c 20 61 7a  create(p->db, az
24770 43 6d 64 5b 31 5d 2c 20 26 70 53 65 73 73 69 6f  Cmd[1], &pSessio
24780 6e 2d 3e 70 29 3b 0a 20 20 20 20 20 20 69 66 28  n->p);.      if(
24790 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 72   rc ){.        r
247a0 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  aw_printf(stderr
247b0 2c 20 22 43 61 6e 6e 6f 74 20 6f 70 65 6e 20 73  , "Cannot open s
247c0 65 73 73 69 6f 6e 3a 20 65 72 72 6f 72 20 63 6f  ession: error co
247d0 64 65 3d 25 64 5c 6e 22 2c 20 72 63 29 3b 0a 20  de=%d\n", rc);. 
247e0 20 20 20 20 20 20 20 72 63 20 3d 20 30 3b 0a 20         rc = 0;. 
247f0 20 20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61         goto meta
24800 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20  _command_exit;. 
24810 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 53 65       }.      pSe
24820 73 73 69 6f 6e 2d 3e 6e 46 69 6c 74 65 72 20 3d  ssion->nFilter =
24830 20 30 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   0;.      sqlite
24840 33 73 65 73 73 69 6f 6e 5f 74 61 62 6c 65 5f 66  3session_table_f
24850 69 6c 74 65 72 28 70 53 65 73 73 69 6f 6e 2d 3e  ilter(pSession->
24860 70 2c 20 73 65 73 73 69 6f 6e 5f 66 69 6c 74 65  p, session_filte
24870 72 2c 20 70 53 65 73 73 69 6f 6e 29 3b 0a 20 20  r, pSession);.  
24880 20 20 20 20 70 2d 3e 6e 53 65 73 73 69 6f 6e 2b      p->nSession+
24890 2b 3b 0a 20 20 20 20 20 20 70 53 65 73 73 69 6f  +;.      pSessio
248a0 6e 2d 3e 7a 4e 61 6d 65 20 3d 20 73 71 6c 69 74  n->zName = sqlit
248b0 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c  e3_mprintf("%s",
248c0 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c   zName);.    }el
248d0 73 65 0a 20 20 20 20 2f 2a 20 49 66 20 6e 6f 20  se.    /* If no 
248e0 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65 20 6d 61 74  command name mat
248f0 63 68 65 73 2c 20 73 68 6f 77 20 61 20 73 79 6e  ches, show a syn
24900 74 61 78 20 65 72 72 6f 72 20 2a 2f 0a 20 20 20  tax error */.   
24910 20 73 65 73 73 69 6f 6e 5f 73 79 6e 74 61 78 5f   session_syntax_
24920 65 72 72 6f 72 3a 0a 20 20 20 20 73 65 73 73 69  error:.    sessi
24930 6f 6e 5f 68 65 6c 70 28 70 29 3b 0a 20 20 7d 65  on_help(p);.  }e
24940 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  lse.#endif..#ifd
24950 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
24960 20 20 2f 2a 20 55 6e 64 6f 63 75 6d 65 6e 74 65    /* Undocumente
24970 64 20 63 6f 6d 6d 61 6e 64 73 20 66 6f 72 20 69  d commands for i
24980 6e 74 65 72 6e 61 6c 20 74 65 73 74 69 6e 67 2e  nternal testing.
24990 20 20 53 75 62 6a 65 63 74 20 74 6f 20 63 68 61    Subject to cha
249a0 6e 67 65 0a 20 20 2a 2a 20 77 69 74 68 6f 75 74  nge.  ** without
249b0 20 6e 6f 74 69 63 65 2e 20 2a 2f 0a 20 20 69 66   notice. */.  if
249c0 28 20 63 3d 3d 27 73 27 20 26 26 20 6e 3e 3d 31  ( c=='s' && n>=1
249d0 30 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41  0 && strncmp(azA
249e0 72 67 5b 30 5d 2c 20 22 73 65 6c 66 74 65 73 74  rg[0], "selftest
249f0 2d 22 2c 20 39 29 3d 3d 30 20 29 7b 0a 20 20 20  -", 9)==0 ){.   
24a00 20 69 66 28 20 73 74 72 6e 63 6d 70 28 61 7a 41   if( strncmp(azA
24a10 72 67 5b 30 5d 2b 39 2c 20 22 62 6f 6f 6c 65 61  rg[0]+9, "boolea
24a20 6e 22 2c 20 6e 2d 39 29 3d 3d 30 20 29 7b 0a 20  n", n-9)==0 ){. 
24a30 20 20 20 20 20 69 6e 74 20 69 2c 20 76 3b 0a 20       int i, v;. 
24a40 20 20 20 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c       for(i=1; i<
24a50 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
24a60 20 20 20 20 76 20 3d 20 62 6f 6f 6c 65 61 6e 56      v = booleanV
24a70 61 6c 75 65 28 61 7a 41 72 67 5b 69 5d 29 3b 0a  alue(azArg[i]);.
24a80 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
24a90 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 73 3a  ntf(p->out, "%s:
24aa0 20 25 64 20 30 78 25 78 5c 6e 22 2c 20 61 7a 41   %d 0x%x\n", azA
24ab0 72 67 5b 69 5d 2c 20 76 2c 20 76 29 3b 0a 20 20  rg[i], v, v);.  
24ac0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
24ad0 69 66 28 20 73 74 72 6e 63 6d 70 28 61 7a 41 72  if( strncmp(azAr
24ae0 67 5b 30 5d 2b 39 2c 20 22 69 6e 74 65 67 65 72  g[0]+9, "integer
24af0 22 2c 20 6e 2d 39 29 3d 3d 30 20 29 7b 0a 20 20  ", n-9)==0 ){.  
24b00 20 20 20 20 69 6e 74 20 69 3b 20 73 71 6c 69 74      int i; sqlit
24b10 65 33 5f 69 6e 74 36 34 20 76 3b 0a 20 20 20 20  e3_int64 v;.    
24b20 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 6e 41 72    for(i=1; i<nAr
24b30 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  g; i++){.       
24b40 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b   char zBuf[200];
24b50 0a 20 20 20 20 20 20 20 20 76 20 3d 20 69 6e 74  .        v = int
24b60 65 67 65 72 56 61 6c 75 65 28 61 7a 41 72 67 5b  egerValue(azArg[
24b70 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  i]);.        sql
24b80 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73 69  ite3_snprintf(si
24b90 7a 65 6f 66 28 7a 42 75 66 29 2c 7a 42 75 66 2c  zeof(zBuf),zBuf,
24ba0 22 25 73 3a 20 25 6c 6c 64 20 30 78 25 6c 6c 78  "%s: %lld 0x%llx
24bb0 5c 6e 22 2c 20 61 7a 41 72 67 5b 69 5d 2c 76 2c  \n", azArg[i],v,
24bc0 76 29 3b 0a 20 20 20 20 20 20 20 20 75 74 66 38  v);.        utf8
24bd0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
24be0 22 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 20  "%s", zBuf);.   
24bf0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
24c00 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  se.#endif..  if(
24c10 20 63 3d 3d 27 73 27 20 26 26 20 73 74 72 6e 63   c=='s' && strnc
24c20 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 65  mp(azArg[0], "se
24c30 70 61 72 61 74 6f 72 22 2c 20 6e 29 3d 3d 30 20  parator", n)==0 
24c40 29 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3c  ){.    if( nArg<
24c50 32 20 7c 7c 20 6e 41 72 67 3e 33 20 29 7b 0a 20  2 || nArg>3 ){. 
24c60 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
24c70 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
24c80 2e 73 65 70 61 72 61 74 6f 72 20 43 4f 4c 20 3f  .separator COL ?
24c90 52 4f 57 3f 5c 6e 22 29 3b 0a 20 20 20 20 20 20  ROW?\n");.      
24ca0 72 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  rc = 1;.    }.  
24cb0 20 20 69 66 28 20 6e 41 72 67 3e 3d 32 20 29 7b    if( nArg>=2 ){
24cc0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
24cd0 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70  nprintf(sizeof(p
24ce0 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c  ->colSeparator),
24cf0 20 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72   p->colSeparator
24d00 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
24d10 20 20 20 20 20 20 20 20 20 22 25 2e 2a 73 22 2c           "%.*s",
24d20 20 28 69 6e 74 29 41 72 72 61 79 53 69 7a 65 28   (int)ArraySize(
24d30 70 2d 3e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29  p->colSeparator)
24d40 2d 31 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  -1, azArg[1]);. 
24d50 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e 41 72     }.    if( nAr
24d60 67 3e 3d 33 20 29 7b 0a 20 20 20 20 20 20 73 71  g>=3 ){.      sq
24d70 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 73  lite3_snprintf(s
24d80 69 7a 65 6f 66 28 70 2d 3e 72 6f 77 53 65 70 61  izeof(p->rowSepa
24d90 72 61 74 6f 72 29 2c 20 70 2d 3e 72 6f 77 53 65  rator), p->rowSe
24da0 70 61 72 61 74 6f 72 2c 0a 20 20 20 20 20 20 20  parator,.       
24db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24dc0 22 25 2e 2a 73 22 2c 20 28 69 6e 74 29 41 72 72  "%.*s", (int)Arr
24dd0 61 79 53 69 7a 65 28 70 2d 3e 72 6f 77 53 65 70  aySize(p->rowSep
24de0 61 72 61 74 6f 72 29 2d 31 2c 20 61 7a 41 72 67  arator)-1, azArg
24df0 5b 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  [2]);.    }.  }e
24e00 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27 73  lse..  if( c=='s
24e10 27 0a 20 20 20 26 26 20 28 73 74 72 6e 63 6d 70  '.   && (strncmp
24e20 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 68 65 6c  (azArg[0], "shel
24e30 6c 22 2c 20 6e 29 3d 3d 30 20 7c 7c 20 73 74 72  l", n)==0 || str
24e40 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 22 73  ncmp(azArg[0],"s
24e50 79 73 74 65 6d 22 2c 6e 29 3d 3d 30 29 0a 20 20  ystem",n)==0).  
24e60 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6d  ){.    char *zCm
24e70 64 3b 0a 20 20 20 20 69 6e 74 20 69 2c 20 78 3b  d;.    int i, x;
24e80 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3c 32 20  .    if( nArg<2 
24e90 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69  ){.      raw_pri
24ea0 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61  ntf(stderr, "Usa
24eb0 67 65 3a 20 2e 73 79 73 74 65 6d 20 43 4f 4d 4d  ge: .system COMM
24ec0 41 4e 44 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  AND\n");.      r
24ed0 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74  c = 1;.      got
24ee0 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
24ef0 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a  xit;.    }.    z
24f00 43 6d 64 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  Cmd = sqlite3_mp
24f10 72 69 6e 74 66 28 73 74 72 63 68 72 28 61 7a 41  rintf(strchr(azA
24f20 72 67 5b 31 5d 2c 27 20 27 29 3d 3d 30 3f 22 25  rg[1],' ')==0?"%
24f30 73 22 3a 22 5c 22 25 73 5c 22 22 2c 20 61 7a 41  s":"\"%s\"", azA
24f40 72 67 5b 31 5d 29 3b 0a 20 20 20 20 66 6f 72 28  rg[1]);.    for(
24f50 69 3d 32 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=2; i<nArg; i++
24f60 29 7b 0a 20 20 20 20 20 20 7a 43 6d 64 20 3d 20  ){.      zCmd = 
24f70 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
24f80 73 74 72 63 68 72 28 61 7a 41 72 67 5b 69 5d 2c  strchr(azArg[i],
24f90 27 20 27 29 3d 3d 30 3f 22 25 7a 20 25 73 22 3a  ' ')==0?"%z %s":
24fa0 22 25 7a 20 5c 22 25 73 5c 22 22 2c 0a 20 20 20  "%z \"%s\"",.   
24fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fc0 20 20 20 20 20 20 20 20 20 20 7a 43 6d 64 2c 20            zCmd, 
24fd0 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 7d  azArg[i]);.    }
24fe0 0a 20 20 20 20 78 20 3d 20 73 79 73 74 65 6d 28  .    x = system(
24ff0 7a 43 6d 64 29 3b 0a 20 20 20 20 73 71 6c 69 74  zCmd);.    sqlit
25000 65 33 5f 66 72 65 65 28 7a 43 6d 64 29 3b 0a 20  e3_free(zCmd);. 
25010 20 20 20 69 66 28 20 78 20 29 20 72 61 77 5f 70     if( x ) raw_p
25020 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 53  rintf(stderr, "S
25030 79 73 74 65 6d 20 63 6f 6d 6d 61 6e 64 20 72 65  ystem command re
25040 74 75 72 6e 73 20 25 64 5c 6e 22 2c 20 78 29 3b  turns %d\n", x);
25050 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
25060 63 3d 3d 27 73 27 20 26 26 20 73 74 72 6e 63 6d  c=='s' && strncm
25070 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 73 68 6f  p(azArg[0], "sho
25080 77 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  w", n)==0 ){.   
25090 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
250a0 61 72 20 2a 61 7a 42 6f 6f 6c 5b 5d 20 3d 20 7b  ar *azBool[] = {
250b0 20 22 6f 66 66 22 2c 20 22 6f 6e 22 2c 20 22 66   "off", "on", "f
250c0 75 6c 6c 22 2c 20 22 75 6e 6b 22 20 7d 3b 0a 20  ull", "unk" };. 
250d0 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 66     int i;.    if
250e0 28 20 6e 41 72 67 21 3d 31 20 29 7b 0a 20 20 20  ( nArg!=1 ){.   
250f0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
25100 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 73  derr, "Usage: .s
25110 68 6f 77 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  how\n");.      r
25120 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f 74  c = 1;.      got
25130 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65  o meta_command_e
25140 78 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 75  xit;.    }.    u
25150 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75  tf8_printf(p->ou
25160 74 2c 20 22 25 31 32 2e 31 32 73 3a 20 25 73 5c  t, "%12.12s: %s\
25170 6e 22 2c 22 65 63 68 6f 22 2c 20 61 7a 42 6f 6f  n","echo", azBoo
25180 6c 5b 70 2d 3e 65 63 68 6f 4f 6e 21 3d 30 5d 29  l[p->echoOn!=0])
25190 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  ;.    utf8_print
251a0 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31  f(p->out, "%12.1
251b0 32 73 3a 20 25 73 5c 6e 22 2c 22 65 71 70 22 2c  2s: %s\n","eqp",
251c0 20 61 7a 42 6f 6f 6c 5b 70 2d 3e 61 75 74 6f 45   azBool[p->autoE
251d0 51 50 26 33 5d 29 3b 0a 20 20 20 20 75 74 66 38  QP&3]);.    utf8
251e0 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
251f0 22 25 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c  "%12.12s: %s\n",
25200 22 65 78 70 6c 61 69 6e 22 2c 0a 20 20 20 20 20  "explain",.     
25210 20 20 20 20 70 2d 3e 6d 6f 64 65 3d 3d 4d 4f 44      p->mode==MOD
25220 45 5f 45 78 70 6c 61 69 6e 20 3f 20 22 6f 6e 22  E_Explain ? "on"
25230 20 3a 20 70 2d 3e 61 75 74 6f 45 78 70 6c 61 69   : p->autoExplai
25240 6e 20 3f 20 22 61 75 74 6f 22 20 3a 20 22 6f 66  n ? "auto" : "of
25250 66 22 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72  f");.    utf8_pr
25260 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31 32  intf(p->out,"%12
25270 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 68 65 61  .12s: %s\n","hea
25280 64 65 72 73 22 2c 20 61 7a 42 6f 6f 6c 5b 70 2d  ders", azBool[p-
25290 3e 73 68 6f 77 48 65 61 64 65 72 21 3d 30 5d 29  >showHeader!=0])
252a0 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74  ;.    utf8_print
252b0 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e 31  f(p->out, "%12.1
252c0 32 73 3a 20 25 73 5c 6e 22 2c 22 6d 6f 64 65 22  2s: %s\n","mode"
252d0 2c 20 6d 6f 64 65 44 65 73 63 72 5b 70 2d 3e 6d  , modeDescr[p->m
252e0 6f 64 65 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f  ode]);.    utf8_
252f0 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
25300 25 31 32 2e 31 32 73 3a 20 22 2c 20 22 6e 75 6c  %12.12s: ", "nul
25310 6c 76 61 6c 75 65 22 29 3b 0a 20 20 20 20 20 20  lvalue");.      
25320 6f 75 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28  output_c_string(
25330 70 2d 3e 6f 75 74 2c 20 70 2d 3e 6e 75 6c 6c 56  p->out, p->nullV
25340 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 72 61 77  alue);.      raw
25350 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20  _printf(p->out, 
25360 22 5c 6e 22 29 3b 0a 20 20 20 20 75 74 66 38 5f  "\n");.    utf8_
25370 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22 25  printf(p->out,"%
25380 31 32 2e 31 32 73 3a 20 25 73 5c 6e 22 2c 22 6f  12.12s: %s\n","o
25390 75 74 70 75 74 22 2c 0a 20 20 20 20 20 20 20 20  utput",.        
253a0 20 20 20 20 73 74 72 6c 65 6e 33 30 28 70 2d 3e      strlen30(p->
253b0 6f 75 74 66 69 6c 65 29 20 3f 20 70 2d 3e 6f 75  outfile) ? p->ou
253c0 74 66 69 6c 65 20 3a 20 22 73 74 64 6f 75 74 22  tfile : "stdout"
253d0 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
253e0 74 66 28 70 2d 3e 6f 75 74 2c 22 25 31 32 2e 31  tf(p->out,"%12.1
253f0 32 73 3a 20 22 2c 20 22 63 6f 6c 73 65 70 61 72  2s: ", "colsepar
25400 61 74 6f 72 22 29 3b 0a 20 20 20 20 20 20 6f 75  ator");.      ou
25410 74 70 75 74 5f 63 5f 73 74 72 69 6e 67 28 70 2d  tput_c_string(p-
25420 3e 6f 75 74 2c 20 70 2d 3e 63 6f 6c 53 65 70 61  >out, p->colSepa
25430 72 61 74 6f 72 29 3b 0a 20 20 20 20 20 20 72 61  rator);.      ra
25440 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
25450 20 22 5c 6e 22 29 3b 0a 20 20 20 20 75 74 66 38   "\n");.    utf8
25460 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 22  _printf(p->out,"
25470 25 31 32 2e 31 32 73 3a 20 22 2c 20 22 72 6f 77  %12.12s: ", "row
25480 73 65 70 61 72 61 74 6f 72 22 29 3b 0a 20 20 20  separator");.   
25490 20 20 20 6f 75 74 70 75 74 5f 63 5f 73 74 72 69     output_c_stri
254a0 6e 67 28 70 2d 3e 6f 75 74 2c 20 70 2d 3e 72 6f  ng(p->out, p->ro
254b0 77 53 65 70 61 72 61 74 6f 72 29 3b 0a 20 20 20  wSeparator);.   
254c0 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70 2d     raw_printf(p-
254d0 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 20 20 20  >out, "\n");.   
254e0 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e   utf8_printf(p->
254f0 6f 75 74 2c 20 22 25 31 32 2e 31 32 73 3a 20 25  out, "%12.12s: %
25500 73 5c 6e 22 2c 22 73 74 61 74 73 22 2c 20 61 7a  s\n","stats", az
25510 42 6f 6f 6c 5b 70 2d 3e 73 74 61 74 73 4f 6e 21  Bool[p->statsOn!
25520 3d 30 5d 29 3b 0a 20 20 20 20 75 74 66 38 5f 70  =0]);.    utf8_p
25530 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25  rintf(p->out, "%
25540 31 32 2e 31 32 73 3a 20 22 2c 20 22 77 69 64 74  12.12s: ", "widt
25550 68 22 29 3b 0a 20 20 20 20 66 6f 72 20 28 69 3d  h");.    for (i=
25560 30 3b 69 3c 28 69 6e 74 29 41 72 72 61 79 53 69  0;i<(int)ArraySi
25570 7a 65 28 70 2d 3e 63 6f 6c 57 69 64 74 68 29 20  ze(p->colWidth) 
25580 26 26 20 70 2d 3e 63 6f 6c 57 69 64 74 68 5b 69  && p->colWidth[i
25590 5d 20 21 3d 20 30 3b 69 2b 2b 29 20 7b 0a 20 20  ] != 0;i++) {.  
255a0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
255b0 2d 3e 6f 75 74 2c 20 22 25 64 20 22 2c 20 70 2d  ->out, "%d ", p-
255c0 3e 63 6f 6c 57 69 64 74 68 5b 69 5d 29 3b 0a 20  >colWidth[i]);. 
255d0 20 20 20 7d 0a 20 20 20 20 72 61 77 5f 70 72 69     }.    raw_pri
255e0 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22  ntf(p->out, "\n"
255f0 29 3b 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e  );.    utf8_prin
25600 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 31 32 2e  tf(p->out, "%12.
25610 31 32 73 3a 20 25 73 5c 6e 22 2c 20 22 66 69 6c  12s: %s\n", "fil
25620 65 6e 61 6d 65 22 2c 0a 20 20 20 20 20 20 20 20  ename",.        
25630 20 20 20 20 20 20 20 20 70 2d 3e 7a 44 62 46 69          p->zDbFi
25640 6c 65 6e 61 6d 65 20 3f 20 70 2d 3e 7a 44 62 46  lename ? p->zDbF
25650 69 6c 65 6e 61 6d 65 20 3a 20 22 22 29 3b 0a 20  ilename : "");. 
25660 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d   }else..  if( c=
25670 3d 27 73 27 20 26 26 20 73 74 72 6e 63 6d 70 28  ='s' && strncmp(
25680 61 7a 41 72 67 5b 30 5d 2c 20 22 73 74 61 74 73  azArg[0], "stats
25690 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", n)==0 ){.    
256a0 69 66 28 20 6e 41 72 67 3d 3d 32 20 29 7b 0a 20  if( nArg==2 ){. 
256b0 20 20 20 20 20 70 2d 3e 73 74 61 74 73 4f 6e 20       p->statsOn 
256c0 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61  = booleanValue(a
256d0 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65  zArg[1]);.    }e
256e0 6c 73 65 20 69 66 28 20 6e 41 72 67 3d 3d 31 20  lse if( nArg==1 
256f0 29 7b 0a 20 20 20 20 20 20 64 69 73 70 6c 61 79  ){.      display
25700 5f 73 74 61 74 73 28 70 2d 3e 64 62 2c 20 70 2c  _stats(p->db, p,
25710 20 30 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a   0);.    }else{.
25720 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
25730 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
25740 20 2e 73 74 61 74 73 20 3f 6f 6e 7c 6f 66 66 3f   .stats ?on|off?
25750 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
25760 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
25770 65 0a 0a 20 20 69 66 28 20 28 63 3d 3d 27 74 27  e..  if( (c=='t'
25780 20 26 26 20 6e 3e 31 20 26 26 20 73 74 72 6e 63   && n>1 && strnc
25790 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 74 61  mp(azArg[0], "ta
257a0 62 6c 65 73 22 2c 20 6e 29 3d 3d 30 29 0a 20 20  bles", n)==0).  
257b0 20 7c 7c 20 28 63 3d 3d 27 69 27 20 26 26 20 28   || (c=='i' && (
257c0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
257d0 2c 20 22 69 6e 64 69 63 65 73 22 2c 20 6e 29 3d  , "indices", n)=
257e0 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =0.             
257f0 20 20 20 20 7c 7c 20 73 74 72 6e 63 6d 70 28 61      || strncmp(a
25800 7a 41 72 67 5b 30 5d 2c 20 22 69 6e 64 65 78 65  zArg[0], "indexe
25810 73 22 2c 20 6e 29 3d 3d 30 29 20 29 0a 20 20 29  s", n)==0) ).  )
25820 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74  {.    sqlite3_st
25830 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 20 20 63  mt *pStmt;.    c
25840 68 61 72 20 2a 2a 61 7a 52 65 73 75 6c 74 3b 0a  har **azResult;.
25850 20 20 20 20 69 6e 74 20 6e 52 6f 77 2c 20 6e 41      int nRow, nA
25860 6c 6c 6f 63 3b 0a 20 20 20 20 63 68 61 72 20 2a  lloc;.    char *
25870 7a 53 71 6c 20 3d 20 30 3b 0a 20 20 20 20 69 6e  zSql = 0;.    in
25880 74 20 69 69 3b 0a 20 20 20 20 6f 70 65 6e 5f 64  t ii;.    open_d
25890 62 28 70 2c 20 30 29 3b 0a 20 20 20 20 72 63 20  b(p, 0);.    rc 
258a0 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
258b0 65 5f 76 32 28 70 2d 3e 64 62 2c 20 22 50 52 41  e_v2(p->db, "PRA
258c0 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73  GMA database_lis
258d0 74 22 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20  t", -1, &pStmt, 
258e0 30 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  0);.    if( rc )
258f0 20 72 65 74 75 72 6e 20 73 68 65 6c 6c 44 61 74   return shellDat
25900 61 62 61 73 65 45 72 72 6f 72 28 70 2d 3e 64 62  abaseError(p->db
25910 29 3b 0a 0a 20 20 20 20 2f 2a 20 43 72 65 61 74  );..    /* Creat
25920 65 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  e an SQL stateme
25930 6e 74 20 74 6f 20 71 75 65 72 79 20 66 6f 72 20  nt to query for 
25940 74 68 65 20 6c 69 73 74 20 6f 66 20 74 61 62 6c  the list of tabl
25950 65 73 20 69 6e 20 74 68 65 0a 20 20 20 20 2a 2a  es in the.    **
25960 20 6d 61 69 6e 20 61 6e 64 20 61 6c 6c 20 61 74   main and all at
25970 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
25980 20 77 68 65 72 65 20 74 68 65 20 74 61 62 6c 65   where the table
25990 20 6e 61 6d 65 20 6d 61 74 63 68 65 73 20 74 68   name matches th
259a0 65 0a 20 20 20 20 2a 2a 20 4c 49 4b 45 20 70 61  e.    ** LIKE pa
259b0 74 74 65 72 6e 20 62 6f 75 6e 64 20 74 6f 20 76  ttern bound to v
259c0 61 72 69 61 62 6c 65 20 22 3f 31 22 2e 20 2a 2f  ariable "?1". */
259d0 0a 20 20 20 20 69 66 28 20 63 3d 3d 27 74 27 20  .    if( c=='t' 
259e0 29 7b 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d 20  ){.      zSql = 
259f0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
25a00 0a 20 20 20 20 20 20 20 20 20 20 22 53 45 4c 45  .          "SELE
25a10 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
25a20 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20  ite_master".    
25a30 20 20 20 20 20 20 22 20 57 48 45 52 45 20 74 79        " WHERE ty
25a40 70 65 20 49 4e 20 28 27 74 61 62 6c 65 27 2c 27  pe IN ('table','
25a50 76 69 65 77 27 29 22 0a 20 20 20 20 20 20 20 20  view')".        
25a60 20 20 22 20 20 20 41 4e 44 20 6e 61 6d 65 20 4e    "   AND name N
25a70 4f 54 20 4c 49 4b 45 20 27 73 71 6c 69 74 65 5f  OT LIKE 'sqlite_
25a80 25 25 27 22 0a 20 20 20 20 20 20 20 20 20 20 22  %%'".          "
25a90 20 20 20 41 4e 44 20 6e 61 6d 65 20 4c 49 4b 45     AND name LIKE
25aa0 20 3f 31 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65   ?1");.    }else
25ab0 20 69 66 28 20 6e 41 72 67 3e 32 20 29 7b 0a 20   if( nArg>2 ){. 
25ac0 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 61 6e       /* It is an
25ad0 20 68 69 73 74 6f 72 69 63 61 6c 20 61 63 63 69   historical acci
25ae0 64 65 6e 74 20 74 68 61 74 20 74 68 65 20 2e 69  dent that the .i
25af0 6e 64 65 78 65 73 20 63 6f 6d 6d 61 6e 64 20 73  ndexes command s
25b00 68 6f 77 73 20 61 6e 20 65 72 72 6f 72 0a 20 20  hows an error.  
25b10 20 20 20 20 2a 2a 20 77 68 65 6e 20 63 61 6c 6c      ** when call
25b20 65 64 20 77 69 74 68 20 74 68 65 20 77 72 6f 6e  ed with the wron
25b30 67 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  g number of argu
25b40 6d 65 6e 74 73 20 77 68 65 72 65 61 73 20 74 68  ments whereas th
25b50 65 20 2e 74 61 62 6c 65 73 0a 20 20 20 20 20 20  e .tables.      
25b60 2a 2a 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20  ** command does 
25b70 6e 6f 74 2e 20 2a 2f 0a 20 20 20 20 20 20 72 61  not. */.      ra
25b80 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  w_printf(stderr,
25b90 20 22 55 73 61 67 65 3a 20 2e 69 6e 64 65 78 65   "Usage: .indexe
25ba0 73 20 3f 4c 49 4b 45 2d 50 41 54 54 45 52 4e 3f  s ?LIKE-PATTERN?
25bb0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
25bc0 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
25bd0 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
25be0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
25bf0 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65     zSql = sqlite
25c00 33 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20 20 20  3_mprintf(.     
25c10 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d       "SELECT nam
25c20 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
25c30 73 74 65 72 22 0a 20 20 20 20 20 20 20 20 20 20  ster".          
25c40 22 20 57 48 45 52 45 20 74 79 70 65 3d 27 69 6e  " WHERE type='in
25c50 64 65 78 27 22 0a 20 20 20 20 20 20 20 20 20 20  dex'".          
25c60 22 20 20 20 41 4e 44 20 74 62 6c 5f 6e 61 6d 65  "   AND tbl_name
25c70 20 4c 49 4b 45 20 3f 31 22 29 3b 0a 20 20 20 20   LIKE ?1");.    
25c80 7d 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20  }.    for(ii=0; 
25c90 7a 53 71 6c 20 26 26 20 73 71 6c 69 74 65 33 5f  zSql && sqlite3_
25ca0 73 74 65 70 28 70 53 74 6d 74 29 3d 3d 53 51 4c  step(pStmt)==SQL
25cb0 49 54 45 5f 52 4f 57 3b 20 69 69 2b 2b 29 7b 0a  ITE_ROW; ii++){.
25cc0 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
25cd0 20 2a 7a 44 62 4e 61 6d 65 20 3d 20 28 63 6f 6e   *zDbName = (con
25ce0 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
25cf0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
25d00 6d 74 2c 20 31 29 3b 0a 20 20 20 20 20 20 69 66  mt, 1);.      if
25d10 28 20 7a 44 62 4e 61 6d 65 3d 3d 30 20 7c 7c 20  ( zDbName==0 || 
25d20 69 69 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  ii==0 ) continue
25d30 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27  ;.      if( c=='
25d40 74 27 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 53  t' ){.        zS
25d50 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
25d60 69 6e 74 66 28 0a 20 20 20 20 20 20 20 20 20 20  intf(.          
25d70 20 20 20 20 20 20 20 22 25 7a 20 55 4e 49 4f 4e         "%z UNION
25d80 20 41 4c 4c 20 22 0a 20 20 20 20 20 20 20 20 20   ALL ".         
25d90 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20          "SELECT 
25da0 27 25 71 2e 27 20 7c 7c 20 6e 61 6d 65 20 46 52  '%q.' || name FR
25db0 4f 4d 20 5c 22 25 77 5c 22 2e 73 71 6c 69 74 65  OM \"%w\".sqlite
25dc0 5f 6d 61 73 74 65 72 22 0a 20 20 20 20 20 20 20  _master".       
25dd0 20 20 20 20 20 20 20 20 20 20 22 20 57 48 45 52            " WHER
25de0 45 20 74 79 70 65 20 49 4e 20 28 27 74 61 62 6c  E type IN ('tabl
25df0 65 27 2c 27 76 69 65 77 27 29 22 0a 20 20 20 20  e','view')".    
25e00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 20               "  
25e10 20 41 4e 44 20 6e 61 6d 65 20 4e 4f 54 20 4c 49   AND name NOT LI
25e20 4b 45 20 27 73 71 6c 69 74 65 5f 25 25 27 22 0a  KE 'sqlite_%%'".
25e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e40 20 22 20 20 20 41 4e 44 20 6e 61 6d 65 20 4c 49   "   AND name LI
25e50 4b 45 20 3f 31 22 2c 20 7a 53 71 6c 2c 20 7a 44  KE ?1", zSql, zD
25e60 62 4e 61 6d 65 2c 20 7a 44 62 4e 61 6d 65 29 3b  bName, zDbName);
25e70 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
25e80 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c        zSql = sql
25e90 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 0a 20 20  ite3_mprintf(.  
25ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
25eb0 25 7a 20 55 4e 49 4f 4e 20 41 4c 4c 20 22 0a 20  %z UNION ALL ". 
25ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ed0 22 53 45 4c 45 43 54 20 27 25 71 2e 27 20 7c 7c  "SELECT '%q.' ||
25ee0 20 6e 61 6d 65 20 46 52 4f 4d 20 5c 22 25 77 5c   name FROM \"%w\
25ef0 22 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22  ".sqlite_master"
25f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25f10 20 20 22 20 57 48 45 52 45 20 74 79 70 65 3d 27    " WHERE type='
25f20 69 6e 64 65 78 27 22 0a 20 20 20 20 20 20 20 20  index'".        
25f30 20 20 20 20 20 20 20 20 20 22 20 20 20 41 4e 44           "   AND
25f40 20 74 62 6c 5f 6e 61 6d 65 20 4c 49 4b 45 20 3f   tbl_name LIKE ?
25f50 31 22 2c 20 7a 53 71 6c 2c 20 7a 44 62 4e 61 6d  1", zSql, zDbNam
25f60 65 2c 20 7a 44 62 4e 61 6d 65 29 3b 0a 20 20 20  e, zDbName);.   
25f70 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72     }.    }.    r
25f80 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  c = sqlite3_fina
25f90 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20  lize(pStmt);.   
25fa0 20 69 66 28 20 7a 53 71 6c 20 26 26 20 72 63 3d   if( zSql && rc=
25fb0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
25fc0 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74      zSql = sqlit
25fd0 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 7a 20 4f  e3_mprintf("%z O
25fe0 52 44 45 52 20 42 59 20 31 22 2c 20 7a 53 71 6c  RDER BY 1", zSql
25ff0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 53 71  );.      if( zSq
26000 6c 20 29 20 72 63 20 3d 20 73 71 6c 69 74 65 33  l ) rc = sqlite3
26010 5f 70 72 65 70 61 72 65 5f 76 32 28 70 2d 3e 64  _prepare_v2(p->d
26020 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70 53  b, zSql, -1, &pS
26030 74 6d 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  tmt, 0);.    }. 
26040 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
26050 7a 53 71 6c 29 3b 0a 20 20 20 20 69 66 28 20 21  zSql);.    if( !
26060 7a 53 71 6c 20 29 20 72 65 74 75 72 6e 20 73 68  zSql ) return sh
26070 65 6c 6c 4e 6f 6d 65 6d 45 72 72 6f 72 28 29 3b  ellNomemError();
26080 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 72 65  .    if( rc ) re
26090 74 75 72 6e 20 73 68 65 6c 6c 44 61 74 61 62 61  turn shellDataba
260a0 73 65 45 72 72 6f 72 28 70 2d 3e 64 62 29 3b 0a  seError(p->db);.
260b0 0a 20 20 20 20 2f 2a 20 52 75 6e 20 74 68 65 20  .    /* Run the 
260c0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 70 72  SQL statement pr
260d0 65 70 61 72 65 64 20 62 79 20 74 68 65 20 61 62  epared by the ab
260e0 6f 76 65 20 62 6c 6f 63 6b 2e 20 53 74 6f 72 65  ove block. Store
260f0 20 74 68 65 20 72 65 73 75 6c 74 73 0a 20 20 20   the results.   
26100 20 2a 2a 20 61 73 20 61 6e 20 61 72 72 61 79 20   ** as an array 
26110 6f 66 20 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  of nul-terminate
26120 64 20 73 74 72 69 6e 67 73 20 69 6e 20 61 7a 52  d strings in azR
26130 65 73 75 6c 74 5b 5d 2e 20 20 2a 2f 0a 20 20 20  esult[].  */.   
26140 20 6e 52 6f 77 20 3d 20 6e 41 6c 6c 6f 63 20 3d   nRow = nAlloc =
26150 20 30 3b 0a 20 20 20 20 61 7a 52 65 73 75 6c 74   0;.    azResult
26160 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 6e 41   = 0;.    if( nA
26170 72 67 3e 31 20 29 7b 0a 20 20 20 20 20 20 73 71  rg>1 ){.      sq
26180 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
26190 70 53 74 6d 74 2c 20 31 2c 20 61 7a 41 72 67 5b  pStmt, 1, azArg[
261a0 31 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54  1], -1, SQLITE_T
261b0 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 7d  RANSIENT);.    }
261c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69  else{.      sqli
261d0 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53  te3_bind_text(pS
261e0 74 6d 74 2c 20 31 2c 20 22 25 22 2c 20 2d 31 2c  tmt, 1, "%", -1,
261f0 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
26200 0a 20 20 20 20 7d 0a 20 20 20 20 77 68 69 6c 65  .    }.    while
26210 28 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  ( sqlite3_step(p
26220 53 74 6d 74 29 3d 3d 53 51 4c 49 54 45 5f 52 4f  Stmt)==SQLITE_RO
26230 57 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e  W ){.      if( n
26240 52 6f 77 3e 3d 6e 41 6c 6c 6f 63 20 29 7b 0a 20  Row>=nAlloc ){. 
26250 20 20 20 20 20 20 20 63 68 61 72 20 2a 2a 61 7a         char **az
26260 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 69 6e 74  New;.        int
26270 20 6e 32 20 3d 20 6e 41 6c 6c 6f 63 2a 32 20 2b   n2 = nAlloc*2 +
26280 20 31 30 3b 0a 20 20 20 20 20 20 20 20 61 7a 4e   10;.        azN
26290 65 77 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 61  ew = sqlite3_rea
262a0 6c 6c 6f 63 36 34 28 61 7a 52 65 73 75 6c 74 2c  lloc64(azResult,
262b0 20 73 69 7a 65 6f 66 28 61 7a 52 65 73 75 6c 74   sizeof(azResult
262c0 5b 30 5d 29 2a 6e 32 29 3b 0a 20 20 20 20 20 20  [0])*n2);.      
262d0 20 20 69 66 28 20 61 7a 4e 65 77 3d 3d 30 20 29    if( azNew==0 )
262e0 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
262f0 20 73 68 65 6c 6c 4e 6f 6d 65 6d 45 72 72 6f 72   shellNomemError
26300 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72  ();.          br
26310 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  eak;.        }. 
26320 20 20 20 20 20 20 20 6e 41 6c 6c 6f 63 20 3d 20         nAlloc = 
26330 6e 32 3b 0a 20 20 20 20 20 20 20 20 61 7a 52 65  n2;.        azRe
26340 73 75 6c 74 20 3d 20 61 7a 4e 65 77 3b 0a 20 20  sult = azNew;.  
26350 20 20 20 20 7d 0a 20 20 20 20 20 20 61 7a 52 65      }.      azRe
26360 73 75 6c 74 5b 6e 52 6f 77 5d 20 3d 20 73 71 6c  sult[nRow] = sql
26370 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
26380 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ", sqlite3_colum
26390 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 30 29  n_text(pStmt, 0)
263a0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 30 3d 3d  );.      if( 0==
263b0 61 7a 52 65 73 75 6c 74 5b 6e 52 6f 77 5d 20 29  azResult[nRow] )
263c0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
263d0 68 65 6c 6c 4e 6f 6d 65 6d 45 72 72 6f 72 28 29  hellNomemError()
263e0 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
263f0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e  .      }.      n
26400 52 6f 77 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  Row++;.    }.   
26410 20 69 66 28 20 73 71 6c 69 74 65 33 5f 66 69 6e   if( sqlite3_fin
26420 61 6c 69 7a 65 28 70 53 74 6d 74 29 21 3d 53 51  alize(pStmt)!=SQ
26430 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
26440 20 72 63 20 3d 20 73 68 65 6c 6c 44 61 74 61 62   rc = shellDatab
26450 61 73 65 45 72 72 6f 72 28 70 2d 3e 64 62 29 3b  aseError(p->db);
26460 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 50  .    }..    /* P
26470 72 65 74 74 79 2d 70 72 69 6e 74 20 74 68 65 20  retty-print the 
26480 63 6f 6e 74 65 6e 74 73 20 6f 66 20 61 72 72 61  contents of arra
26490 79 20 61 7a 52 65 73 75 6c 74 5b 5d 20 74 6f 20  y azResult[] to 
264a0 74 68 65 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20  the output */.  
264b0 20 20 69 66 28 20 72 63 3d 3d 30 20 26 26 20 6e    if( rc==0 && n
264c0 52 6f 77 3e 30 20 29 7b 0a 20 20 20 20 20 20 69  Row>0 ){.      i
264d0 6e 74 20 6c 65 6e 2c 20 6d 61 78 6c 65 6e 20 3d  nt len, maxlen =
264e0 20 30 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c   0;.      int i,
264f0 20 6a 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 50   j;.      int nP
26500 72 69 6e 74 43 6f 6c 2c 20 6e 50 72 69 6e 74 52  rintCol, nPrintR
26510 6f 77 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  ow;.      for(i=
26520 30 3b 20 69 3c 6e 52 6f 77 3b 20 69 2b 2b 29 7b  0; i<nRow; i++){
26530 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 73  .        len = s
26540 74 72 6c 65 6e 33 30 28 61 7a 52 65 73 75 6c 74  trlen30(azResult
26550 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 69 66  [i]);.        if
26560 28 20 6c 65 6e 3e 6d 61 78 6c 65 6e 20 29 20 6d  ( len>maxlen ) m
26570 61 78 6c 65 6e 20 3d 20 6c 65 6e 3b 0a 20 20 20  axlen = len;.   
26580 20 20 20 7d 0a 20 20 20 20 20 20 6e 50 72 69 6e     }.      nPrin
26590 74 43 6f 6c 20 3d 20 38 30 2f 28 6d 61 78 6c 65  tCol = 80/(maxle
265a0 6e 2b 32 29 3b 0a 20 20 20 20 20 20 69 66 28 20  n+2);.      if( 
265b0 6e 50 72 69 6e 74 43 6f 6c 3c 31 20 29 20 6e 50  nPrintCol<1 ) nP
265c0 72 69 6e 74 43 6f 6c 20 3d 20 31 3b 0a 20 20 20  rintCol = 1;.   
265d0 20 20 20 6e 50 72 69 6e 74 52 6f 77 20 3d 20 28     nPrintRow = (
265e0 6e 52 6f 77 20 2b 20 6e 50 72 69 6e 74 43 6f 6c  nRow + nPrintCol
265f0 20 2d 20 31 29 2f 6e 50 72 69 6e 74 43 6f 6c 3b   - 1)/nPrintCol;
26600 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
26610 69 3c 6e 50 72 69 6e 74 52 6f 77 3b 20 69 2b 2b  i<nPrintRow; i++
26620 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a  ){.        for(j
26630 3d 69 3b 20 6a 3c 6e 52 6f 77 3b 20 6a 2b 3d 6e  =i; j<nRow; j+=n
26640 50 72 69 6e 74 52 6f 77 29 7b 0a 20 20 20 20 20  PrintRow){.     
26650 20 20 20 20 20 63 68 61 72 20 2a 7a 53 70 20 3d       char *zSp =
26660 20 6a 3c 6e 50 72 69 6e 74 52 6f 77 20 3f 20 22   j<nPrintRow ? "
26670 22 20 3a 20 22 20 20 22 3b 0a 20 20 20 20 20 20  " : "  ";.      
26680 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
26690 70 2d 3e 6f 75 74 2c 20 22 25 73 25 2d 2a 73 22  p->out, "%s%-*s"
266a0 2c 20 7a 53 70 2c 20 6d 61 78 6c 65 6e 2c 0a 20  , zSp, maxlen,. 
266b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266c0 20 20 20 20 20 61 7a 52 65 73 75 6c 74 5b 6a 5d       azResult[j]
266d0 20 3f 20 61 7a 52 65 73 75 6c 74 5b 6a 5d 3a 22   ? azResult[j]:"
266e0 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ");.        }.  
266f0 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
26700 28 70 2d 3e 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a  (p->out, "\n");.
26710 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
26720 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
26730 6e 52 6f 77 3b 20 69 69 2b 2b 29 20 73 71 6c 69  nRow; ii++) sqli
26740 74 65 33 5f 66 72 65 65 28 61 7a 52 65 73 75 6c  te3_free(azResul
26750 74 5b 69 69 5d 29 3b 0a 20 20 20 20 73 71 6c 69  t[ii]);.    sqli
26760 74 65 33 5f 66 72 65 65 28 61 7a 52 65 73 75 6c  te3_free(azResul
26770 74 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f  t);.  }else..  /
26780 2a 20 42 65 67 69 6e 20 72 65 64 69 72 65 63 74  * Begin redirect
26790 69 6e 67 20 6f 75 74 70 75 74 20 74 6f 20 74 68  ing output to th
267a0 65 20 66 69 6c 65 20 22 74 65 73 74 63 61 73 65  e file "testcase
267b0 2d 6f 75 74 2e 74 78 74 22 20 2a 2f 0a 20 20 69  -out.txt" */.  i
267c0 66 28 20 63 3d 3d 27 74 27 20 26 26 20 73 74 72  f( c=='t' && str
267d0 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 22 74 65  cmp(azArg[0],"te
267e0 73 74 63 61 73 65 22 29 3d 3d 30 20 29 7b 0a 20  stcase")==0 ){. 
267f0 20 20 20 6f 75 74 70 75 74 5f 72 65 73 65 74 28     output_reset(
26800 70 29 3b 0a 20 20 20 20 70 2d 3e 6f 75 74 20 3d  p);.    p->out =
26810 20 6f 75 74 70 75 74 5f 66 69 6c 65 5f 6f 70 65   output_file_ope
26820 6e 28 22 74 65 73 74 63 61 73 65 2d 6f 75 74 2e  n("testcase-out.
26830 74 78 74 22 29 3b 0a 20 20 20 20 69 66 28 20 70  txt");.    if( p
26840 2d 3e 6f 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ->out==0 ){.    
26850 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
26860 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 63 61 6e  err, "Error: can
26870 6e 6f 74 20 6f 70 65 6e 20 27 74 65 73 74 63 61  not open 'testca
26880 73 65 2d 6f 75 74 2e 74 78 74 27 5c 6e 22 29 3b  se-out.txt'\n");
26890 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6e  .    }.    if( n
268a0 41 72 67 3e 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg>=2 ){.      
268b0 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
268c0 28 73 69 7a 65 6f 66 28 70 2d 3e 7a 54 65 73 74  (sizeof(p->zTest
268d0 63 61 73 65 29 2c 20 70 2d 3e 7a 54 65 73 74 63  case), p->zTestc
268e0 61 73 65 2c 20 22 25 73 22 2c 20 61 7a 41 72 67  ase, "%s", azArg
268f0 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  [1]);.    }else{
26900 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
26910 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 70  nprintf(sizeof(p
26920 2d 3e 7a 54 65 73 74 63 61 73 65 29 2c 20 70 2d  ->zTestcase), p-
26930 3e 7a 54 65 73 74 63 61 73 65 2c 20 22 3f 22 29  >zTestcase, "?")
26940 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
26950 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26960 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 69 66 28  UNTESTABLE.  if(
26970 20 63 3d 3d 27 74 27 20 26 26 20 6e 3e 3d 38 20   c=='t' && n>=8 
26980 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
26990 5b 30 5d 2c 20 22 74 65 73 74 63 74 72 6c 22 2c  [0], "testctrl",
269a0 20 6e 29 3d 3d 30 20 26 26 20 6e 41 72 67 3e 3d   n)==0 && nArg>=
269b0 32 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20  2 ){.    static 
269c0 63 6f 6e 73 74 20 73 74 72 75 63 74 20 7b 0a 20  const struct {. 
269d0 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
269e0 20 2a 7a 43 74 72 6c 4e 61 6d 65 3b 20 20 20 2f   *zCtrlName;   /
269f0 2a 20 4e 61 6d 65 20 6f 66 20 61 20 74 65 73 74  * Name of a test
26a00 2d 63 6f 6e 74 72 6f 6c 20 6f 70 74 69 6f 6e 20  -control option 
26a10 2a 2f 0a 20 20 20 20 20 20 20 69 6e 74 20 63 74  */.       int ct
26a20 72 6c 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rlCode;         
26a30 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 63 6f     /* Integer co
26a40 64 65 20 66 6f 72 20 74 68 61 74 20 6f 70 74 69  de for that opti
26a50 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 61 43 74 72  on */.    } aCtr
26a60 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20  l[] = {.      { 
26a70 22 70 72 6e 67 5f 73 61 76 65 22 2c 20 20 20 20  "prng_save",    
26a80 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
26a90 54 45 53 54 43 54 52 4c 5f 50 52 4e 47 5f 53 41  TESTCTRL_PRNG_SA
26aa0 56 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20  VE              
26ab0 7d 2c 0a 20 20 20 20 20 20 7b 20 22 70 72 6e 67  },.      { "prng
26ac0 5f 72 65 73 74 6f 72 65 22 2c 20 20 20 20 20 20  _restore",      
26ad0 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43      SQLITE_TESTC
26ae0 54 52 4c 5f 50 52 4e 47 5f 52 45 53 54 4f 52 45  TRL_PRNG_RESTORE
26af0 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
26b00 20 20 20 20 7b 20 22 70 72 6e 67 5f 72 65 73 65      { "prng_rese
26b10 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 53  t",            S
26b20 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50  QLITE_TESTCTRL_P
26b30 52 4e 47 5f 52 45 53 45 54 20 20 20 20 20 20 20  RNG_RESET       
26b40 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
26b50 20 22 62 69 74 76 65 63 5f 74 65 73 74 22 2c 20   "bitvec_test", 
26b60 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
26b70 5f 54 45 53 54 43 54 52 4c 5f 42 49 54 56 45 43  _TESTCTRL_BITVEC
26b80 5f 54 45 53 54 20 20 20 20 20 20 20 20 20 20 20  _TEST           
26b90 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 66 61 75   },.      { "fau
26ba0 6c 74 5f 69 6e 73 74 61 6c 6c 22 2c 20 20 20 20  lt_install",    
26bb0 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54       SQLITE_TEST
26bc0 43 54 52 4c 5f 46 41 55 4c 54 5f 49 4e 53 54 41  CTRL_FAULT_INSTA
26bd0 4c 4c 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20  LL          },. 
26be0 20 20 20 20 20 7b 20 22 62 65 6e 69 67 6e 5f 6d       { "benign_m
26bf0 61 6c 6c 6f 63 5f 68 6f 6f 6b 73 22 2c 20 20 20  alloc_hooks",   
26c00 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
26c10 42 45 4e 49 47 4e 5f 4d 41 4c 4c 4f 43 5f 48 4f  BENIGN_MALLOC_HO
26c20 4f 4b 53 20 20 20 20 7d 2c 0a 20 20 20 20 20 20  OKS    },.      
26c30 7b 20 22 70 65 6e 64 69 6e 67 5f 62 79 74 65 22  { "pending_byte"
26c40 2c 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54  ,          SQLIT
26c50 45 5f 54 45 53 54 43 54 52 4c 5f 50 45 4e 44 49  E_TESTCTRL_PENDI
26c60 4e 47 5f 42 59 54 45 20 20 20 20 20 20 20 20 20  NG_BYTE         
26c70 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 61 73    },.      { "as
26c80 73 65 72 74 22 2c 20 20 20 20 20 20 20 20 20 20  sert",          
26c90 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45 53        SQLITE_TES
26ca0 54 43 54 52 4c 5f 41 53 53 45 52 54 20 20 20 20  TCTRL_ASSERT    
26cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
26cc0 20 20 20 20 20 20 7b 20 22 61 6c 77 61 79 73 22        { "always"
26cd0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
26ce0 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
26cf0 5f 41 4c 57 41 59 53 20 20 20 20 20 20 20 20 20  _ALWAYS         
26d00 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
26d10 20 7b 20 22 72 65 73 65 72 76 65 22 2c 20 20 20   { "reserve",   
26d20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
26d30 54 45 5f 54 45 53 54 43 54 52 4c 5f 52 45 53 45  TE_TESTCTRL_RESE
26d40 52 56 45 20 20 20 20 20 20 20 20 20 20 20 20 20  RVE             
26d50 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 6f     },.      { "o
26d60 70 74 69 6d 69 7a 61 74 69 6f 6e 73 22 2c 20 20  ptimizations",  
26d70 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 45         SQLITE_TE
26d80 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54  STCTRL_OPTIMIZAT
26d90 49 4f 4e 53 20 20 20 20 20 20 20 20 20 20 7d 2c  IONS          },
26da0 0a 20 20 20 20 20 20 7b 20 22 69 73 6b 65 79 77  .      { "iskeyw
26db0 6f 72 64 22 2c 20 20 20 20 20 20 20 20 20 20 20  ord",           
26dc0 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52    SQLITE_TESTCTR
26dd0 4c 5f 49 53 4b 45 59 57 4f 52 44 20 20 20 20 20  L_ISKEYWORD     
26de0 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
26df0 20 20 7b 20 22 73 63 72 61 74 63 68 6d 61 6c 6c    { "scratchmall
26e00 6f 63 22 2c 20 20 20 20 20 20 20 20 20 53 51 4c  oc",         SQL
26e10 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 53 43 52  ITE_TESTCTRL_SCR
26e20 41 54 43 48 4d 41 4c 4c 4f 43 20 20 20 20 20 20  ATCHMALLOC      
26e30 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
26e40 62 79 74 65 6f 72 64 65 72 22 2c 20 20 20 20 20  byteorder",     
26e50 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54          SQLITE_T
26e60 45 53 54 43 54 52 4c 5f 42 59 54 45 4f 52 44 45  ESTCTRL_BYTEORDE
26e70 52 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  R              }
26e80 2c 0a 20 20 20 20 20 20 7b 20 22 6e 65 76 65 72  ,.      { "never
26e90 5f 63 6f 72 72 75 70 74 22 2c 20 20 20 20 20 20  _corrupt",      
26ea0 20 20 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54     SQLITE_TESTCT
26eb0 52 4c 5f 4e 45 56 45 52 5f 43 4f 52 52 55 50 54  RL_NEVER_CORRUPT
26ec0 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
26ed0 20 20 20 7b 20 22 69 6d 70 6f 73 74 65 72 22 2c     { "imposter",
26ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
26ef0 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d  LITE_TESTCTRL_IM
26f00 50 4f 53 54 45 52 20 20 20 20 20 20 20 20 20 20  POSTER          
26f10 20 20 20 20 20 7d 2c 0a 20 20 20 20 7d 3b 0a 20       },.    };. 
26f20 20 20 20 69 6e 74 20 74 65 73 74 63 74 72 6c 20     int testctrl 
26f30 3d 20 2d 31 3b 0a 20 20 20 20 69 6e 74 20 72 63  = -1;.    int rc
26f40 32 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 69  2 = 0;.    int i
26f50 2c 20 6e 32 3b 0a 20 20 20 20 6f 70 65 6e 5f 64  , n2;.    open_d
26f60 62 28 70 2c 20 30 29 3b 0a 0a 20 20 20 20 2f 2a  b(p, 0);..    /*
26f70 20 63 6f 6e 76 65 72 74 20 74 65 73 74 63 74 72   convert testctr
26f80 6c 20 74 65 78 74 20 6f 70 74 69 6f 6e 20 74 6f  l text option to
26f90 20 76 61 6c 75 65 2e 20 61 6c 6c 6f 77 20 61 6e   value. allow an
26fa0 79 20 75 6e 69 71 75 65 20 70 72 65 66 69 78 0a  y unique prefix.
26fb0 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 6f 70      ** of the op
26fc0 74 69 6f 6e 20 6e 61 6d 65 2c 20 6f 72 20 61 20  tion name, or a 
26fd0 6e 75 6d 65 72 69 63 61 6c 20 76 61 6c 75 65 2e  numerical value.
26fe0 20 2a 2f 0a 20 20 20 20 6e 32 20 3d 20 73 74 72   */.    n2 = str
26ff0 6c 65 6e 33 30 28 61 7a 41 72 67 5b 31 5d 29 3b  len30(azArg[1]);
27000 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
27010 41 72 72 61 79 53 69 7a 65 28 61 43 74 72 6c 29  ArraySize(aCtrl)
27020 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66  ; i++){.      if
27030 28 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  ( strncmp(azArg[
27040 31 5d 2c 20 61 43 74 72 6c 5b 69 5d 2e 7a 43 74  1], aCtrl[i].zCt
27050 72 6c 4e 61 6d 65 2c 20 6e 32 29 3d 3d 30 20 29  rlName, n2)==0 )
27060 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 74 65  {.        if( te
27070 73 74 63 74 72 6c 3c 30 20 29 7b 0a 20 20 20 20  stctrl<0 ){.    
27080 20 20 20 20 20 20 74 65 73 74 63 74 72 6c 20 3d        testctrl =
27090 20 61 43 74 72 6c 5b 69 5d 2e 63 74 72 6c 43 6f   aCtrl[i].ctrlCo
270a0 64 65 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  de;.        }els
270b0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66  e{.          utf
270c0 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
270d0 20 22 61 6d 62 69 67 75 6f 75 73 20 6f 70 74 69   "ambiguous opti
270e0 6f 6e 20 6e 61 6d 65 3a 20 5c 22 25 73 5c 22 5c  on name: \"%s\"\
270f0 6e 22 2c 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20  n", azArg[1]);. 
27100 20 20 20 20 20 20 20 20 20 74 65 73 74 63 74 72           testctr
27110 6c 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 20 20  l = -1;.        
27120 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
27130 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
27140 0a 20 20 20 20 69 66 28 20 74 65 73 74 63 74 72  .    if( testctr
27150 6c 3c 30 20 29 20 74 65 73 74 63 74 72 6c 20 3d  l<0 ) testctrl =
27160 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61 6c   (int)integerVal
27170 75 65 28 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20  ue(azArg[1]);.  
27180 20 20 69 66 28 20 28 74 65 73 74 63 74 72 6c 3c    if( (testctrl<
27190 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
271a0 46 49 52 53 54 29 20 7c 7c 20 28 74 65 73 74 63  FIRST) || (testc
271b0 74 72 6c 3e 53 51 4c 49 54 45 5f 54 45 53 54 43  trl>SQLITE_TESTC
271c0 54 52 4c 5f 4c 41 53 54 29 20 29 7b 0a 20 20 20  TRL_LAST) ){.   
271d0 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
271e0 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 69 6e  tderr,"Error: in
271f0 76 61 6c 69 64 20 74 65 73 74 63 74 72 6c 20 6f  valid testctrl o
27200 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 61 7a  ption: %s\n", az
27210 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20 7d 65 6c  Arg[1]);.    }el
27220 73 65 7b 0a 20 20 20 20 20 20 73 77 69 74 63 68  se{.      switch
27230 28 74 65 73 74 63 74 72 6c 29 7b 0a 0a 20 20 20  (testctrl){..   
27240 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f       /* sqlite3_
27250 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74  test_control(int
27260 2c 20 64 62 2c 20 69 6e 74 29 20 2a 2f 0a 20 20  , db, int) */.  
27270 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
27280 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d  E_TESTCTRL_OPTIM
27290 49 5a 41 54 49 4f 4e 53 3a 0a 20 20 20 20 20 20  IZATIONS:.      
272a0 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45    case SQLITE_TE
272b0 53 54 43 54 52 4c 5f 52 45 53 45 52 56 45 3a 0a  STCTRL_RESERVE:.
272c0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6e 41            if( nA
272d0 72 67 3d 3d 33 20 29 7b 0a 20 20 20 20 20 20 20  rg==3 ){.       
272e0 20 20 20 20 20 69 6e 74 20 6f 70 74 20 3d 20 28       int opt = (
272f0 69 6e 74 29 73 74 72 74 6f 6c 28 61 7a 41 72 67  int)strtol(azArg
27300 5b 32 5d 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  [2], 0, 0);.    
27310 20 20 20 20 20 20 20 20 72 63 32 20 3d 20 73 71          rc2 = sq
27320 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
27330 6f 6c 28 74 65 73 74 63 74 72 6c 2c 20 70 2d 3e  ol(testctrl, p->
27340 64 62 2c 20 6f 70 74 29 3b 0a 20 20 20 20 20 20  db, opt);.      
27350 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
27360 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20 28 30 78  (p->out, "%d (0x
27370 25 30 38 78 29 5c 6e 22 2c 20 72 63 32 2c 20 72  %08x)\n", rc2, r
27380 63 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  c2);.          }
27390 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
273a0 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
273b0 73 74 64 65 72 72 2c 22 45 72 72 6f 72 3a 20 74  stderr,"Error: t
273c0 65 73 74 63 74 72 6c 20 25 73 20 74 61 6b 65 73  estctrl %s takes
273d0 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 20 6f 70   a single int op
273e0 74 69 6f 6e 5c 6e 22 2c 0a 20 20 20 20 20 20 20  tion\n",.       
273f0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41               azA
27400 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[1]);.        
27410 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72    }.          br
27420 65 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a  eak;..        /*
27430 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
27440 6e 74 72 6f 6c 28 69 6e 74 29 20 2a 2f 0a 20 20  ntrol(int) */.  
27450 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
27460 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e 47 5f  E_TESTCTRL_PRNG_
27470 53 41 56 45 3a 0a 20 20 20 20 20 20 20 20 63 61  SAVE:.        ca
27480 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  se SQLITE_TESTCT
27490 52 4c 5f 50 52 4e 47 5f 52 45 53 54 4f 52 45 3a  RL_PRNG_RESTORE:
274a0 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51  .        case SQ
274b0 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52  LITE_TESTCTRL_PR
274c0 4e 47 5f 52 45 53 45 54 3a 0a 20 20 20 20 20 20  NG_RESET:.      
274d0 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45    case SQLITE_TE
274e0 53 54 43 54 52 4c 5f 42 59 54 45 4f 52 44 45 52  STCTRL_BYTEORDER
274f0 3a 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  :.          if( 
27500 6e 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20  nArg==2 ){.     
27510 20 20 20 20 20 20 20 72 63 32 20 3d 20 73 71 6c         rc2 = sql
27520 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
27530 6c 28 74 65 73 74 63 74 72 6c 29 3b 0a 20 20 20  l(testctrl);.   
27540 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69           raw_pri
27550 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64 20  ntf(p->out, "%d 
27560 28 30 78 25 30 38 78 29 5c 6e 22 2c 20 72 63 32  (0x%08x)\n", rc2
27570 2c 20 72 63 32 29 3b 0a 20 20 20 20 20 20 20 20  , rc2);.        
27580 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
27590 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
275a0 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72  tf(stderr,"Error
275b0 3a 20 74 65 73 74 63 74 72 6c 20 25 73 20 74 61  : testctrl %s ta
275c0 6b 65 73 20 6e 6f 20 6f 70 74 69 6f 6e 73 5c 6e  kes no options\n
275d0 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
275e0 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72 67             azArg
275f0 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [1]);.          
27600 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  }.          brea
27610 6b 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 73  k;..        /* s
27620 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
27630 72 6f 6c 28 69 6e 74 2c 20 75 69 6e 74 29 20 2a  rol(int, uint) *
27640 2f 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53  /.        case S
27650 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50  QLITE_TESTCTRL_P
27660 45 4e 44 49 4e 47 5f 42 59 54 45 3a 0a 20 20 20  ENDING_BYTE:.   
27670 20 20 20 20 20 20 20 69 66 28 20 6e 41 72 67 3d         if( nArg=
27680 3d 33 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =3 ){.          
27690 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f    unsigned int o
276a0 70 74 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 69  pt = (unsigned i
276b0 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75 65 28  nt)integerValue(
276c0 61 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20 20  azArg[2]);.     
276d0 20 20 20 20 20 20 20 72 63 32 20 3d 20 73 71 6c         rc2 = sql
276e0 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
276f0 6c 28 74 65 73 74 63 74 72 6c 2c 20 6f 70 74 29  l(testctrl, opt)
27700 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61  ;.            ra
27710 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
27720 20 22 25 64 20 28 30 78 25 30 38 78 29 5c 6e 22   "%d (0x%08x)\n"
27730 2c 20 72 63 32 2c 20 72 63 32 29 3b 0a 20 20 20  , rc2, rc2);.   
27740 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
27750 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38              utf8
27760 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
27770 45 72 72 6f 72 3a 20 74 65 73 74 63 74 72 6c 20  Error: testctrl 
27780 25 73 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c  %s takes a singl
27790 65 20 75 6e 73 69 67 6e 65 64 22 0a 20 20 20 20  e unsigned".    
277a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277b0 20 20 20 20 20 20 20 22 20 69 6e 74 20 6f 70 74         " int opt
277c0 69 6f 6e 5c 6e 22 2c 20 61 7a 41 72 67 5b 31 5d  ion\n", azArg[1]
277d0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
277e0 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
277f0 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69  .        /* sqli
27800 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
27810 28 69 6e 74 2c 20 69 6e 74 29 20 2a 2f 0a 20 20  (int, int) */.  
27820 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
27830 45 5f 54 45 53 54 43 54 52 4c 5f 41 53 53 45 52  E_TESTCTRL_ASSER
27840 54 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  T:.        case 
27850 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
27860 41 4c 57 41 59 53 3a 0a 20 20 20 20 20 20 20 20  ALWAYS:.        
27870 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54  case SQLITE_TEST
27880 43 54 52 4c 5f 4e 45 56 45 52 5f 43 4f 52 52 55  CTRL_NEVER_CORRU
27890 50 54 3a 0a 20 20 20 20 20 20 20 20 20 20 69 66  PT:.          if
278a0 28 20 6e 41 72 67 3d 3d 33 20 29 7b 0a 20 20 20  ( nArg==3 ){.   
278b0 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 70 74           int opt
278c0 20 3d 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28   = booleanValue(
278d0 61 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20 20  azArg[2]);.     
278e0 20 20 20 20 20 20 20 72 63 32 20 3d 20 73 71 6c         rc2 = sql
278f0 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
27900 6c 28 74 65 73 74 63 74 72 6c 2c 20 6f 70 74 29  l(testctrl, opt)
27910 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61  ;.            ra
27920 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
27930 20 22 25 64 20 28 30 78 25 30 38 78 29 5c 6e 22   "%d (0x%08x)\n"
27940 2c 20 72 63 32 2c 20 72 63 32 29 3b 0a 20 20 20  , rc2, rc2);.   
27950 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
27960 20 20 20 20 20 20 20 20 20 20 20 20 75 74 66 38              utf8
27970 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
27980 45 72 72 6f 72 3a 20 74 65 73 74 63 74 72 6c 20  Error: testctrl 
27990 25 73 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c  %s takes a singl
279a0 65 20 69 6e 74 20 6f 70 74 69 6f 6e 5c 6e 22 2c  e int option\n",
279b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
279c0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41               azA
279d0 72 67 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20  rg[1]);.        
279e0 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72    }.          br
279f0 65 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a  eak;..        /*
27a00 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
27a10 6e 74 72 6f 6c 28 69 6e 74 2c 20 63 68 61 72 20  ntrol(int, char 
27a20 2a 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  *) */.#ifdef SQL
27a30 49 54 45 5f 4e 5f 4b 45 59 57 4f 52 44 0a 20 20  ITE_N_KEYWORD.  
27a40 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
27a50 45 5f 54 45 53 54 43 54 52 4c 5f 49 53 4b 45 59  E_TESTCTRL_ISKEY
27a60 57 4f 52 44 3a 0a 20 20 20 20 20 20 20 20 20 20  WORD:.          
27a70 69 66 28 20 6e 41 72 67 3d 3d 33 20 29 7b 0a 20  if( nArg==3 ){. 
27a80 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
27a90 20 63 68 61 72 20 2a 6f 70 74 20 3d 20 61 7a 41   char *opt = azA
27aa0 72 67 5b 32 5d 3b 0a 20 20 20 20 20 20 20 20 20  rg[2];.         
27ab0 20 20 20 72 63 32 20 3d 20 73 71 6c 69 74 65 33     rc2 = sqlite3
27ac0 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 74 65  _test_control(te
27ad0 73 74 63 74 72 6c 2c 20 6f 70 74 29 3b 0a 20 20  stctrl, opt);.  
27ae0 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72            raw_pr
27af0 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 25 64  intf(p->out, "%d
27b00 20 28 30 78 25 30 38 78 29 5c 6e 22 2c 20 72 63   (0x%08x)\n", rc
27b10 32 2c 20 72 63 32 29 3b 0a 20 20 20 20 20 20 20  2, rc2);.       
27b20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
27b30 20 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69          utf8_pri
27b40 6e 74 66 28 73 74 64 65 72 72 2c 0a 20 20 20 20  ntf(stderr,.    
27b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b60 20 20 20 20 22 45 72 72 6f 72 3a 20 74 65 73 74      "Error: test
27b70 63 74 72 6c 20 25 73 20 74 61 6b 65 73 20 61 20  ctrl %s takes a 
27b80 73 69 6e 67 6c 65 20 63 68 61 72 20 2a 20 6f 70  single char * op
27b90 74 69 6f 6e 5c 6e 22 2c 0a 20 20 20 20 20 20 20  tion\n",.       
27ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bb0 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20 20 20   azArg[1]);.    
27bc0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
27bd0 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a    break;.#endif.
27be0 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51  .        case SQ
27bf0 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d  LITE_TESTCTRL_IM
27c00 50 4f 53 54 45 52 3a 0a 20 20 20 20 20 20 20 20  POSTER:.        
27c10 20 20 69 66 28 20 6e 41 72 67 3d 3d 35 20 29 7b    if( nArg==5 ){
27c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63 32  .            rc2
27c30 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f   = sqlite3_test_
27c40 63 6f 6e 74 72 6f 6c 28 74 65 73 74 63 74 72 6c  control(testctrl
27c50 2c 20 70 2d 3e 64 62 2c 0a 20 20 20 20 20 20 20  , p->db,.       
27c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c70 20 20 20 61 7a 41 72 67 5b 32 5d 2c 0a 20 20 20     azArg[2],.   
27c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c90 20 20 20 20 20 20 20 69 6e 74 65 67 65 72 56 61         integerVa
27ca0 6c 75 65 28 61 7a 41 72 67 5b 33 5d 29 2c 0a 20  lue(azArg[3]),. 
27cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cc0 20 20 20 20 20 20 20 20 20 69 6e 74 65 67 65 72           integer
27cd0 56 61 6c 75 65 28 61 7a 41 72 67 5b 34 5d 29 29  Value(azArg[4]))
27ce0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61  ;.            ra
27cf0 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
27d00 20 22 25 64 20 28 30 78 25 30 38 78 29 5c 6e 22   "%d (0x%08x)\n"
27d10 2c 20 72 63 32 2c 20 72 63 32 29 3b 0a 20 20 20  , rc2, rc2);.   
27d20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
27d30 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70 72            raw_pr
27d40 69 6e 74 66 28 73 74 64 65 72 72 2c 22 55 73 61  intf(stderr,"Usa
27d50 67 65 3a 20 2e 74 65 73 74 63 74 72 6c 20 69 6d  ge: .testctrl im
27d60 70 6f 73 74 65 72 20 64 62 4e 61 6d 65 20 6f 6e  poster dbName on
27d70 6f 66 66 20 74 6e 75 6d 5c 6e 22 29 3b 0a 20 20  off tnum\n");.  
27d80 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
27d90 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20      break;..    
27da0 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
27db0 54 45 53 54 43 54 52 4c 5f 42 49 54 56 45 43 5f  TESTCTRL_BITVEC_
27dc0 54 45 53 54 3a 0a 20 20 20 20 20 20 20 20 63 61  TEST:.        ca
27dd0 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  se SQLITE_TESTCT
27de0 52 4c 5f 46 41 55 4c 54 5f 49 4e 53 54 41 4c 4c  RL_FAULT_INSTALL
27df0 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53  :.        case S
27e00 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 42  QLITE_TESTCTRL_B
27e10 45 4e 49 47 4e 5f 4d 41 4c 4c 4f 43 5f 48 4f 4f  ENIGN_MALLOC_HOO
27e20 4b 53 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65  KS:.        case
27e30 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
27e40 5f 53 43 52 41 54 43 48 4d 41 4c 4c 4f 43 3a 0a  _SCRATCHMALLOC:.
27e50 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a          default:
27e60 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38 5f  .          utf8_
27e70 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 0a 20  printf(stderr,. 
27e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e90 20 20 20 20 20 22 45 72 72 6f 72 3a 20 43 4c 49       "Error: CLI
27ea0 20 73 75 70 70 6f 72 74 20 66 6f 72 20 74 65 73   support for tes
27eb0 74 63 74 72 6c 20 25 73 20 6e 6f 74 20 69 6d 70  tctrl %s not imp
27ec0 6c 65 6d 65 6e 74 65 64 5c 6e 22 2c 0a 20 20 20  lemented\n",.   
27ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ee0 20 20 20 61 7a 41 72 67 5b 31 5d 29 3b 0a 20 20     azArg[1]);.  
27ef0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
27f00 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
27f10 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
27f20 74 27 20 26 26 20 6e 3e 34 20 26 26 20 73 74 72  t' && n>4 && str
27f30 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22  ncmp(azArg[0], "
27f40 74 69 6d 65 6f 75 74 22 2c 20 6e 29 3d 3d 30 20  timeout", n)==0 
27f50 29 7b 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70  ){.    open_db(p
27f60 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
27f70 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 70  3_busy_timeout(p
27f80 2d 3e 64 62 2c 20 6e 41 72 67 3e 3d 32 20 3f 20  ->db, nArg>=2 ? 
27f90 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75  (int)integerValu
27fa0 65 28 61 7a 41 72 67 5b 31 5d 29 20 3a 20 30 29  e(azArg[1]) : 0)
27fb0 3b 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  ;.  }else..  if(
27fc0 20 63 3d 3d 27 74 27 20 26 26 20 6e 3e 3d 35 20   c=='t' && n>=5 
27fd0 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67  && strncmp(azArg
27fe0 5b 30 5d 2c 20 22 74 69 6d 65 72 22 2c 20 6e 29  [0], "timer", n)
27ff0 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
28000 41 72 67 3d 3d 32 20 29 7b 0a 20 20 20 20 20 20  Arg==2 ){.      
28010 65 6e 61 62 6c 65 54 69 6d 65 72 20 3d 20 62 6f  enableTimer = bo
28020 6f 6c 65 61 6e 56 61 6c 75 65 28 61 7a 41 72 67  oleanValue(azArg
28030 5b 31 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20  [1]);.      if( 
28040 65 6e 61 62 6c 65 54 69 6d 65 72 20 26 26 20 21  enableTimer && !
28050 48 41 53 5f 54 49 4d 45 52 20 29 7b 0a 20 20 20  HAS_TIMER ){.   
28060 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
28070 73 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20  stderr, "Error: 
28080 74 69 6d 65 72 20 6e 6f 74 20 61 76 61 69 6c 61  timer not availa
28090 62 6c 65 20 6f 6e 20 74 68 69 73 20 73 79 73 74  ble on this syst
280a0 65 6d 2e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20  em.\n");.       
280b0 20 65 6e 61 62 6c 65 54 69 6d 65 72 20 3d 20 30   enableTimer = 0
280c0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
280d0 6c 73 65 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  lse{.      raw_p
280e0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55  rintf(stderr, "U
280f0 73 61 67 65 3a 20 2e 74 69 6d 65 72 20 6f 6e 7c  sage: .timer on|
28100 6f 66 66 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  off\n");.      r
28110 63 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  c = 1;.    }.  }
28120 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d 27  else..  if( c=='
28130 74 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a  t' && strncmp(az
28140 41 72 67 5b 30 5d 2c 20 22 74 72 61 63 65 22 2c  Arg[0], "trace",
28150 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 6f 70   n)==0 ){.    op
28160 65 6e 5f 64 62 28 70 2c 20 30 29 3b 0a 20 20 20  en_db(p, 0);.   
28170 20 69 66 28 20 6e 41 72 67 21 3d 32 20 29 7b 0a   if( nArg!=2 ){.
28180 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66        raw_printf
28190 28 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a  (stderr, "Usage:
281a0 20 2e 74 72 61 63 65 20 46 49 4c 45 7c 6f 66 66   .trace FILE|off
281b0 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  \n");.      rc =
281c0 20 31 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6d   1;.      goto m
281d0 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
281e0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6f 75 74 70  ;.    }.    outp
281f0 75 74 5f 66 69 6c 65 5f 63 6c 6f 73 65 28 70 2d  ut_file_close(p-
28200 3e 74 72 61 63 65 4f 75 74 29 3b 0a 20 20 20 20  >traceOut);.    
28210 70 2d 3e 74 72 61 63 65 4f 75 74 20 3d 20 6f 75  p->traceOut = ou
28220 74 70 75 74 5f 66 69 6c 65 5f 6f 70 65 6e 28 61  tput_file_open(a
28230 7a 41 72 67 5b 31 5d 29 3b 0a 23 69 66 20 21 64  zArg[1]);.#if !d
28240 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
28250 49 54 5f 54 52 41 43 45 29 20 26 26 20 21 64 65  IT_TRACE) && !de
28260 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
28270 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
28280 29 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61  ).    if( p->tra
28290 63 65 4f 75 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ceOut==0 ){.    
282a0 20 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 5f    sqlite3_trace_
282b0 76 32 28 70 2d 3e 64 62 2c 20 30 2c 20 30 2c 20  v2(p->db, 0, 0, 
282c0 30 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  0);.    }else{. 
282d0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74 72 61       sqlite3_tra
282e0 63 65 5f 76 32 28 70 2d 3e 64 62 2c 20 53 51 4c  ce_v2(p->db, SQL
282f0 49 54 45 5f 54 52 41 43 45 5f 53 54 4d 54 2c 20  ITE_TRACE_STMT, 
28300 73 71 6c 5f 74 72 61 63 65 5f 63 61 6c 6c 62 61  sql_trace_callba
28310 63 6b 2c 70 2d 3e 74 72 61 63 65 4f 75 74 29 3b  ck,p->traceOut);
28320 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
28330 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20  }else.#endif /* 
28340 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
28350 55 4e 54 45 53 54 41 42 4c 45 29 20 2a 2f 0a 0a  UNTESTABLE) */..
28360 23 69 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f  #if SQLITE_USER_
28370 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20  AUTHENTICATION. 
28380 20 69 66 28 20 63 3d 3d 27 75 27 20 26 26 20 73   if( c=='u' && s
28390 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d 2c  trncmp(azArg[0],
283a0 20 22 75 73 65 72 22 2c 20 6e 29 3d 3d 30 20 29   "user", n)==0 )
283b0 7b 0a 20 20 20 20 69 66 28 20 6e 41 72 67 3c 32  {.    if( nArg<2
283c0 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70 72   ){.      raw_pr
283d0 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 55 73  intf(stderr, "Us
283e0 61 67 65 3a 20 2e 75 73 65 72 20 53 55 42 43 4f  age: .user SUBCO
283f0 4d 4d 41 4e 44 20 2e 2e 2e 5c 6e 22 29 3b 0a 20  MMAND ...\n");. 
28400 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 20       rc = 1;.   
28410 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63 6f 6d     goto meta_com
28420 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20 20 7d  mand_exit;.    }
28430 0a 20 20 20 20 6f 70 65 6e 5f 64 62 28 70 2c 20  .    open_db(p, 
28440 30 29 3b 0a 20 20 20 20 69 66 28 20 73 74 72 63  0);.    if( strc
28450 6d 70 28 61 7a 41 72 67 5b 31 5d 2c 22 6c 6f 67  mp(azArg[1],"log
28460 69 6e 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  in")==0 ){.     
28470 20 69 66 28 20 6e 41 72 67 21 3d 34 20 29 7b 0a   if( nArg!=4 ){.
28480 20 20 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e          raw_prin
28490 74 66 28 73 74 64 65 72 72 2c 20 22 55 73 61 67  tf(stderr, "Usag
284a0 65 3a 20 2e 75 73 65 72 20 6c 6f 67 69 6e 20 55  e: .user login U
284b0 53 45 52 20 50 41 53 53 57 4f 52 44 5c 6e 22 29  SER PASSWORD\n")
284c0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 31  ;.        rc = 1
284d0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6d  ;.        goto m
284e0 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69 74  eta_command_exit
284f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
28500 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 75 73 65  rc = sqlite3_use
28510 72 5f 61 75 74 68 65 6e 74 69 63 61 74 65 28 70  r_authenticate(p
28520 2d 3e 64 62 2c 20 61 7a 41 72 67 5b 32 5d 2c 20  ->db, azArg[2], 
28530 61 7a 41 72 67 5b 33 5d 2c 0a 20 20 20 20 20 20  azArg[3],.      
28540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
28560 6e 74 29 73 74 72 6c 65 6e 28 61 7a 41 72 67 5b  nt)strlen(azArg[
28570 33 5d 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  3]));.      if( 
28580 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 75 74  rc ){.        ut
28590 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
285a0 2c 20 22 41 75 74 68 65 6e 74 69 63 61 74 69 6f  , "Authenticatio
285b0 6e 20 66 61 69 6c 65 64 20 66 6f 72 20 75 73 65  n failed for use
285c0 72 20 25 73 5c 6e 22 2c 20 61 7a 41 72 67 5b 32  r %s\n", azArg[2
285d0 5d 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  ]);.        rc =
285e0 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   1;.      }.    
285f0 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
28600 28 61 7a 41 72 67 5b 31 5d 2c 22 61 64 64 22 29  (azArg[1],"add")
28610 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
28620 20 6e 41 72 67 21 3d 35 20 29 7b 0a 20 20 20 20   nArg!=5 ){.    
28630 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
28640 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20 2e  tderr, "Usage: .
28650 75 73 65 72 20 61 64 64 20 55 53 45 52 20 50 41  user add USER PA
28660 53 53 57 4f 52 44 20 49 53 41 44 4d 49 4e 5c 6e  SSWORD ISADMIN\n
28670 22 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  ");.        rc =
28680 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   1;.        goto
28690 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78   meta_command_ex
286a0 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  it;.      }.    
286b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 75    rc = sqlite3_u
286c0 73 65 72 5f 61 64 64 28 70 2d 3e 64 62 2c 20 61  ser_add(p->db, a
286d0 7a 41 72 67 5b 32 5d 2c 0a 20 20 20 20 20 20 20  zArg[2],.       
286e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286f0 20 20 20 20 20 61 7a 41 72 67 5b 33 5d 2c 20 28       azArg[3], (
28700 69 6e 74 29 73 74 72 6c 65 6e 28 61 7a 41 72 67  int)strlen(azArg
28710 5b 33 5d 29 2c 0a 20 20 20 20 20 20 20 20 20 20  [3]),.          
28720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28730 20 20 62 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 61    booleanValue(a
28740 7a 41 72 67 5b 34 5d 29 29 3b 0a 20 20 20 20 20  zArg[4]));.     
28750 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
28760 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
28770 64 65 72 72 2c 20 22 55 73 65 72 2d 41 64 64 20  derr, "User-Add 
28780 66 61 69 6c 65 64 3a 20 25 64 5c 6e 22 2c 20 72  failed: %d\n", r
28790 63 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  c);.        rc =
287a0 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   1;.      }.    
287b0 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
287c0 28 61 7a 41 72 67 5b 31 5d 2c 22 65 64 69 74 22  (azArg[1],"edit"
287d0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  )==0 ){.      if
287e0 28 20 6e 41 72 67 21 3d 35 20 29 7b 0a 20 20 20  ( nArg!=5 ){.   
287f0 20 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28       raw_printf(
28800 73 74 64 65 72 72 2c 20 22 55 73 61 67 65 3a 20  stderr, "Usage: 
28810 2e 75 73 65 72 20 65 64 69 74 20 55 53 45 52 20  .user edit USER 
28820 50 41 53 53 57 4f 52 44 20 49 53 41 44 4d 49 4e  PASSWORD ISADMIN
28830 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 72 63  \n");.        rc
28840 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 67 6f   = 1;.        go
28850 74 6f 20 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f  to meta_command_
28860 65 78 69 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  exit;.      }.  
28870 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
28880 5f 75 73 65 72 5f 63 68 61 6e 67 65 28 70 2d 3e  _user_change(p->
28890 64 62 2c 20 61 7a 41 72 67 5b 32 5d 2c 0a 20 20  db, azArg[2],.  
288a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288b0 20 20 20 20 20 20 20 20 20 20 20 20 61 7a 41 72              azAr
288c0 67 5b 33 5d 2c 20 28 69 6e 74 29 73 74 72 6c 65  g[3], (int)strle
288d0 6e 28 61 7a 41 72 67 5b 33 5d 29 2c 0a 20 20 20  n(azArg[3]),.   
288e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288f0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 65             boole
28900 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 34 5d  anValue(azArg[4]
28910 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  ));.      if( rc
28920 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61 77 5f   ){.        raw_
28930 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
28940 55 73 65 72 2d 45 64 69 74 20 66 61 69 6c 65 64  User-Edit failed
28950 3a 20 25 64 5c 6e 22 2c 20 72 63 29 3b 0a 20 20  : %d\n", rc);.  
28960 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20 20        rc = 1;.  
28970 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20      }.    }else 
28980 69 66 28 20 73 74 72 63 6d 70 28 61 7a 41 72 67  if( strcmp(azArg
28990 5b 31 5d 2c 22 64 65 6c 65 74 65 22 29 3d 3d 30  [1],"delete")==0
289a0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 41   ){.      if( nA
289b0 72 67 21 3d 33 20 29 7b 0a 20 20 20 20 20 20 20  rg!=3 ){.       
289c0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
289d0 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 75 73 65  rr, "Usage: .use
289e0 72 20 64 65 6c 65 74 65 20 55 53 45 52 5c 6e 22  r delete USER\n"
289f0 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
28a00 31 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  1;.        goto 
28a10 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
28a20 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
28a30 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 75 73   rc = sqlite3_us
28a40 65 72 5f 64 65 6c 65 74 65 28 70 2d 3e 64 62 2c  er_delete(p->db,
28a50 20 61 7a 41 72 67 5b 32 5d 29 3b 0a 20 20 20 20   azArg[2]);.    
28a60 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
28a70 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73      raw_printf(s
28a80 74 64 65 72 72 2c 20 22 55 73 65 72 2d 44 65 6c  tderr, "User-Del
28a90 65 74 65 20 66 61 69 6c 65 64 3a 20 25 64 5c 6e  ete failed: %d\n
28aa0 22 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 20 20  ", rc);.        
28ab0 72 63 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a  rc = 1;.      }.
28ac0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
28ad0 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65   raw_printf(stde
28ae0 72 72 2c 20 22 55 73 61 67 65 3a 20 2e 75 73 65  rr, "Usage: .use
28af0 72 20 6c 6f 67 69 6e 7c 61 64 64 7c 65 64 69 74  r login|add|edit
28b00 7c 64 65 6c 65 74 65 20 2e 2e 2e 5c 6e 22 29 3b  |delete ...\n");
28b10 0a 20 20 20 20 20 20 72 63 20 3d 20 31 3b 0a 20  .      rc = 1;. 
28b20 20 20 20 20 20 67 6f 74 6f 20 6d 65 74 61 5f 63       goto meta_c
28b30 6f 6d 6d 61 6e 64 5f 65 78 69 74 3b 0a 20 20 20  ommand_exit;.   
28b40 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69   }.  }else.#endi
28b50 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 52  f /* SQLITE_USER
28b60 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20  _AUTHENTICATION 
28b70 2a 2f 0a 0a 20 20 69 66 28 20 63 3d 3d 27 76 27  */..  if( c=='v'
28b80 20 26 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72   && strncmp(azAr
28b90 67 5b 30 5d 2c 20 22 76 65 72 73 69 6f 6e 22 2c  g[0], "version",
28ba0 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 75 74   n)==0 ){.    ut
28bb0 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
28bc0 2c 20 22 53 51 4c 69 74 65 20 25 73 20 25 73 5c  , "SQLite %s %s\
28bd0 6e 22 20 2f 2a 65 78 74 72 61 2d 76 65 72 73 69  n" /*extra-versi
28be0 6f 6e 2d 69 6e 66 6f 2a 2f 2c 0a 20 20 20 20 20  on-info*/,.     
28bf0 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 62 76 65     sqlite3_libve
28c00 72 73 69 6f 6e 28 29 2c 20 73 71 6c 69 74 65 33  rsion(), sqlite3
28c10 5f 73 6f 75 72 63 65 69 64 28 29 29 3b 0a 20 20  _sourceid());.  
28c20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 63 3d 3d  }else..  if( c==
28c30 27 76 27 20 26 26 20 73 74 72 6e 63 6d 70 28 61  'v' && strncmp(a
28c40 7a 41 72 67 5b 30 5d 2c 20 22 76 66 73 69 6e 66  zArg[0], "vfsinf
28c50 6f 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  o", n)==0 ){.   
28c60 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
28c70 4e 61 6d 65 20 3d 20 6e 41 72 67 3d 3d 32 20 3f  Name = nArg==2 ?
28c80 20 61 7a 41 72 67 5b 31 5d 20 3a 20 22 6d 61 69   azArg[1] : "mai
28c90 6e 22 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  n";.    sqlite3_
28ca0 76 66 73 20 2a 70 56 66 73 3b 0a 20 20 20 20 69  vfs *pVfs;.    i
28cb0 66 28 20 70 2d 3e 64 62 20 29 7b 0a 20 20 20 20  f( p->db ){.    
28cc0 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63    sqlite3_file_c
28cd0 6f 6e 74 72 6f 6c 28 70 2d 3e 64 62 2c 20 7a 44  ontrol(p->db, zD
28ce0 62 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43  bName, SQLITE_FC
28cf0 4e 54 4c 5f 56 46 53 5f 50 4f 49 4e 54 45 52 2c  NTL_VFS_POINTER,
28d00 20 26 70 56 66 73 29 3b 0a 20 20 20 20 20 20 69   &pVfs);.      i
28d10 66 28 20 70 56 66 73 20 29 7b 0a 20 20 20 20 20  f( pVfs ){.     
28d20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
28d30 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 7a 4e 61 6d  ->out, "vfs.zNam
28d40 65 20 20 20 20 20 20 3d 20 5c 22 25 73 5c 22 5c  e      = \"%s\"\
28d50 6e 22 2c 20 70 56 66 73 2d 3e 7a 4e 61 6d 65 29  n", pVfs->zName)
28d60 3b 0a 20 20 20 20 20 20 20 20 72 61 77 5f 70 72  ;.        raw_pr
28d70 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76 66  intf(p->out, "vf
28d80 73 2e 69 56 65 72 73 69 6f 6e 20 20 20 3d 20 25  s.iVersion   = %
28d90 64 5c 6e 22 2c 20 70 56 66 73 2d 3e 69 56 65 72  d\n", pVfs->iVer
28da0 73 69 6f 6e 29 3b 0a 20 20 20 20 20 20 20 20 72  sion);.        r
28db0 61 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  aw_printf(p->out
28dc0 2c 20 22 76 66 73 2e 73 7a 4f 73 46 69 6c 65 20  , "vfs.szOsFile 
28dd0 20 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73 2d    = %d\n", pVfs-
28de0 3e 73 7a 4f 73 46 69 6c 65 29 3b 0a 20 20 20 20  >szOsFile);.    
28df0 20 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 70      raw_printf(p
28e00 2d 3e 6f 75 74 2c 20 22 76 66 73 2e 6d 78 50 61  ->out, "vfs.mxPa
28e10 74 68 6e 61 6d 65 20 3d 20 25 64 5c 6e 22 2c 20  thname = %d\n", 
28e20 70 56 66 73 2d 3e 6d 78 50 61 74 68 6e 61 6d 65  pVfs->mxPathname
28e30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
28e40 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
28e50 63 3d 3d 27 76 27 20 26 26 20 73 74 72 6e 63 6d  c=='v' && strncm
28e60 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 76 66 73  p(azArg[0], "vfs
28e70 6c 69 73 74 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a  list", n)==0 ){.
28e80 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20      sqlite3_vfs 
28e90 2a 70 56 66 73 3b 0a 20 20 20 20 73 71 6c 69 74  *pVfs;.    sqlit
28ea0 65 33 5f 76 66 73 20 2a 70 43 75 72 72 65 6e 74  e3_vfs *pCurrent
28eb0 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70 2d   = 0;.    if( p-
28ec0 3e 64 62 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  >db ){.      sql
28ed0 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
28ee0 6c 28 70 2d 3e 64 62 2c 20 22 6d 61 69 6e 22 2c  l(p->db, "main",
28ef0 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 56 46   SQLITE_FCNTL_VF
28f00 53 5f 50 4f 49 4e 54 45 52 2c 20 26 70 43 75 72  S_POINTER, &pCur
28f10 72 65 6e 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20  rent);.    }.   
28f20 20 66 6f 72 28 70 56 66 73 3d 73 71 6c 69 74 65   for(pVfs=sqlite
28f30 33 5f 76 66 73 5f 66 69 6e 64 28 30 29 3b 20 70  3_vfs_find(0); p
28f40 56 66 73 3b 20 70 56 66 73 3d 70 56 66 73 2d 3e  Vfs; pVfs=pVfs->
28f50 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 75 74  pNext){.      ut
28f60 66 38 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74  f8_printf(p->out
28f70 2c 20 22 76 66 73 2e 7a 4e 61 6d 65 20 20 20 20  , "vfs.zName    
28f80 20 20 3d 20 5c 22 25 73 5c 22 25 73 5c 6e 22 2c    = \"%s\"%s\n",
28f90 20 70 56 66 73 2d 3e 7a 4e 61 6d 65 2c 0a 20 20   pVfs->zName,.  
28fa0 20 20 20 20 20 20 20 20 20 70 56 66 73 3d 3d 70           pVfs==p
28fb0 43 75 72 72 65 6e 74 20 3f 20 22 20 20 3c 2d 2d  Current ? "  <--
28fc0 2d 20 43 55 52 52 45 4e 54 22 20 3a 20 22 22 29  - CURRENT" : "")
28fd0 3b 0a 20 20 20 20 20 20 72 61 77 5f 70 72 69 6e  ;.      raw_prin
28fe0 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76 66 73 2e  tf(p->out, "vfs.
28ff0 69 56 65 72 73 69 6f 6e 20 20 20 3d 20 25 64 5c  iVersion   = %d\
29000 6e 22 2c 20 70 56 66 73 2d 3e 69 56 65 72 73 69  n", pVfs->iVersi
29010 6f 6e 29 3b 0a 20 20 20 20 20 20 72 61 77 5f 70  on);.      raw_p
29020 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22 76  rintf(p->out, "v
29030 66 73 2e 73 7a 4f 73 46 69 6c 65 20 20 20 3d 20  fs.szOsFile   = 
29040 25 64 5c 6e 22 2c 20 70 56 66 73 2d 3e 73 7a 4f  %d\n", pVfs->szO
29050 73 46 69 6c 65 29 3b 0a 20 20 20 20 20 20 72 61  sFile);.      ra
29060 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
29070 20 22 76 66 73 2e 6d 78 50 61 74 68 6e 61 6d 65   "vfs.mxPathname
29080 20 3d 20 25 64 5c 6e 22 2c 20 70 56 66 73 2d 3e   = %d\n", pVfs->
29090 6d 78 50 61 74 68 6e 61 6d 65 29 3b 0a 20 20 20  mxPathname);.   
290a0 20 20 20 69 66 28 20 70 56 66 73 2d 3e 70 4e 65     if( pVfs->pNe
290b0 78 74 20 29 7b 0a 20 20 20 20 20 20 20 20 72 61  xt ){.        ra
290c0 77 5f 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c  w_printf(p->out,
290d0 20 22 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   "--------------
290e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
290f0 2d 2d 2d 2d 2d 5c 6e 22 29 3b 0a 20 20 20 20 20  -----\n");.     
29100 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
29110 0a 0a 20 20 69 66 28 20 63 3d 3d 27 76 27 20 26  ..  if( c=='v' &
29120 26 20 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b  & strncmp(azArg[
29130 30 5d 2c 20 22 76 66 73 6e 61 6d 65 22 2c 20 6e  0], "vfsname", n
29140 29 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f 6e 73  )==0 ){.    cons
29150 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65 20  t char *zDbName 
29160 3d 20 6e 41 72 67 3d 3d 32 20 3f 20 61 7a 41 72  = nArg==2 ? azAr
29170 67 5b 31 5d 20 3a 20 22 6d 61 69 6e 22 3b 0a 20  g[1] : "main";. 
29180 20 20 20 63 68 61 72 20 2a 7a 56 66 73 4e 61 6d     char *zVfsNam
29190 65 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70  e = 0;.    if( p
291a0 2d 3e 64 62 20 29 7b 0a 20 20 20 20 20 20 73 71  ->db ){.      sq
291b0 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
291c0 6f 6c 28 70 2d 3e 64 62 2c 20 7a 44 62 4e 61 6d  ol(p->db, zDbNam
291d0 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  e, SQLITE_FCNTL_
291e0 56 46 53 4e 41 4d 45 2c 20 26 7a 56 66 73 4e 61  VFSNAME, &zVfsNa
291f0 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  me);.      if( z
29200 56 66 73 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20  VfsName ){.     
29210 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 70     utf8_printf(p
29220 2d 3e 6f 75 74 2c 20 22 25 73 5c 6e 22 2c 20 7a  ->out, "%s\n", z
29230 56 66 73 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  VfsName);.      
29240 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
29250 56 66 73 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  VfsName);.      
29260 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  }.    }.  }else.
29270 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
29280 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64 65  ITE_DEBUG) && de
29290 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
292a0 42 4c 45 5f 57 48 45 52 45 54 52 41 43 45 29 0a  BLE_WHERETRACE).
292b0 20 20 69 66 28 20 63 3d 3d 27 77 27 20 26 26 20    if( c=='w' && 
292c0 73 74 72 6e 63 6d 70 28 61 7a 41 72 67 5b 30 5d  strncmp(azArg[0]
292d0 2c 20 22 77 68 65 72 65 74 72 61 63 65 22 2c 20  , "wheretrace", 
292e0 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  n)==0 ){.    sql
292f0 69 74 65 33 57 68 65 72 65 54 72 61 63 65 20 3d  ite3WhereTrace =
29300 20 6e 41 72 67 3e 3d 32 20 3f 20 62 6f 6f 6c 65   nArg>=2 ? boole
29310 61 6e 56 61 6c 75 65 28 61 7a 41 72 67 5b 31 5d  anValue(azArg[1]
29320 29 20 3a 20 30 78 66 66 3b 0a 20 20 7d 65 6c 73  ) : 0xff;.  }els
29330 65 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20  e.#endif..  if( 
29340 63 3d 3d 27 77 27 20 26 26 20 73 74 72 6e 63 6d  c=='w' && strncm
29350 70 28 61 7a 41 72 67 5b 30 5d 2c 20 22 77 69 64  p(azArg[0], "wid
29360 74 68 22 2c 20 6e 29 3d 3d 30 20 29 7b 0a 20 20  th", n)==0 ){.  
29370 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 61 73 73    int j;.    ass
29380 65 72 74 28 20 6e 41 72 67 3c 3d 41 72 72 61 79  ert( nArg<=Array
29390 53 69 7a 65 28 61 7a 41 72 67 29 20 29 3b 0a 20  Size(azArg) );. 
293a0 20 20 20 66 6f 72 28 6a 3d 31 3b 20 6a 3c 6e 41     for(j=1; j<nA
293b0 72 67 20 26 26 20 6a 3c 41 72 72 61 79 53 69 7a  rg && j<ArraySiz
293c0 65 28 70 2d 3e 63 6f 6c 57 69 64 74 68 29 3b 20  e(p->colWidth); 
293d0 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 70 2d 3e 63  j++){.      p->c
293e0 6f 6c 57 69 64 74 68 5b 6a 2d 31 5d 20 3d 20 28  olWidth[j-1] = (
293f0 69 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75 65  int)integerValue
29400 28 61 7a 41 72 67 5b 6a 5d 29 3b 0a 20 20 20 20  (azArg[j]);.    
29410 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 7b 0a 20  }.  }else..  {. 
29420 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73     utf8_printf(s
29430 74 64 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 75  tderr, "Error: u
29440 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d 61 6e 64 20 6f  nknown command o
29450 72 20 69 6e 76 61 6c 69 64 20 61 72 67 75 6d 65  r invalid argume
29460 6e 74 73 3a 20 22 0a 20 20 20 20 20 20 22 20 5c  nts: ".      " \
29470 22 25 73 5c 22 2e 20 45 6e 74 65 72 20 5c 22 2e  "%s\". Enter \".
29480 68 65 6c 70 5c 22 20 66 6f 72 20 68 65 6c 70 5c  help\" for help\
29490 6e 22 2c 20 61 7a 41 72 67 5b 30 5d 29 3b 0a 20  n", azArg[0]);. 
294a0 20 20 20 72 63 20 3d 20 31 3b 0a 20 20 7d 0a 0a     rc = 1;.  }..
294b0 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 5f 65 78 69  meta_command_exi
294c0 74 3a 0a 20 20 69 66 28 20 70 2d 3e 6f 75 74 43  t:.  if( p->outC
294d0 6f 75 6e 74 20 29 7b 0a 20 20 20 20 70 2d 3e 6f  ount ){.    p->o
294e0 75 74 43 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 69  utCount--;.    i
294f0 66 28 20 70 2d 3e 6f 75 74 43 6f 75 6e 74 3d 3d  f( p->outCount==
29500 30 20 29 20 6f 75 74 70 75 74 5f 72 65 73 65 74  0 ) output_reset
29510 28 70 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  (p);.  }.  retur
29520 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  n rc;.}../*.** R
29530 65 74 75 72 6e 20 54 52 55 45 20 69 66 20 61 20  eturn TRUE if a 
29540 73 65 6d 69 63 6f 6c 6f 6e 20 6f 63 63 75 72 73  semicolon occurs
29550 20 61 6e 79 77 68 65 72 65 20 69 6e 20 74 68 65   anywhere in the
29560 20 66 69 72 73 74 20 4e 20 63 68 61 72 61 63 74   first N charact
29570 65 72 73 0a 2a 2a 20 6f 66 20 73 74 72 69 6e 67  ers.** of string
29580 20 7a 5b 5d 2e 0a 2a 2f 0a 73 74 61 74 69 63 20   z[]..*/.static 
29590 69 6e 74 20 6c 69 6e 65 5f 63 6f 6e 74 61 69 6e  int line_contain
295a0 73 5f 73 65 6d 69 63 6f 6c 6f 6e 28 63 6f 6e 73  s_semicolon(cons
295b0 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 4e  t char *z, int N
295c0 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f  ){.  int i;.  fo
295d0 72 28 69 3d 30 3b 20 69 3c 4e 3b 20 69 2b 2b 29  r(i=0; i<N; i++)
295e0 7b 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 3b 27  {  if( z[i]==';'
295f0 20 29 20 72 65 74 75 72 6e 20 31 3b 20 7d 0a 20   ) return 1; }. 
29600 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a   return 0;.}../*
29610 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
29620 69 66 20 61 20 6c 69 6e 65 20 63 6f 6e 73 69 73  if a line consis
29630 74 73 20 65 6e 74 69 72 65 6c 79 20 6f 66 20 77  ts entirely of w
29640 68 69 74 65 73 70 61 63 65 2e 0a 2a 2f 0a 73 74  hitespace..*/.st
29650 61 74 69 63 20 69 6e 74 20 5f 61 6c 6c 5f 77 68  atic int _all_wh
29660 69 74 65 73 70 61 63 65 28 63 6f 6e 73 74 20 63  itespace(const c
29670 68 61 72 20 2a 7a 29 7b 0a 20 20 66 6f 72 28 3b  har *z){.  for(;
29680 20 2a 7a 3b 20 7a 2b 2b 29 7b 0a 20 20 20 20 69   *z; z++){.    i
29690 66 28 20 49 73 53 70 61 63 65 28 7a 5b 30 5d 29  f( IsSpace(z[0])
296a0 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
296b0 20 69 66 28 20 2a 7a 3d 3d 27 2f 27 20 26 26 20   if( *z=='/' && 
296c0 7a 5b 31 5d 3d 3d 27 2a 27 20 29 7b 0a 20 20 20  z[1]=='*' ){.   
296d0 20 20 20 7a 20 2b 3d 20 32 3b 0a 20 20 20 20 20     z += 2;.     
296e0 20 77 68 69 6c 65 28 20 2a 7a 20 26 26 20 28 2a   while( *z && (*
296f0 7a 21 3d 27 2a 27 20 7c 7c 20 7a 5b 31 5d 21 3d  z!='*' || z[1]!=
29700 27 2f 27 29 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20  '/') ){ z++; }. 
29710 20 20 20 20 20 69 66 28 20 2a 7a 3d 3d 30 20 29       if( *z==0 )
29720 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20   return 0;.     
29730 20 7a 2b 2b 3b 0a 20 20 20 20 20 20 63 6f 6e 74   z++;.      cont
29740 69 6e 75 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20  inue;.    }.    
29750 69 66 28 20 2a 7a 3d 3d 27 2d 27 20 26 26 20 7a  if( *z=='-' && z
29760 5b 31 5d 3d 3d 27 2d 27 20 29 7b 0a 20 20 20 20  [1]=='-' ){.    
29770 20 20 7a 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20    z += 2;.      
29780 77 68 69 6c 65 28 20 2a 7a 20 26 26 20 2a 7a 21  while( *z && *z!
29790 3d 27 5c 6e 27 20 29 7b 20 7a 2b 2b 3b 20 7d 0a  ='\n' ){ z++; }.
297a0 20 20 20 20 20 20 69 66 28 20 2a 7a 3d 3d 30 20        if( *z==0 
297b0 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20  ) return 1;.    
297c0 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20    continue;.    
297d0 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  }.    return 0;.
297e0 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a    }.  return 1;.
297f0 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
29800 54 52 55 45 20 69 66 20 74 68 65 20 6c 69 6e 65  TRUE if the line
29810 20 74 79 70 65 64 20 69 6e 20 69 73 20 61 6e 20   typed in is an 
29820 53 51 4c 20 63 6f 6d 6d 61 6e 64 20 74 65 72 6d  SQL command term
29830 69 6e 61 74 6f 72 20 6f 74 68 65 72 0a 2a 2a 20  inator other.** 
29840 74 68 61 6e 20 61 20 73 65 6d 69 2d 63 6f 6c 6f  than a semi-colo
29850 6e 2e 20 20 54 68 65 20 53 51 4c 20 53 65 72 76  n.  The SQL Serv
29860 65 72 20 73 74 79 6c 65 20 22 67 6f 22 20 63 6f  er style "go" co
29870 6d 6d 61 6e 64 20 69 73 20 75 6e 64 65 72 73 74  mmand is underst
29880 6f 6f 64 0a 2a 2a 20 61 73 20 69 73 20 74 68 65  ood.** as is the
29890 20 4f 72 61 63 6c 65 20 22 2f 22 2e 0a 2a 2f 0a   Oracle "/"..*/.
298a0 73 74 61 74 69 63 20 69 6e 74 20 6c 69 6e 65 5f  static int line_
298b0 69 73 5f 63 6f 6d 6d 61 6e 64 5f 74 65 72 6d 69  is_command_termi
298c0 6e 61 74 6f 72 28 63 6f 6e 73 74 20 63 68 61 72  nator(const char
298d0 20 2a 7a 4c 69 6e 65 29 7b 0a 20 20 77 68 69 6c   *zLine){.  whil
298e0 65 28 20 49 73 53 70 61 63 65 28 7a 4c 69 6e 65  e( IsSpace(zLine
298f0 5b 30 5d 29 20 29 7b 20 7a 4c 69 6e 65 2b 2b 3b  [0]) ){ zLine++;
29900 20 7d 3b 0a 20 20 69 66 28 20 7a 4c 69 6e 65 5b   };.  if( zLine[
29910 30 5d 3d 3d 27 2f 27 20 26 26 20 5f 61 6c 6c 5f  0]=='/' && _all_
29920 77 68 69 74 65 73 70 61 63 65 28 26 7a 4c 69 6e  whitespace(&zLin
29930 65 5b 31 5d 29 20 29 7b 0a 20 20 20 20 72 65 74  e[1]) ){.    ret
29940 75 72 6e 20 31 3b 20 20 2f 2a 20 4f 72 61 63 6c  urn 1;  /* Oracl
29950 65 20 2a 2f 0a 20 20 7d 0a 20 20 69 66 28 20 54  e */.  }.  if( T
29960 6f 4c 6f 77 65 72 28 7a 4c 69 6e 65 5b 30 5d 29  oLower(zLine[0])
29970 3d 3d 27 67 27 20 26 26 20 54 6f 4c 6f 77 65 72  =='g' && ToLower
29980 28 7a 4c 69 6e 65 5b 31 5d 29 3d 3d 27 6f 27 0a  (zLine[1])=='o'.
29990 20 20 20 20 20 20 20 20 20 26 26 20 5f 61 6c 6c           && _all
299a0 5f 77 68 69 74 65 73 70 61 63 65 28 26 7a 4c 69  _whitespace(&zLi
299b0 6e 65 5b 32 5d 29 20 29 7b 0a 20 20 20 20 72 65  ne[2]) ){.    re
299c0 74 75 72 6e 20 31 3b 20 20 2f 2a 20 53 51 4c 20  turn 1;  /* SQL 
299d0 53 65 72 76 65 72 20 2a 2f 0a 20 20 7d 0a 20 20  Server */.  }.  
299e0 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a  return 0;.}../*.
299f0 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
29a00 66 20 7a 53 71 6c 20 69 73 20 61 20 63 6f 6d 70  f zSql is a comp
29a10 6c 65 74 65 20 53 51 4c 20 73 74 61 74 65 6d 65  lete SQL stateme
29a20 6e 74 2e 20 20 52 65 74 75 72 6e 20 66 61 6c 73  nt.  Return fals
29a30 65 20 69 66 20 69 74 0a 2a 2a 20 65 6e 64 73 20  e if it.** ends 
29a40 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66  in the middle of
29a50 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61   a string litera
29a60 6c 20 6f 72 20 43 2d 73 74 79 6c 65 20 63 6f 6d  l or C-style com
29a70 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ment..*/.static 
29a80 69 6e 74 20 6c 69 6e 65 5f 69 73 5f 63 6f 6d 70  int line_is_comp
29a90 6c 65 74 65 28 63 68 61 72 20 2a 7a 53 71 6c 2c  lete(char *zSql,
29aa0 20 69 6e 74 20 6e 53 71 6c 29 7b 0a 20 20 69 6e   int nSql){.  in
29ab0 74 20 72 63 3b 0a 20 20 69 66 28 20 7a 53 71 6c  t rc;.  if( zSql
29ac0 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  ==0 ) return 1;.
29ad0 20 20 7a 53 71 6c 5b 6e 53 71 6c 5d 20 3d 20 27    zSql[nSql] = '
29ae0 3b 27 3b 0a 20 20 7a 53 71 6c 5b 6e 53 71 6c 2b  ;';.  zSql[nSql+
29af0 31 5d 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73  1] = 0;.  rc = s
29b00 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 28  qlite3_complete(
29b10 7a 53 71 6c 29 3b 0a 20 20 7a 53 71 6c 5b 6e 53  zSql);.  zSql[nS
29b20 71 6c 5d 20 3d 20 30 3b 0a 20 20 72 65 74 75 72  ql] = 0;.  retur
29b30 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  n rc;.}../*.** R
29b40 75 6e 20 61 20 73 69 6e 67 6c 65 20 6c 69 6e 65  un a single line
29b50 20 6f 66 20 53 51 4c 0a 2a 2f 0a 73 74 61 74 69   of SQL.*/.stati
29b60 63 20 69 6e 74 20 72 75 6e 4f 6e 65 53 71 6c 4c  c int runOneSqlL
29b70 69 6e 65 28 53 68 65 6c 6c 53 74 61 74 65 20 2a  ine(ShellState *
29b80 70 2c 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20 46  p, char *zSql, F
29b90 49 4c 45 20 2a 69 6e 2c 20 69 6e 74 20 73 74 61  ILE *in, int sta
29ba0 72 74 6c 69 6e 65 29 7b 0a 20 20 69 6e 74 20 72  rtline){.  int r
29bb0 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  c;.  char *zErrM
29bc0 73 67 20 3d 20 30 3b 0a 0a 20 20 6f 70 65 6e 5f  sg = 0;..  open_
29bd0 64 62 28 70 2c 20 30 29 3b 0a 20 20 69 66 28 20  db(p, 0);.  if( 
29be0 70 2d 3e 62 61 63 6b 73 6c 61 73 68 4f 6e 20 29  p->backslashOn )
29bf0 20 72 65 73 6f 6c 76 65 5f 62 61 63 6b 73 6c 61   resolve_backsla
29c00 73 68 65 73 28 7a 53 71 6c 29 3b 0a 20 20 42 45  shes(zSql);.  BE
29c10 47 49 4e 5f 54 49 4d 45 52 3b 0a 20 20 72 63 20  GIN_TIMER;.  rc 
29c20 3d 20 73 68 65 6c 6c 5f 65 78 65 63 28 70 2d 3e  = shell_exec(p->
29c30 64 62 2c 20 7a 53 71 6c 2c 20 73 68 65 6c 6c 5f  db, zSql, shell_
29c40 63 61 6c 6c 62 61 63 6b 2c 20 70 2c 20 26 7a 45  callback, p, &zE
29c50 72 72 4d 73 67 29 3b 0a 20 20 45 4e 44 5f 54 49  rrMsg);.  END_TI
29c60 4d 45 52 3b 0a 20 20 69 66 28 20 72 63 20 7c 7c  MER;.  if( rc ||
29c70 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20   zErrMsg ){.    
29c80 63 68 61 72 20 7a 50 72 65 66 69 78 5b 31 30 30  char zPrefix[100
29c90 5d 3b 0a 20 20 20 20 69 66 28 20 69 6e 21 3d 30  ];.    if( in!=0
29ca0 20 7c 7c 20 21 73 74 64 69 6e 5f 69 73 5f 69 6e   || !stdin_is_in
29cb0 74 65 72 61 63 74 69 76 65 20 29 7b 0a 20 20 20  teractive ){.   
29cc0 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
29cd0 6e 74 66 28 73 69 7a 65 6f 66 28 7a 50 72 65 66  ntf(sizeof(zPref
29ce0 69 78 29 2c 20 7a 50 72 65 66 69 78 2c 0a 20 20  ix), zPrefix,.  
29cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d00 20 20 20 20 20 22 45 72 72 6f 72 3a 20 6e 65 61       "Error: nea
29d10 72 20 6c 69 6e 65 20 25 64 3a 22 2c 20 73 74 61  r line %d:", sta
29d20 72 74 6c 69 6e 65 29 3b 0a 20 20 20 20 7d 65 6c  rtline);.    }el
29d30 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  se{.      sqlite
29d40 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
29d50 66 28 7a 50 72 65 66 69 78 29 2c 20 7a 50 72 65  f(zPrefix), zPre
29d60 66 69 78 2c 20 22 45 72 72 6f 72 3a 22 29 3b 0a  fix, "Error:");.
29d70 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 7a 45      }.    if( zE
29d80 72 72 4d 73 67 21 3d 30 20 29 7b 0a 20 20 20 20  rrMsg!=0 ){.    
29d90 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74    utf8_printf(st
29da0 64 65 72 72 2c 20 22 25 73 20 25 73 5c 6e 22 2c  derr, "%s %s\n",
29db0 20 7a 50 72 65 66 69 78 2c 20 7a 45 72 72 4d 73   zPrefix, zErrMs
29dc0 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  g);.      sqlite
29dd0 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29 3b  3_free(zErrMsg);
29de0 0a 20 20 20 20 20 20 7a 45 72 72 4d 73 67 20 3d  .      zErrMsg =
29df0 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
29e00 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
29e10 28 73 74 64 65 72 72 2c 20 22 25 73 20 25 73 5c  (stderr, "%s %s\
29e20 6e 22 2c 20 7a 50 72 65 66 69 78 2c 20 73 71 6c  n", zPrefix, sql
29e30 69 74 65 33 5f 65 72 72 6d 73 67 28 70 2d 3e 64  ite3_errmsg(p->d
29e40 62 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  b));.    }.    r
29e50 65 74 75 72 6e 20 31 3b 0a 20 20 7d 65 6c 73 65  eturn 1;.  }else
29e60 20 69 66 28 20 70 2d 3e 63 6f 75 6e 74 43 68 61   if( p->countCha
29e70 6e 67 65 73 20 29 7b 0a 20 20 20 20 72 61 77 5f  nges ){.    raw_
29e80 70 72 69 6e 74 66 28 70 2d 3e 6f 75 74 2c 20 22  printf(p->out, "
29e90 63 68 61 6e 67 65 73 3a 20 25 33 64 20 20 20 74  changes: %3d   t
29ea0 6f 74 61 6c 5f 63 68 61 6e 67 65 73 3a 20 25 64  otal_changes: %d
29eb0 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \n",.           
29ec0 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
29ed0 28 70 2d 3e 64 62 29 2c 20 73 71 6c 69 74 65 33  (p->db), sqlite3
29ee0 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 70  _total_changes(p
29ef0 2d 3e 64 62 29 29 3b 0a 20 20 7d 0a 20 20 72 65  ->db));.  }.  re
29f00 74 75 72 6e 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  turn 0;.}.../*.*
29f10 2a 20 52 65 61 64 20 69 6e 70 75 74 20 66 72 6f  * Read input fro
29f20 6d 20 2a 69 6e 20 61 6e 64 20 70 72 6f 63 65 73  m *in and proces
29f30 73 20 69 74 2e 20 20 49 66 20 2a 69 6e 3d 3d 30  s it.  If *in==0
29f40 20 74 68 65 6e 20 69 6e 70 75 74 0a 2a 2a 20 69   then input.** i
29f50 73 20 69 6e 74 65 72 61 63 74 69 76 65 20 2d 20  s interactive - 
29f60 74 68 65 20 75 73 65 72 20 69 73 20 74 79 70 69  the user is typi
29f70 6e 67 20 69 74 20 69 74 2e 20 20 4f 74 68 65 72  ng it it.  Other
29f80 77 69 73 65 2c 20 69 6e 70 75 74 0a 2a 2a 20 69  wise, input.** i
29f90 73 20 63 6f 6d 69 6e 67 20 66 72 6f 6d 20 61 20  s coming from a 
29fa0 66 69 6c 65 20 6f 72 20 64 65 76 69 63 65 2e 20  file or device. 
29fb0 20 41 20 70 72 6f 6d 70 74 20 69 73 20 69 73 73   A prompt is iss
29fc0 75 65 64 20 61 6e 64 20 68 69 73 74 6f 72 79 0a  ued and history.
29fd0 2a 2a 20 69 73 20 73 61 76 65 64 20 6f 6e 6c 79  ** is saved only
29fe0 20 69 66 20 69 6e 70 75 74 20 69 73 20 69 6e 74   if input is int
29ff0 65 72 61 63 74 69 76 65 2e 20 20 41 6e 20 69 6e  eractive.  An in
2a000 74 65 72 72 75 70 74 20 73 69 67 6e 61 6c 20 77  terrupt signal w
2a010 69 6c 6c 0a 2a 2a 20 63 61 75 73 65 20 74 68 69  ill.** cause thi
2a020 73 20 72 6f 75 74 69 6e 65 20 74 6f 20 65 78 69  s routine to exi
2a030 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2c 20 75  t immediately, u
2a040 6e 6c 65 73 73 20 69 6e 70 75 74 20 69 73 20 69  nless input is i
2a050 6e 74 65 72 61 63 74 69 76 65 2e 0a 2a 2a 0a 2a  nteractive..**.*
2a060 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  * Return the num
2a070 62 65 72 20 6f 66 20 65 72 72 6f 72 73 2e 0a 2a  ber of errors..*
2a080 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 70 72 6f  /.static int pro
2a090 63 65 73 73 5f 69 6e 70 75 74 28 53 68 65 6c 6c  cess_input(Shell
2a0a0 53 74 61 74 65 20 2a 70 2c 20 46 49 4c 45 20 2a  State *p, FILE *
2a0b0 69 6e 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4c 69  in){.  char *zLi
2a0c0 6e 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ne = 0;         
2a0d0 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 69 6e 70   /* A single inp
2a0e0 75 74 20 6c 69 6e 65 20 2a 2f 0a 20 20 63 68 61  ut line */.  cha
2a0f0 72 20 2a 7a 53 71 6c 20 3d 20 30 3b 20 20 20 20  r *zSql = 0;    
2a100 20 20 20 20 20 20 20 2f 2a 20 41 63 63 75 6d 75         /* Accumu
2a110 6c 61 74 65 64 20 53 51 4c 20 74 65 78 74 20 2a  lated SQL text *
2a120 2f 0a 20 20 69 6e 74 20 6e 4c 69 6e 65 3b 20 20  /.  int nLine;  
2a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2a140 20 4c 65 6e 67 74 68 20 6f 66 20 63 75 72 72 65   Length of curre
2a150 6e 74 20 6c 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  nt line */.  int
2a160 20 6e 53 71 6c 20 3d 20 30 3b 20 20 20 20 20 20   nSql = 0;      
2a170 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20         /* Bytes 
2a180 6f 66 20 7a 53 71 6c 5b 5d 20 75 73 65 64 20 2a  of zSql[] used *
2a190 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 20 3d  /.  int nAlloc =
2a1a0 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a   0;           /*
2a1b0 20 41 6c 6c 6f 63 61 74 65 64 20 7a 53 71 6c 5b   Allocated zSql[
2a1c0 5d 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74  ] space */.  int
2a1d0 20 6e 53 71 6c 50 72 69 6f 72 20 3d 20 30 3b 20   nSqlPrior = 0; 
2a1e0 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20         /* Bytes 
2a1f0 6f 66 20 7a 53 71 6c 5b 5d 20 75 73 65 64 20 62  of zSql[] used b
2a200 79 20 70 72 69 6f 72 20 6c 69 6e 65 20 2a 2f 0a  y prior line */.
2a210 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
2a220 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
2a230 72 72 6f 72 20 63 6f 64 65 20 2a 2f 0a 20 20 69  rror code */.  i
2a240 6e 74 20 65 72 72 43 6e 74 20 3d 20 30 3b 20 20  nt errCnt = 0;  
2a250 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
2a260 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65  er of errors see
2a270 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 69 6e 65 6e  n */.  int linen
2a280 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  o = 0;          
2a290 20 2f 2a 20 43 75 72 72 65 6e 74 20 6c 69 6e 65   /* Current line
2a2a0 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 69 6e 74   number */.  int
2a2b0 20 73 74 61 72 74 6c 69 6e 65 20 3d 20 30 3b 20   startline = 0; 
2a2c0 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 65 20 6e         /* Line n
2a2d0 75 6d 62 65 72 20 66 6f 72 20 73 74 61 72 74 20  umber for start 
2a2e0 6f 66 20 63 75 72 72 65 6e 74 20 69 6e 70 75 74  of current input
2a2f0 20 2a 2f 0a 0a 20 20 77 68 69 6c 65 28 20 65 72   */..  while( er
2a300 72 43 6e 74 3d 3d 30 20 7c 7c 20 21 62 61 69 6c  rCnt==0 || !bail
2a310 5f 6f 6e 5f 65 72 72 6f 72 20 7c 7c 20 28 69 6e  _on_error || (in
2a320 3d 3d 30 20 26 26 20 73 74 64 69 6e 5f 69 73 5f  ==0 && stdin_is_
2a330 69 6e 74 65 72 61 63 74 69 76 65 29 20 29 7b 0a  interactive) ){.
2a340 20 20 20 20 66 66 6c 75 73 68 28 70 2d 3e 6f 75      fflush(p->ou
2a350 74 29 3b 0a 20 20 20 20 7a 4c 69 6e 65 20 3d 20  t);.    zLine = 
2a360 6f 6e 65 5f 69 6e 70 75 74 5f 6c 69 6e 65 28 69  one_input_line(i
2a370 6e 2c 20 7a 4c 69 6e 65 2c 20 6e 53 71 6c 3e 30  n, zLine, nSql>0
2a380 29 3b 0a 20 20 20 20 69 66 28 20 7a 4c 69 6e 65  );.    if( zLine
2a390 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ==0 ){.      /* 
2a3a0 45 6e 64 20 6f 66 20 69 6e 70 75 74 20 2a 2f 0a  End of input */.
2a3b0 20 20 20 20 20 20 69 66 28 20 69 6e 3d 3d 30 20        if( in==0 
2a3c0 26 26 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65  && stdin_is_inte
2a3d0 72 61 63 74 69 76 65 20 29 20 70 72 69 6e 74 66  ractive ) printf
2a3e0 28 22 5c 6e 22 29 3b 0a 20 20 20 20 20 20 62 72  ("\n");.      br
2a3f0 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  eak;.    }.    i
2a400 66 28 20 73 65 65 6e 49 6e 74 65 72 72 75 70 74  f( seenInterrupt
2a410 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 69 6e   ){.      if( in
2a420 21 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  !=0 ) break;.   
2a430 20 20 20 73 65 65 6e 49 6e 74 65 72 72 75 70 74     seenInterrupt
2a440 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
2a450 6c 69 6e 65 6e 6f 2b 2b 3b 0a 20 20 20 20 69 66  lineno++;.    if
2a460 28 20 6e 53 71 6c 3d 3d 30 20 26 26 20 5f 61 6c  ( nSql==0 && _al
2a470 6c 5f 77 68 69 74 65 73 70 61 63 65 28 7a 4c 69  l_whitespace(zLi
2a480 6e 65 29 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ne) ){.      if(
2a490 20 70 2d 3e 65 63 68 6f 4f 6e 20 29 20 70 72 69   p->echoOn ) pri
2a4a0 6e 74 66 28 22 25 73 5c 6e 22 2c 20 7a 4c 69 6e  ntf("%s\n", zLin
2a4b0 65 29 3b 0a 20 20 20 20 20 20 63 6f 6e 74 69 6e  e);.      contin
2a4c0 75 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ue;.    }.    if
2a4d0 28 20 7a 4c 69 6e 65 20 26 26 20 7a 4c 69 6e 65  ( zLine && zLine
2a4e0 5b 30 5d 3d 3d 27 2e 27 20 26 26 20 6e 53 71 6c  [0]=='.' && nSql
2a4f0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
2a500 20 70 2d 3e 65 63 68 6f 4f 6e 20 29 20 70 72 69   p->echoOn ) pri
2a510 6e 74 66 28 22 25 73 5c 6e 22 2c 20 7a 4c 69 6e  ntf("%s\n", zLin
2a520 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 64  e);.      rc = d
2a530 6f 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64 28 7a  o_meta_command(z
2a540 4c 69 6e 65 2c 20 70 29 3b 0a 20 20 20 20 20 20  Line, p);.      
2a550 69 66 28 20 72 63 3d 3d 32 20 29 7b 20 2f 2a 20  if( rc==2 ){ /* 
2a560 65 78 69 74 20 72 65 71 75 65 73 74 65 64 20 2a  exit requested *
2a570 2f 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  /.        break;
2a580 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
2a590 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 65   rc ){.        e
2a5a0 72 72 43 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 7d  rrCnt++;.      }
2a5b0 0a 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b  .      continue;
2a5c0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 6c  .    }.    if( l
2a5d0 69 6e 65 5f 69 73 5f 63 6f 6d 6d 61 6e 64 5f 74  ine_is_command_t
2a5e0 65 72 6d 69 6e 61 74 6f 72 28 7a 4c 69 6e 65 29  erminator(zLine)
2a5f0 20 26 26 20 6c 69 6e 65 5f 69 73 5f 63 6f 6d 70   && line_is_comp
2a600 6c 65 74 65 28 7a 53 71 6c 2c 20 6e 53 71 6c 29  lete(zSql, nSql)
2a610 20 29 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79   ){.      memcpy
2a620 28 7a 4c 69 6e 65 2c 22 3b 22 2c 32 29 3b 0a 20  (zLine,";",2);. 
2a630 20 20 20 7d 0a 20 20 20 20 6e 4c 69 6e 65 20 3d     }.    nLine =
2a640 20 73 74 72 6c 65 6e 33 30 28 7a 4c 69 6e 65 29   strlen30(zLine)
2a650 3b 0a 20 20 20 20 69 66 28 20 6e 53 71 6c 2b 6e  ;.    if( nSql+n
2a660 4c 69 6e 65 2b 32 3e 3d 6e 41 6c 6c 6f 63 20 29  Line+2>=nAlloc )
2a670 7b 0a 20 20 20 20 20 20 6e 41 6c 6c 6f 63 20 3d  {.      nAlloc =
2a680 20 6e 53 71 6c 2b 6e 4c 69 6e 65 2b 31 30 30 3b   nSql+nLine+100;
2a690 0a 20 20 20 20 20 20 7a 53 71 6c 20 3d 20 72 65  .      zSql = re
2a6a0 61 6c 6c 6f 63 28 7a 53 71 6c 2c 20 6e 41 6c 6c  alloc(zSql, nAll
2a6b0 6f 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  oc);.      if( z
2a6c0 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Sql==0 ){.      
2a6d0 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64    raw_printf(std
2a6e0 65 72 72 2c 20 22 45 72 72 6f 72 3a 20 6f 75 74  err, "Error: out
2a6f0 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a   of memory\n");.
2a700 20 20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b          exit(1);
2a710 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
2a720 20 20 20 6e 53 71 6c 50 72 69 6f 72 20 3d 20 6e     nSqlPrior = n
2a730 53 71 6c 3b 0a 20 20 20 20 69 66 28 20 6e 53 71  Sql;.    if( nSq
2a740 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e  l==0 ){.      in
2a750 74 20 69 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  t i;.      for(i
2a760 3d 30 3b 20 7a 4c 69 6e 65 5b 69 5d 20 26 26 20  =0; zLine[i] && 
2a770 49 73 53 70 61 63 65 28 7a 4c 69 6e 65 5b 69 5d  IsSpace(zLine[i]
2a780 29 3b 20 69 2b 2b 29 7b 7d 0a 20 20 20 20 20 20  ); i++){}.      
2a790 61 73 73 65 72 74 28 20 6e 41 6c 6c 6f 63 3e 30  assert( nAlloc>0
2a7a0 20 26 26 20 7a 53 71 6c 21 3d 30 20 29 3b 0a 20   && zSql!=0 );. 
2a7b0 20 20 20 20 20 6d 65 6d 63 70 79 28 7a 53 71 6c       memcpy(zSql
2a7c0 2c 20 7a 4c 69 6e 65 2b 69 2c 20 6e 4c 69 6e 65  , zLine+i, nLine
2a7d0 2b 31 2d 69 29 3b 0a 20 20 20 20 20 20 73 74 61  +1-i);.      sta
2a7e0 72 74 6c 69 6e 65 20 3d 20 6c 69 6e 65 6e 6f 3b  rtline = lineno;
2a7f0 0a 20 20 20 20 20 20 6e 53 71 6c 20 3d 20 6e 4c  .      nSql = nL
2a800 69 6e 65 2d 69 3b 0a 20 20 20 20 7d 65 6c 73 65  ine-i;.    }else
2a810 7b 0a 20 20 20 20 20 20 7a 53 71 6c 5b 6e 53 71  {.      zSql[nSq
2a820 6c 2b 2b 5d 20 3d 20 27 5c 6e 27 3b 0a 20 20 20  l++] = '\n';.   
2a830 20 20 20 6d 65 6d 63 70 79 28 7a 53 71 6c 2b 6e     memcpy(zSql+n
2a840 53 71 6c 2c 20 7a 4c 69 6e 65 2c 20 6e 4c 69 6e  Sql, zLine, nLin
2a850 65 2b 31 29 3b 0a 20 20 20 20 20 20 6e 53 71 6c  e+1);.      nSql
2a860 20 2b 3d 20 6e 4c 69 6e 65 3b 0a 20 20 20 20 7d   += nLine;.    }
2a870 0a 20 20 20 20 69 66 28 20 6e 53 71 6c 20 26 26  .    if( nSql &&
2a880 20 6c 69 6e 65 5f 63 6f 6e 74 61 69 6e 73 5f 73   line_contains_s
2a890 65 6d 69 63 6f 6c 6f 6e 28 26 7a 53 71 6c 5b 6e  emicolon(&zSql[n
2a8a0 53 71 6c 50 72 69 6f 72 5d 2c 20 6e 53 71 6c 2d  SqlPrior], nSql-
2a8b0 6e 53 71 6c 50 72 69 6f 72 29 0a 20 20 20 20 20  nSqlPrior).     
2a8c0 20 20 20 20 20 20 20 20 20 20 20 26 26 20 73 71             && sq
2a8d0 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 28 7a  lite3_complete(z
2a8e0 53 71 6c 29 20 29 7b 0a 20 20 20 20 20 20 65 72  Sql) ){.      er
2a8f0 72 43 6e 74 20 2b 3d 20 72 75 6e 4f 6e 65 53 71  rCnt += runOneSq
2a900 6c 4c 69 6e 65 28 70 2c 20 7a 53 71 6c 2c 20 69  lLine(p, zSql, i
2a910 6e 2c 20 73 74 61 72 74 6c 69 6e 65 29 3b 0a 20  n, startline);. 
2a920 20 20 20 20 20 6e 53 71 6c 20 3d 20 30 3b 0a 20       nSql = 0;. 
2a930 20 20 20 20 20 69 66 28 20 70 2d 3e 6f 75 74 43       if( p->outC
2a940 6f 75 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20  ount ){.        
2a950 6f 75 74 70 75 74 5f 72 65 73 65 74 28 70 29 3b  output_reset(p);
2a960 0a 20 20 20 20 20 20 20 20 70 2d 3e 6f 75 74 43  .        p->outC
2a970 6f 75 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  ount = 0;.      
2a980 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  }.    }else if( 
2a990 6e 53 71 6c 20 26 26 20 5f 61 6c 6c 5f 77 68 69  nSql && _all_whi
2a9a0 74 65 73 70 61 63 65 28 7a 53 71 6c 29 20 29 7b  tespace(zSql) ){
2a9b0 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 65 63  .      if( p->ec
2a9c0 68 6f 4f 6e 20 29 20 70 72 69 6e 74 66 28 22 25  hoOn ) printf("%
2a9d0 73 5c 6e 22 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  s\n", zSql);.   
2a9e0 20 20 20 6e 53 71 6c 20 3d 20 30 3b 0a 20 20 20     nSql = 0;.   
2a9f0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 6e 53 71   }.  }.  if( nSq
2aa00 6c 20 26 26 20 21 5f 61 6c 6c 5f 77 68 69 74 65  l && !_all_white
2aa10 73 70 61 63 65 28 7a 53 71 6c 29 20 29 7b 0a 20  space(zSql) ){. 
2aa20 20 20 20 72 75 6e 4f 6e 65 53 71 6c 4c 69 6e 65     runOneSqlLine
2aa30 28 70 2c 20 7a 53 71 6c 2c 20 69 6e 2c 20 73 74  (p, zSql, in, st
2aa40 61 72 74 6c 69 6e 65 29 3b 0a 20 20 7d 0a 20 20  artline);.  }.  
2aa50 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 66 72  free(zSql);.  fr
2aa60 65 65 28 7a 4c 69 6e 65 29 3b 0a 20 20 72 65 74  ee(zLine);.  ret
2aa70 75 72 6e 20 65 72 72 43 6e 74 3e 30 3b 0a 7d 0a  urn errCnt>0;.}.
2aa80 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20  ./*.** Return a 
2aa90 70 61 74 68 6e 61 6d 65 20 77 68 69 63 68 20 69  pathname which i
2aaa0 73 20 74 68 65 20 75 73 65 72 27 73 20 68 6f 6d  s the user's hom
2aab0 65 20 64 69 72 65 63 74 6f 72 79 2e 20 20 41 0a  e directory.  A.
2aac0 2a 2a 20 30 20 72 65 74 75 72 6e 20 69 6e 64 69  ** 0 return indi
2aad0 63 61 74 65 73 20 61 6e 20 65 72 72 6f 72 20 6f  cates an error o
2aae0 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 2a 2f 0a  f some kind..*/.
2aaf0 73 74 61 74 69 63 20 63 68 61 72 20 2a 66 69 6e  static char *fin
2ab00 64 5f 68 6f 6d 65 5f 64 69 72 28 69 6e 74 20 63  d_home_dir(int c
2ab10 6c 65 61 72 46 6c 61 67 29 7b 0a 20 20 73 74 61  learFlag){.  sta
2ab20 74 69 63 20 63 68 61 72 20 2a 68 6f 6d 65 5f 64  tic char *home_d
2ab30 69 72 20 3d 20 4e 55 4c 4c 3b 0a 20 20 69 66 28  ir = NULL;.  if(
2ab40 20 63 6c 65 61 72 46 6c 61 67 20 29 7b 0a 20 20   clearFlag ){.  
2ab50 20 20 66 72 65 65 28 68 6f 6d 65 5f 64 69 72 29    free(home_dir)
2ab60 3b 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d  ;.    home_dir =
2ab70 20 30 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30   0;.    return 0
2ab80 3b 0a 20 20 7d 0a 20 20 69 66 28 20 68 6f 6d 65  ;.  }.  if( home
2ab90 5f 64 69 72 20 29 20 72 65 74 75 72 6e 20 68 6f  _dir ) return ho
2aba0 6d 65 5f 64 69 72 3b 0a 0a 23 69 66 20 21 64 65  me_dir;..#if !de
2abb0 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 26 26  fined(_WIN32) &&
2abc0 20 21 64 65 66 69 6e 65 64 28 57 49 4e 33 32 29   !defined(WIN32)
2abd0 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57 49   && !defined(_WI
2abe0 4e 33 32 5f 57 43 45 29 20 5c 0a 20 20 20 20 20  N32_WCE) \.     
2abf0 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 52 54  && !defined(__RT
2ac00 50 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  P__) && !defined
2ac10 28 5f 57 52 53 5f 4b 45 52 4e 45 4c 29 0a 20 20  (_WRS_KERNEL).  
2ac20 7b 0a 20 20 20 20 73 74 72 75 63 74 20 70 61 73  {.    struct pas
2ac30 73 77 64 20 2a 70 77 65 6e 74 3b 0a 20 20 20 20  swd *pwent;.    
2ac40 75 69 64 5f 74 20 75 69 64 20 3d 20 67 65 74 75  uid_t uid = getu
2ac50 69 64 28 29 3b 0a 20 20 20 20 69 66 28 20 28 70  id();.    if( (p
2ac60 77 65 6e 74 3d 67 65 74 70 77 75 69 64 28 75 69  went=getpwuid(ui
2ac70 64 29 29 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 20  d)) != NULL) {. 
2ac80 20 20 20 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20       home_dir = 
2ac90 70 77 65 6e 74 2d 3e 70 77 5f 64 69 72 3b 0a 20  pwent->pw_dir;. 
2aca0 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a     }.  }.#endif.
2acb0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 57 49  .#if defined(_WI
2acc0 4e 33 32 5f 57 43 45 29 0a 20 20 2f 2a 20 57 69  N32_WCE).  /* Wi
2acd0 6e 64 6f 77 73 20 43 45 20 28 61 72 6d 2d 77 69  ndows CE (arm-wi
2ace0 6e 63 65 2d 6d 69 6e 67 77 33 32 63 65 2d 67 63  nce-mingw32ce-gc
2acf0 63 29 20 64 6f 65 73 20 6e 6f 74 20 70 72 6f 76  c) does not prov
2ad00 69 64 65 20 67 65 74 65 6e 76 28 29 0a 20 20 20  ide getenv().   
2ad10 2a 2f 0a 20 20 68 6f 6d 65 5f 64 69 72 20 3d 20  */.  home_dir = 
2ad20 22 2f 22 3b 0a 23 65 6c 73 65 0a 0a 23 69 66 20  "/";.#else..#if 
2ad30 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
2ad40 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e 33 32  || defined(WIN32
2ad50 29 0a 20 20 69 66 20 28 21 68 6f 6d 65 5f 64 69  ).  if (!home_di
2ad60 72 29 20 7b 0a 20 20 20 20 68 6f 6d 65 5f 64 69  r) {.    home_di
2ad70 72 20 3d 20 67 65 74 65 6e 76 28 22 55 53 45 52  r = getenv("USER
2ad80 50 52 4f 46 49 4c 45 22 29 3b 0a 20 20 7d 0a 23  PROFILE");.  }.#
2ad90 65 6e 64 69 66 0a 0a 20 20 69 66 20 28 21 68 6f  endif..  if (!ho
2ada0 6d 65 5f 64 69 72 29 20 7b 0a 20 20 20 20 68 6f  me_dir) {.    ho
2adb0 6d 65 5f 64 69 72 20 3d 20 67 65 74 65 6e 76 28  me_dir = getenv(
2adc0 22 48 4f 4d 45 22 29 3b 0a 20 20 7d 0a 0a 23 69  "HOME");.  }..#i
2add0 66 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32  f defined(_WIN32
2ade0 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 57 49 4e  ) || defined(WIN
2adf0 33 32 29 0a 20 20 69 66 20 28 21 68 6f 6d 65 5f  32).  if (!home_
2ae00 64 69 72 29 20 7b 0a 20 20 20 20 63 68 61 72 20  dir) {.    char 
2ae10 2a 7a 44 72 69 76 65 2c 20 2a 7a 50 61 74 68 3b  *zDrive, *zPath;
2ae20 0a 20 20 20 20 69 6e 74 20 6e 3b 0a 20 20 20 20  .    int n;.    
2ae30 7a 44 72 69 76 65 20 3d 20 67 65 74 65 6e 76 28  zDrive = getenv(
2ae40 22 48 4f 4d 45 44 52 49 56 45 22 29 3b 0a 20 20  "HOMEDRIVE");.  
2ae50 20 20 7a 50 61 74 68 20 3d 20 67 65 74 65 6e 76    zPath = getenv
2ae60 28 22 48 4f 4d 45 50 41 54 48 22 29 3b 0a 20 20  ("HOMEPATH");.  
2ae70 20 20 69 66 28 20 7a 44 72 69 76 65 20 26 26 20    if( zDrive && 
2ae80 7a 50 61 74 68 20 29 7b 0a 20 20 20 20 20 20 6e  zPath ){.      n
2ae90 20 3d 20 73 74 72 6c 65 6e 33 30 28 7a 44 72 69   = strlen30(zDri
2aea0 76 65 29 20 2b 20 73 74 72 6c 65 6e 33 30 28 7a  ve) + strlen30(z
2aeb0 50 61 74 68 29 20 2b 20 31 3b 0a 20 20 20 20 20  Path) + 1;.     
2aec0 20 68 6f 6d 65 5f 64 69 72 20 3d 20 6d 61 6c 6c   home_dir = mall
2aed0 6f 63 28 20 6e 20 29 3b 0a 20 20 20 20 20 20 69  oc( n );.      i
2aee0 66 28 20 68 6f 6d 65 5f 64 69 72 3d 3d 30 20 29  f( home_dir==0 )
2aef0 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20   return 0;.     
2af00 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2af10 66 28 6e 2c 20 68 6f 6d 65 5f 64 69 72 2c 20 22  f(n, home_dir, "
2af20 25 73 25 73 22 2c 20 7a 44 72 69 76 65 2c 20 7a  %s%s", zDrive, z
2af30 50 61 74 68 29 3b 0a 20 20 20 20 20 20 72 65 74  Path);.      ret
2af40 75 72 6e 20 68 6f 6d 65 5f 64 69 72 3b 0a 20 20  urn home_dir;.  
2af50 20 20 7d 0a 20 20 20 20 68 6f 6d 65 5f 64 69 72    }.    home_dir
2af60 20 3d 20 22 63 3a 5c 5c 22 3b 0a 20 20 7d 0a 23   = "c:\\";.  }.#
2af70 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a  endif..#endif /*
2af80 20 21 5f 57 49 4e 33 32 5f 57 43 45 20 2a 2f 0a   !_WIN32_WCE */.
2af90 0a 20 20 69 66 28 20 68 6f 6d 65 5f 64 69 72 20  .  if( home_dir 
2afa0 29 7b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20 73  ){.    int n = s
2afb0 74 72 6c 65 6e 33 30 28 68 6f 6d 65 5f 64 69 72  trlen30(home_dir
2afc0 29 20 2b 20 31 3b 0a 20 20 20 20 63 68 61 72 20  ) + 1;.    char 
2afd0 2a 7a 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e 20 29  *z = malloc( n )
2afe0 3b 0a 20 20 20 20 69 66 28 20 7a 20 29 20 6d 65  ;.    if( z ) me
2aff0 6d 63 70 79 28 7a 2c 20 68 6f 6d 65 5f 64 69 72  mcpy(z, home_dir
2b000 2c 20 6e 29 3b 0a 20 20 20 20 68 6f 6d 65 5f 64  , n);.    home_d
2b010 69 72 20 3d 20 7a 3b 0a 20 20 7d 0a 0a 20 20 72  ir = z;.  }..  r
2b020 65 74 75 72 6e 20 68 6f 6d 65 5f 64 69 72 3b 0a  eturn home_dir;.
2b030 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 61 64 20 69 6e  }../*.** Read in
2b040 70 75 74 20 66 72 6f 6d 20 74 68 65 20 66 69 6c  put from the fil
2b050 65 20 67 69 76 65 6e 20 62 79 20 73 71 6c 69 74  e given by sqlit
2b060 65 72 63 5f 6f 76 65 72 72 69 64 65 2e 20 20 4f  erc_override.  O
2b070 72 20 69 66 20 74 68 61 74 0a 2a 2a 20 70 61 72  r if that.** par
2b080 61 6d 65 74 65 72 20 69 73 20 4e 55 4c 4c 2c 20  ameter is NULL, 
2b090 74 61 6b 65 20 69 6e 70 75 74 20 66 72 6f 6d 20  take input from 
2b0a0 7e 2f 2e 73 71 6c 69 74 65 72 63 0a 2a 2a 0a 2a  ~/.sqliterc.**.*
2b0b0 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75  * Returns the nu
2b0c0 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 2e 0a  mber of errors..
2b0d0 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70  */.static void p
2b0e0 72 6f 63 65 73 73 5f 73 71 6c 69 74 65 72 63 28  rocess_sqliterc(
2b0f0 0a 20 20 53 68 65 6c 6c 53 74 61 74 65 20 2a 70  .  ShellState *p
2b100 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
2b110 20 20 20 2f 2a 20 43 6f 6e 66 69 67 75 72 61 74     /* Configurat
2b120 69 6f 6e 20 64 61 74 61 20 2a 2f 0a 20 20 63 6f  ion data */.  co
2b130 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2b140 72 63 5f 6f 76 65 72 72 69 64 65 20 20 20 2f 2a  rc_override   /*
2b150 20 4e 61 6d 65 20 6f 66 20 63 6f 6e 66 69 67 20   Name of config 
2b160 66 69 6c 65 2e 20 4e 55 4c 4c 20 74 6f 20 75 73  file. NULL to us
2b170 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 29 7b 0a  e default */.){.
2b180 20 20 63 68 61 72 20 2a 68 6f 6d 65 5f 64 69 72    char *home_dir
2b190 20 3d 20 4e 55 4c 4c 3b 0a 20 20 63 6f 6e 73 74   = NULL;.  const
2b1a0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 72 63 20   char *sqliterc 
2b1b0 3d 20 73 71 6c 69 74 65 72 63 5f 6f 76 65 72 72  = sqliterc_overr
2b1c0 69 64 65 3b 0a 20 20 63 68 61 72 20 2a 7a 42 75  ide;.  char *zBu
2b1d0 66 20 3d 20 30 3b 0a 20 20 46 49 4c 45 20 2a 69  f = 0;.  FILE *i
2b1e0 6e 20 3d 20 4e 55 4c 4c 3b 0a 0a 20 20 69 66 20  n = NULL;..  if 
2b1f0 28 73 71 6c 69 74 65 72 63 20 3d 3d 20 4e 55 4c  (sqliterc == NUL
2b200 4c 29 20 7b 0a 20 20 20 20 68 6f 6d 65 5f 64 69  L) {.    home_di
2b210 72 20 3d 20 66 69 6e 64 5f 68 6f 6d 65 5f 64 69  r = find_home_di
2b220 72 28 30 29 3b 0a 20 20 20 20 69 66 28 20 68 6f  r(0);.    if( ho
2b230 6d 65 5f 64 69 72 3d 3d 30 20 29 7b 0a 20 20 20  me_dir==0 ){.   
2b240 20 20 20 72 61 77 5f 70 72 69 6e 74 66 28 73 74     raw_printf(st
2b250 64 65 72 72 2c 20 22 2d 2d 20 77 61 72 6e 69 6e  derr, "-- warnin
2b260 67 3a 20 63 61 6e 6e 6f 74 20 66 69 6e 64 20 68  g: cannot find h
2b270 6f 6d 65 20 64 69 72 65 63 74 6f 72 79 3b 22 0a  ome directory;".
2b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b290 20 20 20 20 20 20 22 20 63 61 6e 6e 6f 74 20 72        " cannot r
2b2a0 65 61 64 20 7e 2f 2e 73 71 6c 69 74 65 72 63 5c  ead ~/.sqliterc\
2b2b0 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  n");.      retur
2b2c0 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  n;.    }.    sql
2b2d0 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28  ite3_initialize(
2b2e0 29 3b 0a 20 20 20 20 7a 42 75 66 20 3d 20 73 71  );.    zBuf = sq
2b2f0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25  lite3_mprintf("%
2b300 73 2f 2e 73 71 6c 69 74 65 72 63 22 2c 68 6f 6d  s/.sqliterc",hom
2b310 65 5f 64 69 72 29 3b 0a 20 20 20 20 73 71 6c 69  e_dir);.    sqli
2b320 74 65 72 63 20 3d 20 7a 42 75 66 3b 0a 20 20 7d  terc = zBuf;.  }
2b330 0a 20 20 69 6e 20 3d 20 66 6f 70 65 6e 28 73 71  .  in = fopen(sq
2b340 6c 69 74 65 72 63 2c 22 72 62 22 29 3b 0a 20 20  literc,"rb");.  
2b350 69 66 28 20 69 6e 20 29 7b 0a 20 20 20 20 69 66  if( in ){.    if
2b360 28 20 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72  ( stdin_is_inter
2b370 61 63 74 69 76 65 20 29 7b 0a 20 20 20 20 20 20  active ){.      
2b380 75 74 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65  utf8_printf(stde
2b390 72 72 2c 22 2d 2d 20 4c 6f 61 64 69 6e 67 20 72  rr,"-- Loading r
2b3a0 65 73 6f 75 72 63 65 73 20 66 72 6f 6d 20 25 73  esources from %s
2b3b0 5c 6e 22 2c 73 71 6c 69 74 65 72 63 29 3b 0a 20  \n",sqliterc);. 
2b3c0 20 20 20 7d 0a 20 20 20 20 70 72 6f 63 65 73 73     }.    process
2b3d0 5f 69 6e 70 75 74 28 70 2c 69 6e 29 3b 0a 20 20  _input(p,in);.  
2b3e0 20 20 66 63 6c 6f 73 65 28 69 6e 29 3b 0a 20 20    fclose(in);.  
2b3f0 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  }.  sqlite3_free
2b400 28 7a 42 75 66 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  (zBuf);.}../*.**
2b410 20 53 68 6f 77 20 61 76 61 69 6c 61 62 6c 65 20   Show available 
2b420 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74  command line opt
2b430 69 6f 6e 73 0a 2a 2f 0a 73 74 61 74 69 63 20 63  ions.*/.static c
2b440 6f 6e 73 74 20 63 68 61 72 20 7a 4f 70 74 69 6f  onst char zOptio
2b450 6e 73 5b 5d 20 3d 0a 20 20 22 20 20 20 2d 61 73  ns[] =.  "   -as
2b460 63 69 69 20 20 20 20 20 20 20 20 20 20 20 20 20  cii             
2b470 20 20 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64    set output mod
2b480 65 20 74 6f 20 27 61 73 63 69 69 27 5c 6e 22 0a  e to 'ascii'\n".
2b490 20 20 22 20 20 20 2d 62 61 69 6c 20 20 20 20 20    "   -bail     
2b4a0 20 20 20 20 20 20 20 20 20 20 20 73 74 6f 70 20             stop 
2b4b0 61 66 74 65 72 20 68 69 74 74 69 6e 67 20 61 6e  after hitting an
2b4c0 20 65 72 72 6f 72 5c 6e 22 0a 20 20 22 20 20 20   error\n".  "   
2b4d0 2d 62 61 74 63 68 20 20 20 20 20 20 20 20 20 20  -batch          
2b4e0 20 20 20 20 20 66 6f 72 63 65 20 62 61 74 63 68       force batch
2b4f0 20 49 2f 4f 5c 6e 22 0a 20 20 22 20 20 20 2d 63   I/O\n".  "   -c
2b500 6f 6c 75 6d 6e 20 20 20 20 20 20 20 20 20 20 20  olumn           
2b510 20 20 20 73 65 74 20 6f 75 74 70 75 74 20 6d 6f     set output mo
2b520 64 65 20 74 6f 20 27 63 6f 6c 75 6d 6e 27 5c 6e  de to 'column'\n
2b530 22 0a 20 20 22 20 20 20 2d 63 6d 64 20 43 4f 4d  ".  "   -cmd COM
2b540 4d 41 4e 44 20 20 20 20 20 20 20 20 20 72 75 6e  MAND         run
2b550 20 5c 22 43 4f 4d 4d 41 4e 44 5c 22 20 62 65 66   \"COMMAND\" bef
2b560 6f 72 65 20 72 65 61 64 69 6e 67 20 73 74 64 69  ore reading stdi
2b570 6e 5c 6e 22 0a 20 20 22 20 20 20 2d 63 73 76 20  n\n".  "   -csv 
2b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b590 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20  set output mode 
2b5a0 74 6f 20 27 63 73 76 27 5c 6e 22 0a 20 20 22 20  to 'csv'\n".  " 
2b5b0 20 20 2d 65 63 68 6f 20 20 20 20 20 20 20 20 20    -echo         
2b5c0 20 20 20 20 20 20 20 70 72 69 6e 74 20 63 6f 6d         print com
2b5d0 6d 61 6e 64 73 20 62 65 66 6f 72 65 20 65 78 65  mands before exe
2b5e0 63 75 74 69 6f 6e 5c 6e 22 0a 20 20 22 20 20 20  cution\n".  "   
2b5f0 2d 69 6e 69 74 20 46 49 4c 45 4e 41 4d 45 20 20  -init FILENAME  
2b600 20 20 20 20 20 72 65 61 64 2f 70 72 6f 63 65 73       read/proces
2b610 73 20 6e 61 6d 65 64 20 66 69 6c 65 5c 6e 22 0a  s named file\n".
2b620 20 20 22 20 20 20 2d 5b 6e 6f 5d 68 65 61 64 65    "   -[no]heade
2b630 72 20 20 20 20 20 20 20 20 20 20 74 75 72 6e 20  r          turn 
2b640 68 65 61 64 65 72 73 20 6f 6e 20 6f 72 20 6f 66  headers on or of
2b650 66 5c 6e 22 0a 23 69 66 20 64 65 66 69 6e 65 64  f\n".#if defined
2b660 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  (SQLITE_ENABLE_M
2b670 45 4d 53 59 53 33 29 20 7c 7c 20 64 65 66 69 6e  EMSYS3) || defin
2b680 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2b690 5f 4d 45 4d 53 59 53 35 29 0a 20 20 22 20 20 20  _MEMSYS5).  "   
2b6a0 2d 68 65 61 70 20 53 49 5a 45 20 20 20 20 20 20  -heap SIZE      
2b6b0 20 20 20 20 20 53 69 7a 65 20 6f 66 20 68 65 61       Size of hea
2b6c0 70 20 66 6f 72 20 6d 65 6d 73 79 73 33 20 6f 72  p for memsys3 or
2b6d0 20 6d 65 6d 73 79 73 35 5c 6e 22 0a 23 65 6e 64   memsys5\n".#end
2b6e0 69 66 0a 20 20 22 20 20 20 2d 68 65 6c 70 20 20  if.  "   -help  
2b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68                sh
2b700 6f 77 20 74 68 69 73 20 6d 65 73 73 61 67 65 5c  ow this message\
2b710 6e 22 0a 20 20 22 20 20 20 2d 68 74 6d 6c 20 20  n".  "   -html  
2b720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
2b730 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f  t output mode to
2b740 20 48 54 4d 4c 5c 6e 22 0a 20 20 22 20 20 20 2d   HTML\n".  "   -
2b750 69 6e 74 65 72 61 63 74 69 76 65 20 20 20 20 20  interactive     
2b760 20 20 20 20 66 6f 72 63 65 20 69 6e 74 65 72 61      force intera
2b770 63 74 69 76 65 20 49 2f 4f 5c 6e 22 0a 20 20 22  ctive I/O\n".  "
2b780 20 20 20 2d 6c 69 6e 65 20 20 20 20 20 20 20 20     -line        
2b790 20 20 20 20 20 20 20 20 73 65 74 20 6f 75 74 70          set outp
2b7a0 75 74 20 6d 6f 64 65 20 74 6f 20 27 6c 69 6e 65  ut mode to 'line
2b7b0 27 5c 6e 22 0a 20 20 22 20 20 20 2d 6c 69 73 74  '\n".  "   -list
2b7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7d0 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65 20  set output mode 
2b7e0 74 6f 20 27 6c 69 73 74 27 5c 6e 22 0a 20 20 22  to 'list'\n".  "
2b7f0 20 20 20 2d 6c 6f 6f 6b 61 73 69 64 65 20 53 49     -lookaside SI
2b800 5a 45 20 4e 20 20 20 20 75 73 65 20 4e 20 65 6e  ZE N    use N en
2b810 74 72 69 65 73 20 6f 66 20 53 5a 20 62 79 74 65  tries of SZ byte
2b820 73 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20  s for lookaside 
2b830 6d 65 6d 6f 72 79 5c 6e 22 0a 20 20 22 20 20 20  memory\n".  "   
2b840 2d 6d 6d 61 70 20 4e 20 20 20 20 20 20 20 20 20  -mmap N         
2b850 20 20 20 20 20 64 65 66 61 75 6c 74 20 6d 6d 61       default mma
2b860 70 20 73 69 7a 65 20 73 65 74 20 74 6f 20 4e 5c  p size set to N\
2b870 6e 22 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  n".#ifdef SQLITE
2b880 5f 45 4e 41 42 4c 45 5f 4d 55 4c 54 49 50 4c 45  _ENABLE_MULTIPLE
2b890 58 0a 20 20 22 20 20 20 2d 6d 75 6c 74 69 70 6c  X.  "   -multipl
2b8a0 65 78 20 20 20 20 20 20 20 20 20 20 20 65 6e 61  ex           ena
2b8b0 62 6c 65 20 74 68 65 20 6d 75 6c 74 69 70 6c 65  ble the multiple
2b8c0 78 6f 72 20 56 46 53 5c 6e 22 0a 23 65 6e 64 69  xor VFS\n".#endi
2b8d0 66 0a 20 20 22 20 20 20 2d 6e 65 77 6c 69 6e 65  f.  "   -newline
2b8e0 20 53 45 50 20 20 20 20 20 20 20 20 20 73 65 74   SEP         set
2b8f0 20 6f 75 74 70 75 74 20 72 6f 77 20 73 65 70 61   output row sepa
2b900 72 61 74 6f 72 2e 20 44 65 66 61 75 6c 74 3a 20  rator. Default: 
2b910 27 5c 5c 6e 27 5c 6e 22 0a 20 20 22 20 20 20 2d  '\\n'\n".  "   -
2b920 6e 75 6c 6c 76 61 6c 75 65 20 54 45 58 54 20 20  nullvalue TEXT  
2b930 20 20 20 20 73 65 74 20 74 65 78 74 20 73 74 72      set text str
2b940 69 6e 67 20 66 6f 72 20 4e 55 4c 4c 20 76 61 6c  ing for NULL val
2b950 75 65 73 2e 20 44 65 66 61 75 6c 74 20 27 27 5c  ues. Default ''\
2b960 6e 22 0a 20 20 22 20 20 20 2d 70 61 67 65 63 61  n".  "   -pageca
2b970 63 68 65 20 53 49 5a 45 20 4e 20 20 20 20 75 73  che SIZE N    us
2b980 65 20 4e 20 73 6c 6f 74 73 20 6f 66 20 53 5a 20  e N slots of SZ 
2b990 62 79 74 65 73 20 65 61 63 68 20 66 6f 72 20 70  bytes each for p
2b9a0 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79  age cache memory
2b9b0 5c 6e 22 0a 20 20 22 20 20 20 2d 73 63 72 61 74  \n".  "   -scrat
2b9c0 63 68 20 53 49 5a 45 20 4e 20 20 20 20 20 20 75  ch SIZE N      u
2b9d0 73 65 20 4e 20 73 6c 6f 74 73 20 6f 66 20 53 5a  se N slots of SZ
2b9e0 20 62 79 74 65 73 20 65 61 63 68 20 66 6f 72 20   bytes each for 
2b9f0 73 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 5c 6e  scratch memory\n
2ba00 22 0a 20 20 22 20 20 20 2d 73 65 70 61 72 61 74  ".  "   -separat
2ba10 6f 72 20 53 45 50 20 20 20 20 20 20 20 73 65 74  or SEP       set
2ba20 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 20 73   output column s
2ba30 65 70 61 72 61 74 6f 72 2e 20 44 65 66 61 75 6c  eparator. Defaul
2ba40 74 3a 20 27 7c 27 5c 6e 22 0a 20 20 22 20 20 20  t: '|'\n".  "   
2ba50 2d 73 74 61 74 73 20 20 20 20 20 20 20 20 20 20  -stats          
2ba60 20 20 20 20 20 70 72 69 6e 74 20 6d 65 6d 6f 72       print memor
2ba70 79 20 73 74 61 74 73 20 62 65 66 6f 72 65 20 65  y stats before e
2ba80 61 63 68 20 66 69 6e 61 6c 69 7a 65 5c 6e 22 0a  ach finalize\n".
2ba90 20 20 22 20 20 20 2d 76 65 72 73 69 6f 6e 20 20    "   -version  
2baa0 20 20 20 20 20 20 20 20 20 20 20 73 68 6f 77 20             show 
2bab0 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 5c 6e  SQLite version\n
2bac0 22 0a 20 20 22 20 20 20 2d 76 66 73 20 4e 41 4d  ".  "   -vfs NAM
2bad0 45 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65  E            use
2bae0 20 4e 41 4d 45 20 61 73 20 74 68 65 20 64 65 66   NAME as the def
2baf0 61 75 6c 74 20 56 46 53 5c 6e 22 0a 23 69 66 64  ault VFS\n".#ifd
2bb00 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2bb10 5f 56 46 53 54 52 41 43 45 0a 20 20 22 20 20 20  _VFSTRACE.  "   
2bb20 2d 76 66 73 74 72 61 63 65 20 20 20 20 20 20 20  -vfstrace       
2bb30 20 20 20 20 20 65 6e 61 62 6c 65 20 74 72 61 63       enable trac
2bb40 69 6e 67 20 6f 66 20 61 6c 6c 20 56 46 53 20 63  ing of all VFS c
2bb50 61 6c 6c 73 5c 6e 22 0a 23 65 6e 64 69 66 0a 3b  alls\n".#endif.;
2bb60 0a 73 74 61 74 69 63 20 76 6f 69 64 20 75 73 61  .static void usa
2bb70 67 65 28 69 6e 74 20 73 68 6f 77 44 65 74 61 69  ge(int showDetai
2bb80 6c 29 7b 0a 20 20 75 74 66 38 5f 70 72 69 6e 74  l){.  utf8_print
2bb90 66 28 73 74 64 65 72 72 2c 0a 20 20 20 20 20 20  f(stderr,.      
2bba0 22 55 73 61 67 65 3a 20 25 73 20 5b 4f 50 54 49  "Usage: %s [OPTI
2bbb0 4f 4e 53 5d 20 46 49 4c 45 4e 41 4d 45 20 5b 53  ONS] FILENAME [S
2bbc0 51 4c 5d 5c 6e 22 0a 20 20 20 20 20 20 22 46 49  QL]\n".      "FI
2bbd0 4c 45 4e 41 4d 45 20 69 73 20 74 68 65 20 6e 61  LENAME is the na
2bbe0 6d 65 20 6f 66 20 61 6e 20 53 51 4c 69 74 65 20  me of an SQLite 
2bbf0 64 61 74 61 62 61 73 65 2e 20 41 20 6e 65 77 20  database. A new 
2bc00 64 61 74 61 62 61 73 65 20 69 73 20 63 72 65 61  database is crea
2bc10 74 65 64 5c 6e 22 0a 20 20 20 20 20 20 22 69 66  ted\n".      "if
2bc20 20 74 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e   the file does n
2bc30 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 65 78  ot previously ex
2bc40 69 73 74 2e 5c 6e 22 2c 20 41 72 67 76 30 29 3b  ist.\n", Argv0);
2bc50 0a 20 20 69 66 28 20 73 68 6f 77 44 65 74 61 69  .  if( showDetai
2bc60 6c 20 29 7b 0a 20 20 20 20 75 74 66 38 5f 70 72  l ){.    utf8_pr
2bc70 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 4f 50  intf(stderr, "OP
2bc80 54 49 4f 4e 53 20 69 6e 63 6c 75 64 65 3a 5c 6e  TIONS include:\n
2bc90 25 73 22 2c 20 7a 4f 70 74 69 6f 6e 73 29 3b 0a  %s", zOptions);.
2bca0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 61 77    }else{.    raw
2bcb0 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  _printf(stderr, 
2bcc0 22 55 73 65 20 74 68 65 20 2d 68 65 6c 70 20 6f  "Use the -help o
2bcd0 70 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69  ption for additi
2bce0 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
2bcf0 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 65 78 69 74  \n");.  }.  exit
2bd00 28 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e  (1);.}../*.** In
2bd10 69 74 69 61 6c 69 7a 65 20 74 68 65 20 73 74 61  itialize the sta
2bd20 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  te information i
2bd30 6e 20 64 61 74 61 0a 2a 2f 0a 73 74 61 74 69 63  n data.*/.static
2bd40 20 76 6f 69 64 20 6d 61 69 6e 5f 69 6e 69 74 28   void main_init(
2bd50 53 68 65 6c 6c 53 74 61 74 65 20 2a 64 61 74 61  ShellState *data
2bd60 29 20 7b 0a 20 20 6d 65 6d 73 65 74 28 64 61 74  ) {.  memset(dat
2bd70 61 2c 20 30 2c 20 73 69 7a 65 6f 66 28 2a 64 61  a, 0, sizeof(*da
2bd80 74 61 29 29 3b 0a 20 20 64 61 74 61 2d 3e 6e 6f  ta));.  data->no
2bd90 72 6d 61 6c 4d 6f 64 65 20 3d 20 64 61 74 61 2d  rmalMode = data-
2bda0 3e 63 4d 6f 64 65 20 3d 20 64 61 74 61 2d 3e 6d  >cMode = data->m
2bdb0 6f 64 65 20 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b  ode = MODE_List;
2bdc0 0a 20 20 64 61 74 61 2d 3e 61 75 74 6f 45 78 70  .  data->autoExp
2bdd0 6c 61 69 6e 20 3d 20 31 3b 0a 20 20 6d 65 6d 63  lain = 1;.  memc
2bde0 70 79 28 64 61 74 61 2d 3e 63 6f 6c 53 65 70 61  py(data->colSepa
2bdf0 72 61 74 6f 72 2c 53 45 50 5f 43 6f 6c 75 6d 6e  rator,SEP_Column
2be00 2c 20 32 29 3b 0a 20 20 6d 65 6d 63 70 79 28 64  , 2);.  memcpy(d
2be10 61 74 61 2d 3e 72 6f 77 53 65 70 61 72 61 74 6f  ata->rowSeparato
2be20 72 2c 53 45 50 5f 52 6f 77 2c 20 32 29 3b 0a 20  r,SEP_Row, 2);. 
2be30 20 64 61 74 61 2d 3e 73 68 6f 77 48 65 61 64 65   data->showHeade
2be40 72 20 3d 20 30 3b 0a 20 20 64 61 74 61 2d 3e 73  r = 0;.  data->s
2be50 68 65 6c 6c 46 6c 67 73 20 3d 20 53 48 46 4c 47  hellFlgs = SHFLG
2be60 5f 4c 6f 6f 6b 61 73 69 64 65 3b 0a 20 20 73 71  _Lookaside;.  sq
2be70 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c  lite3_config(SQL
2be80 49 54 45 5f 43 4f 4e 46 49 47 5f 55 52 49 2c 20  ITE_CONFIG_URI, 
2be90 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  1);.  sqlite3_co
2bea0 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46  nfig(SQLITE_CONF
2beb0 49 47 5f 4c 4f 47 2c 20 73 68 65 6c 6c 4c 6f 67  IG_LOG, shellLog
2bec0 2c 20 64 61 74 61 29 3b 0a 20 20 73 71 6c 69 74  , data);.  sqlit
2bed0 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45  e3_config(SQLITE
2bee0 5f 43 4f 4e 46 49 47 5f 4d 55 4c 54 49 54 48 52  _CONFIG_MULTITHR
2bef0 45 41 44 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  EAD);.  sqlite3_
2bf00 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28  snprintf(sizeof(
2bf10 6d 61 69 6e 50 72 6f 6d 70 74 29 2c 20 6d 61 69  mainPrompt), mai
2bf20 6e 50 72 6f 6d 70 74 2c 22 73 71 6c 69 74 65 3e  nPrompt,"sqlite>
2bf30 20 22 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73   ");.  sqlite3_s
2bf40 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 63  nprintf(sizeof(c
2bf50 6f 6e 74 69 6e 75 65 50 72 6f 6d 70 74 29 2c 20  ontinuePrompt), 
2bf60 63 6f 6e 74 69 6e 75 65 50 72 6f 6d 70 74 2c 22  continuePrompt,"
2bf70 20 20 20 2e 2e 2e 3e 20 22 29 3b 0a 7d 0a 0a 2f     ...> ");.}../
2bf80 2a 0a 2a 2a 20 4f 75 74 70 75 74 20 74 65 78 74  *.** Output text
2bf90 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20   to the console 
2bfa0 69 6e 20 61 20 66 6f 6e 74 20 74 68 61 74 20 61  in a font that a
2bfb0 74 74 72 61 63 74 73 20 65 78 74 72 61 20 61 74  ttracts extra at
2bfc0 74 65 6e 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64  tention..*/.#ifd
2bfd0 65 66 20 5f 57 49 4e 33 32 0a 73 74 61 74 69 63  ef _WIN32.static
2bfe0 20 76 6f 69 64 20 70 72 69 6e 74 42 6f 6c 64 28   void printBold(
2bff0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 65 78  const char *zTex
2c000 74 29 7b 0a 20 20 48 41 4e 44 4c 45 20 6f 75 74  t){.  HANDLE out
2c010 20 3d 20 47 65 74 53 74 64 48 61 6e 64 6c 65 28   = GetStdHandle(
2c020 53 54 44 5f 4f 55 54 50 55 54 5f 48 41 4e 44 4c  STD_OUTPUT_HANDL
2c030 45 29 3b 0a 20 20 43 4f 4e 53 4f 4c 45 5f 53 43  E);.  CONSOLE_SC
2c040 52 45 45 4e 5f 42 55 46 46 45 52 5f 49 4e 46 4f  REEN_BUFFER_INFO
2c050 20 64 65 66 61 75 6c 74 53 63 72 65 65 6e 49 6e   defaultScreenIn
2c060 66 6f 3b 0a 20 20 47 65 74 43 6f 6e 73 6f 6c 65  fo;.  GetConsole
2c070 53 63 72 65 65 6e 42 75 66 66 65 72 49 6e 66 6f  ScreenBufferInfo
2c080 28 6f 75 74 2c 20 26 64 65 66 61 75 6c 74 53 63  (out, &defaultSc
2c090 72 65 65 6e 49 6e 66 6f 29 3b 0a 20 20 53 65 74  reenInfo);.  Set
2c0a0 43 6f 6e 73 6f 6c 65 54 65 78 74 41 74 74 72 69  ConsoleTextAttri
2c0b0 62 75 74 65 28 6f 75 74 2c 0a 20 20 20 20 20 20  bute(out,.      
2c0c0 20 20 20 46 4f 52 45 47 52 4f 55 4e 44 5f 52 45     FOREGROUND_RE
2c0d0 44 7c 46 4f 52 45 47 52 4f 55 4e 44 5f 49 4e 54  D|FOREGROUND_INT
2c0e0 45 4e 53 49 54 59 0a 20 20 29 3b 0a 20 20 70 72  ENSITY.  );.  pr
2c0f0 69 6e 74 66 28 22 25 73 22 2c 20 7a 54 65 78 74  intf("%s", zText
2c100 29 3b 0a 20 20 53 65 74 43 6f 6e 73 6f 6c 65 54  );.  SetConsoleT
2c110 65 78 74 41 74 74 72 69 62 75 74 65 28 6f 75 74  extAttribute(out
2c120 2c 20 64 65 66 61 75 6c 74 53 63 72 65 65 6e 49  , defaultScreenI
2c130 6e 66 6f 2e 77 41 74 74 72 69 62 75 74 65 73 29  nfo.wAttributes)
2c140 3b 0a 7d 0a 23 65 6c 73 65 0a 73 74 61 74 69 63  ;.}.#else.static
2c150 20 76 6f 69 64 20 70 72 69 6e 74 42 6f 6c 64 28   void printBold(
2c160 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 65 78  const char *zTex
2c170 74 29 7b 0a 20 20 70 72 69 6e 74 66 28 22 5c 30  t){.  printf("\0
2c180 33 33 5b 31 6d 25 73 5c 30 33 33 5b 30 6d 22 2c  33[1m%s\033[0m",
2c190 20 7a 54 65 78 74 29 3b 0a 7d 0a 23 65 6e 64 69   zText);.}.#endi
2c1a0 66 0a 0a 2f 2a 0a 2a 2a 20 47 65 74 20 74 68 65  f../*.** Get the
2c1b0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 6e 20   argument to an 
2c1c0 2d 2d 6f 70 74 69 6f 6e 2e 20 20 54 68 72 6f 77  --option.  Throw
2c1d0 20 61 6e 20 65 72 72 6f 72 20 61 6e 64 20 64 69   an error and di
2c1e0 65 20 69 66 20 6e 6f 20 61 72 67 75 6d 65 6e 74  e if no argument
2c1f0 0a 2a 2a 20 69 73 20 61 76 61 69 6c 61 62 6c 65  .** is available
2c200 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72  ..*/.static char
2c210 20 2a 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e   *cmdline_option
2c220 5f 76 61 6c 75 65 28 69 6e 74 20 61 72 67 63 2c  _value(int argc,
2c230 20 63 68 61 72 20 2a 2a 61 72 67 76 2c 20 69 6e   char **argv, in
2c240 74 20 69 29 7b 0a 20 20 69 66 28 20 69 3d 3d 61  t i){.  if( i==a
2c250 72 67 63 20 29 7b 0a 20 20 20 20 75 74 66 38 5f  rgc ){.    utf8_
2c260 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2c270 25 73 3a 20 45 72 72 6f 72 3a 20 6d 69 73 73 69  %s: Error: missi
2c280 6e 67 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 25  ng argument to %
2c290 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20  s\n",.          
2c2a0 20 20 61 72 67 76 5b 30 5d 2c 20 61 72 67 76 5b    argv[0], argv[
2c2b0 61 72 67 63 2d 31 5d 29 3b 0a 20 20 20 20 65 78  argc-1]);.    ex
2c2c0 69 74 28 31 29 3b 0a 20 20 7d 0a 20 20 72 65 74  it(1);.  }.  ret
2c2d0 75 72 6e 20 61 72 67 76 5b 69 5d 3b 0a 7d 0a 0a  urn argv[i];.}..
2c2e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 53  #ifndef SQLITE_S
2c2f0 48 45 4c 4c 5f 49 53 5f 55 54 46 38 0a 23 20 20  HELL_IS_UTF8.#  
2c300 69 66 20 28 64 65 66 69 6e 65 64 28 5f 57 49 4e  if (defined(_WIN
2c310 33 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 57  32) || defined(W
2c320 49 4e 33 32 29 29 20 26 26 20 64 65 66 69 6e 65  IN32)) && define
2c330 64 28 5f 4d 53 43 5f 56 45 52 29 0a 23 20 20 20  d(_MSC_VER).#   
2c340 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53   define SQLITE_S
2c350 48 45 4c 4c 5f 49 53 5f 55 54 46 38 20 20 20 20  HELL_IS_UTF8    
2c360 20 20 20 20 20 20 28 30 29 0a 23 20 20 65 6c 73        (0).#  els
2c370 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51  e.#    define SQ
2c380 4c 49 54 45 5f 53 48 45 4c 4c 5f 49 53 5f 55 54  LITE_SHELL_IS_UT
2c390 46 38 20 20 20 20 20 20 20 20 20 20 28 31 29 0a  F8          (1).
2c3a0 23 20 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  #  endif.#endif.
2c3b0 0a 23 69 66 20 53 51 4c 49 54 45 5f 53 48 45 4c  .#if SQLITE_SHEL
2c3c0 4c 5f 49 53 5f 55 54 46 38 0a 69 6e 74 20 53 51  L_IS_UTF8.int SQ
2c3d0 4c 49 54 45 5f 43 44 45 43 4c 20 6d 61 69 6e 28  LITE_CDECL main(
2c3e0 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a  int argc, char *
2c3f0 2a 61 72 67 76 29 7b 0a 23 65 6c 73 65 0a 69 6e  *argv){.#else.in
2c400 74 20 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 77  t SQLITE_CDECL w
2c410 6d 61 69 6e 28 69 6e 74 20 61 72 67 63 2c 20 77  main(int argc, w
2c420 63 68 61 72 5f 74 20 2a 2a 77 61 72 67 76 29 7b  char_t **wargv){
2c430 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 3b 0a  .  char **argv;.
2c440 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20 2a 7a  #endif.  char *z
2c450 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 53 68  ErrMsg = 0;.  Sh
2c460 65 6c 6c 53 74 61 74 65 20 64 61 74 61 3b 0a 20  ellState data;. 
2c470 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 49 6e   const char *zIn
2c480 69 74 46 69 6c 65 20 3d 20 30 3b 0a 20 20 69 6e  itFile = 0;.  in
2c490 74 20 69 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20  t i;.  int rc = 
2c4a0 30 3b 0a 20 20 69 6e 74 20 77 61 72 6e 49 6e 6d  0;.  int warnInm
2c4b0 65 6d 6f 72 79 44 62 20 3d 20 30 3b 0a 20 20 69  emoryDb = 0;.  i
2c4c0 6e 74 20 72 65 61 64 53 74 64 69 6e 20 3d 20 31  nt readStdin = 1
2c4d0 3b 0a 20 20 69 6e 74 20 6e 43 6d 64 20 3d 20 30  ;.  int nCmd = 0
2c4e0 3b 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6d 64  ;.  char **azCmd
2c4f0 20 3d 20 30 3b 0a 0a 20 20 73 65 74 42 69 6e 61   = 0;..  setBina
2c500 72 79 4d 6f 64 65 28 73 74 64 69 6e 2c 20 30 29  ryMode(stdin, 0)
2c510 3b 0a 20 20 73 65 74 76 62 75 66 28 73 74 64 65  ;.  setvbuf(stde
2c520 72 72 2c 20 30 2c 20 5f 49 4f 4e 42 46 2c 20 30  rr, 0, _IONBF, 0
2c530 29 3b 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  ); /* Make sure 
2c540 73 74 64 65 72 72 20 69 73 20 75 6e 62 75 66 66  stderr is unbuff
2c550 65 72 65 64 20 2a 2f 0a 20 20 73 74 64 69 6e 5f  ered */.  stdin_
2c560 69 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20 3d  is_interactive =
2c570 20 69 73 61 74 74 79 28 30 29 3b 0a 20 20 73 74   isatty(0);.  st
2c580 64 6f 75 74 5f 69 73 5f 63 6f 6e 73 6f 6c 65 20  dout_is_console 
2c590 3d 20 69 73 61 74 74 79 28 31 29 3b 0a 0a 23 69  = isatty(1);..#i
2c5a0 66 20 55 53 45 5f 53 59 53 54 45 4d 5f 53 51 4c  f USE_SYSTEM_SQL
2c5b0 49 54 45 2b 30 21 3d 31 0a 20 20 69 66 28 20 73  ITE+0!=1.  if( s
2c5c0 74 72 63 6d 70 28 73 71 6c 69 74 65 33 5f 73 6f  trcmp(sqlite3_so
2c5d0 75 72 63 65 69 64 28 29 2c 53 51 4c 49 54 45 5f  urceid(),SQLITE_
2c5e0 53 4f 55 52 43 45 5f 49 44 29 21 3d 30 20 29 7b  SOURCE_ID)!=0 ){
2c5f0 0a 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66  .    utf8_printf
2c600 28 73 74 64 65 72 72 2c 20 22 53 51 4c 69 74 65  (stderr, "SQLite
2c610 20 68 65 61 64 65 72 20 61 6e 64 20 73 6f 75 72   header and sour
2c620 63 65 20 76 65 72 73 69 6f 6e 20 6d 69 73 6d 61  ce version misma
2c630 74 63 68 5c 6e 25 73 5c 6e 25 73 5c 6e 22 2c 0a  tch\n%s\n%s\n",.
2c640 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
2c650 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 20  te3_sourceid(), 
2c660 53 51 4c 49 54 45 5f 53 4f 55 52 43 45 5f 49 44  SQLITE_SOURCE_ID
2c670 29 3b 0a 20 20 20 20 65 78 69 74 28 31 29 3b 0a  );.    exit(1);.
2c680 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 6d 61 69    }.#endif.  mai
2c690 6e 5f 69 6e 69 74 28 26 64 61 74 61 29 3b 0a 23  n_init(&data);.#
2c6a0 69 66 20 21 53 51 4c 49 54 45 5f 53 48 45 4c 4c  if !SQLITE_SHELL
2c6b0 5f 49 53 5f 55 54 46 38 0a 20 20 73 71 6c 69 74  _IS_UTF8.  sqlit
2c6c0 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 3b  e3_initialize();
2c6d0 0a 20 20 61 72 67 76 20 3d 20 73 71 6c 69 74 65  .  argv = sqlite
2c6e0 33 5f 6d 61 6c 6c 6f 63 36 34 28 73 69 7a 65 6f  3_malloc64(sizeo
2c6f0 66 28 61 72 67 76 5b 30 5d 29 2a 61 72 67 63 29  f(argv[0])*argc)
2c700 3b 0a 20 20 69 66 28 20 61 72 67 76 3d 3d 30 20  ;.  if( argv==0 
2c710 29 7b 0a 20 20 20 20 72 61 77 5f 70 72 69 6e 74  ){.    raw_print
2c720 66 28 73 74 64 65 72 72 2c 20 22 6f 75 74 20 6f  f(stderr, "out o
2c730 66 20 6d 65 6d 6f 72 79 5c 6e 22 29 3b 0a 20 20  f memory\n");.  
2c740 20 20 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a 20    exit(1);.  }. 
2c750 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63   for(i=0; i<argc
2c760 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 72 67 76  ; i++){.    argv
2c770 5b 69 5d 20 3d 20 73 71 6c 69 74 65 33 5f 77 69  [i] = sqlite3_wi
2c780 6e 33 32 5f 75 6e 69 63 6f 64 65 5f 74 6f 5f 75  n32_unicode_to_u
2c790 74 66 38 28 77 61 72 67 76 5b 69 5d 29 3b 0a 20  tf8(wargv[i]);. 
2c7a0 20 20 20 69 66 28 20 61 72 67 76 5b 69 5d 3d 3d     if( argv[i]==
2c7b0 30 20 29 7b 0a 20 20 20 20 20 20 72 61 77 5f 70  0 ){.      raw_p
2c7c0 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6f  rintf(stderr, "o
2c7d0 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29  ut of memory\n")
2c7e0 3b 0a 20 20 20 20 20 20 65 78 69 74 28 31 29 3b  ;.      exit(1);
2c7f0 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
2c800 66 0a 20 20 61 73 73 65 72 74 28 20 61 72 67 63  f.  assert( argc
2c810 3e 3d 31 20 26 26 20 61 72 67 76 20 26 26 20 61  >=1 && argv && a
2c820 72 67 76 5b 30 5d 20 29 3b 0a 20 20 41 72 67 76  rgv[0] );.  Argv
2c830 30 20 3d 20 61 72 67 76 5b 30 5d 3b 0a 0a 20 20  0 = argv[0];..  
2c840 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 77 65 20  /* Make sure we 
2c850 68 61 76 65 20 61 20 76 61 6c 69 64 20 73 69 67  have a valid sig
2c860 6e 61 6c 20 68 61 6e 64 6c 65 72 20 65 61 72 6c  nal handler earl
2c870 79 2c 20 62 65 66 6f 72 65 20 61 6e 79 74 68 69  y, before anythi
2c880 6e 67 0a 20 20 2a 2a 20 65 6c 73 65 20 69 73 20  ng.  ** else is 
2c890 64 6f 6e 65 2e 0a 20 20 2a 2f 0a 23 69 66 64 65  done..  */.#ifde
2c8a0 66 20 53 49 47 49 4e 54 0a 20 20 73 69 67 6e 61  f SIGINT.  signa
2c8b0 6c 28 53 49 47 49 4e 54 2c 20 69 6e 74 65 72 72  l(SIGINT, interr
2c8c0 75 70 74 5f 68 61 6e 64 6c 65 72 29 3b 0a 23 65  upt_handler);.#e
2c8d0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2c8e0 49 54 45 5f 53 48 45 4c 4c 5f 44 42 4e 41 4d 45  ITE_SHELL_DBNAME
2c8f0 5f 50 52 4f 43 0a 20 20 7b 0a 20 20 20 20 2f 2a  _PROC.  {.    /*
2c900 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53   If the SQLITE_S
2c910 48 45 4c 4c 5f 44 42 4e 41 4d 45 5f 50 52 4f 43  HELL_DBNAME_PROC
2c920 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65   macro is define
2c930 64 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68  d, then it is th
2c940 65 20 6e 61 6d 65 0a 20 20 20 20 2a 2a 20 6f 66  e name.    ** of
2c950 20 61 20 43 2d 66 75 6e 63 74 69 6f 6e 20 74 68   a C-function th
2c960 61 74 20 77 69 6c 6c 20 70 72 6f 76 69 64 65 20  at will provide 
2c970 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
2c980 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
2c990 55 73 65 0a 20 20 20 20 2a 2a 20 74 68 69 73 20  Use.    ** this 
2c9a0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
2c9b0 69 6f 6e 20 74 6f 20 65 6d 62 65 64 20 74 68 69  ion to embed thi
2c9c0 73 20 73 68 65 6c 6c 20 70 72 6f 67 72 61 6d 20  s shell program 
2c9d0 69 6e 20 6c 61 72 67 65 72 0a 20 20 20 20 2a 2a  in larger.    **
2c9e0 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 20 2a   applications. *
2c9f0 2f 0a 20 20 20 20 65 78 74 65 72 6e 20 76 6f 69  /.    extern voi
2ca00 64 20 53 51 4c 49 54 45 5f 53 48 45 4c 4c 5f 44  d SQLITE_SHELL_D
2ca10 42 4e 41 4d 45 5f 50 52 4f 43 28 63 6f 6e 73 74  BNAME_PROC(const
2ca20 20 63 68 61 72 2a 2a 29 3b 0a 20 20 20 20 53 51   char**);.    SQ
2ca30 4c 49 54 45 5f 53 48 45 4c 4c 5f 44 42 4e 41 4d  LITE_SHELL_DBNAM
2ca40 45 5f 50 52 4f 43 28 26 64 61 74 61 2e 7a 44 62  E_PROC(&data.zDb
2ca50 46 69 6c 65 6e 61 6d 65 29 3b 0a 20 20 20 20 77  Filename);.    w
2ca60 61 72 6e 49 6e 6d 65 6d 6f 72 79 44 62 20 3d 20  arnInmemoryDb = 
2ca70 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  0;.  }.#endif.. 
2ca80 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 69 74 69 61   /* Do an initia
2ca90 6c 20 70 61 73 73 20 74 68 72 6f 75 67 68 20 74  l pass through t
2caa0 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  he command-line 
2cab0 61 72 67 75 6d 65 6e 74 20 74 6f 20 6c 6f 63 61  argument to loca
2cac0 74 65 0a 20 20 2a 2a 20 74 68 65 20 6e 61 6d 65  te.  ** the name
2cad0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
2cae0 20 66 69 6c 65 2c 20 74 68 65 20 6e 61 6d 65 20   file, the name 
2caf0 6f 66 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  of the initializ
2cb00 61 74 69 6f 6e 20 66 69 6c 65 2c 0a 20 20 2a 2a  ation file,.  **
2cb10 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
2cb20 20 61 6c 74 65 72 6e 61 74 69 76 65 20 6d 61 6c   alternative mal
2cb30 6c 6f 63 20 68 65 61 70 2c 0a 20 20 2a 2a 20 61  loc heap,.  ** a
2cb40 6e 64 20 74 68 65 20 66 69 72 73 74 20 63 6f 6d  nd the first com
2cb50 6d 61 6e 64 20 74 6f 20 65 78 65 63 75 74 65 2e  mand to execute.
2cb60 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 31 3b  .  */.  for(i=1;
2cb70 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20   i<argc; i++){. 
2cb80 20 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20     char *z;.    
2cb90 7a 20 3d 20 61 72 67 76 5b 69 5d 3b 0a 20 20 20  z = argv[i];.   
2cba0 20 69 66 28 20 7a 5b 30 5d 21 3d 27 2d 27 20 29   if( z[0]!='-' )
2cbb0 7b 0a 20 20 20 20 20 20 69 66 28 20 64 61 74 61  {.      if( data
2cbc0 2e 7a 44 62 46 69 6c 65 6e 61 6d 65 3d 3d 30 20  .zDbFilename==0 
2cbd0 29 7b 0a 20 20 20 20 20 20 20 20 64 61 74 61 2e  ){.        data.
2cbe0 7a 44 62 46 69 6c 65 6e 61 6d 65 20 3d 20 7a 3b  zDbFilename = z;
2cbf0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
2cc00 20 20 20 20 20 20 2f 2a 20 45 78 63 65 73 73 73        /* Excesss
2cc10 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 69   arguments are i
2cc20 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 53 51  nterpreted as SQ
2cc30 4c 20 28 6f 72 20 64 6f 74 2d 63 6f 6d 6d 61 6e  L (or dot-comman
2cc40 64 73 29 20 61 6e 64 0a 20 20 20 20 20 20 20 20  ds) and.        
2cc50 2a 2a 20 6d 65 61 6e 20 74 68 61 74 20 6e 6f 74  ** mean that not
2cc60 68 69 6e 67 20 69 73 20 72 65 61 64 20 66 72 6f  hing is read fro
2cc70 6d 20 73 74 64 69 6e 20 2a 2f 0a 20 20 20 20 20  m stdin */.     
2cc80 20 20 20 72 65 61 64 53 74 64 69 6e 20 3d 20 30     readStdin = 0
2cc90 3b 0a 20 20 20 20 20 20 20 20 6e 43 6d 64 2b 2b  ;.        nCmd++
2cca0 3b 0a 20 20 20 20 20 20 20 20 61 7a 43 6d 64 20  ;.        azCmd 
2ccb0 3d 20 72 65 61 6c 6c 6f 63 28 61 7a 43 6d 64 2c  = realloc(azCmd,
2ccc0 20 73 69 7a 65 6f 66 28 61 7a 43 6d 64 5b 30 5d   sizeof(azCmd[0]
2ccd0 29 2a 6e 43 6d 64 29 3b 0a 20 20 20 20 20 20 20  )*nCmd);.       
2cce0 20 69 66 28 20 61 7a 43 6d 64 3d 3d 30 20 29 7b   if( azCmd==0 ){
2ccf0 0a 20 20 20 20 20 20 20 20 20 20 72 61 77 5f 70  .          raw_p
2cd00 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6f  rintf(stderr, "o
2cd10 75 74 20 6f 66 20 6d 65 6d 6f 72 79 5c 6e 22 29  ut of memory\n")
2cd20 3b 0a 20 20 20 20 20 20 20 20 20 20 65 78 69 74  ;.          exit
2cd30 28 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  (1);.        }. 
2cd40 20 20 20 20 20 20 20 61 7a 43 6d 64 5b 6e 43 6d         azCmd[nCm
2cd50 64 2d 31 5d 20 3d 20 7a 3b 0a 20 20 20 20 20 20  d-1] = z;.      
2cd60 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
2cd70 7a 5b 31 5d 3d 3d 27 2d 27 20 29 20 7a 2b 2b 3b  z[1]=='-' ) z++;
2cd80 0a 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28  .    if( strcmp(
2cd90 7a 2c 22 2d 73 65 70 61 72 61 74 6f 72 22 29 3d  z,"-separator")=
2cda0 3d 30 0a 20 20 20 20 20 7c 7c 20 73 74 72 63 6d  =0.     || strcm
2cdb0 70 28 7a 2c 22 2d 6e 75 6c 6c 76 61 6c 75 65 22  p(z,"-nullvalue"
2cdc0 29 3d 3d 30 0a 20 20 20 20 20 7c 7c 20 73 74 72  )==0.     || str
2cdd0 63 6d 70 28 7a 2c 22 2d 6e 65 77 6c 69 6e 65 22  cmp(z,"-newline"
2cde0 29 3d 3d 30 0a 20 20 20 20 20 7c 7c 20 73 74 72  )==0.     || str
2cdf0 63 6d 70 28 7a 2c 22 2d 63 6d 64 22 29 3d 3d 30  cmp(z,"-cmd")==0
2ce00 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 28 76  .    ){.      (v
2ce10 6f 69 64 29 63 6d 64 6c 69 6e 65 5f 6f 70 74 69  oid)cmdline_opti
2ce20 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 20 61  on_value(argc, a
2ce30 72 67 76 2c 20 2b 2b 69 29 3b 0a 20 20 20 20 7d  rgv, ++i);.    }
2ce40 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
2ce50 7a 2c 22 2d 69 6e 69 74 22 29 3d 3d 30 20 29 7b  z,"-init")==0 ){
2ce60 0a 20 20 20 20 20 20 7a 49 6e 69 74 46 69 6c 65  .      zInitFile
2ce70 20 3d 20 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f   = cmdline_optio
2ce80 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 20 61 72  n_value(argc, ar
2ce90 67 76 2c 20 2b 2b 69 29 3b 0a 20 20 20 20 7d 65  gv, ++i);.    }e
2cea0 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
2ceb0 2c 22 2d 62 61 74 63 68 22 29 3d 3d 30 20 29 7b  ,"-batch")==0 ){
2cec0 0a 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74  .      /* Need t
2ced0 6f 20 63 68 65 63 6b 20 66 6f 72 20 62 61 74 63  o check for batc
2cee0 68 20 6d 6f 64 65 20 68 65 72 65 20 74 6f 20 73  h mode here to s
2cef0 6f 20 77 65 20 63 61 6e 20 61 76 6f 69 64 20 70  o we can avoid p
2cf00 72 69 6e 74 69 6e 67 0a 20 20 20 20 20 20 2a 2a  rinting.      **
2cf10 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 61 6c 20 6d   informational m
2cf20 65 73 73 61 67 65 73 20 28 6c 69 6b 65 20 66 72  essages (like fr
2cf30 6f 6d 20 70 72 6f 63 65 73 73 5f 73 71 6c 69 74  om process_sqlit
2cf40 65 72 63 29 20 62 65 66 6f 72 65 0a 20 20 20 20  erc) before.    
2cf50 20 20 2a 2a 20 77 65 20 64 6f 20 74 68 65 20 61    ** we do the a
2cf60 63 74 75 61 6c 20 70 72 6f 63 65 73 73 69 6e 67  ctual processing
2cf70 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 6c 61   of arguments la
2cf80 74 65 72 20 69 6e 20 61 20 73 65 63 6f 6e 64 20  ter in a second 
2cf90 70 61 73 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  pass..      */. 
2cfa0 20 20 20 20 20 73 74 64 69 6e 5f 69 73 5f 69 6e       stdin_is_in
2cfb0 74 65 72 61 63 74 69 76 65 20 3d 20 30 3b 0a 20  teractive = 0;. 
2cfc0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
2cfd0 63 6d 70 28 7a 2c 22 2d 68 65 61 70 22 29 3d 3d  cmp(z,"-heap")==
2cfe0 30 20 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64  0 ){.#if defined
2cff0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  (SQLITE_ENABLE_M
2d000 45 4d 53 59 53 33 29 20 7c 7c 20 64 65 66 69 6e  EMSYS3) || defin
2d010 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2d020 5f 4d 45 4d 53 59 53 35 29 0a 20 20 20 20 20 20  _MEMSYS5).      
2d030 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 69 7a  const char *zSiz
2d040 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
2d050 5f 69 6e 74 36 34 20 73 7a 48 65 61 70 3b 0a 0a  _int64 szHeap;..
2d060 20 20 20 20 20 20 7a 53 69 7a 65 20 3d 20 63 6d        zSize = cm
2d070 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c  dline_option_val
2d080 75 65 28 61 72 67 63 2c 20 61 72 67 76 2c 20 2b  ue(argc, argv, +
2d090 2b 69 29 3b 0a 20 20 20 20 20 20 73 7a 48 65 61  +i);.      szHea
2d0a0 70 20 3d 20 69 6e 74 65 67 65 72 56 61 6c 75 65  p = integerValue
2d0b0 28 7a 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 69  (zSize);.      i
2d0c0 66 28 20 73 7a 48 65 61 70 3e 30 78 37 66 66 66  f( szHeap>0x7fff
2d0d0 30 30 30 30 20 29 20 73 7a 48 65 61 70 20 3d 20  0000 ) szHeap = 
2d0e0 30 78 37 66 66 66 30 30 30 30 3b 0a 20 20 20 20  0x7fff0000;.    
2d0f0 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67    sqlite3_config
2d100 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48  (SQLITE_CONFIG_H
2d110 45 41 50 2c 20 6d 61 6c 6c 6f 63 28 28 69 6e 74  EAP, malloc((int
2d120 29 73 7a 48 65 61 70 29 2c 20 28 69 6e 74 29 73  )szHeap), (int)s
2d130 7a 48 65 61 70 2c 20 36 34 29 3b 0a 23 65 6c 73  zHeap, 64);.#els
2d140 65 0a 20 20 20 20 20 20 28 76 6f 69 64 29 63 6d  e.      (void)cm
2d150 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c  dline_option_val
2d160 75 65 28 61 72 67 63 2c 20 61 72 67 76 2c 20 2b  ue(argc, argv, +
2d170 2b 69 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  +i);.#endif.    
2d180 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
2d190 28 7a 2c 22 2d 73 63 72 61 74 63 68 22 29 3d 3d  (z,"-scratch")==
2d1a0 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e  0 ){.      int n
2d1b0 2c 20 73 7a 3b 0a 20 20 20 20 20 20 73 7a 20 3d  , sz;.      sz =
2d1c0 20 28 69 6e 74 29 69 6e 74 65 67 65 72 56 61 6c   (int)integerVal
2d1d0 75 65 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f  ue(cmdline_optio
2d1e0 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72 67  n_value(argc,arg
2d1f0 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20 69  v,++i));.      i
2d200 66 28 20 73 7a 3e 34 30 30 30 30 30 20 29 20 73  f( sz>400000 ) s
2d210 7a 20 3d 20 34 30 30 30 30 30 3b 0a 20 20 20 20  z = 400000;.    
2d220 20 20 69 66 28 20 73 7a 3c 32 35 30 30 20 29 20    if( sz<2500 ) 
2d230 73 7a 20 3d 20 32 35 30 30 3b 0a 20 20 20 20 20  sz = 2500;.     
2d240 20 6e 20 3d 20 28 69 6e 74 29 69 6e 74 65 67 65   n = (int)intege
2d250 72 56 61 6c 75 65 28 63 6d 64 6c 69 6e 65 5f 6f  rValue(cmdline_o
2d260 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63  ption_value(argc
2d270 2c 61 72 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20  ,argv,++i));.   
2d280 20 20 20 69 66 28 20 6e 3e 31 30 20 29 20 6e 20     if( n>10 ) n 
2d290 3d 20 31 30 3b 0a 20 20 20 20 20 20 69 66 28 20  = 10;.      if( 
2d2a0 6e 3c 31 20 29 20 6e 20 3d 20 31 3b 0a 20 20 20  n<1 ) n = 1;.   
2d2b0 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69     sqlite3_confi
2d2c0 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  g(SQLITE_CONFIG_
2d2d0 53 43 52 41 54 43 48 2c 20 6d 61 6c 6c 6f 63 28  SCRATCH, malloc(
2d2e0 6e 2a 73 7a 2b 31 29 2c 20 73 7a 2c 20 6e 29 3b  n*sz+1), sz, n);
2d2f0 0a 20 20 20 20 20 20 64 61 74 61 2e 73 68 65 6c  .      data.shel
2d300 6c 46 6c 67 73 20 7c 3d 20 53 48 46 4c 47 5f 53  lFlgs |= SHFLG_S
2d310 63 72 61 74 63 68 3b 0a 20 20 20 20 7d 65 6c 73  cratch;.    }els
2d320 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
2d330 2d 70 61 67 65 63 61 63 68 65 22 29 3d 3d 30 20  -pagecache")==0 
2d340 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 2c 20  ){.      int n, 
2d350 73 7a 3b 0a 20 20 20 20 20 20 73 7a 20 3d 20 28  sz;.      sz = (
2d360 69 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75 65  int)integerValue
2d370 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f  (cmdline_option_
2d380 76 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c  value(argc,argv,
2d390 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20 69 66 28  ++i));.      if(
2d3a0 20 73 7a 3e 37 30 30 30 30 20 29 20 73 7a 20 3d   sz>70000 ) sz =
2d3b0 20 37 30 30 30 30 3b 0a 20 20 20 20 20 20 69 66   70000;.      if
2d3c0 28 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20 30 3b  ( sz<0 ) sz = 0;
2d3d0 0a 20 20 20 20 20 20 6e 20 3d 20 28 69 6e 74 29  .      n = (int)
2d3e0 69 6e 74 65 67 65 72 56 61 6c 75 65 28 63 6d 64  integerValue(cmd
2d3f0 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75  line_option_valu
2d400 65 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29  e(argc,argv,++i)
2d410 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
2d420 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43  _config(SQLITE_C
2d430 4f 4e 46 49 47 5f 50 41 47 45 43 41 43 48 45 2c  ONFIG_PAGECACHE,
2d440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d450 20 20 20 20 20 28 6e 3e 30 20 26 26 20 73 7a 3e       (n>0 && sz>
2d460 30 29 20 3f 20 6d 61 6c 6c 6f 63 28 6e 2a 73 7a  0) ? malloc(n*sz
2d470 29 20 3a 20 30 2c 20 73 7a 2c 20 6e 29 3b 0a 20  ) : 0, sz, n);. 
2d480 20 20 20 20 20 64 61 74 61 2e 73 68 65 6c 6c 46       data.shellF
2d490 6c 67 73 20 7c 3d 20 53 48 46 4c 47 5f 50 61 67  lgs |= SHFLG_Pag
2d4a0 65 63 61 63 68 65 3b 0a 20 20 20 20 7d 65 6c 73  ecache;.    }els
2d4b0 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
2d4c0 2d 6c 6f 6f 6b 61 73 69 64 65 22 29 3d 3d 30 20  -lookaside")==0 
2d4d0 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 2c 20  ){.      int n, 
2d4e0 73 7a 3b 0a 20 20 20 20 20 20 73 7a 20 3d 20 28  sz;.      sz = (
2d4f0 69 6e 74 29 69 6e 74 65 67 65 72 56 61 6c 75 65  int)integerValue
2d500 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f  (cmdline_option_
2d510 76 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c  value(argc,argv,
2d520 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20 69 66 28  ++i));.      if(
2d530 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20 30 3b 0a   sz<0 ) sz = 0;.
2d540 20 20 20 20 20 20 6e 20 3d 20 28 69 6e 74 29 69        n = (int)i
2d550 6e 74 65 67 65 72 56 61 6c 75 65 28 63 6d 64 6c  ntegerValue(cmdl
2d560 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65  ine_option_value
2d570 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29  (argc,argv,++i))
2d580 3b 0a 20 20 20 20 20 20 69 66 28 20 6e 3c 30 20  ;.      if( n<0 
2d590 29 20 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 73  ) n = 0;.      s
2d5a0 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51  qlite3_config(SQ
2d5b0 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 4f 4b  LITE_CONFIG_LOOK
2d5c0 41 53 49 44 45 2c 20 73 7a 2c 20 6e 29 3b 0a 20  ASIDE, sz, n);. 
2d5d0 20 20 20 20 20 69 66 28 20 73 7a 2a 6e 3d 3d 30       if( sz*n==0
2d5e0 20 29 20 64 61 74 61 2e 73 68 65 6c 6c 46 6c 67   ) data.shellFlg
2d5f0 73 20 26 3d 20 7e 53 48 46 4c 47 5f 4c 6f 6f 6b  s &= ~SHFLG_Look
2d600 61 73 69 64 65 3b 0a 23 69 66 64 65 66 20 53 51  aside;.#ifdef SQ
2d610 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 56 46 53 54  LITE_ENABLE_VFST
2d620 52 41 43 45 0a 20 20 20 20 7d 65 6c 73 65 20 69  RACE.    }else i
2d630 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 76 66  f( strcmp(z,"-vf
2d640 73 74 72 61 63 65 22 29 3d 3d 30 20 29 7b 0a 20  strace")==0 ){. 
2d650 20 20 20 20 20 65 78 74 65 72 6e 20 69 6e 74 20       extern int 
2d660 76 66 73 74 72 61 63 65 5f 72 65 67 69 73 74 65  vfstrace_registe
2d670 72 28 0a 20 20 20 20 20 20 20 20 20 63 6f 6e 73  r(.         cons
2d680 74 20 63 68 61 72 20 2a 7a 54 72 61 63 65 4e 61  t char *zTraceNa
2d690 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 63 6f 6e  me,.         con
2d6a0 73 74 20 63 68 61 72 20 2a 7a 4f 6c 64 56 66 73  st char *zOldVfs
2d6b0 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 69  Name,.         i
2d6c0 6e 74 20 28 2a 78 4f 75 74 29 28 63 6f 6e 73 74  nt (*xOut)(const
2d6d0 20 63 68 61 72 2a 2c 76 6f 69 64 2a 29 2c 0a 20   char*,void*),. 
2d6e0 20 20 20 20 20 20 20 20 76 6f 69 64 20 2a 70 4f          void *pO
2d6f0 75 74 41 72 67 2c 0a 20 20 20 20 20 20 20 20 20  utArg,.         
2d700 69 6e 74 20 6d 61 6b 65 44 65 66 61 75 6c 74 0a  int makeDefault.
2d710 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 76        );.      v
2d720 66 73 74 72 61 63 65 5f 72 65 67 69 73 74 65 72  fstrace_register
2d730 28 22 74 72 61 63 65 22 2c 30 2c 28 69 6e 74 28  ("trace",0,(int(
2d740 2a 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 76  *)(const char*,v
2d750 6f 69 64 2a 29 29 66 70 75 74 73 2c 73 74 64 65  oid*))fputs,stde
2d760 72 72 2c 31 29 3b 0a 23 65 6e 64 69 66 0a 23 69  rr,1);.#endif.#i
2d770 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2d780 4c 45 5f 4d 55 4c 54 49 50 4c 45 58 0a 20 20 20  LE_MULTIPLEX.   
2d790 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
2d7a0 70 28 7a 2c 22 2d 6d 75 6c 74 69 70 6c 65 78 22  p(z,"-multiplex"
2d7b0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 65 78  )==0 ){.      ex
2d7c0 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
2d7d0 5f 6d 75 6c 74 69 70 6c 65 5f 69 6e 69 74 69 61  _multiple_initia
2d7e0 6c 69 7a 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  lize(const char*
2d7f0 2c 69 6e 74 29 3b 0a 20 20 20 20 20 20 73 71 6c  ,int);.      sql
2d800 69 74 65 33 5f 6d 75 6c 74 69 70 6c 65 78 5f 69  ite3_multiplex_i
2d810 6e 69 74 69 61 6c 69 7a 65 28 30 2c 20 31 29 3b  nitialize(0, 1);
2d820 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73  .#endif.    }els
2d830 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22  e if( strcmp(z,"
2d840 2d 6d 6d 61 70 22 29 3d 3d 30 20 29 7b 0a 20 20  -mmap")==0 ){.  
2d850 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36      sqlite3_int6
2d860 34 20 73 7a 20 3d 20 69 6e 74 65 67 65 72 56 61  4 sz = integerVa
2d870 6c 75 65 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69  lue(cmdline_opti
2d880 6f 6e 5f 76 61 6c 75 65 28 61 72 67 63 2c 61 72  on_value(argc,ar
2d890 67 76 2c 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20  gv,++i));.      
2d8a0 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53  sqlite3_config(S
2d8b0 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41  QLITE_CONFIG_MMA
2d8c0 50 5f 53 49 5a 45 2c 20 73 7a 2c 20 73 7a 29 3b  P_SIZE, sz, sz);
2d8d0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
2d8e0 74 72 63 6d 70 28 7a 2c 22 2d 76 66 73 22 29 3d  trcmp(z,"-vfs")=
2d8f0 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
2d900 74 65 33 5f 76 66 73 20 2a 70 56 66 73 20 3d 20  te3_vfs *pVfs = 
2d910 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64  sqlite3_vfs_find
2d920 28 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f  (cmdline_option_
2d930 76 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c  value(argc,argv,
2d940 2b 2b 69 29 29 3b 0a 20 20 20 20 20 20 69 66 28  ++i));.      if(
2d950 20 70 56 66 73 20 29 7b 0a 20 20 20 20 20 20 20   pVfs ){.       
2d960 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 72 65 67   sqlite3_vfs_reg
2d970 69 73 74 65 72 28 70 56 66 73 2c 20 31 29 3b 0a  ister(pVfs, 1);.
2d980 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
2d990 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66       utf8_printf
2d9a0 28 73 74 64 65 72 72 2c 20 22 6e 6f 20 73 75 63  (stderr, "no suc
2d9b0 68 20 56 46 53 3a 20 5c 22 25 73 5c 22 5c 6e 22  h VFS: \"%s\"\n"
2d9c0 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20  , argv[i]);.    
2d9d0 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20      exit(1);.   
2d9e0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
2d9f0 20 69 66 28 20 64 61 74 61 2e 7a 44 62 46 69 6c   if( data.zDbFil
2da00 65 6e 61 6d 65 3d 3d 30 20 29 7b 0a 23 69 66 6e  ename==0 ){.#ifn
2da10 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2da20 4d 45 4d 4f 52 59 44 42 0a 20 20 20 20 64 61 74  MEMORYDB.    dat
2da30 61 2e 7a 44 62 46 69 6c 65 6e 61 6d 65 20 3d 20  a.zDbFilename = 
2da40 22 3a 6d 65 6d 6f 72 79 3a 22 3b 0a 20 20 20 20  ":memory:";.    
2da50 77 61 72 6e 49 6e 6d 65 6d 6f 72 79 44 62 20 3d  warnInmemoryDb =
2da60 20 61 72 67 63 3d 3d 31 3b 0a 23 65 6c 73 65 0a   argc==1;.#else.
2da70 20 20 20 20 75 74 66 38 5f 70 72 69 6e 74 66 28      utf8_printf(
2da80 73 74 64 65 72 72 2c 22 25 73 3a 20 45 72 72 6f  stderr,"%s: Erro
2da90 72 3a 20 6e 6f 20 64 61 74 61 62 61 73 65 20 66  r: no database f
2daa0 69 6c 65 6e 61 6d 65 20 73 70 65 63 69 66 69 65  ilename specifie
2dab0 64 5c 6e 22 2c 20 41 72 67 76 30 29 3b 0a 20 20  d\n", Argv0);.  
2dac0 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6e 64    return 1;.#end
2dad0 69 66 0a 20 20 7d 0a 20 20 64 61 74 61 2e 6f 75  if.  }.  data.ou
2dae0 74 20 3d 20 73 74 64 6f 75 74 3b 0a 0a 20 20 2f  t = stdout;..  /
2daf0 2a 20 47 6f 20 61 68 65 61 64 20 61 6e 64 20 6f  * Go ahead and o
2db00 70 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  pen the database
2db10 20 66 69 6c 65 20 69 66 20 69 74 20 61 6c 72 65   file if it alre
2db20 61 64 79 20 65 78 69 73 74 73 2e 20 20 49 66 20  ady exists.  If 
2db30 74 68 65 0a 20 20 2a 2a 20 66 69 6c 65 20 64 6f  the.  ** file do
2db40 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 64 65  es not exist, de
2db50 6c 61 79 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20  lay opening it. 
2db60 20 54 68 69 73 20 70 72 65 76 65 6e 74 73 20 65   This prevents e
2db70 6d 70 74 79 20 64 61 74 61 62 61 73 65 0a 20 20  mpty database.  
2db80 2a 2a 20 66 69 6c 65 73 20 66 72 6f 6d 20 62 65  ** files from be
2db90 69 6e 67 20 63 72 65 61 74 65 64 20 69 66 20 61  ing created if a
2dba0 20 75 73 65 72 20 6d 69 73 74 79 70 65 73 20 74   user mistypes t
2dbb0 68 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  he database name
2dbc0 20 61 72 67 75 6d 65 6e 74 0a 20 20 2a 2a 20 74   argument.  ** t
2dbd0 6f 20 74 68 65 20 73 71 6c 69 74 65 20 63 6f 6d  o the sqlite com
2dbe0 6d 61 6e 64 2d 6c 69 6e 65 20 74 6f 6f 6c 2e 0a  mand-line tool..
2dbf0 20 20 2a 2f 0a 20 20 69 66 28 20 61 63 63 65 73    */.  if( acces
2dc00 73 28 64 61 74 61 2e 7a 44 62 46 69 6c 65 6e 61  s(data.zDbFilena
2dc10 6d 65 2c 20 30 29 3d 3d 30 20 29 7b 0a 20 20 20  me, 0)==0 ){.   
2dc20 20 6f 70 65 6e 5f 64 62 28 26 64 61 74 61 2c 20   open_db(&data, 
2dc30 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 50 72  0);.  }..  /* Pr
2dc40 6f 63 65 73 73 20 74 68 65 20 69 6e 69 74 69 61  ocess the initia
2dc50 6c 69 7a 61 74 69 6f 6e 20 66 69 6c 65 20 69 66  lization file if
2dc60 20 74 68 65 72 65 20 69 73 20 6f 6e 65 2e 20 20   there is one.  
2dc70 49 66 20 6e 6f 20 2d 69 6e 69 74 20 6f 70 74 69  If no -init opti
2dc80 6f 6e 0a 20 20 2a 2a 20 69 73 20 67 69 76 65 6e  on.  ** is given
2dc90 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20   on the command 
2dca0 6c 69 6e 65 2c 20 6c 6f 6f 6b 20 66 6f 72 20 61  line, look for a
2dcb0 20 66 69 6c 65 20 6e 61 6d 65 64 20 7e 2f 2e 73   file named ~/.s
2dcc0 71 6c 69 74 65 72 63 20 61 6e 64 0a 20 20 2a 2a  qliterc and.  **
2dcd0 20 74 72 79 20 74 6f 20 70 72 6f 63 65 73 73 20   try to process 
2dce0 69 74 2e 0a 20 20 2a 2f 0a 20 20 70 72 6f 63 65  it..  */.  proce
2dcf0 73 73 5f 73 71 6c 69 74 65 72 63 28 26 64 61 74  ss_sqliterc(&dat
2dd00 61 2c 7a 49 6e 69 74 46 69 6c 65 29 3b 0a 0a 20  a,zInitFile);.. 
2dd10 20 2f 2a 20 4d 61 6b 65 20 61 20 73 65 63 6f 6e   /* Make a secon
2dd20 64 20 70 61 73 73 20 74 68 72 6f 75 67 68 20 74  d pass through t
2dd30 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  he command-line 
2dd40 61 72 67 75 6d 65 6e 74 20 61 6e 64 20 73 65 74  argument and set
2dd50 0a 20 20 2a 2a 20 6f 70 74 69 6f 6e 73 2e 20 20  .  ** options.  
2dd60 54 68 69 73 20 73 65 63 6f 6e 64 20 70 61 73 73  This second pass
2dd70 20 69 73 20 64 65 6c 61 79 65 64 20 75 6e 74 69   is delayed unti
2dd80 6c 20 61 66 74 65 72 20 74 68 65 20 69 6e 69 74  l after the init
2dd90 69 61 6c 69 7a 61 74 69 6f 6e 0a 20 20 2a 2a 20  ialization.  ** 
2dda0 66 69 6c 65 20 69 73 20 70 72 6f 63 65 73 73 65  file is processe
2ddb0 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 63 6f  d so that the co
2ddc0 6d 6d 61 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d  mmand-line argum
2ddd0 65 6e 74 73 20 77 69 6c 6c 20 6f 76 65 72 72 69  ents will overri
2dde0 64 65 0a 20 20 2a 2a 20 73 65 74 74 69 6e 67 73  de.  ** settings
2ddf0 20 69 6e 20 74 68 65 20 69 6e 69 74 69 61 6c 69   in the initiali
2de00 7a 61 74 69 6f 6e 20 66 69 6c 65 2e 0a 20 20 2a  zation file..  *
2de10 2f 0a 20 20 66 6f 72 28 69 3d 31 3b 20 69 3c 61  /.  for(i=1; i<a
2de20 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 63  rgc; i++){.    c
2de30 68 61 72 20 2a 7a 20 3d 20 61 72 67 76 5b 69 5d  har *z = argv[i]
2de40 3b 0a 20 20 20 20 69 66 28 20 7a 5b 30 5d 21 3d  ;.    if( z[0]!=
2de50 27 2d 27 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  '-' ) continue;.
2de60 20 20 20 20 69 66 28 20 7a 5b 31 5d 3d 3d 27 2d      if( z[1]=='-
2de70 27 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 20 20  ' ){ z++; }.    
2de80 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 69  if( strcmp(z,"-i
2de90 6e 69 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  nit")==0 ){.    
2dea0 20 20 69 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65    i++;.    }else
2deb0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
2dec0 68 74 6d 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20  html")==0 ){.   
2ded0 20 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d     data.mode = M
2dee0 4f 44 45 5f 48 74 6d 6c 3b 0a 20 20 20 20 7d 65  ODE_Html;.    }e
2def0 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
2df00 2c 22 2d 6c 69 73 74 22 29 3d 3d 30 20 29 7b 0a  ,"-list")==0 ){.
2df10 20 20 20 20 20 20 64 61 74 61 2e 6d 6f 64 65 20        data.mode 
2df20 3d 20 4d 4f 44 45 5f 4c 69 73 74 3b 0a 20 20 20  = MODE_List;.   
2df30 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
2df40 70 28 7a 2c 22 2d 6c 69 6e 65 22 29 3d 3d 30 20  p(z,"-line")==0 
2df50 29 7b 0a 20 20 20 20 20 20 64 61 74 61 2e 6d 6f  ){.      data.mo
2df60 64 65 20 3d 20 4d 4f 44 45 5f 4c 69 6e 65 3b 0a  de = MODE_Line;.
2df70 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74      }else if( st
2df80 72 63 6d 70 28 7a 2c 22 2d 63 6f 6c 75 6d 6e 22  rcmp(z,"-column"
2df90 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61  )==0 ){.      da
2dfa0 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 43  ta.mode = MODE_C
2dfb0 6f 6c 75 6d 6e 3b 0a 20 20 20 20 7d 65 6c 73 65  olumn;.    }else
2dfc0 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
2dfd0 63 73 76 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  csv")==0 ){.    
2dfe0 20 20 64 61 74 61 2e 6d 6f 64 65 20 3d 20 4d 4f    data.mode = MO
2dff0 44 45 5f 43 73 76 3b 0a 20 20 20 20 20 20 6d 65  DE_Csv;.      me
2e000 6d 63 70 79 28 64 61 74 61 2e 63 6f 6c 53 65 70  mcpy(data.colSep
2e010 61 72 61 74 6f 72 2c 22 2c 22 2c 32 29 3b 0a 20  arator,",",2);. 
2e020 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
2e030 63 6d 70 28 7a 2c 22 2d 61 73 63 69 69 22 29 3d  cmp(z,"-ascii")=
2e040 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 61 74 61  =0 ){.      data
2e050 2e 6d 6f 64 65 20 3d 20 4d 4f 44 45 5f 41 73 63  .mode = MODE_Asc
2e060 69 69 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ii;.      sqlite
2e070 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
2e080 66 28 64 61 74 61 2e 63 6f 6c 53 65 70 61 72 61  f(data.colSepara
2e090 74 6f 72 29 2c 20 64 61 74 61 2e 63 6f 6c 53 65  tor), data.colSe
2e0a0 70 61 72 61 74 6f 72 2c 0a 20 20 20 20 20 20 20  parator,.       
2e0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e0c0 53 45 50 5f 55 6e 69 74 29 3b 0a 20 20 20 20 20  SEP_Unit);.     
2e0d0 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2e0e0 66 28 73 69 7a 65 6f 66 28 64 61 74 61 2e 72 6f  f(sizeof(data.ro
2e0f0 77 53 65 70 61 72 61 74 6f 72 29 2c 20 64 61 74  wSeparator), dat
2e100 61 2e 72 6f 77 53 65 70 61 72 61 74 6f 72 2c 0a  a.rowSeparator,.
2e110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e120 20 20 20 20 20 20 20 53 45 50 5f 52 65 63 6f 72         SEP_Recor
2e130 64 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  d);.    }else if
2e140 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 73 65 70  ( strcmp(z,"-sep
2e150 61 72 61 74 6f 72 22 29 3d 3d 30 20 29 7b 0a 20  arator")==0 ){. 
2e160 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
2e170 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 64 61 74  rintf(sizeof(dat
2e180 61 2e 63 6f 6c 53 65 70 61 72 61 74 6f 72 29 2c  a.colSeparator),
2e190 20 64 61 74 61 2e 63 6f 6c 53 65 70 61 72 61 74   data.colSeparat
2e1a0 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  or,.            
2e1b0 20 20 20 20 20 20 20 20 20 20 20 22 25 73 22 2c             "%s",
2e1c0 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76  cmdline_option_v
2e1d0 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c 2b  alue(argc,argv,+
2e1e0 2b 69 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  +i));.    }else 
2e1f0 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6e  if( strcmp(z,"-n
2e200 65 77 6c 69 6e 65 22 29 3d 3d 30 20 29 7b 0a 20  ewline")==0 ){. 
2e210 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
2e220 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 64 61 74  rintf(sizeof(dat
2e230 61 2e 72 6f 77 53 65 70 61 72 61 74 6f 72 29 2c  a.rowSeparator),
2e240 20 64 61 74 61 2e 72 6f 77 53 65 70 61 72 61 74   data.rowSeparat
2e250 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  or,.            
2e260 20 20 20 20 20 20 20 20 20 20 20 22 25 73 22 2c             "%s",
2e270 63 6d 64 6c 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76  cmdline_option_v
2e280 61 6c 75 65 28 61 72 67 63 2c 61 72 67 76 2c 2b  alue(argc,argv,+
2e290 2b 69 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  +i));.    }else 
2e2a0 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6e  if( strcmp(z,"-n
2e2b0 75 6c 6c 76 61 6c 75 65 22 29 3d 3d 30 20 29 7b  ullvalue")==0 ){
2e2c0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
2e2d0 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 64  nprintf(sizeof(d
2e2e0 61 74 61 2e 6e 75 6c 6c 56 61 6c 75 65 29 2c 20  ata.nullValue), 
2e2f0 64 61 74 61 2e 6e 75 6c 6c 56 61 6c 75 65 2c 0a  data.nullValue,.
2e300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e310 20 20 20 20 20 20 20 22 25 73 22 2c 63 6d 64 6c         "%s",cmdl
2e320 69 6e 65 5f 6f 70 74 69 6f 6e 5f 76 61 6c 75 65  ine_option_value
2e330 28 61 72 67 63 2c 61 72 67 76 2c 2b 2b 69 29 29  (argc,argv,++i))
2e340 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
2e350 73 74 72 63 6d 70 28 7a 2c 22 2d 68 65 61 64 65  strcmp(z,"-heade
2e360 72 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  r")==0 ){.      
2e370 64 61 74 61 2e 73 68 6f 77 48 65 61 64 65 72 20  data.showHeader 
2e380 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 1;.    }else i
2e390 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6e 6f  f( strcmp(z,"-no
2e3a0 68 65 61 64 65 72 22 29 3d 3d 30 20 29 7b 0a 20  header")==0 ){. 
2e3b0 20 20 20 20 20 64 61 74 61 2e 73 68 6f 77 48 65       data.showHe
2e3c0 61 64 65 72 20 3d 20 30 3b 0a 20 20 20 20 7d 65  ader = 0;.    }e
2e3d0 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
2e3e0 2c 22 2d 65 63 68 6f 22 29 3d 3d 30 20 29 7b 0a  ,"-echo")==0 ){.
2e3f0 20 20 20 20 20 20 64 61 74 61 2e 65 63 68 6f 4f        data.echoO
2e400 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  n = 1;.    }else
2e410 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
2e420 65 71 70 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  eqp")==0 ){.    
2e430 20 20 64 61 74 61 2e 61 75 74 6f 45 51 50 20 3d    data.autoEQP =
2e440 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   1;.    }else if
2e450 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 65 71 70  ( strcmp(z,"-eqp
2e460 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20  full")==0 ){.   
2e470 20 20 20 64 61 74 61 2e 61 75 74 6f 45 51 50 20     data.autoEQP 
2e480 3d 20 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 2;.    }else i
2e490 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 73 74  f( strcmp(z,"-st
2e4a0 61 74 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ats")==0 ){.    
2e4b0 20 20 64 61 74 61 2e 73 74 61 74 73 4f 6e 20 3d    data.statsOn =
2e4c0 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   1;.    }else if
2e4d0 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 73 63 61  ( strcmp(z,"-sca
2e4e0 6e 73 74 61 74 73 22 29 3d 3d 30 20 29 7b 0a 20  nstats")==0 ){. 
2e4f0 20 20 20 20 20 64 61 74 61 2e 73 63 61 6e 73 74       data.scanst
2e500 61 74 73 4f 6e 20 3d 20 31 3b 0a 20 20 20 20 7d  atsOn = 1;.    }
2e510 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
2e520 7a 2c 22 2d 62 61 63 6b 73 6c 61 73 68 22 29 3d  z,"-backslash")=
2e530 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 55  =0 ){.      /* U
2e540 6e 64 6f 63 75 6d 65 6e 74 65 64 20 63 6f 6d 6d  ndocumented comm
2e550 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 3a  and-line option:
2e560 20 2d 62 61 63 6b 73 6c 61 73 68 0a 20 20 20 20   -backslash.    
2e570 20 20 2a 2a 20 43 61 75 73 65 73 20 43 2d 73 74    ** Causes C-st
2e580 79 6c 65 20 62 61 63 6b 73 6c 61 73 68 20 65 73  yle backslash es
2e590 63 61 70 65 73 20 74 6f 20 62 65 20 65 76 61 6c  capes to be eval
2e5a0 75 61 74 65 64 20 69 6e 20 53 51 4c 20 73 74 61  uated in SQL sta
2e5b0 74 65 6d 65 6e 74 73 0a 20 20 20 20 20 20 2a 2a  tements.      **
2e5c0 20 70 72 69 6f 72 20 74 6f 20 73 65 6e 64 69 6e   prior to sendin
2e5d0 67 20 74 68 65 20 53 51 4c 20 69 6e 74 6f 20 53  g the SQL into S
2e5e0 51 4c 69 74 65 2e 20 20 55 73 65 66 75 6c 20 66  QLite.  Useful f
2e5f0 6f 72 20 69 6e 6a 65 63 74 69 6e 67 0a 20 20 20  or injecting.   
2e600 20 20 20 2a 2a 20 63 72 61 7a 79 20 62 79 74 65     ** crazy byte
2e610 73 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20  s in the middle 
2e620 6f 66 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  of SQL statement
2e630 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e  s for testing an
2e640 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20 20 20  d debugging..   
2e650 20 20 20 2a 2f 0a 20 20 20 20 20 20 64 61 74 61     */.      data
2e660 2e 62 61 63 6b 73 6c 61 73 68 4f 6e 20 3d 20 31  .backslashOn = 1
2e670 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
2e680 73 74 72 63 6d 70 28 7a 2c 22 2d 62 61 69 6c 22  strcmp(z,"-bail"
2e690 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 62 61  )==0 ){.      ba
2e6a0 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20 3d 20 31 3b  il_on_error = 1;
2e6b0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
2e6c0 74 72 63 6d 70 28 7a 2c 22 2d 76 65 72 73 69 6f  trcmp(z,"-versio
2e6d0 6e 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  n")==0 ){.      
2e6e0 70 72 69 6e 74 66 28 22 25 73 20 25 73 5c 6e 22  printf("%s %s\n"
2e6f0 2c 20 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72  , sqlite3_libver
2e700 73 69 6f 6e 28 29 2c 20 73 71 6c 69 74 65 33 5f  sion(), sqlite3_
2e710 73 6f 75 72 63 65 69 64 28 29 29 3b 0a 20 20 20  sourceid());.   
2e720 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20     return 0;.   
2e730 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
2e740 70 28 7a 2c 22 2d 69 6e 74 65 72 61 63 74 69 76  p(z,"-interactiv
2e750 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  e")==0 ){.      
2e760 73 74 64 69 6e 5f 69 73 5f 69 6e 74 65 72 61 63  stdin_is_interac
2e770 74 69 76 65 20 3d 20 31 3b 0a 20 20 20 20 7d 65  tive = 1;.    }e
2e780 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
2e790 2c 22 2d 62 61 74 63 68 22 29 3d 3d 30 20 29 7b  ,"-batch")==0 ){
2e7a0 0a 20 20 20 20 20 20 73 74 64 69 6e 5f 69 73 5f  .      stdin_is_
2e7b0 69 6e 74 65 72 61 63 74 69 76 65 20 3d 20 30 3b  interactive = 0;
2e7c0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
2e7d0 74 72 63 6d 70 28 7a 2c 22 2d 68 65 61 70 22 29  trcmp(z,"-heap")
2e7e0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 2b 2b  ==0 ){.      i++
2e7f0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
2e800 73 74 72 63 6d 70 28 7a 2c 22 2d 73 63 72 61 74  strcmp(z,"-scrat
2e810 63 68 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ch")==0 ){.     
2e820 20 69 2b 3d 32 3b 0a 20 20 20 20 7d 65 6c 73 65   i+=2;.    }else
2e830 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d   if( strcmp(z,"-
2e840 70 61 67 65 63 61 63 68 65 22 29 3d 3d 30 20 29  pagecache")==0 )
2e850 7b 0a 20 20 20 20 20 20 69 2b 3d 32 3b 0a 20 20  {.      i+=2;.  
2e860 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
2e870 6d 70 28 7a 2c 22 2d 6c 6f 6f 6b 61 73 69 64 65  mp(z,"-lookaside
2e880 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  ")==0 ){.      i
2e890 2b 3d 32 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  +=2;.    }else i
2e8a0 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 6d 6d  f( strcmp(z,"-mm
2e8b0 61 70 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ap")==0 ){.     
2e8c0 20 69 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 20   i++;.    }else 
2e8d0 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 76  if( strcmp(z,"-v
2e8e0 66 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  fs")==0 ){.     
2e8f0 20 69 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c   i++;.#ifdef SQL
2e900 49 54 45 5f 45 4e 41 42 4c 45 5f 56 46 53 54 52  ITE_ENABLE_VFSTR
2e910 41 43 45 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ACE.    }else if
2e920 28 20 73 74 72 63 6d 70 28 7a 2c 22 2d 76 66 73  ( strcmp(z,"-vfs
2e930 74 72 61 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20  trace")==0 ){.  
2e940 20 20 20 20 69 2b 2b 3b 0a 23 65 6e 64 69 66 0a      i++;.#endif.
2e950 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2e960 41 42 4c 45 5f 4d 55 4c 54 49 50 4c 45 58 0a 20  ABLE_MULTIPLEX. 
2e970 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72     }else if( str
2e980 63 6d 70 28 7a 2c 22 2d 6d 75 6c 74 69 70 6c 65  cmp(z,"-multiple
2e990 78 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  x")==0 ){.      
2e9a0 69 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  i++;.#endif.    
2e9b0 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
2e9c0 28 7a 2c 22 2d 68 65 6c 70 22 29 3d 3d 30 20 29  (z,"-help")==0 )
2e9d0 7b 0a 20 20 20 20 20 20 75 73 61 67 65 28 31 29  {.      usage(1)
2e9e0 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
2e9f0 73 74 72 63 6d 70 28 7a 2c 22 2d 63 6d 64 22 29  strcmp(z,"-cmd")
2ea00 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ==0 ){.      /* 
2ea10 52 75 6e 20 63 6f 6d 6d 61 6e 64 73 20 74 68 61  Run commands tha
2ea20 74 20 66 6f 6c 6c 6f 77 20 2d 63 6d 64 20 66 69  t follow -cmd fi
2ea30 72 73 74 20 61 6e 64 20 73 65 70 61 72 61 74 65  rst and separate
2ea40 6c 79 20 66 72 6f 6d 20 63 6f 6d 6d 61 6e 64 73  ly from commands
2ea50 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 73  .      ** that s
2ea60 69 6d 70 6c 79 20 61 70 70 65 61 72 20 6f 6e 20  imply appear on 
2ea70 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  the command-line
2ea80 2e 20 20 54 68 69 73 20 73 65 65 6d 73 20 67 6f  .  This seems go
2ea90 6f 66 79 2e 20 20 49 74 20 77 6f 75 6c 64 0a 20  ofy.  It would. 
2eaa0 20 20 20 20 20 2a 2a 20 62 65 20 62 65 74 74 65       ** be bette
2eab0 72 20 69 66 20 61 6c 6c 20 63 6f 6d 6d 61 6e 64  r if all command
2eac0 73 20 72 61 6e 20 69 6e 20 74 68 65 20 6f 72 64  s ran in the ord
2ead0 65 72 20 74 68 61 74 20 74 68 65 79 20 61 70 70  er that they app
2eae0 65 61 72 2e 20 20 42 75 74 0a 20 20 20 20 20 20  ear.  But.      
2eaf0 2a 2a 20 77 65 20 72 65 74 61 69 6e 20 74 68 65  ** we retain the
2eb00 20 67 6f 6f 66 79 20 62 65 68 61 76 69 6f 72 20   goofy behavior 
2eb10 66 6f 72 20 68 69 73 74 6f 72 69 63 61 6c 20 63  for historical c
2eb20 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 20 2a 2f  ompatibility. */
2eb30 0a 20 20 20 20 20 20 69 66 28 20 69 3d 3d 61 72  .      if( i==ar
2eb40 67 63 2d 31 20 29 20 62 72 65 61 6b 3b 0a 20 20  gc-1 ) break;.  
2eb50 20 20 20 20 7a 20 3d 20 63 6d 64 6c 69 6e 65 5f      z = cmdline_
2eb60 6f 70 74 69 6f 6e 5f 76 61 6c 75 65 28 61 72 67  option_value(arg
2eb70 63 2c 61 72 67 76 2c 2b 2b 69 29 3b 0a 20 20 20  c,argv,++i);.   
2eb80 20 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 2e 27     if( z[0]=='.'
2eb90 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
2eba0 20 64 6f 5f 6d 65 74 61 5f 63 6f 6d 6d 61 6e 64   do_meta_command
2ebb0 28 7a 2c 20 26 64 61 74 61 29 3b 0a 20 20 20 20  (z, &data);.    
2ebc0 20 20 20 20 69 66 28 20 72 63 20 26 26 20 62 61      if( rc && ba
2ebd0 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20 29 20 72 65  il_on_error ) re
2ebe0 74 75 72 6e 20 72 63 3d 3d 32 20 3f 20 30 20 3a  turn rc==2 ? 0 :
2ebf0 20 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65   rc;.      }else
2ec00 7b 0a 20 20 20 20 20 20 20 20 6f 70 65 6e 5f 64  {.        open_d
2ec10 62 28 26 64 61 74 61 2c 20 30 29 3b 0a 20 20 20  b(&data, 0);.   
2ec20 20 20 20 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f       rc = shell_
2ec30 65 78 65 63 28 64 61 74 61 2e 64 62 2c 20 7a 2c  exec(data.db, z,
2ec40 20 73 68 65 6c 6c 5f 63 61 6c 6c 62 61 63 6b 2c   shell_callback,
2ec50 20 26 64 61 74 61 2c 20 26 7a 45 72 72 4d 73 67   &data, &zErrMsg
2ec60 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a  );.        if( z
2ec70 45 72 72 4d 73 67 21 3d 30 20 29 7b 0a 20 20 20  ErrMsg!=0 ){.   
2ec80 20 20 20 20 20 20 20 75 74 66 38 5f 70 72 69 6e         utf8_prin
2ec90 74 66 28 73 74 64 65 72 72 2c 22 45 72 72 6f 72  tf(stderr,"Error
2eca0 3a 20 25 73 5c 6e 22 2c 20 7a 45 72 72 4d 73 67  : %s\n", zErrMsg
2ecb0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
2ecc0 20 62 61 69 6c 5f 6f 6e 5f 65 72 72 6f 72 20 29   bail_on_error )
2ecd0 20 72 65 74 75 72 6e 20 72 63 21 3d 30 20 3f 20   return rc!=0 ? 
2ece0 72 63 20 3a 20 31 3b 0a 20 20 20 20 20 20 20 20  rc : 1;.        
2ecf0 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d 30 20  }else if( rc!=0 
2ed00 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66  ){.          utf
2ed10 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  8_printf(stderr,
2ed20 22 45 72 72 6f 72 3a 20 75 6e 61 62 6c 65 20 74  "Error: unable t
2ed30 6f 20 70 72 6f 63 65 73 73 20 53 51 4c 20 5c 22  o process SQL \"
2ed40 25 73 5c 22 5c 6e 22 2c 20 7a 29 3b 0a 20 20 20  %s\"\n", z);.   
2ed50 20 20 20 20 20 20 20 69 66 28 20 62 61 69 6c 5f         if( bail_
2ed60 6f 6e 5f 65 72 72 6f 72 20 29 20 72 65 74 75 72  on_error ) retur
2ed70 6e 20 72 63 3b 0a 20 20 20 20 20 20 20 20 7d 0a  n rc;.        }.
2ed80 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
2ed90 65 7b 0a 20 20 20 20 20 20 75 74 66 38 5f 70 72  e{.      utf8_pr
2eda0 69 6e 74 66 28 73 74 64 65 72 72 2c 22 25 73 3a  intf(stderr,"%s:
2edb0 20 45 72 72 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20   Error: unknown 
2edc0 6f 70 74 69 6f 6e 3a 20 25 73 5c 6e 22 2c 20 41  option: %s\n", A
2edd0 72 67 76 30 2c 20 7a 29 3b 0a 20 20 20 20 20 20  rgv0, z);.      
2ede0 72 61 77 5f 70 72 69 6e 74 66 28 73 74 64 65 72  raw_printf(stder
2edf0 72 2c 22 55 73 65 20 2d 68 65 6c 70 20 66 6f 72  r,"Use -help for
2ee00 20 61 20 6c 69 73 74 20 6f 66 20 6f 70 74 69 6f   a list of optio
2ee10 6e 73 2e 5c 6e 22 29 3b 0a 20 20 20 20 20 20 72  ns.\n");.      r
2ee20 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20  eturn 1;.    }. 
2ee30 20 20 20 64 61 74 61 2e 63 4d 6f 64 65 20 3d 20     data.cMode = 
2ee40 64 61 74 61 2e 6d 6f 64 65 3b 0a 20 20 7d 0a 0a  data.mode;.  }..
2ee50 20 20 69 66 28 20 21 72 65 61 64 53 74 64 69 6e    if( !readStdin
2ee60 20 29 7b 0a 20 20 20 20 2f 2a 20 52 75 6e 20 61   ){.    /* Run a
2ee70 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  ll arguments tha
2ee80 74 20 64 6f 20 6e 6f 74 20 62 65 67 69 6e 20 77  t do not begin w
2ee90 69 74 68 20 27 2d 27 20 61 73 20 69 66 20 74 68  ith '-' as if th
2eea0 65 79 20 77 65 72 65 20 73 65 70 61 72 61 74 65  ey were separate
2eeb0 0a 20 20 20 20 2a 2a 20 63 6f 6d 6d 61 6e 64 2d  .    ** command-
2eec0 6c 69 6e 65 20 69 6e 70 75 74 73 2c 20 65 78 63  line inputs, exc
2eed0 65 70 74 20 66 6f 72 20 74 68 65 20 61 72 67 54  ept for the argT
2eee0 6f 53 6b 69 70 20 61 72 67 75 6d 65 6e 74 20 77  oSkip argument w
2eef0 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 0a 20 20  hich contains.  
2ef00 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73    ** the databas
2ef10 65 20 66 69 6c 65 6e 61 6d 65 2e 0a 20 20 20 20  e filename..    
2ef20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  */.    for(i=0; 
2ef30 69 3c 6e 43 6d 64 3b 20 69 2b 2b 29 7b 0a 20 20  i<nCmd; i++){.  
2ef40 20 20 20 20 69 66 28 20 61 7a 43 6d 64 5b 69 5d      if( azCmd[i]
2ef50 5b 30 5d 3d 3d 27 2e 27 20 29 7b 0a 20 20 20 20  [0]=='.' ){.    
2ef60 20 20 20 20 72 63 20 3d 20 64 6f 5f 6d 65 74 61      rc = do_meta
2ef70 5f 63 6f 6d 6d 61 6e 64 28 61 7a 43 6d 64 5b 69  _command(azCmd[i
2ef80 5d 2c 20 26 64 61 74 61 29 3b 0a 20 20 20 20 20  ], &data);.     
2ef90 20 20 20 69 66 28 20 72 63 20 29 20 72 65 74 75     if( rc ) retu
2efa0 72 6e 20 72 63 3d 3d 32 20 3f 20 30 20 3a 20 72  rn rc==2 ? 0 : r
2efb0 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
2efc0 20 20 20 20 20 20 20 20 6f 70 65 6e 5f 64 62 28          open_db(
2efd0 26 64 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20  &data, 0);.     
2efe0 20 20 20 72 63 20 3d 20 73 68 65 6c 6c 5f 65 78     rc = shell_ex
2eff0 65 63 28 64 61 74 61 2e 64 62 2c 20 61 7a 43 6d  ec(data.db, azCm
2f000 64 5b 69 5d 2c 20 73 68 65 6c 6c 5f 63 61 6c 6c  d[i], shell_call
2f010 62 61 63 6b 2c 20 26 64 61 74 61 2c 20 26 7a 45  back, &data, &zE
2f020 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20 20  rrMsg);.        
2f030 69 66 28 20 7a 45 72 72 4d 73 67 21 3d 30 20 29  if( zErrMsg!=0 )
2f040 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74 66 38  {.          utf8
2f050 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22  _printf(stderr,"
2f060 45 72 72 6f 72 3a 20 25 73 5c 6e 22 2c 20 7a 45  Error: %s\n", zE
2f070 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20 20  rrMsg);.        
2f080 20 20 72 65 74 75 72 6e 20 72 63 21 3d 30 20 3f    return rc!=0 ?
2f090 20 72 63 20 3a 20 31 3b 0a 20 20 20 20 20 20 20   rc : 1;.       
2f0a0 20 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d 30   }else if( rc!=0
2f0b0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 75 74   ){.          ut
2f0c0 66 38 5f 70 72 69 6e 74 66 28 73 74 64 65 72 72  f8_printf(stderr
2f0d0 2c 22 45 72 72 6f 72 3a 20 75 6e 61 62 6c 65 20  ,"Error: unable 
2f0e0 74 6f 20 70 72 6f 63 65 73 73 20 53 51 4c 3a 20  to process SQL: 
2f0f0 25 73 5c 6e 22 2c 20 61 7a 43 6d 64 5b 69 5d 29  %s\n", azCmd[i])
2f100 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ;.          retu
2f110 72 6e 20 72 63 3b 0a 20 20 20 20 20 20 20 20 7d  rn rc;.        }
2f120 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
2f130 20 20 20 66 72 65 65 28 61 7a 43 6d 64 29 3b 0a     free(azCmd);.
2f140 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
2f150 52 75 6e 20 63 6f 6d 6d 61 6e 64 73 20 72 65 63  Run commands rec
2f160 65 69 76 65 64 20 66 72 6f 6d 20 73 74 61 6e 64  eived from stand
2f170 61 72 64 20 69 6e 70 75 74 0a 20 20 20 20 2a 2f  ard input.    */
2f180 0a 20 20 20 20 69 66 28 20 73 74 64 69 6e 5f 69  .    if( stdin_i
2f190 73 5f 69 6e 74 65 72 61 63 74 69 76 65 20 29 7b  s_interactive ){
2f1a0 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 48 6f  .      char *zHo
2f1b0 6d 65 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  me;.      char *
2f1c0 7a 48 69 73 74 6f 72 79 20 3d 20 30 3b 0a 20 20  zHistory = 0;.  
2f1d0 20 20 20 20 69 6e 74 20 6e 48 69 73 74 6f 72 79      int nHistory
2f1e0 3b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28 0a  ;.      printf(.
2f1f0 20 20 20 20 20 20 20 20 22 53 51 4c 69 74 65 20          "SQLite 
2f200 76 65 72 73 69 6f 6e 20 25 73 20 25 2e 31 39 73  version %s %.19s
2f210 5c 6e 22 20 2f 2a 65 78 74 72 61 2d 76 65 72 73  \n" /*extra-vers
2f220 69 6f 6e 2d 69 6e 66 6f 2a 2f 0a 20 20 20 20 20  ion-info*/.     
2f230 20 20 20 22 45 6e 74 65 72 20 5c 22 2e 68 65 6c     "Enter \".hel
2f240 70 5c 22 20 66 6f 72 20 75 73 61 67 65 20 68 69  p\" for usage hi
2f250 6e 74 73 2e 5c 6e 22 2c 0a 20 20 20 20 20 20 20  nts.\n",.       
2f260 20 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73   sqlite3_libvers
2f270 69 6f 6e 28 29 2c 20 73 71 6c 69 74 65 33 5f 73  ion(), sqlite3_s
2f280 6f 75 72 63 65 69 64 28 29 0a 20 20 20 20 20 20  ourceid().      
2f290 29 3b 0a 20 20 20 20 20 20 69 66 28 20 77 61 72  );.      if( war
2f2a0 6e 49 6e 6d 65 6d 6f 72 79 44 62 20 29 7b 0a 20  nInmemoryDb ){. 
2f2b0 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 43         printf("C
2f2c0 6f 6e 6e 65 63 74 65 64 20 74 6f 20 61 20 22 29  onnected to a ")
2f2d0 3b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 42  ;.        printB
2f2e0 6f 6c 64 28 22 74 72 61 6e 73 69 65 6e 74 20 69  old("transient i
2f2f0 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
2f300 65 22 29 3b 0a 20 20 20 20 20 20 20 20 70 72 69  e");.        pri
2f310 6e 74 66 28 22 2e 5c 6e 55 73 65 20 5c 22 2e 6f  ntf(".\nUse \".o
2f320 70 65 6e 20 46 49 4c 45 4e 41 4d 45 5c 22 20 74  pen FILENAME\" t
2f330 6f 20 72 65 6f 70 65 6e 20 6f 6e 20 61 20 22 0a  o reopen on a ".
2f340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2f350 70 65 72 73 69 73 74 65 6e 74 20 64 61 74 61 62  persistent datab
2f360 61 73 65 2e 5c 6e 22 29 3b 0a 20 20 20 20 20 20  ase.\n");.      
2f370 7d 0a 20 20 20 20 20 20 7a 48 6f 6d 65 20 3d 20  }.      zHome = 
2f380 66 69 6e 64 5f 68 6f 6d 65 5f 64 69 72 28 30 29  find_home_dir(0)
2f390 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 48 6f 6d  ;.      if( zHom
2f3a0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 6e 48 69  e ){.        nHi
2f3b0 73 74 6f 72 79 20 3d 20 73 74 72 6c 65 6e 33 30  story = strlen30
2f3c0 28 7a 48 6f 6d 65 29 20 2b 20 32 30 3b 0a 20 20  (zHome) + 20;.  
2f3d0 20 20 20 20 20 20 69 66 28 20 28 7a 48 69 73 74        if( (zHist
2f3e0 6f 72 79 20 3d 20 6d 61 6c 6c 6f 63 28 6e 48 69  ory = malloc(nHi
2f3f0 73 74 6f 72 79 29 29 21 3d 30 20 29 7b 0a 20 20  story))!=0 ){.  
2f400 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
2f410 73 6e 70 72 69 6e 74 66 28 6e 48 69 73 74 6f 72  snprintf(nHistor
2f420 79 2c 20 7a 48 69 73 74 6f 72 79 2c 22 25 73 2f  y, zHistory,"%s/
2f430 2e 73 71 6c 69 74 65 5f 68 69 73 74 6f 72 79 22  .sqlite_history"
2f440 2c 20 7a 48 6f 6d 65 29 3b 0a 20 20 20 20 20 20  , zHome);.      
2f450 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
2f460 20 20 69 66 28 20 7a 48 69 73 74 6f 72 79 20 29    if( zHistory )
2f470 7b 20 73 68 65 6c 6c 5f 72 65 61 64 5f 68 69 73  { shell_read_his
2f480 74 6f 72 79 28 7a 48 69 73 74 6f 72 79 29 3b 20  tory(zHistory); 
2f490 7d 0a 20 20 20 20 20 20 72 63 20 3d 20 70 72 6f  }.      rc = pro
2f4a0 63 65 73 73 5f 69 6e 70 75 74 28 26 64 61 74 61  cess_input(&data
2f4b0 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
2f4c0 7a 48 69 73 74 6f 72 79 20 29 7b 0a 20 20 20 20  zHistory ){.    
2f4d0 20 20 20 20 73 68 65 6c 6c 5f 73 74 69 66 6c 65      shell_stifle
2f4e0 5f 68 69 73 74 6f 72 79 28 31 30 30 29 3b 0a 20  _history(100);. 
2f4f0 20 20 20 20 20 20 20 73 68 65 6c 6c 5f 77 72 69         shell_wri
2f500 74 65 5f 68 69 73 74 6f 72 79 28 7a 48 69 73 74  te_history(zHist
2f510 6f 72 79 29 3b 0a 20 20 20 20 20 20 20 20 66 72  ory);.        fr
2f520 65 65 28 7a 48 69 73 74 6f 72 79 29 3b 0a 20 20  ee(zHistory);.  
2f530 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
2f540 0a 20 20 20 20 20 20 72 63 20 3d 20 70 72 6f 63  .      rc = proc
2f550 65 73 73 5f 69 6e 70 75 74 28 26 64 61 74 61 2c  ess_input(&data,
2f560 20 73 74 64 69 6e 29 3b 0a 20 20 20 20 7d 0a 20   stdin);.    }. 
2f570 20 7d 0a 20 20 73 65 74 5f 74 61 62 6c 65 5f 6e   }.  set_table_n
2f580 61 6d 65 28 26 64 61 74 61 2c 20 30 29 3b 0a 20  ame(&data, 0);. 
2f590 20 69 66 28 20 64 61 74 61 2e 64 62 20 29 7b 0a   if( data.db ){.
2f5a0 20 20 20 20 73 65 73 73 69 6f 6e 5f 63 6c 6f 73      session_clos
2f5b0 65 5f 61 6c 6c 28 26 64 61 74 61 29 3b 0a 20 20  e_all(&data);.  
2f5c0 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28    sqlite3_close(
2f5d0 64 61 74 61 2e 64 62 29 3b 0a 20 20 7d 0a 20 20  data.db);.  }.  
2f5e0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 64 61 74  sqlite3_free(dat
2f5f0 61 2e 7a 46 72 65 65 4f 6e 43 6c 6f 73 65 29 3b  a.zFreeOnClose);
2f600 0a 20 20 66 69 6e 64 5f 68 6f 6d 65 5f 64 69 72  .  find_home_dir
2f610 28 31 29 3b 0a 23 69 66 20 21 53 51 4c 49 54 45  (1);.#if !SQLITE
2f620 5f 53 48 45 4c 4c 5f 49 53 5f 55 54 46 38 0a 20  _SHELL_IS_UTF8. 
2f630 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63   for(i=0; i<argc
2f640 3b 20 69 2b 2b 29 20 73 71 6c 69 74 65 33 5f 66  ; i++) sqlite3_f
2f650 72 65 65 28 61 72 67 76 5b 69 5d 29 3b 0a 20 20  ree(argv[i]);.  
2f660 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 72 67  sqlite3_free(arg
2f670 76 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74  v);.#endif.  ret
2f680 75 72 6e 20 72 63 3b 0a 7d 0a                    urn rc;.}.