/ Hex Artifact Content
Login

Artifact 620a6f8c850cc4b42aaa4fcf5ceae531fac027a3:


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 4e 61 6d 65 20 3a 20 30 3b 0a 20  Db->zName : 0;. 
2ae0: 20 69 66 28 20 73 71 6c 69 74 65 33 41 75 74 68   if( sqlite3Auth
2af0: 43 68 65 63 6b 28 70 50 61 72 73 65 2c 20 53 51  Check(pParse, SQ
2b00: 4c 49 54 45 5f 50 52 41 47 4d 41 2c 20 7a 4c 65  LITE_PRAGMA, zLe
2b10: 66 74 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  ft, zRight, zDb)
2b20: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61   ){.    goto pra
2b30: 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20  gma_out;.  }..  
2b40: 2f 2a 20 53 65 6e 64 20 61 6e 20 53 51 4c 49 54  /* Send an SQLIT
2b50: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 66  E_FCNTL_PRAGMA f
2b60: 69 6c 65 2d 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  ile-control to t
2b70: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46  he underlying VF
2b80: 53 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  S.  ** connectio
2b90: 6e 2e 20 20 49 66 20 69 74 20 72 65 74 75 72 6e  n.  If it return
2ba0: 73 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 74 68 65  s SQLITE_OK, the
2bb0: 6e 20 61 73 73 75 6d 65 20 74 68 61 74 20 74 68  n assume that th
2bc0: 65 20 56 46 53 0a 20 20 2a 2a 20 68 61 6e 64 6c  e VFS.  ** handl
2bd0: 65 64 20 74 68 65 20 70 72 61 67 6d 61 20 61 6e  ed the pragma an
2be0: 64 20 67 65 6e 65 72 61 74 65 20 61 20 6e 6f 2d  d generate a no-
2bf0: 6f 70 20 70 72 65 70 61 72 65 64 20 73 74 61 74  op prepared stat
2c00: 65 6d 65 6e 74 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ement..  **.  **
2c10: 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
2c20: 4f 46 3a 20 52 2d 31 32 32 33 38 2d 35 35 31 32  OF: R-12238-5512
2c30: 30 20 57 68 65 6e 65 76 65 72 20 61 20 50 52 41  0 Whenever a PRA
2c40: 47 4d 41 20 73 74 61 74 65 6d 65 6e 74 20 69 73  GMA statement is
2c50: 20 70 61 72 73 65 64 2c 0a 20 20 2a 2a 20 61 6e   parsed,.  ** an
2c60: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
2c70: 41 47 4d 41 20 66 69 6c 65 20 63 6f 6e 74 72 6f  AGMA file contro
2c80: 6c 20 69 73 20 73 65 6e 74 20 74 6f 20 74 68 65  l is sent to the
2c90: 20 6f 70 65 6e 20 73 71 6c 69 74 65 33 5f 66 69   open sqlite3_fi
2ca0: 6c 65 0a 20 20 2a 2a 20 6f 62 6a 65 63 74 20 63  le.  ** object c
2cb0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
2cc0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2cd0: 65 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 70  e to which the p
2ce0: 72 61 67 6d 61 0a 20 20 2a 2a 20 73 74 61 74 65  ragma.  ** state
2cf0: 6d 65 6e 74 20 72 65 66 65 72 73 2e 0a 20 20 2a  ment refers..  *
2d00: 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54  *.  ** IMPLEMENT
2d10: 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 39 38 37  ATION-OF: R-2987
2d20: 35 2d 33 31 36 37 38 20 54 68 65 20 61 72 67 75  5-31678 The argu
2d30: 6d 65 6e 74 20 74 6f 20 74 68 65 20 53 51 4c 49  ment to the SQLI
2d40: 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 0a  TE_FCNTL_PRAGMA.
2d50: 20 20 2a 2a 20 66 69 6c 65 20 63 6f 6e 74 72 6f    ** file contro
2d60: 6c 20 69 73 20 61 6e 20 61 72 72 61 79 20 6f 66  l is an array of
2d70: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 73 74 72   pointers to str
2d80: 69 6e 67 73 20 28 63 68 61 72 2a 2a 29 20 69 6e  ings (char**) in
2d90: 20 77 68 69 63 68 20 74 68 65 0a 20 20 2a 2a 20   which the.  ** 
2da0: 73 65 63 6f 6e 64 20 65 6c 65 6d 65 6e 74 20 6f  second element o
2db0: 66 20 74 68 65 20 61 72 72 61 79 20 69 73 20 74  f the array is t
2dc0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70  he name of the p
2dd0: 72 61 67 6d 61 20 61 6e 64 20 74 68 65 20 74 68  ragma and the th
2de0: 69 72 64 0a 20 20 2a 2a 20 65 6c 65 6d 65 6e 74  ird.  ** element
2df0: 20 69 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   is the argument
2e00: 20 74 6f 20 74 68 65 20 70 72 61 67 6d 61 20 6f   to the pragma o
2e10: 72 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 70 72  r NULL if the pr
2e20: 61 67 6d 61 20 68 61 73 20 6e 6f 0a 20 20 2a 2a  agma has no.  **
2e30: 20 61 72 67 75 6d 65 6e 74 2e 0a 20 20 2a 2f 0a   argument..  */.
2e40: 20 20 61 46 63 6e 74 6c 5b 30 5d 20 3d 20 30 3b    aFcntl[0] = 0;
2e50: 0a 20 20 61 46 63 6e 74 6c 5b 31 5d 20 3d 20 7a  .  aFcntl[1] = z
2e60: 4c 65 66 74 3b 0a 20 20 61 46 63 6e 74 6c 5b 32  Left;.  aFcntl[2
2e70: 5d 20 3d 20 7a 52 69 67 68 74 3b 0a 20 20 61 46  ] = zRight;.  aF
2e80: 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b 0a 20 20 64  cntl[3] = 0;.  d
2e90: 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e  b->busyHandler.n
2ea0: 42 75 73 79 20 3d 20 30 3b 0a 20 20 72 63 20 3d  Busy = 0;.  rc =
2eb0: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f   sqlite3_file_co
2ec0: 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62 2c 20 53  ntrol(db, zDb, S
2ed0: 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47  QLITE_FCNTL_PRAG
2ee0: 4d 41 2c 20 28 76 6f 69 64 2a 29 61 46 63 6e 74  MA, (void*)aFcnt
2ef0: 6c 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  l);.  if( rc==SQ
2f00: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
2f10: 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78 74 28  eturnSingleText(
2f20: 76 2c 20 22 72 65 73 75 6c 74 22 2c 20 61 46 63  v, "result", aFc
2f30: 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 73 71 6c  ntl[0]);.    sql
2f40: 69 74 65 33 5f 66 72 65 65 28 61 46 63 6e 74 6c  ite3_free(aFcntl
2f50: 5b 30 5d 29 3b 0a 20 20 20 20 67 6f 74 6f 20 70  [0]);.    goto p
2f60: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 20  ragma_out;.  }. 
2f70: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
2f80: 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20 20 20 20  NOTFOUND ){.    
2f90: 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20 29 7b  if( aFcntl[0] ){
2fa0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72  .      sqlite3Er
2fb0: 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22  rorMsg(pParse, "
2fc0: 25 73 22 2c 20 61 46 63 6e 74 6c 5b 30 5d 29 3b  %s", aFcntl[0]);
2fd0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
2fe0: 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a  ree(aFcntl[0]);.
2ff0: 20 20 20 20 7d 0a 20 20 20 20 70 50 61 72 73 65      }.    pParse
3000: 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 70 50  ->nErr++;.    pP
3010: 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20  arse->rc = rc;. 
3020: 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f     goto pragma_o
3030: 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f  ut;.  }..  /* Lo
3040: 63 61 74 65 20 74 68 65 20 70 72 61 67 6d 61 20  cate the pragma 
3050: 69 6e 20 74 68 65 20 6c 6f 6f 6b 75 70 20 74 61  in the lookup ta
3060: 62 6c 65 20 2a 2f 0a 20 20 6c 77 72 20 3d 20 30  ble */.  lwr = 0
3070: 3b 0a 20 20 75 70 72 20 3d 20 41 72 72 61 79 53  ;.  upr = ArrayS
3080: 69 7a 65 28 61 50 72 61 67 6d 61 4e 61 6d 65 73  ize(aPragmaNames
3090: 29 2d 31 3b 0a 20 20 77 68 69 6c 65 28 20 6c 77  )-1;.  while( lw
30a0: 72 3c 3d 75 70 72 20 29 7b 0a 20 20 20 20 6d 69  r<=upr ){.    mi
30b0: 64 20 3d 20 28 6c 77 72 2b 75 70 72 29 2f 32 3b  d = (lwr+upr)/2;
30c0: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
30d0: 33 5f 73 74 72 69 63 6d 70 28 7a 4c 65 66 74 2c  3_stricmp(zLeft,
30e0: 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69   aPragmaNames[mi
30f0: 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 69  d].zName);.    i
3100: 66 28 20 72 63 3d 3d 30 20 29 20 62 72 65 61 6b  f( rc==0 ) break
3110: 3b 0a 20 20 20 20 69 66 28 20 72 63 3c 30 20 29  ;.    if( rc<0 )
3120: 7b 0a 20 20 20 20 20 20 75 70 72 20 3d 20 6d 69  {.      upr = mi
3130: 64 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  d - 1;.    }else
3140: 7b 0a 20 20 20 20 20 20 6c 77 72 20 3d 20 6d 69  {.      lwr = mi
3150: 64 20 2b 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  d + 1;.    }.  }
3160: 0a 20 20 69 66 28 20 6c 77 72 3e 75 70 72 20 29  .  if( lwr>upr )
3170: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
3180: 3b 0a 20 20 70 50 72 61 67 6d 61 20 3d 20 26 61  ;.  pPragma = &a
3190: 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d  PragmaNames[mid]
31a0: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
31b0: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  e the database s
31c0: 63 68 65 6d 61 20 69 73 20 6c 6f 61 64 65 64 20  chema is loaded 
31d0: 69 66 20 74 68 65 20 70 72 61 67 6d 61 20 72 65  if the pragma re
31e0: 71 75 69 72 65 73 20 74 68 61 74 20 2a 2f 0a 20  quires that */. 
31f0: 20 69 66 28 20 28 70 50 72 61 67 6d 61 2d 3e 6d   if( (pPragma->m
3200: 50 72 61 67 46 6c 61 67 20 26 20 50 72 61 67 46  PragFlag & PragF
3210: 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 29 21  lag_NeedSchema)!
3220: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71  =0 ){.    if( sq
3230: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
3240: 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70  pParse) ) goto p
3250: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a  ragma_out;.  }..
3260: 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65    /* Jump to the
3270: 20 61 70 70 72 6f 70 72 69 61 74 65 20 70 72 61   appropriate pra
3280: 67 6d 61 20 68 61 6e 64 6c 65 72 20 2a 2f 0a 20  gma handler */. 
3290: 20 73 77 69 74 63 68 28 20 70 50 72 61 67 6d 61   switch( pPragma
32a0: 2d 3e 65 50 72 61 67 54 79 70 20 29 7b 0a 20 20  ->ePragTyp ){.  
32b0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
32c0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
32d0: 50 52 41 47 4d 41 53 29 20 26 26 20 21 64 65 66  PRAGMAS) && !def
32e0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
32f0: 5f 44 45 50 52 45 43 41 54 45 44 29 0a 20 20 2f  _DEPRECATED).  /
3300: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
3310: 73 63 68 65 6d 61 2e 5d 64 65 66 61 75 6c 74 5f  schema.]default_
3320: 63 61 63 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20  cache_size.  ** 
3330: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
3340: 5d 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73  ]default_cache_s
3350: 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ize=N.  **.  ** 
3360: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
3370: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
3380: 6e 74 20 70 65 72 73 69 73 74 65 6e 74 20 73 65  nt persistent se
3390: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
33a0: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
33b0: 7a 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 72  ze.  The value r
33c0: 65 74 75 72 6e 65 64 20 69 73 20 74 68 65 20 6d  eturned is the m
33d0: 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
33e0: 0a 20 20 2a 2a 20 70 61 67 65 73 20 69 6e 20 74  .  ** pages in t
33f0: 68 65 20 70 61 67 65 20 63 61 63 68 65 2e 20 20  he page cache.  
3400: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
3410: 73 65 74 73 20 62 6f 74 68 20 74 68 65 20 63 75  sets both the cu
3420: 72 72 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65 20  rrent.  ** page 
3430: 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65  cache size value
3440: 20 61 6e 64 20 74 68 65 20 70 65 72 73 69 73 74   and the persist
3450: 65 6e 74 20 70 61 67 65 20 63 61 63 68 65 20 73  ent page cache s
3460: 69 7a 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20 73  ize value.  ** s
3470: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74  tored in the dat
3480: 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a 2a  abase file..  **
3490: 0a 20 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73  .  ** Older vers
34a0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 77  ions of SQLite w
34b0: 6f 75 6c 64 20 73 65 74 20 74 68 65 20 64 65 66  ould set the def
34c0: 61 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65 20  ault cache size 
34d0: 74 6f 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74 69  to a.  ** negati
34e0: 76 65 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e 64  ve number to ind
34f0: 69 63 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f 75  icate synchronou
3500: 73 3d 4f 46 46 2e 20 20 54 68 65 73 65 20 64 61  s=OFF.  These da
3510: 79 73 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73 0a  ys, synchronous.
3520: 20 20 2a 2a 20 69 73 20 61 6c 77 61 79 73 20 6f    ** is always o
3530: 6e 20 62 79 20 64 65 66 61 75 6c 74 20 72 65 67  n by default reg
3540: 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 73  ardless of the s
3550: 69 67 6e 20 6f 66 20 74 68 65 20 64 65 66 61 75  ign of the defau
3560: 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69  lt cache.  ** si
3570: 7a 65 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e 75  ze.  But continu
3580: 65 20 74 6f 20 74 61 6b 65 20 74 68 65 20 61 62  e to take the ab
3590: 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20  solute value of 
35a0: 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68  the default cach
35b0: 65 0a 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20 68  e.  ** size of h
35c0: 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61 74  istorical compat
35d0: 69 62 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20 20  ibility..  */.  
35e0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 44 45 46  case PragTyp_DEF
35f0: 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 3a  AULT_CACHE_SIZE:
3600: 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f   {.    static co
3610: 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44  nst int iLn = VD
3620: 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f  BE_OFFSET_LINENO
3630: 28 32 29 3b 0a 20 20 20 20 73 74 61 74 69 63 20  (2);.    static 
3640: 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74  const VdbeOpList
3650: 20 67 65 74 43 61 63 68 65 53 69 7a 65 5b 5d 20   getCacheSize[] 
3660: 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 54  = {.      { OP_T
3670: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 30 2c 20 30  ransaction, 0, 0
3680: 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20  ,        0},    
3690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a0: 20 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20       /* 0 */.   
36b0: 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b     { OP_ReadCook
36c0: 69 65 2c 20 20 30 2c 20 31 2c 20 20 20 20 20 20  ie,  0, 1,      
36d0: 20 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f    BTREE_DEFAULT_
36e0: 43 41 43 48 45 5f 53 49 5a 45 7d 2c 20 20 2f 2a  CACHE_SIZE},  /*
36f0: 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50   1 */.      { OP
3700: 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c  _IfPos,       1,
3710: 20 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   8,        0},. 
3720: 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65       { OP_Intege
3730: 72 2c 20 20 20 20 20 30 2c 20 32 2c 20 20 20 20  r,     0, 2,    
3740: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
3750: 4f 50 5f 53 75 62 74 72 61 63 74 2c 20 20 20 20  OP_Subtract,    
3760: 31 2c 20 32 2c 20 20 20 20 20 20 20 20 31 7d 2c  1, 2,        1},
3770: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f  .      { OP_IfPo
3780: 73 2c 20 20 20 20 20 20 20 31 2c 20 38 2c 20 20  s,       1, 8,  
3790: 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20        0},.      
37a0: 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20  { OP_Integer,   
37b0: 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20 30    0, 1,        0
37c0: 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  },              
37d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 36 20             /* 6 
37e0: 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e 6f  */.      { OP_No
37f0: 6f 70 2c 20 20 20 20 20 20 20 20 30 2c 20 30 2c  op,        0, 0,
3800: 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
3810: 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77    { OP_ResultRow
3820: 2c 20 20 20 31 2c 20 31 2c 20 20 20 20 20 20 20  ,   1, 1,       
3830: 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20   0},.    };.    
3840: 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20 20  VdbeOp *aOp;.   
3850: 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73   sqlite3VdbeUses
3860: 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20  Btree(v, iDb);. 
3870: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
3880: 7b 0a 20 20 20 20 20 20 73 65 74 4f 6e 65 43 6f  {.      setOneCo
3890: 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 22 63 61 63  lumnName(v, "cac
38a0: 68 65 5f 73 69 7a 65 22 29 3b 0a 20 20 20 20 20  he_size");.     
38b0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d   pParse->nMem +=
38c0: 20 32 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   2;.      sqlite
38d0: 33 56 64 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c  3VdbeVerifyNoMal
38e0: 6c 6f 63 52 65 71 75 69 72 65 64 28 76 2c 20 41  locRequired(v, A
38f0: 72 72 61 79 53 69 7a 65 28 67 65 74 43 61 63 68  rraySize(getCach
3900: 65 53 69 7a 65 29 29 3b 0a 20 20 20 20 20 20 61  eSize));.      a
3910: 4f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  Op = sqlite3Vdbe
3920: 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
3930: 61 79 53 69 7a 65 28 67 65 74 43 61 63 68 65 53  aySize(getCacheS
3940: 69 7a 65 29 2c 20 67 65 74 43 61 63 68 65 53 69  ize), getCacheSi
3950: 7a 65 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20 20  ze, iLn);.      
3960: 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c  if( ONLY_IF_REAL
3970: 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f 70 3d 3d  LOC_STRESS(aOp==
3980: 30 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  0) ) break;.    
3990: 20 20 61 4f 70 5b 30 5d 2e 70 31 20 3d 20 69 44    aOp[0].p1 = iD
39a0: 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e  b;.      aOp[1].
39b0: 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20  p1 = iDb;.      
39c0: 61 4f 70 5b 36 5d 2e 70 31 20 3d 20 53 51 4c 49  aOp[6].p1 = SQLI
39d0: 54 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  TE_DEFAULT_CACHE
39e0: 5f 53 49 5a 45 3b 0a 20 20 20 20 7d 65 6c 73 65  _SIZE;.    }else
39f0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65  {.      int size
3a00: 20 3d 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74   = sqlite3AbsInt
3a10: 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  32(sqlite3Atoi(z
3a20: 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20 73  Right));.      s
3a30: 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
3a40: 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65  Operation(pParse
3a50: 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  , 0, iDb);.     
3a60: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
3a70: 70 33 28 76 2c 20 4f 50 5f 53 65 74 43 6f 6f 6b  p3(v, OP_SetCook
3a80: 69 65 2c 20 69 44 62 2c 20 42 54 52 45 45 5f 44  ie, iDb, BTREE_D
3a90: 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a  EFAULT_CACHE_SIZ
3aa0: 45 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20 20 20  E, size);.      
3ab0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
3ac0: 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
3ad0: 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
3ae0: 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
3af0: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73  ->cache_size = s
3b00: 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ize;.      sqlit
3b10: 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53  e3BtreeSetCacheS
3b20: 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44  ize(pDb->pBt, pD
3b30: 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68  b->pSchema->cach
3b40: 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20  e_size);.    }. 
3b50: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
3b60: 6e 64 69 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f  ndif /* !SQLITE_
3b70: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
3b80: 41 53 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d  AS && !SQLITE_OM
3b90: 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f  IT_DEPRECATED */
3ba0: 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
3bb0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
3bc0: 5f 50 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a 20  _PRAGMAS).  /*. 
3bd0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
3be0: 65 6d 61 2e 5d 70 61 67 65 5f 73 69 7a 65 0a 20  ema.]page_size. 
3bf0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
3c00: 65 6d 61 2e 5d 70 61 67 65 5f 73 69 7a 65 3d 4e  ema.]page_size=N
3c10: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66  .  **.  ** The f
3c20: 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74  irst form report
3c30: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65  s the current se
3c40: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
3c50: 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61 67 65  ** database page
3c60: 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 2e 20   size in bytes. 
3c70: 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
3c80: 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a 20 64   sets the.  ** d
3c90: 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a  atabase page siz
3ca0: 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20 76 61  e value.  The va
3cb0: 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  lue can only be 
3cc0: 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68 65 20  set if.  ** the 
3cd0: 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74  database has not
3ce0: 20 79 65 74 20 62 65 65 6e 20 63 72 65 61 74 65   yet been create
3cf0: 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  d..  */.  case P
3d00: 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49 5a 45  ragTyp_PAGE_SIZE
3d10: 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70  : {.    Btree *p
3d20: 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20  Bt = pDb->pBt;. 
3d30: 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21 3d     assert( pBt!=
3d40: 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52  0 );.    if( !zR
3d50: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 6e  ight ){.      in
3d60: 74 20 73 69 7a 65 20 3d 20 41 4c 57 41 59 53 28  t size = ALWAYS(
3d70: 70 42 74 29 20 3f 20 73 71 6c 69 74 65 33 42 74  pBt) ? sqlite3Bt
3d80: 72 65 65 47 65 74 50 61 67 65 53 69 7a 65 28 70  reeGetPageSize(p
3d90: 42 74 29 20 3a 20 30 3b 0a 20 20 20 20 20 20 72  Bt) : 0;.      r
3da0: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76  eturnSingleInt(v
3db0: 2c 20 22 70 61 67 65 5f 73 69 7a 65 22 2c 20 73  , "page_size", s
3dc0: 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ize);.    }else{
3dd0: 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6c 6c 6f 63  .      /* Malloc
3de0: 20 6d 61 79 20 66 61 69 6c 20 77 68 65 6e 20 73   may fail when s
3df0: 65 74 74 69 6e 67 20 74 68 65 20 70 61 67 65 2d  etting the page-
3e00: 73 69 7a 65 2c 20 61 73 20 74 68 65 72 65 20 69  size, as there i
3e10: 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 0a 20 20  s an internal.  
3e20: 20 20 20 20 2a 2a 20 62 75 66 66 65 72 20 74 68      ** buffer th
3e30: 61 74 20 74 68 65 20 70 61 67 65 72 20 6d 6f 64  at the pager mod
3e40: 75 6c 65 20 72 65 73 69 7a 65 73 20 75 73 69 6e  ule resizes usin
3e50: 67 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f  g sqlite3_reallo
3e60: 63 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  c()..      */.  
3e70: 20 20 20 20 64 62 2d 3e 6e 65 78 74 50 61 67 65      db->nextPage
3e80: 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74  size = sqlite3At
3e90: 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  oi(zRight);.    
3ea0: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f 4d    if( SQLITE_NOM
3eb0: 45 4d 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  EM==sqlite3Btree
3ec0: 53 65 74 50 61 67 65 53 69 7a 65 28 70 42 74 2c  SetPageSize(pBt,
3ed0: 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73 69 7a   db->nextPagesiz
3ee0: 65 2c 2d 31 2c 30 29 20 29 7b 0a 20 20 20 20 20  e,-1,0) ){.     
3ef0: 20 20 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75     sqlite3OomFau
3f00: 6c 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a  lt(db);.      }.
3f10: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
3f20: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
3f30: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
3f40: 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a 20  ]secure_delete. 
3f50: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
3f60: 65 6d 61 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65  ema.]secure_dele
3f70: 74 65 3d 4f 4e 2f 4f 46 46 0a 20 20 2a 2a 0a 20  te=ON/OFF.  **. 
3f80: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f   ** The first fo
3f90: 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63  rm reports the c
3fa0: 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66  urrent setting f
3fb0: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73 65 63 75  or the.  ** secu
3fc0: 72 65 5f 64 65 6c 65 74 65 20 66 6c 61 67 2e 20  re_delete flag. 
3fd0: 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
3fe0: 20 63 68 61 6e 67 65 73 20 74 68 65 20 73 65 63   changes the sec
3ff0: 75 72 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20  ure_delete.  ** 
4000: 66 6c 61 67 20 73 65 74 74 69 6e 67 20 61 6e 64  flag setting and
4010: 20 72 65 70 6f 72 74 73 20 74 68 65 6e 65 77 20   reports thenew 
4020: 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20 63 61  value..  */.  ca
4030: 73 65 20 50 72 61 67 54 79 70 5f 53 45 43 55 52  se PragTyp_SECUR
4040: 45 5f 44 45 4c 45 54 45 3a 20 7b 0a 20 20 20 20  E_DELETE: {.    
4050: 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62  Btree *pBt = pDb
4060: 2d 3e 70 42 74 3b 0a 20 20 20 20 69 6e 74 20 62  ->pBt;.    int b
4070: 20 3d 20 2d 31 3b 0a 20 20 20 20 61 73 73 65 72   = -1;.    asser
4080: 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20  t( pBt!=0 );.   
4090: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
40a0: 20 20 20 20 20 62 20 3d 20 73 71 6c 69 74 65 33       b = sqlite3
40b0: 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68  GetBoolean(zRigh
40c0: 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20  t, 0);.    }.   
40d0: 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20   if( pId2->n==0 
40e0: 26 26 20 62 3e 3d 30 20 29 7b 0a 20 20 20 20 20  && b>=0 ){.     
40f0: 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 66   int ii;.      f
4100: 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e  or(ii=0; ii<db->
4110: 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
4120: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
4130: 53 65 63 75 72 65 44 65 6c 65 74 65 28 64 62 2d  SecureDelete(db-
4140: 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 62 29  >aDb[ii].pBt, b)
4150: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
4160: 20 20 20 20 62 20 3d 20 73 71 6c 69 74 65 33 42      b = sqlite3B
4170: 74 72 65 65 53 65 63 75 72 65 44 65 6c 65 74 65  treeSecureDelete
4180: 28 70 42 74 2c 20 62 29 3b 0a 20 20 20 20 72 65  (pBt, b);.    re
4190: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c  turnSingleInt(v,
41a0: 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74 65 22   "secure_delete"
41b0: 2c 20 62 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  , b);.    break;
41c0: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
41d0: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
41e0: 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 0a  ]max_page_count.
41f0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
4200: 68 65 6d 61 2e 5d 6d 61 78 5f 70 61 67 65 5f 63  hema.]max_page_c
4210: 6f 75 6e 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  ount=N.  **.  **
4220: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
4230: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
4240: 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20  ent setting for 
4250: 74 68 65 0a 20 20 2a 2a 20 6d 61 78 69 6d 75 6d  the.  ** maximum
4260: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
4270: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
4280: 20 66 69 6c 65 2e 20 20 54 68 65 20 0a 20 20 2a   file.  The .  *
4290: 2a 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 61 74  * second form at
42a0: 74 65 6d 70 74 73 20 74 6f 20 63 68 61 6e 67 65  tempts to change
42b0: 20 74 68 69 73 20 73 65 74 74 69 6e 67 2e 20 20   this setting.  
42c0: 42 6f 74 68 0a 20 20 2a 2a 20 66 6f 72 6d 73 20  Both.  ** forms 
42d0: 72 65 74 75 72 6e 20 74 68 65 20 63 75 72 72 65  return the curre
42e0: 6e 74 20 73 65 74 74 69 6e 67 2e 0a 20 20 2a 2a  nt setting..  **
42f0: 0a 20 20 2a 2a 20 54 68 65 20 61 62 73 6f 6c 75  .  ** The absolu
4300: 74 65 20 76 61 6c 75 65 20 6f 66 20 4e 20 69 73  te value of N is
4310: 20 75 73 65 64 2e 20 20 54 68 69 73 20 69 73 20   used.  This is 
4320: 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 61 6e 64  undocumented and
4330: 20 6d 69 67 68 74 0a 20 20 2a 2a 20 63 68 61 6e   might.  ** chan
4340: 67 65 2e 20 20 54 68 65 20 6f 6e 6c 79 20 70 75  ge.  The only pu
4350: 72 70 6f 73 65 20 69 73 20 74 6f 20 70 72 6f 76  rpose is to prov
4360: 69 64 65 20 61 6e 20 65 61 73 79 20 77 61 79 20  ide an easy way 
4370: 74 6f 20 74 65 73 74 0a 20 20 2a 2a 20 74 68 65  to test.  ** the
4380: 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32   sqlite3AbsInt32
4390: 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a  () function..  *
43a0: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
43b0: 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f 63 6f 75  schema.]page_cou
43c0: 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  nt.  **.  ** Ret
43d0: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
43e0: 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73  f pages in the s
43f0: 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73  pecified databas
4400: 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  e..  */.  case P
4410: 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f 55 4e  ragTyp_PAGE_COUN
4420: 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 52 65  T: {.    int iRe
4430: 67 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f  g;.    sqlite3Co
4440: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
4450: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
4460: 20 69 52 65 67 20 3d 20 2b 2b 70 50 61 72 73 65   iReg = ++pParse
4470: 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 69 66 28 20  ->nMem;.    if( 
4480: 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a  sqlite3Tolower(z
4490: 4c 65 66 74 5b 30 5d 29 3d 3d 27 70 27 20 29 7b  Left[0])=='p' ){
44a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
44b0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 50  beAddOp2(v, OP_P
44c0: 61 67 65 63 6f 75 6e 74 2c 20 69 44 62 2c 20 69  agecount, iDb, i
44d0: 52 65 67 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  Reg);.    }else{
44e0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
44f0: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d  beAddOp3(v, OP_M
4500: 61 78 50 67 63 6e 74 2c 20 69 44 62 2c 20 69 52  axPgcnt, iDb, iR
4510: 65 67 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  eg, .           
4520: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
4530: 69 74 65 33 41 62 73 49 6e 74 33 32 28 73 71 6c  ite3AbsInt32(sql
4540: 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
4550: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  ));.    }.    sq
4560: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
4570: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
4580: 20 69 52 65 67 2c 20 31 29 3b 0a 20 20 20 20 73   iReg, 1);.    s
4590: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
45a0: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
45b0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
45c0: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
45d0: 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c  AME_NAME, zLeft,
45e0: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
45f0: 54 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  T);.    break;. 
4600: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
4610: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6c  RAGMA [schema.]l
4620: 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20 2a 2a  ocking_mode.  **
4630: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
4640: 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 20 3d  .]locking_mode =
4650: 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c 75 73 69   (normal|exclusi
4660: 76 65 29 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ve).  */.  case 
4670: 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e 47 5f  PragTyp_LOCKING_
4680: 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 63 6f 6e 73  MODE: {.    cons
4690: 74 20 63 68 61 72 20 2a 7a 52 65 74 20 3d 20 22  t char *zRet = "
46a0: 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20 20 69 6e 74  normal";.    int
46b0: 20 65 4d 6f 64 65 20 3d 20 67 65 74 4c 6f 63 6b   eMode = getLock
46c0: 69 6e 67 4d 6f 64 65 28 7a 52 69 67 68 74 29 3b  ingMode(zRight);
46d0: 0a 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e  ..    if( pId2->
46e0: 6e 3d 3d 30 20 26 26 20 65 4d 6f 64 65 3d 3d 50  n==0 && eMode==P
46f0: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
4700: 5f 51 55 45 52 59 20 29 7b 0a 20 20 20 20 20 20  _QUERY ){.      
4710: 2f 2a 20 53 69 6d 70 6c 65 20 22 50 52 41 47 4d  /* Simple "PRAGM
4720: 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 3b 22  A locking_mode;"
4730: 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69 73   statement. This
4740: 20 69 73 20 61 20 71 75 65 72 79 20 66 6f 72 0a   is a query for.
4750: 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 75 72        ** the cur
4760: 72 65 6e 74 20 64 65 66 61 75 6c 74 20 6c 6f 63  rent default loc
4770: 6b 69 6e 67 20 6d 6f 64 65 20 28 77 68 69 63 68  king mode (which
4780: 20 6d 61 79 20 62 65 20 64 69 66 66 65 72 65 6e   may be differen
4790: 74 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68  t to.      ** th
47a0: 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6f  e locking-mode o
47b0: 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  f the main datab
47c0: 61 73 65 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ase)..      */. 
47d0: 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 64 62 2d       eMode = db-
47e0: 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 0a 20  >dfltLockMode;. 
47f0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
4800: 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 0a 20  Pager *pPager;. 
4810: 20 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e       if( pId2->n
4820: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ==0 ){.        /
4830: 2a 20 54 68 69 73 20 69 6e 64 69 63 61 74 65 73  * This indicates
4840: 20 74 68 61 74 20 6e 6f 20 64 61 74 61 62 61 73   that no databas
4850: 65 20 6e 61 6d 65 20 77 61 73 20 73 70 65 63 69  e name was speci
4860: 66 69 65 64 20 61 73 20 70 61 72 74 0a 20 20 20  fied as part.   
4870: 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 50       ** of the P
4880: 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 2e 20 49  RAGMA command. I
4890: 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
48a0: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6d 75 73  locking-mode mus
48b0: 74 20 62 65 0a 20 20 20 20 20 20 20 20 2a 2a 20  t be.        ** 
48c0: 73 65 74 20 6f 6e 20 61 6c 6c 20 61 74 74 61 63  set on all attac
48d0: 68 65 64 20 64 61 74 61 62 61 73 65 73 2c 20 61  hed databases, a
48e0: 73 20 77 65 6c 6c 20 61 73 20 74 68 65 20 6d 61  s well as the ma
48f0: 69 6e 20 64 62 20 66 69 6c 65 2e 0a 20 20 20 20  in db file..    
4900: 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 20 20 2a      **.        *
4910: 2a 20 41 6c 73 6f 2c 20 74 68 65 20 73 71 6c 69  * Also, the sqli
4920: 74 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65  te3.dfltLockMode
4930: 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
4940: 20 73 6f 20 74 68 61 74 0a 20 20 20 20 20 20 20   so that.       
4950: 20 2a 2a 20 61 6e 79 20 73 75 62 73 65 71 75 65   ** any subseque
4960: 6e 74 6c 79 20 61 74 74 61 63 68 65 64 20 64 61  ntly attached da
4970: 74 61 62 61 73 65 73 20 61 6c 73 6f 20 75 73 65  tabases also use
4980: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 0a 20   the specified. 
4990: 20 20 20 20 20 20 20 2a 2a 20 6c 6f 63 6b 69 6e         ** lockin
49a0: 67 20 6d 6f 64 65 2e 0a 20 20 20 20 20 20 20 20  g mode..        
49b0: 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  */.        int i
49c0: 69 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  i;.        asser
49d0: 74 28 70 44 62 3d 3d 26 64 62 2d 3e 61 44 62 5b  t(pDb==&db->aDb[
49e0: 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  0]);.        for
49f0: 28 69 69 3d 32 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=2; ii<db->nD
4a00: 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
4a10: 20 20 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c      pPager = sql
4a20: 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 64  ite3BtreePager(d
4a30: 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 29 3b  b->aDb[ii].pBt);
4a40: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
4a50: 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f  e3PagerLockingMo
4a60: 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f 64 65  de(pPager, eMode
4a70: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
4a80: 20 20 20 20 20 64 62 2d 3e 64 66 6c 74 4c 6f 63       db->dfltLoc
4a90: 6b 4d 6f 64 65 20 3d 20 28 75 38 29 65 4d 6f 64  kMode = (u8)eMod
4aa0: 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  e;.      }.     
4ab0: 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65   pPager = sqlite
4ac0: 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d  3BtreePager(pDb-
4ad0: 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 65 4d 6f  >pBt);.      eMo
4ae0: 64 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  de = sqlite3Page
4af0: 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50 61  rLockingMode(pPa
4b00: 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20  ger, eMode);.   
4b10: 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20   }..    assert( 
4b20: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43  eMode==PAGER_LOC
4b30: 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 0a  KINGMODE_NORMAL.
4b40: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 65              || e
4b50: 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b  Mode==PAGER_LOCK
4b60: 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56  INGMODE_EXCLUSIV
4b70: 45 20 29 3b 0a 20 20 20 20 69 66 28 20 65 4d 6f  E );.    if( eMo
4b80: 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e  de==PAGER_LOCKIN
4b90: 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 20  GMODE_EXCLUSIVE 
4ba0: 29 7b 0a 20 20 20 20 20 20 7a 52 65 74 20 3d 20  ){.      zRet = 
4bb0: 22 65 78 63 6c 75 73 69 76 65 22 3b 0a 20 20 20  "exclusive";.   
4bc0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
4bd0: 67 6c 65 54 65 78 74 28 76 2c 20 22 6c 6f 63 6b  gleText(v, "lock
4be0: 69 6e 67 5f 6d 6f 64 65 22 2c 20 7a 52 65 74 29  ing_mode", zRet)
4bf0: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
4c00: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
4c10: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6a 6f 75  GMA [schema.]jou
4c20: 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a 2a 20 20  rnal_mode.  **  
4c30: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
4c40: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 0a 20  journal_mode =. 
4c50: 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20   **             
4c60: 20 20 20 20 20 20 20 20 20 28 64 65 6c 65 74 65           (delete
4c70: 7c 70 65 72 73 69 73 74 7c 6f 66 66 7c 74 72 75  |persist|off|tru
4c80: 6e 63 61 74 65 7c 6d 65 6d 6f 72 79 7c 77 61 6c  ncate|memory|wal
4c90: 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20 20 63 61 73  |off).  */.  cas
4ca0: 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41  e PragTyp_JOURNA
4cb0: 4c 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 69 6e  L_MODE: {.    in
4cc0: 74 20 65 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  t eMode;        
4cd0: 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 50 41  /* One of the PA
4ce0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
4cf0: 58 58 58 20 73 79 6d 62 6f 6c 73 20 2a 2f 0a 20  XXX symbols */. 
4d00: 20 20 20 69 6e 74 20 69 69 3b 20 20 20 20 20 20     int ii;      
4d10: 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
4d20: 6e 74 65 72 20 2a 2f 0a 0a 20 20 20 20 73 65 74  nter */..    set
4d30: 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c  OneColumnName(v,
4d40: 20 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 29   "journal_mode")
4d50: 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
4d60: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ==0 ){.      /* 
4d70: 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 22  If there is no "
4d80: 3d 4d 4f 44 45 22 20 70 61 72 74 20 6f 66 20 74  =MODE" part of t
4d90: 68 65 20 70 72 61 67 6d 61 2c 20 64 6f 20 61 20  he pragma, do a 
4da0: 71 75 65 72 79 20 66 6f 72 20 74 68 65 0a 20 20  query for the.  
4db0: 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 6d      ** current m
4dc0: 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20 65 4d 6f  ode */.      eMo
4dd0: 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e  de = PAGER_JOURN
4de0: 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20  ALMODE_QUERY;.  
4df0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63    }else{.      c
4e00: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 6f 64 65  onst char *zMode
4e10: 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20  ;.      int n = 
4e20: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
4e30: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 66  zRight);.      f
4e40: 6f 72 28 65 4d 6f 64 65 3d 30 3b 20 28 7a 4d 6f  or(eMode=0; (zMo
4e50: 64 65 20 3d 20 73 71 6c 69 74 65 33 4a 6f 75 72  de = sqlite3Jour
4e60: 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4d 6f 64  nalModename(eMod
4e70: 65 29 29 21 3d 30 3b 20 65 4d 6f 64 65 2b 2b 29  e))!=0; eMode++)
4e80: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71  {.        if( sq
4e90: 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52  lite3StrNICmp(zR
4ea0: 69 67 68 74 2c 20 7a 4d 6f 64 65 2c 20 6e 29 3d  ight, zMode, n)=
4eb0: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
4ec0: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 21 7a    }.      if( !z
4ed0: 4d 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 20 20  Mode ){.        
4ee0: 2f 2a 20 49 66 20 74 68 65 20 22 3d 4d 4f 44 45  /* If the "=MODE
4ef0: 22 20 70 61 72 74 20 64 6f 65 73 20 6e 6f 74 20  " part does not 
4f00: 6d 61 74 63 68 20 61 6e 79 20 6b 6e 6f 77 6e 20  match any known 
4f10: 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 0a 20 20  journal mode,.  
4f20: 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 64 6f        ** then do
4f30: 20 61 20 71 75 65 72 79 20 2a 2f 0a 20 20 20 20   a query */.    
4f40: 20 20 20 20 65 4d 6f 64 65 20 3d 20 50 41 47 45      eMode = PAGE
4f50: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
4f60: 45 52 59 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ERY;.      }.   
4f70: 20 7d 0a 20 20 20 20 69 66 28 20 65 4d 6f 64 65   }.    if( eMode
4f80: 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
4f90: 4f 44 45 5f 51 55 45 52 59 20 26 26 20 70 49 64  ODE_QUERY && pId
4fa0: 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20  2->n==0 ){.     
4fb0: 20 2f 2a 20 43 6f 6e 76 65 72 74 20 22 50 52 41   /* Convert "PRA
4fc0: 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
4fd0: 22 20 69 6e 74 6f 20 22 50 52 41 47 4d 41 20 6d  " into "PRAGMA m
4fe0: 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  ain.journal_mode
4ff0: 22 20 2a 2f 0a 20 20 20 20 20 20 69 44 62 20 3d  " */.      iDb =
5000: 20 30 3b 0a 20 20 20 20 20 20 70 49 64 32 2d 3e   0;.      pId2->
5010: 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  n = 1;.    }.   
5020: 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d   for(ii=db->nDb-
5030: 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b  1; ii>=0; ii--){
5040: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61  .      if( db->a
5050: 44 62 5b 69 69 5d 2e 70 42 74 20 26 26 20 28 69  Db[ii].pBt && (i
5060: 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e  i==iDb || pId2->
5070: 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20  n==0) ){.       
5080: 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73   sqlite3VdbeUses
5090: 42 74 72 65 65 28 76 2c 20 69 69 29 3b 0a 20 20  Btree(v, ii);.  
50a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
50b0: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4a 6f  eAddOp3(v, OP_Jo
50c0: 75 72 6e 61 6c 4d 6f 64 65 2c 20 69 69 2c 20 31  urnalMode, ii, 1
50d0: 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20  , eMode);.      
50e0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
50f0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
5100: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
5110: 2c 20 31 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  , 1);.    break;
5120: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
5130: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
5140: 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69  ]journal_size_li
5150: 6d 69 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  mit.  **  PRAGMA
5160: 20 5b 73 63 68 65 6d 61 2e 5d 6a 6f 75 72 6e 61   [schema.]journa
5170: 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d 4e 0a 20  l_size_limit=N. 
5180: 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20   **.  ** Get or 
5190: 73 65 74 20 74 68 65 20 73 69 7a 65 20 6c 69 6d  set the size lim
51a0: 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 6a  it on rollback j
51b0: 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e 0a 20 20  ournal files..  
51c0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
51d0: 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a 45 5f 4c  p_JOURNAL_SIZE_L
51e0: 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50 61 67 65  IMIT: {.    Page
51f0: 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69  r *pPager = sqli
5200: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
5210: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 69 36 34  b->pBt);.    i64
5220: 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b 0a 20 20   iLimit = -2;.  
5230: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
5240: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 65 63        sqlite3Dec
5250: 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68  OrHexToI64(zRigh
5260: 74 2c 20 26 69 4c 69 6d 69 74 29 3b 0a 20 20 20  t, &iLimit);.   
5270: 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c 2d 31     if( iLimit<-1
5280: 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b 0a   ) iLimit = -1;.
5290: 20 20 20 20 7d 0a 20 20 20 20 69 4c 69 6d 69 74      }.    iLimit
52a0: 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 4a   = sqlite3PagerJ
52b0: 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d 69 74 28  ournalSizeLimit(
52c0: 70 50 61 67 65 72 2c 20 69 4c 69 6d 69 74 29 3b  pPager, iLimit);
52d0: 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
52e0: 65 49 6e 74 28 76 2c 20 22 6a 6f 75 72 6e 61 6c  eInt(v, "journal
52f0: 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c 20 69 4c  _size_limit", iL
5300: 69 6d 69 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  imit);.    break
5310: 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a  ;.  }..#endif /*
5320: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
5330: 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 20  ER_PRAGMAS */.. 
5340: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
5350: 20 5b 73 63 68 65 6d 61 2e 5d 61 75 74 6f 5f 76   [schema.]auto_v
5360: 61 63 75 75 6d 0a 20 20 2a 2a 20 20 50 52 41 47  acuum.  **  PRAG
5370: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 75 74 6f  MA [schema.]auto
5380: 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a 2a 0a 20  _vacuum=N.  **. 
5390: 20 2a 2a 20 47 65 74 20 6f 72 20 73 65 74 20 74   ** Get or set t
53a0: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
53b0: 64 61 74 61 62 61 73 65 20 27 61 75 74 6f 2d 76  database 'auto-v
53c0: 61 63 75 75 6d 27 20 70 61 72 61 6d 65 74 65 72  acuum' parameter
53d0: 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61 6c 75 65  ..  ** The value
53e0: 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20 30 20 4e   is one of:  0 N
53f0: 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20 49 4e 43  ONE 1 FULL 2 INC
5400: 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f 0a 23 69  REMENTAL.  */.#i
5410: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
5420: 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 63  T_AUTOVACUUM.  c
5430: 61 73 65 20 50 72 61 67 54 79 70 5f 41 55 54 4f  ase PragTyp_AUTO
5440: 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 42  _VACUUM: {.    B
5450: 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d  tree *pBt = pDb-
5460: 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74  >pBt;.    assert
5470: 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20  ( pBt!=0 );.    
5480: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
5490: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
54a0: 65 49 6e 74 28 76 2c 20 22 61 75 74 6f 5f 76 61  eInt(v, "auto_va
54b0: 63 75 75 6d 22 2c 20 73 71 6c 69 74 65 33 42 74  cuum", sqlite3Bt
54c0: 72 65 65 47 65 74 41 75 74 6f 56 61 63 75 75 6d  reeGetAutoVacuum
54d0: 28 70 42 74 29 29 3b 0a 20 20 20 20 7d 65 6c 73  (pBt));.    }els
54e0: 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 65 41 75  e{.      int eAu
54f0: 74 6f 20 3d 20 67 65 74 41 75 74 6f 56 61 63 75  to = getAutoVacu
5500: 75 6d 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  um(zRight);.    
5510: 20 20 61 73 73 65 72 74 28 20 65 41 75 74 6f 3e    assert( eAuto>
5520: 3d 30 20 26 26 20 65 41 75 74 6f 3c 3d 32 20 29  =0 && eAuto<=2 )
5530: 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74  ;.      db->next
5540: 41 75 74 6f 76 61 63 20 3d 20 28 75 38 29 65 41  Autovac = (u8)eA
5550: 75 74 6f 3b 0a 20 20 20 20 20 20 2f 2a 20 43 61  uto;.      /* Ca
5560: 6c 6c 20 53 65 74 41 75 74 6f 56 61 63 75 75 6d  ll SetAutoVacuum
5570: 28 29 20 74 6f 20 73 65 74 20 69 6e 69 74 69 61  () to set initia
5580: 6c 69 7a 65 20 74 68 65 20 69 6e 74 65 72 6e 61  lize the interna
5590: 6c 20 61 75 74 6f 20 61 6e 64 0a 20 20 20 20 20  l auto and.     
55a0: 20 2a 2a 20 69 6e 63 72 2d 76 61 63 75 75 6d 20   ** incr-vacuum 
55b0: 66 6c 61 67 73 2e 20 54 68 69 73 20 69 73 20 72  flags. This is r
55c0: 65 71 75 69 72 65 64 20 69 6e 20 63 61 73 65 20  equired in case 
55d0: 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a  this connection.
55e0: 20 20 20 20 20 20 2a 2a 20 63 72 65 61 74 65 73        ** creates
55f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
5600: 6c 65 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74  le. It is import
5610: 61 6e 74 20 74 68 61 74 20 69 74 20 69 73 20 63  ant that it is c
5620: 72 65 61 74 65 64 0a 20 20 20 20 20 20 2a 2a 20  reated.      ** 
5630: 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75  as an auto-vacuu
5640: 6d 20 63 61 70 61 62 6c 65 20 64 62 2e 0a 20 20  m capable db..  
5650: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 63 20      */.      rc 
5660: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65  = sqlite3BtreeSe
5670: 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74 2c  tAutoVacuum(pBt,
5680: 20 65 41 75 74 6f 29 3b 0a 20 20 20 20 20 20 69   eAuto);.      i
5690: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
56a0: 20 26 26 20 28 65 41 75 74 6f 3d 3d 31 20 7c 7c   && (eAuto==1 ||
56b0: 20 65 41 75 74 6f 3d 3d 32 29 20 29 7b 0a 20 20   eAuto==2) ){.  
56c0: 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 73 65        /* When se
56d0: 74 74 69 6e 67 20 74 68 65 20 61 75 74 6f 5f 76  tting the auto_v
56e0: 61 63 75 75 6d 20 6d 6f 64 65 20 74 6f 20 65 69  acuum mode to ei
56f0: 74 68 65 72 20 22 66 75 6c 6c 22 20 6f 72 20 0a  ther "full" or .
5700: 20 20 20 20 20 20 20 20 2a 2a 20 22 69 6e 63 72          ** "incr
5710: 65 6d 65 6e 74 61 6c 22 2c 20 77 72 69 74 65 20  emental", write 
5720: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 6d 65 74  the value of met
5730: 61 5b 36 5d 20 69 6e 20 74 68 65 20 64 61 74 61  a[6] in the data
5740: 62 61 73 65 0a 20 20 20 20 20 20 20 20 2a 2a 20  base.        ** 
5750: 66 69 6c 65 2e 20 42 65 66 6f 72 65 20 77 72 69  file. Before wri
5760: 74 69 6e 67 20 74 6f 20 6d 65 74 61 5b 36 5d 2c  ting to meta[6],
5770: 20 63 68 65 63 6b 20 74 68 61 74 20 6d 65 74 61   check that meta
5780: 5b 33 5d 20 69 6e 64 69 63 61 74 65 73 0a 20 20  [3] indicates.  
5790: 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68        ** that th
57a0: 69 73 20 72 65 61 6c 6c 79 20 69 73 20 61 6e 20  is really is an 
57b0: 61 75 74 6f 2d 76 61 63 75 75 6d 20 63 61 70 61  auto-vacuum capa
57c0: 62 6c 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  ble database..  
57d0: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
57e0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e   static const in
57f0: 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46  t iLn = VDBE_OFF
5800: 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20  SET_LINENO(2);. 
5810: 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f         static co
5820: 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73  nst VdbeOpList s
5830: 65 74 4d 65 74 61 36 5b 5d 20 3d 20 7b 0a 20 20  etMeta6[] = {.  
5840: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61          { OP_Tra
5850: 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20  nsaction,    0, 
5860: 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20          1,      
5870: 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20             0},  
5880: 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20    /* 0 */.      
5890: 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f      { OP_ReadCoo
58a0: 6b 69 65 2c 20 20 20 20 20 30 2c 20 20 20 20 20  kie,     0,     
58b0: 20 20 20 20 31 2c 20 20 20 20 20 20 20 20 20 42      1,         B
58c0: 54 52 45 45 5f 4c 41 52 47 45 53 54 5f 52 4f 4f  TREE_LARGEST_ROO
58d0: 54 5f 50 41 47 45 7d 2c 0a 20 20 20 20 20 20 20  T_PAGE},.       
58e0: 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20 20     { OP_If,     
58f0: 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20          1,      
5900: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20     0,           
5910: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
5920: 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b  2 */.          {
5930: 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20 20 20 20   OP_Halt,       
5940: 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 4f      SQLITE_OK, O
5950: 45 5f 41 62 6f 72 74 2c 20 20 20 20 20 20 20 20  E_Abort,        
5960: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a 2f    0},    /* 3 */
5970: 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  .          { OP_
5980: 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20  SetCookie,      
5990: 30 2c 20 20 20 20 20 20 20 20 20 42 54 52 45 45  0,         BTREE
59a0: 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c 20 30 7d  _INCR_VACUUM, 0}
59b0: 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20 20  ,    /* 4 */.   
59c0: 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20 20       };.        
59d0: 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20 20  VdbeOp *aOp;.   
59e0: 20 20 20 20 20 69 6e 74 20 69 41 64 64 72 20 3d       int iAddr =
59f0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72   sqlite3VdbeCurr
5a00: 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20 20  entAddr(v);.    
5a10: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 56      sqlite3VdbeV
5a20: 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52 65 71  erifyNoMallocReq
5a30: 75 69 72 65 64 28 76 2c 20 41 72 72 61 79 53 69  uired(v, ArraySi
5a40: 7a 65 28 73 65 74 4d 65 74 61 36 29 29 3b 0a 20  ze(setMeta6));. 
5a50: 20 20 20 20 20 20 20 61 4f 70 20 3d 20 73 71 6c         aOp = sql
5a60: 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73  ite3VdbeAddOpLis
5a70: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73  t(v, ArraySize(s
5a80: 65 74 4d 65 74 61 36 29 2c 20 73 65 74 4d 65 74  etMeta6), setMet
5a90: 61 36 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20 20  a6, iLn);.      
5aa0: 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52 45    if( ONLY_IF_RE
5ab0: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f 70  ALLOC_STRESS(aOp
5ac0: 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a 20 20  ==0) ) break;.  
5ad0: 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20        aOp[0].p1 
5ae0: 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 20 20 61  = iDb;.        a
5af0: 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44 62 3b 0a  Op[1].p1 = iDb;.
5b00: 20 20 20 20 20 20 20 20 61 4f 70 5b 32 5d 2e 70          aOp[2].p
5b10: 32 20 3d 20 69 41 64 64 72 2b 34 3b 0a 20 20 20  2 = iAddr+4;.   
5b20: 20 20 20 20 20 61 4f 70 5b 34 5d 2e 70 31 20 3d       aOp[4].p1 =
5b30: 20 69 44 62 3b 0a 20 20 20 20 20 20 20 20 61 4f   iDb;.        aO
5b40: 70 5b 34 5d 2e 70 33 20 3d 20 65 41 75 74 6f 20  p[4].p3 = eAuto 
5b50: 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  - 1;.        sql
5b60: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
5b70: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  e(v, iDb);.     
5b80: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65   }.    }.    bre
5b90: 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ak;.  }.#endif..
5ba0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
5bb0: 41 20 5b 73 63 68 65 6d 61 2e 5d 69 6e 63 72 65  A [schema.]incre
5bc0: 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 28 4e 29  mental_vacuum(N)
5bd0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20 4e 20  .  **.  ** Do N 
5be0: 73 74 65 70 73 20 6f 66 20 69 6e 63 72 65 6d 65  steps of increme
5bf0: 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e 67 20 6f  ntal vacuuming o
5c00: 6e 20 61 20 64 61 74 61 62 61 73 65 2e 0a 20 20  n a database..  
5c10: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5c20: 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
5c30: 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  M.  case PragTyp
5c40: 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43  _INCREMENTAL_VAC
5c50: 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69  UUM: {.    int i
5c60: 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a 20 20 20  Limit, addr;.   
5c70: 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 7c   if( zRight==0 |
5c80: 7c 20 21 73 71 6c 69 74 65 33 47 65 74 49 6e 74  | !sqlite3GetInt
5c90: 33 32 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d  32(zRight, &iLim
5ca0: 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74 3c 3d 30  it) || iLimit<=0
5cb0: 20 29 7b 0a 20 20 20 20 20 20 69 4c 69 6d 69 74   ){.      iLimit
5cc0: 20 3d 20 30 78 37 66 66 66 66 66 66 66 3b 0a 20   = 0x7fffffff;. 
5cd0: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
5ce0: 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
5cf0: 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 69  ion(pParse, 0, i
5d00: 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Db);.    sqlite3
5d10: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
5d20: 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69 6d 69 74  _Integer, iLimit
5d30: 2c 20 31 29 3b 0a 20 20 20 20 61 64 64 72 20 3d  , 1);.    addr =
5d40: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5d50: 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72 56 61 63  p1(v, OP_IncrVac
5d60: 75 75 6d 2c 20 69 44 62 29 3b 20 56 64 62 65 43  uum, iDb); VdbeC
5d70: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
5d80: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
5d90: 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  1(v, OP_ResultRo
5da0: 77 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74  w, 1);.    sqlit
5db0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
5dc0: 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31  OP_AddImm, 1, -1
5dd0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
5de0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
5df0: 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 29 3b 20  fPos, 1, addr); 
5e00: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
5e10: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
5e20: 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
5e30: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
5e40: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
5e50: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  f SQLITE_OMIT_PA
5e60: 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a  GER_PRAGMAS.  /*
5e70: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
5e80: 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73 69 7a  chema.]cache_siz
5e90: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
5ea0: 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73 69  schema.]cache_si
5eb0: 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ze=N.  **.  ** T
5ec0: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
5ed0: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
5ee0: 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67 20  t local setting 
5ef0: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67  for the.  ** pag
5f00: 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20 54 68  e cache size. Th
5f10: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65  e second form se
5f20: 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20 2a  ts the local.  *
5f30: 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  * page cache siz
5f40: 65 20 76 61 6c 75 65 2e 20 20 49 66 20 4e 20 69  e value.  If N i
5f50: 73 20 70 6f 73 69 74 69 76 65 20 74 68 65 6e 20  s positive then 
5f60: 74 68 61 74 20 69 73 20 74 68 65 0a 20 20 2a 2a  that is the.  **
5f70: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5f80: 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e 20 20   in the cache.  
5f90: 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65  If N is negative
5fa0: 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20  , then the.  ** 
5fb0: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
5fc0: 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f 20 74  is adjusted so t
5fd0: 68 61 74 20 74 68 65 20 63 61 63 68 65 20 75 73  hat the cache us
5fe0: 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65 73 0a  es -N kibibytes.
5ff0: 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a    ** of memory..
6000: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
6010: 54 79 70 5f 43 41 43 48 45 5f 53 49 5a 45 3a 20  Typ_CACHE_SIZE: 
6020: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  {.    assert( sq
6030: 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
6040: 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29  Held(db, iDb, 0)
6050: 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69   );.    if( !zRi
6060: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
6070: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20  urnSingleInt(v, 
6080: 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 70 44  "cache_size", pD
6090: 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68  b->pSchema->cach
60a0: 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c  e_size);.    }el
60b0: 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69  se{.      int si
60c0: 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69  ze = sqlite3Atoi
60d0: 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20  (zRight);.      
60e0: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61  pDb->pSchema->ca
60f0: 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b  che_size = size;
6100: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74  .      sqlite3Bt
6110: 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65 28  reeSetCacheSize(
6120: 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e 70  pDb->pBt, pDb->p
6130: 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69  Schema->cache_si
6140: 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62  ze);.    }.    b
6150: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
6160: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
6170: 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73 70 69 6c  hema.]cache_spil
6180: 6c 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 63  l.  **  PRAGMA c
6190: 61 63 68 65 5f 73 70 69 6c 6c 3d 42 4f 4f 4c 45  ache_spill=BOOLE
61a0: 41 4e 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  AN.  **  PRAGMA 
61b0: 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73  [schema.]cache_s
61c0: 70 69 6c 6c 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  pill=N.  **.  **
61d0: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
61e0: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
61f0: 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e  ent local settin
6200: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70  g for the.  ** p
6210: 61 67 65 20 63 61 63 68 65 20 73 70 69 6c 6c 20  age cache spill 
6220: 73 69 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e 64  size. The second
6230: 20 66 6f 72 6d 20 74 75 72 6e 73 20 63 61 63 68   form turns cach
6240: 65 20 73 70 69 6c 6c 20 6f 6e 0a 20 20 2a 2a 20  e spill on.  ** 
6250: 6f 72 20 6f 66 66 2e 20 20 57 68 65 6e 20 74 75  or off.  When tu
6260: 72 6e 6e 69 6e 67 20 63 61 63 68 65 20 73 70 69  rnning cache spi
6270: 6c 6c 20 6f 6e 2c 20 74 68 65 20 73 69 7a 65 20  ll on, the size 
6280: 69 73 20 73 65 74 20 74 6f 20 74 68 65 0a 20 20  is set to the.  
6290: 2a 2a 20 63 75 72 72 65 6e 74 20 63 61 63 68 65  ** current cache
62a0: 5f 73 69 7a 65 2e 20 20 54 68 65 20 74 68 69 72  _size.  The thir
62b0: 64 20 66 6f 72 6d 20 73 65 74 73 20 61 20 73 70  d form sets a sp
62c0: 69 6c 6c 20 73 69 7a 65 20 74 68 61 74 0a 20 20  ill size that.  
62d0: 2a 2a 20 6d 61 79 20 62 65 20 64 69 66 66 65 72  ** may be differ
62e0: 65 6e 74 20 66 6f 72 6d 20 74 68 65 20 63 61 63  ent form the cac
62f0: 68 65 20 73 69 7a 65 2e 0a 20 20 2a 2a 20 49 66  he size..  ** If
6300: 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65 20 74   N is positive t
6310: 68 65 6e 20 74 68 61 74 20 69 73 20 74 68 65 0a  hen that is the.
6320: 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70    ** number of p
6330: 61 67 65 73 20 69 6e 20 74 68 65 20 63 61 63 68  ages in the cach
6340: 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61  e.  If N is nega
6350: 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65 0a 20  tive, then the. 
6360: 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61   ** number of pa
6370: 67 65 73 20 69 73 20 61 64 6a 75 73 74 65 64 20  ges is adjusted 
6380: 73 6f 20 74 68 61 74 20 74 68 65 20 63 61 63 68  so that the cach
6390: 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69 62 79  e uses -N kibiby
63a0: 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f  tes.  ** of memo
63b0: 72 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 66  ry..  **.  ** If
63c0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
63d0: 61 63 68 65 5f 73 70 69 6c 6c 20 70 61 67 65 73  ache_spill pages
63e0: 20 69 73 20 6c 65 73 73 20 74 68 65 6e 20 74 68   is less then th
63f0: 65 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a  e number of.  **
6400: 20 63 61 63 68 65 5f 73 69 7a 65 20 70 61 67 65   cache_size page
6410: 73 2c 20 6e 6f 20 73 70 69 6c 6c 69 6e 67 20 6f  s, no spilling o
6420: 63 63 75 72 73 20 75 6e 74 69 6c 20 74 68 65 20  ccurs until the 
6430: 70 61 67 65 20 63 6f 75 6e 74 20 65 78 63 65 65  page count excee
6440: 64 73 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62  ds.  ** the numb
6450: 65 72 20 6f 66 20 63 61 63 68 65 5f 73 69 7a 65  er of cache_size
6460: 20 70 61 67 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a   pages..  **.  *
6470: 2a 20 54 68 65 20 63 61 63 68 65 5f 73 70 69 6c  * The cache_spil
6480: 6c 3d 42 4f 4f 4c 45 41 4e 20 73 65 74 74 69 6e  l=BOOLEAN settin
6490: 67 20 61 70 70 6c 69 65 73 20 74 6f 20 61 6c 6c  g applies to all
64a0: 20 61 74 74 61 63 68 65 64 20 73 63 68 65 6d 61   attached schema
64b0: 73 2c 0a 20 20 2a 2a 20 6e 6f 74 20 6a 75 73 74  s,.  ** not just
64c0: 20 74 68 65 20 73 63 68 65 6d 61 20 73 70 65 63   the schema spec
64d0: 69 66 69 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61  ified..  */.  ca
64e0: 73 65 20 50 72 61 67 54 79 70 5f 43 41 43 48 45  se PragTyp_CACHE
64f0: 5f 53 50 49 4c 4c 3a 20 7b 0a 20 20 20 20 61 73  _SPILL: {.    as
6500: 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
6510: 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
6520: 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
6530: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
6540: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
6550: 65 49 6e 74 28 76 2c 20 22 63 61 63 68 65 5f 73  eInt(v, "cache_s
6560: 70 69 6c 6c 22 2c 20 0a 20 20 20 20 20 20 20 20  pill", .        
6570: 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
6580: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 29  LITE_CacheSpill)
6590: 3d 3d 30 20 3f 20 30 20 3a 20 0a 20 20 20 20 20  ==0 ? 0 : .     
65a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
65b0: 72 65 65 53 65 74 53 70 69 6c 6c 53 69 7a 65 28  reeSetSpillSize(
65c0: 70 44 62 2d 3e 70 42 74 2c 30 29 29 3b 0a 20 20  pDb->pBt,0));.  
65d0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
65e0: 6e 74 20 73 69 7a 65 20 3d 20 31 3b 0a 20 20 20  nt size = 1;.   
65f0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 65     if( sqlite3Ge
6600: 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26  tInt32(zRight, &
6610: 73 69 7a 65 29 20 29 7b 0a 20 20 20 20 20 20 20  size) ){.       
6620: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
6630: 53 70 69 6c 6c 53 69 7a 65 28 70 44 62 2d 3e 70  SpillSize(pDb->p
6640: 42 74 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20 20  Bt, size);.     
6650: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c   }.      if( sql
6660: 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a  ite3GetBoolean(z
6670: 52 69 67 68 74 2c 20 73 69 7a 65 21 3d 30 29 20  Right, size!=0) 
6680: 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66  ){.        db->f
6690: 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 43  lags |= SQLITE_C
66a0: 61 63 68 65 53 70 69 6c 6c 3b 0a 20 20 20 20 20  acheSpill;.     
66b0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
66c0: 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51  db->flags &= ~SQ
66d0: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 3b  LITE_CacheSpill;
66e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
66f0: 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28  etAllPagerFlags(
6700: 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62  db);.    }.    b
6710: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
6720: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
6730: 68 65 6d 61 2e 5d 6d 6d 61 70 5f 73 69 7a 65 28  hema.]mmap_size(
6740: 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 55 73 65  N).  **.  ** Use
6750: 64 20 74 6f 20 73 65 74 20 6d 61 70 70 69 6e 67  d to set mapping
6760: 20 73 69 7a 65 20 6c 69 6d 69 74 2e 20 54 68 65   size limit. The
6770: 20 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69   mapping size li
6780: 6d 69 74 20 69 73 0a 20 20 2a 2a 20 75 73 65 64  mit is.  ** used
6790: 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 61 67   to limit the ag
67a0: 67 72 65 67 61 74 65 20 73 69 7a 65 20 6f 66 20  gregate size of 
67b0: 61 6c 6c 20 6d 65 6d 6f 72 79 20 6d 61 70 70 65  all memory mappe
67c0: 64 20 72 65 67 69 6f 6e 73 20 6f 66 20 74 68 65  d regions of the
67d0: 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 66  .  ** database f
67e0: 69 6c 65 2e 20 49 66 20 74 68 69 73 20 70 61 72  ile. If this par
67f0: 61 6d 65 74 65 72 20 69 73 20 73 65 74 20 74 6f  ameter is set to
6800: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6d 65 6d 6f   zero, then memo
6810: 72 79 20 6d 61 70 70 69 6e 67 0a 20 20 2a 2a 20  ry mapping.  ** 
6820: 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61  is not used at a
6830: 6c 6c 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67  ll.  If N is neg
6840: 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65 20  ative, then the 
6850: 64 65 66 61 75 6c 74 20 6d 65 6d 6f 72 79 20 6d  default memory m
6860: 61 70 0a 20 20 2a 2a 20 6c 69 6d 69 74 20 64 65  ap.  ** limit de
6870: 74 65 72 6d 69 6e 65 64 20 62 79 20 73 71 6c 69  termined by sqli
6880: 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54  te3_config(SQLIT
6890: 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53 49  E_CONFIG_MMAP_SI
68a0: 5a 45 29 20 69 73 20 73 65 74 2e 0a 20 20 2a 2a  ZE) is set..  **
68b0: 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20 4e   The parameter N
68c0: 20 69 73 20 6d 65 61 73 75 72 65 64 20 69 6e 20   is measured in 
68d0: 62 79 74 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  bytes..  **.  **
68e0: 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20 61   This value is a
68f0: 64 76 69 73 6f 72 79 2e 20 20 54 68 65 20 75 6e  dvisory.  The un
6900: 64 65 72 6c 79 69 6e 67 20 56 46 53 20 69 73 20  derlying VFS is 
6910: 66 72 65 65 20 74 6f 20 6d 65 6d 6f 72 79 20 6d  free to memory m
6920: 61 70 0a 20 20 2a 2a 20 61 73 20 6c 69 74 74 6c  ap.  ** as littl
6930: 65 20 6f 72 20 61 73 20 6d 75 63 68 20 61 73 20  e or as much as 
6940: 69 74 20 77 61 6e 74 73 2e 20 20 45 78 63 65 70  it wants.  Excep
6950: 74 2c 20 69 66 20 4e 20 69 73 20 73 65 74 20 74  t, if N is set t
6960: 6f 20 30 20 74 68 65 6e 20 74 68 65 0a 20 20 2a  o 0 then the.  *
6970: 2a 20 75 70 70 65 72 20 6c 61 79 65 72 73 20 77  * upper layers w
6980: 69 6c 6c 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65  ill never invoke
6990: 20 74 68 65 20 78 46 65 74 63 68 20 69 6e 74 65   the xFetch inte
69a0: 72 66 61 63 65 73 20 74 6f 20 74 68 65 20 56 46  rfaces to the VF
69b0: 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  S..  */.  case P
69c0: 72 61 67 54 79 70 5f 4d 4d 41 50 5f 53 49 5a 45  ragTyp_MMAP_SIZE
69d0: 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  : {.    sqlite3_
69e0: 69 6e 74 36 34 20 73 7a 3b 0a 23 69 66 20 53 51  int64 sz;.#if SQ
69f0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
6a00: 5a 45 3e 30 0a 20 20 20 20 61 73 73 65 72 74 28  ZE>0.    assert(
6a10: 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
6a20: 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
6a30: 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 7a   0) );.    if( z
6a40: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
6a50: 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 73 71 6c  nt ii;.      sql
6a60: 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36  ite3DecOrHexToI6
6a70: 34 28 7a 52 69 67 68 74 2c 20 26 73 7a 29 3b 0a  4(zRight, &sz);.
6a80: 20 20 20 20 20 20 69 66 28 20 73 7a 3c 30 20 29        if( sz<0 )
6a90: 20 73 7a 20 3d 20 73 71 6c 69 74 65 33 47 6c 6f   sz = sqlite3Glo
6aa0: 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 4d 6d 61 70  balConfig.szMmap
6ab0: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 32  ;.      if( pId2
6ac0: 2d 3e 6e 3d 3d 30 20 29 20 64 62 2d 3e 73 7a 4d  ->n==0 ) db->szM
6ad0: 6d 61 70 20 3d 20 73 7a 3b 0a 20 20 20 20 20 20  map = sz;.      
6ae0: 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31  for(ii=db->nDb-1
6af0: 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a  ; ii>=0; ii--){.
6b00: 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e          if( db->
6b10: 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26 20 28  aDb[ii].pBt && (
6b20: 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d  ii==iDb || pId2-
6b30: 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20 20  >n==0) ){.      
6b40: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
6b50: 53 65 74 4d 6d 61 70 4c 69 6d 69 74 28 64 62 2d  SetMmapLimit(db-
6b60: 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 73 7a  >aDb[ii].pBt, sz
6b70: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
6b80: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
6b90: 7a 20 3d 20 2d 31 3b 0a 20 20 20 20 72 63 20 3d  z = -1;.    rc =
6ba0: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f   sqlite3_file_co
6bb0: 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62 2c 20 53  ntrol(db, zDb, S
6bc0: 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4d 4d 41 50  QLITE_FCNTL_MMAP
6bd0: 5f 53 49 5a 45 2c 20 26 73 7a 29 3b 0a 23 65 6c  _SIZE, &sz);.#el
6be0: 73 65 0a 20 20 20 20 73 7a 20 3d 20 30 3b 0a 20  se.    sz = 0;. 
6bf0: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
6c00: 4b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66  K;.#endif.    if
6c10: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
6c20: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
6c30: 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 6d 6d 61  ingleInt(v, "mma
6c40: 70 5f 73 69 7a 65 22 2c 20 73 7a 29 3b 0a 20 20  p_size", sz);.  
6c50: 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d    }else if( rc!=
6c60: 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20  SQLITE_NOTFOUND 
6c70: 29 7b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  ){.      pParse-
6c80: 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20 70  >nErr++;.      p
6c90: 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a  Parse->rc = rc;.
6ca0: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
6cb0: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
6cc0: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
6cd0: 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ore.  **   PRAGM
6ce0: 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 22  A temp_store = "
6cf0: 64 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72 79  default"|"memory
6d00: 22 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20 20  "|"file".  **.  
6d10: 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74  ** Return or set
6d20: 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65   the local value
6d30: 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f   of the temp_sto
6d40: 72 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69  re flag.  Changi
6d50: 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61  ng.  ** the loca
6d60: 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74  l value does not
6d70: 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f   make changes to
6d80: 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61   the disk file a
6d90: 6e 64 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20  nd the default. 
6da0: 20 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20 62   ** value will b
6db0: 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e  e restored the n
6dc0: 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61 74  ext time the dat
6dd0: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2e  abase is opened.
6de0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20  .  **.  ** Note 
6df0: 74 68 61 74 20 69 74 20 69 73 20 70 6f 73 73 69  that it is possi
6e00: 62 6c 65 20 66 6f 72 20 74 68 65 20 6c 69 62 72  ble for the libr
6e10: 61 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  ary compile-time
6e20: 20 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a   options to.  **
6e30: 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 73   override this s
6e40: 65 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 63 61  etting.  */.  ca
6e50: 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f  se PragTyp_TEMP_
6e60: 53 54 4f 52 45 3a 20 7b 0a 20 20 20 20 69 66 28  STORE: {.    if(
6e70: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
6e80: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
6e90: 74 28 76 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65  t(v, "temp_store
6ea0: 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  ", db->temp_stor
6eb0: 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  e);.    }else{. 
6ec0: 20 20 20 20 20 63 68 61 6e 67 65 54 65 6d 70 53       changeTempS
6ed0: 74 6f 72 61 67 65 28 70 50 61 72 73 65 2c 20 7a  torage(pParse, z
6ee0: 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 0a 20 20  Right);.    }.  
6ef0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
6f00: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
6f10: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
6f20: 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52 41  ctory.  **   PRA
6f30: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
6f40: 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22 64  irectory = ""|"d
6f50: 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20  irectory_name". 
6f60: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
6f70: 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c  or set the local
6f80: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74 65   value of the te
6f90: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
6fa0: 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69  ry flag.  Changi
6fb0: 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75  ng.  ** the valu
6fc0: 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66 69  e sets a specifi
6fd0: 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20 62  c directory to b
6fe0: 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
6ff0: 72 61 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a 2a  rary files..  **
7000: 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75   Setting to a nu
7010: 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72 74  ll string revert
7020: 73 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74  s to the default
7030: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
7040: 74 6f 72 79 20 73 65 61 72 63 68 2e 0a 20 20 2a  tory search..  *
7050: 2a 20 49 66 20 74 65 6d 70 6f 72 61 72 79 20 64  * If temporary d
7060: 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61 6e  irectory is chan
7070: 67 65 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c 69  ged, then invali
7080: 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 2e  dateTempStorage.
7090: 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73  .  **.  */.  cas
70a0: 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53  e PragTyp_TEMP_S
70b0: 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20  TORE_DIRECTORY: 
70c0: 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  {.    if( !zRigh
70d0: 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  t ){.      retur
70e0: 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22  nSingleText(v, "
70f0: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
7100: 74 6f 72 79 22 2c 20 73 71 6c 69 74 65 33 5f 74  tory", sqlite3_t
7110: 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a  emp_directory);.
7120: 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64      }else{.#ifnd
7130: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
7140: 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  SD.      if( zRi
7150: 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ght[0] ){.      
7160: 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20    int res;.     
7170: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f     rc = sqlite3O
7180: 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73  sAccess(db->pVfs
7190: 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45  , zRight, SQLITE
71a0: 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52 49 54  _ACCESS_READWRIT
71b0: 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  E, &res);.      
71c0: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
71d0: 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b  _OK || res==0 ){
71e0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
71f0: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
7200: 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62  e, "not a writab
7210: 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a  le directory");.
7220: 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70            goto p
7230: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20  ragma_out;.     
7240: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
7250: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 54 45     if( SQLITE_TE
7260: 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20  MP_STORE==0.    
7270: 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45     || (SQLITE_TE
7280: 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20 64  MP_STORE==1 && d
7290: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31  b->temp_store<=1
72a0: 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c  ).       || (SQL
72b0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
72c0: 32 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74  2 && db->temp_st
72d0: 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20 20 29 7b  ore==1).      ){
72e0: 0a 20 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64  .        invalid
72f0: 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70  ateTempStorage(p
7300: 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a  Parse);.      }.
7310: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
7320: 65 65 28 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f  ee(sqlite3_temp_
7330: 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20  directory);.    
7340: 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20    if( zRight[0] 
7350: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
7360: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
7370: 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  y = sqlite3_mpri
7380: 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74  ntf("%s", zRight
7390: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
73a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
73b0: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d  temp_directory =
73c0: 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64   0;.      }.#end
73d0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
73e0: 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20  T_WSD */.    }. 
73f0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23     break;.  }..#
7400: 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  if SQLITE_OS_WIN
7410: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
7420: 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64  GMA data_store_d
7430: 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20  irectory.  **   
7440: 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72  PRAGMA data_stor
7450: 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22  e_directory = ""
7460: 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65  |"directory_name
7470: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
7480: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f  rn or set the lo
7490: 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65  cal value of the
74a0: 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
74b0: 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61  ctory flag.  Cha
74c0: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76  nging.  ** the v
74d0: 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63  alue sets a spec
74e0: 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20 74  ific directory t
74f0: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64 61  o be used for da
7500: 74 61 62 61 73 65 20 66 69 6c 65 73 20 74 68 61  tabase files tha
7510: 74 0a 20 20 2a 2a 20 77 65 72 65 20 73 70 65 63  t.  ** were spec
7520: 69 66 69 65 64 20 77 69 74 68 20 61 20 72 65 6c  ified with a rel
7530: 61 74 69 76 65 20 70 61 74 68 6e 61 6d 65 2e 20  ative pathname. 
7540: 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75   Setting to a nu
7550: 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72 74  ll string revert
7560: 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 64 65  s.  ** to the de
7570: 66 61 75 6c 74 20 64 61 74 61 62 61 73 65 20 64  fault database d
7580: 69 72 65 63 74 6f 72 79 2c 20 77 68 69 63 68 20  irectory, which 
7590: 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69 6c  for database fil
75a0: 65 73 20 73 70 65 63 69 66 69 65 64 20 77 69 74  es specified wit
75b0: 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61 74 69 76  h.  ** a relativ
75c0: 65 20 70 61 74 68 20 77 69 6c 6c 20 70 72 6f 62  e path will prob
75d0: 61 62 6c 79 20 62 65 20 62 61 73 65 64 20 6f 6e  ably be based on
75e0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 69 72   the current dir
75f0: 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 0a 20  ectory for the. 
7600: 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20 20 44 61   ** process.  Da
7610: 74 61 62 61 73 65 20 66 69 6c 65 20 73 70 65 63  tabase file spec
7620: 69 66 69 65 64 20 77 69 74 68 20 61 6e 20 61 62  ified with an ab
7630: 73 6f 6c 75 74 65 20 70 61 74 68 20 61 72 65 20  solute path are 
7640: 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a 20 20 2a  not impacted.  *
7650: 2a 20 62 79 20 74 68 69 73 20 73 65 74 74 69 6e  * by this settin
7660: 67 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  g, regardless of
7670: 20 69 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a 2a   its value..  **
7680: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
7690: 67 54 79 70 5f 44 41 54 41 5f 53 54 4f 52 45 5f  gTyp_DATA_STORE_
76a0: 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20  DIRECTORY: {.   
76b0: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
76c0: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
76d0: 6c 65 54 65 78 74 28 76 2c 20 22 64 61 74 61 5f  leText(v, "data_
76e0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22  store_directory"
76f0: 2c 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64  , sqlite3_data_d
7700: 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 7d  irectory);.    }
7710: 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20 53 51  else{.#ifndef SQ
7720: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
7730: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30      if( zRight[0
7740: 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  ] ){.        int
7750: 20 72 65 73 3b 0a 20 20 20 20 20 20 20 20 72 63   res;.        rc
7760: 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63 65   = sqlite3OsAcce
7770: 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52 69  ss(db->pVfs, zRi
7780: 67 68 74 2c 20 53 51 4c 49 54 45 5f 41 43 43 45  ght, SQLITE_ACCE
7790: 53 53 5f 52 45 41 44 57 52 49 54 45 2c 20 26 72  SS_READWRITE, &r
77a0: 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  es);.        if(
77b0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc!=SQLITE_OK |
77c0: 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  | res==0 ){.    
77d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72        sqlite3Err
77e0: 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 6e  orMsg(pParse, "n
77f0: 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64 69  ot a writable di
7800: 72 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20 20  rectory");.     
7810: 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61       goto pragma
7820: 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a  _out;.        }.
7830: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
7840: 6c 69 74 65 33 5f 66 72 65 65 28 73 71 6c 69 74  lite3_free(sqlit
7850: 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72  e3_data_director
7860: 79 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52  y);.      if( zR
7870: 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  ight[0] ){.     
7880: 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f     sqlite3_data_
7890: 64 69 72 65 63 74 6f 72 79 20 3d 20 73 71 6c 69  directory = sqli
78a0: 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22  te3_mprintf("%s"
78b0: 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  , zRight);.     
78c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
78d0: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72  sqlite3_data_dir
78e0: 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20  ectory = 0;.    
78f0: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
7900: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f  LITE_OMIT_WSD */
7910: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
7920: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ;.  }.#endif..#i
7930: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7940: 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 0a 20 20  LOCKING_STYLE.  
7950: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
7960: 20 5b 73 63 68 65 6d 61 2e 5d 6c 6f 63 6b 5f 70   [schema.]lock_p
7970: 72 6f 78 79 5f 66 69 6c 65 0a 20 20 2a 2a 20 20  roxy_file.  **  
7980: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
7990: 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65  ]lock_proxy_file
79a0: 20 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f 63   = ":auto:"|"loc
79b0: 6b 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20 20 2a  k_file_path".  *
79c0: 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72  *.  ** Return or
79d0: 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   set the value o
79e0: 66 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78 79  f the lock_proxy
79f0: 5f 66 69 6c 65 20 66 6c 61 67 2e 20 20 43 68 61  _file flag.  Cha
7a00: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76  nging.  ** the v
7a10: 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63  alue sets a spec
7a20: 69 66 69 63 20 66 69 6c 65 20 74 6f 20 62 65 20  ific file to be 
7a30: 75 73 65 64 20 66 6f 72 20 64 61 74 61 62 61 73  used for databas
7a40: 65 20 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e 0a  e access locks..
7a50: 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65    **.  */.  case
7a60: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50 52   PragTyp_LOCK_PR
7a70: 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20 20 20  OXY_FILE: {.    
7a80: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
7a90: 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67       Pager *pPag
7aa0: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
7ab0: 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29  ePager(pDb->pBt)
7ac0: 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 70 72  ;.      char *pr
7ad0: 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d 20  oxy_file_path = 
7ae0: 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c 69  NULL;.      sqli
7af0: 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20  te3_file *pFile 
7b00: 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
7b10: 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20  le(pPager);.    
7b20: 20 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43    sqlite3OsFileC
7b30: 6f 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c 65  ontrolHint(pFile
7b40: 2c 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f 43  , SQLITE_GET_LOC
7b50: 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20  KPROXYFILE, .   
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 26 70 72 6f 78 79 5f 66          &proxy_f
7b80: 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 20  ile_path);.     
7b90: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78   returnSingleTex
7ba0: 74 28 76 2c 20 22 6c 6f 63 6b 5f 70 72 6f 78 79  t(v, "lock_proxy
7bb0: 5f 66 69 6c 65 22 2c 20 70 72 6f 78 79 5f 66 69  _file", proxy_fi
7bc0: 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 7d 65  le_path);.    }e
7bd0: 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72  lse{.      Pager
7be0: 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74   *pPager = sqlit
7bf0: 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62  e3BtreePager(pDb
7c00: 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 73 71  ->pBt);.      sq
7c10: 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c  lite3_file *pFil
7c20: 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
7c30: 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20  File(pPager);.  
7c40: 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20      int res;.   
7c50: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
7c60: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d   ){.        res=
7c70: 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e  sqlite3OsFileCon
7c80: 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49  trol(pFile, SQLI
7c90: 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59  TE_SET_LOCKPROXY
7ca0: 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  FILE, .         
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 7a 52 69 67              zRig
7cd0: 68 74 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73  ht);.      } els
7ce0: 65 20 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d  e {.        res=
7cf0: 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e  sqlite3OsFileCon
7d00: 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49  trol(pFile, SQLI
7d10: 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59  TE_SET_LOCKPROXY
7d20: 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  FILE, .         
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 4e 55 4c 4c              NULL
7d50: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
7d60: 20 69 66 28 20 72 65 73 21 3d 53 51 4c 49 54 45   if( res!=SQLITE
7d70: 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73  _OK ){.        s
7d80: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
7d90: 50 61 72 73 65 2c 20 22 66 61 69 6c 65 64 20 74  Parse, "failed t
7da0: 6f 20 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78 79  o set lock proxy
7db0: 20 66 69 6c 65 22 29 3b 0a 20 20 20 20 20 20 20   file");.       
7dc0: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
7dd0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
7de0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
7df0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
7e00: 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53  ENABLE_LOCKING_S
7e10: 54 59 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20 20  TYLE */      .  
7e20: 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50    .  /*.  **   P
7e30: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 73  RAGMA [schema.]s
7e40: 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20  ynchronous.  ** 
7e50: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
7e60: 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46  .]synchronous=OF
7e70: 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55 4c 4c  F|ON|NORMAL|FULL
7e80: 7c 45 58 54 52 41 0a 20 20 2a 2a 0a 20 20 2a 2a  |EXTRA.  **.  **
7e90: 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74   Return or set t
7ea0: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f  he local value o
7eb0: 66 20 74 68 65 20 73 79 6e 63 68 72 6f 6e 6f 75  f the synchronou
7ec0: 73 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e  s flag.  Changin
7ed0: 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c  g.  ** the local
7ee0: 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20   value does not 
7ef0: 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20  make changes to 
7f00: 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e  the disk file an
7f10: 64 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75  d the.  ** defau
7f20: 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  lt value will be
7f30: 20 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65   restored the ne
7f40: 78 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61  xt time the data
7f50: 62 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f 70 65  base is.  ** ope
7f60: 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ned..  */.  case
7f70: 20 50 72 61 67 54 79 70 5f 53 59 4e 43 48 52 4f   PragTyp_SYNCHRO
7f80: 4e 4f 55 53 3a 20 7b 0a 20 20 20 20 69 66 28 20  NOUS: {.    if( 
7f90: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
7fa0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
7fb0: 28 76 2c 20 22 73 79 6e 63 68 72 6f 6e 6f 75 73  (v, "synchronous
7fc0: 22 2c 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c  ", pDb->safety_l
7fd0: 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20 7d 65 6c  evel-1);.    }el
7fe0: 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21 64  se{.      if( !d
7ff0: 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
8000: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
8010: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
8020: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 53   .            "S
8030: 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79 20  afety level may 
8040: 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20 69  not be changed i
8050: 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61 63 74  nside a transact
8060: 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ion");.      }el
8070: 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  se{.        int 
8080: 69 4c 65 76 65 6c 20 3d 20 28 67 65 74 53 61 66  iLevel = (getSaf
8090: 65 74 79 4c 65 76 65 6c 28 7a 52 69 67 68 74 2c  etyLevel(zRight,
80a0: 30 2c 31 29 2b 31 29 20 26 20 50 41 47 45 52 5f  0,1)+1) & PAGER_
80b0: 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53 4b  SYNCHRONOUS_MASK
80c0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 4c  ;.        if( iL
80d0: 65 76 65 6c 3d 3d 30 20 29 20 69 4c 65 76 65 6c  evel==0 ) iLevel
80e0: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70 44   = 1;.        pD
80f0: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
8100: 3d 20 69 4c 65 76 65 6c 3b 0a 20 20 20 20 20 20  = iLevel;.      
8110: 20 20 70 44 62 2d 3e 62 53 79 6e 63 53 65 74 20    pDb->bSyncSet 
8120: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 73 65 74  = 1;.        set
8130: 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 64 62  AllPagerFlags(db
8140: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
8150: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
8160: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
8170: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
8180: 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
8190: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
81a0: 5f 50 52 41 47 4d 41 53 0a 20 20 63 61 73 65 20  _PRAGMAS.  case 
81b0: 50 72 61 67 54 79 70 5f 46 4c 41 47 3a 20 7b 0a  PragTyp_FLAG: {.
81c0: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d      if( zRight==
81d0: 30 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  0 ){.      retur
81e0: 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 70 50  nSingleInt(v, pP
81f0: 72 61 67 6d 61 2d 3e 7a 4e 61 6d 65 2c 20 28 64  ragma->zName, (d
8200: 62 2d 3e 66 6c 61 67 73 20 26 20 70 50 72 61 67  b->flags & pPrag
8210: 6d 61 2d 3e 69 41 72 67 29 21 3d 30 20 29 3b 0a  ma->iArg)!=0 );.
8220: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
8230: 20 69 6e 74 20 6d 61 73 6b 20 3d 20 70 50 72 61   int mask = pPra
8240: 67 6d 61 2d 3e 69 41 72 67 3b 20 20 20 20 2f 2a  gma->iArg;    /*
8250: 20 4d 61 73 6b 20 6f 66 20 62 69 74 73 20 74 6f   Mask of bits to
8260: 20 73 65 74 20 6f 72 20 63 6c 65 61 72 2e 20 2a   set or clear. *
8270: 2f 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  /.      if( db->
8280: 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 7b  autoCommit==0 ){
8290: 0a 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 65  .        /* Fore
82a0: 69 67 6e 20 6b 65 79 20 73 75 70 70 6f 72 74 20  ign key support 
82b0: 6d 61 79 20 6e 6f 74 20 62 65 20 65 6e 61 62 6c  may not be enabl
82c0: 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 20 77  ed or disabled w
82d0: 68 69 6c 65 20 6e 6f 74 0a 20 20 20 20 20 20 20  hile not.       
82e0: 20 2a 2a 20 69 6e 20 61 75 74 6f 2d 63 6f 6d 6d   ** in auto-comm
82f0: 69 74 20 6d 6f 64 65 2e 20 20 2a 2f 0a 20 20 20  it mode.  */.   
8300: 20 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28 53       mask &= ~(S
8310: 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79  QLITE_ForeignKey
8320: 73 29 3b 0a 20 20 20 20 20 20 7d 0a 23 69 66 20  s);.      }.#if 
8330: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
8340: 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 20 20 20  ENTICATION.     
8350: 20 69 66 28 20 64 62 2d 3e 61 75 74 68 2e 61 75   if( db->auth.au
8360: 74 68 4c 65 76 65 6c 3d 3d 55 41 55 54 48 5f 55  thLevel==UAUTH_U
8370: 73 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ser ){.        /
8380: 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 6e  * Do not allow n
8390: 6f 6e 2d 61 64 6d 69 6e 20 75 73 65 72 73 20 74  on-admin users t
83a0: 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 73 63 68  o modify the sch
83b0: 65 6d 61 20 61 72 62 69 74 72 61 72 69 6c 79 20  ema arbitrarily 
83c0: 2a 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20  */.        mask 
83d0: 26 3d 20 7e 28 53 51 4c 49 54 45 5f 57 72 69 74  &= ~(SQLITE_Writ
83e0: 65 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20 20  eSchema);.      
83f0: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  }.#endif..      
8400: 69 66 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f  if( sqlite3GetBo
8410: 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29  olean(zRight, 0)
8420: 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   ){.        db->
8430: 66 6c 61 67 73 20 7c 3d 20 6d 61 73 6b 3b 0a 20  flags |= mask;. 
8440: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
8450: 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d      db->flags &=
8460: 20 7e 6d 61 73 6b 3b 0a 20 20 20 20 20 20 20 20   ~mask;.        
8470: 69 66 28 20 6d 61 73 6b 3d 3d 53 51 4c 49 54 45  if( mask==SQLITE
8480: 5f 44 65 66 65 72 46 4b 73 20 29 20 64 62 2d 3e  _DeferFKs ) db->
8490: 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
84a0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 0a 20   = 0;.      }.. 
84b0: 20 20 20 20 20 2f 2a 20 4d 61 6e 79 20 6f 66 20       /* Many of 
84c0: 74 68 65 20 66 6c 61 67 2d 70 72 61 67 6d 61 73  the flag-pragmas
84d0: 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f 64 65   modify the code
84e0: 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68   generated by th
84f0: 65 20 53 51 4c 20 0a 20 20 20 20 20 20 2a 2a 20  e SQL .      ** 
8500: 63 6f 6d 70 69 6c 65 72 20 28 65 67 2e 20 63 6f  compiler (eg. co
8510: 75 6e 74 5f 63 68 61 6e 67 65 73 29 2e 20 53 6f  unt_changes). So
8520: 20 61 64 64 20 61 6e 20 6f 70 63 6f 64 65 20 74   add an opcode t
8530: 6f 20 65 78 70 69 72 65 20 61 6c 6c 0a 20 20 20  o expire all.   
8540: 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 53     ** compiled S
8550: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 61 66  QL statements af
8560: 74 65 72 20 6d 6f 64 69 66 79 69 6e 67 20 61 20  ter modifying a 
8570: 70 72 61 67 6d 61 20 76 61 6c 75 65 2e 0a 20 20  pragma value..  
8580: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
8590: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
85a0: 2c 20 4f 50 5f 45 78 70 69 72 65 2c 20 30 2c 20  , OP_Expire, 0, 
85b0: 30 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c  0);.      setAll
85c0: 50 61 67 65 72 46 6c 61 67 73 28 64 62 29 3b 0a  PagerFlags(db);.
85d0: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
85e0: 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
85f0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f  QLITE_OMIT_FLAG_
8600: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e  PRAGMAS */..#ifn
8610: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
8620: 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20  SCHEMA_PRAGMAS. 
8630: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
8640: 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 3c 74 61  A table_info(<ta
8650: 62 6c 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ble>).  **.  ** 
8660: 52 65 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20  Return a single 
8670: 72 6f 77 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  row for each col
8680: 75 6d 6e 20 6f 66 20 74 68 65 20 6e 61 6d 65 64  umn of the named
8690: 20 74 61 62 6c 65 2e 20 54 68 65 20 63 6f 6c 75   table. The colu
86a0: 6d 6e 73 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20  mns of.  ** the 
86b0: 72 65 74 75 72 6e 65 64 20 64 61 74 61 20 73 65  returned data se
86c0: 74 20 61 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a  t are:.  **.  **
86d0: 20 63 69 64 3a 20 20 20 20 20 20 20 20 43 6f 6c   cid:        Col
86e0: 75 6d 6e 20 69 64 20 28 6e 75 6d 62 65 72 65 64  umn id (numbered
86f0: 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
8700: 67 68 74 2c 20 73 74 61 72 74 69 6e 67 20 61 74  ght, starting at
8710: 20 30 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20 20   0).  ** name:  
8720: 20 20 20 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65       Column name
8730: 0a 20 20 2a 2a 20 74 79 70 65 3a 20 20 20 20 20  .  ** type:     
8740: 20 20 43 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61    Column declara
8750: 74 69 6f 6e 20 74 79 70 65 2e 0a 20 20 2a 2a 20  tion type..  ** 
8760: 6e 6f 74 6e 75 6c 6c 3a 20 20 20 20 54 72 75 65  notnull:    True
8770: 20 69 66 20 27 4e 4f 54 20 4e 55 4c 4c 27 20 69   if 'NOT NULL' i
8780: 73 20 70 61 72 74 20 6f 66 20 63 6f 6c 75 6d 6e  s part of column
8790: 20 64 65 63 6c 61 72 61 74 69 6f 6e 0a 20 20 2a   declaration.  *
87a0: 2a 20 64 66 6c 74 5f 76 61 6c 75 65 3a 20 54 68  * dflt_value: Th
87b0: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
87c0: 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20  for the column, 
87d0: 69 66 20 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20 63  if any..  */.  c
87e0: 61 73 65 20 50 72 61 67 54 79 70 5f 54 41 42 4c  ase PragTyp_TABL
87f0: 45 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67  E_INFO: if( zRig
8800: 68 74 20 29 7b 0a 20 20 20 20 54 61 62 6c 65 20  ht ){.    Table 
8810: 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20  *pTab;.    pTab 
8820: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62  = sqlite3FindTab
8830: 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a  le(db, zRight, z
8840: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61  Db);.    if( pTa
8850: 62 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69  b ){.      stati
8860: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a  c const char *az
8870: 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  Col[] = {.      
8880: 20 20 20 22 63 69 64 22 2c 20 22 6e 61 6d 65 22     "cid", "name"
8890: 2c 20 22 74 79 70 65 22 2c 20 22 6e 6f 74 6e 75  , "type", "notnu
88a0: 6c 6c 22 2c 20 22 64 66 6c 74 5f 76 61 6c 75 65  ll", "dflt_value
88b0: 22 2c 20 22 70 6b 22 0a 20 20 20 20 20 20 7d 3b  ", "pk".      };
88c0: 0a 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6b 3b  .      int i, k;
88d0: 0a 20 20 20 20 20 20 69 6e 74 20 6e 48 69 64 64  .      int nHidd
88e0: 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 43 6f  en = 0;.      Co
88f0: 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20 20 20 20  lumn *pCol;.    
8900: 20 20 49 6e 64 65 78 20 2a 70 50 6b 20 3d 20 73    Index *pPk = s
8910: 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
8920: 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20 20 20  Index(pTab);.   
8930: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
8940: 3d 20 36 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  = 6;.      sqlit
8950: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
8960: 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b  ma(pParse, iDb);
8970: 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c  .      setAllCol
8980: 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 36 2c 20 61  umnNames(v, 6, a
8990: 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 36  zCol); assert( 6
89a0: 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f  ==ArraySize(azCo
89b0: 6c 29 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  l) );.      sqli
89c0: 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
89d0: 4e 61 6d 65 73 28 70 50 61 72 73 65 2c 20 70 54  Names(pParse, pT
89e0: 61 62 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  ab);.      for(i
89f0: 3d 30 2c 20 70 43 6f 6c 3d 70 54 61 62 2d 3e 61  =0, pCol=pTab->a
8a00: 43 6f 6c 3b 20 69 3c 70 54 61 62 2d 3e 6e 43 6f  Col; i<pTab->nCo
8a10: 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c 2b 2b 29 7b  l; i++, pCol++){
8a20: 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63  .        const c
8a30: 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20  har *zName;.    
8a40: 20 20 20 20 69 66 28 20 49 73 48 69 64 64 65 6e      if( IsHidden
8a50: 43 6f 6c 75 6d 6e 28 70 43 6f 6c 29 20 29 7b 0a  Column(pCol) ){.
8a60: 20 20 20 20 20 20 20 20 20 20 6e 48 69 64 64 65            nHidde
8a70: 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 63  n++;.          c
8a80: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
8a90: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 28   }.        if( (
8aa0: 70 43 6f 6c 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  pCol->colFlags &
8ab0: 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59   COLFLAG_PRIMKEY
8ac0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
8ad0: 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20    k = 0;.       
8ae0: 20 7d 65 6c 73 65 20 69 66 28 20 70 50 6b 3d 3d   }else if( pPk==
8af0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b  0 ){.          k
8b00: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
8b10: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66  lse{.          f
8b20: 6f 72 28 6b 3d 31 3b 20 6b 3c 3d 70 54 61 62 2d  or(k=1; k<=pTab-
8b30: 3e 6e 43 6f 6c 20 26 26 20 70 50 6b 2d 3e 61 69  >nCol && pPk->ai
8b40: 43 6f 6c 75 6d 6e 5b 6b 2d 31 5d 21 3d 69 3b 20  Column[k-1]!=i; 
8b50: 6b 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 20 20 7d  k++){}.        }
8b60: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
8b70: 20 70 43 6f 6c 2d 3e 70 44 66 6c 74 3d 3d 30 20   pCol->pDflt==0 
8b80: 7c 7c 20 70 43 6f 6c 2d 3e 70 44 66 6c 74 2d 3e  || pCol->pDflt->
8b90: 6f 70 3d 3d 54 4b 5f 53 50 41 4e 20 29 3b 0a 20  op==TK_SPAN );. 
8ba0: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 70         zName = p
8bb0: 43 6f 6c 2d 3e 7a 4e 61 6d 65 3b 0a 20 20 20 20  Col->zName;.    
8bc0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
8bd0: 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22  ultiLoad(v, 1, "
8be0: 69 73 73 69 73 69 22 2c 0a 20 20 20 20 20 20 20  issisi",.       
8bf0: 20 20 20 20 20 20 20 20 69 2d 6e 48 69 64 64 65          i-nHidde
8c00: 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n,.             
8c10: 20 20 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20    zName,.       
8c20: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 53          sqlite3S
8c30: 74 72 4e 65 78 74 28 7a 4e 61 6d 65 29 2c 0a 20  trNext(zName),. 
8c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43                pC
8c50: 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f 20 31 20  ol->notNull ? 1 
8c60: 3a 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20  : 0,.           
8c70: 20 20 20 20 70 43 6f 6c 2d 3e 70 44 66 6c 74 20      pCol->pDflt 
8c80: 3f 20 70 43 6f 6c 2d 3e 70 44 66 6c 74 2d 3e 75  ? pCol->pDflt->u
8c90: 2e 7a 54 6f 6b 65 6e 20 3a 20 30 2c 0a 20 20 20  .zToken : 0,.   
8ca0: 20 20 20 20 20 20 20 20 20 20 20 20 6b 29 3b 0a              k);.
8cb0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
8cc0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
8cd0: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 36 29  ResultRow, 1, 6)
8ce0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
8cf0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
8d00: 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 54 41  case PragTyp_STA
8d10: 54 53 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63  TS: {.    static
8d20: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43   const char *azC
8d30: 6f 6c 5b 5d 20 3d 20 7b 20 22 74 61 62 6c 65 22  ol[] = { "table"
8d40: 2c 20 22 69 6e 64 65 78 22 2c 20 22 77 69 64 74  , "index", "widt
8d50: 68 22 2c 20 22 68 65 69 67 68 74 22 20 7d 3b 0a  h", "height" };.
8d60: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
8d70: 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 69  .    HashElem *i
8d80: 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65  ;.    v = sqlite
8d90: 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29  3GetVdbe(pParse)
8da0: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
8db0: 65 6d 20 3d 20 34 3b 0a 20 20 20 20 73 71 6c 69  em = 4;.    sqli
8dc0: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
8dd0: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29  ema(pParse, iDb)
8de0: 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75  ;.    setAllColu
8df0: 6d 6e 4e 61 6d 65 73 28 76 2c 20 34 2c 20 61 7a  mnNames(v, 4, az
8e00: 43 6f 6c 29 3b 20 20 61 73 73 65 72 74 28 20 34  Col);  assert( 4
8e10: 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f  ==ArraySize(azCo
8e20: 6c 29 20 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  l) );.    for(i=
8e30: 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
8e40: 26 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 74  &pDb->pSchema->t
8e50: 62 6c 48 61 73 68 29 3b 20 69 3b 20 69 3d 73 71  blHash); i; i=sq
8e60: 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69 29 29  liteHashNext(i))
8e70: 7b 0a 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70  {.      Table *p
8e80: 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68  Tab = sqliteHash
8e90: 44 61 74 61 28 69 29 3b 0a 20 20 20 20 20 20 73  Data(i);.      s
8ea0: 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c  qlite3VdbeMultiL
8eb0: 6f 61 64 28 76 2c 20 31 2c 20 22 73 73 69 69 22  oad(v, 1, "ssii"
8ec0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 54 61  ,.           pTa
8ed0: 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20  b->zName,.      
8ee0: 20 20 20 20 20 30 2c 0a 20 20 20 20 20 20 20 20       0,.        
8ef0: 20 20 20 70 54 61 62 2d 3e 73 7a 54 61 62 52 6f     pTab->szTabRo
8f00: 77 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 54  w,.           pT
8f10: 61 62 2d 3e 6e 52 6f 77 4c 6f 67 45 73 74 29 3b  ab->nRowLogEst);
8f20: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
8f30: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
8f40: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b  esultRow, 1, 4);
8f50: 0a 20 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d  .      for(pIdx=
8f60: 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49  pTab->pIndex; pI
8f70: 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
8f80: 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20 73  Next){.        s
8f90: 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c  qlite3VdbeMultiL
8fa0: 6f 61 64 28 76 2c 20 32 2c 20 22 73 69 69 22 2c  oad(v, 2, "sii",
8fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78  .           pIdx
8fc0: 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20  ->zName,.       
8fd0: 20 20 20 20 70 49 64 78 2d 3e 73 7a 49 64 78 52      pIdx->szIdxR
8fe0: 6f 77 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70  ow,.           p
8ff0: 49 64 78 2d 3e 61 69 52 6f 77 4c 6f 67 45 73 74  Idx->aiRowLogEst
9000: 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 73 71  [0]);.        sq
9010: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
9020: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
9030: 20 31 2c 20 34 29 3b 0a 20 20 20 20 20 20 7d 0a   1, 4);.      }.
9040: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
9050: 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54  k;..  case PragT
9060: 79 70 5f 49 4e 44 45 58 5f 49 4e 46 4f 3a 20 69  yp_INDEX_INFO: i
9070: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
9080: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20   Index *pIdx;.  
9090: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
90a0: 20 20 20 70 49 64 78 20 3d 20 73 71 6c 69 74 65     pIdx = sqlite
90b0: 33 46 69 6e 64 49 6e 64 65 78 28 64 62 2c 20 7a  3FindIndex(db, z
90c0: 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20  Right, zDb);.   
90d0: 20 69 66 28 20 70 49 64 78 20 29 7b 0a 20 20 20   if( pIdx ){.   
90e0: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
90f0: 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20  char *azCol[] = 
9100: 7b 0a 20 20 20 20 20 20 20 20 20 22 73 65 71 6e  {.         "seqn
9110: 6f 22 2c 20 22 63 69 64 22 2c 20 22 6e 61 6d 65  o", "cid", "name
9120: 22 2c 20 22 64 65 73 63 22 2c 20 22 63 6f 6c 6c  ", "desc", "coll
9130: 22 2c 20 22 6b 65 79 22 0a 20 20 20 20 20 20 7d  ", "key".      }
9140: 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20  ;.      int i;. 
9150: 20 20 20 20 20 69 6e 74 20 6d 78 3b 0a 20 20 20       int mx;.   
9160: 20 20 20 69 66 28 20 70 50 72 61 67 6d 61 2d 3e     if( pPragma->
9170: 69 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20 20  iArg ){.        
9180: 2f 2a 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f  /* PRAGMA index_
9190: 78 69 6e 66 6f 20 28 6e 65 77 65 72 20 76 65 72  xinfo (newer ver
91a0: 73 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65 20 72  sion with more r
91b0: 6f 77 73 20 61 6e 64 20 63 6f 6c 75 6d 6e 73 29  ows and columns)
91c0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 78 20 3d   */.        mx =
91d0: 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 0a   pIdx->nColumn;.
91e0: 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e          pParse->
91f0: 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20  nMem = 6;.      
9200: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f  }else{.        /
9210: 2a 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 69  * PRAGMA index_i
9220: 6e 66 6f 20 28 6c 65 67 61 63 79 20 76 65 72 73  nfo (legacy vers
9230: 69 6f 6e 29 20 2a 2f 0a 20 20 20 20 20 20 20 20  ion) */.        
9240: 6d 78 20 3d 20 70 49 64 78 2d 3e 6e 4b 65 79 43  mx = pIdx->nKeyC
9250: 6f 6c 3b 0a 20 20 20 20 20 20 20 20 70 50 61 72  ol;.        pPar
9260: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20  se->nMem = 3;.  
9270: 20 20 20 20 7d 0a 20 20 20 20 20 20 70 54 61 62      }.      pTab
9280: 20 3d 20 70 49 64 78 2d 3e 70 54 61 62 6c 65 3b   = pIdx->pTable;
9290: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f  .      sqlite3Co
92a0: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
92b0: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
92c0: 20 20 20 61 73 73 65 72 74 28 20 70 50 61 72 73     assert( pPars
92d0: 65 2d 3e 6e 4d 65 6d 3c 3d 41 72 72 61 79 53 69  e->nMem<=ArraySi
92e0: 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20  ze(azCol) );.   
92f0: 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e     setAllColumnN
9300: 61 6d 65 73 28 76 2c 20 70 50 61 72 73 65 2d 3e  ames(v, pParse->
9310: 6e 4d 65 6d 2c 20 61 7a 43 6f 6c 29 3b 0a 20 20  nMem, azCol);.  
9320: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6d      for(i=0; i<m
9330: 78 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  x; i++){.       
9340: 20 69 31 36 20 63 6e 75 6d 20 3d 20 70 49 64 78   i16 cnum = pIdx
9350: 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69 5d 3b 0a 20  ->aiColumn[i];. 
9360: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9370: 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31  beMultiLoad(v, 1
9380: 2c 20 22 69 69 73 22 2c 20 69 2c 20 63 6e 75 6d  , "iis", i, cnum
9390: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
93a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
93b0: 6e 75 6d 3c 30 20 3f 20 30 20 3a 20 70 54 61 62  num<0 ? 0 : pTab
93c0: 2d 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61  ->aCol[cnum].zNa
93d0: 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  me);.        if(
93e0: 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 20 29   pPragma->iArg )
93f0: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
9400: 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64  te3VdbeMultiLoad
9410: 28 76 2c 20 34 2c 20 22 69 73 69 22 2c 0a 20 20  (v, 4, "isi",.  
9420: 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e            pIdx->
9430: 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 2c 0a 20  aSortOrder[i],. 
9440: 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d             pIdx-
9450: 3e 61 7a 43 6f 6c 6c 5b 69 5d 2c 0a 20 20 20 20  >azColl[i],.    
9460: 20 20 20 20 20 20 20 20 69 3c 70 49 64 78 2d 3e          i<pIdx->
9470: 6e 4b 65 79 43 6f 6c 29 3b 0a 20 20 20 20 20 20  nKeyCol);.      
9480: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69    }.        sqli
9490: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
94a0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
94b0: 2c 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 29 3b  , pParse->nMem);
94c0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
94d0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63   }.  break;..  c
94e0: 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45  ase PragTyp_INDE
94f0: 58 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67  X_LIST: if( zRig
9500: 68 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20  ht ){.    Index 
9510: 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65  *pIdx;.    Table
9520: 20 2a 70 54 61 62 3b 0a 20 20 20 20 69 6e 74 20   *pTab;.    int 
9530: 69 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71  i;.    pTab = sq
9540: 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64  lite3FindTable(d
9550: 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b  b, zRight, zDb);
9560: 0a 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b  .    if( pTab ){
9570: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
9580: 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b  nst char *azCol[
9590: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 22 73  ] = {.        "s
95a0: 65 71 22 2c 20 22 6e 61 6d 65 22 2c 20 22 75 6e  eq", "name", "un
95b0: 69 71 75 65 22 2c 20 22 6f 72 69 67 69 6e 22 2c  ique", "origin",
95c0: 20 22 70 61 72 74 69 61 6c 22 0a 20 20 20 20 20   "partial".     
95d0: 20 7d 3b 0a 20 20 20 20 20 20 76 20 3d 20 73 71   };.      v = sq
95e0: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
95f0: 72 73 65 29 3b 0a 20 20 20 20 20 20 70 50 61 72  rse);.      pPar
9600: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 35 3b 0a 20 20  se->nMem = 5;.  
9610: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
9620: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
9630: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  se, iDb);.      
9640: 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65  setAllColumnName
9650: 73 28 76 2c 20 35 2c 20 61 7a 43 6f 6c 29 3b 20  s(v, 5, azCol); 
9660: 20 61 73 73 65 72 74 28 20 35 3d 3d 41 72 72 61   assert( 5==Arra
9670: 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a  ySize(azCol) );.
9680: 20 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70        for(pIdx=p
9690: 54 61 62 2d 3e 70 49 6e 64 65 78 2c 20 69 3d 30  Tab->pIndex, i=0
96a0: 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64  ; pIdx; pIdx=pId
96b0: 78 2d 3e 70 4e 65 78 74 2c 20 69 2b 2b 29 7b 0a  x->pNext, i++){.
96c0: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
96d0: 61 72 20 2a 61 7a 4f 72 69 67 69 6e 5b 5d 20 3d  ar *azOrigin[] =
96e0: 20 7b 20 22 63 22 2c 20 22 75 22 2c 20 22 70 6b   { "c", "u", "pk
96f0: 22 20 7d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  " };.        sql
9700: 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61  ite3VdbeMultiLoa
9710: 64 28 76 2c 20 31 2c 20 22 69 73 69 73 69 22 2c  d(v, 1, "isisi",
9720: 0a 20 20 20 20 20 20 20 20 20 20 20 69 2c 0a 20  .           i,. 
9730: 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e            pIdx->
9740: 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20  zName,.         
9750: 20 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28    IsUniqueIndex(
9760: 70 49 64 78 29 2c 0a 20 20 20 20 20 20 20 20 20  pIdx),.         
9770: 20 20 61 7a 4f 72 69 67 69 6e 5b 70 49 64 78 2d    azOrigin[pIdx-
9780: 3e 69 64 78 54 79 70 65 5d 2c 0a 20 20 20 20 20  >idxType],.     
9790: 20 20 20 20 20 20 70 49 64 78 2d 3e 70 50 61 72        pIdx->pPar
97a0: 74 49 64 78 57 68 65 72 65 21 3d 30 29 3b 0a 20  tIdxWhere!=0);. 
97b0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
97c0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
97d0: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 35 29 3b  esultRow, 1, 5);
97e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
97f0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63   }.  break;..  c
9800: 61 73 65 20 50 72 61 67 54 79 70 5f 44 41 54 41  ase PragTyp_DATA
9810: 42 41 53 45 5f 4c 49 53 54 3a 20 7b 0a 20 20 20  BASE_LIST: {.   
9820: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
9830: 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20  ar *azCol[] = { 
9840: 22 73 65 71 22 2c 20 22 6e 61 6d 65 22 2c 20 22  "seq", "name", "
9850: 66 69 6c 65 22 20 7d 3b 0a 20 20 20 20 69 6e 74  file" };.    int
9860: 20 69 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e   i;.    pParse->
9870: 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73 65  nMem = 3;.    se
9880: 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  tAllColumnNames(
9890: 76 2c 20 33 2c 20 61 7a 43 6f 6c 29 3b 20 61 73  v, 3, azCol); as
98a0: 73 65 72 74 28 20 33 3d 3d 41 72 72 61 79 53 69  sert( 3==ArraySi
98b0: 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20  ze(azCol) );.   
98c0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e   for(i=0; i<db->
98d0: 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nDb; i++){.     
98e0: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e   if( db->aDb[i].
98f0: 70 42 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  pBt==0 ) continu
9900: 65 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e;.      assert(
9910: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
9920: 65 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 73 71  e!=0 );.      sq
9930: 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f  lite3VdbeMultiLo
9940: 61 64 28 76 2c 20 31 2c 20 22 69 73 73 22 2c 0a  ad(v, 1, "iss",.
9950: 20 20 20 20 20 20 20 20 20 69 2c 0a 20 20 20 20           i,.    
9960: 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 5d 2e       db->aDb[i].
9970: 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20  zName,.         
9980: 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 46  sqlite3BtreeGetF
9990: 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44 62 5b  ilename(db->aDb[
99a0: 69 5d 2e 70 42 74 29 29 3b 0a 20 20 20 20 20 20  i].pBt));.      
99b0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
99c0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
99d0: 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20 7d 0a  w, 1, 3);.    }.
99e0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
99f0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4c  case PragTyp_COL
9a00: 4c 41 54 49 4f 4e 5f 4c 49 53 54 3a 20 7b 0a 20  LATION_LIST: {. 
9a10: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
9a20: 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20  char *azCol[] = 
9a30: 7b 20 22 73 65 71 22 2c 20 22 6e 61 6d 65 22 20  { "seq", "name" 
9a40: 7d 3b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30  };.    int i = 0
9a50: 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a  ;.    HashElem *
9a60: 70 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  p;.    pParse->n
9a70: 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73 65 74  Mem = 2;.    set
9a80: 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76  AllColumnNames(v
9a90: 2c 20 32 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73  , 2, azCol); ass
9aa0: 65 72 74 28 20 32 3d 3d 41 72 72 61 79 53 69 7a  ert( 2==ArraySiz
9ab0: 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20  e(azCol) );.    
9ac0: 66 6f 72 28 70 3d 73 71 6c 69 74 65 48 61 73 68  for(p=sqliteHash
9ad0: 46 69 72 73 74 28 26 64 62 2d 3e 61 43 6f 6c 6c  First(&db->aColl
9ae0: 53 65 71 29 3b 20 70 3b 20 70 3d 73 71 6c 69 74  Seq); p; p=sqlit
9af0: 65 48 61 73 68 4e 65 78 74 28 70 29 29 7b 0a 20  eHashNext(p)){. 
9b00: 20 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43       CollSeq *pC
9b10: 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65 71 20 2a  oll = (CollSeq *
9b20: 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28  )sqliteHashData(
9b30: 70 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  p);.      sqlite
9b40: 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76  3VdbeMultiLoad(v
9b50: 2c 20 31 2c 20 22 69 73 22 2c 20 69 2b 2b 2c 20  , 1, "is", i++, 
9b60: 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 29 3b 0a 20  pColl->zName);. 
9b70: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9b80: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
9b90: 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20  ultRow, 1, 2);. 
9ba0: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
9bb0: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
9bc0: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50  TE_OMIT_SCHEMA_P
9bd0: 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64  RAGMAS */..#ifnd
9be0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
9bf0: 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 63 61 73  OREIGN_KEY.  cas
9c00: 65 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47  e PragTyp_FOREIG
9c10: 4e 5f 4b 45 59 5f 4c 49 53 54 3a 20 69 66 28 20  N_KEY_LIST: if( 
9c20: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 46 4b  zRight ){.    FK
9c30: 65 79 20 2a 70 46 4b 3b 0a 20 20 20 20 54 61 62  ey *pFK;.    Tab
9c40: 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 54  le *pTab;.    pT
9c50: 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  ab = sqlite3Find
9c60: 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74  Table(db, zRight
9c70: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20  , zDb);.    if( 
9c80: 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76 20  pTab ){.      v 
9c90: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65  = sqlite3GetVdbe
9ca0: 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20  (pParse);.      
9cb0: 70 46 4b 20 3d 20 70 54 61 62 2d 3e 70 46 4b 65  pFK = pTab->pFKe
9cc0: 79 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b  y;.      if( pFK
9cd0: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 74 61 74   ){.        stat
9ce0: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  ic const char *a
9cf0: 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  zCol[] = {.     
9d00: 20 20 20 20 20 20 22 69 64 22 2c 20 22 73 65 71        "id", "seq
9d10: 22 2c 20 22 74 61 62 6c 65 22 2c 20 22 66 72 6f  ", "table", "fro
9d20: 6d 22 2c 20 22 74 6f 22 2c 20 22 6f 6e 5f 75 70  m", "to", "on_up
9d30: 64 61 74 65 22 2c 20 22 6f 6e 5f 64 65 6c 65 74  date", "on_delet
9d40: 65 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 22  e",.           "
9d50: 6d 61 74 63 68 22 0a 20 20 20 20 20 20 20 20 7d  match".        }
9d60: 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 20  ;.        int i 
9d70: 3d 20 30 3b 20 0a 20 20 20 20 20 20 20 20 70 50  = 0; .        pP
9d80: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 38 3b 0a  arse->nMem = 8;.
9d90: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 43          sqlite3C
9da0: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
9db0: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
9dc0: 20 20 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75        setAllColu
9dd0: 6d 6e 4e 61 6d 65 73 28 76 2c 20 38 2c 20 61 7a  mnNames(v, 8, az
9de0: 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 38 3d  Col); assert( 8=
9df0: 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c  =ArraySize(azCol
9e00: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 77 68 69  ) );.        whi
9e10: 6c 65 28 70 46 4b 29 7b 0a 20 20 20 20 20 20 20  le(pFK){.       
9e20: 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20     int j;.      
9e30: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70      for(j=0; j<p
9e40: 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a  FK->nCol; j++){.
9e50: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
9e60: 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64  te3VdbeMultiLoad
9e70: 28 76 2c 20 31 2c 20 22 69 69 73 73 73 73 73 73  (v, 1, "iissssss
9e80: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
9e90: 20 20 20 20 20 20 69 2c 0a 20 20 20 20 20 20 20        i,.       
9ea0: 20 20 20 20 20 20 20 20 20 20 20 20 6a 2c 0a 20              j,. 
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ec0: 20 20 70 46 4b 2d 3e 7a 54 6f 2c 0a 20 20 20 20    pFK->zTo,.    
9ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
9ee0: 54 61 62 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e 61  Tab->aCol[pFK->a
9ef0: 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e  Col[j].iFrom].zN
9f00: 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ame,.           
9f10: 20 20 20 20 20 20 20 20 70 46 4b 2d 3e 61 43 6f          pFK->aCo
9f20: 6c 5b 6a 5d 2e 7a 43 6f 6c 2c 0a 20 20 20 20 20  l[j].zCol,.     
9f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 63                ac
9f40: 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41  tionName(pFK->aA
9f50: 63 74 69 6f 6e 5b 31 5d 29 2c 20 20 2f 2a 20 4f  ction[1]),  /* O
9f60: 4e 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 20 20  N UPDATE */.    
9f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
9f80: 63 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61  ctionName(pFK->a
9f90: 41 63 74 69 6f 6e 5b 30 5d 29 2c 20 20 2f 2a 20  Action[0]),  /* 
9fa0: 4f 4e 20 44 45 4c 45 54 45 20 2a 2f 0a 20 20 20  ON DELETE */.   
9fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fc0: 22 4e 4f 4e 45 22 29 3b 0a 20 20 20 20 20 20 20  "NONE");.       
9fd0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9fe0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
9ff0: 75 6c 74 52 6f 77 2c 20 31 2c 20 38 29 3b 0a 20  ultRow, 1, 8);. 
a000: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
a010: 20 20 20 20 20 2b 2b 69 3b 0a 20 20 20 20 20 20       ++i;.      
a020: 20 20 20 20 70 46 4b 20 3d 20 70 46 4b 2d 3e 70      pFK = pFK->p
a030: 4e 65 78 74 46 72 6f 6d 3b 0a 20 20 20 20 20 20  NextFrom;.      
a040: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
a050: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  }.  }.  break;.#
a060: 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
a070: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
a080: 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23  REIGN_KEY) */..#
a090: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a0a0: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 23  IT_FOREIGN_KEY.#
a0b0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a0c0: 49 54 5f 54 52 49 47 47 45 52 0a 20 20 63 61 73  IT_TRIGGER.  cas
a0d0: 65 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47  e PragTyp_FOREIG
a0e0: 4e 5f 4b 45 59 5f 43 48 45 43 4b 3a 20 7b 0a 20  N_KEY_CHECK: {. 
a0f0: 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b 20 20 20     FKey *pFK;   
a100: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 66            /* A f
a110: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
a120: 72 61 69 6e 74 20 2a 2f 0a 20 20 20 20 54 61 62  raint */.    Tab
a130: 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
a140: 20 20 20 20 2f 2a 20 43 68 69 6c 64 20 74 61 62      /* Child tab
a150: 6c 65 20 63 6f 6e 74 61 69 6e 20 22 52 45 46 45  le contain "REFE
a160: 52 45 4e 43 45 53 22 20 6b 65 79 77 6f 72 64 20  RENCES" keyword 
a170: 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 50  */.    Table *pP
a180: 61 72 65 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a  arent;        /*
a190: 20 50 61 72 65 6e 74 20 74 61 62 6c 65 20 74 68   Parent table th
a1a0: 61 74 20 63 68 69 6c 64 20 70 6f 69 6e 74 73 20  at child points 
a1b0: 74 6f 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20  to */.    Index 
a1c0: 2a 70 49 64 78 3b 20 20 20 20 20 20 20 20 20 20  *pIdx;          
a1d0: 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 74 68 65   /* Index in the
a1e0: 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20 2a 2f   parent table */
a1f0: 0a 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20  .    int i;     
a200: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
a210: 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 46 6f  oop counter:  Fo
a220: 72 65 69 67 6e 20 6b 65 79 20 6e 75 6d 62 65 72  reign key number
a230: 20 66 6f 72 20 70 54 61 62 20 2a 2f 0a 20 20 20   for pTab */.   
a240: 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20   int j;         
a250: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
a260: 63 6f 75 6e 74 65 72 3a 20 20 46 69 65 6c 64 20  counter:  Field 
a270: 6f 66 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  of the foreign k
a280: 65 79 20 2a 2f 0a 20 20 20 20 48 61 73 68 45 6c  ey */.    HashEl
a290: 65 6d 20 2a 6b 3b 20 20 20 20 20 20 20 20 20 20  em *k;          
a2a0: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
a2b0: 3a 20 20 4e 65 78 74 20 74 61 62 6c 65 20 69 6e  :  Next table in
a2c0: 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 20 20 69   schema */.    i
a2d0: 6e 74 20 78 3b 20 20 20 20 20 20 20 20 20 20 20  nt x;           
a2e0: 20 20 20 20 20 20 2f 2a 20 72 65 73 75 6c 74 20        /* result 
a2f0: 76 61 72 69 61 62 6c 65 20 2a 2f 0a 20 20 20 20  variable */.    
a300: 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20  int regResult;  
a310: 20 20 20 20 20 20 20 2f 2a 20 33 20 72 65 67 69         /* 3 regi
a320: 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61 20  sters to hold a 
a330: 72 65 73 75 6c 74 20 72 6f 77 20 2a 2f 0a 20 20  result row */.  
a340: 20 20 69 6e 74 20 72 65 67 4b 65 79 3b 20 20 20    int regKey;   
a350: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
a360: 73 74 65 72 20 74 6f 20 68 6f 6c 64 20 6b 65 79  ster to hold key
a370: 20 66 6f 72 20 63 68 65 63 6b 69 6e 67 20 74 68   for checking th
a380: 65 20 46 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20  e FK */.    int 
a390: 72 65 67 52 6f 77 3b 20 20 20 20 20 20 20 20 20  regRow;         
a3a0: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20     /* Registers 
a3b0: 74 6f 20 68 6f 6c 64 20 61 20 72 6f 77 20 66 72  to hold a row fr
a3c0: 6f 6d 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69  om pTab */.    i
a3d0: 6e 74 20 61 64 64 72 54 6f 70 3b 20 20 20 20 20  nt addrTop;     
a3e0: 20 20 20 20 20 20 2f 2a 20 54 6f 70 20 6f 66 20        /* Top of 
a3f0: 61 20 6c 6f 6f 70 20 63 68 65 63 6b 69 6e 67 20  a loop checking 
a400: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 2a 2f 0a  foreign keys */.
a410: 20 20 20 20 69 6e 74 20 61 64 64 72 4f 6b 3b 20      int addrOk; 
a420: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75             /* Ju
a430: 6d 70 20 68 65 72 65 20 69 66 20 74 68 65 20 6b  mp here if the k
a440: 65 79 20 69 73 20 4f 4b 20 2a 2f 0a 20 20 20 20  ey is OK */.    
a450: 69 6e 74 20 2a 61 69 43 6f 6c 73 3b 20 20 20 20  int *aiCols;    
a460: 20 20 20 20 20 20 20 2f 2a 20 63 68 69 6c 64 20         /* child 
a470: 74 6f 20 70 61 72 65 6e 74 20 63 6f 6c 75 6d 6e  to parent column
a480: 20 6d 61 70 70 69 6e 67 20 2a 2f 0a 20 20 20 20   mapping */.    
a490: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
a4a0: 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22  r *azCol[] = { "
a4b0: 74 61 62 6c 65 22 2c 20 22 72 6f 77 69 64 22 2c  table", "rowid",
a4c0: 20 22 70 61 72 65 6e 74 22 2c 20 22 66 6b 69 64   "parent", "fkid
a4d0: 22 20 7d 3b 0a 0a 20 20 20 20 72 65 67 52 65 73  " };..    regRes
a4e0: 75 6c 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e 4d  ult = pParse->nM
a4f0: 65 6d 2b 31 3b 0a 20 20 20 20 70 50 61 72 73 65  em+1;.    pParse
a500: 2d 3e 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20 20  ->nMem += 4;.   
a510: 20 72 65 67 4b 65 79 20 3d 20 2b 2b 70 50 61 72   regKey = ++pPar
a520: 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72 65  se->nMem;.    re
a530: 67 52 6f 77 20 3d 20 2b 2b 70 50 61 72 73 65 2d  gRow = ++pParse-
a540: 3e 6e 4d 65 6d 3b 0a 20 20 20 20 76 20 3d 20 73  >nMem;.    v = s
a550: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
a560: 61 72 73 65 29 3b 0a 20 20 20 20 73 65 74 41 6c  arse);.    setAl
a570: 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20  lColumnNames(v, 
a580: 34 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72  4, azCol); asser
a590: 74 28 20 34 3d 3d 41 72 72 61 79 53 69 7a 65 28  t( 4==ArraySize(
a5a0: 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 73 71  azCol) );.    sq
a5b0: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
a5c0: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
a5d0: 62 29 3b 0a 20 20 20 20 6b 20 3d 20 73 71 6c 69  b);.    k = sqli
a5e0: 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62 2d  teHashFirst(&db-
a5f0: 3e 61 44 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d  >aDb[iDb].pSchem
a600: 61 2d 3e 74 62 6c 48 61 73 68 29 3b 0a 20 20 20  a->tblHash);.   
a610: 20 77 68 69 6c 65 28 20 6b 20 29 7b 0a 20 20 20   while( k ){.   
a620: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
a630: 0a 20 20 20 20 20 20 20 20 70 54 61 62 20 3d 20  .        pTab = 
a640: 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
a650: 6c 65 28 70 50 61 72 73 65 2c 20 30 2c 20 7a 52  le(pParse, 0, zR
a660: 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20  ight, zDb);.    
a670: 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20      k = 0;.     
a680: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
a690: 70 54 61 62 20 3d 20 28 54 61 62 6c 65 2a 29 73  pTab = (Table*)s
a6a0: 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 6b 29  qliteHashData(k)
a6b0: 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 73 71  ;.        k = sq
a6c0: 6c 69 74 65 48 61 73 68 4e 65 78 74 28 6b 29 3b  liteHashNext(k);
a6d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
a6e0: 66 28 20 70 54 61 62 3d 3d 30 20 7c 7c 20 70 54  f( pTab==0 || pT
a6f0: 61 62 2d 3e 70 46 4b 65 79 3d 3d 30 20 29 20 63  ab->pFKey==0 ) c
a700: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73  ontinue;.      s
a710: 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
a720: 70 50 61 72 73 65 2c 20 69 44 62 2c 20 70 54 61  pParse, iDb, pTa
a730: 62 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 54 61 62  b->tnum, 0, pTab
a740: 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ->zName);.      
a750: 69 66 28 20 70 54 61 62 2d 3e 6e 43 6f 6c 2b 72  if( pTab->nCol+r
a760: 65 67 52 6f 77 3e 70 50 61 72 73 65 2d 3e 6e 4d  egRow>pParse->nM
a770: 65 6d 20 29 20 70 50 61 72 73 65 2d 3e 6e 4d 65  em ) pParse->nMe
a780: 6d 20 3d 20 70 54 61 62 2d 3e 6e 43 6f 6c 20 2b  m = pTab->nCol +
a790: 20 72 65 67 52 6f 77 3b 0a 20 20 20 20 20 20 73   regRow;.      s
a7a0: 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28  qlite3OpenTable(
a7b0: 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 2c 20  pParse, 0, iDb, 
a7c0: 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61  pTab, OP_OpenRea
a7d0: 64 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  d);.      sqlite
a7e0: 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28  3VdbeLoadString(
a7f0: 76 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 70 54  v, regResult, pT
a800: 61 62 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  ab->zName);.    
a810: 20 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70    for(i=1, pFK=p
a820: 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b  Tab->pFKey; pFK;
a830: 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70   i++, pFK=pFK->p
a840: 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20  NextFrom){.     
a850: 20 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c     pParent = sql
a860: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
a870: 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29  , pFK->zTo, zDb)
a880: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50  ;.        if( pP
a890: 61 72 65 6e 74 3d 3d 30 20 29 20 63 6f 6e 74 69  arent==0 ) conti
a8a0: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 70 49 64  nue;.        pId
a8b0: 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 73  x = 0;.        s
a8c0: 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
a8d0: 70 50 61 72 73 65 2c 20 69 44 62 2c 20 70 50 61  pParse, iDb, pPa
a8e0: 72 65 6e 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70  rent->tnum, 0, p
a8f0: 50 61 72 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a  Parent->zName);.
a900: 20 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69          x = sqli
a910: 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
a920: 28 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74  (pParse, pParent
a930: 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 30 29  , pFK, &pIdx, 0)
a940: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 78 3d  ;.        if( x=
a950: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
a960: 69 66 28 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20  if( pIdx==0 ){. 
a970: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
a980: 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72  e3OpenTable(pPar
a990: 73 65 2c 20 69 2c 20 69 44 62 2c 20 70 50 61 72  se, i, iDb, pPar
a9a0: 65 6e 74 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64  ent, OP_OpenRead
a9b0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  );.          }el
a9c0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
a9d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
a9e0: 33 28 76 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64  3(v, OP_OpenRead
a9f0: 2c 20 69 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c  , i, pIdx->tnum,
aa00: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 20   iDb);.         
aa10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
aa20: 74 50 34 4b 65 79 49 6e 66 6f 28 70 50 61 72 73  tP4KeyInfo(pPars
aa30: 65 2c 20 70 49 64 78 29 3b 0a 20 20 20 20 20 20  e, pIdx);.      
aa40: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65      }.        }e
aa50: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6b  lse{.          k
aa60: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
aa70: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
aa80: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
aa90: 73 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e 6e  ssert( pParse->n
aaa0: 45 72 72 3e 30 20 7c 7c 20 70 46 4b 3d 3d 30 20  Err>0 || pFK==0 
aab0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b  );.      if( pFK
aac0: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
aad0: 69 66 28 20 70 50 61 72 73 65 2d 3e 6e 54 61 62  if( pParse->nTab
aae0: 3c 69 20 29 20 70 50 61 72 73 65 2d 3e 6e 54 61  <i ) pParse->nTa
aaf0: 62 20 3d 20 69 3b 0a 20 20 20 20 20 20 61 64 64  b = i;.      add
ab00: 72 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64  rTop = sqlite3Vd
ab10: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52  beAddOp1(v, OP_R
ab20: 65 77 69 6e 64 2c 20 30 29 3b 20 56 64 62 65 43  ewind, 0); VdbeC
ab30: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
ab40: 20 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70    for(i=1, pFK=p
ab50: 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b  Tab->pFKey; pFK;
ab60: 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70   i++, pFK=pFK->p
ab70: 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20  NextFrom){.     
ab80: 20 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c     pParent = sql
ab90: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
aba0: 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29  , pFK->zTo, zDb)
abb0: 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20 3d  ;.        pIdx =
abc0: 20 30 3b 0a 20 20 20 20 20 20 20 20 61 69 43 6f   0;.        aiCo
abd0: 6c 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  ls = 0;.        
abe0: 69 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a 20  if( pParent ){. 
abf0: 20 20 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c           x = sql
ac00: 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
ac10: 78 28 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e  x(pParse, pParen
ac20: 74 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 26  t, pFK, &pIdx, &
ac30: 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20 20  aiCols);.       
ac40: 20 20 20 61 73 73 65 72 74 28 20 78 3d 3d 30 20     assert( x==0 
ac50: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
ac60: 20 20 20 20 20 61 64 64 72 4f 6b 20 3d 20 73 71       addrOk = sq
ac70: 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62  lite3VdbeMakeLab
ac80: 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20 69  el(v);.        i
ac90: 66 28 20 70 50 61 72 65 6e 74 20 26 26 20 70 49  f( pParent && pI
aca0: 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  dx==0 ){.       
acb0: 20 20 20 69 6e 74 20 69 4b 65 79 20 3d 20 70 46     int iKey = pF
acc0: 4b 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d  K->aCol[0].iFrom
acd0: 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  ;.          asse
ace0: 72 74 28 20 69 4b 65 79 3e 3d 30 20 26 26 20 69  rt( iKey>=0 && i
acf0: 4b 65 79 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29  Key<pTab->nCol )
ad00: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
ad10: 69 4b 65 79 21 3d 70 54 61 62 2d 3e 69 50 4b 65  iKey!=pTab->iPKe
ad20: 79 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  y ){.           
ad30: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ad40: 70 33 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c  p3(v, OP_Column,
ad50: 20 30 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f 77   0, iKey, regRow
ad60: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
ad70: 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61  qlite3ColumnDefa
ad80: 75 6c 74 28 76 2c 20 70 54 61 62 2c 20 69 4b 65  ult(v, pTab, iKe
ad90: 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20  y, regRow);.    
ada0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
adb0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
adc0: 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2c 20  IsNull, regRow, 
add0: 61 64 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76  addrOk); VdbeCov
ade0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
adf0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ae00: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4d 75  eAddOp2(v, OP_Mu
ae10: 73 74 42 65 49 6e 74 2c 20 72 65 67 52 6f 77 2c  stBeInt, regRow,
ae20: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
ae30: 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72   sqlite3VdbeCurr
ae40: 65 6e 74 41 64 64 72 28 76 29 2b 33 29 3b 20 56  entAddr(v)+3); V
ae50: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
ae60: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
ae70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
ae80: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
ae90: 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72  , OP_Rowid, 0, r
aea0: 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20  egRow);.        
aeb0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71    }.          sq
aec0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
aed0: 76 2c 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 2c  v, OP_NotExists,
aee0: 20 69 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 20   i, 0, regRow); 
aef0: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
af00: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
af10: 65 33 56 64 62 65 47 6f 74 6f 28 76 2c 20 61 64  e3VdbeGoto(v, ad
af20: 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20  drOk);.         
af30: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
af40: 48 65 72 65 28 76 2c 20 73 71 6c 69 74 65 33 56  Here(v, sqlite3V
af50: 64 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76  dbeCurrentAddr(v
af60: 29 2d 32 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  )-2);.        }e
af70: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66  lse{.          f
af80: 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e  or(j=0; j<pFK->n
af90: 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  Col; j++){.     
afa0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
afb0: 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
afc0: 66 54 61 62 6c 65 28 76 2c 20 70 54 61 62 2c 20  fTable(v, pTab, 
afd0: 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  0,.             
afe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
aff0: 69 43 6f 6c 73 20 3f 20 61 69 43 6f 6c 73 5b 6a  iCols ? aiCols[j
b000: 5d 20 3a 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d  ] : pFK->aCol[j]
b010: 2e 69 46 72 6f 6d 2c 20 72 65 67 52 6f 77 2b 6a  .iFrom, regRow+j
b020: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
b030: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
b040: 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72  (v, OP_IsNull, r
b050: 65 67 52 6f 77 2b 6a 2c 20 61 64 64 72 4f 6b 29  egRow+j, addrOk)
b060: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
b070: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
b080: 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61           if( pPa
b090: 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20  rent ){.        
b0a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
b0b0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 4d 61 6b 65  ddOp4(v, OP_Make
b0c0: 52 65 63 6f 72 64 2c 20 72 65 67 52 6f 77 2c 20  Record, regRow, 
b0d0: 70 46 4b 2d 3e 6e 43 6f 6c 2c 20 72 65 67 4b 65  pFK->nCol, regKe
b0e0: 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y,.             
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b100: 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66   sqlite3IndexAff
b110: 69 6e 69 74 79 53 74 72 28 64 62 2c 70 49 64 78  inityStr(db,pIdx
b120: 29 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 29 3b 0a 20  ), pFK->nCol);. 
b130: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
b140: 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28  e3VdbeAddOp4Int(
b150: 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 2c 20  v, OP_Found, i, 
b160: 61 64 64 72 4f 6b 2c 20 72 65 67 4b 65 79 2c 20  addrOk, regKey, 
b170: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
b180: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
b190: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
b1a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73       }.        s
b1b0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
b1c0: 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c  (v, OP_Rowid, 0,
b1d0: 20 72 65 67 52 65 73 75 6c 74 2b 31 29 3b 0a 20   regResult+1);. 
b1e0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b1f0: 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 72  beMultiLoad(v, r
b200: 65 67 52 65 73 75 6c 74 2b 32 2c 20 22 73 69 22  egResult+2, "si"
b210: 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 69 2d 31 29  , pFK->zTo, i-1)
b220: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
b230: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
b240: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 72 65 67  P_ResultRow, reg
b250: 52 65 73 75 6c 74 2c 20 34 29 3b 0a 20 20 20 20  Result, 4);.    
b260: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52      sqlite3VdbeR
b270: 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20 61  esolveLabel(v, a
b280: 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20  ddrOk);.        
b290: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
b2a0: 2c 20 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20  , aiCols);.     
b2b0: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
b2c0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
b2d0: 5f 4e 65 78 74 2c 20 30 2c 20 61 64 64 72 54 6f  _Next, 0, addrTo
b2e0: 70 2b 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61  p+1); VdbeCovera
b2f0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71 6c  ge(v);.      sql
b300: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
b310: 28 76 2c 20 61 64 64 72 54 6f 70 29 3b 0a 20 20  (v, addrTop);.  
b320: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
b330: 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
b340: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
b350: 54 52 49 47 47 45 52 29 20 2a 2f 0a 23 65 6e 64  TRIGGER) */.#end
b360: 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
b370: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
b380: 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e  GN_KEY) */..#ifn
b390: 64 65 66 20 4e 44 45 42 55 47 0a 20 20 63 61 73  def NDEBUG.  cas
b3a0: 65 20 50 72 61 67 54 79 70 5f 50 41 52 53 45 52  e PragTyp_PARSER
b3b0: 5f 54 52 41 43 45 3a 20 7b 0a 20 20 20 20 69 66  _TRACE: {.    if
b3c0: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
b3d0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 65 74    if( sqlite3Get
b3e0: 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20  Boolean(zRight, 
b3f0: 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  0) ){.        sq
b400: 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65  lite3ParserTrace
b410: 28 73 74 64 6f 75 74 2c 20 22 70 61 72 73 65 72  (stdout, "parser
b420: 3a 20 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  : ");.      }els
b430: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
b440: 65 33 50 61 72 73 65 72 54 72 61 63 65 28 30 2c  e3ParserTrace(0,
b450: 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   0);.      }.   
b460: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
b470: 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 52 65 69  #endif..  /* Rei
b480: 6e 73 74 61 6c 6c 20 74 68 65 20 4c 49 4b 45 20  nstall the LIKE 
b490: 61 6e 64 20 47 4c 4f 42 20 66 75 6e 63 74 69 6f  and GLOB functio
b4a0: 6e 73 2e 20 20 54 68 65 20 76 61 72 69 61 6e 74  ns.  The variant
b4b0: 20 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a 20 75 73   of LIKE.  ** us
b4c0: 65 64 20 77 69 6c 6c 20 62 65 20 63 61 73 65 20  ed will be case 
b4d0: 73 65 6e 73 69 74 69 76 65 20 6f 72 20 6e 6f 74  sensitive or not
b4e0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68   depending on th
b4f0: 65 20 52 48 53 2e 0a 20 20 2a 2f 0a 20 20 63 61  e RHS..  */.  ca
b500: 73 65 20 50 72 61 67 54 79 70 5f 43 41 53 45 5f  se PragTyp_CASE_
b510: 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 3a 20  SENSITIVE_LIKE: 
b520: 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
b530: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
b540: 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e  3RegisterLikeFun
b550: 63 74 69 6f 6e 73 28 64 62 2c 20 73 71 6c 69 74  ctions(db, sqlit
b560: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69  e3GetBoolean(zRi
b570: 67 68 74 2c 20 30 29 29 3b 0a 20 20 20 20 7d 0a  ght, 0));.    }.
b580: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 23 69    }.  break;..#i
b590: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 49 4e 54  fndef SQLITE_INT
b5a0: 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52  EGRITY_CHECK_ERR
b5b0: 4f 52 5f 4d 41 58 0a 23 20 64 65 66 69 6e 65 20  OR_MAX.# define 
b5c0: 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59  SQLITE_INTEGRITY
b5d0: 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58  _CHECK_ERROR_MAX
b5e0: 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66   100.#endif..#if
b5f0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
b600: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
b610: 0a 20 20 2f 2a 20 50 72 61 67 6d 61 20 22 71 75  .  /* Pragma "qu
b620: 69 63 6b 5f 63 68 65 63 6b 22 20 69 73 20 72 65  ick_check" is re
b630: 64 75 63 65 64 20 76 65 72 73 69 6f 6e 20 6f 66  duced version of
b640: 20 0a 20 20 2a 2a 20 69 6e 74 65 67 72 69 74 79   .  ** integrity
b650: 5f 63 68 65 63 6b 20 64 65 73 69 67 6e 65 64 20  _check designed 
b660: 74 6f 20 64 65 74 65 63 74 20 6d 6f 73 74 20 64  to detect most d
b670: 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69  atabase corrupti
b680: 6f 6e 0a 20 20 2a 2a 20 77 69 74 68 6f 75 74 20  on.  ** without 
b690: 6d 6f 73 74 20 6f 66 20 74 68 65 20 6f 76 65 72  most of the over
b6a0: 68 65 61 64 20 6f 66 20 61 20 66 75 6c 6c 20 69  head of a full i
b6b0: 6e 74 65 67 72 69 74 79 2d 63 68 65 63 6b 2e 0a  ntegrity-check..
b6c0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
b6d0: 54 79 70 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  Typ_INTEGRITY_CH
b6e0: 45 43 4b 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69  ECK: {.    int i
b6f0: 2c 20 6a 2c 20 61 64 64 72 2c 20 6d 78 45 72 72  , j, addr, mxErr
b700: 3b 0a 0a 20 20 20 20 69 6e 74 20 69 73 51 75 69  ;..    int isQui
b710: 63 6b 20 3d 20 28 73 71 6c 69 74 65 33 54 6f 6c  ck = (sqlite3Tol
b720: 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d  ower(zLeft[0])==
b730: 27 71 27 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66  'q');..    /* If
b740: 20 74 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d   the PRAGMA comm
b750: 61 6e 64 20 77 61 73 20 6f 66 20 74 68 65 20 66  and was of the f
b760: 6f 72 6d 20 22 50 52 41 47 4d 41 20 3c 64 62 3e  orm "PRAGMA <db>
b770: 2e 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b  .integrity_check
b780: 22 2c 0a 20 20 20 20 2a 2a 20 74 68 65 6e 20 69  ",.    ** then i
b790: 44 62 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  Db is set to the
b7a0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
b7b0: 74 61 62 61 73 65 20 69 64 65 6e 74 69 66 69 65  tabase identifie
b7c0: 64 20 62 79 20 3c 64 62 3e 2e 0a 20 20 20 20 2a  d by <db>..    *
b7d0: 2a 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20  * In this case, 
b7e0: 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 6f 66  the integrity of
b7f0: 20 64 61 74 61 62 61 73 65 20 69 44 62 20 6f 6e   database iDb on
b800: 6c 79 20 69 73 20 76 65 72 69 66 69 65 64 20 62  ly is verified b
b810: 79 0a 20 20 20 20 2a 2a 20 74 68 65 20 56 44 42  y.    ** the VDB
b820: 45 20 63 72 65 61 74 65 64 20 62 65 6c 6f 77 2e  E created below.
b830: 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4f  .    **.    ** O
b840: 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68 65  therwise, if the
b850: 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73 69 6d   command was sim
b860: 70 6c 79 20 22 50 52 41 47 4d 41 20 69 6e 74 65  ply "PRAGMA inte
b870: 67 72 69 74 79 5f 63 68 65 63 6b 22 20 28 6f 72  grity_check" (or
b880: 0a 20 20 20 20 2a 2a 20 22 50 52 41 47 4d 41 20  .    ** "PRAGMA 
b890: 71 75 69 63 6b 5f 63 68 65 63 6b 22 29 2c 20 74  quick_check"), t
b8a0: 68 65 6e 20 69 44 62 20 69 73 20 73 65 74 20 74  hen iDb is set t
b8b0: 6f 20 30 2e 20 49 6e 20 74 68 69 73 20 63 61 73  o 0. In this cas
b8c0: 65 2c 20 73 65 74 20 69 44 62 0a 20 20 20 20 2a  e, set iDb.    *
b8d0: 2a 20 74 6f 20 2d 31 20 68 65 72 65 2c 20 74 6f  * to -1 here, to
b8e0: 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 20 74   indicate that t
b8f0: 68 65 20 56 44 42 45 20 73 68 6f 75 6c 64 20 76  he VDBE should v
b900: 65 72 69 66 79 20 74 68 65 20 69 6e 74 65 67 72  erify the integr
b910: 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 61 6c  ity.    ** of al
b920: 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
b930: 61 73 65 73 2e 20 20 2a 2f 0a 20 20 20 20 61 73  ases.  */.    as
b940: 73 65 72 74 28 20 69 44 62 3e 3d 30 20 29 3b 0a  sert( iDb>=0 );.
b950: 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d      assert( iDb=
b960: 3d 30 20 7c 7c 20 70 49 64 32 2d 3e 7a 20 29 3b  =0 || pId2->z );
b970: 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 7a  .    if( pId2->z
b980: 3d 3d 30 20 29 20 69 44 62 20 3d 20 2d 31 3b 0a  ==0 ) iDb = -1;.
b990: 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  .    /* Initiali
b9a0: 7a 65 20 74 68 65 20 56 44 42 45 20 70 72 6f 67  ze the VDBE prog
b9b0: 72 61 6d 20 2a 2f 0a 20 20 20 20 70 50 61 72 73  ram */.    pPars
b9c0: 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20  e->nMem = 6;.   
b9d0: 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d   setOneColumnNam
b9e0: 65 28 76 2c 20 22 69 6e 74 65 67 72 69 74 79 5f  e(v, "integrity_
b9f0: 63 68 65 63 6b 22 29 3b 0a 0a 20 20 20 20 2f 2a  check");..    /*
ba00: 20 53 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d   Set the maximum
ba10: 20 65 72 72 6f 72 20 63 6f 75 6e 74 20 2a 2f 0a   error count */.
ba20: 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49      mxErr = SQLI
ba30: 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  TE_INTEGRITY_CHE
ba40: 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20  CK_ERROR_MAX;.  
ba50: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
ba60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 65 74        sqlite3Get
ba70: 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 6d  Int32(zRight, &m
ba80: 78 45 72 72 29 3b 0a 20 20 20 20 20 20 69 66 28  xErr);.      if(
ba90: 20 6d 78 45 72 72 3c 3d 30 20 29 7b 0a 20 20 20   mxErr<=0 ){.   
baa0: 20 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c       mxErr = SQL
bab0: 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  ITE_INTEGRITY_CH
bac0: 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20  ECK_ERROR_MAX;. 
bad0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
bae0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
baf0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
bb00: 2c 20 6d 78 45 72 72 2c 20 31 29 3b 20 20 2f 2a  , mxErr, 1);  /*
bb10: 20 72 65 67 5b 31 5d 20 68 6f 6c 64 73 20 65 72   reg[1] holds er
bb20: 72 6f 72 73 20 6c 65 66 74 20 2a 2f 0a 0a 20 20  rors left */..  
bb30: 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67    /* Do an integ
bb40: 72 69 74 79 20 63 68 65 63 6b 20 6f 6e 20 65 61  rity check on ea
bb50: 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ch database file
bb60: 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   */.    for(i=0;
bb70: 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
bb80: 7b 0a 20 20 20 20 20 20 48 61 73 68 45 6c 65 6d  {.      HashElem
bb90: 20 2a 78 3b 0a 20 20 20 20 20 20 48 61 73 68 20   *x;.      Hash 
bba0: 2a 70 54 62 6c 73 3b 0a 20 20 20 20 20 20 69 6e  *pTbls;.      in
bbb0: 74 20 2a 61 52 6f 6f 74 3b 0a 20 20 20 20 20 20  t *aRoot;.      
bbc0: 69 6e 74 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20  int cnt = 0;.   
bbd0: 20 20 20 69 6e 74 20 6d 78 49 64 78 20 3d 20 30     int mxIdx = 0
bbe0: 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 49 64 78  ;.      int nIdx
bbf0: 3b 0a 0a 20 20 20 20 20 20 69 66 28 20 4f 4d 49  ;..      if( OMI
bc00: 54 5f 54 45 4d 50 44 42 20 26 26 20 69 3d 3d 31  T_TEMPDB && i==1
bc10: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
bc20: 20 20 20 69 66 28 20 69 44 62 3e 3d 30 20 26 26     if( iDb>=0 &&
bc30: 20 69 21 3d 69 44 62 20 29 20 63 6f 6e 74 69 6e   i!=iDb ) contin
bc40: 75 65 3b 0a 0a 20 20 20 20 20 20 73 71 6c 69 74  ue;..      sqlit
bc50: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
bc60: 6d 61 28 70 50 61 72 73 65 2c 20 69 29 3b 0a 20  ma(pParse, i);. 
bc70: 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69       addr = sqli
bc80: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
bc90: 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 2f   OP_IfPos, 1); /
bca0: 2a 20 48 61 6c 74 20 69 66 20 6f 75 74 20 6f 66  * Halt if out of
bcb0: 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20   errors */.     
bcc0: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
bcd0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
bce0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
bcf0: 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20  Halt, 0, 0);.   
bd00: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
bd10: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
bd20: 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 61 6e  ..      /* Do an
bd30: 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
bd40: 20 6f 66 20 74 68 65 20 42 2d 54 72 65 65 0a 20   of the B-Tree. 
bd50: 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
bd60: 20 42 65 67 69 6e 20 62 79 20 66 69 6e 64 69 6e   Begin by findin
bd70: 67 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 73  g the root pages
bd80: 20 6e 75 6d 62 65 72 73 0a 20 20 20 20 20 20 2a   numbers.      *
bd90: 2a 20 66 6f 72 20 61 6c 6c 20 74 61 62 6c 65 73  * for all tables
bda0: 20 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e 20   and indices in 
bdb0: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  the database..  
bdc0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
bdd0: 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
bde0: 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
bdf0: 69 2c 20 30 29 20 29 3b 0a 20 20 20 20 20 20 70  i, 0) );.      p
be00: 54 62 6c 73 20 3d 20 26 64 62 2d 3e 61 44 62 5b  Tbls = &db->aDb[
be10: 69 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48  i].pSchema->tblH
be20: 61 73 68 3b 0a 20 20 20 20 20 20 66 6f 72 28 63  ash;.      for(c
be30: 6e 74 3d 30 2c 20 78 3d 73 71 6c 69 74 65 48 61  nt=0, x=sqliteHa
be40: 73 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20  shFirst(pTbls); 
be50: 78 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e  x; x=sqliteHashN
be60: 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20  ext(x)){.       
be70: 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73   Table *pTab = s
be80: 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 78 29  qliteHashData(x)
be90: 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20  ;.        Index 
bea0: 2a 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20 69  *pIdx;.        i
beb0: 66 28 20 48 61 73 52 6f 77 69 64 28 70 54 61 62  f( HasRowid(pTab
bec0: 29 20 29 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20  ) ) cnt++;.     
bed0: 20 20 20 66 6f 72 28 6e 49 64 78 3d 30 2c 20 70     for(nIdx=0, p
bee0: 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
bef0: 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64  ; pIdx; pIdx=pId
bf00: 78 2d 3e 70 4e 65 78 74 2c 20 6e 49 64 78 2b 2b  x->pNext, nIdx++
bf10: 29 7b 20 63 6e 74 2b 2b 3b 20 7d 0a 20 20 20 20  ){ cnt++; }.    
bf20: 20 20 20 20 69 66 28 20 6e 49 64 78 3e 6d 78 49      if( nIdx>mxI
bf30: 64 78 20 29 20 6d 78 49 64 78 20 3d 20 6e 49 64  dx ) mxIdx = nId
bf40: 78 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  x;.      }.     
bf50: 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33   aRoot = sqlite3
bf60: 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62  DbMallocRawNN(db
bf70: 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 63  , sizeof(int)*(c
bf80: 6e 74 2b 31 29 29 3b 0a 20 20 20 20 20 20 69 66  nt+1));.      if
bf90: 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 62 72 65  ( aRoot==0 ) bre
bfa0: 61 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 63 6e  ak;.      for(cn
bfb0: 74 3d 30 2c 20 78 3d 73 71 6c 69 74 65 48 61 73  t=0, x=sqliteHas
bfc0: 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78  hFirst(pTbls); x
bfd0: 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; x=sqliteHashNe
bfe0: 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20  xt(x)){.        
bff0: 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71  Table *pTab = sq
c000: 6c 69 74 65 48 61 73 68 44 61 74 61 28 78 29 3b  liteHashData(x);
c010: 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a  .        Index *
c020: 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20 69 66  pIdx;.        if
c030: 28 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  ( HasRowid(pTab)
c040: 20 29 20 61 52 6f 6f 74 5b 63 6e 74 2b 2b 5d 20   ) aRoot[cnt++] 
c050: 3d 20 70 54 61 62 2d 3e 74 6e 75 6d 3b 0a 20 20  = pTab->tnum;.  
c060: 20 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70        for(pIdx=p
c070: 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64  Tab->pIndex; pId
c080: 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
c090: 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ext){.          
c0a0: 61 52 6f 6f 74 5b 63 6e 74 2b 2b 5d 20 3d 20 70  aRoot[cnt++] = p
c0b0: 49 64 78 2d 3e 74 6e 75 6d 3b 0a 20 20 20 20 20  Idx->tnum;.     
c0c0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
c0d0: 20 20 20 61 52 6f 6f 74 5b 63 6e 74 5d 20 3d 20     aRoot[cnt] = 
c0e0: 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b  0;..      /* Mak
c0f0: 65 20 73 75 72 65 20 73 75 66 66 69 63 69 65 6e  e sure sufficien
c100: 74 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 67 69  t number of regi
c110: 73 74 65 72 73 20 68 61 76 65 20 62 65 65 6e 20  sters have been 
c120: 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 20  allocated */.   
c130: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
c140: 3d 20 4d 41 58 28 20 70 50 61 72 73 65 2d 3e 6e  = MAX( pParse->n
c150: 4d 65 6d 2c 20 38 2b 6d 78 49 64 78 20 29 3b 0a  Mem, 8+mxIdx );.
c160: 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 74 68 65  .      /* Do the
c170: 20 62 2d 74 72 65 65 20 69 6e 74 65 67 72 69 74   b-tree integrit
c180: 79 20 63 68 65 63 6b 73 20 2a 2f 0a 20 20 20 20  y checks */.    
c190: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c1a0: 4f 70 34 28 76 2c 20 4f 50 5f 49 6e 74 65 67 72  Op4(v, OP_Integr
c1b0: 69 74 79 43 6b 2c 20 32 2c 20 63 6e 74 2c 20 31  ityCk, 2, cnt, 1
c1c0: 2c 20 28 63 68 61 72 2a 29 61 52 6f 6f 74 2c 50  , (char*)aRoot,P
c1d0: 34 5f 49 4e 54 41 52 52 41 59 29 3b 0a 20 20 20  4_INTARRAY);.   
c1e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
c1f0: 61 6e 67 65 50 35 28 76 2c 20 28 75 38 29 69 29  angeP5(v, (u8)i)
c200: 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73  ;.      addr = s
c210: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
c220: 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 32  (v, OP_IsNull, 2
c230: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
c240: 76 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  v);.      sqlite
c250: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
c260: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c  P_String8, 0, 3,
c270: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 73 71 6c   0,.         sql
c280: 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20  ite3MPrintf(db, 
c290: 22 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65  "*** in database
c2a0: 20 25 73 20 2a 2a 2a 5c 6e 22 2c 20 64 62 2d 3e   %s ***\n", db->
c2b0: 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 29 2c 0a 20  aDb[i].zName),. 
c2c0: 20 20 20 20 20 20 20 20 50 34 5f 44 59 4e 41 4d          P4_DYNAM
c2d0: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
c2e0: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
c2f0: 4f 50 5f 4d 6f 76 65 2c 20 32 2c 20 34 2c 20 31  OP_Move, 2, 4, 1
c300: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c310: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
c320: 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 32  _Concat, 4, 3, 2
c330: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c340: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c350: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 32 2c 20 31  _ResultRow, 2, 1
c360: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c370: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
c380: 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  addr);..      /*
c390: 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 74   Make sure all t
c3a0: 68 65 20 69 6e 64 69 63 65 73 20 61 72 65 20 63  he indices are c
c3b0: 6f 6e 73 74 72 75 63 74 65 64 20 63 6f 72 72 65  onstructed corre
c3c0: 63 74 6c 79 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ctly..      */. 
c3d0: 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74       for(x=sqlit
c3e0: 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c 73  eHashFirst(pTbls
c3f0: 29 3b 20 78 20 26 26 20 21 69 73 51 75 69 63 6b  ); x && !isQuick
c400: 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; x=sqliteHashNe
c410: 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20  xt(x)){.        
c420: 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71  Table *pTab = sq
c430: 6c 69 74 65 48 61 73 68 44 61 74 61 28 78 29 3b  liteHashData(x);
c440: 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a  .        Index *
c450: 70 49 64 78 2c 20 2a 70 50 6b 3b 0a 20 20 20 20  pIdx, *pPk;.    
c460: 20 20 20 20 49 6e 64 65 78 20 2a 70 50 72 69 6f      Index *pPrio
c470: 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69  r = 0;.        i
c480: 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 20 20 20 20  nt loopTop;.    
c490: 20 20 20 20 69 6e 74 20 69 44 61 74 61 43 75 72      int iDataCur
c4a0: 2c 20 69 49 64 78 43 75 72 3b 0a 20 20 20 20 20  , iIdxCur;.     
c4b0: 20 20 20 69 6e 74 20 72 31 20 3d 20 2d 31 3b 0a     int r1 = -1;.
c4c0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 54 61  .        if( pTa
c4d0: 62 2d 3e 70 49 6e 64 65 78 3d 3d 30 20 29 20 63  b->pIndex==0 ) c
c4e0: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
c4f0: 20 70 50 6b 20 3d 20 48 61 73 52 6f 77 69 64 28   pPk = HasRowid(
c500: 70 54 61 62 29 20 3f 20 30 20 3a 20 73 71 6c 69  pTab) ? 0 : sqli
c510: 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64  te3PrimaryKeyInd
c520: 65 78 28 70 54 61 62 29 3b 0a 20 20 20 20 20 20  ex(pTab);.      
c530: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
c540: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
c550: 5f 49 66 50 6f 73 2c 20 31 29 3b 20 20 2f 2a 20  _IfPos, 1);  /* 
c560: 53 74 6f 70 20 69 66 20 6f 75 74 20 6f 66 20 65  Stop if out of e
c570: 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20 20  rrors */.       
c580: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
c590: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
c5a0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c5b0: 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20  P_Halt, 0, 0);. 
c5c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c5d0: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
c5e0: 64 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  dr);.        sql
c5f0: 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65  ite3ExprCacheCle
c600: 61 72 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  ar(pParse);.    
c610: 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54      sqlite3OpenT
c620: 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 70  ableAndIndices(p
c630: 50 61 72 73 65 2c 20 70 54 61 62 2c 20 4f 50 5f  Parse, pTab, OP_
c640: 4f 70 65 6e 52 65 61 64 2c 20 30 2c 0a 20 20 20  OpenRead, 0,.   
c650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c670: 31 2c 20 30 2c 20 26 69 44 61 74 61 43 75 72 2c  1, 0, &iDataCur,
c680: 20 26 69 49 64 78 43 75 72 29 3b 0a 20 20 20 20   &iIdxCur);.    
c690: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c6a0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
c6b0: 67 65 72 2c 20 30 2c 20 37 29 3b 0a 20 20 20 20  ger, 0, 7);.    
c6c0: 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64      for(j=0, pId
c6d0: 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20  x=pTab->pIndex; 
c6e0: 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d  pIdx; pIdx=pIdx-
c6f0: 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20  >pNext, j++){.  
c700: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c710: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c720: 49 6e 74 65 67 65 72 2c 20 30 2c 20 38 2b 6a 29  Integer, 0, 8+j)
c730: 3b 20 2f 2a 20 69 6e 64 65 78 20 65 6e 74 72 69  ; /* index entri
c740: 65 73 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  es counter */.  
c750: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
c760: 61 73 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e  assert( pParse->
c770: 6e 4d 65 6d 3e 3d 38 2b 6a 20 29 3b 0a 20 20 20  nMem>=8+j );.   
c780: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
c790: 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e  ite3NoTempsInRan
c7a0: 67 65 28 70 50 61 72 73 65 2c 31 2c 37 2b 6a 29  ge(pParse,1,7+j)
c7b0: 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   );.        sqli
c7c0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c7d0: 20 4f 50 5f 52 65 77 69 6e 64 2c 20 69 44 61 74   OP_Rewind, iDat
c7e0: 61 43 75 72 2c 20 30 29 3b 20 56 64 62 65 43 6f  aCur, 0); VdbeCo
c7f0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
c800: 20 20 20 6c 6f 6f 70 54 6f 70 20 3d 20 73 71 6c     loopTop = sql
c810: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c820: 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 37 2c 20  , OP_AddImm, 7, 
c830: 31 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 56  1);.        /* V
c840: 65 72 69 66 79 20 74 68 61 74 20 61 6c 6c 20 4e  erify that all N
c850: 4f 54 20 4e 55 4c 4c 20 63 6f 6c 75 6d 6e 73 20  OT NULL columns 
c860: 72 65 61 6c 6c 79 20 61 72 65 20 4e 4f 54 20 4e  really are NOT N
c870: 55 4c 4c 20 2a 2f 0a 20 20 20 20 20 20 20 20 66  ULL */.        f
c880: 6f 72 28 6a 3d 30 3b 20 6a 3c 70 54 61 62 2d 3e  or(j=0; j<pTab->
c890: 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  nCol; j++){.    
c8a0: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72        char *zErr
c8b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ;.          int 
c8c0: 6a 6d 70 32 2c 20 6a 6d 70 33 3b 0a 20 20 20 20  jmp2, jmp3;.    
c8d0: 20 20 20 20 20 20 69 66 28 20 6a 3d 3d 70 54 61        if( j==pTa
c8e0: 62 2d 3e 69 50 4b 65 79 20 29 20 63 6f 6e 74 69  b->iPKey ) conti
c8f0: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 69  nue;.          i
c900: 66 28 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d  f( pTab->aCol[j]
c910: 2e 6e 6f 74 4e 75 6c 6c 3d 3d 30 20 29 20 63 6f  .notNull==0 ) co
c920: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
c930: 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64    sqlite3ExprCod
c940: 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
c950: 65 28 76 2c 20 70 54 61 62 2c 20 69 44 61 74 61  e(v, pTab, iData
c960: 43 75 72 2c 20 6a 2c 20 33 29 3b 0a 20 20 20 20  Cur, j, 3);.    
c970: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c980: 65 43 68 61 6e 67 65 50 35 28 76 2c 20 4f 50 46  eChangeP5(v, OPF
c990: 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 3b 0a  LAG_TYPEOFARG);.
c9a0: 20 20 20 20 20 20 20 20 20 20 6a 6d 70 32 20 3d            jmp2 =
c9b0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c9c0: 70 31 28 76 2c 20 4f 50 5f 4e 6f 74 4e 75 6c 6c  p1(v, OP_NotNull
c9d0: 2c 20 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61  , 3); VdbeCovera
c9e0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
c9f0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ca00: 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  p2(v, OP_AddImm,
ca10: 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72   1, -1); /* Decr
ca20: 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69  ement error limi
ca30: 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a  t */.          z
ca40: 45 72 72 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Err = sqlite3MPr
ca50: 69 6e 74 66 28 64 62 2c 20 22 4e 55 4c 4c 20 76  intf(db, "NULL v
ca60: 61 6c 75 65 20 69 6e 20 25 73 2e 25 73 22 2c 20  alue in %s.%s", 
ca70: 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20  pTab->zName,.   
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca90: 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d             pTab-
caa0: 3e 61 43 6f 6c 5b 6a 5d 2e 7a 4e 61 6d 65 29 3b  >aCol[j].zName);
cab0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
cac0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
cad0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
cae0: 2c 20 30 2c 20 7a 45 72 72 2c 20 50 34 5f 44 59  , 0, zErr, P4_DY
caf0: 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20 20 20 20  NAMIC);.        
cb00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
cb10: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
cb20: 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20 20 20 20  Row, 3, 1);.    
cb30: 20 20 20 20 20 20 6a 6d 70 33 20 3d 20 73 71 6c        jmp3 = sql
cb40: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
cb50: 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20  , OP_IfPos, 1); 
cb60: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
cb70: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
cb80: 65 33 56 64 62 65 41 64 64 4f 70 30 28 76 2c 20  e3VdbeAddOp0(v, 
cb90: 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20 20 20 20  OP_Halt);.      
cba0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
cbb0: 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 32 29  umpHere(v, jmp2)
cbc0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
cbd0: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
cbe0: 76 2c 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20  v, jmp3);.      
cbf0: 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 56    }.        /* V
cc00: 61 6c 69 64 61 74 65 20 69 6e 64 65 78 20 65 6e  alidate index en
cc10: 74 72 69 65 73 20 66 6f 72 20 74 68 65 20 63 75  tries for the cu
cc20: 72 72 65 6e 74 20 72 6f 77 20 2a 2f 0a 20 20 20  rrent row */.   
cc30: 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49       for(j=0, pI
cc40: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
cc50: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
cc60: 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20  ->pNext, j++){. 
cc70: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70           int jmp
cc80: 32 2c 20 6a 6d 70 33 2c 20 6a 6d 70 34 2c 20 6a  2, jmp3, jmp4, j
cc90: 6d 70 35 3b 0a 20 20 20 20 20 20 20 20 20 20 69  mp5;.          i
cca0: 6e 74 20 63 6b 55 6e 69 71 20 3d 20 73 71 6c 69  nt ckUniq = sqli
ccb0: 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c  te3VdbeMakeLabel
ccc0: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  (v);.          i
ccd0: 66 28 20 70 50 6b 3d 3d 70 49 64 78 20 29 20 63  f( pPk==pIdx ) c
cce0: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
ccf0: 20 20 20 72 31 20 3d 20 73 71 6c 69 74 65 33 47     r1 = sqlite3G
cd00: 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28  enerateIndexKey(
cd10: 70 50 61 72 73 65 2c 20 70 49 64 78 2c 20 69 44  pParse, pIdx, iD
cd20: 61 74 61 43 75 72 2c 20 30 2c 20 30 2c 20 26 6a  ataCur, 0, 0, &j
cd30: 6d 70 33 2c 0a 20 20 20 20 20 20 20 20 20 20 20  mp3,.           
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd50: 20 20 20 20 20 20 20 20 20 20 20 20 70 50 72 69              pPri
cd60: 6f 72 2c 20 72 31 29 3b 0a 20 20 20 20 20 20 20  or, r1);.       
cd70: 20 20 20 70 50 72 69 6f 72 20 3d 20 70 49 64 78     pPrior = pIdx
cd80: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
cd90: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
cda0: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 38 2b 6a 2c   OP_AddImm, 8+j,
cdb0: 20 31 29 3b 20 20 2f 2a 20 69 6e 63 72 65 6d 65   1);  /* increme
cdc0: 6e 74 20 65 6e 74 72 79 20 63 6f 75 6e 74 20 2a  nt entry count *
cdd0: 2f 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  /.          /* V
cde0: 65 72 69 66 79 20 74 68 61 74 20 61 6e 20 69 6e  erify that an in
cdf0: 64 65 78 20 65 6e 74 72 79 20 65 78 69 73 74 73  dex entry exists
ce00: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
ce10: 20 74 61 62 6c 65 20 72 6f 77 20 2a 2f 0a 20 20   table row */.  
ce20: 20 20 20 20 20 20 20 20 6a 6d 70 32 20 3d 20 73          jmp2 = s
ce30: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
ce40: 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c  Int(v, OP_Found,
ce50: 20 69 49 64 78 43 75 72 2b 6a 2c 20 63 6b 55 6e   iIdxCur+j, ckUn
ce60: 69 71 2c 20 72 31 2c 0a 20 20 20 20 20 20 20 20  iq, r1,.        
ce70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 49                pI
ce90: 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 29 3b 20 56 64  dx->nColumn); Vd
cea0: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
ceb0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
cec0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
ced0: 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b  _AddImm, 1, -1);
cee0: 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72   /* Decrement er
cef0: 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20  ror limit */.   
cf00: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cf10: 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20  beLoadString(v, 
cf20: 33 2c 20 22 72 6f 77 20 22 29 3b 0a 20 20 20 20  3, "row ");.    
cf30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cf40: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f  eAddOp3(v, OP_Co
cf50: 6e 63 61 74 2c 20 37 2c 20 33 2c 20 33 29 3b 0a  ncat, 7, 3, 3);.
cf60: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
cf70: 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28  3VdbeLoadString(
cf80: 76 2c 20 34 2c 20 22 20 6d 69 73 73 69 6e 67 20  v, 4, " missing 
cf90: 66 72 6f 6d 20 69 6e 64 65 78 20 22 29 3b 0a 20  from index ");. 
cfa0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
cfb0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
cfc0: 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33  _Concat, 4, 3, 3
cfd0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70  );.          jmp
cfe0: 35 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4c  5 = sqlite3VdbeL
cff0: 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 34 2c 20  oadString(v, 4, 
d000: 70 49 64 78 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20  pIdx->zName);.  
d010: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d020: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
d030: 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33 29  Concat, 4, 3, 3)
d040: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d050: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d060: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33   OP_ResultRow, 3
d070: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 1);.          
d080: 6a 6d 70 34 20 3d 20 73 71 6c 69 74 65 33 56 64  jmp4 = sqlite3Vd
d090: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49  beAddOp1(v, OP_I
d0a0: 66 50 6f 73 2c 20 31 29 3b 20 56 64 62 65 43 6f  fPos, 1); VdbeCo
d0b0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
d0c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d0d0: 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c  AddOp0(v, OP_Hal
d0e0: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  t);.          sq
d0f0: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
d100: 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20  e(v, jmp2);.    
d110: 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 55 4e 49        /* For UNI
d120: 51 55 45 20 69 6e 64 65 78 65 73 2c 20 76 65 72  QUE indexes, ver
d130: 69 66 79 20 74 68 61 74 20 6f 6e 6c 79 20 6f 6e  ify that only on
d140: 65 20 65 6e 74 72 79 20 65 78 69 73 74 73 20 77  e entry exists w
d150: 69 74 68 20 74 68 65 0a 20 20 20 20 20 20 20 20  ith the.        
d160: 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 6b 65 79    ** current key
d170: 2e 20 20 54 68 65 20 65 6e 74 72 79 20 69 73 20  .  The entry is 
d180: 75 6e 69 71 75 65 20 69 66 20 28 31 29 20 61 6e  unique if (1) an
d190: 79 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c  y column is NULL
d1a0: 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 72  .          ** or
d1b0: 20 28 32 29 20 74 68 65 20 6e 65 78 74 20 65 6e   (2) the next en
d1c0: 74 72 79 20 68 61 73 20 61 20 64 69 66 66 65 72  try has a differ
d1d0: 65 6e 74 20 6b 65 79 20 2a 2f 0a 20 20 20 20 20  ent key */.     
d1e0: 20 20 20 20 20 69 66 28 20 49 73 55 6e 69 71 75       if( IsUniqu
d1f0: 65 49 6e 64 65 78 28 70 49 64 78 29 20 29 7b 0a  eIndex(pIdx) ){.
d200: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
d210: 75 6e 69 71 4f 6b 20 3d 20 73 71 6c 69 74 65 33  uniqOk = sqlite3
d220: 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29  VdbeMakeLabel(v)
d230: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ;.            in
d240: 74 20 6a 6d 70 36 3b 0a 20 20 20 20 20 20 20 20  t jmp6;.        
d250: 20 20 20 20 69 6e 74 20 6b 6b 3b 0a 20 20 20 20      int kk;.    
d260: 20 20 20 20 20 20 20 20 66 6f 72 28 6b 6b 3d 30          for(kk=0
d270: 3b 20 6b 6b 3c 70 49 64 78 2d 3e 6e 4b 65 79 43  ; kk<pIdx->nKeyC
d280: 6f 6c 3b 20 6b 6b 2b 2b 29 7b 0a 20 20 20 20 20  ol; kk++){.     
d290: 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 43 6f           int iCo
d2a0: 6c 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75  l = pIdx->aiColu
d2b0: 6d 6e 5b 6b 6b 5d 3b 0a 20 20 20 20 20 20 20 20  mn[kk];.        
d2c0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69 43        assert( iC
d2d0: 6f 6c 21 3d 58 4e 5f 52 4f 57 49 44 20 26 26 20  ol!=XN_ROWID && 
d2e0: 69 43 6f 6c 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20  iCol<pTab->nCol 
d2f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
d300: 20 69 66 28 20 69 43 6f 6c 3e 3d 30 20 26 26 20   if( iCol>=0 && 
d310: 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 43 6f 6c 5d  pTab->aCol[iCol]
d320: 2e 6e 6f 74 4e 75 6c 6c 20 29 20 63 6f 6e 74 69  .notNull ) conti
d330: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20  nue;.           
d340: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d350: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c  dOp2(v, OP_IsNul
d360: 6c 2c 20 72 31 2b 6b 6b 2c 20 75 6e 69 71 4f 6b  l, r1+kk, uniqOk
d370: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
d380: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
d390: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 6a 6d 70 36              jmp6
d3b0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
d3c0: 64 4f 70 31 28 76 2c 20 4f 50 5f 4e 65 78 74 2c  dOp1(v, OP_Next,
d3d0: 20 69 49 64 78 43 75 72 2b 6a 29 3b 20 56 64 62   iIdxCur+j); Vdb
d3e0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
d3f0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d400: 33 56 64 62 65 47 6f 74 6f 28 76 2c 20 75 6e 69  3VdbeGoto(v, uni
d410: 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20  qOk);.          
d420: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
d430: 70 48 65 72 65 28 76 2c 20 6a 6d 70 36 29 3b 0a  pHere(v, jmp6);.
d440: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
d450: 74 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74  te3VdbeAddOp4Int
d460: 28 76 2c 20 4f 50 5f 49 64 78 47 54 2c 20 69 49  (v, OP_IdxGT, iI
d470: 64 78 43 75 72 2b 6a 2c 20 75 6e 69 71 4f 6b 2c  dxCur+j, uniqOk,
d480: 20 72 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20   r1,.           
d490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4a0: 20 20 20 20 20 20 70 49 64 78 2d 3e 6e 4b 65 79        pIdx->nKey
d4b0: 43 6f 6c 29 3b 20 56 64 62 65 43 6f 76 65 72 61  Col); VdbeCovera
d4c0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
d4d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d4e0: 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
d4f0: 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65  m, 1, -1); /* De
d500: 63 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69  crement error li
d510: 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  mit */.         
d520: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f     sqlite3VdbeLo
d530: 61 64 53 74 72 69 6e 67 28 76 2c 20 33 2c 20 22  adString(v, 3, "
d540: 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72 79  non-unique entry
d550: 20 69 6e 20 69 6e 64 65 78 20 22 29 3b 0a 20 20   in index ");.  
d560: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d570: 33 56 64 62 65 47 6f 74 6f 28 76 2c 20 6a 6d 70  3VdbeGoto(v, jmp
d580: 35 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  5);.            
d590: 73 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c  sqlite3VdbeResol
d5a0: 76 65 4c 61 62 65 6c 28 76 2c 20 75 6e 69 71 4f  veLabel(v, uniqO
d5b0: 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  k);.          }.
d5c0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d5d0: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
d5e0: 20 6a 6d 70 34 29 3b 0a 20 20 20 20 20 20 20 20   jmp4);.        
d5f0: 20 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65    sqlite3Resolve
d600: 50 61 72 74 49 64 78 4c 61 62 65 6c 28 70 50 61  PartIdxLabel(pPa
d610: 72 73 65 2c 20 6a 6d 70 33 29 3b 0a 20 20 20 20  rse, jmp3);.    
d620: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71      }.        sq
d630: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d640: 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 69 44 61 74  v, OP_Next, iDat
d650: 61 43 75 72 2c 20 6c 6f 6f 70 54 6f 70 29 3b 20  aCur, loopTop); 
d660: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
d670: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
d680: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
d690: 6c 6f 6f 70 54 6f 70 2d 31 29 3b 0a 23 69 66 6e  loopTop-1);.#ifn
d6a0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
d6b0: 42 54 52 45 45 43 4f 55 4e 54 0a 20 20 20 20 20  BTREECOUNT.     
d6c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f     sqlite3VdbeLo
d6d0: 61 64 53 74 72 69 6e 67 28 76 2c 20 32 2c 20 22  adString(v, 2, "
d6e0: 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
d6f0: 65 73 20 69 6e 20 69 6e 64 65 78 20 22 29 3b 0a  es in index ");.
d700: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c          for(j=0,
d710: 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64   pIdx=pTab->pInd
d720: 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
d730: 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29  Idx->pNext, j++)
d740: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
d750: 70 50 6b 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74  pPk==pIdx ) cont
d760: 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  inue;.          
d770: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
d780: 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29  beCurrentAddr(v)
d790: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d7a0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d7b0: 20 4f 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64   OP_IfPos, 1, ad
d7c0: 64 72 2b 32 29 3b 20 56 64 62 65 43 6f 76 65 72  dr+2); VdbeCover
d7d0: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
d7e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d7f0: 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20  Op2(v, OP_Halt, 
d800: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  0, 0);.         
d810: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d820: 70 32 28 76 2c 20 4f 50 5f 43 6f 75 6e 74 2c 20  p2(v, OP_Count, 
d830: 69 49 64 78 43 75 72 2b 6a 2c 20 33 29 3b 0a 20  iIdxCur+j, 3);. 
d840: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d850: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
d860: 5f 45 71 2c 20 38 2b 6a 2c 20 61 64 64 72 2b 38  _Eq, 8+j, addr+8
d870: 2c 20 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61  , 3); VdbeCovera
d880: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
d890: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
d8a0: 67 65 50 35 28 76 2c 20 53 51 4c 49 54 45 5f 4e  geP5(v, SQLITE_N
d8b0: 4f 54 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20  OTNULL);.       
d8c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d8d0: 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
d8e0: 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20 20 20 20 20  m, 1, -1);.     
d8f0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d900: 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 33 2c  LoadString(v, 3,
d910: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 29 3b 0a 20   pIdx->zName);. 
d920: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d930: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
d940: 5f 43 6f 6e 63 61 74 2c 20 33 2c 20 32 2c 20 37  _Concat, 3, 2, 7
d950: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d960: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d970: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
d980: 37 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 7d  7, 1);.        }
d990: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
d9a0: 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e  E_OMIT_BTREECOUN
d9b0: 54 20 2a 2f 0a 20 20 20 20 20 20 7d 20 0a 20 20  T */.      } .  
d9c0: 20 20 7d 0a 20 20 20 20 7b 0a 20 20 20 20 20 20    }.    {.      
d9d0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74  static const int
d9e0: 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53   iLn = VDBE_OFFS
d9f0: 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20  ET_LINENO(2);.  
da00: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
da10: 20 56 64 62 65 4f 70 4c 69 73 74 20 65 6e 64 43   VdbeOpList endC
da20: 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  ode[] = {.      
da30: 20 20 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 20    { OP_AddImm,  
da40: 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20      1, 0,       
da50: 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a   0},    /* 0 */.
da60: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c          { OP_If,
da70: 20 20 20 20 20 20 20 20 20 20 31 2c 20 34 2c 20            1, 4, 
da80: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
da90: 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   1 */.        { 
daa0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20 20 20  OP_String8,     
dab0: 30 2c 20 33 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 3,        0},
dac0: 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20      /* 2 */.    
dad0: 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52      { OP_ResultR
dae0: 6f 77 2c 20 20 20 33 2c 20 31 2c 20 20 20 20 20  ow,   3, 1,     
daf0: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a     0},    /* 3 *
db00: 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20  /.      };.     
db10: 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 0a 20   VdbeOp *aOp;.. 
db20: 20 20 20 20 20 61 4f 70 20 3d 20 73 71 6c 69 74       aOp = sqlit
db30: 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  e3VdbeAddOpList(
db40: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 65 6e 64  v, ArraySize(end
db50: 43 6f 64 65 29 2c 20 65 6e 64 43 6f 64 65 2c 20  Code), endCode, 
db60: 69 4c 6e 29 3b 0a 20 20 20 20 20 20 69 66 28 20  iLn);.      if( 
db70: 61 4f 70 20 29 7b 0a 20 20 20 20 20 20 20 20 61  aOp ){.        a
db80: 4f 70 5b 30 5d 2e 70 32 20 3d 20 2d 6d 78 45 72  Op[0].p2 = -mxEr
db90: 72 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 32  r;.        aOp[2
dba0: 5d 2e 70 34 74 79 70 65 20 3d 20 50 34 5f 53 54  ].p4type = P4_ST
dbb0: 41 54 49 43 3b 0a 20 20 20 20 20 20 20 20 61 4f  ATIC;.        aO
dbc0: 70 5b 32 5d 2e 70 34 2e 7a 20 3d 20 22 6f 6b 22  p[2].p4.z = "ok"
dbd0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
dbe0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
dbf0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
dc00: 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
dc10: 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  CK */..#ifndef S
dc20: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
dc30: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
dc40: 47 4d 41 20 65 6e 63 6f 64 69 6e 67 0a 20 20 2a  GMA encoding.  *
dc50: 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64  *   PRAGMA encod
dc60: 69 6e 67 20 3d 20 22 75 74 66 2d 38 22 7c 22 75  ing = "utf-8"|"u
dc70: 74 66 2d 31 36 22 7c 22 75 74 66 2d 31 36 6c 65  tf-16"|"utf-16le
dc80: 22 7c 22 75 74 66 2d 31 36 62 65 22 0a 20 20 2a  "|"utf-16be".  *
dc90: 2a 0a 20 20 2a 2a 20 49 6e 20 69 74 73 20 66 69  *.  ** In its fi
dca0: 72 73 74 20 66 6f 72 6d 2c 20 74 68 69 73 20 70  rst form, this p
dcb0: 72 61 67 6d 61 20 72 65 74 75 72 6e 73 20 74 68  ragma returns th
dcc0: 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68  e encoding of th
dcd0: 65 20 6d 61 69 6e 0a 20 20 2a 2a 20 64 61 74 61  e main.  ** data
dce0: 62 61 73 65 2e 20 49 66 20 74 68 65 20 64 61 74  base. If the dat
dcf0: 61 62 61 73 65 20 69 73 20 6e 6f 74 20 69 6e 69  abase is not ini
dd00: 74 69 61 6c 69 7a 65 64 2c 20 69 74 20 69 73 20  tialized, it is 
dd10: 69 6e 69 74 69 61 6c 69 7a 65 64 20 6e 6f 77 2e  initialized now.
dd20: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73  .  **.  ** The s
dd30: 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68  econd form of th
dd40: 69 73 20 70 72 61 67 6d 61 20 69 73 20 61 20 6e  is pragma is a n
dd50: 6f 2d 6f 70 20 69 66 20 74 68 65 20 6d 61 69 6e  o-op if the main
dd60: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20   database file. 
dd70: 20 2a 2a 20 68 61 73 20 6e 6f 74 20 61 6c 72 65   ** has not alre
dd80: 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c  ady been initial
dd90: 69 7a 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ized. In this ca
dda0: 73 65 20 69 74 20 73 65 74 73 20 74 68 65 20 64  se it sets the d
ddb0: 65 66 61 75 6c 74 0a 20 20 2a 2a 20 65 6e 63 6f  efault.  ** enco
ddc0: 64 69 6e 67 20 74 68 61 74 20 77 69 6c 6c 20 62  ding that will b
ddd0: 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6d  e used for the m
dde0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
ddf0: 65 20 69 66 20 61 20 6e 65 77 20 66 69 6c 65 0a  e if a new file.
de00: 20 20 2a 2a 20 69 73 20 63 72 65 61 74 65 64 2e    ** is created.
de10: 20 49 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20   If an existing 
de20: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
de30: 6c 65 20 69 73 20 6f 70 65 6e 65 64 2c 20 74 68  le is opened, th
de40: 65 6e 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61  en the.  ** defa
de50: 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  ult text encodin
de60: 67 20 66 6f 72 20 74 68 65 20 65 78 69 73 74 69  g for the existi
de70: 6e 67 20 64 61 74 61 62 61 73 65 20 69 73 20 75  ng database is u
de80: 73 65 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20  sed..  ** .  ** 
de90: 49 6e 20 61 6c 6c 20 63 61 73 65 73 20 6e 65 77  In all cases new
dea0: 20 64 61 74 61 62 61 73 65 73 20 63 72 65 61 74   databases creat
deb0: 65 64 20 75 73 69 6e 67 20 74 68 65 20 41 54 54  ed using the ATT
dec0: 41 43 48 20 63 6f 6d 6d 61 6e 64 20 61 72 65 0a  ACH command are.
ded0: 20 20 2a 2a 20 63 72 65 61 74 65 64 20 74 6f 20    ** created to 
dee0: 75 73 65 20 74 68 65 20 73 61 6d 65 20 64 65 66  use the same def
def0: 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69  ault text encodi
df00: 6e 67 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64  ng as the main d
df10: 61 74 61 62 61 73 65 2e 20 49 66 0a 20 20 2a 2a  atabase. If.  **
df20: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
df30: 73 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20  se has not been 
df40: 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 6e 64 2f  initialized and/
df50: 6f 72 20 63 72 65 61 74 65 64 20 77 68 65 6e 20  or created when 
df60: 41 54 54 41 43 48 0a 20 20 2a 2a 20 69 73 20 65  ATTACH.  ** is e
df70: 78 65 63 75 74 65 64 2c 20 74 68 69 73 20 69 73  xecuted, this is
df80: 20 64 6f 6e 65 20 62 65 66 6f 72 65 20 74 68 65   done before the
df90: 20 41 54 54 41 43 48 20 6f 70 65 72 61 74 69 6f   ATTACH operatio
dfa0: 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20  n..  **.  ** In 
dfb0: 74 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  the second form 
dfc0: 74 68 69 73 20 70 72 61 67 6d 61 20 73 65 74 73  this pragma sets
dfd0: 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69   the text encodi
dfe0: 6e 67 20 74 6f 20 62 65 20 75 73 65 64 20 69 6e  ng to be used in
dff0: 0a 20 20 2a 2a 20 6e 65 77 20 64 61 74 61 62 61  .  ** new databa
e000: 73 65 20 66 69 6c 65 73 20 63 72 65 61 74 65 64  se files created
e010: 20 75 73 69 6e 67 20 74 68 69 73 20 64 61 74 61   using this data
e020: 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 49 74 20  base handle. It 
e030: 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75 73 65  is only.  ** use
e040: 66 75 6c 20 69 66 20 69 6e 76 6f 6b 65 64 20 69  ful if invoked i
e050: 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72  mmediately after
e060: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
e070: 73 65 20 69 0a 20 20 2a 2f 0a 20 20 63 61 73 65  se i.  */.  case
e080: 20 50 72 61 67 54 79 70 5f 45 4e 43 4f 44 49 4e   PragTyp_ENCODIN
e090: 47 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20  G: {.    static 
e0a0: 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63  const struct Enc
e0b0: 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20 63 68 61  Name {.      cha
e0c0: 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 20  r *zName;.      
e0d0: 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20 65 6e  u8 enc;.    } en
e0e0: 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20 20 20  cnames[] = {.   
e0f0: 20 20 20 7b 20 22 55 54 46 38 22 2c 20 20 20 20     { "UTF8",    
e100: 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20   SQLITE_UTF8    
e110: 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
e120: 55 54 46 2d 38 22 2c 20 20 20 20 53 51 4c 49 54  UTF-8",    SQLIT
e130: 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c  E_UTF8        },
e140: 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65    /* Must be ele
e150: 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20 20 20  ment [1] */.    
e160: 20 20 7b 20 22 55 54 46 2d 31 36 6c 65 22 2c 20    { "UTF-16le", 
e170: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20  SQLITE_UTF16LE  
e180: 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62     },  /* Must b
e190: 65 20 65 6c 65 6d 65 6e 74 20 5b 32 5d 20 2a 2f  e element [2] */
e1a0: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36  .      { "UTF-16
e1b0: 62 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  be", SQLITE_UTF1
e1c0: 36 42 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d  6BE     },  /* M
e1d0: 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b  ust be element [
e1e0: 33 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  3] */.      { "U
e1f0: 54 46 31 36 6c 65 22 2c 20 20 53 51 4c 49 54 45  TF16le",  SQLITE
e200: 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 0a  _UTF16LE     },.
e210: 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 62 65        { "UTF16be
e220: 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ",  SQLITE_UTF16
e230: 42 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20  BE     },.      
e240: 7b 20 22 55 54 46 2d 31 36 22 2c 20 20 20 30 20  { "UTF-16",   0 
e250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e260: 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54   }, /* SQLITE_UT
e270: 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20  F16NATIVE */.   
e280: 20 20 20 7b 20 22 55 54 46 31 36 22 2c 20 20 20     { "UTF16",   
e290: 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
e2a0: 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45      }, /* SQLITE
e2b0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a  _UTF16NATIVE */.
e2c0: 20 20 20 20 20 20 7b 20 30 2c 20 30 20 7d 0a 20        { 0, 0 }. 
e2d0: 20 20 20 7d 3b 0a 20 20 20 20 63 6f 6e 73 74 20     };.    const 
e2e0: 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 2a  struct EncName *
e2f0: 70 45 6e 63 3b 0a 20 20 20 20 69 66 28 20 21 7a  pEnc;.    if( !z
e300: 52 69 67 68 74 20 29 7b 20 20 20 20 2f 2a 20 22  Right ){    /* "
e310: 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 22  PRAGMA encoding"
e320: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 73 71   */.      if( sq
e330: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
e340: 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70  pParse) ) goto p
e350: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20  ragma_out;.     
e360: 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65   assert( encname
e370: 73 5b 53 51 4c 49 54 45 5f 55 54 46 38 5d 2e 65  s[SQLITE_UTF8].e
e380: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20  nc==SQLITE_UTF8 
e390: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
e3a0: 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45   encnames[SQLITE
e3b0: 5f 55 54 46 31 36 4c 45 5d 2e 65 6e 63 3d 3d 53  _UTF16LE].enc==S
e3c0: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b  QLITE_UTF16LE );
e3d0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65  .      assert( e
e3e0: 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55  ncnames[SQLITE_U
e3f0: 54 46 31 36 42 45 5d 2e 65 6e 63 3d 3d 53 51 4c  TF16BE].enc==SQL
e400: 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20  ITE_UTF16BE );. 
e410: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
e420: 65 54 65 78 74 28 76 2c 20 22 65 6e 63 6f 64 69  eText(v, "encodi
e430: 6e 67 22 2c 20 65 6e 63 6e 61 6d 65 73 5b 45 4e  ng", encnames[EN
e440: 43 28 70 50 61 72 73 65 2d 3e 64 62 29 5d 2e 7a  C(pParse->db)].z
e450: 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Name);.    }else
e460: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
e470: 20 20 20 20 20 20 20 20 20 2f 2a 20 22 50 52 41           /* "PRA
e480: 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 58  GMA encoding = X
e490: 58 58 22 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20  XX" */.      /* 
e4a0: 4f 6e 6c 79 20 63 68 61 6e 67 65 20 74 68 65 20  Only change the 
e4b0: 76 61 6c 75 65 20 6f 66 20 73 71 6c 69 74 65 2e  value of sqlite.
e4c0: 65 6e 63 20 69 66 20 74 68 65 20 64 61 74 61 62  enc if the datab
e4d0: 61 73 65 20 68 61 6e 64 6c 65 20 69 73 20 6e 6f  ase handle is no
e4e0: 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 69 74 69  t.      ** initi
e4f0: 61 6c 69 7a 65 64 2e 20 49 66 20 74 68 65 20 6d  alized. If the m
e500: 61 69 6e 20 64 61 74 61 62 61 73 65 20 65 78 69  ain database exi
e510: 73 74 73 2c 20 74 68 65 20 6e 65 77 20 73 71 6c  sts, the new sql
e520: 69 74 65 2e 65 6e 63 20 76 61 6c 75 65 0a 20 20  ite.enc value.  
e530: 20 20 20 20 2a 2a 20 77 69 6c 6c 20 62 65 20 6f      ** will be o
e540: 76 65 72 77 72 69 74 74 65 6e 20 77 68 65 6e 20  verwritten when 
e550: 74 68 65 20 73 63 68 65 6d 61 20 69 73 20 6e 65  the schema is ne
e560: 78 74 20 6c 6f 61 64 65 64 2e 20 49 66 20 69 74  xt loaded. If it
e570: 20 64 6f 65 73 20 6e 6f 74 0a 20 20 20 20 20 20   does not.      
e580: 2a 2a 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  ** already exist
e590: 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 63 72  s, it will be cr
e5a0: 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68 65  eated to use the
e5b0: 20 6e 65 77 20 65 6e 63 6f 64 69 6e 67 20 76 61   new encoding va
e5c0: 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  lue..      */.  
e5d0: 20 20 20 20 69 66 28 20 0a 20 20 20 20 20 20 20      if( .       
e5e0: 20 21 28 44 62 48 61 73 50 72 6f 70 65 72 74 79   !(DbHasProperty
e5f0: 28 64 62 2c 20 30 2c 20 44 42 5f 53 63 68 65 6d  (db, 0, DB_Schem
e600: 61 4c 6f 61 64 65 64 29 29 20 7c 7c 20 0a 20 20  aLoaded)) || .  
e610: 20 20 20 20 20 20 44 62 48 61 73 50 72 6f 70 65        DbHasPrope
e620: 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f 45 6d  rty(db, 0, DB_Em
e630: 70 74 79 29 20 0a 20 20 20 20 20 20 29 7b 0a 20  pty) .      ){. 
e640: 20 20 20 20 20 20 20 66 6f 72 28 70 45 6e 63 3d         for(pEnc=
e650: 26 65 6e 63 6e 61 6d 65 73 5b 30 5d 3b 20 70 45  &encnames[0]; pE
e660: 6e 63 2d 3e 7a 4e 61 6d 65 3b 20 70 45 6e 63 2b  nc->zName; pEnc+
e670: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66  +){.          if
e680: 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49  ( 0==sqlite3StrI
e690: 43 6d 70 28 7a 52 69 67 68 74 2c 20 70 45 6e 63  Cmp(zRight, pEnc
e6a0: 2d 3e 7a 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20  ->zName) ){.    
e6b0: 20 20 20 20 20 20 20 20 53 43 48 45 4d 41 5f 45          SCHEMA_E
e6c0: 4e 43 28 64 62 29 20 3d 20 45 4e 43 28 64 62 29  NC(db) = ENC(db)
e6d0: 20 3d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   =.             
e6e0: 20 20 20 70 45 6e 63 2d 3e 65 6e 63 20 3f 20 70     pEnc->enc ? p
e6f0: 45 6e 63 2d 3e 65 6e 63 20 3a 20 53 51 4c 49 54  Enc->enc : SQLIT
e700: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20  E_UTF16NATIVE;. 
e710: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
e720: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
e730: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
e740: 69 66 28 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65  if( !pEnc->zName
e750: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
e760: 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50  lite3ErrorMsg(pP
e770: 61 72 73 65 2c 20 22 75 6e 73 75 70 70 6f 72 74  arse, "unsupport
e780: 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20 25 73 22  ed encoding: %s"
e790: 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  , zRight);.     
e7a0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
e7b0: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
e7c0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
e7d0: 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a  _OMIT_UTF16 */..
e7e0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
e7f0: 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  MIT_SCHEMA_VERSI
e800: 4f 4e 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a  ON_PRAGMAS.  /*.
e810: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73    **   PRAGMA [s
e820: 63 68 65 6d 61 2e 5d 73 63 68 65 6d 61 5f 76 65  chema.]schema_ve
e830: 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41  rsion.  **   PRA
e840: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 73 63 68  GMA [schema.]sch
e850: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69  ema_version = <i
e860: 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a  nteger>.  **.  *
e870: 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  *   PRAGMA [sche
e880: 6d 61 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e  ma.]user_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 75 73 65 72 5f 76 65 72  schema.]user_ver
e8b0: 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e  sion = <integer>
e8c0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  **.  **   PRA
e8d0: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 66 72 65  GMA [schema.]fre
e8e0: 65 6c 69 73 74 5f 63 6f 75 6e 74 0a 20 20 2a 2a  elist_count.  **
e8f0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
e900: 73 63 68 65 6d 61 2e 5d 64 61 74 61 5f 76 65 72  schema.]data_ver
e910: 73 69 6f 6e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  sion.  **.  **  
e920: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
e930: 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 0a  ]application_id.
e940: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73    **   PRAGMA [s
e950: 63 68 65 6d 61 2e 5d 61 70 70 6c 69 63 61 74 69  chema.]applicati
e960: 6f 6e 5f 69 64 20 3d 20 3c 69 6e 74 65 67 65 72  on_id = <integer
e970: 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  >.  **.  ** The 
e980: 70 72 61 67 6d 61 27 73 20 73 63 68 65 6d 61 5f  pragma's schema_
e990: 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72  version and user
e9a0: 5f 76 65 72 73 69 6f 6e 20 61 72 65 20 75 73 65  _version are use
e9b0: 64 20 74 6f 20 73 65 74 20 6f 72 20 67 65 74 0a  d to set or get.
e9c0: 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f    ** the value o
e9d0: 66 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72  f the schema-ver
e9e0: 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 2d 76 65  sion and user-ve
e9f0: 72 73 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76  rsion, respectiv
ea00: 65 6c 79 2e 20 42 6f 74 68 0a 20 20 2a 2a 20 74  ely. Both.  ** t
ea10: 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f  he schema-versio
ea20: 6e 20 61 6e 64 20 74 68 65 20 75 73 65 72 2d 76  n and the user-v
ea30: 65 72 73 69 6f 6e 20 61 72 65 20 33 32 2d 62 69  ersion are 32-bi
ea40: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
ea50: 73 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e  s.  ** stored in
ea60: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
ea70: 61 64 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ader..  **.  ** 
ea80: 54 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69  The schema-cooki
ea90: 65 20 69 73 20 75 73 75 61 6c 6c 79 20 6f 6e 6c  e is usually onl
eaa0: 79 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 69 6e  y manipulated in
eab0: 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69  ternally by SQLi
eac0: 74 65 2e 20 49 74 0a 20 20 2a 2a 20 69 73 20 69  te. It.  ** is i
ead0: 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 53 51  ncremented by SQ
eae0: 4c 69 74 65 20 77 68 65 6e 65 76 65 72 20 74 68  Lite whenever th
eaf0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
eb00: 61 20 69 73 20 6d 6f 64 69 66 69 65 64 20 28 62  a is modified (b
eb10: 79 0a 20 20 2a 2a 20 63 72 65 61 74 69 6e 67 20  y.  ** creating 
eb20: 6f 72 20 64 72 6f 70 70 69 6e 67 20 61 20 74 61  or dropping a ta
eb30: 62 6c 65 20 6f 72 20 69 6e 64 65 78 29 2e 20 54  ble or index). T
eb40: 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
eb50: 6e 20 69 73 20 75 73 65 64 20 62 79 0a 20 20 2a  n is used by.  *
eb60: 2a 20 53 51 4c 69 74 65 20 65 61 63 68 20 74 69  * SQLite each ti
eb70: 6d 65 20 61 20 71 75 65 72 79 20 69 73 20 65 78  me a query is ex
eb80: 65 63 75 74 65 64 20 74 6f 20 65 6e 73 75 72 65  ecuted to ensure
eb90: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 72 6e   that the intern
eba0: 61 6c 20 63 61 63 68 65 0a 20 20 2a 2a 20 6f 66  al cache.  ** of
ebb0: 20 74 68 65 20 73 63 68 65 6d 61 20 75 73 65 64   the schema used
ebc0: 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20   when compiling 
ebd0: 74 68 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61  the SQL query ma
ebe0: 74 63 68 65 73 20 74 68 65 20 73 63 68 65 6d 61  tches the schema
ebf0: 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74   of.  ** the dat
ec00: 61 62 61 73 65 20 61 67 61 69 6e 73 74 20 77 68  abase against wh
ec10: 69 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64  ich the compiled
ec20: 20 71 75 65 72 79 20 69 73 20 61 63 74 75 61 6c   query is actual
ec30: 6c 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20 2a  ly executed..  *
ec40: 2a 20 53 75 62 76 65 72 74 69 6e 67 20 74 68 69  * Subverting thi
ec50: 73 20 6d 65 63 68 61 6e 69 73 6d 20 62 79 20 75  s mechanism by u
ec60: 73 69 6e 67 20 22 50 52 41 47 4d 41 20 73 63 68  sing "PRAGMA sch
ec70: 65 6d 61 5f 76 65 72 73 69 6f 6e 22 20 74 6f 20  ema_version" to 
ec80: 6d 6f 64 69 66 79 0a 20 20 2a 2a 20 74 68 65 20  modify.  ** the 
ec90: 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69  schema-version i
eca0: 73 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 64 61  s potentially da
ecb0: 6e 67 65 72 6f 75 73 20 61 6e 64 20 6d 61 79 20  ngerous and may 
ecc0: 6c 65 61 64 20 74 6f 20 70 72 6f 67 72 61 6d 0a  lead to program.
ecd0: 20 20 2a 2a 20 63 72 61 73 68 65 73 20 6f 72 20    ** crashes or 
ece0: 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
ecf0: 69 6f 6e 2e 20 55 73 65 20 77 69 74 68 20 63 61  ion. Use with ca
ed00: 75 74 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20 2a 2a  ution!.  **.  **
ed10: 20 54 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f   The user-versio
ed20: 6e 20 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e  n is not used in
ed30: 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69  ternally by SQLi
ed40: 74 65 2e 20 49 74 20 6d 61 79 20 62 65 20 75 73  te. It may be us
ed50: 65 64 20 62 79 0a 20 20 2a 2a 20 61 70 70 6c 69  ed by.  ** appli
ed60: 63 61 74 69 6f 6e 73 20 66 6f 72 20 61 6e 79 20  cations for any 
ed70: 70 75 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a 20 20  purpose..  */.  
ed80: 63 61 73 65 20 50 72 61 67 54 79 70 5f 48 45 41  case PragTyp_HEA
ed90: 44 45 52 5f 56 41 4c 55 45 3a 20 7b 0a 20 20 20  DER_VALUE: {.   
eda0: 20 69 6e 74 20 69 43 6f 6f 6b 69 65 20 3d 20 70   int iCookie = p
edb0: 50 72 61 67 6d 61 2d 3e 69 41 72 67 3b 20 20 2f  Pragma->iArg;  /
edc0: 2a 20 57 68 69 63 68 20 63 6f 6f 6b 69 65 20 74  * Which cookie t
edd0: 6f 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  o read or write 
ede0: 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
edf0: 62 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69  beUsesBtree(v, i
ee00: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  Db);.    if( zRi
ee10: 67 68 74 20 26 26 20 28 70 50 72 61 67 6d 61 2d  ght && (pPragma-
ee20: 3e 6d 50 72 61 67 46 6c 61 67 20 26 20 50 72 61  >mPragFlag & Pra
ee30: 67 46 6c 61 67 5f 52 65 61 64 4f 6e 6c 79 29 3d  gFlag_ReadOnly)=
ee40: 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 57  =0 ){.      /* W
ee50: 72 69 74 65 20 74 68 65 20 73 70 65 63 69 66 69  rite the specifi
ee60: 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20  ed cookie value 
ee70: 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20  */.      static 
ee80: 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74  const VdbeOpList
ee90: 20 73 65 74 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b   setCookie[] = {
eea0: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72  .        { OP_Tr
eeb0: 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c  ansaction,    0,
eec0: 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    1,  0},    /* 
eed0: 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f  0 */.        { O
eee0: 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20  P_SetCookie,    
eef0: 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20    0,  0,  0},   
ef00: 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7d   /* 1 */.      }
ef10: 3b 0a 20 20 20 20 20 20 56 64 62 65 4f 70 20 2a  ;.      VdbeOp *
ef20: 61 4f 70 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  aOp;.      sqlit
ef30: 65 33 56 64 62 65 56 65 72 69 66 79 4e 6f 4d 61  e3VdbeVerifyNoMa
ef40: 6c 6c 6f 63 52 65 71 75 69 72 65 64 28 76 2c 20  llocRequired(v, 
ef50: 41 72 72 61 79 53 69 7a 65 28 73 65 74 43 6f 6f  ArraySize(setCoo
ef60: 6b 69 65 29 29 3b 0a 20 20 20 20 20 20 61 4f 70  kie));.      aOp
ef70: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
ef80: 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79  dOpList(v, Array
ef90: 53 69 7a 65 28 73 65 74 43 6f 6f 6b 69 65 29 2c  Size(setCookie),
efa0: 20 73 65 74 43 6f 6f 6b 69 65 2c 20 30 29 3b 0a   setCookie, 0);.
efb0: 20 20 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49        if( ONLY_I
efc0: 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  F_REALLOC_STRESS
efd0: 28 61 4f 70 3d 3d 30 29 20 29 20 62 72 65 61 6b  (aOp==0) ) break
efe0: 3b 0a 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70  ;.      aOp[0].p
eff0: 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 61  1 = iDb;.      a
f000: 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44 62 3b 0a  Op[1].p1 = iDb;.
f010: 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70 32 20        aOp[1].p2 
f020: 3d 20 69 43 6f 6f 6b 69 65 3b 0a 20 20 20 20 20  = iCookie;.     
f030: 20 61 4f 70 5b 31 5d 2e 70 33 20 3d 20 73 71 6c   aOp[1].p3 = sql
f040: 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
f050: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
f060: 20 20 20 2f 2a 20 52 65 61 64 20 74 68 65 20 73     /* Read the s
f070: 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20  pecified cookie 
f080: 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73  value */.      s
f090: 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65  tatic const Vdbe
f0a0: 4f 70 4c 69 73 74 20 72 65 61 64 43 6f 6f 6b 69  OpList readCooki
f0b0: 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20  e[] = {.        
f0c0: 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  { OP_Transaction
f0d0: 2c 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d  ,     0,  0,  0}
f0e0: 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  ,    /* 0 */.   
f0f0: 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f       { OP_ReadCo
f100: 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 31  okie,      0,  1
f110: 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a  ,  0},    /* 1 *
f120: 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52  /.        { OP_R
f130: 65 73 75 6c 74 52 6f 77 2c 20 20 20 20 20 20 20  esultRow,       
f140: 31 2c 20 20 31 2c 20 20 30 7d 0a 20 20 20 20 20  1,  1,  0}.     
f150: 20 7d 3b 0a 20 20 20 20 20 20 56 64 62 65 4f 70   };.      VdbeOp
f160: 20 2a 61 4f 70 3b 0a 20 20 20 20 20 20 73 71 6c   *aOp;.      sql
f170: 69 74 65 33 56 64 62 65 56 65 72 69 66 79 4e 6f  ite3VdbeVerifyNo
f180: 4d 61 6c 6c 6f 63 52 65 71 75 69 72 65 64 28 76  MallocRequired(v
f190: 2c 20 41 72 72 61 79 53 69 7a 65 28 72 65 61 64  , ArraySize(read
f1a0: 43 6f 6f 6b 69 65 29 29 3b 0a 20 20 20 20 20 20  Cookie));.      
f1b0: 61 4f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62  aOp = sqlite3Vdb
f1c0: 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
f1d0: 72 61 79 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b  raySize(readCook
f1e0: 69 65 29 2c 72 65 61 64 43 6f 6f 6b 69 65 2c 30  ie),readCookie,0
f1f0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 4f 4e 4c  );.      if( ONL
f200: 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  Y_IF_REALLOC_STR
f210: 45 53 53 28 61 4f 70 3d 3d 30 29 20 29 20 62 72  ESS(aOp==0) ) br
f220: 65 61 6b 3b 0a 20 20 20 20 20 20 61 4f 70 5b 30  eak;.      aOp[0
f230: 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20  ].p1 = iDb;.    
f240: 20 20 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44    aOp[1].p1 = iD
f250: 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e  b;.      aOp[1].
f260: 70 33 20 3d 20 69 43 6f 6f 6b 69 65 3b 0a 20 20  p3 = iCookie;.  
f270: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
f280: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
f290: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
f2a0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
f2b0: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
f2c0: 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54   zLeft, SQLITE_T
f2d0: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20  RANSIENT);.     
f2e0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 75 73   sqlite3VdbeReus
f2f0: 61 62 6c 65 28 76 29 3b 0a 20 20 20 20 7d 0a 20  able(v);.    }. 
f300: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
f310: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
f320: 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  T_SCHEMA_VERSION
f330: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
f340: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
f350: 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44  _COMPILEOPTION_D
f360: 49 41 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  IAGS.  /*.  **  
f370: 20 50 52 41 47 4d 41 20 63 6f 6d 70 69 6c 65 5f   PRAGMA compile_
f380: 6f 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a  options.  **.  *
f390: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d  * Return the nam
f3a0: 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69 6c  es of all compil
f3b0: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 75  e-time options u
f3c0: 73 65 64 20 69 6e 20 74 68 69 73 20 62 75 69 6c  sed in this buil
f3d0: 64 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70 74 69  d,.  ** one opti
f3e0: 6f 6e 20 70 65 72 20 72 6f 77 2e 0a 20 20 2a 2f  on per row..  */
f3f0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
f400: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a  COMPILE_OPTIONS:
f410: 20 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30   {.    int i = 0
f420: 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  ;.    const char
f430: 20 2a 7a 4f 70 74 3b 0a 20 20 20 20 70 50 61 72   *zOpt;.    pPar
f440: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20  se->nMem = 1;.  
f450: 20 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61    setOneColumnNa
f460: 6d 65 28 76 2c 20 22 63 6f 6d 70 69 6c 65 5f 6f  me(v, "compile_o
f470: 70 74 69 6f 6e 22 29 3b 0a 20 20 20 20 77 68 69  ption");.    whi
f480: 6c 65 28 20 28 7a 4f 70 74 20 3d 20 73 71 6c 69  le( (zOpt = sqli
f490: 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  te3_compileoptio
f4a0: 6e 5f 67 65 74 28 69 2b 2b 29 29 21 3d 30 20 29  n_get(i++))!=0 )
f4b0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
f4c0: 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c  dbeLoadString(v,
f4d0: 20 31 2c 20 7a 4f 70 74 29 3b 0a 20 20 20 20 20   1, zOpt);.     
f4e0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
f4f0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
f500: 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d  ow, 1, 1);.    }
f510: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
f520: 52 65 75 73 61 62 6c 65 28 76 29 3b 0a 20 20 7d  Reusable(v);.  }
f530: 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
f540: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
f550: 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49  COMPILEOPTION_DI
f560: 41 47 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  AGS */..#ifndef 
f570: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
f580: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
f590: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 77 61 6c 5f  MA [schema.]wal_
f5a0: 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 70 61 73  checkpoint = pas
f5b0: 73 69 76 65 7c 66 75 6c 6c 7c 72 65 73 74 61 72  sive|full|restar
f5c0: 74 7c 74 72 75 6e 63 61 74 65 0a 20 20 2a 2a 0a  t|truncate.  **.
f5d0: 20 20 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20    ** Checkpoint 
f5e0: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  the database..  
f5f0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
f600: 70 5f 57 41 4c 5f 43 48 45 43 4b 50 4f 49 4e 54  p_WAL_CHECKPOINT
f610: 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
f620: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c  onst char *azCol
f630: 5b 5d 20 3d 20 7b 20 22 62 75 73 79 22 2c 20 22  [] = { "busy", "
f640: 6c 6f 67 22 2c 20 22 63 68 65 63 6b 70 6f 69 6e  log", "checkpoin
f650: 74 65 64 22 20 7d 3b 0a 20 20 20 20 69 6e 74 20  ted" };.    int 
f660: 69 42 74 20 3d 20 28 70 49 64 32 2d 3e 7a 3f 69  iBt = (pId2->z?i
f670: 44 62 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  Db:SQLITE_MAX_AT
f680: 54 41 43 48 45 44 29 3b 0a 20 20 20 20 69 6e 74  TACHED);.    int
f690: 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f   eMode = SQLITE_
f6a0: 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49  CHECKPOINT_PASSI
f6b0: 56 45 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  VE;.    if( zRig
f6c0: 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ht ){.      if( 
f6d0: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
f6e0: 52 69 67 68 74 2c 20 22 66 75 6c 6c 22 29 3d 3d  Right, "full")==
f6f0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f  0 ){.        eMo
f700: 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43  de = SQLITE_CHEC
f710: 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3b 0a 20 20 20  KPOINT_FULL;.   
f720: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c     }else if( sql
f730: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67  ite3StrICmp(zRig
f740: 68 74 2c 20 22 72 65 73 74 61 72 74 22 29 3d 3d  ht, "restart")==
f750: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f  0 ){.        eMo
f760: 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43  de = SQLITE_CHEC
f770: 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 3b 0a  KPOINT_RESTART;.
f780: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
f790: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
f7a0: 52 69 67 68 74 2c 20 22 74 72 75 6e 63 61 74 65  Right, "truncate
f7b0: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
f7c0: 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f   eMode = SQLITE_
f7d0: 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43  CHECKPOINT_TRUNC
f7e0: 41 54 45 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ATE;.      }.   
f7f0: 20 7d 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c   }.    setAllCol
f800: 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 33 2c 20 61  umnNames(v, 3, a
f810: 7a 43 6f 6c 29 3b 20 20 61 73 73 65 72 74 28 20  zCol);  assert( 
f820: 33 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43  3==ArraySize(azC
f830: 6f 6c 29 20 29 3b 0a 20 20 20 20 70 50 61 72 73  ol) );.    pPars
f840: 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20  e->nMem = 3;.   
f850: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
f860: 70 33 28 76 2c 20 4f 50 5f 43 68 65 63 6b 70 6f  p3(v, OP_Checkpo
f870: 69 6e 74 2c 20 69 42 74 2c 20 65 4d 6f 64 65 2c  int, iBt, eMode,
f880: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
f890: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
f8a0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33  _ResultRow, 1, 3
f8b0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
f8c0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
f8d0: 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63  GMA wal_autochec
f8e0: 6b 70 6f 69 6e 74 0a 20 20 2a 2a 20 20 20 50 52  kpoint.  **   PR
f8f0: 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65  AGMA wal_autoche
f900: 63 6b 70 6f 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a  ckpoint = N.  **
f910: 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20  .  ** Configure 
f920: 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  a database conne
f930: 63 74 69 6f 6e 20 74 6f 20 61 75 74 6f 6d 61 74  ction to automat
f940: 69 63 61 6c 6c 79 20 63 68 65 63 6b 70 6f 69 6e  ically checkpoin
f950: 74 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a  t a database.  *
f960: 2a 20 61 66 74 65 72 20 61 63 63 75 6d 75 6c 61  * after accumula
f970: 74 69 6e 67 20 4e 20 66 72 61 6d 65 73 20 69 6e  ting N frames in
f980: 20 74 68 65 20 6c 6f 67 2e 20 4f 72 20 71 75 65   the log. Or que
f990: 72 79 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  ry for the curre
f9a0: 6e 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20 6f 66  nt value.  ** of
f9b0: 20 4e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20   N..  */.  case 
f9c0: 50 72 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f  PragTyp_WAL_AUTO
f9d0: 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20  CHECKPOINT: {.  
f9e0: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
f9f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 61        sqlite3_wa
fa00: 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
fa10: 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69  (db, sqlite3Atoi
fa20: 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d  (zRight));.    }
fa30: 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
fa40: 65 49 6e 74 28 76 2c 20 22 77 61 6c 5f 61 75 74  eInt(v, "wal_aut
fa50: 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c 20 0a 20  ocheckpoint", . 
fa60: 20 20 20 20 20 20 64 62 2d 3e 78 57 61 6c 43 61        db->xWalCa
fa70: 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69 74 65 33 57  llback==sqlite3W
fa80: 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 20 3f 20  alDefaultHook ? 
fa90: 0a 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49  .           SQLI
faa0: 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 64 62  TE_PTR_TO_INT(db
fab0: 2d 3e 70 57 61 6c 41 72 67 29 20 3a 20 30 29 3b  ->pWalArg) : 0);
fac0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
fad0: 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  ndif..  /*.  ** 
fae0: 20 50 52 41 47 4d 41 20 73 68 72 69 6e 6b 5f 6d   PRAGMA shrink_m
faf0: 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20 20 2a 2a 20  emory.  **.  ** 
fb00: 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
fb10: 46 3a 20 52 2d 32 33 34 34 35 2d 34 36 31 30 39  F: R-23445-46109
fb20: 20 54 68 69 73 20 70 72 61 67 6d 61 20 63 61 75   This pragma cau
fb30: 73 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ses the database
fb40: 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  .  ** connection
fb50: 20 6f 6e 20 77 68 69 63 68 20 69 74 20 69 73 20   on which it is 
fb60: 69 6e 76 6f 6b 65 64 20 74 6f 20 66 72 65 65 20  invoked to free 
fb70: 75 70 20 61 73 20 6d 75 63 68 20 6d 65 6d 6f 72  up as much memor
fb80: 79 20 61 73 20 69 74 0a 20 20 2a 2a 20 63 61 6e  y as it.  ** can
fb90: 2c 20 62 79 20 63 61 6c 6c 69 6e 67 20 73 71 6c  , by calling sql
fba0: 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f  ite3_db_release_
fbb0: 6d 65 6d 6f 72 79 28 29 2e 0a 20 20 2a 2f 0a 20  memory()..  */. 
fbc0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 48   case PragTyp_SH
fbd0: 52 49 4e 4b 5f 4d 45 4d 4f 52 59 3a 20 7b 0a 20  RINK_MEMORY: {. 
fbe0: 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65     sqlite3_db_re
fbf0: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 64 62 29  lease_memory(db)
fc00: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
fc10: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
fc20: 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f 75  AGMA busy_timeou
fc30: 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  t.  **   PRAGMA 
fc40: 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 3d 20 4e  busy_timeout = N
fc50: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20  .  **.  ** Call 
fc60: 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d  sqlite3_busy_tim
fc70: 65 6f 75 74 28 64 62 2c 20 4e 29 2e 20 20 52 65  eout(db, N).  Re
fc80: 74 75 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74  turn the current
fc90: 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 0a 20   timeout value. 
fca0: 20 2a 2a 20 69 66 20 6f 6e 65 20 69 73 20 73 65   ** if one is se
fcb0: 74 2e 20 20 49 66 20 6e 6f 20 62 75 73 79 20 68  t.  If no busy h
fcc0: 61 6e 64 6c 65 72 20 6f 72 20 61 20 64 69 66 66  andler or a diff
fcd0: 65 72 65 6e 74 20 62 75 73 79 20 68 61 6e 64 6c  erent busy handl
fce0: 65 72 20 69 73 20 73 65 74 0a 20 20 2a 2a 20 74  er is set.  ** t
fcf0: 68 65 6e 20 30 20 69 73 20 72 65 74 75 72 6e 65  hen 0 is returne
fd00: 64 2e 20 20 53 65 74 74 69 6e 67 20 74 68 65 20  d.  Setting the 
fd10: 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 74 6f 20  busy_timeout to 
fd20: 30 20 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20  0 or negative.  
fd30: 2a 2a 20 64 69 73 61 62 6c 65 73 20 74 68 65 20  ** disables the 
fd40: 74 69 6d 65 6f 75 74 2e 0a 20 20 2a 2f 0a 20 20  timeout..  */.  
fd50: 2f 2a 63 61 73 65 20 50 72 61 67 54 79 70 5f 42  /*case PragTyp_B
fd60: 55 53 59 5f 54 49 4d 45 4f 55 54 2a 2f 20 64 65  USY_TIMEOUT*/ de
fd70: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 61 73 73  fault: {.    ass
fd80: 65 72 74 28 20 70 50 72 61 67 6d 61 2d 3e 65 50  ert( pPragma->eP
fd90: 72 61 67 54 79 70 3d 3d 50 72 61 67 54 79 70 5f  ragTyp==PragTyp_
fda0: 42 55 53 59 5f 54 49 4d 45 4f 55 54 20 29 3b 0a  BUSY_TIMEOUT );.
fdb0: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
fdc0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
fdd0: 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c  busy_timeout(db,
fde0: 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
fdf0: 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ght));.    }.   
fe00: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
fe10: 28 76 2c 20 22 74 69 6d 65 6f 75 74 22 2c 20 20  (v, "timeout",  
fe20: 64 62 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74 29  db->busyTimeout)
fe30: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
fe40: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
fe50: 41 47 4d 41 20 73 6f 66 74 5f 68 65 61 70 5f 6c  AGMA soft_heap_l
fe60: 69 6d 69 74 0a 20 20 2a 2a 20 20 20 50 52 41 47  imit.  **   PRAG
fe70: 4d 41 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  MA soft_heap_lim
fe80: 69 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  it = N.  **.  **
fe90: 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
fea0: 4f 46 3a 20 52 2d 32 36 33 34 33 2d 34 35 39 33  OF: R-26343-4593
feb0: 30 20 54 68 69 73 20 70 72 61 67 6d 61 20 69 6e  0 This pragma in
fec0: 76 6f 6b 65 73 20 74 68 65 0a 20 20 2a 2a 20 73  vokes the.  ** s
fed0: 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70  qlite3_soft_heap
fee0: 5f 6c 69 6d 69 74 36 34 28 29 20 69 6e 74 65 72  _limit64() inter
fef0: 66 61 63 65 20 77 69 74 68 20 74 68 65 20 61 72  face with the ar
ff00: 67 75 6d 65 6e 74 20 4e 2c 20 69 66 20 4e 20 69  gument N, if N i
ff10: 73 0a 20 20 2a 2a 20 73 70 65 63 69 66 69 65 64  s.  ** specified
ff20: 20 61 6e 64 20 69 73 20 61 20 6e 6f 6e 2d 6e 65   and is a non-ne
ff30: 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 2e 0a  gative integer..
ff40: 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    ** IMPLEMENTAT
ff50: 49 4f 4e 2d 4f 46 3a 20 52 2d 36 34 34 35 31 2d  ION-OF: R-64451-
ff60: 30 37 31 36 33 20 54 68 65 20 73 6f 66 74 5f 68  07163 The soft_h
ff70: 65 61 70 5f 6c 69 6d 69 74 20 70 72 61 67 6d 61  eap_limit pragma
ff80: 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 72 65 74   always.  ** ret
ff90: 75 72 6e 73 20 74 68 65 20 73 61 6d 65 20 69 6e  urns the same in
ffa0: 74 65 67 65 72 20 74 68 61 74 20 77 6f 75 6c 64  teger that would
ffb0: 20 62 65 20 72 65 74 75 72 6e 65 64 20 62 79 20   be returned by 
ffc0: 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  the.  ** sqlite3
ffd0: 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
ffe0: 36 34 28 2d 31 29 20 43 2d 6c 61 6e 67 75 61 67  64(-1) C-languag
fff0: 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2f  e function..  */
10000 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
10010 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49 54 3a  SOFT_HEAP_LIMIT:
10020 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69   {.    sqlite3_i
10030 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66 28 20  nt64 N;.    if( 
10040 7a 52 69 67 68 74 20 26 26 20 73 71 6c 69 74 65  zRight && sqlite
10050 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a  3DecOrHexToI64(z
10060 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53 51 4c 49  Right, &N)==SQLI
10070 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73  TE_OK ){.      s
10080 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70  qlite3_soft_heap
10090 5f 6c 69 6d 69 74 36 34 28 4e 29 3b 0a 20 20 20  _limit64(N);.   
100a0 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
100b0 67 6c 65 49 6e 74 28 76 2c 20 22 73 6f 66 74 5f  gleInt(v, "soft_
100c0 68 65 61 70 5f 6c 69 6d 69 74 22 2c 20 20 73 71  heap_limit",  sq
100d0 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f  lite3_soft_heap_
100e0 6c 69 6d 69 74 36 34 28 2d 31 29 29 3b 0a 20 20  limit64(-1));.  
100f0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
10100 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
10110 20 74 68 72 65 61 64 73 0a 20 20 2a 2a 20 20 20   threads.  **   
10120 50 52 41 47 4d 41 20 74 68 72 65 61 64 73 20 3d  PRAGMA threads =
10130 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e   N.  **.  ** Con
10140 66 69 67 75 72 65 20 74 68 65 20 6d 61 78 69 6d  figure the maxim
10150 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 77 6f 72  um number of wor
10160 6b 65 72 20 74 68 72 65 61 64 73 2e 20 20 52 65  ker threads.  Re
10170 74 75 72 6e 20 74 68 65 20 6e 65 77 0a 20 20 2a  turn the new.  *
10180 2a 20 6d 61 78 69 6d 75 6d 2c 20 77 68 69 63 68  * maximum, which
10190 20 6d 69 67 68 74 20 62 65 20 6c 65 73 73 20 74   might be less t
101a0 68 61 6e 20 72 65 71 75 65 73 74 65 64 2e 0a 20  han requested.. 
101b0 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
101c0 79 70 5f 54 48 52 45 41 44 53 3a 20 7b 0a 20 20  yp_THREADS: {.  
101d0 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
101e0 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  N;.    if( zRigh
101f0 74 0a 20 20 20 20 20 26 26 20 73 71 6c 69 74 65  t.     && sqlite
10200 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a  3DecOrHexToI64(z
10210 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53 51 4c 49  Right, &N)==SQLI
10220 54 45 5f 4f 4b 0a 20 20 20 20 20 26 26 20 4e 3e  TE_OK.     && N>
10230 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  =0.    ){.      
10240 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 64 62  sqlite3_limit(db
10250 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57  , SQLITE_LIMIT_W
10260 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 28  ORKER_THREADS, (
10270 69 6e 74 29 28 4e 26 30 78 37 66 66 66 66 66 66  int)(N&0x7ffffff
10280 66 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  f));.    }.    r
10290 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76  eturnSingleInt(v
102a0 2c 20 22 74 68 72 65 61 64 73 22 2c 0a 20 20 20  , "threads",.   
102b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102c0 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 64   sqlite3_limit(d
102d0 62 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  b, SQLITE_LIMIT_
102e0 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20  WORKER_THREADS, 
102f0 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  -1));.    break;
10300 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65  .  }..#if define
10310 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
10320 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
10330 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a 20 20 2a  E_TEST).  /*.  *
10340 2a 20 52 65 70 6f 72 74 20 74 68 65 20 63 75 72  * Report the cur
10350 72 65 6e 74 20 73 74 61 74 65 20 6f 66 20 66 69  rent state of fi
10360 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61 6c 6c 20  le logs for all 
10370 64 61 74 61 62 61 73 65 73 0a 20 20 2a 2f 0a 20  databases.  */. 
10380 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f   case PragTyp_LO
10390 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a 20 20 20  CK_STATUS: {.   
103a0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
103b0 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f 63 6b  ar *const azLock
103c0 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Name[] = {.     
103d0 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20 22 73 68   "unlocked", "sh
103e0 61 72 65 64 22 2c 20 22 72 65 73 65 72 76 65 64  ared", "reserved
103f0 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c 20 22 65  ", "pending", "e
10400 78 63 6c 75 73 69 76 65 22 0a 20 20 20 20 7d 3b  xclusive".    };
10410 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
10420 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20  t char *azCol[] 
10430 3d 20 7b 20 22 64 61 74 61 62 61 73 65 22 2c 20  = { "database", 
10440 22 73 74 61 74 75 73 22 20 7d 3b 0a 20 20 20 20  "status" };.    
10450 69 6e 74 20 69 3b 0a 20 20 20 20 73 65 74 41 6c  int i;.    setAl
10460 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20  lColumnNames(v, 
10470 32 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72  2, azCol); asser
10480 74 28 20 32 3d 3d 41 72 72 61 79 53 69 7a 65 28  t( 2==ArraySize(
10490 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 70 50  azCol) );.    pP
104a0 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a  arse->nMem = 2;.
104b0 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64      for(i=0; i<d
104c0 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
104d0 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a      Btree *pBt;.
104e0 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
104f0 20 2a 7a 53 74 61 74 65 20 3d 20 22 75 6e 6b 6e   *zState = "unkn
10500 6f 77 6e 22 3b 0a 20 20 20 20 20 20 69 6e 74 20  own";.      int 
10510 6a 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  j;.      if( db-
10520 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 3d 3d 30  >aDb[i].zName==0
10530 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
10540 20 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62     pBt = db->aDb
10550 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20 20 20 69  [i].pBt;.      i
10560 66 28 20 70 42 74 3d 3d 30 20 7c 7c 20 73 71 6c  f( pBt==0 || sql
10570 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
10580 42 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Bt)==0 ){.      
10590 20 20 7a 53 74 61 74 65 20 3d 20 22 63 6c 6f 73    zState = "clos
105a0 65 64 22 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ed";.      }else
105b0 20 69 66 28 20 73 71 6c 69 74 65 33 5f 66 69 6c   if( sqlite3_fil
105c0 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 69 20  e_control(db, i 
105d0 3f 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  ? db->aDb[i].zNa
105e0 6d 65 20 3a 20 30 2c 20 0a 20 20 20 20 20 20 20  me : 0, .       
105f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
10610 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53  LITE_FCNTL_LOCKS
10620 54 41 54 45 2c 20 26 6a 29 3d 3d 53 51 4c 49 54  TATE, &j)==SQLIT
10630 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
10640 20 7a 53 74 61 74 65 20 3d 20 61 7a 4c 6f 63 6b   zState = azLock
10650 4e 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d  Name[j];.      }
10660 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
10670 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31  beMultiLoad(v, 1
10680 2c 20 22 73 73 22 2c 20 64 62 2d 3e 61 44 62 5b  , "ss", db->aDb[
10690 69 5d 2e 7a 4e 61 6d 65 2c 20 7a 53 74 61 74 65  i].zName, zState
106a0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
106b0 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
106c0 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32  _ResultRow, 1, 2
106d0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65  );.    }.    bre
106e0 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ak;.  }.#endif..
106f0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41  #ifdef SQLITE_HA
10700 53 5f 43 4f 44 45 43 0a 20 20 63 61 73 65 20 50  S_CODEC.  case P
10710 72 61 67 54 79 70 5f 4b 45 59 3a 20 7b 0a 20 20  ragTyp_KEY: {.  
10720 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 20 73    if( zRight ) s
10730 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62  qlite3_key_v2(db
10740 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20 73  , zDb, zRight, s
10750 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
10760 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62 72 65  Right));.    bre
10770 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20 50  ak;.  }.  case P
10780 72 61 67 54 79 70 5f 52 45 4b 45 59 3a 20 7b 0a  ragTyp_REKEY: {.
10790 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
107a0 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 5f 76   sqlite3_rekey_v
107b0 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68  2(db, zDb, zRigh
107c0 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  t, sqlite3Strlen
107d0 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  30(zRight));.   
107e0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61   break;.  }.  ca
107f0 73 65 20 50 72 61 67 54 79 70 5f 48 45 58 4b 45  se PragTyp_HEXKE
10800 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  Y: {.    if( zRi
10810 67 68 74 20 29 7b 0a 20 20 20 20 20 20 75 38 20  ght ){.      u8 
10820 69 42 79 74 65 3b 0a 20 20 20 20 20 20 69 6e 74  iByte;.      int
10830 20 69 3b 0a 20 20 20 20 20 20 63 68 61 72 20 7a   i;.      char z
10840 4b 65 79 5b 34 30 5d 3b 0a 20 20 20 20 20 20 66  Key[40];.      f
10850 6f 72 28 69 3d 30 2c 20 69 42 79 74 65 3d 30 3b  or(i=0, iByte=0;
10860 20 69 3c 73 69 7a 65 6f 66 28 7a 4b 65 79 29 2a   i<sizeof(zKey)*
10870 32 20 26 26 20 73 71 6c 69 74 65 33 49 73 78 64  2 && sqlite3Isxd
10880 69 67 69 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b  igit(zRight[i]);
10890 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
108a0 42 79 74 65 20 3d 20 28 69 42 79 74 65 3c 3c 34  Byte = (iByte<<4
108b0 29 20 2b 20 73 71 6c 69 74 65 33 48 65 78 54 6f  ) + sqlite3HexTo
108c0 49 6e 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b 0a  Int(zRight[i]);.
108d0 20 20 20 20 20 20 20 20 69 66 28 20 28 69 26 31          if( (i&1
108e0 29 21 3d 30 20 29 20 7a 4b 65 79 5b 69 2f 32 5d  )!=0 ) zKey[i/2]
108f0 20 3d 20 69 42 79 74 65 3b 0a 20 20 20 20 20 20   = iByte;.      
10900 7d 0a 20 20 20 20 20 20 69 66 28 20 28 7a 4c 65  }.      if( (zLe
10910 66 74 5b 33 5d 20 26 20 30 78 66 29 3d 3d 30 78  ft[3] & 0xf)==0x
10920 62 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  b ){.        sql
10930 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20  ite3_key_v2(db, 
10940 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b  zDb, zKey, i/2);
10950 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
10960 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65        sqlite3_re
10970 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20  key_v2(db, zDb, 
10980 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20 20  zKey, i/2);.    
10990 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72    }.    }.    br
109a0 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
109b0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
109c0 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 20 7c 7c  TE_HAS_CODEC) ||
109d0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
109e0 45 4e 41 42 4c 45 5f 43 45 52 4f 44 29 0a 20 20  ENABLE_CEROD).  
109f0 63 61 73 65 20 50 72 61 67 54 79 70 5f 41 43 54  case PragTyp_ACT
10a00 49 56 41 54 45 5f 45 58 54 45 4e 53 49 4f 4e 53  IVATE_EXTENSIONS
10a10 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a  : if( zRight ){.
10a20 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41  #ifdef SQLITE_HA
10a30 53 5f 43 4f 44 45 43 0a 20 20 20 20 69 66 28 20  S_CODEC.    if( 
10a40 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28  sqlite3StrNICmp(
10a50 7a 52 69 67 68 74 2c 20 22 73 65 65 2d 22 2c 20  zRight, "see-", 
10a60 34 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  4)==0 ){.      s
10a70 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65 5f  qlite3_activate_
10a80 73 65 65 28 26 7a 52 69 67 68 74 5b 34 5d 29 3b  see(&zRight[4]);
10a90 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69  .    }.#endif.#i
10aa0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
10ab0 4c 45 5f 43 45 52 4f 44 0a 20 20 20 20 69 66 28  LE_CEROD.    if(
10ac0 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
10ad0 28 7a 52 69 67 68 74 2c 20 22 63 65 72 6f 64 2d  (zRight, "cerod-
10ae0 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", 6)==0 ){.    
10af0 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61    sqlite3_activa
10b00 74 65 5f 63 65 72 6f 64 28 26 7a 52 69 67 68 74  te_cerod(&zRight
10b10 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  [6]);.    }.#end
10b20 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
10b30 23 65 6e 64 69 66 0a 0a 20 20 7d 20 2f 2a 20 45  #endif..  } /* E
10b40 6e 64 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41  nd of the PRAGMA
10b50 20 73 77 69 74 63 68 20 2a 2f 0a 0a 70 72 61 67   switch */..prag
10b60 6d 61 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74 65  ma_out:.  sqlite
10b70 33 44 62 46 72 65 65 28 64 62 2c 20 7a 4c 65 66  3DbFree(db, zLef
10b80 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  t);.  sqlite3DbF
10b90 72 65 65 28 64 62 2c 20 7a 52 69 67 68 74 29 3b  ree(db, zRight);
10ba0 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  .}..#endif /* SQ
10bb0 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
10bc0 20 2a 2f 0a                                       */.