/ Hex Artifact Content
Login

Artifact baf707463944a0788df1503e9920c36edca1fe8f:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
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 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 23 69  sqliteInt.h"..#i
01d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
01e0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
01f0: 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
0200: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
0210: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
0220: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
0230: 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
0240: 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
0250: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
0260: 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
0270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
02d0: 65 20 22 70 72 61 67 6d 61 2e 68 22 20 69 6e 63  e "pragma.h" inc
02e0: 6c 75 64 65 20 66 69 6c 65 20 69 73 20 61 6e 20  lude file is an 
02f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65  automatically ge
0300: 6e 65 72 61 74 65 64 20 66 69 6c 65 20 74 68 61  nerated file tha
0310: 74 0a 2a 2a 20 74 68 61 74 20 69 6e 63 6c 75 64  t.** that includ
0320: 65 73 20 74 68 65 20 50 72 61 67 54 79 70 65 5f  es the PragType_
0330: 58 58 58 58 20 6d 61 63 72 6f 20 64 65 66 69 6e  XXXX macro defin
0340: 69 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 61  itions and the a
0350: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 0a 2a 2a 20  PragmaName[].** 
0360: 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 65 6e  object.  This en
0370: 73 75 72 65 73 20 74 68 61 74 20 74 68 65 20 61  sures that the a
0380: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 20 74 61 62  PragmaName[] tab
0390: 6c 65 20 69 73 20 61 72 72 61 6e 67 65 64 20 69  le is arranged i
03a0: 6e 0a 2a 2a 20 6c 65 78 69 63 6f 67 72 61 70 68  n.** lexicograph
03b0: 69 63 61 6c 20 6f 72 64 65 72 20 74 6f 20 66 61  ical order to fa
03c0: 63 69 6c 69 74 79 20 61 20 62 69 6e 61 72 79 20  cility a binary 
03d0: 73 65 61 72 63 68 20 6f 66 20 74 68 65 20 70 72  search of the pr
03e0: 61 67 6d 61 20 6e 61 6d 65 2e 0a 2a 2a 20 44 6f  agma name..** Do
03f0: 20 6e 6f 74 20 65 64 69 74 20 70 72 61 67 6d 61   not edit pragma
0400: 2e 68 20 64 69 72 65 63 74 6c 79 2e 20 20 45 64  .h directly.  Ed
0410: 69 74 20 61 6e 64 20 72 65 72 75 6e 20 74 68 65  it and rerun the
0420: 20 73 63 72 69 70 74 20 69 6e 20 61 74 20 0a 2a   script in at .*
0430: 2a 20 2e 2e 2f 74 6f 6f 6c 2f 6d 6b 70 72 61 67  * ../tool/mkprag
0440: 6d 61 74 61 62 2e 74 63 6c 2e 20 2a 2f 0a 23 69  matab.tcl. */.#i
0450: 6e 63 6c 75 64 65 20 22 70 72 61 67 6d 61 2e 68  nclude "pragma.h
0460: 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  "../*.** Interpr
0470: 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  et the given str
0480: 69 6e 67 20 61 73 20 61 20 73 61 66 65 74 79 20  ing as a safety 
0490: 6c 65 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30  level.  Return 0
04a0: 20 66 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66   for OFF,.** 1 f
04b0: 6f 72 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 2c  or ON or NORMAL,
04c0: 20 32 20 66 6f 72 20 46 55 4c 4c 2c 20 61 6e 64   2 for FULL, and
04d0: 20 33 20 66 6f 72 20 45 58 54 52 41 2e 20 20 52   3 for EXTRA.  R
04e0: 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e 20 65  eturn 1 for an e
04f0: 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e 72 65  mpty or .** unre
0500: 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e 67 20  cognized string 
0510: 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65 20 46  argument.  The F
0520: 55 4c 4c 20 61 6e 64 20 45 58 54 52 41 20 6f 70  ULL and EXTRA op
0530: 74 69 6f 6e 20 69 73 20 64 69 73 61 6c 6c 6f 77  tion is disallow
0540: 65 64 0a 2a 2a 20 69 66 20 74 68 65 20 6f 6d 69  ed.** if the omi
0550: 74 46 75 6c 6c 20 70 61 72 61 6d 65 74 65 72 20  tFull parameter 
0560: 69 74 20 31 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  it 1..**.** Note
0570: 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 73   that the values
0580: 20 72 65 74 75 72 6e 65 64 20 61 72 65 20 6f 6e   returned are on
0590: 65 20 6c 65 73 73 20 74 68 61 74 20 74 68 65 20  e less that the 
05a0: 76 61 6c 75 65 73 20 74 68 61 74 0a 2a 2a 20 73  values that.** s
05b0: 68 6f 75 6c 64 20 62 65 20 70 61 73 73 65 64 20  hould be passed 
05c0: 69 6e 74 6f 20 73 71 6c 69 74 65 33 42 74 72 65  into sqlite3Btre
05d0: 65 53 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28  eSetSafetyLevel(
05e0: 29 2e 20 20 54 68 65 20 69 73 20 64 6f 6e 65 0a  ).  The is done.
05f0: 2a 2a 20 74 6f 20 73 75 70 70 6f 72 74 20 6c 65  ** to support le
0600: 67 61 63 79 20 53 51 4c 20 63 6f 64 65 2e 20 20  gacy SQL code.  
0610: 54 68 65 20 73 61 66 65 74 79 20 6c 65 76 65 6c  The safety level
0620: 20 75 73 65 64 20 74 6f 20 62 65 20 62 6f 6f 6c   used to be bool
0630: 65 61 6e 0a 2a 2a 20 61 6e 64 20 6f 6c 64 65 72  ean.** and older
0640: 20 73 63 72 69 70 74 73 20 6d 61 79 20 68 61 76   scripts may hav
0650: 65 20 75 73 65 64 20 6e 75 6d 62 65 72 73 20 30  e used numbers 0
0660: 20 66 6f 72 20 4f 46 46 20 61 6e 64 20 31 20 66   for OFF and 1 f
0670: 6f 72 20 4f 4e 2e 0a 2a 2f 0a 73 74 61 74 69 63  or ON..*/.static
0680: 20 75 38 20 67 65 74 53 61 66 65 74 79 4c 65 76   u8 getSafetyLev
0690: 65 6c 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  el(const char *z
06a0: 2c 20 69 6e 74 20 6f 6d 69 74 46 75 6c 6c 2c 20  , int omitFull, 
06b0: 75 38 20 64 66 6c 74 29 7b 0a 20 20 20 20 20 20  u8 dflt){.      
06c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
06d0: 20 20 20 20 20 20 20 2f 2a 20 31 32 33 34 35 36         /* 123456
06e0: 37 38 39 20 31 32 33 34 35 36 37 38 39 20 31 32  789 123456789 12
06f0: 33 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f  3 */.  static co
0700: 6e 73 74 20 63 68 61 72 20 7a 54 65 78 74 5b 5d  nst char zText[]
0710: 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65 79 65 73   = "onoffalseyes
0720: 74 72 75 65 78 74 72 61 66 75 6c 6c 22 3b 0a 20  truextrafull";. 
0730: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38   static const u8
0740: 20 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c   iOffset[] = {0,
0750: 20 31 2c 20 32 2c 20 20 34 2c 20 20 20 20 39 2c   1, 2,  4,    9,
0760: 20 20 31 32 2c 20 20 31 35 2c 20 20 20 32 30 7d    12,  15,   20}
0770: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
0780: 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d 20 3d 20   u8 iLength[] = 
0790: 7b 32 2c 20 32 2c 20 33 2c 20 20 35 2c 20 20 20  {2, 2, 3,  5,   
07a0: 20 33 2c 20 20 20 34 2c 20 20 20 35 2c 20 20 20   3,   4,   5,   
07b0: 20 34 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f   4};.  static co
07c0: 6e 73 74 20 75 38 20 69 56 61 6c 75 65 5b 5d 20  nst u8 iValue[] 
07d0: 3d 20 20 7b 31 2c 20 30 2c 20 30 2c 20 20 30 2c  =  {1, 0, 0,  0,
07e0: 20 20 20 20 31 2c 20 20 20 31 2c 20 20 20 33 2c      1,   1,   3,
07f0: 20 20 20 20 32 7d 3b 0a 20 20 20 20 20 20 20 20      2};.        
0800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0810: 20 20 20 20 2f 2a 20 6f 6e 20 6e 6f 20 6f 66 66      /* on no off
0820: 20 66 61 6c 73 65 20 79 65 73 20 74 72 75 65 20   false yes true 
0830: 65 78 74 72 61 20 66 75 6c 6c 20 2a 2f 0a 20 20  extra full */.  
0840: 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28 20  int i, n;.  if( 
0850: 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a  sqlite3Isdigit(*
0860: 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  z) ){.    return
0870: 20 28 75 38 29 73 71 6c 69 74 65 33 41 74 6f 69   (u8)sqlite3Atoi
0880: 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 73  (z);.  }.  n = s
0890: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
08a0: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
08b0: 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e 67 74  ArraySize(iLengt
08c0: 68 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  h); i++){.    if
08d0: 28 20 69 4c 65 6e 67 74 68 5b 69 5d 3d 3d 6e 20  ( iLength[i]==n 
08e0: 26 26 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  && sqlite3StrNIC
08f0: 6d 70 28 26 7a 54 65 78 74 5b 69 4f 66 66 73 65  mp(&zText[iOffse
0900: 74 5b 69 5d 5d 2c 7a 2c 6e 29 3d 3d 30 0a 20 20  t[i]],z,n)==0.  
0910: 20 20 20 26 26 20 28 21 6f 6d 69 74 46 75 6c 6c     && (!omitFull
0920: 20 7c 7c 20 69 56 61 6c 75 65 5b 69 5d 3c 3d 31   || iValue[i]<=1
0930: 29 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 72  ).    ){.      r
0940: 65 74 75 72 6e 20 69 56 61 6c 75 65 5b 69 5d 3b  eturn iValue[i];
0950: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
0960: 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a 2f 2a 0a  urn dflt;.}../*.
0970: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
0980: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
0990: 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
09a0: 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65 33 47  ..*/.u8 sqlite3G
09b0: 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20  etBoolean(const 
09c0: 63 68 61 72 20 2a 7a 2c 20 75 38 20 64 66 6c 74  char *z, u8 dflt
09d0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 67 65 74 53  ){.  return getS
09e0: 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c 31 2c 64  afetyLevel(z,1,d
09f0: 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 20 54  flt)!=0;.}../* T
0a00: 68 65 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  he sqlite3GetBoo
0a10: 6c 65 61 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  lean() function 
0a20: 69 73 20 75 73 65 64 20 62 79 20 6f 74 68 65 72  is used by other
0a30: 20 6d 6f 64 75 6c 65 73 20 62 75 74 20 74 68 65   modules but the
0a40: 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  .** remainder of
0a50: 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 73 70   this file is sp
0a60: 65 63 69 66 69 63 20 74 6f 20 50 52 41 47 4d 41  ecific to PRAGMA
0a70: 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 20 53 6f   processing.  So
0a80: 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20 72 65 73   omit.** the res
0a90: 74 20 6f 66 20 74 68 65 20 66 69 6c 65 20 69 66  t of the file if
0aa0: 20 50 52 41 47 4d 41 73 20 61 72 65 20 6f 6d 69   PRAGMAs are omi
0ab0: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
0ac0: 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ild..*/.#if !def
0ad0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
0ae0: 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a 2a 2a 20  _PRAGMA)../*.** 
0af0: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69  Interpret the gi
0b00: 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20  ven string as a 
0b10: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 76 61 6c  locking mode val
0b20: 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ue..*/.static in
0b30: 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65  t getLockingMode
0b40: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
0b50: 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20 20 20 20  .  if( z ){.    
0b60: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
0b70: 72 49 43 6d 70 28 7a 2c 20 22 65 78 63 6c 75 73  rICmp(z, "exclus
0b80: 69 76 65 22 29 20 29 20 72 65 74 75 72 6e 20 50  ive") ) return P
0b90: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
0ba0: 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20 20 20 20  _EXCLUSIVE;.    
0bb0: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
0bc0: 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72 6d 61 6c  rICmp(z, "normal
0bd0: 22 29 20 29 20 72 65 74 75 72 6e 20 50 41 47 45  ") ) return PAGE
0be0: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f  R_LOCKINGMODE_NO
0bf0: 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72 65 74 75  RMAL;.  }.  retu
0c00: 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  rn PAGER_LOCKING
0c10: 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d 0a 0a 23  MODE_QUERY;.}..#
0c20: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
0c30: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 2f 2a  IT_AUTOVACUUM./*
0c40: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
0c50: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
0c60: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
0c70: 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a 2a 0a   mode value..**.
0c80: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
0c90: 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f 6e 65 22   strings, "none"
0ca0: 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20 22 69 6e  , "full" and "in
0cb0: 63 72 65 6d 65 6e 74 61 6c 22 20 61 72 65 20 0a  cremental" are .
0cc0: 2a 2a 20 61 63 63 65 70 74 61 62 6c 65 2c 20 61  ** acceptable, a
0cd0: 73 20 61 72 65 20 74 68 65 69 72 20 6e 75 6d 65  s are their nume
0ce0: 72 69 63 20 65 71 75 69 76 61 6c 65 6e 74 73 3a  ric equivalents:
0cf0: 20 30 2c 20 31 20 61 6e 64 20 32 20 72 65 73 70   0, 1 and 2 resp
0d00: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 73 74 61  ectively..*/.sta
0d10: 74 69 63 20 69 6e 74 20 67 65 74 41 75 74 6f 56  tic int getAutoV
0d20: 61 63 75 75 6d 28 63 6f 6e 73 74 20 63 68 61 72  acuum(const char
0d30: 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20   *z){.  int i;. 
0d40: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
0d50: 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 6e 65 22  trICmp(z, "none"
0d60: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
0d70: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e 4f 4e 45  _AUTOVACUUM_NONE
0d80: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
0d90: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 66 75  e3StrICmp(z, "fu
0da0: 6c 6c 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ll") ) return BT
0db0: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 46  REE_AUTOVACUUM_F
0dc0: 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ULL;.  if( 0==sq
0dd0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
0de0: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 29 20 29  "incremental") )
0df0: 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41 55   return BTREE_AU
0e00: 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52 3b 0a 20  TOVACUUM_INCR;. 
0e10: 20 69 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69   i = sqlite3Atoi
0e20: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 75  (z);.  return (u
0e30: 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d 32 29 3f  8)((i>=0&&i<=2)?
0e40: 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  i:0);.}.#endif /
0e50: 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  * ifndef SQLITE_
0e60: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 20  OMIT_AUTOVACUUM 
0e70: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
0e80: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
0e90: 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  AGMAS./*.** Inte
0ea0: 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e 20  rpret the given 
0eb0: 73 74 72 69 6e 67 20 61 73 20 61 20 74 65 6d 70  string as a temp
0ec0: 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e 20 52 65   db location. Re
0ed0: 74 75 72 6e 20 31 20 66 6f 72 20 66 69 6c 65 0a  turn 1 for file.
0ee0: 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d 70 6f 72  ** backed tempor
0ef0: 61 72 79 20 64 61 74 61 62 61 73 65 73 2c 20 32  ary databases, 2
0f00: 20 66 6f 72 20 74 68 65 20 52 65 64 2d 42 6c 61   for the Red-Bla
0f10: 63 6b 20 74 72 65 65 20 69 6e 20 6d 65 6d 6f 72  ck tree in memor
0f20: 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 61 6e  y database.** an
0f30: 64 20 30 20 74 6f 20 75 73 65 20 74 68 65 20 63  d 0 to use the c
0f40: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66 61  ompile-time defa
0f50: 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ult..*/.static i
0f60: 6e 74 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28  nt getTempStore(
0f70: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a  const char *z){.
0f80: 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27 30 27 20    if( z[0]>='0' 
0f90: 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20 29 7b 0a  && z[0]<='2' ){.
0fa0: 20 20 20 20 72 65 74 75 72 6e 20 7a 5b 30 5d 20      return z[0] 
0fb0: 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69  - '0';.  }else i
0fc0: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
0fd0: 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d 3d 30 20  p(z, "file")==0 
0fe0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b  ){.    return 1;
0ff0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c  .  }else if( sql
1000: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22  ite3StrICmp(z, "
1010: 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29 7b 0a 20  memory")==0 ){. 
1020: 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d     return 2;.  }
1030: 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e  else{.    return
1040: 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66   0;.  }.}.#endif
1050: 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45 52   /* SQLITE_PAGER
1060: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
1070: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1080: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
1090: 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74 65 20  *.** Invalidate 
10a0: 74 65 6d 70 20 73 74 6f 72 61 67 65 2c 20 65 69  temp storage, ei
10b0: 74 68 65 72 20 77 68 65 6e 20 74 68 65 20 74 65  ther when the te
10c0: 6d 70 20 73 74 6f 72 61 67 65 20 69 73 20 63 68  mp storage is ch
10d0: 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d 20 64 65  anged.** from de
10e0: 66 61 75 6c 74 2c 20 6f 72 20 77 68 65 6e 20 27  fault, or when '
10f0: 66 69 6c 65 27 20 61 6e 64 20 74 68 65 20 74 65  file' and the te
1100: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
1110: 72 79 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ry has changed.*
1120: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 69 6e 76  /.static int inv
1130: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
1140: 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ge(Parse *pParse
1150: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
1160: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20   = pParse->db;. 
1170: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 31 5d 2e   if( db->aDb[1].
1180: 70 42 74 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  pBt!=0 ){.    if
1190: 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
11a0: 74 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65  t || sqlite3Btre
11b0: 65 49 73 49 6e 52 65 61 64 54 72 61 6e 73 28 64  eIsInReadTrans(d
11c0: 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 20 29  b->aDb[1].pBt) )
11d0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45  {.      sqlite3E
11e0: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
11f0: 22 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61  "temporary stora
1200: 67 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61  ge cannot be cha
1210: 6e 67 65 64 20 22 0a 20 20 20 20 20 20 20 20 22  nged ".        "
1220: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
1230: 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20  ansaction");.   
1240: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
1250: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
1260: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
1270: 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70  ose(db->aDb[1].p
1280: 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e 61 44 62  Bt);.    db->aDb
1290: 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a 20 20 20  [1].pBt = 0;.   
12a0: 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
12b0: 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
12c0: 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a 20 20 72  ion(db);.  }.  r
12d0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
12e0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
12f0: 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  ITE_PAGER_PRAGMA
1300: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
1310: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
1320: 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 66  PRAGMAS./*.** If
1330: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
1340: 73 65 20 69 73 20 6f 70 65 6e 2c 20 63 6c 6f 73  se is open, clos
1350: 65 20 69 74 20 61 6e 64 20 6d 61 72 6b 20 74 68  e it and mark th
1360: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
1370: 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69 6e 67 20  a.** as needing 
1380: 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54 68 69 73  reloading.  This
1390: 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 77 68   must be done wh
13a0: 65 6e 20 75 73 69 6e 67 20 74 68 65 20 53 51 4c  en using the SQL
13b0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 2a  ITE_TEMP_STORE.*
13c0: 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f 54 45 4d  * or DEFAULT_TEM
13d0: 50 5f 53 54 4f 52 45 20 70 72 61 67 6d 61 73 2e  P_STORE pragmas.
13e0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63  .*/.static int c
13f0: 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61 67 65  hangeTempStorage
1400: 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
1410: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 6f  const char *zSto
1420: 72 61 67 65 54 79 70 65 29 7b 0a 20 20 69 6e 74  rageType){.  int
1430: 20 74 73 20 3d 20 67 65 74 54 65 6d 70 53 74 6f   ts = getTempSto
1440: 72 65 28 7a 53 74 6f 72 61 67 65 54 79 70 65 29  re(zStorageType)
1450: 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  ;.  sqlite3 *db 
1460: 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20  = pParse->db;.  
1470: 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  if( db->temp_sto
1480: 72 65 3d 3d 74 73 20 29 20 72 65 74 75 72 6e 20  re==ts ) return 
1490: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28  SQLITE_OK;.  if(
14a0: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
14b0: 74 6f 72 61 67 65 28 20 70 50 61 72 73 65 20 29  torage( pParse )
14c0: 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
14d0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
14e0: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  TE_ERROR;.  }.  
14f0: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d  db->temp_store =
1500: 20 28 75 38 29 74 73 3b 0a 20 20 72 65 74 75 72   (u8)ts;.  retur
1510: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23  n SQLITE_OK;.}.#
1520: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
1530: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
1540: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  ../*.** Set the 
1550: 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 66 69 72  names of the fir
1560: 73 74 20 4e 20 63 6f 6c 75 6d 6e 73 20 74 6f 20  st N columns to 
1570: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 61 7a  the values in az
1580: 43 6f 6c 5b 5d 0a 2a 2f 0a 73 74 61 74 69 63 20  Col[].*/.static 
1590: 76 6f 69 64 20 73 65 74 41 6c 6c 43 6f 6c 75 6d  void setAllColum
15a0: 6e 4e 61 6d 65 73 28 0a 20 20 56 64 62 65 20 2a  nNames(.  Vdbe *
15b0: 76 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v,              
15c0: 20 2f 2a 20 54 68 65 20 71 75 65 72 79 20 75 6e   /* The query un
15d0: 64 65 72 20 63 6f 6e 73 74 72 75 63 74 69 6f 6e  der construction
15e0: 20 2a 2f 0a 20 20 69 6e 74 20 4e 2c 20 20 20 20   */.  int N,    
15f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1600: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
1610: 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  s */.  const cha
1620: 72 20 2a 2a 61 7a 43 6f 6c 20 20 20 20 20 2f 2a  r **azCol     /*
1630: 20 4e 61 6d 65 73 20 6f 66 20 63 6f 6c 75 6d 6e   Names of column
1640: 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b  s */.){.  int i;
1650: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
1660: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 4e 29 3b 0a  tNumCols(v, N);.
1670: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 3b 20    for(i=0; i<N; 
1680: 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i++){.    sqlite
1690: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
16a0: 76 2c 20 69 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, i, COLNAME_NA
16b0: 4d 45 2c 20 61 7a 43 6f 6c 5b 69 5d 2c 20 53 51  ME, azCol[i], SQ
16c0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
16d0: 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  }.}.static void 
16e0: 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65  setOneColumnName
16f0: 28 56 64 62 65 20 2a 76 2c 20 63 6f 6e 73 74 20  (Vdbe *v, const 
1700: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 73 65 74 41  char *z){.  setA
1710: 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c  llColumnNames(v,
1720: 20 31 2c 20 26 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a   1, &z);.}../*.*
1730: 2a 20 47 65 6e 65 72 61 74 65 20 63 6f 64 65 20  * Generate code 
1740: 74 6f 20 72 65 74 75 72 6e 20 61 20 73 69 6e 67  to return a sing
1750: 6c 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  le integer value
1760: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
1770: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
1780: 28 56 64 62 65 20 2a 76 2c 20 63 6f 6e 73 74 20  (Vdbe *v, const 
1790: 63 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 69 36  char *zLabel, i6
17a0: 34 20 76 61 6c 75 65 29 7b 0a 20 20 73 71 6c 69  4 value){.  sqli
17b0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 44 75 70  te3VdbeAddOp4Dup
17c0: 38 28 76 2c 20 4f 50 5f 49 6e 74 36 34 2c 20 30  8(v, OP_Int64, 0
17d0: 2c 20 31 2c 20 30 2c 20 28 63 6f 6e 73 74 20 75  , 1, 0, (const u
17e0: 38 2a 29 26 76 61 6c 75 65 2c 20 50 34 5f 49 4e  8*)&value, P4_IN
17f0: 54 36 34 29 3b 0a 20 20 73 65 74 4f 6e 65 43 6f  T64);.  setOneCo
1800: 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 7a 4c 61 62  lumnName(v, zLab
1810: 65 6c 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  el);.  sqlite3Vd
1820: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
1830: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b  esultRow, 1, 1);
1840: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61  .}../*.** Genera
1850: 74 65 20 63 6f 64 65 20 74 6f 20 72 65 74 75 72  te code to retur
1860: 6e 20 61 20 73 69 6e 67 6c 65 20 74 65 78 74 20  n a single text 
1870: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
1880: 20 76 6f 69 64 20 72 65 74 75 72 6e 53 69 6e 67   void returnSing
1890: 6c 65 54 65 78 74 28 0a 20 20 56 64 62 65 20 2a  leText(.  Vdbe *
18a0: 76 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v,              
18b0: 20 20 2f 2a 20 50 72 65 70 61 72 65 64 20 73 74    /* Prepared st
18c0: 61 74 65 6d 65 6e 74 20 75 6e 64 65 72 20 63 6f  atement under co
18d0: 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20  nstruction */.  
18e0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 61 62  const char *zLab
18f0: 65 6c 2c 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  el,     /* Name 
1900: 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
1910: 6c 75 6d 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  lumn */.  const 
1920: 63 68 61 72 20 2a 7a 56 61 6c 75 65 20 20 20 20  char *zValue    
1930: 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 62 65    /* Value to be
1940: 20 72 65 74 75 72 6e 65 64 20 2a 2f 0a 29 7b 0a   returned */.){.
1950: 20 20 69 66 28 20 7a 56 61 6c 75 65 20 29 7b 0a    if( zValue ){.
1960: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c      sqlite3VdbeL
1970: 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 31 2c 20  oadString(v, 1, 
1980: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a 56 61  (const char*)zVa
1990: 6c 75 65 29 3b 0a 20 20 20 20 73 65 74 4f 6e 65  lue);.    setOne
19a0: 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 7a 4c  ColumnName(v, zL
19b0: 61 62 65 6c 29 3b 0a 20 20 20 20 73 71 6c 69 74  abel);.    sqlit
19c0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
19d0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
19e0: 20 31 29 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a   1);.  }.}.../*.
19f0: 2a 2a 20 53 65 74 20 74 68 65 20 73 61 66 65 74  ** Set the safet
1a00: 79 5f 6c 65 76 65 6c 20 61 6e 64 20 70 61 67 65  y_level and page
1a10: 72 20 66 6c 61 67 73 20 66 6f 72 20 70 61 67 65  r flags for page
1a20: 72 20 69 44 62 2e 20 20 4f 72 20 69 66 20 69 44  r iDb.  Or if iD
1a30: 62 3c 30 0a 2a 2a 20 73 65 74 20 74 68 65 73 65  b<0.** set these
1a40: 20 76 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20   values for all 
1a50: 70 61 67 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  pagers..*/.#ifnd
1a60: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
1a70: 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 73 74 61  AGER_PRAGMAS.sta
1a80: 74 69 63 20 76 6f 69 64 20 73 65 74 41 6c 6c 50  tic void setAllP
1a90: 61 67 65 72 46 6c 61 67 73 28 73 71 6c 69 74 65  agerFlags(sqlite
1aa0: 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62  3 *db){.  if( db
1ab0: 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
1ac0: 20 20 20 20 44 62 20 2a 70 44 62 20 3d 20 64 62      Db *pDb = db
1ad0: 2d 3e 61 44 62 3b 0a 20 20 20 20 69 6e 74 20 6e  ->aDb;.    int n
1ae0: 20 3d 20 64 62 2d 3e 6e 44 62 3b 0a 20 20 20 20   = db->nDb;.    
1af0: 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f 46  assert( SQLITE_F
1b00: 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f  ullFSync==PAGER_
1b10: 46 55 4c 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20  FULLFSYNC );.   
1b20: 20 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f   assert( SQLITE_
1b30: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 3d 3d 50  CkptFullFSync==P
1b40: 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53  AGER_CKPT_FULLFS
1b50: 59 4e 43 20 29 3b 0a 20 20 20 20 61 73 73 65 72  YNC );.    asser
1b60: 74 28 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  t( SQLITE_CacheS
1b70: 70 69 6c 6c 3d 3d 50 41 47 45 52 5f 43 41 43 48  pill==PAGER_CACH
1b80: 45 53 50 49 4c 4c 20 29 3b 0a 20 20 20 20 61 73  ESPILL );.    as
1b90: 73 65 72 74 28 20 28 50 41 47 45 52 5f 46 55 4c  sert( (PAGER_FUL
1ba0: 4c 46 53 59 4e 43 20 7c 20 50 41 47 45 52 5f 43  LFSYNC | PAGER_C
1bb0: 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20  KPT_FULLFSYNC | 
1bc0: 50 41 47 45 52 5f 43 41 43 48 45 53 50 49 4c 4c  PAGER_CACHESPILL
1bd0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3d  ).             =
1be0: 3d 20 20 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d  =  PAGER_FLAGS_M
1bf0: 41 53 4b 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ASK );.    asser
1c00: 74 28 20 28 70 44 62 2d 3e 73 61 66 65 74 79 5f  t( (pDb->safety_
1c10: 6c 65 76 65 6c 20 26 20 50 41 47 45 52 5f 53 59  level & PAGER_SY
1c20: 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53 4b 29 3d  NCHRONOUS_MASK)=
1c30: 3d 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76  =pDb->safety_lev
1c40: 65 6c 20 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  el );.    while(
1c50: 20 28 6e 2d 2d 29 20 3e 20 30 20 29 7b 0a 20 20   (n--) > 0 ){.  
1c60: 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 42 74      if( pDb->pBt
1c70: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
1c80: 74 65 33 42 74 72 65 65 53 65 74 50 61 67 65 72  te3BtreeSetPager
1c90: 46 6c 61 67 73 28 70 44 62 2d 3e 70 42 74 2c 0a  Flags(pDb->pBt,.
1ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb0: 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76   pDb->safety_lev
1cc0: 65 6c 20 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20  el | (db->flags 
1cd0: 26 20 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41  & PAGER_FLAGS_MA
1ce0: 53 4b 29 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20  SK) );.      }. 
1cf0: 20 20 20 20 20 70 44 62 2b 2b 3b 0a 20 20 20 20       pDb++;.    
1d00: 7d 0a 20 20 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20  }.  }.}.#else.# 
1d10: 64 65 66 69 6e 65 20 73 65 74 41 6c 6c 50 61 67  define setAllPag
1d20: 65 72 46 6c 61 67 73 28 58 29 20 20 2f 2a 20 6e  erFlags(X)  /* n
1d30: 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  o-op */.#endif..
1d40: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20  ./*.** Return a 
1d50: 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e  human-readable n
1d60: 61 6d 65 20 66 6f 72 20 61 20 63 6f 6e 73 74 72  ame for a constr
1d70: 61 69 6e 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  aint resolution 
1d80: 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64  action..*/.#ifnd
1d90: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
1da0: 4f 52 45 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69  OREIGN_KEY.stati
1db0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 63  c const char *ac
1dc0: 74 69 6f 6e 4e 61 6d 65 28 75 38 20 61 63 74 69  tionName(u8 acti
1dd0: 6f 6e 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  on){.  const cha
1de0: 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74  r *zName;.  swit
1df0: 63 68 28 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ch( action ){.  
1e00: 20 20 63 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c    case OE_SetNul
1e10: 6c 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54  l:  zName = "SET
1e20: 20 4e 55 4c 4c 22 3b 20 20 20 20 20 20 20 20 62   NULL";        b
1e30: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
1e40: 45 5f 53 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d  E_SetDflt:  zNam
1e50: 65 20 3d 20 22 53 45 54 20 44 45 46 41 55 4c 54  e = "SET DEFAULT
1e60: 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ";     break;.  
1e70: 20 20 63 61 73 65 20 4f 45 5f 43 61 73 63 61 64    case OE_Cascad
1e80: 65 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53  e:  zName = "CAS
1e90: 43 41 44 45 22 3b 20 20 20 20 20 20 20 20 20 62  CADE";         b
1ea0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
1eb0: 45 5f 52 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d  E_Restrict: zNam
1ec0: 65 20 3d 20 22 52 45 53 54 52 49 43 54 22 3b 20  e = "RESTRICT"; 
1ed0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1ee0: 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20    default:      
1ef0: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20      zName = "NO 
1f00: 41 43 54 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20  ACTION";  .     
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f20: 20 61 73 73 65 72 74 28 20 61 63 74 69 6f 6e 3d   assert( action=
1f30: 3d 4f 45 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61  =OE_None ); brea
1f40: 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  k;.  }.  return 
1f50: 7a 4e 61 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a  zName;.}.#endif.
1f60: 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65  ../*.** Paramete
1f70: 72 20 65 4d 6f 64 65 20 6d 75 73 74 20 62 65 20  r eMode must be 
1f80: 6f 6e 65 20 6f 66 20 74 68 65 20 50 41 47 45 52  one of the PAGER
1f90: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58  _JOURNALMODE_XXX
1fa0: 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
1fb0: 66 69 6e 65 64 20 69 6e 20 70 61 67 65 72 2e 68  fined in pager.h
1fc0: 2e 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  . This function 
1fd0: 72 65 74 75 72 6e 73 20 74 68 65 20 61 73 73 6f  returns the asso
1fe0: 63 69 61 74 65 64 20 6c 6f 77 65 72 63 61 73 65  ciated lowercase
1ff0: 0a 2a 2a 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65  .** journal-mode
2000: 20 6e 61 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20   name..*/.const 
2010: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
2020: 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
2030: 20 65 4d 6f 64 65 29 7b 0a 20 20 73 74 61 74 69   eMode){.  stati
2040: 63 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61  c char * const a
2050: 7a 4d 6f 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a  zModeName[] = {.
2060: 20 20 20 20 22 64 65 6c 65 74 65 22 2c 20 22 70      "delete", "p
2070: 65 72 73 69 73 74 22 2c 20 22 6f 66 66 22 2c 20  ersist", "off", 
2080: 22 74 72 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d  "truncate", "mem
2090: 6f 72 79 22 0a 23 69 66 6e 64 65 66 20 53 51 4c  ory".#ifndef SQL
20a0: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20  ITE_OMIT_WAL.   
20b0: 20 20 2c 20 22 77 61 6c 22 0a 23 65 6e 64 69 66    , "wal".#endif
20c0: 0a 20 20 7d 3b 0a 20 20 61 73 73 65 72 74 28 20  .  };.  assert( 
20d0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
20e0: 45 5f 44 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20  E_DELETE==0 );. 
20f0: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
2100: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49  OURNALMODE_PERSI
2110: 53 54 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  ST==1 );.  asser
2120: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
2130: 4d 4f 44 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20  MODE_OFF==2 );. 
2140: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
2150: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43  OURNALMODE_TRUNC
2160: 41 54 45 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65  ATE==3 );.  asse
2170: 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  rt( PAGER_JOURNA
2180: 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20  LMODE_MEMORY==4 
2190: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  );.  assert( PAG
21a0: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
21b0: 41 4c 3d 3d 35 20 29 3b 0a 20 20 61 73 73 65 72  AL==5 );.  asser
21c0: 74 28 20 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65  t( eMode>=0 && e
21d0: 4d 6f 64 65 3c 3d 41 72 72 61 79 53 69 7a 65 28  Mode<=ArraySize(
21e0: 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a  azModeName) );..
21f0: 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72    if( eMode==Arr
2200: 61 79 53 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d  aySize(azModeNam
2210: 65 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  e) ) return 0;. 
2220: 20 72 65 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61   return azModeNa
2230: 6d 65 5b 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a  me[eMode];.}../*
2240: 0a 2a 2a 20 50 72 6f 63 65 73 73 20 61 20 70 72  .** Process a pr
2250: 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20  agma statement. 
2260: 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20   .**.** Pragmas 
2270: 61 72 65 20 6f 66 20 74 68 69 73 20 66 6f 72 6d  are of this form
2280: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41  :.**.**      PRA
2290: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69 64 20  GMA [schema.]id 
22a0: 5b 3d 20 76 61 6c 75 65 2d 6c 69 73 74 5d 0a 2a  [= value-list].*
22b0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 6c 65 66 74  *.** If the left
22c0: 20 73 69 64 65 20 69 73 20 22 64 61 74 61 62 61   side is "databa
22d0: 73 65 2e 69 64 22 20 74 68 65 6e 20 70 49 64 31  se.id" then pId1
22e0: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
22f0: 20 6e 61 6d 65 0a 2a 2a 20 61 6e 64 20 70 49 64   name.** and pId
2300: 32 20 69 73 20 74 68 65 20 69 64 2e 20 20 49 66  2 is the id.  If
2310: 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 69   the left side i
2320: 73 20 6a 75 73 74 20 22 69 64 22 20 74 68 65 6e  s just "id" then
2330: 20 70 49 64 31 20 69 73 20 74 68 65 0a 2a 2a 20   pId1 is the.** 
2340: 69 64 20 61 6e 64 20 70 49 64 32 20 69 73 20 61  id and pId2 is a
2350: 6e 79 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e  ny empty string.
2360: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2370: 50 72 61 67 6d 61 28 0a 20 20 50 61 72 73 65 20  Pragma(.  Parse 
2380: 2a 70 50 61 72 73 65 2c 20 0a 20 20 54 6f 6b 65  *pParse, .  Toke
2390: 6e 20 2a 70 49 64 31 2c 20 20 20 20 20 20 20 20  n *pId1,        
23a0: 2f 2a 20 46 69 72 73 74 20 70 61 72 74 20 6f 66  /* First part of
23b0: 20 5b 73 63 68 65 6d 61 2e 5d 69 64 20 66 69 65   [schema.]id fie
23c0: 6c 64 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70  ld */.  Token *p
23d0: 49 64 32 2c 20 20 20 20 20 20 20 20 2f 2a 20 53  Id2,        /* S
23e0: 65 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 5b 73  econd part of [s
23f0: 63 68 65 6d 61 2e 5d 69 64 20 66 69 65 6c 64 2c  chema.]id field,
2400: 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 49 64   or NULL */.  Id
2410: 4c 69 73 74 20 2a 70 56 61 6c 75 65 73 20 20 20  List *pValues   
2420: 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 2d 6c    /* The value-l
2430: 69 73 74 20 61 72 67 75 6d 65 6e 74 73 2e 20 20  ist arguments.  
2440: 4e 55 4c 4c 20 69 66 20 6f 6d 69 74 74 65 64 20  NULL if omitted 
2450: 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4c  */.){.  char *zL
2460: 65 66 74 20 3d 20 30 3b 20 20 20 20 20 20 20 2f  eft = 0;       /
2470: 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64  * Nul-terminated
2480: 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 3c 69   UTF-8 string <i
2490: 64 3e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 52  d> */.  char *zR
24a0: 69 67 68 74 20 3d 20 30 3b 20 20 20 20 20 20 2f  ight = 0;      /
24b0: 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64  * Nul-terminated
24c0: 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 3c 76   UTF-8 string <v
24d0: 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a  alue>, or NULL *
24e0: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
24f0: 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20 54 68  zDb = 0;   /* Th
2500: 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  e database name 
2510: 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 3b  */.  Token *pId;
2520: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
2530: 6f 69 6e 74 65 72 20 74 6f 20 3c 69 64 3e 20 74  ointer to <id> t
2540: 6f 6b 65 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  oken */.  char *
2550: 61 46 63 6e 74 6c 5b 34 5d 3b 20 20 20 20 20 20  aFcntl[4];      
2560: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
2570: 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41  SQLITE_FCNTL_PRA
2580: 47 4d 41 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  GMA */.  int iDb
2590: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25a0: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 6e 64 65  /* Database inde
25b0: 78 20 66 6f 72 20 3c 64 61 74 61 62 61 73 65 3e  x for <database>
25c0: 20 2a 2f 0a 20 20 69 6e 74 20 6c 77 72 2c 20 75   */.  int lwr, u
25d0: 70 72 2c 20 6d 69 64 20 3d 20 30 3b 20 20 20 20  pr, mid = 0;    
25e0: 20 20 20 2f 2a 20 42 69 6e 61 72 79 20 73 65 61     /* Binary sea
25f0: 72 63 68 20 62 6f 75 6e 64 73 20 2a 2f 0a 20 20  rch bounds */.  
2600: 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
2610: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2620: 72 65 74 75 72 6e 20 76 61 6c 75 65 20 66 6f 72  return value for
2630: 6d 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  m SQLITE_FCNTL_P
2640: 52 41 47 4d 41 20 2a 2f 0a 20 20 73 71 6c 69 74  RAGMA */.  sqlit
2650: 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73 65 2d  e3 *db = pParse-
2660: 3e 64 62 3b 20 20 20 20 2f 2a 20 54 68 65 20 64  >db;    /* The d
2670: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
2680: 6f 6e 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b  on */.  Db *pDb;
2690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a0: 20 20 20 20 20 2f 2a 20 54 68 65 20 73 70 65 63       /* The spec
26b0: 69 66 69 63 20 64 61 74 61 62 61 73 65 20 62 65  ific database be
26c0: 69 6e 67 20 70 72 61 67 6d 61 65 64 20 2a 2f 0a  ing pragmaed */.
26d0: 20 20 56 64 62 65 20 2a 76 20 3d 20 73 71 6c 69    Vdbe *v = sqli
26e0: 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73  te3GetVdbe(pPars
26f0: 65 29 3b 20 20 2f 2a 20 50 72 65 70 61 72 65 64  e);  /* Prepared
2700: 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20   statement */.  
2710: 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73 50 72  const struct sPr
2720: 61 67 6d 61 4e 61 6d 65 73 20 2a 70 50 72 61 67  agmaNames *pPrag
2730: 6d 61 3b 0a 0a 20 20 69 66 28 20 76 3d 3d 30 20  ma;..  if( v==0 
2740: 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75  ) goto pragma_ou
2750: 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  t;.  sqlite3Vdbe
2760: 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29 3b 0a  RunOnlyOnce(v);.
2770: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
2780: 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65 72 70   2;..  /* Interp
2790: 72 65 74 20 74 68 65 20 5b 73 63 68 65 6d 61 2e  ret the [schema.
27a0: 5d 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72  ] part of the pr
27b0: 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20  agma statement. 
27c0: 69 44 62 20 69 73 20 74 68 65 0a 20 20 2a 2a 20  iDb is the.  ** 
27d0: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
27e0: 61 62 61 73 65 20 74 68 69 73 20 70 72 61 67 6d  abase this pragm
27f0: 61 20 69 73 20 62 65 69 6e 67 20 61 70 70 6c 69  a is being appli
2800: 65 64 20 74 6f 20 69 6e 20 64 62 2e 61 44 62 5b  ed to in db.aDb[
2810: 5d 2e 20 2a 2f 0a 20 20 69 44 62 20 3d 20 73 71  ]. */.  iDb = sq
2820: 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65  lite3TwoPartName
2830: 28 70 50 61 72 73 65 2c 20 70 49 64 31 2c 20 70  (pParse, pId1, p
2840: 49 64 32 2c 20 26 70 49 64 29 3b 0a 20 20 69 66  Id2, &pId);.  if
2850: 28 20 69 44 62 3c 30 20 29 20 67 6f 74 6f 20 70  ( iDb<0 ) goto p
2860: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 70 44 62  ragma_out;.  pDb
2870: 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d   = &db->aDb[iDb]
2880: 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 74  ;..  /* If the t
2890: 65 6d 70 20 64 61 74 61 62 61 73 65 20 68 61 73  emp database has
28a0: 20 62 65 65 6e 20 65 78 70 6c 69 63 69 74 6c 79   been explicitly
28b0: 20 6e 61 6d 65 64 20 61 73 20 70 61 72 74 20 6f   named as part o
28c0: 66 20 74 68 65 20 0a 20 20 2a 2a 20 70 72 61 67  f the .  ** prag
28d0: 6d 61 2c 20 6d 61 6b 65 20 73 75 72 65 20 69 74  ma, make sure it
28e0: 20 69 73 20 6f 70 65 6e 2e 20 0a 20 20 2a 2f 0a   is open. .  */.
28f0: 20 20 69 66 28 20 69 44 62 3d 3d 31 20 26 26 20    if( iDb==1 && 
2900: 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44  sqlite3OpenTempD
2910: 61 74 61 62 61 73 65 28 70 50 61 72 73 65 29 20  atabase(pParse) 
2920: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  ){.    return;. 
2930: 20 7d 0a 0a 20 20 7a 4c 65 66 74 20 3d 20 73 71   }..  zLeft = sq
2940: 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b  lite3NameFromTok
2950: 65 6e 28 64 62 2c 20 70 49 64 29 3b 0a 20 20 69  en(db, pId);.  i
2960: 66 28 20 21 7a 4c 65 66 74 20 29 20 67 6f 74 6f  f( !zLeft ) goto
2970: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 69   pragma_out;.  i
2980: 66 28 20 70 56 61 6c 75 65 73 20 29 20 7a 52 69  f( pValues ) zRi
2990: 67 68 74 20 3d 20 70 56 61 6c 75 65 73 2d 3e 61  ght = pValues->a
29a0: 5b 30 5d 2e 7a 4e 61 6d 65 3b 0a 0a 20 20 61 73  [0].zName;..  as
29b0: 73 65 72 74 28 20 70 49 64 32 20 29 3b 0a 20 20  sert( pId2 );.  
29c0: 7a 44 62 20 3d 20 70 49 64 32 2d 3e 6e 3e 30 20  zDb = pId2->n>0 
29d0: 3f 20 70 44 62 2d 3e 7a 44 62 53 4e 61 6d 65 20  ? pDb->zDbSName 
29e0: 3a 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  : 0;.  if( sqlit
29f0: 65 33 41 75 74 68 43 68 65 63 6b 28 70 50 61 72  e3AuthCheck(pPar
2a00: 73 65 2c 20 53 51 4c 49 54 45 5f 50 52 41 47 4d  se, SQLITE_PRAGM
2a10: 41 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74  A, zLeft, zRight
2a20: 2c 20 7a 44 62 29 20 29 7b 0a 20 20 20 20 67 6f  , zDb) ){.    go
2a30: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
2a40: 20 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64 20 61 6e   }..  /* Send an
2a50: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
2a60: 41 47 4d 41 20 66 69 6c 65 2d 63 6f 6e 74 72 6f  AGMA file-contro
2a70: 6c 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79  l to the underly
2a80: 69 6e 67 20 56 46 53 0a 20 20 2a 2a 20 63 6f 6e  ing VFS.  ** con
2a90: 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 69 74 20  nection.  If it 
2aa0: 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f  returns SQLITE_O
2ab0: 4b 2c 20 74 68 65 6e 20 61 73 73 75 6d 65 20 74  K, then assume t
2ac0: 68 61 74 20 74 68 65 20 56 46 53 0a 20 20 2a 2a  hat the VFS.  **
2ad0: 20 68 61 6e 64 6c 65 64 20 74 68 65 20 70 72 61   handled the pra
2ae0: 67 6d 61 20 61 6e 64 20 67 65 6e 65 72 61 74 65  gma and generate
2af0: 20 61 20 6e 6f 2d 6f 70 20 70 72 65 70 61 72 65   a no-op prepare
2b00: 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a  d statement..  *
2b10: 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54  *.  ** IMPLEMENT
2b20: 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 31 32 32 33  ATION-OF: R-1223
2b30: 38 2d 35 35 31 32 30 20 57 68 65 6e 65 76 65 72  8-55120 Whenever
2b40: 20 61 20 50 52 41 47 4d 41 20 73 74 61 74 65 6d   a PRAGMA statem
2b50: 65 6e 74 20 69 73 20 70 61 72 73 65 64 2c 0a 20  ent is parsed,. 
2b60: 20 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 43   ** an SQLITE_FC
2b70: 4e 54 4c 5f 50 52 41 47 4d 41 20 66 69 6c 65 20  NTL_PRAGMA file 
2b80: 63 6f 6e 74 72 6f 6c 20 69 73 20 73 65 6e 74 20  control is sent 
2b90: 74 6f 20 74 68 65 20 6f 70 65 6e 20 73 71 6c 69  to the open sqli
2ba0: 74 65 33 5f 66 69 6c 65 0a 20 20 2a 2a 20 6f 62  te3_file.  ** ob
2bb0: 6a 65 63 74 20 63 6f 72 72 65 73 70 6f 6e 64 69  ject correspondi
2bc0: 6e 67 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  ng to the databa
2bd0: 73 65 20 66 69 6c 65 20 74 6f 20 77 68 69 63 68  se file to which
2be0: 20 74 68 65 20 70 72 61 67 6d 61 0a 20 20 2a 2a   the pragma.  **
2bf0: 20 73 74 61 74 65 6d 65 6e 74 20 72 65 66 65 72   statement refer
2c00: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50  s..  **.  ** IMP
2c10: 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
2c20: 52 2d 32 39 38 37 35 2d 33 31 36 37 38 20 54 68  R-29875-31678 Th
2c30: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  e argument to th
2c40: 65 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  e SQLITE_FCNTL_P
2c50: 52 41 47 4d 41 0a 20 20 2a 2a 20 66 69 6c 65 20  RAGMA.  ** file 
2c60: 63 6f 6e 74 72 6f 6c 20 69 73 20 61 6e 20 61 72  control is an ar
2c70: 72 61 79 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ray of pointers 
2c80: 74 6f 20 73 74 72 69 6e 67 73 20 28 63 68 61 72  to strings (char
2c90: 2a 2a 29 20 69 6e 20 77 68 69 63 68 20 74 68 65  **) in which the
2ca0: 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 65 6c 65  .  ** second ele
2cb0: 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 72 61  ment of the arra
2cc0: 79 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  y is the name of
2cd0: 20 74 68 65 20 70 72 61 67 6d 61 20 61 6e 64 20   the pragma and 
2ce0: 74 68 65 20 74 68 69 72 64 0a 20 20 2a 2a 20 65  the third.  ** e
2cf0: 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 61 72  lement is the ar
2d00: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72  gument to the pr
2d10: 61 67 6d 61 20 6f 72 20 4e 55 4c 4c 20 69 66 20  agma or NULL if 
2d20: 74 68 65 20 70 72 61 67 6d 61 20 68 61 73 20 6e  the pragma has n
2d30: 6f 0a 20 20 2a 2a 20 61 72 67 75 6d 65 6e 74 2e  o.  ** argument.
2d40: 0a 20 20 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30  .  */.  aFcntl[0
2d50: 5d 20 3d 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b  ] = 0;.  aFcntl[
2d60: 31 5d 20 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46  1] = zLeft;.  aF
2d70: 63 6e 74 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74  cntl[2] = zRight
2d80: 3b 0a 20 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20  ;.  aFcntl[3] = 
2d90: 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e  0;.  db->busyHan
2da0: 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a  dler.nBusy = 0;.
2db0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66    rc = sqlite3_f
2dc0: 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20  ile_control(db, 
2dd0: 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54  zDb, SQLITE_FCNT
2de0: 4c 5f 50 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a  L_PRAGMA, (void*
2df0: 29 61 46 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20  )aFcntl);.  if( 
2e00: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2e10: 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
2e20: 65 54 65 78 74 28 76 2c 20 22 72 65 73 75 6c 74  eText(v, "result
2e30: 22 2c 20 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20  ", aFcntl[0]);. 
2e40: 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
2e50: 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20  aFcntl[0]);.    
2e60: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
2e70: 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53  .  }.  if( rc!=S
2e80: 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29  QLITE_NOTFOUND )
2e90: 7b 0a 20 20 20 20 69 66 28 20 61 46 63 6e 74 6c  {.    if( aFcntl
2ea0: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  [0] ){.      sql
2eb0: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
2ec0: 72 73 65 2c 20 22 25 73 22 2c 20 61 46 63 6e 74  rse, "%s", aFcnt
2ed0: 6c 5b 30 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c  l[0]);.      sql
2ee0: 69 74 65 33 5f 66 72 65 65 28 61 46 63 6e 74 6c  ite3_free(aFcntl
2ef0: 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  [0]);.    }.    
2f00: 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a  pParse->nErr++;.
2f10: 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d      pParse->rc =
2f20: 20 72 63 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72   rc;.    goto pr
2f30: 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20  agma_out;.  }.. 
2f40: 20 2f 2a 20 4c 6f 63 61 74 65 20 74 68 65 20 70   /* Locate the p
2f50: 72 61 67 6d 61 20 69 6e 20 74 68 65 20 6c 6f 6f  ragma in the loo
2f60: 6b 75 70 20 74 61 62 6c 65 20 2a 2f 0a 20 20 6c  kup table */.  l
2f70: 77 72 20 3d 20 30 3b 0a 20 20 75 70 72 20 3d 20  wr = 0;.  upr = 
2f80: 41 72 72 61 79 53 69 7a 65 28 61 50 72 61 67 6d  ArraySize(aPragm
2f90: 61 4e 61 6d 65 73 29 2d 31 3b 0a 20 20 77 68 69  aNames)-1;.  whi
2fa0: 6c 65 28 20 6c 77 72 3c 3d 75 70 72 20 29 7b 0a  le( lwr<=upr ){.
2fb0: 20 20 20 20 6d 69 64 20 3d 20 28 6c 77 72 2b 75      mid = (lwr+u
2fc0: 70 72 29 2f 32 3b 0a 20 20 20 20 72 63 20 3d 20  pr)/2;.    rc = 
2fd0: 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28  sqlite3_stricmp(
2fe0: 7a 4c 65 66 74 2c 20 61 50 72 61 67 6d 61 4e 61  zLeft, aPragmaNa
2ff0: 6d 65 73 5b 6d 69 64 5d 2e 7a 4e 61 6d 65 29 3b  mes[mid].zName);
3000: 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 30 20 29  .    if( rc==0 )
3010: 20 62 72 65 61 6b 3b 0a 20 20 20 20 69 66 28 20   break;.    if( 
3020: 72 63 3c 30 20 29 7b 0a 20 20 20 20 20 20 75 70  rc<0 ){.      up
3030: 72 20 3d 20 6d 69 64 20 2d 20 31 3b 0a 20 20 20  r = mid - 1;.   
3040: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 77   }else{.      lw
3050: 72 20 3d 20 6d 69 64 20 2b 20 31 3b 0a 20 20 20  r = mid + 1;.   
3060: 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 6c 77 72   }.  }.  if( lwr
3070: 3e 75 70 72 20 29 20 67 6f 74 6f 20 70 72 61 67  >upr ) goto prag
3080: 6d 61 5f 6f 75 74 3b 0a 20 20 70 50 72 61 67 6d  ma_out;.  pPragm
3090: 61 20 3d 20 26 61 50 72 61 67 6d 61 4e 61 6d 65  a = &aPragmaName
30a0: 73 5b 6d 69 64 5d 3b 0a 0a 20 20 2f 2a 20 4d 61  s[mid];..  /* Ma
30b0: 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74 61  ke sure the data
30c0: 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 6c  base schema is l
30d0: 6f 61 64 65 64 20 69 66 20 74 68 65 20 70 72 61  oaded if the pra
30e0: 67 6d 61 20 72 65 71 75 69 72 65 73 20 74 68 61  gma requires tha
30f0: 74 20 2a 2f 0a 20 20 69 66 28 20 28 70 50 72 61  t */.  if( (pPra
3100: 67 6d 61 2d 3e 6d 50 72 61 67 46 6c 61 67 20 26  gma->mPragFlag &
3110: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
3120: 68 65 6d 61 29 21 3d 30 20 29 7b 0a 20 20 20 20  hema)!=0 ){.    
3130: 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53  if( sqlite3ReadS
3140: 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20  chema(pParse) ) 
3150: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
3160: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  .  }..  /* Jump 
3170: 74 6f 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  to the appropria
3180: 74 65 20 70 72 61 67 6d 61 20 68 61 6e 64 6c 65  te pragma handle
3190: 72 20 2a 2f 0a 20 20 73 77 69 74 63 68 28 20 70  r */.  switch( p
31a0: 50 72 61 67 6d 61 2d 3e 65 50 72 61 67 54 79 70  Pragma->ePragTyp
31b0: 20 29 7b 0a 20 20 0a 23 69 66 20 21 64 65 66 69   ){.  .#if !defi
31c0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
31d0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26  PAGER_PRAGMAS) &
31e0: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
31f0: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
3200: 44 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  D).  /*.  **  PR
3210: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 64 65  AGMA [schema.]de
3220: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
3230: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
3240: 63 68 65 6d 61 2e 5d 64 65 66 61 75 6c 74 5f 63  chema.]default_c
3250: 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a  ache_size=N.  **
3260: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
3270: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
3280: 20 63 75 72 72 65 6e 74 20 70 65 72 73 69 73 74   current persist
3290: 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20  ent setting for 
32a0: 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20 63 61  the.  ** page ca
32b0: 63 68 65 20 73 69 7a 65 2e 20 20 54 68 65 20 76  che size.  The v
32c0: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 69 73  alue returned is
32d0: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
32e0: 62 65 72 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65  ber of.  ** page
32f0: 73 20 69 6e 20 74 68 65 20 70 61 67 65 20 63 61  s in the page ca
3300: 63 68 65 2e 20 20 54 68 65 20 73 65 63 6f 6e 64  che.  The second
3310: 20 66 6f 72 6d 20 73 65 74 73 20 62 6f 74 68 20   form sets both 
3320: 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20 2a 2a  the current.  **
3330: 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65   page cache size
3340: 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 70   value and the p
3350: 65 72 73 69 73 74 65 6e 74 20 70 61 67 65 20 63  ersistent page c
3360: 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 0a  ache size value.
3370: 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74    ** stored in t
3380: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
3390: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6c 64 65  ..  **.  ** Olde
33a0: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
33b0: 4c 69 74 65 20 77 6f 75 6c 64 20 73 65 74 20 74  Lite would set t
33c0: 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65  he default cache
33d0: 20 73 69 7a 65 20 74 6f 20 61 0a 20 20 2a 2a 20   size to a.  ** 
33e0: 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20  negative number 
33f0: 74 6f 20 69 6e 64 69 63 61 74 65 20 73 79 6e 63  to indicate sync
3400: 68 72 6f 6e 6f 75 73 3d 4f 46 46 2e 20 20 54 68  hronous=OFF.  Th
3410: 65 73 65 20 64 61 79 73 2c 20 73 79 6e 63 68 72  ese days, synchr
3420: 6f 6e 6f 75 73 0a 20 20 2a 2a 20 69 73 20 61 6c  onous.  ** is al
3430: 77 61 79 73 20 6f 6e 20 62 79 20 64 65 66 61 75  ways on by defau
3440: 6c 74 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  lt regardless of
3450: 20 74 68 65 20 73 69 67 6e 20 6f 66 20 74 68 65   the sign of the
3460: 20 64 65 66 61 75 6c 74 20 63 61 63 68 65 0a 20   default cache. 
3470: 20 2a 2a 20 73 69 7a 65 2e 20 20 42 75 74 20 63   ** size.  But c
3480: 6f 6e 74 69 6e 75 65 20 74 6f 20 74 61 6b 65 20  ontinue to take 
3490: 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c  the absolute val
34a0: 75 65 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c  ue of the defaul
34b0: 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a  t cache.  ** siz
34c0: 65 20 6f 66 20 68 69 73 74 6f 72 69 63 61 6c 20  e of historical 
34d0: 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 0a 20  compatibility.. 
34e0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
34f0: 79 70 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  yp_DEFAULT_CACHE
3500: 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73 74 61  _SIZE: {.    sta
3510: 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c  tic const int iL
3520: 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f  n = VDBE_OFFSET_
3530: 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73  LINENO(2);.    s
3540: 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65  tatic const Vdbe
3550: 4f 70 4c 69 73 74 20 67 65 74 43 61 63 68 65 53  OpList getCacheS
3560: 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  ize[] = {.      
3570: 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  { OP_Transaction
3580: 2c 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30  , 0, 0,        0
3590: 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  },              
35a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20             /* 0 
35b0: 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65  */.      { OP_Re
35c0: 61 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20 31 2c  adCookie,  0, 1,
35d0: 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 44 45          BTREE_DE
35e0: 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45  FAULT_CACHE_SIZE
35f0: 7d 2c 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20  },  /* 1 */.    
3600: 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20    { OP_IfPos,   
3610: 20 20 20 20 31 2c 20 38 2c 20 20 20 20 20 20 20      1, 8,       
3620: 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f   0},.      { OP_
3630: 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c 20  Integer,     0, 
3640: 32 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  2,        0},.  
3650: 20 20 20 20 7b 20 4f 50 5f 53 75 62 74 72 61 63      { OP_Subtrac
3660: 74 2c 20 20 20 20 31 2c 20 32 2c 20 20 20 20 20  t,    1, 2,     
3670: 20 20 20 31 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     1},.      { O
3680: 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31  P_IfPos,       1
3690: 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 8,        0},.
36a0: 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67        { OP_Integ
36b0: 65 72 2c 20 20 20 20 20 30 2c 20 31 2c 20 20 20  er,     0, 1,   
36c0: 20 20 20 20 20 30 7d 2c 20 20 20 20 20 20 20 20       0},        
36d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e0: 20 2f 2a 20 36 20 2a 2f 0a 20 20 20 20 20 20 7b   /* 6 */.      {
36f0: 20 4f 50 5f 4e 6f 6f 70 2c 20 20 20 20 20 20 20   OP_Noop,       
3700: 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   0, 0,        0}
3710: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73  ,.      { OP_Res
3720: 75 6c 74 52 6f 77 2c 20 20 20 31 2c 20 31 2c 20  ultRow,   1, 1, 
3730: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d         0},.    }
3740: 3b 0a 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f  ;.    VdbeOp *aO
3750: 70 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  p;.    sqlite3Vd
3760: 62 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69  beUsesBtree(v, i
3770: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52  Db);.    if( !zR
3780: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 65  ight ){.      se
3790: 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76  tOneColumnName(v
37a0: 2c 20 22 63 61 63 68 65 5f 73 69 7a 65 22 29 3b  , "cache_size");
37b0: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
37c0: 4d 65 6d 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20  Mem += 2;.      
37d0: 73 71 6c 69 74 65 33 56 64 62 65 56 65 72 69 66  sqlite3VdbeVerif
37e0: 79 4e 6f 4d 61 6c 6c 6f 63 52 65 71 75 69 72 65  yNoMallocRequire
37f0: 64 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 67  d(v, ArraySize(g
3800: 65 74 43 61 63 68 65 53 69 7a 65 29 29 3b 0a 20  etCacheSize));. 
3810: 20 20 20 20 20 61 4f 70 20 3d 20 73 71 6c 69 74       aOp = sqlit
3820: 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  e3VdbeAddOpList(
3830: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 67 65 74  v, ArraySize(get
3840: 43 61 63 68 65 53 69 7a 65 29 2c 20 67 65 74 43  CacheSize), getC
3850: 61 63 68 65 53 69 7a 65 2c 20 69 4c 6e 29 3b 0a  acheSize, iLn);.
3860: 20 20 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49        if( ONLY_I
3870: 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  F_REALLOC_STRESS
3880: 28 61 4f 70 3d 3d 30 29 20 29 20 62 72 65 61 6b  (aOp==0) ) break
3890: 3b 0a 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70  ;.      aOp[0].p
38a0: 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 61  1 = iDb;.      a
38b0: 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44 62 3b 0a  Op[1].p1 = iDb;.
38c0: 20 20 20 20 20 20 61 4f 70 5b 36 5d 2e 70 31 20        aOp[6].p1 
38d0: 3d 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  = SQLITE_DEFAULT
38e0: 5f 43 41 43 48 45 5f 53 49 5a 45 3b 0a 20 20 20  _CACHE_SIZE;.   
38f0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e   }else{.      in
3900: 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33  t size = sqlite3
3910: 41 62 73 49 6e 74 33 32 28 73 71 6c 69 74 65 33  AbsInt32(sqlite3
3920: 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20  Atoi(zRight));. 
3930: 20 20 20 20 20 73 71 6c 69 74 65 33 42 65 67 69       sqlite3Begi
3940: 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28  nWriteOperation(
3950: 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29 3b  pParse, 0, iDb);
3960: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
3970: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 53  beAddOp3(v, OP_S
3980: 65 74 43 6f 6f 6b 69 65 2c 20 69 44 62 2c 20 42  etCookie, iDb, B
3990: 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43 41 43  TREE_DEFAULT_CAC
39a0: 48 45 5f 53 49 5a 45 2c 20 73 69 7a 65 29 3b 0a  HE_SIZE, size);.
39b0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
39c0: 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
39d0: 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29  Held(db, iDb, 0)
39e0: 20 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70   );.      pDb->p
39f0: 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69  Schema->cache_si
3a00: 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20  ze = size;.     
3a10: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
3a20: 43 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70  CacheSize(pDb->p
3a30: 42 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  Bt, pDb->pSchema
3a40: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20  ->cache_size);. 
3a50: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
3a60: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 53    }.#endif /* !S
3a70: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
3a80: 5f 50 52 41 47 4d 41 53 20 26 26 20 21 53 51 4c  _PRAGMAS && !SQL
3a90: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
3aa0: 54 45 44 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66  TED */..#if !def
3ab0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
3ac0: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a  _PAGER_PRAGMAS).
3ad0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
3ae0: 41 20 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f  A [schema.]page_
3af0: 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d  size.  **  PRAGM
3b00: 41 20 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f  A [schema.]page_
3b10: 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  size=N.  **.  **
3b20: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
3b30: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
3b40: 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20  ent setting for 
3b50: 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73  the.  ** databas
3b60: 65 20 70 61 67 65 20 73 69 7a 65 20 69 6e 20 62  e page size in b
3b70: 79 74 65 73 2e 20 20 54 68 65 20 73 65 63 6f 6e  ytes.  The secon
3b80: 64 20 66 6f 72 6d 20 73 65 74 73 20 74 68 65 0a  d form sets the.
3b90: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61    ** database pa
3ba0: 67 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20  ge size value.  
3bb0: 54 68 65 20 76 61 6c 75 65 20 63 61 6e 20 6f 6e  The value can on
3bc0: 6c 79 20 62 65 20 73 65 74 20 69 66 0a 20 20 2a  ly be set if.  *
3bd0: 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  * the database h
3be0: 61 73 20 6e 6f 74 20 79 65 74 20 62 65 65 6e 20  as not yet been 
3bf0: 63 72 65 61 74 65 64 2e 0a 20 20 2a 2f 0a 20 20  created..  */.  
3c00: 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41 47  case PragTyp_PAG
3c10: 45 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 42 74  E_SIZE: {.    Bt
3c20: 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e  ree *pBt = pDb->
3c30: 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28  pBt;.    assert(
3c40: 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69   pBt!=0 );.    i
3c50: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
3c60: 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 41      int size = A
3c70: 4c 57 41 59 53 28 70 42 74 29 20 3f 20 73 71 6c  LWAYS(pBt) ? sql
3c80: 69 74 65 33 42 74 72 65 65 47 65 74 50 61 67 65  ite3BtreeGetPage
3c90: 53 69 7a 65 28 70 42 74 29 20 3a 20 30 3b 0a 20  Size(pBt) : 0;. 
3ca0: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
3cb0: 65 49 6e 74 28 76 2c 20 22 70 61 67 65 5f 73 69  eInt(v, "page_si
3cc0: 7a 65 22 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20  ze", size);.    
3cd0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
3ce0: 4d 61 6c 6c 6f 63 20 6d 61 79 20 66 61 69 6c 20  Malloc may fail 
3cf0: 77 68 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65  when setting the
3d00: 20 70 61 67 65 2d 73 69 7a 65 2c 20 61 73 20 74   page-size, as t
3d10: 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 72  here is an inter
3d20: 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 62 75 66  nal.      ** buf
3d30: 66 65 72 20 74 68 61 74 20 74 68 65 20 70 61 67  fer that the pag
3d40: 65 72 20 6d 6f 64 75 6c 65 20 72 65 73 69 7a 65  er module resize
3d50: 73 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  s using sqlite3_
3d60: 72 65 61 6c 6c 6f 63 28 29 2e 0a 20 20 20 20 20  realloc()..     
3d70: 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65   */.      db->ne
3d80: 78 74 50 61 67 65 73 69 7a 65 20 3d 20 73 71 6c  xtPagesize = sql
3d90: 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
3da0: 3b 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c 49  ;.      if( SQLI
3db0: 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74 65  TE_NOMEM==sqlite
3dc0: 33 42 74 72 65 65 53 65 74 50 61 67 65 53 69 7a  3BtreeSetPageSiz
3dd0: 65 28 70 42 74 2c 20 64 62 2d 3e 6e 65 78 74 50  e(pBt, db->nextP
3de0: 61 67 65 73 69 7a 65 2c 2d 31 2c 30 29 20 29 7b  agesize,-1,0) ){
3df0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
3e00: 4f 6f 6d 46 61 75 6c 74 28 64 62 29 3b 0a 20 20  OomFault(db);.  
3e10: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
3e20: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
3e30: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
3e40: 63 68 65 6d 61 2e 5d 73 65 63 75 72 65 5f 64 65  chema.]secure_de
3e50: 6c 65 74 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d  lete.  **  PRAGM
3e60: 41 20 5b 73 63 68 65 6d 61 2e 5d 73 65 63 75 72  A [schema.]secur
3e70: 65 5f 64 65 6c 65 74 65 3d 4f 4e 2f 4f 46 46 0a  e_delete=ON/OFF.
3e80: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69    **.  ** The fi
3e90: 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73  rst form reports
3ea0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65 74   the current set
3eb0: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a  ting for the.  *
3ec0: 2a 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 20  * secure_delete 
3ed0: 66 6c 61 67 2e 20 20 54 68 65 20 73 65 63 6f 6e  flag.  The secon
3ee0: 64 20 66 6f 72 6d 20 63 68 61 6e 67 65 73 20 74  d form changes t
3ef0: 68 65 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65  he secure_delete
3f00: 0a 20 20 2a 2a 20 66 6c 61 67 20 73 65 74 74 69  .  ** flag setti
3f10: 6e 67 20 61 6e 64 20 72 65 70 6f 72 74 73 20 74  ng and reports t
3f20: 68 65 6e 65 77 20 76 61 6c 75 65 2e 0a 20 20 2a  henew value..  *
3f30: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
3f40: 5f 53 45 43 55 52 45 5f 44 45 4c 45 54 45 3a 20  _SECURE_DELETE: 
3f50: 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74  {.    Btree *pBt
3f60: 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20   = pDb->pBt;.   
3f70: 20 69 6e 74 20 62 20 3d 20 2d 31 3b 0a 20 20 20   int b = -1;.   
3f80: 20 61 73 73 65 72 74 28 20 70 42 74 21 3d 30 20   assert( pBt!=0 
3f90: 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  );.    if( zRigh
3fa0: 74 20 29 7b 0a 20 20 20 20 20 20 62 20 3d 20 73  t ){.      b = s
3fb0: 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
3fc0: 28 7a 52 69 67 68 74 2c 20 30 29 3b 0a 20 20 20  (zRight, 0);.   
3fd0: 20 7d 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d   }.    if( pId2-
3fe0: 3e 6e 3d 3d 30 20 26 26 20 62 3e 3d 30 20 29 7b  >n==0 && b>=0 ){
3ff0: 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20  .      int ii;. 
4000: 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
4010: 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
4020: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
4030: 33 42 74 72 65 65 53 65 63 75 72 65 44 65 6c 65  3BtreeSecureDele
4040: 74 65 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  te(db->aDb[ii].p
4050: 42 74 2c 20 62 29 3b 0a 20 20 20 20 20 20 7d 0a  Bt, b);.      }.
4060: 20 20 20 20 7d 0a 20 20 20 20 62 20 3d 20 73 71      }.    b = sq
4070: 6c 69 74 65 33 42 74 72 65 65 53 65 63 75 72 65  lite3BtreeSecure
4080: 44 65 6c 65 74 65 28 70 42 74 2c 20 62 29 3b 0a  Delete(pBt, b);.
4090: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
40a0: 49 6e 74 28 76 2c 20 22 73 65 63 75 72 65 5f 64  Int(v, "secure_d
40b0: 65 6c 65 74 65 22 2c 20 62 29 3b 0a 20 20 20 20  elete", b);.    
40c0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
40d0: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
40e0: 63 68 65 6d 61 2e 5d 6d 61 78 5f 70 61 67 65 5f  chema.]max_page_
40f0: 63 6f 75 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47  count.  **  PRAG
4100: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6d 61 78 5f  MA [schema.]max_
4110: 70 61 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a  page_count=N.  *
4120: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
4130: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
4140: 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e  e current settin
4150: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d  g for the.  ** m
4160: 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
4170: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61   pages in the da
4180: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68  tabase file.  Th
4190: 65 20 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 66  e .  ** second f
41a0: 6f 72 6d 20 61 74 74 65 6d 70 74 73 20 74 6f 20  orm attempts to 
41b0: 63 68 61 6e 67 65 20 74 68 69 73 20 73 65 74 74  change this sett
41c0: 69 6e 67 2e 20 20 42 6f 74 68 0a 20 20 2a 2a 20  ing.  Both.  ** 
41d0: 66 6f 72 6d 73 20 72 65 74 75 72 6e 20 74 68 65  forms return the
41e0: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
41f0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  **.  ** The 
4200: 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f  absolute value o
4210: 66 20 4e 20 69 73 20 75 73 65 64 2e 20 20 54 68  f N is used.  Th
4220: 69 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74  is is undocument
4230: 65 64 20 61 6e 64 20 6d 69 67 68 74 0a 20 20 2a  ed and might.  *
4240: 2a 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20 6f  * change.  The o
4250: 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 20 74  nly purpose is t
4260: 6f 20 70 72 6f 76 69 64 65 20 61 6e 20 65 61 73  o provide an eas
4270: 79 20 77 61 79 20 74 6f 20 74 65 73 74 0a 20 20  y way to test.  
4280: 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 41 62  ** the sqlite3Ab
4290: 73 49 6e 74 33 32 28 29 20 66 75 6e 63 74 69 6f  sInt32() functio
42a0: 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 50 52  n..  **.  **  PR
42b0: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 70 61  AGMA [schema.]pa
42c0: 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20 20  ge_count.  **.  
42d0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
42e0: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
42f0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64   the specified d
4300: 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20 20  atabase..  */.  
4310: 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41 47  case PragTyp_PAG
4320: 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20 20 20 20 69  E_COUNT: {.    i
4330: 6e 74 20 69 52 65 67 3b 0a 20 20 20 20 73 71 6c  nt iReg;.    sql
4340: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
4350: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
4360: 29 3b 0a 20 20 20 20 69 52 65 67 20 3d 20 2b 2b  );.    iReg = ++
4370: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20  pParse->nMem;.  
4380: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 6f 6c    if( sqlite3Tol
4390: 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d  ower(zLeft[0])==
43a0: 27 70 27 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  'p' ){.      sql
43b0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
43c0: 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 2c 20  , OP_Pagecount, 
43d0: 69 44 62 2c 20 69 52 65 67 29 3b 0a 20 20 20 20  iDb, iReg);.    
43e0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
43f0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
4400: 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74 2c 20 69  , OP_MaxPgcnt, i
4410: 44 62 2c 20 69 52 65 67 2c 20 0a 20 20 20 20 20  Db, iReg, .     
4420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4430: 20 20 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74     sqlite3AbsInt
4440: 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  32(sqlite3Atoi(z
4450: 52 69 67 68 74 29 29 29 3b 0a 20 20 20 20 7d 0a  Right)));.    }.
4460: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
4470: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
4480: 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20 31 29 3b  ltRow, iReg, 1);
4490: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
44a0: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
44b0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
44c0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
44d0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
44e0: 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54 52  zLeft, SQLITE_TR
44f0: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 62 72  ANSIENT);.    br
4500: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
4510: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
4520: 65 6d 61 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64  ema.]locking_mod
4530: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
4540: 73 63 68 65 6d 61 2e 5d 6c 6f 63 6b 69 6e 67 5f  schema.]locking_
4550: 6d 6f 64 65 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65  mode = (normal|e
4560: 78 63 6c 75 73 69 76 65 29 0a 20 20 2a 2f 0a 20  xclusive).  */. 
4570: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f   case PragTyp_LO
4580: 43 4b 49 4e 47 5f 4d 4f 44 45 3a 20 7b 0a 20 20  CKING_MODE: {.  
4590: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52    const char *zR
45a0: 65 74 20 3d 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20  et = "normal";. 
45b0: 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20 67     int eMode = g
45c0: 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 7a 52  etLockingMode(zR
45d0: 69 67 68 74 29 3b 0a 0a 20 20 20 20 69 66 28 20  ight);..    if( 
45e0: 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d  pId2->n==0 && eM
45f0: 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49  ode==PAGER_LOCKI
4600: 4e 47 4d 4f 44 45 5f 51 55 45 52 59 20 29 7b 0a  NGMODE_QUERY ){.
4610: 20 20 20 20 20 20 2f 2a 20 53 69 6d 70 6c 65 20        /* Simple 
4620: 22 50 52 41 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f  "PRAGMA locking_
4630: 6d 6f 64 65 3b 22 20 73 74 61 74 65 6d 65 6e 74  mode;" statement
4640: 2e 20 54 68 69 73 20 69 73 20 61 20 71 75 65 72  . This is a quer
4650: 79 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 74  y for.      ** t
4660: 68 65 20 63 75 72 72 65 6e 74 20 64 65 66 61 75  he current defau
4670: 6c 74 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20  lt locking mode 
4680: 28 77 68 69 63 68 20 6d 61 79 20 62 65 20 64 69  (which may be di
4690: 66 66 65 72 65 6e 74 20 74 6f 0a 20 20 20 20 20  fferent to.     
46a0: 20 2a 2a 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d   ** the locking-
46b0: 6d 6f 64 65 20 6f 66 20 74 68 65 20 6d 61 69 6e  mode of the main
46c0: 20 64 61 74 61 62 61 73 65 29 2e 0a 20 20 20 20   database)..    
46d0: 20 20 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65    */.      eMode
46e0: 20 3d 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d   = db->dfltLockM
46f0: 6f 64 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ode;.    }else{.
4700: 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61        Pager *pPa
4710: 67 65 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ger;.      if( p
4720: 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20  Id2->n==0 ){.   
4730: 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 6e 64       /* This ind
4740: 69 63 61 74 65 73 20 74 68 61 74 20 6e 6f 20 64  icates that no d
4750: 61 74 61 62 61 73 65 20 6e 61 6d 65 20 77 61 73  atabase name was
4760: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
4770: 72 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 66  rt.        ** of
4780: 20 74 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d   the PRAGMA comm
4790: 61 6e 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  and. In this cas
47a0: 65 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f  e the locking-mo
47b0: 64 65 20 6d 75 73 74 20 62 65 0a 20 20 20 20 20  de must be.     
47c0: 20 20 20 2a 2a 20 73 65 74 20 6f 6e 20 61 6c 6c     ** set on all
47d0: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
47e0: 73 65 73 2c 20 61 73 20 77 65 6c 6c 20 61 73 20  ses, as well as 
47f0: 74 68 65 20 6d 61 69 6e 20 64 62 20 66 69 6c 65  the main db file
4800: 2e 0a 20 20 20 20 20 20 20 20 2a 2a 0a 20 20 20  ..        **.   
4810: 20 20 20 20 20 2a 2a 20 41 6c 73 6f 2c 20 74 68       ** Also, th
4820: 65 20 73 71 6c 69 74 65 33 2e 64 66 6c 74 4c 6f  e sqlite3.dfltLo
4830: 63 6b 4d 6f 64 65 20 76 61 72 69 61 62 6c 65 20  ckMode variable 
4840: 69 73 20 73 65 74 20 73 6f 20 74 68 61 74 0a 20  is set so that. 
4850: 20 20 20 20 20 20 20 2a 2a 20 61 6e 79 20 73 75         ** any su
4860: 62 73 65 71 75 65 6e 74 6c 79 20 61 74 74 61 63  bsequently attac
4870: 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61 6c  hed databases al
4880: 73 6f 20 75 73 65 20 74 68 65 20 73 70 65 63 69  so use the speci
4890: 66 69 65 64 0a 20 20 20 20 20 20 20 20 2a 2a 20  fied.        ** 
48a0: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 0a 20 20  locking mode..  
48b0: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
48c0: 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 20   int ii;.       
48d0: 20 61 73 73 65 72 74 28 70 44 62 3d 3d 26 64 62   assert(pDb==&db
48e0: 2d 3e 61 44 62 5b 30 5d 29 3b 0a 20 20 20 20 20  ->aDb[0]);.     
48f0: 20 20 20 66 6f 72 28 69 69 3d 32 3b 20 69 69 3c     for(ii=2; ii<
4900: 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a  db->nDb; ii++){.
4910: 20 20 20 20 20 20 20 20 20 20 70 50 61 67 65 72            pPager
4920: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
4930: 61 67 65 72 28 64 62 2d 3e 61 44 62 5b 69 69 5d  ager(db->aDb[ii]
4940: 2e 70 42 74 29 3b 0a 20 20 20 20 20 20 20 20 20  .pBt);.         
4950: 20 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63   sqlite3PagerLoc
4960: 6b 69 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c  kingMode(pPager,
4970: 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 20   eMode);.       
4980: 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 64   }.        db->d
4990: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 3d 20 28 75  fltLockMode = (u
49a0: 38 29 65 4d 6f 64 65 3b 0a 20 20 20 20 20 20 7d  8)eMode;.      }
49b0: 0a 20 20 20 20 20 20 70 50 61 67 65 72 20 3d 20  .      pPager = 
49c0: 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
49d0: 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20  r(pDb->pBt);.   
49e0: 20 20 20 65 4d 6f 64 65 20 3d 20 73 71 6c 69 74     eMode = sqlit
49f0: 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f  e3PagerLockingMo
4a00: 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f 64 65  de(pPager, eMode
4a10: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73  );.    }..    as
4a20: 73 65 72 74 28 20 65 4d 6f 64 65 3d 3d 50 41 47  sert( eMode==PAG
4a30: 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e  ER_LOCKINGMODE_N
4a40: 4f 52 4d 41 4c 0a 20 20 20 20 20 20 20 20 20 20  ORMAL.          
4a50: 20 20 7c 7c 20 65 4d 6f 64 65 3d 3d 50 41 47 45    || eMode==PAGE
4a60: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58  R_LOCKINGMODE_EX
4a70: 43 4c 55 53 49 56 45 20 29 3b 0a 20 20 20 20 69  CLUSIVE );.    i
4a80: 66 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  f( eMode==PAGER_
4a90: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c  LOCKINGMODE_EXCL
4aa0: 55 53 49 56 45 20 29 7b 0a 20 20 20 20 20 20 7a  USIVE ){.      z
4ab0: 52 65 74 20 3d 20 22 65 78 63 6c 75 73 69 76 65  Ret = "exclusive
4ac0: 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  ";.    }.    ret
4ad0: 75 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c  urnSingleText(v,
4ae0: 20 22 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c   "locking_mode",
4af0: 20 7a 52 65 74 29 3b 0a 20 20 20 20 62 72 65 61   zRet);.    brea
4b00: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
4b10: 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d  *  PRAGMA [schem
4b20: 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a  a.]journal_mode.
4b30: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
4b40: 68 65 6d 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f  hema.]journal_mo
4b50: 64 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20  de =.  **       
4b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
4b70: 64 65 6c 65 74 65 7c 70 65 72 73 69 73 74 7c 6f  delete|persist|o
4b80: 66 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f  ff|truncate|memo
4b90: 72 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f  ry|wal|off).  */
4ba0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
4bb0: 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a  JOURNAL_MODE: {.
4bc0: 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20      int eMode;  
4bd0: 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
4be0: 74 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  the PAGER_JOURNA
4bf0: 4c 4d 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c  LMODE_XXX symbol
4c00: 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b  s */.    int ii;
4c10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
4c20: 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20  op counter */.. 
4c30: 20 20 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e     setOneColumnN
4c40: 61 6d 65 28 76 2c 20 22 6a 6f 75 72 6e 61 6c 5f  ame(v, "journal_
4c50: 6d 6f 64 65 22 29 3b 0a 20 20 20 20 69 66 28 20  mode");.    if( 
4c60: 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20  zRight==0 ){.   
4c70: 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
4c80: 73 20 6e 6f 20 22 3d 4d 4f 44 45 22 20 70 61 72  s no "=MODE" par
4c90: 74 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61 2c  t of the pragma,
4ca0: 20 64 6f 20 61 20 71 75 65 72 79 20 66 6f 72 20   do a query for 
4cb0: 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 63 75 72  the.      ** cur
4cc0: 72 65 6e 74 20 6d 6f 64 65 20 2a 2f 0a 20 20 20  rent mode */.   
4cd0: 20 20 20 65 4d 6f 64 65 20 3d 20 50 41 47 45 52     eMode = PAGER
4ce0: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
4cf0: 52 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  RY;.    }else{. 
4d00: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
4d10: 2a 7a 4d 6f 64 65 3b 0a 20 20 20 20 20 20 69 6e  *zMode;.      in
4d20: 74 20 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72  t n = sqlite3Str
4d30: 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 3b 0a 20  len30(zRight);. 
4d40: 20 20 20 20 20 66 6f 72 28 65 4d 6f 64 65 3d 30       for(eMode=0
4d50: 3b 20 28 7a 4d 6f 64 65 20 3d 20 73 71 6c 69 74  ; (zMode = sqlit
4d60: 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
4d70: 65 28 65 4d 6f 64 65 29 29 21 3d 30 3b 20 65 4d  e(eMode))!=0; eM
4d80: 6f 64 65 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ode++){.        
4d90: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49  if( sqlite3StrNI
4da0: 43 6d 70 28 7a 52 69 67 68 74 2c 20 7a 4d 6f 64  Cmp(zRight, zMod
4db0: 65 2c 20 6e 29 3d 3d 30 20 29 20 62 72 65 61 6b  e, n)==0 ) break
4dc0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
4dd0: 69 66 28 20 21 7a 4d 6f 64 65 20 29 7b 0a 20 20  if( !zMode ){.  
4de0: 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
4df0: 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 64 6f 65  "=MODE" part doe
4e00: 73 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 20  s not match any 
4e10: 6b 6e 6f 77 6e 20 6a 6f 75 72 6e 61 6c 20 6d 6f  known journal mo
4e20: 64 65 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  de,.        ** t
4e30: 68 65 6e 20 64 6f 20 61 20 71 75 65 72 79 20 2a  hen do a query *
4e40: 2f 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20  /.        eMode 
4e50: 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  = PAGER_JOURNALM
4e60: 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 20  ODE_QUERY;.     
4e70: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
4e80: 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4a 4f   eMode==PAGER_JO
4e90: 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20  URNALMODE_QUERY 
4ea0: 26 26 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b  && pId2->n==0 ){
4eb0: 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72  .      /* Conver
4ec0: 74 20 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61  t "PRAGMA journa
4ed0: 6c 5f 6d 6f 64 65 22 20 69 6e 74 6f 20 22 50 52  l_mode" into "PR
4ee0: 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61  AGMA main.journa
4ef0: 6c 5f 6d 6f 64 65 22 20 2a 2f 0a 20 20 20 20 20  l_mode" */.     
4f00: 20 69 44 62 20 3d 20 30 3b 0a 20 20 20 20 20 20   iDb = 0;.      
4f10: 70 49 64 32 2d 3e 6e 20 3d 20 31 3b 0a 20 20 20  pId2->n = 1;.   
4f20: 20 7d 0a 20 20 20 20 66 6f 72 28 69 69 3d 64 62   }.    for(ii=db
4f30: 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20  ->nDb-1; ii>=0; 
4f40: 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 69 66 28  ii--){.      if(
4f50: 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74   db->aDb[ii].pBt
4f60: 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20   && (ii==iDb || 
4f70: 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20  pId2->n==0) ){. 
4f80: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
4f90: 62 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69  beUsesBtree(v, i
4fa0: 69 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  i);.        sqli
4fb0: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
4fc0: 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c   OP_JournalMode,
4fd0: 20 69 69 2c 20 31 2c 20 65 4d 6f 64 65 29 3b 0a   ii, 1, eMode);.
4fe0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
4ff0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
5000: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
5010: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
5020: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
5030: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
5040: 63 68 65 6d 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 73  chema.]journal_s
5050: 69 7a 65 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20  ize_limit.  **  
5060: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
5070: 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d  journal_size_lim
5080: 69 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47  it=N.  **.  ** G
5090: 65 74 20 6f 72 20 73 65 74 20 74 68 65 20 73 69  et or set the si
50a0: 7a 65 20 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c  ze limit on roll
50b0: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c  back journal fil
50c0: 65 73 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  es..  */.  case 
50d0: 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f  PragTyp_JOURNAL_
50e0: 53 49 5a 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20  SIZE_LIMIT: {.  
50f0: 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20    Pager *pPager 
5100: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
5110: 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20  ger(pDb->pBt);. 
5120: 20 20 20 69 36 34 20 69 4c 69 6d 69 74 20 3d 20     i64 iLimit = 
5130: 2d 32 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  -2;.    if( zRig
5140: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ht ){.      sqli
5150: 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34  te3DecOrHexToI64
5160: 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69 74  (zRight, &iLimit
5170: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 4c 69  );.      if( iLi
5180: 6d 69 74 3c 2d 31 20 29 20 69 4c 69 6d 69 74 20  mit<-1 ) iLimit 
5190: 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  = -1;.    }.    
51a0: 69 4c 69 6d 69 74 20 3d 20 73 71 6c 69 74 65 33  iLimit = sqlite3
51b0: 50 61 67 65 72 4a 6f 75 72 6e 61 6c 53 69 7a 65  PagerJournalSize
51c0: 4c 69 6d 69 74 28 70 50 61 67 65 72 2c 20 69 4c  Limit(pPager, iL
51d0: 69 6d 69 74 29 3b 0a 20 20 20 20 72 65 74 75 72  imit);.    retur
51e0: 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 6a  nSingleInt(v, "j
51f0: 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69  ournal_size_limi
5200: 74 22 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20  t", iLimit);.   
5210: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e   break;.  }..#en
5220: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
5230: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
5240: 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20   */..  /*.  **  
5250: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
5260: 61 75 74 6f 5f 76 61 63 75 75 6d 0a 20 20 2a 2a  auto_vacuum.  **
5270: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
5280: 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a  .]auto_vacuum=N.
5290: 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72    **.  ** Get or
52a0: 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   set the value o
52b0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 27  f the database '
52c0: 61 75 74 6f 2d 76 61 63 75 75 6d 27 20 70 61 72  auto-vacuum' par
52d0: 61 6d 65 74 65 72 2e 0a 20 20 2a 2a 20 54 68 65  ameter..  ** The
52e0: 20 76 61 6c 75 65 20 69 73 20 6f 6e 65 20 6f 66   value is one of
52f0: 3a 20 20 30 20 4e 4f 4e 45 20 31 20 46 55 4c 4c  :  0 NONE 1 FULL
5300: 20 32 20 49 4e 43 52 45 4d 45 4e 54 41 4c 0a 20   2 INCREMENTAL. 
5310: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
5320: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
5330: 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  UM.  case PragTy
5340: 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d 3a 20 7b  p_AUTO_VACUUM: {
5350: 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20  .    Btree *pBt 
5360: 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20  = pDb->pBt;.    
5370: 61 73 73 65 72 74 28 20 70 42 74 21 3d 30 20 29  assert( pBt!=0 )
5380: 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  ;.    if( !zRigh
5390: 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  t ){.      retur
53a0: 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 61  nSingleInt(v, "a
53b0: 75 74 6f 5f 76 61 63 75 75 6d 22 2c 20 73 71 6c  uto_vacuum", sql
53c0: 69 74 65 33 42 74 72 65 65 47 65 74 41 75 74 6f  ite3BtreeGetAuto
53d0: 56 61 63 75 75 6d 28 70 42 74 29 29 3b 0a 20 20  Vacuum(pBt));.  
53e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
53f0: 6e 74 20 65 41 75 74 6f 20 3d 20 67 65 74 41 75  nt eAuto = getAu
5400: 74 6f 56 61 63 75 75 6d 28 7a 52 69 67 68 74 29  toVacuum(zRight)
5410: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5420: 65 41 75 74 6f 3e 3d 30 20 26 26 20 65 41 75 74  eAuto>=0 && eAut
5430: 6f 3c 3d 32 20 29 3b 0a 20 20 20 20 20 20 64 62  o<=2 );.      db
5440: 2d 3e 6e 65 78 74 41 75 74 6f 76 61 63 20 3d 20  ->nextAutovac = 
5450: 28 75 38 29 65 41 75 74 6f 3b 0a 20 20 20 20 20  (u8)eAuto;.     
5460: 20 2f 2a 20 43 61 6c 6c 20 53 65 74 41 75 74 6f   /* Call SetAuto
5470: 56 61 63 75 75 6d 28 29 20 74 6f 20 73 65 74 20  Vacuum() to set 
5480: 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69  initialize the i
5490: 6e 74 65 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64  nternal auto and
54a0: 0a 20 20 20 20 20 20 2a 2a 20 69 6e 63 72 2d 76  .      ** incr-v
54b0: 61 63 75 75 6d 20 66 6c 61 67 73 2e 20 54 68 69  acuum flags. Thi
54c0: 73 20 69 73 20 72 65 71 75 69 72 65 64 20 69 6e  s is required in
54d0: 20 63 61 73 65 20 74 68 69 73 20 63 6f 6e 6e 65   case this conne
54e0: 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 63  ction.      ** c
54f0: 72 65 61 74 65 73 20 74 68 65 20 64 61 74 61 62  reates the datab
5500: 61 73 65 20 66 69 6c 65 2e 20 49 74 20 69 73 20  ase file. It is 
5510: 69 6d 70 6f 72 74 61 6e 74 20 74 68 61 74 20 69  important that i
5520: 74 20 69 73 20 63 72 65 61 74 65 64 0a 20 20 20  t is created.   
5530: 20 20 20 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f     ** as an auto
5540: 2d 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65 20  -vacuum capable 
5550: 64 62 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  db..      */.   
5560: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
5570: 74 72 65 65 53 65 74 41 75 74 6f 56 61 63 75 75  treeSetAutoVacuu
5580: 6d 28 70 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20  m(pBt, eAuto);. 
5590: 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
55a0: 49 54 45 5f 4f 4b 20 26 26 20 28 65 41 75 74 6f  ITE_OK && (eAuto
55b0: 3d 3d 31 20 7c 7c 20 65 41 75 74 6f 3d 3d 32 29  ==1 || eAuto==2)
55c0: 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 57   ){.        /* W
55d0: 68 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20  hen setting the 
55e0: 61 75 74 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65  auto_vacuum mode
55f0: 20 74 6f 20 65 69 74 68 65 72 20 22 66 75 6c 6c   to either "full
5600: 22 20 6f 72 20 0a 20 20 20 20 20 20 20 20 2a 2a  " or .        **
5610: 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20   "incremental", 
5620: 77 72 69 74 65 20 74 68 65 20 76 61 6c 75 65 20  write the value 
5630: 6f 66 20 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68  of meta[6] in th
5640: 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20  e database.     
5650: 20 20 20 2a 2a 20 66 69 6c 65 2e 20 42 65 66 6f     ** file. Befo
5660: 72 65 20 77 72 69 74 69 6e 67 20 74 6f 20 6d 65  re writing to me
5670: 74 61 5b 36 5d 2c 20 63 68 65 63 6b 20 74 68 61  ta[6], check tha
5680: 74 20 6d 65 74 61 5b 33 5d 20 69 6e 64 69 63 61  t meta[3] indica
5690: 74 65 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  tes.        ** t
56a0: 68 61 74 20 74 68 69 73 20 72 65 61 6c 6c 79 20  hat this really 
56b0: 69 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75  is an auto-vacuu
56c0: 6d 20 63 61 70 61 62 6c 65 20 64 61 74 61 62 61  m capable databa
56d0: 73 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  se..        */. 
56e0: 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f         static co
56f0: 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44  nst int iLn = VD
5700: 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f  BE_OFFSET_LINENO
5710: 28 32 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61  (2);.        sta
5720: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
5730: 4c 69 73 74 20 73 65 74 4d 65 74 61 36 5b 5d 20  List setMeta6[] 
5740: 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 7b 20  = {.          { 
5750: 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20  OP_Transaction, 
5760: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c     0,         1,
5770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5780: 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a   0},    /* 0 */.
5790: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52            { OP_R
57a0: 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30  eadCookie,     0
57b0: 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20  ,         1,    
57c0: 20 20 20 20 20 42 54 52 45 45 5f 4c 41 52 47 45       BTREE_LARGE
57d0: 53 54 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20  ST_ROOT_PAGE},. 
57e0: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66           { OP_If
57f0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2c  ,             1,
5800: 20 20 20 20 20 20 20 20 20 30 2c 20 20 20 20 20           0,     
5810: 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20              0}, 
5820: 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20     /* 2 */.     
5830: 20 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20       { OP_Halt, 
5840: 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
5850: 5f 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20  _OK, OE_Abort,  
5860: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
5870: 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 3 */.         
5880: 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c   { OP_SetCookie,
5890: 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20        0,        
58a0: 20 42 54 52 45 45 5f 49 4e 43 52 5f 56 41 43 55   BTREE_INCR_VACU
58b0: 55 4d 2c 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20  UM, 0},    /* 4 
58c0: 2a 2f 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20 20  */.        };.  
58d0: 20 20 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f        VdbeOp *aO
58e0: 70 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  p;.        int i
58f0: 41 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  Addr = sqlite3Vd
5900: 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29  beCurrentAddr(v)
5910: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
5920: 33 56 64 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c  3VdbeVerifyNoMal
5930: 6c 6f 63 52 65 71 75 69 72 65 64 28 76 2c 20 41  locRequired(v, A
5940: 72 72 61 79 53 69 7a 65 28 73 65 74 4d 65 74 61  rraySize(setMeta
5950: 36 29 29 3b 0a 20 20 20 20 20 20 20 20 61 4f 70  6));.        aOp
5960: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
5970: 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79  dOpList(v, Array
5980: 53 69 7a 65 28 73 65 74 4d 65 74 61 36 29 2c 20  Size(setMeta6), 
5990: 73 65 74 4d 65 74 61 36 2c 20 69 4c 6e 29 3b 0a  setMeta6, iLn);.
59a0: 20 20 20 20 20 20 20 20 69 66 28 20 4f 4e 4c 59          if( ONLY
59b0: 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45  _IF_REALLOC_STRE
59c0: 53 53 28 61 4f 70 3d 3d 30 29 20 29 20 62 72 65  SS(aOp==0) ) bre
59d0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b  ak;.        aOp[
59e0: 30 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20  0].p1 = iDb;.   
59f0: 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70 31 20 3d       aOp[1].p1 =
5a00: 20 69 44 62 3b 0a 20 20 20 20 20 20 20 20 61 4f   iDb;.        aO
5a10: 70 5b 32 5d 2e 70 32 20 3d 20 69 41 64 64 72 2b  p[2].p2 = iAddr+
5a20: 34 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 34  4;.        aOp[4
5a30: 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20  ].p1 = iDb;.    
5a40: 20 20 20 20 61 4f 70 5b 34 5d 2e 70 33 20 3d 20      aOp[4].p3 = 
5a50: 65 41 75 74 6f 20 2d 20 31 3b 0a 20 20 20 20 20  eAuto - 1;.     
5a60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73     sqlite3VdbeUs
5a70: 65 73 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b  esBtree(v, iDb);
5a80: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
5a90: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
5aa0: 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  ndif..  /*.  ** 
5ab0: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
5ac0: 5d 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63  ]incremental_vac
5ad0: 75 75 6d 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a  uum(N).  **.  **
5ae0: 20 44 6f 20 4e 20 73 74 65 70 73 20 6f 66 20 69   Do N steps of i
5af0: 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75  ncremental vacuu
5b00: 6d 69 6e 67 20 6f 6e 20 61 20 64 61 74 61 62 61  ming on a databa
5b10: 73 65 2e 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66  se..  */.#ifndef
5b20: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
5b30: 4f 56 41 43 55 55 4d 0a 20 20 63 61 73 65 20 50  OVACUUM.  case P
5b40: 72 61 67 54 79 70 5f 49 4e 43 52 45 4d 45 4e 54  ragTyp_INCREMENT
5b50: 41 4c 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20  AL_VACUUM: {.   
5b60: 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 61 64 64   int iLimit, add
5b70: 72 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  r;.    if( zRigh
5b80: 74 3d 3d 30 20 7c 7c 20 21 73 71 6c 69 74 65 33  t==0 || !sqlite3
5b90: 47 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c  GetInt32(zRight,
5ba0: 20 26 69 4c 69 6d 69 74 29 20 7c 7c 20 69 4c 69   &iLimit) || iLi
5bb0: 6d 69 74 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20  mit<=0 ){.      
5bc0: 69 4c 69 6d 69 74 20 3d 20 30 78 37 66 66 66 66  iLimit = 0x7ffff
5bd0: 66 66 66 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  fff;.    }.    s
5be0: 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
5bf0: 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65  Operation(pParse
5c00: 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20 73  , 0, iDb);.    s
5c10: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
5c20: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
5c30: 69 4c 69 6d 69 74 2c 20 31 29 3b 0a 20 20 20 20  iLimit, 1);.    
5c40: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
5c50: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49  beAddOp1(v, OP_I
5c60: 6e 63 72 56 61 63 75 75 6d 2c 20 69 44 62 29 3b  ncrVacuum, iDb);
5c70: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
5c80: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
5c90: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65  eAddOp1(v, OP_Re
5ca0: 73 75 6c 74 52 6f 77 2c 20 31 29 3b 0a 20 20 20  sultRow, 1);.   
5cb0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5cc0: 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  p2(v, OP_AddImm,
5cd0: 20 31 2c 20 2d 31 29 3b 0a 20 20 20 20 73 71 6c   1, -1);.    sql
5ce0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
5cf0: 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61  , OP_IfPos, 1, a
5d00: 64 64 72 29 3b 20 56 64 62 65 43 6f 76 65 72 61  ddr); VdbeCovera
5d10: 67 65 28 76 29 3b 0a 20 20 20 20 73 71 6c 69 74  ge(v);.    sqlit
5d20: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
5d30: 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 62 72 65  , addr);.    bre
5d40: 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ak;.  }.#endif..
5d50: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
5d60: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
5d70: 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  S.  /*.  **  PRA
5d80: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63  GMA [schema.]cac
5d90: 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52  he_size.  **  PR
5da0: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61  AGMA [schema.]ca
5db0: 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a  che_size=N.  **.
5dc0: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
5dd0: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
5de0: 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65  current local se
5df0: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
5e00: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
5e10: 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 66  ze. The second f
5e20: 6f 72 6d 20 73 65 74 73 20 74 68 65 20 6c 6f 63  orm sets the loc
5e30: 61 6c 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63  al.  ** page cac
5e40: 68 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20  he size value.  
5e50: 49 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65  If N is positive
5e60: 20 74 68 65 6e 20 74 68 61 74 20 69 73 20 74 68   then that is th
5e70: 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  e.  ** number of
5e80: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 63 61   pages in the ca
5e90: 63 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65  che.  If N is ne
5ea0: 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65  gative, then the
5eb0: 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  .  ** number of 
5ec0: 70 61 67 65 73 20 69 73 20 61 64 6a 75 73 74 65  pages is adjuste
5ed0: 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 63 61  d so that the ca
5ee0: 63 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69  che uses -N kibi
5ef0: 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65  bytes.  ** of me
5f00: 6d 6f 72 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  mory..  */.  cas
5f10: 65 20 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f  e PragTyp_CACHE_
5f20: 53 49 5a 45 3a 20 7b 0a 20 20 20 20 61 73 73 65  SIZE: {.    asse
5f30: 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
5f40: 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
5f50: 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66  Db, 0) );.    if
5f60: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
5f70: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
5f80: 6e 74 28 76 2c 20 22 63 61 63 68 65 5f 73 69 7a  nt(v, "cache_siz
5f90: 65 22 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  e", pDb->pSchema
5fa0: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20  ->cache_size);. 
5fb0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
5fc0: 69 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74  int size = sqlit
5fd0: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a  e3Atoi(zRight);.
5fe0: 20 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65        pDb->pSche
5ff0: 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d  ma->cache_size =
6000: 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c   size;.      sql
6010: 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
6020: 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20  eSize(pDb->pBt, 
6030: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61  pDb->pSchema->ca
6040: 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d  che_size);.    }
6050: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
6060: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
6070: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68  MA [schema.]cach
6080: 65 5f 73 70 69 6c 6c 0a 20 20 2a 2a 20 20 50 52  e_spill.  **  PR
6090: 41 47 4d 41 20 63 61 63 68 65 5f 73 70 69 6c 6c  AGMA cache_spill
60a0: 3d 42 4f 4f 4c 45 41 4e 0a 20 20 2a 2a 20 20 50  =BOOLEAN.  **  P
60b0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63  RAGMA [schema.]c
60c0: 61 63 68 65 5f 73 70 69 6c 6c 3d 4e 0a 20 20 2a  ache_spill=N.  *
60d0: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
60e0: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
60f0: 65 20 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20  e current local 
6100: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
6110: 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20    ** page cache 
6120: 73 70 69 6c 6c 20 73 69 7a 65 2e 20 54 68 65 20  spill size. The 
6130: 73 65 63 6f 6e 64 20 66 6f 72 6d 20 74 75 72 6e  second form turn
6140: 73 20 63 61 63 68 65 20 73 70 69 6c 6c 20 6f 6e  s cache spill on
6150: 0a 20 20 2a 2a 20 6f 72 20 6f 66 66 2e 20 20 57  .  ** or off.  W
6160: 68 65 6e 20 74 75 72 6e 6e 69 6e 67 20 63 61 63  hen turnning cac
6170: 68 65 20 73 70 69 6c 6c 20 6f 6e 2c 20 74 68 65  he spill on, the
6180: 20 73 69 7a 65 20 69 73 20 73 65 74 20 74 6f 20   size is set to 
6190: 74 68 65 0a 20 20 2a 2a 20 63 75 72 72 65 6e 74  the.  ** current
61a0: 20 63 61 63 68 65 5f 73 69 7a 65 2e 20 20 54 68   cache_size.  Th
61b0: 65 20 74 68 69 72 64 20 66 6f 72 6d 20 73 65 74  e third form set
61c0: 73 20 61 20 73 70 69 6c 6c 20 73 69 7a 65 20 74  s a spill size t
61d0: 68 61 74 0a 20 20 2a 2a 20 6d 61 79 20 62 65 20  hat.  ** may be 
61e0: 64 69 66 66 65 72 65 6e 74 20 66 6f 72 6d 20 74  different form t
61f0: 68 65 20 63 61 63 68 65 20 73 69 7a 65 2e 0a 20  he cache size.. 
6200: 20 2a 2a 20 49 66 20 4e 20 69 73 20 70 6f 73 69   ** If N is posi
6210: 74 69 76 65 20 74 68 65 6e 20 74 68 61 74 20 69  tive then that i
6220: 73 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65  s the.  ** numbe
6230: 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
6240: 65 20 63 61 63 68 65 2e 20 20 49 66 20 4e 20 69  e cache.  If N i
6250: 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e  s negative, then
6260: 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72   the.  ** number
6270: 20 6f 66 20 70 61 67 65 73 20 69 73 20 61 64 6a   of pages is adj
6280: 75 73 74 65 64 20 73 6f 20 74 68 61 74 20 74 68  usted so that th
6290: 65 20 63 61 63 68 65 20 75 73 65 73 20 2d 4e 20  e cache uses -N 
62a0: 6b 69 62 69 62 79 74 65 73 0a 20 20 2a 2a 20 6f  kibibytes.  ** o
62b0: 66 20 6d 65 6d 6f 72 79 2e 0a 20 20 2a 2a 0a 20  f memory..  **. 
62c0: 20 2a 2a 20 49 66 20 74 68 65 20 6e 75 6d 62 65   ** If the numbe
62d0: 72 20 6f 66 20 63 61 63 68 65 5f 73 70 69 6c 6c  r of cache_spill
62e0: 20 70 61 67 65 73 20 69 73 20 6c 65 73 73 20 74   pages is less t
62f0: 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  hen the number o
6300: 66 0a 20 20 2a 2a 20 63 61 63 68 65 5f 73 69 7a  f.  ** cache_siz
6310: 65 20 70 61 67 65 73 2c 20 6e 6f 20 73 70 69 6c  e pages, no spil
6320: 6c 69 6e 67 20 6f 63 63 75 72 73 20 75 6e 74 69  ling occurs unti
6330: 6c 20 74 68 65 20 70 61 67 65 20 63 6f 75 6e 74  l the page count
6340: 20 65 78 63 65 65 64 73 0a 20 20 2a 2a 20 74 68   exceeds.  ** th
6350: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 61 63 68  e number of cach
6360: 65 5f 73 69 7a 65 20 70 61 67 65 73 2e 0a 20 20  e_size pages..  
6370: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 63 61 63 68  **.  ** The cach
6380: 65 5f 73 70 69 6c 6c 3d 42 4f 4f 4c 45 41 4e 20  e_spill=BOOLEAN 
6390: 73 65 74 74 69 6e 67 20 61 70 70 6c 69 65 73 20  setting applies 
63a0: 74 6f 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  to all attached 
63b0: 73 63 68 65 6d 61 73 2c 0a 20 20 2a 2a 20 6e 6f  schemas,.  ** no
63c0: 74 20 6a 75 73 74 20 74 68 65 20 73 63 68 65 6d  t just the schem
63d0: 61 20 73 70 65 63 69 66 69 65 64 2e 0a 20 20 2a  a specified..  *
63e0: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
63f0: 5f 43 41 43 48 45 5f 53 50 49 4c 4c 3a 20 7b 0a  _CACHE_SPILL: {.
6400: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
6410: 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
6420: 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29  ld(db, iDb, 0) )
6430: 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  ;.    if( !zRigh
6440: 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  t ){.      retur
6450: 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 63  nSingleInt(v, "c
6460: 61 63 68 65 5f 73 70 69 6c 6c 22 2c 20 0a 20 20  ache_spill", .  
6470: 20 20 20 20 20 20 20 28 64 62 2d 3e 66 6c 61 67         (db->flag
6480: 73 20 26 20 53 51 4c 49 54 45 5f 43 61 63 68 65  s & SQLITE_Cache
6490: 53 70 69 6c 6c 29 3d 3d 30 20 3f 20 30 20 3a 20  Spill)==0 ? 0 : 
64a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
64b0: 69 74 65 33 42 74 72 65 65 53 65 74 53 70 69 6c  ite3BtreeSetSpil
64c0: 6c 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 30  lSize(pDb->pBt,0
64d0: 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ));.    }else{. 
64e0: 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20       int size = 
64f0: 31 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  1;.      if( sql
6500: 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69  ite3GetInt32(zRi
6510: 67 68 74 2c 20 26 73 69 7a 65 29 20 29 7b 0a 20  ght, &size) ){. 
6520: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
6530: 72 65 65 53 65 74 53 70 69 6c 6c 53 69 7a 65 28  reeSetSpillSize(
6540: 70 44 62 2d 3e 70 42 74 2c 20 73 69 7a 65 29 3b  pDb->pBt, size);
6550: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
6560: 66 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  f( sqlite3GetBoo
6570: 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 73 69 7a  lean(zRight, siz
6580: 65 21 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20  e!=0) ){.       
6590: 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
65a0: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 3b  LITE_CacheSpill;
65b0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
65c0: 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20        db->flags 
65d0: 26 3d 20 7e 53 51 4c 49 54 45 5f 43 61 63 68 65  &= ~SQLITE_Cache
65e0: 53 70 69 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20  Spill;.      }. 
65f0: 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72       setAllPager
6600: 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20 7d  Flags(db);.    }
6610: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
6620: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
6630: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6d 6d 61 70  MA [schema.]mmap
6640: 5f 73 69 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20 20  _size(N).  **.  
6650: 2a 2a 20 55 73 65 64 20 74 6f 20 73 65 74 20 6d  ** Used to set m
6660: 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69  apping size limi
6670: 74 2e 20 54 68 65 20 6d 61 70 70 69 6e 67 20 73  t. The mapping s
6680: 69 7a 65 20 6c 69 6d 69 74 20 69 73 0a 20 20 2a  ize limit is.  *
6690: 2a 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20  * used to limit 
66a0: 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73 69  the aggregate si
66b0: 7a 65 20 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72 79  ze of all memory
66c0: 20 6d 61 70 70 65 64 20 72 65 67 69 6f 6e 73 20   mapped regions 
66d0: 6f 66 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61  of the.  ** data
66e0: 62 61 73 65 20 66 69 6c 65 2e 20 49 66 20 74 68  base file. If th
66f0: 69 73 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  is parameter is 
6700: 73 65 74 20 74 6f 20 7a 65 72 6f 2c 20 74 68 65  set to zero, the
6710: 6e 20 6d 65 6d 6f 72 79 20 6d 61 70 70 69 6e 67  n memory mapping
6720: 0a 20 20 2a 2a 20 69 73 20 6e 6f 74 20 75 73 65  .  ** is not use
6730: 64 20 61 74 20 61 6c 6c 2e 20 20 49 66 20 4e 20  d at all.  If N 
6740: 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65  is negative, the
6750: 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d 65  n the default me
6760: 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 6c 69  mory map.  ** li
6770: 6d 69 74 20 64 65 74 65 72 6d 69 6e 65 64 20 62  mit determined b
6780: 79 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  y sqlite3_config
6790: 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d  (SQLITE_CONFIG_M
67a0: 4d 41 50 5f 53 49 5a 45 29 20 69 73 20 73 65 74  MAP_SIZE) is set
67b0: 2e 0a 20 20 2a 2a 20 54 68 65 20 70 61 72 61 6d  ..  ** The param
67c0: 65 74 65 72 20 4e 20 69 73 20 6d 65 61 73 75 72  eter N is measur
67d0: 65 64 20 69 6e 20 62 79 74 65 73 2e 0a 20 20 2a  ed in bytes..  *
67e0: 2a 0a 20 20 2a 2a 20 54 68 69 73 20 76 61 6c 75  *.  ** This valu
67f0: 65 20 69 73 20 61 64 76 69 73 6f 72 79 2e 20 20  e is advisory.  
6800: 54 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56  The underlying V
6810: 46 53 20 69 73 20 66 72 65 65 20 74 6f 20 6d 65  FS is free to me
6820: 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 61 73  mory map.  ** as
6830: 20 6c 69 74 74 6c 65 20 6f 72 20 61 73 20 6d 75   little or as mu
6840: 63 68 20 61 73 20 69 74 20 77 61 6e 74 73 2e 20  ch as it wants. 
6850: 20 45 78 63 65 70 74 2c 20 69 66 20 4e 20 69 73   Except, if N is
6860: 20 73 65 74 20 74 6f 20 30 20 74 68 65 6e 20 74   set to 0 then t
6870: 68 65 0a 20 20 2a 2a 20 75 70 70 65 72 20 6c 61  he.  ** upper la
6880: 79 65 72 73 20 77 69 6c 6c 20 6e 65 76 65 72 20  yers will never 
6890: 69 6e 76 6f 6b 65 20 74 68 65 20 78 46 65 74 63  invoke the xFetc
68a0: 68 20 69 6e 74 65 72 66 61 63 65 73 20 74 6f 20  h interfaces to 
68b0: 74 68 65 20 56 46 53 2e 0a 20 20 2a 2f 0a 20 20  the VFS..  */.  
68c0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 4d 4d 41  case PragTyp_MMA
68d0: 50 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73 71  P_SIZE: {.    sq
68e0: 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 3b 0a  lite3_int64 sz;.
68f0: 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  #if SQLITE_MAX_M
6900: 4d 41 50 5f 53 49 5a 45 3e 30 0a 20 20 20 20 61  MAP_SIZE>0.    a
6910: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
6920: 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
6930: 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
6940: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
6950: 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20       int ii;.   
6960: 20 20 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48     sqlite3DecOrH
6970: 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20  exToI64(zRight, 
6980: 26 73 7a 29 3b 0a 20 20 20 20 20 20 69 66 28 20  &sz);.      if( 
6990: 73 7a 3c 30 20 29 20 73 7a 20 3d 20 73 71 6c 69  sz<0 ) sz = sqli
69a0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
69b0: 73 7a 4d 6d 61 70 3b 0a 20 20 20 20 20 20 69 66  szMmap;.      if
69c0: 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 20 64  ( pId2->n==0 ) d
69d0: 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b 0a  b->szMmap = sz;.
69e0: 20 20 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d        for(ii=db-
69f0: 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69  >nDb-1; ii>=0; i
6a00: 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 69 66  i--){.        if
6a10: 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  ( db->aDb[ii].pB
6a20: 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c  t && (ii==iDb ||
6a30: 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a   pId2->n==0) ){.
6a40: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
6a50: 33 42 74 72 65 65 53 65 74 4d 6d 61 70 4c 69 6d  3BtreeSetMmapLim
6a60: 69 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  it(db->aDb[ii].p
6a70: 42 74 2c 20 73 7a 29 3b 0a 20 20 20 20 20 20 20  Bt, sz);.       
6a80: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
6a90: 0a 20 20 20 20 73 7a 20 3d 20 2d 31 3b 0a 20 20  .    sz = -1;.  
6aa0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66    rc = sqlite3_f
6ab0: 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20  ile_control(db, 
6ac0: 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54  zDb, SQLITE_FCNT
6ad0: 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20 26 73 7a  L_MMAP_SIZE, &sz
6ae0: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 73 7a 20  );.#else.    sz 
6af0: 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  = 0;.    rc = SQ
6b00: 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a  LITE_OK;.#endif.
6b10: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
6b20: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
6b30: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76  eturnSingleInt(v
6b40: 2c 20 22 6d 6d 61 70 5f 73 69 7a 65 22 2c 20 73  , "mmap_size", s
6b50: 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  z);.    }else if
6b60: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 54  ( rc!=SQLITE_NOT
6b70: 46 4f 55 4e 44 20 29 7b 0a 20 20 20 20 20 20 70  FOUND ){.      p
6b80: 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20  Parse->nErr++;. 
6b90: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63 20       pParse->rc 
6ba0: 3d 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20 20 20  = rc;.    }.    
6bb0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
6bc0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74  .  **   PRAGMA t
6bd0: 65 6d 70 5f 73 74 6f 72 65 0a 20 20 2a 2a 20 20  emp_store.  **  
6be0: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
6bf0: 72 65 20 3d 20 22 64 65 66 61 75 6c 74 22 7c 22  re = "default"|"
6c00: 6d 65 6d 6f 72 79 22 7c 22 66 69 6c 65 22 0a 20  memory"|"file". 
6c10: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
6c20: 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c  or set the local
6c30: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74 65   value of the te
6c40: 6d 70 5f 73 74 6f 72 65 20 66 6c 61 67 2e 20 20  mp_store flag.  
6c50: 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68  Changing.  ** th
6c60: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f  e local value do
6c70: 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e  es not make chan
6c80: 67 65 73 20 74 6f 20 74 68 65 20 64 69 73 6b 20  ges to the disk 
6c90: 66 69 6c 65 20 61 6e 64 20 74 68 65 20 64 65 66  file and the def
6ca0: 61 75 6c 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20  ault.  ** value 
6cb0: 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72 65 64  will be restored
6cc0: 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20 74   the next time t
6cd0: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6f  he database is o
6ce0: 70 65 6e 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  pened..  **.  **
6cf0: 20 4e 6f 74 65 20 74 68 61 74 20 69 74 20 69 73   Note that it is
6d00: 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68   possible for th
6d10: 65 20 6c 69 62 72 61 72 79 20 63 6f 6d 70 69 6c  e library compil
6d20: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74  e-time options t
6d30: 6f 0a 20 20 2a 2a 20 6f 76 65 72 72 69 64 65 20  o.  ** override 
6d40: 74 68 69 73 20 73 65 74 74 69 6e 67 0a 20 20 2a  this setting.  *
6d50: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
6d60: 5f 54 45 4d 50 5f 53 54 4f 52 45 3a 20 7b 0a 20  _TEMP_STORE: {. 
6d70: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
6d80: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  {.      returnSi
6d90: 6e 67 6c 65 49 6e 74 28 76 2c 20 22 74 65 6d 70  ngleInt(v, "temp
6da0: 5f 73 74 6f 72 65 22 2c 20 64 62 2d 3e 74 65 6d  _store", db->tem
6db0: 70 5f 73 74 6f 72 65 29 3b 0a 20 20 20 20 7d 65  p_store);.    }e
6dc0: 6c 73 65 7b 0a 20 20 20 20 20 20 63 68 61 6e 67  lse{.      chang
6dd0: 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61  eTempStorage(pPa
6de0: 72 73 65 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20  rse, zRight);.  
6df0: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
6e00: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20   }..  /*.  **   
6e10: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
6e20: 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a  e_directory.  **
6e30: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
6e40: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d  tore_directory =
6e50: 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e   ""|"directory_n
6e60: 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  ame".  **.  ** R
6e70: 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65  eturn or set the
6e80: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20   local value of 
6e90: 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  the temp_store_d
6ea0: 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20  irectory flag.  
6eb0: 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68  Changing.  ** th
6ec0: 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20 73  e value sets a s
6ed0: 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f 72  pecific director
6ee0: 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72  y to be used for
6ef0: 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73   temporary files
6f00: 2e 0a 20 20 2a 2a 20 53 65 74 74 69 6e 67 20 74  ..  ** Setting t
6f10: 6f 20 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20  o a null string 
6f20: 72 65 76 65 72 74 73 20 74 6f 20 74 68 65 20 64  reverts to the d
6f30: 65 66 61 75 6c 74 20 74 65 6d 70 6f 72 61 72 79  efault temporary
6f40: 20 64 69 72 65 63 74 6f 72 79 20 73 65 61 72 63   directory searc
6f50: 68 2e 0a 20 20 2a 2a 20 49 66 20 74 65 6d 70 6f  h..  ** If tempo
6f60: 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 69  rary directory i
6f70: 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 6e 20  s changed, then 
6f80: 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74  invalidateTempSt
6f90: 6f 72 61 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f  orage..  **.  */
6fa0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
6fb0: 54 45 4d 50 5f 53 54 4f 52 45 5f 44 49 52 45 43  TEMP_STORE_DIREC
6fc0: 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69 66 28 20  TORY: {.    if( 
6fd0: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
6fe0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78   returnSingleTex
6ff0: 74 28 76 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65  t(v, "temp_store
7000: 5f 64 69 72 65 63 74 6f 72 79 22 2c 20 73 71 6c  _directory", sql
7010: 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74  ite3_temp_direct
7020: 6f 72 79 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ory);.    }else{
7030: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7040: 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69  OMIT_WSD.      i
7050: 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a  f( zRight[0] ){.
7060: 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b          int res;
7070: 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
7080: 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28 64 62  lite3OsAccess(db
7090: 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20  ->pVfs, zRight, 
70a0: 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45  SQLITE_ACCESS_RE
70b0: 41 44 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a  ADWRITE, &res);.
70c0: 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
70d0: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73  SQLITE_OK || res
70e0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
70f0: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
7100: 28 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20  (pParse, "not a 
7110: 77 72 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f  writable directo
7120: 72 79 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ry");.          
7130: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
7140: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
7150: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c   }.      if( SQL
7160: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
7170: 30 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c  0.       || (SQL
7180: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
7190: 31 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74  1 && db->temp_st
71a0: 6f 72 65 3c 3d 31 29 0a 20 20 20 20 20 20 20 7c  ore<=1).       |
71b0: 7c 20 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  | (SQLITE_TEMP_S
71c0: 54 4f 52 45 3d 3d 32 20 26 26 20 64 62 2d 3e 74  TORE==2 && db->t
71d0: 65 6d 70 5f 73 74 6f 72 65 3d 3d 31 29 0a 20 20  emp_store==1).  
71e0: 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69      ){.        i
71f0: 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f  nvalidateTempSto
7200: 72 61 67 65 28 70 50 61 72 73 65 29 3b 0a 20 20  rage(pParse);.  
7210: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
7220: 74 65 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33  te3_free(sqlite3
7230: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29  _temp_directory)
7240: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67  ;.      if( zRig
7250: 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20  ht[0] ){.       
7260: 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69   sqlite3_temp_di
7270: 72 65 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65  rectory = sqlite
7280: 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
7290: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d  zRight);.      }
72a0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
72b0: 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63  lite3_temp_direc
72c0: 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20  tory = 0;.      
72d0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
72e0: 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20  TE_OMIT_WSD */. 
72f0: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
7300: 20 20 7d 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f    }..#if SQLITE_
7310: 4f 53 5f 57 49 4e 0a 20 20 2f 2a 0a 20 20 2a 2a  OS_WIN.  /*.  **
7320: 20 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73     PRAGMA data_s
7330: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20  tore_directory. 
7340: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 64 61 74   **   PRAGMA dat
7350: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
7360: 79 20 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72  y = ""|"director
7370: 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a  y_name".  **.  *
7380: 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20  * Return or set 
7390: 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20  the local value 
73a0: 6f 66 20 74 68 65 20 64 61 74 61 5f 73 74 6f 72  of the data_stor
73b0: 65 5f 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67  e_directory flag
73c0: 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a  .  Changing.  **
73d0: 20 74 68 65 20 76 61 6c 75 65 20 73 65 74 73 20   the value sets 
73e0: 61 20 73 70 65 63 69 66 69 63 20 64 69 72 65 63  a specific direc
73f0: 74 6f 72 79 20 74 6f 20 62 65 20 75 73 65 64 20  tory to be used 
7400: 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69 6c  for database fil
7410: 65 73 20 74 68 61 74 0a 20 20 2a 2a 20 77 65 72  es that.  ** wer
7420: 65 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68  e specified with
7430: 20 61 20 72 65 6c 61 74 69 76 65 20 70 61 74 68   a relative path
7440: 6e 61 6d 65 2e 20 20 53 65 74 74 69 6e 67 20 74  name.  Setting t
7450: 6f 20 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20  o a null string 
7460: 72 65 76 65 72 74 73 0a 20 20 2a 2a 20 74 6f 20  reverts.  ** to 
7470: 74 68 65 20 64 65 66 61 75 6c 74 20 64 61 74 61  the default data
7480: 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 2c 20  base directory, 
7490: 77 68 69 63 68 20 66 6f 72 20 64 61 74 61 62 61  which for databa
74a0: 73 65 20 66 69 6c 65 73 20 73 70 65 63 69 66 69  se files specifi
74b0: 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72  ed with.  ** a r
74c0: 65 6c 61 74 69 76 65 20 70 61 74 68 20 77 69 6c  elative path wil
74d0: 6c 20 70 72 6f 62 61 62 6c 79 20 62 65 20 62 61  l probably be ba
74e0: 73 65 64 20 6f 6e 20 74 68 65 20 63 75 72 72 65  sed on the curre
74f0: 6e 74 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72  nt directory for
7500: 20 74 68 65 0a 20 20 2a 2a 20 70 72 6f 63 65 73   the.  ** proces
7510: 73 2e 20 20 44 61 74 61 62 61 73 65 20 66 69 6c  s.  Database fil
7520: 65 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68  e specified with
7530: 20 61 6e 20 61 62 73 6f 6c 75 74 65 20 70 61 74   an absolute pat
7540: 68 20 61 72 65 20 6e 6f 74 20 69 6d 70 61 63 74  h are not impact
7550: 65 64 0a 20 20 2a 2a 20 62 79 20 74 68 69 73 20  ed.  ** by this 
7560: 73 65 74 74 69 6e 67 2c 20 72 65 67 61 72 64 6c  setting, regardl
7570: 65 73 73 20 6f 66 20 69 74 73 20 76 61 6c 75 65  ess of its value
7580: 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61  ..  **.  */.  ca
7590: 73 65 20 50 72 61 67 54 79 70 5f 44 41 54 41 5f  se PragTyp_DATA_
75a0: 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a  STORE_DIRECTORY:
75b0: 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67   {.    if( !zRig
75c0: 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  ht ){.      retu
75d0: 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20  rnSingleText(v, 
75e0: 22 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65  "data_store_dire
75f0: 63 74 6f 72 79 22 2c 20 73 71 6c 69 74 65 33 5f  ctory", sqlite3_
7600: 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 29 3b  data_directory);
7610: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e  .    }else{.#ifn
7620: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
7630: 57 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52  WSD.      if( zR
7640: 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  ight[0] ){.     
7650: 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20     int res;.    
7660: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
7670: 4f 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66  OsAccess(db->pVf
7680: 73 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54  s, zRight, SQLIT
7690: 45 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52 49  E_ACCESS_READWRI
76a0: 54 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  TE, &res);.     
76b0: 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
76c0: 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29  E_OK || res==0 )
76d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
76e0: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
76f0: 73 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61  se, "not a writa
7700: 62 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b  ble directory");
7710: 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
7720: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
7730: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
7740: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
7750: 28 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69  (sqlite3_data_di
7760: 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 20 20  rectory);.      
7770: 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b  if( zRight[0] ){
7780: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
7790: 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20  _data_directory 
77a0: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
77b0: 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74 29 3b  f("%s", zRight);
77c0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
77d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64 61        sqlite3_da
77e0: 74 61 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30  ta_directory = 0
77f0: 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
7800: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
7810: 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20  WSD */.    }.   
7820: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
7830: 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 45  if..#if SQLITE_E
7840: 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54  NABLE_LOCKING_ST
7850: 59 4c 45 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  YLE.  /*.  **   
7860: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
7870: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 0a  lock_proxy_file.
7880: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73    **   PRAGMA [s
7890: 63 68 65 6d 61 2e 5d 6c 6f 63 6b 5f 70 72 6f 78  chema.]lock_prox
78a0: 79 5f 66 69 6c 65 20 3d 20 22 3a 61 75 74 6f 3a  y_file = ":auto:
78b0: 22 7c 22 6c 6f 63 6b 5f 66 69 6c 65 5f 70 61 74  "|"lock_file_pat
78c0: 68 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  h".  **.  ** Ret
78d0: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 76  urn or set the v
78e0: 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 6f 63 6b  alue of the lock
78f0: 5f 70 72 6f 78 79 5f 66 69 6c 65 20 66 6c 61 67  _proxy_file flag
7900: 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a  .  Changing.  **
7910: 20 74 68 65 20 76 61 6c 75 65 20 73 65 74 73 20   the value sets 
7920: 61 20 73 70 65 63 69 66 69 63 20 66 69 6c 65 20  a specific file 
7930: 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64  to be used for d
7940: 61 74 61 62 61 73 65 20 61 63 63 65 73 73 20 6c  atabase access l
7950: 6f 63 6b 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a  ocks..  **.  */.
7960: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c    case PragTyp_L
7970: 4f 43 4b 5f 50 52 4f 58 59 5f 46 49 4c 45 3a 20  OCK_PROXY_FILE: 
7980: 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  {.    if( !zRigh
7990: 74 20 29 7b 0a 20 20 20 20 20 20 50 61 67 65 72  t ){.      Pager
79a0: 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74   *pPager = sqlit
79b0: 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62  e3BtreePager(pDb
79c0: 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 63 68  ->pBt);.      ch
79d0: 61 72 20 2a 70 72 6f 78 79 5f 66 69 6c 65 5f 70  ar *proxy_file_p
79e0: 61 74 68 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20  ath = NULL;.    
79f0: 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a    sqlite3_file *
7a00: 70 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50  pFile = sqlite3P
7a10: 61 67 65 72 46 69 6c 65 28 70 50 61 67 65 72 29  agerFile(pPager)
7a20: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f  ;.      sqlite3O
7a30: 73 46 69 6c 65 43 6f 6e 74 72 6f 6c 48 69 6e 74  sFileControlHint
7a40: 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 47  (pFile, SQLITE_G
7a50: 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45  ET_LOCKPROXYFILE
7a60: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 70                &p
7a80: 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b  roxy_file_path);
7a90: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
7aa0: 67 6c 65 54 65 78 74 28 76 2c 20 22 6c 6f 63 6b  gleText(v, "lock
7ab0: 5f 70 72 6f 78 79 5f 66 69 6c 65 22 2c 20 70 72  _proxy_file", pr
7ac0: 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a  oxy_file_path);.
7ad0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7ae0: 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d   Pager *pPager =
7af0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
7b00: 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20  er(pDb->pBt);.  
7b10: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65      sqlite3_file
7b20: 20 2a 70 46 69 6c 65 20 3d 20 73 71 6c 69 74 65   *pFile = sqlite
7b30: 33 50 61 67 65 72 46 69 6c 65 28 70 50 61 67 65  3PagerFile(pPage
7b40: 72 29 3b 0a 20 20 20 20 20 20 69 6e 74 20 72 65  r);.      int re
7b50: 73 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  s;.      if( zRi
7b60: 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ght[0] ){.      
7b70: 20 20 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46    res=sqlite3OsF
7b80: 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65  ileControl(pFile
7b90: 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43  , SQLITE_SET_LOC
7ba0: 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20  KPROXYFILE, .   
7bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bd0: 20 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20    zRight);.     
7be0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
7bf0: 20 20 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46    res=sqlite3OsF
7c00: 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65  ileControl(pFile
7c10: 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43  , SQLITE_SET_LOC
7c20: 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20  KPROXYFILE, .   
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c50: 20 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 7d    NULL);.      }
7c60: 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 21 3d  .      if( res!=
7c70: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
7c80: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
7c90: 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 66 61  rMsg(pParse, "fa
7ca0: 69 6c 65 64 20 74 6f 20 73 65 74 20 6c 6f 63 6b  iled to set lock
7cb0: 20 70 72 6f 78 79 20 66 69 6c 65 22 29 3b 0a 20   proxy file");. 
7cc0: 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67         goto prag
7cd0: 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  ma_out;.      }.
7ce0: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
7cf0: 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
7d00: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
7d10: 4b 49 4e 47 5f 53 54 59 4c 45 20 2a 2f 20 20 20  KING_STYLE */   
7d20: 20 20 20 0a 20 20 20 20 0a 20 20 2f 2a 0a 20 20     .    .  /*.  
7d30: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
7d40: 65 6d 61 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73  ema.]synchronous
7d50: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
7d60: 73 63 68 65 6d 61 2e 5d 73 79 6e 63 68 72 6f 6e  schema.]synchron
7d70: 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41  ous=OFF|ON|NORMA
7d80: 4c 7c 46 55 4c 4c 7c 45 58 54 52 41 0a 20 20 2a  L|FULL|EXTRA.  *
7d90: 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72  *.  ** Return or
7da0: 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76   set the local v
7db0: 61 6c 75 65 20 6f 66 20 74 68 65 20 73 79 6e 63  alue of the sync
7dc0: 68 72 6f 6e 6f 75 73 20 66 6c 61 67 2e 20 20 43  hronous flag.  C
7dd0: 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65  hanging.  ** the
7de0: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f 65   local value doe
7df0: 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67  s not make chang
7e00: 65 73 20 74 6f 20 74 68 65 20 64 69 73 6b 20 66  es to the disk f
7e10: 69 6c 65 20 61 6e 64 20 74 68 65 0a 20 20 2a 2a  ile and the.  **
7e20: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77   default value w
7e30: 69 6c 6c 20 62 65 20 72 65 73 74 6f 72 65 64 20  ill be restored 
7e40: 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20 74 68  the next time th
7e50: 65 20 64 61 74 61 62 61 73 65 20 69 73 0a 20 20  e database is.  
7e60: 2a 2a 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a  ** opened..  */.
7e70: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53    case PragTyp_S
7e80: 59 4e 43 48 52 4f 4e 4f 55 53 3a 20 7b 0a 20 20  YNCHRONOUS: {.  
7e90: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
7ea0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
7eb0: 67 6c 65 49 6e 74 28 76 2c 20 22 73 79 6e 63 68  gleInt(v, "synch
7ec0: 72 6f 6e 6f 75 73 22 2c 20 70 44 62 2d 3e 73 61  ronous", pDb->sa
7ed0: 66 65 74 79 5f 6c 65 76 65 6c 2d 31 29 3b 0a 20  fety_level-1);. 
7ee0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
7ef0: 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d  if( !db->autoCom
7f00: 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 73  mit ){.        s
7f10: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
7f20: 50 61 72 73 65 2c 20 0a 20 20 20 20 20 20 20 20  Parse, .        
7f30: 20 20 20 20 22 53 61 66 65 74 79 20 6c 65 76 65      "Safety leve
7f40: 6c 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 68 61  l may not be cha
7f50: 6e 67 65 64 20 69 6e 73 69 64 65 20 61 20 74 72  nged inside a tr
7f60: 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20  ansaction");.   
7f70: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
7f80: 20 20 69 6e 74 20 69 4c 65 76 65 6c 20 3d 20 28    int iLevel = (
7f90: 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a  getSafetyLevel(z
7fa0: 52 69 67 68 74 2c 30 2c 31 29 2b 31 29 20 26 20  Right,0,1)+1) & 
7fb0: 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55  PAGER_SYNCHRONOU
7fc0: 53 5f 4d 41 53 4b 3b 0a 20 20 20 20 20 20 20 20  S_MASK;.        
7fd0: 69 66 28 20 69 4c 65 76 65 6c 3d 3d 30 20 29 20  if( iLevel==0 ) 
7fe0: 69 4c 65 76 65 6c 20 3d 20 31 3b 0a 20 20 20 20  iLevel = 1;.    
7ff0: 20 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f      pDb->safety_
8000: 6c 65 76 65 6c 20 3d 20 69 4c 65 76 65 6c 3b 0a  level = iLevel;.
8010: 20 20 20 20 20 20 20 20 70 44 62 2d 3e 62 53 79          pDb->bSy
8020: 6e 63 53 65 74 20 3d 20 31 3b 0a 20 20 20 20 20  ncSet = 1;.     
8030: 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c     setAllPagerFl
8040: 61 67 73 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  ags(db);.      }
8050: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
8060: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
8070: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
8080: 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  R_PRAGMAS */..#i
8090: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
80a0: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a 20  T_FLAG_PRAGMAS. 
80b0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4c   case PragTyp_FL
80c0: 41 47 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  AG: {.    if( zR
80d0: 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ight==0 ){.     
80e0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
80f0: 28 76 2c 20 70 50 72 61 67 6d 61 2d 3e 7a 4e 61  (v, pPragma->zNa
8100: 6d 65 2c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  me, (db->flags &
8110: 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 29 21   pPragma->iArg)!
8120: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
8130: 0a 20 20 20 20 20 20 69 6e 74 20 6d 61 73 6b 20  .      int mask 
8140: 3d 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 3b  = pPragma->iArg;
8150: 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 62      /* Mask of b
8160: 69 74 73 20 74 6f 20 73 65 74 20 6f 72 20 63 6c  its to set or cl
8170: 65 61 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66  ear. */.      if
8180: 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
8190: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ==0 ){.        /
81a0: 2a 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 73 75  * Foreign key su
81b0: 70 70 6f 72 74 20 6d 61 79 20 6e 6f 74 20 62 65  pport may not be
81c0: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
81d0: 62 6c 65 64 20 77 68 69 6c 65 20 6e 6f 74 0a 20  bled while not. 
81e0: 20 20 20 20 20 20 20 2a 2a 20 69 6e 20 61 75 74         ** in aut
81f0: 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20 20  o-commit mode.  
8200: 2a 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20  */.        mask 
8210: 26 3d 20 7e 28 53 51 4c 49 54 45 5f 46 6f 72 65  &= ~(SQLITE_Fore
8220: 69 67 6e 4b 65 79 73 29 3b 0a 20 20 20 20 20 20  ignKeys);.      
8230: 7d 0a 23 69 66 20 53 51 4c 49 54 45 5f 55 53 45  }.#if SQLITE_USE
8240: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
8250: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61  .      if( db->a
8260: 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 3d 3d 55  uth.authLevel==U
8270: 41 55 54 48 5f 55 73 65 72 20 29 7b 0a 20 20 20  AUTH_User ){.   
8280: 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61       /* Do not a
8290: 6c 6c 6f 77 20 6e 6f 6e 2d 61 64 6d 69 6e 20 75  llow non-admin u
82a0: 73 65 72 73 20 74 6f 20 6d 6f 64 69 66 79 20 74  sers to modify t
82b0: 68 65 20 73 63 68 65 6d 61 20 61 72 62 69 74 72  he schema arbitr
82c0: 61 72 69 6c 79 20 2a 2f 0a 20 20 20 20 20 20 20  arily */.       
82d0: 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54   mask &= ~(SQLIT
82e0: 45 5f 57 72 69 74 65 53 63 68 65 6d 61 29 3b 0a  E_WriteSchema);.
82f0: 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a        }.#endif..
8300: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
8310: 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67  3GetBoolean(zRig
8320: 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20  ht, 0) ){.      
8330: 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 6d    db->flags |= m
8340: 61 73 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ask;.      }else
8350: 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c  {.        db->fl
8360: 61 67 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a 20 20  ags &= ~mask;.  
8370: 20 20 20 20 20 20 69 66 28 20 6d 61 73 6b 3d 3d        if( mask==
8380: 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20  SQLITE_DeferFKs 
8390: 29 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  ) db->nDeferredI
83a0: 6d 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20 20 20 20  mmCons = 0;.    
83b0: 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61    }..      /* Ma
83c0: 6e 79 20 6f 66 20 74 68 65 20 66 6c 61 67 2d 70  ny of the flag-p
83d0: 72 61 67 6d 61 73 20 6d 6f 64 69 66 79 20 74 68  ragmas modify th
83e0: 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 65 64  e code generated
83f0: 20 62 79 20 74 68 65 20 53 51 4c 20 0a 20 20 20   by the SQL .   
8400: 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 28     ** compiler (
8410: 65 67 2e 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65  eg. count_change
8420: 73 29 2e 20 53 6f 20 61 64 64 20 61 6e 20 6f 70  s). So add an op
8430: 63 6f 64 65 20 74 6f 20 65 78 70 69 72 65 20 61  code to expire a
8440: 6c 6c 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70  ll.      ** comp
8450: 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65  iled SQL stateme
8460: 6e 74 73 20 61 66 74 65 72 20 6d 6f 64 69 66 79  nts after modify
8470: 69 6e 67 20 61 20 70 72 61 67 6d 61 20 76 61 6c  ing a pragma val
8480: 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ue..      */.   
8490: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
84a0: 64 4f 70 30 28 76 2c 20 4f 50 5f 45 78 70 69 72  dOp0(v, OP_Expir
84b0: 65 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c  e);.      setAll
84c0: 50 61 67 65 72 46 6c 61 67 73 28 64 62 29 3b 0a  PagerFlags(db);.
84d0: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
84e0: 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
84f0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f  QLITE_OMIT_FLAG_
8500: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e  PRAGMAS */..#ifn
8510: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
8520: 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20  SCHEMA_PRAGMAS. 
8530: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
8540: 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 3c 74 61  A table_info(<ta
8550: 62 6c 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ble>).  **.  ** 
8560: 52 65 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20  Return a single 
8570: 72 6f 77 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  row for each col
8580: 75 6d 6e 20 6f 66 20 74 68 65 20 6e 61 6d 65 64  umn of the named
8590: 20 74 61 62 6c 65 2e 20 54 68 65 20 63 6f 6c 75   table. The colu
85a0: 6d 6e 73 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20  mns of.  ** the 
85b0: 72 65 74 75 72 6e 65 64 20 64 61 74 61 20 73 65  returned data se
85c0: 74 20 61 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a  t are:.  **.  **
85d0: 20 63 69 64 3a 20 20 20 20 20 20 20 20 43 6f 6c   cid:        Col
85e0: 75 6d 6e 20 69 64 20 28 6e 75 6d 62 65 72 65 64  umn id (numbered
85f0: 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
8600: 67 68 74 2c 20 73 74 61 72 74 69 6e 67 20 61 74  ght, starting at
8610: 20 30 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20 20   0).  ** name:  
8620: 20 20 20 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65       Column name
8630: 0a 20 20 2a 2a 20 74 79 70 65 3a 20 20 20 20 20  .  ** type:     
8640: 20 20 43 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61    Column declara
8650: 74 69 6f 6e 20 74 79 70 65 2e 0a 20 20 2a 2a 20  tion type..  ** 
8660: 6e 6f 74 6e 75 6c 6c 3a 20 20 20 20 54 72 75 65  notnull:    True
8670: 20 69 66 20 27 4e 4f 54 20 4e 55 4c 4c 27 20 69   if 'NOT NULL' i
8680: 73 20 70 61 72 74 20 6f 66 20 63 6f 6c 75 6d 6e  s part of column
8690: 20 64 65 63 6c 61 72 61 74 69 6f 6e 0a 20 20 2a   declaration.  *
86a0: 2a 20 64 66 6c 74 5f 76 61 6c 75 65 3a 20 54 68  * dflt_value: Th
86b0: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
86c0: 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20  for the column, 
86d0: 69 66 20 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20 63  if any..  */.  c
86e0: 61 73 65 20 50 72 61 67 54 79 70 5f 54 41 42 4c  ase PragTyp_TABL
86f0: 45 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67  E_INFO: if( zRig
8700: 68 74 20 29 7b 0a 20 20 20 20 54 61 62 6c 65 20  ht ){.    Table 
8710: 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20  *pTab;.    pTab 
8720: 3d 20 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54  = sqlite3LocateT
8730: 61 62 6c 65 28 70 50 61 72 73 65 2c 20 4c 4f 43  able(pParse, LOC
8740: 41 54 45 5f 4e 4f 45 52 52 2c 20 7a 52 69 67 68  ATE_NOERR, zRigh
8750: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28  t, zDb);.    if(
8760: 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 73   pTab ){.      s
8770: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
8780: 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20   *azCol[] = {.  
8790: 20 20 20 20 20 20 20 22 63 69 64 22 2c 20 22 6e         "cid", "n
87a0: 61 6d 65 22 2c 20 22 74 79 70 65 22 2c 20 22 6e  ame", "type", "n
87b0: 6f 74 6e 75 6c 6c 22 2c 20 22 64 66 6c 74 5f 76  otnull", "dflt_v
87c0: 61 6c 75 65 22 2c 20 22 70 6b 22 0a 20 20 20 20  alue", "pk".    
87d0: 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 69    };.      int i
87e0: 2c 20 6b 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e  , k;.      int n
87f0: 48 69 64 64 65 6e 20 3d 20 30 3b 0a 20 20 20 20  Hidden = 0;.    
8800: 20 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a    Column *pCol;.
8810: 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50 6b        Index *pPk
8820: 20 3d 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72   = sqlite3Primar
8830: 79 4b 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b  yKeyIndex(pTab);
8840: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
8850: 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20 73  Mem = 6;.      s
8860: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
8870: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
8880: 44 62 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c  Db);.      setAl
8890: 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20  lColumnNames(v, 
88a0: 36 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72  6, azCol); asser
88b0: 74 28 20 36 3d 3d 41 72 72 61 79 53 69 7a 65 28  t( 6==ArraySize(
88c0: 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 20 20  azCol) );.      
88d0: 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
88e0: 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73 65  lumnNames(pParse
88f0: 2c 20 70 54 61 62 29 3b 0a 20 20 20 20 20 20 66  , pTab);.      f
8900: 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d 70 54 61  or(i=0, pCol=pTa
8910: 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54 61 62 2d  b->aCol; i<pTab-
8920: 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c  >nCol; i++, pCol
8930: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
8940: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
8950: 70 43 6f 6c 29 20 29 7b 0a 20 20 20 20 20 20 20  pCol) ){.       
8960: 20 20 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a 20 20     nHidden++;.  
8970: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
8980: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
8990: 20 20 20 20 69 66 28 20 28 70 43 6f 6c 2d 3e 63      if( (pCol->c
89a0: 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
89b0: 47 5f 50 52 49 4d 4b 45 59 29 3d 3d 30 20 29 7b  G_PRIMKEY)==0 ){
89c0: 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30  .          k = 0
89d0: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
89e0: 69 66 28 20 70 50 6b 3d 3d 30 20 29 7b 0a 20 20  if( pPk==0 ){.  
89f0: 20 20 20 20 20 20 20 20 6b 20 3d 20 31 3b 0a 20          k = 1;. 
8a00: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
8a10: 20 20 20 20 20 20 20 20 66 6f 72 28 6b 3d 31 3b          for(k=1;
8a20: 20 6b 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c 20 26   k<=pTab->nCol &
8a30: 26 20 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d 6e 5b  & pPk->aiColumn[
8a40: 6b 2d 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a  k-1]!=i; k++){}.
8a50: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
8a60: 20 20 61 73 73 65 72 74 28 20 70 43 6f 6c 2d 3e    assert( pCol->
8a70: 70 44 66 6c 74 3d 3d 30 20 7c 7c 20 70 43 6f 6c  pDflt==0 || pCol
8a80: 2d 3e 70 44 66 6c 74 2d 3e 6f 70 3d 3d 54 4b 5f  ->pDflt->op==TK_
8a90: 53 50 41 4e 20 29 3b 0a 20 20 20 20 20 20 20 20  SPAN );.        
8aa0: 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69  sqlite3VdbeMulti
8ab0: 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69 73 73 69  Load(v, 1, "issi
8ac0: 73 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  si",.           
8ad0: 20 20 20 20 69 2d 6e 48 69 64 64 65 6e 2c 0a 20      i-nHidden,. 
8ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43                pC
8af0: 6f 6c 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20  ol->zName,.     
8b00: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
8b10: 33 43 6f 6c 75 6d 6e 54 79 70 65 28 70 43 6f 6c  3ColumnType(pCol
8b20: 2c 22 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20  ,""),.          
8b30: 20 20 20 20 20 70 43 6f 6c 2d 3e 6e 6f 74 4e 75       pCol->notNu
8b40: 6c 6c 20 3f 20 31 20 3a 20 30 2c 0a 20 20 20 20  ll ? 1 : 0,.    
8b50: 20 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c 2d             pCol-
8b60: 3e 70 44 66 6c 74 20 3f 20 70 43 6f 6c 2d 3e 70  >pDflt ? pCol->p
8b70: 44 66 6c 74 2d 3e 75 2e 7a 54 6f 6b 65 6e 20 3a  Dflt->u.zToken :
8b80: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   0,.            
8b90: 20 20 20 6b 29 3b 0a 20 20 20 20 20 20 20 20 73     k);.        s
8ba0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
8bb0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
8bc0: 2c 20 31 2c 20 36 29 3b 0a 20 20 20 20 20 20 7d  , 1, 6);.      }
8bd0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
8be0: 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67  ak;..  case Prag
8bf0: 54 79 70 5f 53 54 41 54 53 3a 20 7b 0a 20 20 20  Typ_STATS: {.   
8c00: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
8c10: 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20  ar *azCol[] = { 
8c20: 22 74 61 62 6c 65 22 2c 20 22 69 6e 64 65 78 22  "table", "index"
8c30: 2c 20 22 77 69 64 74 68 22 2c 20 22 68 65 69 67  , "width", "heig
8c40: 68 74 22 20 7d 3b 0a 20 20 20 20 49 6e 64 65 78  ht" };.    Index
8c50: 20 2a 70 49 64 78 3b 0a 20 20 20 20 48 61 73 68   *pIdx;.    Hash
8c60: 45 6c 65 6d 20 2a 69 3b 0a 20 20 20 20 76 20 3d  Elem *i;.    v =
8c70: 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28   sqlite3GetVdbe(
8c80: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 70 50 61  pParse);.    pPa
8c90: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 34 3b 0a 20  rse->nMem = 4;. 
8ca0: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
8cb0: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
8cc0: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 65 74  e, iDb);.    set
8cd0: 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76  AllColumnNames(v
8ce0: 2c 20 34 2c 20 61 7a 43 6f 6c 29 3b 20 20 61 73  , 4, azCol);  as
8cf0: 73 65 72 74 28 20 34 3d 3d 41 72 72 61 79 53 69  sert( 4==ArraySi
8d00: 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20  ze(azCol) );.   
8d10: 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48 61 73   for(i=sqliteHas
8d20: 68 46 69 72 73 74 28 26 70 44 62 2d 3e 70 53 63  hFirst(&pDb->pSc
8d30: 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 20  hema->tblHash); 
8d40: 69 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e  i; i=sqliteHashN
8d50: 65 78 74 28 69 29 29 7b 0a 20 20 20 20 20 20 54  ext(i)){.      T
8d60: 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c  able *pTab = sql
8d70: 69 74 65 48 61 73 68 44 61 74 61 28 69 29 3b 0a  iteHashData(i);.
8d80: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8d90: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c  eMultiLoad(v, 1,
8da0: 20 22 73 73 69 69 22 2c 0a 20 20 20 20 20 20 20   "ssii",.       
8db0: 20 20 20 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c      pTab->zName,
8dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 30 2c 0a 20  .           0,. 
8dd0: 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e            pTab->
8de0: 73 7a 54 61 62 52 6f 77 2c 0a 20 20 20 20 20 20  szTabRow,.      
8df0: 20 20 20 20 20 70 54 61 62 2d 3e 6e 52 6f 77 4c       pTab->nRowL
8e00: 6f 67 45 73 74 29 3b 0a 20 20 20 20 20 20 73 71  ogEst);.      sq
8e10: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
8e20: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
8e30: 20 31 2c 20 34 29 3b 0a 20 20 20 20 20 20 66 6f   1, 4);.      fo
8e40: 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e  r(pIdx=pTab->pIn
8e50: 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d  dex; pIdx; pIdx=
8e60: 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20  pIdx->pNext){.  
8e70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8e80: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 32 2c  eMultiLoad(v, 2,
8e90: 20 22 73 69 69 22 2c 0a 20 20 20 20 20 20 20 20   "sii",.        
8ea0: 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 0a     pIdx->zName,.
8eb0: 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d             pIdx-
8ec0: 3e 73 7a 49 64 78 52 6f 77 2c 0a 20 20 20 20 20  >szIdxRow,.     
8ed0: 20 20 20 20 20 20 70 49 64 78 2d 3e 61 69 52 6f        pIdx->aiRo
8ee0: 77 4c 6f 67 45 73 74 5b 30 5d 29 3b 0a 20 20 20  wLogEst[0]);.   
8ef0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8f00: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
8f10: 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20  ultRow, 1, 4);. 
8f20: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
8f30: 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73  .  break;..  cas
8f40: 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f  e PragTyp_INDEX_
8f50: 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74  INFO: if( zRight
8f60: 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   ){.    Index *p
8f70: 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  Idx;.    Table *
8f80: 70 54 61 62 3b 0a 20 20 20 20 70 49 64 78 20 3d  pTab;.    pIdx =
8f90: 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65   sqlite3FindInde
8fa0: 78 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  x(db, zRight, zD
8fb0: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78  b);.    if( pIdx
8fc0: 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63   ){.      static
8fd0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43   const char *azC
8fe0: 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20  ol[] = {.       
8ff0: 20 20 22 73 65 71 6e 6f 22 2c 20 22 63 69 64 22    "seqno", "cid"
9000: 2c 20 22 6e 61 6d 65 22 2c 20 22 64 65 73 63 22  , "name", "desc"
9010: 2c 20 22 63 6f 6c 6c 22 2c 20 22 6b 65 79 22 0a  , "coll", "key".
9020: 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69        };.      i
9030: 6e 74 20 69 3b 0a 20 20 20 20 20 20 69 6e 74 20  nt i;.      int 
9040: 6d 78 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50  mx;.      if( pP
9050: 72 61 67 6d 61 2d 3e 69 41 72 67 20 29 7b 0a 20  ragma->iArg ){. 
9060: 20 20 20 20 20 20 20 2f 2a 20 50 52 41 47 4d 41         /* PRAGMA
9070: 20 69 6e 64 65 78 5f 78 69 6e 66 6f 20 28 6e 65   index_xinfo (ne
9080: 77 65 72 20 76 65 72 73 69 6f 6e 20 77 69 74 68  wer version with
9090: 20 6d 6f 72 65 20 72 6f 77 73 20 61 6e 64 20 63   more rows and c
90a0: 6f 6c 75 6d 6e 73 29 20 2a 2f 0a 20 20 20 20 20  olumns) */.     
90b0: 20 20 20 6d 78 20 3d 20 70 49 64 78 2d 3e 6e 43     mx = pIdx->nC
90c0: 6f 6c 75 6d 6e 3b 0a 20 20 20 20 20 20 20 20 70  olumn;.        p
90d0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b  Parse->nMem = 6;
90e0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
90f0: 20 20 20 20 20 20 2f 2a 20 50 52 41 47 4d 41 20        /* PRAGMA 
9100: 69 6e 64 65 78 5f 69 6e 66 6f 20 28 6c 65 67 61  index_info (lega
9110: 63 79 20 76 65 72 73 69 6f 6e 29 20 2a 2f 0a 20  cy version) */. 
9120: 20 20 20 20 20 20 20 6d 78 20 3d 20 70 49 64 78         mx = pIdx
9130: 2d 3e 6e 4b 65 79 43 6f 6c 3b 0a 20 20 20 20 20  ->nKeyCol;.     
9140: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
9150: 3d 20 33 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 3;.      }.   
9160: 20 20 20 70 54 61 62 20 3d 20 70 49 64 78 2d 3e     pTab = pIdx->
9170: 70 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 73 71  pTable;.      sq
9180: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
9190: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
91a0: 62 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  b);.      assert
91b0: 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3c 3d  ( pParse->nMem<=
91c0: 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29  ArraySize(azCol)
91d0: 20 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c   );.      setAll
91e0: 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 70  ColumnNames(v, p
91f0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 61 7a 43  Parse->nMem, azC
9200: 6f 6c 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  ol);.      for(i
9210: 3d 30 3b 20 69 3c 6d 78 3b 20 69 2b 2b 29 7b 0a  =0; i<mx; i++){.
9220: 20 20 20 20 20 20 20 20 69 31 36 20 63 6e 75 6d          i16 cnum
9230: 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d   = pIdx->aiColum
9240: 6e 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 73 71  n[i];.        sq
9250: 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f  lite3VdbeMultiLo
9260: 61 64 28 76 2c 20 31 2c 20 22 69 69 73 22 2c 20  ad(v, 1, "iis", 
9270: 69 2c 20 63 6e 75 6d 2c 0a 20 20 20 20 20 20 20  i, cnum,.       
9280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9290: 20 20 20 20 20 20 63 6e 75 6d 3c 30 20 3f 20 30        cnum<0 ? 0
92a0: 20 3a 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e   : pTab->aCol[cn
92b0: 75 6d 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  um].zName);.    
92c0: 20 20 20 20 69 66 28 20 70 50 72 61 67 6d 61 2d      if( pPragma-
92d0: 3e 69 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20  >iArg ){.       
92e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75     sqlite3VdbeMu
92f0: 6c 74 69 4c 6f 61 64 28 76 2c 20 34 2c 20 22 69  ltiLoad(v, 4, "i
9300: 73 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  si",.           
9310: 20 70 49 64 78 2d 3e 61 53 6f 72 74 4f 72 64 65   pIdx->aSortOrde
9320: 72 5b 69 5d 2c 0a 20 20 20 20 20 20 20 20 20 20  r[i],.          
9330: 20 20 70 49 64 78 2d 3e 61 7a 43 6f 6c 6c 5b 69    pIdx->azColl[i
9340: 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ],.            i
9350: 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b  <pIdx->nKeyCol);
9360: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
9370: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9380: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
9390: 74 52 6f 77 2c 20 31 2c 20 70 50 61 72 73 65 2d  tRow, 1, pParse-
93a0: 3e 6e 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a  >nMem);.      }.
93b0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
93c0: 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54  k;..  case PragT
93d0: 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54 3a 20 69  yp_INDEX_LIST: i
93e0: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
93f0: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20   Index *pIdx;.  
9400: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
9410: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 54     int i;.    pT
9420: 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  ab = sqlite3Find
9430: 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74  Table(db, zRight
9440: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20  , zDb);.    if( 
9450: 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 73 74  pTab ){.      st
9460: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
9470: 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20  *azCol[] = {.   
9480: 20 20 20 20 20 22 73 65 71 22 2c 20 22 6e 61 6d       "seq", "nam
9490: 65 22 2c 20 22 75 6e 69 71 75 65 22 2c 20 22 6f  e", "unique", "o
94a0: 72 69 67 69 6e 22 2c 20 22 70 61 72 74 69 61 6c  rigin", "partial
94b0: 22 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20  ".      };.     
94c0: 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56   v = sqlite3GetV
94d0: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20  dbe(pParse);.   
94e0: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
94f0: 3d 20 35 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  = 5;.      sqlit
9500: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
9510: 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b  ma(pParse, iDb);
9520: 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c  .      setAllCol
9530: 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 35 2c 20 61  umnNames(v, 5, a
9540: 7a 43 6f 6c 29 3b 20 20 61 73 73 65 72 74 28 20  zCol);  assert( 
9550: 35 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43  5==ArraySize(azC
9560: 6f 6c 29 20 29 3b 0a 20 20 20 20 20 20 66 6f 72  ol) );.      for
9570: 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64  (pIdx=pTab->pInd
9580: 65 78 2c 20 69 3d 30 3b 20 70 49 64 78 3b 20 70  ex, i=0; pIdx; p
9590: 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c  Idx=pIdx->pNext,
95a0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 63   i++){.        c
95b0: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 4f 72 69  onst char *azOri
95c0: 67 69 6e 5b 5d 20 3d 20 7b 20 22 63 22 2c 20 22  gin[] = { "c", "
95d0: 75 22 2c 20 22 70 6b 22 20 7d 3b 0a 20 20 20 20  u", "pk" };.    
95e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
95f0: 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22  ultiLoad(v, 1, "
9600: 69 73 69 73 69 22 2c 0a 20 20 20 20 20 20 20 20  isisi",.        
9610: 20 20 20 69 2c 0a 20 20 20 20 20 20 20 20 20 20     i,.          
9620: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 0a 20 20   pIdx->zName,.  
9630: 20 20 20 20 20 20 20 20 20 49 73 55 6e 69 71 75           IsUniqu
9640: 65 49 6e 64 65 78 28 70 49 64 78 29 2c 0a 20 20  eIndex(pIdx),.  
9650: 20 20 20 20 20 20 20 20 20 61 7a 4f 72 69 67 69           azOrigi
9660: 6e 5b 70 49 64 78 2d 3e 69 64 78 54 79 70 65 5d  n[pIdx->idxType]
9670: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 49 64  ,.           pId
9680: 78 2d 3e 70 50 61 72 74 49 64 78 57 68 65 72 65  x->pPartIdxWhere
9690: 21 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  !=0);.        sq
96a0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
96b0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
96c0: 20 31 2c 20 35 29 3b 0a 20 20 20 20 20 20 7d 0a   1, 5);.      }.
96d0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
96e0: 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54  k;..  case PragT
96f0: 79 70 5f 44 41 54 41 42 41 53 45 5f 4c 49 53 54  yp_DATABASE_LIST
9700: 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
9710: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c  onst char *azCol
9720: 5b 5d 20 3d 20 7b 20 22 73 65 71 22 2c 20 22 6e  [] = { "seq", "n
9730: 61 6d 65 22 2c 20 22 66 69 6c 65 22 20 7d 3b 0a  ame", "file" };.
9740: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70      int i;.    p
9750: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b  Parse->nMem = 3;
9760: 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d  .    setAllColum
9770: 6e 4e 61 6d 65 73 28 76 2c 20 33 2c 20 61 7a 43  nNames(v, 3, azC
9780: 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 33 3d 3d  ol); assert( 3==
9790: 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29  ArraySize(azCol)
97a0: 20 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   );.    for(i=0;
97b0: 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
97c0: 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  {.      if( db->
97d0: 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30 20 29 20  aDb[i].pBt==0 ) 
97e0: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
97f0: 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b  assert( db->aDb[
9800: 69 5d 2e 7a 44 62 53 4e 61 6d 65 21 3d 30 20 29  i].zDbSName!=0 )
9810: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
9820: 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20  dbeMultiLoad(v, 
9830: 31 2c 20 22 69 73 73 22 2c 0a 20 20 20 20 20 20  1, "iss",.      
9840: 20 20 20 69 2c 0a 20 20 20 20 20 20 20 20 20 64     i,.         d
9850: 62 2d 3e 61 44 62 5b 69 5d 2e 7a 44 62 53 4e 61  b->aDb[i].zDbSNa
9860: 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 73 71 6c  me,.         sql
9870: 69 74 65 33 42 74 72 65 65 47 65 74 46 69 6c 65  ite3BtreeGetFile
9880: 6e 61 6d 65 28 64 62 2d 3e 61 44 62 5b 69 5d 2e  name(db->aDb[i].
9890: 70 42 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c  pBt));.      sql
98a0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
98b0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
98c0: 31 2c 20 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  1, 3);.    }.  }
98d0: 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73  .  break;..  cas
98e0: 65 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c 41 54  e PragTyp_COLLAT
98f0: 49 4f 4e 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20  ION_LIST: {.    
9900: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
9910: 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22  r *azCol[] = { "
9920: 73 65 71 22 2c 20 22 6e 61 6d 65 22 20 7d 3b 0a  seq", "name" };.
9930: 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20      int i = 0;. 
9940: 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 70 3b 0a     HashElem *p;.
9950: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
9960: 20 3d 20 32 3b 0a 20 20 20 20 73 65 74 41 6c 6c   = 2;.    setAll
9970: 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 32  ColumnNames(v, 2
9980: 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74  , azCol); assert
9990: 28 20 32 3d 3d 41 72 72 61 79 53 69 7a 65 28 61  ( 2==ArraySize(a
99a0: 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 66 6f 72  zCol) );.    for
99b0: 28 70 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72  (p=sqliteHashFir
99c0: 73 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71  st(&db->aCollSeq
99d0: 29 3b 20 70 3b 20 70 3d 73 71 6c 69 74 65 48 61  ); p; p=sqliteHa
99e0: 73 68 4e 65 78 74 28 70 29 29 7b 0a 20 20 20 20  shNext(p)){.    
99f0: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
9a00: 20 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71   = (CollSeq *)sq
9a10: 6c 69 74 65 48 61 73 68 44 61 74 61 28 70 29 3b  liteHashData(p);
9a20: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
9a30: 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31  beMultiLoad(v, 1
9a40: 2c 20 22 69 73 22 2c 20 69 2b 2b 2c 20 70 43 6f  , "is", i++, pCo
9a50: 6c 6c 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  ll->zName);.    
9a60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9a70: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
9a80: 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20  Row, 1, 2);.    
9a90: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  }.  }.  break;.#
9aa0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
9ab0: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47  OMIT_SCHEMA_PRAG
9ac0: 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
9ad0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
9ae0: 49 47 4e 5f 4b 45 59 0a 20 20 63 61 73 65 20 50  IGN_KEY.  case P
9af0: 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b  ragTyp_FOREIGN_K
9b00: 45 59 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52 69  EY_LIST: if( zRi
9b10: 67 68 74 20 29 7b 0a 20 20 20 20 46 4b 65 79 20  ght ){.    FKey 
9b20: 2a 70 46 4b 3b 0a 20 20 20 20 54 61 62 6c 65 20  *pFK;.    Table 
9b30: 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20  *pTab;.    pTab 
9b40: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62  = sqlite3FindTab
9b50: 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a  le(db, zRight, z
9b60: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61  Db);.    if( pTa
9b70: 62 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73  b ){.      v = s
9b80: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
9b90: 61 72 73 65 29 3b 0a 20 20 20 20 20 20 70 46 4b  arse);.      pFK
9ba0: 20 3d 20 70 54 61 62 2d 3e 70 46 4b 65 79 3b 0a   = pTab->pFKey;.
9bb0: 20 20 20 20 20 20 69 66 28 20 70 46 4b 20 29 7b        if( pFK ){
9bc0: 0a 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20  .        static 
9bd0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f  const char *azCo
9be0: 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20  l[] = {.        
9bf0: 20 20 20 22 69 64 22 2c 20 22 73 65 71 22 2c 20     "id", "seq", 
9c00: 22 74 61 62 6c 65 22 2c 20 22 66 72 6f 6d 22 2c  "table", "from",
9c10: 20 22 74 6f 22 2c 20 22 6f 6e 5f 75 70 64 61 74   "to", "on_updat
9c20: 65 22 2c 20 22 6f 6e 5f 64 65 6c 65 74 65 22 2c  e", "on_delete",
9c30: 0a 20 20 20 20 20 20 20 20 20 20 20 22 6d 61 74  .           "mat
9c40: 63 68 22 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20  ch".        };. 
9c50: 20 20 20 20 20 20 20 69 6e 74 20 69 20 3d 20 30         int i = 0
9c60: 3b 20 0a 20 20 20 20 20 20 20 20 70 50 61 72 73  ; .        pPars
9c70: 65 2d 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20 20  e->nMem = 8;.   
9c80: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65       sqlite3Code
9c90: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
9ca0: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  rse, iDb);.     
9cb0: 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e     setAllColumnN
9cc0: 61 6d 65 73 28 76 2c 20 38 2c 20 61 7a 43 6f 6c  ames(v, 8, azCol
9cd0: 29 3b 20 61 73 73 65 72 74 28 20 38 3d 3d 41 72  ); assert( 8==Ar
9ce0: 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29  raySize(azCol) )
9cf0: 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28  ;.        while(
9d00: 70 46 4b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  pFK){.          
9d10: 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 20 20 20  int j;.         
9d20: 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d   for(j=0; j<pFK-
9d30: 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20  >nCol; j++){.   
9d40: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
9d50: 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c  VdbeMultiLoad(v,
9d60: 20 31 2c 20 22 69 69 73 73 73 73 73 73 22 2c 0a   1, "iissssss",.
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d80: 20 20 20 69 2c 0a 20 20 20 20 20 20 20 20 20 20     i,.          
9d90: 20 20 20 20 20 20 20 20 20 6a 2c 0a 20 20 20 20           j,.    
9da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
9db0: 46 4b 2d 3e 7a 54 6f 2c 0a 20 20 20 20 20 20 20  FK->zTo,.       
9dc0: 20 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62              pTab
9dd0: 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c  ->aCol[pFK->aCol
9de0: 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65  [j].iFrom].zName
9df0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
9e00: 20 20 20 20 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a       pFK->aCol[j
9e10: 5d 2e 7a 43 6f 6c 2c 0a 20 20 20 20 20 20 20 20  ].zCol,.        
9e20: 20 20 20 20 20 20 20 20 20 20 20 61 63 74 69 6f             actio
9e30: 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69  nName(pFK->aActi
9e40: 6f 6e 5b 31 5d 29 2c 20 20 2f 2a 20 4f 4e 20 55  on[1]),  /* ON U
9e50: 50 44 41 54 45 20 2a 2f 0a 20 20 20 20 20 20 20  PDATE */.       
9e60: 20 20 20 20 20 20 20 20 20 20 20 20 61 63 74 69              acti
9e70: 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74  onName(pFK->aAct
9e80: 69 6f 6e 5b 30 5d 29 2c 20 20 2f 2a 20 4f 4e 20  ion[0]),  /* ON 
9e90: 44 45 4c 45 54 45 20 2a 2f 0a 20 20 20 20 20 20  DELETE */.      
9ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 4f               "NO
9eb0: 4e 45 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  NE");.          
9ec0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9ed0: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
9ee0: 52 6f 77 2c 20 31 2c 20 38 29 3b 0a 20 20 20 20  Row, 1, 8);.    
9ef0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
9f00: 20 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20 20    ++i;.         
9f10: 20 70 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65 78   pFK = pFK->pNex
9f20: 74 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20 7d  tFrom;.        }
9f30: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
9f40: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
9f50: 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
9f60: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
9f70: 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e  GN_KEY) */..#ifn
9f80: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
9f90: 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 23 69 66 6e  FOREIGN_KEY.#ifn
9fa0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
9fb0: 54 52 49 47 47 45 52 0a 20 20 63 61 73 65 20 50  TRIGGER.  case P
9fc0: 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b  ragTyp_FOREIGN_K
9fd0: 45 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20  EY_CHECK: {.    
9fe0: 46 4b 65 79 20 2a 70 46 4b 3b 20 20 20 20 20 20  FKey *pFK;      
9ff0: 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6f 72 65         /* A fore
a000: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
a010: 6e 74 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  nt */.    Table 
a020: 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
a030: 20 2f 2a 20 43 68 69 6c 64 20 74 61 62 6c 65 20   /* Child table 
a040: 63 6f 6e 74 61 69 6e 20 22 52 45 46 45 52 45 4e  contain "REFEREN
a050: 43 45 53 22 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  CES" keyword */.
a060: 20 20 20 20 54 61 62 6c 65 20 2a 70 50 61 72 65      Table *pPare
a070: 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 61  nt;        /* Pa
a080: 72 65 6e 74 20 74 61 62 6c 65 20 74 68 61 74 20  rent table that 
a090: 63 68 69 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20  child points to 
a0a0: 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  */.    Index *pI
a0b0: 64 78 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  dx;           /*
a0c0: 20 49 6e 64 65 78 20 69 6e 20 74 68 65 20 70 61   Index in the pa
a0d0: 72 65 6e 74 20 74 61 62 6c 65 20 2a 2f 0a 20 20  rent table */.  
a0e0: 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
a0f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
a100: 20 63 6f 75 6e 74 65 72 3a 20 20 46 6f 72 65 69   counter:  Forei
a110: 67 6e 20 6b 65 79 20 6e 75 6d 62 65 72 20 66 6f  gn key number fo
a120: 72 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e  r pTab */.    in
a130: 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20  t j;            
a140: 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
a150: 6e 74 65 72 3a 20 20 46 69 65 6c 64 20 6f 66 20  nter:  Field of 
a160: 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
a170: 2a 2f 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20  */.    HashElem 
a180: 2a 6b 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  *k;           /*
a190: 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20   Loop counter:  
a1a0: 4e 65 78 74 20 74 61 62 6c 65 20 69 6e 20 73 63  Next table in sc
a1b0: 68 65 6d 61 20 2a 2f 0a 20 20 20 20 69 6e 74 20  hema */.    int 
a1c0: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
a1d0: 20 20 20 2f 2a 20 72 65 73 75 6c 74 20 76 61 72     /* result var
a1e0: 69 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  iable */.    int
a1f0: 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 20   regResult;     
a200: 20 20 20 20 2f 2a 20 33 20 72 65 67 69 73 74 65      /* 3 registe
a210: 72 73 20 74 6f 20 68 6f 6c 64 20 61 20 72 65 73  rs to hold a res
a220: 75 6c 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20 69  ult row */.    i
a230: 6e 74 20 72 65 67 4b 65 79 3b 20 20 20 20 20 20  nt regKey;      
a240: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
a250: 72 20 74 6f 20 68 6f 6c 64 20 6b 65 79 20 66 6f  r to hold key fo
a260: 72 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 46  r checking the F
a270: 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  K */.    int reg
a280: 52 6f 77 3b 20 20 20 20 20 20 20 20 20 20 20 20  Row;            
a290: 2f 2a 20 52 65 67 69 73 74 65 72 73 20 74 6f 20  /* Registers to 
a2a0: 68 6f 6c 64 20 61 20 72 6f 77 20 66 72 6f 6d 20  hold a row from 
a2b0: 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20  pTab */.    int 
a2c0: 61 64 64 72 54 6f 70 3b 20 20 20 20 20 20 20 20  addrTop;        
a2d0: 20 20 20 2f 2a 20 54 6f 70 20 6f 66 20 61 20 6c     /* Top of a l
a2e0: 6f 6f 70 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  oop checking for
a2f0: 65 69 67 6e 20 6b 65 79 73 20 2a 2f 0a 20 20 20  eign keys */.   
a300: 20 69 6e 74 20 61 64 64 72 4f 6b 3b 20 20 20 20   int addrOk;    
a310: 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20          /* Jump 
a320: 68 65 72 65 20 69 66 20 74 68 65 20 6b 65 79 20  here if the key 
a330: 69 73 20 4f 4b 20 2a 2f 0a 20 20 20 20 69 6e 74  is OK */.    int
a340: 20 2a 61 69 43 6f 6c 73 3b 20 20 20 20 20 20 20   *aiCols;       
a350: 20 20 20 20 2f 2a 20 63 68 69 6c 64 20 74 6f 20      /* child to 
a360: 70 61 72 65 6e 74 20 63 6f 6c 75 6d 6e 20 6d 61  parent column ma
a370: 70 70 69 6e 67 20 2a 2f 0a 20 20 20 20 73 74 61  pping */.    sta
a380: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
a390: 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 74 61 62  azCol[] = { "tab
a3a0: 6c 65 22 2c 20 22 72 6f 77 69 64 22 2c 20 22 70  le", "rowid", "p
a3b0: 61 72 65 6e 74 22 2c 20 22 66 6b 69 64 22 20 7d  arent", "fkid" }
a3c0: 3b 0a 0a 20 20 20 20 72 65 67 52 65 73 75 6c 74  ;..    regResult
a3d0: 20 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2b   = pParse->nMem+
a3e0: 31 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  1;.    pParse->n
a3f0: 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20 72 65  Mem += 4;.    re
a400: 67 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73 65 2d  gKey = ++pParse-
a410: 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67 52 6f  >nMem;.    regRo
a420: 77 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d  w = ++pParse->nM
a430: 65 6d 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69  em;.    v = sqli
a440: 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73  te3GetVdbe(pPars
a450: 65 29 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f  e);.    setAllCo
a460: 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 34 2c 20  lumnNames(v, 4, 
a470: 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20  azCol); assert( 
a480: 34 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43  4==ArraySize(azC
a490: 6f 6c 29 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ol) );.    sqlit
a4a0: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
a4b0: 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b  ma(pParse, iDb);
a4c0: 0a 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48  .    k = sqliteH
a4d0: 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 44  ashFirst(&db->aD
a4e0: 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e  b[iDb].pSchema->
a4f0: 74 62 6c 48 61 73 68 29 3b 0a 20 20 20 20 77 68  tblHash);.    wh
a500: 69 6c 65 28 20 6b 20 29 7b 0a 20 20 20 20 20 20  ile( k ){.      
a510: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
a520: 20 20 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c        pTab = sql
a530: 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28  ite3LocateTable(
a540: 70 50 61 72 73 65 2c 20 30 2c 20 7a 52 69 67 68  pParse, 0, zRigh
a550: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20  t, zDb);.       
a560: 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65   k = 0;.      }e
a570: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 54 61  lse{.        pTa
a580: 62 20 3d 20 28 54 61 62 6c 65 2a 29 73 71 6c 69  b = (Table*)sqli
a590: 74 65 48 61 73 68 44 61 74 61 28 6b 29 3b 0a 20  teHashData(k);. 
a5a0: 20 20 20 20 20 20 20 6b 20 3d 20 73 71 6c 69 74         k = sqlit
a5b0: 65 48 61 73 68 4e 65 78 74 28 6b 29 3b 0a 20 20  eHashNext(k);.  
a5c0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
a5d0: 70 54 61 62 3d 3d 30 20 7c 7c 20 70 54 61 62 2d  pTab==0 || pTab-
a5e0: 3e 70 46 4b 65 79 3d 3d 30 20 29 20 63 6f 6e 74  >pFKey==0 ) cont
a5f0: 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  inue;.      sqli
a600: 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61  te3TableLock(pPa
a610: 72 73 65 2c 20 69 44 62 2c 20 70 54 61 62 2d 3e  rse, iDb, pTab->
a620: 74 6e 75 6d 2c 20 30 2c 20 70 54 61 62 2d 3e 7a  tnum, 0, pTab->z
a630: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28  Name);.      if(
a640: 20 70 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52   pTab->nCol+regR
a650: 6f 77 3e 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20  ow>pParse->nMem 
a660: 29 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d  ) pParse->nMem =
a670: 20 70 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65   pTab->nCol + re
a680: 67 52 6f 77 3b 0a 20 20 20 20 20 20 73 71 6c 69  gRow;.      sqli
a690: 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61  te3OpenTable(pPa
a6a0: 72 73 65 2c 20 30 2c 20 69 44 62 2c 20 70 54 61  rse, 0, iDb, pTa
a6b0: 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b  b, OP_OpenRead);
a6c0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
a6d0: 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20  beLoadString(v, 
a6e0: 72 65 67 52 65 73 75 6c 74 2c 20 70 54 61 62 2d  regResult, pTab-
a6f0: 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 66  >zName);.      f
a700: 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62  or(i=1, pFK=pTab
a710: 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b  ->pFKey; pFK; i+
a720: 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78  +, pFK=pFK->pNex
a730: 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20  tFrom){.        
a740: 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65  pParent = sqlite
a750: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70  3FindTable(db, p
a760: 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20  FK->zTo, zDb);. 
a770: 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65         if( pPare
a780: 6e 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  nt==0 ) continue
a790: 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20 3d  ;.        pIdx =
a7a0: 20 30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   0;.        sqli
a7b0: 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61  te3TableLock(pPa
a7c0: 72 73 65 2c 20 69 44 62 2c 20 70 50 61 72 65 6e  rse, iDb, pParen
a7d0: 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72  t->tnum, 0, pPar
a7e0: 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20  ent->zName);.   
a7f0: 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33       x = sqlite3
a800: 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50  FkLocateIndex(pP
a810: 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70  arse, pParent, p
a820: 46 4b 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a 20  FK, &pIdx, 0);. 
a830: 20 20 20 20 20 20 20 69 66 28 20 78 3d 3d 30 20         if( x==0 
a840: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
a850: 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20   pIdx==0 ){.    
a860: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f          sqlite3O
a870: 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c  penTable(pParse,
a880: 20 69 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74   i, iDb, pParent
a890: 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a  , OP_OpenRead);.
a8a0: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
a8b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
a8c0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
a8d0: 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69  , OP_OpenRead, i
a8e0: 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44  , pIdx->tnum, iD
a8f0: 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  b);.            
a900: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 50 34  sqlite3VdbeSetP4
a910: 4b 65 79 49 6e 66 6f 28 70 50 61 72 73 65 2c 20  KeyInfo(pParse, 
a920: 70 49 64 78 29 3b 0a 20 20 20 20 20 20 20 20 20  pIdx);.         
a930: 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65   }.        }else
a940: 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20  {.          k = 
a950: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  0;.          bre
a960: 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ak;.        }.  
a970: 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
a980: 72 74 28 20 70 50 61 72 73 65 2d 3e 6e 45 72 72  rt( pParse->nErr
a990: 3e 30 20 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a  >0 || pFK==0 );.
a9a0: 20 20 20 20 20 20 69 66 28 20 70 46 4b 20 29 20        if( pFK ) 
a9b0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28  break;.      if(
a9c0: 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 3c 69 20   pParse->nTab<i 
a9d0: 29 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 20 3d  ) pParse->nTab =
a9e0: 20 69 3b 0a 20 20 20 20 20 20 61 64 64 72 54 6f   i;.      addrTo
a9f0: 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  p = sqlite3VdbeA
aa00: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 77 69  ddOp1(v, OP_Rewi
aa10: 6e 64 2c 20 30 29 3b 20 56 64 62 65 43 6f 76 65  nd, 0); VdbeCove
aa20: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 66  rage(v);.      f
aa30: 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62  or(i=1, pFK=pTab
aa40: 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b  ->pFKey; pFK; i+
aa50: 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78  +, pFK=pFK->pNex
aa60: 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20  tFrom){.        
aa70: 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65  pParent = sqlite
aa80: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70  3FindTable(db, p
aa90: 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20  FK->zTo, zDb);. 
aaa0: 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b         pIdx = 0;
aab0: 0a 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20  .        aiCols 
aac0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 0;.        if(
aad0: 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20 20   pParent ){.    
aae0: 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65        x = sqlite
aaf0: 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70  3FkLocateIndex(p
ab00: 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20  Parse, pParent, 
ab10: 70 46 4b 2c 20 26 70 49 64 78 2c 20 26 61 69 43  pFK, &pIdx, &aiC
ab20: 6f 6c 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ols);.          
ab30: 61 73 73 65 72 74 28 20 78 3d 3d 30 20 29 3b 0a  assert( x==0 );.
ab40: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ab50: 20 20 61 64 64 72 4f 6b 20 3d 20 73 71 6c 69 74    addrOk = sqlit
ab60: 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28  e3VdbeMakeLabel(
ab70: 76 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  v);.        if( 
ab80: 70 50 61 72 65 6e 74 20 26 26 20 70 49 64 78 3d  pParent && pIdx=
ab90: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
aba0: 69 6e 74 20 69 4b 65 79 20 3d 20 70 46 4b 2d 3e  int iKey = pFK->
abb0: 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20  aCol[0].iFrom;. 
abc0: 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
abd0: 20 69 4b 65 79 3e 3d 30 20 26 26 20 69 4b 65 79   iKey>=0 && iKey
abe0: 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20  <pTab->nCol );. 
abf0: 20 20 20 20 20 20 20 20 20 69 66 28 20 69 4b 65           if( iKe
ac00: 79 21 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29  y!=pTab->iPKey )
ac10: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
ac20: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
ac30: 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c  v, OP_Column, 0,
ac40: 20 69 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a   iKey, regRow);.
ac50: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
ac60: 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74  te3ColumnDefault
ac70: 28 76 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c 20  (v, pTab, iKey, 
ac80: 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20  regRow);.       
ac90: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
aca0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e  AddOp2(v, OP_IsN
acb0: 75 6c 6c 2c 20 72 65 67 52 6f 77 2c 20 61 64 64  ull, regRow, add
acc0: 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65 72 61  rOk); VdbeCovera
acd0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
ace0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
acf0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ad00: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69  ddOp2(v, OP_Rowi
ad10: 64 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 0a 20  d, 0, regRow);. 
ad20: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
ad30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ad40: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 53 65 65  AddOp3(v, OP_See
ad50: 6b 52 6f 77 69 64 2c 20 69 2c 20 30 2c 20 72 65  kRowid, i, 0, re
ad60: 67 52 6f 77 29 3b 20 56 64 62 65 43 6f 76 65 72  gRow); VdbeCover
ad70: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
ad80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 47 6f 74    sqlite3VdbeGot
ad90: 6f 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20  o(v, addrOk);.  
ada0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
adb0: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 73  dbeJumpHere(v, s
adc0: 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e  qlite3VdbeCurren
add0: 74 41 64 64 72 28 76 29 2d 32 29 3b 0a 20 20 20  tAddr(v)-2);.   
ade0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
adf0: 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a        for(j=0; j
ae00: 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29  <pFK->nCol; j++)
ae10: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
ae20: 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
ae30: 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c  ColumnOfTable(v,
ae40: 20 70 54 61 62 2c 20 30 2c 0a 20 20 20 20 20 20   pTab, 0,.      
ae50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae60: 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3f 20 61        aiCols ? a
ae70: 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70 46 4b 2d 3e  iCols[j] : pFK->
ae80: 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 2c 20 72  aCol[j].iFrom, r
ae90: 65 67 52 6f 77 2b 6a 29 3b 0a 20 20 20 20 20 20  egRow+j);.      
aea0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
aeb0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73  eAddOp2(v, OP_Is
aec0: 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2b 6a 2c 20  Null, regRow+j, 
aed0: 61 64 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76  addrOk); VdbeCov
aee0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
aef0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
af00: 69 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a 20  if( pParent ){. 
af10: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
af20: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
af30: 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 2c 20 72  OP_MakeRecord, r
af40: 65 67 52 6f 77 2c 20 70 46 4b 2d 3e 6e 43 6f 6c  egRow, pFK->nCol
af50: 2c 20 72 65 67 4b 65 79 2c 0a 20 20 20 20 20 20  , regKey,.      
af60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af70: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 49          sqlite3I
af80: 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28  ndexAffinityStr(
af90: 64 62 2c 70 49 64 78 29 2c 20 70 46 4b 2d 3e 6e  db,pIdx), pFK->n
afa0: 43 6f 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Col);.          
afb0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
afc0: 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75  Op4Int(v, OP_Fou
afd0: 6e 64 2c 20 69 2c 20 61 64 64 72 4f 6b 2c 20 72  nd, i, addrOk, r
afe0: 65 67 4b 65 79 2c 20 30 29 3b 0a 20 20 20 20 20  egKey, 0);.     
aff0: 20 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72         VdbeCover
b000: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
b010: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
b020: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b030: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f  eAddOp2(v, OP_Ro
b040: 77 69 64 2c 20 30 2c 20 72 65 67 52 65 73 75 6c  wid, 0, regResul
b050: 74 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71  t+1);.        sq
b060: 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f  lite3VdbeMultiLo
b070: 61 64 28 76 2c 20 72 65 67 52 65 73 75 6c 74 2b  ad(v, regResult+
b080: 32 2c 20 22 73 69 22 2c 20 70 46 4b 2d 3e 7a 54  2, "si", pFK->zT
b090: 6f 2c 20 69 2d 31 29 3b 0a 20 20 20 20 20 20 20  o, i-1);.       
b0a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
b0b0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
b0c0: 6f 77 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 34  ow, regResult, 4
b0d0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
b0e0: 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62  e3VdbeResolveLab
b0f0: 65 6c 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20  el(v, addrOk);. 
b100: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
b110: 46 72 65 65 28 64 62 2c 20 61 69 43 6f 6c 73 29  Free(db, aiCols)
b120: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
b130: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
b140: 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 30 2c  2(v, OP_Next, 0,
b150: 20 61 64 64 72 54 6f 70 2b 31 29 3b 20 56 64 62   addrTop+1); Vdb
b160: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
b170: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
b180: 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 54  umpHere(v, addrT
b190: 6f 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  op);.    }.  }. 
b1a0: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
b1b0: 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
b1c0: 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 20  E_OMIT_TRIGGER) 
b1d0: 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  */.#endif /* !de
b1e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
b1f0: 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a  T_FOREIGN_KEY) *
b200: 2f 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  /..#ifndef NDEBU
b210: 47 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  G.  case PragTyp
b220: 5f 50 41 52 53 45 52 5f 54 52 41 43 45 3a 20 7b  _PARSER_TRACE: {
b230: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
b240: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  ){.      if( sql
b250: 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a  ite3GetBoolean(z
b260: 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20  Right, 0) ){.   
b270: 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 72 73       sqlite3Pars
b280: 65 72 54 72 61 63 65 28 73 74 64 6f 75 74 2c 20  erTrace(stdout, 
b290: 22 70 61 72 73 65 72 3a 20 22 29 3b 0a 20 20 20  "parser: ");.   
b2a0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
b2b0: 20 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54    sqlite3ParserT
b2c0: 72 61 63 65 28 30 2c 20 30 29 3b 0a 20 20 20 20  race(0, 0);.    
b2d0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
b2e0: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20  break;.#endif.. 
b2f0: 20 2f 2a 20 52 65 69 6e 73 74 61 6c 6c 20 74 68   /* Reinstall th
b300: 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20  e LIKE and GLOB 
b310: 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20  functions.  The 
b320: 76 61 72 69 61 6e 74 20 6f 66 20 4c 49 4b 45 0a  variant of LIKE.
b330: 20 20 2a 2a 20 75 73 65 64 20 77 69 6c 6c 20 62    ** used will b
b340: 65 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65  e case sensitive
b350: 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e   or not dependin
b360: 67 20 6f 6e 20 74 68 65 20 52 48 53 2e 0a 20 20  g on the RHS..  
b370: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
b380: 70 5f 43 41 53 45 5f 53 45 4e 53 49 54 49 56 45  p_CASE_SENSITIVE
b390: 5f 4c 49 4b 45 3a 20 7b 0a 20 20 20 20 69 66 28  _LIKE: {.    if(
b3a0: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
b3b0: 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
b3c0: 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 64 62  LikeFunctions(db
b3d0: 2c 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  , sqlite3GetBool
b3e0: 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 29 3b  ean(zRight, 0));
b3f0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
b400: 61 6b 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  ak;..  /*.  **  
b410: 20 50 52 41 47 4d 41 20 65 73 74 5f 72 6f 77 5f   PRAGMA est_row_
b420: 63 6e 74 28 3c 74 61 62 6c 65 2d 6f 72 2d 69 6e  cnt(<table-or-in
b430: 64 65 78 3e 2c 3c 66 72 61 63 74 69 6f 6e 3e 29  dex>,<fraction>)
b440: 3b 0a 20 20 2a 2a 0a 20 20 2a 2a 20 53 65 65 6b  ;.  **.  ** Seek
b450: 20 69 6e 20 3c 74 61 62 6c 65 2d 6f 72 2d 69 6e   in <table-or-in
b460: 64 65 78 3e 20 74 68 72 6f 75 67 68 20 74 68 65  dex> through the
b470: 20 66 69 72 73 74 20 3c 66 72 61 63 74 69 6f 6e   first <fraction
b480: 3e 20 6f 66 20 72 6f 77 73 20 61 6e 64 0a 20 20  > of rows and.  
b490: 2a 2a 20 65 73 74 69 6d 61 74 65 20 74 68 65 20  ** estimate the 
b4a0: 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
b4b0: 72 6f 77 73 20 62 61 73 65 64 20 6f 6e 20 74 68  rows based on th
b4c0: 65 20 70 61 74 68 20 62 61 63 6b 20 75 70 20 74  e path back up t
b4d0: 6f 20 74 68 65 0a 20 20 2a 2a 20 72 6f 6f 74 2e  o the.  ** root.
b4e0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
b4f0: 67 54 79 70 5f 45 53 54 5f 43 4f 55 4e 54 3a 20  gTyp_EST_COUNT: 
b500: 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64  {.    Index *pId
b510: 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  x;.    Table *pT
b520: 61 62 3b 0a 20 20 20 20 50 67 6e 6f 20 69 52 6f  ab;.    Pgno iRo
b530: 6f 74 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73  ot = 0;.    cons
b540: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20  t char *zName = 
b550: 30 3b 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  0;.    int regRe
b560: 73 75 6c 74 3b 0a 20 20 20 20 64 6f 75 62 6c 65  sult;.    double
b570: 20 72 3b 0a 20 20 20 20 73 74 61 74 69 63 20 63   r;.    static c
b580: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c  onst char *azCol
b590: 5b 5d 20 3d 20 7b 20 22 65 73 74 22 20 7d 3b 0a  [] = { "est" };.
b5a0: 20 20 20 20 69 66 28 20 28 70 49 64 78 20 3d 20      if( (pIdx = 
b5b0: 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78  sqlite3FindIndex
b5c0: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  (db, zRight, zDb
b5d0: 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  ))!=0 ){.      i
b5e0: 52 6f 6f 74 20 3d 20 70 49 64 78 2d 3e 74 6e 75  Root = pIdx->tnu
b5f0: 6d 3b 0a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d  m;.      zName =
b600: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 3b 0a 20 20   pIdx->zName;.  
b610: 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70 54 61    }else if( (pTa
b620: 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  b = sqlite3FindT
b630: 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c  able(db, zRight,
b640: 20 7a 44 62 29 29 21 3d 30 20 29 7b 0a 20 20 20   zDb))!=0 ){.   
b650: 20 20 20 69 52 6f 6f 74 20 3d 20 70 54 61 62 2d     iRoot = pTab-
b660: 3e 74 6e 75 6d 3b 0a 20 20 20 20 20 20 7a 4e 61  >tnum;.      zNa
b670: 6d 65 20 3d 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  me = pTab->zName
b680: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
b690: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
b6a0: 20 20 20 20 73 71 6c 69 74 65 33 54 61 62 6c 65      sqlite3Table
b6b0: 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69 44 62  Lock(pParse, iDb
b6c0: 2c 20 69 52 6f 6f 74 2c 20 30 2c 20 7a 4e 61 6d  , iRoot, 0, zNam
b6d0: 65 29 3b 0a 20 20 20 20 72 65 67 52 65 73 75 6c  e);.    regResul
b6e0: 74 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d  t = ++pParse->nM
b6f0: 65 6d 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f  em;.    setAllCo
b700: 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 31 2c 20  lumnNames(v, 1, 
b710: 61 7a 43 6f 6c 29 3b 0a 20 20 20 20 69 66 28 20  azCol);.    if( 
b720: 70 56 61 6c 75 65 73 2d 3e 6e 49 64 3e 3d 32 20  pValues->nId>=2 
b730: 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  ){.      const c
b740: 68 61 72 20 2a 7a 20 3d 20 70 56 61 6c 75 65 73  har *z = pValues
b750: 2d 3e 61 5b 31 5d 2e 7a 4e 61 6d 65 3b 0a 20 20  ->a[1].zName;.  
b760: 20 20 20 20 73 71 6c 69 74 65 33 41 74 6f 46 28      sqlite3AtoF(
b770: 7a 2c 20 26 72 2c 20 73 71 6c 69 74 65 33 53 74  z, &r, sqlite3St
b780: 72 6c 65 6e 33 30 28 7a 29 2c 20 53 51 4c 49 54  rlen30(z), SQLIT
b790: 45 5f 55 54 46 38 29 3b 0a 20 20 20 20 7d 65 6c  E_UTF8);.    }el
b7a0: 73 65 7b 0a 20 20 20 20 20 20 72 20 3d 20 30 2e  se{.      r = 0.
b7b0: 35 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  5;.    }.    if(
b7c0: 20 72 3c 30 2e 30 20 29 20 72 20 3d 20 30 2e 30   r<0.0 ) r = 0.0
b7d0: 3b 0a 20 20 20 20 69 66 28 20 72 3e 31 2e 30 20  ;.    if( r>1.0 
b7e0: 29 20 72 20 3d 20 31 2e 30 3b 0a 20 20 20 20 73  ) r = 1.0;.    s
b7f0: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
b800: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
b810: 44 62 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  Db);.    pParse-
b820: 3e 6e 54 61 62 2b 2b 3b 0a 20 20 20 20 73 71 6c  >nTab++;.    sql
b830: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e  ite3VdbeAddOp4In
b840: 74 28 76 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64  t(v, OP_OpenRead
b850: 2c 20 30 2c 20 69 52 6f 6f 74 2c 20 69 44 62 2c  , 0, iRoot, iDb,
b860: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
b870: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
b880: 5f 45 73 74 52 6f 77 43 6e 74 2c 20 30 2c 20 72  _EstRowCnt, 0, r
b890: 65 67 52 65 73 75 6c 74 2c 20 28 69 6e 74 29 28  egResult, (int)(
b8a0: 72 2a 31 30 30 30 30 30 30 30 30 30 29 29 3b 0a  r*1000000000));.
b8b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
b8c0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
b8d0: 6c 74 52 6f 77 2c 20 72 65 67 52 65 73 75 6c 74  ltRow, regResult
b8e0: 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  , 1);.  }.  brea
b8f0: 6b 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  k;..#ifndef SQLI
b900: 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  TE_INTEGRITY_CHE
b910: 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 0a 23 20 64  CK_ERROR_MAX.# d
b920: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
b930: 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52  EGRITY_CHECK_ERR
b940: 4f 52 5f 4d 41 58 20 31 30 30 0a 23 65 6e 64 69  OR_MAX 100.#endi
b950: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
b960: 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
b970: 5f 43 48 45 43 4b 0a 20 20 2f 2a 20 50 72 61 67  _CHECK.  /* Prag
b980: 6d 61 20 22 71 75 69 63 6b 5f 63 68 65 63 6b 22  ma "quick_check"
b990: 20 69 73 20 72 65 64 75 63 65 64 20 76 65 72 73   is reduced vers
b9a0: 69 6f 6e 20 6f 66 20 0a 20 20 2a 2a 20 69 6e 74  ion of .  ** int
b9b0: 65 67 72 69 74 79 5f 63 68 65 63 6b 20 64 65 73  egrity_check des
b9c0: 69 67 6e 65 64 20 74 6f 20 64 65 74 65 63 74 20  igned to detect 
b9d0: 6d 6f 73 74 20 64 61 74 61 62 61 73 65 20 63 6f  most database co
b9e0: 72 72 75 70 74 69 6f 6e 0a 20 20 2a 2a 20 77 69  rruption.  ** wi
b9f0: 74 68 6f 75 74 20 6d 6f 73 74 20 6f 66 20 74 68  thout most of th
ba00: 65 20 6f 76 65 72 68 65 61 64 20 6f 66 20 61 20  e overhead of a 
ba10: 66 75 6c 6c 20 69 6e 74 65 67 72 69 74 79 2d 63  full integrity-c
ba20: 68 65 63 6b 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  heck..  */.  cas
ba30: 65 20 50 72 61 67 54 79 70 5f 49 4e 54 45 47 52  e PragTyp_INTEGR
ba40: 49 54 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20  ITY_CHECK: {.   
ba50: 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64 64 72 2c   int i, j, addr,
ba60: 20 6d 78 45 72 72 3b 0a 0a 20 20 20 20 69 6e 74   mxErr;..    int
ba70: 20 69 73 51 75 69 63 6b 20 3d 20 28 73 71 6c 69   isQuick = (sqli
ba80: 74 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74  te3Tolower(zLeft
ba90: 5b 30 5d 29 3d 3d 27 71 27 29 3b 0a 0a 20 20 20  [0])=='q');..   
baa0: 20 2f 2a 20 49 66 20 74 68 65 20 50 52 41 47 4d   /* If the PRAGM
bab0: 41 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 6f 66  A command was of
bac0: 20 74 68 65 20 66 6f 72 6d 20 22 50 52 41 47 4d   the form "PRAGM
bad0: 41 20 3c 64 62 3e 2e 69 6e 74 65 67 72 69 74 79  A <db>.integrity
bae0: 5f 63 68 65 63 6b 22 2c 0a 20 20 20 20 2a 2a 20  _check",.    ** 
baf0: 74 68 65 6e 20 69 44 62 20 69 73 20 73 65 74 20  then iDb is set 
bb00: 74 6f 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  to the index of 
bb10: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 64 65  the database ide
bb20: 6e 74 69 66 69 65 64 20 62 79 20 3c 64 62 3e 2e  ntified by <db>.
bb30: 0a 20 20 20 20 2a 2a 20 49 6e 20 74 68 69 73 20  .    ** In this 
bb40: 63 61 73 65 2c 20 74 68 65 20 69 6e 74 65 67 72  case, the integr
bb50: 69 74 79 20 6f 66 20 64 61 74 61 62 61 73 65 20  ity of database 
bb60: 69 44 62 20 6f 6e 6c 79 20 69 73 20 76 65 72 69  iDb only is veri
bb70: 66 69 65 64 20 62 79 0a 20 20 20 20 2a 2a 20 74  fied by.    ** t
bb80: 68 65 20 56 44 42 45 20 63 72 65 61 74 65 64 20  he VDBE created 
bb90: 62 65 6c 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20 20  below..    **.  
bba0: 20 20 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20    ** Otherwise, 
bbb0: 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77  if the command w
bbc0: 61 73 20 73 69 6d 70 6c 79 20 22 50 52 41 47 4d  as simply "PRAGM
bbd0: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
bbe0: 6b 22 20 28 6f 72 0a 20 20 20 20 2a 2a 20 22 50  k" (or.    ** "P
bbf0: 52 41 47 4d 41 20 71 75 69 63 6b 5f 63 68 65 63  RAGMA quick_chec
bc00: 6b 22 29 2c 20 74 68 65 6e 20 69 44 62 20 69 73  k"), then iDb is
bc10: 20 73 65 74 20 74 6f 20 30 2e 20 49 6e 20 74 68   set to 0. In th
bc20: 69 73 20 63 61 73 65 2c 20 73 65 74 20 69 44 62  is case, set iDb
bc30: 0a 20 20 20 20 2a 2a 20 74 6f 20 2d 31 20 68 65  .    ** to -1 he
bc40: 72 65 2c 20 74 6f 20 69 6e 64 69 63 61 74 65 20  re, to indicate 
bc50: 74 68 61 74 20 74 68 65 20 56 44 42 45 20 73 68  that the VDBE sh
bc60: 6f 75 6c 64 20 76 65 72 69 66 79 20 74 68 65 20  ould verify the 
bc70: 69 6e 74 65 67 72 69 74 79 0a 20 20 20 20 2a 2a  integrity.    **
bc80: 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64   of all attached
bc90: 20 64 61 74 61 62 61 73 65 73 2e 20 20 2a 2f 0a   databases.  */.
bca0: 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3e      assert( iDb>
bcb0: 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
bcc0: 28 20 69 44 62 3d 3d 30 20 7c 7c 20 70 49 64 32  ( iDb==0 || pId2
bcd0: 2d 3e 7a 20 29 3b 0a 20 20 20 20 69 66 28 20 70  ->z );.    if( p
bce0: 49 64 32 2d 3e 7a 3d 3d 30 20 29 20 69 44 62 20  Id2->z==0 ) iDb 
bcf0: 3d 20 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e  = -1;..    /* In
bd00: 69 74 69 61 6c 69 7a 65 20 74 68 65 20 56 44 42  itialize the VDB
bd10: 45 20 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 20  E program */.   
bd20: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
bd30: 36 3b 0a 20 20 20 20 73 65 74 4f 6e 65 43 6f 6c  6;.    setOneCol
bd40: 75 6d 6e 4e 61 6d 65 28 76 2c 20 22 69 6e 74 65  umnName(v, "inte
bd50: 67 72 69 74 79 5f 63 68 65 63 6b 22 29 3b 0a 0a  grity_check");..
bd60: 20 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 6d      /* Set the m
bd70: 61 78 69 6d 75 6d 20 65 72 72 6f 72 20 63 6f 75  aximum error cou
bd80: 6e 74 20 2a 2f 0a 20 20 20 20 6d 78 45 72 72 20  nt */.    mxErr 
bd90: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49  = SQLITE_INTEGRI
bda0: 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d  TY_CHECK_ERROR_M
bdb0: 41 58 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  AX;.    if( zRig
bdc0: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ht ){.      sqli
bdd0: 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69 67  te3GetInt32(zRig
bde0: 68 74 2c 20 26 6d 78 45 72 72 29 3b 0a 20 20 20  ht, &mxErr);.   
bdf0: 20 20 20 69 66 28 20 6d 78 45 72 72 3c 3d 30 20     if( mxErr<=0 
be00: 29 7b 0a 20 20 20 20 20 20 20 20 6d 78 45 72 72  ){.        mxErr
be10: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52   = SQLITE_INTEGR
be20: 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f  ITY_CHECK_ERROR_
be30: 4d 41 58 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  MAX;.      }.   
be40: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
be50: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
be60: 6e 74 65 67 65 72 2c 20 6d 78 45 72 72 2c 20 31  nteger, mxErr, 1
be70: 29 3b 20 20 2f 2a 20 72 65 67 5b 31 5d 20 68 6f  );  /* reg[1] ho
be80: 6c 64 73 20 65 72 72 6f 72 73 20 6c 65 66 74 20  lds errors left 
be90: 2a 2f 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 61 6e  */..    /* Do an
bea0: 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
beb0: 20 6f 6e 20 65 61 63 68 20 64 61 74 61 62 61 73   on each databas
bec0: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 66 6f  e file */.    fo
bed0: 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
bee0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 48 61  ; i++){.      Ha
bef0: 73 68 45 6c 65 6d 20 2a 78 3b 0a 20 20 20 20 20  shElem *x;.     
bf00: 20 48 61 73 68 20 2a 70 54 62 6c 73 3b 0a 20 20   Hash *pTbls;.  
bf10: 20 20 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 0a      int *aRoot;.
bf20: 20 20 20 20 20 20 69 6e 74 20 63 6e 74 20 3d 20        int cnt = 
bf30: 30 3b 0a 20 20 20 20 20 20 69 6e 74 20 6d 78 49  0;.      int mxI
bf40: 64 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 6e  dx = 0;.      in
bf50: 74 20 6e 49 64 78 3b 0a 0a 20 20 20 20 20 20 69  t nIdx;..      i
bf60: 66 28 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 26  f( OMIT_TEMPDB &
bf70: 26 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75  & i==1 ) continu
bf80: 65 3b 0a 20 20 20 20 20 20 69 66 28 20 69 44 62  e;.      if( iDb
bf90: 3e 3d 30 20 26 26 20 69 21 3d 69 44 62 20 29 20  >=0 && i!=iDb ) 
bfa0: 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20 20  continue;..     
bfb0: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
bfc0: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
bfd0: 20 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20   i);.      addr 
bfe0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
bff0: 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c  Op1(v, OP_IfPos,
c000: 20 31 29 3b 20 2f 2a 20 48 61 6c 74 20 69 66 20   1); /* Halt if 
c010: 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f  out of errors */
c020: 0a 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72  .      VdbeCover
c030: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71  age(v);.      sq
c040: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c050: 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30  v, OP_Halt, 0, 0
c060: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c070: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
c080: 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  addr);..      /*
c090: 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79   Do an integrity
c0a0: 20 63 68 65 63 6b 20 6f 66 20 74 68 65 20 42 2d   check of the B-
c0b0: 54 72 65 65 0a 20 20 20 20 20 20 2a 2a 0a 20 20  Tree.      **.  
c0c0: 20 20 20 20 2a 2a 20 42 65 67 69 6e 20 62 79 20      ** Begin by 
c0d0: 66 69 6e 64 69 6e 67 20 74 68 65 20 72 6f 6f 74  finding the root
c0e0: 20 70 61 67 65 73 20 6e 75 6d 62 65 72 73 0a 20   pages numbers. 
c0f0: 20 20 20 20 20 2a 2a 20 66 6f 72 20 61 6c 6c 20       ** for all 
c100: 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63  tables and indic
c110: 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
c120: 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  se..      */.   
c130: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
c140: 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
c150: 64 28 64 62 2c 20 69 2c 20 30 29 20 29 3b 0a 20  d(db, i, 0) );. 
c160: 20 20 20 20 20 70 54 62 6c 73 20 3d 20 26 64 62       pTbls = &db
c170: 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d 61  ->aDb[i].pSchema
c180: 2d 3e 74 62 6c 48 61 73 68 3b 0a 20 20 20 20 20  ->tblHash;.     
c190: 20 66 6f 72 28 63 6e 74 3d 30 2c 20 78 3d 73 71   for(cnt=0, x=sq
c1a0: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 70 54  liteHashFirst(pT
c1b0: 62 6c 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74  bls); x; x=sqlit
c1c0: 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20  eHashNext(x)){. 
c1d0: 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54         Table *pT
c1e0: 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44  ab = sqliteHashD
c1f0: 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20  ata(x);.        
c200: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
c210: 20 20 20 20 20 69 66 28 20 48 61 73 52 6f 77 69       if( HasRowi
c220: 64 28 70 54 61 62 29 20 29 20 63 6e 74 2b 2b 3b  d(pTab) ) cnt++;
c230: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6e 49 64  .        for(nId
c240: 78 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e  x=0, pIdx=pTab->
c250: 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
c260: 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20  dx=pIdx->pNext, 
c270: 6e 49 64 78 2b 2b 29 7b 20 63 6e 74 2b 2b 3b 20  nIdx++){ cnt++; 
c280: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e 49  }.        if( nI
c290: 64 78 3e 6d 78 49 64 78 20 29 20 6d 78 49 64 78  dx>mxIdx ) mxIdx
c2a0: 20 3d 20 6e 49 64 78 3b 0a 20 20 20 20 20 20 7d   = nIdx;.      }
c2b0: 0a 20 20 20 20 20 20 61 52 6f 6f 74 20 3d 20 73  .      aRoot = s
c2c0: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
c2d0: 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 69  wNN(db, sizeof(i
c2e0: 6e 74 29 2a 28 63 6e 74 2b 31 29 29 3b 0a 20 20  nt)*(cnt+1));.  
c2f0: 20 20 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30      if( aRoot==0
c300: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
c310: 66 6f 72 28 63 6e 74 3d 30 2c 20 78 3d 73 71 6c  for(cnt=0, x=sql
c320: 69 74 65 48 61 73 68 46 69 72 73 74 28 70 54 62  iteHashFirst(pTb
c330: 6c 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65  ls); x; x=sqlite
c340: 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20  HashNext(x)){.  
c350: 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61        Table *pTa
c360: 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61  b = sqliteHashDa
c370: 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49  ta(x);.        I
c380: 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20  ndex *pIdx;.    
c390: 20 20 20 20 69 66 28 20 48 61 73 52 6f 77 69 64      if( HasRowid
c3a0: 28 70 54 61 62 29 20 29 20 61 52 6f 6f 74 5b 63  (pTab) ) aRoot[c
c3b0: 6e 74 2b 2b 5d 20 3d 20 70 54 61 62 2d 3e 74 6e  nt++] = pTab->tn
c3c0: 75 6d 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  um;.        for(
c3d0: 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65  pIdx=pTab->pInde
c3e0: 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  x; pIdx; pIdx=pI
c3f0: 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20  dx->pNext){.    
c400: 20 20 20 20 20 20 61 52 6f 6f 74 5b 63 6e 74 2b        aRoot[cnt+
c410: 2b 5d 20 3d 20 70 49 64 78 2d 3e 74 6e 75 6d 3b  +] = pIdx->tnum;
c420: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
c430: 20 7d 0a 20 20 20 20 20 20 61 52 6f 6f 74 5b 63   }.      aRoot[c
c440: 6e 74 5d 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20  nt] = 0;..      
c450: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 73 75 66  /* Make sure suf
c460: 66 69 63 69 65 6e 74 20 6e 75 6d 62 65 72 20 6f  ficient number o
c470: 66 20 72 65 67 69 73 74 65 72 73 20 68 61 76 65  f registers have
c480: 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
c490: 2a 2f 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  */.      pParse-
c4a0: 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 20 70 50 61  >nMem = MAX( pPa
c4b0: 72 73 65 2d 3e 6e 4d 65 6d 2c 20 38 2b 6d 78 49  rse->nMem, 8+mxI
c4c0: 64 78 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  dx );..      /* 
c4d0: 44 6f 20 74 68 65 20 62 2d 74 72 65 65 20 69 6e  Do the b-tree in
c4e0: 74 65 67 72 69 74 79 20 63 68 65 63 6b 73 20 2a  tegrity checks *
c4f0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
c500: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
c510: 49 6e 74 65 67 72 69 74 79 43 6b 2c 20 32 2c 20  IntegrityCk, 2, 
c520: 63 6e 74 2c 20 31 2c 20 28 63 68 61 72 2a 29 61  cnt, 1, (char*)a
c530: 52 6f 6f 74 2c 50 34 5f 49 4e 54 41 52 52 41 59  Root,P4_INTARRAY
c540: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c550: 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20  VdbeChangeP5(v, 
c560: 28 75 38 29 69 29 3b 0a 20 20 20 20 20 20 61 64  (u8)i);.      ad
c570: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
c580: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 73 4e  AddOp1(v, OP_IsN
c590: 75 6c 6c 2c 20 32 29 3b 20 56 64 62 65 43 6f 76  ull, 2); VdbeCov
c5a0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
c5b0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c5c0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
c5d0: 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20   0, 3, 0,.      
c5e0: 20 20 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74     sqlite3MPrint
c5f0: 66 28 64 62 2c 20 22 2a 2a 2a 20 69 6e 20 64 61  f(db, "*** in da
c600: 74 61 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e 22  tabase %s ***\n"
c610: 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 44 62  , db->aDb[i].zDb
c620: 53 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20 20 20  SName),.        
c630: 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20   P4_DYNAMIC);.  
c640: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c650: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 6f 76 65  ddOp3(v, OP_Move
c660: 2c 20 32 2c 20 34 2c 20 31 29 3b 0a 20 20 20 20  , 2, 4, 1);.    
c670: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c680: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74  Op3(v, OP_Concat
c690: 2c 20 34 2c 20 33 2c 20 32 29 3b 0a 20 20 20 20  , 4, 3, 2);.    
c6a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c6b0: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
c6c0: 52 6f 77 2c 20 32 2c 20 31 29 3b 0a 20 20 20 20  Row, 2, 1);.    
c6d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
c6e0: 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a  pHere(v, addr);.
c6f0: 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
c700: 75 72 65 20 61 6c 6c 20 74 68 65 20 69 6e 64 69  ure all the indi
c710: 63 65 73 20 61 72 65 20 63 6f 6e 73 74 72 75 63  ces are construc
c720: 74 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a 20  ted correctly.. 
c730: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 66 6f       */.      fo
c740: 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(x=sqliteHashFi
c750: 72 73 74 28 70 54 62 6c 73 29 3b 20 78 20 26 26  rst(pTbls); x &&
c760: 20 21 69 73 51 75 69 63 6b 3b 20 78 3d 73 71 6c   !isQuick; x=sql
c770: 69 74 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b  iteHashNext(x)){
c780: 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a  .        Table *
c790: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73  pTab = sqliteHas
c7a0: 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20  hData(x);.      
c7b0: 20 20 49 6e 64 65 78 20 2a 70 49 64 78 2c 20 2a    Index *pIdx, *
c7c0: 70 50 6b 3b 0a 20 20 20 20 20 20 20 20 49 6e 64  pPk;.        Ind
c7d0: 65 78 20 2a 70 50 72 69 6f 72 20 3d 20 30 3b 0a  ex *pPrior = 0;.
c7e0: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 6f 6f 70          int loop
c7f0: 54 6f 70 3b 0a 20 20 20 20 20 20 20 20 69 6e 74  Top;.        int
c800: 20 69 44 61 74 61 43 75 72 2c 20 69 49 64 78 43   iDataCur, iIdxC
c810: 75 72 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  ur;.        int 
c820: 72 31 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 20 20  r1 = -1;..      
c830: 20 20 69 66 28 20 70 54 61 62 2d 3e 70 49 6e 64    if( pTab->pInd
c840: 65 78 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  ex==0 ) continue
c850: 3b 0a 20 20 20 20 20 20 20 20 70 50 6b 20 3d 20  ;.        pPk = 
c860: 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 3f  HasRowid(pTab) ?
c870: 20 30 20 3a 20 73 71 6c 69 74 65 33 50 72 69 6d   0 : sqlite3Prim
c880: 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61 62  aryKeyIndex(pTab
c890: 29 3b 0a 20 20 20 20 20 20 20 20 61 64 64 72 20  );.        addr 
c8a0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
c8b0: 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c  Op1(v, OP_IfPos,
c8c0: 20 31 29 3b 20 20 2f 2a 20 53 74 6f 70 20 69 66   1);  /* Stop if
c8d0: 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a   out of errors *
c8e0: 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65 43 6f  /.        VdbeCo
c8f0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
c900: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c910: 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c  dOp2(v, OP_Halt,
c920: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20   0, 0);.        
c930: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
c940: 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20  ere(v, addr);.  
c950: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
c960: 72 43 61 63 68 65 43 6c 65 61 72 28 70 50 61 72  rCacheClear(pPar
c970: 73 65 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  se);.        sql
c980: 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
c990: 49 6e 64 69 63 65 73 28 70 50 61 72 73 65 2c 20  Indices(pParse, 
c9a0: 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61  pTab, OP_OpenRea
c9b0: 64 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20  d, 0,.          
c9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9d0: 20 20 20 20 20 20 20 20 20 31 2c 20 30 2c 20 26           1, 0, &
c9e0: 69 44 61 74 61 43 75 72 2c 20 26 69 49 64 78 43  iDataCur, &iIdxC
c9f0: 75 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ur);.        sql
ca00: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
ca10: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c  , OP_Integer, 0,
ca20: 20 37 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72   7);.        for
ca30: 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d  (j=0, pIdx=pTab-
ca40: 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70  >pIndex; pIdx; p
ca50: 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c  Idx=pIdx->pNext,
ca60: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
ca70: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ca80: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
ca90: 2c 20 30 2c 20 38 2b 6a 29 3b 20 2f 2a 20 69 6e  , 0, 8+j); /* in
caa0: 64 65 78 20 65 6e 74 72 69 65 73 20 63 6f 75 6e  dex entries coun
cab0: 74 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d  ter */.        }
cac0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
cad0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3e 3d 38   pParse->nMem>=8
cae0: 2b 6a 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  +j );.        as
caf0: 73 65 72 74 28 20 73 71 6c 69 74 65 33 4e 6f 54  sert( sqlite3NoT
cb00: 65 6d 70 73 49 6e 52 61 6e 67 65 28 70 50 61 72  empsInRange(pPar
cb10: 73 65 2c 31 2c 37 2b 6a 29 20 29 3b 0a 20 20 20  se,1,7+j) );.   
cb20: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cb30: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 77  AddOp2(v, OP_Rew
cb40: 69 6e 64 2c 20 69 44 61 74 61 43 75 72 2c 20 30  ind, iDataCur, 0
cb50: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
cb60: 76 29 3b 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70  v);.        loop
cb70: 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Top = sqlite3Vdb
cb80: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
cb90: 64 49 6d 6d 2c 20 37 2c 20 31 29 3b 0a 20 20 20  dImm, 7, 1);.   
cba0: 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74       /* Verify t
cbb0: 68 61 74 20 61 6c 6c 20 4e 4f 54 20 4e 55 4c 4c  hat all NOT NULL
cbc0: 20 63 6f 6c 75 6d 6e 73 20 72 65 61 6c 6c 79 20   columns really 
cbd0: 61 72 65 20 4e 4f 54 20 4e 55 4c 4c 20 2a 2f 0a  are NOT NULL */.
cbe0: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b          for(j=0;
cbf0: 20 6a 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 6a   j<pTab->nCol; j
cc00: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63  ++){.          c
cc10: 68 61 72 20 2a 7a 45 72 72 3b 0a 20 20 20 20 20  har *zErr;.     
cc20: 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a       int jmp2, j
cc30: 6d 70 33 3b 0a 20 20 20 20 20 20 20 20 20 20 69  mp3;.          i
cc40: 66 28 20 6a 3d 3d 70 54 61 62 2d 3e 69 50 4b 65  f( j==pTab->iPKe
cc50: 79 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  y ) continue;.  
cc60: 20 20 20 20 20 20 20 20 69 66 28 20 70 54 61 62          if( pTab
cc70: 2d 3e 61 43 6f 6c 5b 6a 5d 2e 6e 6f 74 4e 75 6c  ->aCol[j].notNul
cc80: 6c 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  l==0 ) continue;
cc90: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
cca0: 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
ccb0: 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70 54  umnOfTable(v, pT
ccc0: 61 62 2c 20 69 44 61 74 61 43 75 72 2c 20 6a 2c  ab, iDataCur, j,
ccd0: 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   3);.          s
cce0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
ccf0: 50 35 28 76 2c 20 4f 50 46 4c 41 47 5f 54 59 50  P5(v, OPFLAG_TYP
cd00: 45 4f 46 41 52 47 29 3b 0a 20 20 20 20 20 20 20  EOFARG);.       
cd10: 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65     jmp2 = sqlite
cd20: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
cd30: 50 5f 4e 6f 74 4e 75 6c 6c 2c 20 33 29 3b 20 56  P_NotNull, 3); V
cd40: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
cd50: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
cd60: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
cd70: 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29  P_AddImm, 1, -1)
cd80: 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65  ; /* Decrement e
cd90: 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20  rror limit */.  
cda0: 20 20 20 20 20 20 20 20 7a 45 72 72 20 3d 20 73          zErr = s
cdb0: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
cdc0: 2c 20 22 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e  , "NULL value in
cdd0: 20 25 73 2e 25 73 22 2c 20 70 54 61 62 2d 3e 7a   %s.%s", pTab->z
cde0: 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
cdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce00: 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a      pTab->aCol[j
ce10: 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ].zName);.      
ce20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ce30: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
ce40: 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 7a 45  ng8, 0, 3, 0, zE
ce50: 72 72 2c 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b  rr, P4_DYNAMIC);
ce60: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
ce70: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
ce80: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33 2c  OP_ResultRow, 3,
ce90: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a   1);.          j
cea0: 6d 70 33 20 3d 20 73 71 6c 69 74 65 33 56 64 62  mp3 = sqlite3Vdb
ceb0: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66  eAddOp1(v, OP_If
cec0: 50 6f 73 2c 20 31 29 3b 20 56 64 62 65 43 6f 76  Pos, 1); VdbeCov
ced0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
cee0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
cef0: 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74  ddOp0(v, OP_Halt
cf00: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
cf10: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
cf20: 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20  (v, jmp2);.     
cf30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cf40: 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 33  JumpHere(v, jmp3
cf50: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
cf60: 20 20 20 20 20 2f 2a 20 56 61 6c 69 64 61 74 65       /* Validate
cf70: 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20 66   index entries f
cf80: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  or the current r
cf90: 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f  ow */.        fo
cfa0: 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62  r(j=0, pIdx=pTab
cfb0: 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20  ->pIndex; pIdx; 
cfc0: 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
cfd0: 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  , j++){.        
cfe0: 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33    int jmp2, jmp3
cff0: 2c 20 6a 6d 70 34 2c 20 6a 6d 70 35 3b 0a 20 20  , jmp4, jmp5;.  
d000: 20 20 20 20 20 20 20 20 69 6e 74 20 63 6b 55 6e          int ckUn
d010: 69 71 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iq = sqlite3Vdbe
d020: 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20  MakeLabel(v);.  
d030: 20 20 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d          if( pPk=
d040: 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65  =pIdx ) continue
d050: 3b 0a 20 20 20 20 20 20 20 20 20 20 72 31 20 3d  ;.          r1 =
d060: 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
d070: 49 6e 64 65 78 4b 65 79 28 70 50 61 72 73 65 2c  IndexKey(pParse,
d080: 20 70 49 64 78 2c 20 69 44 61 74 61 43 75 72 2c   pIdx, iDataCur,
d090: 20 30 2c 20 30 2c 20 26 6a 6d 70 33 2c 0a 20 20   0, 0, &jmp3,.  
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0c0: 20 20 20 20 20 70 50 72 69 6f 72 2c 20 72 31 29       pPrior, r1)
d0d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 70 50 72 69  ;.          pPri
d0e0: 6f 72 20 3d 20 70 49 64 78 3b 0a 20 20 20 20 20  or = pIdx;.     
d0f0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d100: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64  AddOp2(v, OP_Add
d110: 49 6d 6d 2c 20 38 2b 6a 2c 20 31 29 3b 20 20 2f  Imm, 8+j, 1);  /
d120: 2a 20 69 6e 63 72 65 6d 65 6e 74 20 65 6e 74 72  * increment entr
d130: 79 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20  y count */.     
d140: 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74       /* Verify t
d150: 68 61 74 20 61 6e 20 69 6e 64 65 78 20 65 6e 74  hat an index ent
d160: 72 79 20 65 78 69 73 74 73 20 66 6f 72 20 74 68  ry exists for th
d170: 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 20  e current table 
d180: 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  row */.         
d190: 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33 56   jmp2 = sqlite3V
d1a0: 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20  dbeAddOp4Int(v, 
d1b0: 4f 50 5f 46 6f 75 6e 64 2c 20 69 49 64 78 43 75  OP_Found, iIdxCu
d1c0: 72 2b 6a 2c 20 63 6b 55 6e 69 71 2c 20 72 31 2c  r+j, ckUniq, r1,
d1d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1f0: 20 20 20 20 20 20 20 70 49 64 78 2d 3e 6e 43 6f         pIdx->nCo
d200: 6c 75 6d 6e 29 3b 20 56 64 62 65 43 6f 76 65 72  lumn); VdbeCover
d210: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
d220: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d230: 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d  Op2(v, OP_AddImm
d240: 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63  , 1, -1); /* Dec
d250: 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d  rement error lim
d260: 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  it */.          
d270: 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53  sqlite3VdbeLoadS
d280: 74 72 69 6e 67 28 76 2c 20 33 2c 20 22 72 6f 77  tring(v, 3, "row
d290: 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   ");.          s
d2a0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
d2b0: 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 37  (v, OP_Concat, 7
d2c0: 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  , 3, 3);.       
d2d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f     sqlite3VdbeLo
d2e0: 61 64 53 74 72 69 6e 67 28 76 2c 20 34 2c 20 22  adString(v, 4, "
d2f0: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
d300: 64 65 78 20 22 29 3b 0a 20 20 20 20 20 20 20 20  dex ");.        
d310: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d320: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74  Op3(v, OP_Concat
d330: 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20  , 4, 3, 3);.    
d340: 20 20 20 20 20 20 6a 6d 70 35 20 3d 20 73 71 6c        jmp5 = sql
d350: 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69  ite3VdbeLoadStri
d360: 6e 67 28 76 2c 20 34 2c 20 70 49 64 78 2d 3e 7a  ng(v, 4, pIdx->z
d370: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20  Name);.         
d380: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d390: 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
d3a0: 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20   4, 3, 3);.     
d3b0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d3c0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
d3d0: 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20  ultRow, 3, 1);. 
d3e0: 20 20 20 20 20 20 20 20 20 6a 6d 70 34 20 3d 20           jmp4 = 
d3f0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d400: 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31  1(v, OP_IfPos, 1
d410: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
d420: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
d430: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 30 28  lite3VdbeAddOp0(
d440: 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20  v, OP_Halt);.   
d450: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d460: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d  beJumpHere(v, jm
d470: 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f  p2);.          /
d480: 2a 20 46 6f 72 20 55 4e 49 51 55 45 20 69 6e 64  * For UNIQUE ind
d490: 65 78 65 73 2c 20 76 65 72 69 66 79 20 74 68 61  exes, verify tha
d4a0: 74 20 6f 6e 6c 79 20 6f 6e 65 20 65 6e 74 72 79  t only one entry
d4b0: 20 65 78 69 73 74 73 20 77 69 74 68 20 74 68 65   exists with the
d4c0: 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 63 75  .          ** cu
d4d0: 72 72 65 6e 74 20 6b 65 79 2e 20 20 54 68 65 20  rrent key.  The 
d4e0: 65 6e 74 72 79 20 69 73 20 75 6e 69 71 75 65 20  entry is unique 
d4f0: 69 66 20 28 31 29 20 61 6e 79 20 63 6f 6c 75 6d  if (1) any colum
d500: 6e 20 69 73 20 4e 55 4c 4c 0a 20 20 20 20 20 20  n is NULL.      
d510: 20 20 20 20 2a 2a 20 6f 72 20 28 32 29 20 74 68      ** or (2) th
d520: 65 20 6e 65 78 74 20 65 6e 74 72 79 20 68 61 73  e next entry has
d530: 20 61 20 64 69 66 66 65 72 65 6e 74 20 6b 65 79   a different key
d540: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66   */.          if
d550: 28 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28  ( IsUniqueIndex(
d560: 70 49 64 78 29 20 29 7b 0a 20 20 20 20 20 20 20  pIdx) ){.       
d570: 20 20 20 20 20 69 6e 74 20 75 6e 69 71 4f 6b 20       int uniqOk 
d580: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b  = sqlite3VdbeMak
d590: 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20  eLabel(v);.     
d5a0: 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 36 3b         int jmp6;
d5b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
d5c0: 20 6b 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20   kk;.           
d5d0: 20 66 6f 72 28 6b 6b 3d 30 3b 20 6b 6b 3c 70 49   for(kk=0; kk<pI
d5e0: 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 6b 6b 2b  dx->nKeyCol; kk+
d5f0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
d600: 20 20 69 6e 74 20 69 43 6f 6c 20 3d 20 70 49 64    int iCol = pId
d610: 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 6b 5d 3b  x->aiColumn[kk];
d620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  .              a
d630: 73 73 65 72 74 28 20 69 43 6f 6c 21 3d 58 4e 5f  ssert( iCol!=XN_
d640: 52 4f 57 49 44 20 26 26 20 69 43 6f 6c 3c 70 54  ROWID && iCol<pT
d650: 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20  ab->nCol );.    
d660: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69 43            if( iC
d670: 6f 6c 3e 3d 30 20 26 26 20 70 54 61 62 2d 3e 61  ol>=0 && pTab->a
d680: 43 6f 6c 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e 75 6c  Col[iCol].notNul
d690: 6c 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  l ) continue;.  
d6a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
d6b0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d6c0: 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 31 2b 6b   OP_IsNull, r1+k
d6d0: 6b 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20  k, uniqOk);.    
d6e0: 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43 6f            VdbeCo
d6f0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
d700: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
d710: 20 20 20 20 20 6a 6d 70 36 20 3d 20 73 71 6c 69       jmp6 = sqli
d720: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
d730: 20 4f 50 5f 4e 65 78 74 2c 20 69 49 64 78 43 75   OP_Next, iIdxCu
d740: 72 2b 6a 29 3b 20 56 64 62 65 43 6f 76 65 72 61  r+j); VdbeCovera
d750: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
d760: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 47 6f     sqlite3VdbeGo
d770: 74 6f 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20  to(v, uniqOk);. 
d780: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
d790: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
d7a0: 2c 20 6a 6d 70 36 29 3b 0a 20 20 20 20 20 20 20  , jmp6);.       
d7b0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d7c0: 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f  AddOp4Int(v, OP_
d7d0: 49 64 78 47 54 2c 20 69 49 64 78 43 75 72 2b 6a  IdxGT, iIdxCur+j
d7e0: 2c 20 75 6e 69 71 4f 6b 2c 20 72 31 2c 0a 20 20  , uniqOk, r1,.  
d7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
d810: 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 20 56  Idx->nKeyCol); V
d820: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
d830: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
d840: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d850: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
d860: 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74  1); /* Decrement
d870: 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a   error limit */.
d880: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
d890: 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e  te3VdbeLoadStrin
d8a0: 67 28 76 2c 20 33 2c 20 22 6e 6f 6e 2d 75 6e 69  g(v, 3, "non-uni
d8b0: 71 75 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64  que entry in ind
d8c0: 65 78 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20  ex ");.         
d8d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 47 6f     sqlite3VdbeGo
d8e0: 74 6f 28 76 2c 20 6a 6d 70 35 29 3b 0a 20 20 20  to(v, jmp5);.   
d8f0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d900: 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c  VdbeResolveLabel
d910: 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20  (v, uniqOk);.   
d920: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
d930: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
d940: 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 34 29 3b  mpHere(v, jmp4);
d950: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d960: 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78  e3ResolvePartIdx
d970: 4c 61 62 65 6c 28 70 50 61 72 73 65 2c 20 6a 6d  Label(pParse, jm
d980: 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  p3);.        }. 
d990: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d9a0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e  beAddOp2(v, OP_N
d9b0: 65 78 74 2c 20 69 44 61 74 61 43 75 72 2c 20 6c  ext, iDataCur, l
d9c0: 6f 6f 70 54 6f 70 29 3b 20 56 64 62 65 43 6f 76  oopTop); VdbeCov
d9d0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
d9e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
d9f0: 70 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54 6f 70  pHere(v, loopTop
da00: 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  -1);.#ifndef SQL
da10: 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f  ITE_OMIT_BTREECO
da20: 55 4e 54 0a 20 20 20 20 20 20 20 20 73 71 6c 69  UNT.        sqli
da30: 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e  te3VdbeLoadStrin
da40: 67 28 76 2c 20 32 2c 20 22 77 72 6f 6e 67 20 23  g(v, 2, "wrong #
da50: 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69   of entries in i
da60: 6e 64 65 78 20 22 29 3b 0a 20 20 20 20 20 20 20  ndex ");.       
da70: 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70   for(j=0, pIdx=p
da80: 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64  Tab->pIndex; pId
da90: 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
daa0: 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  ext, j++){.     
dab0: 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49       if( pPk==pI
dac0: 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  dx ) continue;. 
dad0: 20 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20           addr = 
dae0: 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65  sqlite3VdbeCurre
daf0: 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20 20 20  ntAddr(v);.     
db00: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
db10: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50  AddOp2(v, OP_IfP
db20: 6f 73 2c 20 31 2c 20 61 64 64 72 2b 32 29 3b 20  os, 1, addr+2); 
db30: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
db40: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
db50: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
db60: 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a  OP_Halt, 0, 0);.
db70: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
db80: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
db90: 50 5f 43 6f 75 6e 74 2c 20 69 49 64 78 43 75 72  P_Count, iIdxCur
dba0: 2b 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20  +j, 3);.        
dbb0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
dbc0: 4f 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20 38 2b  Op3(v, OP_Eq, 8+
dbd0: 6a 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b 20 56  j, addr+8, 3); V
dbe0: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
dbf0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
dc00: 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c  3VdbeChangeP5(v,
dc10: 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 29   SQLITE_NOTNULL)
dc20: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
dc30: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
dc40: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
dc50: 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  1);.          sq
dc60: 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72  lite3VdbeLoadStr
dc70: 69 6e 67 28 76 2c 20 33 2c 20 70 49 64 78 2d 3e  ing(v, 3, pIdx->
dc80: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20  zName);.        
dc90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
dca0: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74  Op3(v, OP_Concat
dcb0: 2c 20 33 2c 20 32 2c 20 37 29 3b 0a 20 20 20 20  , 3, 2, 7);.    
dcc0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
dcd0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
dce0: 73 75 6c 74 52 6f 77 2c 20 37 2c 20 31 29 3b 0a  sultRow, 7, 1);.
dcf0: 20 20 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66          }.#endif
dd00: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
dd10: 42 54 52 45 45 43 4f 55 4e 54 20 2a 2f 0a 20 20  BTREECOUNT */.  
dd20: 20 20 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20      } .    }.   
dd30: 20 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63 20   {.      static 
dd40: 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20  const int iLn = 
dd50: 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45  VDBE_OFFSET_LINE
dd60: 4e 4f 28 32 29 3b 0a 20 20 20 20 20 20 73 74 61  NO(2);.      sta
dd70: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
dd80: 4c 69 73 74 20 65 6e 64 43 6f 64 65 5b 5d 20 3d  List endCode[] =
dd90: 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f   {.        { OP_
dda0: 41 64 64 49 6d 6d 2c 20 20 20 20 20 20 31 2c 20  AddImm,      1, 
ddb0: 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20  0,        0},   
ddc0: 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20   /* 0 */.       
ddd0: 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20 20 20 20   { OP_If,       
dde0: 20 20 20 31 2c 20 34 2c 20 20 20 20 20 20 20 20     1, 4,        
ddf0: 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20  0},    /* 1 */. 
de00: 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69         { OP_Stri
de10: 6e 67 38 2c 20 20 20 20 20 30 2c 20 33 2c 20 20  ng8,     0, 3,  
de20: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
de30: 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f  2 */.        { O
de40: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 33  P_ResultRow,   3
de50: 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 20  , 1,        0}, 
de60: 20 20 20 2f 2a 20 33 20 2a 2f 0a 20 20 20 20 20     /* 3 */.     
de70: 20 7d 3b 0a 20 20 20 20 20 20 56 64 62 65 4f 70   };.      VdbeOp
de80: 20 2a 61 4f 70 3b 0a 0a 20 20 20 20 20 20 61 4f   *aOp;..      aO
de90: 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  p = sqlite3VdbeA
dea0: 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
deb0: 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c 20  ySize(endCode), 
dec0: 65 6e 64 43 6f 64 65 2c 20 69 4c 6e 29 3b 0a 20  endCode, iLn);. 
ded0: 20 20 20 20 20 69 66 28 20 61 4f 70 20 29 7b 0a       if( aOp ){.
dee0: 20 20 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70          aOp[0].p
def0: 32 20 3d 20 2d 6d 78 45 72 72 3b 0a 20 20 20 20  2 = -mxErr;.    
df00: 20 20 20 20 61 4f 70 5b 32 5d 2e 70 34 74 79 70      aOp[2].p4typ
df10: 65 20 3d 20 50 34 5f 53 54 41 54 49 43 3b 0a 20  e = P4_STATIC;. 
df20: 20 20 20 20 20 20 20 61 4f 70 5b 32 5d 2e 70 34         aOp[2].p4
df30: 2e 7a 20 3d 20 22 6f 6b 22 3b 0a 20 20 20 20 20  .z = "ok";.     
df40: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
df50: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
df60: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
df70: 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a  GRITY_CHECK */..
df80: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
df90: 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a 0a 20  MIT_UTF16.  /*. 
dfa0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63   **   PRAGMA enc
dfb0: 6f 64 69 6e 67 0a 20 20 2a 2a 20 20 20 50 52 41  oding.  **   PRA
dfc0: 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 22  GMA encoding = "
dfd0: 75 74 66 2d 38 22 7c 22 75 74 66 2d 31 36 22 7c  utf-8"|"utf-16"|
dfe0: 22 75 74 66 2d 31 36 6c 65 22 7c 22 75 74 66 2d  "utf-16le"|"utf-
dff0: 31 36 62 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  16be".  **.  ** 
e000: 49 6e 20 69 74 73 20 66 69 72 73 74 20 66 6f 72  In its first for
e010: 6d 2c 20 74 68 69 73 20 70 72 61 67 6d 61 20 72  m, this pragma r
e020: 65 74 75 72 6e 73 20 74 68 65 20 65 6e 63 6f 64  eturns the encod
e030: 69 6e 67 20 6f 66 20 74 68 65 20 6d 61 69 6e 0a  ing of the main.
e040: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 49    ** database. I
e050: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
e060: 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65  s not initialize
e070: 64 2c 20 69 74 20 69 73 20 69 6e 69 74 69 61 6c  d, it is initial
e080: 69 7a 65 64 20 6e 6f 77 2e 0a 20 20 2a 2a 0a 20  ized now..  **. 
e090: 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 66   ** The second f
e0a0: 6f 72 6d 20 6f 66 20 74 68 69 73 20 70 72 61 67  orm of this prag
e0b0: 6d 61 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66  ma is a no-op if
e0c0: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
e0d0: 73 65 20 66 69 6c 65 0a 20 20 2a 2a 20 68 61 73  se file.  ** has
e0e0: 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 62 65 65   not already bee
e0f0: 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49  n initialized. I
e100: 6e 20 74 68 69 73 20 63 61 73 65 20 69 74 20 73  n this case it s
e110: 65 74 73 20 74 68 65 20 64 65 66 61 75 6c 74 0a  ets the default.
e120: 20 20 2a 2a 20 65 6e 63 6f 64 69 6e 67 20 74 68    ** encoding th
e130: 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  at will be used 
e140: 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  for the main dat
e150: 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 61 20  abase file if a 
e160: 6e 65 77 20 66 69 6c 65 0a 20 20 2a 2a 20 69 73  new file.  ** is
e170: 20 63 72 65 61 74 65 64 2e 20 49 66 20 61 6e 20   created. If an 
e180: 65 78 69 73 74 69 6e 67 20 6d 61 69 6e 20 64 61  existing main da
e190: 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 6f  tabase file is o
e1a0: 70 65 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a  pened, then the.
e1b0: 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 74 65 78    ** default tex
e1c0: 74 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20 74  t encoding for t
e1d0: 68 65 20 65 78 69 73 74 69 6e 67 20 64 61 74 61  he existing data
e1e0: 62 61 73 65 20 69 73 20 75 73 65 64 2e 0a 20 20  base is used..  
e1f0: 2a 2a 20 0a 20 20 2a 2a 20 49 6e 20 61 6c 6c 20  ** .  ** In all 
e200: 63 61 73 65 73 20 6e 65 77 20 64 61 74 61 62 61  cases new databa
e210: 73 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  ses created usin
e220: 67 20 74 68 65 20 41 54 54 41 43 48 20 63 6f 6d  g the ATTACH com
e230: 6d 61 6e 64 20 61 72 65 0a 20 20 2a 2a 20 63 72  mand are.  ** cr
e240: 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68 65  eated to use the
e250: 20 73 61 6d 65 20 64 65 66 61 75 6c 74 20 74 65   same default te
e260: 78 74 20 65 6e 63 6f 64 69 6e 67 20 61 73 20 74  xt encoding as t
e270: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
e280: 2e 20 49 66 0a 20 20 2a 2a 20 74 68 65 20 6d 61  . If.  ** the ma
e290: 69 6e 20 64 61 74 61 62 61 73 65 20 68 61 73 20  in database has 
e2a0: 6e 6f 74 20 62 65 65 6e 20 69 6e 69 74 69 61 6c  not been initial
e2b0: 69 7a 65 64 20 61 6e 64 2f 6f 72 20 63 72 65 61  ized and/or crea
e2c0: 74 65 64 20 77 68 65 6e 20 41 54 54 41 43 48 0a  ted when ATTACH.
e2d0: 20 20 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64    ** is executed
e2e0: 2c 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20 62  , this is done b
e2f0: 65 66 6f 72 65 20 74 68 65 20 41 54 54 41 43 48  efore the ATTACH
e300: 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 20 20 2a 2a   operation..  **
e310: 0a 20 20 2a 2a 20 49 6e 20 74 68 65 20 73 65 63  .  ** In the sec
e320: 6f 6e 64 20 66 6f 72 6d 20 74 68 69 73 20 70 72  ond form this pr
e330: 61 67 6d 61 20 73 65 74 73 20 74 68 65 20 74 65  agma sets the te
e340: 78 74 20 65 6e 63 6f 64 69 6e 67 20 74 6f 20 62  xt encoding to b
e350: 65 20 75 73 65 64 20 69 6e 0a 20 20 2a 2a 20 6e  e used in.  ** n
e360: 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ew database file
e370: 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  s created using 
e380: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 68 61  this database ha
e390: 6e 64 6c 65 2e 20 49 74 20 69 73 20 6f 6e 6c 79  ndle. It is only
e3a0: 0a 20 20 2a 2a 20 75 73 65 66 75 6c 20 69 66 20  .  ** useful if 
e3b0: 69 6e 76 6f 6b 65 64 20 69 6d 6d 65 64 69 61 74  invoked immediat
e3c0: 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6d 61  ely after the ma
e3d0: 69 6e 20 64 61 74 61 62 61 73 65 20 69 0a 20 20  in database i.  
e3e0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
e3f0: 70 5f 45 4e 43 4f 44 49 4e 47 3a 20 7b 0a 20 20  p_ENCODING: {.  
e400: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73    static const s
e410: 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 7b 0a  truct EncName {.
e420: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d        char *zNam
e430: 65 3b 0a 20 20 20 20 20 20 75 38 20 65 6e 63 3b  e;.      u8 enc;
e440: 0a 20 20 20 20 7d 20 65 6e 63 6e 61 6d 65 73 5b  .    } encnames[
e450: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 55  ] = {.      { "U
e460: 54 46 38 22 2c 20 20 20 20 20 53 51 4c 49 54 45  TF8",     SQLITE
e470: 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c 0a  _UTF8        },.
e480: 20 20 20 20 20 20 7b 20 22 55 54 46 2d 38 22 2c        { "UTF-8",
e490: 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20      SQLITE_UTF8 
e4a0: 20 20 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75         },  /* Mu
e4b0: 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 31  st be element [1
e4c0: 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54  ] */.      { "UT
e4d0: 46 2d 31 36 6c 65 22 2c 20 53 51 4c 49 54 45 5f  F-16le", SQLITE_
e4e0: 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 20 20  UTF16LE     },  
e4f0: 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65  /* Must be eleme
e500: 6e 74 20 5b 32 5d 20 2a 2f 0a 20 20 20 20 20 20  nt [2] */.      
e510: 7b 20 22 55 54 46 2d 31 36 62 65 22 2c 20 53 51  { "UTF-16be", SQ
e520: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20 20 20  LITE_UTF16BE    
e530: 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20   },  /* Must be 
e540: 65 6c 65 6d 65 6e 74 20 5b 33 5d 20 2a 2f 0a 20  element [3] */. 
e550: 20 20 20 20 20 7b 20 22 55 54 46 31 36 6c 65 22       { "UTF16le"
e560: 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  ,  SQLITE_UTF16L
e570: 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b  E     },.      {
e580: 20 22 55 54 46 31 36 62 65 22 2c 20 20 53 51 4c   "UTF16be",  SQL
e590: 49 54 45 5f 55 54 46 31 36 42 45 20 20 20 20 20  ITE_UTF16BE     
e5a0: 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d  },.      { "UTF-
e5b0: 31 36 22 2c 20 20 20 30 20 20 20 20 20 20 20 20  16",   0        
e5c0: 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20            }, /* 
e5d0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
e5e0: 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  VE */.      { "U
e5f0: 54 46 31 36 22 2c 20 20 20 20 30 20 20 20 20 20  TF16",    0     
e600: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20               }, 
e610: 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  /* SQLITE_UTF16N
e620: 41 54 49 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b  ATIVE */.      {
e630: 20 30 2c 20 30 20 7d 0a 20 20 20 20 7d 3b 0a 20   0, 0 }.    };. 
e640: 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20     const struct 
e650: 45 6e 63 4e 61 6d 65 20 2a 70 45 6e 63 3b 0a 20  EncName *pEnc;. 
e660: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
e670: 7b 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41 20  {    /* "PRAGMA 
e680: 65 6e 63 6f 64 69 6e 67 22 20 2a 2f 0a 20 20 20  encoding" */.   
e690: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52 65     if( sqlite3Re
e6a0: 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65 29  adSchema(pParse)
e6b0: 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f   ) goto pragma_o
e6c0: 75 74 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  ut;.      assert
e6d0: 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54  ( encnames[SQLIT
e6e0: 45 5f 55 54 46 38 5d 2e 65 6e 63 3d 3d 53 51 4c  E_UTF8].enc==SQL
e6f0: 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 20 20  ITE_UTF8 );.    
e700: 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d    assert( encnam
e710: 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  es[SQLITE_UTF16L
e720: 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  E].enc==SQLITE_U
e730: 54 46 31 36 4c 45 20 29 3b 0a 20 20 20 20 20 20  TF16LE );.      
e740: 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73  assert( encnames
e750: 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 5d  [SQLITE_UTF16BE]
e760: 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  .enc==SQLITE_UTF
e770: 31 36 42 45 20 29 3b 0a 20 20 20 20 20 20 72 65  16BE );.      re
e780: 74 75 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76  turnSingleText(v
e790: 2c 20 22 65 6e 63 6f 64 69 6e 67 22 2c 20 65 6e  , "encoding", en
e7a0: 63 6e 61 6d 65 73 5b 45 4e 43 28 70 50 61 72 73  cnames[ENC(pPars
e7b0: 65 2d 3e 64 62 29 5d 2e 7a 4e 61 6d 65 29 3b 0a  e->db)].zName);.
e7c0: 20 20 20 20 7d 65 6c 73 65 7b 20 20 20 20 20 20      }else{      
e7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7e0: 20 20 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63    /* "PRAGMA enc
e7f0: 6f 64 69 6e 67 20 3d 20 58 58 58 22 20 2a 2f 0a  oding = XXX" */.
e800: 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 63 68        /* Only ch
e810: 61 6e 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f  ange the value o
e820: 66 20 73 71 6c 69 74 65 2e 65 6e 63 20 69 66 20  f sqlite.enc if 
e830: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
e840: 64 6c 65 20 69 73 20 6e 6f 74 0a 20 20 20 20 20  dle is not.     
e850: 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e   ** initialized.
e860: 20 49 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74   If the main dat
e870: 61 62 61 73 65 20 65 78 69 73 74 73 2c 20 74 68  abase exists, th
e880: 65 20 6e 65 77 20 73 71 6c 69 74 65 2e 65 6e 63  e new sqlite.enc
e890: 20 76 61 6c 75 65 0a 20 20 20 20 20 20 2a 2a 20   value.      ** 
e8a0: 77 69 6c 6c 20 62 65 20 6f 76 65 72 77 72 69 74  will be overwrit
e8b0: 74 65 6e 20 77 68 65 6e 20 74 68 65 20 73 63 68  ten when the sch
e8c0: 65 6d 61 20 69 73 20 6e 65 78 74 20 6c 6f 61 64  ema is next load
e8d0: 65 64 2e 20 49 66 20 69 74 20 64 6f 65 73 20 6e  ed. If it does n
e8e0: 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61 6c 72 65  ot.      ** alre
e8f0: 61 64 79 20 65 78 69 73 74 73 2c 20 69 74 20 77  ady exists, it w
e900: 69 6c 6c 20 62 65 20 63 72 65 61 74 65 64 20 74  ill be created t
e910: 6f 20 75 73 65 20 74 68 65 20 6e 65 77 20 65 6e  o use the new en
e920: 63 6f 64 69 6e 67 20 76 61 6c 75 65 2e 0a 20 20  coding value..  
e930: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
e940: 20 0a 20 20 20 20 20 20 20 20 21 28 44 62 48 61   .        !(DbHa
e950: 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c  sProperty(db, 0,
e960: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
e970: 29 29 20 7c 7c 20 0a 20 20 20 20 20 20 20 20 44  )) || .        D
e980: 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c  bHasProperty(db,
e990: 20 30 2c 20 44 42 5f 45 6d 70 74 79 29 20 0a 20   0, DB_Empty) . 
e9a0: 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20       ){.        
e9b0: 66 6f 72 28 70 45 6e 63 3d 26 65 6e 63 6e 61 6d  for(pEnc=&encnam
e9c0: 65 73 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61  es[0]; pEnc->zNa
e9d0: 6d 65 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20 20 20  me; pEnc++){.   
e9e0: 20 20 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71         if( 0==sq
e9f0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69  lite3StrICmp(zRi
ea00: 67 68 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65  ght, pEnc->zName
ea10: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ) ){.           
ea20: 20 53 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20   SCHEMA_ENC(db) 
ea30: 3d 20 45 4e 43 28 64 62 29 20 3d 0a 20 20 20 20  = ENC(db) =.    
ea40: 20 20 20 20 20 20 20 20 20 20 20 20 70 45 6e 63              pEnc
ea50: 2d 3e 65 6e 63 20 3f 20 70 45 6e 63 2d 3e 65 6e  ->enc ? pEnc->en
ea60: 63 20 3a 20 53 51 4c 49 54 45 5f 55 54 46 31 36  c : SQLITE_UTF16
ea70: 4e 41 54 49 56 45 3b 0a 20 20 20 20 20 20 20 20  NATIVE;.        
ea80: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
ea90: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
eaa0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 70 45  .        if( !pE
eab0: 6e 63 2d 3e 7a 4e 61 6d 65 20 29 7b 0a 20 20 20  nc->zName ){.   
eac0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72         sqlite3Er
ead0: 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22  rorMsg(pParse, "
eae0: 75 6e 73 75 70 70 6f 72 74 65 64 20 65 6e 63 6f  unsupported enco
eaf0: 64 69 6e 67 3a 20 25 73 22 2c 20 7a 52 69 67 68  ding: %s", zRigh
eb00: 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  t);.        }.  
eb10: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
eb20: 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20    break;.#endif 
eb30: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
eb40: 54 46 31 36 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  TF16 */..#ifndef
eb50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48   SQLITE_OMIT_SCH
eb60: 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47  EMA_VERSION_PRAG
eb70: 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  MAS.  /*.  **   
eb80: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
eb90: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 20  schema_version. 
eba0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63   **   PRAGMA [sc
ebb0: 68 65 6d 61 2e 5d 73 63 68 65 6d 61 5f 76 65 72  hema.]schema_ver
ebc0: 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e  sion = <integer>
ebd0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  **.  **   PRA
ebe0: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 75 73 65  GMA [schema.]use
ebf0: 72 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20  r_version.  **  
ec00: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
ec10: 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20  ]user_version = 
ec20: 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20  <integer>.  **. 
ec30: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63   **   PRAGMA [sc
ec40: 68 65 6d 61 2e 5d 66 72 65 65 6c 69 73 74 5f 63  hema.]freelist_c
ec50: 6f 75 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  ount.  **.  **  
ec60: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
ec70: 5d 64 61 74 61 5f 76 65 72 73 69 6f 6e 0a 20 20  ]data_version.  
ec80: 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  **.  **   PRAGMA
ec90: 20 5b 73 63 68 65 6d 61 2e 5d 61 70 70 6c 69 63   [schema.]applic
eca0: 61 74 69 6f 6e 5f 69 64 0a 20 20 2a 2a 20 20 20  ation_id.  **   
ecb0: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
ecc0: 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 20 3d  application_id =
ecd0: 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a   <integer>.  **.
ece0: 20 20 2a 2a 20 54 68 65 20 70 72 61 67 6d 61 27    ** The pragma'
ecf0: 73 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  s schema_version
ed00: 20 61 6e 64 20 75 73 65 72 5f 76 65 72 73 69 6f   and user_versio
ed10: 6e 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 65  n are used to se
ed20: 74 20 6f 72 20 67 65 74 0a 20 20 2a 2a 20 74 68  t or get.  ** th
ed30: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73  e value of the s
ed40: 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e  chema-version an
ed50: 64 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 2c 20  d user-version, 
ed60: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 42 6f  respectively. Bo
ed70: 74 68 0a 20 20 2a 2a 20 74 68 65 20 73 63 68 65  th.  ** the sche
ed80: 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 74  ma-version and t
ed90: 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20  he user-version 
eda0: 61 72 65 20 33 32 2d 62 69 74 20 73 69 67 6e 65  are 32-bit signe
edb0: 64 20 69 6e 74 65 67 65 72 73 0a 20 20 2a 2a 20  d integers.  ** 
edc0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61  stored in the da
edd0: 74 61 62 61 73 65 20 68 65 61 64 65 72 2e 0a 20  tabase header.. 
ede0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 63 68   **.  ** The sch
edf0: 65 6d 61 2d 63 6f 6f 6b 69 65 20 69 73 20 75 73  ema-cookie is us
ee00: 75 61 6c 6c 79 20 6f 6e 6c 79 20 6d 61 6e 69 70  ually only manip
ee10: 75 6c 61 74 65 64 20 69 6e 74 65 72 6e 61 6c 6c  ulated internall
ee20: 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74 0a  y by SQLite. It.
ee30: 20 20 2a 2a 20 69 73 20 69 6e 63 72 65 6d 65 6e    ** is incremen
ee40: 74 65 64 20 62 79 20 53 51 4c 69 74 65 20 77 68  ted by SQLite wh
ee50: 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
ee60: 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 6d 6f  ase schema is mo
ee70: 64 69 66 69 65 64 20 28 62 79 0a 20 20 2a 2a 20  dified (by.  ** 
ee80: 63 72 65 61 74 69 6e 67 20 6f 72 20 64 72 6f 70  creating or drop
ee90: 70 69 6e 67 20 61 20 74 61 62 6c 65 20 6f 72 20  ping a table or 
eea0: 69 6e 64 65 78 29 2e 20 54 68 65 20 73 63 68 65  index). The sche
eeb0: 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20 75 73  ma version is us
eec0: 65 64 20 62 79 0a 20 20 2a 2a 20 53 51 4c 69 74  ed by.  ** SQLit
eed0: 65 20 65 61 63 68 20 74 69 6d 65 20 61 20 71 75  e each time a qu
eee0: 65 72 79 20 69 73 20 65 78 65 63 75 74 65 64 20  ery is executed 
eef0: 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  to ensure that t
ef00: 68 65 20 69 6e 74 65 72 6e 61 6c 20 63 61 63 68  he internal cach
ef10: 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 73 63  e.  ** of the sc
ef20: 68 65 6d 61 20 75 73 65 64 20 77 68 65 6e 20 63  hema used when c
ef30: 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 53 51 4c  ompiling the SQL
ef40: 20 71 75 65 72 79 20 6d 61 74 63 68 65 73 20 74   query matches t
ef50: 68 65 20 73 63 68 65 6d 61 20 6f 66 0a 20 20 2a  he schema of.  *
ef60: 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  * the database a
ef70: 67 61 69 6e 73 74 20 77 68 69 63 68 20 74 68 65  gainst which the
ef80: 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 20   compiled query 
ef90: 69 73 20 61 63 74 75 61 6c 6c 79 20 65 78 65 63  is actually exec
efa0: 75 74 65 64 2e 0a 20 20 2a 2a 20 53 75 62 76 65  uted..  ** Subve
efb0: 72 74 69 6e 67 20 74 68 69 73 20 6d 65 63 68 61  rting this mecha
efc0: 6e 69 73 6d 20 62 79 20 75 73 69 6e 67 20 22 50  nism by using "P
efd0: 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
efe0: 73 69 6f 6e 22 20 74 6f 20 6d 6f 64 69 66 79 0a  sion" to modify.
eff0: 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d    ** the schema-
f000: 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 74 65 6e  version is poten
f010: 74 69 61 6c 6c 79 20 64 61 6e 67 65 72 6f 75 73  tially dangerous
f020: 20 61 6e 64 20 6d 61 79 20 6c 65 61 64 20 74 6f   and may lead to
f030: 20 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 63 72   program.  ** cr
f040: 61 73 68 65 73 20 6f 72 20 64 61 74 61 62 61 73  ashes or databas
f050: 65 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20 55 73  e corruption. Us
f060: 65 20 77 69 74 68 20 63 61 75 74 69 6f 6e 21 0a  e with caution!.
f070: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 75 73    **.  ** The us
f080: 65 72 2d 76 65 72 73 69 6f 6e 20 69 73 20 6e 6f  er-version is no
f090: 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c  t used internall
f0a0: 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74 20  y by SQLite. It 
f0b0: 6d 61 79 20 62 65 20 75 73 65 64 20 62 79 0a 20  may be used by. 
f0c0: 20 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f 6e 73   ** applications
f0d0: 20 66 6f 72 20 61 6e 79 20 70 75 72 70 6f 73 65   for any purpose
f0e0: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
f0f0: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
f100: 55 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 43  UE: {.    int iC
f110: 6f 6f 6b 69 65 20 3d 20 70 50 72 61 67 6d 61 2d  ookie = pPragma-
f120: 3e 69 41 72 67 3b 20 20 2f 2a 20 57 68 69 63 68  >iArg;  /* Which
f130: 20 63 6f 6f 6b 69 65 20 74 6f 20 72 65 61 64 20   cookie to read 
f140: 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 20 20  or write */.    
f150: 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42  sqlite3VdbeUsesB
f160: 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20  tree(v, iDb);.  
f170: 20 20 69 66 28 20 7a 52 69 67 68 74 20 26 26 20    if( zRight && 
f180: 28 70 50 72 61 67 6d 61 2d 3e 6d 50 72 61 67 46  (pPragma->mPragF
f190: 6c 61 67 20 26 20 50 72 61 67 46 6c 61 67 5f 52  lag & PragFlag_R
f1a0: 65 61 64 4f 6e 6c 79 29 3d 3d 30 20 29 7b 0a 20  eadOnly)==0 ){. 
f1b0: 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20 74 68       /* Write th
f1c0: 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b  e specified cook
f1d0: 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  ie value */.    
f1e0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56    static const V
f1f0: 64 62 65 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f  dbeOpList setCoo
f200: 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  kie[] = {.      
f210: 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69    { OP_Transacti
f220: 6f 6e 2c 20 20 20 20 30 2c 20 20 31 2c 20 20 30  on,    0,  1,  0
f230: 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20  },    /* 0 */.  
f240: 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f        { OP_SetCo
f250: 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 30  okie,      0,  0
f260: 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a  ,  0},    /* 1 *
f270: 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20  /.      };.     
f280: 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20   VdbeOp *aOp;.  
f290: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 56      sqlite3VdbeV
f2a0: 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52 65 71  erifyNoMallocReq
f2b0: 75 69 72 65 64 28 76 2c 20 41 72 72 61 79 53 69  uired(v, ArraySi
f2c0: 7a 65 28 73 65 74 43 6f 6f 6b 69 65 29 29 3b 0a  ze(setCookie));.
f2d0: 20 20 20 20 20 20 61 4f 70 20 3d 20 73 71 6c 69        aOp = sqli
f2e0: 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74  te3VdbeAddOpList
f2f0: 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65  (v, ArraySize(se
f300: 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f  tCookie), setCoo
f310: 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 69  kie, 0);.      i
f320: 66 28 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c  f( ONLY_IF_REALL
f330: 4f 43 5f 53 54 52 45 53 53 28 61 4f 70 3d 3d 30  OC_STRESS(aOp==0
f340: 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  ) ) break;.     
f350: 20 61 4f 70 5b 30 5d 2e 70 31 20 3d 20 69 44 62   aOp[0].p1 = iDb
f360: 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70  ;.      aOp[1].p
f370: 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 61  1 = iDb;.      a
f380: 4f 70 5b 31 5d 2e 70 32 20 3d 20 69 43 6f 6f 6b  Op[1].p2 = iCook
f390: 69 65 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d  ie;.      aOp[1]
f3a0: 2e 70 33 20 3d 20 73 71 6c 69 74 65 33 41 74 6f  .p3 = sqlite3Ato
f3b0: 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d  i(zRight);.    }
f3c0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52  else{.      /* R
f3d0: 65 61 64 20 74 68 65 20 73 70 65 63 69 66 69 65  ead the specifie
f3e0: 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a  d cookie value *
f3f0: 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  /.      static c
f400: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
f410: 72 65 61 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b  readCookie[] = {
f420: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72  .        { OP_Tr
f430: 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 20 30  ansaction,     0
f440: 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a  ,  0,  0},    /*
f450: 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   0 */.        { 
f460: 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20  OP_ReadCookie,  
f470: 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20      0,  1,  0}, 
f480: 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20     /* 1 */.     
f490: 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f     { OP_ResultRo
f4a0: 77 2c 20 20 20 20 20 20 20 31 2c 20 20 31 2c 20  w,       1,  1, 
f4b0: 20 30 7d 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20   0}.      };.   
f4c0: 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a     VdbeOp *aOp;.
f4d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f4e0: 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52  eVerifyNoMallocR
f4f0: 65 71 75 69 72 65 64 28 76 2c 20 41 72 72 61 79  equired(v, Array
f500: 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65 29  Size(readCookie)
f510: 29 3b 0a 20 20 20 20 20 20 61 4f 70 20 3d 20 73  );.      aOp = s
f520: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
f530: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
f540: 28 72 65 61 64 43 6f 6f 6b 69 65 29 2c 72 65 61  (readCookie),rea
f550: 64 43 6f 6f 6b 69 65 2c 30 29 3b 0a 20 20 20 20  dCookie,0);.    
f560: 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52 45    if( ONLY_IF_RE
f570: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f 70  ALLOC_STRESS(aOp
f580: 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a 20 20  ==0) ) break;.  
f590: 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20 3d 20      aOp[0].p1 = 
f5a0: 69 44 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31  iDb;.      aOp[1
f5b0: 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20  ].p1 = iDb;.    
f5c0: 20 20 61 4f 70 5b 31 5d 2e 70 33 20 3d 20 69 43    aOp[1].p3 = iC
f5d0: 6f 6f 6b 69 65 3b 0a 20 20 20 20 20 20 73 71 6c  ookie;.      sql
f5e0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
f5f0: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20  ls(v, 1);.      
f600: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
f610: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
f620: 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c  AME_NAME, zLeft,
f630: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
f640: 54 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  T);.      sqlite
f650: 33 56 64 62 65 52 65 75 73 61 62 6c 65 28 76 29  3VdbeReusable(v)
f660: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
f670: 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  eak;.#endif /* S
f680: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
f690: 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41  A_VERSION_PRAGMA
f6a0: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
f6b0: 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c  LITE_OMIT_COMPIL
f6c0: 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 20 20  EOPTION_DIAGS.  
f6d0: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
f6e0: 20 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73   compile_options
f6f0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
f700: 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 61  n the names of a
f710: 6c 6c 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  ll compile-time 
f720: 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 69 6e 20  options used in 
f730: 74 68 69 73 20 62 75 69 6c 64 2c 0a 20 20 2a 2a  this build,.  **
f740: 20 6f 6e 65 20 6f 70 74 69 6f 6e 20 70 65 72 20   one option per 
f750: 72 6f 77 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  row..  */.  case
f760: 20 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45   PragTyp_COMPILE
f770: 5f 4f 50 54 49 4f 4e 53 3a 20 7b 0a 20 20 20 20  _OPTIONS: {.    
f780: 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 63  int i = 0;.    c
f790: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 74 3b  onst char *zOpt;
f7a0: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
f7b0: 6d 20 3d 20 31 3b 0a 20 20 20 20 73 65 74 4f 6e  m = 1;.    setOn
f7c0: 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 22  eColumnName(v, "
f7d0: 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 22 29  compile_option")
f7e0: 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 7a 4f  ;.    while( (zO
f7f0: 70 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6d  pt = sqlite3_com
f800: 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69  pileoption_get(i
f810: 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ++))!=0 ){.     
f820: 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64   sqlite3VdbeLoad
f830: 53 74 72 69 6e 67 28 76 2c 20 31 2c 20 7a 4f 70  String(v, 1, zOp
f840: 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  t);.      sqlite
f850: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
f860: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
f870: 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  1);.    }.    sq
f880: 6c 69 74 65 33 56 64 62 65 52 65 75 73 61 62 6c  lite3VdbeReusabl
f890: 65 28 76 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  e(v);.  }.  brea
f8a0: 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
f8b0: 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
f8c0: 4f 50 54 49 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a  OPTION_DIAGS */.
f8d0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
f8e0: 4f 4d 49 54 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20  OMIT_WAL.  /*.  
f8f0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
f900: 65 6d 61 2e 5d 77 61 6c 5f 63 68 65 63 6b 70 6f  ema.]wal_checkpo
f910: 69 6e 74 20 3d 20 70 61 73 73 69 76 65 7c 66 75  int = passive|fu
f920: 6c 6c 7c 72 65 73 74 61 72 74 7c 74 72 75 6e 63  ll|restart|trunc
f930: 61 74 65 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 68  ate.  **.  ** Ch
f940: 65 63 6b 70 6f 69 6e 74 20 74 68 65 20 64 61 74  eckpoint the dat
f950: 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61  abase..  */.  ca
f960: 73 65 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 43  se PragTyp_WAL_C
f970: 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20  HECKPOINT: {.   
f980: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
f990: 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20  ar *azCol[] = { 
f9a0: 22 62 75 73 79 22 2c 20 22 6c 6f 67 22 2c 20 22  "busy", "log", "
f9b0: 63 68 65 63 6b 70 6f 69 6e 74 65 64 22 20 7d 3b  checkpointed" };
f9c0: 0a 20 20 20 20 69 6e 74 20 69 42 74 20 3d 20 28  .    int iBt = (
f9d0: 70 49 64 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c 49  pId2->z?iDb:SQLI
f9e0: 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 29  TE_MAX_ATTACHED)
f9f0: 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 20  ;.    int eMode 
fa00: 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  = SQLITE_CHECKPO
fa10: 49 4e 54 5f 50 41 53 53 49 56 45 3b 0a 20 20 20  INT_PASSIVE;.   
fa20: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
fa30: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
fa40: 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  StrICmp(zRight, 
fa50: 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20  "full")==0 ){.  
fa60: 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51        eMode = SQ
fa70: 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
fa80: 46 55 4c 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73  FULL;.      }els
fa90: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
faa0: 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 72 65  ICmp(zRight, "re
fab0: 73 74 61 72 74 22 29 3d 3d 30 20 29 7b 0a 20 20  start")==0 ){.  
fac0: 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51        eMode = SQ
fad0: 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
fae0: 52 45 53 54 41 52 54 3b 0a 20 20 20 20 20 20 7d  RESTART;.      }
faf0: 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33  else if( sqlite3
fb00: 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  StrICmp(zRight, 
fb10: 22 74 72 75 6e 63 61 74 65 22 29 3d 3d 30 20 29  "truncate")==0 )
fb20: 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20  {.        eMode 
fb30: 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  = SQLITE_CHECKPO
fb40: 49 4e 54 5f 54 52 55 4e 43 41 54 45 3b 0a 20 20  INT_TRUNCATE;.  
fb50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
fb60: 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65  setAllColumnName
fb70: 73 28 76 2c 20 33 2c 20 61 7a 43 6f 6c 29 3b 20  s(v, 3, azCol); 
fb80: 20 61 73 73 65 72 74 28 20 33 3d 3d 41 72 72 61   assert( 3==Arra
fb90: 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a  ySize(azCol) );.
fba0: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
fbb0: 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 3;.    sqlite
fbc0: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
fbd0: 50 5f 43 68 65 63 6b 70 6f 69 6e 74 2c 20 69 42  P_Checkpoint, iB
fbe0: 74 2c 20 65 4d 6f 64 65 2c 20 31 29 3b 0a 20 20  t, eMode, 1);.  
fbf0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
fc00: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
fc10: 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 7d 0a  Row, 1, 3);.  }.
fc20: 20 20 62 72 65 61 6b 3b 0a 0a 20 20 2f 2a 0a 20    break;..  /*. 
fc30: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61 6c   **   PRAGMA wal
fc40: 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 0a  _autocheckpoint.
fc50: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61    **   PRAGMA wa
fc60: 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
fc70: 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43   = N.  **.  ** C
fc80: 6f 6e 66 69 67 75 72 65 20 61 20 64 61 74 61 62  onfigure a datab
fc90: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  ase connection t
fca0: 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  o automatically 
fcb0: 63 68 65 63 6b 70 6f 69 6e 74 20 61 20 64 61 74  checkpoint a dat
fcc0: 61 62 61 73 65 0a 20 20 2a 2a 20 61 66 74 65 72  abase.  ** after
fcd0: 20 61 63 63 75 6d 75 6c 61 74 69 6e 67 20 4e 20   accumulating N 
fce0: 66 72 61 6d 65 73 20 69 6e 20 74 68 65 20 6c 6f  frames in the lo
fcf0: 67 2e 20 4f 72 20 71 75 65 72 79 20 66 6f 72 20  g. Or query for 
fd00: 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
fd10: 65 0a 20 20 2a 2a 20 6f 66 20 4e 2e 0a 20 20 2a  e.  ** of N..  *
fd20: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
fd30: 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f  _WAL_AUTOCHECKPO
fd40: 49 4e 54 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  INT: {.    if( z
fd50: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
fd60: 71 6c 69 74 65 33 5f 77 61 6c 5f 61 75 74 6f 63  qlite3_wal_autoc
fd70: 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 73 71  heckpoint(db, sq
fd80: 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
fd90: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ));.    }.    re
fda0: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c  turnSingleInt(v,
fdb0: 20 22 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70   "wal_autocheckp
fdc0: 6f 69 6e 74 22 2c 20 0a 20 20 20 20 20 20 20 64  oint", .       d
fdd0: 62 2d 3e 78 57 61 6c 43 61 6c 6c 62 61 63 6b 3d  b->xWalCallback=
fde0: 3d 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75  =sqlite3WalDefau
fdf0: 6c 74 48 6f 6f 6b 20 3f 20 0a 20 20 20 20 20 20  ltHook ? .      
fe00: 20 20 20 20 20 53 51 4c 49 54 45 5f 50 54 52 5f       SQLITE_PTR_
fe10: 54 4f 5f 49 4e 54 28 64 62 2d 3e 70 57 61 6c 41  TO_INT(db->pWalA
fe20: 72 67 29 20 3a 20 30 29 3b 0a 20 20 7d 0a 20 20  rg) : 0);.  }.  
fe30: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20  break;.#endif.. 
fe40: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
fe50: 20 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20   shrink_memory. 
fe60: 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45   **.  ** IMPLEME
fe70: 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 33  NTATION-OF: R-23
fe80: 34 34 35 2d 34 36 31 30 39 20 54 68 69 73 20 70  445-46109 This p
fe90: 72 61 67 6d 61 20 63 61 75 73 65 73 20 74 68 65  ragma causes the
fea0: 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 63   database.  ** c
feb0: 6f 6e 6e 65 63 74 69 6f 6e 20 6f 6e 20 77 68 69  onnection on whi
fec0: 63 68 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64  ch it is invoked
fed0: 20 74 6f 20 66 72 65 65 20 75 70 20 61 73 20 6d   to free up as m
fee0: 75 63 68 20 6d 65 6d 6f 72 79 20 61 73 20 69 74  uch memory as it
fef0: 0a 20 20 2a 2a 20 63 61 6e 2c 20 62 79 20 63 61  .  ** can, by ca
ff00: 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 64 62  lling sqlite3_db
ff10: 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28  _release_memory(
ff20: 29 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  )..  */.  case P
ff30: 72 61 67 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45  ragTyp_SHRINK_ME
ff40: 4d 4f 52 59 3a 20 7b 0a 20 20 20 20 73 71 6c 69  MORY: {.    sqli
ff50: 74 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d  te3_db_release_m
ff60: 65 6d 6f 72 79 28 64 62 29 3b 0a 20 20 20 20 62  emory(db);.    b
ff70: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
ff80: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75    **   PRAGMA bu
ff90: 73 79 5f 74 69 6d 65 6f 75 74 0a 20 20 2a 2a 20  sy_timeout.  ** 
ffa0: 20 20 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69    PRAGMA busy_ti
ffb0: 6d 65 6f 75 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20  meout = N.  **. 
ffc0: 20 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33   ** Call sqlite3
ffd0: 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62  _busy_timeout(db
ffe0: 2c 20 4e 29 2e 20 20 52 65 74 75 72 6e 20 74 68  , N).  Return th
fff0: 65 20 63 75 72 72 65 6e 74 20 74 69 6d 65 6f 75  e current timeou
10000 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20 69 66 20  t value.  ** if 
10010 6f 6e 65 20 69 73 20 73 65 74 2e 20 20 49 66 20  one is set.  If 
10020 6e 6f 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20  no busy handler 
10030 6f 72 20 61 20 64 69 66 66 65 72 65 6e 74 20 62  or a different b
10040 75 73 79 20 68 61 6e 64 6c 65 72 20 69 73 20 73  usy handler is s
10050 65 74 0a 20 20 2a 2a 20 74 68 65 6e 20 30 20 69  et.  ** then 0 i
10060 73 20 72 65 74 75 72 6e 65 64 2e 20 20 53 65 74  s returned.  Set
10070 74 69 6e 67 20 74 68 65 20 62 75 73 79 5f 74 69  ting the busy_ti
10080 6d 65 6f 75 74 20 74 6f 20 30 20 6f 72 20 6e 65  meout to 0 or ne
10090 67 61 74 69 76 65 0a 20 20 2a 2a 20 64 69 73 61  gative.  ** disa
100a0 62 6c 65 73 20 74 68 65 20 74 69 6d 65 6f 75 74  bles the timeout
100b0 2e 0a 20 20 2a 2f 0a 20 20 2f 2a 63 61 73 65 20  ..  */.  /*case 
100c0 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d  PragTyp_BUSY_TIM
100d0 45 4f 55 54 2a 2f 20 64 65 66 61 75 6c 74 3a 20  EOUT*/ default: 
100e0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  {.    assert( pP
100f0 72 61 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 3d  ragma->ePragTyp=
10100 3d 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49  =PragTyp_BUSY_TI
10110 4d 45 4f 55 54 20 29 3b 0a 20 20 20 20 69 66 28  MEOUT );.    if(
10120 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
10130 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69   sqlite3_busy_ti
10140 6d 65 6f 75 74 28 64 62 2c 20 73 71 6c 69 74 65  meout(db, sqlite
10150 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a  3Atoi(zRight));.
10160 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
10170 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 74 69  SingleInt(v, "ti
10180 6d 65 6f 75 74 22 2c 20 20 64 62 2d 3e 62 75 73  meout",  db->bus
10190 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20 20 20 62  yTimeout);.    b
101a0 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
101b0 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f    **   PRAGMA so
101c0 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 0a 20 20  ft_heap_limit.  
101d0 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74  **   PRAGMA soft
101e0 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3d 20 4e 0a  _heap_limit = N.
101f0 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d    **.  ** IMPLEM
10200 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32  ENTATION-OF: R-2
10210 36 33 34 33 2d 34 35 39 33 30 20 54 68 69 73 20  6343-45930 This 
10220 70 72 61 67 6d 61 20 69 6e 76 6f 6b 65 73 20 74  pragma invokes t
10230 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  he.  ** sqlite3_
10240 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36  soft_heap_limit6
10250 34 28 29 20 69 6e 74 65 72 66 61 63 65 20 77 69  4() interface wi
10260 74 68 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  th the argument 
10270 4e 2c 20 69 66 20 4e 20 69 73 0a 20 20 2a 2a 20  N, if N is.  ** 
10280 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 69 73  specified and is
10290 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20   a non-negative 
102a0 69 6e 74 65 67 65 72 2e 0a 20 20 2a 2a 20 49 4d  integer..  ** IM
102b0 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
102c0 20 52 2d 36 34 34 35 31 2d 30 37 31 36 33 20 54   R-64451-07163 T
102d0 68 65 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  he soft_heap_lim
102e0 69 74 20 70 72 61 67 6d 61 20 61 6c 77 61 79 73  it pragma always
102f0 0a 20 20 2a 2a 20 72 65 74 75 72 6e 73 20 74 68  .  ** returns th
10300 65 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 74  e same integer t
10310 68 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74  hat would be ret
10320 75 72 6e 65 64 20 62 79 20 74 68 65 0a 20 20 2a  urned by the.  *
10330 2a 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68  * sqlite3_soft_h
10340 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d 31 29 20  eap_limit64(-1) 
10350 43 2d 6c 61 6e 67 75 61 67 65 20 66 75 6e 63 74  C-language funct
10360 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ion..  */.  case
10370 20 50 72 61 67 54 79 70 5f 53 4f 46 54 5f 48 45   PragTyp_SOFT_HE
10380 41 50 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20  AP_LIMIT: {.    
10390 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b  sqlite3_int64 N;
103a0 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
103b0 26 26 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48  && sqlite3DecOrH
103c0 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20  exToI64(zRight, 
103d0 26 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  &N)==SQLITE_OK )
103e0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
103f0 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36  soft_heap_limit6
10400 34 28 4e 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  4(N);.    }.    
10410 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
10420 76 2c 20 22 73 6f 66 74 5f 68 65 61 70 5f 6c 69  v, "soft_heap_li
10430 6d 69 74 22 2c 20 20 73 71 6c 69 74 65 33 5f 73  mit",  sqlite3_s
10440 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34  oft_heap_limit64
10450 28 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b  (-1));.    break
10460 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
10470 20 20 20 50 52 41 47 4d 41 20 74 68 72 65 61 64     PRAGMA thread
10480 73 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  s.  **   PRAGMA 
10490 74 68 72 65 61 64 73 20 3d 20 4e 0a 20 20 2a 2a  threads = N.  **
104a0 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20  .  ** Configure 
104b0 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
104c0 65 72 20 6f 66 20 77 6f 72 6b 65 72 20 74 68 72  er of worker thr
104d0 65 61 64 73 2e 20 20 52 65 74 75 72 6e 20 74 68  eads.  Return th
104e0 65 20 6e 65 77 0a 20 20 2a 2a 20 6d 61 78 69 6d  e new.  ** maxim
104f0 75 6d 2c 20 77 68 69 63 68 20 6d 69 67 68 74 20  um, which might 
10500 62 65 20 6c 65 73 73 20 74 68 61 6e 20 72 65 71  be less than req
10510 75 65 73 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63  uested..  */.  c
10520 61 73 65 20 50 72 61 67 54 79 70 5f 54 48 52 45  ase PragTyp_THRE
10530 41 44 53 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74  ADS: {.    sqlit
10540 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20  e3_int64 N;.    
10550 69 66 28 20 7a 52 69 67 68 74 0a 20 20 20 20 20  if( zRight.     
10560 26 26 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48  && sqlite3DecOrH
10570 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20  exToI64(zRight, 
10580 26 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20  &N)==SQLITE_OK. 
10590 20 20 20 20 26 26 20 4e 3e 3d 30 0a 20 20 20 20      && N>=0.    
105a0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
105b0 5f 6c 69 6d 69 74 28 64 62 2c 20 53 51 4c 49 54  _limit(db, SQLIT
105c0 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54  E_LIMIT_WORKER_T
105d0 48 52 45 41 44 53 2c 20 28 69 6e 74 29 28 4e 26  HREADS, (int)(N&
105e0 30 78 37 66 66 66 66 66 66 66 29 29 3b 0a 20 20  0x7fffffff));.  
105f0 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69    }.    returnSi
10600 6e 67 6c 65 49 6e 74 28 76 2c 20 22 74 68 72 65  ngleInt(v, "thre
10610 61 64 73 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ads",.          
10620 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
10630 33 5f 6c 69 6d 69 74 28 64 62 2c 20 53 51 4c 49  3_limit(db, SQLI
10640 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f  TE_LIMIT_WORKER_
10650 54 48 52 45 41 44 53 2c 20 2d 31 29 29 3b 0a 20  THREADS, -1));. 
10660 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23     break;.  }..#
10670 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
10680 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
10690 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
106a0 0a 20 20 2f 2a 0a 20 20 2a 2a 20 52 65 70 6f 72  .  /*.  ** Repor
106b0 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  t the current st
106c0 61 74 65 20 6f 66 20 66 69 6c 65 20 6c 6f 67 73  ate of file logs
106d0 20 66 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73   for all databas
106e0 65 73 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  es.  */.  case P
106f0 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53 54 41 54  ragTyp_LOCK_STAT
10700 55 53 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63  US: {.    static
10710 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e   const char *con
10720 73 74 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20  st azLockName[] 
10730 3d 20 7b 0a 20 20 20 20 20 20 22 75 6e 6c 6f 63  = {.      "unloc
10740 6b 65 64 22 2c 20 22 73 68 61 72 65 64 22 2c 20  ked", "shared", 
10750 22 72 65 73 65 72 76 65 64 22 2c 20 22 70 65 6e  "reserved", "pen
10760 64 69 6e 67 22 2c 20 22 65 78 63 6c 75 73 69 76  ding", "exclusiv
10770 65 22 0a 20 20 20 20 7d 3b 0a 20 20 20 20 73 74  e".    };.    st
10780 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
10790 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 64 61  *azCol[] = { "da
107a0 74 61 62 61 73 65 22 2c 20 22 73 74 61 74 75 73  tabase", "status
107b0 22 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  " };.    int i;.
107c0 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e      setAllColumn
107d0 4e 61 6d 65 73 28 76 2c 20 32 2c 20 61 7a 43 6f  Names(v, 2, azCo
107e0 6c 29 3b 20 61 73 73 65 72 74 28 20 32 3d 3d 41  l); assert( 2==A
107f0 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20  rraySize(azCol) 
10800 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  );.    pParse->n
10810 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 66 6f 72  Mem = 2;.    for
10820 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
10830 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74 72   i++){.      Btr
10840 65 65 20 2a 70 42 74 3b 0a 20 20 20 20 20 20 63  ee *pBt;.      c
10850 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 74  onst char *zStat
10860 65 20 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20  e = "unknown";. 
10870 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20       int j;.    
10880 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d    if( db->aDb[i]
10890 2e 7a 44 62 53 4e 61 6d 65 3d 3d 30 20 29 20 63  .zDbSName==0 ) c
108a0 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 70  ontinue;.      p
108b0 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  Bt = db->aDb[i].
108c0 70 42 74 3b 0a 20 20 20 20 20 20 69 66 28 20 70  pBt;.      if( p
108d0 42 74 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33  Bt==0 || sqlite3
108e0 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3d  BtreePager(pBt)=
108f0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 53  =0 ){.        zS
10900 74 61 74 65 20 3d 20 22 63 6c 6f 73 65 64 22 3b  tate = "closed";
10910 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
10920 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f   sqlite3_file_co
10930 6e 74 72 6f 6c 28 64 62 2c 20 69 20 3f 20 64 62  ntrol(db, i ? db
10940 2d 3e 61 44 62 5b 69 5d 2e 7a 44 62 53 4e 61 6d  ->aDb[i].zDbSNam
10950 65 20 3a 20 30 2c 20 0a 20 20 20 20 20 20 20 20  e : 0, .        
10960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10970 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
10980 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54  ITE_FCNTL_LOCKST
10990 41 54 45 2c 20 26 6a 29 3d 3d 53 51 4c 49 54 45  ATE, &j)==SQLITE
109a0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
109b0 7a 53 74 61 74 65 20 3d 20 61 7a 4c 6f 63 6b 4e  zState = azLockN
109c0 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 0a  ame[j];.      }.
109d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
109e0 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c  eMultiLoad(v, 1,
109f0 20 22 73 73 22 2c 20 64 62 2d 3e 61 44 62 5b 69   "ss", db->aDb[i
10a00 5d 2e 7a 44 62 53 4e 61 6d 65 2c 20 7a 53 74 61  ].zDbSName, zSta
10a10 74 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  te);.      sqlit
10a20 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
10a30 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
10a40 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62   2);.    }.    b
10a50 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
10a60 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
10a70 48 41 53 5f 43 4f 44 45 43 0a 20 20 63 61 73 65  HAS_CODEC.  case
10a80 20 50 72 61 67 54 79 70 5f 4b 45 59 3a 20 7b 0a   PragTyp_KEY: {.
10a90 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
10aa0 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28   sqlite3_key_v2(
10ab0 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c  db, zDb, zRight,
10ac0 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
10ad0 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62  (zRight));.    b
10ae0 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65  reak;.  }.  case
10af0 20 50 72 61 67 54 79 70 5f 52 45 4b 45 59 3a 20   PragTyp_REKEY: 
10b00 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
10b10 20 29 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79   ) sqlite3_rekey
10b20 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69  _v2(db, zDb, zRi
10b30 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c  ght, sqlite3Strl
10b40 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20  en30(zRight));. 
10b50 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
10b60 63 61 73 65 20 50 72 61 67 54 79 70 5f 48 45 58  case PragTyp_HEX
10b70 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  KEY: {.    if( z
10b80 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 75  Right ){.      u
10b90 38 20 69 42 79 74 65 3b 0a 20 20 20 20 20 20 69  8 iByte;.      i
10ba0 6e 74 20 69 3b 0a 20 20 20 20 20 20 63 68 61 72  nt i;.      char
10bb0 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20 20 20 20   zKey[40];.     
10bc0 20 66 6f 72 28 69 3d 30 2c 20 69 42 79 74 65 3d   for(i=0, iByte=
10bd0 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 4b 65 79  0; i<sizeof(zKey
10be0 29 2a 32 20 26 26 20 73 71 6c 69 74 65 33 49 73  )*2 && sqlite3Is
10bf0 78 64 69 67 69 74 28 7a 52 69 67 68 74 5b 69 5d  xdigit(zRight[i]
10c00 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ); i++){.       
10c10 20 69 42 79 74 65 20 3d 20 28 69 42 79 74 65 3c   iByte = (iByte<
10c20 3c 34 29 20 2b 20 73 71 6c 69 74 65 33 48 65 78  <4) + sqlite3Hex
10c30 54 6f 49 6e 74 28 7a 52 69 67 68 74 5b 69 5d 29  ToInt(zRight[i])
10c40 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 69  ;.        if( (i
10c50 26 31 29 21 3d 30 20 29 20 7a 4b 65 79 5b 69 2f  &1)!=0 ) zKey[i/
10c60 32 5d 20 3d 20 69 42 79 74 65 3b 0a 20 20 20 20  2] = iByte;.    
10c70 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 7a    }.      if( (z
10c80 4c 65 66 74 5b 33 5d 20 26 20 30 78 66 29 3d 3d  Left[3] & 0xf)==
10c90 30 78 62 20 29 7b 0a 20 20 20 20 20 20 20 20 73  0xb ){.        s
10ca0 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62  qlite3_key_v2(db
10cb0 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32  , zDb, zKey, i/2
10cc0 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
10cd0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
10ce0 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62  rekey_v2(db, zDb
10cf0 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20  , zKey, i/2);.  
10d00 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
10d10 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69  break;.  }.#endi
10d20 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
10d30 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 20  LITE_HAS_CODEC) 
10d40 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
10d50 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 29 0a  E_ENABLE_CEROD).
10d60 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 41    case PragTyp_A
10d70 43 54 49 56 41 54 45 5f 45 58 54 45 4e 53 49 4f  CTIVATE_EXTENSIO
10d80 4e 53 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29  NS: if( zRight )
10d90 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
10da0 48 41 53 5f 43 4f 44 45 43 0a 20 20 20 20 69 66  HAS_CODEC.    if
10db0 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  ( sqlite3StrNICm
10dc0 70 28 7a 52 69 67 68 74 2c 20 22 73 65 65 2d 22  p(zRight, "see-"
10dd0 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  , 4)==0 ){.     
10de0 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74   sqlite3_activat
10df0 65 5f 73 65 65 28 26 7a 52 69 67 68 74 5b 34 5d  e_see(&zRight[4]
10e00 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
10e10 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
10e20 41 42 4c 45 5f 43 45 52 4f 44 0a 20 20 20 20 69  ABLE_CEROD.    i
10e30 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  f( sqlite3StrNIC
10e40 6d 70 28 7a 52 69 67 68 74 2c 20 22 63 65 72 6f  mp(zRight, "cero
10e50 64 2d 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20 20  d-", 6)==0 ){.  
10e60 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69      sqlite3_acti
10e70 76 61 74 65 5f 63 65 72 6f 64 28 26 7a 52 69 67  vate_cerod(&zRig
10e80 68 74 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a 23 65  ht[6]);.    }.#e
10e90 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ndif.  }.  break
10ea0 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 7d 20 2f 2a  ;.#endif..  } /*
10eb0 20 45 6e 64 20 6f 66 20 74 68 65 20 50 52 41 47   End of the PRAG
10ec0 4d 41 20 73 77 69 74 63 68 20 2a 2f 0a 0a 70 72  MA switch */..pr
10ed0 61 67 6d 61 5f 6f 75 74 3a 0a 20 20 73 71 6c 69  agma_out:.  sqli
10ee0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 4c  te3DbFree(db, zL
10ef0 65 66 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 49  eft);.  sqlite3I
10f00 64 4c 69 73 74 44 65 6c 65 74 65 28 64 62 2c 20  dListDelete(db, 
10f10 70 56 61 6c 75 65 73 29 3b 0a 7d 0a 0a 23 65 6e  pValues);.}..#en
10f20 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
10f30 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a           IT_PRAGMA */.