/ Hex Artifact Content
Login

Artifact fc4b8918ea5a5dd0bd9f6f8b2dacaba1d6d59875:


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 23 69 66  n = 1;.    }.#if
5020: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
5030: 4c 54 5f 57 41 4c 5f 53 41 46 45 54 59 4c 45 56  LT_WAL_SAFETYLEV
5040: 45 4c 0a 20 20 20 20 69 66 28 20 21 20 53 51 4c  EL.    if( ! SQL
5050: 49 54 45 5f 44 62 53 61 66 65 74 79 4c 65 76 65  ITE_DbSafetyLeve
5060: 6c 49 73 46 69 78 65 64 28 70 44 62 2d 3e 73 61  lIsFixed(pDb->sa
5070: 66 65 74 79 5f 6c 65 76 65 6c 29 20 29 7b 0a 20  fety_level) ){. 
5080: 20 20 20 20 20 69 66 28 20 65 4d 6f 64 65 20 3d       if( eMode =
5090: 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  = PAGER_JOURNALM
50a0: 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20  ODE_WAL ){.     
50b0: 20 20 20 2f 2a 20 77 68 65 6e 20 65 6e 74 65 72     /* when enter
50c0: 69 6e 67 20 77 61 6c 20 6d 6f 64 65 2c 20 69 6d  ing wal mode, im
50d0: 6d 65 64 69 61 74 65 6c 79 20 73 77 69 74 63 68  mediately switch
50e0: 20 74 68 65 20 73 61 66 65 74 79 5f 6c 65 76 65   the safety_leve
50f0: 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 6f 20  l.        ** so 
5100: 74 68 61 74 20 61 20 71 75 65 72 79 20 74 6f 20  that a query to 
5110: 70 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f  pragma synchrono
5120: 75 73 20 72 65 74 75 72 6e 73 20 74 68 65 20 63  us returns the c
5130: 6f 72 72 65 63 74 20 76 61 6c 75 65 20 2a 2f 0a  orrect value */.
5140: 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 70        .        p
5150: 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c  Db->safety_level
5160: 20 3d 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c   = SQLITE_DEFAUL
5170: 54 5f 57 41 4c 5f 53 41 46 45 54 59 4c 45 56 45  T_WAL_SAFETYLEVE
5180: 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  L;.      }else{.
5190: 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
51a0: 65 20 75 73 65 72 20 68 61 73 6e 27 74 20 6f 76  e user hasn't ov
51b0: 65 72 72 69 64 64 65 6e 20 74 68 65 20 73 79 6e  erridden the syn
51c0: 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67  chronous setting
51d0: 2c 20 75 73 65 20 74 68 65 20 0a 20 20 20 20 20  , use the .     
51e0: 20 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 66 6f     ** default fo
51f0: 72 20 6e 6f 6e 2d 77 61 6c 20 64 61 74 61 62 61  r non-wal databa
5200: 73 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 70  ses */.        p
5210: 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c  Db->safety_level
5220: 20 3d 20 33 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 3;.      }.  
5230: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
5240: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c  LITE_DEFAULT_WAL
5250: 5f 53 41 46 45 54 59 4c 45 56 45 4c 20 2a 2f 0a  _SAFETYLEVEL */.
5260: 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e      for(ii=db->n
5270: 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d  Db-1; ii>=0; ii-
5280: 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62  -){.      if( db
5290: 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26  ->aDb[ii].pBt &&
52a0: 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64   (ii==iDb || pId
52b0: 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20  2->n==0) ){.    
52c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55      sqlite3VdbeU
52d0: 73 65 73 42 74 72 65 65 28 76 2c 20 69 69 29 3b  sesBtree(v, ii);
52e0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
52f0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
5300: 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20 69 69  _JournalMode, ii
5310: 2c 20 31 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20  , 1, eMode);.   
5320: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
5330: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
5340: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
5350: 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62 72 65  , 1, 1);.    bre
5360: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
5370: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
5380: 6d 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65  ma.]journal_size
5390: 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 50 52 41  _limit.  **  PRA
53a0: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6a 6f 75  GMA [schema.]jou
53b0: 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d  rnal_size_limit=
53c0: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20  N.  **.  ** Get 
53d0: 6f 72 20 73 65 74 20 74 68 65 20 73 69 7a 65 20  or set the size 
53e0: 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63  limit on rollbac
53f0: 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e  k journal files.
5400: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
5410: 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a  gTyp_JOURNAL_SIZ
5420: 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50  E_LIMIT: {.    P
5430: 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73  ager *pPager = s
5440: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
5450: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
5460: 69 36 34 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b  i64 iLimit = -2;
5470: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
5480: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
5490: 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52  DecOrHexToI64(zR
54a0: 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 29 3b 0a  ight, &iLimit);.
54b0: 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74        if( iLimit
54c0: 3c 2d 31 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d  <-1 ) iLimit = -
54d0: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4c 69  1;.    }.    iLi
54e0: 6d 69 74 20 3d 20 73 71 6c 69 74 65 33 50 61 67  mit = sqlite3Pag
54f0: 65 72 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d  erJournalSizeLim
5500: 69 74 28 70 50 61 67 65 72 2c 20 69 4c 69 6d 69  it(pPager, iLimi
5510: 74 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69  t);.    returnSi
5520: 6e 67 6c 65 49 6e 74 28 76 2c 20 22 6a 6f 75 72  ngleInt(v, "jour
5530: 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c  nal_size_limit",
5540: 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 62 72   iLimit);.    br
5550: 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66  eak;.  }..#endif
5560: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
5570: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
5580: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
5590: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 75 74  GMA [schema.]aut
55a0: 6f 5f 76 61 63 75 75 6d 0a 20 20 2a 2a 20 20 50  o_vacuum.  **  P
55b0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61  RAGMA [schema.]a
55c0: 75 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a  uto_vacuum=N.  *
55d0: 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20 73 65  *.  ** Get or se
55e0: 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  t the value of t
55f0: 68 65 20 64 61 74 61 62 61 73 65 20 27 61 75 74  he database 'aut
5600: 6f 2d 76 61 63 75 75 6d 27 20 70 61 72 61 6d 65  o-vacuum' parame
5610: 74 65 72 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61  ter..  ** The va
5620: 6c 75 65 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20  lue is one of:  
5630: 30 20 4e 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20  0 NONE 1 FULL 2 
5640: 49 4e 43 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f  INCREMENTAL.  */
5650: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5660: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
5670: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 41    case PragTyp_A
5680: 55 54 4f 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20  UTO_VACUUM: {.  
5690: 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70    Btree *pBt = p
56a0: 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73 73  Db->pBt;.    ass
56b0: 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20  ert( pBt!=0 );. 
56c0: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
56d0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  {.      returnSi
56e0: 6e 67 6c 65 49 6e 74 28 76 2c 20 22 61 75 74 6f  ngleInt(v, "auto
56f0: 5f 76 61 63 75 75 6d 22 2c 20 73 71 6c 69 74 65  _vacuum", sqlite
5700: 33 42 74 72 65 65 47 65 74 41 75 74 6f 56 61 63  3BtreeGetAutoVac
5710: 75 75 6d 28 70 42 74 29 29 3b 0a 20 20 20 20 7d  uum(pBt));.    }
5720: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20  else{.      int 
5730: 65 41 75 74 6f 20 3d 20 67 65 74 41 75 74 6f 56  eAuto = getAutoV
5740: 61 63 75 75 6d 28 7a 52 69 67 68 74 29 3b 0a 20  acuum(zRight);. 
5750: 20 20 20 20 20 61 73 73 65 72 74 28 20 65 41 75       assert( eAu
5760: 74 6f 3e 3d 30 20 26 26 20 65 41 75 74 6f 3c 3d  to>=0 && eAuto<=
5770: 32 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e  2 );.      db->n
5780: 65 78 74 41 75 74 6f 76 61 63 20 3d 20 28 75 38  extAutovac = (u8
5790: 29 65 41 75 74 6f 3b 0a 20 20 20 20 20 20 2f 2a  )eAuto;.      /*
57a0: 20 43 61 6c 6c 20 53 65 74 41 75 74 6f 56 61 63   Call SetAutoVac
57b0: 75 75 6d 28 29 20 74 6f 20 73 65 74 20 69 6e 69  uum() to set ini
57c0: 74 69 61 6c 69 7a 65 20 74 68 65 20 69 6e 74 65  tialize the inte
57d0: 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64 0a 20 20  rnal auto and.  
57e0: 20 20 20 20 2a 2a 20 69 6e 63 72 2d 76 61 63 75      ** incr-vacu
57f0: 75 6d 20 66 6c 61 67 73 2e 20 54 68 69 73 20 69  um flags. This i
5800: 73 20 72 65 71 75 69 72 65 64 20 69 6e 20 63 61  s required in ca
5810: 73 65 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69  se this connecti
5820: 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 63 72 65 61  on.      ** crea
5830: 74 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  tes the database
5840: 20 66 69 6c 65 2e 20 49 74 20 69 73 20 69 6d 70   file. It is imp
5850: 6f 72 74 61 6e 74 20 74 68 61 74 20 69 74 20 69  ortant that it i
5860: 73 20 63 72 65 61 74 65 64 0a 20 20 20 20 20 20  s created.      
5870: 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61  ** as an auto-va
5880: 63 75 75 6d 20 63 61 70 61 62 6c 65 20 64 62 2e  cuum capable db.
5890: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
58a0: 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
58b0: 65 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28 70  eSetAutoVacuum(p
58c0: 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20 20 20 20  Bt, eAuto);.    
58d0: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
58e0: 5f 4f 4b 20 26 26 20 28 65 41 75 74 6f 3d 3d 31  _OK && (eAuto==1
58f0: 20 7c 7c 20 65 41 75 74 6f 3d 3d 32 29 20 29 7b   || eAuto==2) ){
5900: 0a 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e  .        /* When
5910: 20 73 65 74 74 69 6e 67 20 74 68 65 20 61 75 74   setting the aut
5920: 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65 20 74 6f  o_vacuum mode to
5930: 20 65 69 74 68 65 72 20 22 66 75 6c 6c 22 20 6f   either "full" o
5940: 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 69  r .        ** "i
5950: 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20 77 72 69  ncremental", wri
5960: 74 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  te the value of 
5970: 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68 65 20 64  meta[6] in the d
5980: 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 20 20  atabase.        
5990: 2a 2a 20 66 69 6c 65 2e 20 42 65 66 6f 72 65 20  ** file. Before 
59a0: 77 72 69 74 69 6e 67 20 74 6f 20 6d 65 74 61 5b  writing to meta[
59b0: 36 5d 2c 20 63 68 65 63 6b 20 74 68 61 74 20 6d  6], check that m
59c0: 65 74 61 5b 33 5d 20 69 6e 64 69 63 61 74 65 73  eta[3] indicates
59d0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 74  .        ** that
59e0: 20 74 68 69 73 20 72 65 61 6c 6c 79 20 69 73 20   this really is 
59f0: 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 63  an auto-vacuum c
5a00: 61 70 61 62 6c 65 20 64 61 74 61 62 61 73 65 2e  apable database.
5a10: 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
5a20: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
5a30: 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f   int iLn = VDBE_
5a40: 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29  OFFSET_LINENO(2)
5a50: 3b 0a 20 20 20 20 20 20 20 20 73 74 61 74 69 63  ;.        static
5a60: 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
5a70: 74 20 73 65 74 4d 65 74 61 36 5b 5d 20 3d 20 7b  t setMeta6[] = {
5a80: 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  .          { OP_
5a90: 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20  Transaction,    
5aa0: 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20  0,         1,   
5ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 7d                0}
5ac0: 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  ,    /* 0 */.   
5ad0: 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64         { OP_Read
5ae0: 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c 20 20  Cookie,     0,  
5af0: 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20         1,       
5b00: 20 20 42 54 52 45 45 5f 4c 41 52 47 45 53 54 5f    BTREE_LARGEST_
5b10: 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20 20 20  ROOT_PAGE},.    
5b20: 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20        { OP_If,  
5b30: 20 20 20 20 20 20 20 20 20 20 20 31 2c 20 20 20             1,   
5b40: 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20        0,        
5b50: 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20           0},    
5b60: 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 2 */.        
5b70: 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20    { OP_Halt,    
5b80: 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b         SQLITE_OK
5b90: 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20 20 20 20  , OE_Abort,     
5ba0: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33       0},    /* 3
5bb0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20   */.          { 
5bc0: 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20  OP_SetCookie,   
5bd0: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 42 54     0,         BT
5be0: 52 45 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c  REE_INCR_VACUUM,
5bf0: 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a   0},    /* 4 */.
5c00: 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20          };.     
5c10: 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a     VdbeOp *aOp;.
5c20: 20 20 20 20 20 20 20 20 69 6e 74 20 69 41 64 64          int iAdd
5c30: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  r = sqlite3VdbeC
5c40: 75 72 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20  urrentAddr(v);. 
5c50: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
5c60: 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63  beVerifyNoMalloc
5c70: 52 65 71 75 69 72 65 64 28 76 2c 20 41 72 72 61  Required(v, Arra
5c80: 79 53 69 7a 65 28 73 65 74 4d 65 74 61 36 29 29  ySize(setMeta6))
5c90: 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 20 3d 20  ;.        aOp = 
5ca0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
5cb0: 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a  List(v, ArraySiz
5cc0: 65 28 73 65 74 4d 65 74 61 36 29 2c 20 73 65 74  e(setMeta6), set
5cd0: 4d 65 74 61 36 2c 20 69 4c 6e 29 3b 0a 20 20 20  Meta6, iLn);.   
5ce0: 20 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46       if( ONLY_IF
5cf0: 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28  _REALLOC_STRESS(
5d00: 61 4f 70 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b  aOp==0) ) break;
5d10: 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e  .        aOp[0].
5d20: 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20  p1 = iDb;.      
5d30: 20 20 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44    aOp[1].p1 = iD
5d40: 62 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 32  b;.        aOp[2
5d50: 5d 2e 70 32 20 3d 20 69 41 64 64 72 2b 34 3b 0a  ].p2 = iAddr+4;.
5d60: 20 20 20 20 20 20 20 20 61 4f 70 5b 34 5d 2e 70          aOp[4].p
5d70: 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 20  1 = iDb;.       
5d80: 20 61 4f 70 5b 34 5d 2e 70 33 20 3d 20 65 41 75   aOp[4].p3 = eAu
5d90: 74 6f 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  to - 1;.        
5da0: 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42  sqlite3VdbeUsesB
5db0: 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20  tree(v, iDb);.  
5dc0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
5dd0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69  break;.  }.#endi
5de0: 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  f..  /*.  **  PR
5df0: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69 6e  AGMA [schema.]in
5e00: 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d  cremental_vacuum
5e10: 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f  (N).  **.  ** Do
5e20: 20 4e 20 73 74 65 70 73 20 6f 66 20 69 6e 63 72   N steps of incr
5e30: 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e  emental vacuumin
5e40: 67 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2e  g on a database.
5e50: 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  .  */.#ifndef SQ
5e60: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
5e70: 43 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67  CUUM.  case Prag
5e80: 54 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f  Typ_INCREMENTAL_
5e90: 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e  VACUUM: {.    in
5ea0: 74 20 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a  t iLimit, addr;.
5eb0: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d      if( zRight==
5ec0: 30 20 7c 7c 20 21 73 71 6c 69 74 65 33 47 65 74  0 || !sqlite3Get
5ed0: 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 69  Int32(zRight, &i
5ee0: 4c 69 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74  Limit) || iLimit
5ef0: 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 4c 69  <=0 ){.      iLi
5f00: 6d 69 74 20 3d 20 30 78 37 66 66 66 66 66 66 66  mit = 0x7fffffff
5f10: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
5f20: 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
5f30: 72 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30  ration(pParse, 0
5f40: 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69  , iDb);.    sqli
5f50: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
5f60: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69   OP_Integer, iLi
5f70: 6d 69 74 2c 20 31 29 3b 0a 20 20 20 20 61 64 64  mit, 1);.    add
5f80: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
5f90: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72  ddOp1(v, OP_Incr
5fa0: 56 61 63 75 75 6d 2c 20 69 44 62 29 3b 20 56 64  Vacuum, iDb); Vd
5fb0: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
5fc0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
5fd0: 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp1(v, OP_Resul
5fe0: 74 52 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73 71  tRow, 1);.    sq
5ff0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
6000: 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c  v, OP_AddImm, 1,
6010: 20 2d 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65   -1);.    sqlite
6020: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
6030: 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72  P_IfPos, 1, addr
6040: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
6050: 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  v);.    sqlite3V
6060: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
6070: 64 64 72 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  ddr);.    break;
6080: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .  }.#endif..#if
6090: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
60a0: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20  _PAGER_PRAGMAS. 
60b0: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
60c0: 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f   [schema.]cache_
60d0: 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d  size.  **  PRAGM
60e0: 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65  A [schema.]cache
60f0: 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a  _size=N.  **.  *
6100: 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d  * The first form
6110: 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72   reports the cur
6120: 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69  rent local setti
6130: 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ng for the.  ** 
6140: 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e  page cache size.
6150: 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
6160: 20 73 65 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a   sets the local.
6170: 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20    ** page cache 
6180: 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 49 66 20  size value.  If 
6190: 4e 20 69 73 20 70 6f 73 69 74 69 76 65 20 74 68  N is positive th
61a0: 65 6e 20 74 68 61 74 20 69 73 20 74 68 65 0a 20  en that is the. 
61b0: 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61   ** number of pa
61c0: 67 65 73 20 69 6e 20 74 68 65 20 63 61 63 68 65  ges in the cache
61d0: 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74  .  If N is negat
61e0: 69 76 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20  ive, then the.  
61f0: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  ** number of pag
6200: 65 73 20 69 73 20 61 64 6a 75 73 74 65 64 20 73  es is adjusted s
6210: 6f 20 74 68 61 74 20 74 68 65 20 63 61 63 68 65  o that the cache
6220: 20 75 73 65 73 20 2d 4e 20 6b 69 62 69 62 79 74   uses -N kibibyt
6230: 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72  es.  ** of memor
6240: 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  y..  */.  case P
6250: 72 61 67 54 79 70 5f 43 41 43 48 45 5f 53 49 5a  ragTyp_CACHE_SIZ
6260: 45 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28  E: {.    assert(
6270: 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
6280: 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
6290: 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 21   0) );.    if( !
62a0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
62b0: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
62c0: 76 2c 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c  v, "cache_size",
62d0: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63   pDb->pSchema->c
62e0: 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20  ache_size);.    
62f0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
6300: 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41   size = sqlite3A
6310: 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20  toi(zRight);.   
6320: 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
6330: 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69  >cache_size = si
6340: 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ze;.      sqlite
6350: 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69  3BtreeSetCacheSi
6360: 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62  ze(pDb->pBt, pDb
6370: 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65  ->pSchema->cache
6380: 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20  _size);.    }.  
6390: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
63a0: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
63b0: 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73  [schema.]cache_s
63c0: 70 69 6c 6c 0a 20 20 2a 2a 20 20 50 52 41 47 4d  pill.  **  PRAGM
63d0: 41 20 63 61 63 68 65 5f 73 70 69 6c 6c 3d 42 4f  A cache_spill=BO
63e0: 4f 4c 45 41 4e 0a 20 20 2a 2a 20 20 50 52 41 47  OLEAN.  **  PRAG
63f0: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68  MA [schema.]cach
6400: 65 5f 73 70 69 6c 6c 3d 4e 0a 20 20 2a 2a 0a 20  e_spill=N.  **. 
6410: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f   ** The first fo
6420: 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63  rm reports the c
6430: 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74  urrent local set
6440: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a  ting for the.  *
6450: 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 70 69  * page cache spi
6460: 6c 6c 20 73 69 7a 65 2e 20 54 68 65 20 73 65 63  ll size. The sec
6470: 6f 6e 64 20 66 6f 72 6d 20 74 75 72 6e 73 20 63  ond form turns c
6480: 61 63 68 65 20 73 70 69 6c 6c 20 6f 6e 0a 20 20  ache spill on.  
6490: 2a 2a 20 6f 72 20 6f 66 66 2e 20 20 57 68 65 6e  ** or off.  When
64a0: 20 74 75 72 6e 6e 69 6e 67 20 63 61 63 68 65 20   turnning cache 
64b0: 73 70 69 6c 6c 20 6f 6e 2c 20 74 68 65 20 73 69  spill on, the si
64c0: 7a 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  ze is set to the
64d0: 0a 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 63 61  .  ** current ca
64e0: 63 68 65 5f 73 69 7a 65 2e 20 20 54 68 65 20 74  che_size.  The t
64f0: 68 69 72 64 20 66 6f 72 6d 20 73 65 74 73 20 61  hird form sets a
6500: 20 73 70 69 6c 6c 20 73 69 7a 65 20 74 68 61 74   spill size that
6510: 0a 20 20 2a 2a 20 6d 61 79 20 62 65 20 64 69 66  .  ** may be dif
6520: 66 65 72 65 6e 74 20 66 6f 72 6d 20 74 68 65 20  ferent form the 
6530: 63 61 63 68 65 20 73 69 7a 65 2e 0a 20 20 2a 2a  cache size..  **
6540: 20 49 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76   If N is positiv
6550: 65 20 74 68 65 6e 20 74 68 61 74 20 69 73 20 74  e then that is t
6560: 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f  he.  ** number o
6570: 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 63  f pages in the c
6580: 61 63 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e  ache.  If N is n
6590: 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68  egative, then th
65a0: 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  e.  ** number of
65b0: 20 70 61 67 65 73 20 69 73 20 61 64 6a 75 73 74   pages is adjust
65c0: 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 63  ed so that the c
65d0: 61 63 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62  ache uses -N kib
65e0: 69 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d  ibytes.  ** of m
65f0: 65 6d 6f 72 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  emory..  **.  **
6600: 20 49 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   If the number o
6610: 66 20 63 61 63 68 65 5f 73 70 69 6c 6c 20 70 61  f cache_spill pa
6620: 67 65 73 20 69 73 20 6c 65 73 73 20 74 68 65 6e  ges is less then
6630: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 20   the number of. 
6640: 20 2a 2a 20 63 61 63 68 65 5f 73 69 7a 65 20 70   ** cache_size p
6650: 61 67 65 73 2c 20 6e 6f 20 73 70 69 6c 6c 69 6e  ages, no spillin
6660: 67 20 6f 63 63 75 72 73 20 75 6e 74 69 6c 20 74  g occurs until t
6670: 68 65 20 70 61 67 65 20 63 6f 75 6e 74 20 65 78  he page count ex
6680: 63 65 65 64 73 0a 20 20 2a 2a 20 74 68 65 20 6e  ceeds.  ** the n
6690: 75 6d 62 65 72 20 6f 66 20 63 61 63 68 65 5f 73  umber of cache_s
66a0: 69 7a 65 20 70 61 67 65 73 2e 0a 20 20 2a 2a 0a  ize pages..  **.
66b0: 20 20 2a 2a 20 54 68 65 20 63 61 63 68 65 5f 73    ** The cache_s
66c0: 70 69 6c 6c 3d 42 4f 4f 4c 45 41 4e 20 73 65 74  pill=BOOLEAN set
66d0: 74 69 6e 67 20 61 70 70 6c 69 65 73 20 74 6f 20  ting applies to 
66e0: 61 6c 6c 20 61 74 74 61 63 68 65 64 20 73 63 68  all attached sch
66f0: 65 6d 61 73 2c 0a 20 20 2a 2a 20 6e 6f 74 20 6a  emas,.  ** not j
6700: 75 73 74 20 74 68 65 20 73 63 68 65 6d 61 20 73  ust the schema s
6710: 70 65 63 69 66 69 65 64 2e 0a 20 20 2a 2f 0a 20  pecified..  */. 
6720: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 41   case PragTyp_CA
6730: 43 48 45 5f 53 50 49 4c 4c 3a 20 7b 0a 20 20 20  CHE_SPILL: {.   
6740: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
6750: 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
6760: 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
6770: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
6780: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  {.      returnSi
6790: 6e 67 6c 65 49 6e 74 28 76 2c 20 22 63 61 63 68  ngleInt(v, "cach
67a0: 65 5f 73 70 69 6c 6c 22 2c 20 0a 20 20 20 20 20  e_spill", .     
67b0: 20 20 20 20 28 64 62 2d 3e 66 6c 61 67 73 20 26      (db->flags &
67c0: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
67d0: 6c 6c 29 3d 3d 30 20 3f 20 30 20 3a 20 0a 20 20  ll)==0 ? 0 : .  
67e0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
67f0: 33 42 74 72 65 65 53 65 74 53 70 69 6c 6c 53 69  3BtreeSetSpillSi
6800: 7a 65 28 70 44 62 2d 3e 70 42 74 2c 30 29 29 3b  ze(pDb->pBt,0));
6810: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
6820: 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 31 3b 0a    int size = 1;.
6830: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
6840: 33 47 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74  3GetInt32(zRight
6850: 2c 20 26 73 69 7a 65 29 20 29 7b 0a 20 20 20 20  , &size) ){.    
6860: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
6870: 53 65 74 53 70 69 6c 6c 53 69 7a 65 28 70 44 62  SetSpillSize(pDb
6880: 2d 3e 70 42 74 2c 20 73 69 7a 65 29 3b 0a 20 20  ->pBt, size);.  
6890: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
68a0: 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
68b0: 6e 28 7a 52 69 67 68 74 2c 20 73 69 7a 65 21 3d  n(zRight, size!=
68c0: 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62  0) ){.        db
68d0: 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
68e0: 45 5f 43 61 63 68 65 53 70 69 6c 6c 3b 0a 20 20  E_CacheSpill;.  
68f0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6900: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20     db->flags &= 
6910: 7e 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69  ~SQLITE_CacheSpi
6920: 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ll;.      }.    
6930: 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61    setAllPagerFla
6940: 67 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20  gs(db);.    }.  
6950: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
6960: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
6970: 5b 73 63 68 65 6d 61 2e 5d 6d 6d 61 70 5f 73 69  [schema.]mmap_si
6980: 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ze(N).  **.  ** 
6990: 55 73 65 64 20 74 6f 20 73 65 74 20 6d 61 70 70  Used to set mapp
69a0: 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74 2e 20  ing size limit. 
69b0: 54 68 65 20 6d 61 70 70 69 6e 67 20 73 69 7a 65  The mapping size
69c0: 20 6c 69 6d 69 74 20 69 73 0a 20 20 2a 2a 20 75   limit is.  ** u
69d0: 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74 68 65  sed to limit the
69e0: 20 61 67 67 72 65 67 61 74 65 20 73 69 7a 65 20   aggregate size 
69f0: 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72 79 20 6d 61  of all memory ma
6a00: 70 70 65 64 20 72 65 67 69 6f 6e 73 20 6f 66 20  pped regions of 
6a10: 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73  the.  ** databas
6a20: 65 20 66 69 6c 65 2e 20 49 66 20 74 68 69 73 20  e file. If this 
6a30: 70 61 72 61 6d 65 74 65 72 20 69 73 20 73 65 74  parameter is set
6a40: 20 74 6f 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6d   to zero, then m
6a50: 65 6d 6f 72 79 20 6d 61 70 70 69 6e 67 0a 20 20  emory mapping.  
6a60: 2a 2a 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61  ** is not used a
6a70: 74 20 61 6c 6c 2e 20 20 49 66 20 4e 20 69 73 20  t all.  If N is 
6a80: 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74  negative, then t
6a90: 68 65 20 64 65 66 61 75 6c 74 20 6d 65 6d 6f 72  he default memor
6aa0: 79 20 6d 61 70 0a 20 20 2a 2a 20 6c 69 6d 69 74  y map.  ** limit
6ab0: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 73   determined by s
6ac0: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51  qlite3_config(SQ
6ad0: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50  LITE_CONFIG_MMAP
6ae0: 5f 53 49 5a 45 29 20 69 73 20 73 65 74 2e 0a 20  _SIZE) is set.. 
6af0: 20 2a 2a 20 54 68 65 20 70 61 72 61 6d 65 74 65   ** The paramete
6b00: 72 20 4e 20 69 73 20 6d 65 61 73 75 72 65 64 20  r N is measured 
6b10: 69 6e 20 62 79 74 65 73 2e 0a 20 20 2a 2a 0a 20  in bytes..  **. 
6b20: 20 2a 2a 20 54 68 69 73 20 76 61 6c 75 65 20 69   ** This value i
6b30: 73 20 61 64 76 69 73 6f 72 79 2e 20 20 54 68 65  s advisory.  The
6b40: 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46 53 20   underlying VFS 
6b50: 69 73 20 66 72 65 65 20 74 6f 20 6d 65 6d 6f 72  is free to memor
6b60: 79 20 6d 61 70 0a 20 20 2a 2a 20 61 73 20 6c 69  y map.  ** as li
6b70: 74 74 6c 65 20 6f 72 20 61 73 20 6d 75 63 68 20  ttle or as much 
6b80: 61 73 20 69 74 20 77 61 6e 74 73 2e 20 20 45 78  as it wants.  Ex
6b90: 63 65 70 74 2c 20 69 66 20 4e 20 69 73 20 73 65  cept, if N is se
6ba0: 74 20 74 6f 20 30 20 74 68 65 6e 20 74 68 65 0a  t to 0 then the.
6bb0: 20 20 2a 2a 20 75 70 70 65 72 20 6c 61 79 65 72    ** upper layer
6bc0: 73 20 77 69 6c 6c 20 6e 65 76 65 72 20 69 6e 76  s will never inv
6bd0: 6f 6b 65 20 74 68 65 20 78 46 65 74 63 68 20 69  oke the xFetch i
6be0: 6e 74 65 72 66 61 63 65 73 20 74 6f 20 74 68 65  nterfaces to the
6bf0: 20 56 46 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73   VFS..  */.  cas
6c00: 65 20 50 72 61 67 54 79 70 5f 4d 4d 41 50 5f 53  e PragTyp_MMAP_S
6c10: 49 5a 45 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74  IZE: {.    sqlit
6c20: 65 33 5f 69 6e 74 36 34 20 73 7a 3b 0a 23 69 66  e3_int64 sz;.#if
6c30: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
6c40: 5f 53 49 5a 45 3e 30 0a 20 20 20 20 61 73 73 65  _SIZE>0.    asse
6c50: 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
6c60: 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
6c70: 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66  Db, 0) );.    if
6c80: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
6c90: 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20    int ii;.      
6ca0: 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
6cb0: 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 73 7a  oI64(zRight, &sz
6cc0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 7a 3c  );.      if( sz<
6cd0: 30 20 29 20 73 7a 20 3d 20 73 71 6c 69 74 65 33  0 ) sz = sqlite3
6ce0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 4d  GlobalConfig.szM
6cf0: 6d 61 70 3b 0a 20 20 20 20 20 20 69 66 28 20 70  map;.      if( p
6d00: 49 64 32 2d 3e 6e 3d 3d 30 20 29 20 64 62 2d 3e  Id2->n==0 ) db->
6d10: 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b 0a 20 20 20  szMmap = sz;.   
6d20: 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44     for(ii=db->nD
6d30: 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d  b-1; ii>=0; ii--
6d40: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 64  ){.        if( d
6d50: 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26  b->aDb[ii].pBt &
6d60: 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49  & (ii==iDb || pI
6d70: 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20  d2->n==0) ){.   
6d80: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
6d90: 72 65 65 53 65 74 4d 6d 61 70 4c 69 6d 69 74 28  reeSetMmapLimit(
6da0: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
6db0: 20 73 7a 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a   sz);.        }.
6dc0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
6dd0: 20 20 73 7a 20 3d 20 2d 31 3b 0a 20 20 20 20 72    sz = -1;.    r
6de0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  c = sqlite3_file
6df0: 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62  _control(db, zDb
6e00: 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4d  , SQLITE_FCNTL_M
6e10: 4d 41 50 5f 53 49 5a 45 2c 20 26 73 7a 29 3b 0a  MAP_SIZE, &sz);.
6e20: 23 65 6c 73 65 0a 20 20 20 20 73 7a 20 3d 20 30  #else.    sz = 0
6e30: 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
6e40: 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 20 20 20  E_OK;.#endif.   
6e50: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
6e60: 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  OK ){.      retu
6e70: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22  rnSingleInt(v, "
6e80: 6d 6d 61 70 5f 73 69 7a 65 22 2c 20 73 7a 29 3b  mmap_size", sz);
6e90: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72  .    }else if( r
6ea0: 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55  c!=SQLITE_NOTFOU
6eb0: 4e 44 20 29 7b 0a 20 20 20 20 20 20 70 50 61 72  ND ){.      pPar
6ec0: 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20  se->nErr++;.    
6ed0: 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72    pParse->rc = r
6ee0: 63 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65  c;.    }.    bre
6ef0: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
6f00: 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  **   PRAGMA temp
6f10: 5f 73 74 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52  _store.  **   PR
6f20: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20  AGMA temp_store 
6f30: 3d 20 22 64 65 66 61 75 6c 74 22 7c 22 6d 65 6d  = "default"|"mem
6f40: 6f 72 79 22 7c 22 66 69 6c 65 22 0a 20 20 2a 2a  ory"|"file".  **
6f50: 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20  .  ** Return or 
6f60: 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61  set the local va
6f70: 6c 75 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f  lue of the temp_
6f80: 73 74 6f 72 65 20 66 6c 61 67 2e 20 20 43 68 61  store flag.  Cha
6f90: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c  nging.  ** the l
6fa0: 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20  ocal value does 
6fb0: 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73  not make changes
6fc0: 20 74 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c   to the disk fil
6fd0: 65 20 61 6e 64 20 74 68 65 20 64 65 66 61 75 6c  e and the defaul
6fe0: 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 77 69 6c  t.  ** value wil
6ff0: 6c 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 68  l be restored th
7000: 65 20 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20  e next time the 
7010: 64 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e  database is open
7020: 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f  ed..  **.  ** No
7030: 74 65 20 74 68 61 74 20 69 74 20 69 73 20 70 6f  te that it is po
7040: 73 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 6c  ssible for the l
7050: 69 62 72 61 72 79 20 63 6f 6d 70 69 6c 65 2d 74  ibrary compile-t
7060: 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74 6f 0a 20  ime options to. 
7070: 20 2a 2a 20 6f 76 65 72 72 69 64 65 20 74 68 69   ** override thi
7080: 73 20 73 65 74 74 69 6e 67 0a 20 20 2a 2f 0a 20  s setting.  */. 
7090: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 45   case PragTyp_TE
70a0: 4d 50 5f 53 54 4f 52 45 3a 20 7b 0a 20 20 20 20  MP_STORE: {.    
70b0: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
70c0: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
70d0: 65 49 6e 74 28 76 2c 20 22 74 65 6d 70 5f 73 74  eInt(v, "temp_st
70e0: 6f 72 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73  ore", db->temp_s
70f0: 74 6f 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  tore);.    }else
7100: 7b 0a 20 20 20 20 20 20 63 68 61 6e 67 65 54 65  {.      changeTe
7110: 6d 70 53 74 6f 72 61 67 65 28 70 50 61 72 73 65  mpStorage(pParse
7120: 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d  , zRight);.    }
7130: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
7140: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
7150: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
7160: 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20  irectory.  **   
7170: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
7180: 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22  e_directory = ""
7190: 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65  |"directory_name
71a0: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
71b0: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f  rn or set the lo
71c0: 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65  cal value of the
71d0: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
71e0: 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61  ctory flag.  Cha
71f0: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76  nging.  ** the v
7200: 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63  alue sets a spec
7210: 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20 74  ific directory t
7220: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 65  o be used for te
7230: 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a 20  mporary files.. 
7240: 20 2a 2a 20 53 65 74 74 69 6e 67 20 74 6f 20 61   ** Setting to a
7250: 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76   null string rev
7260: 65 72 74 73 20 74 6f 20 74 68 65 20 64 65 66 61  erts to the defa
7270: 75 6c 74 20 74 65 6d 70 6f 72 61 72 79 20 64 69  ult temporary di
7280: 72 65 63 74 6f 72 79 20 73 65 61 72 63 68 2e 0a  rectory search..
7290: 20 20 2a 2a 20 49 66 20 74 65 6d 70 6f 72 61 72    ** If temporar
72a0: 79 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 63  y directory is c
72b0: 68 61 6e 67 65 64 2c 20 74 68 65 6e 20 69 6e 76  hanged, then inv
72c0: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
72d0: 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20  ge..  **.  */.  
72e0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d  case PragTyp_TEM
72f0: 50 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52  P_STORE_DIRECTOR
7300: 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52  Y: {.    if( !zR
7310: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65  ight ){.      re
7320: 74 75 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76  turnSingleText(v
7330: 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  , "temp_store_di
7340: 72 65 63 74 6f 72 79 22 2c 20 73 71 6c 69 74 65  rectory", sqlite
7350: 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79  3_temp_directory
7360: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69  );.    }else{.#i
7370: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7380: 54 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28 20  T_WSD.      if( 
7390: 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20  zRight[0] ){.   
73a0: 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20       int res;.  
73b0: 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
73c0: 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e 70  e3OsAccess(db->p
73d0: 56 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c  Vfs, zRight, SQL
73e0: 49 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44 57  ITE_ACCESS_READW
73f0: 52 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20 20  RITE, &res);.   
7400: 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
7410: 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30  ITE_OK || res==0
7420: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
7430: 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50  lite3ErrorMsg(pP
7440: 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72 69  arse, "not a wri
7450: 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79 22  table directory"
7460: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  );.          got
7470: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
7480: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
7490: 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54 45        if( SQLITE
74a0: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20  _TEMP_STORE==0. 
74b0: 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54 45        || (SQLITE
74c0: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26  _TEMP_STORE==1 &
74d0: 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65  & db->temp_store
74e0: 3c 3d 31 29 0a 20 20 20 20 20 20 20 7c 7c 20 28  <=1).       || (
74f0: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
7500: 45 3d 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d 70  E==2 && db->temp
7510: 5f 73 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20  _store==1).     
7520: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 76 61   ){.        inva
7530: 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67  lidateTempStorag
7540: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  e(pParse);.     
7550: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
7560: 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 74 65  _free(sqlite3_te
7570: 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20  mp_directory);. 
7580: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
7590: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  0] ){.        sq
75a0: 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63  lite3_temp_direc
75b0: 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d  tory = sqlite3_m
75c0: 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69  printf("%s", zRi
75d0: 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ght);.      }els
75e0: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
75f0: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
7600: 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23  y = 0;.      }.#
7610: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
7620: 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20  OMIT_WSD */.    
7630: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
7640: 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f  ..#if SQLITE_OS_
7650: 57 49 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  WIN.  /*.  **   
7660: 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72  PRAGMA data_stor
7670: 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a  e_directory.  **
7680: 20 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73     PRAGMA data_s
7690: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d  tore_directory =
76a0: 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e   ""|"directory_n
76b0: 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  ame".  **.  ** R
76c0: 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65  eturn or set the
76d0: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20   local value of 
76e0: 74 68 65 20 64 61 74 61 5f 73 74 6f 72 65 5f 64  the data_store_d
76f0: 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20  irectory flag.  
7700: 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68  Changing.  ** th
7710: 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20 73  e value sets a s
7720: 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f 72  pecific director
7730: 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72  y to be used for
7740: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
7750: 74 68 61 74 0a 20 20 2a 2a 20 77 65 72 65 20 73  that.  ** were s
7760: 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61 20  pecified with a 
7770: 72 65 6c 61 74 69 76 65 20 70 61 74 68 6e 61 6d  relative pathnam
7780: 65 2e 20 20 53 65 74 74 69 6e 67 20 74 6f 20 61  e.  Setting to a
7790: 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76   null string rev
77a0: 65 72 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65  erts.  ** to the
77b0: 20 64 65 66 61 75 6c 74 20 64 61 74 61 62 61 73   default databas
77c0: 65 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68 69  e directory, whi
77d0: 63 68 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  ch for database 
77e0: 66 69 6c 65 73 20 73 70 65 63 69 66 69 65 64 20  files specified 
77f0: 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61  with.  ** a rela
7800: 74 69 76 65 20 70 61 74 68 20 77 69 6c 6c 20 70  tive path will p
7810: 72 6f 62 61 62 6c 79 20 62 65 20 62 61 73 65 64  robably be based
7820: 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   on the current 
7830: 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68  directory for th
7840: 65 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20  e.  ** process. 
7850: 20 44 61 74 61 62 61 73 65 20 66 69 6c 65 20 73   Database file s
7860: 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61 6e  pecified with an
7870: 20 61 62 73 6f 6c 75 74 65 20 70 61 74 68 20 61   absolute path a
7880: 72 65 20 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a  re not impacted.
7890: 20 20 2a 2a 20 62 79 20 74 68 69 73 20 73 65 74    ** by this set
78a0: 74 69 6e 67 2c 20 72 65 67 61 72 64 6c 65 73 73  ting, regardless
78b0: 20 6f 66 20 69 74 73 20 76 61 6c 75 65 2e 0a 20   of its value.. 
78c0: 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20   **.  */.  case 
78d0: 50 72 61 67 54 79 70 5f 44 41 54 41 5f 53 54 4f  PragTyp_DATA_STO
78e0: 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a  RE_DIRECTORY: {.
78f0: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
7900: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
7910: 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 64 61  ingleText(v, "da
7920: 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  ta_store_directo
7930: 72 79 22 2c 20 73 71 6c 69 74 65 33 5f 64 61 74  ry", sqlite3_dat
7940: 61 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20  a_directory);.  
7950: 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66    }else{.#ifndef
7960: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
7970: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
7980: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
7990: 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20  int res;.       
79a0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41   rc = sqlite3OsA
79b0: 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20  ccess(db->pVfs, 
79c0: 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41  zRight, SQLITE_A
79d0: 43 43 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c  CCESS_READWRITE,
79e0: 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
79f0: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
7a00: 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K || res==0 ){. 
7a10: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
7a20: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
7a30: 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65   "not a writable
7a40: 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20   directory");.  
7a50: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61          goto pra
7a60: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20  gma_out;.       
7a70: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
7a80: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73 71   sqlite3_free(sq
7a90: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
7aa0: 74 6f 72 79 29 3b 0a 20 20 20 20 20 20 69 66 28  tory);.      if(
7ab0: 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20   zRight[0] ){.  
7ac0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64 61        sqlite3_da
7ad0: 74 61 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 73  ta_directory = s
7ae0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
7af0: 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20  %s", zRight);.  
7b00: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7b10: 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f     sqlite3_data_
7b20: 64 69 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20  directory = 0;. 
7b30: 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a       }.#endif /*
7b40: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
7b50: 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 62 72   */.    }.    br
7b60: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
7b70: 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  .#if SQLITE_ENAB
7b80: 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45  LE_LOCKING_STYLE
7b90: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
7ba0: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6c 6f 63  GMA [schema.]loc
7bb0: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 0a 20 20 2a  k_proxy_file.  *
7bc0: 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  *   PRAGMA [sche
7bd0: 6d 61 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  ma.]lock_proxy_f
7be0: 69 6c 65 20 3d 20 22 3a 61 75 74 6f 3a 22 7c 22  ile = ":auto:"|"
7bf0: 6c 6f 63 6b 5f 66 69 6c 65 5f 70 61 74 68 22 0a  lock_file_path".
7c00: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
7c10: 20 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c 75   or set the valu
7c20: 65 20 6f 66 20 74 68 65 20 6c 6f 63 6b 5f 70 72  e of the lock_pr
7c30: 6f 78 79 5f 66 69 6c 65 20 66 6c 61 67 2e 20 20  oxy_file flag.  
7c40: 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68  Changing.  ** th
7c50: 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20 73  e value sets a s
7c60: 70 65 63 69 66 69 63 20 66 69 6c 65 20 74 6f 20  pecific file to 
7c70: 62 65 20 75 73 65 64 20 66 6f 72 20 64 61 74 61  be used for data
7c80: 62 61 73 65 20 61 63 63 65 73 73 20 6c 6f 63 6b  base access lock
7c90: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63  s..  **.  */.  c
7ca0: 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b  ase PragTyp_LOCK
7cb0: 5f 50 52 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a 20  _PROXY_FILE: {. 
7cc0: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
7cd0: 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a 70  {.      Pager *p
7ce0: 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
7cf0: 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70  treePager(pDb->p
7d00: 42 74 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20  Bt);.      char 
7d10: 2a 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68  *proxy_file_path
7d20: 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 73   = NULL;.      s
7d30: 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69  qlite3_file *pFi
7d40: 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  le = sqlite3Page
7d50: 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20  rFile(pPager);. 
7d60: 20 20 20 20 20 73 71 6c 69 74 65 33 4f 73 46 69       sqlite3OsFi
7d70: 6c 65 43 6f 6e 74 72 6f 6c 48 69 6e 74 28 70 46  leControlHint(pF
7d80: 69 6c 65 2c 20 53 51 4c 49 54 45 5f 47 45 54 5f  ile, SQLITE_GET_
7d90: 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a  LOCKPROXYFILE, .
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7db0: 20 20 20 20 20 20 20 20 20 20 20 26 70 72 6f 78             &prox
7dc0: 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20  y_file_path);.  
7dd0: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
7de0: 54 65 78 74 28 76 2c 20 22 6c 6f 63 6b 5f 70 72  Text(v, "lock_pr
7df0: 6f 78 79 5f 66 69 6c 65 22 2c 20 70 72 6f 78 79  oxy_file", proxy
7e00: 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20  _file_path);.   
7e10: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 50 61   }else{.      Pa
7e20: 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71  ger *pPager = sq
7e30: 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
7e40: 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20  pDb->pBt);.     
7e50: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70   sqlite3_file *p
7e60: 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61  File = sqlite3Pa
7e70: 67 65 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b  gerFile(pPager);
7e80: 0a 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a  .      int res;.
7e90: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
7ea0: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 72  [0] ){.        r
7eb0: 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65  es=sqlite3OsFile
7ec0: 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53  Control(pFile, S
7ed0: 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52  QLITE_SET_LOCKPR
7ee0: 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20  OXYFILE, .      
7ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a                 z
7f10: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 20  Right);.      } 
7f20: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 72  else {.        r
7f30: 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65  es=sqlite3OsFile
7f40: 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53  Control(pFile, S
7f50: 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52  QLITE_SET_LOCKPR
7f60: 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20  OXYFILE, .      
7f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e                 N
7f90: 55 4c 4c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ULL);.      }.  
7fa0: 20 20 20 20 69 66 28 20 72 65 73 21 3d 53 51 4c      if( res!=SQL
7fb0: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
7fc0: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
7fd0: 67 28 70 50 61 72 73 65 2c 20 22 66 61 69 6c 65  g(pParse, "faile
7fe0: 64 20 74 6f 20 73 65 74 20 6c 6f 63 6b 20 70 72  d to set lock pr
7ff0: 6f 78 79 20 66 69 6c 65 22 29 3b 0a 20 20 20 20  oxy file");.    
8000: 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f      goto pragma_
8010: 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
8020: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
8030: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
8040: 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e  TE_ENABLE_LOCKIN
8050: 47 5f 53 54 59 4c 45 20 2a 2f 20 20 20 20 20 20  G_STYLE */      
8060: 0a 20 20 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .    .  /*.  ** 
8070: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
8080: 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20  .]synchronous.  
8090: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
80a0: 65 6d 61 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73  ema.]synchronous
80b0: 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46  =OFF|ON|NORMAL|F
80c0: 55 4c 4c 7c 45 58 54 52 41 0a 20 20 2a 2a 0a 20  ULL|EXTRA.  **. 
80d0: 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65   ** Return or se
80e0: 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75  t the local valu
80f0: 65 20 6f 66 20 74 68 65 20 73 79 6e 63 68 72 6f  e of the synchro
8100: 6e 6f 75 73 20 66 6c 61 67 2e 20 20 43 68 61 6e  nous flag.  Chan
8110: 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f  ging.  ** the lo
8120: 63 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e  cal value does n
8130: 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20  ot make changes 
8140: 74 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65  to the disk file
8150: 20 61 6e 64 20 74 68 65 0a 20 20 2a 2a 20 64 65   and the.  ** de
8160: 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c  fault value will
8170: 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65   be restored the
8180: 20 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64   next time the d
8190: 61 74 61 62 61 73 65 20 69 73 0a 20 20 2a 2a 20  atabase is.  ** 
81a0: 6f 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 63  opened..  */.  c
81b0: 61 73 65 20 50 72 61 67 54 79 70 5f 53 59 4e 43  ase PragTyp_SYNC
81c0: 48 52 4f 4e 4f 55 53 3a 20 7b 0a 20 20 20 20 69  HRONOUS: {.    i
81d0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
81e0: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
81f0: 49 6e 74 28 76 2c 20 22 73 79 6e 63 68 72 6f 6e  Int(v, "synchron
8200: 6f 75 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20  ous", .         
8210: 20 20 20 53 51 4c 49 54 45 5f 44 62 53 61 66 65     SQLITE_DbSafe
8220: 74 79 4c 65 76 65 6c 56 61 6c 75 65 28 70 44 62  tyLevelValue(pDb
8230: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 29 2d  ->safety_level)-
8240: 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  1);.    }else{. 
8250: 20 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75       if( !db->au
8260: 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
8270: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
8280: 4d 73 67 28 70 50 61 72 73 65 2c 20 0a 20 20 20  Msg(pParse, .   
8290: 20 20 20 20 20 20 20 20 20 22 53 61 66 65 74 79           "Safety
82a0: 20 6c 65 76 65 6c 20 6d 61 79 20 6e 6f 74 20 62   level may not b
82b0: 65 20 63 68 61 6e 67 65 64 20 69 6e 73 69 64 65  e changed inside
82c0: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29   a transaction")
82d0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
82e0: 20 20 20 20 20 20 20 69 6e 74 20 69 4c 65 76 65         int iLeve
82f0: 6c 20 3d 20 28 67 65 74 53 61 66 65 74 79 4c 65  l = (getSafetyLe
8300: 76 65 6c 28 7a 52 69 67 68 74 2c 30 2c 31 29 2b  vel(zRight,0,1)+
8310: 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  1).             
8320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8330: 20 20 20 20 20 20 20 20 20 7c 20 53 51 4c 49 54           | SQLIT
8340: 45 5f 53 41 46 45 54 59 4c 45 56 45 4c 5f 46 49  E_SAFETYLEVEL_FI
8350: 58 45 44 3b 0a 20 20 20 20 20 20 20 20 69 4c 65  XED;.        iLe
8360: 76 65 6c 20 26 3d 20 50 41 47 45 52 5f 53 59 4e  vel &= PAGER_SYN
8370: 43 48 52 4f 4e 4f 55 53 5f 4d 41 53 4b 3b 0a 20  CHRONOUS_MASK;. 
8380: 20 20 20 20 20 20 20 69 66 28 20 69 4c 65 76 65         if( iLeve
8390: 6c 3d 3d 30 20 29 20 69 4c 65 76 65 6c 20 3d 20  l==0 ) iLevel = 
83a0: 31 3b 0a 20 20 20 20 20 20 20 20 70 44 62 2d 3e  1;.        pDb->
83b0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 69  safety_level = i
83c0: 4c 65 76 65 6c 3b 0a 20 20 20 20 20 20 20 20 73  Level;.        s
83d0: 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28  etAllPagerFlags(
83e0: 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  db);.      }.   
83f0: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
8400: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
8410: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
8420: 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65  AGMAS */..#ifnde
8430: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
8440: 41 47 5f 50 52 41 47 4d 41 53 0a 20 20 63 61 73  AG_PRAGMAS.  cas
8450: 65 20 50 72 61 67 54 79 70 5f 46 4c 41 47 3a 20  e PragTyp_FLAG: 
8460: 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
8470: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ==0 ){.      ret
8480: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20  urnSingleInt(v, 
8490: 70 50 72 61 67 6d 61 2d 3e 7a 4e 61 6d 65 2c 20  pPragma->zName, 
84a0: 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 70 50 72  (db->flags & pPr
84b0: 61 67 6d 61 2d 3e 69 41 72 67 29 21 3d 30 20 29  agma->iArg)!=0 )
84c0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
84d0: 20 20 20 69 6e 74 20 6d 61 73 6b 20 3d 20 70 50     int mask = pP
84e0: 72 61 67 6d 61 2d 3e 69 41 72 67 3b 20 20 20 20  ragma->iArg;    
84f0: 2f 2a 20 4d 61 73 6b 20 6f 66 20 62 69 74 73 20  /* Mask of bits 
8500: 74 6f 20 73 65 74 20 6f 72 20 63 6c 65 61 72 2e  to set or clear.
8510: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 64 62   */.      if( db
8520: 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
8530: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ){.        /* Fo
8540: 72 65 69 67 6e 20 6b 65 79 20 73 75 70 70 6f 72  reign key suppor
8550: 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 65 6e 61  t may not be ena
8560: 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64  bled or disabled
8570: 20 77 68 69 6c 65 20 6e 6f 74 0a 20 20 20 20 20   while not.     
8580: 20 20 20 2a 2a 20 69 6e 20 61 75 74 6f 2d 63 6f     ** in auto-co
8590: 6d 6d 69 74 20 6d 6f 64 65 2e 20 20 2a 2f 0a 20  mmit mode.  */. 
85a0: 20 20 20 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e         mask &= ~
85b0: 28 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b  (SQLITE_ForeignK
85c0: 65 79 73 29 3b 0a 20 20 20 20 20 20 7d 0a 23 69  eys);.      }.#i
85d0: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
85e0: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 20  THENTICATION.   
85f0: 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 68 2e     if( db->auth.
8600: 61 75 74 68 4c 65 76 65 6c 3d 3d 55 41 55 54 48  authLevel==UAUTH
8610: 5f 55 73 65 72 20 29 7b 0a 20 20 20 20 20 20 20  _User ){.       
8620: 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77   /* Do not allow
8630: 20 6e 6f 6e 2d 61 64 6d 69 6e 20 75 73 65 72 73   non-admin users
8640: 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 73   to modify the s
8650: 63 68 65 6d 61 20 61 72 62 69 74 72 61 72 69 6c  chema arbitraril
8660: 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 61 73  y */.        mas
8670: 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45 5f 57 72  k &= ~(SQLITE_Wr
8680: 69 74 65 53 63 68 65 6d 61 29 3b 0a 20 20 20 20  iteSchema);.    
8690: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
86a0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 65 74    if( sqlite3Get
86b0: 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20  Boolean(zRight, 
86c0: 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62  0) ){.        db
86d0: 2d 3e 66 6c 61 67 73 20 7c 3d 20 6d 61 73 6b 3b  ->flags |= mask;
86e0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
86f0: 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20        db->flags 
8700: 26 3d 20 7e 6d 61 73 6b 3b 0a 20 20 20 20 20 20  &= ~mask;.      
8710: 20 20 69 66 28 20 6d 61 73 6b 3d 3d 53 51 4c 49    if( mask==SQLI
8720: 54 45 5f 44 65 66 65 72 46 4b 73 20 29 20 64 62  TE_DeferFKs ) db
8730: 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
8740: 6e 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ns = 0;.      }.
8750: 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6e 79 20 6f  .      /* Many o
8760: 66 20 74 68 65 20 66 6c 61 67 2d 70 72 61 67 6d  f the flag-pragm
8770: 61 73 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f  as modify the co
8780: 64 65 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  de generated by 
8790: 74 68 65 20 53 51 4c 20 0a 20 20 20 20 20 20 2a  the SQL .      *
87a0: 2a 20 63 6f 6d 70 69 6c 65 72 20 28 65 67 2e 20  * compiler (eg. 
87b0: 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 29 2e 20  count_changes). 
87c0: 53 6f 20 61 64 64 20 61 6e 20 6f 70 63 6f 64 65  So add an opcode
87d0: 20 74 6f 20 65 78 70 69 72 65 20 61 6c 6c 0a 20   to expire all. 
87e0: 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 64       ** compiled
87f0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
8800: 61 66 74 65 72 20 6d 6f 64 69 66 79 69 6e 67 20  after modifying 
8810: 61 20 70 72 61 67 6d 61 20 76 61 6c 75 65 2e 0a  a pragma value..
8820: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
8830: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
8840: 28 76 2c 20 4f 50 5f 45 78 70 69 72 65 2c 20 30  (v, OP_Expire, 0
8850: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 65 74 41  , 0);.      setA
8860: 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 64 62 29  llPagerFlags(db)
8870: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  ;.    }.    brea
8880: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  k;.  }.#endif /*
8890: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41   SQLITE_OMIT_FLA
88a0: 47 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  G_PRAGMAS */..#i
88b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
88c0: 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53  T_SCHEMA_PRAGMAS
88d0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
88e0: 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 3c  GMA table_info(<
88f0: 74 61 62 6c 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a  table>).  **.  *
8900: 2a 20 52 65 74 75 72 6e 20 61 20 73 69 6e 67 6c  * Return a singl
8910: 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68 20 63  e row for each c
8920: 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 61 6d  olumn of the nam
8930: 65 64 20 74 61 62 6c 65 2e 20 54 68 65 20 63 6f  ed table. The co
8940: 6c 75 6d 6e 73 20 6f 66 0a 20 20 2a 2a 20 74 68  lumns of.  ** th
8950: 65 20 72 65 74 75 72 6e 65 64 20 64 61 74 61 20  e returned data 
8960: 73 65 74 20 61 72 65 3a 0a 20 20 2a 2a 0a 20 20  set are:.  **.  
8970: 2a 2a 20 63 69 64 3a 20 20 20 20 20 20 20 20 43  ** cid:        C
8980: 6f 6c 75 6d 6e 20 69 64 20 28 6e 75 6d 62 65 72  olumn id (number
8990: 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  ed from left to 
89a0: 72 69 67 68 74 2c 20 73 74 61 72 74 69 6e 67 20  right, starting 
89b0: 61 74 20 30 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a  at 0).  ** name:
89c0: 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 6e 61         Column na
89d0: 6d 65 0a 20 20 2a 2a 20 74 79 70 65 3a 20 20 20  me.  ** type:   
89e0: 20 20 20 20 43 6f 6c 75 6d 6e 20 64 65 63 6c 61      Column decla
89f0: 72 61 74 69 6f 6e 20 74 79 70 65 2e 0a 20 20 2a  ration type..  *
8a00: 2a 20 6e 6f 74 6e 75 6c 6c 3a 20 20 20 20 54 72  * notnull:    Tr
8a10: 75 65 20 69 66 20 27 4e 4f 54 20 4e 55 4c 4c 27  ue if 'NOT NULL'
8a20: 20 69 73 20 70 61 72 74 20 6f 66 20 63 6f 6c 75   is part of colu
8a30: 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 0a 20  mn declaration. 
8a40: 20 2a 2a 20 64 66 6c 74 5f 76 61 6c 75 65 3a 20   ** dflt_value: 
8a50: 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  The default valu
8a60: 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  e for the column
8a70: 2c 20 69 66 20 61 6e 79 2e 0a 20 20 2a 2f 0a 20  , if any..  */. 
8a80: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 41   case PragTyp_TA
8a90: 42 4c 45 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52  BLE_INFO: if( zR
8aa0: 69 67 68 74 20 29 7b 0a 20 20 20 20 54 61 62 6c  ight ){.    Tabl
8ab0: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61  e *pTab;.    pTa
8ac0: 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  b = sqlite3FindT
8ad0: 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c  able(db, zRight,
8ae0: 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70   zDb);.    if( p
8af0: 54 61 62 20 29 7b 0a 20 20 20 20 20 20 73 74 61  Tab ){.      sta
8b00: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
8b10: 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20  azCol[] = {.    
8b20: 20 20 20 20 20 22 63 69 64 22 2c 20 22 6e 61 6d       "cid", "nam
8b30: 65 22 2c 20 22 74 79 70 65 22 2c 20 22 6e 6f 74  e", "type", "not
8b40: 6e 75 6c 6c 22 2c 20 22 64 66 6c 74 5f 76 61 6c  null", "dflt_val
8b50: 75 65 22 2c 20 22 70 6b 22 0a 20 20 20 20 20 20  ue", "pk".      
8b60: 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c 20  };.      int i, 
8b70: 6b 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 48 69  k;.      int nHi
8b80: 64 64 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20  dden = 0;.      
8b90: 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20 20  Column *pCol;.  
8ba0: 20 20 20 20 49 6e 64 65 78 20 2a 70 50 6b 20 3d      Index *pPk =
8bb0: 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b   sqlite3PrimaryK
8bc0: 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20  eyIndex(pTab);. 
8bd0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
8be0: 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20 73 71 6c  m = 6;.      sql
8bf0: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
8c00: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
8c10: 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 43  );.      setAllC
8c20: 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 36 2c  olumnNames(v, 6,
8c30: 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28   azCol); assert(
8c40: 20 36 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a   6==ArraySize(az
8c50: 43 6f 6c 29 20 29 3b 0a 20 20 20 20 20 20 73 71  Col) );.      sq
8c60: 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
8c70: 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73 65 2c 20  mnNames(pParse, 
8c80: 70 54 61 62 29 3b 0a 20 20 20 20 20 20 66 6f 72  pTab);.      for
8c90: 28 69 3d 30 2c 20 70 43 6f 6c 3d 70 54 61 62 2d  (i=0, pCol=pTab-
8ca0: 3e 61 43 6f 6c 3b 20 69 3c 70 54 61 62 2d 3e 6e  >aCol; i<pTab->n
8cb0: 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c 2b 2b  Col; i++, pCol++
8cc0: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 49  ){.        if( I
8cd0: 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 70 43  sHiddenColumn(pC
8ce0: 6f 6c 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ol) ){.         
8cf0: 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a 20 20 20 20   nHidden++;.    
8d00: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a        continue;.
8d10: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
8d20: 20 20 69 66 28 20 28 70 43 6f 6c 2d 3e 63 6f 6c    if( (pCol->col
8d30: 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
8d40: 50 52 49 4d 4b 45 59 29 3d 3d 30 20 29 7b 0a 20  PRIMKEY)==0 ){. 
8d50: 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a           k = 0;.
8d60: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
8d70: 28 20 70 50 6b 3d 3d 30 20 29 7b 0a 20 20 20 20  ( pPk==0 ){.    
8d80: 20 20 20 20 20 20 6b 20 3d 20 31 3b 0a 20 20 20        k = 1;.   
8d90: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
8da0: 20 20 20 20 20 20 66 6f 72 28 6b 3d 31 3b 20 6b        for(k=1; k
8db0: 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c 20 26 26 20  <=pTab->nCol && 
8dc0: 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 2d  pPk->aiColumn[k-
8dd0: 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a 20 20  1]!=i; k++){}.  
8de0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
8df0: 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69  sqlite3VdbeMulti
8e00: 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69 73 73 69  Load(v, 1, "issi
8e10: 73 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  si",.           
8e20: 20 20 20 20 69 2d 6e 48 69 64 64 65 6e 2c 0a 20      i-nHidden,. 
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43                pC
8e40: 6f 6c 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20  ol->zName,.     
8e50: 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e            pCol->
8e60: 7a 54 79 70 65 20 3f 20 70 43 6f 6c 2d 3e 7a 54  zType ? pCol->zT
8e70: 79 70 65 20 3a 20 22 22 2c 0a 20 20 20 20 20 20  ype : "",.      
8e80: 20 20 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e 6e           pCol->n
8e90: 6f 74 4e 75 6c 6c 20 3f 20 31 20 3a 20 30 2c 0a  otNull ? 1 : 0,.
8ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
8eb0: 43 6f 6c 2d 3e 7a 44 66 6c 74 2c 0a 20 20 20 20  Col->zDflt,.    
8ec0: 20 20 20 20 20 20 20 20 20 20 20 6b 29 3b 0a 20             k);. 
8ed0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
8ee0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
8ef0: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 36 29 3b  esultRow, 1, 6);
8f00: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
8f10: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63   }.  break;..  c
8f20: 61 73 65 20 50 72 61 67 54 79 70 5f 53 54 41 54  ase PragTyp_STAT
8f30: 53 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20  S: {.    static 
8f40: 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f  const char *azCo
8f50: 6c 5b 5d 20 3d 20 7b 20 22 74 61 62 6c 65 22 2c  l[] = { "table",
8f60: 20 22 69 6e 64 65 78 22 2c 20 22 77 69 64 74 68   "index", "width
8f70: 22 2c 20 22 68 65 69 67 68 74 22 20 7d 3b 0a 20  ", "height" };. 
8f80: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a     Index *pIdx;.
8f90: 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 69 3b      HashElem *i;
8fa0: 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33  .    v = sqlite3
8fb0: 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b  GetVdbe(pParse);
8fc0: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
8fd0: 6d 20 3d 20 34 3b 0a 20 20 20 20 73 71 6c 69 74  m = 4;.    sqlit
8fe0: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
8ff0: 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b  ma(pParse, iDb);
9000: 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d  .    setAllColum
9010: 6e 4e 61 6d 65 73 28 76 2c 20 34 2c 20 61 7a 43  nNames(v, 4, azC
9020: 6f 6c 29 3b 20 20 61 73 73 65 72 74 28 20 34 3d  ol);  assert( 4=
9030: 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c  =ArraySize(azCol
9040: 29 20 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 73  ) );.    for(i=s
9050: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26  qliteHashFirst(&
9060: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 74 62  pDb->pSchema->tb
9070: 6c 48 61 73 68 29 3b 20 69 3b 20 69 3d 73 71 6c  lHash); i; i=sql
9080: 69 74 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b  iteHashNext(i)){
9090: 0a 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54  .      Table *pT
90a0: 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44  ab = sqliteHashD
90b0: 61 74 61 28 69 29 3b 0a 20 20 20 20 20 20 73 71  ata(i);.      sq
90c0: 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f  lite3VdbeMultiLo
90d0: 61 64 28 76 2c 20 31 2c 20 22 73 73 69 69 22 2c  ad(v, 1, "ssii",
90e0: 0a 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62  .           pTab
90f0: 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20  ->zName,.       
9100: 20 20 20 20 30 2c 0a 20 20 20 20 20 20 20 20 20      0,.         
9110: 20 20 70 54 61 62 2d 3e 73 7a 54 61 62 52 6f 77    pTab->szTabRow
9120: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 54 61  ,.           pTa
9130: 62 2d 3e 6e 52 6f 77 4c 6f 67 45 73 74 29 3b 0a  b->nRowLogEst);.
9140: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9150: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
9160: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a  sultRow, 1, 4);.
9170: 20 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70        for(pIdx=p
9180: 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64  Tab->pIndex; pId
9190: 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
91a0: 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20 73 71  ext){.        sq
91b0: 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f  lite3VdbeMultiLo
91c0: 61 64 28 76 2c 20 32 2c 20 22 73 69 69 22 2c 0a  ad(v, 2, "sii",.
91d0: 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d             pIdx-
91e0: 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  >zName,.        
91f0: 20 20 20 70 49 64 78 2d 3e 73 7a 49 64 78 52 6f     pIdx->szIdxRo
9200: 77 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 49  w,.           pI
9210: 64 78 2d 3e 61 69 52 6f 77 4c 6f 67 45 73 74 5b  dx->aiRowLogEst[
9220: 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  0]);.        sql
9230: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
9240: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
9250: 31 2c 20 34 29 3b 0a 20 20 20 20 20 20 7d 0a 20  1, 4);.      }. 
9260: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
9270: 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ;..  case PragTy
9280: 70 5f 49 4e 44 45 58 5f 49 4e 46 4f 3a 20 69 66  p_INDEX_INFO: if
9290: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
92a0: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
92b0: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
92c0: 20 20 70 49 64 78 20 3d 20 73 71 6c 69 74 65 33    pIdx = sqlite3
92d0: 46 69 6e 64 49 6e 64 65 78 28 64 62 2c 20 7a 52  FindIndex(db, zR
92e0: 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20  ight, zDb);.    
92f0: 69 66 28 20 70 49 64 78 20 29 7b 0a 20 20 20 20  if( pIdx ){.    
9300: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
9310: 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b  har *azCol[] = {
9320: 0a 20 20 20 20 20 20 20 20 20 22 73 65 71 6e 6f  .         "seqno
9330: 22 2c 20 22 63 69 64 22 2c 20 22 6e 61 6d 65 22  ", "cid", "name"
9340: 2c 20 22 64 65 73 63 22 2c 20 22 63 6f 6c 6c 22  , "desc", "coll"
9350: 2c 20 22 6b 65 79 22 0a 20 20 20 20 20 20 7d 3b  , "key".      };
9360: 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  .      int i;.  
9370: 20 20 20 20 69 6e 74 20 6d 78 3b 0a 20 20 20 20      int mx;.    
9380: 20 20 69 66 28 20 70 50 72 61 67 6d 61 2d 3e 69    if( pPragma->i
9390: 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  Arg ){.        /
93a0: 2a 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78  * PRAGMA index_x
93b0: 69 6e 66 6f 20 28 6e 65 77 65 72 20 76 65 72 73  info (newer vers
93c0: 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65 20 72 6f  ion with more ro
93d0: 77 73 20 61 6e 64 20 63 6f 6c 75 6d 6e 73 29 20  ws and columns) 
93e0: 2a 2f 0a 20 20 20 20 20 20 20 20 6d 78 20 3d 20  */.        mx = 
93f0: 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 0a 20  pIdx->nColumn;. 
9400: 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e         pParse->n
9410: 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20 7d  Mem = 6;.      }
9420: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a  else{.        /*
9430: 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 69 6e   PRAGMA index_in
9440: 66 6f 20 28 6c 65 67 61 63 79 20 76 65 72 73 69  fo (legacy versi
9450: 6f 6e 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d  on) */.        m
9460: 78 20 3d 20 70 49 64 78 2d 3e 6e 4b 65 79 43 6f  x = pIdx->nKeyCo
9470: 6c 3b 0a 20 20 20 20 20 20 20 20 70 50 61 72 73  l;.        pPars
9480: 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20  e->nMem = 3;.   
9490: 20 20 20 7d 0a 20 20 20 20 20 20 70 54 61 62 20     }.      pTab 
94a0: 3d 20 70 49 64 78 2d 3e 70 54 61 62 6c 65 3b 0a  = pIdx->pTable;.
94b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
94c0: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
94d0: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
94e0: 20 20 61 73 73 65 72 74 28 20 70 50 61 72 73 65    assert( pParse
94f0: 2d 3e 6e 4d 65 6d 3c 3d 41 72 72 61 79 53 69 7a  ->nMem<=ArraySiz
9500: 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20  e(azCol) );.    
9510: 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61    setAllColumnNa
9520: 6d 65 73 28 76 2c 20 70 50 61 72 73 65 2d 3e 6e  mes(v, pParse->n
9530: 4d 65 6d 2c 20 61 7a 43 6f 6c 29 3b 0a 20 20 20  Mem, azCol);.   
9540: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6d 78     for(i=0; i<mx
9550: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
9560: 69 31 36 20 63 6e 75 6d 20 3d 20 70 49 64 78 2d  i16 cnum = pIdx-
9570: 3e 61 69 43 6f 6c 75 6d 6e 5b 69 5d 3b 0a 20 20  >aiColumn[i];.  
9580: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9590: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c  eMultiLoad(v, 1,
95a0: 20 22 69 69 73 22 2c 20 69 2c 20 63 6e 75 6d 2c   "iis", i, cnum,
95b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
95c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6e                cn
95d0: 75 6d 3c 30 20 3f 20 30 20 3a 20 70 54 61 62 2d  um<0 ? 0 : pTab-
95e0: 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61 6d  >aCol[cnum].zNam
95f0: 65 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  e);.        if( 
9600: 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 20 29 7b  pPragma->iArg ){
9610: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
9620: 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28  e3VdbeMultiLoad(
9630: 76 2c 20 34 2c 20 22 69 73 69 22 2c 0a 20 20 20  v, 4, "isi",.   
9640: 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 61           pIdx->a
9650: 53 6f 72 74 4f 72 64 65 72 5b 69 5d 2c 0a 20 20  SortOrder[i],.  
9660: 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e            pIdx->
9670: 61 7a 43 6f 6c 6c 5b 69 5d 2c 0a 20 20 20 20 20  azColl[i],.     
9680: 20 20 20 20 20 20 20 69 3c 70 49 64 78 2d 3e 6e         i<pIdx->n
9690: 4b 65 79 43 6f 6c 29 3b 0a 20 20 20 20 20 20 20  KeyCol);.       
96a0: 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
96b0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
96c0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
96d0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 29 3b 0a   pParse->nMem);.
96e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
96f0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61  }.  break;..  ca
9700: 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58  se PragTyp_INDEX
9710: 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67 68  _LIST: if( zRigh
9720: 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a  t ){.    Index *
9730: 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20  pIdx;.    Table 
9740: 2a 70 54 61 62 3b 0a 20 20 20 20 69 6e 74 20 69  *pTab;.    int i
9750: 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c  ;.    pTab = sql
9760: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
9770: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a  , zRight, zDb);.
9780: 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a      if( pTab ){.
9790: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
97a0: 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d  st char *azCol[]
97b0: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 22 73 65   = {.        "se
97c0: 71 22 2c 20 22 6e 61 6d 65 22 2c 20 22 75 6e 69  q", "name", "uni
97d0: 71 75 65 22 2c 20 22 6f 72 69 67 69 6e 22 2c 20  que", "origin", 
97e0: 22 70 61 72 74 69 61 6c 22 0a 20 20 20 20 20 20  "partial".      
97f0: 7d 3b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c  };.      v = sql
9800: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
9810: 73 65 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73  se);.      pPars
9820: 65 2d 3e 6e 4d 65 6d 20 3d 20 35 3b 0a 20 20 20  e->nMem = 5;.   
9830: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
9840: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
9850: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  e, iDb);.      s
9860: 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73  etAllColumnNames
9870: 28 76 2c 20 35 2c 20 61 7a 43 6f 6c 29 3b 20 20  (v, 5, azCol);  
9880: 61 73 73 65 72 74 28 20 35 3d 3d 41 72 72 61 79  assert( 5==Array
9890: 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20  Size(azCol) );. 
98a0: 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54       for(pIdx=pT
98b0: 61 62 2d 3e 70 49 6e 64 65 78 2c 20 69 3d 30 3b  ab->pIndex, i=0;
98c0: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
98d0: 2d 3e 70 4e 65 78 74 2c 20 69 2b 2b 29 7b 0a 20  ->pNext, i++){. 
98e0: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
98f0: 72 20 2a 61 7a 4f 72 69 67 69 6e 5b 5d 20 3d 20  r *azOrigin[] = 
9900: 7b 20 22 63 22 2c 20 22 75 22 2c 20 22 70 6b 22  { "c", "u", "pk"
9910: 20 7d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   };.        sqli
9920: 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64  te3VdbeMultiLoad
9930: 28 76 2c 20 31 2c 20 22 69 73 69 73 69 22 2c 0a  (v, 1, "isisi",.
9940: 20 20 20 20 20 20 20 20 20 20 20 69 2c 0a 20 20             i,.  
9950: 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 7a           pIdx->z
9960: 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
9970: 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 70   IsUniqueIndex(p
9980: 49 64 78 29 2c 0a 20 20 20 20 20 20 20 20 20 20  Idx),.          
9990: 20 61 7a 4f 72 69 67 69 6e 5b 70 49 64 78 2d 3e   azOrigin[pIdx->
99a0: 69 64 78 54 79 70 65 5d 2c 0a 20 20 20 20 20 20  idxType],.      
99b0: 20 20 20 20 20 70 49 64 78 2d 3e 70 50 61 72 74       pIdx->pPart
99c0: 49 64 78 57 68 65 72 65 21 3d 30 29 3b 0a 20 20  IdxWhere!=0);.  
99d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
99e0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
99f0: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 35 29 3b 0a  sultRow, 1, 5);.
9a00: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
9a10: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61  }.  break;..  ca
9a20: 73 65 20 50 72 61 67 54 79 70 5f 44 41 54 41 42  se PragTyp_DATAB
9a30: 41 53 45 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20  ASE_LIST: {.    
9a40: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
9a50: 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22  r *azCol[] = { "
9a60: 73 65 71 22 2c 20 22 6e 61 6d 65 22 2c 20 22 66  seq", "name", "f
9a70: 69 6c 65 22 20 7d 3b 0a 20 20 20 20 69 6e 74 20  ile" };.    int 
9a80: 69 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  i;.    pParse->n
9a90: 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73 65 74  Mem = 3;.    set
9aa0: 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76  AllColumnNames(v
9ab0: 2c 20 33 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73  , 3, azCol); ass
9ac0: 65 72 74 28 20 33 3d 3d 41 72 72 61 79 53 69 7a  ert( 3==ArraySiz
9ad0: 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20  e(azCol) );.    
9ae0: 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e  for(i=0; i<db->n
9af0: 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Db; i++){.      
9b00: 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  if( db->aDb[i].p
9b10: 42 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  Bt==0 ) continue
9b20: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
9b30: 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
9b40: 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  !=0 );.      sql
9b50: 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61  ite3VdbeMultiLoa
9b60: 64 28 76 2c 20 31 2c 20 22 69 73 73 22 2c 0a 20  d(v, 1, "iss",. 
9b70: 20 20 20 20 20 20 20 20 69 2c 0a 20 20 20 20 20          i,.     
9b80: 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a      db->aDb[i].z
9b90: 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 73  Name,.         s
9ba0: 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 46 69  qlite3BtreeGetFi
9bb0: 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44 62 5b 69  lename(db->aDb[i
9bc0: 5d 2e 70 42 74 29 29 3b 0a 20 20 20 20 20 20 73  ].pBt));.      s
9bd0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
9be0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
9bf0: 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20 7d 0a 20  , 1, 3);.    }. 
9c00: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63   }.  break;..  c
9c10: 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c  ase PragTyp_COLL
9c20: 41 54 49 4f 4e 5f 4c 49 53 54 3a 20 7b 0a 20 20  ATION_LIST: {.  
9c30: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
9c40: 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b  har *azCol[] = {
9c50: 20 22 73 65 71 22 2c 20 22 6e 61 6d 65 22 20 7d   "seq", "name" }
9c60: 3b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b  ;.    int i = 0;
9c70: 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 70  .    HashElem *p
9c80: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
9c90: 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73 65 74 41  em = 2;.    setA
9ca0: 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c  llColumnNames(v,
9cb0: 20 32 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65   2, azCol); asse
9cc0: 72 74 28 20 32 3d 3d 41 72 72 61 79 53 69 7a 65  rt( 2==ArraySize
9cd0: 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 66  (azCol) );.    f
9ce0: 6f 72 28 70 3d 73 71 6c 69 74 65 48 61 73 68 46  or(p=sqliteHashF
9cf0: 69 72 73 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53  irst(&db->aCollS
9d00: 65 71 29 3b 20 70 3b 20 70 3d 73 71 6c 69 74 65  eq); p; p=sqlite
9d10: 48 61 73 68 4e 65 78 74 28 70 29 29 7b 0a 20 20  HashNext(p)){.  
9d20: 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f      CollSeq *pCo
9d30: 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29  ll = (CollSeq *)
9d40: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 70  sqliteHashData(p
9d50: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
9d60: 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c  VdbeMultiLoad(v,
9d70: 20 31 2c 20 22 69 73 22 2c 20 69 2b 2b 2c 20 70   1, "is", i++, p
9d80: 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20  Coll->zName);.  
9d90: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9da0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
9db0: 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20  ltRow, 1, 2);.  
9dc0: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
9dd0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
9de0: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
9df0: 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65  AGMAS */..#ifnde
9e00: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
9e10: 52 45 49 47 4e 5f 4b 45 59 0a 20 20 63 61 73 65  REIGN_KEY.  case
9e20: 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e   PragTyp_FOREIGN
9e30: 5f 4b 45 59 5f 4c 49 53 54 3a 20 69 66 28 20 7a  _KEY_LIST: if( z
9e40: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 46 4b 65  Right ){.    FKe
9e50: 79 20 2a 70 46 4b 3b 0a 20 20 20 20 54 61 62 6c  y *pFK;.    Tabl
9e60: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61  e *pTab;.    pTa
9e70: 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  b = sqlite3FindT
9e80: 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c  able(db, zRight,
9e90: 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70   zDb);.    if( p
9ea0: 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76 20 3d  Tab ){.      v =
9eb0: 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28   sqlite3GetVdbe(
9ec0: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 70  pParse);.      p
9ed0: 46 4b 20 3d 20 70 54 61 62 2d 3e 70 46 4b 65 79  FK = pTab->pFKey
9ee0: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b 20  ;.      if( pFK 
9ef0: 29 7b 0a 20 20 20 20 20 20 20 20 73 74 61 74 69  ){.        stati
9f00: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a  c const char *az
9f10: 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  Col[] = {.      
9f20: 20 20 20 20 20 22 69 64 22 2c 20 22 73 65 71 22       "id", "seq"
9f30: 2c 20 22 74 61 62 6c 65 22 2c 20 22 66 72 6f 6d  , "table", "from
9f40: 22 2c 20 22 74 6f 22 2c 20 22 6f 6e 5f 75 70 64  ", "to", "on_upd
9f50: 61 74 65 22 2c 20 22 6f 6e 5f 64 65 6c 65 74 65  ate", "on_delete
9f60: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 22 6d  ",.           "m
9f70: 61 74 63 68 22 0a 20 20 20 20 20 20 20 20 7d 3b  atch".        };
9f80: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 20 3d  .        int i =
9f90: 20 30 3b 20 0a 20 20 20 20 20 20 20 20 70 50 61   0; .        pPa
9fa0: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20  rse->nMem = 8;. 
9fb0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f         sqlite3Co
9fc0: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
9fd0: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
9fe0: 20 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d       setAllColum
9ff0: 6e 4e 61 6d 65 73 28 76 2c 20 38 2c 20 61 7a 43  nNames(v, 8, azC
a000: 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 38 3d 3d  ol); assert( 8==
a010: 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29  ArraySize(azCol)
a020: 20 29 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c   );.        whil
a030: 65 28 70 46 4b 29 7b 0a 20 20 20 20 20 20 20 20  e(pFK){.        
a040: 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 20    int j;.       
a050: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46     for(j=0; j<pF
a060: 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20  K->nCol; j++){. 
a070: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
a080: 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28  e3VdbeMultiLoad(
a090: 76 2c 20 31 2c 20 22 69 69 73 73 73 73 73 73 22  v, 1, "iissssss"
a0a0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
a0b0: 20 20 20 20 20 69 2c 0a 20 20 20 20 20 20 20 20       i,.        
a0c0: 20 20 20 20 20 20 20 20 20 20 20 6a 2c 0a 20 20             j,.  
a0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0e0: 20 70 46 4b 2d 3e 7a 54 6f 2c 0a 20 20 20 20 20   pFK->zTo,.     
a0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 54                pT
a100: 61 62 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43  ab->aCol[pFK->aC
a110: 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61  ol[j].iFrom].zNa
a120: 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  me,.            
a130: 20 20 20 20 20 20 20 70 46 4b 2d 3e 61 43 6f 6c         pFK->aCol
a140: 5b 6a 5d 2e 7a 43 6f 6c 2c 0a 20 20 20 20 20 20  [j].zCol,.      
a150: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 63 74               act
a160: 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63  ionName(pFK->aAc
a170: 74 69 6f 6e 5b 31 5d 29 2c 20 20 2f 2a 20 4f 4e  tion[1]),  /* ON
a180: 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 20 20 20   UPDATE */.     
a190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 63                ac
a1a0: 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41  tionName(pFK->aA
a1b0: 63 74 69 6f 6e 5b 30 5d 29 2c 20 20 2f 2a 20 4f  ction[0]),  /* O
a1c0: 4e 20 44 45 4c 45 54 45 20 2a 2f 0a 20 20 20 20  N DELETE */.    
a1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
a1e0: 4e 4f 4e 45 22 29 3b 0a 20 20 20 20 20 20 20 20  NONE");.        
a1f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
a200: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
a210: 6c 74 52 6f 77 2c 20 31 2c 20 38 29 3b 0a 20 20  ltRow, 1, 8);.  
a220: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
a230: 20 20 20 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20      ++i;.       
a240: 20 20 20 70 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e     pFK = pFK->pN
a250: 65 78 74 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20  extFrom;.       
a260: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
a270: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
a280: 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
a290: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52  (SQLITE_OMIT_FOR
a2a0: 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69  EIGN_KEY) */..#i
a2b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
a2c0: 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 23 69  T_FOREIGN_KEY.#i
a2d0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
a2e0: 54 5f 54 52 49 47 47 45 52 0a 20 20 63 61 73 65  T_TRIGGER.  case
a2f0: 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e   PragTyp_FOREIGN
a300: 5f 4b 45 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20  _KEY_CHECK: {.  
a310: 20 20 46 4b 65 79 20 2a 70 46 4b 3b 20 20 20 20    FKey *pFK;    
a320: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6f           /* A fo
a330: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
a340: 61 69 6e 74 20 2a 2f 0a 20 20 20 20 54 61 62 6c  aint */.    Tabl
a350: 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
a360: 20 20 20 2f 2a 20 43 68 69 6c 64 20 74 61 62 6c     /* Child tabl
a370: 65 20 63 6f 6e 74 61 69 6e 20 22 52 45 46 45 52  e contain "REFER
a380: 45 4e 43 45 53 22 20 6b 65 79 77 6f 72 64 20 2a  ENCES" keyword *
a390: 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 50 61  /.    Table *pPa
a3a0: 72 65 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  rent;        /* 
a3b0: 50 61 72 65 6e 74 20 74 61 62 6c 65 20 74 68 61  Parent table tha
a3c0: 74 20 63 68 69 6c 64 20 70 6f 69 6e 74 73 20 74  t child points t
a3d0: 6f 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a  o */.    Index *
a3e0: 70 49 64 78 3b 20 20 20 20 20 20 20 20 20 20 20  pIdx;           
a3f0: 2f 2a 20 49 6e 64 65 78 20 69 6e 20 74 68 65 20  /* Index in the 
a400: 70 61 72 65 6e 74 20 74 61 62 6c 65 20 2a 2f 0a  parent table */.
a410: 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20      int i;      
a420: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
a430: 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 46 6f 72  op counter:  For
a440: 65 69 67 6e 20 6b 65 79 20 6e 75 6d 62 65 72 20  eign key number 
a450: 66 6f 72 20 70 54 61 62 20 2a 2f 0a 20 20 20 20  for pTab */.    
a460: 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20  int j;          
a470: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
a480: 6f 75 6e 74 65 72 3a 20 20 46 69 65 6c 64 20 6f  ounter:  Field o
a490: 66 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65  f the foreign ke
a4a0: 79 20 2a 2f 0a 20 20 20 20 48 61 73 68 45 6c 65  y */.    HashEle
a4b0: 6d 20 2a 6b 3b 20 20 20 20 20 20 20 20 20 20 20  m *k;           
a4c0: 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a  /* Loop counter:
a4d0: 20 20 4e 65 78 74 20 74 61 62 6c 65 20 69 6e 20    Next table in 
a4e0: 73 63 68 65 6d 61 20 2a 2f 0a 20 20 20 20 69 6e  schema */.    in
a4f0: 74 20 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  t x;            
a500: 20 20 20 20 20 2f 2a 20 72 65 73 75 6c 74 20 76       /* result v
a510: 61 72 69 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  ariable */.    i
a520: 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20  nt regResult;   
a530: 20 20 20 20 20 20 2f 2a 20 33 20 72 65 67 69 73        /* 3 regis
a540: 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61 20 72  ters to hold a r
a550: 65 73 75 6c 74 20 72 6f 77 20 2a 2f 0a 20 20 20  esult row */.   
a560: 20 69 6e 74 20 72 65 67 4b 65 79 3b 20 20 20 20   int regKey;    
a570: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
a580: 74 65 72 20 74 6f 20 68 6f 6c 64 20 6b 65 79 20  ter to hold key 
a590: 66 6f 72 20 63 68 65 63 6b 69 6e 67 20 74 68 65  for checking the
a5a0: 20 46 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72   FK */.    int r
a5b0: 65 67 52 6f 77 3b 20 20 20 20 20 20 20 20 20 20  egRow;          
a5c0: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 74    /* Registers t
a5d0: 6f 20 68 6f 6c 64 20 61 20 72 6f 77 20 66 72 6f  o hold a row fro
a5e0: 6d 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e  m pTab */.    in
a5f0: 74 20 61 64 64 72 54 6f 70 3b 20 20 20 20 20 20  t addrTop;      
a600: 20 20 20 20 20 2f 2a 20 54 6f 70 20 6f 66 20 61       /* Top of a
a610: 20 6c 6f 6f 70 20 63 68 65 63 6b 69 6e 67 20 66   loop checking f
a620: 6f 72 65 69 67 6e 20 6b 65 79 73 20 2a 2f 0a 20  oreign keys */. 
a630: 20 20 20 69 6e 74 20 61 64 64 72 4f 6b 3b 20 20     int addrOk;  
a640: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d            /* Jum
a650: 70 20 68 65 72 65 20 69 66 20 74 68 65 20 6b 65  p here if the ke
a660: 79 20 69 73 20 4f 4b 20 2a 2f 0a 20 20 20 20 69  y is OK */.    i
a670: 6e 74 20 2a 61 69 43 6f 6c 73 3b 20 20 20 20 20  nt *aiCols;     
a680: 20 20 20 20 20 20 2f 2a 20 63 68 69 6c 64 20 74        /* child t
a690: 6f 20 70 61 72 65 6e 74 20 63 6f 6c 75 6d 6e 20  o parent column 
a6a0: 6d 61 70 70 69 6e 67 20 2a 2f 0a 20 20 20 20 73  mapping */.    s
a6b0: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
a6c0: 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 74   *azCol[] = { "t
a6d0: 61 62 6c 65 22 2c 20 22 72 6f 77 69 64 22 2c 20  able", "rowid", 
a6e0: 22 70 61 72 65 6e 74 22 2c 20 22 66 6b 69 64 22  "parent", "fkid"
a6f0: 20 7d 3b 0a 0a 20 20 20 20 72 65 67 52 65 73 75   };..    regResu
a700: 6c 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65  lt = pParse->nMe
a710: 6d 2b 31 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  m+1;.    pParse-
a720: 3e 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20  >nMem += 4;.    
a730: 72 65 67 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73  regKey = ++pPars
a740: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67  e->nMem;.    reg
a750: 52 6f 77 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  Row = ++pParse->
a760: 6e 4d 65 6d 3b 0a 20 20 20 20 76 20 3d 20 73 71  nMem;.    v = sq
a770: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
a780: 72 73 65 29 3b 0a 20 20 20 20 73 65 74 41 6c 6c  rse);.    setAll
a790: 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 34  ColumnNames(v, 4
a7a0: 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74  , azCol); assert
a7b0: 28 20 34 3d 3d 41 72 72 61 79 53 69 7a 65 28 61  ( 4==ArraySize(a
a7c0: 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 73 71 6c  zCol) );.    sql
a7d0: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
a7e0: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
a7f0: 29 3b 0a 20 20 20 20 6b 20 3d 20 73 71 6c 69 74  );.    k = sqlit
a800: 65 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e  eHashFirst(&db->
a810: 61 44 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61  aDb[iDb].pSchema
a820: 2d 3e 74 62 6c 48 61 73 68 29 3b 0a 20 20 20 20  ->tblHash);.    
a830: 77 68 69 6c 65 28 20 6b 20 29 7b 0a 20 20 20 20  while( k ){.    
a840: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
a850: 20 20 20 20 20 20 20 20 70 54 61 62 20 3d 20 73          pTab = s
a860: 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
a870: 65 28 70 50 61 72 73 65 2c 20 30 2c 20 7a 52 69  e(pParse, 0, zRi
a880: 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20  ght, zDb);.     
a890: 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20     k = 0;.      
a8a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
a8b0: 54 61 62 20 3d 20 28 54 61 62 6c 65 2a 29 73 71  Tab = (Table*)sq
a8c0: 6c 69 74 65 48 61 73 68 44 61 74 61 28 6b 29 3b  liteHashData(k);
a8d0: 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 73 71 6c  .        k = sql
a8e0: 69 74 65 48 61 73 68 4e 65 78 74 28 6b 29 3b 0a  iteHashNext(k);.
a8f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
a900: 28 20 70 54 61 62 3d 3d 30 20 7c 7c 20 70 54 61  ( pTab==0 || pTa
a910: 62 2d 3e 70 46 4b 65 79 3d 3d 30 20 29 20 63 6f  b->pFKey==0 ) co
a920: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71  ntinue;.      sq
a930: 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70  lite3TableLock(p
a940: 50 61 72 73 65 2c 20 69 44 62 2c 20 70 54 61 62  Parse, iDb, pTab
a950: 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 54 61 62 2d  ->tnum, 0, pTab-
a960: 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 69  >zName);.      i
a970: 66 28 20 70 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65  f( pTab->nCol+re
a980: 67 52 6f 77 3e 70 50 61 72 73 65 2d 3e 6e 4d 65  gRow>pParse->nMe
a990: 6d 20 29 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  m ) pParse->nMem
a9a0: 20 3d 20 70 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20   = pTab->nCol + 
a9b0: 72 65 67 52 6f 77 3b 0a 20 20 20 20 20 20 73 71  regRow;.      sq
a9c0: 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 70  lite3OpenTable(p
a9d0: 50 61 72 73 65 2c 20 30 2c 20 69 44 62 2c 20 70  Parse, 0, iDb, p
a9e0: 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64  Tab, OP_OpenRead
a9f0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
aa00: 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76  VdbeLoadString(v
aa10: 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 70 54 61  , regResult, pTa
aa20: 62 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  b->zName);.     
aa30: 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54   for(i=1, pFK=pT
aa40: 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20  ab->pFKey; pFK; 
aa50: 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e  i++, pFK=pFK->pN
aa60: 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20  extFrom){.      
aa70: 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69    pParent = sqli
aa80: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
aa90: 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b   pFK->zTo, zDb);
aaa0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61  .        if( pPa
aab0: 72 65 6e 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  rent==0 ) contin
aac0: 75 65 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78  ue;.        pIdx
aad0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 73 71   = 0;.        sq
aae0: 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70  lite3TableLock(p
aaf0: 50 61 72 73 65 2c 20 69 44 62 2c 20 70 50 61 72  Parse, iDb, pPar
ab00: 65 6e 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 50  ent->tnum, 0, pP
ab10: 61 72 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20  arent->zName);. 
ab20: 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74         x = sqlit
ab30: 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
ab40: 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c  pParse, pParent,
ab50: 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 30 29 3b   pFK, &pIdx, 0);
ab60: 0a 20 20 20 20 20 20 20 20 69 66 28 20 78 3d 3d  .        if( x==
ab70: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  0 ){.          i
ab80: 66 28 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20  f( pIdx==0 ){.  
ab90: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
aba0: 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73  3OpenTable(pPars
abb0: 65 2c 20 69 2c 20 69 44 62 2c 20 70 50 61 72 65  e, i, iDb, pPare
abc0: 6e 74 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29  nt, OP_OpenRead)
abd0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
abe0: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  e{.            s
abf0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
ac00: 28 76 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c  (v, OP_OpenRead,
ac10: 20 69 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20   i, pIdx->tnum, 
ac20: 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  iDb);.          
ac30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
ac40: 50 34 4b 65 79 49 6e 66 6f 28 70 50 61 72 73 65  P4KeyInfo(pParse
ac50: 2c 20 70 49 64 78 29 3b 0a 20 20 20 20 20 20 20  , pIdx);.       
ac60: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c     }.        }el
ac70: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20  se{.          k 
ac80: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 62  = 0;.          b
ac90: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  reak;.        }.
aca0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73        }.      as
acb0: 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e 6e 45  sert( pParse->nE
acc0: 72 72 3e 30 20 7c 7c 20 70 46 4b 3d 3d 30 20 29  rr>0 || pFK==0 )
acd0: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b 20  ;.      if( pFK 
ace0: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 69  ) break;.      i
acf0: 66 28 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 3c  f( pParse->nTab<
ad00: 69 20 29 20 70 50 61 72 73 65 2d 3e 6e 54 61 62  i ) pParse->nTab
ad10: 20 3d 20 69 3b 0a 20 20 20 20 20 20 61 64 64 72   = i;.      addr
ad20: 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Top = sqlite3Vdb
ad30: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65  eAddOp1(v, OP_Re
ad40: 77 69 6e 64 2c 20 30 29 3b 20 56 64 62 65 43 6f  wind, 0); VdbeCo
ad50: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
ad60: 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54   for(i=1, pFK=pT
ad70: 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20  ab->pFKey; pFK; 
ad80: 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e  i++, pFK=pFK->pN
ad90: 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20  extFrom){.      
ada0: 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69    pParent = sqli
adb0: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
adc0: 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b   pFK->zTo, zDb);
add0: 0a 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20  .        pIdx = 
ade0: 30 3b 0a 20 20 20 20 20 20 20 20 61 69 43 6f 6c  0;.        aiCol
adf0: 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69  s = 0;.        i
ae00: 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20  f( pParent ){.  
ae10: 20 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69          x = sqli
ae20: 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
ae30: 28 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74  (pParse, pParent
ae40: 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 26 61  , pFK, &pIdx, &a
ae50: 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20 20 20  iCols);.        
ae60: 20 20 61 73 73 65 72 74 28 20 78 3d 3d 30 20 29    assert( x==0 )
ae70: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
ae80: 20 20 20 20 61 64 64 72 4f 6b 20 3d 20 73 71 6c      addrOk = sql
ae90: 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65  ite3VdbeMakeLabe
aea0: 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20 69 66  l(v);.        if
aeb0: 28 20 70 50 61 72 65 6e 74 20 26 26 20 70 49 64  ( pParent && pId
aec0: 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  x==0 ){.        
aed0: 20 20 69 6e 74 20 69 4b 65 79 20 3d 20 70 46 4b    int iKey = pFK
aee0: 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b  ->aCol[0].iFrom;
aef0: 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
af00: 74 28 20 69 4b 65 79 3e 3d 30 20 26 26 20 69 4b  t( iKey>=0 && iK
af10: 65 79 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b  ey<pTab->nCol );
af20: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69  .          if( i
af30: 4b 65 79 21 3d 70 54 61 62 2d 3e 69 50 4b 65 79  Key!=pTab->iPKey
af40: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
af50: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
af60: 33 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20  3(v, OP_Column, 
af70: 30 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f 77 29  0, iKey, regRow)
af80: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
af90: 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75  lite3ColumnDefau
afa0: 6c 74 28 76 2c 20 70 54 61 62 2c 20 69 4b 65 79  lt(v, pTab, iKey
afb0: 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20  , regRow);.     
afc0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
afd0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
afe0: 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2c 20 61  sNull, regRow, a
aff0: 64 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65  ddrOk); VdbeCove
b000: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
b010: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b020: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4d 75 73  AddOp2(v, OP_Mus
b030: 74 42 65 49 6e 74 2c 20 72 65 67 52 6f 77 2c 20  tBeInt, regRow, 
b040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b050: 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65  sqlite3VdbeCurre
b060: 6e 74 41 64 64 72 28 76 29 2b 33 29 3b 20 56 64  ntAddr(v)+3); Vd
b070: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
b080: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
b090: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
b0a0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
b0b0: 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65   OP_Rowid, 0, re
b0c0: 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20  gRow);.         
b0d0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c   }.          sql
b0e0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
b0f0: 2c 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 2c 20  , OP_NotExists, 
b100: 69 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 20 56  i, 0, regRow); V
b110: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
b120: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
b130: 33 56 64 62 65 47 6f 74 6f 28 76 2c 20 61 64 64  3VdbeGoto(v, add
b140: 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20  rOk);.          
b150: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
b160: 65 72 65 28 76 2c 20 73 71 6c 69 74 65 33 56 64  ere(v, sqlite3Vd
b170: 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29  beCurrentAddr(v)
b180: 2d 32 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  -2);.        }el
b190: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f  se{.          fo
b1a0: 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43  r(j=0; j<pFK->nC
b1b0: 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; j++){.      
b1c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
b1d0: 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66  rCodeGetColumnOf
b1e0: 54 61 62 6c 65 28 76 2c 20 70 54 61 62 2c 20 30  Table(v, pTab, 0
b1f0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
b200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 69                ai
b210: 43 6f 6c 73 20 3f 20 61 69 43 6f 6c 73 5b 6a 5d  Cols ? aiCols[j]
b220: 20 3a 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e   : pFK->aCol[j].
b230: 69 46 72 6f 6d 2c 20 72 65 67 52 6f 77 2b 6a 29  iFrom, regRow+j)
b240: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
b250: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
b260: 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65  v, OP_IsNull, re
b270: 67 52 6f 77 2b 6a 2c 20 61 64 64 72 4f 6b 29 3b  gRow+j, addrOk);
b280: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
b290: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
b2a0: 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72          if( pPar
b2b0: 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ent ){.         
b2c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
b2d0: 64 4f 70 34 28 76 2c 20 4f 50 5f 4d 61 6b 65 52  dOp4(v, OP_MakeR
b2e0: 65 63 6f 72 64 2c 20 72 65 67 52 6f 77 2c 20 70  ecord, regRow, p
b2f0: 46 4b 2d 3e 6e 43 6f 6c 2c 20 72 65 67 4b 65 79  FK->nCol, regKey
b300: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
b310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b320: 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
b330: 6e 69 74 79 53 74 72 28 64 62 2c 70 49 64 78 29  nityStr(db,pIdx)
b340: 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 29 3b 0a 20 20  , pFK->nCol);.  
b350: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
b360: 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76  3VdbeAddOp4Int(v
b370: 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 2c 20 61  , OP_Found, i, a
b380: 64 64 72 4f 6b 2c 20 72 65 67 4b 65 79 2c 20 30  ddrOk, regKey, 0
b390: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  );.            V
b3a0: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
b3b0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
b3c0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71      }.        sq
b3d0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
b3e0: 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20  v, OP_Rowid, 0, 
b3f0: 72 65 67 52 65 73 75 6c 74 2b 31 29 3b 0a 20 20  regResult+1);.  
b400: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b410: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 72 65  eMultiLoad(v, re
b420: 67 52 65 73 75 6c 74 2b 32 2c 20 22 73 69 22 2c  gResult+2, "si",
b430: 20 70 46 4b 2d 3e 7a 54 6f 2c 20 69 2d 31 29 3b   pFK->zTo, i-1);
b440: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
b450: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
b460: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 72 65 67 52  _ResultRow, regR
b470: 65 73 75 6c 74 2c 20 34 29 3b 0a 20 20 20 20 20  esult, 4);.     
b480: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65     sqlite3VdbeRe
b490: 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20 61 64  solveLabel(v, ad
b4a0: 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 73  drOk);.        s
b4b0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
b4c0: 20 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20   aiCols);.      
b4d0: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  }.      sqlite3V
b4e0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
b4f0: 4e 65 78 74 2c 20 30 2c 20 61 64 64 72 54 6f 70  Next, 0, addrTop
b500: 2b 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  +1); VdbeCoverag
b510: 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  e(v);.      sqli
b520: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
b530: 76 2c 20 61 64 64 72 54 6f 70 29 3b 0a 20 20 20  v, addrTop);.   
b540: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
b550: 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
b560: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
b570: 52 49 47 47 45 52 29 20 2a 2f 0a 23 65 6e 64 69  RIGGER) */.#endi
b580: 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
b590: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
b5a0: 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64  N_KEY) */..#ifnd
b5b0: 65 66 20 4e 44 45 42 55 47 0a 20 20 63 61 73 65  ef NDEBUG.  case
b5c0: 20 50 72 61 67 54 79 70 5f 50 41 52 53 45 52 5f   PragTyp_PARSER_
b5d0: 54 52 41 43 45 3a 20 7b 0a 20 20 20 20 69 66 28  TRACE: {.    if(
b5e0: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
b5f0: 20 69 66 28 20 73 71 6c 69 74 65 33 47 65 74 42   if( sqlite3GetB
b600: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30  oolean(zRight, 0
b610: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ) ){.        sql
b620: 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
b630: 73 74 64 6f 75 74 2c 20 22 70 61 72 73 65 72 3a  stdout, "parser:
b640: 20 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65   ");.      }else
b650: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
b660: 33 50 61 72 73 65 72 54 72 61 63 65 28 30 2c 20  3ParserTrace(0, 
b670: 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  0);.      }.    
b680: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  }.  }.  break;.#
b690: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 52 65 69 6e  endif..  /* Rein
b6a0: 73 74 61 6c 6c 20 74 68 65 20 4c 49 4b 45 20 61  stall the LIKE a
b6b0: 6e 64 20 47 4c 4f 42 20 66 75 6e 63 74 69 6f 6e  nd GLOB function
b6c0: 73 2e 20 20 54 68 65 20 76 61 72 69 61 6e 74 20  s.  The variant 
b6d0: 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a 20 75 73 65  of LIKE.  ** use
b6e0: 64 20 77 69 6c 6c 20 62 65 20 63 61 73 65 20 73  d will be case s
b6f0: 65 6e 73 69 74 69 76 65 20 6f 72 20 6e 6f 74 20  ensitive or not 
b700: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65  depending on the
b710: 20 52 48 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73   RHS..  */.  cas
b720: 65 20 50 72 61 67 54 79 70 5f 43 41 53 45 5f 53  e PragTyp_CASE_S
b730: 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 3a 20 7b  ENSITIVE_LIKE: {
b740: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
b750: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
b760: 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63  RegisterLikeFunc
b770: 74 69 6f 6e 73 28 64 62 2c 20 73 71 6c 69 74 65  tions(db, sqlite
b780: 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67  3GetBoolean(zRig
b790: 68 74 2c 20 30 29 29 3b 0a 20 20 20 20 7d 0a 20  ht, 0));.    }. 
b7a0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 23 69 66   }.  break;..#if
b7b0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 49 4e 54 45  ndef SQLITE_INTE
b7c0: 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f  GRITY_CHECK_ERRO
b7d0: 52 5f 4d 41 58 0a 23 20 64 65 66 69 6e 65 20 53  R_MAX.# define S
b7e0: 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f  QLITE_INTEGRITY_
b7f0: 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 20  CHECK_ERROR_MAX 
b800: 31 30 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  100.#endif..#ifn
b810: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
b820: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a  INTEGRITY_CHECK.
b830: 20 20 2f 2a 20 50 72 61 67 6d 61 20 22 71 75 69    /* Pragma "qui
b840: 63 6b 5f 63 68 65 63 6b 22 20 69 73 20 72 65 64  ck_check" is red
b850: 75 63 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20  uced version of 
b860: 0a 20 20 2a 2a 20 69 6e 74 65 67 72 69 74 79 5f  .  ** integrity_
b870: 63 68 65 63 6b 20 64 65 73 69 67 6e 65 64 20 74  check designed t
b880: 6f 20 64 65 74 65 63 74 20 6d 6f 73 74 20 64 61  o detect most da
b890: 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f  tabase corruptio
b8a0: 6e 0a 20 20 2a 2a 20 77 69 74 68 6f 75 74 20 6d  n.  ** without m
b8b0: 6f 73 74 20 6f 66 20 74 68 65 20 6f 76 65 72 68  ost of the overh
b8c0: 65 61 64 20 6f 66 20 61 20 66 75 6c 6c 20 69 6e  ead of a full in
b8d0: 74 65 67 72 69 74 79 2d 63 68 65 63 6b 2e 0a 20  tegrity-check.. 
b8e0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
b8f0: 79 70 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  yp_INTEGRITY_CHE
b900: 43 4b 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 2c  CK: {.    int i,
b910: 20 6a 2c 20 61 64 64 72 2c 20 6d 78 45 72 72 3b   j, addr, mxErr;
b920: 0a 0a 20 20 20 20 69 6e 74 20 69 73 51 75 69 63  ..    int isQuic
b930: 6b 20 3d 20 28 73 71 6c 69 74 65 33 54 6f 6c 6f  k = (sqlite3Tolo
b940: 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27  wer(zLeft[0])=='
b950: 71 27 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  q');..    /* If 
b960: 74 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61  the PRAGMA comma
b970: 6e 64 20 77 61 73 20 6f 66 20 74 68 65 20 66 6f  nd was of the fo
b980: 72 6d 20 22 50 52 41 47 4d 41 20 3c 64 62 3e 2e  rm "PRAGMA <db>.
b990: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22  integrity_check"
b9a0: 2c 0a 20 20 20 20 2a 2a 20 74 68 65 6e 20 69 44  ,.    ** then iD
b9b0: 62 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  b is set to the 
b9c0: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
b9d0: 61 62 61 73 65 20 69 64 65 6e 74 69 66 69 65 64  abase identified
b9e0: 20 62 79 20 3c 64 62 3e 2e 0a 20 20 20 20 2a 2a   by <db>..    **
b9f0: 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74   In this case, t
ba00: 68 65 20 69 6e 74 65 67 72 69 74 79 20 6f 66 20  he integrity of 
ba10: 64 61 74 61 62 61 73 65 20 69 44 62 20 6f 6e 6c  database iDb onl
ba20: 79 20 69 73 20 76 65 72 69 66 69 65 64 20 62 79  y is verified by
ba30: 0a 20 20 20 20 2a 2a 20 74 68 65 20 56 44 42 45  .    ** the VDBE
ba40: 20 63 72 65 61 74 65 64 20 62 65 6c 6f 77 2e 0a   created below..
ba50: 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4f 74      **.    ** Ot
ba60: 68 65 72 77 69 73 65 2c 20 69 66 20 74 68 65 20  herwise, if the 
ba70: 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73 69 6d 70  command was simp
ba80: 6c 79 20 22 50 52 41 47 4d 41 20 69 6e 74 65 67  ly "PRAGMA integ
ba90: 72 69 74 79 5f 63 68 65 63 6b 22 20 28 6f 72 0a  rity_check" (or.
baa0: 20 20 20 20 2a 2a 20 22 50 52 41 47 4d 41 20 71      ** "PRAGMA q
bab0: 75 69 63 6b 5f 63 68 65 63 6b 22 29 2c 20 74 68  uick_check"), th
bac0: 65 6e 20 69 44 62 20 69 73 20 73 65 74 20 74 6f  en iDb is set to
bad0: 20 30 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65   0. In this case
bae0: 2c 20 73 65 74 20 69 44 62 0a 20 20 20 20 2a 2a  , set iDb.    **
baf0: 20 74 6f 20 2d 31 20 68 65 72 65 2c 20 74 6f 20   to -1 here, to 
bb00: 69 6e 64 69 63 61 74 65 20 74 68 61 74 20 74 68  indicate that th
bb10: 65 20 56 44 42 45 20 73 68 6f 75 6c 64 20 76 65  e VDBE should ve
bb20: 72 69 66 79 20 74 68 65 20 69 6e 74 65 67 72 69  rify the integri
bb30: 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 61 6c 6c  ty.    ** of all
bb40: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
bb50: 73 65 73 2e 20 20 2a 2f 0a 20 20 20 20 61 73 73  ses.  */.    ass
bb60: 65 72 74 28 20 69 44 62 3e 3d 30 20 29 3b 0a 20  ert( iDb>=0 );. 
bb70: 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d     assert( iDb==
bb80: 30 20 7c 7c 20 70 49 64 32 2d 3e 7a 20 29 3b 0a  0 || pId2->z );.
bb90: 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 7a 3d      if( pId2->z=
bba0: 3d 30 20 29 20 69 44 62 20 3d 20 2d 31 3b 0a 0a  =0 ) iDb = -1;..
bbb0: 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a      /* Initializ
bbc0: 65 20 74 68 65 20 56 44 42 45 20 70 72 6f 67 72  e the VDBE progr
bbd0: 61 6d 20 2a 2f 0a 20 20 20 20 70 50 61 72 73 65  am */.    pParse
bbe0: 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20  ->nMem = 6;.    
bbf0: 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65  setOneColumnName
bc00: 28 76 2c 20 22 69 6e 74 65 67 72 69 74 79 5f 63  (v, "integrity_c
bc10: 68 65 63 6b 22 29 3b 0a 0a 20 20 20 20 2f 2a 20  heck");..    /* 
bc20: 53 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  Set the maximum 
bc30: 65 72 72 6f 72 20 63 6f 75 6e 74 20 2a 2f 0a 20  error count */. 
bc40: 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54     mxErr = SQLIT
bc50: 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  E_INTEGRITY_CHEC
bc60: 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20  K_ERROR_MAX;.   
bc70: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
bc80: 20 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 49       sqlite3GetI
bc90: 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 6d 78  nt32(zRight, &mx
bca0: 45 72 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Err);.      if( 
bcb0: 6d 78 45 72 72 3c 3d 30 20 29 7b 0a 20 20 20 20  mxErr<=0 ){.    
bcc0: 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49      mxErr = SQLI
bcd0: 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  TE_INTEGRITY_CHE
bce0: 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20  CK_ERROR_MAX;.  
bcf0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
bd00: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
bd10: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
bd20: 20 6d 78 45 72 72 2c 20 31 29 3b 20 20 2f 2a 20   mxErr, 1);  /* 
bd30: 72 65 67 5b 31 5d 20 68 6f 6c 64 73 20 65 72 72  reg[1] holds err
bd40: 6f 72 73 20 6c 65 66 74 20 2a 2f 0a 0a 20 20 20  ors left */..   
bd50: 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72   /* Do an integr
bd60: 69 74 79 20 63 68 65 63 6b 20 6f 6e 20 65 61 63  ity check on eac
bd70: 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  h database file 
bd80: 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  */.    for(i=0; 
bd90: 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
bda0: 0a 20 20 20 20 20 20 48 61 73 68 45 6c 65 6d 20  .      HashElem 
bdb0: 2a 78 3b 0a 20 20 20 20 20 20 48 61 73 68 20 2a  *x;.      Hash *
bdc0: 70 54 62 6c 73 3b 0a 20 20 20 20 20 20 69 6e 74  pTbls;.      int
bdd0: 20 63 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20   cnt = 0;..     
bde0: 20 69 66 28 20 4f 4d 49 54 5f 54 45 4d 50 44 42   if( OMIT_TEMPDB
bdf0: 20 26 26 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69   && i==1 ) conti
be00: 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20 69  nue;.      if( i
be10: 44 62 3e 3d 30 20 26 26 20 69 21 3d 69 44 62 20  Db>=0 && i!=iDb 
be20: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20  ) continue;..   
be30: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
be40: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
be50: 65 2c 20 69 29 3b 0a 20 20 20 20 20 20 61 64 64  e, i);.      add
be60: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
be70: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f  ddOp1(v, OP_IfPo
be80: 73 2c 20 31 29 3b 20 2f 2a 20 48 61 6c 74 20 69  s, 1); /* Halt i
be90: 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20  f out of errors 
bea0: 2a 2f 0a 20 20 20 20 20 20 56 64 62 65 43 6f 76  */.      VdbeCov
beb0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
bec0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
bed0: 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c  2(v, OP_Halt, 0,
bee0: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
bef0: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
bf00: 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20  , addr);..      
bf10: 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69  /* Do an integri
bf20: 74 79 20 63 68 65 63 6b 20 6f 66 20 74 68 65 20  ty check of the 
bf30: 42 2d 54 72 65 65 0a 20 20 20 20 20 20 2a 2a 0a  B-Tree.      **.
bf40: 20 20 20 20 20 20 2a 2a 20 42 65 67 69 6e 20 62        ** Begin b
bf50: 79 20 66 69 6c 6c 69 6e 67 20 72 65 67 69 73 74  y filling regist
bf60: 65 72 73 20 32 2c 20 33 2c 20 2e 2e 2e 20 77 69  ers 2, 3, ... wi
bf70: 74 68 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  th the root page
bf80: 73 20 6e 75 6d 62 65 72 73 0a 20 20 20 20 20 20  s numbers.      
bf90: 2a 2a 20 66 6f 72 20 61 6c 6c 20 74 61 62 6c 65  ** for all table
bfa0: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e  s and indices in
bfb0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20   the database.. 
bfc0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73       */.      as
bfd0: 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
bfe0: 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
bff0: 20 69 2c 20 30 29 20 29 3b 0a 20 20 20 20 20 20   i, 0) );.      
c000: 70 54 62 6c 73 20 3d 20 26 64 62 2d 3e 61 44 62  pTbls = &db->aDb
c010: 5b 69 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c  [i].pSchema->tbl
c020: 48 61 73 68 3b 0a 20 20 20 20 20 20 66 6f 72 28  Hash;.      for(
c030: 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  x=sqliteHashFirs
c040: 74 28 70 54 62 6c 73 29 3b 20 78 3b 20 78 3d 73  t(pTbls); x; x=s
c050: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78 29  qliteHashNext(x)
c060: 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65  ){.        Table
c070: 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48   *pTab = sqliteH
c080: 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20  ashData(x);.    
c090: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
c0a0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 48 61 73  .        if( Has
c0b0: 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20  Rowid(pTab) ){. 
c0c0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
c0d0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c0e0: 5f 49 6e 74 65 67 65 72 2c 20 70 54 61 62 2d 3e  _Integer, pTab->
c0f0: 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20  tnum, 2+cnt);.  
c100: 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 6d 6d          VdbeComm
c110: 65 6e 74 28 28 76 2c 20 22 25 73 22 2c 20 70 54  ent((v, "%s", pT
c120: 61 62 2d 3e 7a 4e 61 6d 65 29 29 3b 0a 20 20 20  ab->zName));.   
c130: 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20         cnt++;.  
c140: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
c150: 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70  for(pIdx=pTab->p
c160: 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64  Index; pIdx; pId
c170: 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a  x=pIdx->pNext){.
c180: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
c190: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c1a0: 50 5f 49 6e 74 65 67 65 72 2c 20 70 49 64 78 2d  P_Integer, pIdx-
c1b0: 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20  >tnum, 2+cnt);. 
c1c0: 20 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 6d           VdbeCom
c1d0: 6d 65 6e 74 28 28 76 2c 20 22 25 73 22 2c 20 70  ment((v, "%s", p
c1e0: 49 64 78 2d 3e 7a 4e 61 6d 65 29 29 3b 0a 20 20  Idx->zName));.  
c1f0: 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20          cnt++;. 
c200: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
c210: 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20  ..      /* Make 
c220: 73 75 72 65 20 73 75 66 66 69 63 69 65 6e 74 20  sure sufficient 
c230: 6e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  number of regist
c240: 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 61 6c  ers have been al
c250: 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 20 20 20  located */.     
c260: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
c270: 4d 41 58 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65  MAX( pParse->nMe
c280: 6d 2c 20 63 6e 74 2b 38 20 29 3b 0a 0a 20 20 20  m, cnt+8 );..   
c290: 20 20 20 2f 2a 20 44 6f 20 74 68 65 20 62 2d 74     /* Do the b-t
c2a0: 72 65 65 20 69 6e 74 65 67 72 69 74 79 20 63 68  ree integrity ch
c2b0: 65 63 6b 73 20 2a 2f 0a 20 20 20 20 20 20 73 71  ecks */.      sq
c2c0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
c2d0: 76 2c 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43  v, OP_IntegrityC
c2e0: 6b 2c 20 32 2c 20 63 6e 74 2c 20 31 29 3b 0a 20  k, 2, cnt, 1);. 
c2f0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c300: 43 68 61 6e 67 65 50 35 28 76 2c 20 28 75 38 29  ChangeP5(v, (u8)
c310: 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d  i);.      addr =
c320: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c330: 70 31 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c  p1(v, OP_IsNull,
c340: 20 32 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67   2); VdbeCoverag
c350: 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  e(v);.      sqli
c360: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
c370: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
c380: 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 73  3, 0,.         s
c390: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
c3a0: 2c 20 22 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61  , "*** in databa
c3b0: 73 65 20 25 73 20 2a 2a 2a 5c 6e 22 2c 20 64 62  se %s ***\n", db
c3c0: 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 29 2c  ->aDb[i].zName),
c3d0: 0a 20 20 20 20 20 20 20 20 20 50 34 5f 44 59 4e  .         P4_DYN
c3e0: 41 4d 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  AMIC);.      sql
c3f0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
c400: 2c 20 4f 50 5f 4d 6f 76 65 2c 20 32 2c 20 34 2c  , OP_Move, 2, 4,
c410: 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   1);.      sqlit
c420: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
c430: 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c  OP_Concat, 4, 3,
c440: 20 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   2);.      sqlit
c450: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c460: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 32 2c  OP_ResultRow, 2,
c470: 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   1);.      sqlit
c480: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
c490: 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20  , addr);..      
c4a0: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c  /* Make sure all
c4b0: 20 74 68 65 20 69 6e 64 69 63 65 73 20 61 72 65   the indices are
c4c0: 20 63 6f 6e 73 74 72 75 63 74 65 64 20 63 6f 72   constructed cor
c4d0: 72 65 63 74 6c 79 2e 0a 20 20 20 20 20 20 2a 2f  rectly..      */
c4e0: 0a 20 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c  .      for(x=sql
c4f0: 69 74 65 48 61 73 68 46 69 72 73 74 28 70 54 62  iteHashFirst(pTb
c500: 6c 73 29 3b 20 78 20 26 26 20 21 69 73 51 75 69  ls); x && !isQui
c510: 63 6b 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68  ck; x=sqliteHash
c520: 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20  Next(x)){.      
c530: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20    Table *pTab = 
c540: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 78  sqliteHashData(x
c550: 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78  );.        Index
c560: 20 2a 70 49 64 78 2c 20 2a 70 50 6b 3b 0a 20 20   *pIdx, *pPk;.  
c570: 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50 72        Index *pPr
c580: 69 6f 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ior = 0;.       
c590: 20 69 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 20 20   int loopTop;.  
c5a0: 20 20 20 20 20 20 69 6e 74 20 69 44 61 74 61 43        int iDataC
c5b0: 75 72 2c 20 69 49 64 78 43 75 72 3b 0a 20 20 20  ur, iIdxCur;.   
c5c0: 20 20 20 20 20 69 6e 74 20 72 31 20 3d 20 2d 31       int r1 = -1
c5d0: 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  ;..        if( p
c5e0: 54 61 62 2d 3e 70 49 6e 64 65 78 3d 3d 30 20 29  Tab->pIndex==0 )
c5f0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
c600: 20 20 20 70 50 6b 20 3d 20 48 61 73 52 6f 77 69     pPk = HasRowi
c610: 64 28 70 54 61 62 29 20 3f 20 30 20 3a 20 73 71  d(pTab) ? 0 : sq
c620: 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49  lite3PrimaryKeyI
c630: 6e 64 65 78 28 70 54 61 62 29 3b 0a 20 20 20 20  ndex(pTab);.    
c640: 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
c650: 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
c660: 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 20 2f  OP_IfPos, 1);  /
c670: 2a 20 53 74 6f 70 20 69 66 20 6f 75 74 20 6f 66  * Stop if out of
c680: 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20   errors */.     
c690: 20 20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28     VdbeCoverage(
c6a0: 76 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  v);.        sqli
c6b0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c6c0: 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b   OP_Halt, 0, 0);
c6d0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
c6e0: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
c6f0: 61 64 64 72 29 3b 0a 20 20 20 20 20 20 20 20 73  addr);.        s
c700: 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 43  qlite3ExprCacheC
c710: 6c 65 61 72 28 70 50 61 72 73 65 29 3b 0a 20 20  lear(pParse);.  
c720: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65        sqlite3Ope
c730: 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73  nTableAndIndices
c740: 28 70 50 61 72 73 65 2c 20 70 54 61 62 2c 20 4f  (pParse, pTab, O
c750: 50 5f 4f 70 65 6e 52 65 61 64 2c 20 30 2c 0a 20  P_OpenRead, 0,. 
c760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c780: 20 20 31 2c 20 30 2c 20 26 69 44 61 74 61 43 75    1, 0, &iDataCu
c790: 72 2c 20 26 69 49 64 78 43 75 72 29 3b 0a 20 20  r, &iIdxCur);.  
c7a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c7b0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
c7c0: 74 65 67 65 72 2c 20 30 2c 20 37 29 3b 0a 20 20  teger, 0, 7);.  
c7d0: 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70        for(j=0, p
c7e0: 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
c7f0: 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64  ; pIdx; pIdx=pId
c800: 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a  x->pNext, j++){.
c810: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
c820: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c830: 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 38 2b  P_Integer, 0, 8+
c840: 6a 29 3b 20 2f 2a 20 69 6e 64 65 78 20 65 6e 74  j); /* index ent
c850: 72 69 65 73 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  ries counter */.
c860: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
c870: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
c880: 20 4d 41 58 28 70 50 61 72 73 65 2d 3e 6e 4d 65   MAX(pParse->nMe
c890: 6d 2c 20 38 2b 6a 29 3b 0a 20 20 20 20 20 20 20  m, 8+j);.       
c8a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c8b0: 70 32 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c  p2(v, OP_Rewind,
c8c0: 20 69 44 61 74 61 43 75 72 2c 20 30 29 3b 20 56   iDataCur, 0); V
c8d0: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
c8e0: 20 20 20 20 20 20 20 20 6c 6f 6f 70 54 6f 70 20          loopTop 
c8f0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
c900: 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d  Op2(v, OP_AddImm
c910: 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  , 7, 1);.       
c920: 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74 20   /* Verify that 
c930: 61 6c 6c 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6c  all NOT NULL col
c940: 75 6d 6e 73 20 72 65 61 6c 6c 79 20 61 72 65 20  umns really are 
c950: 4e 4f 54 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20  NOT NULL */.    
c960: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70      for(j=0; j<p
c970: 54 61 62 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b  Tab->nCol; j++){
c980: 0a 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20  .          char 
c990: 2a 7a 45 72 72 3b 0a 20 20 20 20 20 20 20 20 20  *zErr;.         
c9a0: 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33 3b   int jmp2, jmp3;
c9b0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6a  .          if( j
c9c0: 3d 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 20  ==pTab->iPKey ) 
c9d0: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
c9e0: 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e 61 43      if( pTab->aC
c9f0: 6f 6c 5b 6a 5d 2e 6e 6f 74 4e 75 6c 6c 3d 3d 30  ol[j].notNull==0
ca00: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
ca10: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
ca20: 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
ca30: 66 54 61 62 6c 65 28 76 2c 20 70 54 61 62 2c 20  fTable(v, pTab, 
ca40: 69 44 61 74 61 43 75 72 2c 20 6a 2c 20 33 29 3b  iDataCur, j, 3);
ca50: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
ca60: 65 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76  e3VdbeChangeP5(v
ca70: 2c 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  , OPFLAG_TYPEOFA
ca80: 52 47 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a  RG);.          j
ca90: 6d 70 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62  mp2 = sqlite3Vdb
caa0: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 4e 6f  eAddOp1(v, OP_No
cab0: 74 4e 75 6c 6c 2c 20 33 29 3b 20 56 64 62 65 43  tNull, 3); VdbeC
cac0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
cad0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cae0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
caf0: 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a  dImm, 1, -1); /*
cb00: 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72   Decrement error
cb10: 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20   limit */.      
cb20: 20 20 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74      zErr = sqlit
cb30: 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 4e  e3MPrintf(db, "N
cb40: 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20 25 73 2e  ULL value in %s.
cb50: 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  %s", pTab->zName
cb60: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
cb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb80: 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 4e  pTab->aCol[j].zN
cb90: 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ame);.          
cba0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
cbb0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
cbc0: 20 30 2c 20 33 2c 20 30 2c 20 7a 45 72 72 2c 20   0, 3, 0, zErr, 
cbd0: 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20  P4_DYNAMIC);.   
cbe0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cbf0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
cc00: 65 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b  esultRow, 3, 1);
cc10: 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 33 20  .          jmp3 
cc20: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
cc30: 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c  Op1(v, OP_IfPos,
cc40: 20 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67   1); VdbeCoverag
cc50: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
cc60: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
cc70: 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20  0(v, OP_Halt);. 
cc80: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
cc90: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
cca0: 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20  jmp2);.         
ccb0: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
ccc0: 48 65 72 65 28 76 2c 20 6a 6d 70 33 29 3b 0a 20  Here(v, jmp3);. 
ccd0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
cce0: 20 2f 2a 20 56 61 6c 69 64 61 74 65 20 69 6e 64   /* Validate ind
ccf0: 65 78 20 65 6e 74 72 69 65 73 20 66 6f 72 20 74  ex entries for t
cd00: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 2a  he current row *
cd10: 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d  /.        for(j=
cd20: 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  0, pIdx=pTab->pI
cd30: 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78  ndex; pIdx; pIdx
cd40: 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b  =pIdx->pNext, j+
cd50: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e  +){.          in
cd60: 74 20 6a 6d 70 32 2c 20 6a 6d 70 33 2c 20 6a 6d  t jmp2, jmp3, jm
cd70: 70 34 2c 20 6a 6d 70 35 3b 0a 20 20 20 20 20 20  p4, jmp5;.      
cd80: 20 20 20 20 69 6e 74 20 63 6b 55 6e 69 71 20 3d      int ckUniq =
cd90: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65   sqlite3VdbeMake
cda0: 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20  Label(v);.      
cdb0: 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49 64      if( pPk==pId
cdc0: 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  x ) continue;.  
cdd0: 20 20 20 20 20 20 20 20 72 31 20 3d 20 73 71 6c          r1 = sql
cde0: 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65  ite3GenerateInde
cdf0: 78 4b 65 79 28 70 50 61 72 73 65 2c 20 70 49 64  xKey(pParse, pId
ce00: 78 2c 20 69 44 61 74 61 43 75 72 2c 20 30 2c 20  x, iDataCur, 0, 
ce10: 30 2c 20 26 6a 6d 70 33 2c 0a 20 20 20 20 20 20  0, &jmp3,.      
ce20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce40: 20 70 50 72 69 6f 72 2c 20 72 31 29 3b 0a 20 20   pPrior, r1);.  
ce50: 20 20 20 20 20 20 20 20 70 50 72 69 6f 72 20 3d          pPrior =
ce60: 20 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20 20   pIdx;.         
ce70: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ce80: 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  p2(v, OP_AddImm,
ce90: 20 38 2b 6a 2c 20 31 29 3b 20 20 2f 2a 20 69 6e   8+j, 1);  /* in
cea0: 63 72 65 6d 65 6e 74 20 65 6e 74 72 79 20 63 6f  crement entry co
ceb0: 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  unt */.         
cec0: 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74 20   /* Verify that 
ced0: 61 6e 20 69 6e 64 65 78 20 65 6e 74 72 79 20 65  an index entry e
cee0: 78 69 73 74 73 20 66 6f 72 20 74 68 65 20 63 75  xists for the cu
cef0: 72 72 65 6e 74 20 74 61 62 6c 65 20 72 6f 77 20  rrent table row 
cf00: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70  */.          jmp
cf10: 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  2 = sqlite3VdbeA
cf20: 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46  ddOp4Int(v, OP_F
cf30: 6f 75 6e 64 2c 20 69 49 64 78 43 75 72 2b 6a 2c  ound, iIdxCur+j,
cf40: 20 63 6b 55 6e 69 71 2c 20 72 31 2c 0a 20 20 20   ckUniq, r1,.   
cf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf70: 20 20 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e     pIdx->nColumn
cf80: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
cf90: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
cfa0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
cfb0: 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c  v, OP_AddImm, 1,
cfc0: 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65   -1); /* Decreme
cfd0: 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a  nt error limit *
cfe0: 2f 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  /.          sqli
cff0: 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e  te3VdbeLoadStrin
d000: 67 28 76 2c 20 33 2c 20 22 72 6f 77 20 22 29 3b  g(v, 3, "row ");
d010: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d020: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
d030: 4f 50 5f 43 6f 6e 63 61 74 2c 20 37 2c 20 33 2c  OP_Concat, 7, 3,
d040: 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   3);.          s
d050: 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74  qlite3VdbeLoadSt
d060: 72 69 6e 67 28 76 2c 20 34 2c 20 22 20 6d 69 73  ring(v, 4, " mis
d070: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
d080: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  ");.          sq
d090: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
d0a0: 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c  v, OP_Concat, 4,
d0b0: 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20   3, 3);.        
d0c0: 20 20 6a 6d 70 35 20 3d 20 73 71 6c 69 74 65 33    jmp5 = sqlite3
d0d0: 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76  VdbeLoadString(v
d0e0: 2c 20 34 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65  , 4, pIdx->zName
d0f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d100: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
d110: 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20  , OP_Concat, 4, 
d120: 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20  3, 3);.         
d130: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d140: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
d150: 6f 77 2c 20 33 2c 20 31 29 3b 0a 20 20 20 20 20  ow, 3, 1);.     
d160: 20 20 20 20 20 6a 6d 70 34 20 3d 20 73 71 6c 69       jmp4 = sqli
d170: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
d180: 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 56   OP_IfPos, 1); V
d190: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
d1a0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d1b0: 33 56 64 62 65 41 64 64 4f 70 30 28 76 2c 20 4f  3VdbeAddOp0(v, O
d1c0: 50 5f 48 61 6c 74 29 3b 0a 20 20 20 20 20 20 20  P_Halt);.       
d1d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
d1e0: 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 32 29 3b  mpHere(v, jmp2);
d1f0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  .          /* Fo
d200: 72 20 55 4e 49 51 55 45 20 69 6e 64 65 78 65 73  r UNIQUE indexes
d210: 2c 20 76 65 72 69 66 79 20 74 68 61 74 20 6f 6e  , verify that on
d220: 6c 79 20 6f 6e 65 20 65 6e 74 72 79 20 65 78 69  ly one entry exi
d230: 73 74 73 20 77 69 74 68 20 74 68 65 0a 20 20 20  sts with the.   
d240: 20 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e         ** curren
d250: 74 20 6b 65 79 2e 20 20 54 68 65 20 65 6e 74 72  t key.  The entr
d260: 79 20 69 73 20 75 6e 69 71 75 65 20 69 66 20 28  y is unique if (
d270: 31 29 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 69 73  1) any column is
d280: 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20   NULL.          
d290: 2a 2a 20 6f 72 20 28 32 29 20 74 68 65 20 6e 65  ** or (2) the ne
d2a0: 78 74 20 65 6e 74 72 79 20 68 61 73 20 61 20 64  xt entry has a d
d2b0: 69 66 66 65 72 65 6e 74 20 6b 65 79 20 2a 2f 0a  ifferent key */.
d2c0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 49 73            if( Is
d2d0: 55 6e 69 71 75 65 49 6e 64 65 78 28 70 49 64 78  UniqueIndex(pIdx
d2e0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ) ){.           
d2f0: 20 69 6e 74 20 75 6e 69 71 4f 6b 20 3d 20 73 71   int uniqOk = sq
d300: 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62  lite3VdbeMakeLab
d310: 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  el(v);.         
d320: 20 20 20 69 6e 74 20 6a 6d 70 36 3b 0a 20 20 20     int jmp6;.   
d330: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6b 6b 3b           int kk;
d340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
d350: 28 6b 6b 3d 30 3b 20 6b 6b 3c 70 49 64 78 2d 3e  (kk=0; kk<pIdx->
d360: 6e 4b 65 79 43 6f 6c 3b 20 6b 6b 2b 2b 29 7b 0a  nKeyCol; kk++){.
d370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
d380: 74 20 69 43 6f 6c 20 3d 20 70 49 64 78 2d 3e 61  t iCol = pIdx->a
d390: 69 43 6f 6c 75 6d 6e 5b 6b 6b 5d 3b 0a 20 20 20  iColumn[kk];.   
d3a0: 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72             asser
d3b0: 74 28 20 69 43 6f 6c 21 3d 58 4e 5f 52 4f 57 49  t( iCol!=XN_ROWI
d3c0: 44 20 26 26 20 69 43 6f 6c 3c 70 54 61 62 2d 3e  D && iCol<pTab->
d3d0: 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20 20 20  nCol );.        
d3e0: 20 20 20 20 20 20 69 66 28 20 69 43 6f 6c 3e 3d        if( iCol>=
d3f0: 30 20 26 26 20 70 54 61 62 2d 3e 61 43 6f 6c 5b  0 && pTab->aCol[
d400: 69 43 6f 6c 5d 2e 6e 6f 74 4e 75 6c 6c 20 29 20  iCol].notNull ) 
d410: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
d420: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d430: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d440: 49 73 4e 75 6c 6c 2c 20 72 31 2b 6b 6b 2c 20 75  IsNull, r1+kk, u
d450: 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20  niqOk);.        
d460: 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72 61        VdbeCovera
d470: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
d480: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
d490: 20 6a 6d 70 36 20 3d 20 73 71 6c 69 74 65 33 56   jmp6 = sqlite3V
d4a0: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
d4b0: 4e 65 78 74 2c 20 69 49 64 78 43 75 72 2b 6a 29  Next, iIdxCur+j)
d4c0: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
d4d0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
d4e0: 71 6c 69 74 65 33 56 64 62 65 47 6f 74 6f 28 76  qlite3VdbeGoto(v
d4f0: 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20  , uniqOk);.     
d500: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d510: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d  beJumpHere(v, jm
d520: 70 36 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  p6);.           
d530: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d540: 70 34 49 6e 74 28 76 2c 20 4f 50 5f 49 64 78 47  p4Int(v, OP_IdxG
d550: 54 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 75 6e  T, iIdxCur+j, un
d560: 69 71 4f 6b 2c 20 72 31 2c 0a 20 20 20 20 20 20  iqOk, r1,.      
d570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d580: 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d             pIdx-
d590: 3e 6e 4b 65 79 43 6f 6c 29 3b 20 56 64 62 65 43  >nKeyCol); VdbeC
d5a0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
d5b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d5c0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d5d0: 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20  AddImm, 1, -1); 
d5e0: 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72  /* Decrement err
d5f0: 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20  or limit */.    
d600: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d610: 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c  dbeLoadString(v,
d620: 20 33 2c 20 22 6e 6f 6e 2d 75 6e 69 71 75 65 20   3, "non-unique 
d630: 65 6e 74 72 79 20 69 6e 20 69 6e 64 65 78 20 22  entry in index "
d640: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
d650: 71 6c 69 74 65 33 56 64 62 65 47 6f 74 6f 28 76  qlite3VdbeGoto(v
d660: 2c 20 6a 6d 70 35 29 3b 0a 20 20 20 20 20 20 20  , jmp5);.       
d670: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d680: 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20  ResolveLabel(v, 
d690: 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20  uniqOk);.       
d6a0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73     }.          s
d6b0: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
d6c0: 72 65 28 76 2c 20 6a 6d 70 34 29 3b 0a 20 20 20  re(v, jmp4);.   
d6d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65         sqlite3Re
d6e0: 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65  solvePartIdxLabe
d6f0: 6c 28 70 50 61 72 73 65 2c 20 6a 6d 70 33 29 3b  l(pParse, jmp3);
d700: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
d710: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d720: 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c  dOp2(v, OP_Next,
d730: 20 69 44 61 74 61 43 75 72 2c 20 6c 6f 6f 70 54   iDataCur, loopT
d740: 6f 70 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  op); VdbeCoverag
d750: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 73 71  e(v);.        sq
d760: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
d770: 65 28 76 2c 20 6c 6f 6f 70 54 6f 70 2d 31 29 3b  e(v, loopTop-1);
d780: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d790: 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
d7a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d7b0: 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c  dbeLoadString(v,
d7c0: 20 32 2c 20 22 77 72 6f 6e 67 20 23 20 6f 66 20   2, "wrong # of 
d7d0: 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78  entries in index
d7e0: 20 22 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72   ");.        for
d7f0: 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d  (j=0, pIdx=pTab-
d800: 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70  >pIndex; pIdx; p
d810: 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c  Idx=pIdx->pNext,
d820: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
d830: 20 69 66 28 20 70 50 6b 3d 3d 70 49 64 78 20 29   if( pPk==pIdx )
d840: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
d850: 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69       addr = sqli
d860: 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64  te3VdbeCurrentAd
d870: 64 72 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  dr(v);.         
d880: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d890: 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20  p2(v, OP_IfPos, 
d8a0: 31 2c 20 61 64 64 72 2b 32 29 3b 20 56 64 62 65  1, addr+2); Vdbe
d8b0: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
d8c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d8d0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48  beAddOp2(v, OP_H
d8e0: 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  alt, 0, 0);.    
d8f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d900: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 43 6f  eAddOp2(v, OP_Co
d910: 75 6e 74 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20  unt, iIdxCur+j, 
d920: 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  3);.          sq
d930: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
d940: 76 2c 20 4f 50 5f 45 71 2c 20 38 2b 6a 2c 20 61  v, OP_Eq, 8+j, a
d950: 64 64 72 2b 38 2c 20 33 29 3b 20 56 64 62 65 43  ddr+8, 3); VdbeC
d960: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
d970: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d980: 65 43 68 61 6e 67 65 50 35 28 76 2c 20 53 51 4c  eChangeP5(v, SQL
d990: 49 54 45 5f 4e 4f 54 4e 55 4c 4c 29 3b 0a 20 20  ITE_NOTNULL);.  
d9a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d9b0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d9c0: 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a  AddImm, 1, -1);.
d9d0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d9e0: 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28  3VdbeLoadString(
d9f0: 76 2c 20 33 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d  v, 3, pIdx->zNam
da00: 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  e);.          sq
da10: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
da20: 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 33 2c  v, OP_Concat, 3,
da30: 20 32 2c 20 37 29 3b 0a 20 20 20 20 20 20 20 20   2, 7);.        
da40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
da50: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
da60: 52 6f 77 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20  Row, 7, 1);.    
da70: 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20      }.#endif /* 
da80: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
da90: 45 43 4f 55 4e 54 20 2a 2f 0a 20 20 20 20 20 20  ECOUNT */.      
daa0: 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20 7b 0a 20  } .    }.    {. 
dab0: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
dac0: 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45  t int iLn = VDBE
dad0: 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32  _OFFSET_LINENO(2
dae0: 29 3b 0a 20 20 20 20 20 20 73 74 61 74 69 63 20  );.      static 
daf0: 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74  const VdbeOpList
db00: 20 65 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b 0a 20   endCode[] = {. 
db10: 20 20 20 20 20 20 20 7b 20 4f 50 5f 41 64 64 49         { OP_AddI
db20: 6d 6d 2c 20 20 20 20 20 20 31 2c 20 30 2c 20 20  mm,      1, 0,  
db30: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
db40: 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f  0 */.        { O
db50: 50 5f 49 66 2c 20 20 20 20 20 20 20 20 20 20 31  P_If,          1
db60: 2c 20 34 2c 20 20 20 20 20 20 20 20 30 7d 2c 20  , 4,        0}, 
db70: 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20     /* 1 */.     
db80: 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c     { OP_String8,
db90: 20 20 20 20 20 30 2c 20 33 2c 20 20 20 20 20 20       0, 3,      
dba0: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f    0},    /* 2 */
dbb0: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65  .        { OP_Re
dbc0: 73 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20 31 2c  sultRow,   3, 1,
dbd0: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
dbe0: 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a  * 3 */.      };.
dbf0: 20 20 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f        VdbeOp *aO
dc00: 70 3b 0a 0a 20 20 20 20 20 20 61 4f 70 20 3d 20  p;..      aOp = 
dc10: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
dc20: 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a  List(v, ArraySiz
dc30: 65 28 65 6e 64 43 6f 64 65 29 2c 20 65 6e 64 43  e(endCode), endC
dc40: 6f 64 65 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20  ode, iLn);.     
dc50: 20 69 66 28 20 61 4f 70 20 29 7b 0a 20 20 20 20   if( aOp ){.    
dc60: 20 20 20 20 61 4f 70 5b 30 5d 2e 70 32 20 3d 20      aOp[0].p2 = 
dc70: 2d 6d 78 45 72 72 3b 0a 20 20 20 20 20 20 20 20  -mxErr;.        
dc80: 61 4f 70 5b 32 5d 2e 70 34 74 79 70 65 20 3d 20  aOp[2].p4type = 
dc90: 50 34 5f 53 54 41 54 49 43 3b 0a 20 20 20 20 20  P4_STATIC;.     
dca0: 20 20 20 61 4f 70 5b 32 5d 2e 70 34 2e 7a 20 3d     aOp[2].p4.z =
dcb0: 20 22 6f 6b 22 3b 0a 20 20 20 20 20 20 7d 0a 20   "ok";.      }. 
dcc0: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
dcd0: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
dce0: 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
dcf0: 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e  Y_CHECK */..#ifn
dd00: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
dd10: 55 54 46 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20  UTF16.  /*.  ** 
dd20: 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e    PRAGMA encodin
dd30: 67 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  g.  **   PRAGMA 
dd40: 65 6e 63 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d  encoding = "utf-
dd50: 38 22 7c 22 75 74 66 2d 31 36 22 7c 22 75 74 66  8"|"utf-16"|"utf
dd60: 2d 31 36 6c 65 22 7c 22 75 74 66 2d 31 36 62 65  -16le"|"utf-16be
dd70: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69  ".  **.  ** In i
dd80: 74 73 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 74  ts first form, t
dd90: 68 69 73 20 70 72 61 67 6d 61 20 72 65 74 75 72  his pragma retur
dda0: 6e 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  ns the encoding 
ddb0: 6f 66 20 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a  of the main.  **
ddc0: 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68   database. If th
ddd0: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f  e database is no
dde0: 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69  t initialized, i
ddf0: 74 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  t is initialized
de00: 20 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20   now..  **.  ** 
de10: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
de20: 6f 66 20 74 68 69 73 20 70 72 61 67 6d 61 20 69  of this pragma i
de30: 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65  s a no-op if the
de40: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
de50: 69 6c 65 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74  ile.  ** has not
de60: 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e   already been in
de70: 69 74 69 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68  itialized. In th
de80: 69 73 20 63 61 73 65 20 69 74 20 73 65 74 73 20  is case it sets 
de90: 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a  the default.  **
dea0: 20 65 6e 63 6f 64 69 6e 67 20 74 68 61 74 20 77   encoding that w
deb0: 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20  ill be used for 
dec0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
ded0: 65 20 66 69 6c 65 20 69 66 20 61 20 6e 65 77 20  e file if a new 
dee0: 66 69 6c 65 0a 20 20 2a 2a 20 69 73 20 63 72 65  file.  ** is cre
def0: 61 74 65 64 2e 20 49 66 20 61 6e 20 65 78 69 73  ated. If an exis
df00: 74 69 6e 67 20 6d 61 69 6e 20 64 61 74 61 62 61  ting main databa
df10: 73 65 20 66 69 6c 65 20 69 73 20 6f 70 65 6e 65  se file is opene
df20: 64 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a  d, then the.  **
df30: 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e   default text en
df40: 63 6f 64 69 6e 67 20 66 6f 72 20 74 68 65 20 65  coding for the e
df50: 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
df60: 20 69 73 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a   is used..  ** .
df70: 20 20 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65    ** In all case
df80: 73 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  s new databases 
df90: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68  created using th
dfa0: 65 20 41 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64  e ATTACH command
dfb0: 20 61 72 65 0a 20 20 2a 2a 20 63 72 65 61 74 65   are.  ** create
dfc0: 64 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d  d to use the sam
dfd0: 65 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65  e default text e
dfe0: 6e 63 6f 64 69 6e 67 20 61 73 20 74 68 65 20 6d  ncoding as the m
dff0: 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 66  ain database. If
e000: 0a 20 20 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  .  ** the main d
e010: 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20  atabase has not 
e020: 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
e030: 20 61 6e 64 2f 6f 72 20 63 72 65 61 74 65 64 20   and/or created 
e040: 77 68 65 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a  when ATTACH.  **
e050: 20 69 73 20 65 78 65 63 75 74 65 64 2c 20 74 68   is executed, th
e060: 69 73 20 69 73 20 64 6f 6e 65 20 62 65 66 6f 72  is is done befor
e070: 65 20 74 68 65 20 41 54 54 41 43 48 20 6f 70 65  e the ATTACH ope
e080: 72 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a  ration..  **.  *
e090: 2a 20 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20  * In the second 
e0a0: 66 6f 72 6d 20 74 68 69 73 20 70 72 61 67 6d 61  form this pragma
e0b0: 20 73 65 74 73 20 74 68 65 20 74 65 78 74 20 65   sets the text e
e0c0: 6e 63 6f 64 69 6e 67 20 74 6f 20 62 65 20 75 73  ncoding to be us
e0d0: 65 64 20 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64  ed in.  ** new d
e0e0: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 63 72  atabase files cr
e0f0: 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 69 73  eated using this
e100: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
e110: 2e 20 49 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a  . It is only.  *
e120: 2a 20 75 73 65 66 75 6c 20 69 66 20 69 6e 76 6f  * useful if invo
e130: 6b 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ked immediately 
e140: 61 66 74 65 72 20 74 68 65 20 6d 61 69 6e 20 64  after the main d
e150: 61 74 61 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20  atabase i.  */. 
e160: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 45 4e   case PragTyp_EN
e170: 43 4f 44 49 4e 47 3a 20 7b 0a 20 20 20 20 73 74  CODING: {.    st
e180: 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63  atic const struc
e190: 74 20 45 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20  t EncName {.    
e1a0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20    char *zName;. 
e1b0: 20 20 20 20 20 75 38 20 65 6e 63 3b 0a 20 20 20       u8 enc;.   
e1c0: 20 7d 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20   } encnames[] = 
e1d0: 7b 0a 20 20 20 20 20 20 7b 20 22 55 54 46 38 22  {.      { "UTF8"
e1e0: 2c 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46  ,     SQLITE_UTF
e1f0: 38 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  8        },.    
e200: 20 20 7b 20 22 55 54 46 2d 38 22 2c 20 20 20 20    { "UTF-8",    
e210: 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20  SQLITE_UTF8     
e220: 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62     },  /* Must b
e230: 65 20 65 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f  e element [1] */
e240: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36  .      { "UTF-16
e250: 6c 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  le", SQLITE_UTF1
e260: 36 4c 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d  6LE     },  /* M
e270: 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b  ust be element [
e280: 32 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  2] */.      { "U
e290: 54 46 2d 31 36 62 65 22 2c 20 53 51 4c 49 54 45  TF-16be", SQLITE
e2a0: 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c 20  _UTF16BE     }, 
e2b0: 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d   /* Must be elem
e2c0: 65 6e 74 20 5b 33 5d 20 2a 2f 0a 20 20 20 20 20  ent [3] */.     
e2d0: 20 7b 20 22 55 54 46 31 36 6c 65 22 2c 20 20 53   { "UTF16le",  S
e2e0: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20  QLITE_UTF16LE   
e2f0: 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54    },.      { "UT
e300: 46 31 36 62 65 22 2c 20 20 53 51 4c 49 54 45 5f  F16be",  SQLITE_
e310: 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c 0a 20  UTF16BE     },. 
e320: 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 22 2c       { "UTF-16",
e330: 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20     0            
e340: 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49        }, /* SQLI
e350: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a  TE_UTF16NATIVE *
e360: 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36  /.      { "UTF16
e370: 22 2c 20 20 20 20 30 20 20 20 20 20 20 20 20 20  ",    0         
e380: 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53           }, /* S
e390: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
e3a0: 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 30 2c 20  E */.      { 0, 
e3b0: 30 20 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63  0 }.    };.    c
e3c0: 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e  onst struct EncN
e3d0: 61 6d 65 20 2a 70 45 6e 63 3b 0a 20 20 20 20 69  ame *pEnc;.    i
e3e0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 20 20 20  f( !zRight ){   
e3f0: 20 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f   /* "PRAGMA enco
e400: 64 69 6e 67 22 20 2a 2f 0a 20 20 20 20 20 20 69  ding" */.      i
e410: 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  f( sqlite3ReadSc
e420: 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67  hema(pParse) ) g
e430: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
e440: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65 6e        assert( en
e450: 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54  cnames[SQLITE_UT
e460: 46 38 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  F8].enc==SQLITE_
e470: 55 54 46 38 20 29 3b 0a 20 20 20 20 20 20 61 73  UTF8 );.      as
e480: 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53  sert( encnames[S
e490: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 5d 2e 65  QLITE_UTF16LE].e
e4a0: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
e4b0: 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  LE );.      asse
e4c0: 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c  rt( encnames[SQL
e4d0: 49 54 45 5f 55 54 46 31 36 42 45 5d 2e 65 6e 63  ITE_UTF16BE].enc
e4e0: 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  ==SQLITE_UTF16BE
e4f0: 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   );.      return
e500: 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 65  SingleText(v, "e
e510: 6e 63 6f 64 69 6e 67 22 2c 20 65 6e 63 6e 61 6d  ncoding", encnam
e520: 65 73 5b 45 4e 43 28 70 50 61 72 73 65 2d 3e 64  es[ENC(pParse->d
e530: 62 29 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  b)].zName);.    
e540: 7d 65 6c 73 65 7b 20 20 20 20 20 20 20 20 20 20  }else{          
e550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e560: 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e   "PRAGMA encodin
e570: 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20 20  g = XXX" */.    
e580: 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65    /* Only change
e590: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 73 71   the value of sq
e5a0: 6c 69 74 65 2e 65 6e 63 20 69 66 20 74 68 65 20  lite.enc if the 
e5b0: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
e5c0: 69 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20  is not.      ** 
e5d0: 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 66 20  initialized. If 
e5e0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
e5f0: 65 20 65 78 69 73 74 73 2c 20 74 68 65 20 6e 65  e exists, the ne
e600: 77 20 73 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c  w sqlite.enc val
e610: 75 65 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c  ue.      ** will
e620: 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20   be overwritten 
e630: 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  when the schema 
e640: 69 73 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20  is next loaded. 
e650: 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20  If it does not. 
e660: 20 20 20 20 20 2a 2a 20 61 6c 72 65 61 64 79 20       ** already 
e670: 65 78 69 73 74 73 2c 20 69 74 20 77 69 6c 6c 20  exists, it will 
e680: 62 65 20 63 72 65 61 74 65 64 20 74 6f 20 75 73  be created to us
e690: 65 20 74 68 65 20 6e 65 77 20 65 6e 63 6f 64 69  e the new encodi
e6a0: 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20  ng value..      
e6b0: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 0a 20 20  */.      if( .  
e6c0: 20 20 20 20 20 20 21 28 44 62 48 61 73 50 72 6f        !(DbHasPro
e6d0: 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f  perty(db, 0, DB_
e6e0: 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 29 20 7c  SchemaLoaded)) |
e6f0: 7c 20 0a 20 20 20 20 20 20 20 20 44 62 48 61 73  | .        DbHas
e700: 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20  Property(db, 0, 
e710: 44 42 5f 45 6d 70 74 79 29 20 0a 20 20 20 20 20  DB_Empty) .     
e720: 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
e730: 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65 73 5b 30  pEnc=&encnames[0
e740: 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20  ]; pEnc->zName; 
e750: 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20 20 20 20  pEnc++){.       
e760: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
e770: 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c  3StrICmp(zRight,
e780: 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b   pEnc->zName) ){
e790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 43 48  .            SCH
e7a0: 45 4d 41 5f 45 4e 43 28 64 62 29 20 3d 20 45 4e  EMA_ENC(db) = EN
e7b0: 43 28 64 62 29 20 3d 0a 20 20 20 20 20 20 20 20  C(db) =.        
e7c0: 20 20 20 20 20 20 20 20 70 45 6e 63 2d 3e 65 6e          pEnc->en
e7d0: 63 20 3f 20 70 45 6e 63 2d 3e 65 6e 63 20 3a 20  c ? pEnc->enc : 
e7e0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
e7f0: 56 45 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  VE;.            
e800: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20  break;.         
e810: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
e820: 20 20 20 20 20 69 66 28 20 21 70 45 6e 63 2d 3e       if( !pEnc->
e830: 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  zName ){.       
e840: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
e850: 73 67 28 70 50 61 72 73 65 2c 20 22 75 6e 73 75  sg(pParse, "unsu
e860: 70 70 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e 67  pported encoding
e870: 3a 20 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a  : %s", zRight);.
e880: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
e890: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
e8a0: 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  eak;.#endif /* S
e8b0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
e8c0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
e8d0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
e8e0: 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a  VERSION_PRAGMAS.
e8f0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
e900: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 73 63 68 65  MA [schema.]sche
e910: 6d 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20  ma_version.  ** 
e920: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
e930: 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  .]schema_version
e940: 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a   = <integer>.  *
e950: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
e960: 5b 73 63 68 65 6d 61 2e 5d 75 73 65 72 5f 76 65  [schema.]user_ve
e970: 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41  rsion.  **   PRA
e980: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 75 73 65  GMA [schema.]use
e990: 72 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74  r_version = <int
e9a0: 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
e9b0: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
e9c0: 2e 5d 66 72 65 65 6c 69 73 74 5f 63 6f 75 6e 74  .]freelist_count
e9d0: 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a   = <integer>.  *
e9e0: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
e9f0: 5b 73 63 68 65 6d 61 2e 5d 61 70 70 6c 69 63 61  [schema.]applica
ea00: 74 69 6f 6e 5f 69 64 0a 20 20 2a 2a 20 20 20 50  tion_id.  **   P
ea10: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61  RAGMA [schema.]a
ea20: 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 20 3d 20  pplication_id = 
ea30: 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20  <integer>.  **. 
ea40: 20 2a 2a 20 54 68 65 20 70 72 61 67 6d 61 27 73   ** The pragma's
ea50: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20   schema_version 
ea60: 61 6e 64 20 75 73 65 72 5f 76 65 72 73 69 6f 6e  and user_version
ea70: 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 65 74   are used to set
ea80: 20 6f 72 20 67 65 74 0a 20 20 2a 2a 20 74 68 65   or get.  ** the
ea90: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73 63   value of the sc
eaa0: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64  hema-version and
eab0: 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 2c 20 72   user-version, r
eac0: 65 73 70 65 63 74 69 76 65 6c 79 2e 20 42 6f 74  espectively. Bot
ead0: 68 0a 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d  h.  ** the schem
eae0: 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 74 68  a-version and th
eaf0: 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 61  e user-version a
eb00: 72 65 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64  re 32-bit signed
eb10: 20 69 6e 74 65 67 65 72 73 0a 20 20 2a 2a 20 73   integers.  ** s
eb20: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74  tored in the dat
eb30: 61 62 61 73 65 20 68 65 61 64 65 72 2e 0a 20 20  abase header..  
eb40: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 63 68 65  **.  ** The sche
eb50: 6d 61 2d 63 6f 6f 6b 69 65 20 69 73 20 75 73 75  ma-cookie is usu
eb60: 61 6c 6c 79 20 6f 6e 6c 79 20 6d 61 6e 69 70 75  ally only manipu
eb70: 6c 61 74 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79  lated internally
eb80: 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74 0a 20   by SQLite. It. 
eb90: 20 2a 2a 20 69 73 20 69 6e 63 72 65 6d 65 6e 74   ** is increment
eba0: 65 64 20 62 79 20 53 51 4c 69 74 65 20 77 68 65  ed by SQLite whe
ebb0: 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
ebc0: 73 65 20 73 63 68 65 6d 61 20 69 73 20 6d 6f 64  se schema is mod
ebd0: 69 66 69 65 64 20 28 62 79 0a 20 20 2a 2a 20 63  ified (by.  ** c
ebe0: 72 65 61 74 69 6e 67 20 6f 72 20 64 72 6f 70 70  reating or dropp
ebf0: 69 6e 67 20 61 20 74 61 62 6c 65 20 6f 72 20 69  ing a table or i
ec00: 6e 64 65 78 29 2e 20 54 68 65 20 73 63 68 65 6d  ndex). The schem
ec10: 61 20 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65  a version is use
ec20: 64 20 62 79 0a 20 20 2a 2a 20 53 51 4c 69 74 65  d by.  ** SQLite
ec30: 20 65 61 63 68 20 74 69 6d 65 20 61 20 71 75 65   each time a que
ec40: 72 79 20 69 73 20 65 78 65 63 75 74 65 64 20 74  ry is executed t
ec50: 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68  o ensure that th
ec60: 65 20 69 6e 74 65 72 6e 61 6c 20 63 61 63 68 65  e internal cache
ec70: 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 73 63 68  .  ** of the sch
ec80: 65 6d 61 20 75 73 65 64 20 77 68 65 6e 20 63 6f  ema used when co
ec90: 6d 70 69 6c 69 6e 67 20 74 68 65 20 53 51 4c 20  mpiling the SQL 
eca0: 71 75 65 72 79 20 6d 61 74 63 68 65 73 20 74 68  query matches th
ecb0: 65 20 73 63 68 65 6d 61 20 6f 66 0a 20 20 2a 2a  e schema of.  **
ecc0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 67   the database ag
ecd0: 61 69 6e 73 74 20 77 68 69 63 68 20 74 68 65 20  ainst which the 
ece0: 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 20 69  compiled query i
ecf0: 73 20 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75  s actually execu
ed00: 74 65 64 2e 0a 20 20 2a 2a 20 53 75 62 76 65 72  ted..  ** Subver
ed10: 74 69 6e 67 20 74 68 69 73 20 6d 65 63 68 61 6e  ting this mechan
ed20: 69 73 6d 20 62 79 20 75 73 69 6e 67 20 22 50 52  ism by using "PR
ed30: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
ed40: 69 6f 6e 22 20 74 6f 20 6d 6f 64 69 66 79 0a 20  ion" to modify. 
ed50: 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76   ** the schema-v
ed60: 65 72 73 69 6f 6e 20 69 73 20 70 6f 74 65 6e 74  ersion is potent
ed70: 69 61 6c 6c 79 20 64 61 6e 67 65 72 6f 75 73 20  ially dangerous 
ed80: 61 6e 64 20 6d 61 79 20 6c 65 61 64 20 74 6f 20  and may lead to 
ed90: 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 63 72 61  program.  ** cra
eda0: 73 68 65 73 20 6f 72 20 64 61 74 61 62 61 73 65  shes or database
edb0: 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20 55 73 65   corruption. Use
edc0: 20 77 69 74 68 20 63 61 75 74 69 6f 6e 21 0a 20   with caution!. 
edd0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 75 73 65   **.  ** The use
ede0: 72 2d 76 65 72 73 69 6f 6e 20 69 73 20 6e 6f 74  r-version is not
edf0: 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79   used internally
ee00: 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74 20 6d   by SQLite. It m
ee10: 61 79 20 62 65 20 75 73 65 64 20 62 79 0a 20 20  ay be used by.  
ee20: 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  ** applications 
ee30: 66 6f 72 20 61 6e 79 20 70 75 72 70 6f 73 65 2e  for any purpose.
ee40: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
ee50: 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55  gTyp_HEADER_VALU
ee60: 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 43 6f  E: {.    int iCo
ee70: 6f 6b 69 65 20 3d 20 70 50 72 61 67 6d 61 2d 3e  okie = pPragma->
ee80: 69 41 72 67 3b 20 20 2f 2a 20 57 68 69 63 68 20  iArg;  /* Which 
ee90: 63 6f 6f 6b 69 65 20 74 6f 20 72 65 61 64 20 6f  cookie to read o
eea0: 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 20 20 73  r write */.    s
eeb0: 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
eec0: 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20  ree(v, iDb);.   
eed0: 20 69 66 28 20 7a 52 69 67 68 74 20 26 26 20 28   if( zRight && (
eee0: 70 50 72 61 67 6d 61 2d 3e 6d 50 72 61 67 46 6c  pPragma->mPragFl
eef0: 61 67 20 26 20 50 72 61 67 46 6c 61 67 5f 52 65  ag & PragFlag_Re
ef00: 61 64 4f 6e 6c 79 29 3d 3d 30 20 29 7b 0a 20 20  adOnly)==0 ){.  
ef10: 20 20 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65      /* Write the
ef20: 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69   specified cooki
ef30: 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20  e value */.     
ef40: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
ef50: 62 65 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f 6b  beOpList setCook
ef60: 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20  ie[] = {.       
ef70: 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f   { OP_Transactio
ef80: 6e 2c 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d  n,    0,  1,  0}
ef90: 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  ,    /* 0 */.   
efa0: 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f       { OP_SetCoo
efb0: 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 30 2c  kie,      0,  0,
efc0: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f    0},    /* 1 */
efd0: 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20  .      };.      
efe0: 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20 20  VdbeOp *aOp;.   
eff0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 56 65     sqlite3VdbeVe
f000: 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52 65 71 75  rifyNoMallocRequ
f010: 69 72 65 64 28 76 2c 20 41 72 72 61 79 53 69 7a  ired(v, ArraySiz
f020: 65 28 73 65 74 43 6f 6f 6b 69 65 29 29 3b 0a 20  e(setCookie));. 
f030: 20 20 20 20 20 61 4f 70 20 3d 20 73 71 6c 69 74       aOp = sqlit
f040: 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  e3VdbeAddOpList(
f050: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65 74  v, ArraySize(set
f060: 43 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b  Cookie), setCook
f070: 69 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66  ie, 0);.      if
f080: 28 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f  ( ONLY_IF_REALLO
f090: 43 5f 53 54 52 45 53 53 28 61 4f 70 3d 3d 30 29  C_STRESS(aOp==0)
f0a0: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
f0b0: 61 4f 70 5b 30 5d 2e 70 31 20 3d 20 69 44 62 3b  aOp[0].p1 = iDb;
f0c0: 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70 31  .      aOp[1].p1
f0d0: 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 61 4f   = iDb;.      aO
f0e0: 70 5b 31 5d 2e 70 32 20 3d 20 69 43 6f 6f 6b 69  p[1].p2 = iCooki
f0f0: 65 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e  e;.      aOp[1].
f100: 70 33 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69  p3 = sqlite3Atoi
f110: 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 65  (zRight);.    }e
f120: 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52 65  lse{.      /* Re
f130: 61 64 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ad the specified
f140: 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f   cookie value */
f150: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
f160: 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 72  nst VdbeOpList r
f170: 65 61 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a  eadCookie[] = {.
f180: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61          { OP_Tra
f190: 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 20 30 2c  nsaction,     0,
f1a0: 20 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    0,  0},    /* 
f1b0: 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f  0 */.        { O
f1c0: 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20  P_ReadCookie,   
f1d0: 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20     0,  1,  0},  
f1e0: 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20    /* 1 */.      
f1f0: 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77    { OP_ResultRow
f200: 2c 20 20 20 20 20 20 20 31 2c 20 20 31 2c 20 20  ,       1,  1,  
f210: 30 7d 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  0}.      };.    
f220: 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20    VdbeOp *aOp;. 
f230: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f240: 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52 65  VerifyNoMallocRe
f250: 71 75 69 72 65 64 28 76 2c 20 41 72 72 61 79 53  quired(v, ArrayS
f260: 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65 29 29  ize(readCookie))
f270: 3b 0a 20 20 20 20 20 20 61 4f 70 20 3d 20 73 71  ;.      aOp = sq
f280: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
f290: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
f2a0: 72 65 61 64 43 6f 6f 6b 69 65 29 2c 72 65 61 64  readCookie),read
f2b0: 43 6f 6f 6b 69 65 2c 30 29 3b 0a 20 20 20 20 20  Cookie,0);.     
f2c0: 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52 45 41   if( ONLY_IF_REA
f2d0: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f 70 3d  LLOC_STRESS(aOp=
f2e0: 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  =0) ) break;.   
f2f0: 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20 3d 20 69     aOp[0].p1 = i
f300: 44 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d  Db;.      aOp[1]
f310: 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20  .p1 = iDb;.     
f320: 20 61 4f 70 5b 31 5d 2e 70 33 20 3d 20 69 43 6f   aOp[1].p3 = iCo
f330: 6f 6b 69 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  okie;.      sqli
f340: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
f350: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  s(v, 1);.      s
f360: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
f370: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
f380: 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20  ME_NAME, zLeft, 
f390: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
f3a0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
f3b0: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
f3c0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
f3d0: 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d  MA_VERSION_PRAGM
f3e0: 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  AS */..#ifndef S
f3f0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49  QLITE_OMIT_COMPI
f400: 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 20  LEOPTION_DIAGS. 
f410: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
f420: 41 20 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e  A compile_option
f430: 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  s.  **.  ** Retu
f440: 72 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20  rn the names of 
f450: 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  all compile-time
f460: 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 69 6e   options used in
f470: 20 74 68 69 73 20 62 75 69 6c 64 2c 0a 20 20 2a   this build,.  *
f480: 2a 20 6f 6e 65 20 6f 70 74 69 6f 6e 20 70 65 72  * one option per
f490: 20 72 6f 77 2e 0a 20 20 2a 2f 0a 20 20 63 61 73   row..  */.  cas
f4a0: 65 20 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c  e PragTyp_COMPIL
f4b0: 45 5f 4f 50 54 49 4f 4e 53 3a 20 7b 0a 20 20 20  E_OPTIONS: {.   
f4c0: 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20   int i = 0;.    
f4d0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 74  const char *zOpt
f4e0: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
f4f0: 65 6d 20 3d 20 31 3b 0a 20 20 20 20 73 65 74 4f  em = 1;.    setO
f500: 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20  neColumnName(v, 
f510: 22 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 22  "compile_option"
f520: 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 7a  );.    while( (z
f530: 4f 70 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  Opt = sqlite3_co
f540: 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28  mpileoption_get(
f550: 69 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  i++))!=0 ){.    
f560: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61    sqlite3VdbeLoa
f570: 64 53 74 72 69 6e 67 28 76 2c 20 31 2c 20 7a 4f  dString(v, 1, zO
f580: 70 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  pt);.      sqlit
f590: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
f5a0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
f5b0: 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   1);.    }.  }. 
f5c0: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
f5d0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  * SQLITE_OMIT_CO
f5e0: 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47  MPILEOPTION_DIAG
f5f0: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
f600: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
f610: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
f620: 20 5b 73 63 68 65 6d 61 2e 5d 77 61 6c 5f 63 68   [schema.]wal_ch
f630: 65 63 6b 70 6f 69 6e 74 20 3d 20 70 61 73 73 69  eckpoint = passi
f640: 76 65 7c 66 75 6c 6c 7c 72 65 73 74 61 72 74 7c  ve|full|restart|
f650: 74 72 75 6e 63 61 74 65 0a 20 20 2a 2a 0a 20 20  truncate.  **.  
f660: 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 74 68  ** Checkpoint th
f670: 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f  e database..  */
f680: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
f690: 57 41 4c 5f 43 48 45 43 4b 50 4f 49 4e 54 3a 20  WAL_CHECKPOINT: 
f6a0: 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
f6b0: 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d  st char *azCol[]
f6c0: 20 3d 20 7b 20 22 62 75 73 79 22 2c 20 22 6c 6f   = { "busy", "lo
f6d0: 67 22 2c 20 22 63 68 65 63 6b 70 6f 69 6e 74 65  g", "checkpointe
f6e0: 64 22 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 42  d" };.    int iB
f6f0: 74 20 3d 20 28 70 49 64 32 2d 3e 7a 3f 69 44 62  t = (pId2->z?iDb
f700: 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  :SQLITE_MAX_ATTA
f710: 43 48 45 44 29 3b 0a 20 20 20 20 69 6e 74 20 65  CHED);.    int e
f720: 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48  Mode = SQLITE_CH
f730: 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
f740: 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
f750: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71   ){.      if( sq
f760: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69  lite3StrICmp(zRi
f770: 67 68 74 2c 20 22 66 75 6c 6c 22 29 3d 3d 30 20  ght, "full")==0 
f780: 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65  ){.        eMode
f790: 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50   = SQLITE_CHECKP
f7a0: 4f 49 4e 54 5f 46 55 4c 4c 3b 0a 20 20 20 20 20  OINT_FULL;.     
f7b0: 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74   }else if( sqlit
f7c0: 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74  e3StrICmp(zRight
f7d0: 2c 20 22 72 65 73 74 61 72 74 22 29 3d 3d 30 20  , "restart")==0 
f7e0: 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65  ){.        eMode
f7f0: 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50   = SQLITE_CHECKP
f800: 4f 49 4e 54 5f 52 45 53 54 41 52 54 3b 0a 20 20  OINT_RESTART;.  
f810: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71      }else if( sq
f820: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69  lite3StrICmp(zRi
f830: 67 68 74 2c 20 22 74 72 75 6e 63 61 74 65 22 29  ght, "truncate")
f840: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65  ==0 ){.        e
f850: 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48  Mode = SQLITE_CH
f860: 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54  ECKPOINT_TRUNCAT
f870: 45 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  E;.      }.    }
f880: 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d  .    setAllColum
f890: 6e 4e 61 6d 65 73 28 76 2c 20 33 2c 20 61 7a 43  nNames(v, 3, azC
f8a0: 6f 6c 29 3b 20 20 61 73 73 65 72 74 28 20 33 3d  ol);  assert( 3=
f8b0: 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c  =ArraySize(azCol
f8c0: 29 20 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  ) );.    pParse-
f8d0: 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73  >nMem = 3;.    s
f8e0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
f8f0: 28 76 2c 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e  (v, OP_Checkpoin
f900: 74 2c 20 69 42 74 2c 20 65 4d 6f 64 65 2c 20 31  t, iBt, eMode, 1
f910: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
f920: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
f930: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b  esultRow, 1, 3);
f940: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20  .  }.  break;.. 
f950: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
f960: 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70  A wal_autocheckp
f970: 6f 69 6e 74 0a 20 20 2a 2a 20 20 20 50 52 41 47  oint.  **   PRAG
f980: 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b  MA wal_autocheck
f990: 70 6f 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20  point = N.  **. 
f9a0: 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 61 20   ** Configure a 
f9b0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
f9c0: 69 6f 6e 20 74 6f 20 61 75 74 6f 6d 61 74 69 63  ion to automatic
f9d0: 61 6c 6c 79 20 63 68 65 63 6b 70 6f 69 6e 74 20  ally checkpoint 
f9e0: 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  a database.  ** 
f9f0: 61 66 74 65 72 20 61 63 63 75 6d 75 6c 61 74 69  after accumulati
fa00: 6e 67 20 4e 20 66 72 61 6d 65 73 20 69 6e 20 74  ng N frames in t
fa10: 68 65 20 6c 6f 67 2e 20 4f 72 20 71 75 65 72 79  he log. Or query
fa20: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
fa30: 20 76 61 6c 75 65 0a 20 20 2a 2a 20 6f 66 20 4e   value.  ** of N
fa40: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
fa50: 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43 48  agTyp_WAL_AUTOCH
fa60: 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20  ECKPOINT: {.    
fa70: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
fa80: 20 20 20 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f      sqlite3_wal_
fa90: 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 28 64  autocheckpoint(d
faa0: 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  b, sqlite3Atoi(z
fab0: 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20  Right));.    }. 
fac0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
fad0: 6e 74 28 76 2c 20 22 77 61 6c 5f 61 75 74 6f 63  nt(v, "wal_autoc
fae0: 68 65 63 6b 70 6f 69 6e 74 22 2c 20 0a 20 20 20  heckpoint", .   
faf0: 20 20 20 20 64 62 2d 3e 78 57 61 6c 43 61 6c 6c      db->xWalCall
fb00: 62 61 63 6b 3d 3d 73 71 6c 69 74 65 33 57 61 6c  back==sqlite3Wal
fb10: 44 65 66 61 75 6c 74 48 6f 6f 6b 20 3f 20 0a 20  DefaultHook ? . 
fb20: 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
fb30: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 64 62 2d 3e  _PTR_TO_INT(db->
fb40: 70 57 61 6c 41 72 67 29 20 3a 20 30 29 3b 0a 20  pWalArg) : 0);. 
fb50: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
fb60: 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50  if..  /*.  **  P
fb70: 52 41 47 4d 41 20 73 68 72 69 6e 6b 5f 6d 65 6d  RAGMA shrink_mem
fb80: 6f 72 79 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d  ory.  **.  ** IM
fb90: 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
fba0: 20 52 2d 32 33 34 34 35 2d 34 36 31 30 39 20 54   R-23445-46109 T
fbb0: 68 69 73 20 70 72 61 67 6d 61 20 63 61 75 73 65  his pragma cause
fbc0: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20  s the database. 
fbd0: 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f   ** connection o
fbe0: 6e 20 77 68 69 63 68 20 69 74 20 69 73 20 69 6e  n which it is in
fbf0: 76 6f 6b 65 64 20 74 6f 20 66 72 65 65 20 75 70  voked to free up
fc00: 20 61 73 20 6d 75 63 68 20 6d 65 6d 6f 72 79 20   as much memory 
fc10: 61 73 20 69 74 0a 20 20 2a 2a 20 63 61 6e 2c 20  as it.  ** can, 
fc20: 62 79 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74  by calling sqlit
fc30: 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65  e3_db_release_me
fc40: 6d 6f 72 79 28 29 2e 0a 20 20 2a 2f 0a 20 20 63  mory()..  */.  c
fc50: 61 73 65 20 50 72 61 67 54 79 70 5f 53 48 52 49  ase PragTyp_SHRI
fc60: 4e 4b 5f 4d 45 4d 4f 52 59 3a 20 7b 0a 20 20 20  NK_MEMORY: {.   
fc70: 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65   sqlite3_db_rele
fc80: 61 73 65 5f 6d 65 6d 6f 72 79 28 64 62 29 3b 0a  ase_memory(db);.
fc90: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
fca0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
fcb0: 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 0a  MA busy_timeout.
fcc0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75    **   PRAGMA bu
fcd0: 73 79 5f 74 69 6d 65 6f 75 74 20 3d 20 4e 0a 20  sy_timeout = N. 
fce0: 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71   **.  ** Call sq
fcf0: 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f  lite3_busy_timeo
fd00: 75 74 28 64 62 2c 20 4e 29 2e 20 20 52 65 74 75  ut(db, N).  Retu
fd10: 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  rn the current t
fd20: 69 6d 65 6f 75 74 20 76 61 6c 75 65 0a 20 20 2a  imeout value.  *
fd30: 2a 20 69 66 20 6f 6e 65 20 69 73 20 73 65 74 2e  * if one is set.
fd40: 20 20 49 66 20 6e 6f 20 62 75 73 79 20 68 61 6e    If no busy han
fd50: 64 6c 65 72 20 6f 72 20 61 20 64 69 66 66 65 72  dler or a differ
fd60: 65 6e 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72  ent busy handler
fd70: 20 69 73 20 73 65 74 0a 20 20 2a 2a 20 74 68 65   is set.  ** the
fd80: 6e 20 30 20 69 73 20 72 65 74 75 72 6e 65 64 2e  n 0 is returned.
fd90: 20 20 53 65 74 74 69 6e 67 20 74 68 65 20 62 75    Setting the bu
fda0: 73 79 5f 74 69 6d 65 6f 75 74 20 74 6f 20 30 20  sy_timeout to 0 
fdb0: 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20 2a 2a  or negative.  **
fdc0: 20 64 69 73 61 62 6c 65 73 20 74 68 65 20 74 69   disables the ti
fdd0: 6d 65 6f 75 74 2e 0a 20 20 2a 2f 0a 20 20 2f 2a  meout..  */.  /*
fde0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 42 55 53  case PragTyp_BUS
fdf0: 59 5f 54 49 4d 45 4f 55 54 2a 2f 20 64 65 66 61  Y_TIMEOUT*/ defa
fe00: 75 6c 74 3a 20 7b 0a 20 20 20 20 61 73 73 65 72  ult: {.    asser
fe10: 74 28 20 70 50 72 61 67 6d 61 2d 3e 65 50 72 61  t( pPragma->ePra
fe20: 67 54 79 70 3d 3d 50 72 61 67 54 79 70 5f 42 55  gTyp==PragTyp_BU
fe30: 53 59 5f 54 49 4d 45 4f 55 54 20 29 3b 0a 20 20  SY_TIMEOUT );.  
fe40: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
fe50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75        sqlite3_bu
fe60: 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 73  sy_timeout(db, s
fe70: 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68  qlite3Atoi(zRigh
fe80: 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  t));.    }.    r
fe90: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76  eturnSingleInt(v
fea0: 2c 20 22 74 69 6d 65 6f 75 74 22 2c 20 20 64 62  , "timeout",  db
feb0: 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74 29 3b 0a  ->busyTimeout);.
fec0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
fed0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
fee0: 4d 41 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  MA soft_heap_lim
fef0: 69 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  it.  **   PRAGMA
ff00: 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74   soft_heap_limit
ff10: 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49   = N.  **.  ** I
ff20: 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
ff30: 3a 20 52 2d 32 36 33 34 33 2d 34 35 39 33 30 20  : R-26343-45930 
ff40: 54 68 69 73 20 70 72 61 67 6d 61 20 69 6e 76 6f  This pragma invo
ff50: 6b 65 73 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c  kes the.  ** sql
ff60: 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c  ite3_soft_heap_l
ff70: 69 6d 69 74 36 34 28 29 20 69 6e 74 65 72 66 61  imit64() interfa
ff80: 63 65 20 77 69 74 68 20 74 68 65 20 61 72 67 75  ce with the argu
ff90: 6d 65 6e 74 20 4e 2c 20 69 66 20 4e 20 69 73 0a  ment N, if N is.
ffa0: 20 20 2a 2a 20 73 70 65 63 69 66 69 65 64 20 61    ** specified a
ffb0: 6e 64 20 69 73 20 61 20 6e 6f 6e 2d 6e 65 67 61  nd is a non-nega
ffc0: 74 69 76 65 20 69 6e 74 65 67 65 72 2e 0a 20 20  tive integer..  
ffd0: 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f  ** IMPLEMENTATIO
ffe0: 4e 2d 4f 46 3a 20 52 2d 36 34 34 35 31 2d 30 37  N-OF: R-64451-07
fff0: 31 36 33 20 54 68 65 20 73 6f 66 74 5f 68 65 61  163 The soft_hea
10000 70 5f 6c 69 6d 69 74 20 70 72 61 67 6d 61 20 61  p_limit pragma a
10010 6c 77 61 79 73 0a 20 20 2a 2a 20 72 65 74 75 72  lways.  ** retur
10020 6e 73 20 74 68 65 20 73 61 6d 65 20 69 6e 74 65  ns the same inte
10030 67 65 72 20 74 68 61 74 20 77 6f 75 6c 64 20 62  ger that would b
10040 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  e returned by th
10050 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 73  e.  ** sqlite3_s
10060 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34  oft_heap_limit64
10070 28 2d 31 29 20 43 2d 6c 61 6e 67 75 61 67 65 20  (-1) C-language 
10080 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20  function..  */. 
10090 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 4f   case PragTyp_SO
100a0 46 54 5f 48 45 41 50 5f 4c 49 4d 49 54 3a 20 7b  FT_HEAP_LIMIT: {
100b0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  .    sqlite3_int
100c0 36 34 20 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52  64 N;.    if( zR
100d0 69 67 68 74 20 26 26 20 73 71 6c 69 74 65 33 44  ight && sqlite3D
100e0 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69  ecOrHexToI64(zRi
100f0 67 68 74 2c 20 26 4e 29 3d 3d 53 51 4c 49 54 45  ght, &N)==SQLITE
10100 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  _OK ){.      sql
10110 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c  ite3_soft_heap_l
10120 69 6d 69 74 36 34 28 4e 29 3b 0a 20 20 20 20 7d  imit64(N);.    }
10130 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
10140 65 49 6e 74 28 76 2c 20 22 73 6f 66 74 5f 68 65  eInt(v, "soft_he
10150 61 70 5f 6c 69 6d 69 74 22 2c 20 20 73 71 6c 69  ap_limit",  sqli
10160 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69  te3_soft_heap_li
10170 6d 69 74 36 34 28 2d 31 29 29 3b 0a 20 20 20 20  mit64(-1));.    
10180 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
10190 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74  .  **   PRAGMA t
101a0 68 72 65 61 64 73 0a 20 20 2a 2a 20 20 20 50 52  hreads.  **   PR
101b0 41 47 4d 41 20 74 68 72 65 61 64 73 20 3d 20 4e  AGMA threads = N
101c0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69  .  **.  ** Confi
101d0 67 75 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  gure the maximum
101e0 20 6e 75 6d 62 65 72 20 6f 66 20 77 6f 72 6b 65   number of worke
101f0 72 20 74 68 72 65 61 64 73 2e 20 20 52 65 74 75  r threads.  Retu
10200 72 6e 20 74 68 65 20 6e 65 77 0a 20 20 2a 2a 20  rn the new.  ** 
10210 6d 61 78 69 6d 75 6d 2c 20 77 68 69 63 68 20 6d  maximum, which m
10220 69 67 68 74 20 62 65 20 6c 65 73 73 20 74 68 61  ight be less tha
10230 6e 20 72 65 71 75 65 73 74 65 64 2e 0a 20 20 2a  n requested..  *
10240 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
10250 5f 54 48 52 45 41 44 53 3a 20 7b 0a 20 20 20 20  _THREADS: {.    
10260 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b  sqlite3_int64 N;
10270 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 0a  .    if( zRight.
10280 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 44       && sqlite3D
10290 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69  ecOrHexToI64(zRi
102a0 67 68 74 2c 20 26 4e 29 3d 3d 53 51 4c 49 54 45  ght, &N)==SQLITE
102b0 5f 4f 4b 0a 20 20 20 20 20 26 26 20 4e 3e 3d 30  _OK.     && N>=0
102c0 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 73 71  .    ){.      sq
102d0 6c 69 74 65 33 5f 6c 69 6d 69 74 28 64 62 2c 20  lite3_limit(db, 
102e0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52  SQLITE_LIMIT_WOR
102f0 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 28 69 6e  KER_THREADS, (in
10300 74 29 28 4e 26 30 78 37 66 66 66 66 66 66 66 29  t)(N&0x7fffffff)
10310 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  );.    }.    ret
10320 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20  urnSingleInt(v, 
10330 22 74 68 72 65 61 64 73 22 2c 0a 20 20 20 20 20  "threads",.     
10340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
10350 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 64 62 2c  qlite3_limit(db,
10360 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f   SQLITE_LIMIT_WO
10370 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 2d 31  RKER_THREADS, -1
10380 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ));.    break;. 
10390 20 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28   }..#if defined(
103a0 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
103b0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
103c0 54 45 53 54 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20  TEST).  /*.  ** 
103d0 52 65 70 6f 72 74 20 74 68 65 20 63 75 72 72 65  Report the curre
103e0 6e 74 20 73 74 61 74 65 20 6f 66 20 66 69 6c 65  nt state of file
103f0 20 6c 6f 67 73 20 66 6f 72 20 61 6c 6c 20 64 61   logs for all da
10400 74 61 62 61 73 65 73 0a 20 20 2a 2f 0a 20 20 63  tabases.  */.  c
10410 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b  ase PragTyp_LOCK
10420 5f 53 54 41 54 55 53 3a 20 7b 0a 20 20 20 20 73  _STATUS: {.    s
10430 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
10440 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f 63 6b 4e 61   *const azLockNa
10450 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 22  me[] = {.      "
10460 75 6e 6c 6f 63 6b 65 64 22 2c 20 22 73 68 61 72  unlocked", "shar
10470 65 64 22 2c 20 22 72 65 73 65 72 76 65 64 22 2c  ed", "reserved",
10480 20 22 70 65 6e 64 69 6e 67 22 2c 20 22 65 78 63   "pending", "exc
10490 6c 75 73 69 76 65 22 0a 20 20 20 20 7d 3b 0a 20  lusive".    };. 
104a0 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
104b0 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20  char *azCol[] = 
104c0 7b 20 22 64 61 74 61 62 61 73 65 22 2c 20 22 73  { "database", "s
104d0 74 61 74 75 73 22 20 7d 3b 0a 20 20 20 20 69 6e  tatus" };.    in
104e0 74 20 69 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43  t i;.    setAllC
104f0 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 32 2c  olumnNames(v, 2,
10500 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28   azCol); assert(
10510 20 32 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a   2==ArraySize(az
10520 43 6f 6c 29 20 29 3b 0a 20 20 20 20 70 50 61 72  Col) );.    pPar
10530 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20  se->nMem = 2;.  
10540 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d    for(i=0; i<db-
10550 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nDb; i++){.    
10560 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20    Btree *pBt;.  
10570 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
10580 7a 53 74 61 74 65 20 3d 20 22 75 6e 6b 6e 6f 77  zState = "unknow
10590 6e 22 3b 0a 20 20 20 20 20 20 69 6e 74 20 6a 3b  n";.      int j;
105a0 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61  .      if( db->a
105b0 44 62 5b 69 5d 2e 7a 4e 61 6d 65 3d 3d 30 20 29  Db[i].zName==0 )
105c0 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
105d0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69   pBt = db->aDb[i
105e0 5d 2e 70 42 74 3b 0a 20 20 20 20 20 20 69 66 28  ].pBt;.      if(
105f0 20 70 42 74 3d 3d 30 20 7c 7c 20 73 71 6c 69 74   pBt==0 || sqlit
10600 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74  e3BtreePager(pBt
10610 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
10620 7a 53 74 61 74 65 20 3d 20 22 63 6c 6f 73 65 64  zState = "closed
10630 22 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  ";.      }else i
10640 66 28 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f  f( sqlite3_file_
10650 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 69 20 3f 20  control(db, i ? 
10660 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
10670 20 3a 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20   : 0, .         
10680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10690 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
106a0 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54 41  TE_FCNTL_LOCKSTA
106b0 54 45 2c 20 26 6a 29 3d 3d 53 51 4c 49 54 45 5f  TE, &j)==SQLITE_
106c0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 7a  OK ){.         z
106d0 53 74 61 74 65 20 3d 20 61 7a 4c 6f 63 6b 4e 61  State = azLockNa
106e0 6d 65 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 0a 20  me[j];.      }. 
106f0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10700 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20  MultiLoad(v, 1, 
10710 22 73 73 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d  "ss", db->aDb[i]
10720 2e 7a 4e 61 6d 65 2c 20 7a 53 74 61 74 65 29 3b  .zName, zState);
10730 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
10740 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
10750 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b  esultRow, 1, 2);
10760 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
10770 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ;.  }.#endif..#i
10780 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f  fdef SQLITE_HAS_
10790 43 4f 44 45 43 0a 20 20 63 61 73 65 20 50 72 61  CODEC.  case Pra
107a0 67 54 79 70 5f 4b 45 59 3a 20 7b 0a 20 20 20 20  gTyp_KEY: {.    
107b0 69 66 28 20 7a 52 69 67 68 74 20 29 20 73 71 6c  if( zRight ) sql
107c0 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20  ite3_key_v2(db, 
107d0 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c  zDb, zRight, sql
107e0 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69  ite3Strlen30(zRi
107f0 67 68 74 29 29 3b 0a 20 20 20 20 62 72 65 61 6b  ght));.    break
10800 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20 50 72 61  ;.  }.  case Pra
10810 67 54 79 70 5f 52 45 4b 45 59 3a 20 7b 0a 20 20  gTyp_REKEY: {.  
10820 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 20 73    if( zRight ) s
10830 71 6c 69 74 65 33 5f 72 65 6b 65 79 5f 76 32 28  qlite3_rekey_v2(
10840 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c  db, zDb, zRight,
10850 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
10860 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62  (zRight));.    b
10870 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65  reak;.  }.  case
10880 20 50 72 61 67 54 79 70 5f 48 45 58 4b 45 59 3a   PragTyp_HEXKEY:
10890 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
108a0 74 20 29 7b 0a 20 20 20 20 20 20 75 38 20 69 42  t ){.      u8 iB
108b0 79 74 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 69  yte;.      int i
108c0 3b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 4b 65  ;.      char zKe
108d0 79 5b 34 30 5d 3b 0a 20 20 20 20 20 20 66 6f 72  y[40];.      for
108e0 28 69 3d 30 2c 20 69 42 79 74 65 3d 30 3b 20 69  (i=0, iByte=0; i
108f0 3c 73 69 7a 65 6f 66 28 7a 4b 65 79 29 2a 32 20  <sizeof(zKey)*2 
10900 26 26 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  && sqlite3Isxdig
10910 69 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b 20 69  it(zRight[i]); i
10920 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 42 79  ++){.        iBy
10930 74 65 20 3d 20 28 69 42 79 74 65 3c 3c 34 29 20  te = (iByte<<4) 
10940 2b 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e  + sqlite3HexToIn
10950 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b 0a 20 20  t(zRight[i]);.  
10960 20 20 20 20 20 20 69 66 28 20 28 69 26 31 29 21        if( (i&1)!
10970 3d 30 20 29 20 7a 4b 65 79 5b 69 2f 32 5d 20 3d  =0 ) zKey[i/2] =
10980 20 69 42 79 74 65 3b 0a 20 20 20 20 20 20 7d 0a   iByte;.      }.
10990 20 20 20 20 20 20 69 66 28 20 28 7a 4c 65 66 74        if( (zLeft
109a0 5b 33 5d 20 26 20 30 78 66 29 3d 3d 30 78 62 20  [3] & 0xf)==0xb 
109b0 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
109c0 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44  e3_key_v2(db, zD
109d0 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20  b, zKey, i/2);. 
109e0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
109f0 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 6b 65      sqlite3_reke
10a00 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b  y_v2(db, zDb, zK
10a10 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20 20  ey, i/2);.      
10a20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  }.    }.    brea
10a30 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69  k;.  }.#endif.#i
10a40 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
10a50 5f 48 41 53 5f 43 4f 44 45 43 29 20 7c 7c 20 64  _HAS_CODEC) || d
10a60 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
10a70 41 42 4c 45 5f 43 45 52 4f 44 29 0a 20 20 63 61  ABLE_CEROD).  ca
10a80 73 65 20 50 72 61 67 54 79 70 5f 41 43 54 49 56  se PragTyp_ACTIV
10a90 41 54 45 5f 45 58 54 45 4e 53 49 4f 4e 53 3a 20  ATE_EXTENSIONS: 
10aa0 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 23 69  if( zRight ){.#i
10ab0 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f  fdef SQLITE_HAS_
10ac0 43 4f 44 45 43 0a 20 20 20 20 69 66 28 20 73 71  CODEC.    if( sq
10ad0 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52  lite3StrNICmp(zR
10ae0 69 67 68 74 2c 20 22 73 65 65 2d 22 2c 20 34 29  ight, "see-", 4)
10af0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
10b00 69 74 65 33 5f 61 63 74 69 76 61 74 65 5f 73 65  ite3_activate_se
10b10 65 28 26 7a 52 69 67 68 74 5b 34 5d 29 3b 0a 20  e(&zRight[4]);. 
10b20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64     }.#endif.#ifd
10b30 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
10b40 5f 43 45 52 4f 44 0a 20 20 20 20 69 66 28 20 73  _CEROD.    if( s
10b50 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a  qlite3StrNICmp(z
10b60 52 69 67 68 74 2c 20 22 63 65 72 6f 64 2d 22 2c  Right, "cerod-",
10b70 20 36 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20   6)==0 ){.      
10b80 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65  sqlite3_activate
10b90 5f 63 65 72 6f 64 28 26 7a 52 69 67 68 74 5b 36  _cerod(&zRight[6
10ba0 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ]);.    }.#endif
10bb0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
10bc0 6e 64 69 66 0a 0a 20 20 7d 20 2f 2a 20 45 6e 64  ndif..  } /* End
10bd0 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 73   of the PRAGMA s
10be0 77 69 74 63 68 20 2a 2f 0a 0a 70 72 61 67 6d 61  witch */..pragma
10bf0 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74 65 33 44  _out:.  sqlite3D
10c00 62 46 72 65 65 28 64 62 2c 20 7a 4c 65 66 74 29  bFree(db, zLeft)
10c10 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
10c20 65 28 64 62 2c 20 7a 52 69 67 68 74 29 3b 0a 7d  e(db, zRight);.}
10c30 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ..#endif /* SQLI
10c40 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a  TE_OMIT_PRAGMA *
10c50 2f 0a                                            /.