/ Hex Artifact Content
Login

Artifact d932ba278654617cdd281f88a790a3185fca7c44:


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 5d 0a 2a 2a 0a 2a 2a 20  [= value].**.** 
22b0: 54 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d  The identifier m
22c0: 69 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73  ight also be a s
22d0: 74 72 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75  tring.  The valu
22e0: 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61  e is a string, a
22f0: 6e 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72  nd.** identifier
2300: 2c 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20  , or a number.  
2310: 49 66 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20  If minusFlag is 
2320: 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76  true, then the v
2330: 61 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d  alue is.** a num
2340: 62 65 72 20 74 68 61 74 20 77 61 73 20 70 72 65  ber that was pre
2350: 63 65 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73  ceded by a minus
2360: 20 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   sign..**.** If 
2370: 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73  the left side is
2380: 20 22 64 61 74 61 62 61 73 65 2e 69 64 22 20 74   "database.id" t
2390: 68 65 6e 20 70 49 64 31 20 69 73 20 74 68 65 20  hen pId1 is the 
23a0: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a  database name.**
23b0: 20 61 6e 64 20 70 49 64 32 20 69 73 20 74 68 65   and pId2 is the
23c0: 20 69 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66   id.  If the lef
23d0: 74 20 73 69 64 65 20 69 73 20 6a 75 73 74 20 22  t side is just "
23e0: 69 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73  id" then pId1 is
23f0: 20 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70   the.** id and p
2400: 49 64 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79  Id2 is any empty
2410: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64   string..*/.void
2420: 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a   sqlite3Pragma(.
2430: 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c    Parse *pParse,
2440: 20 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c   .  Token *pId1,
2450: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
2460: 20 70 61 72 74 20 6f 66 20 5b 73 63 68 65 6d 61   part of [schema
2470: 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20 20  .]id field */.  
2480: 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20 20  Token *pId2,    
2490: 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70 61      /* Second pa
24a0: 72 74 20 6f 66 20 5b 73 63 68 65 6d 61 2e 5d 69  rt of [schema.]i
24b0: 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e 55 4c 4c  d field, or NULL
24c0: 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 56 61   */.  Token *pVa
24d0: 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20 54 6f 6b  lue,      /* Tok
24e0: 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65 3e 2c 20  en for <value>, 
24f0: 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74  or NULL */.  int
2500: 20 6d 69 6e 75 73 46 6c 61 67 20 20 20 20 20 20   minusFlag      
2510: 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20 27 2d   /* True if a '-
2520: 27 20 73 69 67 6e 20 70 72 65 63 65 64 65 64 20  ' sign preceded 
2530: 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b 0a 20 20  <value> */.){.  
2540: 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20 30 3b  char *zLeft = 0;
2550: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65         /* Nul-te
2560: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
2570: 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f 0a 20 20  tring <id> */.  
2580: 63 68 61 72 20 2a 7a 52 69 67 68 74 20 3d 20 30  char *zRight = 0
2590: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65  ;      /* Nul-te
25a0: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
25b0: 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e 2c 20 6f  tring <value>, o
25c0: 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f 6e 73  r NULL */.  cons
25d0: 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b  t char *zDb = 0;
25e0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
25f0: 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b  se name */.  Tok
2600: 65 6e 20 2a 70 49 64 3b 20 20 20 20 20 20 20 20  en *pId;        
2610: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
2620: 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20 2a 2f 0a  o <id> token */.
2630: 20 20 63 68 61 72 20 2a 61 46 63 6e 74 6c 5b 34    char *aFcntl[4
2640: 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75  ];       /* Argu
2650: 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54 45 5f 46  ment to SQLITE_F
2660: 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a 20  CNTL_PRAGMA */. 
2670: 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
2680: 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
2690: 61 73 65 20 69 6e 64 65 78 20 66 6f 72 20 3c 64  ase index for <d
26a0: 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20 20 69 6e  atabase> */.  in
26b0: 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d 69 64 20  t lwr, upr, mid 
26c0: 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 42 69  = 0;       /* Bi
26d0: 6e 61 72 79 20 73 65 61 72 63 68 20 62 6f 75 6e  nary search boun
26e0: 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  ds */.  int rc; 
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2700: 20 20 20 20 20 2f 2a 20 72 65 74 75 72 6e 20 76       /* return v
2710: 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c 49 54 45  alue form SQLITE
2720: 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f  _FCNTL_PRAGMA */
2730: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
2740: 20 70 50 61 72 73 65 2d 3e 64 62 3b 20 20 20 20   pParse->db;    
2750: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
2760: 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
2770: 44 62 20 2a 70 44 62 3b 20 20 20 20 20 20 20 20  Db *pDb;        
2780: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2790: 54 68 65 20 73 70 65 63 69 66 69 63 20 64 61 74  The specific dat
27a0: 61 62 61 73 65 20 62 65 69 6e 67 20 70 72 61 67  abase being prag
27b0: 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62 65 20 2a  maed */.  Vdbe *
27c0: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
27d0: 62 65 28 70 50 61 72 73 65 29 3b 20 20 2f 2a 20  be(pParse);  /* 
27e0: 50 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  Prepared stateme
27f0: 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 73 74  nt */.  const st
2800: 72 75 63 74 20 73 50 72 61 67 6d 61 4e 61 6d 65  ruct sPragmaName
2810: 73 20 2a 70 50 72 61 67 6d 61 3b 0a 0a 20 20 69  s *pPragma;..  i
2820: 66 28 20 76 3d 3d 30 20 29 20 72 65 74 75 72 6e  f( v==0 ) return
2830: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 52  ;.  sqlite3VdbeR
2840: 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29 3b 0a 20  unOnlyOnce(v);. 
2850: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
2860: 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65 72 70 72  2;..  /* Interpr
2870: 65 74 20 74 68 65 20 5b 73 63 68 65 6d 61 2e 5d  et the [schema.]
2880: 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 61   part of the pra
2890: 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 69  gma statement. i
28a0: 44 62 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 69  Db is the.  ** i
28b0: 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
28c0: 62 61 73 65 20 74 68 69 73 20 70 72 61 67 6d 61  base this pragma
28d0: 20 69 73 20 62 65 69 6e 67 20 61 70 70 6c 69 65   is being applie
28e0: 64 20 74 6f 20 69 6e 20 64 62 2e 61 44 62 5b 5d  d to in db.aDb[]
28f0: 2e 20 2a 2f 0a 20 20 69 44 62 20 3d 20 73 71 6c  . */.  iDb = sql
2900: 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28  ite3TwoPartName(
2910: 70 50 61 72 73 65 2c 20 70 49 64 31 2c 20 70 49  pParse, pId1, pI
2920: 64 32 2c 20 26 70 49 64 29 3b 0a 20 20 69 66 28  d2, &pId);.  if(
2930: 20 69 44 62 3c 30 20 29 20 72 65 74 75 72 6e 3b   iDb<0 ) return;
2940: 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
2950: 62 5b 69 44 62 5d 3b 0a 0a 20 20 2f 2a 20 49 66  b[iDb];..  /* If
2960: 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   the temp databa
2970: 73 65 20 68 61 73 20 62 65 65 6e 20 65 78 70 6c  se has been expl
2980: 69 63 69 74 6c 79 20 6e 61 6d 65 64 20 61 73 20  icitly named as 
2990: 70 61 72 74 20 6f 66 20 74 68 65 20 0a 20 20 2a  part of the .  *
29a0: 2a 20 70 72 61 67 6d 61 2c 20 6d 61 6b 65 20 73  * pragma, make s
29b0: 75 72 65 20 69 74 20 69 73 20 6f 70 65 6e 2e 20  ure it is open. 
29c0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d  .  */.  if( iDb=
29d0: 3d 31 20 26 26 20 73 71 6c 69 74 65 33 4f 70 65  =1 && sqlite3Ope
29e0: 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 70 50  nTempDatabase(pP
29f0: 61 72 73 65 29 20 29 7b 0a 20 20 20 20 72 65 74  arse) ){.    ret
2a00: 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 7a 4c 65 66  urn;.  }..  zLef
2a10: 74 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46  t = sqlite3NameF
2a20: 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 49 64  romToken(db, pId
2a30: 29 3b 0a 20 20 69 66 28 20 21 7a 4c 65 66 74 20  );.  if( !zLeft 
2a40: 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20  ) return;.  if( 
2a50: 6d 69 6e 75 73 46 6c 61 67 20 29 7b 0a 20 20 20  minusFlag ){.   
2a60: 20 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65   zRight = sqlite
2a70: 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2d 25  3MPrintf(db, "-%
2a80: 54 22 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d  T", pValue);.  }
2a90: 65 6c 73 65 7b 0a 20 20 20 20 7a 52 69 67 68 74  else{.    zRight
2aa0: 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72   = sqlite3NameFr
2ab0: 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 56 61 6c  omToken(db, pVal
2ac0: 75 65 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  ue);.  }..  asse
2ad0: 72 74 28 20 70 49 64 32 20 29 3b 0a 20 20 7a 44  rt( pId2 );.  zD
2ae0: 62 20 3d 20 70 49 64 32 2d 3e 6e 3e 30 20 3f 20  b = pId2->n>0 ? 
2af0: 70 44 62 2d 3e 7a 44 62 53 4e 61 6d 65 20 3a 20  pDb->zDbSName : 
2b00: 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  0;.  if( sqlite3
2b10: 41 75 74 68 43 68 65 63 6b 28 70 50 61 72 73 65  AuthCheck(pParse
2b20: 2c 20 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 2c  , SQLITE_PRAGMA,
2b30: 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74 2c 20   zLeft, zRight, 
2b40: 7a 44 62 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  zDb) ){.    goto
2b50: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d   pragma_out;.  }
2b60: 0a 0a 20 20 2f 2a 20 53 65 6e 64 20 61 6e 20 53  ..  /* Send an S
2b70: 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47  QLITE_FCNTL_PRAG
2b80: 4d 41 20 66 69 6c 65 2d 63 6f 6e 74 72 6f 6c 20  MA file-control 
2b90: 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  to the underlyin
2ba0: 67 20 56 46 53 0a 20 20 2a 2a 20 63 6f 6e 6e 65  g VFS.  ** conne
2bb0: 63 74 69 6f 6e 2e 20 20 49 66 20 69 74 20 72 65  ction.  If it re
2bc0: 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 2c  turns SQLITE_OK,
2bd0: 20 74 68 65 6e 20 61 73 73 75 6d 65 20 74 68 61   then assume tha
2be0: 74 20 74 68 65 20 56 46 53 0a 20 20 2a 2a 20 68  t the VFS.  ** h
2bf0: 61 6e 64 6c 65 64 20 74 68 65 20 70 72 61 67 6d  andled the pragm
2c00: 61 20 61 6e 64 20 67 65 6e 65 72 61 74 65 20 61  a and generate a
2c10: 20 6e 6f 2d 6f 70 20 70 72 65 70 61 72 65 64 20   no-op prepared 
2c20: 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a 2a 0a  statement..  **.
2c30: 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    ** IMPLEMENTAT
2c40: 49 4f 4e 2d 4f 46 3a 20 52 2d 31 32 32 33 38 2d  ION-OF: R-12238-
2c50: 35 35 31 32 30 20 57 68 65 6e 65 76 65 72 20 61  55120 Whenever a
2c60: 20 50 52 41 47 4d 41 20 73 74 61 74 65 6d 65 6e   PRAGMA statemen
2c70: 74 20 69 73 20 70 61 72 73 65 64 2c 0a 20 20 2a  t is parsed,.  *
2c80: 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54  * an SQLITE_FCNT
2c90: 4c 5f 50 52 41 47 4d 41 20 66 69 6c 65 20 63 6f  L_PRAGMA file co
2ca0: 6e 74 72 6f 6c 20 69 73 20 73 65 6e 74 20 74 6f  ntrol is sent to
2cb0: 20 74 68 65 20 6f 70 65 6e 20 73 71 6c 69 74 65   the open sqlite
2cc0: 33 5f 66 69 6c 65 0a 20 20 2a 2a 20 6f 62 6a 65  3_file.  ** obje
2cd0: 63 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ct corresponding
2ce0: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
2cf0: 20 66 69 6c 65 20 74 6f 20 77 68 69 63 68 20 74   file to which t
2d00: 68 65 20 70 72 61 67 6d 61 0a 20 20 2a 2a 20 73  he pragma.  ** s
2d10: 74 61 74 65 6d 65 6e 74 20 72 65 66 65 72 73 2e  tatement refers.
2d20: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45  .  **.  ** IMPLE
2d30: 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
2d40: 32 39 38 37 35 2d 33 31 36 37 38 20 54 68 65 20  29875-31678 The 
2d50: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
2d60: 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41  SQLITE_FCNTL_PRA
2d70: 47 4d 41 0a 20 20 2a 2a 20 66 69 6c 65 20 63 6f  GMA.  ** file co
2d80: 6e 74 72 6f 6c 20 69 73 20 61 6e 20 61 72 72 61  ntrol is an arra
2d90: 79 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  y of pointers to
2da0: 20 73 74 72 69 6e 67 73 20 28 63 68 61 72 2a 2a   strings (char**
2db0: 29 20 69 6e 20 77 68 69 63 68 20 74 68 65 0a 20  ) in which the. 
2dc0: 20 2a 2a 20 73 65 63 6f 6e 64 20 65 6c 65 6d 65   ** second eleme
2dd0: 6e 74 20 6f 66 20 74 68 65 20 61 72 72 61 79 20  nt of the array 
2de0: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
2df0: 68 65 20 70 72 61 67 6d 61 20 61 6e 64 20 74 68  he pragma and th
2e00: 65 20 74 68 69 72 64 0a 20 20 2a 2a 20 65 6c 65  e third.  ** ele
2e10: 6d 65 6e 74 20 69 73 20 74 68 65 20 61 72 67 75  ment is the argu
2e20: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 61 67  ment to the prag
2e30: 6d 61 20 6f 72 20 4e 55 4c 4c 20 69 66 20 74 68  ma or NULL if th
2e40: 65 20 70 72 61 67 6d 61 20 68 61 73 20 6e 6f 0a  e pragma has no.
2e50: 20 20 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 20    ** argument.. 
2e60: 20 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20   */.  aFcntl[0] 
2e70: 3d 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d  = 0;.  aFcntl[1]
2e80: 20 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e   = zLeft;.  aFcn
2e90: 74 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a  tl[2] = zRight;.
2ea0: 20 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b    aFcntl[3] = 0;
2eb0: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
2ec0: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
2ed0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c  rc = sqlite3_fil
2ee0: 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44  e_control(db, zD
2ef0: 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  b, SQLITE_FCNTL_
2f00: 50 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61  PRAGMA, (void*)a
2f10: 46 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63  Fcntl);.  if( rc
2f20: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2f30: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54     returnSingleT
2f40: 65 78 74 28 76 2c 20 22 72 65 73 75 6c 74 22 2c  ext(v, "result",
2f50: 20 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20   aFcntl[0]);.   
2f60: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46   sqlite3_free(aF
2f70: 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 67 6f  cntl[0]);.    go
2f80: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
2f90: 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c   }.  if( rc!=SQL
2fa0: 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a  ITE_NOTFOUND ){.
2fb0: 20 20 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30      if( aFcntl[0
2fc0: 5d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ] ){.      sqlit
2fd0: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
2fe0: 65 2c 20 22 25 73 22 2c 20 61 46 63 6e 74 6c 5b  e, "%s", aFcntl[
2ff0: 30 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  0]);.      sqlit
3000: 65 33 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30  e3_free(aFcntl[0
3010: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 50  ]);.    }.    pP
3020: 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20  arse->nErr++;.  
3030: 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72    pParse->rc = r
3040: 63 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67  c;.    goto prag
3050: 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f  ma_out;.  }..  /
3060: 2a 20 4c 6f 63 61 74 65 20 74 68 65 20 70 72 61  * Locate the pra
3070: 67 6d 61 20 69 6e 20 74 68 65 20 6c 6f 6f 6b 75  gma in the looku
3080: 70 20 74 61 62 6c 65 20 2a 2f 0a 20 20 6c 77 72  p table */.  lwr
3090: 20 3d 20 30 3b 0a 20 20 75 70 72 20 3d 20 41 72   = 0;.  upr = Ar
30a0: 72 61 79 53 69 7a 65 28 61 50 72 61 67 6d 61 4e  raySize(aPragmaN
30b0: 61 6d 65 73 29 2d 31 3b 0a 20 20 77 68 69 6c 65  ames)-1;.  while
30c0: 28 20 6c 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20  ( lwr<=upr ){.  
30d0: 20 20 6d 69 64 20 3d 20 28 6c 77 72 2b 75 70 72    mid = (lwr+upr
30e0: 29 2f 32 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  )/2;.    rc = sq
30f0: 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 4c  lite3_stricmp(zL
3100: 65 66 74 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65  eft, aPragmaName
3110: 73 5b 6d 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20  s[mid].zName);. 
3120: 20 20 20 69 66 28 20 72 63 3d 3d 30 20 29 20 62     if( rc==0 ) b
3130: 72 65 61 6b 3b 0a 20 20 20 20 69 66 28 20 72 63  reak;.    if( rc
3140: 3c 30 20 29 7b 0a 20 20 20 20 20 20 75 70 72 20  <0 ){.      upr 
3150: 3d 20 6d 69 64 20 2d 20 31 3b 0a 20 20 20 20 7d  = mid - 1;.    }
3160: 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 77 72 20  else{.      lwr 
3170: 3d 20 6d 69 64 20 2b 20 31 3b 0a 20 20 20 20 7d  = mid + 1;.    }
3180: 0a 20 20 7d 0a 20 20 69 66 28 20 6c 77 72 3e 75  .  }.  if( lwr>u
3190: 70 72 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  pr ) goto pragma
31a0: 5f 6f 75 74 3b 0a 20 20 70 50 72 61 67 6d 61 20  _out;.  pPragma 
31b0: 3d 20 26 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b  = &aPragmaNames[
31c0: 6d 69 64 5d 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65  mid];..  /* Make
31d0: 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61   sure the databa
31e0: 73 65 20 73 63 68 65 6d 61 20 69 73 20 6c 6f 61  se schema is loa
31f0: 64 65 64 20 69 66 20 74 68 65 20 70 72 61 67 6d  ded if the pragm
3200: 61 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20  a requires that 
3210: 2a 2f 0a 20 20 69 66 28 20 28 70 50 72 61 67 6d  */.  if( (pPragm
3220: 61 2d 3e 6d 50 72 61 67 46 6c 61 67 20 26 20 50  a->mPragFlag & P
3230: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
3240: 6d 61 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  ma)!=0 ){.    if
3250: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
3260: 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
3270: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
3280: 20 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f   }..  /* Jump to
3290: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
32a0: 20 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20   pragma handler 
32b0: 2a 2f 0a 20 20 73 77 69 74 63 68 28 20 70 50 72  */.  switch( pPr
32c0: 61 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 20 29  agma->ePragTyp )
32d0: 7b 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e 65  {.  .#if !define
32e0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
32f0: 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20  GER_PRAGMAS) && 
3300: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3310: 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29  OMIT_DEPRECATED)
3320: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
3330: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 64 65 66 61  MA [schema.]defa
3340: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 0a 20  ult_cache_size. 
3350: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
3360: 65 6d 61 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63  ema.]default_cac
3370: 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20  he_size=N.  **. 
3380: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f   ** The first fo
3390: 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63  rm reports the c
33a0: 75 72 72 65 6e 74 20 70 65 72 73 69 73 74 65 6e  urrent persisten
33b0: 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68  t setting for th
33c0: 65 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68  e.  ** page cach
33d0: 65 20 73 69 7a 65 2e 20 20 54 68 65 20 76 61 6c  e size.  The val
33e0: 75 65 20 72 65 74 75 72 6e 65 64 20 69 73 20 74  ue returned is t
33f0: 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
3400: 72 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65 73 20  r of.  ** pages 
3410: 69 6e 20 74 68 65 20 70 61 67 65 20 63 61 63 68  in the page cach
3420: 65 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66  e.  The second f
3430: 6f 72 6d 20 73 65 74 73 20 62 6f 74 68 20 74 68  orm sets both th
3440: 65 20 63 75 72 72 65 6e 74 0a 20 20 2a 2a 20 70  e current.  ** p
3450: 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 20 76  age cache size v
3460: 61 6c 75 65 20 61 6e 64 20 74 68 65 20 70 65 72  alue and the per
3470: 73 69 73 74 65 6e 74 20 70 61 67 65 20 63 61 63  sistent page cac
3480: 68 65 20 73 69 7a 65 20 76 61 6c 75 65 0a 20 20  he size value.  
3490: 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ** stored in the
34a0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
34b0: 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6c 64 65 72 20    **.  ** Older 
34c0: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
34d0: 74 65 20 77 6f 75 6c 64 20 73 65 74 20 74 68 65  te would set the
34e0: 20 64 65 66 61 75 6c 74 20 63 61 63 68 65 20 73   default cache s
34f0: 69 7a 65 20 74 6f 20 61 0a 20 20 2a 2a 20 6e 65  ize to a.  ** ne
3500: 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 74 6f  gative number to
3510: 20 69 6e 64 69 63 61 74 65 20 73 79 6e 63 68 72   indicate synchr
3520: 6f 6e 6f 75 73 3d 4f 46 46 2e 20 20 54 68 65 73  onous=OFF.  Thes
3530: 65 20 64 61 79 73 2c 20 73 79 6e 63 68 72 6f 6e  e days, synchron
3540: 6f 75 73 0a 20 20 2a 2a 20 69 73 20 61 6c 77 61  ous.  ** is alwa
3550: 79 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74  ys on by default
3560: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74   regardless of t
3570: 68 65 20 73 69 67 6e 20 6f 66 20 74 68 65 20 64  he sign of the d
3580: 65 66 61 75 6c 74 20 63 61 63 68 65 0a 20 20 2a  efault cache.  *
3590: 2a 20 73 69 7a 65 2e 20 20 42 75 74 20 63 6f 6e  * size.  But con
35a0: 74 69 6e 75 65 20 74 6f 20 74 61 6b 65 20 74 68  tinue to take th
35b0: 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65  e absolute value
35c0: 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   of the default 
35d0: 63 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a 65 20  cache.  ** size 
35e0: 6f 66 20 68 69 73 74 6f 72 69 63 61 6c 20 63 6f  of historical co
35f0: 6d 70 61 74 69 62 69 6c 69 74 79 2e 0a 20 20 2a  mpatibility..  *
3600: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
3610: 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53  _DEFAULT_CACHE_S
3620: 49 5a 45 3a 20 7b 0a 20 20 20 20 73 74 61 74 69  IZE: {.    stati
3630: 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20  c const int iLn 
3640: 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49  = VDBE_OFFSET_LI
3650: 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73 74 61  NENO(2);.    sta
3660: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
3670: 4c 69 73 74 20 67 65 74 43 61 63 68 65 53 69 7a  List getCacheSiz
3680: 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20  e[] = {.      { 
3690: 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20  OP_Transaction, 
36a0: 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 0,        0},
36b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 2a 2f           /* 0 */
36d0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64  .      { OP_Read
36e0: 43 6f 6f 6b 69 65 2c 20 20 30 2c 20 31 2c 20 20  Cookie,  0, 1,  
36f0: 20 20 20 20 20 20 42 54 52 45 45 5f 44 45 46 41        BTREE_DEFA
3700: 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 7d 2c  ULT_CACHE_SIZE},
3710: 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20    /* 1 */.      
3720: 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20  { OP_IfPos,     
3730: 20 20 31 2c 20 38 2c 20 20 20 20 20 20 20 20 30    1, 8,        0
3740: 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e  },.      { OP_In
3750: 74 65 67 65 72 2c 20 20 20 20 20 30 2c 20 32 2c  teger,     0, 2,
3760: 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
3770: 20 20 7b 20 4f 50 5f 53 75 62 74 72 61 63 74 2c    { OP_Subtract,
3780: 20 20 20 20 31 2c 20 32 2c 20 20 20 20 20 20 20      1, 2,       
3790: 20 31 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f   1},.      { OP_
37a0: 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c 20  IfPos,       1, 
37b0: 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  8,        0},.  
37c0: 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72      { OP_Integer
37d0: 2c 20 20 20 20 20 30 2c 20 31 2c 20 20 20 20 20  ,     0, 1,     
37e0: 20 20 20 30 7d 2c 20 20 20 20 20 20 20 20 20 20     0},          
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3800: 2a 20 36 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f  * 6 */.      { O
3810: 50 5f 4e 6f 6f 70 2c 20 20 20 20 20 20 20 20 30  P_Noop,        0
3820: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 0,        0},.
3830: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c        { OP_Resul
3840: 74 52 6f 77 2c 20 20 20 31 2c 20 31 2c 20 20 20  tRow,   1, 1,   
3850: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a       0},.    };.
3860: 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b      VdbeOp *aOp;
3870: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
3880: 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62  UsesBtree(v, iDb
3890: 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67  );.    if( !zRig
38a0: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 65 74 4f  ht ){.      setO
38b0: 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20  neColumnName(v, 
38c0: 22 63 61 63 68 65 5f 73 69 7a 65 22 29 3b 0a 20  "cache_size");. 
38d0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
38e0: 6d 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 73 71  m += 2;.      sq
38f0: 6c 69 74 65 33 56 64 62 65 56 65 72 69 66 79 4e  lite3VdbeVerifyN
3900: 6f 4d 61 6c 6c 6f 63 52 65 71 75 69 72 65 64 28  oMallocRequired(
3910: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 67 65 74  v, ArraySize(get
3920: 43 61 63 68 65 53 69 7a 65 29 29 3b 0a 20 20 20  CacheSize));.   
3930: 20 20 20 61 4f 70 20 3d 20 73 71 6c 69 74 65 33     aOp = sqlite3
3940: 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
3950: 20 41 72 72 61 79 53 69 7a 65 28 67 65 74 43 61   ArraySize(getCa
3960: 63 68 65 53 69 7a 65 29 2c 20 67 65 74 43 61 63  cheSize), getCac
3970: 68 65 53 69 7a 65 2c 20 69 4c 6e 29 3b 0a 20 20  heSize, iLn);.  
3980: 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f      if( ONLY_IF_
3990: 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61  REALLOC_STRESS(a
39a0: 4f 70 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a  Op==0) ) break;.
39b0: 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20        aOp[0].p1 
39c0: 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 61 4f 70  = iDb;.      aOp
39d0: 5b 31 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20  [1].p1 = iDb;.  
39e0: 20 20 20 20 61 4f 70 5b 36 5d 2e 70 31 20 3d 20      aOp[6].p1 = 
39f0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 43  SQLITE_DEFAULT_C
3a00: 41 43 48 45 5f 53 49 5a 45 3b 0a 20 20 20 20 7d  ACHE_SIZE;.    }
3a10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20  else{.      int 
3a20: 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 62  size = sqlite3Ab
3a30: 73 49 6e 74 33 32 28 73 71 6c 69 74 65 33 41 74  sInt32(sqlite3At
3a40: 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  oi(zRight));.   
3a50: 20 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57     sqlite3BeginW
3a60: 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50  riteOperation(pP
3a70: 61 72 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20  arse, 0, iDb);. 
3a80: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
3a90: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74  AddOp3(v, OP_Set
3aa0: 43 6f 6f 6b 69 65 2c 20 69 44 62 2c 20 42 54 52  Cookie, iDb, BTR
3ab0: 45 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  EE_DEFAULT_CACHE
3ac0: 5f 53 49 5a 45 2c 20 73 69 7a 65 29 3b 0a 20 20  _SIZE, size);.  
3ad0: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
3ae0: 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
3af0: 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29  ld(db, iDb, 0) )
3b00: 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53 63  ;.      pDb->pSc
3b10: 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65  hema->cache_size
3b20: 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73   = size;.      s
3b30: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61  qlite3BtreeSetCa
3b40: 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74  cheSize(pDb->pBt
3b50: 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  , pDb->pSchema->
3b60: 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20  cache_size);.   
3b70: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
3b80: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c  }.#endif /* !SQL
3b90: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
3ba0: 52 41 47 4d 41 53 20 26 26 20 21 53 51 4c 49 54  RAGMAS && !SQLIT
3bb0: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
3bc0: 44 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e  D */..#if !defin
3bd0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ed(SQLITE_OMIT_P
3be0: 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20  AGER_PRAGMAS).  
3bf0: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
3c00: 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f 73 69  [schema.]page_si
3c10: 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  ze.  **  PRAGMA 
3c20: 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f 73 69  [schema.]page_si
3c30: 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ze=N.  **.  ** T
3c40: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
3c50: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
3c60: 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68  t setting for th
3c70: 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20  e.  ** database 
3c80: 70 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74  page size in byt
3c90: 65 73 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20  es.  The second 
3ca0: 66 6f 72 6d 20 73 65 74 73 20 74 68 65 0a 20 20  form sets the.  
3cb0: 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61 67 65  ** database page
3cc0: 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 54 68   size value.  Th
3cd0: 65 20 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79  e value can only
3ce0: 20 62 65 20 73 65 74 20 69 66 0a 20 20 2a 2a 20   be set if.  ** 
3cf0: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 73  the database has
3d00: 20 6e 6f 74 20 79 65 74 20 62 65 65 6e 20 63 72   not yet been cr
3d10: 65 61 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61  eated..  */.  ca
3d20: 73 65 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f  se PragTyp_PAGE_
3d30: 53 49 5a 45 3a 20 7b 0a 20 20 20 20 42 74 72 65  SIZE: {.    Btre
3d40: 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42  e *pBt = pDb->pB
3d50: 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  t;.    assert( p
3d60: 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  Bt!=0 );.    if(
3d70: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
3d80: 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57    int size = ALW
3d90: 41 59 53 28 70 42 74 29 20 3f 20 73 71 6c 69 74  AYS(pBt) ? sqlit
3da0: 65 33 42 74 72 65 65 47 65 74 50 61 67 65 53 69  e3BtreeGetPageSi
3db0: 7a 65 28 70 42 74 29 20 3a 20 30 3b 0a 20 20 20  ze(pBt) : 0;.   
3dc0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
3dd0: 6e 74 28 76 2c 20 22 70 61 67 65 5f 73 69 7a 65  nt(v, "page_size
3de0: 22 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65  ", size);.    }e
3df0: 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61  lse{.      /* Ma
3e00: 6c 6c 6f 63 20 6d 61 79 20 66 61 69 6c 20 77 68  lloc may fail wh
3e10: 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20 70  en setting the p
3e20: 61 67 65 2d 73 69 7a 65 2c 20 61 73 20 74 68 65  age-size, as the
3e30: 72 65 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61  re is an interna
3e40: 6c 0a 20 20 20 20 20 20 2a 2a 20 62 75 66 66 65  l.      ** buffe
3e50: 72 20 74 68 61 74 20 74 68 65 20 70 61 67 65 72  r that the pager
3e60: 20 6d 6f 64 75 6c 65 20 72 65 73 69 7a 65 73 20   module resizes 
3e70: 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 72 65  using sqlite3_re
3e80: 61 6c 6c 6f 63 28 29 2e 0a 20 20 20 20 20 20 2a  alloc()..      *
3e90: 2f 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74  /.      db->next
3ea0: 50 61 67 65 73 69 7a 65 20 3d 20 73 71 6c 69 74  Pagesize = sqlit
3eb0: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a  e3Atoi(zRight);.
3ec0: 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54 45        if( SQLITE
3ed0: 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74 65 33 42  _NOMEM==sqlite3B
3ee0: 74 72 65 65 53 65 74 50 61 67 65 53 69 7a 65 28  treeSetPageSize(
3ef0: 70 42 74 2c 20 64 62 2d 3e 6e 65 78 74 50 61 67  pBt, db->nextPag
3f00: 65 73 69 7a 65 2c 2d 31 2c 30 29 20 29 7b 0a 20  esize,-1,0) ){. 
3f10: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 6f         sqlite3Oo
3f20: 6d 46 61 75 6c 74 28 64 62 29 3b 0a 20 20 20 20  mFault(db);.    
3f30: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72    }.    }.    br
3f40: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
3f50: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
3f60: 65 6d 61 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65  ema.]secure_dele
3f70: 74 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  te.  **  PRAGMA 
3f80: 5b 73 63 68 65 6d 61 2e 5d 73 65 63 75 72 65 5f  [schema.]secure_
3f90: 64 65 6c 65 74 65 3d 4f 4e 2f 4f 46 46 0a 20 20  delete=ON/OFF.  
3fa0: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73  **.  ** The firs
3fb0: 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74  t form reports t
3fc0: 68 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69  he current setti
3fd0: 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ng for the.  ** 
3fe0: 73 65 63 75 72 65 5f 64 65 6c 65 74 65 20 66 6c  secure_delete fl
3ff0: 61 67 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20  ag.  The second 
4000: 66 6f 72 6d 20 63 68 61 6e 67 65 73 20 74 68 65  form changes the
4010: 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a 20   secure_delete. 
4020: 20 2a 2a 20 66 6c 61 67 20 73 65 74 74 69 6e 67   ** flag setting
4030: 20 61 6e 64 20 72 65 70 6f 72 74 73 20 74 68 65   and reports the
4040: 6e 65 77 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a  new value..  */.
4050: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53    case PragTyp_S
4060: 45 43 55 52 45 5f 44 45 4c 45 54 45 3a 20 7b 0a  ECURE_DELETE: {.
4070: 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d      Btree *pBt =
4080: 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 69   pDb->pBt;.    i
4090: 6e 74 20 62 20 3d 20 2d 31 3b 0a 20 20 20 20 61  nt b = -1;.    a
40a0: 73 73 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b  ssert( pBt!=0 );
40b0: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
40c0: 29 7b 0a 20 20 20 20 20 20 62 20 3d 20 73 71 6c  ){.      b = sql
40d0: 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a  ite3GetBoolean(z
40e0: 52 69 67 68 74 2c 20 30 29 3b 0a 20 20 20 20 7d  Right, 0);.    }
40f0: 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e  .    if( pId2->n
4100: 3d 3d 30 20 26 26 20 62 3e 3d 30 20 29 7b 0a 20  ==0 && b>=0 ){. 
4110: 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20       int ii;.   
4120: 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
4130: 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a  db->nDb; ii++){.
4140: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42          sqlite3B
4150: 74 72 65 65 53 65 63 75 72 65 44 65 6c 65 74 65  treeSecureDelete
4160: 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
4170: 2c 20 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , b);.      }.  
4180: 20 20 7d 0a 20 20 20 20 62 20 3d 20 73 71 6c 69    }.    b = sqli
4190: 74 65 33 42 74 72 65 65 53 65 63 75 72 65 44 65  te3BtreeSecureDe
41a0: 6c 65 74 65 28 70 42 74 2c 20 62 29 3b 0a 20 20  lete(pBt, b);.  
41b0: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
41c0: 74 28 76 2c 20 22 73 65 63 75 72 65 5f 64 65 6c  t(v, "secure_del
41d0: 65 74 65 22 2c 20 62 29 3b 0a 20 20 20 20 62 72  ete", b);.    br
41e0: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
41f0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
4200: 65 6d 61 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f  ema.]max_page_co
4210: 75 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  unt.  **  PRAGMA
4220: 20 5b 73 63 68 65 6d 61 2e 5d 6d 61 78 5f 70 61   [schema.]max_pa
4230: 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a 0a  ge_count=N.  **.
4240: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
4250: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
4260: 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20  current setting 
4270: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61 78  for the.  ** max
4280: 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 70  imum number of p
4290: 61 67 65 73 20 69 6e 20 74 68 65 20 64 61 74 61  ages in the data
42a0: 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20  base file.  The 
42b0: 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 66 6f 72  .  ** second for
42c0: 6d 20 61 74 74 65 6d 70 74 73 20 74 6f 20 63 68  m attempts to ch
42d0: 61 6e 67 65 20 74 68 69 73 20 73 65 74 74 69 6e  ange this settin
42e0: 67 2e 20 20 42 6f 74 68 0a 20 20 2a 2a 20 66 6f  g.  Both.  ** fo
42f0: 72 6d 73 20 72 65 74 75 72 6e 20 74 68 65 20 63  rms return the c
4300: 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 2e 0a  urrent setting..
4310: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 61 62    **.  ** The ab
4320: 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20  solute value of 
4330: 4e 20 69 73 20 75 73 65 64 2e 20 20 54 68 69 73  N is used.  This
4340: 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   is undocumented
4350: 20 61 6e 64 20 6d 69 67 68 74 0a 20 20 2a 2a 20   and might.  ** 
4360: 63 68 61 6e 67 65 2e 20 20 54 68 65 20 6f 6e 6c  change.  The onl
4370: 79 20 70 75 72 70 6f 73 65 20 69 73 20 74 6f 20  y purpose is to 
4380: 70 72 6f 76 69 64 65 20 61 6e 20 65 61 73 79 20  provide an easy 
4390: 77 61 79 20 74 6f 20 74 65 73 74 0a 20 20 2a 2a  way to test.  **
43a0: 20 74 68 65 20 73 71 6c 69 74 65 33 41 62 73 49   the sqlite3AbsI
43b0: 6e 74 33 32 28 29 20 66 75 6e 63 74 69 6f 6e 2e  nt32() function.
43c0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  **.  **  PRAG
43d0: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65  MA [schema.]page
43e0: 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a  _count.  **.  **
43f0: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
4400: 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
4410: 68 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74  he specified dat
4420: 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61  abase..  */.  ca
4430: 73 65 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f  se PragTyp_PAGE_
4440: 43 4f 55 4e 54 3a 20 7b 0a 20 20 20 20 69 6e 74  COUNT: {.    int
4450: 20 69 52 65 67 3b 0a 20 20 20 20 73 71 6c 69 74   iReg;.    sqlit
4460: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
4470: 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b  ma(pParse, iDb);
4480: 0a 20 20 20 20 69 52 65 67 20 3d 20 2b 2b 70 50  .    iReg = ++pP
4490: 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20  arse->nMem;.    
44a0: 69 66 28 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  if( sqlite3Tolow
44b0: 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 70  er(zLeft[0])=='p
44c0: 27 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ' ){.      sqlit
44d0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
44e0: 4f 50 5f 50 61 67 65 63 6f 75 6e 74 2c 20 69 44  OP_Pagecount, iD
44f0: 62 2c 20 69 52 65 67 29 3b 0a 20 20 20 20 7d 65  b, iReg);.    }e
4500: 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
4510: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
4520: 4f 50 5f 4d 61 78 50 67 63 6e 74 2c 20 69 44 62  OP_MaxPgcnt, iDb
4530: 2c 20 69 52 65 67 2c 20 0a 20 20 20 20 20 20 20  , iReg, .       
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4550: 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32   sqlite3AbsInt32
4560: 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69  (sqlite3Atoi(zRi
4570: 67 68 74 29 29 29 3b 0a 20 20 20 20 7d 0a 20 20  ght)));.    }.  
4580: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
4590: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
45a0: 52 6f 77 2c 20 69 52 65 67 2c 20 31 29 3b 0a 20  Row, iReg, 1);. 
45b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
45c0: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
45d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
45e0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
45f0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c  COLNAME_NAME, zL
4600: 65 66 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e  eft, SQLITE_TRAN
4610: 53 49 45 4e 54 29 3b 0a 20 20 20 20 62 72 65 61  SIENT);.    brea
4620: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
4630: 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d  *  PRAGMA [schem
4640: 61 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a  a.]locking_mode.
4650: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
4660: 68 65 6d 61 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f  hema.]locking_mo
4670: 64 65 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63  de = (normal|exc
4680: 6c 75 73 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63  lusive).  */.  c
4690: 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b  ase PragTyp_LOCK
46a0: 49 4e 47 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20  ING_MODE: {.    
46b0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74  const char *zRet
46c0: 20 3d 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20   = "normal";.   
46d0: 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20 67 65 74   int eMode = get
46e0: 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67  LockingMode(zRig
46f0: 68 74 29 3b 0a 0a 20 20 20 20 69 66 28 20 70 49  ht);..    if( pI
4700: 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64  d2->n==0 && eMod
4710: 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  e==PAGER_LOCKING
4720: 4d 4f 44 45 5f 51 55 45 52 59 20 29 7b 0a 20 20  MODE_QUERY ){.  
4730: 20 20 20 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50      /* Simple "P
4740: 52 41 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f  RAGMA locking_mo
4750: 64 65 3b 22 20 73 74 61 74 65 6d 65 6e 74 2e 20  de;" statement. 
4760: 54 68 69 73 20 69 73 20 61 20 71 75 65 72 79 20  This is a query 
4770: 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  for.      ** the
4780: 20 63 75 72 72 65 6e 74 20 64 65 66 61 75 6c 74   current default
4790: 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77   locking mode (w
47a0: 68 69 63 68 20 6d 61 79 20 62 65 20 64 69 66 66  hich may be diff
47b0: 65 72 65 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a  erent to.      *
47c0: 2a 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f  * the locking-mo
47d0: 64 65 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64  de of the main d
47e0: 61 74 61 62 61 73 65 29 2e 0a 20 20 20 20 20 20  atabase)..      
47f0: 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  */.      eMode =
4800: 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64   db->dfltLockMod
4810: 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  e;.    }else{.  
4820: 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65      Pager *pPage
4830: 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64  r;.      if( pId
4840: 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20  2->n==0 ){.     
4850: 20 20 20 2f 2a 20 54 68 69 73 20 69 6e 64 69 63     /* This indic
4860: 61 74 65 73 20 74 68 61 74 20 6e 6f 20 64 61 74  ates that no dat
4870: 61 62 61 73 65 20 6e 61 6d 65 20 77 61 73 20 73  abase name was s
4880: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
4890: 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74  .        ** of t
48a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
48b0: 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
48c0: 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  the locking-mode
48d0: 20 6d 75 73 74 20 62 65 0a 20 20 20 20 20 20 20   must be.       
48e0: 20 2a 2a 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61   ** set on all a
48f0: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
4900: 73 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 74 68  s, as well as th
4910: 65 20 6d 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a  e main db file..
4920: 20 20 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20          **.     
4930: 20 20 20 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20     ** Also, the 
4940: 73 71 6c 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b  sqlite3.dfltLock
4950: 4d 6f 64 65 20 76 61 72 69 61 62 6c 65 20 69 73  Mode variable is
4960: 20 73 65 74 20 73 6f 20 74 68 61 74 0a 20 20 20   set so that.   
4970: 20 20 20 20 20 2a 2a 20 61 6e 79 20 73 75 62 73       ** any subs
4980: 65 71 75 65 6e 74 6c 79 20 61 74 74 61 63 68 65  equently attache
4990: 64 20 64 61 74 61 62 61 73 65 73 20 61 6c 73 6f  d databases also
49a0: 20 75 73 65 20 74 68 65 20 73 70 65 63 69 66 69   use the specifi
49b0: 65 64 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f  ed.        ** lo
49c0: 63 6b 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20  cking mode..    
49d0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69      */.        i
49e0: 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 20 20 61  nt ii;.        a
49f0: 73 73 65 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e  ssert(pDb==&db->
4a00: 61 44 62 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20  aDb[0]);.       
4a10: 20 66 6f 72 28 69 69 3d 32 3b 20 69 69 3c 64 62   for(ii=2; ii<db
4a20: 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
4a30: 20 20 20 20 20 20 20 20 70 50 61 67 65 72 20 3d          pPager =
4a40: 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
4a50: 65 72 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  er(db->aDb[ii].p
4a60: 42 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  Bt);.          s
4a70: 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69  qlite3PagerLocki
4a80: 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65  ngMode(pPager, e
4a90: 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 20 20 7d  Mode);.        }
4aa0: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 64 66 6c  .        db->dfl
4ab0: 74 4c 6f 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29  tLockMode = (u8)
4ac0: 65 4d 6f 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20  eMode;.      }. 
4ad0: 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73 71       pPager = sq
4ae0: 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
4af0: 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20  pDb->pBt);.     
4b00: 20 65 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33   eMode = sqlite3
4b10: 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65  PagerLockingMode
4b20: 28 70 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b  (pPager, eMode);
4b30: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65  .    }..    asse
4b40: 72 74 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52  rt( eMode==PAGER
4b50: 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52  _LOCKINGMODE_NOR
4b60: 4d 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20  MAL.            
4b70: 7c 7c 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  || eMode==PAGER_
4b80: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c  LOCKINGMODE_EXCL
4b90: 55 53 49 56 45 20 29 3b 0a 20 20 20 20 69 66 28  USIVE );.    if(
4ba0: 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f   eMode==PAGER_LO
4bb0: 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53  CKINGMODE_EXCLUS
4bc0: 49 56 45 20 29 7b 0a 20 20 20 20 20 20 7a 52 65  IVE ){.      zRe
4bd0: 74 20 3d 20 22 65 78 63 6c 75 73 69 76 65 22 3b  t = "exclusive";
4be0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
4bf0: 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22  nSingleText(v, "
4c00: 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 7a  locking_mode", z
4c10: 52 65 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Ret);.    break;
4c20: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
4c30: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
4c40: 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20  ]journal_mode.  
4c50: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
4c60: 6d 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  ma.]journal_mode
4c70: 20 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20   =.  **         
4c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64 65               (de
4c90: 6c 65 74 65 7c 70 65 72 73 69 73 74 7c 6f 66 66  lete|persist|off
4ca0: 7c 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72 79  |truncate|memory
4cb0: 7c 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20  |wal|off).  */. 
4cc0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4a 4f   case PragTyp_JO
4cd0: 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20 20  URNAL_MODE: {.  
4ce0: 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20 20    int eMode;    
4cf0: 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68      /* One of th
4d00: 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  e PAGER_JOURNALM
4d10: 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73 20  ODE_XXX symbols 
4d20: 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b 20 20  */.    int ii;  
4d30: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
4d40: 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20 20   counter */..   
4d50: 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d   setOneColumnNam
4d60: 65 28 76 2c 20 22 6a 6f 75 72 6e 61 6c 5f 6d 6f  e(v, "journal_mo
4d70: 64 65 22 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  de");.    if( zR
4d80: 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ight==0 ){.     
4d90: 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
4da0: 6e 6f 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20  no "=MODE" part 
4db0: 6f 66 20 74 68 65 20 70 72 61 67 6d 61 2c 20 64  of the pragma, d
4dc0: 6f 20 61 20 71 75 65 72 79 20 66 6f 72 20 74 68  o a query for th
4dd0: 65 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65  e.      ** curre
4de0: 6e 74 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20  nt mode */.     
4df0: 20 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a   eMode = PAGER_J
4e00: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
4e10: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
4e20: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
4e30: 4d 6f 64 65 3b 0a 20 20 20 20 20 20 69 6e 74 20  Mode;.      int 
4e40: 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  n = sqlite3Strle
4e50: 6e 33 30 28 7a 52 69 67 68 74 29 3b 0a 20 20 20  n30(zRight);.   
4e60: 20 20 20 66 6f 72 28 65 4d 6f 64 65 3d 30 3b 20     for(eMode=0; 
4e70: 28 7a 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33  (zMode = sqlite3
4e80: 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
4e90: 65 4d 6f 64 65 29 29 21 3d 30 3b 20 65 4d 6f 64  eMode))!=0; eMod
4ea0: 65 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66  e++){.        if
4eb0: 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  ( sqlite3StrNICm
4ec0: 70 28 7a 52 69 67 68 74 2c 20 7a 4d 6f 64 65 2c  p(zRight, zMode,
4ed0: 20 6e 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a   n)==0 ) break;.
4ee0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
4ef0: 28 20 21 7a 4d 6f 64 65 20 29 7b 0a 20 20 20 20  ( !zMode ){.    
4f00: 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 22 3d      /* If the "=
4f10: 4d 4f 44 45 22 20 70 61 72 74 20 64 6f 65 73 20  MODE" part does 
4f20: 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 20 6b 6e  not match any kn
4f30: 6f 77 6e 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  own journal mode
4f40: 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65  ,.        ** the
4f50: 6e 20 64 6f 20 61 20 71 75 65 72 79 20 2a 2f 0a  n do a query */.
4f60: 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20          eMode = 
4f70: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
4f80: 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 20 20 7d  E_QUERY;.      }
4f90: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65  .    }.    if( e
4fa0: 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  Mode==PAGER_JOUR
4fb0: 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 26 26  NALMODE_QUERY &&
4fc0: 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20   pId2->n==0 ){. 
4fd0: 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20       /* Convert 
4fe0: 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f  "PRAGMA journal_
4ff0: 6d 6f 64 65 22 20 69 6e 74 6f 20 22 50 52 41 47  mode" into "PRAG
5000: 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f  MA main.journal_
5010: 6d 6f 64 65 22 20 2a 2f 0a 20 20 20 20 20 20 69  mode" */.      i
5020: 44 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 49  Db = 0;.      pI
5030: 64 32 2d 3e 6e 20 3d 20 31 3b 0a 20 20 20 20 7d  d2->n = 1;.    }
5040: 0a 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e  .    for(ii=db->
5050: 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69  nDb-1; ii>=0; ii
5060: 2d 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64  --){.      if( d
5070: 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26  b->aDb[ii].pBt &
5080: 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49  & (ii==iDb || pI
5090: 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20  d2->n==0) ){.   
50a0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
50b0: 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 69 29  UsesBtree(v, ii)
50c0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
50d0: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
50e0: 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20 69  P_JournalMode, i
50f0: 69 2c 20 31 2c 20 65 4d 6f 64 65 29 3b 0a 20 20  i, 1, eMode);.  
5100: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
5110: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
5120: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
5130: 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62 72  w, 1, 1);.    br
5140: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
5150: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
5160: 65 6d 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a  ema.]journal_siz
5170: 65 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 50 52  e_limit.  **  PR
5180: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6a 6f  AGMA [schema.]jo
5190: 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74  urnal_size_limit
51a0: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74  =N.  **.  ** Get
51b0: 20 6f 72 20 73 65 74 20 74 68 65 20 73 69 7a 65   or set the size
51c0: 20 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62 61   limit on rollba
51d0: 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 73  ck journal files
51e0: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
51f0: 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49  agTyp_JOURNAL_SI
5200: 5a 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20  ZE_LIMIT: {.    
5210: 50 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20  Pager *pPager = 
5220: 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
5230: 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20  r(pDb->pBt);.   
5240: 20 69 36 34 20 69 4c 69 6d 69 74 20 3d 20 2d 32   i64 iLimit = -2
5250: 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
5260: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
5270: 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a  3DecOrHexToI64(z
5280: 52 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 29 3b  Right, &iLimit);
5290: 0a 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69  .      if( iLimi
52a0: 74 3c 2d 31 20 29 20 69 4c 69 6d 69 74 20 3d 20  t<-1 ) iLimit = 
52b0: 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4c  -1;.    }.    iL
52c0: 69 6d 69 74 20 3d 20 73 71 6c 69 74 65 33 50 61  imit = sqlite3Pa
52d0: 67 65 72 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c 69  gerJournalSizeLi
52e0: 6d 69 74 28 70 50 61 67 65 72 2c 20 69 4c 69 6d  mit(pPager, iLim
52f0: 69 74 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 53  it);.    returnS
5300: 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 6a 6f 75  ingleInt(v, "jou
5310: 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22  rnal_size_limit"
5320: 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 62  , iLimit);.    b
5330: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69  reak;.  }..#endi
5340: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
5350: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a  _PAGER_PRAGMAS *
5360: 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  /..  /*.  **  PR
5370: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 75  AGMA [schema.]au
5380: 74 6f 5f 76 61 63 75 75 6d 0a 20 20 2a 2a 20 20  to_vacuum.  **  
5390: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
53a0: 61 75 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20 20  auto_vacuum=N.  
53b0: 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20 73  **.  ** Get or s
53c0: 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  et the value of 
53d0: 74 68 65 20 64 61 74 61 62 61 73 65 20 27 61 75  the database 'au
53e0: 74 6f 2d 76 61 63 75 75 6d 27 20 70 61 72 61 6d  to-vacuum' param
53f0: 65 74 65 72 2e 0a 20 20 2a 2a 20 54 68 65 20 76  eter..  ** The v
5400: 61 6c 75 65 20 69 73 20 6f 6e 65 20 6f 66 3a 20  alue is one of: 
5410: 20 30 20 4e 4f 4e 45 20 31 20 46 55 4c 4c 20 32   0 NONE 1 FULL 2
5420: 20 49 4e 43 52 45 4d 45 4e 54 41 4c 0a 20 20 2a   INCREMENTAL.  *
5430: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
5440: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
5450: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
5460: 41 55 54 4f 5f 56 41 43 55 55 4d 3a 20 7b 0a 20  AUTO_VACUUM: {. 
5470: 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20     Btree *pBt = 
5480: 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73  pDb->pBt;.    as
5490: 73 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a  sert( pBt!=0 );.
54a0: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
54b0: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
54c0: 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 61 75 74  ingleInt(v, "aut
54d0: 6f 5f 76 61 63 75 75 6d 22 2c 20 73 71 6c 69 74  o_vacuum", sqlit
54e0: 65 33 42 74 72 65 65 47 65 74 41 75 74 6f 56 61  e3BtreeGetAutoVa
54f0: 63 75 75 6d 28 70 42 74 29 29 3b 0a 20 20 20 20  cuum(pBt));.    
5500: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
5510: 20 65 41 75 74 6f 20 3d 20 67 65 74 41 75 74 6f   eAuto = getAuto
5520: 56 61 63 75 75 6d 28 7a 52 69 67 68 74 29 3b 0a  Vacuum(zRight);.
5530: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65 41        assert( eA
5540: 75 74 6f 3e 3d 30 20 26 26 20 65 41 75 74 6f 3c  uto>=0 && eAuto<
5550: 3d 32 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  =2 );.      db->
5560: 6e 65 78 74 41 75 74 6f 76 61 63 20 3d 20 28 75  nextAutovac = (u
5570: 38 29 65 41 75 74 6f 3b 0a 20 20 20 20 20 20 2f  8)eAuto;.      /
5580: 2a 20 43 61 6c 6c 20 53 65 74 41 75 74 6f 56 61  * Call SetAutoVa
5590: 63 75 75 6d 28 29 20 74 6f 20 73 65 74 20 69 6e  cuum() to set in
55a0: 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69 6e 74  itialize the int
55b0: 65 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64 0a 20  ernal auto and. 
55c0: 20 20 20 20 20 2a 2a 20 69 6e 63 72 2d 76 61 63       ** incr-vac
55d0: 75 75 6d 20 66 6c 61 67 73 2e 20 54 68 69 73 20  uum flags. This 
55e0: 69 73 20 72 65 71 75 69 72 65 64 20 69 6e 20 63  is required in c
55f0: 61 73 65 20 74 68 69 73 20 63 6f 6e 6e 65 63 74  ase this connect
5600: 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 63 72 65  ion.      ** cre
5610: 61 74 65 73 20 74 68 65 20 64 61 74 61 62 61 73  ates the databas
5620: 65 20 66 69 6c 65 2e 20 49 74 20 69 73 20 69 6d  e file. It is im
5630: 70 6f 72 74 61 6e 74 20 74 68 61 74 20 69 74 20  portant that it 
5640: 69 73 20 63 72 65 61 74 65 64 0a 20 20 20 20 20  is created.     
5650: 20 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d 76   ** as an auto-v
5660: 61 63 75 75 6d 20 63 61 70 61 62 6c 65 20 64 62  acuum capable db
5670: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
5680: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
5690: 65 65 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28  eeSetAutoVacuum(
56a0: 70 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20 20 20  pBt, eAuto);.   
56b0: 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
56c0: 45 5f 4f 4b 20 26 26 20 28 65 41 75 74 6f 3d 3d  E_OK && (eAuto==
56d0: 31 20 7c 7c 20 65 41 75 74 6f 3d 3d 32 29 20 29  1 || eAuto==2) )
56e0: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65  {.        /* Whe
56f0: 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20 61 75  n setting the au
5700: 74 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65 20 74  to_vacuum mode t
5710: 6f 20 65 69 74 68 65 72 20 22 66 75 6c 6c 22 20  o either "full" 
5720: 6f 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 22  or .        ** "
5730: 69 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20 77 72  incremental", wr
5740: 69 74 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ite the value of
5750: 20 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68 65 20   meta[6] in the 
5760: 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 20  database.       
5770: 20 2a 2a 20 66 69 6c 65 2e 20 42 65 66 6f 72 65   ** file. Before
5780: 20 77 72 69 74 69 6e 67 20 74 6f 20 6d 65 74 61   writing to meta
5790: 5b 36 5d 2c 20 63 68 65 63 6b 20 74 68 61 74 20  [6], check that 
57a0: 6d 65 74 61 5b 33 5d 20 69 6e 64 69 63 61 74 65  meta[3] indicate
57b0: 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61  s.        ** tha
57c0: 74 20 74 68 69 73 20 72 65 61 6c 6c 79 20 69 73  t this really is
57d0: 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20   an auto-vacuum 
57e0: 63 61 70 61 62 6c 65 20 64 61 74 61 62 61 73 65  capable database
57f0: 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20  ..        */.   
5800: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
5810: 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45  t int iLn = VDBE
5820: 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32  _OFFSET_LINENO(2
5830: 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61 74 69  );.        stati
5840: 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
5850: 73 74 20 73 65 74 4d 65 74 61 36 5b 5d 20 3d 20  st setMeta6[] = 
5860: 7b 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50  {.          { OP
5870: 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20  _Transaction,   
5880: 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20   0,         1,  
5890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
58a0: 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20  },    /* 0 */.  
58b0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61          { OP_Rea
58c0: 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c 20  dCookie,     0, 
58d0: 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20          1,      
58e0: 20 20 20 42 54 52 45 45 5f 4c 41 52 47 45 53 54     BTREE_LARGEST
58f0: 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20 20  _ROOT_PAGE},.   
5900: 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20         { OP_If, 
5910: 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20 20              1,  
5920: 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20         0,       
5930: 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20            0},   
5940: 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 20   /* 2 */.       
5950: 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20     { OP_Halt,   
5960: 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f          SQLITE_O
5970: 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20 20 20  K, OE_Abort,    
5980: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
5990: 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b  3 */.          {
59a0: 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20   OP_SetCookie,  
59b0: 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 42      0,         B
59c0: 54 52 45 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d  TREE_INCR_VACUUM
59d0: 2c 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f  , 0},    /* 4 */
59e0: 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  .        };.    
59f0: 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b      VdbeOp *aOp;
5a00: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 41 64  .        int iAd
5a10: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
5a20: 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 3b 0a  CurrentAddr(v);.
5a30: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
5a40: 64 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f  dbeVerifyNoMallo
5a50: 63 52 65 71 75 69 72 65 64 28 76 2c 20 41 72 72  cRequired(v, Arr
5a60: 61 79 53 69 7a 65 28 73 65 74 4d 65 74 61 36 29  aySize(setMeta6)
5a70: 29 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 20 3d  );.        aOp =
5a80: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5a90: 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69  pList(v, ArraySi
5aa0: 7a 65 28 73 65 74 4d 65 74 61 36 29 2c 20 73 65  ze(setMeta6), se
5ab0: 74 4d 65 74 61 36 2c 20 69 4c 6e 29 3b 0a 20 20  tMeta6, iLn);.  
5ac0: 20 20 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49        if( ONLY_I
5ad0: 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  F_REALLOC_STRESS
5ae0: 28 61 4f 70 3d 3d 30 29 20 29 20 62 72 65 61 6b  (aOp==0) ) break
5af0: 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 30 5d  ;.        aOp[0]
5b00: 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20  .p1 = iDb;.     
5b10: 20 20 20 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69     aOp[1].p1 = i
5b20: 44 62 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b  Db;.        aOp[
5b30: 32 5d 2e 70 32 20 3d 20 69 41 64 64 72 2b 34 3b  2].p2 = iAddr+4;
5b40: 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 34 5d 2e  .        aOp[4].
5b50: 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20  p1 = iDb;.      
5b60: 20 20 61 4f 70 5b 34 5d 2e 70 33 20 3d 20 65 41    aOp[4].p3 = eA
5b70: 75 74 6f 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  uto - 1;.       
5b80: 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73   sqlite3VdbeUses
5b90: 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20  Btree(v, iDb);. 
5ba0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
5bb0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
5bc0: 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50  if..  /*.  **  P
5bd0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69  RAGMA [schema.]i
5be0: 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75  ncremental_vacuu
5bf0: 6d 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44  m(N).  **.  ** D
5c00: 6f 20 4e 20 73 74 65 70 73 20 6f 66 20 69 6e 63  o N steps of inc
5c10: 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 69  remental vacuumi
5c20: 6e 67 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65  ng on a database
5c30: 2e 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ..  */.#ifndef S
5c40: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
5c50: 41 43 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61  ACUUM.  case Pra
5c60: 67 54 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c  gTyp_INCREMENTAL
5c70: 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69  _VACUUM: {.    i
5c80: 6e 74 20 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b  nt iLimit, addr;
5c90: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d  .    if( zRight=
5ca0: 3d 30 20 7c 7c 20 21 73 71 6c 69 74 65 33 47 65  =0 || !sqlite3Ge
5cb0: 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26  tInt32(zRight, &
5cc0: 69 4c 69 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69  iLimit) || iLimi
5cd0: 74 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 4c  t<=0 ){.      iL
5ce0: 69 6d 69 74 20 3d 20 30 78 37 66 66 66 66 66 66  imit = 0x7ffffff
5cf0: 66 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  f;.    }.    sql
5d00: 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70  ite3BeginWriteOp
5d10: 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20  eration(pParse, 
5d20: 30 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c  0, iDb);.    sql
5d30: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
5d40: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c  , OP_Integer, iL
5d50: 69 6d 69 74 2c 20 31 29 3b 0a 20 20 20 20 61 64  imit, 1);.    ad
5d60: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
5d70: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63  AddOp1(v, OP_Inc
5d80: 72 56 61 63 75 75 6d 2c 20 69 44 62 29 3b 20 56  rVacuum, iDb); V
5d90: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
5da0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
5db0: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp1(v, OP_Resu
5dc0: 6c 74 52 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73  ltRow, 1);.    s
5dd0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
5de0: 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31  (v, OP_AddImm, 1
5df0: 2c 20 2d 31 29 3b 0a 20 20 20 20 73 71 6c 69 74  , -1);.    sqlit
5e00: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
5e10: 4f 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64  OP_IfPos, 1, add
5e20: 72 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  r); VdbeCoverage
5e30: 28 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  (v);.    sqlite3
5e40: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
5e50: 61 64 64 72 29 3b 0a 20 20 20 20 62 72 65 61 6b  addr);.    break
5e60: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ;.  }.#endif..#i
5e70: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
5e80: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
5e90: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
5ea0: 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65  A [schema.]cache
5eb0: 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47  _size.  **  PRAG
5ec0: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68  MA [schema.]cach
5ed0: 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20  e_size=N.  **.  
5ee0: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
5ef0: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
5f00: 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74  rrent local sett
5f10: 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ing for the.  **
5f20: 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65   page cache size
5f30: 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  . The second for
5f40: 6d 20 73 65 74 73 20 74 68 65 20 6c 6f 63 61 6c  m sets the local
5f50: 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65  .  ** page cache
5f60: 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 49 66   size value.  If
5f70: 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65 20 74   N is positive t
5f80: 68 65 6e 20 74 68 61 74 20 69 73 20 74 68 65 0a  hen that is the.
5f90: 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70    ** number of p
5fa0: 61 67 65 73 20 69 6e 20 74 68 65 20 63 61 63 68  ages in the cach
5fb0: 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61  e.  If N is nega
5fc0: 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65 0a 20  tive, then the. 
5fd0: 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61   ** number of pa
5fe0: 67 65 73 20 69 73 20 61 64 6a 75 73 74 65 64 20  ges is adjusted 
5ff0: 73 6f 20 74 68 61 74 20 74 68 65 20 63 61 63 68  so that the cach
6000: 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69 62 79  e uses -N kibiby
6010: 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f  tes.  ** of memo
6020: 72 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ry..  */.  case 
6030: 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f 53 49  PragTyp_CACHE_SI
6040: 5a 45 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74  ZE: {.    assert
6050: 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
6060: 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62  utexHeld(db, iDb
6070: 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20  , 0) );.    if( 
6080: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
6090: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
60a0: 28 76 2c 20 22 63 61 63 68 65 5f 73 69 7a 65 22  (v, "cache_size"
60b0: 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  , pDb->pSchema->
60c0: 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20  cache_size);.   
60d0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e   }else{.      in
60e0: 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33  t size = sqlite3
60f0: 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20  Atoi(zRight);.  
6100: 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
6110: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73  ->cache_size = s
6120: 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ize;.      sqlit
6130: 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53  e3BtreeSetCacheS
6140: 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44  ize(pDb->pBt, pD
6150: 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68  b->pSchema->cach
6160: 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20  e_size);.    }. 
6170: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
6180: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
6190: 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f   [schema.]cache_
61a0: 73 70 69 6c 6c 0a 20 20 2a 2a 20 20 50 52 41 47  spill.  **  PRAG
61b0: 4d 41 20 63 61 63 68 65 5f 73 70 69 6c 6c 3d 42  MA cache_spill=B
61c0: 4f 4f 4c 45 41 4e 0a 20 20 2a 2a 20 20 50 52 41  OOLEAN.  **  PRA
61d0: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63  GMA [schema.]cac
61e0: 68 65 5f 73 70 69 6c 6c 3d 4e 0a 20 20 2a 2a 0a  he_spill=N.  **.
61f0: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
6200: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
6210: 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65  current local se
6220: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
6230: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 70  ** page cache sp
6240: 69 6c 6c 20 73 69 7a 65 2e 20 54 68 65 20 73 65  ill size. The se
6250: 63 6f 6e 64 20 66 6f 72 6d 20 74 75 72 6e 73 20  cond form turns 
6260: 63 61 63 68 65 20 73 70 69 6c 6c 20 6f 6e 0a 20  cache spill on. 
6270: 20 2a 2a 20 6f 72 20 6f 66 66 2e 20 20 57 68 65   ** or off.  Whe
6280: 6e 20 74 75 72 6e 6e 69 6e 67 20 63 61 63 68 65  n turnning cache
6290: 20 73 70 69 6c 6c 20 6f 6e 2c 20 74 68 65 20 73   spill on, the s
62a0: 69 7a 65 20 69 73 20 73 65 74 20 74 6f 20 74 68  ize is set to th
62b0: 65 0a 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 63  e.  ** current c
62c0: 61 63 68 65 5f 73 69 7a 65 2e 20 20 54 68 65 20  ache_size.  The 
62d0: 74 68 69 72 64 20 66 6f 72 6d 20 73 65 74 73 20  third form sets 
62e0: 61 20 73 70 69 6c 6c 20 73 69 7a 65 20 74 68 61  a spill size tha
62f0: 74 0a 20 20 2a 2a 20 6d 61 79 20 62 65 20 64 69  t.  ** may be di
6300: 66 66 65 72 65 6e 74 20 66 6f 72 6d 20 74 68 65  fferent form the
6310: 20 63 61 63 68 65 20 73 69 7a 65 2e 0a 20 20 2a   cache size..  *
6320: 2a 20 49 66 20 4e 20 69 73 20 70 6f 73 69 74 69  * If N is positi
6330: 76 65 20 74 68 65 6e 20 74 68 61 74 20 69 73 20  ve then that is 
6340: 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20  the.  ** number 
6350: 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  of pages in the 
6360: 63 61 63 68 65 2e 20 20 49 66 20 4e 20 69 73 20  cache.  If N is 
6370: 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74  negative, then t
6380: 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f  he.  ** number o
6390: 66 20 70 61 67 65 73 20 69 73 20 61 64 6a 75 73  f pages is adjus
63a0: 74 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20  ted so that the 
63b0: 63 61 63 68 65 20 75 73 65 73 20 2d 4e 20 6b 69  cache uses -N ki
63c0: 62 69 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20  bibytes.  ** of 
63d0: 6d 65 6d 6f 72 79 2e 0a 20 20 2a 2a 0a 20 20 2a  memory..  **.  *
63e0: 2a 20 49 66 20 74 68 65 20 6e 75 6d 62 65 72 20  * If the number 
63f0: 6f 66 20 63 61 63 68 65 5f 73 70 69 6c 6c 20 70  of cache_spill p
6400: 61 67 65 73 20 69 73 20 6c 65 73 73 20 74 68 65  ages is less the
6410: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a  n the number of.
6420: 20 20 2a 2a 20 63 61 63 68 65 5f 73 69 7a 65 20    ** cache_size 
6430: 70 61 67 65 73 2c 20 6e 6f 20 73 70 69 6c 6c 69  pages, no spilli
6440: 6e 67 20 6f 63 63 75 72 73 20 75 6e 74 69 6c 20  ng occurs until 
6450: 74 68 65 20 70 61 67 65 20 63 6f 75 6e 74 20 65  the page count e
6460: 78 63 65 65 64 73 0a 20 20 2a 2a 20 74 68 65 20  xceeds.  ** the 
6470: 6e 75 6d 62 65 72 20 6f 66 20 63 61 63 68 65 5f  number of cache_
6480: 73 69 7a 65 20 70 61 67 65 73 2e 0a 20 20 2a 2a  size pages..  **
6490: 0a 20 20 2a 2a 20 54 68 65 20 63 61 63 68 65 5f  .  ** The cache_
64a0: 73 70 69 6c 6c 3d 42 4f 4f 4c 45 41 4e 20 73 65  spill=BOOLEAN se
64b0: 74 74 69 6e 67 20 61 70 70 6c 69 65 73 20 74 6f  tting applies to
64c0: 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 73 63   all attached sc
64d0: 68 65 6d 61 73 2c 0a 20 20 2a 2a 20 6e 6f 74 20  hemas,.  ** not 
64e0: 6a 75 73 74 20 74 68 65 20 73 63 68 65 6d 61 20  just the schema 
64f0: 73 70 65 63 69 66 69 65 64 2e 0a 20 20 2a 2f 0a  specified..  */.
6500: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43    case PragTyp_C
6510: 41 43 48 45 5f 53 50 49 4c 4c 3a 20 7b 0a 20 20  ACHE_SPILL: {.  
6520: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
6530: 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
6540: 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a  (db, iDb, 0) );.
6550: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
6560: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
6570: 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 63 61 63  ingleInt(v, "cac
6580: 68 65 5f 73 70 69 6c 6c 22 2c 20 0a 20 20 20 20  he_spill", .    
6590: 20 20 20 20 20 28 64 62 2d 3e 66 6c 61 67 73 20       (db->flags 
65a0: 26 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70  & SQLITE_CacheSp
65b0: 69 6c 6c 29 3d 3d 30 20 3f 20 30 20 3a 20 0a 20  ill)==0 ? 0 : . 
65c0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
65d0: 65 33 42 74 72 65 65 53 65 74 53 70 69 6c 6c 53  e3BtreeSetSpillS
65e0: 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 30 29 29  ize(pDb->pBt,0))
65f0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
6600: 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 31 3b     int size = 1;
6610: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
6620: 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69 67 68  e3GetInt32(zRigh
6630: 74 2c 20 26 73 69 7a 65 29 20 29 7b 0a 20 20 20  t, &size) ){.   
6640: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
6650: 65 53 65 74 53 70 69 6c 6c 53 69 7a 65 28 70 44  eSetSpillSize(pD
6660: 62 2d 3e 70 42 74 2c 20 73 69 7a 65 29 3b 0a 20  b->pBt, size);. 
6670: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
6680: 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
6690: 61 6e 28 7a 52 69 67 68 74 2c 20 73 69 7a 65 21  an(zRight, size!
66a0: 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 64  =0) ){.        d
66b0: 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
66c0: 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 3b 0a 20  TE_CacheSpill;. 
66d0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
66e0: 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d      db->flags &=
66f0: 20 7e 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70   ~SQLITE_CacheSp
6700: 69 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ill;.      }.   
6710: 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c     setAllPagerFl
6720: 61 67 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20  ags(db);.    }. 
6730: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
6740: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
6750: 20 5b 73 63 68 65 6d 61 2e 5d 6d 6d 61 70 5f 73   [schema.]mmap_s
6760: 69 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a  ize(N).  **.  **
6770: 20 55 73 65 64 20 74 6f 20 73 65 74 20 6d 61 70   Used to set map
6780: 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74 2e  ping size limit.
6790: 20 54 68 65 20 6d 61 70 70 69 6e 67 20 73 69 7a   The mapping siz
67a0: 65 20 6c 69 6d 69 74 20 69 73 0a 20 20 2a 2a 20  e limit is.  ** 
67b0: 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74 68  used to limit th
67c0: 65 20 61 67 67 72 65 67 61 74 65 20 73 69 7a 65  e aggregate size
67d0: 20 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72 79 20 6d   of all memory m
67e0: 61 70 70 65 64 20 72 65 67 69 6f 6e 73 20 6f 66  apped regions of
67f0: 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61   the.  ** databa
6800: 73 65 20 66 69 6c 65 2e 20 49 66 20 74 68 69 73  se file. If this
6810: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 73 65   parameter is se
6820: 74 20 74 6f 20 7a 65 72 6f 2c 20 74 68 65 6e 20  t to zero, then 
6830: 6d 65 6d 6f 72 79 20 6d 61 70 70 69 6e 67 0a 20  memory mapping. 
6840: 20 2a 2a 20 69 73 20 6e 6f 74 20 75 73 65 64 20   ** is not used 
6850: 61 74 20 61 6c 6c 2e 20 20 49 66 20 4e 20 69 73  at all.  If N is
6860: 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20   negative, then 
6870: 74 68 65 20 64 65 66 61 75 6c 74 20 6d 65 6d 6f  the default memo
6880: 72 79 20 6d 61 70 0a 20 20 2a 2a 20 6c 69 6d 69  ry map.  ** limi
6890: 74 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  t determined by 
68a0: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53  sqlite3_config(S
68b0: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41  QLITE_CONFIG_MMA
68c0: 50 5f 53 49 5a 45 29 20 69 73 20 73 65 74 2e 0a  P_SIZE) is set..
68d0: 20 20 2a 2a 20 54 68 65 20 70 61 72 61 6d 65 74    ** The paramet
68e0: 65 72 20 4e 20 69 73 20 6d 65 61 73 75 72 65 64  er N is measured
68f0: 20 69 6e 20 62 79 74 65 73 2e 0a 20 20 2a 2a 0a   in bytes..  **.
6900: 20 20 2a 2a 20 54 68 69 73 20 76 61 6c 75 65 20    ** This value 
6910: 69 73 20 61 64 76 69 73 6f 72 79 2e 20 20 54 68  is advisory.  Th
6920: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46 53  e underlying VFS
6930: 20 69 73 20 66 72 65 65 20 74 6f 20 6d 65 6d 6f   is free to memo
6940: 72 79 20 6d 61 70 0a 20 20 2a 2a 20 61 73 20 6c  ry map.  ** as l
6950: 69 74 74 6c 65 20 6f 72 20 61 73 20 6d 75 63 68  ittle or as much
6960: 20 61 73 20 69 74 20 77 61 6e 74 73 2e 20 20 45   as it wants.  E
6970: 78 63 65 70 74 2c 20 69 66 20 4e 20 69 73 20 73  xcept, if N is s
6980: 65 74 20 74 6f 20 30 20 74 68 65 6e 20 74 68 65  et to 0 then the
6990: 0a 20 20 2a 2a 20 75 70 70 65 72 20 6c 61 79 65  .  ** upper laye
69a0: 72 73 20 77 69 6c 6c 20 6e 65 76 65 72 20 69 6e  rs will never in
69b0: 76 6f 6b 65 20 74 68 65 20 78 46 65 74 63 68 20  voke the xFetch 
69c0: 69 6e 74 65 72 66 61 63 65 73 20 74 6f 20 74 68  interfaces to th
69d0: 65 20 56 46 53 2e 0a 20 20 2a 2f 0a 20 20 63 61  e VFS..  */.  ca
69e0: 73 65 20 50 72 61 67 54 79 70 5f 4d 4d 41 50 5f  se PragTyp_MMAP_
69f0: 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73 71 6c 69  SIZE: {.    sqli
6a00: 74 65 33 5f 69 6e 74 36 34 20 73 7a 3b 0a 23 69  te3_int64 sz;.#i
6a10: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  f SQLITE_MAX_MMA
6a20: 50 5f 53 49 5a 45 3e 30 0a 20 20 20 20 61 73 73  P_SIZE>0.    ass
6a30: 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
6a40: 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
6a50: 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69  iDb, 0) );.    i
6a60: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
6a70: 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20     int ii;.     
6a80: 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78   sqlite3DecOrHex
6a90: 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 73  ToI64(zRight, &s
6aa0: 7a 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 7a  z);.      if( sz
6ab0: 3c 30 20 29 20 73 7a 20 3d 20 73 71 6c 69 74 65  <0 ) sz = sqlite
6ac0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 7a  3GlobalConfig.sz
6ad0: 4d 6d 61 70 3b 0a 20 20 20 20 20 20 69 66 28 20  Mmap;.      if( 
6ae0: 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 20 64 62 2d  pId2->n==0 ) db-
6af0: 3e 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b 0a 20 20  >szMmap = sz;.  
6b00: 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e      for(ii=db->n
6b10: 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d  Db-1; ii>=0; ii-
6b20: 2d 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  -){.        if( 
6b30: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20  db->aDb[ii].pBt 
6b40: 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70  && (ii==iDb || p
6b50: 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20  Id2->n==0) ){.  
6b60: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42          sqlite3B
6b70: 74 72 65 65 53 65 74 4d 6d 61 70 4c 69 6d 69 74  treeSetMmapLimit
6b80: 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
6b90: 2c 20 73 7a 29 3b 0a 20 20 20 20 20 20 20 20 7d  , sz);.        }
6ba0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
6bb0: 20 20 20 73 7a 20 3d 20 2d 31 3b 0a 20 20 20 20     sz = -1;.    
6bc0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c  rc = sqlite3_fil
6bd0: 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44  e_control(db, zD
6be0: 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  b, SQLITE_FCNTL_
6bf0: 4d 4d 41 50 5f 53 49 5a 45 2c 20 26 73 7a 29 3b  MMAP_SIZE, &sz);
6c00: 0a 23 65 6c 73 65 0a 20 20 20 20 73 7a 20 3d 20  .#else.    sz = 
6c10: 30 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  0;.    rc = SQLI
6c20: 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 20 20  TE_OK;.#endif.  
6c30: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
6c40: 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 74  _OK ){.      ret
6c50: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20  urnSingleInt(v, 
6c60: 22 6d 6d 61 70 5f 73 69 7a 65 22 2c 20 73 7a 29  "mmap_size", sz)
6c70: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
6c80: 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f  rc!=SQLITE_NOTFO
6c90: 55 4e 44 20 29 7b 0a 20 20 20 20 20 20 70 50 61  UND ){.      pPa
6ca0: 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20  rse->nErr++;.   
6cb0: 20 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20     pParse->rc = 
6cc0: 72 63 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72  rc;.    }.    br
6cd0: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
6ce0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d   **   PRAGMA tem
6cf0: 70 5f 73 74 6f 72 65 0a 20 20 2a 2a 20 20 20 50  p_store.  **   P
6d00: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
6d10: 20 3d 20 22 64 65 66 61 75 6c 74 22 7c 22 6d 65   = "default"|"me
6d20: 6d 6f 72 79 22 7c 22 66 69 6c 65 22 0a 20 20 2a  mory"|"file".  *
6d30: 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72  *.  ** Return or
6d40: 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76   set the local v
6d50: 61 6c 75 65 20 6f 66 20 74 68 65 20 74 65 6d 70  alue of the temp
6d60: 5f 73 74 6f 72 65 20 66 6c 61 67 2e 20 20 43 68  _store flag.  Ch
6d70: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
6d80: 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f 65 73  local value does
6d90: 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67 65   not make change
6da0: 73 20 74 6f 20 74 68 65 20 64 69 73 6b 20 66 69  s to the disk fi
6db0: 6c 65 20 61 6e 64 20 74 68 65 20 64 65 66 61 75  le and the defau
6dc0: 6c 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 77 69  lt.  ** value wi
6dd0: 6c 6c 20 62 65 20 72 65 73 74 6f 72 65 64 20 74  ll be restored t
6de0: 68 65 20 6e 65 78 74 20 74 69 6d 65 20 74 68 65  he next time the
6df0: 20 64 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   database is ope
6e00: 6e 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e  ned..  **.  ** N
6e10: 6f 74 65 20 74 68 61 74 20 69 74 20 69 73 20 70  ote that it is p
6e20: 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20  ossible for the 
6e30: 6c 69 62 72 61 72 79 20 63 6f 6d 70 69 6c 65 2d  library compile-
6e40: 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74 6f 0a  time options to.
6e50: 20 20 2a 2a 20 6f 76 65 72 72 69 64 65 20 74 68    ** override th
6e60: 69 73 20 73 65 74 74 69 6e 67 0a 20 20 2a 2f 0a  is setting.  */.
6e70: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 54    case PragTyp_T
6e80: 45 4d 50 5f 53 54 4f 52 45 3a 20 7b 0a 20 20 20  EMP_STORE: {.   
6e90: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
6ea0: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
6eb0: 6c 65 49 6e 74 28 76 2c 20 22 74 65 6d 70 5f 73  leInt(v, "temp_s
6ec0: 74 6f 72 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f  tore", db->temp_
6ed0: 73 74 6f 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73  store);.    }els
6ee0: 65 7b 0a 20 20 20 20 20 20 63 68 61 6e 67 65 54  e{.      changeT
6ef0: 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61 72 73  empStorage(pPars
6f00: 65 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  e, zRight);.    
6f10: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
6f20: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
6f30: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
6f40: 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20  directory.  **  
6f50: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
6f60: 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22  re_directory = "
6f70: 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d  "|"directory_nam
6f80: 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  e".  **.  ** Ret
6f90: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c  urn or set the l
6fa0: 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  ocal value of th
6fb0: 65 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  e temp_store_dir
6fc0: 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68  ectory flag.  Ch
6fd0: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
6fe0: 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65  value sets a spe
6ff0: 63 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20  cific directory 
7000: 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  to be used for t
7010: 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a  emporary files..
7020: 20 20 2a 2a 20 53 65 74 74 69 6e 67 20 74 6f 20    ** Setting to 
7030: 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65  a null string re
7040: 76 65 72 74 73 20 74 6f 20 74 68 65 20 64 65 66  verts to the def
7050: 61 75 6c 74 20 74 65 6d 70 6f 72 61 72 79 20 64  ault temporary d
7060: 69 72 65 63 74 6f 72 79 20 73 65 61 72 63 68 2e  irectory search.
7070: 0a 20 20 2a 2a 20 49 66 20 74 65 6d 70 6f 72 61  .  ** If tempora
7080: 72 79 20 64 69 72 65 63 74 6f 72 79 20 69 73 20  ry directory is 
7090: 63 68 61 6e 67 65 64 2c 20 74 68 65 6e 20 69 6e  changed, then in
70a0: 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72  validateTempStor
70b0: 61 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20  age..  **.  */. 
70c0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 45   case PragTyp_TE
70d0: 4d 50 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f  MP_STORE_DIRECTO
70e0: 52 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a  RY: {.    if( !z
70f0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72  Right ){.      r
7100: 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78 74 28  eturnSingleText(
7110: 76 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64  v, "temp_store_d
7120: 69 72 65 63 74 6f 72 79 22 2c 20 73 71 6c 69 74  irectory", sqlit
7130: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
7140: 79 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23  y);.    }else{.#
7150: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
7160: 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28  IT_WSD.      if(
7170: 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20   zRight[0] ){.  
7180: 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20        int res;. 
7190: 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
71a0: 74 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e  te3OsAccess(db->
71b0: 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51  pVfs, zRight, SQ
71c0: 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44  LITE_ACCESS_READ
71d0: 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20  WRITE, &res);.  
71e0: 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
71f0: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d  LITE_OK || res==
7200: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
7210: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
7220: 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72  Parse, "not a wr
7230: 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79  itable directory
7240: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  ");.          go
7250: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
7260: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
7270: 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54  .      if( SQLIT
7280: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a  E_TEMP_STORE==0.
7290: 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54         || (SQLIT
72a0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20  E_TEMP_STORE==1 
72b0: 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  && db->temp_stor
72c0: 65 3c 3d 31 29 0a 20 20 20 20 20 20 20 7c 7c 20  e<=1).       || 
72d0: 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f  (SQLITE_TEMP_STO
72e0: 52 45 3d 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d  RE==2 && db->tem
72f0: 70 5f 73 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20  p_store==1).    
7300: 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 76    ){.        inv
7310: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
7320: 67 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  ge(pParse);.    
7330: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
7340: 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 74  3_free(sqlite3_t
7350: 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a  emp_directory);.
7360: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
7370: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  [0] ){.        s
7380: 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65  qlite3_temp_dire
7390: 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f  ctory = sqlite3_
73a0: 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52  mprintf("%s", zR
73b0: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ight);.      }el
73c0: 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
73d0: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
73e0: 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ry = 0;.      }.
73f0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
7400: 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20  _OMIT_WSD */.   
7410: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
7420: 7d 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53  }..#if SQLITE_OS
7430: 5f 57 49 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  _WIN.  /*.  **  
7440: 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f   PRAGMA data_sto
7450: 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a  re_directory.  *
7460: 2a 20 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f  *   PRAGMA data_
7470: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
7480: 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f  = ""|"directory_
7490: 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  name".  **.  ** 
74a0: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
74b0: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
74c0: 20 74 68 65 20 64 61 74 61 5f 73 74 6f 72 65 5f   the data_store_
74d0: 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20  directory flag. 
74e0: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
74f0: 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20  he value sets a 
7500: 73 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f  specific directo
7510: 72 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ry to be used fo
7520: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
7530: 20 74 68 61 74 0a 20 20 2a 2a 20 77 65 72 65 20   that.  ** were 
7540: 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61  specified with a
7550: 20 72 65 6c 61 74 69 76 65 20 70 61 74 68 6e 61   relative pathna
7560: 6d 65 2e 20 20 53 65 74 74 69 6e 67 20 74 6f 20  me.  Setting to 
7570: 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65  a null string re
7580: 76 65 72 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68  verts.  ** to th
7590: 65 20 64 65 66 61 75 6c 74 20 64 61 74 61 62 61  e default databa
75a0: 73 65 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68  se directory, wh
75b0: 69 63 68 20 66 6f 72 20 64 61 74 61 62 61 73 65  ich for database
75c0: 20 66 69 6c 65 73 20 73 70 65 63 69 66 69 65 64   files specified
75d0: 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c   with.  ** a rel
75e0: 61 74 69 76 65 20 70 61 74 68 20 77 69 6c 6c 20  ative path will 
75f0: 70 72 6f 62 61 62 6c 79 20 62 65 20 62 61 73 65  probably be base
7600: 64 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74  d on the current
7610: 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74   directory for t
7620: 68 65 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e  he.  ** process.
7630: 20 20 44 61 74 61 62 61 73 65 20 66 69 6c 65 20    Database file 
7640: 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61  specified with a
7650: 6e 20 61 62 73 6f 6c 75 74 65 20 70 61 74 68 20  n absolute path 
7660: 61 72 65 20 6e 6f 74 20 69 6d 70 61 63 74 65 64  are not impacted
7670: 0a 20 20 2a 2a 20 62 79 20 74 68 69 73 20 73 65  .  ** by this se
7680: 74 74 69 6e 67 2c 20 72 65 67 61 72 64 6c 65 73  tting, regardles
7690: 73 20 6f 66 20 69 74 73 20 76 61 6c 75 65 2e 0a  s of its value..
76a0: 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65    **.  */.  case
76b0: 20 50 72 61 67 54 79 70 5f 44 41 54 41 5f 53 54   PragTyp_DATA_ST
76c0: 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b  ORE_DIRECTORY: {
76d0: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
76e0: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
76f0: 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 64  SingleText(v, "d
7700: 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
7710: 6f 72 79 22 2c 20 73 71 6c 69 74 65 33 5f 64 61  ory", sqlite3_da
7720: 74 61 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20  ta_directory);. 
7730: 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65     }else{.#ifnde
7740: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
7750: 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67  D.      if( zRig
7760: 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20  ht[0] ){.       
7770: 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20   int res;.      
7780: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73    rc = sqlite3Os
7790: 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c  Access(db->pVfs,
77a0: 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45 5f   zRight, SQLITE_
77b0: 41 43 43 45 53 53 5f 52 45 41 44 57 52 49 54 45  ACCESS_READWRITE
77c0: 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
77d0: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
77e0: 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a  OK || res==0 ){.
77f0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
7800: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
7810: 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62 6c  , "not a writabl
7820: 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a 20  e directory");. 
7830: 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72           goto pr
7840: 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20  agma_out;.      
7850: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
7860: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73    sqlite3_free(s
7870: 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65  qlite3_data_dire
7880: 63 74 6f 72 79 29 3b 0a 20 20 20 20 20 20 69 66  ctory);.      if
7890: 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20  ( zRight[0] ){. 
78a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64         sqlite3_d
78b0: 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  ata_directory = 
78c0: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
78d0: 22 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20  "%s", zRight);. 
78e0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
78f0: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61      sqlite3_data
7900: 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a  _directory = 0;.
7910: 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f        }.#endif /
7920: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  * SQLITE_OMIT_WS
7930: 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 62  D */.    }.    b
7940: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
7950: 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  ..#if SQLITE_ENA
7960: 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c  BLE_LOCKING_STYL
7970: 45 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  E.  /*.  **   PR
7980: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6c 6f  AGMA [schema.]lo
7990: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 0a 20 20  ck_proxy_file.  
79a0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
79b0: 65 6d 61 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f  ema.]lock_proxy_
79c0: 66 69 6c 65 20 3d 20 22 3a 61 75 74 6f 3a 22 7c  file = ":auto:"|
79d0: 22 6c 6f 63 6b 5f 66 69 6c 65 5f 70 61 74 68 22  "lock_file_path"
79e0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
79f0: 6e 20 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c  n or set the val
7a00: 75 65 20 6f 66 20 74 68 65 20 6c 6f 63 6b 5f 70  ue of the lock_p
7a10: 72 6f 78 79 5f 66 69 6c 65 20 66 6c 61 67 2e 20  roxy_file flag. 
7a20: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
7a30: 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20  he value sets a 
7a40: 73 70 65 63 69 66 69 63 20 66 69 6c 65 20 74 6f  specific file to
7a50: 20 62 65 20 75 73 65 64 20 66 6f 72 20 64 61 74   be used for dat
7a60: 61 62 61 73 65 20 61 63 63 65 73 73 20 6c 6f 63  abase access loc
7a70: 6b 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20  ks..  **.  */.  
7a80: 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43  case PragTyp_LOC
7a90: 4b 5f 50 52 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a  K_PROXY_FILE: {.
7aa0: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
7ab0: 29 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a  ){.      Pager *
7ac0: 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
7ad0: 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e  BtreePager(pDb->
7ae0: 70 42 74 29 3b 0a 20 20 20 20 20 20 63 68 61 72  pBt);.      char
7af0: 20 2a 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74   *proxy_file_pat
7b00: 68 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20  h = NULL;.      
7b10: 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46  sqlite3_file *pF
7b20: 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67  ile = sqlite3Pag
7b30: 65 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a  erFile(pPager);.
7b40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 73 46        sqlite3OsF
7b50: 69 6c 65 43 6f 6e 74 72 6f 6c 48 69 6e 74 28 70  ileControlHint(p
7b60: 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 47 45 54  File, SQLITE_GET
7b70: 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20  _LOCKPROXYFILE, 
7b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7b90: 20 20 20 20 20 20 20 20 20 20 20 20 26 70 72 6f              &pro
7ba0: 78 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20  xy_file_path);. 
7bb0: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
7bc0: 65 54 65 78 74 28 76 2c 20 22 6c 6f 63 6b 5f 70  eText(v, "lock_p
7bd0: 72 6f 78 79 5f 66 69 6c 65 22 2c 20 70 72 6f 78  roxy_file", prox
7be0: 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20  y_file_path);.  
7bf0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 50    }else{.      P
7c00: 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73  ager *pPager = s
7c10: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
7c20: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
7c30: 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a    sqlite3_file *
7c40: 70 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50  pFile = sqlite3P
7c50: 61 67 65 72 46 69 6c 65 28 70 50 61 67 65 72 29  agerFile(pPager)
7c60: 3b 0a 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b  ;.      int res;
7c70: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
7c80: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
7c90: 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c  res=sqlite3OsFil
7ca0: 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20  eControl(pFile, 
7cb0: 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50  SQLITE_SET_LOCKP
7cc0: 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20  ROXYFILE, .     
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cf0: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d  zRight);.      }
7d00: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
7d10: 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c  res=sqlite3OsFil
7d20: 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20  eControl(pFile, 
7d30: 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50  SQLITE_SET_LOCKP
7d40: 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20  ROXYFILE, .     
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d70: 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 7d 0a 20  NULL);.      }. 
7d80: 20 20 20 20 20 69 66 28 20 72 65 73 21 3d 53 51       if( res!=SQ
7d90: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
7da0: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
7db0: 73 67 28 70 50 61 72 73 65 2c 20 22 66 61 69 6c  sg(pParse, "fail
7dc0: 65 64 20 74 6f 20 73 65 74 20 6c 6f 63 6b 20 70  ed to set lock p
7dd0: 72 6f 78 79 20 66 69 6c 65 22 29 3b 0a 20 20 20  roxy file");.   
7de0: 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61       goto pragma
7df0: 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
7e00: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
7e10: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
7e20: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
7e30: 4e 47 5f 53 54 59 4c 45 20 2a 2f 20 20 20 20 20  NG_STYLE */     
7e40: 20 0a 20 20 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a   .    .  /*.  **
7e50: 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d     PRAGMA [schem
7e60: 61 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20  a.]synchronous. 
7e70: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63   **   PRAGMA [sc
7e80: 68 65 6d 61 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75  hema.]synchronou
7e90: 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c  s=OFF|ON|NORMAL|
7ea0: 46 55 4c 4c 7c 45 58 54 52 41 0a 20 20 2a 2a 0a  FULL|EXTRA.  **.
7eb0: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
7ec0: 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  et the local val
7ed0: 75 65 20 6f 66 20 74 68 65 20 73 79 6e 63 68 72  ue of the synchr
7ee0: 6f 6e 6f 75 73 20 66 6c 61 67 2e 20 20 43 68 61  onous flag.  Cha
7ef0: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c  nging.  ** the l
7f00: 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20  ocal value does 
7f10: 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73  not make changes
7f20: 20 74 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c   to the disk fil
7f30: 65 20 61 6e 64 20 74 68 65 0a 20 20 2a 2a 20 64  e and the.  ** d
7f40: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c  efault value wil
7f50: 6c 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 68  l be restored th
7f60: 65 20 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20  e next time the 
7f70: 64 61 74 61 62 61 73 65 20 69 73 0a 20 20 2a 2a  database is.  **
7f80: 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20   opened..  */.  
7f90: 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 59 4e  case PragTyp_SYN
7fa0: 43 48 52 4f 4e 4f 55 53 3a 20 7b 0a 20 20 20 20  CHRONOUS: {.    
7fb0: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
7fc0: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
7fd0: 65 49 6e 74 28 76 2c 20 22 73 79 6e 63 68 72 6f  eInt(v, "synchro
7fe0: 6e 6f 75 73 22 2c 20 70 44 62 2d 3e 73 61 66 65  nous", pDb->safe
7ff0: 74 79 5f 6c 65 76 65 6c 2d 31 29 3b 0a 20 20 20  ty_level-1);.   
8000: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66   }else{.      if
8010: 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
8020: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  t ){.        sql
8030: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
8040: 72 73 65 2c 20 0a 20 20 20 20 20 20 20 20 20 20  rse, .          
8050: 20 20 22 53 61 66 65 74 79 20 6c 65 76 65 6c 20    "Safety level 
8060: 6d 61 79 20 6e 6f 74 20 62 65 20 63 68 61 6e 67  may not be chang
8070: 65 64 20 69 6e 73 69 64 65 20 61 20 74 72 61 6e  ed inside a tran
8080: 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20  saction");.     
8090: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
80a0: 69 6e 74 20 69 4c 65 76 65 6c 20 3d 20 28 67 65  int iLevel = (ge
80b0: 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 52 69  tSafetyLevel(zRi
80c0: 67 68 74 2c 30 2c 31 29 2b 31 29 20 26 20 50 41  ght,0,1)+1) & PA
80d0: 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f  GER_SYNCHRONOUS_
80e0: 4d 41 53 4b 3b 0a 20 20 20 20 20 20 20 20 69 66  MASK;.        if
80f0: 28 20 69 4c 65 76 65 6c 3d 3d 30 20 29 20 69 4c  ( iLevel==0 ) iL
8100: 65 76 65 6c 20 3d 20 31 3b 0a 20 20 20 20 20 20  evel = 1;.      
8110: 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65    pDb->safety_le
8120: 76 65 6c 20 3d 20 69 4c 65 76 65 6c 3b 0a 20 20  vel = iLevel;.  
8130: 20 20 20 20 20 20 70 44 62 2d 3e 62 53 79 6e 63        pDb->bSync
8140: 53 65 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  Set = 1;.       
8150: 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67   setAllPagerFlag
8160: 73 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20  s(db);.      }. 
8170: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
8180: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
8190: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
81a0: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e  PRAGMAS */..#ifn
81b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
81c0: 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a 20 20 63  FLAG_PRAGMAS.  c
81d0: 61 73 65 20 50 72 61 67 54 79 70 5f 46 4c 41 47  ase PragTyp_FLAG
81e0: 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  : {.    if( zRig
81f0: 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  ht==0 ){.      r
8200: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76  eturnSingleInt(v
8210: 2c 20 70 50 72 61 67 6d 61 2d 3e 7a 4e 61 6d 65  , pPragma->zName
8220: 2c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 70  , (db->flags & p
8230: 50 72 61 67 6d 61 2d 3e 69 41 72 67 29 21 3d 30  Pragma->iArg)!=0
8240: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
8250: 20 20 20 20 20 69 6e 74 20 6d 61 73 6b 20 3d 20       int mask = 
8260: 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 3b 20 20  pPragma->iArg;  
8270: 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 62 69 74    /* Mask of bit
8280: 73 20 74 6f 20 73 65 74 20 6f 72 20 63 6c 65 61  s to set or clea
8290: 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  r. */.      if( 
82a0: 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
82b0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0 ){.        /* 
82c0: 46 6f 72 65 69 67 6e 20 6b 65 79 20 73 75 70 70  Foreign key supp
82d0: 6f 72 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 65  ort may not be e
82e0: 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c  nabled or disabl
82f0: 65 64 20 77 68 69 6c 65 20 6e 6f 74 0a 20 20 20  ed while not.   
8300: 20 20 20 20 20 2a 2a 20 69 6e 20 61 75 74 6f 2d       ** in auto-
8310: 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20 20 2a 2f  commit mode.  */
8320: 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20 26 3d  .        mask &=
8330: 20 7e 28 53 51 4c 49 54 45 5f 46 6f 72 65 69 67   ~(SQLITE_Foreig
8340: 6e 4b 65 79 73 29 3b 0a 20 20 20 20 20 20 7d 0a  nKeys);.      }.
8350: 23 69 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f  #if SQLITE_USER_
8360: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20  AUTHENTICATION. 
8370: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74       if( db->aut
8380: 68 2e 61 75 74 68 4c 65 76 65 6c 3d 3d 55 41 55  h.authLevel==UAU
8390: 54 48 5f 55 73 65 72 20 29 7b 0a 20 20 20 20 20  TH_User ){.     
83a0: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c     /* Do not all
83b0: 6f 77 20 6e 6f 6e 2d 61 64 6d 69 6e 20 75 73 65  ow non-admin use
83c0: 72 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65  rs to modify the
83d0: 20 73 63 68 65 6d 61 20 61 72 62 69 74 72 61 72   schema arbitrar
83e0: 69 6c 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d  ily */.        m
83f0: 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45 5f  ask &= ~(SQLITE_
8400: 57 72 69 74 65 53 63 68 65 6d 61 29 3b 0a 20 20  WriteSchema);.  
8410: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
8420: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
8430: 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74  etBoolean(zRight
8440: 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  , 0) ){.        
8450: 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 6d 61 73  db->flags |= mas
8460: 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  k;.      }else{.
8470: 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67          db->flag
8480: 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a 20 20 20 20  s &= ~mask;.    
8490: 20 20 20 20 69 66 28 20 6d 61 73 6b 3d 3d 53 51      if( mask==SQ
84a0: 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 20  LITE_DeferFKs ) 
84b0: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
84c0: 43 6f 6e 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  Cons = 0;.      
84d0: 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6e 79  }..      /* Many
84e0: 20 6f 66 20 74 68 65 20 66 6c 61 67 2d 70 72 61   of the flag-pra
84f0: 67 6d 61 73 20 6d 6f 64 69 66 79 20 74 68 65 20  gmas modify the 
8500: 63 6f 64 65 20 67 65 6e 65 72 61 74 65 64 20 62  code generated b
8510: 79 20 74 68 65 20 53 51 4c 20 0a 20 20 20 20 20  y the SQL .     
8520: 20 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 28 65 67   ** compiler (eg
8530: 2e 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 29  . count_changes)
8540: 2e 20 53 6f 20 61 64 64 20 61 6e 20 6f 70 63 6f  . So add an opco
8550: 64 65 20 74 6f 20 65 78 70 69 72 65 20 61 6c 6c  de to expire all
8560: 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c  .      ** compil
8570: 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ed SQL statement
8580: 73 20 61 66 74 65 72 20 6d 6f 64 69 66 79 69 6e  s after modifyin
8590: 67 20 61 20 70 72 61 67 6d 61 20 76 61 6c 75 65  g a pragma value
85a0: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
85b0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
85c0: 70 30 28 76 2c 20 4f 50 5f 45 78 70 69 72 65 29  p0(v, OP_Expire)
85d0: 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61  ;.      setAllPa
85e0: 67 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20  gerFlags(db);.  
85f0: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
8600: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
8610: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
8620: 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65  AGMAS */..#ifnde
8630: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  f SQLITE_OMIT_SC
8640: 48 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20 2f  HEMA_PRAGMAS.  /
8650: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
8660: 74 61 62 6c 65 5f 69 6e 66 6f 28 3c 74 61 62 6c  table_info(<tabl
8670: 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  e>).  **.  ** Re
8680: 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  turn a single ro
8690: 77 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  w for each colum
86a0: 6e 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 74  n of the named t
86b0: 61 62 6c 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e  able. The column
86c0: 73 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 72 65  s of.  ** the re
86d0: 74 75 72 6e 65 64 20 64 61 74 61 20 73 65 74 20  turned data set 
86e0: 61 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63  are:.  **.  ** c
86f0: 69 64 3a 20 20 20 20 20 20 20 20 43 6f 6c 75 6d  id:        Colum
8700: 6e 20 69 64 20 28 6e 75 6d 62 65 72 65 64 20 66  n id (numbered f
8710: 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
8720: 74 2c 20 73 74 61 72 74 69 6e 67 20 61 74 20 30  t, starting at 0
8730: 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20 20 20 20  ).  ** name:    
8740: 20 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20     Column name. 
8750: 20 2a 2a 20 74 79 70 65 3a 20 20 20 20 20 20 20   ** type:       
8760: 43 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69  Column declarati
8770: 6f 6e 20 74 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f  on type..  ** no
8780: 74 6e 75 6c 6c 3a 20 20 20 20 54 72 75 65 20 69  tnull:    True i
8790: 66 20 27 4e 4f 54 20 4e 55 4c 4c 27 20 69 73 20  f 'NOT NULL' is 
87a0: 70 61 72 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64  part of column d
87b0: 65 63 6c 61 72 61 74 69 6f 6e 0a 20 20 2a 2a 20  eclaration.  ** 
87c0: 64 66 6c 74 5f 76 61 6c 75 65 3a 20 54 68 65 20  dflt_value: The 
87d0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f  default value fo
87e0: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 69 66  r the column, if
87f0: 20 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73   any..  */.  cas
8800: 65 20 50 72 61 67 54 79 70 5f 54 41 42 4c 45 5f  e PragTyp_TABLE_
8810: 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74  INFO: if( zRight
8820: 20 29 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   ){.    Table *p
8830: 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  Tab;.    pTab = 
8840: 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
8850: 6c 65 28 70 50 61 72 73 65 2c 20 4c 4f 43 41 54  le(pParse, LOCAT
8860: 45 5f 4e 4f 45 52 52 2c 20 7a 52 69 67 68 74 2c  E_NOERR, zRight,
8870: 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70   zDb);.    if( p
8880: 54 61 62 20 29 7b 0a 20 20 20 20 20 20 73 74 61  Tab ){.      sta
8890: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
88a0: 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20  azCol[] = {.    
88b0: 20 20 20 20 20 22 63 69 64 22 2c 20 22 6e 61 6d       "cid", "nam
88c0: 65 22 2c 20 22 74 79 70 65 22 2c 20 22 6e 6f 74  e", "type", "not
88d0: 6e 75 6c 6c 22 2c 20 22 64 66 6c 74 5f 76 61 6c  null", "dflt_val
88e0: 75 65 22 2c 20 22 70 6b 22 0a 20 20 20 20 20 20  ue", "pk".      
88f0: 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c 20  };.      int i, 
8900: 6b 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 48 69  k;.      int nHi
8910: 64 64 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20  dden = 0;.      
8920: 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20 20  Column *pCol;.  
8930: 20 20 20 20 49 6e 64 65 78 20 2a 70 50 6b 20 3d      Index *pPk =
8940: 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b   sqlite3PrimaryK
8950: 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20  eyIndex(pTab);. 
8960: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
8970: 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20 73 71 6c  m = 6;.      sql
8980: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
8990: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
89a0: 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 43  );.      setAllC
89b0: 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 36 2c  olumnNames(v, 6,
89c0: 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28   azCol); assert(
89d0: 20 36 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a   6==ArraySize(az
89e0: 43 6f 6c 29 20 29 3b 0a 20 20 20 20 20 20 73 71  Col) );.      sq
89f0: 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
8a00: 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73 65 2c 20  mnNames(pParse, 
8a10: 70 54 61 62 29 3b 0a 20 20 20 20 20 20 66 6f 72  pTab);.      for
8a20: 28 69 3d 30 2c 20 70 43 6f 6c 3d 70 54 61 62 2d  (i=0, pCol=pTab-
8a30: 3e 61 43 6f 6c 3b 20 69 3c 70 54 61 62 2d 3e 6e  >aCol; i<pTab->n
8a40: 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c 2b 2b  Col; i++, pCol++
8a50: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 49  ){.        if( I
8a60: 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 70 43  sHiddenColumn(pC
8a70: 6f 6c 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ol) ){.         
8a80: 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a 20 20 20 20   nHidden++;.    
8a90: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a        continue;.
8aa0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
8ab0: 20 20 69 66 28 20 28 70 43 6f 6c 2d 3e 63 6f 6c    if( (pCol->col
8ac0: 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
8ad0: 50 52 49 4d 4b 45 59 29 3d 3d 30 20 29 7b 0a 20  PRIMKEY)==0 ){. 
8ae0: 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a           k = 0;.
8af0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
8b00: 28 20 70 50 6b 3d 3d 30 20 29 7b 0a 20 20 20 20  ( pPk==0 ){.    
8b10: 20 20 20 20 20 20 6b 20 3d 20 31 3b 0a 20 20 20        k = 1;.   
8b20: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
8b30: 20 20 20 20 20 20 66 6f 72 28 6b 3d 31 3b 20 6b        for(k=1; k
8b40: 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c 20 26 26 20  <=pTab->nCol && 
8b50: 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 2d  pPk->aiColumn[k-
8b60: 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a 20 20  1]!=i; k++){}.  
8b70: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
8b80: 61 73 73 65 72 74 28 20 70 43 6f 6c 2d 3e 70 44  assert( pCol->pD
8b90: 66 6c 74 3d 3d 30 20 7c 7c 20 70 43 6f 6c 2d 3e  flt==0 || pCol->
8ba0: 70 44 66 6c 74 2d 3e 6f 70 3d 3d 54 4b 5f 53 50  pDflt->op==TK_SP
8bb0: 41 4e 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71  AN );.        sq
8bc0: 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f  lite3VdbeMultiLo
8bd0: 61 64 28 76 2c 20 31 2c 20 22 69 73 73 69 73 69  ad(v, 1, "issisi
8be0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
8bf0: 20 20 69 2d 6e 48 69 64 64 65 6e 2c 0a 20 20 20    i-nHidden,.   
8c00: 20 20 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c              pCol
8c10: 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20  ->zName,.       
8c20: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 43          sqlite3C
8c30: 6f 6c 75 6d 6e 54 79 70 65 28 70 43 6f 6c 2c 22  olumnType(pCol,"
8c40: 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  "),.            
8c50: 20 20 20 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c     pCol->notNull
8c60: 20 3f 20 31 20 3a 20 30 2c 0a 20 20 20 20 20 20   ? 1 : 0,.      
8c70: 20 20 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e 70           pCol->p
8c80: 44 66 6c 74 20 3f 20 70 43 6f 6c 2d 3e 70 44 66  Dflt ? pCol->pDf
8c90: 6c 74 2d 3e 75 2e 7a 54 6f 6b 65 6e 20 3a 20 30  lt->u.zToken : 0
8ca0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
8cb0: 20 6b 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   k);.        sql
8cc0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
8cd0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
8ce0: 31 2c 20 36 29 3b 0a 20 20 20 20 20 20 7d 0a 20  1, 6);.      }. 
8cf0: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
8d00: 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ;..  case PragTy
8d10: 70 5f 53 54 41 54 53 3a 20 7b 0a 20 20 20 20 73  p_STATS: {.    s
8d20: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
8d30: 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 74   *azCol[] = { "t
8d40: 61 62 6c 65 22 2c 20 22 69 6e 64 65 78 22 2c 20  able", "index", 
8d50: 22 77 69 64 74 68 22 2c 20 22 68 65 69 67 68 74  "width", "height
8d60: 22 20 7d 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a  " };.    Index *
8d70: 70 49 64 78 3b 0a 20 20 20 20 48 61 73 68 45 6c  pIdx;.    HashEl
8d80: 65 6d 20 2a 69 3b 0a 20 20 20 20 76 20 3d 20 73  em *i;.    v = s
8d90: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
8da0: 61 72 73 65 29 3b 0a 20 20 20 20 70 50 61 72 73  arse);.    pPars
8db0: 65 2d 3e 6e 4d 65 6d 20 3d 20 34 3b 0a 20 20 20  e->nMem = 4;.   
8dc0: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
8dd0: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
8de0: 20 69 44 62 29 3b 0a 20 20 20 20 73 65 74 41 6c   iDb);.    setAl
8df0: 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20  lColumnNames(v, 
8e00: 34 2c 20 61 7a 43 6f 6c 29 3b 20 20 61 73 73 65  4, azCol);  asse
8e10: 72 74 28 20 34 3d 3d 41 72 72 61 79 53 69 7a 65  rt( 4==ArraySize
8e20: 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 66  (azCol) );.    f
8e30: 6f 72 28 69 3d 73 71 6c 69 74 65 48 61 73 68 46  or(i=sqliteHashF
8e40: 69 72 73 74 28 26 70 44 62 2d 3e 70 53 63 68 65  irst(&pDb->pSche
8e50: 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 20 69 3b  ma->tblHash); i;
8e60: 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   i=sqliteHashNex
8e70: 74 28 69 29 29 7b 0a 20 20 20 20 20 20 54 61 62  t(i)){.      Tab
8e80: 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74  le *pTab = sqlit
8e90: 65 48 61 73 68 44 61 74 61 28 69 29 3b 0a 20 20  eHashData(i);.  
8ea0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
8eb0: 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22  ultiLoad(v, 1, "
8ec0: 73 73 69 69 22 2c 0a 20 20 20 20 20 20 20 20 20  ssii",.         
8ed0: 20 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20    pTab->zName,. 
8ee0: 20 20 20 20 20 20 20 20 20 20 30 2c 0a 20 20 20            0,.   
8ef0: 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e 73 7a          pTab->sz
8f00: 54 61 62 52 6f 77 2c 0a 20 20 20 20 20 20 20 20  TabRow,.        
8f10: 20 20 20 70 54 61 62 2d 3e 6e 52 6f 77 4c 6f 67     pTab->nRowLog
8f20: 45 73 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  Est);.      sqli
8f30: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
8f40: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
8f50: 2c 20 34 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  , 4);.      for(
8f60: 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65  pIdx=pTab->pInde
8f70: 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  x; pIdx; pIdx=pI
8f80: 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20  dx->pNext){.    
8f90: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
8fa0: 75 6c 74 69 4c 6f 61 64 28 76 2c 20 32 2c 20 22  ultiLoad(v, 2, "
8fb0: 73 69 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20  sii",.          
8fc0: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 0a 20 20   pIdx->zName,.  
8fd0: 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 73           pIdx->s
8fe0: 7a 49 64 78 52 6f 77 2c 0a 20 20 20 20 20 20 20  zIdxRow,.       
8ff0: 20 20 20 20 70 49 64 78 2d 3e 61 69 52 6f 77 4c      pIdx->aiRowL
9000: 6f 67 45 73 74 5b 30 5d 29 3b 0a 20 20 20 20 20  ogEst[0]);.     
9010: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9020: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
9030: 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20  tRow, 1, 4);.   
9040: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
9050: 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20   break;..  case 
9060: 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e  PragTyp_INDEX_IN
9070: 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29  FO: if( zRight )
9080: 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64  {.    Index *pId
9090: 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  x;.    Table *pT
90a0: 61 62 3b 0a 20 20 20 20 70 49 64 78 20 3d 20 73  ab;.    pIdx = s
90b0: 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28  qlite3FindIndex(
90c0: 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  db, zRight, zDb)
90d0: 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78 20 29  ;.    if( pIdx )
90e0: 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  {.      static c
90f0: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c  onst char *azCol
9100: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20  [] = {.         
9110: 22 73 65 71 6e 6f 22 2c 20 22 63 69 64 22 2c 20  "seqno", "cid", 
9120: 22 6e 61 6d 65 22 2c 20 22 64 65 73 63 22 2c 20  "name", "desc", 
9130: 22 63 6f 6c 6c 22 2c 20 22 6b 65 79 22 0a 20 20  "coll", "key".  
9140: 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74      };.      int
9150: 20 69 3b 0a 20 20 20 20 20 20 69 6e 74 20 6d 78   i;.      int mx
9160: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50 72 61  ;.      if( pPra
9170: 67 6d 61 2d 3e 69 41 72 67 20 29 7b 0a 20 20 20  gma->iArg ){.   
9180: 20 20 20 20 20 2f 2a 20 50 52 41 47 4d 41 20 69       /* PRAGMA i
9190: 6e 64 65 78 5f 78 69 6e 66 6f 20 28 6e 65 77 65  ndex_xinfo (newe
91a0: 72 20 76 65 72 73 69 6f 6e 20 77 69 74 68 20 6d  r version with m
91b0: 6f 72 65 20 72 6f 77 73 20 61 6e 64 20 63 6f 6c  ore rows and col
91c0: 75 6d 6e 73 29 20 2a 2f 0a 20 20 20 20 20 20 20  umns) */.       
91d0: 20 6d 78 20 3d 20 70 49 64 78 2d 3e 6e 43 6f 6c   mx = pIdx->nCol
91e0: 75 6d 6e 3b 0a 20 20 20 20 20 20 20 20 70 50 61  umn;.        pPa
91f0: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20  rse->nMem = 6;. 
9200: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
9210: 20 20 20 20 2f 2a 20 50 52 41 47 4d 41 20 69 6e      /* PRAGMA in
9220: 64 65 78 5f 69 6e 66 6f 20 28 6c 65 67 61 63 79  dex_info (legacy
9230: 20 76 65 72 73 69 6f 6e 29 20 2a 2f 0a 20 20 20   version) */.   
9240: 20 20 20 20 20 6d 78 20 3d 20 70 49 64 78 2d 3e       mx = pIdx->
9250: 6e 4b 65 79 43 6f 6c 3b 0a 20 20 20 20 20 20 20  nKeyCol;.       
9260: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
9270: 33 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  3;.      }.     
9280: 20 70 54 61 62 20 3d 20 70 49 64 78 2d 3e 70 54   pTab = pIdx->pT
9290: 61 62 6c 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  able;.      sqli
92a0: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
92b0: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29  ema(pParse, iDb)
92c0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
92d0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3c 3d 41 72  pParse->nMem<=Ar
92e0: 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29  raySize(azCol) )
92f0: 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 43 6f  ;.      setAllCo
9300: 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 70 50 61  lumnNames(v, pPa
9310: 72 73 65 2d 3e 6e 4d 65 6d 2c 20 61 7a 43 6f 6c  rse->nMem, azCol
9320: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
9330: 3b 20 69 3c 6d 78 3b 20 69 2b 2b 29 7b 0a 20 20  ; i<mx; i++){.  
9340: 20 20 20 20 20 20 69 31 36 20 63 6e 75 6d 20 3d        i16 cnum =
9350: 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b   pIdx->aiColumn[
9360: 69 5d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  i];.        sqli
9370: 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64  te3VdbeMultiLoad
9380: 28 76 2c 20 31 2c 20 22 69 69 73 22 2c 20 69 2c  (v, 1, "iis", i,
9390: 20 63 6e 75 6d 2c 0a 20 20 20 20 20 20 20 20 20   cnum,.         
93a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93b0: 20 20 20 20 63 6e 75 6d 3c 30 20 3f 20 30 20 3a      cnum<0 ? 0 :
93c0: 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d   pTab->aCol[cnum
93d0: 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ].zName);.      
93e0: 20 20 69 66 28 20 70 50 72 61 67 6d 61 2d 3e 69    if( pPragma->i
93f0: 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20 20 20  Arg ){.         
9400: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74   sqlite3VdbeMult
9410: 69 4c 6f 61 64 28 76 2c 20 34 2c 20 22 69 73 69  iLoad(v, 4, "isi
9420: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ",.            p
9430: 49 64 78 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b  Idx->aSortOrder[
9440: 69 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  i],.            
9450: 70 49 64 78 2d 3e 61 7a 43 6f 6c 6c 5b 69 5d 2c  pIdx->azColl[i],
9460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 3c 70  .            i<p
9470: 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 0a 20  Idx->nKeyCol);. 
9480: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
9490: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
94a0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
94b0: 6f 77 2c 20 31 2c 20 70 50 61 72 73 65 2d 3e 6e  ow, 1, pParse->n
94c0: 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Mem);.      }.  
94d0: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
94e0: 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ..  case PragTyp
94f0: 5f 49 4e 44 45 58 5f 4c 49 53 54 3a 20 69 66 28  _INDEX_LIST: if(
9500: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 49   zRight ){.    I
9510: 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20  ndex *pIdx;.    
9520: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20  Table *pTab;.   
9530: 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 54 61 62   int i;.    pTab
9540: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61   = sqlite3FindTa
9550: 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20  ble(db, zRight, 
9560: 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54  zDb);.    if( pT
9570: 61 62 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74  ab ){.      stat
9580: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  ic const char *a
9590: 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  zCol[] = {.     
95a0: 20 20 20 22 73 65 71 22 2c 20 22 6e 61 6d 65 22     "seq", "name"
95b0: 2c 20 22 75 6e 69 71 75 65 22 2c 20 22 6f 72 69  , "unique", "ori
95c0: 67 69 6e 22 2c 20 22 70 61 72 74 69 61 6c 22 0a  gin", "partial".
95d0: 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 76        };.      v
95e0: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62   = sqlite3GetVdb
95f0: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  e(pParse);.     
9600: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
9610: 35 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  5;.      sqlite3
9620: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
9630: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
9640: 20 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d       setAllColum
9650: 6e 4e 61 6d 65 73 28 76 2c 20 35 2c 20 61 7a 43  nNames(v, 5, azC
9660: 6f 6c 29 3b 20 20 61 73 73 65 72 74 28 20 35 3d  ol);  assert( 5=
9670: 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c  =ArraySize(azCol
9680: 29 20 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70  ) );.      for(p
9690: 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
96a0: 2c 20 69 3d 30 3b 20 70 49 64 78 3b 20 70 49 64  , i=0; pIdx; pId
96b0: 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 69  x=pIdx->pNext, i
96c0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e  ++){.        con
96d0: 73 74 20 63 68 61 72 20 2a 61 7a 4f 72 69 67 69  st char *azOrigi
96e0: 6e 5b 5d 20 3d 20 7b 20 22 63 22 2c 20 22 75 22  n[] = { "c", "u"
96f0: 2c 20 22 70 6b 22 20 7d 3b 0a 20 20 20 20 20 20  , "pk" };.      
9700: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c    sqlite3VdbeMul
9710: 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69 73  tiLoad(v, 1, "is
9720: 69 73 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20  isi",.          
9730: 20 69 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70   i,.           p
9740: 49 64 78 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20  Idx->zName,.    
9750: 20 20 20 20 20 20 20 49 73 55 6e 69 71 75 65 49         IsUniqueI
9760: 6e 64 65 78 28 70 49 64 78 29 2c 0a 20 20 20 20  ndex(pIdx),.    
9770: 20 20 20 20 20 20 20 61 7a 4f 72 69 67 69 6e 5b         azOrigin[
9780: 70 49 64 78 2d 3e 69 64 78 54 79 70 65 5d 2c 0a  pIdx->idxType],.
9790: 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d             pIdx-
97a0: 3e 70 50 61 72 74 49 64 78 57 68 65 72 65 21 3d  >pPartIdxWhere!=
97b0: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
97c0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
97d0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
97e0: 2c 20 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 5);.      }.  
97f0: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
9800: 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ..  case PragTyp
9810: 5f 44 41 54 41 42 41 53 45 5f 4c 49 53 54 3a 20  _DATABASE_LIST: 
9820: 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
9830: 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d  st char *azCol[]
9840: 20 3d 20 7b 20 22 73 65 71 22 2c 20 22 6e 61 6d   = { "seq", "nam
9850: 65 22 2c 20 22 66 69 6c 65 22 20 7d 3b 0a 20 20  e", "file" };.  
9860: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 50 61    int i;.    pPa
9870: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20  rse->nMem = 3;. 
9880: 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e     setAllColumnN
9890: 61 6d 65 73 28 76 2c 20 33 2c 20 61 7a 43 6f 6c  ames(v, 3, azCol
98a0: 29 3b 20 61 73 73 65 72 74 28 20 33 3d 3d 41 72  ); assert( 3==Ar
98b0: 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29  raySize(azCol) )
98c0: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
98d0: 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
98e0: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44        if( db->aD
98f0: 62 5b 69 5d 2e 70 42 74 3d 3d 30 20 29 20 63 6f  b[i].pBt==0 ) co
9900: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 61 73  ntinue;.      as
9910: 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 5d  sert( db->aDb[i]
9920: 2e 7a 44 62 53 4e 61 6d 65 21 3d 30 20 29 3b 0a  .zDbSName!=0 );.
9930: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9940: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c  eMultiLoad(v, 1,
9950: 20 22 69 73 73 22 2c 0a 20 20 20 20 20 20 20 20   "iss",.        
9960: 20 69 2c 0a 20 20 20 20 20 20 20 20 20 64 62 2d   i,.         db-
9970: 3e 61 44 62 5b 69 5d 2e 7a 44 62 53 4e 61 6d 65  >aDb[i].zDbSName
9980: 2c 0a 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  ,.         sqlit
9990: 65 33 42 74 72 65 65 47 65 74 46 69 6c 65 6e 61  e3BtreeGetFilena
99a0: 6d 65 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42  me(db->aDb[i].pB
99b0: 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  t));.      sqlit
99c0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
99d0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
99e0: 20 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   3);.    }.  }. 
99f0: 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20   break;..  case 
9a00: 50 72 61 67 54 79 70 5f 43 4f 4c 4c 41 54 49 4f  PragTyp_COLLATIO
9a10: 4e 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20 73 74  N_LIST: {.    st
9a20: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
9a30: 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 73 65  *azCol[] = { "se
9a40: 71 22 2c 20 22 6e 61 6d 65 22 20 7d 3b 0a 20 20  q", "name" };.  
9a50: 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20    int i = 0;.   
9a60: 20 48 61 73 68 45 6c 65 6d 20 2a 70 3b 0a 20 20   HashElem *p;.  
9a70: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
9a80: 20 32 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f   2;.    setAllCo
9a90: 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 32 2c 20  lumnNames(v, 2, 
9aa0: 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20  azCol); assert( 
9ab0: 32 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43  2==ArraySize(azC
9ac0: 6f 6c 29 20 29 3b 0a 20 20 20 20 66 6f 72 28 70  ol) );.    for(p
9ad0: 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
9ae0: 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b  (&db->aCollSeq);
9af0: 20 70 3b 20 70 3d 73 71 6c 69 74 65 48 61 73 68   p; p=sqliteHash
9b00: 4e 65 78 74 28 70 29 29 7b 0a 20 20 20 20 20 20  Next(p)){.      
9b10: 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d  CollSeq *pColl =
9b20: 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69   (CollSeq *)sqli
9b30: 74 65 48 61 73 68 44 61 74 61 28 70 29 3b 0a 20  teHashData(p);. 
9b40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9b50: 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20  MultiLoad(v, 1, 
9b60: 22 69 73 22 2c 20 69 2b 2b 2c 20 70 43 6f 6c 6c  "is", i++, pColl
9b70: 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ->zName);.      
9b80: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9b90: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
9ba0: 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a  w, 1, 2);.    }.
9bb0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
9bc0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
9bd0: 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41  IT_SCHEMA_PRAGMA
9be0: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
9bf0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
9c00: 4e 5f 4b 45 59 0a 20 20 63 61 73 65 20 50 72 61  N_KEY.  case Pra
9c10: 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  gTyp_FOREIGN_KEY
9c20: 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67 68  _LIST: if( zRigh
9c30: 74 20 29 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70  t ){.    FKey *p
9c40: 46 4b 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70  FK;.    Table *p
9c50: 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  Tab;.    pTab = 
9c60: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
9c70: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  (db, zRight, zDb
9c80: 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20  );.    if( pTab 
9c90: 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c  ){.      v = sql
9ca0: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
9cb0: 73 65 29 3b 0a 20 20 20 20 20 20 70 46 4b 20 3d  se);.      pFK =
9cc0: 20 70 54 61 62 2d 3e 70 46 4b 65 79 3b 0a 20 20   pTab->pFKey;.  
9cd0: 20 20 20 20 69 66 28 20 70 46 4b 20 29 7b 0a 20      if( pFK ){. 
9ce0: 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f         static co
9cf0: 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b  nst char *azCol[
9d00: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ] = {.          
9d10: 20 22 69 64 22 2c 20 22 73 65 71 22 2c 20 22 74   "id", "seq", "t
9d20: 61 62 6c 65 22 2c 20 22 66 72 6f 6d 22 2c 20 22  able", "from", "
9d30: 74 6f 22 2c 20 22 6f 6e 5f 75 70 64 61 74 65 22  to", "on_update"
9d40: 2c 20 22 6f 6e 5f 64 65 6c 65 74 65 22 2c 0a 20  , "on_delete",. 
9d50: 20 20 20 20 20 20 20 20 20 20 22 6d 61 74 63 68            "match
9d60: 22 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20  ".        };.   
9d70: 20 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 20       int i = 0; 
9d80: 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d  .        pParse-
9d90: 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20 20 20 20  >nMem = 8;.     
9da0: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
9db0: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
9dc0: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20  e, iDb);.       
9dd0: 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d   setAllColumnNam
9de0: 65 73 28 76 2c 20 38 2c 20 61 7a 43 6f 6c 29 3b  es(v, 8, azCol);
9df0: 20 61 73 73 65 72 74 28 20 38 3d 3d 41 72 72 61   assert( 8==Arra
9e00: 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a  ySize(azCol) );.
9e10: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 70 46          while(pF
9e20: 4b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e  K){.          in
9e30: 74 20 6a 3b 0a 20 20 20 20 20 20 20 20 20 20 66  t j;.          f
9e40: 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e  or(j=0; j<pFK->n
9e50: 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  Col; j++){.     
9e60: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9e70: 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31  beMultiLoad(v, 1
9e80: 2c 20 22 69 69 73 73 73 73 73 73 22 2c 0a 20 20  , "iissssss",.  
9e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ea0: 20 69 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   i,.            
9eb0: 20 20 20 20 20 20 20 6a 2c 0a 20 20 20 20 20 20         j,.      
9ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 46 4b               pFK
9ed0: 2d 3e 7a 54 6f 2c 0a 20 20 20 20 20 20 20 20 20  ->zTo,.         
9ee0: 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e            pTab->
9ef0: 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a  aCol[pFK->aCol[j
9f00: 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 0a  ].iFrom].zName,.
9f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f20: 20 20 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e     pFK->aCol[j].
9f30: 7a 43 6f 6c 2c 0a 20 20 20 20 20 20 20 20 20 20  zCol,.          
9f40: 20 20 20 20 20 20 20 20 20 61 63 74 69 6f 6e 4e           actionN
9f50: 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e  ame(pFK->aAction
9f60: 5b 31 5d 29 2c 20 20 2f 2a 20 4f 4e 20 55 50 44  [1]),  /* ON UPD
9f70: 41 54 45 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ATE */.         
9f80: 20 20 20 20 20 20 20 20 20 20 61 63 74 69 6f 6e            action
9f90: 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f  Name(pFK->aActio
9fa0: 6e 5b 30 5d 29 2c 20 20 2f 2a 20 4f 4e 20 44 45  n[0]),  /* ON DE
9fb0: 4c 45 54 45 20 2a 2f 0a 20 20 20 20 20 20 20 20  LETE */.        
9fc0: 20 20 20 20 20 20 20 20 20 20 20 22 4e 4f 4e 45             "NONE
9fd0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
9fe0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9ff0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
a000: 77 2c 20 31 2c 20 38 29 3b 0a 20 20 20 20 20 20  w, 1, 8);.      
a010: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
a020: 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20 20 20 70  ++i;.          p
a030: 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65 78 74 46  FK = pFK->pNextF
a040: 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  rom;.        }. 
a050: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
a060: 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
a070: 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
a080: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
a090: 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65  _KEY) */..#ifnde
a0a0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
a0b0: 52 45 49 47 4e 5f 4b 45 59 0a 23 69 66 6e 64 65  REIGN_KEY.#ifnde
a0c0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
a0d0: 49 47 47 45 52 0a 20 20 63 61 73 65 20 50 72 61  IGGER.  case Pra
a0e0: 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  gTyp_FOREIGN_KEY
a0f0: 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 46 4b  _CHECK: {.    FK
a100: 65 79 20 2a 70 46 4b 3b 20 20 20 20 20 20 20 20  ey *pFK;        
a110: 20 20 20 20 20 2f 2a 20 41 20 66 6f 72 65 69 67       /* A foreig
a120: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
a130: 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
a140: 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Tab;           /
a150: 2a 20 43 68 69 6c 64 20 74 61 62 6c 65 20 63 6f  * Child table co
a160: 6e 74 61 69 6e 20 22 52 45 46 45 52 45 4e 43 45  ntain "REFERENCE
a170: 53 22 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 20 20  S" keyword */.  
a180: 20 20 54 61 62 6c 65 20 2a 70 50 61 72 65 6e 74    Table *pParent
a190: 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65  ;        /* Pare
a1a0: 6e 74 20 74 61 62 6c 65 20 74 68 61 74 20 63 68  nt table that ch
a1b0: 69 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f  ild points to */
a1c0: 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78  .    Index *pIdx
a1d0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
a1e0: 6e 64 65 78 20 69 6e 20 74 68 65 20 70 61 72 65  ndex in the pare
a1f0: 6e 74 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  nt table */.    
a200: 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
a210: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
a220: 6f 75 6e 74 65 72 3a 20 20 46 6f 72 65 69 67 6e  ounter:  Foreign
a230: 20 6b 65 79 20 6e 75 6d 62 65 72 20 66 6f 72 20   key number for 
a240: 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20  pTab */.    int 
a250: 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  j;              
a260: 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
a270: 65 72 3a 20 20 46 69 65 6c 64 20 6f 66 20 74 68  er:  Field of th
a280: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 2a 2f  e foreign key */
a290: 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 6b  .    HashElem *k
a2a0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
a2b0: 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 4e 65  oop counter:  Ne
a2c0: 78 74 20 74 61 62 6c 65 20 69 6e 20 73 63 68 65  xt table in sche
a2d0: 6d 61 20 2a 2f 0a 20 20 20 20 69 6e 74 20 78 3b  ma */.    int x;
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2f0: 20 2f 2a 20 72 65 73 75 6c 74 20 76 61 72 69 61   /* result varia
a300: 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  ble */.    int r
a310: 65 67 52 65 73 75 6c 74 3b 20 20 20 20 20 20 20  egResult;       
a320: 20 20 2f 2a 20 33 20 72 65 67 69 73 74 65 72 73    /* 3 registers
a330: 20 74 6f 20 68 6f 6c 64 20 61 20 72 65 73 75 6c   to hold a resul
a340: 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20 69 6e 74  t row */.    int
a350: 20 72 65 67 4b 65 79 3b 20 20 20 20 20 20 20 20   regKey;        
a360: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
a370: 74 6f 20 68 6f 6c 64 20 6b 65 79 20 66 6f 72 20  to hold key for 
a380: 63 68 65 63 6b 69 6e 67 20 74 68 65 20 46 4b 20  checking the FK 
a390: 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 6f  */.    int regRo
a3a0: 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  w;            /*
a3b0: 20 52 65 67 69 73 74 65 72 73 20 74 6f 20 68 6f   Registers to ho
a3c0: 6c 64 20 61 20 72 6f 77 20 66 72 6f 6d 20 70 54  ld a row from pT
a3d0: 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  ab */.    int ad
a3e0: 64 72 54 6f 70 3b 20 20 20 20 20 20 20 20 20 20  drTop;          
a3f0: 20 2f 2a 20 54 6f 70 20 6f 66 20 61 20 6c 6f 6f   /* Top of a loo
a400: 70 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 65 69  p checking forei
a410: 67 6e 20 6b 65 79 73 20 2a 2f 0a 20 20 20 20 69  gn keys */.    i
a420: 6e 74 20 61 64 64 72 4f 6b 3b 20 20 20 20 20 20  nt addrOk;      
a430: 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65        /* Jump he
a440: 72 65 20 69 66 20 74 68 65 20 6b 65 79 20 69 73  re if the key is
a450: 20 4f 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a   OK */.    int *
a460: 61 69 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  aiCols;         
a470: 20 20 2f 2a 20 63 68 69 6c 64 20 74 6f 20 70 61    /* child to pa
a480: 72 65 6e 74 20 63 6f 6c 75 6d 6e 20 6d 61 70 70  rent column mapp
a490: 69 6e 67 20 2a 2f 0a 20 20 20 20 73 74 61 74 69  ing */.    stati
a4a0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a  c const char *az
a4b0: 43 6f 6c 5b 5d 20 3d 20 7b 20 22 74 61 62 6c 65  Col[] = { "table
a4c0: 22 2c 20 22 72 6f 77 69 64 22 2c 20 22 70 61 72  ", "rowid", "par
a4d0: 65 6e 74 22 2c 20 22 66 6b 69 64 22 20 7d 3b 0a  ent", "fkid" };.
a4e0: 0a 20 20 20 20 72 65 67 52 65 73 75 6c 74 20 3d  .    regResult =
a4f0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2b 31 3b   pParse->nMem+1;
a500: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
a510: 6d 20 2b 3d 20 34 3b 0a 20 20 20 20 72 65 67 4b  m += 4;.    regK
a520: 65 79 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e  ey = ++pParse->n
a530: 4d 65 6d 3b 0a 20 20 20 20 72 65 67 52 6f 77 20  Mem;.    regRow 
a540: 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  = ++pParse->nMem
a550: 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65  ;.    v = sqlite
a560: 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29  3GetVdbe(pParse)
a570: 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75  ;.    setAllColu
a580: 6d 6e 4e 61 6d 65 73 28 76 2c 20 34 2c 20 61 7a  mnNames(v, 4, az
a590: 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 34 3d  Col); assert( 4=
a5a0: 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c  =ArraySize(azCol
a5b0: 29 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) );.    sqlite3
a5c0: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
a5d0: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
a5e0: 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73     k = sqliteHas
a5f0: 68 46 69 72 73 74 28 26 64 62 2d 3e 61 44 62 5b  hFirst(&db->aDb[
a600: 69 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62  iDb].pSchema->tb
a610: 6c 48 61 73 68 29 3b 0a 20 20 20 20 77 68 69 6c  lHash);.    whil
a620: 65 28 20 6b 20 29 7b 0a 20 20 20 20 20 20 69 66  e( k ){.      if
a630: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
a640: 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74      pTab = sqlit
a650: 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 70 50  e3LocateTable(pP
a660: 61 72 73 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c  arse, 0, zRight,
a670: 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20 6b   zDb);.        k
a680: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 0;.      }els
a690: 65 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62 20  e{.        pTab 
a6a0: 3d 20 28 54 61 62 6c 65 2a 29 73 71 6c 69 74 65  = (Table*)sqlite
a6b0: 48 61 73 68 44 61 74 61 28 6b 29 3b 0a 20 20 20  HashData(k);.   
a6c0: 20 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48       k = sqliteH
a6d0: 61 73 68 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20  ashNext(k);.    
a6e0: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 54    }.      if( pT
a6f0: 61 62 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70  ab==0 || pTab->p
a700: 46 4b 65 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  FKey==0 ) contin
a710: 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ue;.      sqlite
a720: 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73  3TableLock(pPars
a730: 65 2c 20 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e  e, iDb, pTab->tn
a740: 75 6d 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61  um, 0, pTab->zNa
a750: 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  me);.      if( p
a760: 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77  Tab->nCol+regRow
a770: 3e 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20  >pParse->nMem ) 
a780: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pParse->nMem = p
a790: 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52  Tab->nCol + regR
a7a0: 6f 77 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ow;.      sqlite
a7b0: 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73  3OpenTable(pPars
a7c0: 65 2c 20 30 2c 20 69 44 62 2c 20 70 54 61 62 2c  e, 0, iDb, pTab,
a7d0: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20   OP_OpenRead);. 
a7e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a7f0: 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 72 65  LoadString(v, re
a800: 67 52 65 73 75 6c 74 2c 20 70 54 61 62 2d 3e 7a  gResult, pTab->z
a810: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 66 6f 72  Name);.      for
a820: 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e  (i=1, pFK=pTab->
a830: 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c  pFKey; pFK; i++,
a840: 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46   pFK=pFK->pNextF
a850: 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50  rom){.        pP
a860: 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46  arent = sqlite3F
a870: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b  indTable(db, pFK
a880: 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20  ->zTo, zDb);.   
a890: 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74       if( pParent
a8a0: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
a8b0: 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 30          pIdx = 0
a8c0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
a8d0: 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73  3TableLock(pPars
a8e0: 65 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2d  e, iDb, pParent-
a8f0: 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72 65 6e  >tnum, 0, pParen
a900: 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  t->zName);.     
a910: 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b     x = sqlite3Fk
a920: 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61 72  LocateIndex(pPar
a930: 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b  se, pParent, pFK
a940: 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a 20 20 20  , &pIdx, 0);.   
a950: 20 20 20 20 20 69 66 28 20 78 3d 3d 30 20 29 7b       if( x==0 ){
a960: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
a970: 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Idx==0 ){.      
a980: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65        sqlite3Ope
a990: 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 69  nTable(pParse, i
a9a0: 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2c 20  , iDb, pParent, 
a9b0: 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20  OP_OpenRead);.  
a9c0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
a9d0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
a9e0: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
a9f0: 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c 20  OP_OpenRead, i, 
aa00: 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62 29  pIdx->tnum, iDb)
aa10: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
aa20: 6c 69 74 65 33 56 64 62 65 53 65 74 50 34 4b 65  lite3VdbeSetP4Ke
aa30: 79 49 6e 66 6f 28 70 50 61 72 73 65 2c 20 70 49  yInfo(pParse, pI
aa40: 64 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  dx);.          }
aa50: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
aa60: 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b            k = 0;
aa70: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
aa80: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
aa90: 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
aaa0: 28 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 3e 30  ( pParse->nErr>0
aab0: 20 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a 20 20   || pFK==0 );.  
aac0: 20 20 20 20 69 66 28 20 70 46 4b 20 29 20 62 72      if( pFK ) br
aad0: 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20 70  eak;.      if( p
aae0: 50 61 72 73 65 2d 3e 6e 54 61 62 3c 69 20 29 20  Parse->nTab<i ) 
aaf0: 70 50 61 72 73 65 2d 3e 6e 54 61 62 20 3d 20 69  pParse->nTab = i
ab00: 3b 0a 20 20 20 20 20 20 61 64 64 72 54 6f 70 20  ;.      addrTop 
ab10: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
ab20: 4f 70 31 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64  Op1(v, OP_Rewind
ab30: 2c 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61  , 0); VdbeCovera
ab40: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 66 6f 72  ge(v);.      for
ab50: 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e  (i=1, pFK=pTab->
ab60: 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c  pFKey; pFK; i++,
ab70: 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46   pFK=pFK->pNextF
ab80: 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50  rom){.        pP
ab90: 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46  arent = sqlite3F
aba0: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b  indTable(db, pFK
abb0: 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20  ->zTo, zDb);.   
abc0: 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20       pIdx = 0;. 
abd0: 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3d 20         aiCols = 
abe0: 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  0;.        if( p
abf0: 50 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20  Parent ){.      
ac00: 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46      x = sqlite3F
ac10: 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61  kLocateIndex(pPa
ac20: 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46  rse, pParent, pF
ac30: 4b 2c 20 26 70 49 64 78 2c 20 26 61 69 43 6f 6c  K, &pIdx, &aiCol
ac40: 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73  s);.          as
ac50: 73 65 72 74 28 20 78 3d 3d 30 20 29 3b 0a 20 20  sert( x==0 );.  
ac60: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
ac70: 61 64 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65 33  addrOk = sqlite3
ac80: 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29  VdbeMakeLabel(v)
ac90: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50  ;.        if( pP
aca0: 61 72 65 6e 74 20 26 26 20 70 49 64 78 3d 3d 30  arent && pIdx==0
acb0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e   ){.          in
acc0: 74 20 69 4b 65 79 20 3d 20 70 46 4b 2d 3e 61 43  t iKey = pFK->aC
acd0: 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20 20 20  ol[0].iFrom;.   
ace0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69         assert( i
acf0: 4b 65 79 3e 3d 30 20 26 26 20 69 4b 65 79 3c 70  Key>=0 && iKey<p
ad00: 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20  Tab->nCol );.   
ad10: 20 20 20 20 20 20 20 69 66 28 20 69 4b 65 79 21         if( iKey!
ad20: 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 7b 0a  =pTab->iPKey ){.
ad30: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
ad40: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
ad50: 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c 20 69   OP_Column, 0, i
ad60: 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20  Key, regRow);.  
ad70: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
ad80: 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 76  3ColumnDefault(v
ad90: 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c 20 72 65  , pTab, iKey, re
ada0: 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20  gRow);.         
adb0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
adc0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c  dOp2(v, OP_IsNul
add0: 6c 2c 20 72 65 67 52 6f 77 2c 20 61 64 64 72 4f  l, regRow, addrO
ade0: 6b 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  k); VdbeCoverage
adf0: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  (v);.          }
ae00: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
ae10: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ae20: 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c  Op2(v, OP_Rowid,
ae30: 20 30 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20   0, regRow);.   
ae40: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
ae50: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
ae60: 64 4f 70 33 28 76 2c 20 4f 50 5f 53 65 65 6b 52  dOp3(v, OP_SeekR
ae70: 6f 77 69 64 2c 20 69 2c 20 30 2c 20 72 65 67 52  owid, i, 0, regR
ae80: 6f 77 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  ow); VdbeCoverag
ae90: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
aea0: 73 71 6c 69 74 65 33 56 64 62 65 47 6f 74 6f 28  sqlite3VdbeGoto(
aeb0: 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20  v, addrOk);.    
aec0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
aed0: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 73 71 6c  eJumpHere(v, sql
aee0: 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41  ite3VdbeCurrentA
aef0: 64 64 72 28 76 29 2d 32 29 3b 0a 20 20 20 20 20  ddr(v)-2);.     
af00: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
af10: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70      for(j=0; j<p
af20: 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a  FK->nCol; j++){.
af30: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
af40: 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
af50: 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70  lumnOfTable(v, p
af60: 54 61 62 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  Tab, 0,.        
af70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af80: 20 20 20 20 61 69 43 6f 6c 73 20 3f 20 61 69 43      aiCols ? aiC
af90: 6f 6c 73 5b 6a 5d 20 3a 20 70 46 4b 2d 3e 61 43  ols[j] : pFK->aC
afa0: 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 2c 20 72 65 67  ol[j].iFrom, reg
afb0: 52 6f 77 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20  Row+j);.        
afc0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
afd0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75  ddOp2(v, OP_IsNu
afe0: 6c 6c 2c 20 72 65 67 52 6f 77 2b 6a 2c 20 61 64  ll, regRow+j, ad
aff0: 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65 72  drOk); 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 20 20 69 66    }.          if
b020: 28 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20  ( pParent ){.   
b030: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
b040: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
b050: 5f 4d 61 6b 65 52 65 63 6f 72 64 2c 20 72 65 67  _MakeRecord, reg
b060: 52 6f 77 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 2c 20  Row, pFK->nCol, 
b070: 72 65 67 4b 65 79 2c 0a 20 20 20 20 20 20 20 20  regKey,.        
b080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b090: 20 20 20 20 20 20 73 71 6c 69 74 65 33 49 6e 64        sqlite3Ind
b0a0: 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 64 62  exAffinityStr(db
b0b0: 2c 70 49 64 78 29 2c 20 70 46 4b 2d 3e 6e 43 6f  ,pIdx), pFK->nCo
b0c0: 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  l);.            
b0d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
b0e0: 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64  4Int(v, OP_Found
b0f0: 2c 20 69 2c 20 61 64 64 72 4f 6b 2c 20 72 65 67  , i, addrOk, reg
b100: 4b 65 79 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  Key, 0);.       
b110: 20 20 20 20 20 56 64 62 65 43 6f 76 65 72 61 67       VdbeCoverag
b120: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
b130: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
b140: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
b150: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69  ddOp2(v, OP_Rowi
b160: 64 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2b  d, 0, regResult+
b170: 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  1);.        sqli
b180: 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64  te3VdbeMultiLoad
b190: 28 76 2c 20 72 65 67 52 65 73 75 6c 74 2b 32 2c  (v, regResult+2,
b1a0: 20 22 73 69 22 2c 20 70 46 4b 2d 3e 7a 54 6f 2c   "si", pFK->zTo,
b1b0: 20 69 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 73   i-1);.        s
b1c0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
b1d0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
b1e0: 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 34 29 3b  , regResult, 4);
b1f0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
b200: 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c  VdbeResolveLabel
b210: 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20  (v, addrOk);.   
b220: 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
b230: 65 65 28 64 62 2c 20 61 69 43 6f 6c 73 29 3b 0a  ee(db, aiCols);.
b240: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
b250: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
b260: 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 30 2c 20 61  v, OP_Next, 0, a
b270: 64 64 72 54 6f 70 2b 31 29 3b 20 56 64 62 65 43  ddrTop+1); VdbeC
b280: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
b290: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
b2a0: 70 48 65 72 65 28 76 2c 20 61 64 64 72 54 6f 70  pHere(v, addrTop
b2b0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
b2c0: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
b2d0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
b2e0: 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 20 2a 2f  OMIT_TRIGGER) */
b2f0: 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
b300: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
b310: 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a  FOREIGN_KEY) */.
b320: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
b330: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 50    case PragTyp_P
b340: 41 52 53 45 52 5f 54 52 41 43 45 3a 20 7b 0a 20  ARSER_TRACE: {. 
b350: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
b360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
b370: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69  e3GetBoolean(zRi
b380: 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20  ght, 0) ){.     
b390: 20 20 20 73 71 6c 69 74 65 33 50 61 72 73 65 72     sqlite3Parser
b3a0: 54 72 61 63 65 28 73 74 64 6f 75 74 2c 20 22 70  Trace(stdout, "p
b3b0: 61 72 73 65 72 3a 20 22 29 3b 0a 20 20 20 20 20  arser: ");.     
b3c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
b3d0: 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
b3e0: 63 65 28 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  ce(0, 0);.      
b3f0: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
b400: 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  eak;.#endif..  /
b410: 2a 20 52 65 69 6e 73 74 61 6c 6c 20 74 68 65 20  * Reinstall the 
b420: 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 66 75  LIKE and GLOB fu
b430: 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 76 61  nctions.  The va
b440: 72 69 61 6e 74 20 6f 66 20 4c 49 4b 45 0a 20 20  riant of LIKE.  
b450: 2a 2a 20 75 73 65 64 20 77 69 6c 6c 20 62 65 20  ** used will be 
b460: 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20 6f  case sensitive o
b470: 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20  r not depending 
b480: 6f 6e 20 74 68 65 20 52 48 53 2e 0a 20 20 2a 2f  on the RHS..  */
b490: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
b4a0: 43 41 53 45 5f 53 45 4e 53 49 54 49 56 45 5f 4c  CASE_SENSITIVE_L
b4b0: 49 4b 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  IKE: {.    if( z
b4c0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
b4d0: 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69  qlite3RegisterLi
b4e0: 6b 65 46 75 6e 63 74 69 6f 6e 73 28 64 62 2c 20  keFunctions(db, 
b4f0: 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
b500: 6e 28 7a 52 69 67 68 74 2c 20 30 29 29 3b 0a 20  n(zRight, 0));. 
b510: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
b520: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
b530: 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  E_INTEGRITY_CHEC
b540: 4b 5f 45 52 52 4f 52 5f 4d 41 58 0a 23 20 64 65  K_ERROR_MAX.# de
b550: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 45  fine SQLITE_INTE
b560: 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f  GRITY_CHECK_ERRO
b570: 52 5f 4d 41 58 20 31 30 30 0a 23 65 6e 64 69 66  R_MAX 100.#endif
b580: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
b590: 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
b5a0: 43 48 45 43 4b 0a 20 20 2f 2a 20 50 72 61 67 6d  CHECK.  /* Pragm
b5b0: 61 20 22 71 75 69 63 6b 5f 63 68 65 63 6b 22 20  a "quick_check" 
b5c0: 69 73 20 72 65 64 75 63 65 64 20 76 65 72 73 69  is reduced versi
b5d0: 6f 6e 20 6f 66 20 0a 20 20 2a 2a 20 69 6e 74 65  on of .  ** inte
b5e0: 67 72 69 74 79 5f 63 68 65 63 6b 20 64 65 73 69  grity_check desi
b5f0: 67 6e 65 64 20 74 6f 20 64 65 74 65 63 74 20 6d  gned to detect m
b600: 6f 73 74 20 64 61 74 61 62 61 73 65 20 63 6f 72  ost database cor
b610: 72 75 70 74 69 6f 6e 0a 20 20 2a 2a 20 77 69 74  ruption.  ** wit
b620: 68 6f 75 74 20 6d 6f 73 74 20 6f 66 20 74 68 65  hout most of the
b630: 20 6f 76 65 72 68 65 61 64 20 6f 66 20 61 20 66   overhead of a f
b640: 75 6c 6c 20 69 6e 74 65 67 72 69 74 79 2d 63 68  ull integrity-ch
b650: 65 63 6b 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  eck..  */.  case
b660: 20 50 72 61 67 54 79 70 5f 49 4e 54 45 47 52 49   PragTyp_INTEGRI
b670: 54 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20  TY_CHECK: {.    
b680: 69 6e 74 20 69 2c 20 6a 2c 20 61 64 64 72 2c 20  int i, j, addr, 
b690: 6d 78 45 72 72 3b 0a 0a 20 20 20 20 69 6e 74 20  mxErr;..    int 
b6a0: 69 73 51 75 69 63 6b 20 3d 20 28 73 71 6c 69 74  isQuick = (sqlit
b6b0: 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b  e3Tolower(zLeft[
b6c0: 30 5d 29 3d 3d 27 71 27 29 3b 0a 0a 20 20 20 20  0])=='q');..    
b6d0: 2f 2a 20 49 66 20 74 68 65 20 50 52 41 47 4d 41  /* If the PRAGMA
b6e0: 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 6f 66 20   command was of 
b6f0: 74 68 65 20 66 6f 72 6d 20 22 50 52 41 47 4d 41  the form "PRAGMA
b700: 20 3c 64 62 3e 2e 69 6e 74 65 67 72 69 74 79 5f   <db>.integrity_
b710: 63 68 65 63 6b 22 2c 0a 20 20 20 20 2a 2a 20 74  check",.    ** t
b720: 68 65 6e 20 69 44 62 20 69 73 20 73 65 74 20 74  hen iDb is set t
b730: 6f 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  o the index of t
b740: 68 65 20 64 61 74 61 62 61 73 65 20 69 64 65 6e  he database iden
b750: 74 69 66 69 65 64 20 62 79 20 3c 64 62 3e 2e 0a  tified by <db>..
b760: 20 20 20 20 2a 2a 20 49 6e 20 74 68 69 73 20 63      ** In this c
b770: 61 73 65 2c 20 74 68 65 20 69 6e 74 65 67 72 69  ase, the integri
b780: 74 79 20 6f 66 20 64 61 74 61 62 61 73 65 20 69  ty of database i
b790: 44 62 20 6f 6e 6c 79 20 69 73 20 76 65 72 69 66  Db only is verif
b7a0: 69 65 64 20 62 79 0a 20 20 20 20 2a 2a 20 74 68  ied by.    ** th
b7b0: 65 20 56 44 42 45 20 63 72 65 61 74 65 64 20 62  e VDBE created b
b7c0: 65 6c 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  elow..    **.   
b7d0: 20 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 69   ** Otherwise, i
b7e0: 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61  f the command wa
b7f0: 73 20 73 69 6d 70 6c 79 20 22 50 52 41 47 4d 41  s simply "PRAGMA
b800: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
b810: 22 20 28 6f 72 0a 20 20 20 20 2a 2a 20 22 50 52  " (or.    ** "PR
b820: 41 47 4d 41 20 71 75 69 63 6b 5f 63 68 65 63 6b  AGMA quick_check
b830: 22 29 2c 20 74 68 65 6e 20 69 44 62 20 69 73 20  "), then iDb is 
b840: 73 65 74 20 74 6f 20 30 2e 20 49 6e 20 74 68 69  set to 0. In thi
b850: 73 20 63 61 73 65 2c 20 73 65 74 20 69 44 62 0a  s case, set iDb.
b860: 20 20 20 20 2a 2a 20 74 6f 20 2d 31 20 68 65 72      ** to -1 her
b870: 65 2c 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74  e, to indicate t
b880: 68 61 74 20 74 68 65 20 56 44 42 45 20 73 68 6f  hat the VDBE sho
b890: 75 6c 64 20 76 65 72 69 66 79 20 74 68 65 20 69  uld verify the i
b8a0: 6e 74 65 67 72 69 74 79 0a 20 20 20 20 2a 2a 20  ntegrity.    ** 
b8b0: 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  of all attached 
b8c0: 64 61 74 61 62 61 73 65 73 2e 20 20 2a 2f 0a 20  databases.  */. 
b8d0: 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d     assert( iDb>=
b8e0: 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
b8f0: 20 69 44 62 3d 3d 30 20 7c 7c 20 70 49 64 32 2d   iDb==0 || pId2-
b900: 3e 7a 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49  >z );.    if( pI
b910: 64 32 2d 3e 7a 3d 3d 30 20 29 20 69 44 62 20 3d  d2->z==0 ) iDb =
b920: 20 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69   -1;..    /* Ini
b930: 74 69 61 6c 69 7a 65 20 74 68 65 20 56 44 42 45  tialize the VDBE
b940: 20 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 20 20   program */.    
b950: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36  pParse->nMem = 6
b960: 3b 0a 20 20 20 20 73 65 74 4f 6e 65 43 6f 6c 75  ;.    setOneColu
b970: 6d 6e 4e 61 6d 65 28 76 2c 20 22 69 6e 74 65 67  mnName(v, "integ
b980: 72 69 74 79 5f 63 68 65 63 6b 22 29 3b 0a 0a 20  rity_check");.. 
b990: 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 6d 61     /* Set the ma
b9a0: 78 69 6d 75 6d 20 65 72 72 6f 72 20 63 6f 75 6e  ximum error coun
b9b0: 74 20 2a 2f 0a 20 20 20 20 6d 78 45 72 72 20 3d  t */.    mxErr =
b9c0: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54   SQLITE_INTEGRIT
b9d0: 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41  Y_CHECK_ERROR_MA
b9e0: 58 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  X;.    if( zRigh
b9f0: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
ba00: 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69 67 68  e3GetInt32(zRigh
ba10: 74 2c 20 26 6d 78 45 72 72 29 3b 0a 20 20 20 20  t, &mxErr);.    
ba20: 20 20 69 66 28 20 6d 78 45 72 72 3c 3d 30 20 29    if( mxErr<=0 )
ba30: 7b 0a 20 20 20 20 20 20 20 20 6d 78 45 72 72 20  {.        mxErr 
ba40: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49  = SQLITE_INTEGRI
ba50: 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d  TY_CHECK_ERROR_M
ba60: 41 58 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  AX;.      }.    
ba70: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
ba80: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
ba90: 74 65 67 65 72 2c 20 6d 78 45 72 72 2c 20 31 29  teger, mxErr, 1)
baa0: 3b 20 20 2f 2a 20 72 65 67 5b 31 5d 20 68 6f 6c  ;  /* reg[1] hol
bab0: 64 73 20 65 72 72 6f 72 73 20 6c 65 66 74 20 2a  ds errors left *
bac0: 2f 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20  /..    /* Do an 
bad0: 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 20  integrity check 
bae0: 6f 6e 20 65 61 63 68 20 64 61 74 61 62 61 73 65  on each database
baf0: 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 66 6f 72   file */.    for
bb00: 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
bb10: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 48 61 73   i++){.      Has
bb20: 68 45 6c 65 6d 20 2a 78 3b 0a 20 20 20 20 20 20  hElem *x;.      
bb30: 48 61 73 68 20 2a 70 54 62 6c 73 3b 0a 20 20 20  Hash *pTbls;.   
bb40: 20 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 0a 20     int *aRoot;. 
bb50: 20 20 20 20 20 69 6e 74 20 63 6e 74 20 3d 20 30       int cnt = 0
bb60: 3b 0a 20 20 20 20 20 20 69 6e 74 20 6d 78 49 64  ;.      int mxId
bb70: 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 6e 74  x = 0;.      int
bb80: 20 6e 49 64 78 3b 0a 0a 20 20 20 20 20 20 69 66   nIdx;..      if
bb90: 28 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 26 26  ( OMIT_TEMPDB &&
bba0: 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75 65   i==1 ) continue
bbb0: 3b 0a 20 20 20 20 20 20 69 66 28 20 69 44 62 3e  ;.      if( iDb>
bbc0: 3d 30 20 26 26 20 69 21 3d 69 44 62 20 29 20 63  =0 && i!=iDb ) c
bbd0: 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20 20 20  ontinue;..      
bbe0: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
bbf0: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
bc00: 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d  i);.      addr =
bc10: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
bc20: 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20  p1(v, OP_IfPos, 
bc30: 31 29 3b 20 2f 2a 20 48 61 6c 74 20 69 66 20 6f  1); /* Halt if o
bc40: 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a  ut of errors */.
bc50: 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72 61        VdbeCovera
bc60: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71 6c  ge(v);.      sql
bc70: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
bc80: 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29  , OP_Halt, 0, 0)
bc90: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
bca0: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
bcb0: 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  ddr);..      /* 
bcc0: 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20  Do an integrity 
bcd0: 63 68 65 63 6b 20 6f 66 20 74 68 65 20 42 2d 54  check of the B-T
bce0: 72 65 65 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20  ree.      **.   
bcf0: 20 20 20 2a 2a 20 42 65 67 69 6e 20 62 79 20 66     ** Begin by f
bd00: 69 6e 64 69 6e 67 20 74 68 65 20 72 6f 6f 74 20  inding the root 
bd10: 70 61 67 65 73 20 6e 75 6d 62 65 72 73 0a 20 20  pages numbers.  
bd20: 20 20 20 20 2a 2a 20 66 6f 72 20 61 6c 6c 20 74      ** for all t
bd30: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
bd40: 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
bd50: 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
bd60: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
bd70: 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
bd80: 28 64 62 2c 20 69 2c 20 30 29 20 29 3b 0a 20 20  (db, i, 0) );.  
bd90: 20 20 20 20 70 54 62 6c 73 20 3d 20 26 64 62 2d      pTbls = &db-
bda0: 3e 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[i].pSchema-
bdb0: 3e 74 62 6c 48 61 73 68 3b 0a 20 20 20 20 20 20  >tblHash;.      
bdc0: 66 6f 72 28 63 6e 74 3d 30 2c 20 78 3d 73 71 6c  for(cnt=0, x=sql
bdd0: 69 74 65 48 61 73 68 46 69 72 73 74 28 70 54 62  iteHashFirst(pTb
bde0: 6c 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65  ls); x; x=sqlite
bdf0: 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20  HashNext(x)){.  
be00: 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61        Table *pTa
be10: 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61  b = sqliteHashDa
be20: 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49  ta(x);.        I
be30: 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20  ndex *pIdx;.    
be40: 20 20 20 20 69 66 28 20 48 61 73 52 6f 77 69 64      if( HasRowid
be50: 28 70 54 61 62 29 20 29 20 63 6e 74 2b 2b 3b 0a  (pTab) ) cnt++;.
be60: 20 20 20 20 20 20 20 20 66 6f 72 28 6e 49 64 78          for(nIdx
be70: 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70  =0, pIdx=pTab->p
be80: 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64  Index; pIdx; pId
be90: 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6e  x=pIdx->pNext, n
bea0: 49 64 78 2b 2b 29 7b 20 63 6e 74 2b 2b 3b 20 7d  Idx++){ cnt++; }
beb0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e 49 64  .        if( nId
bec0: 78 3e 6d 78 49 64 78 20 29 20 6d 78 49 64 78 20  x>mxIdx ) mxIdx 
bed0: 3d 20 6e 49 64 78 3b 0a 20 20 20 20 20 20 7d 0a  = nIdx;.      }.
bee0: 20 20 20 20 20 20 61 52 6f 6f 74 20 3d 20 73 71        aRoot = sq
bef0: 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
bf00: 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e  NN(db, sizeof(in
bf10: 74 29 2a 28 63 6e 74 2b 31 29 29 3b 0a 20 20 20  t)*(cnt+1));.   
bf20: 20 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20     if( aRoot==0 
bf30: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 66  ) break;.      f
bf40: 6f 72 28 63 6e 74 3d 30 2c 20 78 3d 73 71 6c 69  or(cnt=0, x=sqli
bf50: 74 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c  teHashFirst(pTbl
bf60: 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48  s); x; x=sqliteH
bf70: 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20  ashNext(x)){.   
bf80: 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62       Table *pTab
bf90: 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74   = sqliteHashDat
bfa0: 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e  a(x);.        In
bfb0: 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 20  dex *pIdx;.     
bfc0: 20 20 20 69 66 28 20 48 61 73 52 6f 77 69 64 28     if( HasRowid(
bfd0: 70 54 61 62 29 20 29 20 61 52 6f 6f 74 5b 63 6e  pTab) ) aRoot[cn
bfe0: 74 2b 2b 5d 20 3d 20 70 54 61 62 2d 3e 74 6e 75  t++] = pTab->tnu
bff0: 6d 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70  m;.        for(p
c000: 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
c010: 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64  ; pIdx; pIdx=pId
c020: 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20  x->pNext){.     
c030: 20 20 20 20 20 61 52 6f 6f 74 5b 63 6e 74 2b 2b       aRoot[cnt++
c040: 5d 20 3d 20 70 49 64 78 2d 3e 74 6e 75 6d 3b 0a  ] = pIdx->tnum;.
c050: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
c060: 7d 0a 20 20 20 20 20 20 61 52 6f 6f 74 5b 63 6e  }.      aRoot[cn
c070: 74 5d 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f  t] = 0;..      /
c080: 2a 20 4d 61 6b 65 20 73 75 72 65 20 73 75 66 66  * Make sure suff
c090: 69 63 69 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66  icient number of
c0a0: 20 72 65 67 69 73 74 65 72 73 20 68 61 76 65 20   registers have 
c0b0: 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 2a  been allocated *
c0c0: 2f 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  /.      pParse->
c0d0: 6e 4d 65 6d 20 3d 20 4d 41 58 28 20 70 50 61 72  nMem = MAX( pPar
c0e0: 73 65 2d 3e 6e 4d 65 6d 2c 20 38 2b 6d 78 49 64  se->nMem, 8+mxId
c0f0: 78 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  x );..      /* D
c100: 6f 20 74 68 65 20 62 2d 74 72 65 65 20 69 6e 74  o the b-tree int
c110: 65 67 72 69 74 79 20 63 68 65 63 6b 73 20 2a 2f  egrity checks */
c120: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c130: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 49  beAddOp4(v, OP_I
c140: 6e 74 65 67 72 69 74 79 43 6b 2c 20 32 2c 20 63  ntegrityCk, 2, c
c150: 6e 74 2c 20 31 2c 20 28 63 68 61 72 2a 29 61 52  nt, 1, (char*)aR
c160: 6f 6f 74 2c 50 34 5f 49 4e 54 41 52 52 41 59 29  oot,P4_INTARRAY)
c170: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
c180: 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20 28  dbeChangeP5(v, (
c190: 75 38 29 69 29 3b 0a 20 20 20 20 20 20 61 64 64  u8)i);.      add
c1a0: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
c1b0: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 73 4e 75  ddOp1(v, OP_IsNu
c1c0: 6c 6c 2c 20 32 29 3b 20 56 64 62 65 43 6f 76 65  ll, 2); VdbeCove
c1d0: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73  rage(v);.      s
c1e0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
c1f0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
c200: 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20  0, 3, 0,.       
c210: 20 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66    sqlite3MPrintf
c220: 28 64 62 2c 20 22 2a 2a 2a 20 69 6e 20 64 61 74  (db, "*** in dat
c230: 61 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e 22 2c  abase %s ***\n",
c240: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 44 62 53   db->aDb[i].zDbS
c250: 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20 20 20 20  Name),.         
c260: 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20  P4_DYNAMIC);.   
c270: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c280: 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 6f 76 65 2c  dOp3(v, OP_Move,
c290: 20 32 2c 20 34 2c 20 31 29 3b 0a 20 20 20 20 20   2, 4, 1);.     
c2a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c2b0: 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
c2c0: 20 34 2c 20 33 2c 20 32 29 3b 0a 20 20 20 20 20   4, 3, 2);.     
c2d0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c2e0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
c2f0: 6f 77 2c 20 32 2c 20 31 29 3b 0a 20 20 20 20 20  ow, 2, 1);.     
c300: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
c310: 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a  Here(v, addr);..
c320: 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
c330: 72 65 20 61 6c 6c 20 74 68 65 20 69 6e 64 69 63  re all the indic
c340: 65 73 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74  es are construct
c350: 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a 20 20  ed correctly..  
c360: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 66 6f 72      */.      for
c370: 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72  (x=sqliteHashFir
c380: 73 74 28 70 54 62 6c 73 29 3b 20 78 20 26 26 20  st(pTbls); x && 
c390: 21 69 73 51 75 69 63 6b 3b 20 78 3d 73 71 6c 69  !isQuick; x=sqli
c3a0: 74 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a  teHashNext(x)){.
c3b0: 20 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70          Table *p
c3c0: 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68  Tab = sqliteHash
c3d0: 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20  Data(x);.       
c3e0: 20 49 6e 64 65 78 20 2a 70 49 64 78 2c 20 2a 70   Index *pIdx, *p
c3f0: 50 6b 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65  Pk;.        Inde
c400: 78 20 2a 70 50 72 69 6f 72 20 3d 20 30 3b 0a 20  x *pPrior = 0;. 
c410: 20 20 20 20 20 20 20 69 6e 74 20 6c 6f 6f 70 54         int loopT
c420: 6f 70 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  op;.        int 
c430: 69 44 61 74 61 43 75 72 2c 20 69 49 64 78 43 75  iDataCur, iIdxCu
c440: 72 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72  r;.        int r
c450: 31 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 20 20 20  1 = -1;..       
c460: 20 69 66 28 20 70 54 61 62 2d 3e 70 49 6e 64 65   if( pTab->pInde
c470: 78 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  x==0 ) continue;
c480: 0a 20 20 20 20 20 20 20 20 70 50 6b 20 3d 20 48  .        pPk = H
c490: 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 3f 20  asRowid(pTab) ? 
c4a0: 30 20 3a 20 73 71 6c 69 74 65 33 50 72 69 6d 61  0 : sqlite3Prima
c4b0: 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61 62 29  ryKeyIndex(pTab)
c4c0: 3b 0a 20 20 20 20 20 20 20 20 61 64 64 72 20 3d  ;.        addr =
c4d0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c4e0: 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20  p1(v, OP_IfPos, 
c4f0: 31 29 3b 20 20 2f 2a 20 53 74 6f 70 20 69 66 20  1);  /* Stop if 
c500: 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f  out of errors */
c510: 0a 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 76  .        VdbeCov
c520: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
c530: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c540: 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20  Op2(v, OP_Halt, 
c550: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  0, 0);.        s
c560: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
c570: 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 20  re(v, addr);.   
c580: 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 72       sqlite3Expr
c590: 43 61 63 68 65 43 6c 65 61 72 28 70 50 61 72 73  CacheClear(pPars
c5a0: 65 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  e);.        sqli
c5b0: 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
c5c0: 6e 64 69 63 65 73 28 70 50 61 72 73 65 2c 20 70  ndices(pParse, p
c5d0: 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64  Tab, OP_OpenRead
c5e0: 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20  , 0,.           
c5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c600: 20 20 20 20 20 20 20 20 31 2c 20 30 2c 20 26 69          1, 0, &i
c610: 44 61 74 61 43 75 72 2c 20 26 69 49 64 78 43 75  DataCur, &iIdxCu
c620: 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  r);.        sqli
c630: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c640: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20   OP_Integer, 0, 
c650: 37 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  7);.        for(
c660: 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e  j=0, pIdx=pTab->
c670: 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
c680: 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20  dx=pIdx->pNext, 
c690: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
c6a0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c6b0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
c6c0: 20 30 2c 20 38 2b 6a 29 3b 20 2f 2a 20 69 6e 64   0, 8+j); /* ind
c6d0: 65 78 20 65 6e 74 72 69 65 73 20 63 6f 75 6e 74  ex entries count
c6e0: 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a  er */.        }.
c6f0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
c700: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3e 3d 38 2b  pParse->nMem>=8+
c710: 6a 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  j );.        ass
c720: 65 72 74 28 20 73 71 6c 69 74 65 33 4e 6f 54 65  ert( sqlite3NoTe
c730: 6d 70 73 49 6e 52 61 6e 67 65 28 70 50 61 72 73  mpsInRange(pPars
c740: 65 2c 31 2c 37 2b 6a 29 20 29 3b 0a 20 20 20 20  e,1,7+j) );.    
c750: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c760: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 77 69  ddOp2(v, OP_Rewi
c770: 6e 64 2c 20 69 44 61 74 61 43 75 72 2c 20 30 29  nd, iDataCur, 0)
c780: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
c790: 29 3b 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70 54  );.        loopT
c7a0: 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  op = sqlite3Vdbe
c7b0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64  AddOp2(v, OP_Add
c7c0: 49 6d 6d 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20  Imm, 7, 1);.    
c7d0: 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74 68      /* Verify th
c7e0: 61 74 20 61 6c 6c 20 4e 4f 54 20 4e 55 4c 4c 20  at all NOT NULL 
c7f0: 63 6f 6c 75 6d 6e 73 20 72 65 61 6c 6c 79 20 61  columns really a
c800: 72 65 20 4e 4f 54 20 4e 55 4c 4c 20 2a 2f 0a 20  re NOT NULL */. 
c810: 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20         for(j=0; 
c820: 6a 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 6a 2b  j<pTab->nCol; j+
c830: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63 68  +){.          ch
c840: 61 72 20 2a 7a 45 72 72 3b 0a 20 20 20 20 20 20  ar *zErr;.      
c850: 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d      int jmp2, jm
c860: 70 33 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  p3;.          if
c870: 28 20 6a 3d 3d 70 54 61 62 2d 3e 69 50 4b 65 79  ( j==pTab->iPKey
c880: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
c890: 20 20 20 20 20 20 20 69 66 28 20 70 54 61 62 2d         if( pTab-
c8a0: 3e 61 43 6f 6c 5b 6a 5d 2e 6e 6f 74 4e 75 6c 6c  >aCol[j].notNull
c8b0: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
c8c0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
c8d0: 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
c8e0: 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70 54 61  mnOfTable(v, pTa
c8f0: 62 2c 20 69 44 61 74 61 43 75 72 2c 20 6a 2c 20  b, iDataCur, j, 
c900: 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  3);.          sq
c910: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
c920: 35 28 76 2c 20 4f 50 46 4c 41 47 5f 54 59 50 45  5(v, OPFLAG_TYPE
c930: 4f 46 41 52 47 29 3b 0a 20 20 20 20 20 20 20 20  OFARG);.        
c940: 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33    jmp2 = sqlite3
c950: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
c960: 5f 4e 6f 74 4e 75 6c 6c 2c 20 33 29 3b 20 56 64  _NotNull, 3); Vd
c970: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
c980: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
c990: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c9a0: 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b  _AddImm, 1, -1);
c9b0: 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72   /* Decrement er
c9c0: 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20  ror limit */.   
c9d0: 20 20 20 20 20 20 20 7a 45 72 72 20 3d 20 73 71         zErr = sq
c9e0: 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
c9f0: 20 22 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20   "NULL value in 
ca00: 25 73 2e 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e  %s.%s", pTab->zN
ca10: 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ame,.           
ca20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca30: 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d     pTab->aCol[j]
ca40: 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20  .zName);.       
ca50: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
ca60: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
ca70: 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 7a 45 72  g8, 0, 3, 0, zEr
ca80: 72 2c 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a  r, P4_DYNAMIC);.
ca90: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
caa0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
cab0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33 2c 20  P_ResultRow, 3, 
cac0: 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d  1);.          jm
cad0: 70 33 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  p3 = sqlite3Vdbe
cae0: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50  AddOp1(v, OP_IfP
caf0: 6f 73 2c 20 31 29 3b 20 56 64 62 65 43 6f 76 65  os, 1); VdbeCove
cb00: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
cb10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
cb20: 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29  dOp0(v, OP_Halt)
cb30: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
cb40: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
cb50: 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20  v, jmp2);.      
cb60: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
cb70: 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 33 29  umpHere(v, jmp3)
cb80: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
cb90: 20 20 20 20 2f 2a 20 56 61 6c 69 64 61 74 65 20      /* Validate 
cba0: 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20 66 6f  index entries fo
cbb0: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  r the current ro
cbc0: 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72  w */.        for
cbd0: 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d  (j=0, pIdx=pTab-
cbe0: 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70  >pIndex; pIdx; p
cbf0: 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c  Idx=pIdx->pNext,
cc00: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
cc10: 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33 2c   int jmp2, jmp3,
cc20: 20 6a 6d 70 34 2c 20 6a 6d 70 35 3b 0a 20 20 20   jmp4, jmp5;.   
cc30: 20 20 20 20 20 20 20 69 6e 74 20 63 6b 55 6e 69         int ckUni
cc40: 71 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  q = sqlite3VdbeM
cc50: 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20  akeLabel(v);.   
cc60: 20 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d         if( pPk==
cc70: 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b  pIdx ) continue;
cc80: 0a 20 20 20 20 20 20 20 20 20 20 72 31 20 3d 20  .          r1 = 
cc90: 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49  sqlite3GenerateI
cca0: 6e 64 65 78 4b 65 79 28 70 50 61 72 73 65 2c 20  ndexKey(pParse, 
ccb0: 70 49 64 78 2c 20 69 44 61 74 61 43 75 72 2c 20  pIdx, iDataCur, 
ccc0: 30 2c 20 30 2c 20 26 6a 6d 70 33 2c 0a 20 20 20  0, 0, &jmp3,.   
ccd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccf0: 20 20 20 20 70 50 72 69 6f 72 2c 20 72 31 29 3b      pPrior, r1);
cd00: 0a 20 20 20 20 20 20 20 20 20 20 70 50 72 69 6f  .          pPrio
cd10: 72 20 3d 20 70 49 64 78 3b 0a 20 20 20 20 20 20  r = pIdx;.      
cd20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
cd30: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49  ddOp2(v, OP_AddI
cd40: 6d 6d 2c 20 38 2b 6a 2c 20 31 29 3b 20 20 2f 2a  mm, 8+j, 1);  /*
cd50: 20 69 6e 63 72 65 6d 65 6e 74 20 65 6e 74 72 79   increment entry
cd60: 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20   count */.      
cd70: 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74 68      /* Verify th
cd80: 61 74 20 61 6e 20 69 6e 64 65 78 20 65 6e 74 72  at an index entr
cd90: 79 20 65 78 69 73 74 73 20 66 6f 72 20 74 68 65  y exists for the
cda0: 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 20 72   current table r
cdb0: 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ow */.          
cdc0: 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33 56 64  jmp2 = sqlite3Vd
cdd0: 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f  beAddOp4Int(v, O
cde0: 50 5f 46 6f 75 6e 64 2c 20 69 49 64 78 43 75 72  P_Found, iIdxCur
cdf0: 2b 6a 2c 20 63 6b 55 6e 69 71 2c 20 72 31 2c 0a  +j, ckUniq, r1,.
ce00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce20: 20 20 20 20 20 20 70 49 64 78 2d 3e 6e 43 6f 6c        pIdx->nCol
ce30: 75 6d 6e 29 3b 20 56 64 62 65 43 6f 76 65 72 61  umn); VdbeCovera
ce40: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
ce50: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ce60: 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  p2(v, OP_AddImm,
ce70: 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72   1, -1); /* Decr
ce80: 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69  ement error limi
ce90: 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 73  t */.          s
cea0: 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74  qlite3VdbeLoadSt
ceb0: 72 69 6e 67 28 76 2c 20 33 2c 20 22 72 6f 77 20  ring(v, 3, "row 
cec0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  ");.          sq
ced0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
cee0: 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 37 2c  v, OP_Concat, 7,
cef0: 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20   3, 3);.        
cf00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61    sqlite3VdbeLoa
cf10: 64 53 74 72 69 6e 67 28 76 2c 20 34 2c 20 22 20  dString(v, 4, " 
cf20: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
cf30: 65 78 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20  ex ");.         
cf40: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
cf50: 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
cf60: 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20   4, 3, 3);.     
cf70: 20 20 20 20 20 6a 6d 70 35 20 3d 20 73 71 6c 69       jmp5 = sqli
cf80: 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e  te3VdbeLoadStrin
cf90: 67 28 76 2c 20 34 2c 20 70 49 64 78 2d 3e 7a 4e  g(v, 4, pIdx->zN
cfa0: 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ame);.          
cfb0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
cfc0: 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20  3(v, OP_Concat, 
cfd0: 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20  4, 3, 3);.      
cfe0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
cff0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
d000: 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20 20  ltRow, 3, 1);.  
d010: 20 20 20 20 20 20 20 20 6a 6d 70 34 20 3d 20 73          jmp4 = s
d020: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
d030: 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29  (v, OP_IfPos, 1)
d040: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
d050: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d060: 69 74 65 33 56 64 62 65 41 64 64 4f 70 30 28 76  ite3VdbeAddOp0(v
d070: 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20 20  , OP_Halt);.    
d080: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d090: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70  eJumpHere(v, jmp
d0a0: 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a  2);.          /*
d0b0: 20 46 6f 72 20 55 4e 49 51 55 45 20 69 6e 64 65   For UNIQUE inde
d0c0: 78 65 73 2c 20 76 65 72 69 66 79 20 74 68 61 74  xes, verify that
d0d0: 20 6f 6e 6c 79 20 6f 6e 65 20 65 6e 74 72 79 20   only one entry 
d0e0: 65 78 69 73 74 73 20 77 69 74 68 20 74 68 65 0a  exists with the.
d0f0: 20 20 20 20 20 20 20 20 20 20 2a 2a 20 63 75 72            ** cur
d100: 72 65 6e 74 20 6b 65 79 2e 20 20 54 68 65 20 65  rent key.  The e
d110: 6e 74 72 79 20 69 73 20 75 6e 69 71 75 65 20 69  ntry is unique i
d120: 66 20 28 31 29 20 61 6e 79 20 63 6f 6c 75 6d 6e  f (1) any column
d130: 20 69 73 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20   is NULL.       
d140: 20 20 20 2a 2a 20 6f 72 20 28 32 29 20 74 68 65     ** or (2) the
d150: 20 6e 65 78 74 20 65 6e 74 72 79 20 68 61 73 20   next entry has 
d160: 61 20 64 69 66 66 65 72 65 6e 74 20 6b 65 79 20  a different key 
d170: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  */.          if(
d180: 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 70   IsUniqueIndex(p
d190: 49 64 78 29 20 29 7b 0a 20 20 20 20 20 20 20 20  Idx) ){.        
d1a0: 20 20 20 20 69 6e 74 20 75 6e 69 71 4f 6b 20 3d      int uniqOk =
d1b0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65   sqlite3VdbeMake
d1c0: 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20  Label(v);.      
d1d0: 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 36 3b 0a        int jmp6;.
d1e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
d1f0: 6b 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  kk;.            
d200: 66 6f 72 28 6b 6b 3d 30 3b 20 6b 6b 3c 70 49 64  for(kk=0; kk<pId
d210: 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 6b 6b 2b 2b  x->nKeyCol; kk++
d220: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ){.             
d230: 20 69 6e 74 20 69 43 6f 6c 20 3d 20 70 49 64 78   int iCol = pIdx
d240: 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 6b 5d 3b 0a  ->aiColumn[kk];.
d250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
d260: 73 65 72 74 28 20 69 43 6f 6c 21 3d 58 4e 5f 52  sert( iCol!=XN_R
d270: 4f 57 49 44 20 26 26 20 69 43 6f 6c 3c 70 54 61  OWID && iCol<pTa
d280: 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20  b->nCol );.     
d290: 20 20 20 20 20 20 20 20 20 69 66 28 20 69 43 6f           if( iCo
d2a0: 6c 3e 3d 30 20 26 26 20 70 54 61 62 2d 3e 61 43  l>=0 && pTab->aC
d2b0: 6f 6c 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e 75 6c 6c  ol[iCol].notNull
d2c0: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
d2d0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
d2e0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d2f0: 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 31 2b 6b 6b  OP_IsNull, r1+kk
d300: 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20  , uniqOk);.     
d310: 20 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 76           VdbeCov
d320: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
d330: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
d340: 20 20 20 20 6a 6d 70 36 20 3d 20 73 71 6c 69 74      jmp6 = sqlit
d350: 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
d360: 4f 50 5f 4e 65 78 74 2c 20 69 49 64 78 43 75 72  OP_Next, iIdxCur
d370: 2b 6a 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  +j); VdbeCoverag
d380: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
d390: 20 20 73 71 6c 69 74 65 33 56 64 62 65 47 6f 74    sqlite3VdbeGot
d3a0: 6f 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20  o(v, uniqOk);.  
d3b0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d3c0: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
d3d0: 20 6a 6d 70 36 29 3b 0a 20 20 20 20 20 20 20 20   jmp6);.        
d3e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d3f0: 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 49  ddOp4Int(v, OP_I
d400: 64 78 47 54 2c 20 69 49 64 78 43 75 72 2b 6a 2c  dxGT, iIdxCur+j,
d410: 20 75 6e 69 71 4f 6b 2c 20 72 31 2c 0a 20 20 20   uniqOk, r1,.   
d420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 49                pI
d440: 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 20 56 64  dx->nKeyCol); Vd
d450: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
d460: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
d470: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d480: 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31  OP_AddImm, 1, -1
d490: 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20  ); /* Decrement 
d4a0: 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20  error limit */. 
d4b0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
d4c0: 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67  e3VdbeLoadString
d4d0: 28 76 2c 20 33 2c 20 22 6e 6f 6e 2d 75 6e 69 71  (v, 3, "non-uniq
d4e0: 75 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65  ue entry in inde
d4f0: 78 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  x ");.          
d500: 20 20 73 71 6c 69 74 65 33 56 64 62 65 47 6f 74    sqlite3VdbeGot
d510: 6f 28 76 2c 20 6a 6d 70 35 29 3b 0a 20 20 20 20  o(v, jmp5);.    
d520: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d530: 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28  dbeResolveLabel(
d540: 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20  v, uniqOk);.    
d550: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
d560: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
d570: 70 48 65 72 65 28 76 2c 20 6a 6d 70 34 29 3b 0a  pHere(v, jmp4);.
d580: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d590: 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c  3ResolvePartIdxL
d5a0: 61 62 65 6c 28 70 50 61 72 73 65 2c 20 6a 6d 70  abel(pParse, jmp
d5b0: 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  3);.        }.  
d5c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d5d0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65  eAddOp2(v, OP_Ne
d5e0: 78 74 2c 20 69 44 61 74 61 43 75 72 2c 20 6c 6f  xt, iDataCur, lo
d5f0: 6f 70 54 6f 70 29 3b 20 56 64 62 65 43 6f 76 65  opTop); VdbeCove
d600: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
d610: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
d620: 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54 6f 70 2d  Here(v, loopTop-
d630: 31 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  1);.#ifndef SQLI
d640: 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55  TE_OMIT_BTREECOU
d650: 4e 54 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  NT.        sqlit
d660: 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67  e3VdbeLoadString
d670: 28 76 2c 20 32 2c 20 22 77 72 6f 6e 67 20 23 20  (v, 2, "wrong # 
d680: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e  of entries in in
d690: 64 65 78 20 22 29 3b 0a 20 20 20 20 20 20 20 20  dex ");.        
d6a0: 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54  for(j=0, pIdx=pT
d6b0: 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
d6c0: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
d6d0: 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  xt, j++){.      
d6e0: 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49 64      if( pPk==pId
d6f0: 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  x ) continue;.  
d700: 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73          addr = s
d710: 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e  qlite3VdbeCurren
d720: 74 41 64 64 72 28 76 29 3b 0a 20 20 20 20 20 20  tAddr(v);.      
d730: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d740: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f  ddOp2(v, OP_IfPo
d750: 73 2c 20 31 2c 20 61 64 64 72 2b 32 29 3b 20 56  s, 1, addr+2); V
d760: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
d770: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d780: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d790: 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20  P_Halt, 0, 0);. 
d7a0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d7b0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d7c0: 5f 43 6f 75 6e 74 2c 20 69 49 64 78 43 75 72 2b  _Count, iIdxCur+
d7d0: 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20  j, 3);.         
d7e0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d7f0: 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20 38 2b 6a  p3(v, OP_Eq, 8+j
d800: 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b 20 56 64  , addr+8, 3); Vd
d810: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
d820: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d830: 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20  VdbeChangeP5(v, 
d840: 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 29 3b  SQLITE_NOTNULL);
d850: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d860: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d870: 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31  OP_AddImm, 1, -1
d880: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d890: 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69  ite3VdbeLoadStri
d8a0: 6e 67 28 76 2c 20 33 2c 20 70 49 64 78 2d 3e 7a  ng(v, 3, pIdx->z
d8b0: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20  Name);.         
d8c0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d8d0: 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
d8e0: 20 33 2c 20 32 2c 20 37 29 3b 0a 20 20 20 20 20   3, 2, 7);.     
d8f0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d900: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
d910: 75 6c 74 52 6f 77 2c 20 37 2c 20 31 29 3b 0a 20  ultRow, 7, 1);. 
d920: 20 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20         }.#endif 
d930: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  /* SQLITE_OMIT_B
d940: 54 52 45 45 43 4f 55 4e 54 20 2a 2f 0a 20 20 20  TREECOUNT */.   
d950: 20 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20     } .    }.    
d960: 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  {.      static c
d970: 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56  onst int iLn = V
d980: 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e  DBE_OFFSET_LINEN
d990: 4f 28 32 29 3b 0a 20 20 20 20 20 20 73 74 61 74  O(2);.      stat
d9a0: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
d9b0: 69 73 74 20 65 6e 64 43 6f 64 65 5b 5d 20 3d 20  ist endCode[] = 
d9c0: 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 41  {.        { OP_A
d9d0: 64 64 49 6d 6d 2c 20 20 20 20 20 20 31 2c 20 30  ddImm,      1, 0
d9e0: 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20  ,        0},    
d9f0: 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 0 */.        
da00: 7b 20 4f 50 5f 49 66 2c 20 20 20 20 20 20 20 20  { OP_If,        
da10: 20 20 31 2c 20 34 2c 20 20 20 20 20 20 20 20 30    1, 4,        0
da20: 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20  },    /* 1 */.  
da30: 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e        { OP_Strin
da40: 67 38 2c 20 20 20 20 20 30 2c 20 33 2c 20 20 20  g8,     0, 3,   
da50: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 32       0},    /* 2
da60: 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50   */.        { OP
da70: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 33 2c  _ResultRow,   3,
da80: 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20   1,        0},  
da90: 20 20 2f 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20    /* 3 */.      
daa0: 7d 3b 0a 20 20 20 20 20 20 56 64 62 65 4f 70 20  };.      VdbeOp 
dab0: 2a 61 4f 70 3b 0a 0a 20 20 20 20 20 20 61 4f 70  *aOp;..      aOp
dac0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
dad0: 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79  dOpList(v, Array
dae0: 53 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c 20 65  Size(endCode), e
daf0: 6e 64 43 6f 64 65 2c 20 69 4c 6e 29 3b 0a 20 20  ndCode, iLn);.  
db00: 20 20 20 20 69 66 28 20 61 4f 70 20 29 7b 0a 20      if( aOp ){. 
db10: 20 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70 32         aOp[0].p2
db20: 20 3d 20 2d 6d 78 45 72 72 3b 0a 20 20 20 20 20   = -mxErr;.     
db30: 20 20 20 61 4f 70 5b 32 5d 2e 70 34 74 79 70 65     aOp[2].p4type
db40: 20 3d 20 50 34 5f 53 54 41 54 49 43 3b 0a 20 20   = P4_STATIC;.  
db50: 20 20 20 20 20 20 61 4f 70 5b 32 5d 2e 70 34 2e        aOp[2].p4.
db60: 7a 20 3d 20 22 6f 6b 22 3b 0a 20 20 20 20 20 20  z = "ok";.      
db70: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
db80: 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  eak;.#endif /* S
db90: 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
dba0: 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 23  RITY_CHECK */..#
dbb0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
dbc0: 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a 0a 20 20  IT_UTF16.  /*.  
dbd0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63 6f  **   PRAGMA enco
dbe0: 64 69 6e 67 0a 20 20 2a 2a 20 20 20 50 52 41 47  ding.  **   PRAG
dbf0: 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 22 75  MA encoding = "u
dc00: 74 66 2d 38 22 7c 22 75 74 66 2d 31 36 22 7c 22  tf-8"|"utf-16"|"
dc10: 75 74 66 2d 31 36 6c 65 22 7c 22 75 74 66 2d 31  utf-16le"|"utf-1
dc20: 36 62 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  6be".  **.  ** I
dc30: 6e 20 69 74 73 20 66 69 72 73 74 20 66 6f 72 6d  n its first form
dc40: 2c 20 74 68 69 73 20 70 72 61 67 6d 61 20 72 65  , this pragma re
dc50: 74 75 72 6e 73 20 74 68 65 20 65 6e 63 6f 64 69  turns the encodi
dc60: 6e 67 20 6f 66 20 74 68 65 20 6d 61 69 6e 0a 20  ng of the main. 
dc70: 20 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 49 66   ** database. If
dc80: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
dc90: 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64   not initialized
dca0: 2c 20 69 74 20 69 73 20 69 6e 69 74 69 61 6c 69  , it is initiali
dcb0: 7a 65 64 20 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20  zed now..  **.  
dcc0: 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  ** The second fo
dcd0: 72 6d 20 6f 66 20 74 68 69 73 20 70 72 61 67 6d  rm of this pragm
dce0: 61 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20  a is a no-op if 
dcf0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
dd00: 65 20 66 69 6c 65 0a 20 20 2a 2a 20 68 61 73 20  e file.  ** has 
dd10: 6e 6f 74 20 61 6c 72 65 61 64 79 20 62 65 65 6e  not already been
dd20: 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 6e   initialized. In
dd30: 20 74 68 69 73 20 63 61 73 65 20 69 74 20 73 65   this case it se
dd40: 74 73 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20  ts the default. 
dd50: 20 2a 2a 20 65 6e 63 6f 64 69 6e 67 20 74 68 61   ** encoding tha
dd60: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66  t will be used f
dd70: 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  or the main data
dd80: 62 61 73 65 20 66 69 6c 65 20 69 66 20 61 20 6e  base file if a n
dd90: 65 77 20 66 69 6c 65 0a 20 20 2a 2a 20 69 73 20  ew file.  ** is 
dda0: 63 72 65 61 74 65 64 2e 20 49 66 20 61 6e 20 65  created. If an e
ddb0: 78 69 73 74 69 6e 67 20 6d 61 69 6e 20 64 61 74  xisting main dat
ddc0: 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 6f 70  abase file is op
ddd0: 65 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 20  ened, then the. 
dde0: 20 2a 2a 20 64 65 66 61 75 6c 74 20 74 65 78 74   ** default text
ddf0: 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20 74 68   encoding for th
de00: 65 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  e existing datab
de10: 61 73 65 20 69 73 20 75 73 65 64 2e 0a 20 20 2a  ase is used..  *
de20: 2a 20 0a 20 20 2a 2a 20 49 6e 20 61 6c 6c 20 63  * .  ** In all c
de30: 61 73 65 73 20 6e 65 77 20 64 61 74 61 62 61 73  ases new databas
de40: 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
de50: 20 74 68 65 20 41 54 54 41 43 48 20 63 6f 6d 6d   the ATTACH comm
de60: 61 6e 64 20 61 72 65 0a 20 20 2a 2a 20 63 72 65  and are.  ** cre
de70: 61 74 65 64 20 74 6f 20 75 73 65 20 74 68 65 20  ated to use the 
de80: 73 61 6d 65 20 64 65 66 61 75 6c 74 20 74 65 78  same default tex
de90: 74 20 65 6e 63 6f 64 69 6e 67 20 61 73 20 74 68  t encoding as th
dea0: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e  e main database.
deb0: 20 49 66 0a 20 20 2a 2a 20 74 68 65 20 6d 61 69   If.  ** the mai
dec0: 6e 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e  n database has n
ded0: 6f 74 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  ot been initiali
dee0: 7a 65 64 20 61 6e 64 2f 6f 72 20 63 72 65 61 74  zed and/or creat
def0: 65 64 20 77 68 65 6e 20 41 54 54 41 43 48 0a 20  ed when ATTACH. 
df00: 20 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64 2c   ** is executed,
df10: 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20 62 65   this is done be
df20: 66 6f 72 65 20 74 68 65 20 41 54 54 41 43 48 20  fore the ATTACH 
df30: 6f 70 65 72 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a  operation..  **.
df40: 20 20 2a 2a 20 49 6e 20 74 68 65 20 73 65 63 6f    ** In the seco
df50: 6e 64 20 66 6f 72 6d 20 74 68 69 73 20 70 72 61  nd form this pra
df60: 67 6d 61 20 73 65 74 73 20 74 68 65 20 74 65 78  gma sets the tex
df70: 74 20 65 6e 63 6f 64 69 6e 67 20 74 6f 20 62 65  t encoding to be
df80: 20 75 73 65 64 20 69 6e 0a 20 20 2a 2a 20 6e 65   used in.  ** ne
df90: 77 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  w database files
dfa0: 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74   created using t
dfb0: 68 69 73 20 64 61 74 61 62 61 73 65 20 68 61 6e  his database han
dfc0: 64 6c 65 2e 20 49 74 20 69 73 20 6f 6e 6c 79 0a  dle. It is only.
dfd0: 20 20 2a 2a 20 75 73 65 66 75 6c 20 69 66 20 69    ** useful if i
dfe0: 6e 76 6f 6b 65 64 20 69 6d 6d 65 64 69 61 74 65  nvoked immediate
dff0: 6c 79 20 61 66 74 65 72 20 74 68 65 20 6d 61 69  ly after the mai
e000: 6e 20 64 61 74 61 62 61 73 65 20 69 0a 20 20 2a  n database i.  *
e010: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
e020: 5f 45 4e 43 4f 44 49 4e 47 3a 20 7b 0a 20 20 20  _ENCODING: {.   
e030: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74   static const st
e040: 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 7b 0a 20  ruct EncName {. 
e050: 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65       char *zName
e060: 3b 0a 20 20 20 20 20 20 75 38 20 65 6e 63 3b 0a  ;.      u8 enc;.
e070: 20 20 20 20 7d 20 65 6e 63 6e 61 6d 65 73 5b 5d      } encnames[]
e080: 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 55 54   = {.      { "UT
e090: 46 38 22 2c 20 20 20 20 20 53 51 4c 49 54 45 5f  F8",     SQLITE_
e0a0: 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c 0a 20  UTF8        },. 
e0b0: 20 20 20 20 20 7b 20 22 55 54 46 2d 38 22 2c 20       { "UTF-8", 
e0c0: 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20     SQLITE_UTF8  
e0d0: 20 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73        },  /* Mus
e0e0: 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 31 5d  t be element [1]
e0f0: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46   */.      { "UTF
e100: 2d 31 36 6c 65 22 2c 20 53 51 4c 49 54 45 5f 55  -16le", SQLITE_U
e110: 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 20 20 2f  TF16LE     },  /
e120: 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e  * Must be elemen
e130: 74 20 5b 32 5d 20 2a 2f 0a 20 20 20 20 20 20 7b  t [2] */.      {
e140: 20 22 55 54 46 2d 31 36 62 65 22 2c 20 53 51 4c   "UTF-16be", SQL
e150: 49 54 45 5f 55 54 46 31 36 42 45 20 20 20 20 20  ITE_UTF16BE     
e160: 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65  },  /* Must be e
e170: 6c 65 6d 65 6e 74 20 5b 33 5d 20 2a 2f 0a 20 20  lement [3] */.  
e180: 20 20 20 20 7b 20 22 55 54 46 31 36 6c 65 22 2c      { "UTF16le",
e190: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45    SQLITE_UTF16LE
e1a0: 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
e1b0: 22 55 54 46 31 36 62 65 22 2c 20 20 53 51 4c 49  "UTF16be",  SQLI
e1c0: 54 45 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d  TE_UTF16BE     }
e1d0: 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31  ,.      { "UTF-1
e1e0: 36 22 2c 20 20 20 30 20 20 20 20 20 20 20 20 20  6",   0         
e1f0: 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53           }, /* S
e200: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
e210: 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54  E */.      { "UT
e220: 46 31 36 22 2c 20 20 20 20 30 20 20 20 20 20 20  F16",    0      
e230: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f              }, /
e240: 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  * SQLITE_UTF16NA
e250: 54 49 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20  TIVE */.      { 
e260: 30 2c 20 30 20 7d 0a 20 20 20 20 7d 3b 0a 20 20  0, 0 }.    };.  
e270: 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45    const struct E
e280: 6e 63 4e 61 6d 65 20 2a 70 45 6e 63 3b 0a 20 20  ncName *pEnc;.  
e290: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
e2a0: 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41 20 65      /* "PRAGMA e
e2b0: 6e 63 6f 64 69 6e 67 22 20 2a 2f 0a 20 20 20 20  ncoding" */.    
e2c0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 52 65 61    if( sqlite3Rea
e2d0: 64 53 63 68 65 6d 61 28 70 50 61 72 73 65 29 20  dSchema(pParse) 
e2e0: 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75  ) goto pragma_ou
e2f0: 74 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  t;.      assert(
e300: 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45   encnames[SQLITE
e310: 5f 55 54 46 38 5d 2e 65 6e 63 3d 3d 53 51 4c 49  _UTF8].enc==SQLI
e320: 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 20 20 20  TE_UTF8 );.     
e330: 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65   assert( encname
e340: 73 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  s[SQLITE_UTF16LE
e350: 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ].enc==SQLITE_UT
e360: 46 31 36 4c 45 20 29 3b 0a 20 20 20 20 20 20 61  F16LE );.      a
e370: 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b  ssert( encnames[
e380: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 5d 2e  SQLITE_UTF16BE].
e390: 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
e3a0: 36 42 45 20 29 3b 0a 20 20 20 20 20 20 72 65 74  6BE );.      ret
e3b0: 75 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c  urnSingleText(v,
e3c0: 20 22 65 6e 63 6f 64 69 6e 67 22 2c 20 65 6e 63   "encoding", enc
e3d0: 6e 61 6d 65 73 5b 45 4e 43 28 70 50 61 72 73 65  names[ENC(pParse
e3e0: 2d 3e 64 62 29 5d 2e 7a 4e 61 6d 65 29 3b 0a 20  ->db)].zName);. 
e3f0: 20 20 20 7d 65 6c 73 65 7b 20 20 20 20 20 20 20     }else{       
e400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e410: 20 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f   /* "PRAGMA enco
e420: 64 69 6e 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20  ding = XXX" */. 
e430: 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61       /* Only cha
e440: 6e 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  nge the value of
e450: 20 73 71 6c 69 74 65 2e 65 6e 63 20 69 66 20 74   sqlite.enc if t
e460: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
e470: 6c 65 20 69 73 20 6e 6f 74 0a 20 20 20 20 20 20  le is not.      
e480: 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  ** initialized. 
e490: 49 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  If the main data
e4a0: 62 61 73 65 20 65 78 69 73 74 73 2c 20 74 68 65  base exists, the
e4b0: 20 6e 65 77 20 73 71 6c 69 74 65 2e 65 6e 63 20   new sqlite.enc 
e4c0: 76 61 6c 75 65 0a 20 20 20 20 20 20 2a 2a 20 77  value.      ** w
e4d0: 69 6c 6c 20 62 65 20 6f 76 65 72 77 72 69 74 74  ill be overwritt
e4e0: 65 6e 20 77 68 65 6e 20 74 68 65 20 73 63 68 65  en when the sche
e4f0: 6d 61 20 69 73 20 6e 65 78 74 20 6c 6f 61 64 65  ma is next loade
e500: 64 2e 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f  d. If it does no
e510: 74 0a 20 20 20 20 20 20 2a 2a 20 61 6c 72 65 61  t.      ** alrea
e520: 64 79 20 65 78 69 73 74 73 2c 20 69 74 20 77 69  dy exists, it wi
e530: 6c 6c 20 62 65 20 63 72 65 61 74 65 64 20 74 6f  ll be created to
e540: 20 75 73 65 20 74 68 65 20 6e 65 77 20 65 6e 63   use the new enc
e550: 6f 64 69 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20  oding value..   
e560: 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
e570: 0a 20 20 20 20 20 20 20 20 21 28 44 62 48 61 73  .        !(DbHas
e580: 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20  Property(db, 0, 
e590: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29  DB_SchemaLoaded)
e5a0: 29 20 7c 7c 20 0a 20 20 20 20 20 20 20 20 44 62  ) || .        Db
e5b0: 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
e5c0: 30 2c 20 44 42 5f 45 6d 70 74 79 29 20 0a 20 20  0, DB_Empty) .  
e5d0: 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 66      ){.        f
e5e0: 6f 72 28 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65  or(pEnc=&encname
e5f0: 73 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d  s[0]; pEnc->zNam
e600: 65 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20  e; pEnc++){.    
e610: 20 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c        if( 0==sql
e620: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67  ite3StrICmp(zRig
e630: 68 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29  ht, pEnc->zName)
e640: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
e650: 53 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 3d  SCHEMA_ENC(db) =
e660: 20 45 4e 43 28 64 62 29 20 3d 0a 20 20 20 20 20   ENC(db) =.     
e670: 20 20 20 20 20 20 20 20 20 20 20 70 45 6e 63 2d             pEnc-
e680: 3e 65 6e 63 20 3f 20 70 45 6e 63 2d 3e 65 6e 63  >enc ? pEnc->enc
e690: 20 3a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e   : SQLITE_UTF16N
e6a0: 41 54 49 56 45 3b 0a 20 20 20 20 20 20 20 20 20  ATIVE;.         
e6b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
e6c0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
e6d0: 20 20 20 20 20 20 20 20 69 66 28 20 21 70 45 6e          if( !pEn
e6e0: 63 2d 3e 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20  c->zName ){.    
e6f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72        sqlite3Err
e700: 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 75  orMsg(pParse, "u
e710: 6e 73 75 70 70 6f 72 74 65 64 20 65 6e 63 6f 64  nsupported encod
e720: 69 6e 67 3a 20 25 73 22 2c 20 7a 52 69 67 68 74  ing: %s", zRight
e730: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
e740: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
e750: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
e760: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
e770: 46 31 36 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  F16 */..#ifndef 
e780: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
e790: 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d  MA_VERSION_PRAGM
e7a0: 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  AS.  /*.  **   P
e7b0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 73  RAGMA [schema.]s
e7c0: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 20 20  chema_version.  
e7d0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
e7e0: 65 6d 61 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73  ema.]schema_vers
e7f0: 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a  ion = <integer>.
e800: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    **.  **   PRAG
e810: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 75 73 65 72  MA [schema.]user
e820: 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20  _version.  **   
e830: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
e840: 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 3c  user_version = <
e850: 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20  integer>.  **.  
e860: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
e870: 65 6d 61 2e 5d 66 72 65 65 6c 69 73 74 5f 63 6f  ema.]freelist_co
e880: 75 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  unt.  **.  **   
e890: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
e8a0: 64 61 74 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a  data_version.  *
e8b0: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
e8c0: 5b 73 63 68 65 6d 61 2e 5d 61 70 70 6c 69 63 61  [schema.]applica
e8d0: 74 69 6f 6e 5f 69 64 0a 20 20 2a 2a 20 20 20 50  tion_id.  **   P
e8e0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61  RAGMA [schema.]a
e8f0: 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 20 3d 20  pplication_id = 
e900: 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20  <integer>.  **. 
e910: 20 2a 2a 20 54 68 65 20 70 72 61 67 6d 61 27 73   ** The pragma's
e920: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20   schema_version 
e930: 61 6e 64 20 75 73 65 72 5f 76 65 72 73 69 6f 6e  and user_version
e940: 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 65 74   are used to set
e950: 20 6f 72 20 67 65 74 0a 20 20 2a 2a 20 74 68 65   or get.  ** the
e960: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73 63   value of the sc
e970: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64  hema-version and
e980: 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 2c 20 72   user-version, r
e990: 65 73 70 65 63 74 69 76 65 6c 79 2e 20 42 6f 74  espectively. Bot
e9a0: 68 0a 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d  h.  ** the schem
e9b0: 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 74 68  a-version and th
e9c0: 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 61  e user-version a
e9d0: 72 65 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64  re 32-bit signed
e9e0: 20 69 6e 74 65 67 65 72 73 0a 20 20 2a 2a 20 73   integers.  ** s
e9f0: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74  tored in the dat
ea00: 61 62 61 73 65 20 68 65 61 64 65 72 2e 0a 20 20  abase header..  
ea10: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 63 68 65  **.  ** The sche
ea20: 6d 61 2d 63 6f 6f 6b 69 65 20 69 73 20 75 73 75  ma-cookie is usu
ea30: 61 6c 6c 79 20 6f 6e 6c 79 20 6d 61 6e 69 70 75  ally only manipu
ea40: 6c 61 74 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79  lated internally
ea50: 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74 0a 20   by SQLite. It. 
ea60: 20 2a 2a 20 69 73 20 69 6e 63 72 65 6d 65 6e 74   ** is increment
ea70: 65 64 20 62 79 20 53 51 4c 69 74 65 20 77 68 65  ed by SQLite whe
ea80: 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
ea90: 73 65 20 73 63 68 65 6d 61 20 69 73 20 6d 6f 64  se schema is mod
eaa0: 69 66 69 65 64 20 28 62 79 0a 20 20 2a 2a 20 63  ified (by.  ** c
eab0: 72 65 61 74 69 6e 67 20 6f 72 20 64 72 6f 70 70  reating or dropp
eac0: 69 6e 67 20 61 20 74 61 62 6c 65 20 6f 72 20 69  ing a table or i
ead0: 6e 64 65 78 29 2e 20 54 68 65 20 73 63 68 65 6d  ndex). The schem
eae0: 61 20 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65  a version is use
eaf0: 64 20 62 79 0a 20 20 2a 2a 20 53 51 4c 69 74 65  d by.  ** SQLite
eb00: 20 65 61 63 68 20 74 69 6d 65 20 61 20 71 75 65   each time a que
eb10: 72 79 20 69 73 20 65 78 65 63 75 74 65 64 20 74  ry is executed t
eb20: 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68  o ensure that th
eb30: 65 20 69 6e 74 65 72 6e 61 6c 20 63 61 63 68 65  e internal cache
eb40: 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 73 63 68  .  ** of the sch
eb50: 65 6d 61 20 75 73 65 64 20 77 68 65 6e 20 63 6f  ema used when co
eb60: 6d 70 69 6c 69 6e 67 20 74 68 65 20 53 51 4c 20  mpiling the SQL 
eb70: 71 75 65 72 79 20 6d 61 74 63 68 65 73 20 74 68  query matches th
eb80: 65 20 73 63 68 65 6d 61 20 6f 66 0a 20 20 2a 2a  e schema of.  **
eb90: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 67   the database ag
eba0: 61 69 6e 73 74 20 77 68 69 63 68 20 74 68 65 20  ainst which the 
ebb0: 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 20 69  compiled query i
ebc0: 73 20 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75  s actually execu
ebd0: 74 65 64 2e 0a 20 20 2a 2a 20 53 75 62 76 65 72  ted..  ** Subver
ebe0: 74 69 6e 67 20 74 68 69 73 20 6d 65 63 68 61 6e  ting this mechan
ebf0: 69 73 6d 20 62 79 20 75 73 69 6e 67 20 22 50 52  ism by using "PR
ec00: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
ec10: 69 6f 6e 22 20 74 6f 20 6d 6f 64 69 66 79 0a 20  ion" to modify. 
ec20: 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76   ** the schema-v
ec30: 65 72 73 69 6f 6e 20 69 73 20 70 6f 74 65 6e 74  ersion is potent
ec40: 69 61 6c 6c 79 20 64 61 6e 67 65 72 6f 75 73 20  ially dangerous 
ec50: 61 6e 64 20 6d 61 79 20 6c 65 61 64 20 74 6f 20  and may lead to 
ec60: 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 63 72 61  program.  ** cra
ec70: 73 68 65 73 20 6f 72 20 64 61 74 61 62 61 73 65  shes or database
ec80: 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20 55 73 65   corruption. Use
ec90: 20 77 69 74 68 20 63 61 75 74 69 6f 6e 21 0a 20   with caution!. 
eca0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 75 73 65   **.  ** The use
ecb0: 72 2d 76 65 72 73 69 6f 6e 20 69 73 20 6e 6f 74  r-version is not
ecc0: 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79   used internally
ecd0: 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74 20 6d   by SQLite. It m
ece0: 61 79 20 62 65 20 75 73 65 64 20 62 79 0a 20 20  ay be used by.  
ecf0: 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  ** applications 
ed00: 66 6f 72 20 61 6e 79 20 70 75 72 70 6f 73 65 2e  for any purpose.
ed10: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
ed20: 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55  gTyp_HEADER_VALU
ed30: 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 43 6f  E: {.    int iCo
ed40: 6f 6b 69 65 20 3d 20 70 50 72 61 67 6d 61 2d 3e  okie = pPragma->
ed50: 69 41 72 67 3b 20 20 2f 2a 20 57 68 69 63 68 20  iArg;  /* Which 
ed60: 63 6f 6f 6b 69 65 20 74 6f 20 72 65 61 64 20 6f  cookie to read o
ed70: 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 20 20 73  r write */.    s
ed80: 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
ed90: 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20  ree(v, iDb);.   
eda0: 20 69 66 28 20 7a 52 69 67 68 74 20 26 26 20 28   if( zRight && (
edb0: 70 50 72 61 67 6d 61 2d 3e 6d 50 72 61 67 46 6c  pPragma->mPragFl
edc0: 61 67 20 26 20 50 72 61 67 46 6c 61 67 5f 52 65  ag & PragFlag_Re
edd0: 61 64 4f 6e 6c 79 29 3d 3d 30 20 29 7b 0a 20 20  adOnly)==0 ){.  
ede0: 20 20 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65      /* Write the
edf0: 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69   specified cooki
ee00: 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20  e value */.     
ee10: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
ee20: 62 65 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f 6b  beOpList setCook
ee30: 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20  ie[] = {.       
ee40: 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f   { OP_Transactio
ee50: 6e 2c 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d  n,    0,  1,  0}
ee60: 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  ,    /* 0 */.   
ee70: 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f       { OP_SetCoo
ee80: 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 30 2c  kie,      0,  0,
ee90: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f    0},    /* 1 */
eea0: 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20  .      };.      
eeb0: 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20 20  VdbeOp *aOp;.   
eec0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 56 65     sqlite3VdbeVe
eed0: 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52 65 71 75  rifyNoMallocRequ
eee0: 69 72 65 64 28 76 2c 20 41 72 72 61 79 53 69 7a  ired(v, ArraySiz
eef0: 65 28 73 65 74 43 6f 6f 6b 69 65 29 29 3b 0a 20  e(setCookie));. 
ef00: 20 20 20 20 20 61 4f 70 20 3d 20 73 71 6c 69 74       aOp = sqlit
ef10: 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  e3VdbeAddOpList(
ef20: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65 74  v, ArraySize(set
ef30: 43 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b  Cookie), setCook
ef40: 69 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66  ie, 0);.      if
ef50: 28 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f  ( ONLY_IF_REALLO
ef60: 43 5f 53 54 52 45 53 53 28 61 4f 70 3d 3d 30 29  C_STRESS(aOp==0)
ef70: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
ef80: 61 4f 70 5b 30 5d 2e 70 31 20 3d 20 69 44 62 3b  aOp[0].p1 = iDb;
ef90: 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70 31  .      aOp[1].p1
efa0: 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 61 4f   = iDb;.      aO
efb0: 70 5b 31 5d 2e 70 32 20 3d 20 69 43 6f 6f 6b 69  p[1].p2 = iCooki
efc0: 65 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e  e;.      aOp[1].
efd0: 70 33 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69  p3 = sqlite3Atoi
efe0: 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 65  (zRight);.    }e
eff0: 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52 65  lse{.      /* Re
f000: 61 64 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ad the specified
f010: 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f   cookie value */
f020: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
f030: 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 72  nst VdbeOpList r
f040: 65 61 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a  eadCookie[] = {.
f050: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61          { OP_Tra
f060: 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 20 30 2c  nsaction,     0,
f070: 20 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    0,  0},    /* 
f080: 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f  0 */.        { O
f090: 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20  P_ReadCookie,   
f0a0: 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20     0,  1,  0},  
f0b0: 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20    /* 1 */.      
f0c0: 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77    { OP_ResultRow
f0d0: 2c 20 20 20 20 20 20 20 31 2c 20 20 31 2c 20 20  ,       1,  1,  
f0e0: 30 7d 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  0}.      };.    
f0f0: 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20    VdbeOp *aOp;. 
f100: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f110: 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52 65  VerifyNoMallocRe
f120: 71 75 69 72 65 64 28 76 2c 20 41 72 72 61 79 53  quired(v, ArrayS
f130: 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65 29 29  ize(readCookie))
f140: 3b 0a 20 20 20 20 20 20 61 4f 70 20 3d 20 73 71  ;.      aOp = sq
f150: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
f160: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
f170: 72 65 61 64 43 6f 6f 6b 69 65 29 2c 72 65 61 64  readCookie),read
f180: 43 6f 6f 6b 69 65 2c 30 29 3b 0a 20 20 20 20 20  Cookie,0);.     
f190: 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52 45 41   if( ONLY_IF_REA
f1a0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f 70 3d  LLOC_STRESS(aOp=
f1b0: 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  =0) ) break;.   
f1c0: 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20 3d 20 69     aOp[0].p1 = i
f1d0: 44 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d  Db;.      aOp[1]
f1e0: 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20  .p1 = iDb;.     
f1f0: 20 61 4f 70 5b 31 5d 2e 70 33 20 3d 20 69 43 6f   aOp[1].p3 = iCo
f200: 6f 6b 69 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  okie;.      sqli
f210: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
f220: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  s(v, 1);.      s
f230: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
f240: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
f250: 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20  ME_NAME, zLeft, 
f260: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
f270: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
f280: 56 64 62 65 52 65 75 73 61 62 6c 65 28 76 29 3b  VdbeReusable(v);
f290: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
f2a0: 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ak;.#endif /* SQ
f2b0: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
f2c0: 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53  _VERSION_PRAGMAS
f2d0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
f2e0: 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
f2f0: 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 20 20 2f  OPTION_DIAGS.  /
f300: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
f310: 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 0a  compile_options.
f320: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
f330: 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 61 6c   the names of al
f340: 6c 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  l compile-time o
f350: 70 74 69 6f 6e 73 20 75 73 65 64 20 69 6e 20 74  ptions used in t
f360: 68 69 73 20 62 75 69 6c 64 2c 0a 20 20 2a 2a 20  his build,.  ** 
f370: 6f 6e 65 20 6f 70 74 69 6f 6e 20 70 65 72 20 72  one option per r
f380: 6f 77 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ow..  */.  case 
f390: 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45 5f  PragTyp_COMPILE_
f3a0: 4f 50 54 49 4f 4e 53 3a 20 7b 0a 20 20 20 20 69  OPTIONS: {.    i
f3b0: 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 63 6f  nt i = 0;.    co
f3c0: 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 74 3b 0a  nst char *zOpt;.
f3d0: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
f3e0: 20 3d 20 31 3b 0a 20 20 20 20 73 65 74 4f 6e 65   = 1;.    setOne
f3f0: 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 22 63  ColumnName(v, "c
f400: 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 22 29 3b  ompile_option");
f410: 0a 20 20 20 20 77 68 69 6c 65 28 20 28 7a 4f 70  .    while( (zOp
f420: 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70  t = sqlite3_comp
f430: 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 2b  ileoption_get(i+
f440: 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  +))!=0 ){.      
f450: 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53  sqlite3VdbeLoadS
f460: 74 72 69 6e 67 28 76 2c 20 31 2c 20 7a 4f 70 74  tring(v, 1, zOpt
f470: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
f480: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
f490: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
f4a0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  );.    }.    sql
f4b0: 69 74 65 33 56 64 62 65 52 65 75 73 61 62 6c 65  ite3VdbeReusable
f4c0: 28 76 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  (v);.  }.  break
f4d0: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
f4e0: 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f  TE_OMIT_COMPILEO
f4f0: 50 54 49 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a  PTION_DIAGS */..
f500: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
f510: 4d 49 54 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a  MIT_WAL.  /*.  *
f520: 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  *   PRAGMA [sche
f530: 6d 61 2e 5d 77 61 6c 5f 63 68 65 63 6b 70 6f 69  ma.]wal_checkpoi
f540: 6e 74 20 3d 20 70 61 73 73 69 76 65 7c 66 75 6c  nt = passive|ful
f550: 6c 7c 72 65 73 74 61 72 74 7c 74 72 75 6e 63 61  l|restart|trunca
f560: 74 65 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 68 65  te.  **.  ** Che
f570: 63 6b 70 6f 69 6e 74 20 74 68 65 20 64 61 74 61  ckpoint the data
f580: 62 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  base..  */.  cas
f590: 65 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48  e PragTyp_WAL_CH
f5a0: 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20  ECKPOINT: {.    
f5b0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
f5c0: 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22  r *azCol[] = { "
f5d0: 62 75 73 79 22 2c 20 22 6c 6f 67 22 2c 20 22 63  busy", "log", "c
f5e0: 68 65 63 6b 70 6f 69 6e 74 65 64 22 20 7d 3b 0a  heckpointed" };.
f5f0: 20 20 20 20 69 6e 74 20 69 42 74 20 3d 20 28 70      int iBt = (p
f600: 49 64 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c 49 54  Id2->z?iDb:SQLIT
f610: 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 29 3b  E_MAX_ATTACHED);
f620: 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d  .    int eMode =
f630: 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
f640: 4e 54 5f 50 41 53 53 49 56 45 3b 0a 20 20 20 20  NT_PASSIVE;.    
f650: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
f660: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
f670: 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  trICmp(zRight, "
f680: 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20  full")==0 ){.   
f690: 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c       eMode = SQL
f6a0: 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46  ITE_CHECKPOINT_F
f6b0: 55 4c 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ULL;.      }else
f6c0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
f6d0: 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 72 65 73  Cmp(zRight, "res
f6e0: 74 61 72 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20  tart")==0 ){.   
f6f0: 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c       eMode = SQL
f700: 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52  ITE_CHECKPOINT_R
f710: 45 53 54 41 52 54 3b 0a 20 20 20 20 20 20 7d 65  ESTART;.      }e
f720: 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53  lse if( sqlite3S
f730: 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  trICmp(zRight, "
f740: 74 72 75 6e 63 61 74 65 22 29 3d 3d 30 20 29 7b  truncate")==0 ){
f750: 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  .        eMode =
f760: 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
f770: 4e 54 5f 54 52 55 4e 43 41 54 45 3b 0a 20 20 20  NT_TRUNCATE;.   
f780: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
f790: 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73  etAllColumnNames
f7a0: 28 76 2c 20 33 2c 20 61 7a 43 6f 6c 29 3b 20 20  (v, 3, azCol);  
f7b0: 61 73 73 65 72 74 28 20 33 3d 3d 41 72 72 61 79  assert( 3==Array
f7c0: 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20  Size(azCol) );. 
f7d0: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
f7e0: 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 3;.    sqlite3
f7f0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
f800: 5f 43 68 65 63 6b 70 6f 69 6e 74 2c 20 69 42 74  _Checkpoint, iBt
f810: 2c 20 65 4d 6f 64 65 2c 20 31 29 3b 0a 20 20 20  , eMode, 1);.   
f820: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
f830: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
f840: 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 7d 0a 20  ow, 1, 3);.  }. 
f850: 20 62 72 65 61 6b 3b 0a 0a 20 20 2f 2a 0a 20 20   break;..  /*.  
f860: 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61 6c 5f  **   PRAGMA wal_
f870: 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 0a 20  autocheckpoint. 
f880: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61 6c   **   PRAGMA wal
f890: 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 20  _autocheckpoint 
f8a0: 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f  = N.  **.  ** Co
f8b0: 6e 66 69 67 75 72 65 20 61 20 64 61 74 61 62 61  nfigure a databa
f8c0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  se connection to
f8d0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
f8e0: 68 65 63 6b 70 6f 69 6e 74 20 61 20 64 61 74 61  heckpoint a data
f8f0: 62 61 73 65 0a 20 20 2a 2a 20 61 66 74 65 72 20  base.  ** after 
f900: 61 63 63 75 6d 75 6c 61 74 69 6e 67 20 4e 20 66  accumulating N f
f910: 72 61 6d 65 73 20 69 6e 20 74 68 65 20 6c 6f 67  rames in the log
f920: 2e 20 4f 72 20 71 75 65 72 79 20 66 6f 72 20 74  . Or query for t
f930: 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  he current value
f940: 0a 20 20 2a 2a 20 6f 66 20 4e 2e 0a 20 20 2a 2f  .  ** of N..  */
f950: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
f960: 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f 49  WAL_AUTOCHECKPOI
f970: 4e 54 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  NT: {.    if( zR
f980: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71  ight ){.      sq
f990: 6c 69 74 65 33 5f 77 61 6c 5f 61 75 74 6f 63 68  lite3_wal_autoch
f9a0: 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 73 71 6c  eckpoint(db, sql
f9b0: 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
f9c0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  );.    }.    ret
f9d0: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20  urnSingleInt(v, 
f9e0: 22 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f  "wal_autocheckpo
f9f0: 69 6e 74 22 2c 20 0a 20 20 20 20 20 20 20 64 62  int", .       db
fa00: 2d 3e 78 57 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d  ->xWalCallback==
fa10: 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c  sqlite3WalDefaul
fa20: 74 48 6f 6f 6b 20 3f 20 0a 20 20 20 20 20 20 20  tHook ? .       
fa30: 20 20 20 20 53 51 4c 49 54 45 5f 50 54 52 5f 54      SQLITE_PTR_T
fa40: 4f 5f 49 4e 54 28 64 62 2d 3e 70 57 61 6c 41 72  O_INT(db->pWalAr
fa50: 67 29 20 3a 20 30 29 3b 0a 20 20 7d 0a 20 20 62  g) : 0);.  }.  b
fa60: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  reak;.#endif..  
fa70: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
fa80: 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20  shrink_memory.  
fa90: 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e  **.  ** IMPLEMEN
faa0: 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 33 34  TATION-OF: R-234
fab0: 34 35 2d 34 36 31 30 39 20 54 68 69 73 20 70 72  45-46109 This pr
fac0: 61 67 6d 61 20 63 61 75 73 65 73 20 74 68 65 20  agma causes the 
fad0: 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 63 6f  database.  ** co
fae0: 6e 6e 65 63 74 69 6f 6e 20 6f 6e 20 77 68 69 63  nnection on whic
faf0: 68 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 20  h it is invoked 
fb00: 74 6f 20 66 72 65 65 20 75 70 20 61 73 20 6d 75  to free up as mu
fb10: 63 68 20 6d 65 6d 6f 72 79 20 61 73 20 69 74 0a  ch memory as it.
fb20: 20 20 2a 2a 20 63 61 6e 2c 20 62 79 20 63 61 6c    ** can, by cal
fb30: 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 64 62 5f  ling sqlite3_db_
fb40: 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29  release_memory()
fb50: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
fb60: 61 67 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d  agTyp_SHRINK_MEM
fb70: 4f 52 59 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74  ORY: {.    sqlit
fb80: 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65  e3_db_release_me
fb90: 6d 6f 72 79 28 64 62 29 3b 0a 20 20 20 20 62 72  mory(db);.    br
fba0: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
fbb0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73   **   PRAGMA bus
fbc0: 79 5f 74 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20  y_timeout.  **  
fbd0: 20 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d   PRAGMA busy_tim
fbe0: 65 6f 75 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20  eout = N.  **.  
fbf0: 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f  ** Call sqlite3_
fc00: 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c  busy_timeout(db,
fc10: 20 4e 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65   N).  Return the
fc20: 20 63 75 72 72 65 6e 74 20 74 69 6d 65 6f 75 74   current timeout
fc30: 20 76 61 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f   value.  ** if o
fc40: 6e 65 20 69 73 20 73 65 74 2e 20 20 49 66 20 6e  ne is set.  If n
fc50: 6f 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 6f  o busy handler o
fc60: 72 20 61 20 64 69 66 66 65 72 65 6e 74 20 62 75  r a different bu
fc70: 73 79 20 68 61 6e 64 6c 65 72 20 69 73 20 73 65  sy handler is se
fc80: 74 0a 20 20 2a 2a 20 74 68 65 6e 20 30 20 69 73  t.  ** then 0 is
fc90: 20 72 65 74 75 72 6e 65 64 2e 20 20 53 65 74 74   returned.  Sett
fca0: 69 6e 67 20 74 68 65 20 62 75 73 79 5f 74 69 6d  ing the busy_tim
fcb0: 65 6f 75 74 20 74 6f 20 30 20 6f 72 20 6e 65 67  eout to 0 or neg
fcc0: 61 74 69 76 65 0a 20 20 2a 2a 20 64 69 73 61 62  ative.  ** disab
fcd0: 6c 65 73 20 74 68 65 20 74 69 6d 65 6f 75 74 2e  les the timeout.
fce0: 0a 20 20 2a 2f 0a 20 20 2f 2a 63 61 73 65 20 50  .  */.  /*case P
fcf0: 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45  ragTyp_BUSY_TIME
fd00: 4f 55 54 2a 2f 20 64 65 66 61 75 6c 74 3a 20 7b  OUT*/ default: {
fd10: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72  .    assert( pPr
fd20: 61 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 3d 3d  agma->ePragTyp==
fd30: 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d  PragTyp_BUSY_TIM
fd40: 45 4f 55 54 20 29 3b 0a 20 20 20 20 69 66 28 20  EOUT );.    if( 
fd50: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
fd60: 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d  sqlite3_busy_tim
fd70: 65 6f 75 74 28 64 62 2c 20 73 71 6c 69 74 65 33  eout(db, sqlite3
fd80: 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20  Atoi(zRight));. 
fd90: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53     }.    returnS
fda0: 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 74 69 6d  ingleInt(v, "tim
fdb0: 65 6f 75 74 22 2c 20 20 64 62 2d 3e 62 75 73 79  eout",  db->busy
fdc0: 54 69 6d 65 6f 75 74 29 3b 0a 20 20 20 20 62 72  Timeout);.    br
fdd0: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
fde0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66   **   PRAGMA sof
fdf0: 74 5f 68 65 61 70 5f 6c 69 6d 69 74 0a 20 20 2a  t_heap_limit.  *
fe00: 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f  *   PRAGMA soft_
fe10: 68 65 61 70 5f 6c 69 6d 69 74 20 3d 20 4e 0a 20  heap_limit = N. 
fe20: 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45   **.  ** IMPLEME
fe30: 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 36  NTATION-OF: R-26
fe40: 33 34 33 2d 34 35 39 33 30 20 54 68 69 73 20 70  343-45930 This p
fe50: 72 61 67 6d 61 20 69 6e 76 6f 6b 65 73 20 74 68  ragma invokes th
fe60: 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 73  e.  ** sqlite3_s
fe70: 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34  oft_heap_limit64
fe80: 28 29 20 69 6e 74 65 72 66 61 63 65 20 77 69 74  () interface wit
fe90: 68 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 4e  h the argument N
fea0: 2c 20 69 66 20 4e 20 69 73 0a 20 20 2a 2a 20 73  , if N is.  ** s
feb0: 70 65 63 69 66 69 65 64 20 61 6e 64 20 69 73 20  pecified and is 
fec0: 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69  a non-negative i
fed0: 6e 74 65 67 65 72 2e 0a 20 20 2a 2a 20 49 4d 50  nteger..  ** IMP
fee0: 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
fef0: 52 2d 36 34 34 35 31 2d 30 37 31 36 33 20 54 68  R-64451-07163 Th
ff00: 65 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  e soft_heap_limi
ff10: 74 20 70 72 61 67 6d 61 20 61 6c 77 61 79 73 0a  t pragma always.
ff20: 20 20 2a 2a 20 72 65 74 75 72 6e 73 20 74 68 65    ** returns the
ff30: 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 74 68   same integer th
ff40: 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75  at would be retu
ff50: 72 6e 65 64 20 62 79 20 74 68 65 0a 20 20 2a 2a  rned by the.  **
ff60: 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65   sqlite3_soft_he
ff70: 61 70 5f 6c 69 6d 69 74 36 34 28 2d 31 29 20 43  ap_limit64(-1) C
ff80: 2d 6c 61 6e 67 75 61 67 65 20 66 75 6e 63 74 69  -language functi
ff90: 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  on..  */.  case 
ffa0: 50 72 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41  PragTyp_SOFT_HEA
ffb0: 50 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 73  P_LIMIT: {.    s
ffc0: 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a  qlite3_int64 N;.
ffd0: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 26      if( zRight &
ffe0: 26 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65  & sqlite3DecOrHe
fff0: 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26  xToI64(zRight, &
10000 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  N)==SQLITE_OK ){
10010 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
10020 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34  oft_heap_limit64
10030 28 4e 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  (N);.    }.    r
10040 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76  eturnSingleInt(v
10050 2c 20 22 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  , "soft_heap_lim
10060 69 74 22 2c 20 20 73 71 6c 69 74 65 33 5f 73 6f  it",  sqlite3_so
10070 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28  ft_heap_limit64(
10080 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  -1));.    break;
10090 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
100a0 20 20 50 52 41 47 4d 41 20 74 68 72 65 61 64 73    PRAGMA threads
100b0 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74  .  **   PRAGMA t
100c0 68 72 65 61 64 73 20 3d 20 4e 0a 20 20 2a 2a 0a  hreads = N.  **.
100d0 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 74    ** Configure t
100e0 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
100f0 72 20 6f 66 20 77 6f 72 6b 65 72 20 74 68 72 65  r of worker thre
10100 61 64 73 2e 20 20 52 65 74 75 72 6e 20 74 68 65  ads.  Return the
10110 20 6e 65 77 0a 20 20 2a 2a 20 6d 61 78 69 6d 75   new.  ** maximu
10120 6d 2c 20 77 68 69 63 68 20 6d 69 67 68 74 20 62  m, which might b
10130 65 20 6c 65 73 73 20 74 68 61 6e 20 72 65 71 75  e less than requ
10140 65 73 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61  ested..  */.  ca
10150 73 65 20 50 72 61 67 54 79 70 5f 54 48 52 45 41  se PragTyp_THREA
10160 44 53 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  DS: {.    sqlite
10170 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69  3_int64 N;.    i
10180 66 28 20 7a 52 69 67 68 74 0a 20 20 20 20 20 26  f( zRight.     &
10190 26 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65  & sqlite3DecOrHe
101a0 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26  xToI64(zRight, &
101b0 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  N)==SQLITE_OK.  
101c0 20 20 20 26 26 20 4e 3e 3d 30 0a 20 20 20 20 29     && N>=0.    )
101d0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
101e0 6c 69 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45  limit(db, SQLITE
101f0 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48  _LIMIT_WORKER_TH
10200 52 45 41 44 53 2c 20 28 69 6e 74 29 28 4e 26 30  READS, (int)(N&0
10210 78 37 66 66 66 66 66 66 66 29 29 3b 0a 20 20 20  x7fffffff));.   
10220 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
10230 67 6c 65 49 6e 74 28 76 2c 20 22 74 68 72 65 61  gleInt(v, "threa
10240 64 73 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ds",.           
10250 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
10260 5f 6c 69 6d 69 74 28 64 62 2c 20 53 51 4c 49 54  _limit(db, SQLIT
10270 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54  E_LIMIT_WORKER_T
10280 48 52 45 41 44 53 2c 20 2d 31 29 29 3b 0a 20 20  HREADS, -1));.  
10290 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69    break;.  }..#i
102a0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
102b0 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e  _DEBUG) || defin
102c0 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
102d0 20 20 2f 2a 0a 20 20 2a 2a 20 52 65 70 6f 72 74    /*.  ** Report
102e0 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61   the current sta
102f0 74 65 20 6f 66 20 66 69 6c 65 20 6c 6f 67 73 20  te of file logs 
10300 66 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65  for all database
10310 73 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  s.  */.  case Pr
10320 61 67 54 79 70 5f 4c 4f 43 4b 5f 53 54 41 54 55  agTyp_LOCK_STATU
10330 53 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20  S: {.    static 
10340 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
10350 74 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20 3d  t azLockName[] =
10360 20 7b 0a 20 20 20 20 20 20 22 75 6e 6c 6f 63 6b   {.      "unlock
10370 65 64 22 2c 20 22 73 68 61 72 65 64 22 2c 20 22  ed", "shared", "
10380 72 65 73 65 72 76 65 64 22 2c 20 22 70 65 6e 64  reserved", "pend
10390 69 6e 67 22 2c 20 22 65 78 63 6c 75 73 69 76 65  ing", "exclusive
103a0 22 0a 20 20 20 20 7d 3b 0a 20 20 20 20 73 74 61  ".    };.    sta
103b0 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
103c0 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 64 61 74  azCol[] = { "dat
103d0 61 62 61 73 65 22 2c 20 22 73 74 61 74 75 73 22  abase", "status"
103e0 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   };.    int i;. 
103f0 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e     setAllColumnN
10400 61 6d 65 73 28 76 2c 20 32 2c 20 61 7a 43 6f 6c  ames(v, 2, azCol
10410 29 3b 20 61 73 73 65 72 74 28 20 32 3d 3d 41 72  ); assert( 2==Ar
10420 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29  raySize(azCol) )
10430 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
10440 65 6d 20 3d 20 32 3b 0a 20 20 20 20 66 6f 72 28  em = 2;.    for(
10450 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
10460 69 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65  i++){.      Btre
10470 65 20 2a 70 42 74 3b 0a 20 20 20 20 20 20 63 6f  e *pBt;.      co
10480 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 74 65  nst char *zState
10490 20 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20   = "unknown";.  
104a0 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20      int j;.     
104b0 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e   if( db->aDb[i].
104c0 7a 44 62 53 4e 61 6d 65 3d 3d 30 20 29 20 63 6f  zDbSName==0 ) co
104d0 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 70 42  ntinue;.      pB
104e0 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  t = db->aDb[i].p
104f0 42 74 3b 0a 20 20 20 20 20 20 69 66 28 20 70 42  Bt;.      if( pB
10500 74 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 42  t==0 || sqlite3B
10510 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3d 3d  treePager(pBt)==
10520 30 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 53 74  0 ){.        zSt
10530 61 74 65 20 3d 20 22 63 6c 6f 73 65 64 22 3b 0a  ate = "closed";.
10540 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
10550 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
10560 74 72 6f 6c 28 64 62 2c 20 69 20 3f 20 64 62 2d  trol(db, i ? db-
10570 3e 61 44 62 5b 69 5d 2e 7a 44 62 53 4e 61 6d 65  >aDb[i].zDbSName
10580 20 3a 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20   : 0, .         
10590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105a0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
105b0 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54 41  TE_FCNTL_LOCKSTA
105c0 54 45 2c 20 26 6a 29 3d 3d 53 51 4c 49 54 45 5f  TE, &j)==SQLITE_
105d0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 7a  OK ){.         z
105e0 53 74 61 74 65 20 3d 20 61 7a 4c 6f 63 6b 4e 61  State = azLockNa
105f0 6d 65 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 0a 20  me[j];.      }. 
10600 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10610 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20  MultiLoad(v, 1, 
10620 22 73 73 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d  "ss", db->aDb[i]
10630 2e 7a 44 62 53 4e 61 6d 65 2c 20 7a 53 74 61 74  .zDbSName, zStat
10640 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  e);.      sqlite
10650 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
10660 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
10670 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72  2);.    }.    br
10680 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
10690 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48  .#ifdef SQLITE_H
106a0 41 53 5f 43 4f 44 45 43 0a 20 20 63 61 73 65 20  AS_CODEC.  case 
106b0 50 72 61 67 54 79 70 5f 4b 45 59 3a 20 7b 0a 20  PragTyp_KEY: {. 
106c0 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 20     if( zRight ) 
106d0 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64  sqlite3_key_v2(d
106e0 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20  b, zDb, zRight, 
106f0 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
10700 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62 72  zRight));.    br
10710 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20  eak;.  }.  case 
10720 50 72 61 67 54 79 70 5f 52 45 4b 45 59 3a 20 7b  PragTyp_REKEY: {
10730 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
10740 29 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 5f  ) sqlite3_rekey_
10750 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67  v2(db, zDb, zRig
10760 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65  ht, sqlite3Strle
10770 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  n30(zRight));.  
10780 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63    break;.  }.  c
10790 61 73 65 20 50 72 61 67 54 79 70 5f 48 45 58 4b  ase PragTyp_HEXK
107a0 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  EY: {.    if( zR
107b0 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 75 38  ight ){.      u8
107c0 20 69 42 79 74 65 3b 0a 20 20 20 20 20 20 69 6e   iByte;.      in
107d0 74 20 69 3b 0a 20 20 20 20 20 20 63 68 61 72 20  t i;.      char 
107e0 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20 20 20 20 20  zKey[40];.      
107f0 66 6f 72 28 69 3d 30 2c 20 69 42 79 74 65 3d 30  for(i=0, iByte=0
10800 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 4b 65 79 29  ; i<sizeof(zKey)
10810 2a 32 20 26 26 20 73 71 6c 69 74 65 33 49 73 78  *2 && sqlite3Isx
10820 64 69 67 69 74 28 7a 52 69 67 68 74 5b 69 5d 29  digit(zRight[i])
10830 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
10840 69 42 79 74 65 20 3d 20 28 69 42 79 74 65 3c 3c  iByte = (iByte<<
10850 34 29 20 2b 20 73 71 6c 69 74 65 33 48 65 78 54  4) + sqlite3HexT
10860 6f 49 6e 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b  oInt(zRight[i]);
10870 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 69 26  .        if( (i&
10880 31 29 21 3d 30 20 29 20 7a 4b 65 79 5b 69 2f 32  1)!=0 ) zKey[i/2
10890 5d 20 3d 20 69 42 79 74 65 3b 0a 20 20 20 20 20  ] = iByte;.     
108a0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 7a 4c   }.      if( (zL
108b0 65 66 74 5b 33 5d 20 26 20 30 78 66 29 3d 3d 30  eft[3] & 0xf)==0
108c0 78 62 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  xb ){.        sq
108d0 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c  lite3_key_v2(db,
108e0 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29   zDb, zKey, i/2)
108f0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
10900 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
10910 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c  ekey_v2(db, zDb,
10920 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20   zKey, i/2);.   
10930 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
10940 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
10950 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
10960 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 20 7c  ITE_HAS_CODEC) |
10970 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
10980 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 29 0a 20  _ENABLE_CEROD). 
10990 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 41 43   case PragTyp_AC
109a0 54 49 56 41 54 45 5f 45 58 54 45 4e 53 49 4f 4e  TIVATE_EXTENSION
109b0 53 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b  S: if( zRight ){
109c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48  .#ifdef SQLITE_H
109d0 41 53 5f 43 4f 44 45 43 0a 20 20 20 20 69 66 28  AS_CODEC.    if(
109e0 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
109f0 28 7a 52 69 67 68 74 2c 20 22 73 65 65 2d 22 2c  (zRight, "see-",
10a00 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20   4)==0 ){.      
10a10 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65  sqlite3_activate
10a20 5f 73 65 65 28 26 7a 52 69 67 68 74 5b 34 5d 29  _see(&zRight[4])
10a30 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23  ;.    }.#endif.#
10a40 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
10a50 42 4c 45 5f 43 45 52 4f 44 0a 20 20 20 20 69 66  BLE_CEROD.    if
10a60 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  ( sqlite3StrNICm
10a70 70 28 7a 52 69 67 68 74 2c 20 22 63 65 72 6f 64  p(zRight, "cerod
10a80 2d 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20 20 20  -", 6)==0 ){.   
10a90 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76     sqlite3_activ
10aa0 61 74 65 5f 63 65 72 6f 64 28 26 7a 52 69 67 68  ate_cerod(&zRigh
10ab0 74 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  t[6]);.    }.#en
10ac0 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
10ad0 0a 23 65 6e 64 69 66 0a 0a 20 20 7d 20 2f 2a 20  .#endif..  } /* 
10ae0 45 6e 64 20 6f 66 20 74 68 65 20 50 52 41 47 4d  End of the PRAGM
10af0 41 20 73 77 69 74 63 68 20 2a 2f 0a 0a 70 72 61  A switch */..pra
10b00 67 6d 61 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74  gma_out:.  sqlit
10b10 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 4c 65  e3DbFree(db, zLe
10b20 66 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  ft);.  sqlite3Db
10b30 46 72 65 65 28 64 62 2c 20 7a 52 69 67 68 74 29  Free(db, zRight)
10b40 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ;.}..#endif /* S
10b50 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
10b60 41 20 2a 2f 0a                                   A */.