/ Hex Artifact Content
Login

Artifact 7a32fcc81f3c765621dba31a248dfbeb0342b569:


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 77 68 69 6c 65  ASK );.    while
1c00: 28 20 28 6e 2d 2d 29 20 3e 20 30 20 29 7b 0a 20  ( (n--) > 0 ){. 
1c10: 20 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 42       if( pDb->pB
1c20: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  t ){.        sql
1c30: 69 74 65 33 42 74 72 65 65 53 65 74 50 61 67 65  ite3BtreeSetPage
1c40: 72 46 6c 61 67 73 28 70 44 62 2d 3e 70 42 74 2c  rFlags(pDb->pBt,
1c50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c60: 20 20 28 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c    (pDb->safety_l
1c70: 65 76 65 6c 20 26 20 50 41 47 45 52 5f 53 59 4e  evel & PAGER_SYN
1c80: 43 48 52 4f 4e 4f 55 53 5f 4d 41 53 4b 29 0a 20  CHRONOUS_MASK). 
1c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca0: 20 20 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26    | (db->flags &
1cb0: 20 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53   PAGER_FLAGS_MAS
1cc0: 4b 29 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  K) );.      }.  
1cd0: 20 20 20 20 70 44 62 2b 2b 3b 0a 20 20 20 20 7d      pDb++;.    }
1ce0: 0a 20 20 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20 64  .  }.}.#else.# d
1cf0: 65 66 69 6e 65 20 73 65 74 41 6c 6c 50 61 67 65  efine setAllPage
1d00: 72 46 6c 61 67 73 28 58 29 20 20 2f 2a 20 6e 6f  rFlags(X)  /* no
1d10: 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 0a  -op */.#endif...
1d20: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 68  /*.** Return a h
1d30: 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e 61  uman-readable na
1d40: 6d 65 20 66 6f 72 20 61 20 63 6f 6e 73 74 72 61  me for a constra
1d50: 69 6e 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  int resolution a
1d60: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ction..*/.#ifnde
1d70: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
1d80: 52 45 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69 63  REIGN_KEY.static
1d90: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 63 74   const char *act
1da0: 69 6f 6e 4e 61 6d 65 28 75 38 20 61 63 74 69 6f  ionName(u8 actio
1db0: 6e 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  n){.  const char
1dc0: 20 2a 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74 63   *zName;.  switc
1dd0: 68 28 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20  h( action ){.   
1de0: 20 63 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c 6c   case OE_SetNull
1df0: 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20  :  zName = "SET 
1e00: 4e 55 4c 4c 22 3b 20 20 20 20 20 20 20 20 62 72  NULL";        br
1e10: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45  eak;.    case OE
1e20: 5f 53 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d 65  _SetDflt:  zName
1e30: 20 3d 20 22 53 45 54 20 44 45 46 41 55 4c 54 22   = "SET DEFAULT"
1e40: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
1e50: 20 63 61 73 65 20 4f 45 5f 43 61 73 63 61 64 65   case OE_Cascade
1e60: 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53 43  :  zName = "CASC
1e70: 41 44 45 22 3b 20 20 20 20 20 20 20 20 20 62 72  ADE";         br
1e80: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45  eak;.    case OE
1e90: 5f 52 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d 65  _Restrict: zName
1ea0: 20 3d 20 22 52 45 53 54 52 49 43 54 22 3b 20 20   = "RESTRICT";  
1eb0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1ec0: 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20   default:       
1ed0: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20 41     zName = "NO A
1ee0: 43 54 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20 20  CTION";  .      
1ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f00: 61 73 73 65 72 74 28 20 61 63 74 69 6f 6e 3d 3d  assert( action==
1f10: 4f 45 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61 6b  OE_None ); break
1f20: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a  ;.  }.  return z
1f30: 4e 61 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  Name;.}.#endif..
1f40: 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72  ./*.** Parameter
1f50: 20 65 4d 6f 64 65 20 6d 75 73 74 20 62 65 20 6f   eMode must be o
1f60: 6e 65 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f  ne of the PAGER_
1f70: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20  JOURNALMODE_XXX 
1f80: 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 66  constants.** def
1f90: 69 6e 65 64 20 69 6e 20 70 61 67 65 72 2e 68 2e  ined in pager.h.
1fa0: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72   This function r
1fb0: 65 74 75 72 6e 73 20 74 68 65 20 61 73 73 6f 63  eturns the assoc
1fc0: 69 61 74 65 64 20 6c 6f 77 65 72 63 61 73 65 0a  iated lowercase.
1fd0: 2a 2a 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20  ** journal-mode 
1fe0: 6e 61 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63  name..*/.const c
1ff0: 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72  har *sqlite3Jour
2000: 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 20  nalModename(int 
2010: 65 4d 6f 64 65 29 7b 0a 20 20 73 74 61 74 69 63  eMode){.  static
2020: 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a   char * const az
2030: 4d 6f 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20  ModeName[] = {. 
2040: 20 20 20 22 64 65 6c 65 74 65 22 2c 20 22 70 65     "delete", "pe
2050: 72 73 69 73 74 22 2c 20 22 6f 66 66 22 2c 20 22  rsist", "off", "
2060: 74 72 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d 6f  truncate", "memo
2070: 72 79 22 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ry".#ifndef SQLI
2080: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20 20  TE_OMIT_WAL.    
2090: 20 2c 20 22 77 61 6c 22 0a 23 65 6e 64 69 66 0a   , "wal".#endif.
20a0: 20 20 7d 3b 0a 20 20 61 73 73 65 72 74 28 20 50    };.  assert( P
20b0: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
20c0: 5f 44 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20 20  _DELETE==0 );.  
20d0: 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f  assert( PAGER_JO
20e0: 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53  URNALMODE_PERSIS
20f0: 54 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74  T==1 );.  assert
2100: 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ( PAGER_JOURNALM
2110: 4f 44 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20 20  ODE_OFF==2 );.  
2120: 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f  assert( PAGER_JO
2130: 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41  URNALMODE_TRUNCA
2140: 54 45 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65 72  TE==3 );.  asser
2150: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
2160: 4d 4f 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20 29  MODE_MEMORY==4 )
2170: 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45  ;.  assert( PAGE
2180: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2190: 4c 3d 3d 35 20 29 3b 0a 20 20 61 73 73 65 72 74  L==5 );.  assert
21a0: 28 20 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65 4d  ( eMode>=0 && eM
21b0: 6f 64 65 3c 3d 41 72 72 61 79 53 69 7a 65 28 61  ode<=ArraySize(a
21c0: 7a 4d 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a 20  zModeName) );.. 
21d0: 20 69 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72 61   if( eMode==Arra
21e0: 79 53 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65  ySize(azModeName
21f0: 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  ) ) return 0;.  
2200: 72 65 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61 6d  return azModeNam
2210: 65 5b 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a  e[eMode];.}../*.
2220: 2a 2a 20 50 72 6f 63 65 73 73 20 61 20 70 72 61  ** Process a pra
2230: 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  gma statement.  
2240: 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20 61  .**.** Pragmas a
2250: 72 65 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 3a  re of this form:
2260: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41 47  .**.**      PRAG
2270: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69 64 20 5b  MA [schema.]id [
2280: 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54  = value].**.** T
2290: 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d 69  he identifier mi
22a0: 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73 74  ght also be a st
22b0: 72 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75 65  ring.  The value
22c0: 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61 6e   is a string, an
22d0: 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72 2c  d.** identifier,
22e0: 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20 49   or a number.  I
22f0: 66 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20 74  f minusFlag is t
2300: 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76 61  rue, then the va
2310: 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d 62  lue is.** a numb
2320: 65 72 20 74 68 61 74 20 77 61 73 20 70 72 65 63  er that was prec
2330: 65 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73 20  eded by a minus 
2340: 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sign..**.** If t
2350: 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20  he left side is 
2360: 22 64 61 74 61 62 61 73 65 2e 69 64 22 20 74 68  "database.id" th
2370: 65 6e 20 70 49 64 31 20 69 73 20 74 68 65 20 64  en pId1 is the d
2380: 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a 20  atabase name.** 
2390: 61 6e 64 20 70 49 64 32 20 69 73 20 74 68 65 20  and pId2 is the 
23a0: 69 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66 74  id.  If the left
23b0: 20 73 69 64 65 20 69 73 20 6a 75 73 74 20 22 69   side is just "i
23c0: 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73 20  d" then pId1 is 
23d0: 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70 49  the.** id and pI
23e0: 64 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79 20  d2 is any empty 
23f0: 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20  string..*/.void 
2400: 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a 20  sqlite3Pragma(. 
2410: 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20   Parse *pParse, 
2420: 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c 20  .  Token *pId1, 
2430: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
2440: 70 61 72 74 20 6f 66 20 5b 73 63 68 65 6d 61 2e  part of [schema.
2450: 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20 20 54  ]id field */.  T
2460: 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20 20 20  oken *pId2,     
2470: 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70 61 72     /* Second par
2480: 74 20 6f 66 20 5b 73 63 68 65 6d 61 2e 5d 69 64  t of [schema.]id
2490: 20 66 69 65 6c 64 2c 20 6f 72 20 4e 55 4c 4c 20   field, or NULL 
24a0: 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 56 61 6c  */.  Token *pVal
24b0: 75 65 2c 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65  ue,      /* Toke
24c0: 6e 20 66 6f 72 20 3c 76 61 6c 75 65 3e 2c 20 6f  n for <value>, o
24d0: 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20  r NULL */.  int 
24e0: 6d 69 6e 75 73 46 6c 61 67 20 20 20 20 20 20 20  minusFlag       
24f0: 2f 2a 20 54 72 75 65 20 69 66 20 61 20 27 2d 27  /* True if a '-'
2500: 20 73 69 67 6e 20 70 72 65 63 65 64 65 64 20 3c   sign preceded <
2510: 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b 0a 20 20 63  value> */.){.  c
2520: 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20 30 3b 20  har *zLeft = 0; 
2530: 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65 72        /* Nul-ter
2540: 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
2550: 72 69 6e 67 20 3c 69 64 3e 20 2a 2f 0a 20 20 63  ring <id> */.  c
2560: 68 61 72 20 2a 7a 52 69 67 68 74 20 3d 20 30 3b  har *zRight = 0;
2570: 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65 72        /* Nul-ter
2580: 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
2590: 72 69 6e 67 20 3c 76 61 6c 75 65 3e 2c 20 6f 72  ring <value>, or
25a0: 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f 6e 73 74   NULL */.  const
25b0: 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b 20   char *zDb = 0; 
25c0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
25d0: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65  e name */.  Toke
25e0: 6e 20 2a 70 49 64 3b 20 20 20 20 20 20 20 20 20  n *pId;         
25f0: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
2600: 20 3c 69 64 3e 20 74 6f 6b 65 6e 20 2a 2f 0a 20   <id> token */. 
2610: 20 63 68 61 72 20 2a 61 46 63 6e 74 6c 5b 34 5d   char *aFcntl[4]
2620: 3b 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d  ;       /* Argum
2630: 65 6e 74 20 74 6f 20 53 51 4c 49 54 45 5f 46 43  ent to SQLITE_FC
2640: 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a 20 20  NTL_PRAGMA */.  
2650: 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
2660: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
2670: 73 65 20 69 6e 64 65 78 20 66 6f 72 20 3c 64 61  se index for <da
2680: 74 61 62 61 73 65 3e 20 2a 2f 0a 20 20 69 6e 74  tabase> */.  int
2690: 20 6c 77 72 2c 20 75 70 72 2c 20 6d 69 64 20 3d   lwr, upr, mid =
26a0: 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 42 69 6e   0;       /* Bin
26b0: 61 72 79 20 73 65 61 72 63 68 20 62 6f 75 6e 64  ary search bound
26c0: 73 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  s */.  int rc;  
26d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e0: 20 20 20 20 2f 2a 20 72 65 74 75 72 6e 20 76 61      /* return va
26f0: 6c 75 65 20 66 6f 72 6d 20 53 51 4c 49 54 45 5f  lue form SQLITE_
2700: 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a  FCNTL_PRAGMA */.
2710: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
2720: 70 50 61 72 73 65 2d 3e 64 62 3b 20 20 20 20 2f  pParse->db;    /
2730: 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  * The database c
2740: 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 44  onnection */.  D
2750: 62 20 2a 70 44 62 3b 20 20 20 20 20 20 20 20 20  b *pDb;         
2760: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2770: 68 65 20 73 70 65 63 69 66 69 63 20 64 61 74 61  he specific data
2780: 62 61 73 65 20 62 65 69 6e 67 20 70 72 61 67 6d  base being pragm
2790: 61 65 64 20 2a 2f 0a 20 20 56 64 62 65 20 2a 76  aed */.  Vdbe *v
27a0: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62   = sqlite3GetVdb
27b0: 65 28 70 50 61 72 73 65 29 3b 20 20 2f 2a 20 50  e(pParse);  /* P
27c0: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
27d0: 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 73 74 72  t */.  const str
27e0: 75 63 74 20 73 50 72 61 67 6d 61 4e 61 6d 65 73  uct sPragmaNames
27f0: 20 2a 70 50 72 61 67 6d 61 3b 0a 0a 20 20 69 66   *pPragma;..  if
2800: 28 20 76 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b  ( v==0 ) return;
2810: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 75  .  sqlite3VdbeRu
2820: 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29 3b 0a 20 20  nOnlyOnce(v);.  
2830: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32  pParse->nMem = 2
2840: 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65 72 70 72 65  ;..  /* Interpre
2850: 74 20 74 68 65 20 5b 73 63 68 65 6d 61 2e 5d 20  t the [schema.] 
2860: 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 61 67  part of the prag
2870: 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 69 44  ma statement. iD
2880: 62 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 69 6e  b is the.  ** in
2890: 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
28a0: 61 73 65 20 74 68 69 73 20 70 72 61 67 6d 61 20  ase this pragma 
28b0: 69 73 20 62 65 69 6e 67 20 61 70 70 6c 69 65 64  is being applied
28c0: 20 74 6f 20 69 6e 20 64 62 2e 61 44 62 5b 5d 2e   to in db.aDb[].
28d0: 20 2a 2f 0a 20 20 69 44 62 20 3d 20 73 71 6c 69   */.  iDb = sqli
28e0: 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 70  te3TwoPartName(p
28f0: 50 61 72 73 65 2c 20 70 49 64 31 2c 20 70 49 64  Parse, pId1, pId
2900: 32 2c 20 26 70 49 64 29 3b 0a 20 20 69 66 28 20  2, &pId);.  if( 
2910: 69 44 62 3c 30 20 29 20 72 65 74 75 72 6e 3b 0a  iDb<0 ) return;.
2920: 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
2930: 5b 69 44 62 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20  [iDb];..  /* If 
2940: 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  the temp databas
2950: 65 20 68 61 73 20 62 65 65 6e 20 65 78 70 6c 69  e has been expli
2960: 63 69 74 6c 79 20 6e 61 6d 65 64 20 61 73 20 70  citly named as p
2970: 61 72 74 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a  art of the .  **
2980: 20 70 72 61 67 6d 61 2c 20 6d 61 6b 65 20 73 75   pragma, make su
2990: 72 65 20 69 74 20 69 73 20 6f 70 65 6e 2e 20 0a  re it is open. .
29a0: 20 20 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d 3d    */.  if( iDb==
29b0: 31 20 26 26 20 73 71 6c 69 74 65 33 4f 70 65 6e  1 && sqlite3Open
29c0: 54 65 6d 70 44 61 74 61 62 61 73 65 28 70 50 61  TempDatabase(pPa
29d0: 72 73 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75  rse) ){.    retu
29e0: 72 6e 3b 0a 20 20 7d 0a 0a 20 20 7a 4c 65 66 74  rn;.  }..  zLeft
29f0: 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72   = sqlite3NameFr
2a00: 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 49 64 29  omToken(db, pId)
2a10: 3b 0a 20 20 69 66 28 20 21 7a 4c 65 66 74 20 29  ;.  if( !zLeft )
2a20: 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 6d   return;.  if( m
2a30: 69 6e 75 73 46 6c 61 67 20 29 7b 0a 20 20 20 20  inusFlag ){.    
2a40: 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33  zRight = sqlite3
2a50: 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2d 25 54  MPrintf(db, "-%T
2a60: 22 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 65  ", pValue);.  }e
2a70: 6c 73 65 7b 0a 20 20 20 20 7a 52 69 67 68 74 20  lse{.    zRight 
2a80: 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f  = sqlite3NameFro
2a90: 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 56 61 6c 75  mToken(db, pValu
2aa0: 65 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  e);.  }..  asser
2ab0: 74 28 20 70 49 64 32 20 29 3b 0a 20 20 7a 44 62  t( pId2 );.  zDb
2ac0: 20 3d 20 70 49 64 32 2d 3e 6e 3e 30 20 3f 20 70   = pId2->n>0 ? p
2ad0: 44 62 2d 3e 7a 44 62 53 4e 61 6d 65 20 3a 20 30  Db->zDbSName : 0
2ae0: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 41  ;.  if( sqlite3A
2af0: 75 74 68 43 68 65 63 6b 28 70 50 61 72 73 65 2c  uthCheck(pParse,
2b00: 20 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 2c 20   SQLITE_PRAGMA, 
2b10: 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74 2c 20 7a  zLeft, zRight, z
2b20: 44 62 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  Db) ){.    goto 
2b30: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
2b40: 0a 20 20 2f 2a 20 53 65 6e 64 20 61 6e 20 53 51  .  /* Send an SQ
2b50: 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d  LITE_FCNTL_PRAGM
2b60: 41 20 66 69 6c 65 2d 63 6f 6e 74 72 6f 6c 20 74  A file-control t
2b70: 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  o the underlying
2b80: 20 56 46 53 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63   VFS.  ** connec
2b90: 74 69 6f 6e 2e 20 20 49 66 20 69 74 20 72 65 74  tion.  If it ret
2ba0: 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 2c 20  urns SQLITE_OK, 
2bb0: 74 68 65 6e 20 61 73 73 75 6d 65 20 74 68 61 74  then assume that
2bc0: 20 74 68 65 20 56 46 53 0a 20 20 2a 2a 20 68 61   the VFS.  ** ha
2bd0: 6e 64 6c 65 64 20 74 68 65 20 70 72 61 67 6d 61  ndled the pragma
2be0: 20 61 6e 64 20 67 65 6e 65 72 61 74 65 20 61 20   and generate a 
2bf0: 6e 6f 2d 6f 70 20 70 72 65 70 61 72 65 64 20 73  no-op prepared s
2c00: 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a 2a 0a 20  tatement..  **. 
2c10: 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49   ** IMPLEMENTATI
2c20: 4f 4e 2d 4f 46 3a 20 52 2d 31 32 32 33 38 2d 35  ON-OF: R-12238-5
2c30: 35 31 32 30 20 57 68 65 6e 65 76 65 72 20 61 20  5120 Whenever a 
2c40: 50 52 41 47 4d 41 20 73 74 61 74 65 6d 65 6e 74  PRAGMA statement
2c50: 20 69 73 20 70 61 72 73 65 64 2c 0a 20 20 2a 2a   is parsed,.  **
2c60: 20 61 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c   an SQLITE_FCNTL
2c70: 5f 50 52 41 47 4d 41 20 66 69 6c 65 20 63 6f 6e  _PRAGMA file con
2c80: 74 72 6f 6c 20 69 73 20 73 65 6e 74 20 74 6f 20  trol is sent to 
2c90: 74 68 65 20 6f 70 65 6e 20 73 71 6c 69 74 65 33  the open sqlite3
2ca0: 5f 66 69 6c 65 0a 20 20 2a 2a 20 6f 62 6a 65 63  _file.  ** objec
2cb0: 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  t corresponding 
2cc0: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
2cd0: 66 69 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68  file to which th
2ce0: 65 20 70 72 61 67 6d 61 0a 20 20 2a 2a 20 73 74  e pragma.  ** st
2cf0: 61 74 65 6d 65 6e 74 20 72 65 66 65 72 73 2e 0a  atement refers..
2d00: 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d    **.  ** IMPLEM
2d10: 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32  ENTATION-OF: R-2
2d20: 39 38 37 35 2d 33 31 36 37 38 20 54 68 65 20 61  9875-31678 The a
2d30: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 53  rgument to the S
2d40: 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47  QLITE_FCNTL_PRAG
2d50: 4d 41 0a 20 20 2a 2a 20 66 69 6c 65 20 63 6f 6e  MA.  ** file con
2d60: 74 72 6f 6c 20 69 73 20 61 6e 20 61 72 72 61 79  trol is an array
2d70: 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
2d80: 73 74 72 69 6e 67 73 20 28 63 68 61 72 2a 2a 29  strings (char**)
2d90: 20 69 6e 20 77 68 69 63 68 20 74 68 65 0a 20 20   in which the.  
2da0: 2a 2a 20 73 65 63 6f 6e 64 20 65 6c 65 6d 65 6e  ** second elemen
2db0: 74 20 6f 66 20 74 68 65 20 61 72 72 61 79 20 69  t of the array i
2dc0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
2dd0: 65 20 70 72 61 67 6d 61 20 61 6e 64 20 74 68 65  e pragma and the
2de0: 20 74 68 69 72 64 0a 20 20 2a 2a 20 65 6c 65 6d   third.  ** elem
2df0: 65 6e 74 20 69 73 20 74 68 65 20 61 72 67 75 6d  ent is the argum
2e00: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 61 67 6d  ent to the pragm
2e10: 61 20 6f 72 20 4e 55 4c 4c 20 69 66 20 74 68 65  a or NULL if the
2e20: 20 70 72 61 67 6d 61 20 68 61 73 20 6e 6f 0a 20   pragma has no. 
2e30: 20 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 20 20   ** argument..  
2e40: 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20 3d  */.  aFcntl[0] =
2e50: 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d 20   0;.  aFcntl[1] 
2e60: 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e 74  = zLeft;.  aFcnt
2e70: 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a 20  l[2] = zRight;. 
2e80: 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b 0a   aFcntl[3] = 0;.
2e90: 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65    db->busyHandle
2ea0: 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 72  r.nBusy = 0;.  r
2eb0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  c = sqlite3_file
2ec0: 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62  _control(db, zDb
2ed0: 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  , SQLITE_FCNTL_P
2ee0: 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61 46  RAGMA, (void*)aF
2ef0: 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63 3d  cntl);.  if( rc=
2f00: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2f10: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65    returnSingleTe
2f20: 78 74 28 76 2c 20 22 72 65 73 75 6c 74 22 2c 20  xt(v, "result", 
2f30: 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20  aFcntl[0]);.    
2f40: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63  sqlite3_free(aFc
2f50: 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 67 6f 74  ntl[0]);.    got
2f60: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
2f70: 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  }.  if( rc!=SQLI
2f80: 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20  TE_NOTFOUND ){. 
2f90: 20 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d     if( aFcntl[0]
2fa0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
2fb0: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
2fc0: 2c 20 22 25 73 22 2c 20 61 46 63 6e 74 6c 5b 30  , "%s", aFcntl[0
2fd0: 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ]);.      sqlite
2fe0: 33 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d  3_free(aFcntl[0]
2ff0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 50 61  );.    }.    pPa
3000: 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20  rse->nErr++;.   
3010: 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63   pParse->rc = rc
3020: 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d  ;.    goto pragm
3030: 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  a_out;.  }..  /*
3040: 20 4c 6f 63 61 74 65 20 74 68 65 20 70 72 61 67   Locate the prag
3050: 6d 61 20 69 6e 20 74 68 65 20 6c 6f 6f 6b 75 70  ma in the lookup
3060: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 6c 77 72 20   table */.  lwr 
3070: 3d 20 30 3b 0a 20 20 75 70 72 20 3d 20 41 72 72  = 0;.  upr = Arr
3080: 61 79 53 69 7a 65 28 61 50 72 61 67 6d 61 4e 61  aySize(aPragmaNa
3090: 6d 65 73 29 2d 31 3b 0a 20 20 77 68 69 6c 65 28  mes)-1;.  while(
30a0: 20 6c 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20 20   lwr<=upr ){.   
30b0: 20 6d 69 64 20 3d 20 28 6c 77 72 2b 75 70 72 29   mid = (lwr+upr)
30c0: 2f 32 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  /2;.    rc = sql
30d0: 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 4c 65  ite3_stricmp(zLe
30e0: 66 74 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65 73  ft, aPragmaNames
30f0: 5b 6d 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20  [mid].zName);.  
3100: 20 20 69 66 28 20 72 63 3d 3d 30 20 29 20 62 72    if( rc==0 ) br
3110: 65 61 6b 3b 0a 20 20 20 20 69 66 28 20 72 63 3c  eak;.    if( rc<
3120: 30 20 29 7b 0a 20 20 20 20 20 20 75 70 72 20 3d  0 ){.      upr =
3130: 20 6d 69 64 20 2d 20 31 3b 0a 20 20 20 20 7d 65   mid - 1;.    }e
3140: 6c 73 65 7b 0a 20 20 20 20 20 20 6c 77 72 20 3d  lse{.      lwr =
3150: 20 6d 69 64 20 2b 20 31 3b 0a 20 20 20 20 7d 0a   mid + 1;.    }.
3160: 20 20 7d 0a 20 20 69 66 28 20 6c 77 72 3e 75 70    }.  if( lwr>up
3170: 72 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f  r ) goto pragma_
3180: 6f 75 74 3b 0a 20 20 70 50 72 61 67 6d 61 20 3d  out;.  pPragma =
3190: 20 26 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d   &aPragmaNames[m
31a0: 69 64 5d 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  id];..  /* Make 
31b0: 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73  sure the databas
31c0: 65 20 73 63 68 65 6d 61 20 69 73 20 6c 6f 61 64  e schema is load
31d0: 65 64 20 69 66 20 74 68 65 20 70 72 61 67 6d 61  ed if the pragma
31e0: 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20 2a   requires that *
31f0: 2f 0a 20 20 69 66 28 20 28 70 50 72 61 67 6d 61  /.  if( (pPragma
3200: 2d 3e 6d 50 72 61 67 46 6c 61 67 20 26 20 50 72  ->mPragFlag & Pr
3210: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
3220: 61 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  a)!=0 ){.    if(
3230: 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
3240: 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74  ma(pParse) ) got
3250: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
3260: 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  }..  /* Jump to 
3270: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
3280: 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20 2a  pragma handler *
3290: 2f 0a 20 20 73 77 69 74 63 68 28 20 70 50 72 61  /.  switch( pPra
32a0: 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 20 29 7b  gma->ePragTyp ){
32b0: 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .  .#if !defined
32c0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  (SQLITE_OMIT_PAG
32d0: 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20 21  ER_PRAGMAS) && !
32e0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
32f0: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29 0a  MIT_DEPRECATED).
3300: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
3310: 41 20 5b 73 63 68 65 6d 61 2e 5d 64 65 66 61 75  A [schema.]defau
3320: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 0a 20 20  lt_cache_size.  
3330: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
3340: 6d 61 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63 68  ma.]default_cach
3350: 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20  e_size=N.  **.  
3360: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
3370: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
3380: 72 72 65 6e 74 20 70 65 72 73 69 73 74 65 6e 74  rrent persistent
3390: 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65   setting for the
33a0: 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65  .  ** page cache
33b0: 20 73 69 7a 65 2e 20 20 54 68 65 20 76 61 6c 75   size.  The valu
33c0: 65 20 72 65 74 75 72 6e 65 64 20 69 73 20 74 68  e returned is th
33d0: 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
33e0: 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65 73 20 69   of.  ** pages i
33f0: 6e 20 74 68 65 20 70 61 67 65 20 63 61 63 68 65  n the page cache
3400: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
3410: 72 6d 20 73 65 74 73 20 62 6f 74 68 20 74 68 65  rm sets both the
3420: 20 63 75 72 72 65 6e 74 0a 20 20 2a 2a 20 70 61   current.  ** pa
3430: 67 65 20 63 61 63 68 65 20 73 69 7a 65 20 76 61  ge cache size va
3440: 6c 75 65 20 61 6e 64 20 74 68 65 20 70 65 72 73  lue and the pers
3450: 69 73 74 65 6e 74 20 70 61 67 65 20 63 61 63 68  istent page cach
3460: 65 20 73 69 7a 65 20 76 61 6c 75 65 0a 20 20 2a  e size value.  *
3470: 2a 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  * stored in the 
3480: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20  database file.. 
3490: 20 2a 2a 0a 20 20 2a 2a 20 4f 6c 64 65 72 20 76   **.  ** Older v
34a0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
34b0: 65 20 77 6f 75 6c 64 20 73 65 74 20 74 68 65 20  e would set the 
34c0: 64 65 66 61 75 6c 74 20 63 61 63 68 65 20 73 69  default cache si
34d0: 7a 65 20 74 6f 20 61 0a 20 20 2a 2a 20 6e 65 67  ze to a.  ** neg
34e0: 61 74 69 76 65 20 6e 75 6d 62 65 72 20 74 6f 20  ative number to 
34f0: 69 6e 64 69 63 61 74 65 20 73 79 6e 63 68 72 6f  indicate synchro
3500: 6e 6f 75 73 3d 4f 46 46 2e 20 20 54 68 65 73 65  nous=OFF.  These
3510: 20 64 61 79 73 2c 20 73 79 6e 63 68 72 6f 6e 6f   days, synchrono
3520: 75 73 0a 20 20 2a 2a 20 69 73 20 61 6c 77 61 79  us.  ** is alway
3530: 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 20  s on by default 
3540: 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68  regardless of th
3550: 65 20 73 69 67 6e 20 6f 66 20 74 68 65 20 64 65  e sign of the de
3560: 66 61 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a  fault cache.  **
3570: 20 73 69 7a 65 2e 20 20 42 75 74 20 63 6f 6e 74   size.  But cont
3580: 69 6e 75 65 20 74 6f 20 74 61 6b 65 20 74 68 65  inue to take the
3590: 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20   absolute value 
35a0: 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 63  of the default c
35b0: 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a 65 20 6f  ache.  ** size o
35c0: 66 20 68 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d  f historical com
35d0: 70 61 74 69 62 69 6c 69 74 79 2e 0a 20 20 2a 2f  patibility..  */
35e0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
35f0: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
3600: 5a 45 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63  ZE: {.    static
3610: 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d   const int iLn =
3620: 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e   VDBE_OFFSET_LIN
3630: 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73 74 61 74  ENO(2);.    stat
3640: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
3650: 69 73 74 20 67 65 74 43 61 63 68 65 53 69 7a 65  ist getCacheSize
3660: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f  [] = {.      { O
3670: 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 30  P_Transaction, 0
3680: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20  , 0,        0}, 
3690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a0: 20 20 20 20 20 20 20 20 2f 2a 20 30 20 2a 2f 0a          /* 0 */.
36b0: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43        { OP_ReadC
36c0: 6f 6f 6b 69 65 2c 20 20 30 2c 20 31 2c 20 20 20  ookie,  0, 1,   
36d0: 20 20 20 20 20 42 54 52 45 45 5f 44 45 46 41 55       BTREE_DEFAU
36e0: 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 7d 2c 20  LT_CACHE_SIZE}, 
36f0: 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b   /* 1 */.      {
3700: 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20   OP_IfPos,      
3710: 20 31 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d   1, 8,        0}
3720: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74  ,.      { OP_Int
3730: 65 67 65 72 2c 20 20 20 20 20 30 2c 20 32 2c 20  eger,     0, 2, 
3740: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
3750: 20 7b 20 4f 50 5f 53 75 62 74 72 61 63 74 2c 20   { OP_Subtract, 
3760: 20 20 20 31 2c 20 32 2c 20 20 20 20 20 20 20 20     1, 2,        
3770: 31 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49  1},.      { OP_I
3780: 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c 20 38  fPos,       1, 8
3790: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
37a0: 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c     { OP_Integer,
37b0: 20 20 20 20 20 30 2c 20 31 2c 20 20 20 20 20 20       0, 1,      
37c0: 20 20 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20    0},           
37d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
37e0: 20 36 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50   6 */.      { OP
37f0: 5f 4e 6f 6f 70 2c 20 20 20 20 20 20 20 20 30 2c  _Noop,        0,
3800: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   0,        0},. 
3810: 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74       { OP_Result
3820: 52 6f 77 2c 20 20 20 31 2c 20 31 2c 20 20 20 20  Row,   1, 1,    
3830: 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20      0},.    };. 
3840: 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a     VdbeOp *aOp;.
3850: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55      sqlite3VdbeU
3860: 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62 29  sesBtree(v, iDb)
3870: 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  ;.    if( !zRigh
3880: 74 20 29 7b 0a 20 20 20 20 20 20 73 65 74 4f 6e  t ){.      setOn
3890: 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 22  eColumnName(v, "
38a0: 63 61 63 68 65 5f 73 69 7a 65 22 29 3b 0a 20 20  cache_size");.  
38b0: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
38c0: 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 73 71 6c   += 2;.      sql
38d0: 69 74 65 33 56 64 62 65 56 65 72 69 66 79 4e 6f  ite3VdbeVerifyNo
38e0: 4d 61 6c 6c 6f 63 52 65 71 75 69 72 65 64 28 76  MallocRequired(v
38f0: 2c 20 41 72 72 61 79 53 69 7a 65 28 67 65 74 43  , ArraySize(getC
3900: 61 63 68 65 53 69 7a 65 29 29 3b 0a 20 20 20 20  acheSize));.    
3910: 20 20 61 4f 70 20 3d 20 73 71 6c 69 74 65 33 56    aOp = sqlite3V
3920: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
3930: 41 72 72 61 79 53 69 7a 65 28 67 65 74 43 61 63  ArraySize(getCac
3940: 68 65 53 69 7a 65 29 2c 20 67 65 74 43 61 63 68  heSize), getCach
3950: 65 53 69 7a 65 2c 20 69 4c 6e 29 3b 0a 20 20 20  eSize, iLn);.   
3960: 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52     if( ONLY_IF_R
3970: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f  EALLOC_STRESS(aO
3980: 70 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a 20  p==0) ) break;. 
3990: 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20 3d       aOp[0].p1 =
39a0: 20 69 44 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b   iDb;.      aOp[
39b0: 31 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20  1].p1 = iDb;.   
39c0: 20 20 20 61 4f 70 5b 36 5d 2e 70 31 20 3d 20 53     aOp[6].p1 = S
39d0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 43 41  QLITE_DEFAULT_CA
39e0: 43 48 45 5f 53 49 5a 45 3b 0a 20 20 20 20 7d 65  CHE_SIZE;.    }e
39f0: 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73  lse{.      int s
3a00: 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 62 73  ize = sqlite3Abs
3a10: 49 6e 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f  Int32(sqlite3Ato
3a20: 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  i(zRight));.    
3a30: 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72    sqlite3BeginWr
3a40: 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61  iteOperation(pPa
3a50: 72 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20  rse, 0, iDb);.  
3a60: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
3a70: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74 43  ddOp3(v, OP_SetC
3a80: 6f 6f 6b 69 65 2c 20 69 44 62 2c 20 42 54 52 45  ookie, iDb, BTRE
3a90: 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  E_DEFAULT_CACHE_
3aa0: 53 49 5a 45 2c 20 73 69 7a 65 29 3b 0a 20 20 20  SIZE, size);.   
3ab0: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
3ac0: 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
3ad0: 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b  d(db, iDb, 0) );
3ae0: 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68  .      pDb->pSch
3af0: 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20  ema->cache_size 
3b00: 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71  = size;.      sq
3b10: 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
3b20: 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c  heSize(pDb->pBt,
3b30: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63   pDb->pSchema->c
3b40: 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20  ache_size);.    
3b50: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
3b60: 0a 23 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c 49  .#endif /* !SQLI
3b70: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
3b80: 41 47 4d 41 53 20 26 26 20 21 53 51 4c 49 54 45  AGMAS && !SQLITE
3b90: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
3ba0: 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65   */..#if !define
3bb0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
3bc0: 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 2f  GER_PRAGMAS).  /
3bd0: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
3be0: 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f 73 69 7a  schema.]page_siz
3bf0: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
3c00: 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f 73 69 7a  schema.]page_siz
3c10: 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  e=N.  **.  ** Th
3c20: 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70  e first form rep
3c30: 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
3c40: 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65   setting for the
3c50: 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70  .  ** database p
3c60: 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65  age size in byte
3c70: 73 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66  s.  The second f
3c80: 6f 72 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a  orm sets the.  *
3c90: 2a 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  * database page 
3ca0: 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65  size value.  The
3cb0: 20 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20   value can only 
3cc0: 62 65 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74  be set if.  ** t
3cd0: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 73 20  he database has 
3ce0: 6e 6f 74 20 79 65 74 20 62 65 65 6e 20 63 72 65  not yet been cre
3cf0: 61 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  ated..  */.  cas
3d00: 65 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53  e PragTyp_PAGE_S
3d10: 49 5a 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65  IZE: {.    Btree
3d20: 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74   *pBt = pDb->pBt
3d30: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42  ;.    assert( pB
3d40: 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20  t!=0 );.    if( 
3d50: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
3d60: 20 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57 41   int size = ALWA
3d70: 59 53 28 70 42 74 29 20 3f 20 73 71 6c 69 74 65  YS(pBt) ? sqlite
3d80: 33 42 74 72 65 65 47 65 74 50 61 67 65 53 69 7a  3BtreeGetPageSiz
3d90: 65 28 70 42 74 29 20 3a 20 30 3b 0a 20 20 20 20  e(pBt) : 0;.    
3da0: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
3db0: 74 28 76 2c 20 22 70 61 67 65 5f 73 69 7a 65 22  t(v, "page_size"
3dc0: 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c  , size);.    }el
3dd0: 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6c  se{.      /* Mal
3de0: 6c 6f 63 20 6d 61 79 20 66 61 69 6c 20 77 68 65  loc may fail whe
3df0: 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20 70 61  n setting the pa
3e00: 67 65 2d 73 69 7a 65 2c 20 61 73 20 74 68 65 72  ge-size, as ther
3e10: 65 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c  e is an internal
3e20: 0a 20 20 20 20 20 20 2a 2a 20 62 75 66 66 65 72  .      ** buffer
3e30: 20 74 68 61 74 20 74 68 65 20 70 61 67 65 72 20   that the pager 
3e40: 6d 6f 64 75 6c 65 20 72 65 73 69 7a 65 73 20 75  module resizes u
3e50: 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 72 65 61  sing sqlite3_rea
3e60: 6c 6c 6f 63 28 29 2e 0a 20 20 20 20 20 20 2a 2f  lloc()..      */
3e70: 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 50  .      db->nextP
3e80: 61 67 65 73 69 7a 65 20 3d 20 73 71 6c 69 74 65  agesize = sqlite
3e90: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20  3Atoi(zRight);. 
3ea0: 20 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f       if( SQLITE_
3eb0: 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74 65 33 42 74  NOMEM==sqlite3Bt
3ec0: 72 65 65 53 65 74 50 61 67 65 53 69 7a 65 28 70  reeSetPageSize(p
3ed0: 42 74 2c 20 64 62 2d 3e 6e 65 78 74 50 61 67 65  Bt, db->nextPage
3ee0: 73 69 7a 65 2c 2d 31 2c 30 29 20 29 7b 0a 20 20  size,-1,0) ){.  
3ef0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 6f 6d        sqlite3Oom
3f00: 46 61 75 6c 74 28 64 62 29 3b 0a 20 20 20 20 20  Fault(db);.     
3f10: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65   }.    }.    bre
3f20: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
3f30: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
3f40: 6d 61 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74  ma.]secure_delet
3f50: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
3f60: 73 63 68 65 6d 61 2e 5d 73 65 63 75 72 65 5f 64  schema.]secure_d
3f70: 65 6c 65 74 65 3d 4f 4e 2f 4f 46 46 0a 20 20 2a  elete=ON/OFF.  *
3f80: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
3f90: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
3fa0: 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e  e current settin
3fb0: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73  g for the.  ** s
3fc0: 65 63 75 72 65 5f 64 65 6c 65 74 65 20 66 6c 61  ecure_delete fla
3fd0: 67 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66  g.  The second f
3fe0: 6f 72 6d 20 63 68 61 6e 67 65 73 20 74 68 65 20  orm changes the 
3ff0: 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a 20 20  secure_delete.  
4000: 2a 2a 20 66 6c 61 67 20 73 65 74 74 69 6e 67 20  ** flag setting 
4010: 61 6e 64 20 72 65 70 6f 72 74 73 20 74 68 65 6e  and reports then
4020: 65 77 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20  ew value..  */. 
4030: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 45   case PragTyp_SE
4040: 43 55 52 45 5f 44 45 4c 45 54 45 3a 20 7b 0a 20  CURE_DELETE: {. 
4050: 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20     Btree *pBt = 
4060: 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 69 6e  pDb->pBt;.    in
4070: 74 20 62 20 3d 20 2d 31 3b 0a 20 20 20 20 61 73  t b = -1;.    as
4080: 73 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a  sert( pBt!=0 );.
4090: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
40a0: 7b 0a 20 20 20 20 20 20 62 20 3d 20 73 71 6c 69  {.      b = sqli
40b0: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
40c0: 69 67 68 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  ight, 0);.    }.
40d0: 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d      if( pId2->n=
40e0: 3d 30 20 26 26 20 62 3e 3d 30 20 29 7b 0a 20 20  =0 && b>=0 ){.  
40f0: 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20      int ii;.    
4100: 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
4110: 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
4120: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
4130: 72 65 65 53 65 63 75 72 65 44 65 6c 65 74 65 28  reeSecureDelete(
4140: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
4150: 20 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   b);.      }.   
4160: 20 7d 0a 20 20 20 20 62 20 3d 20 73 71 6c 69 74   }.    b = sqlit
4170: 65 33 42 74 72 65 65 53 65 63 75 72 65 44 65 6c  e3BtreeSecureDel
4180: 65 74 65 28 70 42 74 2c 20 62 29 3b 0a 20 20 20  ete(pBt, b);.   
4190: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
41a0: 28 76 2c 20 22 73 65 63 75 72 65 5f 64 65 6c 65  (v, "secure_dele
41b0: 74 65 22 2c 20 62 29 3b 0a 20 20 20 20 62 72 65  te", b);.    bre
41c0: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
41d0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
41e0: 6d 61 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75  ma.]max_page_cou
41f0: 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  nt.  **  PRAGMA 
4200: 5b 73 63 68 65 6d 61 2e 5d 6d 61 78 5f 70 61 67  [schema.]max_pag
4210: 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a 0a 20  e_count=N.  **. 
4220: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f   ** The first fo
4230: 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63  rm reports the c
4240: 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66  urrent setting f
4250: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61 78 69  or the.  ** maxi
4260: 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  mum number of pa
4270: 67 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  ges in the datab
4280: 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 0a  ase file.  The .
4290: 20 20 2a 2a 20 73 65 63 6f 6e 64 20 66 6f 72 6d    ** second form
42a0: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 63 68 61   attempts to cha
42b0: 6e 67 65 20 74 68 69 73 20 73 65 74 74 69 6e 67  nge this setting
42c0: 2e 20 20 42 6f 74 68 0a 20 20 2a 2a 20 66 6f 72  .  Both.  ** for
42d0: 6d 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 75  ms return the cu
42e0: 72 72 65 6e 74 20 73 65 74 74 69 6e 67 2e 0a 20  rrent setting.. 
42f0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 61 62 73   **.  ** The abs
4300: 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 4e  olute value of N
4310: 20 69 73 20 75 73 65 64 2e 20 20 54 68 69 73 20   is used.  This 
4320: 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20  is undocumented 
4330: 61 6e 64 20 6d 69 67 68 74 0a 20 20 2a 2a 20 63  and might.  ** c
4340: 68 61 6e 67 65 2e 20 20 54 68 65 20 6f 6e 6c 79  hange.  The only
4350: 20 70 75 72 70 6f 73 65 20 69 73 20 74 6f 20 70   purpose is to p
4360: 72 6f 76 69 64 65 20 61 6e 20 65 61 73 79 20 77  rovide an easy w
4370: 61 79 20 74 6f 20 74 65 73 74 0a 20 20 2a 2a 20  ay to test.  ** 
4380: 74 68 65 20 73 71 6c 69 74 65 33 41 62 73 49 6e  the sqlite3AbsIn
4390: 74 33 32 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a  t32() function..
43a0: 20 20 2a 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    **.  **  PRAGM
43b0: 41 20 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f  A [schema.]page_
43c0: 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20  count.  **.  ** 
43d0: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
43e0: 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
43f0: 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61  e specified data
4400: 62 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  base..  */.  cas
4410: 65 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 43  e PragTyp_PAGE_C
4420: 4f 55 4e 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20  OUNT: {.    int 
4430: 69 52 65 67 3b 0a 20 20 20 20 73 71 6c 69 74 65  iReg;.    sqlite
4440: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
4450: 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a  a(pParse, iDb);.
4460: 20 20 20 20 69 52 65 67 20 3d 20 2b 2b 70 50 61      iReg = ++pPa
4470: 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 69  rse->nMem;.    i
4480: 66 28 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  f( sqlite3Tolowe
4490: 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 70 27  r(zLeft[0])=='p'
44a0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
44b0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
44c0: 50 5f 50 61 67 65 63 6f 75 6e 74 2c 20 69 44 62  P_Pagecount, iDb
44d0: 2c 20 69 52 65 67 29 3b 0a 20 20 20 20 7d 65 6c  , iReg);.    }el
44e0: 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  se{.      sqlite
44f0: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
4500: 50 5f 4d 61 78 50 67 63 6e 74 2c 20 69 44 62 2c  P_MaxPgcnt, iDb,
4510: 20 69 52 65 67 2c 20 0a 20 20 20 20 20 20 20 20   iReg, .        
4520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4530: 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28  sqlite3AbsInt32(
4540: 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67  sqlite3Atoi(zRig
4550: 68 74 29 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ht)));.    }.   
4560: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
4570: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
4580: 6f 77 2c 20 69 52 65 67 2c 20 31 29 3b 0a 20 20  ow, iReg, 1);.  
4590: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
45a0: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
45b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
45c0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
45d0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65  OLNAME_NAME, zLe
45e0: 66 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  ft, SQLITE_TRANS
45f0: 49 45 4e 54 29 3b 0a 20 20 20 20 62 72 65 61 6b  IENT);.    break
4600: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
4610: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
4620: 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20  .]locking_mode. 
4630: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
4640: 65 6d 61 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64  ema.]locking_mod
4650: 65 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c  e = (normal|excl
4660: 75 73 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63 61  usive).  */.  ca
4670: 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49  se PragTyp_LOCKI
4680: 4e 47 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 63  NG_MODE: {.    c
4690: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74 20  onst char *zRet 
46a0: 3d 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20 20  = "normal";.    
46b0: 69 6e 74 20 65 4d 6f 64 65 20 3d 20 67 65 74 4c  int eMode = getL
46c0: 6f 63 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67 68  ockingMode(zRigh
46d0: 74 29 3b 0a 0a 20 20 20 20 69 66 28 20 70 49 64  t);..    if( pId
46e0: 32 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64 65  2->n==0 && eMode
46f0: 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  ==PAGER_LOCKINGM
4700: 4f 44 45 5f 51 55 45 52 59 20 29 7b 0a 20 20 20  ODE_QUERY ){.   
4710: 20 20 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50 52     /* Simple "PR
4720: 41 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64  AGMA locking_mod
4730: 65 3b 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54  e;" statement. T
4740: 68 69 73 20 69 73 20 61 20 71 75 65 72 79 20 66  his is a query f
4750: 6f 72 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  or.      ** the 
4760: 63 75 72 72 65 6e 74 20 64 65 66 61 75 6c 74 20  current default 
4770: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77 68  locking mode (wh
4780: 69 63 68 20 6d 61 79 20 62 65 20 64 69 66 66 65  ich may be diffe
4790: 72 65 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a 2a  rent to.      **
47a0: 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64   the locking-mod
47b0: 65 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61  e of the main da
47c0: 74 61 62 61 73 65 29 2e 0a 20 20 20 20 20 20 2a  tabase)..      *
47d0: 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20  /.      eMode = 
47e0: 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65  db->dfltLockMode
47f0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
4800: 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72     Pager *pPager
4810: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 32  ;.      if( pId2
4820: 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ->n==0 ){.      
4830: 20 20 2f 2a 20 54 68 69 73 20 69 6e 64 69 63 61    /* This indica
4840: 74 65 73 20 74 68 61 74 20 6e 6f 20 64 61 74 61  tes that no data
4850: 62 61 73 65 20 6e 61 6d 65 20 77 61 73 20 73 70  base name was sp
4860: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 0a  ecified as part.
4870: 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68          ** of th
4880: 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64  e PRAGMA command
4890: 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
48a0: 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20  he locking-mode 
48b0: 6d 75 73 74 20 62 65 0a 20 20 20 20 20 20 20 20  must be.        
48c0: 2a 2a 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61 74  ** set on all at
48d0: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
48e0: 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65  , as well as the
48f0: 20 6d 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a 20   main db file.. 
4900: 20 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20         **.      
4910: 20 20 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20 73    ** Also, the s
4920: 71 6c 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d  qlite3.dfltLockM
4930: 6f 64 65 20 76 61 72 69 61 62 6c 65 20 69 73 20  ode variable is 
4940: 73 65 74 20 73 6f 20 74 68 61 74 0a 20 20 20 20  set so that.    
4950: 20 20 20 20 2a 2a 20 61 6e 79 20 73 75 62 73 65      ** any subse
4960: 71 75 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64  quently attached
4970: 20 64 61 74 61 62 61 73 65 73 20 61 6c 73 6f 20   databases also 
4980: 75 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65  use the specifie
4990: 64 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f 63  d.        ** loc
49a0: 6b 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20 20  king mode..     
49b0: 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e     */.        in
49c0: 74 20 69 69 3b 0a 20 20 20 20 20 20 20 20 61 73  t ii;.        as
49d0: 73 65 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e 61  sert(pDb==&db->a
49e0: 44 62 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20  Db[0]);.        
49f0: 66 6f 72 28 69 69 3d 32 3b 20 69 69 3c 64 62 2d  for(ii=2; ii<db-
4a00: 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
4a10: 20 20 20 20 20 20 20 70 50 61 67 65 72 20 3d 20         pPager = 
4a20: 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
4a30: 72 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  r(db->aDb[ii].pB
4a40: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  t);.          sq
4a50: 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e  lite3PagerLockin
4a60: 67 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d  gMode(pPager, eM
4a70: 6f 64 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ode);.        }.
4a80: 20 20 20 20 20 20 20 20 64 62 2d 3e 64 66 6c 74          db->dflt
4a90: 4c 6f 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29 65  LockMode = (u8)e
4aa0: 4d 6f 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Mode;.      }.  
4ab0: 20 20 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c      pPager = sql
4ac0: 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
4ad0: 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20  Db->pBt);.      
4ae0: 65 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 50  eMode = sqlite3P
4af0: 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28  agerLockingMode(
4b00: 70 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a  pPager, eMode);.
4b10: 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72      }..    asser
4b20: 74 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  t( eMode==PAGER_
4b30: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d  LOCKINGMODE_NORM
4b40: 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c  AL.            |
4b50: 7c 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c  | eMode==PAGER_L
4b60: 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55  OCKINGMODE_EXCLU
4b70: 53 49 56 45 20 29 3b 0a 20 20 20 20 69 66 28 20  SIVE );.    if( 
4b80: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43  eMode==PAGER_LOC
4b90: 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49  KINGMODE_EXCLUSI
4ba0: 56 45 20 29 7b 0a 20 20 20 20 20 20 7a 52 65 74  VE ){.      zRet
4bb0: 20 3d 20 22 65 78 63 6c 75 73 69 76 65 22 3b 0a   = "exclusive";.
4bc0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
4bd0: 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 6c  SingleText(v, "l
4be0: 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 7a 52  ocking_mode", zR
4bf0: 65 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  et);.    break;.
4c00: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
4c10: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
4c20: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a  journal_mode.  *
4c30: 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d  *  PRAGMA [schem
4c40: 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  a.]journal_mode 
4c50: 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20  =.  **          
4c60: 20 20 20 20 20 20 20 20 20 20 20 20 28 64 65 6c              (del
4c70: 65 74 65 7c 70 65 72 73 69 73 74 7c 6f 66 66 7c  ete|persist|off|
4c80: 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72 79 7c  truncate|memory|
4c90: 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20 20  wal|off).  */.  
4ca0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 4a 4f 55  case PragTyp_JOU
4cb0: 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20  RNAL_MODE: {.   
4cc0: 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20 20 20   int eMode;     
4cd0: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65     /* One of the
4ce0: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
4cf0: 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73 20 2a  DE_XXX symbols *
4d00: 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b 20 20 20  /.    int ii;   
4d10: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
4d20: 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20 20 20  counter */..    
4d30: 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65  setOneColumnName
4d40: 28 76 2c 20 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  (v, "journal_mod
4d50: 65 22 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  e");.    if( zRi
4d60: 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ght==0 ){.      
4d70: 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  /* If there is n
4d80: 6f 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 6f  o "=MODE" part o
4d90: 66 20 74 68 65 20 70 72 61 67 6d 61 2c 20 64 6f  f the pragma, do
4da0: 20 61 20 71 75 65 72 79 20 66 6f 72 20 74 68 65   a query for the
4db0: 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e  .      ** curren
4dc0: 74 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20  t mode */.      
4dd0: 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f  eMode = PAGER_JO
4de0: 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b  URNALMODE_QUERY;
4df0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
4e00: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d    const char *zM
4e10: 6f 64 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e  ode;.      int n
4e20: 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
4e30: 33 30 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  30(zRight);.    
4e40: 20 20 66 6f 72 28 65 4d 6f 64 65 3d 30 3b 20 28    for(eMode=0; (
4e50: 7a 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 4a  zMode = sqlite3J
4e60: 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65  ournalModename(e
4e70: 4d 6f 64 65 29 29 21 3d 30 3b 20 65 4d 6f 64 65  Mode))!=0; eMode
4e80: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
4e90: 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
4ea0: 28 7a 52 69 67 68 74 2c 20 7a 4d 6f 64 65 2c 20  (zRight, zMode, 
4eb0: 6e 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  n)==0 ) break;. 
4ec0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
4ed0: 20 21 7a 4d 6f 64 65 20 29 7b 0a 20 20 20 20 20   !zMode ){.     
4ee0: 20 20 20 2f 2a 20 49 66 20 74 68 65 20 22 3d 4d     /* If the "=M
4ef0: 4f 44 45 22 20 70 61 72 74 20 64 6f 65 73 20 6e  ODE" part does n
4f00: 6f 74 20 6d 61 74 63 68 20 61 6e 79 20 6b 6e 6f  ot match any kno
4f10: 77 6e 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c  wn journal mode,
4f20: 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  .        ** then
4f30: 20 64 6f 20 61 20 71 75 65 72 79 20 2a 2f 0a 20   do a query */. 
4f40: 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50         eMode = P
4f50: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
4f60: 5f 51 55 45 52 59 3b 0a 20 20 20 20 20 20 7d 0a  _QUERY;.      }.
4f70: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65 4d      }.    if( eM
4f80: 6f 64 65 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  ode==PAGER_JOURN
4f90: 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 26 26 20  ALMODE_QUERY && 
4fa0: 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20  pId2->n==0 ){.  
4fb0: 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 22      /* Convert "
4fc0: 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d  PRAGMA journal_m
4fd0: 6f 64 65 22 20 69 6e 74 6f 20 22 50 52 41 47 4d  ode" into "PRAGM
4fe0: 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d  A main.journal_m
4ff0: 6f 64 65 22 20 2a 2f 0a 20 20 20 20 20 20 69 44  ode" */.      iD
5000: 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 49 64  b = 0;.      pId
5010: 32 2d 3e 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  2->n = 1;.    }.
5020: 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e      for(ii=db->n
5030: 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d  Db-1; ii>=0; ii-
5040: 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62  -){.      if( db
5050: 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26  ->aDb[ii].pBt &&
5060: 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64   (ii==iDb || pId
5070: 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20  2->n==0) ){.    
5080: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55      sqlite3VdbeU
5090: 73 65 73 42 74 72 65 65 28 76 2c 20 69 69 29 3b  sesBtree(v, ii);
50a0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
50b0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
50c0: 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20 69 69  _JournalMode, ii
50d0: 2c 20 31 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20  , 1, eMode);.   
50e0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
50f0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
5100: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
5110: 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62 72 65  , 1, 1);.    bre
5120: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
5130: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
5140: 6d 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65  ma.]journal_size
5150: 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 50 52 41  _limit.  **  PRA
5160: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6a 6f 75  GMA [schema.]jou
5170: 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d  rnal_size_limit=
5180: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20  N.  **.  ** Get 
5190: 6f 72 20 73 65 74 20 74 68 65 20 73 69 7a 65 20  or set the size 
51a0: 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63  limit on rollbac
51b0: 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e  k journal files.
51c0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
51d0: 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a  gTyp_JOURNAL_SIZ
51e0: 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50  E_LIMIT: {.    P
51f0: 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73  ager *pPager = s
5200: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
5210: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
5220: 69 36 34 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b  i64 iLimit = -2;
5230: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
5240: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
5250: 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52  DecOrHexToI64(zR
5260: 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 29 3b 0a  ight, &iLimit);.
5270: 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74        if( iLimit
5280: 3c 2d 31 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d  <-1 ) iLimit = -
5290: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4c 69  1;.    }.    iLi
52a0: 6d 69 74 20 3d 20 73 71 6c 69 74 65 33 50 61 67  mit = sqlite3Pag
52b0: 65 72 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d  erJournalSizeLim
52c0: 69 74 28 70 50 61 67 65 72 2c 20 69 4c 69 6d 69  it(pPager, iLimi
52d0: 74 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69  t);.    returnSi
52e0: 6e 67 6c 65 49 6e 74 28 76 2c 20 22 6a 6f 75 72  ngleInt(v, "jour
52f0: 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c  nal_size_limit",
5300: 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 62 72   iLimit);.    br
5310: 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66  eak;.  }..#endif
5320: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
5330: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
5340: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
5350: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 75 74  GMA [schema.]aut
5360: 6f 5f 76 61 63 75 75 6d 0a 20 20 2a 2a 20 20 50  o_vacuum.  **  P
5370: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61  RAGMA [schema.]a
5380: 75 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a  uto_vacuum=N.  *
5390: 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20 73 65  *.  ** Get or se
53a0: 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  t the value of t
53b0: 68 65 20 64 61 74 61 62 61 73 65 20 27 61 75 74  he database 'aut
53c0: 6f 2d 76 61 63 75 75 6d 27 20 70 61 72 61 6d 65  o-vacuum' parame
53d0: 74 65 72 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61  ter..  ** The va
53e0: 6c 75 65 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20  lue is one of:  
53f0: 30 20 4e 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20  0 NONE 1 FULL 2 
5400: 49 4e 43 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f  INCREMENTAL.  */
5410: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5420: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
5430: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 41    case PragTyp_A
5440: 55 54 4f 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20  UTO_VACUUM: {.  
5450: 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70    Btree *pBt = p
5460: 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73 73  Db->pBt;.    ass
5470: 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20  ert( pBt!=0 );. 
5480: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
5490: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  {.      returnSi
54a0: 6e 67 6c 65 49 6e 74 28 76 2c 20 22 61 75 74 6f  ngleInt(v, "auto
54b0: 5f 76 61 63 75 75 6d 22 2c 20 73 71 6c 69 74 65  _vacuum", sqlite
54c0: 33 42 74 72 65 65 47 65 74 41 75 74 6f 56 61 63  3BtreeGetAutoVac
54d0: 75 75 6d 28 70 42 74 29 29 3b 0a 20 20 20 20 7d  uum(pBt));.    }
54e0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20  else{.      int 
54f0: 65 41 75 74 6f 20 3d 20 67 65 74 41 75 74 6f 56  eAuto = getAutoV
5500: 61 63 75 75 6d 28 7a 52 69 67 68 74 29 3b 0a 20  acuum(zRight);. 
5510: 20 20 20 20 20 61 73 73 65 72 74 28 20 65 41 75       assert( eAu
5520: 74 6f 3e 3d 30 20 26 26 20 65 41 75 74 6f 3c 3d  to>=0 && eAuto<=
5530: 32 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e  2 );.      db->n
5540: 65 78 74 41 75 74 6f 76 61 63 20 3d 20 28 75 38  extAutovac = (u8
5550: 29 65 41 75 74 6f 3b 0a 20 20 20 20 20 20 2f 2a  )eAuto;.      /*
5560: 20 43 61 6c 6c 20 53 65 74 41 75 74 6f 56 61 63   Call SetAutoVac
5570: 75 75 6d 28 29 20 74 6f 20 73 65 74 20 69 6e 69  uum() to set ini
5580: 74 69 61 6c 69 7a 65 20 74 68 65 20 69 6e 74 65  tialize the inte
5590: 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64 0a 20 20  rnal auto and.  
55a0: 20 20 20 20 2a 2a 20 69 6e 63 72 2d 76 61 63 75      ** incr-vacu
55b0: 75 6d 20 66 6c 61 67 73 2e 20 54 68 69 73 20 69  um flags. This i
55c0: 73 20 72 65 71 75 69 72 65 64 20 69 6e 20 63 61  s required in ca
55d0: 73 65 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69  se this connecti
55e0: 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 63 72 65 61  on.      ** crea
55f0: 74 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  tes the database
5600: 20 66 69 6c 65 2e 20 49 74 20 69 73 20 69 6d 70   file. It is imp
5610: 6f 72 74 61 6e 74 20 74 68 61 74 20 69 74 20 69  ortant that it i
5620: 73 20 63 72 65 61 74 65 64 0a 20 20 20 20 20 20  s created.      
5630: 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61  ** as an auto-va
5640: 63 75 75 6d 20 63 61 70 61 62 6c 65 20 64 62 2e  cuum capable db.
5650: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
5660: 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
5670: 65 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28 70  eSetAutoVacuum(p
5680: 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20 20 20 20  Bt, eAuto);.    
5690: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
56a0: 5f 4f 4b 20 26 26 20 28 65 41 75 74 6f 3d 3d 31  _OK && (eAuto==1
56b0: 20 7c 7c 20 65 41 75 74 6f 3d 3d 32 29 20 29 7b   || eAuto==2) ){
56c0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e  .        /* When
56d0: 20 73 65 74 74 69 6e 67 20 74 68 65 20 61 75 74   setting the aut
56e0: 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65 20 74 6f  o_vacuum mode to
56f0: 20 65 69 74 68 65 72 20 22 66 75 6c 6c 22 20 6f   either "full" o
5700: 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 69  r .        ** "i
5710: 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20 77 72 69  ncremental", wri
5720: 74 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  te the value of 
5730: 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68 65 20 64  meta[6] in the d
5740: 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 20 20  atabase.        
5750: 2a 2a 20 66 69 6c 65 2e 20 42 65 66 6f 72 65 20  ** file. Before 
5760: 77 72 69 74 69 6e 67 20 74 6f 20 6d 65 74 61 5b  writing to meta[
5770: 36 5d 2c 20 63 68 65 63 6b 20 74 68 61 74 20 6d  6], check that m
5780: 65 74 61 5b 33 5d 20 69 6e 64 69 63 61 74 65 73  eta[3] indicates
5790: 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 74  .        ** that
57a0: 20 74 68 69 73 20 72 65 61 6c 6c 79 20 69 73 20   this really is 
57b0: 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 63  an auto-vacuum c
57c0: 61 70 61 62 6c 65 20 64 61 74 61 62 61 73 65 2e  apable database.
57d0: 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
57e0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
57f0: 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f   int iLn = VDBE_
5800: 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29  OFFSET_LINENO(2)
5810: 3b 0a 20 20 20 20 20 20 20 20 73 74 61 74 69 63  ;.        static
5820: 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
5830: 74 20 73 65 74 4d 65 74 61 36 5b 5d 20 3d 20 7b  t setMeta6[] = {
5840: 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  .          { OP_
5850: 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20  Transaction,    
5860: 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20  0,         1,   
5870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 7d                0}
5880: 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  ,    /* 0 */.   
5890: 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64         { OP_Read
58a0: 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c 20 20  Cookie,     0,  
58b0: 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20         1,       
58c0: 20 20 42 54 52 45 45 5f 4c 41 52 47 45 53 54 5f    BTREE_LARGEST_
58d0: 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20 20 20  ROOT_PAGE},.    
58e0: 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20        { OP_If,  
58f0: 20 20 20 20 20 20 20 20 20 20 20 31 2c 20 20 20             1,   
5900: 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20        0,        
5910: 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20           0},    
5920: 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 2 */.        
5930: 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20    { OP_Halt,    
5940: 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b         SQLITE_OK
5950: 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20 20 20 20  , OE_Abort,     
5960: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33       0},    /* 3
5970: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20   */.          { 
5980: 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20  OP_SetCookie,   
5990: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 42 54     0,         BT
59a0: 52 45 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c  REE_INCR_VACUUM,
59b0: 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a   0},    /* 4 */.
59c0: 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20          };.     
59d0: 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a     VdbeOp *aOp;.
59e0: 20 20 20 20 20 20 20 20 69 6e 74 20 69 41 64 64          int iAdd
59f0: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  r = sqlite3VdbeC
5a00: 75 72 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20  urrentAddr(v);. 
5a10: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
5a20: 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63  beVerifyNoMalloc
5a30: 52 65 71 75 69 72 65 64 28 76 2c 20 41 72 72 61  Required(v, Arra
5a40: 79 53 69 7a 65 28 73 65 74 4d 65 74 61 36 29 29  ySize(setMeta6))
5a50: 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 20 3d 20  ;.        aOp = 
5a60: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
5a70: 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a  List(v, ArraySiz
5a80: 65 28 73 65 74 4d 65 74 61 36 29 2c 20 73 65 74  e(setMeta6), set
5a90: 4d 65 74 61 36 2c 20 69 4c 6e 29 3b 0a 20 20 20  Meta6, iLn);.   
5aa0: 20 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46       if( ONLY_IF
5ab0: 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28  _REALLOC_STRESS(
5ac0: 61 4f 70 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b  aOp==0) ) break;
5ad0: 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e  .        aOp[0].
5ae0: 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20  p1 = iDb;.      
5af0: 20 20 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44    aOp[1].p1 = iD
5b00: 62 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 32  b;.        aOp[2
5b10: 5d 2e 70 32 20 3d 20 69 41 64 64 72 2b 34 3b 0a  ].p2 = iAddr+4;.
5b20: 20 20 20 20 20 20 20 20 61 4f 70 5b 34 5d 2e 70          aOp[4].p
5b30: 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 20  1 = iDb;.       
5b40: 20 61 4f 70 5b 34 5d 2e 70 33 20 3d 20 65 41 75   aOp[4].p3 = eAu
5b50: 74 6f 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  to - 1;.        
5b60: 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42  sqlite3VdbeUsesB
5b70: 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20  tree(v, iDb);.  
5b80: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
5b90: 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69  break;.  }.#endi
5ba0: 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  f..  /*.  **  PR
5bb0: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69 6e  AGMA [schema.]in
5bc0: 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d  cremental_vacuum
5bd0: 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f  (N).  **.  ** Do
5be0: 20 4e 20 73 74 65 70 73 20 6f 66 20 69 6e 63 72   N steps of incr
5bf0: 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e  emental vacuumin
5c00: 67 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2e  g on a database.
5c10: 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  .  */.#ifndef SQ
5c20: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
5c30: 43 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67  CUUM.  case Prag
5c40: 54 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f  Typ_INCREMENTAL_
5c50: 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e  VACUUM: {.    in
5c60: 74 20 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a  t iLimit, addr;.
5c70: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d      if( zRight==
5c80: 30 20 7c 7c 20 21 73 71 6c 69 74 65 33 47 65 74  0 || !sqlite3Get
5c90: 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 69  Int32(zRight, &i
5ca0: 4c 69 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74  Limit) || iLimit
5cb0: 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 4c 69  <=0 ){.      iLi
5cc0: 6d 69 74 20 3d 20 30 78 37 66 66 66 66 66 66 66  mit = 0x7fffffff
5cd0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
5ce0: 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
5cf0: 72 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30  ration(pParse, 0
5d00: 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69  , iDb);.    sqli
5d10: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
5d20: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69   OP_Integer, iLi
5d30: 6d 69 74 2c 20 31 29 3b 0a 20 20 20 20 61 64 64  mit, 1);.    add
5d40: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
5d50: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72  ddOp1(v, OP_Incr
5d60: 56 61 63 75 75 6d 2c 20 69 44 62 29 3b 20 56 64  Vacuum, iDb); Vd
5d70: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
5d80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
5d90: 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp1(v, OP_Resul
5da0: 74 52 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73 71  tRow, 1);.    sq
5db0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
5dc0: 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c  v, OP_AddImm, 1,
5dd0: 20 2d 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65   -1);.    sqlite
5de0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
5df0: 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72  P_IfPos, 1, addr
5e00: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
5e10: 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  v);.    sqlite3V
5e20: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
5e30: 64 64 72 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  ddr);.    break;
5e40: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .  }.#endif..#if
5e50: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
5e60: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20  _PAGER_PRAGMAS. 
5e70: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
5e80: 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f   [schema.]cache_
5e90: 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d  size.  **  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 3d 4e 0a 20 20 2a 2a 0a 20 20 2a  _size=N.  **.  *
5ec0: 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d  * The first form
5ed0: 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72   reports the cur
5ee0: 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69  rent local setti
5ef0: 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ng for the.  ** 
5f00: 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e  page cache size.
5f10: 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
5f20: 20 73 65 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a   sets the local.
5f30: 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20    ** page cache 
5f40: 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 49 66 20  size value.  If 
5f50: 4e 20 69 73 20 70 6f 73 69 74 69 76 65 20 74 68  N is positive th
5f60: 65 6e 20 74 68 61 74 20 69 73 20 74 68 65 0a 20  en that is the. 
5f70: 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61   ** number of pa
5f80: 67 65 73 20 69 6e 20 74 68 65 20 63 61 63 68 65  ges in the cache
5f90: 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74  .  If N is negat
5fa0: 69 76 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20  ive, then the.  
5fb0: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  ** number of pag
5fc0: 65 73 20 69 73 20 61 64 6a 75 73 74 65 64 20 73  es is adjusted s
5fd0: 6f 20 74 68 61 74 20 74 68 65 20 63 61 63 68 65  o that the cache
5fe0: 20 75 73 65 73 20 2d 4e 20 6b 69 62 69 62 79 74   uses -N kibibyt
5ff0: 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72  es.  ** of memor
6000: 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  y..  */.  case P
6010: 72 61 67 54 79 70 5f 43 41 43 48 45 5f 53 49 5a  ragTyp_CACHE_SIZ
6020: 45 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28  E: {.    assert(
6030: 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
6040: 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
6050: 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 21   0) );.    if( !
6060: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
6070: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
6080: 76 2c 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c  v, "cache_size",
6090: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63   pDb->pSchema->c
60a0: 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20  ache_size);.    
60b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
60c0: 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41   size = sqlite3A
60d0: 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20  toi(zRight);.   
60e0: 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
60f0: 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69  >cache_size = si
6100: 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ze;.      sqlite
6110: 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69  3BtreeSetCacheSi
6120: 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62  ze(pDb->pBt, pDb
6130: 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65  ->pSchema->cache
6140: 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20  _size);.    }.  
6150: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
6160: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
6170: 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73  [schema.]cache_s
6180: 70 69 6c 6c 0a 20 20 2a 2a 20 20 50 52 41 47 4d  pill.  **  PRAGM
6190: 41 20 63 61 63 68 65 5f 73 70 69 6c 6c 3d 42 4f  A cache_spill=BO
61a0: 4f 4c 45 41 4e 0a 20 20 2a 2a 20 20 50 52 41 47  OLEAN.  **  PRAG
61b0: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68  MA [schema.]cach
61c0: 65 5f 73 70 69 6c 6c 3d 4e 0a 20 20 2a 2a 0a 20  e_spill=N.  **. 
61d0: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f   ** The first fo
61e0: 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63  rm reports the c
61f0: 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74  urrent local set
6200: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a  ting for the.  *
6210: 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 70 69  * page cache spi
6220: 6c 6c 20 73 69 7a 65 2e 20 54 68 65 20 73 65 63  ll size. The sec
6230: 6f 6e 64 20 66 6f 72 6d 20 74 75 72 6e 73 20 63  ond form turns c
6240: 61 63 68 65 20 73 70 69 6c 6c 20 6f 6e 0a 20 20  ache spill on.  
6250: 2a 2a 20 6f 72 20 6f 66 66 2e 20 20 57 68 65 6e  ** or off.  When
6260: 20 74 75 72 6e 6e 69 6e 67 20 63 61 63 68 65 20   turnning cache 
6270: 73 70 69 6c 6c 20 6f 6e 2c 20 74 68 65 20 73 69  spill on, the si
6280: 7a 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  ze is set to the
6290: 0a 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 63 61  .  ** current ca
62a0: 63 68 65 5f 73 69 7a 65 2e 20 20 54 68 65 20 74  che_size.  The t
62b0: 68 69 72 64 20 66 6f 72 6d 20 73 65 74 73 20 61  hird form sets a
62c0: 20 73 70 69 6c 6c 20 73 69 7a 65 20 74 68 61 74   spill size that
62d0: 0a 20 20 2a 2a 20 6d 61 79 20 62 65 20 64 69 66  .  ** may be dif
62e0: 66 65 72 65 6e 74 20 66 6f 72 6d 20 74 68 65 20  ferent form the 
62f0: 63 61 63 68 65 20 73 69 7a 65 2e 0a 20 20 2a 2a  cache size..  **
6300: 20 49 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76   If N is positiv
6310: 65 20 74 68 65 6e 20 74 68 61 74 20 69 73 20 74  e then that is t
6320: 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f  he.  ** number o
6330: 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 63  f pages in the c
6340: 61 63 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e  ache.  If N is n
6350: 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68  egative, then th
6360: 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  e.  ** number of
6370: 20 70 61 67 65 73 20 69 73 20 61 64 6a 75 73 74   pages is adjust
6380: 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 63  ed so that the c
6390: 61 63 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62  ache uses -N kib
63a0: 69 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d  ibytes.  ** of m
63b0: 65 6d 6f 72 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  emory..  **.  **
63c0: 20 49 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   If the number o
63d0: 66 20 63 61 63 68 65 5f 73 70 69 6c 6c 20 70 61  f cache_spill pa
63e0: 67 65 73 20 69 73 20 6c 65 73 73 20 74 68 65 6e  ges is less then
63f0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 20   the number of. 
6400: 20 2a 2a 20 63 61 63 68 65 5f 73 69 7a 65 20 70   ** cache_size p
6410: 61 67 65 73 2c 20 6e 6f 20 73 70 69 6c 6c 69 6e  ages, no spillin
6420: 67 20 6f 63 63 75 72 73 20 75 6e 74 69 6c 20 74  g occurs until t
6430: 68 65 20 70 61 67 65 20 63 6f 75 6e 74 20 65 78  he page count ex
6440: 63 65 65 64 73 0a 20 20 2a 2a 20 74 68 65 20 6e  ceeds.  ** the n
6450: 75 6d 62 65 72 20 6f 66 20 63 61 63 68 65 5f 73  umber of cache_s
6460: 69 7a 65 20 70 61 67 65 73 2e 0a 20 20 2a 2a 0a  ize pages..  **.
6470: 20 20 2a 2a 20 54 68 65 20 63 61 63 68 65 5f 73    ** The cache_s
6480: 70 69 6c 6c 3d 42 4f 4f 4c 45 41 4e 20 73 65 74  pill=BOOLEAN set
6490: 74 69 6e 67 20 61 70 70 6c 69 65 73 20 74 6f 20  ting applies to 
64a0: 61 6c 6c 20 61 74 74 61 63 68 65 64 20 73 63 68  all attached sch
64b0: 65 6d 61 73 2c 0a 20 20 2a 2a 20 6e 6f 74 20 6a  emas,.  ** not j
64c0: 75 73 74 20 74 68 65 20 73 63 68 65 6d 61 20 73  ust the schema s
64d0: 70 65 63 69 66 69 65 64 2e 0a 20 20 2a 2f 0a 20  pecified..  */. 
64e0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 41   case PragTyp_CA
64f0: 43 48 45 5f 53 50 49 4c 4c 3a 20 7b 0a 20 20 20  CHE_SPILL: {.   
6500: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
6510: 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
6520: 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
6530: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
6540: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  {.      returnSi
6550: 6e 67 6c 65 49 6e 74 28 76 2c 20 22 63 61 63 68  ngleInt(v, "cach
6560: 65 5f 73 70 69 6c 6c 22 2c 20 0a 20 20 20 20 20  e_spill", .     
6570: 20 20 20 20 28 64 62 2d 3e 66 6c 61 67 73 20 26      (db->flags &
6580: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
6590: 6c 6c 29 3d 3d 30 20 3f 20 30 20 3a 20 0a 20 20  ll)==0 ? 0 : .  
65a0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
65b0: 33 42 74 72 65 65 53 65 74 53 70 69 6c 6c 53 69  3BtreeSetSpillSi
65c0: 7a 65 28 70 44 62 2d 3e 70 42 74 2c 30 29 29 3b  ze(pDb->pBt,0));
65d0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
65e0: 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 31 3b 0a    int size = 1;.
65f0: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
6600: 33 47 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74  3GetInt32(zRight
6610: 2c 20 26 73 69 7a 65 29 20 29 7b 0a 20 20 20 20  , &size) ){.    
6620: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
6630: 53 65 74 53 70 69 6c 6c 53 69 7a 65 28 70 44 62  SetSpillSize(pDb
6640: 2d 3e 70 42 74 2c 20 73 69 7a 65 29 3b 0a 20 20  ->pBt, size);.  
6650: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
6660: 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
6670: 6e 28 7a 52 69 67 68 74 2c 20 73 69 7a 65 21 3d  n(zRight, size!=
6680: 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62  0) ){.        db
6690: 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
66a0: 45 5f 43 61 63 68 65 53 70 69 6c 6c 3b 0a 20 20  E_CacheSpill;.  
66b0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
66c0: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20     db->flags &= 
66d0: 7e 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69  ~SQLITE_CacheSpi
66e0: 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ll;.      }.    
66f0: 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61    setAllPagerFla
6700: 67 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20  gs(db);.    }.  
6710: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
6720: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
6730: 5b 73 63 68 65 6d 61 2e 5d 6d 6d 61 70 5f 73 69  [schema.]mmap_si
6740: 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ze(N).  **.  ** 
6750: 55 73 65 64 20 74 6f 20 73 65 74 20 6d 61 70 70  Used to set mapp
6760: 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74 2e 20  ing size limit. 
6770: 54 68 65 20 6d 61 70 70 69 6e 67 20 73 69 7a 65  The mapping size
6780: 20 6c 69 6d 69 74 20 69 73 0a 20 20 2a 2a 20 75   limit is.  ** u
6790: 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74 68 65  sed to limit the
67a0: 20 61 67 67 72 65 67 61 74 65 20 73 69 7a 65 20   aggregate size 
67b0: 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72 79 20 6d 61  of all memory ma
67c0: 70 70 65 64 20 72 65 67 69 6f 6e 73 20 6f 66 20  pped regions of 
67d0: 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73  the.  ** databas
67e0: 65 20 66 69 6c 65 2e 20 49 66 20 74 68 69 73 20  e file. If this 
67f0: 70 61 72 61 6d 65 74 65 72 20 69 73 20 73 65 74  parameter is set
6800: 20 74 6f 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6d   to zero, then m
6810: 65 6d 6f 72 79 20 6d 61 70 70 69 6e 67 0a 20 20  emory mapping.  
6820: 2a 2a 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61  ** is not used a
6830: 74 20 61 6c 6c 2e 20 20 49 66 20 4e 20 69 73 20  t all.  If N is 
6840: 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74  negative, then t
6850: 68 65 20 64 65 66 61 75 6c 74 20 6d 65 6d 6f 72  he default memor
6860: 79 20 6d 61 70 0a 20 20 2a 2a 20 6c 69 6d 69 74  y map.  ** limit
6870: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 73   determined by s
6880: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51  qlite3_config(SQ
6890: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50  LITE_CONFIG_MMAP
68a0: 5f 53 49 5a 45 29 20 69 73 20 73 65 74 2e 0a 20  _SIZE) is set.. 
68b0: 20 2a 2a 20 54 68 65 20 70 61 72 61 6d 65 74 65   ** The paramete
68c0: 72 20 4e 20 69 73 20 6d 65 61 73 75 72 65 64 20  r N is measured 
68d0: 69 6e 20 62 79 74 65 73 2e 0a 20 20 2a 2a 0a 20  in bytes..  **. 
68e0: 20 2a 2a 20 54 68 69 73 20 76 61 6c 75 65 20 69   ** This value i
68f0: 73 20 61 64 76 69 73 6f 72 79 2e 20 20 54 68 65  s advisory.  The
6900: 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46 53 20   underlying VFS 
6910: 69 73 20 66 72 65 65 20 74 6f 20 6d 65 6d 6f 72  is free to memor
6920: 79 20 6d 61 70 0a 20 20 2a 2a 20 61 73 20 6c 69  y map.  ** as li
6930: 74 74 6c 65 20 6f 72 20 61 73 20 6d 75 63 68 20  ttle or as much 
6940: 61 73 20 69 74 20 77 61 6e 74 73 2e 20 20 45 78  as it wants.  Ex
6950: 63 65 70 74 2c 20 69 66 20 4e 20 69 73 20 73 65  cept, if N is se
6960: 74 20 74 6f 20 30 20 74 68 65 6e 20 74 68 65 0a  t to 0 then the.
6970: 20 20 2a 2a 20 75 70 70 65 72 20 6c 61 79 65 72    ** upper layer
6980: 73 20 77 69 6c 6c 20 6e 65 76 65 72 20 69 6e 76  s will never inv
6990: 6f 6b 65 20 74 68 65 20 78 46 65 74 63 68 20 69  oke the xFetch i
69a0: 6e 74 65 72 66 61 63 65 73 20 74 6f 20 74 68 65  nterfaces to the
69b0: 20 56 46 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73   VFS..  */.  cas
69c0: 65 20 50 72 61 67 54 79 70 5f 4d 4d 41 50 5f 53  e PragTyp_MMAP_S
69d0: 49 5a 45 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74  IZE: {.    sqlit
69e0: 65 33 5f 69 6e 74 36 34 20 73 7a 3b 0a 23 69 66  e3_int64 sz;.#if
69f0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
6a00: 5f 53 49 5a 45 3e 30 0a 20 20 20 20 61 73 73 65  _SIZE>0.    asse
6a10: 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
6a20: 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
6a30: 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66  Db, 0) );.    if
6a40: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
6a50: 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20    int ii;.      
6a60: 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
6a70: 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 73 7a  oI64(zRight, &sz
6a80: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 7a 3c  );.      if( sz<
6a90: 30 20 29 20 73 7a 20 3d 20 73 71 6c 69 74 65 33  0 ) sz = sqlite3
6aa0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 4d  GlobalConfig.szM
6ab0: 6d 61 70 3b 0a 20 20 20 20 20 20 69 66 28 20 70  map;.      if( p
6ac0: 49 64 32 2d 3e 6e 3d 3d 30 20 29 20 64 62 2d 3e  Id2->n==0 ) db->
6ad0: 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b 0a 20 20 20  szMmap = sz;.   
6ae0: 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44     for(ii=db->nD
6af0: 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d  b-1; ii>=0; ii--
6b00: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 64  ){.        if( d
6b10: 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26  b->aDb[ii].pBt &
6b20: 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49  & (ii==iDb || pI
6b30: 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20  d2->n==0) ){.   
6b40: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
6b50: 72 65 65 53 65 74 4d 6d 61 70 4c 69 6d 69 74 28  reeSetMmapLimit(
6b60: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
6b70: 20 73 7a 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a   sz);.        }.
6b80: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
6b90: 20 20 73 7a 20 3d 20 2d 31 3b 0a 20 20 20 20 72    sz = -1;.    r
6ba0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  c = sqlite3_file
6bb0: 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62  _control(db, zDb
6bc0: 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4d  , SQLITE_FCNTL_M
6bd0: 4d 41 50 5f 53 49 5a 45 2c 20 26 73 7a 29 3b 0a  MAP_SIZE, &sz);.
6be0: 23 65 6c 73 65 0a 20 20 20 20 73 7a 20 3d 20 30  #else.    sz = 0
6bf0: 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
6c00: 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 20 20 20  E_OK;.#endif.   
6c10: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
6c20: 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  OK ){.      retu
6c30: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22  rnSingleInt(v, "
6c40: 6d 6d 61 70 5f 73 69 7a 65 22 2c 20 73 7a 29 3b  mmap_size", sz);
6c50: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72  .    }else if( r
6c60: 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55  c!=SQLITE_NOTFOU
6c70: 4e 44 20 29 7b 0a 20 20 20 20 20 20 70 50 61 72  ND ){.      pPar
6c80: 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20  se->nErr++;.    
6c90: 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72    pParse->rc = r
6ca0: 63 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65  c;.    }.    bre
6cb0: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
6cc0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  **   PRAGMA temp
6cd0: 5f 73 74 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52  _store.  **   PR
6ce0: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20  AGMA temp_store 
6cf0: 3d 20 22 64 65 66 61 75 6c 74 22 7c 22 6d 65 6d  = "default"|"mem
6d00: 6f 72 79 22 7c 22 66 69 6c 65 22 0a 20 20 2a 2a  ory"|"file".  **
6d10: 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20  .  ** Return or 
6d20: 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61  set the local va
6d30: 6c 75 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f  lue of the temp_
6d40: 73 74 6f 72 65 20 66 6c 61 67 2e 20 20 43 68 61  store flag.  Cha
6d50: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c  nging.  ** the l
6d60: 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20  ocal value does 
6d70: 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73  not make changes
6d80: 20 74 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c   to the disk fil
6d90: 65 20 61 6e 64 20 74 68 65 20 64 65 66 61 75 6c  e and the defaul
6da0: 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 77 69 6c  t.  ** value wil
6db0: 6c 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 68  l be restored th
6dc0: 65 20 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20  e next time the 
6dd0: 64 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e  database is open
6de0: 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f  ed..  **.  ** No
6df0: 74 65 20 74 68 61 74 20 69 74 20 69 73 20 70 6f  te that it is po
6e00: 73 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 6c  ssible for the l
6e10: 69 62 72 61 72 79 20 63 6f 6d 70 69 6c 65 2d 74  ibrary compile-t
6e20: 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74 6f 0a 20  ime options to. 
6e30: 20 2a 2a 20 6f 76 65 72 72 69 64 65 20 74 68 69   ** override thi
6e40: 73 20 73 65 74 74 69 6e 67 0a 20 20 2a 2f 0a 20  s setting.  */. 
6e50: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 45   case PragTyp_TE
6e60: 4d 50 5f 53 54 4f 52 45 3a 20 7b 0a 20 20 20 20  MP_STORE: {.    
6e70: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
6e80: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
6e90: 65 49 6e 74 28 76 2c 20 22 74 65 6d 70 5f 73 74  eInt(v, "temp_st
6ea0: 6f 72 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73  ore", db->temp_s
6eb0: 74 6f 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  tore);.    }else
6ec0: 7b 0a 20 20 20 20 20 20 63 68 61 6e 67 65 54 65  {.      changeTe
6ed0: 6d 70 53 74 6f 72 61 67 65 28 70 50 61 72 73 65  mpStorage(pParse
6ee0: 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d  , zRight);.    }
6ef0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
6f00: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
6f10: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
6f20: 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20  irectory.  **   
6f30: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
6f40: 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22  e_directory = ""
6f50: 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65  |"directory_name
6f60: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
6f70: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f  rn or set the lo
6f80: 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65  cal value of the
6f90: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
6fa0: 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61  ctory flag.  Cha
6fb0: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76  nging.  ** the v
6fc0: 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63  alue sets a spec
6fd0: 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20 74  ific directory t
6fe0: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 65  o be used for te
6ff0: 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a 20  mporary files.. 
7000: 20 2a 2a 20 53 65 74 74 69 6e 67 20 74 6f 20 61   ** Setting to a
7010: 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76   null string rev
7020: 65 72 74 73 20 74 6f 20 74 68 65 20 64 65 66 61  erts to the defa
7030: 75 6c 74 20 74 65 6d 70 6f 72 61 72 79 20 64 69  ult temporary di
7040: 72 65 63 74 6f 72 79 20 73 65 61 72 63 68 2e 0a  rectory search..
7050: 20 20 2a 2a 20 49 66 20 74 65 6d 70 6f 72 61 72    ** If temporar
7060: 79 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 63  y directory is c
7070: 68 61 6e 67 65 64 2c 20 74 68 65 6e 20 69 6e 76  hanged, then inv
7080: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
7090: 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20  ge..  **.  */.  
70a0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d  case PragTyp_TEM
70b0: 50 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52  P_STORE_DIRECTOR
70c0: 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52  Y: {.    if( !zR
70d0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65  ight ){.      re
70e0: 74 75 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76  turnSingleText(v
70f0: 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  , "temp_store_di
7100: 72 65 63 74 6f 72 79 22 2c 20 73 71 6c 69 74 65  rectory", sqlite
7110: 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79  3_temp_directory
7120: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69  );.    }else{.#i
7130: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7140: 54 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28 20  T_WSD.      if( 
7150: 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20  zRight[0] ){.   
7160: 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20       int res;.  
7170: 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
7180: 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e 70  e3OsAccess(db->p
7190: 56 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c  Vfs, zRight, SQL
71a0: 49 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44 57  ITE_ACCESS_READW
71b0: 52 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20 20  RITE, &res);.   
71c0: 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
71d0: 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30  ITE_OK || res==0
71e0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
71f0: 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50  lite3ErrorMsg(pP
7200: 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72 69  arse, "not a wri
7210: 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79 22  table directory"
7220: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  );.          got
7230: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
7240: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
7250: 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54 45        if( SQLITE
7260: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20  _TEMP_STORE==0. 
7270: 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54 45        || (SQLITE
7280: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26  _TEMP_STORE==1 &
7290: 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65  & db->temp_store
72a0: 3c 3d 31 29 0a 20 20 20 20 20 20 20 7c 7c 20 28  <=1).       || (
72b0: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
72c0: 45 3d 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d 70  E==2 && db->temp
72d0: 5f 73 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20  _store==1).     
72e0: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 76 61   ){.        inva
72f0: 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67  lidateTempStorag
7300: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  e(pParse);.     
7310: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
7320: 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 74 65  _free(sqlite3_te
7330: 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20  mp_directory);. 
7340: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
7350: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  0] ){.        sq
7360: 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63  lite3_temp_direc
7370: 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d  tory = sqlite3_m
7380: 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69  printf("%s", zRi
7390: 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ght);.      }els
73a0: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
73b0: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
73c0: 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23  y = 0;.      }.#
73d0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
73e0: 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20  OMIT_WSD */.    
73f0: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
7400: 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f  ..#if SQLITE_OS_
7410: 57 49 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  WIN.  /*.  **   
7420: 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72  PRAGMA data_stor
7430: 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a  e_directory.  **
7440: 20 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73     PRAGMA data_s
7450: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d  tore_directory =
7460: 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e   ""|"directory_n
7470: 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  ame".  **.  ** R
7480: 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65  eturn or set the
7490: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20   local value of 
74a0: 74 68 65 20 64 61 74 61 5f 73 74 6f 72 65 5f 64  the data_store_d
74b0: 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20  irectory flag.  
74c0: 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68  Changing.  ** th
74d0: 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20 73  e value sets a s
74e0: 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f 72  pecific director
74f0: 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72  y to be used for
7500: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
7510: 74 68 61 74 0a 20 20 2a 2a 20 77 65 72 65 20 73  that.  ** were s
7520: 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61 20  pecified with a 
7530: 72 65 6c 61 74 69 76 65 20 70 61 74 68 6e 61 6d  relative pathnam
7540: 65 2e 20 20 53 65 74 74 69 6e 67 20 74 6f 20 61  e.  Setting to a
7550: 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76   null string rev
7560: 65 72 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65  erts.  ** to the
7570: 20 64 65 66 61 75 6c 74 20 64 61 74 61 62 61 73   default databas
7580: 65 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68 69  e directory, whi
7590: 63 68 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  ch for database 
75a0: 66 69 6c 65 73 20 73 70 65 63 69 66 69 65 64 20  files specified 
75b0: 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61  with.  ** a rela
75c0: 74 69 76 65 20 70 61 74 68 20 77 69 6c 6c 20 70  tive path will p
75d0: 72 6f 62 61 62 6c 79 20 62 65 20 62 61 73 65 64  robably be based
75e0: 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   on the current 
75f0: 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68  directory for th
7600: 65 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20  e.  ** process. 
7610: 20 44 61 74 61 62 61 73 65 20 66 69 6c 65 20 73   Database file s
7620: 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61 6e  pecified with an
7630: 20 61 62 73 6f 6c 75 74 65 20 70 61 74 68 20 61   absolute path a
7640: 72 65 20 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a  re not impacted.
7650: 20 20 2a 2a 20 62 79 20 74 68 69 73 20 73 65 74    ** by this set
7660: 74 69 6e 67 2c 20 72 65 67 61 72 64 6c 65 73 73  ting, regardless
7670: 20 6f 66 20 69 74 73 20 76 61 6c 75 65 2e 0a 20   of its value.. 
7680: 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20   **.  */.  case 
7690: 50 72 61 67 54 79 70 5f 44 41 54 41 5f 53 54 4f  PragTyp_DATA_STO
76a0: 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a  RE_DIRECTORY: {.
76b0: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
76c0: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
76d0: 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 64 61  ingleText(v, "da
76e0: 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  ta_store_directo
76f0: 72 79 22 2c 20 73 71 6c 69 74 65 33 5f 64 61 74  ry", sqlite3_dat
7700: 61 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20  a_directory);.  
7710: 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66    }else{.#ifndef
7720: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
7730: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
7740: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
7750: 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20  int res;.       
7760: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41   rc = sqlite3OsA
7770: 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20  ccess(db->pVfs, 
7780: 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41  zRight, SQLITE_A
7790: 43 43 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c  CCESS_READWRITE,
77a0: 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
77b0: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
77c0: 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K || res==0 ){. 
77d0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
77e0: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
77f0: 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65   "not a writable
7800: 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20   directory");.  
7810: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61          goto pra
7820: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20  gma_out;.       
7830: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
7840: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73 71   sqlite3_free(sq
7850: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
7860: 74 6f 72 79 29 3b 0a 20 20 20 20 20 20 69 66 28  tory);.      if(
7870: 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20   zRight[0] ){.  
7880: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64 61        sqlite3_da
7890: 74 61 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 73  ta_directory = s
78a0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
78b0: 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20  %s", zRight);.  
78c0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
78d0: 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f     sqlite3_data_
78e0: 64 69 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20  directory = 0;. 
78f0: 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a       }.#endif /*
7900: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
7910: 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 62 72   */.    }.    br
7920: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
7930: 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  .#if SQLITE_ENAB
7940: 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45  LE_LOCKING_STYLE
7950: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
7960: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6c 6f 63  GMA [schema.]loc
7970: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 0a 20 20 2a  k_proxy_file.  *
7980: 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  *   PRAGMA [sche
7990: 6d 61 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  ma.]lock_proxy_f
79a0: 69 6c 65 20 3d 20 22 3a 61 75 74 6f 3a 22 7c 22  ile = ":auto:"|"
79b0: 6c 6f 63 6b 5f 66 69 6c 65 5f 70 61 74 68 22 0a  lock_file_path".
79c0: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
79d0: 20 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c 75   or set the valu
79e0: 65 20 6f 66 20 74 68 65 20 6c 6f 63 6b 5f 70 72  e of the lock_pr
79f0: 6f 78 79 5f 66 69 6c 65 20 66 6c 61 67 2e 20 20  oxy_file flag.  
7a00: 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68  Changing.  ** th
7a10: 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20 73  e value sets a s
7a20: 70 65 63 69 66 69 63 20 66 69 6c 65 20 74 6f 20  pecific file to 
7a30: 62 65 20 75 73 65 64 20 66 6f 72 20 64 61 74 61  be used for data
7a40: 62 61 73 65 20 61 63 63 65 73 73 20 6c 6f 63 6b  base access lock
7a50: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63  s..  **.  */.  c
7a60: 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b  ase PragTyp_LOCK
7a70: 5f 50 52 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a 20  _PROXY_FILE: {. 
7a80: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
7a90: 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a 70  {.      Pager *p
7aa0: 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
7ab0: 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70  treePager(pDb->p
7ac0: 42 74 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20  Bt);.      char 
7ad0: 2a 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68  *proxy_file_path
7ae0: 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 73   = NULL;.      s
7af0: 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69  qlite3_file *pFi
7b00: 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  le = sqlite3Page
7b10: 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20  rFile(pPager);. 
7b20: 20 20 20 20 20 73 71 6c 69 74 65 33 4f 73 46 69       sqlite3OsFi
7b30: 6c 65 43 6f 6e 74 72 6f 6c 48 69 6e 74 28 70 46  leControlHint(pF
7b40: 69 6c 65 2c 20 53 51 4c 49 54 45 5f 47 45 54 5f  ile, SQLITE_GET_
7b50: 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a  LOCKPROXYFILE, .
7b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b70: 20 20 20 20 20 20 20 20 20 20 20 26 70 72 6f 78             &prox
7b80: 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20  y_file_path);.  
7b90: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
7ba0: 54 65 78 74 28 76 2c 20 22 6c 6f 63 6b 5f 70 72  Text(v, "lock_pr
7bb0: 6f 78 79 5f 66 69 6c 65 22 2c 20 70 72 6f 78 79  oxy_file", proxy
7bc0: 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20  _file_path);.   
7bd0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 50 61   }else{.      Pa
7be0: 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71  ger *pPager = sq
7bf0: 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
7c00: 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20  pDb->pBt);.     
7c10: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70   sqlite3_file *p
7c20: 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61  File = sqlite3Pa
7c30: 67 65 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b  gerFile(pPager);
7c40: 0a 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a  .      int res;.
7c50: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
7c60: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 72  [0] ){.        r
7c70: 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65  es=sqlite3OsFile
7c80: 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53  Control(pFile, S
7c90: 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52  QLITE_SET_LOCKPR
7ca0: 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20  OXYFILE, .      
7cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a                 z
7cd0: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 20  Right);.      } 
7ce0: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 72  else {.        r
7cf0: 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65  es=sqlite3OsFile
7d00: 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53  Control(pFile, S
7d10: 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52  QLITE_SET_LOCKPR
7d20: 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20  OXYFILE, .      
7d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e                 N
7d50: 55 4c 4c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ULL);.      }.  
7d60: 20 20 20 20 69 66 28 20 72 65 73 21 3d 53 51 4c      if( res!=SQL
7d70: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
7d80: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
7d90: 67 28 70 50 61 72 73 65 2c 20 22 66 61 69 6c 65  g(pParse, "faile
7da0: 64 20 74 6f 20 73 65 74 20 6c 6f 63 6b 20 70 72  d to set lock pr
7db0: 6f 78 79 20 66 69 6c 65 22 29 3b 0a 20 20 20 20  oxy file");.    
7dc0: 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f      goto pragma_
7dd0: 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
7de0: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
7df0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
7e00: 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e  TE_ENABLE_LOCKIN
7e10: 47 5f 53 54 59 4c 45 20 2a 2f 20 20 20 20 20 20  G_STYLE */      
7e20: 0a 20 20 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .    .  /*.  ** 
7e30: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
7e40: 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20  .]synchronous.  
7e50: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
7e60: 65 6d 61 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73  ema.]synchronous
7e70: 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46  =OFF|ON|NORMAL|F
7e80: 55 4c 4c 7c 45 58 54 52 41 0a 20 20 2a 2a 0a 20  ULL|EXTRA.  **. 
7e90: 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65   ** Return or se
7ea0: 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75  t the local valu
7eb0: 65 20 6f 66 20 74 68 65 20 73 79 6e 63 68 72 6f  e of the synchro
7ec0: 6e 6f 75 73 20 66 6c 61 67 2e 20 20 43 68 61 6e  nous flag.  Chan
7ed0: 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f  ging.  ** the lo
7ee0: 63 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e  cal value does n
7ef0: 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20  ot make changes 
7f00: 74 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65  to the disk file
7f10: 20 61 6e 64 20 74 68 65 0a 20 20 2a 2a 20 64 65   and the.  ** de
7f20: 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c  fault value will
7f30: 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65   be restored the
7f40: 20 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64   next time the d
7f50: 61 74 61 62 61 73 65 20 69 73 0a 20 20 2a 2a 20  atabase is.  ** 
7f60: 6f 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 63  opened..  */.  c
7f70: 61 73 65 20 50 72 61 67 54 79 70 5f 53 59 4e 43  ase PragTyp_SYNC
7f80: 48 52 4f 4e 4f 55 53 3a 20 7b 0a 20 20 20 20 69  HRONOUS: {.    i
7f90: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
7fa0: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
7fb0: 49 6e 74 28 76 2c 20 22 73 79 6e 63 68 72 6f 6e  Int(v, "synchron
7fc0: 6f 75 73 22 2c 20 70 44 62 2d 3e 73 61 66 65 74  ous", pDb->safet
7fd0: 79 5f 6c 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20  y_level-1);.    
7fe0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28  }else{.      if(
7ff0: 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   !db->autoCommit
8000: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
8010: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
8020: 73 65 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  se, .           
8030: 20 22 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d   "Safety level m
8040: 61 79 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65  ay not be change
8050: 64 20 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73  d inside a trans
8060: 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20  action");.      
8070: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69  }else{.        i
8080: 6e 74 20 69 4c 65 76 65 6c 20 3d 20 28 67 65 74  nt iLevel = (get
8090: 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 52 69 67  SafetyLevel(zRig
80a0: 68 74 2c 30 2c 31 29 2b 31 29 20 26 20 50 41 47  ht,0,1)+1) & PAG
80b0: 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d  ER_SYNCHRONOUS_M
80c0: 41 53 4b 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ASK;.        if(
80d0: 20 69 4c 65 76 65 6c 3d 3d 30 20 29 20 69 4c 65   iLevel==0 ) iLe
80e0: 76 65 6c 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  vel = 1;.       
80f0: 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76   pDb->safety_lev
8100: 65 6c 20 3d 20 69 4c 65 76 65 6c 3b 0a 20 20 20  el = iLevel;.   
8110: 20 20 20 20 20 70 44 62 2d 3e 62 53 79 6e 63 53       pDb->bSyncS
8120: 65 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  et = 1;.        
8130: 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73  setAllPagerFlags
8140: 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  (db);.      }.  
8150: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
8160: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
8170: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
8180: 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64  RAGMAS */..#ifnd
8190: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
81a0: 4c 41 47 5f 50 52 41 47 4d 41 53 0a 20 20 63 61  LAG_PRAGMAS.  ca
81b0: 73 65 20 50 72 61 67 54 79 70 5f 46 4c 41 47 3a  se PragTyp_FLAG:
81c0: 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
81d0: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 65  t==0 ){.      re
81e0: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c  turnSingleInt(v,
81f0: 20 70 50 72 61 67 6d 61 2d 3e 7a 4e 61 6d 65 2c   pPragma->zName,
8200: 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 70 50   (db->flags & pP
8210: 72 61 67 6d 61 2d 3e 69 41 72 67 29 21 3d 30 20  ragma->iArg)!=0 
8220: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
8230: 20 20 20 20 69 6e 74 20 6d 61 73 6b 20 3d 20 70      int mask = p
8240: 50 72 61 67 6d 61 2d 3e 69 41 72 67 3b 20 20 20  Pragma->iArg;   
8250: 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 62 69 74 73   /* Mask of bits
8260: 20 74 6f 20 73 65 74 20 6f 72 20 63 6c 65 61 72   to set or clear
8270: 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 64  . */.      if( d
8280: 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
8290: 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 46   ){.        /* F
82a0: 6f 72 65 69 67 6e 20 6b 65 79 20 73 75 70 70 6f  oreign key suppo
82b0: 72 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 65 6e  rt may not be en
82c0: 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65  abled or disable
82d0: 64 20 77 68 69 6c 65 20 6e 6f 74 0a 20 20 20 20  d while not.    
82e0: 20 20 20 20 2a 2a 20 69 6e 20 61 75 74 6f 2d 63      ** in auto-c
82f0: 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20 20 2a 2f 0a  ommit mode.  */.
8300: 20 20 20 20 20 20 20 20 6d 61 73 6b 20 26 3d 20          mask &= 
8310: 7e 28 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e  ~(SQLITE_Foreign
8320: 4b 65 79 73 29 3b 0a 20 20 20 20 20 20 7d 0a 23  Keys);.      }.#
8330: 69 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  if SQLITE_USER_A
8340: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
8350: 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 68      if( db->auth
8360: 2e 61 75 74 68 4c 65 76 65 6c 3d 3d 55 41 55 54  .authLevel==UAUT
8370: 48 5f 55 73 65 72 20 29 7b 0a 20 20 20 20 20 20  H_User ){.      
8380: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f    /* Do not allo
8390: 77 20 6e 6f 6e 2d 61 64 6d 69 6e 20 75 73 65 72  w non-admin user
83a0: 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20  s to modify the 
83b0: 73 63 68 65 6d 61 20 61 72 62 69 74 72 61 72 69  schema arbitrari
83c0: 6c 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 61  ly */.        ma
83d0: 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45 5f 57  sk &= ~(SQLITE_W
83e0: 72 69 74 65 53 63 68 65 6d 61 29 3b 0a 20 20 20  riteSchema);.   
83f0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
8400: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 65     if( sqlite3Ge
8410: 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c  tBoolean(zRight,
8420: 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 64   0) ){.        d
8430: 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 6d 61 73 6b  b->flags |= mask
8440: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
8450: 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73         db->flags
8460: 20 26 3d 20 7e 6d 61 73 6b 3b 0a 20 20 20 20 20   &= ~mask;.     
8470: 20 20 20 69 66 28 20 6d 61 73 6b 3d 3d 53 51 4c     if( mask==SQL
8480: 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 20 64  ITE_DeferFKs ) d
8490: 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
84a0: 6f 6e 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  ons = 0;.      }
84b0: 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6e 79 20  ..      /* Many 
84c0: 6f 66 20 74 68 65 20 66 6c 61 67 2d 70 72 61 67  of the flag-prag
84d0: 6d 61 73 20 6d 6f 64 69 66 79 20 74 68 65 20 63  mas modify the c
84e0: 6f 64 65 20 67 65 6e 65 72 61 74 65 64 20 62 79  ode generated by
84f0: 20 74 68 65 20 53 51 4c 20 0a 20 20 20 20 20 20   the SQL .      
8500: 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 28 65 67 2e  ** compiler (eg.
8510: 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 29 2e   count_changes).
8520: 20 53 6f 20 61 64 64 20 61 6e 20 6f 70 63 6f 64   So add an opcod
8530: 65 20 74 6f 20 65 78 70 69 72 65 20 61 6c 6c 0a  e to expire all.
8540: 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65        ** compile
8550: 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  d SQL statements
8560: 20 61 66 74 65 72 20 6d 6f 64 69 66 79 69 6e 67   after modifying
8570: 20 61 20 70 72 61 67 6d 61 20 76 61 6c 75 65 2e   a pragma value.
8580: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
8590: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
85a0: 30 28 76 2c 20 4f 50 5f 45 78 70 69 72 65 29 3b  0(v, OP_Expire);
85b0: 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67  .      setAllPag
85c0: 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20  erFlags(db);.   
85d0: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
85e0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
85f0: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
8600: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
8610: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48   SQLITE_OMIT_SCH
8620: 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a  EMA_PRAGMAS.  /*
8630: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74  .  **   PRAGMA t
8640: 61 62 6c 65 5f 69 6e 66 6f 28 3c 74 61 62 6c 65  able_info(<table
8650: 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  >).  **.  ** Ret
8660: 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  urn a single row
8670: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
8680: 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61   of the named ta
8690: 62 6c 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e 73  ble. The columns
86a0: 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 72 65 74   of.  ** the ret
86b0: 75 72 6e 65 64 20 64 61 74 61 20 73 65 74 20 61  urned data set a
86c0: 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63 69  re:.  **.  ** ci
86d0: 64 3a 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e  d:        Column
86e0: 20 69 64 20 28 6e 75 6d 62 65 72 65 64 20 66 72   id (numbered fr
86f0: 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
8700: 2c 20 73 74 61 72 74 69 6e 67 20 61 74 20 30 29  , starting at 0)
8710: 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20 20 20 20 20  .  ** name:     
8720: 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20 20    Column name.  
8730: 2a 2a 20 74 79 70 65 3a 20 20 20 20 20 20 20 43  ** type:       C
8740: 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f  olumn declaratio
8750: 6e 20 74 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f 74  n type..  ** not
8760: 6e 75 6c 6c 3a 20 20 20 20 54 72 75 65 20 69 66  null:    True if
8770: 20 27 4e 4f 54 20 4e 55 4c 4c 27 20 69 73 20 70   'NOT NULL' is p
8780: 61 72 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65  art of column de
8790: 63 6c 61 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 64  claration.  ** d
87a0: 66 6c 74 5f 76 61 6c 75 65 3a 20 54 68 65 20 64  flt_value: The d
87b0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
87c0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 69 66 20   the column, if 
87d0: 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  any..  */.  case
87e0: 20 50 72 61 67 54 79 70 5f 54 41 42 4c 45 5f 49   PragTyp_TABLE_I
87f0: 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74 20  NFO: if( zRight 
8800: 29 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  ){.    Table *pT
8810: 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73  ab;.    pTab = s
8820: 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
8830: 65 28 70 50 61 72 73 65 2c 20 4c 4f 43 41 54 45  e(pParse, LOCATE
8840: 5f 4e 4f 45 52 52 2c 20 7a 52 69 67 68 74 2c 20  _NOERR, zRight, 
8850: 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54  zDb);.    if( pT
8860: 61 62 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74  ab ){.      stat
8870: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  ic const char *a
8880: 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  zCol[] = {.     
8890: 20 20 20 20 22 63 69 64 22 2c 20 22 6e 61 6d 65      "cid", "name
88a0: 22 2c 20 22 74 79 70 65 22 2c 20 22 6e 6f 74 6e  ", "type", "notn
88b0: 75 6c 6c 22 2c 20 22 64 66 6c 74 5f 76 61 6c 75  ull", "dflt_valu
88c0: 65 22 2c 20 22 70 6b 22 0a 20 20 20 20 20 20 7d  e", "pk".      }
88d0: 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6b  ;.      int i, k
88e0: 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 48 69 64  ;.      int nHid
88f0: 64 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 43  den = 0;.      C
8900: 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20 20 20  olumn *pCol;.   
8910: 20 20 20 49 6e 64 65 78 20 2a 70 50 6b 20 3d 20     Index *pPk = 
8920: 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65  sqlite3PrimaryKe
8930: 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20 20  yIndex(pTab);.  
8940: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
8950: 20 3d 20 36 3b 0a 20 20 20 20 20 20 73 71 6c 69   = 6;.      sqli
8960: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
8970: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29  ema(pParse, iDb)
8980: 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 43 6f  ;.      setAllCo
8990: 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 36 2c 20  lumnNames(v, 6, 
89a0: 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20  azCol); assert( 
89b0: 36 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43  6==ArraySize(azC
89c0: 6f 6c 29 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  ol) );.      sql
89d0: 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
89e0: 6e 4e 61 6d 65 73 28 70 50 61 72 73 65 2c 20 70  nNames(pParse, p
89f0: 54 61 62 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  Tab);.      for(
8a00: 69 3d 30 2c 20 70 43 6f 6c 3d 70 54 61 62 2d 3e  i=0, pCol=pTab->
8a10: 61 43 6f 6c 3b 20 69 3c 70 54 61 62 2d 3e 6e 43  aCol; i<pTab->nC
8a20: 6f 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c 2b 2b 29  ol; i++, pCol++)
8a30: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 49 73  {.        if( Is
8a40: 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 70 43 6f  HiddenColumn(pCo
8a50: 6c 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  l) ){.          
8a60: 6e 48 69 64 64 65 6e 2b 2b 3b 0a 20 20 20 20 20  nHidden++;.     
8a70: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20       continue;. 
8a80: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
8a90: 20 69 66 28 20 28 70 43 6f 6c 2d 3e 63 6f 6c 46   if( (pCol->colF
8aa0: 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 50  lags & COLFLAG_P
8ab0: 52 49 4d 4b 45 59 29 3d 3d 30 20 29 7b 0a 20 20  RIMKEY)==0 ){.  
8ac0: 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20          k = 0;. 
8ad0: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
8ae0: 20 70 50 6b 3d 3d 30 20 29 7b 0a 20 20 20 20 20   pPk==0 ){.     
8af0: 20 20 20 20 20 6b 20 3d 20 31 3b 0a 20 20 20 20       k = 1;.    
8b00: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
8b10: 20 20 20 20 20 66 6f 72 28 6b 3d 31 3b 20 6b 3c       for(k=1; k<
8b20: 3d 70 54 61 62 2d 3e 6e 43 6f 6c 20 26 26 20 70  =pTab->nCol && p
8b30: 50 6b 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 2d 31  Pk->aiColumn[k-1
8b40: 5d 21 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a 20 20 20  ]!=i; k++){}.   
8b50: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61       }.        a
8b60: 73 73 65 72 74 28 20 70 43 6f 6c 2d 3e 70 44 66  ssert( pCol->pDf
8b70: 6c 74 3d 3d 30 20 7c 7c 20 70 43 6f 6c 2d 3e 70  lt==0 || pCol->p
8b80: 44 66 6c 74 2d 3e 6f 70 3d 3d 54 4b 5f 53 50 41  Dflt->op==TK_SPA
8b90: 4e 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  N );.        sql
8ba0: 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61  ite3VdbeMultiLoa
8bb0: 64 28 76 2c 20 31 2c 20 22 69 73 73 69 73 69 22  d(v, 1, "issisi"
8bc0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
8bd0: 20 69 2d 6e 48 69 64 64 65 6e 2c 0a 20 20 20 20   i-nHidden,.    
8be0: 20 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c 2d             pCol-
8bf0: 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  >zName,.        
8c00: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f         sqlite3Co
8c10: 6c 75 6d 6e 54 79 70 65 28 70 43 6f 6c 2c 22 22  lumnType(pCol,""
8c20: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
8c30: 20 20 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20    pCol->notNull 
8c40: 3f 20 31 20 3a 20 30 2c 0a 20 20 20 20 20 20 20  ? 1 : 0,.       
8c50: 20 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e 70 44          pCol->pD
8c60: 66 6c 74 20 3f 20 70 43 6f 6c 2d 3e 70 44 66 6c  flt ? pCol->pDfl
8c70: 74 2d 3e 75 2e 7a 54 6f 6b 65 6e 20 3a 20 30 2c  t->u.zToken : 0,
8c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8c90: 6b 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  k);.        sqli
8ca0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
8cb0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
8cc0: 2c 20 36 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 6);.      }.  
8cd0: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
8ce0: 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ..  case PragTyp
8cf0: 5f 53 54 41 54 53 3a 20 7b 0a 20 20 20 20 73 74  _STATS: {.    st
8d00: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
8d10: 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 74 61  *azCol[] = { "ta
8d20: 62 6c 65 22 2c 20 22 69 6e 64 65 78 22 2c 20 22  ble", "index", "
8d30: 77 69 64 74 68 22 2c 20 22 68 65 69 67 68 74 22  width", "height"
8d40: 20 7d 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   };.    Index *p
8d50: 49 64 78 3b 0a 20 20 20 20 48 61 73 68 45 6c 65  Idx;.    HashEle
8d60: 6d 20 2a 69 3b 0a 20 20 20 20 76 20 3d 20 73 71  m *i;.    v = sq
8d70: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
8d80: 72 73 65 29 3b 0a 20 20 20 20 70 50 61 72 73 65  rse);.    pParse
8d90: 2d 3e 6e 4d 65 6d 20 3d 20 34 3b 0a 20 20 20 20  ->nMem = 4;.    
8da0: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
8db0: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
8dc0: 69 44 62 29 3b 0a 20 20 20 20 73 65 74 41 6c 6c  iDb);.    setAll
8dd0: 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 34  ColumnNames(v, 4
8de0: 2c 20 61 7a 43 6f 6c 29 3b 20 20 61 73 73 65 72  , azCol);  asser
8df0: 74 28 20 34 3d 3d 41 72 72 61 79 53 69 7a 65 28  t( 4==ArraySize(
8e00: 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 66 6f  azCol) );.    fo
8e10: 72 28 69 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(i=sqliteHashFi
8e20: 72 73 74 28 26 70 44 62 2d 3e 70 53 63 68 65 6d  rst(&pDb->pSchem
8e30: 61 2d 3e 74 62 6c 48 61 73 68 29 3b 20 69 3b 20  a->tblHash); i; 
8e40: 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  i=sqliteHashNext
8e50: 28 69 29 29 7b 0a 20 20 20 20 20 20 54 61 62 6c  (i)){.      Tabl
8e60: 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65  e *pTab = sqlite
8e70: 48 61 73 68 44 61 74 61 28 69 29 3b 0a 20 20 20  HashData(i);.   
8e80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75     sqlite3VdbeMu
8e90: 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 73  ltiLoad(v, 1, "s
8ea0: 73 69 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20  sii",.          
8eb0: 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20   pTab->zName,.  
8ec0: 20 20 20 20 20 20 20 20 20 30 2c 0a 20 20 20 20           0,.    
8ed0: 20 20 20 20 20 20 20 70 54 61 62 2d 3e 73 7a 54         pTab->szT
8ee0: 61 62 52 6f 77 2c 0a 20 20 20 20 20 20 20 20 20  abRow,.         
8ef0: 20 20 70 54 61 62 2d 3e 6e 52 6f 77 4c 6f 67 45    pTab->nRowLogE
8f00: 73 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  st);.      sqlit
8f10: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
8f20: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
8f30: 20 34 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70   4);.      for(p
8f40: 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
8f50: 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64  ; pIdx; pIdx=pId
8f60: 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20  x->pNext){.     
8f70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75     sqlite3VdbeMu
8f80: 6c 74 69 4c 6f 61 64 28 76 2c 20 32 2c 20 22 73  ltiLoad(v, 2, "s
8f90: 69 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ii",.           
8fa0: 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20  pIdx->zName,.   
8fb0: 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 73 7a          pIdx->sz
8fc0: 49 64 78 52 6f 77 2c 0a 20 20 20 20 20 20 20 20  IdxRow,.        
8fd0: 20 20 20 70 49 64 78 2d 3e 61 69 52 6f 77 4c 6f     pIdx->aiRowLo
8fe0: 67 45 73 74 5b 30 5d 29 3b 0a 20 20 20 20 20 20  gEst[0]);.      
8ff0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9000: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
9010: 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20  Row, 1, 4);.    
9020: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
9030: 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50  break;..  case P
9040: 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46  ragTyp_INDEX_INF
9050: 4f 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b  O: if( zRight ){
9060: 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78  .    Index *pIdx
9070: 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  ;.    Table *pTa
9080: 62 3b 0a 20 20 20 20 70 49 64 78 20 3d 20 73 71  b;.    pIdx = sq
9090: 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 64  lite3FindIndex(d
90a0: 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b  b, zRight, zDb);
90b0: 0a 20 20 20 20 69 66 28 20 70 49 64 78 20 29 7b  .    if( pIdx ){
90c0: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
90d0: 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b  nst char *azCol[
90e0: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 22  ] = {.         "
90f0: 73 65 71 6e 6f 22 2c 20 22 63 69 64 22 2c 20 22  seqno", "cid", "
9100: 6e 61 6d 65 22 2c 20 22 64 65 73 63 22 2c 20 22  name", "desc", "
9110: 63 6f 6c 6c 22 2c 20 22 6b 65 79 22 0a 20 20 20  coll", "key".   
9120: 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20     };.      int 
9130: 69 3b 0a 20 20 20 20 20 20 69 6e 74 20 6d 78 3b  i;.      int mx;
9140: 0a 20 20 20 20 20 20 69 66 28 20 70 50 72 61 67  .      if( pPrag
9150: 6d 61 2d 3e 69 41 72 67 20 29 7b 0a 20 20 20 20  ma->iArg ){.    
9160: 20 20 20 20 2f 2a 20 50 52 41 47 4d 41 20 69 6e      /* PRAGMA in
9170: 64 65 78 5f 78 69 6e 66 6f 20 28 6e 65 77 65 72  dex_xinfo (newer
9180: 20 76 65 72 73 69 6f 6e 20 77 69 74 68 20 6d 6f   version with mo
9190: 72 65 20 72 6f 77 73 20 61 6e 64 20 63 6f 6c 75  re rows and colu
91a0: 6d 6e 73 29 20 2a 2f 0a 20 20 20 20 20 20 20 20  mns) */.        
91b0: 6d 78 20 3d 20 70 49 64 78 2d 3e 6e 43 6f 6c 75  mx = pIdx->nColu
91c0: 6d 6e 3b 0a 20 20 20 20 20 20 20 20 70 50 61 72  mn;.        pPar
91d0: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20  se->nMem = 6;.  
91e0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
91f0: 20 20 20 2f 2a 20 50 52 41 47 4d 41 20 69 6e 64     /* PRAGMA ind
9200: 65 78 5f 69 6e 66 6f 20 28 6c 65 67 61 63 79 20  ex_info (legacy 
9210: 76 65 72 73 69 6f 6e 29 20 2a 2f 0a 20 20 20 20  version) */.    
9220: 20 20 20 20 6d 78 20 3d 20 70 49 64 78 2d 3e 6e      mx = pIdx->n
9230: 4b 65 79 43 6f 6c 3b 0a 20 20 20 20 20 20 20 20  KeyCol;.        
9240: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33  pParse->nMem = 3
9250: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
9260: 70 54 61 62 20 3d 20 70 49 64 78 2d 3e 70 54 61  pTab = pIdx->pTa
9270: 62 6c 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ble;.      sqlit
9280: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
9290: 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b  ma(pParse, iDb);
92a0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
92b0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 3c 3d 41 72 72  Parse->nMem<=Arr
92c0: 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b  aySize(azCol) );
92d0: 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c  .      setAllCol
92e0: 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 70 50 61 72  umnNames(v, pPar
92f0: 73 65 2d 3e 6e 4d 65 6d 2c 20 61 7a 43 6f 6c 29  se->nMem, azCol)
9300: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  ;.      for(i=0;
9310: 20 69 3c 6d 78 3b 20 69 2b 2b 29 7b 0a 20 20 20   i<mx; i++){.   
9320: 20 20 20 20 20 69 31 36 20 63 6e 75 6d 20 3d 20       i16 cnum = 
9330: 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69  pIdx->aiColumn[i
9340: 5d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ];.        sqlit
9350: 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28  e3VdbeMultiLoad(
9360: 76 2c 20 31 2c 20 22 69 69 73 22 2c 20 69 2c 20  v, 1, "iis", i, 
9370: 63 6e 75 6d 2c 0a 20 20 20 20 20 20 20 20 20 20  cnum,.          
9380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9390: 20 20 20 63 6e 75 6d 3c 30 20 3f 20 30 20 3a 20     cnum<0 ? 0 : 
93a0: 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d 5d  pTab->aCol[cnum]
93b0: 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20  .zName);.       
93c0: 20 69 66 28 20 70 50 72 61 67 6d 61 2d 3e 69 41   if( pPragma->iA
93d0: 72 67 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  rg ){.          
93e0: 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69  sqlite3VdbeMulti
93f0: 4c 6f 61 64 28 76 2c 20 34 2c 20 22 69 73 69 22  Load(v, 4, "isi"
9400: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 49  ,.            pI
9410: 64 78 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69  dx->aSortOrder[i
9420: 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ],.            p
9430: 49 64 78 2d 3e 61 7a 43 6f 6c 6c 5b 69 5d 2c 0a  Idx->azColl[i],.
9440: 20 20 20 20 20 20 20 20 20 20 20 20 69 3c 70 49              i<pI
9450: 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 0a 20 20  dx->nKeyCol);.  
9460: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
9470: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9480: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
9490: 77 2c 20 31 2c 20 70 50 61 72 73 65 2d 3e 6e 4d  w, 1, pParse->nM
94a0: 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  em);.      }.   
94b0: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
94c0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
94d0: 49 4e 44 45 58 5f 4c 49 53 54 3a 20 69 66 28 20  INDEX_LIST: if( 
94e0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 49 6e  zRight ){.    In
94f0: 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 54  dex *pIdx;.    T
9500: 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20  able *pTab;.    
9510: 69 6e 74 20 69 3b 0a 20 20 20 20 70 54 61 62 20  int i;.    pTab 
9520: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62  = sqlite3FindTab
9530: 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a  le(db, zRight, z
9540: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61  Db);.    if( pTa
9550: 62 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69  b ){.      stati
9560: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a  c const char *az
9570: 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  Col[] = {.      
9580: 20 20 22 73 65 71 22 2c 20 22 6e 61 6d 65 22 2c    "seq", "name",
9590: 20 22 75 6e 69 71 75 65 22 2c 20 22 6f 72 69 67   "unique", "orig
95a0: 69 6e 22 2c 20 22 70 61 72 74 69 61 6c 22 0a 20  in", "partial". 
95b0: 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 76 20       };.      v 
95c0: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65  = sqlite3GetVdbe
95d0: 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20  (pParse);.      
95e0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 35  pParse->nMem = 5
95f0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 43  ;.      sqlite3C
9600: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
9610: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
9620: 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e      setAllColumn
9630: 4e 61 6d 65 73 28 76 2c 20 35 2c 20 61 7a 43 6f  Names(v, 5, azCo
9640: 6c 29 3b 20 20 61 73 73 65 72 74 28 20 35 3d 3d  l);  assert( 5==
9650: 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29  ArraySize(azCol)
9660: 20 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 49   );.      for(pI
9670: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 2c  dx=pTab->pIndex,
9680: 20 69 3d 30 3b 20 70 49 64 78 3b 20 70 49 64 78   i=0; pIdx; pIdx
9690: 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 69 2b  =pIdx->pNext, i+
96a0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73  +){.        cons
96b0: 74 20 63 68 61 72 20 2a 61 7a 4f 72 69 67 69 6e  t char *azOrigin
96c0: 5b 5d 20 3d 20 7b 20 22 63 22 2c 20 22 75 22 2c  [] = { "c", "u",
96d0: 20 22 70 6b 22 20 7d 3b 0a 20 20 20 20 20 20 20   "pk" };.       
96e0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74   sqlite3VdbeMult
96f0: 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69 73 69  iLoad(v, 1, "isi
9700: 73 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  si",.           
9710: 69 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 49  i,.           pI
9720: 64 78 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20  dx->zName,.     
9730: 20 20 20 20 20 20 49 73 55 6e 69 71 75 65 49 6e        IsUniqueIn
9740: 64 65 78 28 70 49 64 78 29 2c 0a 20 20 20 20 20  dex(pIdx),.     
9750: 20 20 20 20 20 20 61 7a 4f 72 69 67 69 6e 5b 70        azOrigin[p
9760: 49 64 78 2d 3e 69 64 78 54 79 70 65 5d 2c 0a 20  Idx->idxType],. 
9770: 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e            pIdx->
9780: 70 50 61 72 74 49 64 78 57 68 65 72 65 21 3d 30  pPartIdxWhere!=0
9790: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
97a0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
97b0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
97c0: 20 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   5);.      }.   
97d0: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
97e0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
97f0: 44 41 54 41 42 41 53 45 5f 4c 49 53 54 3a 20 7b  DATABASE_LIST: {
9800: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
9810: 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20  t char *azCol[] 
9820: 3d 20 7b 20 22 73 65 71 22 2c 20 22 6e 61 6d 65  = { "seq", "name
9830: 22 2c 20 22 66 69 6c 65 22 20 7d 3b 0a 20 20 20  ", "file" };.   
9840: 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 50 61 72   int i;.    pPar
9850: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20  se->nMem = 3;.  
9860: 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61    setAllColumnNa
9870: 6d 65 73 28 76 2c 20 33 2c 20 61 7a 43 6f 6c 29  mes(v, 3, azCol)
9880: 3b 20 61 73 73 65 72 74 28 20 33 3d 3d 41 72 72  ; assert( 3==Arr
9890: 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b  aySize(azCol) );
98a0: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
98b0: 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
98c0: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62       if( db->aDb
98d0: 5b 69 5d 2e 70 42 74 3d 3d 30 20 29 20 63 6f 6e  [i].pBt==0 ) con
98e0: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 61 73 73  tinue;.      ass
98f0: 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  ert( db->aDb[i].
9900: 7a 44 62 53 4e 61 6d 65 21 3d 30 20 29 3b 0a 20  zDbSName!=0 );. 
9910: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9920: 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20  MultiLoad(v, 1, 
9930: 22 69 73 73 22 2c 0a 20 20 20 20 20 20 20 20 20  "iss",.         
9940: 69 2c 0a 20 20 20 20 20 20 20 20 20 64 62 2d 3e  i,.         db->
9950: 61 44 62 5b 69 5d 2e 7a 44 62 53 4e 61 6d 65 2c  aDb[i].zDbSName,
9960: 0a 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  .         sqlite
9970: 33 42 74 72 65 65 47 65 74 46 69 6c 65 6e 61 6d  3BtreeGetFilenam
9980: 65 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  e(db->aDb[i].pBt
9990: 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ));.      sqlite
99a0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
99b0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
99c0: 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  3);.    }.  }.  
99d0: 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50  break;..  case P
99e0: 72 61 67 54 79 70 5f 43 4f 4c 4c 41 54 49 4f 4e  ragTyp_COLLATION
99f0: 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20 73 74 61  _LIST: {.    sta
9a00: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
9a10: 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 73 65 71  azCol[] = { "seq
9a20: 22 2c 20 22 6e 61 6d 65 22 20 7d 3b 0a 20 20 20  ", "name" };.   
9a30: 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20   int i = 0;.    
9a40: 48 61 73 68 45 6c 65 6d 20 2a 70 3b 0a 20 20 20  HashElem *p;.   
9a50: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
9a60: 32 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c  2;.    setAllCol
9a70: 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 32 2c 20 61  umnNames(v, 2, a
9a80: 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 32  zCol); assert( 2
9a90: 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f  ==ArraySize(azCo
9aa0: 6c 29 20 29 3b 0a 20 20 20 20 66 6f 72 28 70 3d  l) );.    for(p=
9ab0: 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
9ac0: 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20  &db->aCollSeq); 
9ad0: 70 3b 20 70 3d 73 71 6c 69 74 65 48 61 73 68 4e  p; p=sqliteHashN
9ae0: 65 78 74 28 70 29 29 7b 0a 20 20 20 20 20 20 43  ext(p)){.      C
9af0: 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20  ollSeq *pColl = 
9b00: 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74  (CollSeq *)sqlit
9b10: 65 48 61 73 68 44 61 74 61 28 70 29 3b 0a 20 20  eHashData(p);.  
9b20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
9b30: 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22  ultiLoad(v, 1, "
9b40: 69 73 22 2c 20 69 2b 2b 2c 20 70 43 6f 6c 6c 2d  is", i++, pColl-
9b50: 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 73  >zName);.      s
9b60: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
9b70: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
9b80: 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20  , 1, 2);.    }. 
9b90: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
9ba0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
9bb0: 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53  T_SCHEMA_PRAGMAS
9bc0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
9bd0: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
9be0: 5f 4b 45 59 0a 20 20 63 61 73 65 20 50 72 61 67  _KEY.  case Prag
9bf0: 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f  Typ_FOREIGN_KEY_
9c00: 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67 68 74  LIST: if( zRight
9c10: 20 29 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70 46   ){.    FKey *pF
9c20: 4b 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  K;.    Table *pT
9c30: 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73  ab;.    pTab = s
9c40: 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
9c50: 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  db, zRight, zDb)
9c60: 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20 29  ;.    if( pTab )
9c70: 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69  {.      v = sqli
9c80: 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73  te3GetVdbe(pPars
9c90: 65 29 3b 0a 20 20 20 20 20 20 70 46 4b 20 3d 20  e);.      pFK = 
9ca0: 70 54 61 62 2d 3e 70 46 4b 65 79 3b 0a 20 20 20  pTab->pFKey;.   
9cb0: 20 20 20 69 66 28 20 70 46 4b 20 29 7b 0a 20 20     if( pFK ){.  
9cc0: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
9cd0: 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d  st char *azCol[]
9ce0: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20   = {.           
9cf0: 22 69 64 22 2c 20 22 73 65 71 22 2c 20 22 74 61  "id", "seq", "ta
9d00: 62 6c 65 22 2c 20 22 66 72 6f 6d 22 2c 20 22 74  ble", "from", "t
9d10: 6f 22 2c 20 22 6f 6e 5f 75 70 64 61 74 65 22 2c  o", "on_update",
9d20: 20 22 6f 6e 5f 64 65 6c 65 74 65 22 2c 0a 20 20   "on_delete",.  
9d30: 20 20 20 20 20 20 20 20 20 22 6d 61 74 63 68 22           "match"
9d40: 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  .        };.    
9d50: 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 20 0a      int i = 0; .
9d60: 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e          pParse->
9d70: 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20 20 20 20 20  nMem = 8;.      
9d80: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
9d90: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
9da0: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20  , iDb);.        
9db0: 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65  setAllColumnName
9dc0: 73 28 76 2c 20 38 2c 20 61 7a 43 6f 6c 29 3b 20  s(v, 8, azCol); 
9dd0: 61 73 73 65 72 74 28 20 38 3d 3d 41 72 72 61 79  assert( 8==Array
9de0: 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20  Size(azCol) );. 
9df0: 20 20 20 20 20 20 20 77 68 69 6c 65 28 70 46 4b         while(pFK
9e00: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  ){.          int
9e10: 20 6a 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f   j;.          fo
9e20: 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43  r(j=0; j<pFK->nC
9e30: 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; j++){.      
9e40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9e50: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c  eMultiLoad(v, 1,
9e60: 20 22 69 69 73 73 73 73 73 73 22 2c 0a 20 20 20   "iissssss",.   
9e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e80: 69 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  i,.             
9e90: 20 20 20 20 20 20 6a 2c 0a 20 20 20 20 20 20 20        j,.       
9ea0: 20 20 20 20 20 20 20 20 20 20 20 20 70 46 4b 2d              pFK-
9eb0: 3e 7a 54 6f 2c 0a 20 20 20 20 20 20 20 20 20 20  >zTo,.          
9ec0: 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e 61           pTab->a
9ed0: 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d  Col[pFK->aCol[j]
9ee0: 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 0a 20  .iFrom].zName,. 
9ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f00: 20 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a    pFK->aCol[j].z
9f10: 43 6f 6c 2c 0a 20 20 20 20 20 20 20 20 20 20 20  Col,.           
9f20: 20 20 20 20 20 20 20 20 61 63 74 69 6f 6e 4e 61          actionNa
9f30: 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b  me(pFK->aAction[
9f40: 31 5d 29 2c 20 20 2f 2a 20 4f 4e 20 55 50 44 41  1]),  /* ON UPDA
9f50: 54 45 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  TE */.          
9f60: 20 20 20 20 20 20 20 20 20 61 63 74 69 6f 6e 4e           actionN
9f70: 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e  ame(pFK->aAction
9f80: 5b 30 5d 29 2c 20 20 2f 2a 20 4f 4e 20 44 45 4c  [0]),  /* ON DEL
9f90: 45 54 45 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ETE */.         
9fa0: 20 20 20 20 20 20 20 20 20 20 22 4e 4f 4e 45 22            "NONE"
9fb0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
9fc0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
9fd0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
9fe0: 2c 20 31 2c 20 38 29 3b 0a 20 20 20 20 20 20 20  , 1, 8);.       
9ff0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 2b     }.          +
a000: 2b 69 3b 0a 20 20 20 20 20 20 20 20 20 20 70 46  +i;.          pF
a010: 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65 78 74 46 72  K = pFK->pNextFr
a020: 6f 6d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  om;.        }.  
a030: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
a040: 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20    break;.#endif 
a050: 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
a060: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
a070: 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  KEY) */..#ifndef
a080: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
a090: 45 49 47 4e 5f 4b 45 59 0a 23 69 66 6e 64 65 66  EIGN_KEY.#ifndef
a0a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
a0b0: 47 47 45 52 0a 20 20 63 61 73 65 20 50 72 61 67  GGER.  case Prag
a0c0: 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f  Typ_FOREIGN_KEY_
a0d0: 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 46 4b 65  CHECK: {.    FKe
a0e0: 79 20 2a 70 46 4b 3b 20 20 20 20 20 20 20 20 20  y *pFK;         
a0f0: 20 20 20 20 2f 2a 20 41 20 66 6f 72 65 69 67 6e      /* A foreign
a100: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
a110: 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
a120: 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
a130: 20 43 68 69 6c 64 20 74 61 62 6c 65 20 63 6f 6e   Child table con
a140: 74 61 69 6e 20 22 52 45 46 45 52 45 4e 43 45 53  tain "REFERENCES
a150: 22 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 20 20 20  " keyword */.   
a160: 20 54 61 62 6c 65 20 2a 70 50 61 72 65 6e 74 3b   Table *pParent;
a170: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e          /* Paren
a180: 74 20 74 61 62 6c 65 20 74 68 61 74 20 63 68 69  t table that chi
a190: 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a  ld points to */.
a1a0: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
a1b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
a1c0: 64 65 78 20 69 6e 20 74 68 65 20 70 61 72 65 6e  dex in the paren
a1d0: 74 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  t table */.    i
a1e0: 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
a1f0: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
a200: 75 6e 74 65 72 3a 20 20 46 6f 72 65 69 67 6e 20  unter:  Foreign 
a210: 6b 65 79 20 6e 75 6d 62 65 72 20 66 6f 72 20 70  key number for p
a220: 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6a  Tab */.    int j
a230: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a240: 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
a250: 72 3a 20 20 46 69 65 6c 64 20 6f 66 20 74 68 65  r:  Field of the
a260: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 2a 2f 0a   foreign key */.
a270: 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 6b 3b      HashElem *k;
a280: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
a290: 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 4e 65 78  op counter:  Nex
a2a0: 74 20 74 61 62 6c 65 20 69 6e 20 73 63 68 65 6d  t table in schem
a2b0: 61 20 2a 2f 0a 20 20 20 20 69 6e 74 20 78 3b 20  a */.    int x; 
a2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2d0: 2f 2a 20 72 65 73 75 6c 74 20 76 61 72 69 61 62  /* result variab
a2e0: 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  le */.    int re
a2f0: 67 52 65 73 75 6c 74 3b 20 20 20 20 20 20 20 20  gResult;        
a300: 20 2f 2a 20 33 20 72 65 67 69 73 74 65 72 73 20   /* 3 registers 
a310: 74 6f 20 68 6f 6c 64 20 61 20 72 65 73 75 6c 74  to hold a result
a320: 20 72 6f 77 20 2a 2f 0a 20 20 20 20 69 6e 74 20   row */.    int 
a330: 72 65 67 4b 65 79 3b 20 20 20 20 20 20 20 20 20  regKey;         
a340: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
a350: 6f 20 68 6f 6c 64 20 6b 65 79 20 66 6f 72 20 63  o hold key for c
a360: 68 65 63 6b 69 6e 67 20 74 68 65 20 46 4b 20 2a  hecking the FK *
a370: 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 6f 77  /.    int regRow
a380: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
a390: 52 65 67 69 73 74 65 72 73 20 74 6f 20 68 6f 6c  Registers to hol
a3a0: 64 20 61 20 72 6f 77 20 66 72 6f 6d 20 70 54 61  d a row from pTa
a3b0: 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64  b */.    int add
a3c0: 72 54 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  rTop;           
a3d0: 2f 2a 20 54 6f 70 20 6f 66 20 61 20 6c 6f 6f 70  /* Top of a loop
a3e0: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 65 69 67   checking foreig
a3f0: 6e 20 6b 65 79 73 20 2a 2f 0a 20 20 20 20 69 6e  n keys */.    in
a400: 74 20 61 64 64 72 4f 6b 3b 20 20 20 20 20 20 20  t addrOk;       
a410: 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72       /* Jump her
a420: 65 20 69 66 20 74 68 65 20 6b 65 79 20 69 73 20  e if the key is 
a430: 4f 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61  OK */.    int *a
a440: 69 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20  iCols;          
a450: 20 2f 2a 20 63 68 69 6c 64 20 74 6f 20 70 61 72   /* child to par
a460: 65 6e 74 20 63 6f 6c 75 6d 6e 20 6d 61 70 70 69  ent column mappi
a470: 6e 67 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63  ng */.    static
a480: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43   const char *azC
a490: 6f 6c 5b 5d 20 3d 20 7b 20 22 74 61 62 6c 65 22  ol[] = { "table"
a4a0: 2c 20 22 72 6f 77 69 64 22 2c 20 22 70 61 72 65  , "rowid", "pare
a4b0: 6e 74 22 2c 20 22 66 6b 69 64 22 20 7d 3b 0a 0a  nt", "fkid" };..
a4c0: 20 20 20 20 72 65 67 52 65 73 75 6c 74 20 3d 20      regResult = 
a4d0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2b 31 3b 0a  pParse->nMem+1;.
a4e0: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
a4f0: 20 2b 3d 20 34 3b 0a 20 20 20 20 72 65 67 4b 65   += 4;.    regKe
a500: 79 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d  y = ++pParse->nM
a510: 65 6d 3b 0a 20 20 20 20 72 65 67 52 6f 77 20 3d  em;.    regRow =
a520: 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b   ++pParse->nMem;
a530: 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33  .    v = sqlite3
a540: 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b  GetVdbe(pParse);
a550: 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d  .    setAllColum
a560: 6e 4e 61 6d 65 73 28 76 2c 20 34 2c 20 61 7a 43  nNames(v, 4, azC
a570: 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 34 3d 3d  ol); assert( 4==
a580: 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29  ArraySize(azCol)
a590: 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43   );.    sqlite3C
a5a0: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
a5b0: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
a5c0: 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68    k = sqliteHash
a5d0: 46 69 72 73 74 28 26 64 62 2d 3e 61 44 62 5b 69  First(&db->aDb[i
a5e0: 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c  Db].pSchema->tbl
a5f0: 48 61 73 68 29 3b 0a 20 20 20 20 77 68 69 6c 65  Hash);.    while
a600: 28 20 6b 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ( k ){.      if(
a610: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
a620: 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65     pTab = sqlite
a630: 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 70 50 61  3LocateTable(pPa
a640: 72 73 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c 20  rse, 0, zRight, 
a650: 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20 6b 20  zDb);.        k 
a660: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 0;.      }else
a670: 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62 20 3d  {.        pTab =
a680: 20 28 54 61 62 6c 65 2a 29 73 71 6c 69 74 65 48   (Table*)sqliteH
a690: 61 73 68 44 61 74 61 28 6b 29 3b 0a 20 20 20 20  ashData(k);.    
a6a0: 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61      k = sqliteHa
a6b0: 73 68 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20 20  shNext(k);.     
a6c0: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 54 61   }.      if( pTa
a6d0: 62 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70 46  b==0 || pTab->pF
a6e0: 4b 65 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  Key==0 ) continu
a6f0: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
a700: 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65  TableLock(pParse
a710: 2c 20 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e 75  , iDb, pTab->tnu
a720: 6d 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d  m, 0, pTab->zNam
a730: 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 54  e);.      if( pT
a740: 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e  ab->nCol+regRow>
a750: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20 70  pParse->nMem ) p
a760: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54  Parse->nMem = pT
a770: 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52 6f  ab->nCol + regRo
a780: 77 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  w;.      sqlite3
a790: 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65  OpenTable(pParse
a7a0: 2c 20 30 2c 20 69 44 62 2c 20 70 54 61 62 2c 20  , 0, iDb, pTab, 
a7b0: 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20  OP_OpenRead);.  
a7c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c      sqlite3VdbeL
a7d0: 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 72 65 67  oadString(v, reg
a7e0: 52 65 73 75 6c 74 2c 20 70 54 61 62 2d 3e 7a 4e  Result, pTab->zN
a7f0: 61 6d 65 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  ame);.      for(
a800: 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70  i=1, pFK=pTab->p
a810: 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20  FKey; pFK; i++, 
a820: 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72  pFK=pFK->pNextFr
a830: 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61  om){.        pPa
a840: 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46 69  rent = sqlite3Fi
a850: 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d  ndTable(db, pFK-
a860: 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20  >zTo, zDb);.    
a870: 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 3d      if( pParent=
a880: 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
a890: 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b         pIdx = 0;
a8a0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
a8b0: 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65  TableLock(pParse
a8c0: 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2d 3e  , iDb, pParent->
a8d0: 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72 65 6e 74  tnum, 0, pParent
a8e0: 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ->zName);.      
a8f0: 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c    x = sqlite3FkL
a900: 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61 72 73  ocateIndex(pPars
a910: 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c  e, pParent, pFK,
a920: 20 26 70 49 64 78 2c 20 30 29 3b 0a 20 20 20 20   &pIdx, 0);.    
a930: 20 20 20 20 69 66 28 20 78 3d 3d 30 20 29 7b 0a      if( x==0 ){.
a940: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49            if( pI
a950: 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  dx==0 ){.       
a960: 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e       sqlite3Open
a970: 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 69 2c  Table(pParse, i,
a980: 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2c 20 4f   iDb, pParent, O
a990: 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20  P_OpenRead);.   
a9a0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
a9b0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
a9c0: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
a9d0: 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c 20 70  P_OpenRead, i, p
a9e0: 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62 29 3b  Idx->tnum, iDb);
a9f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
aa00: 69 74 65 33 56 64 62 65 53 65 74 50 34 4b 65 79  ite3VdbeSetP4Key
aa10: 49 6e 66 6f 28 70 50 61 72 73 65 2c 20 70 49 64  Info(pParse, pId
aa20: 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  x);.          }.
aa30: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
aa40: 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a           k = 0;.
aa50: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
aa60: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
aa70: 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
aa80: 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 3e 30 20   pParse->nErr>0 
aa90: 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a 20 20 20  || pFK==0 );.   
aaa0: 20 20 20 69 66 28 20 70 46 4b 20 29 20 62 72 65     if( pFK ) bre
aab0: 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50  ak;.      if( pP
aac0: 61 72 73 65 2d 3e 6e 54 61 62 3c 69 20 29 20 70  arse->nTab<i ) p
aad0: 50 61 72 73 65 2d 3e 6e 54 61 62 20 3d 20 69 3b  Parse->nTab = i;
aae0: 0a 20 20 20 20 20 20 61 64 64 72 54 6f 70 20 3d  .      addrTop =
aaf0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ab00: 70 31 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c  p1(v, OP_Rewind,
ab10: 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67   0); VdbeCoverag
ab20: 65 28 76 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  e(v);.      for(
ab30: 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70  i=1, pFK=pTab->p
ab40: 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20  FKey; pFK; i++, 
ab50: 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72  pFK=pFK->pNextFr
ab60: 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61  om){.        pPa
ab70: 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46 69  rent = sqlite3Fi
ab80: 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d  ndTable(db, pFK-
ab90: 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20  >zTo, zDb);.    
aba0: 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20 20      pIdx = 0;.  
abb0: 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3d 20 30        aiCols = 0
abc0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50  ;.        if( pP
abd0: 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  arent ){.       
abe0: 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b     x = sqlite3Fk
abf0: 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61 72  LocateIndex(pPar
ac00: 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b  se, pParent, pFK
ac10: 2c 20 26 70 49 64 78 2c 20 26 61 69 43 6f 6c 73  , &pIdx, &aiCols
ac20: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  );.          ass
ac30: 65 72 74 28 20 78 3d 3d 30 20 29 3b 0a 20 20 20  ert( x==0 );.   
ac40: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61       }.        a
ac50: 64 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56  ddrOk = sqlite3V
ac60: 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b  dbeMakeLabel(v);
ac70: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61  .        if( pPa
ac80: 72 65 6e 74 20 26 26 20 70 49 64 78 3d 3d 30 20  rent && pIdx==0 
ac90: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  ){.          int
aca0: 20 69 4b 65 79 20 3d 20 70 46 4b 2d 3e 61 43 6f   iKey = pFK->aCo
acb0: 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20 20 20 20  l[0].iFrom;.    
acc0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69 4b        assert( iK
acd0: 65 79 3e 3d 30 20 26 26 20 69 4b 65 79 3c 70 54  ey>=0 && iKey<pT
ace0: 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20  ab->nCol );.    
acf0: 20 20 20 20 20 20 69 66 28 20 69 4b 65 79 21 3d        if( iKey!=
ad00: 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 7b 0a 20  pTab->iPKey ){. 
ad10: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
ad20: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
ad30: 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c 20 69 4b  OP_Column, 0, iK
ad40: 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20  ey, regRow);.   
ad50: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
ad60: 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 76 2c  ColumnDefault(v,
ad70: 20 70 54 61 62 2c 20 69 4b 65 79 2c 20 72 65 67   pTab, iKey, reg
ad80: 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Row);.          
ad90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ada0: 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c  Op2(v, OP_IsNull
adb0: 2c 20 72 65 67 52 6f 77 2c 20 61 64 64 72 4f 6b  , regRow, addrOk
adc0: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
add0: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65  v);.          }e
ade0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
adf0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ae00: 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20  p2(v, OP_Rowid, 
ae10: 30 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20  0, regRow);.    
ae20: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
ae30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ae40: 4f 70 33 28 76 2c 20 4f 50 5f 53 65 65 6b 52 6f  Op3(v, OP_SeekRo
ae50: 77 69 64 2c 20 69 2c 20 30 2c 20 72 65 67 52 6f  wid, i, 0, regRo
ae60: 77 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  w); VdbeCoverage
ae70: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  (v);.          s
ae80: 71 6c 69 74 65 33 56 64 62 65 47 6f 74 6f 28 76  qlite3VdbeGoto(v
ae90: 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20  , addrOk);.     
aea0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
aeb0: 4a 75 6d 70 48 65 72 65 28 76 2c 20 73 71 6c 69  JumpHere(v, sqli
aec0: 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64  te3VdbeCurrentAd
aed0: 64 72 28 76 29 2d 32 29 3b 0a 20 20 20 20 20 20  dr(v)-2);.      
aee0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
aef0: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46     for(j=0; j<pF
af00: 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20  K->nCol; j++){. 
af10: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
af20: 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
af30: 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70 54  umnOfTable(v, pT
af40: 61 62 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20  ab, 0,.         
af50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af60: 20 20 20 61 69 43 6f 6c 73 20 3f 20 61 69 43 6f     aiCols ? aiCo
af70: 6c 73 5b 6a 5d 20 3a 20 70 46 4b 2d 3e 61 43 6f  ls[j] : pFK->aCo
af80: 6c 5b 6a 5d 2e 69 46 72 6f 6d 2c 20 72 65 67 52  l[j].iFrom, regR
af90: 6f 77 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20 20  ow+j);.         
afa0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
afb0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c  dOp2(v, OP_IsNul
afc0: 6c 2c 20 72 65 67 52 6f 77 2b 6a 2c 20 61 64 64  l, regRow+j, add
afd0: 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65 72 61  rOk); VdbeCovera
afe0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
aff0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28   }.          if(
b000: 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20 20   pParent ){.    
b010: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b020: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
b030: 4d 61 6b 65 52 65 63 6f 72 64 2c 20 72 65 67 52  MakeRecord, regR
b040: 6f 77 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 2c 20 72  ow, pFK->nCol, r
b050: 65 67 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20  egKey,.         
b060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b070: 20 20 20 20 20 73 71 6c 69 74 65 33 49 6e 64 65       sqlite3Inde
b080: 78 41 66 66 69 6e 69 74 79 53 74 72 28 64 62 2c  xAffinityStr(db,
b090: 70 49 64 78 29 2c 20 70 46 4b 2d 3e 6e 43 6f 6c  pIdx), pFK->nCol
b0a0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
b0b0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
b0c0: 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c  Int(v, OP_Found,
b0d0: 20 69 2c 20 61 64 64 72 4f 6b 2c 20 72 65 67 4b   i, addrOk, regK
b0e0: 65 79 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  ey, 0);.        
b0f0: 20 20 20 20 56 64 62 65 43 6f 76 65 72 61 67 65      VdbeCoverage
b100: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  (v);.          }
b110: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
b120: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
b130: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64  dOp2(v, OP_Rowid
b140: 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2b 31  , 0, regResult+1
b150: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
b160: 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28  e3VdbeMultiLoad(
b170: 76 2c 20 72 65 67 52 65 73 75 6c 74 2b 32 2c 20  v, regResult+2, 
b180: 22 73 69 22 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20  "si", pFK->zTo, 
b190: 69 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71  i-1);.        sq
b1a0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
b1b0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
b1c0: 20 72 65 67 52 65 73 75 6c 74 2c 20 34 29 3b 0a   regResult, 4);.
b1d0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b1e0: 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28  dbeResolveLabel(
b1f0: 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20  v, addrOk);.    
b200: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
b210: 65 28 64 62 2c 20 61 69 43 6f 6c 73 29 3b 0a 20  e(db, aiCols);. 
b220: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
b230: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
b240: 2c 20 4f 50 5f 4e 65 78 74 2c 20 30 2c 20 61 64  , OP_Next, 0, ad
b250: 64 72 54 6f 70 2b 31 29 3b 20 56 64 62 65 43 6f  drTop+1); VdbeCo
b260: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
b270: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
b280: 48 65 72 65 28 76 2c 20 61 64 64 72 54 6f 70 29  Here(v, addrTop)
b290: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
b2a0: 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21  eak;.#endif /* !
b2b0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
b2c0: 4d 49 54 5f 54 52 49 47 47 45 52 29 20 2a 2f 0a  MIT_TRIGGER) */.
b2d0: 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
b2e0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
b2f0: 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a  OREIGN_KEY) */..
b300: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20  #ifndef NDEBUG. 
b310: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41   case PragTyp_PA
b320: 52 53 45 52 5f 54 52 41 43 45 3a 20 7b 0a 20 20  RSER_TRACE: {.  
b330: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
b340: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
b350: 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67  3GetBoolean(zRig
b360: 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20  ht, 0) ){.      
b370: 20 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54    sqlite3ParserT
b380: 72 61 63 65 28 73 74 64 6f 75 74 2c 20 22 70 61  race(stdout, "pa
b390: 72 73 65 72 3a 20 22 29 3b 0a 20 20 20 20 20 20  rser: ");.      
b3a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73  }else{.        s
b3b0: 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
b3c0: 65 28 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  e(0, 0);.      }
b3d0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
b3e0: 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a  ak;.#endif..  /*
b3f0: 20 52 65 69 6e 73 74 61 6c 6c 20 74 68 65 20 4c   Reinstall the L
b400: 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 66 75 6e  IKE and GLOB fun
b410: 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 76 61 72  ctions.  The var
b420: 69 61 6e 74 20 6f 66 20 4c 49 4b 45 0a 20 20 2a  iant of LIKE.  *
b430: 2a 20 75 73 65 64 20 77 69 6c 6c 20 62 65 20 63  * used will be c
b440: 61 73 65 20 73 65 6e 73 69 74 69 76 65 20 6f 72  ase sensitive or
b450: 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f   not depending o
b460: 6e 20 74 68 65 20 52 48 53 2e 0a 20 20 2a 2f 0a  n the RHS..  */.
b470: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43    case PragTyp_C
b480: 41 53 45 5f 53 45 4e 53 49 54 49 56 45 5f 4c 49  ASE_SENSITIVE_LI
b490: 4b 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  KE: {.    if( zR
b4a0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71  ight ){.      sq
b4b0: 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b  lite3RegisterLik
b4c0: 65 46 75 6e 63 74 69 6f 6e 73 28 64 62 2c 20 73  eFunctions(db, s
b4d0: 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
b4e0: 28 7a 52 69 67 68 74 2c 20 30 29 29 3b 0a 20 20  (zRight, 0));.  
b4f0: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
b500: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
b510: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
b520: 5f 45 52 52 4f 52 5f 4d 41 58 0a 23 20 64 65 66  _ERROR_MAX.# def
b530: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 47  ine SQLITE_INTEG
b540: 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52  RITY_CHECK_ERROR
b550: 5f 4d 41 58 20 31 30 30 0a 23 65 6e 64 69 66 0a  _MAX 100.#endif.
b560: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
b570: 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
b580: 48 45 43 4b 0a 20 20 2f 2a 20 50 72 61 67 6d 61  HECK.  /* Pragma
b590: 20 22 71 75 69 63 6b 5f 63 68 65 63 6b 22 20 69   "quick_check" i
b5a0: 73 20 72 65 64 75 63 65 64 20 76 65 72 73 69 6f  s reduced versio
b5b0: 6e 20 6f 66 20 0a 20 20 2a 2a 20 69 6e 74 65 67  n of .  ** integ
b5c0: 72 69 74 79 5f 63 68 65 63 6b 20 64 65 73 69 67  rity_check desig
b5d0: 6e 65 64 20 74 6f 20 64 65 74 65 63 74 20 6d 6f  ned to detect mo
b5e0: 73 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72  st database corr
b5f0: 75 70 74 69 6f 6e 0a 20 20 2a 2a 20 77 69 74 68  uption.  ** with
b600: 6f 75 74 20 6d 6f 73 74 20 6f 66 20 74 68 65 20  out most of the 
b610: 6f 76 65 72 68 65 61 64 20 6f 66 20 61 20 66 75  overhead of a fu
b620: 6c 6c 20 69 6e 74 65 67 72 69 74 79 2d 63 68 65  ll integrity-che
b630: 63 6b 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ck..  */.  case 
b640: 50 72 61 67 54 79 70 5f 49 4e 54 45 47 52 49 54  PragTyp_INTEGRIT
b650: 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 69  Y_CHECK: {.    i
b660: 6e 74 20 69 2c 20 6a 2c 20 61 64 64 72 2c 20 6d  nt i, j, addr, m
b670: 78 45 72 72 3b 0a 0a 20 20 20 20 69 6e 74 20 69  xErr;..    int i
b680: 73 51 75 69 63 6b 20 3d 20 28 73 71 6c 69 74 65  sQuick = (sqlite
b690: 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30  3Tolower(zLeft[0
b6a0: 5d 29 3d 3d 27 71 27 29 3b 0a 0a 20 20 20 20 2f  ])=='q');..    /
b6b0: 2a 20 49 66 20 74 68 65 20 50 52 41 47 4d 41 20  * If the PRAGMA 
b6c0: 63 6f 6d 6d 61 6e 64 20 77 61 73 20 6f 66 20 74  command was of t
b6d0: 68 65 20 66 6f 72 6d 20 22 50 52 41 47 4d 41 20  he form "PRAGMA 
b6e0: 3c 64 62 3e 2e 69 6e 74 65 67 72 69 74 79 5f 63  <db>.integrity_c
b6f0: 68 65 63 6b 22 2c 0a 20 20 20 20 2a 2a 20 74 68  heck",.    ** th
b700: 65 6e 20 69 44 62 20 69 73 20 73 65 74 20 74 6f  en iDb is set to
b710: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
b720: 65 20 64 61 74 61 62 61 73 65 20 69 64 65 6e 74  e database ident
b730: 69 66 69 65 64 20 62 79 20 3c 64 62 3e 2e 0a 20  ified by <db>.. 
b740: 20 20 20 2a 2a 20 49 6e 20 74 68 69 73 20 63 61     ** In this ca
b750: 73 65 2c 20 74 68 65 20 69 6e 74 65 67 72 69 74  se, the integrit
b760: 79 20 6f 66 20 64 61 74 61 62 61 73 65 20 69 44  y of database iD
b770: 62 20 6f 6e 6c 79 20 69 73 20 76 65 72 69 66 69  b only is verifi
b780: 65 64 20 62 79 0a 20 20 20 20 2a 2a 20 74 68 65  ed by.    ** the
b790: 20 56 44 42 45 20 63 72 65 61 74 65 64 20 62 65   VDBE created be
b7a0: 6c 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  low..    **.    
b7b0: 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  ** Otherwise, if
b7c0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73   the command was
b7d0: 20 73 69 6d 70 6c 79 20 22 50 52 41 47 4d 41 20   simply "PRAGMA 
b7e0: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22  integrity_check"
b7f0: 20 28 6f 72 0a 20 20 20 20 2a 2a 20 22 50 52 41   (or.    ** "PRA
b800: 47 4d 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 22  GMA quick_check"
b810: 29 2c 20 74 68 65 6e 20 69 44 62 20 69 73 20 73  ), then iDb is s
b820: 65 74 20 74 6f 20 30 2e 20 49 6e 20 74 68 69 73  et to 0. In this
b830: 20 63 61 73 65 2c 20 73 65 74 20 69 44 62 0a 20   case, set iDb. 
b840: 20 20 20 2a 2a 20 74 6f 20 2d 31 20 68 65 72 65     ** to -1 here
b850: 2c 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68  , to indicate th
b860: 61 74 20 74 68 65 20 56 44 42 45 20 73 68 6f 75  at the VDBE shou
b870: 6c 64 20 76 65 72 69 66 79 20 74 68 65 20 69 6e  ld verify the in
b880: 74 65 67 72 69 74 79 0a 20 20 20 20 2a 2a 20 6f  tegrity.    ** o
b890: 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  f all attached d
b8a0: 61 74 61 62 61 73 65 73 2e 20 20 2a 2f 0a 20 20  atabases.  */.  
b8b0: 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
b8c0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
b8d0: 69 44 62 3d 3d 30 20 7c 7c 20 70 49 64 32 2d 3e  iDb==0 || pId2->
b8e0: 7a 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64  z );.    if( pId
b8f0: 32 2d 3e 7a 3d 3d 30 20 29 20 69 44 62 20 3d 20  2->z==0 ) iDb = 
b900: 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74  -1;..    /* Init
b910: 69 61 6c 69 7a 65 20 74 68 65 20 56 44 42 45 20  ialize the VDBE 
b920: 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 20 20 70  program */.    p
b930: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b  Parse->nMem = 6;
b940: 0a 20 20 20 20 73 65 74 4f 6e 65 43 6f 6c 75 6d  .    setOneColum
b950: 6e 4e 61 6d 65 28 76 2c 20 22 69 6e 74 65 67 72  nName(v, "integr
b960: 69 74 79 5f 63 68 65 63 6b 22 29 3b 0a 0a 20 20  ity_check");..  
b970: 20 20 2f 2a 20 53 65 74 20 74 68 65 20 6d 61 78    /* Set the max
b980: 69 6d 75 6d 20 65 72 72 6f 72 20 63 6f 75 6e 74  imum error count
b990: 20 2a 2f 0a 20 20 20 20 6d 78 45 72 72 20 3d 20   */.    mxErr = 
b9a0: 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59  SQLITE_INTEGRITY
b9b0: 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58  _CHECK_ERROR_MAX
b9c0: 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
b9d0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
b9e0: 33 47 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74  3GetInt32(zRight
b9f0: 2c 20 26 6d 78 45 72 72 29 3b 0a 20 20 20 20 20  , &mxErr);.     
ba00: 20 69 66 28 20 6d 78 45 72 72 3c 3d 30 20 29 7b   if( mxErr<=0 ){
ba10: 0a 20 20 20 20 20 20 20 20 6d 78 45 72 72 20 3d  .        mxErr =
ba20: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54   SQLITE_INTEGRIT
ba30: 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41  Y_CHECK_ERROR_MA
ba40: 58 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  X;.      }.    }
ba50: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
ba60: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
ba70: 65 67 65 72 2c 20 6d 78 45 72 72 2c 20 31 29 3b  eger, mxErr, 1);
ba80: 20 20 2f 2a 20 72 65 67 5b 31 5d 20 68 6f 6c 64    /* reg[1] hold
ba90: 73 20 65 72 72 6f 72 73 20 6c 65 66 74 20 2a 2f  s errors left */
baa0: 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69  ..    /* Do an i
bab0: 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 20 6f  ntegrity check o
bac0: 6e 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  n each database 
bad0: 66 69 6c 65 20 2a 2f 0a 20 20 20 20 66 6f 72 28  file */.    for(
bae0: 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
baf0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 48 61 73 68  i++){.      Hash
bb00: 45 6c 65 6d 20 2a 78 3b 0a 20 20 20 20 20 20 48  Elem *x;.      H
bb10: 61 73 68 20 2a 70 54 62 6c 73 3b 0a 20 20 20 20  ash *pTbls;.    
bb20: 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 0a 20 20    int *aRoot;.  
bb30: 20 20 20 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b      int cnt = 0;
bb40: 0a 20 20 20 20 20 20 69 6e 74 20 6d 78 49 64 78  .      int mxIdx
bb50: 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 6e 74 20   = 0;.      int 
bb60: 6e 49 64 78 3b 0a 0a 20 20 20 20 20 20 69 66 28  nIdx;..      if(
bb70: 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 26 26 20   OMIT_TEMPDB && 
bb80: 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b  i==1 ) continue;
bb90: 0a 20 20 20 20 20 20 69 66 28 20 69 44 62 3e 3d  .      if( iDb>=
bba0: 30 20 26 26 20 69 21 3d 69 44 62 20 29 20 63 6f  0 && i!=iDb ) co
bbb0: 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20 20 20 73  ntinue;..      s
bbc0: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
bbd0: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
bbe0: 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20  );.      addr = 
bbf0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
bc00: 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31  1(v, OP_IfPos, 1
bc10: 29 3b 20 2f 2a 20 48 61 6c 74 20 69 66 20 6f 75  ); /* Halt if ou
bc20: 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20  t of errors */. 
bc30: 20 20 20 20 20 56 64 62 65 43 6f 76 65 72 61 67       VdbeCoverag
bc40: 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  e(v);.      sqli
bc50: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
bc60: 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b   OP_Halt, 0, 0);
bc70: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
bc80: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
bc90: 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  dr);..      /* D
bca0: 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20 63  o an integrity c
bcb0: 68 65 63 6b 20 6f 66 20 74 68 65 20 42 2d 54 72  heck of the B-Tr
bcc0: 65 65 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  ee.      **.    
bcd0: 20 20 2a 2a 20 42 65 67 69 6e 20 62 79 20 66 69    ** Begin by fi
bce0: 6e 64 69 6e 67 20 74 68 65 20 72 6f 6f 74 20 70  nding the root p
bcf0: 61 67 65 73 20 6e 75 6d 62 65 72 73 0a 20 20 20  ages numbers.   
bd00: 20 20 20 2a 2a 20 66 6f 72 20 61 6c 6c 20 74 61     ** for all ta
bd10: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
bd20: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
bd30: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
bd40: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
bd50: 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
bd60: 64 62 2c 20 69 2c 20 30 29 20 29 3b 0a 20 20 20  db, i, 0) );.   
bd70: 20 20 20 70 54 62 6c 73 20 3d 20 26 64 62 2d 3e     pTbls = &db->
bd80: 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[i].pSchema->
bd90: 74 62 6c 48 61 73 68 3b 0a 20 20 20 20 20 20 66  tblHash;.      f
bda0: 6f 72 28 63 6e 74 3d 30 2c 20 78 3d 73 71 6c 69  or(cnt=0, x=sqli
bdb0: 74 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c  teHashFirst(pTbl
bdc0: 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48  s); x; x=sqliteH
bdd0: 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20  ashNext(x)){.   
bde0: 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62       Table *pTab
bdf0: 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74   = sqliteHashDat
be00: 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e  a(x);.        In
be10: 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 20  dex *pIdx;.     
be20: 20 20 20 69 66 28 20 48 61 73 52 6f 77 69 64 28     if( HasRowid(
be30: 70 54 61 62 29 20 29 20 63 6e 74 2b 2b 3b 0a 20  pTab) ) cnt++;. 
be40: 20 20 20 20 20 20 20 66 6f 72 28 6e 49 64 78 3d         for(nIdx=
be50: 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  0, pIdx=pTab->pI
be60: 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78  ndex; pIdx; pIdx
be70: 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6e 49  =pIdx->pNext, nI
be80: 64 78 2b 2b 29 7b 20 63 6e 74 2b 2b 3b 20 7d 0a  dx++){ cnt++; }.
be90: 20 20 20 20 20 20 20 20 69 66 28 20 6e 49 64 78          if( nIdx
bea0: 3e 6d 78 49 64 78 20 29 20 6d 78 49 64 78 20 3d  >mxIdx ) mxIdx =
beb0: 20 6e 49 64 78 3b 0a 20 20 20 20 20 20 7d 0a 20   nIdx;.      }. 
bec0: 20 20 20 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c       aRoot = sql
bed0: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
bee0: 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74  N(db, sizeof(int
bef0: 29 2a 28 63 6e 74 2b 31 29 29 3b 0a 20 20 20 20  )*(cnt+1));.    
bf00: 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29    if( aRoot==0 )
bf10: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 66 6f   break;.      fo
bf20: 72 28 63 6e 74 3d 30 2c 20 78 3d 73 71 6c 69 74  r(cnt=0, x=sqlit
bf30: 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c 73  eHashFirst(pTbls
bf40: 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48 61  ); x; x=sqliteHa
bf50: 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20  shNext(x)){.    
bf60: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20      Table *pTab 
bf70: 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  = sqliteHashData
bf80: 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64  (x);.        Ind
bf90: 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 20 20  ex *pIdx;.      
bfa0: 20 20 69 66 28 20 48 61 73 52 6f 77 69 64 28 70    if( HasRowid(p
bfb0: 54 61 62 29 20 29 20 61 52 6f 6f 74 5b 63 6e 74  Tab) ) aRoot[cnt
bfc0: 2b 2b 5d 20 3d 20 70 54 61 62 2d 3e 74 6e 75 6d  ++] = pTab->tnum
bfd0: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 49  ;.        for(pI
bfe0: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
bff0: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
c000: 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20  ->pNext){.      
c010: 20 20 20 20 61 52 6f 6f 74 5b 63 6e 74 2b 2b 5d      aRoot[cnt++]
c020: 20 3d 20 70 49 64 78 2d 3e 74 6e 75 6d 3b 0a 20   = pIdx->tnum;. 
c030: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
c040: 0a 20 20 20 20 20 20 61 52 6f 6f 74 5b 63 6e 74  .      aRoot[cnt
c050: 5d 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a  ] = 0;..      /*
c060: 20 4d 61 6b 65 20 73 75 72 65 20 73 75 66 66 69   Make sure suffi
c070: 63 69 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20  cient number of 
c080: 72 65 67 69 73 74 65 72 73 20 68 61 76 65 20 62  registers have b
c090: 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  een allocated */
c0a0: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
c0b0: 4d 65 6d 20 3d 20 4d 41 58 28 20 70 50 61 72 73  Mem = MAX( pPars
c0c0: 65 2d 3e 6e 4d 65 6d 2c 20 38 2b 6d 78 49 64 78  e->nMem, 8+mxIdx
c0d0: 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f   );..      /* Do
c0e0: 20 74 68 65 20 62 2d 74 72 65 65 20 69 6e 74 65   the b-tree inte
c0f0: 67 72 69 74 79 20 63 68 65 63 6b 73 20 2a 2f 0a  grity checks */.
c100: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c110: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 49 6e  eAddOp4(v, OP_In
c120: 74 65 67 72 69 74 79 43 6b 2c 20 32 2c 20 63 6e  tegrityCk, 2, cn
c130: 74 2c 20 31 2c 20 28 63 68 61 72 2a 29 61 52 6f  t, 1, (char*)aRo
c140: 6f 74 2c 50 34 5f 49 4e 54 41 52 52 41 59 29 3b  ot,P4_INTARRAY);
c150: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c160: 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20 28 75  beChangeP5(v, (u
c170: 38 29 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72  8)i);.      addr
c180: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
c190: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 73 4e 75 6c  dOp1(v, OP_IsNul
c1a0: 6c 2c 20 32 29 3b 20 56 64 62 65 43 6f 76 65 72  l, 2); VdbeCover
c1b0: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71  age(v);.      sq
c1c0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
c1d0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
c1e0: 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  , 3, 0,.        
c1f0: 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
c200: 64 62 2c 20 22 2a 2a 2a 20 69 6e 20 64 61 74 61  db, "*** in data
c210: 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e 22 2c 20  base %s ***\n", 
c220: 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 44 62 53 4e  db->aDb[i].zDbSN
c230: 61 6d 65 29 2c 0a 20 20 20 20 20 20 20 20 20 50  ame),.         P
c240: 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20  4_DYNAMIC);.    
c250: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c260: 4f 70 33 28 76 2c 20 4f 50 5f 4d 6f 76 65 2c 20  Op3(v, OP_Move, 
c270: 32 2c 20 34 2c 20 31 29 3b 0a 20 20 20 20 20 20  2, 4, 1);.      
c280: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c290: 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20  3(v, OP_Concat, 
c2a0: 34 2c 20 33 2c 20 32 29 3b 0a 20 20 20 20 20 20  4, 3, 2);.      
c2b0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c2c0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
c2d0: 77 2c 20 32 2c 20 31 29 3b 0a 20 20 20 20 20 20  w, 2, 1);.      
c2e0: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
c2f0: 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20  ere(v, addr);.. 
c300: 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
c310: 65 20 61 6c 6c 20 74 68 65 20 69 6e 64 69 63 65  e all the indice
c320: 73 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65  s are constructe
c330: 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a 20 20 20  d correctly..   
c340: 20 20 20 2a 2f 0a 20 20 20 20 20 20 66 6f 72 28     */.      for(
c350: 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  x=sqliteHashFirs
c360: 74 28 70 54 62 6c 73 29 3b 20 78 20 26 26 20 21  t(pTbls); x && !
c370: 69 73 51 75 69 63 6b 3b 20 78 3d 73 71 6c 69 74  isQuick; x=sqlit
c380: 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20  eHashNext(x)){. 
c390: 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54         Table *pT
c3a0: 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44  ab = sqliteHashD
c3b0: 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20  ata(x);.        
c3c0: 49 6e 64 65 78 20 2a 70 49 64 78 2c 20 2a 70 50  Index *pIdx, *pP
c3d0: 6b 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78  k;.        Index
c3e0: 20 2a 70 50 72 69 6f 72 20 3d 20 30 3b 0a 20 20   *pPrior = 0;.  
c3f0: 20 20 20 20 20 20 69 6e 74 20 6c 6f 6f 70 54 6f        int loopTo
c400: 70 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  p;.        int i
c410: 44 61 74 61 43 75 72 2c 20 69 49 64 78 43 75 72  DataCur, iIdxCur
c420: 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 31  ;.        int r1
c430: 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 20 20 20 20   = -1;..        
c440: 69 66 28 20 70 54 61 62 2d 3e 70 49 6e 64 65 78  if( pTab->pIndex
c450: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
c460: 20 20 20 20 20 20 20 20 70 50 6b 20 3d 20 48 61          pPk = Ha
c470: 73 52 6f 77 69 64 28 70 54 61 62 29 20 3f 20 30  sRowid(pTab) ? 0
c480: 20 3a 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72   : sqlite3Primar
c490: 79 4b 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b  yKeyIndex(pTab);
c4a0: 0a 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20  .        addr = 
c4b0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c4c0: 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31  1(v, OP_IfPos, 1
c4d0: 29 3b 20 20 2f 2a 20 53 74 6f 70 20 69 66 20 6f  );  /* Stop if o
c4e0: 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a  ut of errors */.
c4f0: 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 76 65          VdbeCove
c500: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
c510: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c520: 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30  p2(v, OP_Halt, 0
c530: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
c540: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
c550: 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 20 20  e(v, addr);.    
c560: 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 72 43      sqlite3ExprC
c570: 61 63 68 65 43 6c 65 61 72 28 70 50 61 72 73 65  acheClear(pParse
c580: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
c590: 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e  e3OpenTableAndIn
c5a0: 64 69 63 65 73 28 70 50 61 72 73 65 2c 20 70 54  dices(pParse, pT
c5b0: 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c  ab, OP_OpenRead,
c5c0: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   0,.            
c5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5e0: 20 20 20 20 20 20 20 31 2c 20 30 2c 20 26 69 44         1, 0, &iD
c5f0: 61 74 61 43 75 72 2c 20 26 69 49 64 78 43 75 72  ataCur, &iIdxCur
c600: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
c610: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c620: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 37  OP_Integer, 0, 7
c630: 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a  );.        for(j
c640: 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70  =0, pIdx=pTab->p
c650: 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64  Index; pIdx; pId
c660: 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a  x=pIdx->pNext, j
c670: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  ++){.          s
c680: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c690: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
c6a0: 30 2c 20 38 2b 6a 29 3b 20 2f 2a 20 69 6e 64 65  0, 8+j); /* inde
c6b0: 78 20 65 6e 74 72 69 65 73 20 63 6f 75 6e 74 65  x entries counte
c6c0: 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20  r */.        }. 
c6d0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
c6e0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 3e 3d 38 2b 6a  Parse->nMem>=8+j
c6f0: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
c700: 72 74 28 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d  rt( sqlite3NoTem
c710: 70 73 49 6e 52 61 6e 67 65 28 70 50 61 72 73 65  psInRange(pParse
c720: 2c 31 2c 37 2b 6a 29 20 29 3b 0a 20 20 20 20 20  ,1,7+j) );.     
c730: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c740: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 77 69 6e  dOp2(v, OP_Rewin
c750: 64 2c 20 69 44 61 74 61 43 75 72 2c 20 30 29 3b  d, iDataCur, 0);
c760: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
c770: 3b 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70 54 6f  ;.        loopTo
c780: 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  p = sqlite3VdbeA
c790: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49  ddOp2(v, OP_AddI
c7a0: 6d 6d 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20 20  mm, 7, 1);.     
c7b0: 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61     /* Verify tha
c7c0: 74 20 61 6c 6c 20 4e 4f 54 20 4e 55 4c 4c 20 63  t all NOT NULL c
c7d0: 6f 6c 75 6d 6e 73 20 72 65 61 6c 6c 79 20 61 72  olumns really ar
c7e0: 65 20 4e 4f 54 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e NOT NULL */.  
c7f0: 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a        for(j=0; j
c800: 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b  <pTab->nCol; j++
c810: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63 68 61  ){.          cha
c820: 72 20 2a 7a 45 72 72 3b 0a 20 20 20 20 20 20 20  r *zErr;.       
c830: 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70     int jmp2, jmp
c840: 33 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  3;.          if(
c850: 20 6a 3d 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20   j==pTab->iPKey 
c860: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
c870: 20 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e        if( pTab->
c880: 61 43 6f 6c 5b 6a 5d 2e 6e 6f 74 4e 75 6c 6c 3d  aCol[j].notNull=
c890: 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
c8a0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
c8b0: 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
c8c0: 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70 54 61 62  nOfTable(v, pTab
c8d0: 2c 20 69 44 61 74 61 43 75 72 2c 20 6a 2c 20 33  , iDataCur, j, 3
c8e0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
c8f0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 35  ite3VdbeChangeP5
c900: 28 76 2c 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  (v, OPFLAG_TYPEO
c910: 46 41 52 47 29 3b 0a 20 20 20 20 20 20 20 20 20  FARG);.         
c920: 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33 56   jmp2 = sqlite3V
c930: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
c940: 4e 6f 74 4e 75 6c 6c 2c 20 33 29 3b 20 56 64 62  NotNull, 3); Vdb
c950: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
c960: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c970: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c980: 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20  AddImm, 1, -1); 
c990: 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72  /* Decrement err
c9a0: 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20  or limit */.    
c9b0: 20 20 20 20 20 20 7a 45 72 72 20 3d 20 73 71 6c        zErr = sql
c9c0: 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20  ite3MPrintf(db, 
c9d0: 22 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20 25  "NULL value in %
c9e0: 73 2e 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61  s.%s", pTab->zNa
c9f0: 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  me,.            
ca00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca10: 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e    pTab->aCol[j].
ca20: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20  zName);.        
ca30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ca40: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
ca50: 38 2c 20 30 2c 20 33 2c 20 30 2c 20 7a 45 72 72  8, 0, 3, 0, zErr
ca60: 2c 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20  , P4_DYNAMIC);. 
ca70: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
ca80: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
ca90: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31  _ResultRow, 3, 1
caa0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70  );.          jmp
cab0: 33 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  3 = sqlite3VdbeA
cac0: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f  ddOp1(v, OP_IfPo
cad0: 73 2c 20 31 29 3b 20 56 64 62 65 43 6f 76 65 72  s, 1); VdbeCover
cae0: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
caf0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
cb00: 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b  Op0(v, OP_Halt);
cb10: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
cb20: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
cb30: 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20 20  , jmp2);.       
cb40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
cb50: 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 33 29 3b  mpHere(v, jmp3);
cb60: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
cb70: 20 20 20 2f 2a 20 56 61 6c 69 64 61 74 65 20 69     /* Validate i
cb80: 6e 64 65 78 20 65 6e 74 72 69 65 73 20 66 6f 72  ndex entries for
cb90: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
cba0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28   */.        for(
cbb0: 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e  j=0, pIdx=pTab->
cbc0: 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
cbd0: 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20  dx=pIdx->pNext, 
cbe0: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
cbf0: 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33 2c 20  int jmp2, jmp3, 
cc00: 6a 6d 70 34 2c 20 6a 6d 70 35 3b 0a 20 20 20 20  jmp4, jmp5;.    
cc10: 20 20 20 20 20 20 69 6e 74 20 63 6b 55 6e 69 71        int ckUniq
cc20: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61   = sqlite3VdbeMa
cc30: 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20  keLabel(v);.    
cc40: 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70        if( pPk==p
cc50: 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  Idx ) continue;.
cc60: 20 20 20 20 20 20 20 20 20 20 72 31 20 3d 20 73            r1 = s
cc70: 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e  qlite3GenerateIn
cc80: 64 65 78 4b 65 79 28 70 50 61 72 73 65 2c 20 70  dexKey(pParse, p
cc90: 49 64 78 2c 20 69 44 61 74 61 43 75 72 2c 20 30  Idx, iDataCur, 0
cca0: 2c 20 30 2c 20 26 6a 6d 70 33 2c 0a 20 20 20 20  , 0, &jmp3,.    
ccb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccd0: 20 20 20 70 50 72 69 6f 72 2c 20 72 31 29 3b 0a     pPrior, r1);.
cce0: 20 20 20 20 20 20 20 20 20 20 70 50 72 69 6f 72            pPrior
ccf0: 20 3d 20 70 49 64 78 3b 0a 20 20 20 20 20 20 20   = pIdx;.       
cd00: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
cd10: 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
cd20: 6d 2c 20 38 2b 6a 2c 20 31 29 3b 20 20 2f 2a 20  m, 8+j, 1);  /* 
cd30: 69 6e 63 72 65 6d 65 6e 74 20 65 6e 74 72 79 20  increment entry 
cd40: 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20  count */.       
cd50: 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61     /* Verify tha
cd60: 74 20 61 6e 20 69 6e 64 65 78 20 65 6e 74 72 79  t an index entry
cd70: 20 65 78 69 73 74 73 20 66 6f 72 20 74 68 65 20   exists for the 
cd80: 63 75 72 72 65 6e 74 20 74 61 62 6c 65 20 72 6f  current table ro
cd90: 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 6a  w */.          j
cda0: 6d 70 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62  mp2 = sqlite3Vdb
cdb0: 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50  eAddOp4Int(v, OP
cdc0: 5f 46 6f 75 6e 64 2c 20 69 49 64 78 43 75 72 2b  _Found, iIdxCur+
cdd0: 6a 2c 20 63 6b 55 6e 69 71 2c 20 72 31 2c 0a 20  j, ckUniq, r1,. 
cde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce00: 20 20 20 20 20 70 49 64 78 2d 3e 6e 43 6f 6c 75       pIdx->nColu
ce10: 6d 6e 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  mn); VdbeCoverag
ce20: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
ce30: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
ce40: 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20  2(v, OP_AddImm, 
ce50: 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65  1, -1); /* Decre
ce60: 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69 74  ment error limit
ce70: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 73 71   */.          sq
ce80: 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72  lite3VdbeLoadStr
ce90: 69 6e 67 28 76 2c 20 33 2c 20 22 72 6f 77 20 22  ing(v, 3, "row "
cea0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
ceb0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
cec0: 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 37 2c 20  , OP_Concat, 7, 
ced0: 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20  3, 3);.         
cee0: 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64   sqlite3VdbeLoad
cef0: 53 74 72 69 6e 67 28 76 2c 20 34 2c 20 22 20 6d  String(v, 4, " m
cf00: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
cf10: 78 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  x ");.          
cf20: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
cf30: 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20  3(v, OP_Concat, 
cf40: 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20  4, 3, 3);.      
cf50: 20 20 20 20 6a 6d 70 35 20 3d 20 73 71 6c 69 74      jmp5 = sqlit
cf60: 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67  e3VdbeLoadString
cf70: 28 76 2c 20 34 2c 20 70 49 64 78 2d 3e 7a 4e 61  (v, 4, pIdx->zNa
cf80: 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  me);.          s
cf90: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
cfa0: 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34  (v, OP_Concat, 4
cfb0: 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  , 3, 3);.       
cfc0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
cfd0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
cfe0: 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20 20 20  tRow, 3, 1);.   
cff0: 20 20 20 20 20 20 20 6a 6d 70 34 20 3d 20 73 71         jmp4 = sq
d000: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
d010: 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b  v, OP_IfPos, 1);
d020: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
d030: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d040: 74 65 33 56 64 62 65 41 64 64 4f 70 30 28 76 2c  te3VdbeAddOp0(v,
d050: 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20 20 20   OP_Halt);.     
d060: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d070: 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 32  JumpHere(v, jmp2
d080: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  );.          /* 
d090: 46 6f 72 20 55 4e 49 51 55 45 20 69 6e 64 65 78  For UNIQUE index
d0a0: 65 73 2c 20 76 65 72 69 66 79 20 74 68 61 74 20  es, verify that 
d0b0: 6f 6e 6c 79 20 6f 6e 65 20 65 6e 74 72 79 20 65  only one entry e
d0c0: 78 69 73 74 73 20 77 69 74 68 20 74 68 65 0a 20  xists with the. 
d0d0: 20 20 20 20 20 20 20 20 20 2a 2a 20 63 75 72 72           ** curr
d0e0: 65 6e 74 20 6b 65 79 2e 20 20 54 68 65 20 65 6e  ent key.  The en
d0f0: 74 72 79 20 69 73 20 75 6e 69 71 75 65 20 69 66  try is unique if
d100: 20 28 31 29 20 61 6e 79 20 63 6f 6c 75 6d 6e 20   (1) any column 
d110: 69 73 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20  is NULL.        
d120: 20 20 2a 2a 20 6f 72 20 28 32 29 20 74 68 65 20    ** or (2) the 
d130: 6e 65 78 74 20 65 6e 74 72 79 20 68 61 73 20 61  next entry has a
d140: 20 64 69 66 66 65 72 65 6e 74 20 6b 65 79 20 2a   different key *
d150: 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  /.          if( 
d160: 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 70 49  IsUniqueIndex(pI
d170: 64 78 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  dx) ){.         
d180: 20 20 20 69 6e 74 20 75 6e 69 71 4f 6b 20 3d 20     int uniqOk = 
d190: 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c  sqlite3VdbeMakeL
d1a0: 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20  abel(v);.       
d1b0: 20 20 20 20 20 69 6e 74 20 6a 6d 70 36 3b 0a 20       int jmp6;. 
d1c0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6b             int k
d1d0: 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  k;.            f
d1e0: 6f 72 28 6b 6b 3d 30 3b 20 6b 6b 3c 70 49 64 78  or(kk=0; kk<pIdx
d1f0: 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 6b 6b 2b 2b 29  ->nKeyCol; kk++)
d200: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
d210: 69 6e 74 20 69 43 6f 6c 20 3d 20 70 49 64 78 2d  int iCol = pIdx-
d220: 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 6b 5d 3b 0a 20  >aiColumn[kk];. 
d230: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
d240: 65 72 74 28 20 69 43 6f 6c 21 3d 58 4e 5f 52 4f  ert( iCol!=XN_RO
d250: 57 49 44 20 26 26 20 69 43 6f 6c 3c 70 54 61 62  WID && iCol<pTab
d260: 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20  ->nCol );.      
d270: 20 20 20 20 20 20 20 20 69 66 28 20 69 43 6f 6c          if( iCol
d280: 3e 3d 30 20 26 26 20 70 54 61 62 2d 3e 61 43 6f  >=0 && pTab->aCo
d290: 6c 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e 75 6c 6c 20  l[iCol].notNull 
d2a0: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
d2b0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d2c0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d2d0: 50 5f 49 73 4e 75 6c 6c 2c 20 72 31 2b 6b 6b 2c  P_IsNull, r1+kk,
d2e0: 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20   uniqOk);.      
d2f0: 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 76 65          VdbeCove
d300: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
d310: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
d320: 20 20 20 6a 6d 70 36 20 3d 20 73 71 6c 69 74 65     jmp6 = sqlite
d330: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
d340: 50 5f 4e 65 78 74 2c 20 69 49 64 78 43 75 72 2b  P_Next, iIdxCur+
d350: 6a 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  j); VdbeCoverage
d360: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (v);.           
d370: 20 73 71 6c 69 74 65 33 56 64 62 65 47 6f 74 6f   sqlite3VdbeGoto
d380: 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20  (v, uniqOk);.   
d390: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d3a0: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
d3b0: 6a 6d 70 36 29 3b 0a 20 20 20 20 20 20 20 20 20  jmp6);.         
d3c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d3d0: 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 49 64  dOp4Int(v, OP_Id
d3e0: 78 47 54 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20  xGT, iIdxCur+j, 
d3f0: 75 6e 69 71 4f 6b 2c 20 72 31 2c 0a 20 20 20 20  uniqOk, r1,.    
d400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d410: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 49 64               pId
d420: 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 20 56 64 62  x->nKeyCol); Vdb
d430: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
d440: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d450: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d460: 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29  P_AddImm, 1, -1)
d470: 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65  ; /* Decrement e
d480: 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20  rror limit */.  
d490: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d4a0: 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28  3VdbeLoadString(
d4b0: 76 2c 20 33 2c 20 22 6e 6f 6e 2d 75 6e 69 71 75  v, 3, "non-uniqu
d4c0: 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65 78  e entry in index
d4d0: 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   ");.           
d4e0: 20 73 71 6c 69 74 65 33 56 64 62 65 47 6f 74 6f   sqlite3VdbeGoto
d4f0: 28 76 2c 20 6a 6d 70 35 29 3b 0a 20 20 20 20 20  (v, jmp5);.     
d500: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d510: 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76  beResolveLabel(v
d520: 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20  , uniqOk);.     
d530: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
d540: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
d550: 48 65 72 65 28 76 2c 20 6a 6d 70 34 29 3b 0a 20  Here(v, jmp4);. 
d560: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d570: 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61  ResolvePartIdxLa
d580: 62 65 6c 28 70 50 61 72 73 65 2c 20 6a 6d 70 33  bel(pParse, jmp3
d590: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
d5a0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d5b0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78  AddOp2(v, OP_Nex
d5c0: 74 2c 20 69 44 61 74 61 43 75 72 2c 20 6c 6f 6f  t, iDataCur, loo
d5d0: 70 54 6f 70 29 3b 20 56 64 62 65 43 6f 76 65 72  pTop); VdbeCover
d5e0: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
d5f0: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
d600: 65 72 65 28 76 2c 20 6c 6f 6f 70 54 6f 70 2d 31  ere(v, loopTop-1
d610: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
d620: 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e  E_OMIT_BTREECOUN
d630: 54 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  T.        sqlite
d640: 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28  3VdbeLoadString(
d650: 76 2c 20 32 2c 20 22 77 72 6f 6e 67 20 23 20 6f  v, 2, "wrong # o
d660: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
d670: 65 78 20 22 29 3b 0a 20 20 20 20 20 20 20 20 66  ex ");.        f
d680: 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61  or(j=0, pIdx=pTa
d690: 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
d6a0: 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
d6b0: 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  t, j++){.       
d6c0: 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49 64 78     if( pPk==pIdx
d6d0: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
d6e0: 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71         addr = sq
d6f0: 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74  lite3VdbeCurrent
d700: 41 64 64 72 28 76 29 3b 0a 20 20 20 20 20 20 20  Addr(v);.       
d710: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d720: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp2(v, OP_IfPos
d730: 2c 20 31 2c 20 61 64 64 72 2b 32 29 3b 20 56 64  , 1, addr+2); Vd
d740: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
d750: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d760: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d770: 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20  _Halt, 0, 0);.  
d780: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d790: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d7a0: 43 6f 75 6e 74 2c 20 69 49 64 78 43 75 72 2b 6a  Count, iIdxCur+j
d7b0: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 3);.          
d7c0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d7d0: 33 28 76 2c 20 4f 50 5f 45 71 2c 20 38 2b 6a 2c  3(v, OP_Eq, 8+j,
d7e0: 20 61 64 64 72 2b 38 2c 20 33 29 3b 20 56 64 62   addr+8, 3); Vdb
d7f0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
d800: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d810: 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20 53  dbeChangeP5(v, S
d820: 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 29 3b 0a  QLITE_NOTNULL);.
d830: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d840: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d850: 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29  P_AddImm, 1, -1)
d860: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d870: 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e  te3VdbeLoadStrin
d880: 67 28 76 2c 20 33 2c 20 70 49 64 78 2d 3e 7a 4e  g(v, 3, pIdx->zN
d890: 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ame);.          
d8a0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d8b0: 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20  3(v, OP_Concat, 
d8c0: 33 2c 20 32 2c 20 37 29 3b 0a 20 20 20 20 20 20  3, 2, 7);.      
d8d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d8e0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
d8f0: 6c 74 52 6f 77 2c 20 37 2c 20 31 29 3b 0a 20 20  ltRow, 7, 1);.  
d900: 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f        }.#endif /
d910: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  * SQLITE_OMIT_BT
d920: 52 45 45 43 4f 55 4e 54 20 2a 2f 0a 20 20 20 20  REECOUNT */.    
d930: 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20 7b    } .    }.    {
d940: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
d950: 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44  nst int iLn = VD
d960: 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f  BE_OFFSET_LINENO
d970: 28 32 29 3b 0a 20 20 20 20 20 20 73 74 61 74 69  (2);.      stati
d980: 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
d990: 73 74 20 65 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b  st endCode[] = {
d9a0: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 41 64  .        { OP_Ad
d9b0: 64 49 6d 6d 2c 20 20 20 20 20 20 31 2c 20 30 2c  dImm,      1, 0,
d9c0: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
d9d0: 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b  * 0 */.        {
d9e0: 20 4f 50 5f 49 66 2c 20 20 20 20 20 20 20 20 20   OP_If,         
d9f0: 20 31 2c 20 34 2c 20 20 20 20 20 20 20 20 30 7d   1, 4,        0}
da00: 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20  ,    /* 1 */.   
da10: 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67       { OP_String
da20: 38 2c 20 20 20 20 20 30 2c 20 33 2c 20 20 20 20  8,     0, 3,    
da30: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 32 20      0},    /* 2 
da40: 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  */.        { OP_
da50: 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20  ResultRow,   3, 
da60: 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20  1,        0},   
da70: 20 2f 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20 7d   /* 3 */.      }
da80: 3b 0a 20 20 20 20 20 20 56 64 62 65 4f 70 20 2a  ;.      VdbeOp *
da90: 61 4f 70 3b 0a 0a 20 20 20 20 20 20 61 4f 70 20  aOp;..      aOp 
daa0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
dab0: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
dac0: 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c 20 65 6e  ize(endCode), en
dad0: 64 43 6f 64 65 2c 20 69 4c 6e 29 3b 0a 20 20 20  dCode, iLn);.   
dae0: 20 20 20 69 66 28 20 61 4f 70 20 29 7b 0a 20 20     if( aOp ){.  
daf0: 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70 32 20        aOp[0].p2 
db00: 3d 20 2d 6d 78 45 72 72 3b 0a 20 20 20 20 20 20  = -mxErr;.      
db10: 20 20 61 4f 70 5b 32 5d 2e 70 34 74 79 70 65 20    aOp[2].p4type 
db20: 3d 20 50 34 5f 53 54 41 54 49 43 3b 0a 20 20 20  = P4_STATIC;.   
db30: 20 20 20 20 20 61 4f 70 5b 32 5d 2e 70 34 2e 7a       aOp[2].p4.z
db40: 20 3d 20 22 6f 6b 22 3b 0a 20 20 20 20 20 20 7d   = "ok";.      }
db50: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
db60: 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ak;.#endif /* SQ
db70: 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
db80: 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 23 69  ITY_CHECK */..#i
db90: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
dba0: 54 5f 55 54 46 31 36 0a 20 20 2f 2a 0a 20 20 2a  T_UTF16.  /*.  *
dbb0: 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64  *   PRAGMA encod
dbc0: 69 6e 67 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ing.  **   PRAGM
dbd0: 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 22 75 74  A encoding = "ut
dbe0: 66 2d 38 22 7c 22 75 74 66 2d 31 36 22 7c 22 75  f-8"|"utf-16"|"u
dbf0: 74 66 2d 31 36 6c 65 22 7c 22 75 74 66 2d 31 36  tf-16le"|"utf-16
dc00: 62 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e  be".  **.  ** In
dc10: 20 69 74 73 20 66 69 72 73 74 20 66 6f 72 6d 2c   its first form,
dc20: 20 74 68 69 73 20 70 72 61 67 6d 61 20 72 65 74   this pragma ret
dc30: 75 72 6e 73 20 74 68 65 20 65 6e 63 6f 64 69 6e  urns the encodin
dc40: 67 20 6f 66 20 74 68 65 20 6d 61 69 6e 0a 20 20  g of the main.  
dc50: 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 49 66 20  ** database. If 
dc60: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
dc70: 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c  not initialized,
dc80: 20 69 74 20 69 73 20 69 6e 69 74 69 61 6c 69 7a   it is initializ
dc90: 65 64 20 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a  ed now..  **.  *
dca0: 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  * The second for
dcb0: 6d 20 6f 66 20 74 68 69 73 20 70 72 61 67 6d 61  m of this pragma
dcc0: 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74   is a no-op if t
dcd0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
dce0: 20 66 69 6c 65 0a 20 20 2a 2a 20 68 61 73 20 6e   file.  ** has n
dcf0: 6f 74 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  ot already been 
dd00: 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 6e 20  initialized. In 
dd10: 74 68 69 73 20 63 61 73 65 20 69 74 20 73 65 74  this case it set
dd20: 73 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20  s the default.  
dd30: 2a 2a 20 65 6e 63 6f 64 69 6e 67 20 74 68 61 74  ** encoding that
dd40: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f   will be used fo
dd50: 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
dd60: 61 73 65 20 66 69 6c 65 20 69 66 20 61 20 6e 65  ase file if a ne
dd70: 77 20 66 69 6c 65 0a 20 20 2a 2a 20 69 73 20 63  w file.  ** is c
dd80: 72 65 61 74 65 64 2e 20 49 66 20 61 6e 20 65 78  reated. If an ex
dd90: 69 73 74 69 6e 67 20 6d 61 69 6e 20 64 61 74 61  isting main data
dda0: 62 61 73 65 20 66 69 6c 65 20 69 73 20 6f 70 65  base file is ope
ddb0: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 20 20  ned, then the.  
ddc0: 2a 2a 20 64 65 66 61 75 6c 74 20 74 65 78 74 20  ** default text 
ddd0: 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20 74 68 65  encoding for the
dde0: 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61   existing databa
ddf0: 73 65 20 69 73 20 75 73 65 64 2e 0a 20 20 2a 2a  se is used..  **
de00: 20 0a 20 20 2a 2a 20 49 6e 20 61 6c 6c 20 63 61   .  ** In all ca
de10: 73 65 73 20 6e 65 77 20 64 61 74 61 62 61 73 65  ses new database
de20: 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  s created using 
de30: 74 68 65 20 41 54 54 41 43 48 20 63 6f 6d 6d 61  the ATTACH comma
de40: 6e 64 20 61 72 65 0a 20 20 2a 2a 20 63 72 65 61  nd are.  ** crea
de50: 74 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 73  ted to use the s
de60: 61 6d 65 20 64 65 66 61 75 6c 74 20 74 65 78 74  ame default text
de70: 20 65 6e 63 6f 64 69 6e 67 20 61 73 20 74 68 65   encoding as the
de80: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20   main database. 
de90: 49 66 0a 20 20 2a 2a 20 74 68 65 20 6d 61 69 6e  If.  ** the main
dea0: 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f   database has no
deb0: 74 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  t been initializ
dec0: 65 64 20 61 6e 64 2f 6f 72 20 63 72 65 61 74 65  ed and/or create
ded0: 64 20 77 68 65 6e 20 41 54 54 41 43 48 0a 20 20  d when ATTACH.  
dee0: 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64 2c 20  ** is executed, 
def0: 74 68 69 73 20 69 73 20 64 6f 6e 65 20 62 65 66  this is done bef
df00: 6f 72 65 20 74 68 65 20 41 54 54 41 43 48 20 6f  ore the ATTACH o
df10: 70 65 72 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20  peration..  **. 
df20: 20 2a 2a 20 49 6e 20 74 68 65 20 73 65 63 6f 6e   ** In the secon
df30: 64 20 66 6f 72 6d 20 74 68 69 73 20 70 72 61 67  d form this prag
df40: 6d 61 20 73 65 74 73 20 74 68 65 20 74 65 78 74  ma sets the text
df50: 20 65 6e 63 6f 64 69 6e 67 20 74 6f 20 62 65 20   encoding to be 
df60: 75 73 65 64 20 69 6e 0a 20 20 2a 2a 20 6e 65 77  used in.  ** new
df70: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
df80: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68  created using th
df90: 69 73 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  is database hand
dfa0: 6c 65 2e 20 49 74 20 69 73 20 6f 6e 6c 79 0a 20  le. It is only. 
dfb0: 20 2a 2a 20 75 73 65 66 75 6c 20 69 66 20 69 6e   ** useful if in
dfc0: 76 6f 6b 65 64 20 69 6d 6d 65 64 69 61 74 65 6c  voked immediatel
dfd0: 79 20 61 66 74 65 72 20 74 68 65 20 6d 61 69 6e  y after the main
dfe0: 20 64 61 74 61 62 61 73 65 20 69 0a 20 20 2a 2f   database i.  */
dff0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
e000: 45 4e 43 4f 44 49 4e 47 3a 20 7b 0a 20 20 20 20  ENCODING: {.    
e010: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72  static const str
e020: 75 63 74 20 45 6e 63 4e 61 6d 65 20 7b 0a 20 20  uct EncName {.  
e030: 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
e040: 0a 20 20 20 20 20 20 75 38 20 65 6e 63 3b 0a 20  .      u8 enc;. 
e050: 20 20 20 7d 20 65 6e 63 6e 61 6d 65 73 5b 5d 20     } encnames[] 
e060: 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 55 54 46  = {.      { "UTF
e070: 38 22 2c 20 20 20 20 20 53 51 4c 49 54 45 5f 55  8",     SQLITE_U
e080: 54 46 38 20 20 20 20 20 20 20 20 7d 2c 0a 20 20  TF8        },.  
e090: 20 20 20 20 7b 20 22 55 54 46 2d 38 22 2c 20 20      { "UTF-8",  
e0a0: 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20    SQLITE_UTF8   
e0b0: 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74       },  /* Must
e0c0: 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 31 5d 20   be element [1] 
e0d0: 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d  */.      { "UTF-
e0e0: 31 36 6c 65 22 2c 20 53 51 4c 49 54 45 5f 55 54  16le", SQLITE_UT
e0f0: 46 31 36 4c 45 20 20 20 20 20 7d 2c 20 20 2f 2a  F16LE     },  /*
e100: 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74   Must be element
e110: 20 5b 32 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20   [2] */.      { 
e120: 22 55 54 46 2d 31 36 62 65 22 2c 20 53 51 4c 49  "UTF-16be", SQLI
e130: 54 45 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d  TE_UTF16BE     }
e140: 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c  ,  /* Must be el
e150: 65 6d 65 6e 74 20 5b 33 5d 20 2a 2f 0a 20 20 20  ement [3] */.   
e160: 20 20 20 7b 20 22 55 54 46 31 36 6c 65 22 2c 20     { "UTF16le", 
e170: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20   SQLITE_UTF16LE 
e180: 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
e190: 55 54 46 31 36 62 65 22 2c 20 20 53 51 4c 49 54  UTF16be",  SQLIT
e1a0: 45 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c  E_UTF16BE     },
e1b0: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36  .      { "UTF-16
e1c0: 22 2c 20 20 20 30 20 20 20 20 20 20 20 20 20 20  ",   0          
e1d0: 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51          }, /* SQ
e1e0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
e1f0: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46   */.      { "UTF
e200: 31 36 22 2c 20 20 20 20 30 20 20 20 20 20 20 20  16",    0       
e210: 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a             }, /*
e220: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
e230: 49 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 30  IVE */.      { 0
e240: 2c 20 30 20 7d 0a 20 20 20 20 7d 3b 0a 20 20 20  , 0 }.    };.   
e250: 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e   const struct En
e260: 63 4e 61 6d 65 20 2a 70 45 6e 63 3b 0a 20 20 20  cName *pEnc;.   
e270: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 20   if( !zRight ){ 
e280: 20 20 20 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e     /* "PRAGMA en
e290: 63 6f 64 69 6e 67 22 20 2a 2f 0a 20 20 20 20 20  coding" */.     
e2a0: 20 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64   if( sqlite3Read
e2b0: 53 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29  Schema(pParse) )
e2c0: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
e2d0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
e2e0: 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f  encnames[SQLITE_
e2f0: 55 54 46 38 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54  UTF8].enc==SQLIT
e300: 45 5f 55 54 46 38 20 29 3b 0a 20 20 20 20 20 20  E_UTF8 );.      
e310: 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73  assert( encnames
e320: 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 5d  [SQLITE_UTF16LE]
e330: 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  .enc==SQLITE_UTF
e340: 31 36 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73  16LE );.      as
e350: 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53  sert( encnames[S
e360: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 5d 2e 65  QLITE_UTF16BE].e
e370: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
e380: 42 45 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75  BE );.      retu
e390: 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20  rnSingleText(v, 
e3a0: 22 65 6e 63 6f 64 69 6e 67 22 2c 20 65 6e 63 6e  "encoding", encn
e3b0: 61 6d 65 73 5b 45 4e 43 28 70 50 61 72 73 65 2d  ames[ENC(pParse-
e3c0: 3e 64 62 29 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20  >db)].zName);.  
e3d0: 20 20 7d 65 6c 73 65 7b 20 20 20 20 20 20 20 20    }else{        
e3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3f0: 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64  /* "PRAGMA encod
e400: 69 6e 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20  ing = XXX" */.  
e410: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e      /* Only chan
e420: 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ge the value of 
e430: 73 71 6c 69 74 65 2e 65 6e 63 20 69 66 20 74 68  sqlite.enc if th
e440: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
e450: 65 20 69 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a  e is not.      *
e460: 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49  * initialized. I
e470: 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  f the main datab
e480: 61 73 65 20 65 78 69 73 74 73 2c 20 74 68 65 20  ase exists, the 
e490: 6e 65 77 20 73 71 6c 69 74 65 2e 65 6e 63 20 76  new sqlite.enc v
e4a0: 61 6c 75 65 0a 20 20 20 20 20 20 2a 2a 20 77 69  alue.      ** wi
e4b0: 6c 6c 20 62 65 20 6f 76 65 72 77 72 69 74 74 65  ll be overwritte
e4c0: 6e 20 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d  n when the schem
e4d0: 61 20 69 73 20 6e 65 78 74 20 6c 6f 61 64 65 64  a is next loaded
e4e0: 2e 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74  . If it does not
e4f0: 0a 20 20 20 20 20 20 2a 2a 20 61 6c 72 65 61 64  .      ** alread
e500: 79 20 65 78 69 73 74 73 2c 20 69 74 20 77 69 6c  y exists, it wil
e510: 6c 20 62 65 20 63 72 65 61 74 65 64 20 74 6f 20  l be created to 
e520: 75 73 65 20 74 68 65 20 6e 65 77 20 65 6e 63 6f  use the new enco
e530: 64 69 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20 20  ding value..    
e540: 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 0a    */.      if( .
e550: 20 20 20 20 20 20 20 20 21 28 44 62 48 61 73 50          !(DbHasP
e560: 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44  roperty(db, 0, D
e570: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 29  B_SchemaLoaded))
e580: 20 7c 7c 20 0a 20 20 20 20 20 20 20 20 44 62 48   || .        DbH
e590: 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30  asProperty(db, 0
e5a0: 2c 20 44 42 5f 45 6d 70 74 79 29 20 0a 20 20 20  , DB_Empty) .   
e5b0: 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f     ){.        fo
e5c0: 72 28 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65 73  r(pEnc=&encnames
e5d0: 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65  [0]; pEnc->zName
e5e0: 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20 20  ; pEnc++){.     
e5f0: 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69       if( 0==sqli
e600: 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68  te3StrICmp(zRigh
e610: 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20  t, pEnc->zName) 
e620: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ){.            S
e630: 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 3d 20  CHEMA_ENC(db) = 
e640: 45 4e 43 28 64 62 29 20 3d 0a 20 20 20 20 20 20  ENC(db) =.      
e650: 20 20 20 20 20 20 20 20 20 20 70 45 6e 63 2d 3e            pEnc->
e660: 65 6e 63 20 3f 20 70 45 6e 63 2d 3e 65 6e 63 20  enc ? pEnc->enc 
e670: 3a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  : SQLITE_UTF16NA
e680: 54 49 56 45 3b 0a 20 20 20 20 20 20 20 20 20 20  TIVE;.          
e690: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
e6a0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
e6b0: 20 20 20 20 20 20 20 69 66 28 20 21 70 45 6e 63         if( !pEnc
e6c0: 2d 3e 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20  ->zName ){.     
e6d0: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
e6e0: 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 75 6e  rMsg(pParse, "un
e6f0: 73 75 70 70 6f 72 74 65 64 20 65 6e 63 6f 64 69  supported encodi
e700: 6e 67 3a 20 25 73 22 2c 20 7a 52 69 67 68 74 29  ng: %s", zRight)
e710: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
e720: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
e730: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
e740: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
e750: 31 36 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  16 */..#ifndef S
e760: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
e770: 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41  A_VERSION_PRAGMA
e780: 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  S.  /*.  **   PR
e790: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 73 63  AGMA [schema.]sc
e7a0: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a  hema_version.  *
e7b0: 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  *   PRAGMA [sche
e7c0: 6d 61 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69  ma.]schema_versi
e7d0: 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20  on = <integer>. 
e7e0: 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   **.  **   PRAGM
e7f0: 41 20 5b 73 63 68 65 6d 61 2e 5d 75 73 65 72 5f  A [schema.]user_
e800: 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50  version.  **   P
e810: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 75  RAGMA [schema.]u
e820: 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69  ser_version = <i
e830: 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a  nteger>.  **.  *
e840: 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  *   PRAGMA [sche
e850: 6d 61 2e 5d 66 72 65 65 6c 69 73 74 5f 63 6f 75  ma.]freelist_cou
e860: 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50  nt.  **.  **   P
e870: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 64  RAGMA [schema.]d
e880: 61 74 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a  ata_version.  **
e890: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
e8a0: 73 63 68 65 6d 61 2e 5d 61 70 70 6c 69 63 61 74  schema.]applicat
e8b0: 69 6f 6e 5f 69 64 0a 20 20 2a 2a 20 20 20 50 52  ion_id.  **   PR
e8c0: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 70  AGMA [schema.]ap
e8d0: 70 6c 69 63 61 74 69 6f 6e 5f 69 64 20 3d 20 3c  plication_id = <
e8e0: 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20  integer>.  **.  
e8f0: 2a 2a 20 54 68 65 20 70 72 61 67 6d 61 27 73 20  ** The pragma's 
e900: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 61  schema_version a
e910: 6e 64 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  nd user_version 
e920: 61 72 65 20 75 73 65 64 20 74 6f 20 73 65 74 20  are used to set 
e930: 6f 72 20 67 65 74 0a 20 20 2a 2a 20 74 68 65 20  or get.  ** the 
e940: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73 63 68  value of the sch
e950: 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20  ema-version and 
e960: 75 73 65 72 2d 76 65 72 73 69 6f 6e 2c 20 72 65  user-version, re
e970: 73 70 65 63 74 69 76 65 6c 79 2e 20 42 6f 74 68  spectively. Both
e980: 0a 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61  .  ** the schema
e990: 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 74 68 65  -version and the
e9a0: 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 61 72   user-version ar
e9b0: 65 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64 20  e 32-bit signed 
e9c0: 69 6e 74 65 67 65 72 73 0a 20 20 2a 2a 20 73 74  integers.  ** st
e9d0: 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61  ored in the data
e9e0: 62 61 73 65 20 68 65 61 64 65 72 2e 0a 20 20 2a  base header..  *
e9f0: 2a 0a 20 20 2a 2a 20 54 68 65 20 73 63 68 65 6d  *.  ** The schem
ea00: 61 2d 63 6f 6f 6b 69 65 20 69 73 20 75 73 75 61  a-cookie is usua
ea10: 6c 6c 79 20 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c  lly only manipul
ea20: 61 74 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20  ated internally 
ea30: 62 79 20 53 51 4c 69 74 65 2e 20 49 74 0a 20 20  by SQLite. It.  
ea40: 2a 2a 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  ** is incremente
ea50: 64 20 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e  d by SQLite when
ea60: 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ever the databas
ea70: 65 20 73 63 68 65 6d 61 20 69 73 20 6d 6f 64 69  e schema is modi
ea80: 66 69 65 64 20 28 62 79 0a 20 20 2a 2a 20 63 72  fied (by.  ** cr
ea90: 65 61 74 69 6e 67 20 6f 72 20 64 72 6f 70 70 69  eating or droppi
eaa0: 6e 67 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e  ng a table or in
eab0: 64 65 78 29 2e 20 54 68 65 20 73 63 68 65 6d 61  dex). The schema
eac0: 20 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64   version is used
ead0: 20 62 79 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20   by.  ** SQLite 
eae0: 65 61 63 68 20 74 69 6d 65 20 61 20 71 75 65 72  each time a quer
eaf0: 79 20 69 73 20 65 78 65 63 75 74 65 64 20 74 6f  y is executed to
eb00: 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65   ensure that the
eb10: 20 69 6e 74 65 72 6e 61 6c 20 63 61 63 68 65 0a   internal cache.
eb20: 20 20 2a 2a 20 6f 66 20 74 68 65 20 73 63 68 65    ** of the sche
eb30: 6d 61 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d  ma used when com
eb40: 70 69 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71  piling the SQL q
eb50: 75 65 72 79 20 6d 61 74 63 68 65 73 20 74 68 65  uery matches the
eb60: 20 73 63 68 65 6d 61 20 6f 66 0a 20 20 2a 2a 20   schema of.  ** 
eb70: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 67 61  the database aga
eb80: 69 6e 73 74 20 77 68 69 63 68 20 74 68 65 20 63  inst which the c
eb90: 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 20 69 73  ompiled query is
eba0: 20 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74   actually execut
ebb0: 65 64 2e 0a 20 20 2a 2a 20 53 75 62 76 65 72 74  ed..  ** Subvert
ebc0: 69 6e 67 20 74 68 69 73 20 6d 65 63 68 61 6e 69  ing this mechani
ebd0: 73 6d 20 62 79 20 75 73 69 6e 67 20 22 50 52 41  sm by using "PRA
ebe0: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
ebf0: 6f 6e 22 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20  on" to modify.  
ec00: 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65  ** the schema-ve
ec10: 72 73 69 6f 6e 20 69 73 20 70 6f 74 65 6e 74 69  rsion is potenti
ec20: 61 6c 6c 79 20 64 61 6e 67 65 72 6f 75 73 20 61  ally dangerous a
ec30: 6e 64 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 70  nd may lead to p
ec40: 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 63 72 61 73  rogram.  ** cras
ec50: 68 65 73 20 6f 72 20 64 61 74 61 62 61 73 65 20  hes or database 
ec60: 63 6f 72 72 75 70 74 69 6f 6e 2e 20 55 73 65 20  corruption. Use 
ec70: 77 69 74 68 20 63 61 75 74 69 6f 6e 21 0a 20 20  with caution!.  
ec80: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 75 73 65 72  **.  ** The user
ec90: 2d 76 65 72 73 69 6f 6e 20 69 73 20 6e 6f 74 20  -version is not 
eca0: 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20  used internally 
ecb0: 62 79 20 53 51 4c 69 74 65 2e 20 49 74 20 6d 61  by SQLite. It ma
ecc0: 79 20 62 65 20 75 73 65 64 20 62 79 0a 20 20 2a  y be used by.  *
ecd0: 2a 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 66  * applications f
ece0: 6f 72 20 61 6e 79 20 70 75 72 70 6f 73 65 2e 0a  or any purpose..
ecf0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
ed00: 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45  Typ_HEADER_VALUE
ed10: 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 43 6f 6f  : {.    int iCoo
ed20: 6b 69 65 20 3d 20 70 50 72 61 67 6d 61 2d 3e 69  kie = pPragma->i
ed30: 41 72 67 3b 20 20 2f 2a 20 57 68 69 63 68 20 63  Arg;  /* Which c
ed40: 6f 6f 6b 69 65 20 74 6f 20 72 65 61 64 20 6f 72  ookie to read or
ed50: 20 77 72 69 74 65 20 2a 2f 0a 20 20 20 20 73 71   write */.    sq
ed60: 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72  lite3VdbeUsesBtr
ed70: 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20  ee(v, iDb);.    
ed80: 69 66 28 20 7a 52 69 67 68 74 20 26 26 20 28 70  if( zRight && (p
ed90: 50 72 61 67 6d 61 2d 3e 6d 50 72 61 67 46 6c 61  Pragma->mPragFla
eda0: 67 20 26 20 50 72 61 67 46 6c 61 67 5f 52 65 61  g & PragFlag_Rea
edb0: 64 4f 6e 6c 79 29 3d 3d 30 20 29 7b 0a 20 20 20  dOnly)==0 ){.   
edc0: 20 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20     /* Write the 
edd0: 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65  specified cookie
ede0: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20   value */.      
edf0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
ee00: 65 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f 6b 69  eOpList setCooki
ee10: 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20  e[] = {.        
ee20: 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  { OP_Transaction
ee30: 2c 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c  ,    0,  1,  0},
ee40: 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20      /* 0 */.    
ee50: 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b      { OP_SetCook
ee60: 69 65 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20  ie,      0,  0, 
ee70: 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a   0},    /* 1 */.
ee80: 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 56        };.      V
ee90: 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20 20 20  dbeOp *aOp;.    
eea0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 56 65 72    sqlite3VdbeVer
eeb0: 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52 65 71 75 69  ifyNoMallocRequi
eec0: 72 65 64 28 76 2c 20 41 72 72 61 79 53 69 7a 65  red(v, ArraySize
eed0: 28 73 65 74 43 6f 6f 6b 69 65 29 29 3b 0a 20 20  (setCookie));.  
eee0: 20 20 20 20 61 4f 70 20 3d 20 73 71 6c 69 74 65      aOp = sqlite
eef0: 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76  3VdbeAddOpList(v
ef00: 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65 74 43  , ArraySize(setC
ef10: 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b 69  ookie), setCooki
ef20: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  e, 0);.      if(
ef30: 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43   ONLY_IF_REALLOC
ef40: 5f 53 54 52 45 53 53 28 61 4f 70 3d 3d 30 29 20  _STRESS(aOp==0) 
ef50: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 61  ) break;.      a
ef60: 4f 70 5b 30 5d 2e 70 31 20 3d 20 69 44 62 3b 0a  Op[0].p1 = iDb;.
ef70: 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70 31 20        aOp[1].p1 
ef80: 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 61 4f 70  = iDb;.      aOp
ef90: 5b 31 5d 2e 70 32 20 3d 20 69 43 6f 6f 6b 69 65  [1].p2 = iCookie
efa0: 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70  ;.      aOp[1].p
efb0: 33 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69 28  3 = sqlite3Atoi(
efc0: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 65 6c  zRight);.    }el
efd0: 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52 65 61  se{.      /* Rea
efe0: 64 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  d the specified 
eff0: 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a  cookie value */.
f000: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
f010: 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 72 65  st VdbeOpList re
f020: 61 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20  adCookie[] = {. 
f030: 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e         { OP_Tran
f040: 73 61 63 74 69 6f 6e 2c 20 20 20 20 20 30 2c 20  saction,     0, 
f050: 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30   0,  0},    /* 0
f060: 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50   */.        { OP
f070: 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20  _ReadCookie,    
f080: 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20    0,  1,  0},   
f090: 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20   /* 1 */.       
f0a0: 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c   { OP_ResultRow,
f0b0: 20 20 20 20 20 20 20 31 2c 20 20 31 2c 20 20 30         1,  1,  0
f0c0: 7d 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20  }.      };.     
f0d0: 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20   VdbeOp *aOp;.  
f0e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 56      sqlite3VdbeV
f0f0: 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52 65 71  erifyNoMallocReq
f100: 75 69 72 65 64 28 76 2c 20 41 72 72 61 79 53 69  uired(v, ArraySi
f110: 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65 29 29 3b  ze(readCookie));
f120: 0a 20 20 20 20 20 20 61 4f 70 20 3d 20 73 71 6c  .      aOp = sql
f130: 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73  ite3VdbeAddOpLis
f140: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 72  t(v, ArraySize(r
f150: 65 61 64 43 6f 6f 6b 69 65 29 2c 72 65 61 64 43  eadCookie),readC
f160: 6f 6f 6b 69 65 2c 30 29 3b 0a 20 20 20 20 20 20  ookie,0);.      
f170: 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c  if( ONLY_IF_REAL
f180: 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f 70 3d 3d  LOC_STRESS(aOp==
f190: 30 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  0) ) break;.    
f1a0: 20 20 61 4f 70 5b 30 5d 2e 70 31 20 3d 20 69 44    aOp[0].p1 = iD
f1b0: 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e  b;.      aOp[1].
f1c0: 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20  p1 = iDb;.      
f1d0: 61 4f 70 5b 31 5d 2e 70 33 20 3d 20 69 43 6f 6f  aOp[1].p3 = iCoo
f1e0: 6b 69 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  kie;.      sqlit
f1f0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
f200: 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71  (v, 1);.      sq
f210: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
f220: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
f230: 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20 53  E_NAME, zLeft, S
f240: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
f250: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
f260: 64 62 65 52 65 75 73 61 62 6c 65 28 76 29 3b 0a  dbeReusable(v);.
f270: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
f280: 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
f290: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
f2a0: 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 20  VERSION_PRAGMAS 
f2b0: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
f2c0: 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f  TE_OMIT_COMPILEO
f2d0: 50 54 49 4f 4e 5f 44 49 41 47 53 0a 20 20 2f 2a  PTION_DIAGS.  /*
f2e0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 63  .  **   PRAGMA c
f2f0: 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 0a 20  ompile_options. 
f300: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
f310: 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 61 6c 6c  the names of all
f320: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
f330: 74 69 6f 6e 73 20 75 73 65 64 20 69 6e 20 74 68  tions used in th
f340: 69 73 20 62 75 69 6c 64 2c 0a 20 20 2a 2a 20 6f  is build,.  ** o
f350: 6e 65 20 6f 70 74 69 6f 6e 20 70 65 72 20 72 6f  ne option per ro
f360: 77 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  w..  */.  case P
f370: 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45 5f 4f  ragTyp_COMPILE_O
f380: 50 54 49 4f 4e 53 3a 20 7b 0a 20 20 20 20 69 6e  PTIONS: {.    in
f390: 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e  t i = 0;.    con
f3a0: 73 74 20 63 68 61 72 20 2a 7a 4f 70 74 3b 0a 20  st char *zOpt;. 
f3b0: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
f3c0: 3d 20 31 3b 0a 20 20 20 20 73 65 74 4f 6e 65 43  = 1;.    setOneC
f3d0: 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 22 63 6f  olumnName(v, "co
f3e0: 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 22 29 3b 0a  mpile_option");.
f3f0: 20 20 20 20 77 68 69 6c 65 28 20 28 7a 4f 70 74      while( (zOpt
f400: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69   = sqlite3_compi
f410: 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 2b 2b  leoption_get(i++
f420: 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ))!=0 ){.      s
f430: 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74  qlite3VdbeLoadSt
f440: 72 69 6e 67 28 76 2c 20 31 2c 20 7a 4f 70 74 29  ring(v, 1, zOpt)
f450: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
f460: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
f470: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29  ResultRow, 1, 1)
f480: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
f490: 74 65 33 56 64 62 65 52 65 75 73 61 62 6c 65 28  te3VdbeReusable(
f4a0: 76 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  v);.  }.  break;
f4b0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
f4c0: 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
f4d0: 54 49 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a 23  TION_DIAGS */..#
f4e0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
f4f0: 49 54 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a  IT_WAL.  /*.  **
f500: 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d     PRAGMA [schem
f510: 61 2e 5d 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e  a.]wal_checkpoin
f520: 74 20 3d 20 70 61 73 73 69 76 65 7c 66 75 6c 6c  t = passive|full
f530: 7c 72 65 73 74 61 72 74 7c 74 72 75 6e 63 61 74  |restart|truncat
f540: 65 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 68 65 63  e.  **.  ** Chec
f550: 6b 70 6f 69 6e 74 20 74 68 65 20 64 61 74 61 62  kpoint the datab
f560: 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ase..  */.  case
f570: 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45   PragTyp_WAL_CHE
f580: 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 73  CKPOINT: {.    s
f590: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
f5a0: 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 62   *azCol[] = { "b
f5b0: 75 73 79 22 2c 20 22 6c 6f 67 22 2c 20 22 63 68  usy", "log", "ch
f5c0: 65 63 6b 70 6f 69 6e 74 65 64 22 20 7d 3b 0a 20  eckpointed" };. 
f5d0: 20 20 20 69 6e 74 20 69 42 74 20 3d 20 28 70 49     int iBt = (pI
f5e0: 64 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c 49 54 45  d2->z?iDb:SQLITE
f5f0: 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 29 3b 0a  _MAX_ATTACHED);.
f600: 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20      int eMode = 
f610: 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
f620: 54 5f 50 41 53 53 49 56 45 3b 0a 20 20 20 20 69  T_PASSIVE;.    i
f630: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
f640: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
f650: 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 66  rICmp(zRight, "f
f660: 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ull")==0 ){.    
f670: 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49      eMode = SQLI
f680: 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55  TE_CHECKPOINT_FU
f690: 4c 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  LL;.      }else 
f6a0: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
f6b0: 6d 70 28 7a 52 69 67 68 74 2c 20 22 72 65 73 74  mp(zRight, "rest
f6c0: 61 72 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  art")==0 ){.    
f6d0: 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49      eMode = SQLI
f6e0: 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45  TE_CHECKPOINT_RE
f6f0: 53 54 41 52 54 3b 0a 20 20 20 20 20 20 7d 65 6c  START;.      }el
f700: 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
f710: 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 74  rICmp(zRight, "t
f720: 72 75 6e 63 61 74 65 22 29 3d 3d 30 20 29 7b 0a  runcate")==0 ){.
f730: 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20          eMode = 
f740: 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
f750: 54 5f 54 52 55 4e 43 41 54 45 3b 0a 20 20 20 20  T_TRUNCATE;.    
f760: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65    }.    }.    se
f770: 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  tAllColumnNames(
f780: 76 2c 20 33 2c 20 61 7a 43 6f 6c 29 3b 20 20 61  v, 3, azCol);  a
f790: 73 73 65 72 74 28 20 33 3d 3d 41 72 72 61 79 53  ssert( 3==ArrayS
f7a0: 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20  ize(azCol) );.  
f7b0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
f7c0: 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   3;.    sqlite3V
f7d0: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
f7e0: 43 68 65 63 6b 70 6f 69 6e 74 2c 20 69 42 74 2c  Checkpoint, iBt,
f7f0: 20 65 4d 6f 64 65 2c 20 31 29 3b 0a 20 20 20 20   eMode, 1);.    
f800: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
f810: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
f820: 77 2c 20 31 2c 20 33 29 3b 0a 20 20 7d 0a 20 20  w, 1, 3);.  }.  
f830: 62 72 65 61 6b 3b 0a 0a 20 20 2f 2a 0a 20 20 2a  break;..  /*.  *
f840: 2a 20 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61  *   PRAGMA wal_a
f850: 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 0a 20 20  utocheckpoint.  
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 20 3d  autocheckpoint =
f880: 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e   N.  **.  ** Con
f890: 66 69 67 75 72 65 20 61 20 64 61 74 61 62 61 73  figure a databas
f8a0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  e connection to 
f8b0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 68  automatically ch
f8c0: 65 63 6b 70 6f 69 6e 74 20 61 20 64 61 74 61 62  eckpoint a datab
f8d0: 61 73 65 0a 20 20 2a 2a 20 61 66 74 65 72 20 61  ase.  ** after a
f8e0: 63 63 75 6d 75 6c 61 74 69 6e 67 20 4e 20 66 72  ccumulating N fr
f8f0: 61 6d 65 73 20 69 6e 20 74 68 65 20 6c 6f 67 2e  ames in the log.
f900: 20 4f 72 20 71 75 65 72 79 20 66 6f 72 20 74 68   Or query for th
f910: 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 0a  e current value.
f920: 20 20 2a 2a 20 6f 66 20 4e 2e 0a 20 20 2a 2f 0a    ** of N..  */.
f930: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 57    case PragTyp_W
f940: 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f 49 4e  AL_AUTOCHECKPOIN
f950: 54 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  T: {.    if( zRi
f960: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
f970: 69 74 65 33 5f 77 61 6c 5f 61 75 74 6f 63 68 65  ite3_wal_autoche
f980: 63 6b 70 6f 69 6e 74 28 64 62 2c 20 73 71 6c 69  ckpoint(db, sqli
f990: 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29  te3Atoi(zRight))
f9a0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
f9b0: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22  rnSingleInt(v, "
f9c0: 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69  wal_autocheckpoi
f9d0: 6e 74 22 2c 20 0a 20 20 20 20 20 20 20 64 62 2d  nt", .       db-
f9e0: 3e 78 57 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73  >xWalCallback==s
f9f0: 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74  qlite3WalDefault
fa00: 48 6f 6f 6b 20 3f 20 0a 20 20 20 20 20 20 20 20  Hook ? .        
fa10: 20 20 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f     SQLITE_PTR_TO
fa20: 5f 49 4e 54 28 64 62 2d 3e 70 57 61 6c 41 72 67  _INT(db->pWalArg
fa30: 29 20 3a 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72  ) : 0);.  }.  br
fa40: 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  eak;.#endif..  /
fa50: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 73  *.  **  PRAGMA s
fa60: 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a  hrink_memory.  *
fa70: 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54  *.  ** IMPLEMENT
fa80: 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 33 34 34  ATION-OF: R-2344
fa90: 35 2d 34 36 31 30 39 20 54 68 69 73 20 70 72 61  5-46109 This pra
faa0: 67 6d 61 20 63 61 75 73 65 73 20 74 68 65 20 64  gma causes the d
fab0: 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 63 6f 6e  atabase.  ** con
fac0: 6e 65 63 74 69 6f 6e 20 6f 6e 20 77 68 69 63 68  nection on which
fad0: 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 74   it is invoked t
fae0: 6f 20 66 72 65 65 20 75 70 20 61 73 20 6d 75 63  o free up as muc
faf0: 68 20 6d 65 6d 6f 72 79 20 61 73 20 69 74 0a 20  h memory as it. 
fb00: 20 2a 2a 20 63 61 6e 2c 20 62 79 20 63 61 6c 6c   ** can, by call
fb10: 69 6e 67 20 73 71 6c 69 74 65 33 5f 64 62 5f 72  ing sqlite3_db_r
fb20: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 2e  elease_memory().
fb30: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
fb40: 67 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f  gTyp_SHRINK_MEMO
fb50: 52 59 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  RY: {.    sqlite
fb60: 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d  3_db_release_mem
fb70: 6f 72 79 28 64 62 29 3b 0a 20 20 20 20 62 72 65  ory(db);.    bre
fb80: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
fb90: 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79  **   PRAGMA busy
fba0: 5f 74 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20 20  _timeout.  **   
fbb0: 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65  PRAGMA busy_time
fbc0: 6f 75 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a  out = N.  **.  *
fbd0: 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f 62  * Call sqlite3_b
fbe0: 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20  usy_timeout(db, 
fbf0: 4e 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20  N).  Return the 
fc00: 63 75 72 72 65 6e 74 20 74 69 6d 65 6f 75 74 20  current timeout 
fc10: 76 61 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f 6e  value.  ** if on
fc20: 65 20 69 73 20 73 65 74 2e 20 20 49 66 20 6e 6f  e is set.  If no
fc30: 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 6f 72   busy handler or
fc40: 20 61 20 64 69 66 66 65 72 65 6e 74 20 62 75 73   a different bus
fc50: 79 20 68 61 6e 64 6c 65 72 20 69 73 20 73 65 74  y handler is set
fc60: 0a 20 20 2a 2a 20 74 68 65 6e 20 30 20 69 73 20  .  ** then 0 is 
fc70: 72 65 74 75 72 6e 65 64 2e 20 20 53 65 74 74 69  returned.  Setti
fc80: 6e 67 20 74 68 65 20 62 75 73 79 5f 74 69 6d 65  ng the busy_time
fc90: 6f 75 74 20 74 6f 20 30 20 6f 72 20 6e 65 67 61  out to 0 or nega
fca0: 74 69 76 65 0a 20 20 2a 2a 20 64 69 73 61 62 6c  tive.  ** disabl
fcb0: 65 73 20 74 68 65 20 74 69 6d 65 6f 75 74 2e 0a  es the timeout..
fcc0: 20 20 2a 2f 0a 20 20 2f 2a 63 61 73 65 20 50 72    */.  /*case Pr
fcd0: 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f  agTyp_BUSY_TIMEO
fce0: 55 54 2a 2f 20 64 65 66 61 75 6c 74 3a 20 7b 0a  UT*/ default: {.
fcf0: 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 61      assert( pPra
fd00: 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 3d 3d 50  gma->ePragTyp==P
fd10: 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45  ragTyp_BUSY_TIME
fd20: 4f 55 54 20 29 3b 0a 20 20 20 20 69 66 28 20 7a  OUT );.    if( z
fd30: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
fd40: 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65  qlite3_busy_time
fd50: 6f 75 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41  out(db, sqlite3A
fd60: 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  toi(zRight));.  
fd70: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69    }.    returnSi
fd80: 6e 67 6c 65 49 6e 74 28 76 2c 20 22 74 69 6d 65  ngleInt(v, "time
fd90: 6f 75 74 22 2c 20 20 64 62 2d 3e 62 75 73 79 54  out",  db->busyT
fda0: 69 6d 65 6f 75 74 29 3b 0a 20 20 20 20 62 72 65  imeout);.    bre
fdb0: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
fdc0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74  **   PRAGMA soft
fdd0: 5f 68 65 61 70 5f 6c 69 6d 69 74 0a 20 20 2a 2a  _heap_limit.  **
fde0: 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68     PRAGMA soft_h
fdf0: 65 61 70 5f 6c 69 6d 69 74 20 3d 20 4e 0a 20 20  eap_limit = N.  
fe00: 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e  **.  ** IMPLEMEN
fe10: 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 36 33  TATION-OF: R-263
fe20: 34 33 2d 34 35 39 33 30 20 54 68 69 73 20 70 72  43-45930 This pr
fe30: 61 67 6d 61 20 69 6e 76 6f 6b 65 73 20 74 68 65  agma invokes the
fe40: 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6f  .  ** sqlite3_so
fe50: 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28  ft_heap_limit64(
fe60: 29 20 69 6e 74 65 72 66 61 63 65 20 77 69 74 68  ) interface with
fe70: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 4e 2c   the argument N,
fe80: 20 69 66 20 4e 20 69 73 0a 20 20 2a 2a 20 73 70   if N is.  ** sp
fe90: 65 63 69 66 69 65 64 20 61 6e 64 20 69 73 20 61  ecified and is a
fea0: 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   non-negative in
feb0: 74 65 67 65 72 2e 0a 20 20 2a 2a 20 49 4d 50 4c  teger..  ** IMPL
fec0: 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
fed0: 2d 36 34 34 35 31 2d 30 37 31 36 33 20 54 68 65  -64451-07163 The
fee0: 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74   soft_heap_limit
fef0: 20 70 72 61 67 6d 61 20 61 6c 77 61 79 73 0a 20   pragma always. 
ff00: 20 2a 2a 20 72 65 74 75 72 6e 73 20 74 68 65 20   ** returns the 
ff10: 73 61 6d 65 20 69 6e 74 65 67 65 72 20 74 68 61  same integer tha
ff20: 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75 72  t would be retur
ff30: 6e 65 64 20 62 79 20 74 68 65 0a 20 20 2a 2a 20  ned by the.  ** 
ff40: 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61  sqlite3_soft_hea
ff50: 70 5f 6c 69 6d 69 74 36 34 28 2d 31 29 20 43 2d  p_limit64(-1) C-
ff60: 6c 61 6e 67 75 61 67 65 20 66 75 6e 63 74 69 6f  language functio
ff70: 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  n..  */.  case P
ff80: 72 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50  ragTyp_SOFT_HEAP
ff90: 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71  _LIMIT: {.    sq
ffa0: 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20  lite3_int64 N;. 
ffb0: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 26 26     if( zRight &&
ffc0: 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78   sqlite3DecOrHex
ffd0: 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e  ToI64(zRight, &N
ffe0: 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )==SQLITE_OK ){.
fff0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6f        sqlite3_so
10000 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28  ft_heap_limit64(
10010 4e 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  N);.    }.    re
10020 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c  turnSingleInt(v,
10030 20 22 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69   "soft_heap_limi
10040 74 22 2c 20 20 73 71 6c 69 74 65 33 5f 73 6f 66  t",  sqlite3_sof
10050 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d  t_heap_limit64(-
10060 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  1));.    break;.
10070 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
10080 20 50 52 41 47 4d 41 20 74 68 72 65 61 64 73 0a   PRAGMA threads.
10090 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 68    **   PRAGMA th
100a0 72 65 61 64 73 20 3d 20 4e 0a 20 20 2a 2a 0a 20  reads = N.  **. 
100b0 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 74 68   ** Configure th
100c0 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
100d0 20 6f 66 20 77 6f 72 6b 65 72 20 74 68 72 65 61   of worker threa
100e0 64 73 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20  ds.  Return the 
100f0 6e 65 77 0a 20 20 2a 2a 20 6d 61 78 69 6d 75 6d  new.  ** maximum
10100 2c 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65  , which might be
10110 20 6c 65 73 73 20 74 68 61 6e 20 72 65 71 75 65   less than reque
10120 73 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  sted..  */.  cas
10130 65 20 50 72 61 67 54 79 70 5f 54 48 52 45 41 44  e PragTyp_THREAD
10140 53 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  S: {.    sqlite3
10150 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66  _int64 N;.    if
10160 28 20 7a 52 69 67 68 74 0a 20 20 20 20 20 26 26  ( zRight.     &&
10170 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78   sqlite3DecOrHex
10180 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e  ToI64(zRight, &N
10190 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  )==SQLITE_OK.   
101a0 20 20 26 26 20 4e 3e 3d 30 0a 20 20 20 20 29 7b    && N>=0.    ){
101b0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c  .      sqlite3_l
101c0 69 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f  imit(db, SQLITE_
101d0 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
101e0 45 41 44 53 2c 20 28 69 6e 74 29 28 4e 26 30 78  EADS, (int)(N&0x
101f0 37 66 66 66 66 66 66 66 29 29 3b 0a 20 20 20 20  7fffffff));.    
10200 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  }.    returnSing
10210 6c 65 49 6e 74 28 76 2c 20 22 74 68 72 65 61 64  leInt(v, "thread
10220 73 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  s",.            
10230 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
10240 6c 69 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45  limit(db, SQLITE
10250 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48  _LIMIT_WORKER_TH
10260 52 45 41 44 53 2c 20 2d 31 29 29 3b 0a 20 20 20  READS, -1));.   
10270 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66   break;.  }..#if
10280 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
10290 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
102a0 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20  d(SQLITE_TEST). 
102b0 20 2f 2a 0a 20 20 2a 2a 20 52 65 70 6f 72 74 20   /*.  ** Report 
102c0 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74  the current stat
102d0 65 20 6f 66 20 66 69 6c 65 20 6c 6f 67 73 20 66  e of file logs f
102e0 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73  or all databases
102f0 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
10300 67 54 79 70 5f 4c 4f 43 4b 5f 53 54 41 54 55 53  gTyp_LOCK_STATUS
10310 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
10320 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
10330 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20   azLockName[] = 
10340 7b 0a 20 20 20 20 20 20 22 75 6e 6c 6f 63 6b 65  {.      "unlocke
10350 64 22 2c 20 22 73 68 61 72 65 64 22 2c 20 22 72  d", "shared", "r
10360 65 73 65 72 76 65 64 22 2c 20 22 70 65 6e 64 69  eserved", "pendi
10370 6e 67 22 2c 20 22 65 78 63 6c 75 73 69 76 65 22  ng", "exclusive"
10380 0a 20 20 20 20 7d 3b 0a 20 20 20 20 73 74 61 74  .    };.    stat
10390 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  ic const char *a
103a0 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 64 61 74 61  zCol[] = { "data
103b0 62 61 73 65 22 2c 20 22 73 74 61 74 75 73 22 20  base", "status" 
103c0 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  };.    int i;.  
103d0 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61    setAllColumnNa
103e0 6d 65 73 28 76 2c 20 32 2c 20 61 7a 43 6f 6c 29  mes(v, 2, azCol)
103f0 3b 20 61 73 73 65 72 74 28 20 32 3d 3d 41 72 72  ; assert( 2==Arr
10400 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b  aySize(azCol) );
10410 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
10420 6d 20 3d 20 32 3b 0a 20 20 20 20 66 6f 72 28 69  m = 2;.    for(i
10430 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
10440 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65 65  ++){.      Btree
10450 20 2a 70 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e   *pBt;.      con
10460 73 74 20 63 68 61 72 20 2a 7a 53 74 61 74 65 20  st char *zState 
10470 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20  = "unknown";.   
10480 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20     int j;.      
10490 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  if( db->aDb[i].z
104a0 44 62 53 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e  DbSName==0 ) con
104b0 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 70 42 74  tinue;.      pBt
104c0 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42   = db->aDb[i].pB
104d0 74 3b 0a 20 20 20 20 20 20 69 66 28 20 70 42 74  t;.      if( pBt
104e0 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 42 74  ==0 || sqlite3Bt
104f0 72 65 65 50 61 67 65 72 28 70 42 74 29 3d 3d 30  reePager(pBt)==0
10500 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 53 74 61   ){.        zSta
10510 74 65 20 3d 20 22 63 6c 6f 73 65 64 22 3b 0a 20  te = "closed";. 
10520 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
10530 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74  qlite3_file_cont
10540 72 6f 6c 28 64 62 2c 20 69 20 3f 20 64 62 2d 3e  rol(db, i ? db->
10550 61 44 62 5b 69 5d 2e 7a 44 62 53 4e 61 6d 65 20  aDb[i].zDbSName 
10560 3a 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20  : 0, .          
10570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10580 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
10590 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54 41 54  E_FCNTL_LOCKSTAT
105a0 45 2c 20 26 6a 29 3d 3d 53 51 4c 49 54 45 5f 4f  E, &j)==SQLITE_O
105b0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 7a 53  K ){.         zS
105c0 74 61 74 65 20 3d 20 61 7a 4c 6f 63 6b 4e 61 6d  tate = azLockNam
105d0 65 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 0a 20 20  e[j];.      }.  
105e0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
105f0 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22  ultiLoad(v, 1, "
10600 73 73 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  ss", db->aDb[i].
10610 7a 44 62 53 4e 61 6d 65 2c 20 7a 53 74 61 74 65  zDbSName, zState
10620 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
10630 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
10640 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32  _ResultRow, 1, 2
10650 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65  );.    }.    bre
10660 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ak;.  }.#endif..
10670 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41  #ifdef SQLITE_HA
10680 53 5f 43 4f 44 45 43 0a 20 20 63 61 73 65 20 50  S_CODEC.  case P
10690 72 61 67 54 79 70 5f 4b 45 59 3a 20 7b 0a 20 20  ragTyp_KEY: {.  
106a0 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 20 73    if( zRight ) s
106b0 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62  qlite3_key_v2(db
106c0 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20 73  , zDb, zRight, s
106d0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
106e0 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62 72 65  Right));.    bre
106f0 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20 50  ak;.  }.  case P
10700 72 61 67 54 79 70 5f 52 45 4b 45 59 3a 20 7b 0a  ragTyp_REKEY: {.
10710 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
10720 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 5f 76   sqlite3_rekey_v
10730 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68  2(db, zDb, zRigh
10740 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  t, sqlite3Strlen
10750 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  30(zRight));.   
10760 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61   break;.  }.  ca
10770 73 65 20 50 72 61 67 54 79 70 5f 48 45 58 4b 45  se PragTyp_HEXKE
10780 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  Y: {.    if( zRi
10790 67 68 74 20 29 7b 0a 20 20 20 20 20 20 75 38 20  ght ){.      u8 
107a0 69 42 79 74 65 3b 0a 20 20 20 20 20 20 69 6e 74  iByte;.      int
107b0 20 69 3b 0a 20 20 20 20 20 20 63 68 61 72 20 7a   i;.      char z
107c0 4b 65 79 5b 34 30 5d 3b 0a 20 20 20 20 20 20 66  Key[40];.      f
107d0 6f 72 28 69 3d 30 2c 20 69 42 79 74 65 3d 30 3b  or(i=0, iByte=0;
107e0 20 69 3c 73 69 7a 65 6f 66 28 7a 4b 65 79 29 2a   i<sizeof(zKey)*
107f0 32 20 26 26 20 73 71 6c 69 74 65 33 49 73 78 64  2 && sqlite3Isxd
10800 69 67 69 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b  igit(zRight[i]);
10810 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
10820 42 79 74 65 20 3d 20 28 69 42 79 74 65 3c 3c 34  Byte = (iByte<<4
10830 29 20 2b 20 73 71 6c 69 74 65 33 48 65 78 54 6f  ) + sqlite3HexTo
10840 49 6e 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b 0a  Int(zRight[i]);.
10850 20 20 20 20 20 20 20 20 69 66 28 20 28 69 26 31          if( (i&1
10860 29 21 3d 30 20 29 20 7a 4b 65 79 5b 69 2f 32 5d  )!=0 ) zKey[i/2]
10870 20 3d 20 69 42 79 74 65 3b 0a 20 20 20 20 20 20   = iByte;.      
10880 7d 0a 20 20 20 20 20 20 69 66 28 20 28 7a 4c 65  }.      if( (zLe
10890 66 74 5b 33 5d 20 26 20 30 78 66 29 3d 3d 30 78  ft[3] & 0xf)==0x
108a0 62 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  b ){.        sql
108b0 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20  ite3_key_v2(db, 
108c0 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b  zDb, zKey, i/2);
108d0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
108e0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65        sqlite3_re
108f0 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20  key_v2(db, zDb, 
10900 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20 20  zKey, i/2);.    
10910 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72    }.    }.    br
10920 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
10930 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
10940 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 20 7c 7c  TE_HAS_CODEC) ||
10950 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
10960 45 4e 41 42 4c 45 5f 43 45 52 4f 44 29 0a 20 20  ENABLE_CEROD).  
10970 63 61 73 65 20 50 72 61 67 54 79 70 5f 41 43 54  case PragTyp_ACT
10980 49 56 41 54 45 5f 45 58 54 45 4e 53 49 4f 4e 53  IVATE_EXTENSIONS
10990 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a  : if( zRight ){.
109a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41  #ifdef SQLITE_HA
109b0 53 5f 43 4f 44 45 43 0a 20 20 20 20 69 66 28 20  S_CODEC.    if( 
109c0 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28  sqlite3StrNICmp(
109d0 7a 52 69 67 68 74 2c 20 22 73 65 65 2d 22 2c 20  zRight, "see-", 
109e0 34 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  4)==0 ){.      s
109f0 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65 5f  qlite3_activate_
10a00 73 65 65 28 26 7a 52 69 67 68 74 5b 34 5d 29 3b  see(&zRight[4]);
10a10 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69  .    }.#endif.#i
10a20 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
10a30 4c 45 5f 43 45 52 4f 44 0a 20 20 20 20 69 66 28  LE_CEROD.    if(
10a40 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
10a50 28 7a 52 69 67 68 74 2c 20 22 63 65 72 6f 64 2d  (zRight, "cerod-
10a60 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", 6)==0 ){.    
10a70 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61    sqlite3_activa
10a80 74 65 5f 63 65 72 6f 64 28 26 7a 52 69 67 68 74  te_cerod(&zRight
10a90 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  [6]);.    }.#end
10aa0 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
10ab0 23 65 6e 64 69 66 0a 0a 20 20 7d 20 2f 2a 20 45  #endif..  } /* E
10ac0 6e 64 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41  nd of the PRAGMA
10ad0 20 73 77 69 74 63 68 20 2a 2f 0a 0a 70 72 61 67   switch */..prag
10ae0 6d 61 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74 65  ma_out:.  sqlite
10af0 33 44 62 46 72 65 65 28 64 62 2c 20 7a 4c 65 66  3DbFree(db, zLef
10b00 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  t);.  sqlite3DbF
10b10 72 65 65 28 64 62 2c 20 7a 52 69 67 68 74 29 3b  ree(db, zRight);
10b20 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  .}..#endif /* SQ
10b30 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
10b40 20 2a 2f 0a                                       */.