/ Hex Artifact Content
Login

Artifact c7061870c235702a513ce4152fe978faf3f282eb:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 23 69  sqliteInt.h"..#i
01d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
01e0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
01f0: 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
0200: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
0210: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
0220: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
0230: 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
0240: 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
0250: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
0260: 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
0270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
02d0: 65 20 22 70 72 61 67 6d 61 2e 68 22 20 69 6e 63  e "pragma.h" inc
02e0: 6c 75 64 65 20 66 69 6c 65 20 69 73 20 61 6e 20  lude file is an 
02f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65  automatically ge
0300: 6e 65 72 61 74 65 64 20 66 69 6c 65 20 74 68 61  nerated file tha
0310: 74 0a 2a 2a 20 74 68 61 74 20 69 6e 63 6c 75 64  t.** that includ
0320: 65 73 20 74 68 65 20 50 72 61 67 54 79 70 65 5f  es the PragType_
0330: 58 58 58 58 20 6d 61 63 72 6f 20 64 65 66 69 6e  XXXX macro defin
0340: 69 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 61  itions and the a
0350: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 0a 2a 2a 20  PragmaName[].** 
0360: 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 65 6e  object.  This en
0370: 73 75 72 65 73 20 74 68 61 74 20 74 68 65 20 61  sures that the a
0380: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 20 74 61 62  PragmaName[] tab
0390: 6c 65 20 69 73 20 61 72 72 61 6e 67 65 64 20 69  le is arranged i
03a0: 6e 0a 2a 2a 20 6c 65 78 69 63 6f 67 72 61 70 68  n.** lexicograph
03b0: 69 63 61 6c 20 6f 72 64 65 72 20 74 6f 20 66 61  ical order to fa
03c0: 63 69 6c 69 74 79 20 61 20 62 69 6e 61 72 79 20  cility a binary 
03d0: 73 65 61 72 63 68 20 6f 66 20 74 68 65 20 70 72  search of the pr
03e0: 61 67 6d 61 20 6e 61 6d 65 2e 0a 2a 2a 20 44 6f  agma name..** Do
03f0: 20 6e 6f 74 20 65 64 69 74 20 70 72 61 67 6d 61   not edit pragma
0400: 2e 68 20 64 69 72 65 63 74 6c 79 2e 20 20 45 64  .h directly.  Ed
0410: 69 74 20 61 6e 64 20 72 65 72 75 6e 20 74 68 65  it and rerun the
0420: 20 73 63 72 69 70 74 20 69 6e 20 61 74 20 0a 2a   script in at .*
0430: 2a 20 2e 2e 2f 74 6f 6f 6c 2f 6d 6b 70 72 61 67  * ../tool/mkprag
0440: 6d 61 74 61 62 2e 74 63 6c 2e 20 2a 2f 0a 23 69  matab.tcl. */.#i
0450: 6e 63 6c 75 64 65 20 22 70 72 61 67 6d 61 2e 68  nclude "pragma.h
0460: 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  "../*.** Interpr
0470: 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  et the given str
0480: 69 6e 67 20 61 73 20 61 20 73 61 66 65 74 79 20  ing as a safety 
0490: 6c 65 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30  level.  Return 0
04a0: 20 66 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66   for OFF,.** 1 f
04b0: 6f 72 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 2c  or ON or NORMAL,
04c0: 20 32 20 66 6f 72 20 46 55 4c 4c 2c 20 61 6e 64   2 for FULL, and
04d0: 20 33 20 66 6f 72 20 45 58 54 52 41 2e 20 20 52   3 for EXTRA.  R
04e0: 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e 20 65  eturn 1 for an e
04f0: 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e 72 65  mpty or .** unre
0500: 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e 67 20  cognized string 
0510: 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65 20 46  argument.  The F
0520: 55 4c 4c 20 61 6e 64 20 45 58 54 52 41 20 6f 70  ULL and EXTRA op
0530: 74 69 6f 6e 20 69 73 20 64 69 73 61 6c 6c 6f 77  tion is disallow
0540: 65 64 0a 2a 2a 20 69 66 20 74 68 65 20 6f 6d 69  ed.** if the omi
0550: 74 46 75 6c 6c 20 70 61 72 61 6d 65 74 65 72 20  tFull parameter 
0560: 69 74 20 31 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  it 1..**.** Note
0570: 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 73   that the values
0580: 20 72 65 74 75 72 6e 65 64 20 61 72 65 20 6f 6e   returned are on
0590: 65 20 6c 65 73 73 20 74 68 61 74 20 74 68 65 20  e less that the 
05a0: 76 61 6c 75 65 73 20 74 68 61 74 0a 2a 2a 20 73  values that.** s
05b0: 68 6f 75 6c 64 20 62 65 20 70 61 73 73 65 64 20  hould be passed 
05c0: 69 6e 74 6f 20 73 71 6c 69 74 65 33 42 74 72 65  into sqlite3Btre
05d0: 65 53 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28  eSetSafetyLevel(
05e0: 29 2e 20 20 54 68 65 20 69 73 20 64 6f 6e 65 0a  ).  The is done.
05f0: 2a 2a 20 74 6f 20 73 75 70 70 6f 72 74 20 6c 65  ** to support le
0600: 67 61 63 79 20 53 51 4c 20 63 6f 64 65 2e 20 20  gacy SQL code.  
0610: 54 68 65 20 73 61 66 65 74 79 20 6c 65 76 65 6c  The safety level
0620: 20 75 73 65 64 20 74 6f 20 62 65 20 62 6f 6f 6c   used to be bool
0630: 65 61 6e 0a 2a 2a 20 61 6e 64 20 6f 6c 64 65 72  ean.** and older
0640: 20 73 63 72 69 70 74 73 20 6d 61 79 20 68 61 76   scripts may hav
0650: 65 20 75 73 65 64 20 6e 75 6d 62 65 72 73 20 30  e used numbers 0
0660: 20 66 6f 72 20 4f 46 46 20 61 6e 64 20 31 20 66   for OFF and 1 f
0670: 6f 72 20 4f 4e 2e 0a 2a 2f 0a 73 74 61 74 69 63  or ON..*/.static
0680: 20 75 38 20 67 65 74 53 61 66 65 74 79 4c 65 76   u8 getSafetyLev
0690: 65 6c 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  el(const char *z
06a0: 2c 20 69 6e 74 20 6f 6d 69 74 46 75 6c 6c 2c 20  , int omitFull, 
06b0: 75 38 20 64 66 6c 74 29 7b 0a 20 20 20 20 20 20  u8 dflt){.      
06c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
06d0: 20 20 20 20 20 20 20 2f 2a 20 31 32 33 34 35 36         /* 123456
06e0: 37 38 39 20 31 32 33 34 35 36 37 38 39 20 31 32  789 123456789 12
06f0: 33 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f  3 */.  static co
0700: 6e 73 74 20 63 68 61 72 20 7a 54 65 78 74 5b 5d  nst char zText[]
0710: 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65 79 65 73   = "onoffalseyes
0720: 74 72 75 65 78 74 72 61 66 75 6c 6c 22 3b 0a 20  truextrafull";. 
0730: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38   static const u8
0740: 20 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c   iOffset[] = {0,
0750: 20 31 2c 20 32 2c 20 20 34 2c 20 20 20 20 39 2c   1, 2,  4,    9,
0760: 20 20 31 32 2c 20 20 31 35 2c 20 20 20 32 30 7d    12,  15,   20}
0770: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
0780: 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d 20 3d 20   u8 iLength[] = 
0790: 7b 32 2c 20 32 2c 20 33 2c 20 20 35 2c 20 20 20  {2, 2, 3,  5,   
07a0: 20 33 2c 20 20 20 34 2c 20 20 20 35 2c 20 20 20   3,   4,   5,   
07b0: 20 34 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f   4};.  static co
07c0: 6e 73 74 20 75 38 20 69 56 61 6c 75 65 5b 5d 20  nst u8 iValue[] 
07d0: 3d 20 20 7b 31 2c 20 30 2c 20 30 2c 20 20 30 2c  =  {1, 0, 0,  0,
07e0: 20 20 20 20 31 2c 20 20 20 31 2c 20 20 20 33 2c      1,   1,   3,
07f0: 20 20 20 20 32 7d 3b 0a 20 20 20 20 20 20 20 20      2};.        
0800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0810: 20 20 20 20 2f 2a 20 6f 6e 20 6e 6f 20 6f 66 66      /* on no off
0820: 20 66 61 6c 73 65 20 79 65 73 20 74 72 75 65 20   false yes true 
0830: 65 78 74 72 61 20 66 75 6c 6c 20 2a 2f 0a 20 20  extra full */.  
0840: 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28 20  int i, n;.  if( 
0850: 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a  sqlite3Isdigit(*
0860: 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  z) ){.    return
0870: 20 28 75 38 29 73 71 6c 69 74 65 33 41 74 6f 69   (u8)sqlite3Atoi
0880: 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 73  (z);.  }.  n = s
0890: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
08a0: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
08b0: 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e 67 74  ArraySize(iLengt
08c0: 68 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  h); i++){.    if
08d0: 28 20 69 4c 65 6e 67 74 68 5b 69 5d 3d 3d 6e 20  ( iLength[i]==n 
08e0: 26 26 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  && sqlite3StrNIC
08f0: 6d 70 28 26 7a 54 65 78 74 5b 69 4f 66 66 73 65  mp(&zText[iOffse
0900: 74 5b 69 5d 5d 2c 7a 2c 6e 29 3d 3d 30 0a 20 20  t[i]],z,n)==0.  
0910: 20 20 20 26 26 20 28 21 6f 6d 69 74 46 75 6c 6c     && (!omitFull
0920: 20 7c 7c 20 69 56 61 6c 75 65 5b 69 5d 3c 3d 31   || iValue[i]<=1
0930: 29 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 72  ).    ){.      r
0940: 65 74 75 72 6e 20 69 56 61 6c 75 65 5b 69 5d 3b  eturn iValue[i];
0950: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
0960: 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a 2f 2a 0a  urn dflt;.}../*.
0970: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
0980: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
0990: 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
09a0: 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65 33 47  ..*/.u8 sqlite3G
09b0: 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20  etBoolean(const 
09c0: 63 68 61 72 20 2a 7a 2c 20 75 38 20 64 66 6c 74  char *z, u8 dflt
09d0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 67 65 74 53  ){.  return getS
09e0: 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c 31 2c 64  afetyLevel(z,1,d
09f0: 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 20 54  flt)!=0;.}../* T
0a00: 68 65 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  he sqlite3GetBoo
0a10: 6c 65 61 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  lean() function 
0a20: 69 73 20 75 73 65 64 20 62 79 20 6f 74 68 65 72  is used by other
0a30: 20 6d 6f 64 75 6c 65 73 20 62 75 74 20 74 68 65   modules but the
0a40: 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  .** remainder of
0a50: 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 73 70   this file is sp
0a60: 65 63 69 66 69 63 20 74 6f 20 50 52 41 47 4d 41  ecific to PRAGMA
0a70: 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 20 53 6f   processing.  So
0a80: 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20 72 65 73   omit.** the res
0a90: 74 20 6f 66 20 74 68 65 20 66 69 6c 65 20 69 66  t of the file if
0aa0: 20 50 52 41 47 4d 41 73 20 61 72 65 20 6f 6d 69   PRAGMAs are omi
0ab0: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
0ac0: 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ild..*/.#if !def
0ad0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
0ae0: 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a 2a 2a 20  _PRAGMA)../*.** 
0af0: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69  Interpret the gi
0b00: 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20  ven string as a 
0b10: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 76 61 6c  locking mode val
0b20: 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ue..*/.static in
0b30: 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65  t getLockingMode
0b40: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
0b50: 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20 20 20 20  .  if( z ){.    
0b60: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
0b70: 72 49 43 6d 70 28 7a 2c 20 22 65 78 63 6c 75 73  rICmp(z, "exclus
0b80: 69 76 65 22 29 20 29 20 72 65 74 75 72 6e 20 50  ive") ) return P
0b90: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
0ba0: 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20 20 20 20  _EXCLUSIVE;.    
0bb0: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
0bc0: 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72 6d 61 6c  rICmp(z, "normal
0bd0: 22 29 20 29 20 72 65 74 75 72 6e 20 50 41 47 45  ") ) return PAGE
0be0: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f  R_LOCKINGMODE_NO
0bf0: 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72 65 74 75  RMAL;.  }.  retu
0c00: 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  rn PAGER_LOCKING
0c10: 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d 0a 0a 23  MODE_QUERY;.}..#
0c20: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
0c30: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 2f 2a  IT_AUTOVACUUM./*
0c40: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
0c50: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
0c60: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
0c70: 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a 2a 0a   mode value..**.
0c80: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
0c90: 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f 6e 65 22   strings, "none"
0ca0: 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20 22 69 6e  , "full" and "in
0cb0: 63 72 65 6d 65 6e 74 61 6c 22 20 61 72 65 20 0a  cremental" are .
0cc0: 2a 2a 20 61 63 63 65 70 74 61 62 6c 65 2c 20 61  ** acceptable, a
0cd0: 73 20 61 72 65 20 74 68 65 69 72 20 6e 75 6d 65  s are their nume
0ce0: 72 69 63 20 65 71 75 69 76 61 6c 65 6e 74 73 3a  ric equivalents:
0cf0: 20 30 2c 20 31 20 61 6e 64 20 32 20 72 65 73 70   0, 1 and 2 resp
0d00: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 73 74 61  ectively..*/.sta
0d10: 74 69 63 20 69 6e 74 20 67 65 74 41 75 74 6f 56  tic int getAutoV
0d20: 61 63 75 75 6d 28 63 6f 6e 73 74 20 63 68 61 72  acuum(const char
0d30: 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20   *z){.  int i;. 
0d40: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
0d50: 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 6e 65 22  trICmp(z, "none"
0d60: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
0d70: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e 4f 4e 45  _AUTOVACUUM_NONE
0d80: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
0d90: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 66 75  e3StrICmp(z, "fu
0da0: 6c 6c 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ll") ) return BT
0db0: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 46  REE_AUTOVACUUM_F
0dc0: 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ULL;.  if( 0==sq
0dd0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
0de0: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 29 20 29  "incremental") )
0df0: 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41 55   return BTREE_AU
0e00: 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52 3b 0a 20  TOVACUUM_INCR;. 
0e10: 20 69 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69   i = sqlite3Atoi
0e20: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 75  (z);.  return (u
0e30: 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d 32 29 3f  8)((i>=0&&i<=2)?
0e40: 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  i:0);.}.#endif /
0e50: 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  * ifndef SQLITE_
0e60: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 20  OMIT_AUTOVACUUM 
0e70: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
0e80: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
0e90: 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  AGMAS./*.** Inte
0ea0: 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e 20  rpret the given 
0eb0: 73 74 72 69 6e 67 20 61 73 20 61 20 74 65 6d 70  string as a temp
0ec0: 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e 20 52 65   db location. Re
0ed0: 74 75 72 6e 20 31 20 66 6f 72 20 66 69 6c 65 0a  turn 1 for file.
0ee0: 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d 70 6f 72  ** backed tempor
0ef0: 61 72 79 20 64 61 74 61 62 61 73 65 73 2c 20 32  ary databases, 2
0f00: 20 66 6f 72 20 74 68 65 20 52 65 64 2d 42 6c 61   for the Red-Bla
0f10: 63 6b 20 74 72 65 65 20 69 6e 20 6d 65 6d 6f 72  ck tree in memor
0f20: 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 61 6e  y database.** an
0f30: 64 20 30 20 74 6f 20 75 73 65 20 74 68 65 20 63  d 0 to use the c
0f40: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66 61  ompile-time defa
0f50: 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ult..*/.static i
0f60: 6e 74 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28  nt getTempStore(
0f70: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a  const char *z){.
0f80: 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27 30 27 20    if( z[0]>='0' 
0f90: 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20 29 7b 0a  && z[0]<='2' ){.
0fa0: 20 20 20 20 72 65 74 75 72 6e 20 7a 5b 30 5d 20      return z[0] 
0fb0: 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69  - '0';.  }else i
0fc0: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
0fd0: 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d 3d 30 20  p(z, "file")==0 
0fe0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b  ){.    return 1;
0ff0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c  .  }else if( sql
1000: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22  ite3StrICmp(z, "
1010: 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29 7b 0a 20  memory")==0 ){. 
1020: 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d     return 2;.  }
1030: 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e  else{.    return
1040: 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66   0;.  }.}.#endif
1050: 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45 52   /* SQLITE_PAGER
1060: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
1070: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1080: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
1090: 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74 65 20  *.** Invalidate 
10a0: 74 65 6d 70 20 73 74 6f 72 61 67 65 2c 20 65 69  temp storage, ei
10b0: 74 68 65 72 20 77 68 65 6e 20 74 68 65 20 74 65  ther when the te
10c0: 6d 70 20 73 74 6f 72 61 67 65 20 69 73 20 63 68  mp storage is ch
10d0: 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d 20 64 65  anged.** from de
10e0: 66 61 75 6c 74 2c 20 6f 72 20 77 68 65 6e 20 27  fault, or when '
10f0: 66 69 6c 65 27 20 61 6e 64 20 74 68 65 20 74 65  file' and the te
1100: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
1110: 72 79 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ry has changed.*
1120: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 69 6e 76  /.static int inv
1130: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
1140: 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ge(Parse *pParse
1150: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
1160: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20   = pParse->db;. 
1170: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 31 5d 2e   if( db->aDb[1].
1180: 70 42 74 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  pBt!=0 ){.    if
1190: 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
11a0: 74 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65  t || sqlite3Btre
11b0: 65 49 73 49 6e 52 65 61 64 54 72 61 6e 73 28 64  eIsInReadTrans(d
11c0: 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 20 29  b->aDb[1].pBt) )
11d0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45  {.      sqlite3E
11e0: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
11f0: 22 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61  "temporary stora
1200: 67 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61  ge cannot be cha
1210: 6e 67 65 64 20 22 0a 20 20 20 20 20 20 20 20 22  nged ".        "
1220: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
1230: 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20  ansaction");.   
1240: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
1250: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
1260: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
1270: 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70  ose(db->aDb[1].p
1280: 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e 61 44 62  Bt);.    db->aDb
1290: 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a 20 20 20  [1].pBt = 0;.   
12a0: 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
12b0: 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
12c0: 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a 20 20 72  ion(db);.  }.  r
12d0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
12e0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
12f0: 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  ITE_PAGER_PRAGMA
1300: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
1310: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
1320: 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 66  PRAGMAS./*.** If
1330: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
1340: 73 65 20 69 73 20 6f 70 65 6e 2c 20 63 6c 6f 73  se is open, clos
1350: 65 20 69 74 20 61 6e 64 20 6d 61 72 6b 20 74 68  e it and mark th
1360: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
1370: 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69 6e 67 20  a.** as needing 
1380: 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54 68 69 73  reloading.  This
1390: 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 77 68   must be done wh
13a0: 65 6e 20 75 73 69 6e 67 20 74 68 65 20 53 51 4c  en using the SQL
13b0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 2a  ITE_TEMP_STORE.*
13c0: 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f 54 45 4d  * or DEFAULT_TEM
13d0: 50 5f 53 54 4f 52 45 20 70 72 61 67 6d 61 73 2e  P_STORE pragmas.
13e0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63  .*/.static int c
13f0: 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61 67 65  hangeTempStorage
1400: 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
1410: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 6f  const char *zSto
1420: 72 61 67 65 54 79 70 65 29 7b 0a 20 20 69 6e 74  rageType){.  int
1430: 20 74 73 20 3d 20 67 65 74 54 65 6d 70 53 74 6f   ts = getTempSto
1440: 72 65 28 7a 53 74 6f 72 61 67 65 54 79 70 65 29  re(zStorageType)
1450: 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  ;.  sqlite3 *db 
1460: 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20  = pParse->db;.  
1470: 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  if( db->temp_sto
1480: 72 65 3d 3d 74 73 20 29 20 72 65 74 75 72 6e 20  re==ts ) return 
1490: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28  SQLITE_OK;.  if(
14a0: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
14b0: 74 6f 72 61 67 65 28 20 70 50 61 72 73 65 20 29  torage( pParse )
14c0: 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
14d0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
14e0: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  TE_ERROR;.  }.  
14f0: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d  db->temp_store =
1500: 20 28 75 38 29 74 73 3b 0a 20 20 72 65 74 75 72   (u8)ts;.  retur
1510: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23  n SQLITE_OK;.}.#
1520: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
1530: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
1540: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  ../*.** Set the 
1550: 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 66 69 72  names of the fir
1560: 73 74 20 4e 20 63 6f 6c 75 6d 6e 73 20 74 6f 20  st N columns to 
1570: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 61 7a  the values in az
1580: 43 6f 6c 5b 5d 0a 2a 2f 0a 73 74 61 74 69 63 20  Col[].*/.static 
1590: 76 6f 69 64 20 73 65 74 41 6c 6c 43 6f 6c 75 6d  void setAllColum
15a0: 6e 4e 61 6d 65 73 28 0a 20 20 56 64 62 65 20 2a  nNames(.  Vdbe *
15b0: 76 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v,              
15c0: 20 2f 2a 20 54 68 65 20 71 75 65 72 79 20 75 6e   /* The query un
15d0: 64 65 72 20 63 6f 6e 73 74 72 75 63 74 69 6f 6e  der construction
15e0: 20 2a 2f 0a 20 20 69 6e 74 20 4e 2c 20 20 20 20   */.  int N,    
15f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1600: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
1610: 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  s */.  const cha
1620: 72 20 2a 2a 61 7a 43 6f 6c 20 20 20 20 20 2f 2a  r **azCol     /*
1630: 20 4e 61 6d 65 73 20 6f 66 20 63 6f 6c 75 6d 6e   Names of column
1640: 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b  s */.){.  int i;
1650: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
1660: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 4e 29 3b 0a  tNumCols(v, N);.
1670: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 3b 20    for(i=0; i<N; 
1680: 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i++){.    sqlite
1690: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
16a0: 76 2c 20 69 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, i, COLNAME_NA
16b0: 4d 45 2c 20 61 7a 43 6f 6c 5b 69 5d 2c 20 53 51  ME, azCol[i], SQ
16c0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
16d0: 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  }.}.static void 
16e0: 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65  setOneColumnName
16f0: 28 56 64 62 65 20 2a 76 2c 20 63 6f 6e 73 74 20  (Vdbe *v, const 
1700: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 73 65 74 41  char *z){.  setA
1710: 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c  llColumnNames(v,
1720: 20 31 2c 20 26 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a   1, &z);.}../*.*
1730: 2a 20 47 65 6e 65 72 61 74 65 20 63 6f 64 65 20  * Generate code 
1740: 74 6f 20 72 65 74 75 72 6e 20 61 20 73 69 6e 67  to return a sing
1750: 6c 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  le integer value
1760: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
1770: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
1780: 28 56 64 62 65 20 2a 76 2c 20 63 6f 6e 73 74 20  (Vdbe *v, const 
1790: 63 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 69 36  char *zLabel, i6
17a0: 34 20 76 61 6c 75 65 29 7b 0a 20 20 73 71 6c 69  4 value){.  sqli
17b0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 44 75 70  te3VdbeAddOp4Dup
17c0: 38 28 76 2c 20 4f 50 5f 49 6e 74 36 34 2c 20 30  8(v, OP_Int64, 0
17d0: 2c 20 31 2c 20 30 2c 20 28 63 6f 6e 73 74 20 75  , 1, 0, (const u
17e0: 38 2a 29 26 76 61 6c 75 65 2c 20 50 34 5f 49 4e  8*)&value, P4_IN
17f0: 54 36 34 29 3b 0a 20 20 73 65 74 4f 6e 65 43 6f  T64);.  setOneCo
1800: 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 7a 4c 61 62  lumnName(v, zLab
1810: 65 6c 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  el);.  sqlite3Vd
1820: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
1830: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b  esultRow, 1, 1);
1840: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61  .}../*.** Genera
1850: 74 65 20 63 6f 64 65 20 74 6f 20 72 65 74 75 72  te code to retur
1860: 6e 20 61 20 73 69 6e 67 6c 65 20 74 65 78 74 20  n a single text 
1870: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
1880: 20 76 6f 69 64 20 72 65 74 75 72 6e 53 69 6e 67   void returnSing
1890: 6c 65 54 65 78 74 28 0a 20 20 56 64 62 65 20 2a  leText(.  Vdbe *
18a0: 76 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v,              
18b0: 20 20 2f 2a 20 50 72 65 70 61 72 65 64 20 73 74    /* Prepared st
18c0: 61 74 65 6d 65 6e 74 20 75 6e 64 65 72 20 63 6f  atement under co
18d0: 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20  nstruction */.  
18e0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 61 62  const char *zLab
18f0: 65 6c 2c 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  el,     /* Name 
1900: 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
1910: 6c 75 6d 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  lumn */.  const 
1920: 63 68 61 72 20 2a 7a 56 61 6c 75 65 20 20 20 20  char *zValue    
1930: 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 62 65    /* Value to be
1940: 20 72 65 74 75 72 6e 65 64 20 2a 2f 0a 29 7b 0a   returned */.){.
1950: 20 20 69 66 28 20 7a 56 61 6c 75 65 20 29 7b 0a    if( zValue ){.
1960: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c      sqlite3VdbeL
1970: 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 31 2c 20  oadString(v, 1, 
1980: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a 56 61  (const char*)zVa
1990: 6c 75 65 29 3b 0a 20 20 20 20 73 65 74 4f 6e 65  lue);.    setOne
19a0: 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 7a 4c  ColumnName(v, zL
19b0: 61 62 65 6c 29 3b 0a 20 20 20 20 73 71 6c 69 74  abel);.    sqlit
19c0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
19d0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
19e0: 20 31 29 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a   1);.  }.}.../*.
19f0: 2a 2a 20 53 65 74 20 74 68 65 20 73 61 66 65 74  ** Set the safet
1a00: 79 5f 6c 65 76 65 6c 20 61 6e 64 20 70 61 67 65  y_level and page
1a10: 72 20 66 6c 61 67 73 20 66 6f 72 20 70 61 67 65  r flags for page
1a20: 72 20 69 44 62 2e 20 20 4f 72 20 69 66 20 69 44  r iDb.  Or if iD
1a30: 62 3c 30 0a 2a 2a 20 73 65 74 20 74 68 65 73 65  b<0.** set these
1a40: 20 76 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20   values for all 
1a50: 70 61 67 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  pagers..*/.#ifnd
1a60: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
1a70: 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 73 74 61  AGER_PRAGMAS.sta
1a80: 74 69 63 20 76 6f 69 64 20 73 65 74 41 6c 6c 50  tic void setAllP
1a90: 61 67 65 72 46 6c 61 67 73 28 73 71 6c 69 74 65  agerFlags(sqlite
1aa0: 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62  3 *db){.  if( db
1ab0: 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
1ac0: 20 20 20 20 44 62 20 2a 70 44 62 20 3d 20 64 62      Db *pDb = db
1ad0: 2d 3e 61 44 62 3b 0a 20 20 20 20 69 6e 74 20 6e  ->aDb;.    int n
1ae0: 20 3d 20 64 62 2d 3e 6e 44 62 3b 0a 20 20 20 20   = db->nDb;.    
1af0: 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f 46  assert( SQLITE_F
1b00: 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f  ullFSync==PAGER_
1b10: 46 55 4c 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20  FULLFSYNC );.   
1b20: 20 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f   assert( SQLITE_
1b30: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 3d 3d 50  CkptFullFSync==P
1b40: 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53  AGER_CKPT_FULLFS
1b50: 59 4e 43 20 29 3b 0a 20 20 20 20 61 73 73 65 72  YNC );.    asser
1b60: 74 28 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  t( SQLITE_CacheS
1b70: 70 69 6c 6c 3d 3d 50 41 47 45 52 5f 43 41 43 48  pill==PAGER_CACH
1b80: 45 53 50 49 4c 4c 20 29 3b 0a 20 20 20 20 61 73  ESPILL );.    as
1b90: 73 65 72 74 28 20 28 50 41 47 45 52 5f 46 55 4c  sert( (PAGER_FUL
1ba0: 4c 46 53 59 4e 43 20 7c 20 50 41 47 45 52 5f 43  LFSYNC | PAGER_C
1bb0: 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20  KPT_FULLFSYNC | 
1bc0: 50 41 47 45 52 5f 43 41 43 48 45 53 50 49 4c 4c  PAGER_CACHESPILL
1bd0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3d  ).             =
1be0: 3d 20 20 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d  =  PAGER_FLAGS_M
1bf0: 41 53 4b 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ASK );.    asser
1c00: 74 28 20 28 70 44 62 2d 3e 73 61 66 65 74 79 5f  t( (pDb->safety_
1c10: 6c 65 76 65 6c 20 26 20 50 41 47 45 52 5f 53 59  level & PAGER_SY
1c20: 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53 4b 29 3d  NCHRONOUS_MASK)=
1c30: 3d 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76  =pDb->safety_lev
1c40: 65 6c 20 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  el );.    while(
1c50: 20 28 6e 2d 2d 29 20 3e 20 30 20 29 7b 0a 20 20   (n--) > 0 ){.  
1c60: 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 42 74      if( pDb->pBt
1c70: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
1c80: 74 65 33 42 74 72 65 65 53 65 74 50 61 67 65 72  te3BtreeSetPager
1c90: 46 6c 61 67 73 28 70 44 62 2d 3e 70 42 74 2c 0a  Flags(pDb->pBt,.
1ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb0: 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76   pDb->safety_lev
1cc0: 65 6c 20 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20  el | (db->flags 
1cd0: 26 20 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41  & PAGER_FLAGS_MA
1ce0: 53 4b 29 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20  SK) );.      }. 
1cf0: 20 20 20 20 20 70 44 62 2b 2b 3b 0a 20 20 20 20       pDb++;.    
1d00: 7d 0a 20 20 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20  }.  }.}.#else.# 
1d10: 64 65 66 69 6e 65 20 73 65 74 41 6c 6c 50 61 67  define setAllPag
1d20: 65 72 46 6c 61 67 73 28 58 29 20 20 2f 2a 20 6e  erFlags(X)  /* n
1d30: 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  o-op */.#endif..
1d40: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20  ./*.** Return a 
1d50: 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e  human-readable n
1d60: 61 6d 65 20 66 6f 72 20 61 20 63 6f 6e 73 74 72  ame for a constr
1d70: 61 69 6e 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  aint resolution 
1d80: 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64  action..*/.#ifnd
1d90: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
1da0: 4f 52 45 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69  OREIGN_KEY.stati
1db0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 63  c const char *ac
1dc0: 74 69 6f 6e 4e 61 6d 65 28 75 38 20 61 63 74 69  tionName(u8 acti
1dd0: 6f 6e 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  on){.  const cha
1de0: 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74  r *zName;.  swit
1df0: 63 68 28 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ch( action ){.  
1e00: 20 20 63 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c    case OE_SetNul
1e10: 6c 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54  l:  zName = "SET
1e20: 20 4e 55 4c 4c 22 3b 20 20 20 20 20 20 20 20 62   NULL";        b
1e30: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
1e40: 45 5f 53 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d  E_SetDflt:  zNam
1e50: 65 20 3d 20 22 53 45 54 20 44 45 46 41 55 4c 54  e = "SET DEFAULT
1e60: 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ";     break;.  
1e70: 20 20 63 61 73 65 20 4f 45 5f 43 61 73 63 61 64    case OE_Cascad
1e80: 65 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53  e:  zName = "CAS
1e90: 43 41 44 45 22 3b 20 20 20 20 20 20 20 20 20 62  CADE";         b
1ea0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
1eb0: 45 5f 52 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d  E_Restrict: zNam
1ec0: 65 20 3d 20 22 52 45 53 54 52 49 43 54 22 3b 20  e = "RESTRICT"; 
1ed0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1ee0: 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20    default:      
1ef0: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20      zName = "NO 
1f00: 41 43 54 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20  ACTION";  .     
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f20: 20 61 73 73 65 72 74 28 20 61 63 74 69 6f 6e 3d   assert( action=
1f30: 3d 4f 45 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61  =OE_None ); brea
1f40: 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  k;.  }.  return 
1f50: 7a 4e 61 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a  zName;.}.#endif.
1f60: 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65  ../*.** Paramete
1f70: 72 20 65 4d 6f 64 65 20 6d 75 73 74 20 62 65 20  r eMode must be 
1f80: 6f 6e 65 20 6f 66 20 74 68 65 20 50 41 47 45 52  one of the PAGER
1f90: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58  _JOURNALMODE_XXX
1fa0: 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
1fb0: 66 69 6e 65 64 20 69 6e 20 70 61 67 65 72 2e 68  fined in pager.h
1fc0: 2e 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  . This function 
1fd0: 72 65 74 75 72 6e 73 20 74 68 65 20 61 73 73 6f  returns the asso
1fe0: 63 69 61 74 65 64 20 6c 6f 77 65 72 63 61 73 65  ciated lowercase
1ff0: 0a 2a 2a 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65  .** journal-mode
2000: 20 6e 61 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20   name..*/.const 
2010: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
2020: 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
2030: 20 65 4d 6f 64 65 29 7b 0a 20 20 73 74 61 74 69   eMode){.  stati
2040: 63 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61  c char * const a
2050: 7a 4d 6f 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a  zModeName[] = {.
2060: 20 20 20 20 22 64 65 6c 65 74 65 22 2c 20 22 70      "delete", "p
2070: 65 72 73 69 73 74 22 2c 20 22 6f 66 66 22 2c 20  ersist", "off", 
2080: 22 74 72 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d  "truncate", "mem
2090: 6f 72 79 22 0a 23 69 66 6e 64 65 66 20 53 51 4c  ory".#ifndef SQL
20a0: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20  ITE_OMIT_WAL.   
20b0: 20 20 2c 20 22 77 61 6c 22 0a 23 65 6e 64 69 66    , "wal".#endif
20c0: 0a 20 20 7d 3b 0a 20 20 61 73 73 65 72 74 28 20  .  };.  assert( 
20d0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
20e0: 45 5f 44 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20  E_DELETE==0 );. 
20f0: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
2100: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49  OURNALMODE_PERSI
2110: 53 54 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  ST==1 );.  asser
2120: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
2130: 4d 4f 44 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20  MODE_OFF==2 );. 
2140: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
2150: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43  OURNALMODE_TRUNC
2160: 41 54 45 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65  ATE==3 );.  asse
2170: 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  rt( PAGER_JOURNA
2180: 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20  LMODE_MEMORY==4 
2190: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  );.  assert( PAG
21a0: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
21b0: 41 4c 3d 3d 35 20 29 3b 0a 20 20 61 73 73 65 72  AL==5 );.  asser
21c0: 74 28 20 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65  t( eMode>=0 && e
21d0: 4d 6f 64 65 3c 3d 41 72 72 61 79 53 69 7a 65 28  Mode<=ArraySize(
21e0: 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a  azModeName) );..
21f0: 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72    if( eMode==Arr
2200: 61 79 53 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d  aySize(azModeNam
2210: 65 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  e) ) return 0;. 
2220: 20 72 65 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61   return azModeNa
2230: 6d 65 5b 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a  me[eMode];.}../*
2240: 0a 2a 2a 20 50 72 6f 63 65 73 73 20 61 20 70 72  .** Process a pr
2250: 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20  agma statement. 
2260: 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20   .**.** Pragmas 
2270: 61 72 65 20 6f 66 20 74 68 69 73 20 66 6f 72 6d  are of this form
2280: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41  :.**.**      PRA
2290: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69 64 20  GMA [schema.]id 
22a0: 5b 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20  [= value].**.** 
22b0: 54 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d  The identifier m
22c0: 69 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73  ight also be a s
22d0: 74 72 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75  tring.  The valu
22e0: 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61  e is a string, a
22f0: 6e 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72  nd.** identifier
2300: 2c 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20  , or a number.  
2310: 49 66 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20  If minusFlag is 
2320: 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76  true, then the v
2330: 61 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d  alue is.** a num
2340: 62 65 72 20 74 68 61 74 20 77 61 73 20 70 72 65  ber that was pre
2350: 63 65 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73  ceded by a minus
2360: 20 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   sign..**.** If 
2370: 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73  the left side is
2380: 20 22 64 61 74 61 62 61 73 65 2e 69 64 22 20 74   "database.id" t
2390: 68 65 6e 20 70 49 64 31 20 69 73 20 74 68 65 20  hen pId1 is the 
23a0: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a  database name.**
23b0: 20 61 6e 64 20 70 49 64 32 20 69 73 20 74 68 65   and pId2 is the
23c0: 20 69 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66   id.  If the lef
23d0: 74 20 73 69 64 65 20 69 73 20 6a 75 73 74 20 22  t side is just "
23e0: 69 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73  id" then pId1 is
23f0: 20 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70   the.** id and p
2400: 49 64 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79  Id2 is any empty
2410: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64   string..*/.void
2420: 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a   sqlite3Pragma(.
2430: 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c    Parse *pParse,
2440: 20 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c   .  Token *pId1,
2450: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
2460: 20 70 61 72 74 20 6f 66 20 5b 73 63 68 65 6d 61   part of [schema
2470: 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20 20  .]id field */.  
2480: 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20 20  Token *pId2,    
2490: 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70 61      /* Second pa
24a0: 72 74 20 6f 66 20 5b 73 63 68 65 6d 61 2e 5d 69  rt of [schema.]i
24b0: 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e 55 4c 4c  d field, or NULL
24c0: 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 56 61   */.  Token *pVa
24d0: 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20 54 6f 6b  lue,      /* Tok
24e0: 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65 3e 2c 20  en for <value>, 
24f0: 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74  or NULL */.  int
2500: 20 6d 69 6e 75 73 46 6c 61 67 20 20 20 20 20 20   minusFlag      
2510: 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20 27 2d   /* True if a '-
2520: 27 20 73 69 67 6e 20 70 72 65 63 65 64 65 64 20  ' sign preceded 
2530: 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b 0a 20 20  <value> */.){.  
2540: 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20 30 3b  char *zLeft = 0;
2550: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65         /* Nul-te
2560: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
2570: 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f 0a 20 20  tring <id> */.  
2580: 63 68 61 72 20 2a 7a 52 69 67 68 74 20 3d 20 30  char *zRight = 0
2590: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65  ;      /* Nul-te
25a0: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
25b0: 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e 2c 20 6f  tring <value>, o
25c0: 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f 6e 73  r NULL */.  cons
25d0: 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b  t char *zDb = 0;
25e0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
25f0: 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b  se name */.  Tok
2600: 65 6e 20 2a 70 49 64 3b 20 20 20 20 20 20 20 20  en *pId;        
2610: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
2620: 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20 2a 2f 0a  o <id> token */.
2630: 20 20 63 68 61 72 20 2a 61 46 63 6e 74 6c 5b 34    char *aFcntl[4
2640: 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75  ];       /* Argu
2650: 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54 45 5f 46  ment to SQLITE_F
2660: 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a 20  CNTL_PRAGMA */. 
2670: 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
2680: 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
2690: 61 73 65 20 69 6e 64 65 78 20 66 6f 72 20 3c 64  ase index for <d
26a0: 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20 20 69 6e  atabase> */.  in
26b0: 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d 69 64 20  t lwr, upr, mid 
26c0: 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 42 69  = 0;       /* Bi
26d0: 6e 61 72 79 20 73 65 61 72 63 68 20 62 6f 75 6e  nary search boun
26e0: 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  ds */.  int rc; 
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2700: 20 20 20 20 20 2f 2a 20 72 65 74 75 72 6e 20 76       /* return v
2710: 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c 49 54 45  alue form SQLITE
2720: 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f  _FCNTL_PRAGMA */
2730: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
2740: 20 70 50 61 72 73 65 2d 3e 64 62 3b 20 20 20 20   pParse->db;    
2750: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
2760: 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
2770: 44 62 20 2a 70 44 62 3b 20 20 20 20 20 20 20 20  Db *pDb;        
2780: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2790: 54 68 65 20 73 70 65 63 69 66 69 63 20 64 61 74  The specific dat
27a0: 61 62 61 73 65 20 62 65 69 6e 67 20 70 72 61 67  abase being prag
27b0: 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62 65 20 2a  maed */.  Vdbe *
27c0: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
27d0: 62 65 28 70 50 61 72 73 65 29 3b 20 20 2f 2a 20  be(pParse);  /* 
27e0: 50 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  Prepared stateme
27f0: 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 73 74  nt */.  const st
2800: 72 75 63 74 20 73 50 72 61 67 6d 61 4e 61 6d 65  ruct sPragmaName
2810: 73 20 2a 70 50 72 61 67 6d 61 3b 0a 0a 20 20 69  s *pPragma;..  i
2820: 66 28 20 76 3d 3d 30 20 29 20 72 65 74 75 72 6e  f( v==0 ) return
2830: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 52  ;.  sqlite3VdbeR
2840: 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29 3b 0a 20  unOnlyOnce(v);. 
2850: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
2860: 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65 72 70 72  2;..  /* Interpr
2870: 65 74 20 74 68 65 20 5b 73 63 68 65 6d 61 2e 5d  et the [schema.]
2880: 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 61   part of the pra
2890: 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 69  gma statement. i
28a0: 44 62 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 69  Db is the.  ** i
28b0: 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
28c0: 62 61 73 65 20 74 68 69 73 20 70 72 61 67 6d 61  base this pragma
28d0: 20 69 73 20 62 65 69 6e 67 20 61 70 70 6c 69 65   is being applie
28e0: 64 20 74 6f 20 69 6e 20 64 62 2e 61 44 62 5b 5d  d to in db.aDb[]
28f0: 2e 20 2a 2f 0a 20 20 69 44 62 20 3d 20 73 71 6c  . */.  iDb = sql
2900: 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28  ite3TwoPartName(
2910: 70 50 61 72 73 65 2c 20 70 49 64 31 2c 20 70 49  pParse, pId1, pI
2920: 64 32 2c 20 26 70 49 64 29 3b 0a 20 20 69 66 28  d2, &pId);.  if(
2930: 20 69 44 62 3c 30 20 29 20 72 65 74 75 72 6e 3b   iDb<0 ) return;
2940: 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
2950: 62 5b 69 44 62 5d 3b 0a 0a 20 20 2f 2a 20 49 66  b[iDb];..  /* If
2960: 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   the temp databa
2970: 73 65 20 68 61 73 20 62 65 65 6e 20 65 78 70 6c  se has been expl
2980: 69 63 69 74 6c 79 20 6e 61 6d 65 64 20 61 73 20  icitly named as 
2990: 70 61 72 74 20 6f 66 20 74 68 65 20 0a 20 20 2a  part of the .  *
29a0: 2a 20 70 72 61 67 6d 61 2c 20 6d 61 6b 65 20 73  * pragma, make s
29b0: 75 72 65 20 69 74 20 69 73 20 6f 70 65 6e 2e 20  ure it is open. 
29c0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d  .  */.  if( iDb=
29d0: 3d 31 20 26 26 20 73 71 6c 69 74 65 33 4f 70 65  =1 && sqlite3Ope
29e0: 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 70 50  nTempDatabase(pP
29f0: 61 72 73 65 29 20 29 7b 0a 20 20 20 20 72 65 74  arse) ){.    ret
2a00: 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 7a 4c 65 66  urn;.  }..  zLef
2a10: 74 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46  t = sqlite3NameF
2a20: 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 49 64  romToken(db, pId
2a30: 29 3b 0a 20 20 69 66 28 20 21 7a 4c 65 66 74 20  );.  if( !zLeft 
2a40: 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20  ) return;.  if( 
2a50: 6d 69 6e 75 73 46 6c 61 67 20 29 7b 0a 20 20 20  minusFlag ){.   
2a60: 20 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65   zRight = sqlite
2a70: 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2d 25  3MPrintf(db, "-%
2a80: 54 22 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d  T", pValue);.  }
2a90: 65 6c 73 65 7b 0a 20 20 20 20 7a 52 69 67 68 74  else{.    zRight
2aa0: 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72   = sqlite3NameFr
2ab0: 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 56 61 6c  omToken(db, pVal
2ac0: 75 65 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  ue);.  }..  asse
2ad0: 72 74 28 20 70 49 64 32 20 29 3b 0a 20 20 7a 44  rt( pId2 );.  zD
2ae0: 62 20 3d 20 70 49 64 32 2d 3e 6e 3e 30 20 3f 20  b = pId2->n>0 ? 
2af0: 70 44 62 2d 3e 7a 4e 61 6d 65 20 3a 20 30 3b 0a  pDb->zName : 0;.
2b00: 20 20 69 66 28 20 73 71 6c 69 74 65 33 41 75 74    if( sqlite3Aut
2b10: 68 43 68 65 63 6b 28 70 50 61 72 73 65 2c 20 53  hCheck(pParse, S
2b20: 51 4c 49 54 45 5f 50 52 41 47 4d 41 2c 20 7a 4c  QLITE_PRAGMA, zL
2b30: 65 66 74 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  eft, zRight, zDb
2b40: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 70 72  ) ){.    goto pr
2b50: 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20  agma_out;.  }.. 
2b60: 20 2f 2a 20 53 65 6e 64 20 61 6e 20 53 51 4c 49   /* Send an SQLI
2b70: 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20  TE_FCNTL_PRAGMA 
2b80: 66 69 6c 65 2d 63 6f 6e 74 72 6f 6c 20 74 6f 20  file-control to 
2b90: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56  the underlying V
2ba0: 46 53 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63 74 69  FS.  ** connecti
2bb0: 6f 6e 2e 20 20 49 66 20 69 74 20 72 65 74 75 72  on.  If it retur
2bc0: 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 74 68  ns SQLITE_OK, th
2bd0: 65 6e 20 61 73 73 75 6d 65 20 74 68 61 74 20 74  en assume that t
2be0: 68 65 20 56 46 53 0a 20 20 2a 2a 20 68 61 6e 64  he VFS.  ** hand
2bf0: 6c 65 64 20 74 68 65 20 70 72 61 67 6d 61 20 61  led the pragma a
2c00: 6e 64 20 67 65 6e 65 72 61 74 65 20 61 20 6e 6f  nd generate a no
2c10: 2d 6f 70 20 70 72 65 70 61 72 65 64 20 73 74 61  -op prepared sta
2c20: 74 65 6d 65 6e 74 2e 0a 20 20 2a 2a 0a 20 20 2a  tement..  **.  *
2c30: 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e  * IMPLEMENTATION
2c40: 2d 4f 46 3a 20 52 2d 31 32 32 33 38 2d 35 35 31  -OF: R-12238-551
2c50: 32 30 20 57 68 65 6e 65 76 65 72 20 61 20 50 52  20 Whenever a PR
2c60: 41 47 4d 41 20 73 74 61 74 65 6d 65 6e 74 20 69  AGMA statement i
2c70: 73 20 70 61 72 73 65 64 2c 0a 20 20 2a 2a 20 61  s parsed,.  ** a
2c80: 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  n SQLITE_FCNTL_P
2c90: 52 41 47 4d 41 20 66 69 6c 65 20 63 6f 6e 74 72  RAGMA file contr
2ca0: 6f 6c 20 69 73 20 73 65 6e 74 20 74 6f 20 74 68  ol is sent to th
2cb0: 65 20 6f 70 65 6e 20 73 71 6c 69 74 65 33 5f 66  e open sqlite3_f
2cc0: 69 6c 65 0a 20 20 2a 2a 20 6f 62 6a 65 63 74 20  ile.  ** object 
2cd0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
2ce0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2cf0: 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  le to which the 
2d00: 70 72 61 67 6d 61 0a 20 20 2a 2a 20 73 74 61 74  pragma.  ** stat
2d10: 65 6d 65 6e 74 20 72 65 66 65 72 73 2e 0a 20 20  ement refers..  
2d20: 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e  **.  ** IMPLEMEN
2d30: 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 39 38  TATION-OF: R-298
2d40: 37 35 2d 33 31 36 37 38 20 54 68 65 20 61 72 67  75-31678 The arg
2d50: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 53 51 4c  ument to the SQL
2d60: 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41  ITE_FCNTL_PRAGMA
2d70: 0a 20 20 2a 2a 20 66 69 6c 65 20 63 6f 6e 74 72  .  ** file contr
2d80: 6f 6c 20 69 73 20 61 6e 20 61 72 72 61 79 20 6f  ol is an array o
2d90: 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 73 74  f pointers to st
2da0: 72 69 6e 67 73 20 28 63 68 61 72 2a 2a 29 20 69  rings (char**) i
2db0: 6e 20 77 68 69 63 68 20 74 68 65 0a 20 20 2a 2a  n which the.  **
2dc0: 20 73 65 63 6f 6e 64 20 65 6c 65 6d 65 6e 74 20   second element 
2dd0: 6f 66 20 74 68 65 20 61 72 72 61 79 20 69 73 20  of the array is 
2de0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
2df0: 70 72 61 67 6d 61 20 61 6e 64 20 74 68 65 20 74  pragma and the t
2e00: 68 69 72 64 0a 20 20 2a 2a 20 65 6c 65 6d 65 6e  hird.  ** elemen
2e10: 74 20 69 73 20 74 68 65 20 61 72 67 75 6d 65 6e  t is the argumen
2e20: 74 20 74 6f 20 74 68 65 20 70 72 61 67 6d 61 20  t to the pragma 
2e30: 6f 72 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 70  or NULL if the p
2e40: 72 61 67 6d 61 20 68 61 73 20 6e 6f 0a 20 20 2a  ragma has no.  *
2e50: 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 20 20 2a 2f  * argument..  */
2e60: 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20 3d 20 30  .  aFcntl[0] = 0
2e70: 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d 20 3d 20  ;.  aFcntl[1] = 
2e80: 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e 74 6c 5b  zLeft;.  aFcntl[
2e90: 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a 20 20 61  2] = zRight;.  a
2ea0: 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b 0a 20 20  Fcntl[3] = 0;.  
2eb0: 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e  db->busyHandler.
2ec0: 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 72 63 20  nBusy = 0;.  rc 
2ed0: 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63  = sqlite3_file_c
2ee0: 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62 2c 20  ontrol(db, zDb, 
2ef0: 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41  SQLITE_FCNTL_PRA
2f00: 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61 46 63 6e  GMA, (void*)aFcn
2f10: 74 6c 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  tl);.  if( rc==S
2f20: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2f30: 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78 74  returnSingleText
2f40: 28 76 2c 20 22 72 65 73 75 6c 74 22 2c 20 61 46  (v, "result", aF
2f50: 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 73 71  cntl[0]);.    sq
2f60: 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63 6e 74  lite3_free(aFcnt
2f70: 6c 5b 30 5d 29 3b 0a 20 20 20 20 67 6f 74 6f 20  l[0]);.    goto 
2f80: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
2f90: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
2fa0: 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20 20 20  _NOTFOUND ){.   
2fb0: 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20 29   if( aFcntl[0] )
2fc0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45  {.      sqlite3E
2fd0: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
2fe0: 22 25 73 22 2c 20 61 46 63 6e 74 6c 5b 30 5d 29  "%s", aFcntl[0])
2ff0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
3000: 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29 3b  free(aFcntl[0]);
3010: 0a 20 20 20 20 7d 0a 20 20 20 20 70 50 61 72 73  .    }.    pPars
3020: 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 70  e->nErr++;.    p
3030: 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a  Parse->rc = rc;.
3040: 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f      goto pragma_
3050: 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c  out;.  }..  /* L
3060: 6f 63 61 74 65 20 74 68 65 20 70 72 61 67 6d 61  ocate the pragma
3070: 20 69 6e 20 74 68 65 20 6c 6f 6f 6b 75 70 20 74   in the lookup t
3080: 61 62 6c 65 20 2a 2f 0a 20 20 6c 77 72 20 3d 20  able */.  lwr = 
3090: 30 3b 0a 20 20 75 70 72 20 3d 20 41 72 72 61 79  0;.  upr = Array
30a0: 53 69 7a 65 28 61 50 72 61 67 6d 61 4e 61 6d 65  Size(aPragmaName
30b0: 73 29 2d 31 3b 0a 20 20 77 68 69 6c 65 28 20 6c  s)-1;.  while( l
30c0: 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20 20 20 6d  wr<=upr ){.    m
30d0: 69 64 20 3d 20 28 6c 77 72 2b 75 70 72 29 2f 32  id = (lwr+upr)/2
30e0: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
30f0: 65 33 5f 73 74 72 69 63 6d 70 28 7a 4c 65 66 74  e3_stricmp(zLeft
3100: 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d  , aPragmaNames[m
3110: 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  id].zName);.    
3120: 69 66 28 20 72 63 3d 3d 30 20 29 20 62 72 65 61  if( rc==0 ) brea
3130: 6b 3b 0a 20 20 20 20 69 66 28 20 72 63 3c 30 20  k;.    if( rc<0 
3140: 29 7b 0a 20 20 20 20 20 20 75 70 72 20 3d 20 6d  ){.      upr = m
3150: 69 64 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  id - 1;.    }els
3160: 65 7b 0a 20 20 20 20 20 20 6c 77 72 20 3d 20 6d  e{.      lwr = m
3170: 69 64 20 2b 20 31 3b 0a 20 20 20 20 7d 0a 20 20  id + 1;.    }.  
3180: 7d 0a 20 20 69 66 28 20 6c 77 72 3e 75 70 72 20  }.  if( lwr>upr 
3190: 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75  ) goto pragma_ou
31a0: 74 3b 0a 20 20 70 50 72 61 67 6d 61 20 3d 20 26  t;.  pPragma = &
31b0: 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64  aPragmaNames[mid
31c0: 5d 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75  ];..  /* Make su
31d0: 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  re the database 
31e0: 73 63 68 65 6d 61 20 69 73 20 6c 6f 61 64 65 64  schema is loaded
31f0: 20 69 66 20 74 68 65 20 70 72 61 67 6d 61 20 72   if the pragma r
3200: 65 71 75 69 72 65 73 20 74 68 61 74 20 2a 2f 0a  equires that */.
3210: 20 20 69 66 28 20 28 70 50 72 61 67 6d 61 2d 3e    if( (pPragma->
3220: 6d 50 72 61 67 46 6c 61 67 20 26 20 50 72 61 67  mPragFlag & Prag
3230: 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 29  Flag_NeedSchema)
3240: 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73  !=0 ){.    if( s
3250: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
3260: 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20  (pParse) ) goto 
3270: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
3280: 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 74 68  .  /* Jump to th
3290: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 70 72  e appropriate pr
32a0: 61 67 6d 61 20 68 61 6e 64 6c 65 72 20 2a 2f 0a  agma handler */.
32b0: 20 20 73 77 69 74 63 68 28 20 70 50 72 61 67 6d    switch( pPragm
32c0: 61 2d 3e 65 50 72 61 67 54 79 70 20 29 7b 0a 20  a->ePragTyp ){. 
32d0: 20 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53   .#if !defined(S
32e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
32f0: 5f 50 52 41 47 4d 41 53 29 20 26 26 20 21 64 65  _PRAGMAS) && !de
3300: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3310: 54 5f 44 45 50 52 45 43 41 54 45 44 29 0a 20 20  T_DEPRECATED).  
3320: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
3330: 5b 73 63 68 65 6d 61 2e 5d 64 65 66 61 75 6c 74  [schema.]default
3340: 5f 63 61 63 68 65 5f 73 69 7a 65 0a 20 20 2a 2a  _cache_size.  **
3350: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
3360: 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  .]default_cache_
3370: 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  size=N.  **.  **
3380: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
3390: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
33a0: 65 6e 74 20 70 65 72 73 69 73 74 65 6e 74 20 73  ent persistent s
33b0: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
33c0: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
33d0: 69 7a 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  ize.  The value 
33e0: 72 65 74 75 72 6e 65 64 20 69 73 20 74 68 65 20  returned is the 
33f0: 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
3400: 66 0a 20 20 2a 2a 20 70 61 67 65 73 20 69 6e 20  f.  ** pages in 
3410: 74 68 65 20 70 61 67 65 20 63 61 63 68 65 2e 20  the page cache. 
3420: 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
3430: 20 73 65 74 73 20 62 6f 74 68 20 74 68 65 20 63   sets both the c
3440: 75 72 72 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65  urrent.  ** page
3450: 20 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75   cache size valu
3460: 65 20 61 6e 64 20 74 68 65 20 70 65 72 73 69 73  e and the persis
3470: 74 65 6e 74 20 70 61 67 65 20 63 61 63 68 65 20  tent page cache 
3480: 73 69 7a 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20  size value.  ** 
3490: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61  stored in the da
34a0: 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a  tabase file..  *
34b0: 2a 0a 20 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72  *.  ** Older ver
34c0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
34d0: 77 6f 75 6c 64 20 73 65 74 20 74 68 65 20 64 65  would set the de
34e0: 66 61 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65  fault cache size
34f0: 20 74 6f 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74   to a.  ** negat
3500: 69 76 65 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e  ive number to in
3510: 64 69 63 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f  dicate synchrono
3520: 75 73 3d 4f 46 46 2e 20 20 54 68 65 73 65 20 64  us=OFF.  These d
3530: 61 79 73 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73  ays, synchronous
3540: 0a 20 20 2a 2a 20 69 73 20 61 6c 77 61 79 73 20  .  ** is always 
3550: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 20 72 65  on by default re
3560: 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
3570: 73 69 67 6e 20 6f 66 20 74 68 65 20 64 65 66 61  sign of the defa
3580: 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73  ult cache.  ** s
3590: 69 7a 65 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e  ize.  But contin
35a0: 75 65 20 74 6f 20 74 61 6b 65 20 74 68 65 20 61  ue to take the a
35b0: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
35c0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63   the default cac
35d0: 68 65 0a 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20  he.  ** size of 
35e0: 68 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61  historical compa
35f0: 74 69 62 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20  tibility..  */. 
3600: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 44 45   case PragTyp_DE
3610: 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45  FAULT_CACHE_SIZE
3620: 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
3630: 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56  onst int iLn = V
3640: 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e  DBE_OFFSET_LINEN
3650: 4f 28 32 29 3b 0a 20 20 20 20 73 74 61 74 69 63  O(2);.    static
3660: 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
3670: 74 20 67 65 74 43 61 63 68 65 53 69 7a 65 5b 5d  t getCacheSize[]
3680: 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f   = {.      { OP_
3690: 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 30 2c 20  Transaction, 0, 
36a0: 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20  0,        0},   
36b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c0: 20 20 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20        /* 0 */.  
36d0: 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f      { OP_ReadCoo
36e0: 6b 69 65 2c 20 20 30 2c 20 31 2c 20 20 20 20 20  kie,  0, 1,     
36f0: 20 20 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54     BTREE_DEFAULT
3700: 5f 43 41 43 48 45 5f 53 49 5a 45 7d 2c 20 20 2f  _CACHE_SIZE},  /
3710: 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f  * 1 */.      { O
3720: 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31  P_IfPos,       1
3730: 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 8,        0},.
3740: 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67        { OP_Integ
3750: 65 72 2c 20 20 20 20 20 30 2c 20 32 2c 20 20 20  er,     0, 2,   
3760: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
3770: 20 4f 50 5f 53 75 62 74 72 61 63 74 2c 20 20 20   OP_Subtract,   
3780: 20 31 2c 20 32 2c 20 20 20 20 20 20 20 20 31 7d   1, 2,        1}
3790: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50  ,.      { OP_IfP
37a0: 6f 73 2c 20 20 20 20 20 20 20 31 2c 20 38 2c 20  os,       1, 8, 
37b0: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
37c0: 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20   { OP_Integer,  
37d0: 20 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20     0, 1,        
37e0: 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  0},             
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 36              /* 6
3800: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e   */.      { OP_N
3810: 6f 6f 70 2c 20 20 20 20 20 20 20 20 30 2c 20 30  oop,        0, 0
3820: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
3830: 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f     { OP_ResultRo
3840: 77 2c 20 20 20 31 2c 20 31 2c 20 20 20 20 20 20  w,   1, 1,      
3850: 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20    0},.    };.   
3860: 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20   VdbeOp *aOp;.  
3870: 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65    sqlite3VdbeUse
3880: 73 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a  sBtree(v, iDb);.
3890: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
38a0: 29 7b 0a 20 20 20 20 20 20 73 65 74 4f 6e 65 43  ){.      setOneC
38b0: 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 22 63 61  olumnName(v, "ca
38c0: 63 68 65 5f 73 69 7a 65 22 29 3b 0a 20 20 20 20  che_size");.    
38d0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b    pParse->nMem +
38e0: 3d 20 32 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  = 2;.      sqlit
38f0: 65 33 56 64 62 65 56 65 72 69 66 79 4e 6f 4d 61  e3VdbeVerifyNoMa
3900: 6c 6c 6f 63 52 65 71 75 69 72 65 64 28 76 2c 20  llocRequired(v, 
3910: 41 72 72 61 79 53 69 7a 65 28 67 65 74 43 61 63  ArraySize(getCac
3920: 68 65 53 69 7a 65 29 29 3b 0a 20 20 20 20 20 20  heSize));.      
3930: 61 4f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62  aOp = sqlite3Vdb
3940: 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
3950: 72 61 79 53 69 7a 65 28 67 65 74 43 61 63 68 65  raySize(getCache
3960: 53 69 7a 65 29 2c 20 67 65 74 43 61 63 68 65 53  Size), getCacheS
3970: 69 7a 65 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20  ize, iLn);.     
3980: 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52 45 41   if( ONLY_IF_REA
3990: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f 70 3d  LLOC_STRESS(aOp=
39a0: 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  =0) ) break;.   
39b0: 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20 3d 20 69     aOp[0].p1 = i
39c0: 44 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d  Db;.      aOp[1]
39d0: 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20  .p1 = iDb;.     
39e0: 20 61 4f 70 5b 36 5d 2e 70 31 20 3d 20 53 51 4c   aOp[6].p1 = SQL
39f0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48  ITE_DEFAULT_CACH
3a00: 45 5f 53 49 5a 45 3b 0a 20 20 20 20 7d 65 6c 73  E_SIZE;.    }els
3a10: 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a  e{.      int siz
3a20: 65 20 3d 20 73 71 6c 69 74 65 33 41 62 73 49 6e  e = sqlite3AbsIn
3a30: 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28  t32(sqlite3Atoi(
3a40: 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20  zRight));.      
3a50: 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74  sqlite3BeginWrit
3a60: 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73  eOperation(pPars
3a70: 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20  e, 0, iDb);.    
3a80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
3a90: 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74 43 6f 6f  Op3(v, OP_SetCoo
3aa0: 6b 69 65 2c 20 69 44 62 2c 20 42 54 52 45 45 5f  kie, iDb, BTREE_
3ab0: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
3ac0: 5a 45 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20 20  ZE, size);.     
3ad0: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
3ae0: 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
3af0: 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
3b00: 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d       pDb->pSchem
3b10: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  a->cache_size = 
3b20: 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  size;.      sqli
3b30: 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
3b40: 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70  Size(pDb->pBt, p
3b50: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
3b60: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a  he_size);.    }.
3b70: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
3b80: 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c 49 54 45  endif /* !SQLITE
3b90: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
3ba0: 4d 41 53 20 26 26 20 21 53 51 4c 49 54 45 5f 4f  MAS && !SQLITE_O
3bb0: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a  MIT_DEPRECATED *
3bc0: 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  /..#if !defined(
3bd0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
3be0: 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a  R_PRAGMAS).  /*.
3bf0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
3c00: 68 65 6d 61 2e 5d 70 61 67 65 5f 73 69 7a 65 0a  hema.]page_size.
3c10: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
3c20: 68 65 6d 61 2e 5d 70 61 67 65 5f 73 69 7a 65 3d  hema.]page_size=
3c30: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  N.  **.  ** The 
3c40: 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72  first form repor
3c50: 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  ts the current s
3c60: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
3c70: 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61 67   ** database pag
3c80: 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 2e  e size in bytes.
3c90: 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72    The second for
3ca0: 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a 20  m sets the.  ** 
3cb0: 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69  database page si
3cc0: 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20 76  ze value.  The v
3cd0: 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  alue can only be
3ce0: 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68 65   set if.  ** the
3cf0: 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f   database has no
3d00: 74 20 79 65 74 20 62 65 65 6e 20 63 72 65 61 74  t yet been creat
3d10: 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ed..  */.  case 
3d20: 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49 5a  PragTyp_PAGE_SIZ
3d30: 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a  E: {.    Btree *
3d40: 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a  pBt = pDb->pBt;.
3d50: 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21      assert( pBt!
3d60: 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a  =0 );.    if( !z
3d70: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
3d80: 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57 41 59 53  nt size = ALWAYS
3d90: 28 70 42 74 29 20 3f 20 73 71 6c 69 74 65 33 42  (pBt) ? sqlite3B
3da0: 74 72 65 65 47 65 74 50 61 67 65 53 69 7a 65 28  treeGetPageSize(
3db0: 70 42 74 29 20 3a 20 30 3b 0a 20 20 20 20 20 20  pBt) : 0;.      
3dc0: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
3dd0: 76 2c 20 22 70 61 67 65 5f 73 69 7a 65 22 2c 20  v, "page_size", 
3de0: 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  size);.    }else
3df0: 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6c 6c 6f  {.      /* Mallo
3e00: 63 20 6d 61 79 20 66 61 69 6c 20 77 68 65 6e 20  c may fail when 
3e10: 73 65 74 74 69 6e 67 20 74 68 65 20 70 61 67 65  setting the page
3e20: 2d 73 69 7a 65 2c 20 61 73 20 74 68 65 72 65 20  -size, as there 
3e30: 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 0a 20  is an internal. 
3e40: 20 20 20 20 20 2a 2a 20 62 75 66 66 65 72 20 74       ** buffer t
3e50: 68 61 74 20 74 68 65 20 70 61 67 65 72 20 6d 6f  hat the pager mo
3e60: 64 75 6c 65 20 72 65 73 69 7a 65 73 20 75 73 69  dule resizes usi
3e70: 6e 67 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c  ng sqlite3_reall
3e80: 6f 63 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  oc()..      */. 
3e90: 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 50 61 67       db->nextPag
3ea0: 65 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41  esize = sqlite3A
3eb0: 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20  toi(zRight);.   
3ec0: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f     if( SQLITE_NO
3ed0: 4d 45 4d 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  MEM==sqlite3Btre
3ee0: 65 53 65 74 50 61 67 65 53 69 7a 65 28 70 42 74  eSetPageSize(pBt
3ef0: 2c 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73 69  , db->nextPagesi
3f00: 7a 65 2c 2d 31 2c 30 29 20 29 7b 0a 20 20 20 20  ze,-1,0) ){.    
3f10: 20 20 20 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61      sqlite3OomFa
3f20: 75 6c 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  ult(db);.      }
3f30: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
3f40: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
3f50: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
3f60: 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a  .]secure_delete.
3f70: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
3f80: 68 65 6d 61 2e 5d 73 65 63 75 72 65 5f 64 65 6c  hema.]secure_del
3f90: 65 74 65 3d 4f 4e 2f 4f 46 46 0a 20 20 2a 2a 0a  ete=ON/OFF.  **.
3fa0: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
3fb0: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
3fc0: 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20  current setting 
3fd0: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73 65 63  for the.  ** sec
3fe0: 75 72 65 5f 64 65 6c 65 74 65 20 66 6c 61 67 2e  ure_delete flag.
3ff0: 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72    The second for
4000: 6d 20 63 68 61 6e 67 65 73 20 74 68 65 20 73 65  m changes the se
4010: 63 75 72 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a  cure_delete.  **
4020: 20 66 6c 61 67 20 73 65 74 74 69 6e 67 20 61 6e   flag setting an
4030: 64 20 72 65 70 6f 72 74 73 20 74 68 65 6e 65 77  d reports thenew
4040: 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20 63   value..  */.  c
4050: 61 73 65 20 50 72 61 67 54 79 70 5f 53 45 43 55  ase PragTyp_SECU
4060: 52 45 5f 44 45 4c 45 54 45 3a 20 7b 0a 20 20 20  RE_DELETE: {.   
4070: 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44   Btree *pBt = pD
4080: 62 2d 3e 70 42 74 3b 0a 20 20 20 20 69 6e 74 20  b->pBt;.    int 
4090: 62 20 3d 20 2d 31 3b 0a 20 20 20 20 61 73 73 65  b = -1;.    asse
40a0: 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20  rt( pBt!=0 );.  
40b0: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
40c0: 20 20 20 20 20 20 62 20 3d 20 73 71 6c 69 74 65        b = sqlite
40d0: 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67  3GetBoolean(zRig
40e0: 68 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20  ht, 0);.    }.  
40f0: 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30    if( pId2->n==0
4100: 20 26 26 20 62 3e 3d 30 20 29 7b 0a 20 20 20 20   && b>=0 ){.    
4110: 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20    int ii;.      
4120: 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d  for(ii=0; ii<db-
4130: 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
4140: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
4150: 65 53 65 63 75 72 65 44 65 6c 65 74 65 28 64 62  eSecureDelete(db
4160: 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 62  ->aDb[ii].pBt, b
4170: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
4180: 0a 20 20 20 20 62 20 3d 20 73 71 6c 69 74 65 33  .    b = sqlite3
4190: 42 74 72 65 65 53 65 63 75 72 65 44 65 6c 65 74  BtreeSecureDelet
41a0: 65 28 70 42 74 2c 20 62 29 3b 0a 20 20 20 20 72  e(pBt, b);.    r
41b0: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76  eturnSingleInt(v
41c0: 2c 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74 65  , "secure_delete
41d0: 22 2c 20 62 29 3b 0a 20 20 20 20 62 72 65 61 6b  ", b);.    break
41e0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
41f0: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
4200: 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74  .]max_page_count
4210: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
4220: 63 68 65 6d 61 2e 5d 6d 61 78 5f 70 61 67 65 5f  chema.]max_page_
4230: 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a  count=N.  **.  *
4240: 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d  * The first form
4250: 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72   reports the cur
4260: 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72  rent setting for
4270: 20 74 68 65 0a 20 20 2a 2a 20 6d 61 78 69 6d 75   the.  ** maximu
4280: 6d 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  m number of page
4290: 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
42a0: 65 20 66 69 6c 65 2e 20 20 54 68 65 20 0a 20 20  e file.  The .  
42b0: 2a 2a 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 61  ** second form a
42c0: 74 74 65 6d 70 74 73 20 74 6f 20 63 68 61 6e 67  ttempts to chang
42d0: 65 20 74 68 69 73 20 73 65 74 74 69 6e 67 2e 20  e this setting. 
42e0: 20 42 6f 74 68 0a 20 20 2a 2a 20 66 6f 72 6d 73   Both.  ** forms
42f0: 20 72 65 74 75 72 6e 20 74 68 65 20 63 75 72 72   return the curr
4300: 65 6e 74 20 73 65 74 74 69 6e 67 2e 0a 20 20 2a  ent setting..  *
4310: 2a 0a 20 20 2a 2a 20 54 68 65 20 61 62 73 6f 6c  *.  ** The absol
4320: 75 74 65 20 76 61 6c 75 65 20 6f 66 20 4e 20 69  ute value of N i
4330: 73 20 75 73 65 64 2e 20 20 54 68 69 73 20 69 73  s used.  This is
4340: 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 61 6e   undocumented an
4350: 64 20 6d 69 67 68 74 0a 20 20 2a 2a 20 63 68 61  d might.  ** cha
4360: 6e 67 65 2e 20 20 54 68 65 20 6f 6e 6c 79 20 70  nge.  The only p
4370: 75 72 70 6f 73 65 20 69 73 20 74 6f 20 70 72 6f  urpose is to pro
4380: 76 69 64 65 20 61 6e 20 65 61 73 79 20 77 61 79  vide an easy way
4390: 20 74 6f 20 74 65 73 74 0a 20 20 2a 2a 20 74 68   to test.  ** th
43a0: 65 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33  e sqlite3AbsInt3
43b0: 32 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20  2() function..  
43c0: 2a 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  **.  **  PRAGMA 
43d0: 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f 63 6f  [schema.]page_co
43e0: 75 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  unt.  **.  ** Re
43f0: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
4400: 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  of pages in the 
4410: 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61  specified databa
4420: 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  se..  */.  case 
4430: 50 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f 55  PragTyp_PAGE_COU
4440: 4e 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 52  NT: {.    int iR
4450: 65 67 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43  eg;.    sqlite3C
4460: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
4470: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
4480: 20 20 69 52 65 67 20 3d 20 2b 2b 70 50 61 72 73    iReg = ++pPars
4490: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 69 66 28  e->nMem;.    if(
44a0: 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28   sqlite3Tolower(
44b0: 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 70 27 20 29  zLeft[0])=='p' )
44c0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
44d0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
44e0: 50 61 67 65 63 6f 75 6e 74 2c 20 69 44 62 2c 20  Pagecount, iDb, 
44f0: 69 52 65 67 29 3b 0a 20 20 20 20 7d 65 6c 73 65  iReg);.    }else
4500: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
4510: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
4520: 4d 61 78 50 67 63 6e 74 2c 20 69 44 62 2c 20 69  MaxPgcnt, iDb, i
4530: 52 65 67 2c 20 0a 20 20 20 20 20 20 20 20 20 20  Reg, .          
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
4550: 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 73 71  lite3AbsInt32(sq
4560: 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
4570: 29 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  )));.    }.    s
4580: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
4590: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
45a0: 2c 20 69 52 65 67 2c 20 31 29 3b 0a 20 20 20 20  , iReg, 1);.    
45b0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
45c0: 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
45d0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
45e0: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
45f0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74  NAME_NAME, zLeft
4600: 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
4610: 4e 54 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  NT);.    break;.
4620: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
4630: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
4640: 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20 2a  locking_mode.  *
4650: 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d  *  PRAGMA [schem
4660: 61 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 20  a.]locking_mode 
4670: 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c 75 73  = (normal|exclus
4680: 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ive).  */.  case
4690: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e 47   PragTyp_LOCKING
46a0: 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 63 6f 6e  _MODE: {.    con
46b0: 73 74 20 63 68 61 72 20 2a 7a 52 65 74 20 3d 20  st char *zRet = 
46c0: 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20 20 69 6e  "normal";.    in
46d0: 74 20 65 4d 6f 64 65 20 3d 20 67 65 74 4c 6f 63  t eMode = getLoc
46e0: 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67 68 74 29  kingMode(zRight)
46f0: 3b 0a 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d  ;..    if( pId2-
4700: 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64 65 3d 3d  >n==0 && eMode==
4710: 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44  PAGER_LOCKINGMOD
4720: 45 5f 51 55 45 52 59 20 29 7b 0a 20 20 20 20 20  E_QUERY ){.     
4730: 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50 52 41 47   /* Simple "PRAG
4740: 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 3b  MA locking_mode;
4750: 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69  " statement. Thi
4760: 73 20 69 73 20 61 20 71 75 65 72 79 20 66 6f 72  s is a query for
4770: 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 75  .      ** the cu
4780: 72 72 65 6e 74 20 64 65 66 61 75 6c 74 20 6c 6f  rrent default lo
4790: 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77 68 69 63  cking mode (whic
47a0: 68 20 6d 61 79 20 62 65 20 64 69 66 66 65 72 65  h may be differe
47b0: 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 74  nt to.      ** t
47c0: 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20  he locking-mode 
47d0: 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  of the main data
47e0: 62 61 73 65 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  base)..      */.
47f0: 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 64 62        eMode = db
4800: 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 0a  ->dfltLockMode;.
4810: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4820: 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 0a   Pager *pPager;.
4830: 20 20 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e        if( pId2->
4840: 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  n==0 ){.        
4850: 2f 2a 20 54 68 69 73 20 69 6e 64 69 63 61 74 65  /* This indicate
4860: 73 20 74 68 61 74 20 6e 6f 20 64 61 74 61 62 61  s that no databa
4870: 73 65 20 6e 61 6d 65 20 77 61 73 20 73 70 65 63  se name was spec
4880: 69 66 69 65 64 20 61 73 20 70 61 72 74 0a 20 20  ified as part.  
4890: 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20        ** of the 
48a0: 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 2e 20  PRAGMA command. 
48b0: 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
48c0: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6d 75   locking-mode mu
48d0: 73 74 20 62 65 0a 20 20 20 20 20 20 20 20 2a 2a  st be.        **
48e0: 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61 74 74 61   set on all atta
48f0: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2c 20  ched databases, 
4900: 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65 20 6d  as well as the m
4910: 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a 20 20 20  ain db file..   
4920: 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 20 20       **.        
4930: 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20 73 71 6c  ** Also, the sql
4940: 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d 6f 64  ite3.dfltLockMod
4950: 65 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  e variable is se
4960: 74 20 73 6f 20 74 68 61 74 0a 20 20 20 20 20 20  t so that.      
4970: 20 20 2a 2a 20 61 6e 79 20 73 75 62 73 65 71 75    ** any subsequ
4980: 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 20 64  ently attached d
4990: 61 74 61 62 61 73 65 73 20 61 6c 73 6f 20 75 73  atabases also us
49a0: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 0a  e the specified.
49b0: 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f 63 6b 69          ** locki
49c0: 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20 20 20 20  ng mode..       
49d0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74 20   */.        int 
49e0: 69 69 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  ii;.        asse
49f0: 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e 61 44 62  rt(pDb==&db->aDb
4a00: 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  [0]);.        fo
4a10: 72 28 69 69 3d 32 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=2; ii<db->n
4a20: 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
4a30: 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73 71       pPager = sq
4a40: 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
4a50: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 29  db->aDb[ii].pBt)
4a60: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
4a70: 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d  te3PagerLockingM
4a80: 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f 64  ode(pPager, eMod
4a90: 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  e);.        }.  
4aa0: 20 20 20 20 20 20 64 62 2d 3e 64 66 6c 74 4c 6f        db->dfltLo
4ab0: 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29 65 4d 6f  ckMode = (u8)eMo
4ac0: 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  de;.      }.    
4ad0: 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74    pPager = sqlit
4ae0: 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62  e3BtreePager(pDb
4af0: 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 65 4d  ->pBt);.      eM
4b00: 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67  ode = sqlite3Pag
4b10: 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50  erLockingMode(pP
4b20: 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20  ager, eMode);.  
4b30: 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28    }..    assert(
4b40: 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f   eMode==PAGER_LO
4b50: 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41 4c  CKINGMODE_NORMAL
4b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20  .            || 
4b70: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43  eMode==PAGER_LOC
4b80: 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49  KINGMODE_EXCLUSI
4b90: 56 45 20 29 3b 0a 20 20 20 20 69 66 28 20 65 4d  VE );.    if( eM
4ba0: 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49  ode==PAGER_LOCKI
4bb0: 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56 45  NGMODE_EXCLUSIVE
4bc0: 20 29 7b 0a 20 20 20 20 20 20 7a 52 65 74 20 3d   ){.      zRet =
4bd0: 20 22 65 78 63 6c 75 73 69 76 65 22 3b 0a 20 20   "exclusive";.  
4be0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69    }.    returnSi
4bf0: 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 6c 6f 63  ngleText(v, "loc
4c00: 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 7a 52 65 74  king_mode", zRet
4c10: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
4c20: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  }..  /*.  **  PR
4c30: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6a 6f  AGMA [schema.]jo
4c40: 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a 2a 20  urnal_mode.  ** 
4c50: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
4c60: 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 0a  ]journal_mode =.
4c70: 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20    **            
4c80: 20 20 20 20 20 20 20 20 20 20 28 64 65 6c 65 74            (delet
4c90: 65 7c 70 65 72 73 69 73 74 7c 6f 66 66 7c 74 72  e|persist|off|tr
4ca0: 75 6e 63 61 74 65 7c 6d 65 6d 6f 72 79 7c 77 61  uncate|memory|wa
4cb0: 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20 20 63 61  l|off).  */.  ca
4cc0: 73 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e  se PragTyp_JOURN
4cd0: 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 69  AL_MODE: {.    i
4ce0: 6e 74 20 65 4d 6f 64 65 3b 20 20 20 20 20 20 20  nt eMode;       
4cf0: 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 50   /* One of the P
4d00: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
4d10: 5f 58 58 58 20 73 79 6d 62 6f 6c 73 20 2a 2f 0a  _XXX symbols */.
4d20: 20 20 20 20 69 6e 74 20 69 69 3b 20 20 20 20 20      int ii;     
4d30: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
4d40: 75 6e 74 65 72 20 2a 2f 0a 0a 20 20 20 20 73 65  unter */..    se
4d50: 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76  tOneColumnName(v
4d60: 2c 20 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22  , "journal_mode"
4d70: 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  );.    if( zRigh
4d80: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  t==0 ){.      /*
4d90: 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
4da0: 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 6f 66 20  "=MODE" part of 
4db0: 74 68 65 20 70 72 61 67 6d 61 2c 20 64 6f 20 61  the pragma, do a
4dc0: 20 71 75 65 72 79 20 66 6f 72 20 74 68 65 0a 20   query for the. 
4dd0: 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 20       ** current 
4de0: 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20 65 4d  mode */.      eM
4df0: 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55 52  ode = PAGER_JOUR
4e00: 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 20  NALMODE_QUERY;. 
4e10: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
4e20: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 6f 64  const char *zMod
4e30: 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d  e;.      int n =
4e40: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
4e50: 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20  (zRight);.      
4e60: 66 6f 72 28 65 4d 6f 64 65 3d 30 3b 20 28 7a 4d  for(eMode=0; (zM
4e70: 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 4a 6f 75  ode = sqlite3Jou
4e80: 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4d 6f  rnalModename(eMo
4e90: 64 65 29 29 21 3d 30 3b 20 65 4d 6f 64 65 2b 2b  de))!=0; eMode++
4ea0: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  ){.        if( s
4eb0: 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a  qlite3StrNICmp(z
4ec0: 52 69 67 68 74 2c 20 7a 4d 6f 64 65 2c 20 6e 29  Right, zMode, n)
4ed0: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
4ee0: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 21     }.      if( !
4ef0: 7a 4d 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 20  zMode ){.       
4f00: 20 2f 2a 20 49 66 20 74 68 65 20 22 3d 4d 4f 44   /* If the "=MOD
4f10: 45 22 20 70 61 72 74 20 64 6f 65 73 20 6e 6f 74  E" part does not
4f20: 20 6d 61 74 63 68 20 61 6e 79 20 6b 6e 6f 77 6e   match any known
4f30: 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 0a 20   journal mode,. 
4f40: 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 64         ** then d
4f50: 6f 20 61 20 71 75 65 72 79 20 2a 2f 0a 20 20 20  o a query */.   
4f60: 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50 41 47       eMode = PAG
4f70: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
4f80: 55 45 52 59 3b 0a 20 20 20 20 20 20 7d 0a 20 20  UERY;.      }.  
4f90: 20 20 7d 0a 20 20 20 20 69 66 28 20 65 4d 6f 64    }.    if( eMod
4fa0: 65 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  e==PAGER_JOURNAL
4fb0: 4d 4f 44 45 5f 51 55 45 52 59 20 26 26 20 70 49  MODE_QUERY && pI
4fc0: 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20  d2->n==0 ){.    
4fd0: 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 22 50 52    /* Convert "PR
4fe0: 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  AGMA journal_mod
4ff0: 65 22 20 69 6e 74 6f 20 22 50 52 41 47 4d 41 20  e" into "PRAGMA 
5000: 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  main.journal_mod
5010: 65 22 20 2a 2f 0a 20 20 20 20 20 20 69 44 62 20  e" */.      iDb 
5020: 3d 20 30 3b 0a 20 20 20 20 20 20 70 49 64 32 2d  = 0;.      pId2-
5030: 3e 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  >n = 1;.    }.  
5040: 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62    for(ii=db->nDb
5050: 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29  -1; ii>=0; ii--)
5060: 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  {.      if( db->
5070: 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26 20 28  aDb[ii].pBt && (
5080: 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d  ii==iDb || pId2-
5090: 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20 20  >n==0) ){.      
50a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65    sqlite3VdbeUse
50b0: 73 42 74 72 65 65 28 76 2c 20 69 69 29 3b 0a 20  sBtree(v, ii);. 
50c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
50d0: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4a  beAddOp3(v, OP_J
50e0: 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20 69 69 2c 20  ournalMode, ii, 
50f0: 31 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20  1, eMode);.     
5100: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c   }.    }.    sql
5110: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
5120: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
5130: 31 2c 20 31 29 3b 0a 20 20 20 20 62 72 65 61 6b  1, 1);.    break
5140: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
5150: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
5160: 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c  .]journal_size_l
5170: 69 6d 69 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d  imit.  **  PRAGM
5180: 41 20 5b 73 63 68 65 6d 61 2e 5d 6a 6f 75 72 6e  A [schema.]journ
5190: 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d 4e 0a  al_size_limit=N.
51a0: 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72    **.  ** Get or
51b0: 20 73 65 74 20 74 68 65 20 73 69 7a 65 20 6c 69   set the size li
51c0: 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20  mit on rollback 
51d0: 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e 0a 20  journal files.. 
51e0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
51f0: 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a 45 5f  yp_JOURNAL_SIZE_
5200: 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50 61 67  LIMIT: {.    Pag
5210: 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c  er *pPager = sql
5220: 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
5230: 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 69 36  Db->pBt);.    i6
5240: 34 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b 0a 20  4 iLimit = -2;. 
5250: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
5260: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 65  .      sqlite3De
5270: 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67  cOrHexToI64(zRig
5280: 68 74 2c 20 26 69 4c 69 6d 69 74 29 3b 0a 20 20  ht, &iLimit);.  
5290: 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c 2d      if( iLimit<-
52a0: 31 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b  1 ) iLimit = -1;
52b0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 4c 69 6d 69  .    }.    iLimi
52c0: 74 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  t = sqlite3Pager
52d0: 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d 69 74  JournalSizeLimit
52e0: 28 70 50 61 67 65 72 2c 20 69 4c 69 6d 69 74 29  (pPager, iLimit)
52f0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  ;.    returnSing
5300: 6c 65 49 6e 74 28 76 2c 20 22 6a 6f 75 72 6e 61  leInt(v, "journa
5310: 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c 20 69  l_size_limit", i
5320: 4c 69 6d 69 74 29 3b 0a 20 20 20 20 62 72 65 61  Limit);.    brea
5330: 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66 20 2f  k;.  }..#endif /
5340: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  * SQLITE_OMIT_PA
5350: 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  GER_PRAGMAS */..
5360: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
5370: 41 20 5b 73 63 68 65 6d 61 2e 5d 61 75 74 6f 5f  A [schema.]auto_
5380: 76 61 63 75 75 6d 0a 20 20 2a 2a 20 20 50 52 41  vacuum.  **  PRA
5390: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 75 74  GMA [schema.]aut
53a0: 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a 2a 0a  o_vacuum=N.  **.
53b0: 20 20 2a 2a 20 47 65 74 20 6f 72 20 73 65 74 20    ** Get or set 
53c0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
53d0: 20 64 61 74 61 62 61 73 65 20 27 61 75 74 6f 2d   database 'auto-
53e0: 76 61 63 75 75 6d 27 20 70 61 72 61 6d 65 74 65  vacuum' paramete
53f0: 72 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61 6c 75  r..  ** The valu
5400: 65 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20 30 20  e is one of:  0 
5410: 4e 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20 49 4e  NONE 1 FULL 2 IN
5420: 43 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f 0a 23  CREMENTAL.  */.#
5430: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
5440: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
5450: 63 61 73 65 20 50 72 61 67 54 79 70 5f 41 55 54  case PragTyp_AUT
5460: 4f 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20  O_VACUUM: {.    
5470: 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62  Btree *pBt = pDb
5480: 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72  ->pBt;.    asser
5490: 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20  t( pBt!=0 );.   
54a0: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
54b0: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
54c0: 6c 65 49 6e 74 28 76 2c 20 22 61 75 74 6f 5f 76  leInt(v, "auto_v
54d0: 61 63 75 75 6d 22 2c 20 73 71 6c 69 74 65 33 42  acuum", sqlite3B
54e0: 74 72 65 65 47 65 74 41 75 74 6f 56 61 63 75 75  treeGetAutoVacuu
54f0: 6d 28 70 42 74 29 29 3b 0a 20 20 20 20 7d 65 6c  m(pBt));.    }el
5500: 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 65 41  se{.      int eA
5510: 75 74 6f 20 3d 20 67 65 74 41 75 74 6f 56 61 63  uto = getAutoVac
5520: 75 75 6d 28 7a 52 69 67 68 74 29 3b 0a 20 20 20  uum(zRight);.   
5530: 20 20 20 61 73 73 65 72 74 28 20 65 41 75 74 6f     assert( eAuto
5540: 3e 3d 30 20 26 26 20 65 41 75 74 6f 3c 3d 32 20  >=0 && eAuto<=2 
5550: 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78  );.      db->nex
5560: 74 41 75 74 6f 76 61 63 20 3d 20 28 75 38 29 65  tAutovac = (u8)e
5570: 41 75 74 6f 3b 0a 20 20 20 20 20 20 2f 2a 20 43  Auto;.      /* C
5580: 61 6c 6c 20 53 65 74 41 75 74 6f 56 61 63 75 75  all SetAutoVacuu
5590: 6d 28 29 20 74 6f 20 73 65 74 20 69 6e 69 74 69  m() to set initi
55a0: 61 6c 69 7a 65 20 74 68 65 20 69 6e 74 65 72 6e  alize the intern
55b0: 61 6c 20 61 75 74 6f 20 61 6e 64 0a 20 20 20 20  al auto and.    
55c0: 20 20 2a 2a 20 69 6e 63 72 2d 76 61 63 75 75 6d    ** incr-vacuum
55d0: 20 66 6c 61 67 73 2e 20 54 68 69 73 20 69 73 20   flags. This is 
55e0: 72 65 71 75 69 72 65 64 20 69 6e 20 63 61 73 65  required in case
55f0: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
5600: 0a 20 20 20 20 20 20 2a 2a 20 63 72 65 61 74 65  .      ** create
5610: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
5620: 69 6c 65 2e 20 49 74 20 69 73 20 69 6d 70 6f 72  ile. It is impor
5630: 74 61 6e 74 20 74 68 61 74 20 69 74 20 69 73 20  tant that it is 
5640: 63 72 65 61 74 65 64 0a 20 20 20 20 20 20 2a 2a  created.      **
5650: 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75   as an auto-vacu
5660: 75 6d 20 63 61 70 61 62 6c 65 20 64 62 2e 0a 20  um capable db.. 
5670: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 63       */.      rc
5680: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
5690: 65 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74  etAutoVacuum(pBt
56a0: 2c 20 65 41 75 74 6f 29 3b 0a 20 20 20 20 20 20  , eAuto);.      
56b0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
56c0: 4b 20 26 26 20 28 65 41 75 74 6f 3d 3d 31 20 7c  K && (eAuto==1 |
56d0: 7c 20 65 41 75 74 6f 3d 3d 32 29 20 29 7b 0a 20  | eAuto==2) ){. 
56e0: 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 73         /* When s
56f0: 65 74 74 69 6e 67 20 74 68 65 20 61 75 74 6f 5f  etting the auto_
5700: 76 61 63 75 75 6d 20 6d 6f 64 65 20 74 6f 20 65  vacuum mode to e
5710: 69 74 68 65 72 20 22 66 75 6c 6c 22 20 6f 72 20  ither "full" or 
5720: 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 69 6e 63  .        ** "inc
5730: 72 65 6d 65 6e 74 61 6c 22 2c 20 77 72 69 74 65  remental", write
5740: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 6d 65   the value of me
5750: 74 61 5b 36 5d 20 69 6e 20 74 68 65 20 64 61 74  ta[6] in the dat
5760: 61 62 61 73 65 0a 20 20 20 20 20 20 20 20 2a 2a  abase.        **
5770: 20 66 69 6c 65 2e 20 42 65 66 6f 72 65 20 77 72   file. Before wr
5780: 69 74 69 6e 67 20 74 6f 20 6d 65 74 61 5b 36 5d  iting to meta[6]
5790: 2c 20 63 68 65 63 6b 20 74 68 61 74 20 6d 65 74  , check that met
57a0: 61 5b 33 5d 20 69 6e 64 69 63 61 74 65 73 0a 20  a[3] indicates. 
57b0: 20 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74         ** that t
57c0: 68 69 73 20 72 65 61 6c 6c 79 20 69 73 20 61 6e  his really is an
57d0: 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 63 61 70   auto-vacuum cap
57e0: 61 62 6c 65 20 64 61 74 61 62 61 73 65 2e 0a 20  able database.. 
57f0: 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
5800: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69    static const i
5810: 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46  nt iLn = VDBE_OF
5820: 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a  FSET_LINENO(2);.
5830: 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63          static c
5840: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
5850: 73 65 74 4d 65 74 61 36 5b 5d 20 3d 20 7b 0a 20  setMeta6[] = {. 
5860: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72           { OP_Tr
5870: 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c  ansaction,    0,
5880: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
5890: 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20              0}, 
58a0: 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
58b0: 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f       { OP_ReadCo
58c0: 6f 6b 69 65 2c 20 20 20 20 20 30 2c 20 20 20 20  okie,     0,    
58d0: 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20 20       1,         
58e0: 42 54 52 45 45 5f 4c 41 52 47 45 53 54 5f 52 4f  BTREE_LARGEST_RO
58f0: 4f 54 5f 50 41 47 45 7d 2c 0a 20 20 20 20 20 20  OT_PAGE},.      
5900: 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20      { OP_If,    
5910: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
5920: 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 20      0,          
5930: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
5940: 20 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   2 */.          
5950: 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20 20 20  { OP_Halt,      
5960: 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 2c 20       SQLITE_OK, 
5970: 4f 45 5f 41 62 6f 72 74 2c 20 20 20 20 20 20 20  OE_Abort,       
5980: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a     0},    /* 3 *
5990: 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50  /.          { OP
59a0: 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20  _SetCookie,     
59b0: 20 30 2c 20 20 20 20 20 20 20 20 20 42 54 52 45   0,         BTRE
59c0: 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c 20 30  E_INCR_VACUUM, 0
59d0: 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20  },    /* 4 */.  
59e0: 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20        };.       
59f0: 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20   VdbeOp *aOp;.  
5a00: 20 20 20 20 20 20 69 6e 74 20 69 41 64 64 72 20        int iAddr 
5a10: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
5a20: 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20  rentAddr(v);.   
5a30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5a40: 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52 65  VerifyNoMallocRe
5a50: 71 75 69 72 65 64 28 76 2c 20 41 72 72 61 79 53  quired(v, ArrayS
5a60: 69 7a 65 28 73 65 74 4d 65 74 61 36 29 29 3b 0a  ize(setMeta6));.
5a70: 20 20 20 20 20 20 20 20 61 4f 70 20 3d 20 73 71          aOp = sq
5a80: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
5a90: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
5aa0: 73 65 74 4d 65 74 61 36 29 2c 20 73 65 74 4d 65  setMeta6), setMe
5ab0: 74 61 36 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20  ta6, iLn);.     
5ac0: 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52     if( ONLY_IF_R
5ad0: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f  EALLOC_STRESS(aO
5ae0: 70 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a 20  p==0) ) break;. 
5af0: 20 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31         aOp[0].p1
5b00: 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 20 20   = iDb;.        
5b10: 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44 62 3b  aOp[1].p1 = iDb;
5b20: 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 32 5d 2e  .        aOp[2].
5b30: 70 32 20 3d 20 69 41 64 64 72 2b 34 3b 0a 20 20  p2 = iAddr+4;.  
5b40: 20 20 20 20 20 20 61 4f 70 5b 34 5d 2e 70 31 20        aOp[4].p1 
5b50: 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 20 20 61  = iDb;.        a
5b60: 4f 70 5b 34 5d 2e 70 33 20 3d 20 65 41 75 74 6f  Op[4].p3 = eAuto
5b70: 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 73 71   - 1;.        sq
5b80: 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72  lite3VdbeUsesBtr
5b90: 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20  ee(v, iDb);.    
5ba0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72    }.    }.    br
5bb0: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
5bc0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
5bd0: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69 6e 63 72  MA [schema.]incr
5be0: 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 28 4e  emental_vacuum(N
5bf0: 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20 4e  ).  **.  ** Do N
5c00: 20 73 74 65 70 73 20 6f 66 20 69 6e 63 72 65 6d   steps of increm
5c10: 65 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e 67 20  ental vacuuming 
5c20: 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2e 0a 20  on a database.. 
5c30: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
5c40: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
5c50: 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  UM.  case PragTy
5c60: 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41  p_INCREMENTAL_VA
5c70: 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e 74 20  CUUM: {.    int 
5c80: 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a 20 20  iLimit, addr;.  
5c90: 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20    if( zRight==0 
5ca0: 7c 7c 20 21 73 71 6c 69 74 65 33 47 65 74 49 6e  || !sqlite3GetIn
5cb0: 74 33 32 28 7a 52 69 67 68 74 2c 20 26 69 4c 69  t32(zRight, &iLi
5cc0: 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74 3c 3d  mit) || iLimit<=
5cd0: 30 20 29 7b 0a 20 20 20 20 20 20 69 4c 69 6d 69  0 ){.      iLimi
5ce0: 74 20 3d 20 30 78 37 66 66 66 66 66 66 66 3b 0a  t = 0x7fffffff;.
5cf0: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
5d00: 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61  3BeginWriteOpera
5d10: 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c 20  tion(pParse, 0, 
5d20: 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  iDb);.    sqlite
5d30: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
5d40: 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69 6d 69  P_Integer, iLimi
5d50: 74 2c 20 31 29 3b 0a 20 20 20 20 61 64 64 72 20  t, 1);.    addr 
5d60: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
5d70: 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72 56 61  Op1(v, OP_IncrVa
5d80: 63 75 75 6d 2c 20 69 44 62 29 3b 20 56 64 62 65  cuum, iDb); Vdbe
5d90: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
5da0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5db0: 70 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p1(v, OP_ResultR
5dc0: 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69  ow, 1);.    sqli
5dd0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
5de0: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
5df0: 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  1);.    sqlite3V
5e00: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
5e10: 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 29 3b  IfPos, 1, addr);
5e20: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
5e30: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
5e40: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64  eJumpHere(v, add
5e50: 72 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  r);.    break;. 
5e60: 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64   }.#endif..#ifnd
5e70: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
5e80: 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20 2f  AGER_PRAGMAS.  /
5e90: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
5ea0: 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73 69  schema.]cache_si
5eb0: 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  ze.  **  PRAGMA 
5ec0: 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73  [schema.]cache_s
5ed0: 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ize=N.  **.  ** 
5ee0: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
5ef0: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
5f00: 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67  nt local setting
5f10: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61   for the.  ** pa
5f20: 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20 54  ge cache size. T
5f30: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73  he second form s
5f40: 65 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20  ets the local.  
5f50: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
5f60: 7a 65 20 76 61 6c 75 65 2e 20 20 49 66 20 4e 20  ze value.  If N 
5f70: 69 73 20 70 6f 73 69 74 69 76 65 20 74 68 65 6e  is positive then
5f80: 20 74 68 61 74 20 69 73 20 74 68 65 0a 20 20 2a   that is the.  *
5f90: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * number of page
5fa0: 73 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e 20  s in the cache. 
5fb0: 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76   If N is negativ
5fc0: 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a  e, then the.  **
5fd0: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5fe0: 20 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f 20   is adjusted so 
5ff0: 74 68 61 74 20 74 68 65 20 63 61 63 68 65 20 75  that the cache u
6000: 73 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65 73  ses -N kibibytes
6010: 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79 2e  .  ** of memory.
6020: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
6030: 67 54 79 70 5f 43 41 43 48 45 5f 53 49 5a 45 3a  gTyp_CACHE_SIZE:
6040: 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73   {.    assert( s
6050: 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
6060: 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
6070: 29 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52  ) );.    if( !zR
6080: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65  ight ){.      re
6090: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c  turnSingleInt(v,
60a0: 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 70   "cache_size", p
60b0: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
60c0: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65  he_size);.    }e
60d0: 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73  lse{.      int s
60e0: 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74 6f  ize = sqlite3Ato
60f0: 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  i(zRight);.     
6100: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63   pDb->pSchema->c
6110: 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65  ache_size = size
6120: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
6130: 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65  treeSetCacheSize
6140: 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e  (pDb->pBt, pDb->
6150: 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73  pSchema->cache_s
6160: 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ize);.    }.    
6170: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
6180: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
6190: 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73 70 69  chema.]cache_spi
61a0: 6c 6c 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  ll.  **  PRAGMA 
61b0: 63 61 63 68 65 5f 73 70 69 6c 6c 3d 42 4f 4f 4c  cache_spill=BOOL
61c0: 45 41 4e 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  EAN.  **  PRAGMA
61d0: 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f   [schema.]cache_
61e0: 73 70 69 6c 6c 3d 4e 0a 20 20 2a 2a 0a 20 20 2a  spill=N.  **.  *
61f0: 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d  * The first form
6200: 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72   reports the cur
6210: 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69  rent local setti
6220: 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ng for the.  ** 
6230: 70 61 67 65 20 63 61 63 68 65 20 73 70 69 6c 6c  page cache spill
6240: 20 73 69 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e   size. The secon
6250: 64 20 66 6f 72 6d 20 74 75 72 6e 73 20 63 61 63  d form turns cac
6260: 68 65 20 73 70 69 6c 6c 20 6f 6e 0a 20 20 2a 2a  he spill on.  **
6270: 20 6f 72 20 6f 66 66 2e 20 20 57 68 65 6e 20 74   or off.  When t
6280: 75 72 6e 6e 69 6e 67 20 63 61 63 68 65 20 73 70  urnning cache sp
6290: 69 6c 6c 20 6f 6e 2c 20 74 68 65 20 73 69 7a 65  ill on, the size
62a0: 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 0a 20   is set to the. 
62b0: 20 2a 2a 20 63 75 72 72 65 6e 74 20 63 61 63 68   ** current cach
62c0: 65 5f 73 69 7a 65 2e 20 20 54 68 65 20 74 68 69  e_size.  The thi
62d0: 72 64 20 66 6f 72 6d 20 73 65 74 73 20 61 20 73  rd form sets a s
62e0: 70 69 6c 6c 20 73 69 7a 65 20 74 68 61 74 0a 20  pill size that. 
62f0: 20 2a 2a 20 6d 61 79 20 62 65 20 64 69 66 66 65   ** may be diffe
6300: 72 65 6e 74 20 66 6f 72 6d 20 74 68 65 20 63 61  rent form the ca
6310: 63 68 65 20 73 69 7a 65 2e 0a 20 20 2a 2a 20 49  che size..  ** I
6320: 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65 20  f N is positive 
6330: 74 68 65 6e 20 74 68 61 74 20 69 73 20 74 68 65  then that is the
6340: 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  .  ** number of 
6350: 70 61 67 65 73 20 69 6e 20 74 68 65 20 63 61 63  pages in the cac
6360: 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67  he.  If N is neg
6370: 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65 0a  ative, then the.
6380: 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70    ** number of p
6390: 61 67 65 73 20 69 73 20 61 64 6a 75 73 74 65 64  ages is adjusted
63a0: 20 73 6f 20 74 68 61 74 20 74 68 65 20 63 61 63   so that the cac
63b0: 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69 62  he uses -N kibib
63c0: 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d  ytes.  ** of mem
63d0: 6f 72 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  ory..  **.  ** I
63e0: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  f the number of 
63f0: 63 61 63 68 65 5f 73 70 69 6c 6c 20 70 61 67 65  cache_spill page
6400: 73 20 69 73 20 6c 65 73 73 20 74 68 65 6e 20 74  s is less then t
6410: 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a  he number of.  *
6420: 2a 20 63 61 63 68 65 5f 73 69 7a 65 20 70 61 67  * cache_size pag
6430: 65 73 2c 20 6e 6f 20 73 70 69 6c 6c 69 6e 67 20  es, no spilling 
6440: 6f 63 63 75 72 73 20 75 6e 74 69 6c 20 74 68 65  occurs until the
6450: 20 70 61 67 65 20 63 6f 75 6e 74 20 65 78 63 65   page count exce
6460: 65 64 73 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d  eds.  ** the num
6470: 62 65 72 20 6f 66 20 63 61 63 68 65 5f 73 69 7a  ber of cache_siz
6480: 65 20 70 61 67 65 73 2e 0a 20 20 2a 2a 0a 20 20  e pages..  **.  
6490: 2a 2a 20 54 68 65 20 63 61 63 68 65 5f 73 70 69  ** The cache_spi
64a0: 6c 6c 3d 42 4f 4f 4c 45 41 4e 20 73 65 74 74 69  ll=BOOLEAN setti
64b0: 6e 67 20 61 70 70 6c 69 65 73 20 74 6f 20 61 6c  ng applies to al
64c0: 6c 20 61 74 74 61 63 68 65 64 20 73 63 68 65 6d  l attached schem
64d0: 61 73 2c 0a 20 20 2a 2a 20 6e 6f 74 20 6a 75 73  as,.  ** not jus
64e0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 73 70 65  t the schema spe
64f0: 63 69 66 69 65 64 2e 0a 20 20 2a 2f 0a 20 20 63  cified..  */.  c
6500: 61 73 65 20 50 72 61 67 54 79 70 5f 43 41 43 48  ase PragTyp_CACH
6510: 45 5f 53 50 49 4c 4c 3a 20 7b 0a 20 20 20 20 61  E_SPILL: {.    a
6520: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
6530: 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
6540: 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
6550: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
6560: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
6570: 6c 65 49 6e 74 28 76 2c 20 22 63 61 63 68 65 5f  leInt(v, "cache_
6580: 73 70 69 6c 6c 22 2c 20 0a 20 20 20 20 20 20 20  spill", .       
6590: 20 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53    (db->flags & S
65a0: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
65b0: 29 3d 3d 30 20 3f 20 30 20 3a 20 0a 20 20 20 20  )==0 ? 0 : .    
65c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42          sqlite3B
65d0: 74 72 65 65 53 65 74 53 70 69 6c 6c 53 69 7a 65  treeSetSpillSize
65e0: 28 70 44 62 2d 3e 70 42 74 2c 30 29 29 3b 0a 20  (pDb->pBt,0));. 
65f0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
6600: 69 6e 74 20 73 69 7a 65 20 3d 20 31 3b 0a 20 20  int size = 1;.  
6610: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
6620: 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20  etInt32(zRight, 
6630: 26 73 69 7a 65 29 20 29 7b 0a 20 20 20 20 20 20  &size) ){.      
6640: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
6650: 74 53 70 69 6c 6c 53 69 7a 65 28 70 44 62 2d 3e  tSpillSize(pDb->
6660: 70 42 74 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20  pBt, size);.    
6670: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 73 71    }.      if( sq
6680: 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
6690: 7a 52 69 67 68 74 2c 20 73 69 7a 65 21 3d 30 29  zRight, size!=0)
66a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   ){.        db->
66b0: 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
66c0: 43 61 63 68 65 53 70 69 6c 6c 3b 0a 20 20 20 20  CacheSpill;.    
66d0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
66e0: 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53   db->flags &= ~S
66f0: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
6700: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
6710: 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73  setAllPagerFlags
6720: 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  (db);.    }.    
6730: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
6740: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
6750: 63 68 65 6d 61 2e 5d 6d 6d 61 70 5f 73 69 7a 65  chema.]mmap_size
6760: 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 55 73  (N).  **.  ** Us
6770: 65 64 20 74 6f 20 73 65 74 20 6d 61 70 70 69 6e  ed to set mappin
6780: 67 20 73 69 7a 65 20 6c 69 6d 69 74 2e 20 54 68  g size limit. Th
6790: 65 20 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c  e mapping size l
67a0: 69 6d 69 74 20 69 73 0a 20 20 2a 2a 20 75 73 65  imit is.  ** use
67b0: 64 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 61  d to limit the a
67c0: 67 67 72 65 67 61 74 65 20 73 69 7a 65 20 6f 66  ggregate size of
67d0: 20 61 6c 6c 20 6d 65 6d 6f 72 79 20 6d 61 70 70   all memory mapp
67e0: 65 64 20 72 65 67 69 6f 6e 73 20 6f 66 20 74 68  ed regions of th
67f0: 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20  e.  ** database 
6800: 66 69 6c 65 2e 20 49 66 20 74 68 69 73 20 70 61  file. If this pa
6810: 72 61 6d 65 74 65 72 20 69 73 20 73 65 74 20 74  rameter is set t
6820: 6f 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6d 65 6d  o zero, then mem
6830: 6f 72 79 20 6d 61 70 70 69 6e 67 0a 20 20 2a 2a  ory mapping.  **
6840: 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20   is not used at 
6850: 61 6c 6c 2e 20 20 49 66 20 4e 20 69 73 20 6e 65  all.  If N is ne
6860: 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65  gative, then the
6870: 20 64 65 66 61 75 6c 74 20 6d 65 6d 6f 72 79 20   default memory 
6880: 6d 61 70 0a 20 20 2a 2a 20 6c 69 6d 69 74 20 64  map.  ** limit d
6890: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 73 71 6c  etermined by sql
68a0: 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49  ite3_config(SQLI
68b0: 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53  TE_CONFIG_MMAP_S
68c0: 49 5a 45 29 20 69 73 20 73 65 74 2e 0a 20 20 2a  IZE) is set..  *
68d0: 2a 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20  * The parameter 
68e0: 4e 20 69 73 20 6d 65 61 73 75 72 65 64 20 69 6e  N is measured in
68f0: 20 62 79 74 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a   bytes..  **.  *
6900: 2a 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20  * This value is 
6910: 61 64 76 69 73 6f 72 79 2e 20 20 54 68 65 20 75  advisory.  The u
6920: 6e 64 65 72 6c 79 69 6e 67 20 56 46 53 20 69 73  nderlying VFS is
6930: 20 66 72 65 65 20 74 6f 20 6d 65 6d 6f 72 79 20   free to memory 
6940: 6d 61 70 0a 20 20 2a 2a 20 61 73 20 6c 69 74 74  map.  ** as litt
6950: 6c 65 20 6f 72 20 61 73 20 6d 75 63 68 20 61 73  le or as much as
6960: 20 69 74 20 77 61 6e 74 73 2e 20 20 45 78 63 65   it wants.  Exce
6970: 70 74 2c 20 69 66 20 4e 20 69 73 20 73 65 74 20  pt, if N is set 
6980: 74 6f 20 30 20 74 68 65 6e 20 74 68 65 0a 20 20  to 0 then the.  
6990: 2a 2a 20 75 70 70 65 72 20 6c 61 79 65 72 73 20  ** upper layers 
69a0: 77 69 6c 6c 20 6e 65 76 65 72 20 69 6e 76 6f 6b  will never invok
69b0: 65 20 74 68 65 20 78 46 65 74 63 68 20 69 6e 74  e the xFetch int
69c0: 65 72 66 61 63 65 73 20 74 6f 20 74 68 65 20 56  erfaces to the V
69d0: 46 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  FS..  */.  case 
69e0: 50 72 61 67 54 79 70 5f 4d 4d 41 50 5f 53 49 5a  PragTyp_MMAP_SIZ
69f0: 45 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  E: {.    sqlite3
6a00: 5f 69 6e 74 36 34 20 73 7a 3b 0a 23 69 66 20 53  _int64 sz;.#if S
6a10: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
6a20: 49 5a 45 3e 30 0a 20 20 20 20 61 73 73 65 72 74  IZE>0.    assert
6a30: 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
6a40: 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62  utexHeld(db, iDb
6a50: 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20  , 0) );.    if( 
6a60: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
6a70: 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 73 71  int ii;.      sq
6a80: 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49  lite3DecOrHexToI
6a90: 36 34 28 7a 52 69 67 68 74 2c 20 26 73 7a 29 3b  64(zRight, &sz);
6aa0: 0a 20 20 20 20 20 20 69 66 28 20 73 7a 3c 30 20  .      if( sz<0 
6ab0: 29 20 73 7a 20 3d 20 73 71 6c 69 74 65 33 47 6c  ) sz = sqlite3Gl
6ac0: 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 4d 6d 61  obalConfig.szMma
6ad0: 70 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64  p;.      if( pId
6ae0: 32 2d 3e 6e 3d 3d 30 20 29 20 64 62 2d 3e 73 7a  2->n==0 ) db->sz
6af0: 4d 6d 61 70 20 3d 20 73 7a 3b 0a 20 20 20 20 20  Mmap = sz;.     
6b00: 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d   for(ii=db->nDb-
6b10: 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b  1; ii>=0; ii--){
6b20: 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d  .        if( db-
6b30: 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26 20  >aDb[ii].pBt && 
6b40: 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32  (ii==iDb || pId2
6b50: 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20  ->n==0) ){.     
6b60: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
6b70: 65 53 65 74 4d 6d 61 70 4c 69 6d 69 74 28 64 62  eSetMmapLimit(db
6b80: 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 73  ->aDb[ii].pBt, s
6b90: 7a 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  z);.        }.  
6ba0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
6bb0: 73 7a 20 3d 20 2d 31 3b 0a 20 20 20 20 72 63 20  sz = -1;.    rc 
6bc0: 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63  = sqlite3_file_c
6bd0: 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62 2c 20  ontrol(db, zDb, 
6be0: 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4d 4d 41  SQLITE_FCNTL_MMA
6bf0: 50 5f 53 49 5a 45 2c 20 26 73 7a 29 3b 0a 23 65  P_SIZE, &sz);.#e
6c00: 6c 73 65 0a 20 20 20 20 73 7a 20 3d 20 30 3b 0a  lse.    sz = 0;.
6c10: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
6c20: 4f 4b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69  OK;.#endif.    i
6c30: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
6c40: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
6c50: 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 6d 6d  SingleInt(v, "mm
6c60: 61 70 5f 73 69 7a 65 22 2c 20 73 7a 29 3b 0a 20  ap_size", sz);. 
6c70: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 21     }else if( rc!
6c80: 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44  =SQLITE_NOTFOUND
6c90: 20 29 7b 0a 20 20 20 20 20 20 70 50 61 72 73 65   ){.      pParse
6ca0: 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20  ->nErr++;.      
6cb0: 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b  pParse->rc = rc;
6cc0: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
6cd0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
6ce0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
6cf0: 74 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52 41 47  tore.  **   PRAG
6d00: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  MA temp_store = 
6d10: 22 64 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72  "default"|"memor
6d20: 79 22 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20  y"|"file".  **. 
6d30: 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65   ** Return or se
6d40: 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75  t the local valu
6d50: 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73 74  e of the temp_st
6d60: 6f 72 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ore flag.  Chang
6d70: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63  ing.  ** the loc
6d80: 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f  al value does no
6d90: 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74  t make changes t
6da0: 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20  o the disk file 
6db0: 61 6e 64 20 74 68 65 20 64 65 66 61 75 6c 74 0a  and the default.
6dc0: 20 20 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20    ** value will 
6dd0: 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20  be restored the 
6de0: 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61  next time the da
6df0: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65 64  tabase is opened
6e00: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65  ..  **.  ** Note
6e10: 20 74 68 61 74 20 69 74 20 69 73 20 70 6f 73 73   that it is poss
6e20: 69 62 6c 65 20 66 6f 72 20 74 68 65 20 6c 69 62  ible for the lib
6e30: 72 61 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  rary compile-tim
6e40: 65 20 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a  e options to.  *
6e50: 2a 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20  * override this 
6e60: 73 65 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 63  setting.  */.  c
6e70: 61 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50  ase PragTyp_TEMP
6e80: 5f 53 54 4f 52 45 3a 20 7b 0a 20 20 20 20 69 66  _STORE: {.    if
6e90: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
6ea0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
6eb0: 6e 74 28 76 2c 20 22 74 65 6d 70 5f 73 74 6f 72  nt(v, "temp_stor
6ec0: 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  e", db->temp_sto
6ed0: 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  re);.    }else{.
6ee0: 20 20 20 20 20 20 63 68 61 6e 67 65 54 65 6d 70        changeTemp
6ef0: 53 74 6f 72 61 67 65 28 70 50 61 72 73 65 2c 20  Storage(pParse, 
6f00: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 0a 20  zRight);.    }. 
6f10: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
6f20: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
6f30: 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  A temp_store_dir
6f40: 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52  ectory.  **   PR
6f50: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
6f60: 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22  directory = ""|"
6f70: 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a  directory_name".
6f80: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
6f90: 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61   or set the loca
6fa0: 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74  l value of the t
6fb0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
6fc0: 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ory flag.  Chang
6fd0: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  ing.  ** the val
6fe0: 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66  ue sets a specif
6ff0: 69 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20  ic directory to 
7000: 62 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70  be used for temp
7010: 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a  orary files..  *
7020: 2a 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e  * Setting to a n
7030: 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72  ull string rever
7040: 74 73 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c  ts to the defaul
7050: 74 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  t temporary dire
7060: 63 74 6f 72 79 20 73 65 61 72 63 68 2e 0a 20 20  ctory search..  
7070: 2a 2a 20 49 66 20 74 65 6d 70 6f 72 61 72 79 20  ** If temporary 
7080: 64 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61  directory is cha
7090: 6e 67 65 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c  nged, then inval
70a0: 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65  idateTempStorage
70b0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61  ..  **.  */.  ca
70c0: 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f  se PragTyp_TEMP_
70d0: 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a  STORE_DIRECTORY:
70e0: 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67   {.    if( !zRig
70f0: 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  ht ){.      retu
7100: 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20  rnSingleText(v, 
7110: 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65  "temp_store_dire
7120: 63 74 6f 72 79 22 2c 20 73 71 6c 69 74 65 33 5f  ctory", sqlite3_
7130: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b  temp_directory);
7140: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e  .    }else{.#ifn
7150: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
7160: 57 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52  WSD.      if( zR
7170: 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  ight[0] ){.     
7180: 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20     int res;.    
7190: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
71a0: 4f 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66  OsAccess(db->pVf
71b0: 73 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54  s, zRight, SQLIT
71c0: 45 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52 49  E_ACCESS_READWRI
71d0: 54 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  TE, &res);.     
71e0: 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
71f0: 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29  E_OK || res==0 )
7200: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
7210: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
7220: 73 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61  se, "not a writa
7230: 62 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b  ble directory");
7240: 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
7250: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
7260: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
7270: 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 54      if( SQLITE_T
7280: 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20  EMP_STORE==0.   
7290: 20 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54      || (SQLITE_T
72a0: 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20  EMP_STORE==1 && 
72b0: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d  db->temp_store<=
72c0: 31 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51  1).       || (SQ
72d0: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
72e0: 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73  =2 && db->temp_s
72f0: 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20 20 29  tore==1).      )
7300: 7b 0a 20 20 20 20 20 20 20 20 69 6e 76 61 6c 69  {.        invali
7310: 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28  dateTempStorage(
7320: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 7d  pParse);.      }
7330: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
7340: 72 65 65 28 73 71 6c 69 74 65 33 5f 74 65 6d 70  ree(sqlite3_temp
7350: 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20  _directory);.   
7360: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
7370: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
7380: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
7390: 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ry = sqlite3_mpr
73a0: 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68  intf("%s", zRigh
73b0: 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  t);.      }else{
73c0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
73d0: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20  _temp_directory 
73e0: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  = 0;.      }.#en
73f0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
7400: 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a  IT_WSD */.    }.
7410: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
7420: 23 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49  #if SQLITE_OS_WI
7430: 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  N.  /*.  **   PR
7440: 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f  AGMA data_store_
7450: 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20  directory.  **  
7460: 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f   PRAGMA data_sto
7470: 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22  re_directory = "
7480: 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d  "|"directory_nam
7490: 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  e".  **.  ** Ret
74a0: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c  urn or set the l
74b0: 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  ocal value of th
74c0: 65 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72  e data_store_dir
74d0: 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68  ectory flag.  Ch
74e0: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
74f0: 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65  value sets a spe
7500: 63 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20  cific directory 
7510: 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64  to be used for d
7520: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 74 68  atabase files th
7530: 61 74 0a 20 20 2a 2a 20 77 65 72 65 20 73 70 65  at.  ** were spe
7540: 63 69 66 69 65 64 20 77 69 74 68 20 61 20 72 65  cified with a re
7550: 6c 61 74 69 76 65 20 70 61 74 68 6e 61 6d 65 2e  lative pathname.
7560: 20 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e    Setting to a n
7570: 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72  ull string rever
7580: 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 64  ts.  ** to the d
7590: 65 66 61 75 6c 74 20 64 61 74 61 62 61 73 65 20  efault database 
75a0: 64 69 72 65 63 74 6f 72 79 2c 20 77 68 69 63 68  directory, which
75b0: 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69   for database fi
75c0: 6c 65 73 20 73 70 65 63 69 66 69 65 64 20 77 69  les specified wi
75d0: 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61 74 69  th.  ** a relati
75e0: 76 65 20 70 61 74 68 20 77 69 6c 6c 20 70 72 6f  ve path will pro
75f0: 62 61 62 6c 79 20 62 65 20 62 61 73 65 64 20 6f  bably be based o
7600: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 69  n the current di
7610: 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 0a  rectory for the.
7620: 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20 20 44    ** process.  D
7630: 61 74 61 62 61 73 65 20 66 69 6c 65 20 73 70 65  atabase file spe
7640: 63 69 66 69 65 64 20 77 69 74 68 20 61 6e 20 61  cified with an a
7650: 62 73 6f 6c 75 74 65 20 70 61 74 68 20 61 72 65  bsolute path are
7660: 20 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a 20 20   not impacted.  
7670: 2a 2a 20 62 79 20 74 68 69 73 20 73 65 74 74 69  ** by this setti
7680: 6e 67 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ng, regardless o
7690: 66 20 69 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a  f its value..  *
76a0: 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  *.  */.  case Pr
76b0: 61 67 54 79 70 5f 44 41 54 41 5f 53 54 4f 52 45  agTyp_DATA_STORE
76c0: 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20  _DIRECTORY: {.  
76d0: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
76e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
76f0: 67 6c 65 54 65 78 74 28 76 2c 20 22 64 61 74 61  gleText(v, "data
7700: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
7710: 22 2c 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f  ", sqlite3_data_
7720: 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20  directory);.    
7730: 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20 53  }else{.#ifndef S
7740: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
7750: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
7760: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  0] ){.        in
7770: 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20 20 72  t res;.        r
7780: 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63  c = sqlite3OsAcc
7790: 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52  ess(db->pVfs, zR
77a0: 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41 43 43  ight, SQLITE_ACC
77b0: 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c 20 26  ESS_READWRITE, &
77c0: 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
77d0: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
77e0: 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  || res==0 ){.   
77f0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72         sqlite3Er
7800: 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22  rorMsg(pParse, "
7810: 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64  not a writable d
7820: 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20  irectory");.    
7830: 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d        goto pragm
7840: 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d  a_out;.        }
7850: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
7860: 71 6c 69 74 65 33 5f 66 72 65 65 28 73 71 6c 69  qlite3_free(sqli
7870: 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f  te3_data_directo
7880: 72 79 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  ry);.      if( z
7890: 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20  Right[0] ){.    
78a0: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61      sqlite3_data
78b0: 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 73 71 6c  _directory = sql
78c0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
78d0: 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  ", zRight);.    
78e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
78f0: 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69   sqlite3_data_di
7900: 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20  rectory = 0;.   
7910: 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53     }.#endif /* S
7920: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a  QLITE_OMIT_WSD *
7930: 2f 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  /.    }.    brea
7940: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23  k;.  }.#endif..#
7950: 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  if SQLITE_ENABLE
7960: 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 0a 20  _LOCKING_STYLE. 
7970: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
7980: 41 20 5b 73 63 68 65 6d 61 2e 5d 6c 6f 63 6b 5f  A [schema.]lock_
7990: 70 72 6f 78 79 5f 66 69 6c 65 0a 20 20 2a 2a 20  proxy_file.  ** 
79a0: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
79b0: 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  .]lock_proxy_fil
79c0: 65 20 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f  e = ":auto:"|"lo
79d0: 63 6b 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20 20  ck_file_path".  
79e0: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f  **.  ** Return o
79f0: 72 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20  r set the value 
7a00: 6f 66 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78  of the lock_prox
7a10: 79 5f 66 69 6c 65 20 66 6c 61 67 2e 20 20 43 68  y_file flag.  Ch
7a20: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
7a30: 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65  value sets a spe
7a40: 63 69 66 69 63 20 66 69 6c 65 20 74 6f 20 62 65  cific file to be
7a50: 20 75 73 65 64 20 66 6f 72 20 64 61 74 61 62 61   used for databa
7a60: 73 65 20 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e  se access locks.
7a70: 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73  .  **.  */.  cas
7a80: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50  e PragTyp_LOCK_P
7a90: 52 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20 20  ROXY_FILE: {.   
7aa0: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
7ab0: 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61        Pager *pPa
7ac0: 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
7ad0: 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74  eePager(pDb->pBt
7ae0: 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 70  );.      char *p
7af0: 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d  roxy_file_path =
7b00: 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c   NULL;.      sql
7b10: 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65  ite3_file *pFile
7b20: 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46   = sqlite3PagerF
7b30: 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20  ile(pPager);.   
7b40: 20 20 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65     sqlite3OsFile
7b50: 43 6f 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c  ControlHint(pFil
7b60: 65 2c 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f  e, SQLITE_GET_LO
7b70: 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20  CKPROXYFILE, .  
7b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b90: 20 20 20 20 20 20 20 20 20 26 70 72 6f 78 79 5f           &proxy_
7ba0: 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20  file_path);.    
7bb0: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65    returnSingleTe
7bc0: 78 74 28 76 2c 20 22 6c 6f 63 6b 5f 70 72 6f 78  xt(v, "lock_prox
7bd0: 79 5f 66 69 6c 65 22 2c 20 70 72 6f 78 79 5f 66  y_file", proxy_f
7be0: 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 7d  ile_path);.    }
7bf0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65  else{.      Page
7c00: 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69  r *pPager = sqli
7c10: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
7c20: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 73  b->pBt);.      s
7c30: 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69  qlite3_file *pFi
7c40: 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  le = sqlite3Page
7c50: 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20  rFile(pPager);. 
7c60: 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20       int res;.  
7c70: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30      if( zRight[0
7c80: 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73  ] ){.        res
7c90: 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f  =sqlite3OsFileCo
7ca0: 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c  ntrol(pFile, SQL
7cb0: 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58  ITE_SET_LOCKPROX
7cc0: 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20  YFILE, .        
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 52 69               zRi
7cf0: 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c  ght);.      } el
7d00: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 72 65 73  se {.        res
7d10: 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f  =sqlite3OsFileCo
7d20: 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c  ntrol(pFile, SQL
7d30: 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58  ITE_SET_LOCKPROX
7d40: 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20  YFILE, .        
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c               NUL
7d70: 4c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  L);.      }.    
7d80: 20 20 69 66 28 20 72 65 73 21 3d 53 51 4c 49 54    if( res!=SQLIT
7d90: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
7da0: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
7db0: 70 50 61 72 73 65 2c 20 22 66 61 69 6c 65 64 20  pParse, "failed 
7dc0: 74 6f 20 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78  to set lock prox
7dd0: 79 20 66 69 6c 65 22 29 3b 0a 20 20 20 20 20 20  y file");.      
7de0: 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75    goto pragma_ou
7df0: 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
7e00: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
7e10: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
7e20: 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f  _ENABLE_LOCKING_
7e30: 53 54 59 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20  STYLE */      . 
7e40: 20 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20     .  /*.  **   
7e50: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
7e60: 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a  synchronous.  **
7e70: 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d     PRAGMA [schem
7e80: 61 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f  a.]synchronous=O
7e90: 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55 4c  FF|ON|NORMAL|FUL
7ea0: 4c 7c 45 58 54 52 41 0a 20 20 2a 2a 0a 20 20 2a  L|EXTRA.  **.  *
7eb0: 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20  * Return or set 
7ec0: 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20  the local value 
7ed0: 6f 66 20 74 68 65 20 73 79 6e 63 68 72 6f 6e 6f  of the synchrono
7ee0: 75 73 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69  us flag.  Changi
7ef0: 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61  ng.  ** the loca
7f00: 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74  l value does not
7f10: 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f   make changes to
7f20: 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61   the disk file a
7f30: 6e 64 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61  nd the.  ** defa
7f40: 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62  ult value will b
7f50: 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e  e restored the n
7f60: 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61 74  ext time the dat
7f70: 61 62 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f 70  abase is.  ** op
7f80: 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  ened..  */.  cas
7f90: 65 20 50 72 61 67 54 79 70 5f 53 59 4e 43 48 52  e PragTyp_SYNCHR
7fa0: 4f 4e 4f 55 53 3a 20 7b 0a 20 20 20 20 69 66 28  ONOUS: {.    if(
7fb0: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
7fc0: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
7fd0: 74 28 76 2c 20 22 73 79 6e 63 68 72 6f 6e 6f 75  t(v, "synchronou
7fe0: 73 22 2c 20 70 44 62 2d 3e 73 61 66 65 74 79 5f  s", pDb->safety_
7ff0: 6c 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20 7d 65  level-1);.    }e
8000: 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21  lse{.      if( !
8010: 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
8020: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
8030: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
8040: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  , .            "
8050: 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79  Safety level may
8060: 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20   not be changed 
8070: 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61 63  inside a transac
8080: 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65  tion");.      }e
8090: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  lse{.        int
80a0: 20 69 4c 65 76 65 6c 20 3d 20 28 67 65 74 53 61   iLevel = (getSa
80b0: 66 65 74 79 4c 65 76 65 6c 28 7a 52 69 67 68 74  fetyLevel(zRight
80c0: 2c 30 2c 31 29 2b 31 29 20 26 20 50 41 47 45 52  ,0,1)+1) & PAGER
80d0: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53  _SYNCHRONOUS_MAS
80e0: 4b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  K;.        if( i
80f0: 4c 65 76 65 6c 3d 3d 30 20 29 20 69 4c 65 76 65  Level==0 ) iLeve
8100: 6c 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70  l = 1;.        p
8110: 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c  Db->safety_level
8120: 20 3d 20 69 4c 65 76 65 6c 3b 0a 20 20 20 20 20   = iLevel;.     
8130: 20 20 20 70 44 62 2d 3e 62 53 79 6e 63 53 65 74     pDb->bSyncSet
8140: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 73 65   = 1;.        se
8150: 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 64  tAllPagerFlags(d
8160: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
8170: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
8180: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
8190: 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
81a0: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
81b0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41   SQLITE_OMIT_FLA
81c0: 47 5f 50 52 41 47 4d 41 53 0a 20 20 63 61 73 65  G_PRAGMAS.  case
81d0: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 3a 20 7b   PragTyp_FLAG: {
81e0: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d  .    if( zRight=
81f0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  =0 ){.      retu
8200: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 70  rnSingleInt(v, p
8210: 50 72 61 67 6d 61 2d 3e 7a 4e 61 6d 65 2c 20 28  Pragma->zName, (
8220: 64 62 2d 3e 66 6c 61 67 73 20 26 20 70 50 72 61  db->flags & pPra
8230: 67 6d 61 2d 3e 69 41 72 67 29 21 3d 30 20 29 3b  gma->iArg)!=0 );
8240: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
8250: 20 20 69 6e 74 20 6d 61 73 6b 20 3d 20 70 50 72    int mask = pPr
8260: 61 67 6d 61 2d 3e 69 41 72 67 3b 20 20 20 20 2f  agma->iArg;    /
8270: 2a 20 4d 61 73 6b 20 6f 66 20 62 69 74 73 20 74  * Mask of bits t
8280: 6f 20 73 65 74 20 6f 72 20 63 6c 65 61 72 2e 20  o set or clear. 
8290: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  */.      if( db-
82a0: 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  >autoCommit==0 )
82b0: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72  {.        /* For
82c0: 65 69 67 6e 20 6b 65 79 20 73 75 70 70 6f 72 74  eign key support
82d0: 20 6d 61 79 20 6e 6f 74 20 62 65 20 65 6e 61 62   may not be enab
82e0: 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 20  led or disabled 
82f0: 77 68 69 6c 65 20 6e 6f 74 0a 20 20 20 20 20 20  while not.      
8300: 20 20 2a 2a 20 69 6e 20 61 75 74 6f 2d 63 6f 6d    ** in auto-com
8310: 6d 69 74 20 6d 6f 64 65 2e 20 20 2a 2f 0a 20 20  mit mode.  */.  
8320: 20 20 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28        mask &= ~(
8330: 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65  SQLITE_ForeignKe
8340: 79 73 29 3b 0a 20 20 20 20 20 20 7d 0a 23 69 66  ys);.      }.#if
8350: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
8360: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 20 20  HENTICATION.    
8370: 20 20 69 66 28 20 64 62 2d 3e 61 75 74 68 2e 61    if( db->auth.a
8380: 75 74 68 4c 65 76 65 6c 3d 3d 55 41 55 54 48 5f  uthLevel==UAUTH_
8390: 55 73 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20  User ){.        
83a0: 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20  /* Do not allow 
83b0: 6e 6f 6e 2d 61 64 6d 69 6e 20 75 73 65 72 73 20  non-admin users 
83c0: 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 73 63  to modify the sc
83d0: 68 65 6d 61 20 61 72 62 69 74 72 61 72 69 6c 79  hema arbitrarily
83e0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b   */.        mask
83f0: 20 26 3d 20 7e 28 53 51 4c 49 54 45 5f 57 72 69   &= ~(SQLITE_Wri
8400: 74 65 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20  teSchema);.     
8410: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20   }.#endif..     
8420: 20 69 66 28 20 73 71 6c 69 74 65 33 47 65 74 42   if( sqlite3GetB
8430: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30  oolean(zRight, 0
8440: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d  ) ){.        db-
8450: 3e 66 6c 61 67 73 20 7c 3d 20 6d 61 73 6b 3b 0a  >flags |= mask;.
8460: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
8470: 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26       db->flags &
8480: 3d 20 7e 6d 61 73 6b 3b 0a 20 20 20 20 20 20 20  = ~mask;.       
8490: 20 69 66 28 20 6d 61 73 6b 3d 3d 53 51 4c 49 54   if( mask==SQLIT
84a0: 45 5f 44 65 66 65 72 46 4b 73 20 29 20 64 62 2d  E_DeferFKs ) db-
84b0: 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
84c0: 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 0a  s = 0;.      }..
84d0: 20 20 20 20 20 20 2f 2a 20 4d 61 6e 79 20 6f 66        /* Many of
84e0: 20 74 68 65 20 66 6c 61 67 2d 70 72 61 67 6d 61   the flag-pragma
84f0: 73 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f 64  s modify the cod
8500: 65 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74  e generated by t
8510: 68 65 20 53 51 4c 20 0a 20 20 20 20 20 20 2a 2a  he SQL .      **
8520: 20 63 6f 6d 70 69 6c 65 72 20 28 65 67 2e 20 63   compiler (eg. c
8530: 6f 75 6e 74 5f 63 68 61 6e 67 65 73 29 2e 20 53  ount_changes). S
8540: 6f 20 61 64 64 20 61 6e 20 6f 70 63 6f 64 65 20  o add an opcode 
8550: 74 6f 20 65 78 70 69 72 65 20 61 6c 6c 0a 20 20  to expire all.  
8560: 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 64 20      ** compiled 
8570: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 61  SQL statements a
8580: 66 74 65 72 20 6d 6f 64 69 66 79 69 6e 67 20 61  fter modifying a
8590: 20 70 72 61 67 6d 61 20 76 61 6c 75 65 2e 0a 20   pragma value.. 
85a0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
85b0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
85c0: 76 2c 20 4f 50 5f 45 78 70 69 72 65 2c 20 30 2c  v, OP_Expire, 0,
85d0: 20 30 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c   0);.      setAl
85e0: 6c 50 61 67 65 72 46 6c 61 67 73 28 64 62 29 3b  lPagerFlags(db);
85f0: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
8600: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
8610: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
8620: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
8630: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
8640: 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 0a  _SCHEMA_PRAGMAS.
8650: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
8660: 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 3c 74  MA table_info(<t
8670: 61 62 6c 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a  able>).  **.  **
8680: 20 52 65 74 75 72 6e 20 61 20 73 69 6e 67 6c 65   Return a single
8690: 20 72 6f 77 20 66 6f 72 20 65 61 63 68 20 63 6f   row for each co
86a0: 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 61 6d 65  lumn of the name
86b0: 64 20 74 61 62 6c 65 2e 20 54 68 65 20 63 6f 6c  d table. The col
86c0: 75 6d 6e 73 20 6f 66 0a 20 20 2a 2a 20 74 68 65  umns of.  ** the
86d0: 20 72 65 74 75 72 6e 65 64 20 64 61 74 61 20 73   returned data s
86e0: 65 74 20 61 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a  et are:.  **.  *
86f0: 2a 20 63 69 64 3a 20 20 20 20 20 20 20 20 43 6f  * cid:        Co
8700: 6c 75 6d 6e 20 69 64 20 28 6e 75 6d 62 65 72 65  lumn id (numbere
8710: 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  d from left to r
8720: 69 67 68 74 2c 20 73 74 61 72 74 69 6e 67 20 61  ight, starting a
8730: 74 20 30 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20  t 0).  ** name: 
8740: 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d        Column nam
8750: 65 0a 20 20 2a 2a 20 74 79 70 65 3a 20 20 20 20  e.  ** type:    
8760: 20 20 20 43 6f 6c 75 6d 6e 20 64 65 63 6c 61 72     Column declar
8770: 61 74 69 6f 6e 20 74 79 70 65 2e 0a 20 20 2a 2a  ation type..  **
8780: 20 6e 6f 74 6e 75 6c 6c 3a 20 20 20 20 54 72 75   notnull:    Tru
8790: 65 20 69 66 20 27 4e 4f 54 20 4e 55 4c 4c 27 20  e if 'NOT NULL' 
87a0: 69 73 20 70 61 72 74 20 6f 66 20 63 6f 6c 75 6d  is part of colum
87b0: 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 0a 20 20  n declaration.  
87c0: 2a 2a 20 64 66 6c 74 5f 76 61 6c 75 65 3a 20 54  ** dflt_value: T
87d0: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
87e0: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c   for the column,
87f0: 20 69 66 20 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20   if any..  */.  
8800: 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 41 42  case PragTyp_TAB
8810: 4c 45 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69  LE_INFO: if( zRi
8820: 67 68 74 20 29 7b 0a 20 20 20 20 54 61 62 6c 65  ght ){.    Table
8830: 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62   *pTab;.    pTab
8840: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61   = sqlite3FindTa
8850: 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20  ble(db, zRight, 
8860: 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54  zDb);.    if( pT
8870: 61 62 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74  ab ){.      stat
8880: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  ic const char *a
8890: 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  zCol[] = {.     
88a0: 20 20 20 20 22 63 69 64 22 2c 20 22 6e 61 6d 65      "cid", "name
88b0: 22 2c 20 22 74 79 70 65 22 2c 20 22 6e 6f 74 6e  ", "type", "notn
88c0: 75 6c 6c 22 2c 20 22 64 66 6c 74 5f 76 61 6c 75  ull", "dflt_valu
88d0: 65 22 2c 20 22 70 6b 22 0a 20 20 20 20 20 20 7d  e", "pk".      }
88e0: 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6b  ;.      int i, k
88f0: 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 48 69 64  ;.      int nHid
8900: 64 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 43  den = 0;.      C
8910: 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20 20 20  olumn *pCol;.   
8920: 20 20 20 49 6e 64 65 78 20 2a 70 50 6b 20 3d 20     Index *pPk = 
8930: 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65  sqlite3PrimaryKe
8940: 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20 20  yIndex(pTab);.  
8950: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
8960: 20 3d 20 36 3b 0a 20 20 20 20 20 20 73 71 6c 69   = 6;.      sqli
8970: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
8980: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29  ema(pParse, iDb)
8990: 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 43 6f  ;.      setAllCo
89a0: 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 36 2c 20  lumnNames(v, 6, 
89b0: 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20  azCol); assert( 
89c0: 36 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43  6==ArraySize(azC
89d0: 6f 6c 29 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  ol) );.      sql
89e0: 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
89f0: 6e 4e 61 6d 65 73 28 70 50 61 72 73 65 2c 20 70  nNames(pParse, p
8a00: 54 61 62 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  Tab);.      for(
8a10: 69 3d 30 2c 20 70 43 6f 6c 3d 70 54 61 62 2d 3e  i=0, pCol=pTab->
8a20: 61 43 6f 6c 3b 20 69 3c 70 54 61 62 2d 3e 6e 43  aCol; i<pTab->nC
8a30: 6f 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c 2b 2b 29  ol; i++, pCol++)
8a40: 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20  {.        const 
8a50: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20  char *zName;.   
8a60: 20 20 20 20 20 69 66 28 20 49 73 48 69 64 64 65       if( IsHidde
8a70: 6e 43 6f 6c 75 6d 6e 28 70 43 6f 6c 29 20 29 7b  nColumn(pCol) ){
8a80: 0a 20 20 20 20 20 20 20 20 20 20 6e 48 69 64 64  .          nHidd
8a90: 65 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20  en++;.          
8aa0: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
8ab0: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
8ac0: 28 70 43 6f 6c 2d 3e 63 6f 6c 46 6c 61 67 73 20  (pCol->colFlags 
8ad0: 26 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45  & COLFLAG_PRIMKE
8ae0: 59 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  Y)==0 ){.       
8af0: 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20     k = 0;.      
8b00: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 50 6b 3d    }else if( pPk=
8b10: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
8b20: 6b 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  k = 1;.        }
8b30: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
8b40: 66 6f 72 28 6b 3d 31 3b 20 6b 3c 3d 70 54 61 62  for(k=1; k<=pTab
8b50: 2d 3e 6e 43 6f 6c 20 26 26 20 70 50 6b 2d 3e 61  ->nCol && pPk->a
8b60: 69 43 6f 6c 75 6d 6e 5b 6b 2d 31 5d 21 3d 69 3b  iColumn[k-1]!=i;
8b70: 20 6b 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 20 20   k++){}.        
8b80: 7d 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  }.        assert
8b90: 28 20 70 43 6f 6c 2d 3e 70 44 66 6c 74 3d 3d 30  ( pCol->pDflt==0
8ba0: 20 7c 7c 20 70 43 6f 6c 2d 3e 70 44 66 6c 74 2d   || pCol->pDflt-
8bb0: 3e 6f 70 3d 3d 54 4b 5f 53 50 41 4e 20 29 3b 0a  >op==TK_SPAN );.
8bc0: 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20          zName = 
8bd0: 70 43 6f 6c 2d 3e 7a 4e 61 6d 65 3b 0a 20 20 20  pCol->zName;.   
8be0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8bf0: 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20  MultiLoad(v, 1, 
8c00: 22 69 73 73 69 73 69 22 2c 0a 20 20 20 20 20 20  "issisi",.      
8c10: 20 20 20 20 20 20 20 20 20 69 2d 6e 48 69 64 64           i-nHidd
8c20: 65 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  en,.            
8c30: 20 20 20 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20     zName,.      
8c40: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
8c50: 53 74 72 4e 65 78 74 28 7a 4e 61 6d 65 29 2c 0a  StrNext(zName),.
8c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
8c70: 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f 20 31  Col->notNull ? 1
8c80: 20 3a 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20   : 0,.          
8c90: 20 20 20 20 20 70 43 6f 6c 2d 3e 70 44 66 6c 74       pCol->pDflt
8ca0: 20 3f 20 70 43 6f 6c 2d 3e 70 44 66 6c 74 2d 3e   ? pCol->pDflt->
8cb0: 75 2e 7a 54 6f 6b 65 6e 20 3a 20 30 2c 0a 20 20  u.zToken : 0,.  
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 29 3b               k);
8cd0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
8ce0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
8cf0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 36  _ResultRow, 1, 6
8d00: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
8d10: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20  .  }.  break;.. 
8d20: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 54   case PragTyp_ST
8d30: 41 54 53 3a 20 7b 0a 20 20 20 20 73 74 61 74 69  ATS: {.    stati
8d40: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a  c const char *az
8d50: 43 6f 6c 5b 5d 20 3d 20 7b 20 22 74 61 62 6c 65  Col[] = { "table
8d60: 22 2c 20 22 69 6e 64 65 78 22 2c 20 22 77 69 64  ", "index", "wid
8d70: 74 68 22 2c 20 22 68 65 69 67 68 74 22 20 7d 3b  th", "height" };
8d80: 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78  .    Index *pIdx
8d90: 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a  ;.    HashElem *
8da0: 69 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74  i;.    v = sqlit
8db0: 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65  e3GetVdbe(pParse
8dc0: 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  );.    pParse->n
8dd0: 4d 65 6d 20 3d 20 34 3b 0a 20 20 20 20 73 71 6c  Mem = 4;.    sql
8de0: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
8df0: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
8e00: 29 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c  );.    setAllCol
8e10: 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 34 2c 20 61  umnNames(v, 4, a
8e20: 7a 43 6f 6c 29 3b 20 20 61 73 73 65 72 74 28 20  zCol);  assert( 
8e30: 34 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43  4==ArraySize(azC
8e40: 6f 6c 29 20 29 3b 0a 20 20 20 20 66 6f 72 28 69  ol) );.    for(i
8e50: 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
8e60: 28 26 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  (&pDb->pSchema->
8e70: 74 62 6c 48 61 73 68 29 3b 20 69 3b 20 69 3d 73  tblHash); i; i=s
8e80: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69 29  qliteHashNext(i)
8e90: 29 7b 0a 20 20 20 20 20 20 54 61 62 6c 65 20 2a  ){.      Table *
8ea0: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73  pTab = sqliteHas
8eb0: 68 44 61 74 61 28 69 29 3b 0a 20 20 20 20 20 20  hData(i);.      
8ec0: 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69  sqlite3VdbeMulti
8ed0: 4c 6f 61 64 28 76 2c 20 31 2c 20 22 73 73 69 69  Load(v, 1, "ssii
8ee0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 54  ",.           pT
8ef0: 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20  ab->zName,.     
8f00: 20 20 20 20 20 20 30 2c 0a 20 20 20 20 20 20 20        0,.       
8f10: 20 20 20 20 70 54 61 62 2d 3e 73 7a 54 61 62 52      pTab->szTabR
8f20: 6f 77 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70  ow,.           p
8f30: 54 61 62 2d 3e 6e 52 6f 77 4c 6f 67 45 73 74 29  Tab->nRowLogEst)
8f40: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
8f50: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
8f60: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29  ResultRow, 1, 4)
8f70: 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 49 64 78  ;.      for(pIdx
8f80: 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
8f90: 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
8fa0: 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20  pNext){.        
8fb0: 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69  sqlite3VdbeMulti
8fc0: 4c 6f 61 64 28 76 2c 20 32 2c 20 22 73 69 69 22  Load(v, 2, "sii"
8fd0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 49 64  ,.           pId
8fe0: 78 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20  x->zName,.      
8ff0: 20 20 20 20 20 70 49 64 78 2d 3e 73 7a 49 64 78       pIdx->szIdx
9000: 52 6f 77 2c 0a 20 20 20 20 20 20 20 20 20 20 20  Row,.           
9010: 70 49 64 78 2d 3e 61 69 52 6f 77 4c 6f 67 45 73  pIdx->aiRowLogEs
9020: 74 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 73  t[0]);.        s
9030: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
9040: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
9050: 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20 20 20 7d  , 1, 4);.      }
9060: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
9070: 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67  ak;..  case Prag
9080: 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46 4f 3a 20  Typ_INDEX_INFO: 
9090: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
90a0: 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20    Index *pIdx;. 
90b0: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a     Table *pTab;.
90c0: 20 20 20 20 70 49 64 78 20 3d 20 73 71 6c 69 74      pIdx = sqlit
90d0: 65 33 46 69 6e 64 49 6e 64 65 78 28 64 62 2c 20  e3FindIndex(db, 
90e0: 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20  zRight, zDb);.  
90f0: 20 20 69 66 28 20 70 49 64 78 20 29 7b 0a 20 20    if( pIdx ){.  
9100: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
9110: 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d   char *azCol[] =
9120: 20 7b 0a 20 20 20 20 20 20 20 20 20 22 73 65 71   {.         "seq
9130: 6e 6f 22 2c 20 22 63 69 64 22 2c 20 22 6e 61 6d  no", "cid", "nam
9140: 65 22 2c 20 22 64 65 73 63 22 2c 20 22 63 6f 6c  e", "desc", "col
9150: 6c 22 2c 20 22 6b 65 79 22 0a 20 20 20 20 20 20  l", "key".      
9160: 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a  };.      int i;.
9170: 20 20 20 20 20 20 69 6e 74 20 6d 78 3b 0a 20 20        int mx;.  
9180: 20 20 20 20 69 66 28 20 70 50 72 61 67 6d 61 2d      if( pPragma-
9190: 3e 69 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20  >iArg ){.       
91a0: 20 2f 2a 20 50 52 41 47 4d 41 20 69 6e 64 65 78   /* PRAGMA index
91b0: 5f 78 69 6e 66 6f 20 28 6e 65 77 65 72 20 76 65  _xinfo (newer ve
91c0: 72 73 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65 20  rsion with more 
91d0: 72 6f 77 73 20 61 6e 64 20 63 6f 6c 75 6d 6e 73  rows and columns
91e0: 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 78 20  ) */.        mx 
91f0: 3d 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b  = pIdx->nColumn;
9200: 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d  .        pParse-
9210: 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20  >nMem = 6;.     
9220: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
9230: 2f 2a 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f  /* PRAGMA index_
9240: 69 6e 66 6f 20 28 6c 65 67 61 63 79 20 76 65 72  info (legacy ver
9250: 73 69 6f 6e 29 20 2a 2f 0a 20 20 20 20 20 20 20  sion) */.       
9260: 20 6d 78 20 3d 20 70 49 64 78 2d 3e 6e 4b 65 79   mx = pIdx->nKey
9270: 43 6f 6c 3b 0a 20 20 20 20 20 20 20 20 70 50 61  Col;.        pPa
9280: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20  rse->nMem = 3;. 
9290: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 54 61       }.      pTa
92a0: 62 20 3d 20 70 49 64 78 2d 3e 70 54 61 62 6c 65  b = pIdx->pTable
92b0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 43  ;.      sqlite3C
92c0: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
92d0: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
92e0: 20 20 20 20 61 73 73 65 72 74 28 20 70 50 61 72      assert( pPar
92f0: 73 65 2d 3e 6e 4d 65 6d 3c 3d 41 72 72 61 79 53  se->nMem<=ArrayS
9300: 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20  ize(azCol) );.  
9310: 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e      setAllColumn
9320: 4e 61 6d 65 73 28 76 2c 20 70 50 61 72 73 65 2d  Names(v, pParse-
9330: 3e 6e 4d 65 6d 2c 20 61 7a 43 6f 6c 29 3b 0a 20  >nMem, azCol);. 
9340: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
9350: 6d 78 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  mx; i++){.      
9360: 20 20 69 31 36 20 63 6e 75 6d 20 3d 20 70 49 64    i16 cnum = pId
9370: 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69 5d 3b 0a  x->aiColumn[i];.
9380: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
9390: 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20  dbeMultiLoad(v, 
93a0: 31 2c 20 22 69 69 73 22 2c 20 69 2c 20 63 6e 75  1, "iis", i, cnu
93b0: 6d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m,.             
93c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93d0: 63 6e 75 6d 3c 30 20 3f 20 30 20 3a 20 70 54 61  cnum<0 ? 0 : pTa
93e0: 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e  b->aCol[cnum].zN
93f0: 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 69 66  ame);.        if
9400: 28 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 20  ( pPragma->iArg 
9410: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
9420: 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61  ite3VdbeMultiLoa
9430: 64 28 76 2c 20 34 2c 20 22 69 73 69 22 2c 0a 20  d(v, 4, "isi",. 
9440: 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d             pIdx-
9450: 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 2c 0a  >aSortOrder[i],.
9460: 20 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78              pIdx
9470: 2d 3e 61 7a 43 6f 6c 6c 5b 69 5d 2c 0a 20 20 20  ->azColl[i],.   
9480: 20 20 20 20 20 20 20 20 20 69 3c 70 49 64 78 2d           i<pIdx-
9490: 3e 6e 4b 65 79 43 6f 6c 29 3b 0a 20 20 20 20 20  >nKeyCol);.     
94a0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c     }.        sql
94b0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
94c0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
94d0: 31 2c 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 29  1, pParse->nMem)
94e0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
94f0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
9500: 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44  case PragTyp_IND
9510: 45 58 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52 69  EX_LIST: if( zRi
9520: 67 68 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78  ght ){.    Index
9530: 20 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c   *pIdx;.    Tabl
9540: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 69 6e 74  e *pTab;.    int
9550: 20 69 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73   i;.    pTab = s
9560: 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
9570: 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  db, zRight, zDb)
9580: 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20 29  ;.    if( pTab )
9590: 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  {.      static c
95a0: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c  onst char *azCol
95b0: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 22  [] = {.        "
95c0: 73 65 71 22 2c 20 22 6e 61 6d 65 22 2c 20 22 75  seq", "name", "u
95d0: 6e 69 71 75 65 22 2c 20 22 6f 72 69 67 69 6e 22  nique", "origin"
95e0: 2c 20 22 70 61 72 74 69 61 6c 22 0a 20 20 20 20  , "partial".    
95f0: 20 20 7d 3b 0a 20 20 20 20 20 20 76 20 3d 20 73    };.      v = s
9600: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
9610: 61 72 73 65 29 3b 0a 20 20 20 20 20 20 70 50 61  arse);.      pPa
9620: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 35 3b 0a 20  rse->nMem = 5;. 
9630: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65       sqlite3Code
9640: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
9650: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  rse, iDb);.     
9660: 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d   setAllColumnNam
9670: 65 73 28 76 2c 20 35 2c 20 61 7a 43 6f 6c 29 3b  es(v, 5, azCol);
9680: 20 20 61 73 73 65 72 74 28 20 35 3d 3d 41 72 72    assert( 5==Arr
9690: 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b  aySize(azCol) );
96a0: 0a 20 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d  .      for(pIdx=
96b0: 70 54 61 62 2d 3e 70 49 6e 64 65 78 2c 20 69 3d  pTab->pIndex, i=
96c0: 30 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  0; pIdx; pIdx=pI
96d0: 64 78 2d 3e 70 4e 65 78 74 2c 20 69 2b 2b 29 7b  dx->pNext, i++){
96e0: 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63  .        const c
96f0: 68 61 72 20 2a 61 7a 4f 72 69 67 69 6e 5b 5d 20  har *azOrigin[] 
9700: 3d 20 7b 20 22 63 22 2c 20 22 75 22 2c 20 22 70  = { "c", "u", "p
9710: 6b 22 20 7d 3b 0a 20 20 20 20 20 20 20 20 73 71  k" };.        sq
9720: 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f  lite3VdbeMultiLo
9730: 61 64 28 76 2c 20 31 2c 20 22 69 73 69 73 69 22  ad(v, 1, "isisi"
9740: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 69 2c 0a  ,.           i,.
9750: 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d             pIdx-
9760: 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  >zName,.        
9770: 20 20 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78     IsUniqueIndex
9780: 28 70 49 64 78 29 2c 0a 20 20 20 20 20 20 20 20  (pIdx),.        
9790: 20 20 20 61 7a 4f 72 69 67 69 6e 5b 70 49 64 78     azOrigin[pIdx
97a0: 2d 3e 69 64 78 54 79 70 65 5d 2c 0a 20 20 20 20  ->idxType],.    
97b0: 20 20 20 20 20 20 20 70 49 64 78 2d 3e 70 50 61         pIdx->pPa
97c0: 72 74 49 64 78 57 68 65 72 65 21 3d 30 29 3b 0a  rtIdxWhere!=0);.
97d0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
97e0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
97f0: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 35 29  ResultRow, 1, 5)
9800: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
9810: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
9820: 63 61 73 65 20 50 72 61 67 54 79 70 5f 44 41 54  case PragTyp_DAT
9830: 41 42 41 53 45 5f 4c 49 53 54 3a 20 7b 0a 20 20  ABASE_LIST: {.  
9840: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
9850: 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b  har *azCol[] = {
9860: 20 22 73 65 71 22 2c 20 22 6e 61 6d 65 22 2c 20   "seq", "name", 
9870: 22 66 69 6c 65 22 20 7d 3b 0a 20 20 20 20 69 6e  "file" };.    in
9880: 74 20 69 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  t i;.    pParse-
9890: 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73  >nMem = 3;.    s
98a0: 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73  etAllColumnNames
98b0: 28 76 2c 20 33 2c 20 61 7a 43 6f 6c 29 3b 20 61  (v, 3, azCol); a
98c0: 73 73 65 72 74 28 20 33 3d 3d 41 72 72 61 79 53  ssert( 3==ArrayS
98d0: 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20  ize(azCol) );.  
98e0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d    for(i=0; i<db-
98f0: 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nDb; i++){.    
9900: 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d    if( db->aDb[i]
9910: 2e 70 42 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  .pBt==0 ) contin
9920: 75 65 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  ue;.      assert
9930: 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  ( db->aDb[i].zNa
9940: 6d 65 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 73  me!=0 );.      s
9950: 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c  qlite3VdbeMultiL
9960: 6f 61 64 28 76 2c 20 31 2c 20 22 69 73 73 22 2c  oad(v, 1, "iss",
9970: 0a 20 20 20 20 20 20 20 20 20 69 2c 0a 20 20 20  .         i,.   
9980: 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 5d        db->aDb[i]
9990: 2e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  .zName,.        
99a0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
99b0: 46 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44 62  Filename(db->aDb
99c0: 5b 69 5d 2e 70 42 74 29 29 3b 0a 20 20 20 20 20  [i].pBt));.     
99d0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
99e0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
99f0: 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20 7d  ow, 1, 3);.    }
9a00: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20  .  }.  break;.. 
9a10: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f   case PragTyp_CO
9a20: 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54 3a 20 7b 0a  LLATION_LIST: {.
9a30: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
9a40: 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d   char *azCol[] =
9a50: 20 7b 20 22 73 65 71 22 2c 20 22 6e 61 6d 65 22   { "seq", "name"
9a60: 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20   };.    int i = 
9a70: 30 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20  0;.    HashElem 
9a80: 2a 70 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  *p;.    pParse->
9a90: 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73 65  nMem = 2;.    se
9aa0: 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  tAllColumnNames(
9ab0: 76 2c 20 32 2c 20 61 7a 43 6f 6c 29 3b 20 61 73  v, 2, azCol); as
9ac0: 73 65 72 74 28 20 32 3d 3d 41 72 72 61 79 53 69  sert( 2==ArraySi
9ad0: 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20  ze(azCol) );.   
9ae0: 20 66 6f 72 28 70 3d 73 71 6c 69 74 65 48 61 73   for(p=sqliteHas
9af0: 68 46 69 72 73 74 28 26 64 62 2d 3e 61 43 6f 6c  hFirst(&db->aCol
9b00: 6c 53 65 71 29 3b 20 70 3b 20 70 3d 73 71 6c 69  lSeq); p; p=sqli
9b10: 74 65 48 61 73 68 4e 65 78 74 28 70 29 29 7b 0a  teHashNext(p)){.
9b20: 20 20 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70        CollSeq *p
9b30: 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65 71 20  Coll = (CollSeq 
9b40: 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  *)sqliteHashData
9b50: 28 70 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  (p);.      sqlit
9b60: 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28  e3VdbeMultiLoad(
9b70: 76 2c 20 31 2c 20 22 69 73 22 2c 20 69 2b 2b 2c  v, 1, "is", i++,
9b80: 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 29 3b 0a   pColl->zName);.
9b90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9ba0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
9bb0: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a  sultRow, 1, 2);.
9bc0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
9bd0: 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
9be0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
9bf0: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e  PRAGMAS */..#ifn
9c00: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
9c10: 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 63 61  FOREIGN_KEY.  ca
9c20: 73 65 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49  se PragTyp_FOREI
9c30: 47 4e 5f 4b 45 59 5f 4c 49 53 54 3a 20 69 66 28  GN_KEY_LIST: if(
9c40: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 46   zRight ){.    F
9c50: 4b 65 79 20 2a 70 46 4b 3b 0a 20 20 20 20 54 61  Key *pFK;.    Ta
9c60: 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70  ble *pTab;.    p
9c70: 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  Tab = sqlite3Fin
9c80: 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68  dTable(db, zRigh
9c90: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28  t, zDb);.    if(
9ca0: 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76   pTab ){.      v
9cb0: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62   = sqlite3GetVdb
9cc0: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  e(pParse);.     
9cd0: 20 70 46 4b 20 3d 20 70 54 61 62 2d 3e 70 46 4b   pFK = pTab->pFK
9ce0: 65 79 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46  ey;.      if( pF
9cf0: 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73 74 61  K ){.        sta
9d00: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
9d10: 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20  azCol[] = {.    
9d20: 20 20 20 20 20 20 20 22 69 64 22 2c 20 22 73 65         "id", "se
9d30: 71 22 2c 20 22 74 61 62 6c 65 22 2c 20 22 66 72  q", "table", "fr
9d40: 6f 6d 22 2c 20 22 74 6f 22 2c 20 22 6f 6e 5f 75  om", "to", "on_u
9d50: 70 64 61 74 65 22 2c 20 22 6f 6e 5f 64 65 6c 65  pdate", "on_dele
9d60: 74 65 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  te",.           
9d70: 22 6d 61 74 63 68 22 0a 20 20 20 20 20 20 20 20  "match".        
9d80: 7d 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  };.        int i
9d90: 20 3d 20 30 3b 20 0a 20 20 20 20 20 20 20 20 70   = 0; .        p
9da0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 38 3b  Parse->nMem = 8;
9db0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9dc0: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
9dd0: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
9de0: 20 20 20 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c         setAllCol
9df0: 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 38 2c 20 61  umnNames(v, 8, a
9e00: 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 38  zCol); assert( 8
9e10: 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f  ==ArraySize(azCo
9e20: 6c 29 20 29 3b 0a 20 20 20 20 20 20 20 20 77 68  l) );.        wh
9e30: 69 6c 65 28 70 46 4b 29 7b 0a 20 20 20 20 20 20  ile(pFK){.      
9e40: 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20      int j;.     
9e50: 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c       for(j=0; j<
9e60: 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b  pFK->nCol; j++){
9e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
9e80: 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61  ite3VdbeMultiLoa
9e90: 64 28 76 2c 20 31 2c 20 22 69 69 73 73 73 73 73  d(v, 1, "iisssss
9ea0: 73 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  s",.            
9eb0: 20 20 20 20 20 20 20 69 2c 0a 20 20 20 20 20 20         i,.      
9ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6a 2c 0a               j,.
9ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ee0: 20 20 20 70 46 4b 2d 3e 7a 54 6f 2c 0a 20 20 20     pFK->zTo,.   
9ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f00: 70 54 61 62 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e  pTab->aCol[pFK->
9f10: 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a  aCol[j].iFrom].z
9f20: 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
9f30: 20 20 20 20 20 20 20 20 20 70 46 4b 2d 3e 61 43           pFK->aC
9f40: 6f 6c 5b 6a 5d 2e 7a 43 6f 6c 2c 0a 20 20 20 20  ol[j].zCol,.    
9f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
9f60: 63 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61  ctionName(pFK->a
9f70: 41 63 74 69 6f 6e 5b 31 5d 29 2c 20 20 2f 2a 20  Action[1]),  /* 
9f80: 4f 4e 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 20  ON UPDATE */.   
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fa0: 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e  actionName(pFK->
9fb0: 61 41 63 74 69 6f 6e 5b 30 5d 29 2c 20 20 2f 2a  aAction[0]),  /*
9fc0: 20 4f 4e 20 44 45 4c 45 54 45 20 2a 2f 0a 20 20   ON DELETE */.  
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fe0: 20 22 4e 4f 4e 45 22 29 3b 0a 20 20 20 20 20 20   "NONE");.      
9ff0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
a000: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
a010: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 38 29 3b 0a  sultRow, 1, 8);.
a020: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
a030: 20 20 20 20 20 20 2b 2b 69 3b 0a 20 20 20 20 20        ++i;.     
a040: 20 20 20 20 20 70 46 4b 20 3d 20 70 46 4b 2d 3e       pFK = pFK->
a050: 70 4e 65 78 74 46 72 6f 6d 3b 0a 20 20 20 20 20  pNextFrom;.     
a060: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
a070: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
a080: 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
a090: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
a0a0: 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a  OREIGN_KEY) */..
a0b0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
a0c0: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
a0d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
a0e0: 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 63 61  MIT_TRIGGER.  ca
a0f0: 73 65 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49  se PragTyp_FOREI
a100: 47 4e 5f 4b 45 59 5f 43 48 45 43 4b 3a 20 7b 0a  GN_KEY_CHECK: {.
a110: 20 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b 20 20      FKey *pFK;  
a120: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
a130: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
a140: 74 72 61 69 6e 74 20 2a 2f 0a 20 20 20 20 54 61  traint */.    Ta
a150: 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
a160: 20 20 20 20 20 2f 2a 20 43 68 69 6c 64 20 74 61       /* Child ta
a170: 62 6c 65 20 63 6f 6e 74 61 69 6e 20 22 52 45 46  ble contain "REF
a180: 45 52 45 4e 43 45 53 22 20 6b 65 79 77 6f 72 64  ERENCES" keyword
a190: 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
a1a0: 50 61 72 65 6e 74 3b 20 20 20 20 20 20 20 20 2f  Parent;        /
a1b0: 2a 20 50 61 72 65 6e 74 20 74 61 62 6c 65 20 74  * Parent table t
a1c0: 68 61 74 20 63 68 69 6c 64 20 70 6f 69 6e 74 73  hat child points
a1d0: 20 74 6f 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78   to */.    Index
a1e0: 20 2a 70 49 64 78 3b 20 20 20 20 20 20 20 20 20   *pIdx;         
a1f0: 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 74 68    /* Index in th
a200: 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20 2a  e parent table *
a210: 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20  /.    int i;    
a220: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a230: 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 46  Loop counter:  F
a240: 6f 72 65 69 67 6e 20 6b 65 79 20 6e 75 6d 62 65  oreign key numbe
a250: 72 20 66 6f 72 20 70 54 61 62 20 2a 2f 0a 20 20  r for pTab */.  
a260: 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20    int j;        
a270: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
a280: 20 63 6f 75 6e 74 65 72 3a 20 20 46 69 65 6c 64   counter:  Field
a290: 20 6f 66 20 74 68 65 20 66 6f 72 65 69 67 6e 20   of the foreign 
a2a0: 6b 65 79 20 2a 2f 0a 20 20 20 20 48 61 73 68 45  key */.    HashE
a2b0: 6c 65 6d 20 2a 6b 3b 20 20 20 20 20 20 20 20 20  lem *k;         
a2c0: 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
a2d0: 72 3a 20 20 4e 65 78 74 20 74 61 62 6c 65 20 69  r:  Next table i
a2e0: 6e 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 20 20  n schema */.    
a2f0: 69 6e 74 20 78 3b 20 20 20 20 20 20 20 20 20 20  int x;          
a300: 20 20 20 20 20 20 20 2f 2a 20 72 65 73 75 6c 74         /* result
a310: 20 76 61 72 69 61 62 6c 65 20 2a 2f 0a 20 20 20   variable */.   
a320: 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20   int regResult; 
a330: 20 20 20 20 20 20 20 20 2f 2a 20 33 20 72 65 67          /* 3 reg
a340: 69 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61  isters to hold a
a350: 20 72 65 73 75 6c 74 20 72 6f 77 20 2a 2f 0a 20   result row */. 
a360: 20 20 20 69 6e 74 20 72 65 67 4b 65 79 3b 20 20     int regKey;  
a370: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
a380: 69 73 74 65 72 20 74 6f 20 68 6f 6c 64 20 6b 65  ister to hold ke
a390: 79 20 66 6f 72 20 63 68 65 63 6b 69 6e 67 20 74  y for checking t
a3a0: 68 65 20 46 4b 20 2a 2f 0a 20 20 20 20 69 6e 74  he FK */.    int
a3b0: 20 72 65 67 52 6f 77 3b 20 20 20 20 20 20 20 20   regRow;        
a3c0: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73      /* Registers
a3d0: 20 74 6f 20 68 6f 6c 64 20 61 20 72 6f 77 20 66   to hold a row f
a3e0: 72 6f 6d 20 70 54 61 62 20 2a 2f 0a 20 20 20 20  rom pTab */.    
a3f0: 69 6e 74 20 61 64 64 72 54 6f 70 3b 20 20 20 20  int addrTop;    
a400: 20 20 20 20 20 20 20 2f 2a 20 54 6f 70 20 6f 66         /* Top of
a410: 20 61 20 6c 6f 6f 70 20 63 68 65 63 6b 69 6e 67   a loop checking
a420: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 2a 2f   foreign keys */
a430: 0a 20 20 20 20 69 6e 74 20 61 64 64 72 4f 6b 3b  .    int addrOk;
a440: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a              /* J
a450: 75 6d 70 20 68 65 72 65 20 69 66 20 74 68 65 20  ump here if the 
a460: 6b 65 79 20 69 73 20 4f 4b 20 2a 2f 0a 20 20 20  key is OK */.   
a470: 20 69 6e 74 20 2a 61 69 43 6f 6c 73 3b 20 20 20   int *aiCols;   
a480: 20 20 20 20 20 20 20 20 2f 2a 20 63 68 69 6c 64          /* child
a490: 20 74 6f 20 70 61 72 65 6e 74 20 63 6f 6c 75 6d   to parent colum
a4a0: 6e 20 6d 61 70 70 69 6e 67 20 2a 2f 0a 20 20 20  n mapping */.   
a4b0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
a4c0: 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20  ar *azCol[] = { 
a4d0: 22 74 61 62 6c 65 22 2c 20 22 72 6f 77 69 64 22  "table", "rowid"
a4e0: 2c 20 22 70 61 72 65 6e 74 22 2c 20 22 66 6b 69  , "parent", "fki
a4f0: 64 22 20 7d 3b 0a 0a 20 20 20 20 72 65 67 52 65  d" };..    regRe
a500: 73 75 6c 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e  sult = pParse->n
a510: 4d 65 6d 2b 31 3b 0a 20 20 20 20 70 50 61 72 73  Mem+1;.    pPars
a520: 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20  e->nMem += 4;.  
a530: 20 20 72 65 67 4b 65 79 20 3d 20 2b 2b 70 50 61    regKey = ++pPa
a540: 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72  rse->nMem;.    r
a550: 65 67 52 6f 77 20 3d 20 2b 2b 70 50 61 72 73 65  egRow = ++pParse
a560: 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 76 20 3d 20  ->nMem;.    v = 
a570: 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70  sqlite3GetVdbe(p
a580: 50 61 72 73 65 29 3b 0a 20 20 20 20 73 65 74 41  Parse);.    setA
a590: 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c  llColumnNames(v,
a5a0: 20 34 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65   4, azCol); asse
a5b0: 72 74 28 20 34 3d 3d 41 72 72 61 79 53 69 7a 65  rt( 4==ArraySize
a5c0: 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 73  (azCol) );.    s
a5d0: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
a5e0: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
a5f0: 44 62 29 3b 0a 20 20 20 20 6b 20 3d 20 73 71 6c  Db);.    k = sql
a600: 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62  iteHashFirst(&db
a610: 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 53 63 68 65  ->aDb[iDb].pSche
a620: 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 0a 20 20  ma->tblHash);.  
a630: 20 20 77 68 69 6c 65 28 20 6b 20 29 7b 0a 20 20    while( k ){.  
a640: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
a650: 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62 20 3d  {.        pTab =
a660: 20 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61   sqlite3LocateTa
a670: 62 6c 65 28 70 50 61 72 73 65 2c 20 30 2c 20 7a  ble(pParse, 0, z
a680: 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20  Right, zDb);.   
a690: 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20       k = 0;.    
a6a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
a6b0: 20 70 54 61 62 20 3d 20 28 54 61 62 6c 65 2a 29   pTab = (Table*)
a6c0: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 6b  sqliteHashData(k
a6d0: 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 73  );.        k = s
a6e0: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 6b 29  qliteHashNext(k)
a6f0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
a700: 69 66 28 20 70 54 61 62 3d 3d 30 20 7c 7c 20 70  if( pTab==0 || p
a710: 54 61 62 2d 3e 70 46 4b 65 79 3d 3d 30 20 29 20  Tab->pFKey==0 ) 
a720: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
a730: 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
a740: 28 70 50 61 72 73 65 2c 20 69 44 62 2c 20 70 54  (pParse, iDb, pT
a750: 61 62 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 54 61  ab->tnum, 0, pTa
a760: 62 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  b->zName);.     
a770: 20 69 66 28 20 70 54 61 62 2d 3e 6e 43 6f 6c 2b   if( pTab->nCol+
a780: 72 65 67 52 6f 77 3e 70 50 61 72 73 65 2d 3e 6e  regRow>pParse->n
a790: 4d 65 6d 20 29 20 70 50 61 72 73 65 2d 3e 6e 4d  Mem ) pParse->nM
a7a0: 65 6d 20 3d 20 70 54 61 62 2d 3e 6e 43 6f 6c 20  em = pTab->nCol 
a7b0: 2b 20 72 65 67 52 6f 77 3b 0a 20 20 20 20 20 20  + regRow;.      
a7c0: 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
a7d0: 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 2c  (pParse, 0, iDb,
a7e0: 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65   pTab, OP_OpenRe
a7f0: 61 64 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ad);.      sqlit
a800: 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67  e3VdbeLoadString
a810: 28 76 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 70  (v, regResult, p
a820: 54 61 62 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20  Tab->zName);.   
a830: 20 20 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d     for(i=1, pFK=
a840: 70 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b  pTab->pFKey; pFK
a850: 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e  ; i++, pFK=pFK->
a860: 70 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20  pNextFrom){.    
a870: 20 20 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71      pParent = sq
a880: 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64  lite3FindTable(d
a890: 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62  b, pFK->zTo, zDb
a8a0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
a8b0: 50 61 72 65 6e 74 3d 3d 30 20 29 20 63 6f 6e 74  Parent==0 ) cont
a8c0: 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 70 49  inue;.        pI
a8d0: 64 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  dx = 0;.        
a8e0: 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
a8f0: 28 70 50 61 72 73 65 2c 20 69 44 62 2c 20 70 50  (pParse, iDb, pP
a900: 61 72 65 6e 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20  arent->tnum, 0, 
a910: 70 50 61 72 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b  pParent->zName);
a920: 0a 20 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c  .        x = sql
a930: 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
a940: 78 28 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e  x(pParse, pParen
a950: 74 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 30  t, pFK, &pIdx, 0
a960: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 78  );.        if( x
a970: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
a980: 20 69 66 28 20 70 49 64 78 3d 3d 30 20 29 7b 0a   if( pIdx==0 ){.
a990: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
a9a0: 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61  te3OpenTable(pPa
a9b0: 72 73 65 2c 20 69 2c 20 69 44 62 2c 20 70 50 61  rse, i, iDb, pPa
a9c0: 72 65 6e 74 2c 20 4f 50 5f 4f 70 65 6e 52 65 61  rent, OP_OpenRea
a9d0: 64 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65  d);.          }e
a9e0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
a9f0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
aa00: 70 33 28 76 2c 20 4f 50 5f 4f 70 65 6e 52 65 61  p3(v, OP_OpenRea
aa10: 64 2c 20 69 2c 20 70 49 64 78 2d 3e 74 6e 75 6d  d, i, pIdx->tnum
aa20: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20  , iDb);.        
aa30: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
aa40: 65 74 50 34 4b 65 79 49 6e 66 6f 28 70 50 61 72  etP4KeyInfo(pPar
aa50: 73 65 2c 20 70 49 64 78 29 3b 0a 20 20 20 20 20  se, pIdx);.     
aa60: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
aa70: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
aa80: 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  k = 0;.         
aa90: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
aaa0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
aab0: 61 73 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e  assert( pParse->
aac0: 6e 45 72 72 3e 30 20 7c 7c 20 70 46 4b 3d 3d 30  nErr>0 || pFK==0
aad0: 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46   );.      if( pF
aae0: 4b 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  K ) break;.     
aaf0: 20 69 66 28 20 70 50 61 72 73 65 2d 3e 6e 54 61   if( pParse->nTa
ab00: 62 3c 69 20 29 20 70 50 61 72 73 65 2d 3e 6e 54  b<i ) pParse->nT
ab10: 61 62 20 3d 20 69 3b 0a 20 20 20 20 20 20 61 64  ab = i;.      ad
ab20: 64 72 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56  drTop = sqlite3V
ab30: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
ab40: 52 65 77 69 6e 64 2c 20 30 29 3b 20 56 64 62 65  Rewind, 0); Vdbe
ab50: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
ab60: 20 20 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d     for(i=1, pFK=
ab70: 70 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b  pTab->pFKey; pFK
ab80: 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e  ; i++, pFK=pFK->
ab90: 70 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20  pNextFrom){.    
aba0: 20 20 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71      pParent = sq
abb0: 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64  lite3FindTable(d
abc0: 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62  b, pFK->zTo, zDb
abd0: 29 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20  );.        pIdx 
abe0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 61 69 43  = 0;.        aiC
abf0: 6f 6c 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ols = 0;.       
ac00: 20 69 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a   if( pParent ){.
ac10: 20 20 20 20 20 20 20 20 20 20 78 20 3d 20 73 71            x = sq
ac20: 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
ac30: 65 78 28 70 50 61 72 73 65 2c 20 70 50 61 72 65  ex(pParse, pPare
ac40: 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20  nt, pFK, &pIdx, 
ac50: 26 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20  &aiCols);.      
ac60: 20 20 20 20 61 73 73 65 72 74 28 20 78 3d 3d 30      assert( x==0
ac70: 20 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   );.        }.  
ac80: 20 20 20 20 20 20 61 64 64 72 4f 6b 20 3d 20 73        addrOk = s
ac90: 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61  qlite3VdbeMakeLa
aca0: 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20  bel(v);.        
acb0: 69 66 28 20 70 50 61 72 65 6e 74 20 26 26 20 70  if( pParent && p
acc0: 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Idx==0 ){.      
acd0: 20 20 20 20 69 6e 74 20 69 4b 65 79 20 3d 20 70      int iKey = p
ace0: 46 4b 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f  FK->aCol[0].iFro
acf0: 6d 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  m;.          ass
ad00: 65 72 74 28 20 69 4b 65 79 3e 3d 30 20 26 26 20  ert( iKey>=0 && 
ad10: 69 4b 65 79 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20  iKey<pTab->nCol 
ad20: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
ad30: 20 69 4b 65 79 21 3d 70 54 61 62 2d 3e 69 50 4b   iKey!=pTab->iPK
ad40: 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ey ){.          
ad50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ad60: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e  Op3(v, OP_Column
ad70: 2c 20 30 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f  , 0, iKey, regRo
ad80: 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  w);.            
ad90: 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66  sqlite3ColumnDef
ada0: 61 75 6c 74 28 76 2c 20 70 54 61 62 2c 20 69 4b  ault(v, pTab, iK
adb0: 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20  ey, regRow);.   
adc0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
add0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
ade0: 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2c  _IsNull, regRow,
adf0: 20 61 64 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f   addrOk); VdbeCo
ae00: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
ae10: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ae20: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4d  beAddOp2(v, OP_M
ae30: 75 73 74 42 65 49 6e 74 2c 20 72 65 67 52 6f 77  ustBeInt, regRow
ae40: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
ae50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72    sqlite3VdbeCur
ae60: 72 65 6e 74 41 64 64 72 28 76 29 2b 33 29 3b 20  rentAddr(v)+3); 
ae70: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
ae80: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
ae90: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
aea0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
aeb0: 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20  v, OP_Rowid, 0, 
aec0: 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20  regRow);.       
aed0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73     }.          s
aee0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
aef0: 28 76 2c 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  (v, OP_NotExists
af00: 2c 20 69 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b  , i, 0, regRow);
af10: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
af20: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
af30: 74 65 33 56 64 62 65 47 6f 74 6f 28 76 2c 20 61  te3VdbeGoto(v, a
af40: 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20  ddrOk);.        
af50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
af60: 70 48 65 72 65 28 76 2c 20 73 71 6c 69 74 65 33  pHere(v, sqlite3
af70: 56 64 62 65 43 75 72 72 65 6e 74 41 64 64 72 28  VdbeCurrentAddr(
af80: 76 29 2d 32 29 3b 0a 20 20 20 20 20 20 20 20 7d  v)-2);.        }
af90: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
afa0: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e  for(j=0; j<pFK->
afb0: 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  nCol; j++){.    
afc0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
afd0: 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
afe0: 4f 66 54 61 62 6c 65 28 76 2c 20 70 54 61 62 2c  OfTable(v, pTab,
aff0: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   0,.            
b000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b010: 61 69 43 6f 6c 73 20 3f 20 61 69 43 6f 6c 73 5b  aiCols ? aiCols[
b020: 6a 5d 20 3a 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a  j] : pFK->aCol[j
b030: 5d 2e 69 46 72 6f 6d 2c 20 72 65 67 52 6f 77 2b  ].iFrom, regRow+
b040: 6a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  j);.            
b050: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
b060: 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20  2(v, OP_IsNull, 
b070: 72 65 67 52 6f 77 2b 6a 2c 20 61 64 64 72 4f 6b  regRow+j, addrOk
b080: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
b090: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  v);.          }.
b0a0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50            if( pP
b0b0: 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  arent ){.       
b0c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b0d0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 4d 61 6b  AddOp4(v, OP_Mak
b0e0: 65 52 65 63 6f 72 64 2c 20 72 65 67 52 6f 77 2c  eRecord, regRow,
b0f0: 20 70 46 4b 2d 3e 6e 43 6f 6c 2c 20 72 65 67 4b   pFK->nCol, regK
b100: 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey,.            
b110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b120: 20 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66    sqlite3IndexAf
b130: 66 69 6e 69 74 79 53 74 72 28 64 62 2c 70 49 64  finityStr(db,pId
b140: 78 29 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 29 3b 0a  x), pFK->nCol);.
b150: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
b160: 74 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74  te3VdbeAddOp4Int
b170: 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 2c  (v, OP_Found, i,
b180: 20 61 64 64 72 4f 6b 2c 20 72 65 67 4b 65 79 2c   addrOk, regKey,
b190: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
b1a0: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
b1b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
b1c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
b1d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
b1e0: 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30  2(v, OP_Rowid, 0
b1f0: 2c 20 72 65 67 52 65 73 75 6c 74 2b 31 29 3b 0a  , regResult+1);.
b200: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b210: 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20  dbeMultiLoad(v, 
b220: 72 65 67 52 65 73 75 6c 74 2b 32 2c 20 22 73 69  regResult+2, "si
b230: 22 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 69 2d 31  ", pFK->zTo, i-1
b240: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
b250: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
b260: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 72 65  OP_ResultRow, re
b270: 67 52 65 73 75 6c 74 2c 20 34 29 3b 0a 20 20 20  gResult, 4);.   
b280: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b290: 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20  ResolveLabel(v, 
b2a0: 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20  addrOk);.       
b2b0: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
b2c0: 62 2c 20 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20  b, aiCols);.    
b2d0: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
b2e0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
b2f0: 50 5f 4e 65 78 74 2c 20 30 2c 20 61 64 64 72 54  P_Next, 0, addrT
b300: 6f 70 2b 31 29 3b 20 56 64 62 65 43 6f 76 65 72  op+1); VdbeCover
b310: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71  age(v);.      sq
b320: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
b330: 65 28 76 2c 20 61 64 64 72 54 6f 70 29 3b 0a 20  e(v, addrTop);. 
b340: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
b350: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  ;.#endif /* !def
b360: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
b370: 5f 54 52 49 47 47 45 52 29 20 2a 2f 0a 23 65 6e  _TRIGGER) */.#en
b380: 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
b390: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
b3a0: 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66  IGN_KEY) */..#if
b3b0: 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 63 61  ndef NDEBUG.  ca
b3c0: 73 65 20 50 72 61 67 54 79 70 5f 50 41 52 53 45  se PragTyp_PARSE
b3d0: 52 5f 54 52 41 43 45 3a 20 7b 0a 20 20 20 20 69  R_TRACE: {.    i
b3e0: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
b3f0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 65     if( sqlite3Ge
b400: 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c  tBoolean(zRight,
b410: 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73   0) ){.        s
b420: 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
b430: 65 28 73 74 64 6f 75 74 2c 20 22 70 61 72 73 65  e(stdout, "parse
b440: 72 3a 20 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c  r: ");.      }el
b450: 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
b460: 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28 30  te3ParserTrace(0
b470: 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 0);.      }.  
b480: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
b490: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 52 65  .#endif..  /* Re
b4a0: 69 6e 73 74 61 6c 6c 20 74 68 65 20 4c 49 4b 45  install the LIKE
b4b0: 20 61 6e 64 20 47 4c 4f 42 20 66 75 6e 63 74 69   and GLOB functi
b4c0: 6f 6e 73 2e 20 20 54 68 65 20 76 61 72 69 61 6e  ons.  The varian
b4d0: 74 20 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a 20 75  t of LIKE.  ** u
b4e0: 73 65 64 20 77 69 6c 6c 20 62 65 20 63 61 73 65  sed will be case
b4f0: 20 73 65 6e 73 69 74 69 76 65 20 6f 72 20 6e 6f   sensitive or no
b500: 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74  t depending on t
b510: 68 65 20 52 48 53 2e 0a 20 20 2a 2f 0a 20 20 63  he RHS..  */.  c
b520: 61 73 65 20 50 72 61 67 54 79 70 5f 43 41 53 45  ase PragTyp_CASE
b530: 5f 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 3a  _SENSITIVE_LIKE:
b540: 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
b550: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
b560: 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75  e3RegisterLikeFu
b570: 6e 63 74 69 6f 6e 73 28 64 62 2c 20 73 71 6c 69  nctions(db, sqli
b580: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
b590: 69 67 68 74 2c 20 30 29 29 3b 0a 20 20 20 20 7d  ight, 0));.    }
b5a0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 23  .  }.  break;..#
b5b0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 49 4e  ifndef SQLITE_IN
b5c0: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52  TEGRITY_CHECK_ER
b5d0: 52 4f 52 5f 4d 41 58 0a 23 20 64 65 66 69 6e 65  ROR_MAX.# define
b5e0: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54   SQLITE_INTEGRIT
b5f0: 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41  Y_CHECK_ERROR_MA
b600: 58 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a 23 69  X 100.#endif..#i
b610: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
b620: 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
b630: 4b 0a 20 20 2f 2a 20 50 72 61 67 6d 61 20 22 71  K.  /* Pragma "q
b640: 75 69 63 6b 5f 63 68 65 63 6b 22 20 69 73 20 72  uick_check" is r
b650: 65 64 75 63 65 64 20 76 65 72 73 69 6f 6e 20 6f  educed version o
b660: 66 20 0a 20 20 2a 2a 20 69 6e 74 65 67 72 69 74  f .  ** integrit
b670: 79 5f 63 68 65 63 6b 20 64 65 73 69 67 6e 65 64  y_check designed
b680: 20 74 6f 20 64 65 74 65 63 74 20 6d 6f 73 74 20   to detect most 
b690: 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
b6a0: 69 6f 6e 0a 20 20 2a 2a 20 77 69 74 68 6f 75 74  ion.  ** without
b6b0: 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 6f 76 65   most of the ove
b6c0: 72 68 65 61 64 20 6f 66 20 61 20 66 75 6c 6c 20  rhead of a full 
b6d0: 69 6e 74 65 67 72 69 74 79 2d 63 68 65 63 6b 2e  integrity-check.
b6e0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
b6f0: 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59 5f 43  gTyp_INTEGRITY_C
b700: 48 45 43 4b 3a 20 7b 0a 20 20 20 20 69 6e 74 20  HECK: {.    int 
b710: 69 2c 20 6a 2c 20 61 64 64 72 2c 20 6d 78 45 72  i, j, addr, mxEr
b720: 72 3b 0a 0a 20 20 20 20 69 6e 74 20 69 73 51 75  r;..    int isQu
b730: 69 63 6b 20 3d 20 28 73 71 6c 69 74 65 33 54 6f  ick = (sqlite3To
b740: 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d  lower(zLeft[0])=
b750: 3d 27 71 27 29 3b 0a 0a 20 20 20 20 2f 2a 20 49  ='q');..    /* I
b760: 66 20 74 68 65 20 50 52 41 47 4d 41 20 63 6f 6d  f the PRAGMA com
b770: 6d 61 6e 64 20 77 61 73 20 6f 66 20 74 68 65 20  mand was of the 
b780: 66 6f 72 6d 20 22 50 52 41 47 4d 41 20 3c 64 62  form "PRAGMA <db
b790: 3e 2e 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  >.integrity_chec
b7a0: 6b 22 2c 0a 20 20 20 20 2a 2a 20 74 68 65 6e 20  k",.    ** then 
b7b0: 69 44 62 20 69 73 20 73 65 74 20 74 6f 20 74 68  iDb is set to th
b7c0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
b7d0: 61 74 61 62 61 73 65 20 69 64 65 6e 74 69 66 69  atabase identifi
b7e0: 65 64 20 62 79 20 3c 64 62 3e 2e 0a 20 20 20 20  ed by <db>..    
b7f0: 2a 2a 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  ** In this case,
b800: 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 6f   the integrity o
b810: 66 20 64 61 74 61 62 61 73 65 20 69 44 62 20 6f  f database iDb o
b820: 6e 6c 79 20 69 73 20 76 65 72 69 66 69 65 64 20  nly is verified 
b830: 62 79 0a 20 20 20 20 2a 2a 20 74 68 65 20 56 44  by.    ** the VD
b840: 42 45 20 63 72 65 61 74 65 64 20 62 65 6c 6f 77  BE created below
b850: 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
b860: 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68  Otherwise, if th
b870: 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73 69  e command was si
b880: 6d 70 6c 79 20 22 50 52 41 47 4d 41 20 69 6e 74  mply "PRAGMA int
b890: 65 67 72 69 74 79 5f 63 68 65 63 6b 22 20 28 6f  egrity_check" (o
b8a0: 72 0a 20 20 20 20 2a 2a 20 22 50 52 41 47 4d 41  r.    ** "PRAGMA
b8b0: 20 71 75 69 63 6b 5f 63 68 65 63 6b 22 29 2c 20   quick_check"), 
b8c0: 74 68 65 6e 20 69 44 62 20 69 73 20 73 65 74 20  then iDb is set 
b8d0: 74 6f 20 30 2e 20 49 6e 20 74 68 69 73 20 63 61  to 0. In this ca
b8e0: 73 65 2c 20 73 65 74 20 69 44 62 0a 20 20 20 20  se, set iDb.    
b8f0: 2a 2a 20 74 6f 20 2d 31 20 68 65 72 65 2c 20 74  ** to -1 here, t
b900: 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 20  o indicate that 
b910: 74 68 65 20 56 44 42 45 20 73 68 6f 75 6c 64 20  the VDBE should 
b920: 76 65 72 69 66 79 20 74 68 65 20 69 6e 74 65 67  verify the integ
b930: 72 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 61  rity.    ** of a
b940: 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
b950: 62 61 73 65 73 2e 20 20 2a 2f 0a 20 20 20 20 61  bases.  */.    a
b960: 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 29 3b  ssert( iDb>=0 );
b970: 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62  .    assert( iDb
b980: 3d 3d 30 20 7c 7c 20 70 49 64 32 2d 3e 7a 20 29  ==0 || pId2->z )
b990: 3b 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e  ;.    if( pId2->
b9a0: 7a 3d 3d 30 20 29 20 69 44 62 20 3d 20 2d 31 3b  z==0 ) iDb = -1;
b9b0: 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c  ..    /* Initial
b9c0: 69 7a 65 20 74 68 65 20 56 44 42 45 20 70 72 6f  ize the VDBE pro
b9d0: 67 72 61 6d 20 2a 2f 0a 20 20 20 20 70 50 61 72  gram */.    pPar
b9e0: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20  se->nMem = 6;.  
b9f0: 20 20 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61    setOneColumnNa
ba00: 6d 65 28 76 2c 20 22 69 6e 74 65 67 72 69 74 79  me(v, "integrity
ba10: 5f 63 68 65 63 6b 22 29 3b 0a 0a 20 20 20 20 2f  _check");..    /
ba20: 2a 20 53 65 74 20 74 68 65 20 6d 61 78 69 6d 75  * Set the maximu
ba30: 6d 20 65 72 72 6f 72 20 63 6f 75 6e 74 20 2a 2f  m error count */
ba40: 0a 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c  .    mxErr = SQL
ba50: 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  ITE_INTEGRITY_CH
ba60: 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20  ECK_ERROR_MAX;. 
ba70: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
ba80: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 65  .      sqlite3Ge
ba90: 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26  tInt32(zRight, &
baa0: 6d 78 45 72 72 29 3b 0a 20 20 20 20 20 20 69 66  mxErr);.      if
bab0: 28 20 6d 78 45 72 72 3c 3d 30 20 29 7b 0a 20 20  ( mxErr<=0 ){.  
bac0: 20 20 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51        mxErr = SQ
bad0: 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43  LITE_INTEGRITY_C
bae0: 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a  HECK_ERROR_MAX;.
baf0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
bb00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
bb10: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
bb20: 72 2c 20 6d 78 45 72 72 2c 20 31 29 3b 20 20 2f  r, mxErr, 1);  /
bb30: 2a 20 72 65 67 5b 31 5d 20 68 6f 6c 64 73 20 65  * reg[1] holds e
bb40: 72 72 6f 72 73 20 6c 65 66 74 20 2a 2f 0a 0a 20  rrors left */.. 
bb50: 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65     /* Do an inte
bb60: 67 72 69 74 79 20 63 68 65 63 6b 20 6f 6e 20 65  grity check on e
bb70: 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ach database fil
bb80: 65 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30  e */.    for(i=0
bb90: 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
bba0: 29 7b 0a 20 20 20 20 20 20 48 61 73 68 45 6c 65  ){.      HashEle
bbb0: 6d 20 2a 78 3b 0a 20 20 20 20 20 20 48 61 73 68  m *x;.      Hash
bbc0: 20 2a 70 54 62 6c 73 3b 0a 20 20 20 20 20 20 69   *pTbls;.      i
bbd0: 6e 74 20 63 6e 74 20 3d 20 30 3b 0a 0a 20 20 20  nt cnt = 0;..   
bbe0: 20 20 20 69 66 28 20 4f 4d 49 54 5f 54 45 4d 50     if( OMIT_TEMP
bbf0: 44 42 20 26 26 20 69 3d 3d 31 20 29 20 63 6f 6e  DB && i==1 ) con
bc00: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 28  tinue;.      if(
bc10: 20 69 44 62 3e 3d 30 20 26 26 20 69 21 3d 69 44   iDb>=0 && i!=iD
bc20: 62 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20  b ) continue;.. 
bc30: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65       sqlite3Code
bc40: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
bc50: 72 73 65 2c 20 69 29 3b 0a 20 20 20 20 20 20 61  rse, i);.      a
bc60: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
bc70: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66  eAddOp1(v, OP_If
bc80: 50 6f 73 2c 20 31 29 3b 20 2f 2a 20 48 61 6c 74  Pos, 1); /* Halt
bc90: 20 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72   if out of error
bca0: 73 20 2a 2f 0a 20 20 20 20 20 20 56 64 62 65 43  s */.      VdbeC
bcb0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
bcc0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
bcd0: 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20  Op2(v, OP_Halt, 
bce0: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  0, 0);.      sql
bcf0: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
bd00: 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20 20  (v, addr);..    
bd10: 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67    /* Do an integ
bd20: 72 69 74 79 20 63 68 65 63 6b 20 6f 66 20 74 68  rity check of th
bd30: 65 20 42 2d 54 72 65 65 0a 20 20 20 20 20 20 2a  e B-Tree.      *
bd40: 2a 0a 20 20 20 20 20 20 2a 2a 20 42 65 67 69 6e  *.      ** Begin
bd50: 20 62 79 20 66 69 6c 6c 69 6e 67 20 72 65 67 69   by filling regi
bd60: 73 74 65 72 73 20 32 2c 20 33 2c 20 2e 2e 2e 20  sters 2, 3, ... 
bd70: 77 69 74 68 20 74 68 65 20 72 6f 6f 74 20 70 61  with the root pa
bd80: 67 65 73 20 6e 75 6d 62 65 72 73 0a 20 20 20 20  ges numbers.    
bd90: 20 20 2a 2a 20 66 6f 72 20 61 6c 6c 20 74 61 62    ** for all tab
bda0: 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 20  les and indices 
bdb0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  in the database.
bdc0: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
bdd0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
bde0: 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
bdf0: 62 2c 20 69 2c 20 30 29 20 29 3b 0a 20 20 20 20  b, i, 0) );.    
be00: 20 20 70 54 62 6c 73 20 3d 20 26 64 62 2d 3e 61    pTbls = &db->a
be10: 44 62 5b 69 5d 2e 70 53 63 68 65 6d 61 2d 3e 74  Db[i].pSchema->t
be20: 62 6c 48 61 73 68 3b 0a 20 20 20 20 20 20 66 6f  blHash;.      fo
be30: 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(x=sqliteHashFi
be40: 72 73 74 28 70 54 62 6c 73 29 3b 20 78 3b 20 78  rst(pTbls); x; x
be50: 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28  =sqliteHashNext(
be60: 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62  x)){.        Tab
be70: 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74  le *pTab = sqlit
be80: 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20  eHashData(x);.  
be90: 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64        Index *pId
bea0: 78 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 48  x;.        if( H
beb0: 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b  asRowid(pTab) ){
bec0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
bed0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
bee0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 54 61 62  OP_Integer, pTab
bef0: 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a  ->tnum, 2+cnt);.
bf00: 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43 6f            VdbeCo
bf10: 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73 22 2c 20  mment((v, "%s", 
bf20: 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 29 3b 0a 20  pTab->zName));. 
bf30: 20 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a           cnt++;.
bf40: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
bf50: 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d    for(pIdx=pTab-
bf60: 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70  >pIndex; pIdx; p
bf70: 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29  Idx=pIdx->pNext)
bf80: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
bf90: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
bfa0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 49 64   OP_Integer, pId
bfb0: 78 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b  x->tnum, 2+cnt);
bfc0: 0a 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43  .          VdbeC
bfd0: 6f 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73 22 2c  omment((v, "%s",
bfe0: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 29 29 3b 0a   pIdx->zName));.
bff0: 20 20 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b            cnt++;
c000: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
c010: 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b   }..      /* Mak
c020: 65 20 73 75 72 65 20 73 75 66 66 69 63 69 65 6e  e sure sufficien
c030: 74 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 67 69  t number of regi
c040: 73 74 65 72 73 20 68 61 76 65 20 62 65 65 6e 20  sters have been 
c050: 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 20  allocated */.   
c060: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
c070: 3d 20 4d 41 58 28 20 70 50 61 72 73 65 2d 3e 6e  = MAX( pParse->n
c080: 4d 65 6d 2c 20 63 6e 74 2b 38 20 29 3b 0a 0a 20  Mem, cnt+8 );.. 
c090: 20 20 20 20 20 2f 2a 20 44 6f 20 74 68 65 20 62       /* Do the b
c0a0: 2d 74 72 65 65 20 69 6e 74 65 67 72 69 74 79 20  -tree integrity 
c0b0: 63 68 65 63 6b 73 20 2a 2f 0a 20 20 20 20 20 20  checks */.      
c0c0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c0d0: 33 28 76 2c 20 4f 50 5f 49 6e 74 65 67 72 69 74  3(v, OP_Integrit
c0e0: 79 43 6b 2c 20 32 2c 20 63 6e 74 2c 20 31 29 3b  yCk, 2, cnt, 1);
c0f0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c100: 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20 28 75  beChangeP5(v, (u
c110: 38 29 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72  8)i);.      addr
c120: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
c130: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 73 4e 75 6c  dOp1(v, OP_IsNul
c140: 6c 2c 20 32 29 3b 20 56 64 62 65 43 6f 76 65 72  l, 2); VdbeCover
c150: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71  age(v);.      sq
c160: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
c170: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
c180: 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  , 3, 0,.        
c190: 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
c1a0: 64 62 2c 20 22 2a 2a 2a 20 69 6e 20 64 61 74 61  db, "*** in data
c1b0: 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e 22 2c 20  base %s ***\n", 
c1c0: 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
c1d0: 29 2c 0a 20 20 20 20 20 20 20 20 20 50 34 5f 44  ),.         P4_D
c1e0: 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20 20 73  YNAMIC);.      s
c1f0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
c200: 28 76 2c 20 4f 50 5f 4d 6f 76 65 2c 20 32 2c 20  (v, OP_Move, 2, 
c210: 34 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  4, 1);.      sql
c220: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
c230: 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20  , OP_Concat, 4, 
c240: 33 2c 20 32 29 3b 0a 20 20 20 20 20 20 73 71 6c  3, 2);.      sql
c250: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c260: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
c270: 32 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  2, 1);.      sql
c280: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
c290: 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20 20  (v, addr);..    
c2a0: 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
c2b0: 6c 6c 20 74 68 65 20 69 6e 64 69 63 65 73 20 61  ll the indices a
c2c0: 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 63  re constructed c
c2d0: 6f 72 72 65 63 74 6c 79 2e 0a 20 20 20 20 20 20  orrectly..      
c2e0: 2a 2f 0a 20 20 20 20 20 20 66 6f 72 28 78 3d 73  */.      for(x=s
c2f0: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 70  qliteHashFirst(p
c300: 54 62 6c 73 29 3b 20 78 20 26 26 20 21 69 73 51  Tbls); x && !isQ
c310: 75 69 63 6b 3b 20 78 3d 73 71 6c 69 74 65 48 61  uick; x=sqliteHa
c320: 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20  shNext(x)){.    
c330: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20      Table *pTab 
c340: 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  = sqliteHashData
c350: 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64  (x);.        Ind
c360: 65 78 20 2a 70 49 64 78 2c 20 2a 70 50 6b 3b 0a  ex *pIdx, *pPk;.
c370: 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70          Index *p
c380: 50 72 69 6f 72 20 3d 20 30 3b 0a 20 20 20 20 20  Prior = 0;.     
c390: 20 20 20 69 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a     int loopTop;.
c3a0: 20 20 20 20 20 20 20 20 69 6e 74 20 69 44 61 74          int iDat
c3b0: 61 43 75 72 2c 20 69 49 64 78 43 75 72 3b 0a 20  aCur, iIdxCur;. 
c3c0: 20 20 20 20 20 20 20 69 6e 74 20 72 31 20 3d 20         int r1 = 
c3d0: 2d 31 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28  -1;..        if(
c3e0: 20 70 54 61 62 2d 3e 70 49 6e 64 65 78 3d 3d 30   pTab->pIndex==0
c3f0: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
c400: 20 20 20 20 20 70 50 6b 20 3d 20 48 61 73 52 6f       pPk = HasRo
c410: 77 69 64 28 70 54 61 62 29 20 3f 20 30 20 3a 20  wid(pTab) ? 0 : 
c420: 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65  sqlite3PrimaryKe
c430: 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20 20  yIndex(pTab);.  
c440: 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c        addr = sql
c450: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
c460: 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20  , OP_IfPos, 1); 
c470: 20 2f 2a 20 53 74 6f 70 20 69 66 20 6f 75 74 20   /* Stop if out 
c480: 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20  of errors */.   
c490: 20 20 20 20 20 56 64 62 65 43 6f 76 65 72 61 67       VdbeCoverag
c4a0: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 73 71  e(v);.        sq
c4b0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c4c0: 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30  v, OP_Halt, 0, 0
c4d0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
c4e0: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
c4f0: 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 20 20 20  , addr);.       
c500: 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
c510: 65 43 6c 65 61 72 28 70 50 61 72 73 65 29 3b 0a  eClear(pParse);.
c520: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f          sqlite3O
c530: 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63  penTableAndIndic
c540: 65 73 28 70 50 61 72 73 65 2c 20 70 54 61 62 2c  es(pParse, pTab,
c550: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 30 2c   OP_OpenRead, 0,
c560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c580: 20 20 20 20 31 2c 20 30 2c 20 26 69 44 61 74 61      1, 0, &iData
c590: 43 75 72 2c 20 26 69 49 64 78 43 75 72 29 3b 0a  Cur, &iIdxCur);.
c5a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c5b0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c5c0: 49 6e 74 65 67 65 72 2c 20 30 2c 20 37 29 3b 0a  Integer, 0, 7);.
c5d0: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c          for(j=0,
c5e0: 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64   pIdx=pTab->pInd
c5f0: 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
c600: 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29  Idx->pNext, j++)
c610: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
c620: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c630: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20   OP_Integer, 0, 
c640: 38 2b 6a 29 3b 20 2f 2a 20 69 6e 64 65 78 20 65  8+j); /* index e
c650: 6e 74 72 69 65 73 20 63 6f 75 6e 74 65 72 20 2a  ntries counter *
c660: 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  /.        }.    
c670: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
c680: 20 3d 20 4d 41 58 28 70 50 61 72 73 65 2d 3e 6e   = MAX(pParse->n
c690: 4d 65 6d 2c 20 38 2b 6a 29 3b 0a 20 20 20 20 20  Mem, 8+j);.     
c6a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c6b0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 77 69 6e  dOp2(v, OP_Rewin
c6c0: 64 2c 20 69 44 61 74 61 43 75 72 2c 20 30 29 3b  d, iDataCur, 0);
c6d0: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
c6e0: 3b 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70 54 6f  ;.        loopTo
c6f0: 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  p = sqlite3VdbeA
c700: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49  ddOp2(v, OP_AddI
c710: 6d 6d 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20 20  mm, 7, 1);.     
c720: 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61     /* Verify tha
c730: 74 20 61 6c 6c 20 4e 4f 54 20 4e 55 4c 4c 20 63  t all NOT NULL c
c740: 6f 6c 75 6d 6e 73 20 72 65 61 6c 6c 79 20 61 72  olumns really ar
c750: 65 20 4e 4f 54 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e NOT NULL */.  
c760: 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a        for(j=0; j
c770: 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b  <pTab->nCol; j++
c780: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63 68 61  ){.          cha
c790: 72 20 2a 7a 45 72 72 3b 0a 20 20 20 20 20 20 20  r *zErr;.       
c7a0: 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70     int jmp2, jmp
c7b0: 33 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  3;.          if(
c7c0: 20 6a 3d 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20   j==pTab->iPKey 
c7d0: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
c7e0: 20 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e        if( pTab->
c7f0: 61 43 6f 6c 5b 6a 5d 2e 6e 6f 74 4e 75 6c 6c 3d  aCol[j].notNull=
c800: 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
c810: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
c820: 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
c830: 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70 54 61 62  nOfTable(v, pTab
c840: 2c 20 69 44 61 74 61 43 75 72 2c 20 6a 2c 20 33  , iDataCur, j, 3
c850: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
c860: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 35  ite3VdbeChangeP5
c870: 28 76 2c 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  (v, OPFLAG_TYPEO
c880: 46 41 52 47 29 3b 0a 20 20 20 20 20 20 20 20 20  FARG);.         
c890: 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33 56   jmp2 = sqlite3V
c8a0: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
c8b0: 4e 6f 74 4e 75 6c 6c 2c 20 33 29 3b 20 56 64 62  NotNull, 3); Vdb
c8c0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
c8d0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c8e0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c8f0: 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20  AddImm, 1, -1); 
c900: 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72  /* Decrement err
c910: 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20  or limit */.    
c920: 20 20 20 20 20 20 7a 45 72 72 20 3d 20 73 71 6c        zErr = sql
c930: 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20  ite3MPrintf(db, 
c940: 22 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20 25  "NULL value in %
c950: 73 2e 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61  s.%s", pTab->zNa
c960: 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  me,.            
c970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c980: 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e    pTab->aCol[j].
c990: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20  zName);.        
c9a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c9b0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
c9c0: 38 2c 20 30 2c 20 33 2c 20 30 2c 20 7a 45 72 72  8, 0, 3, 0, zErr
c9d0: 2c 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20  , P4_DYNAMIC);. 
c9e0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
c9f0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
ca00: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31  _ResultRow, 3, 1
ca10: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70  );.          jmp
ca20: 33 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  3 = sqlite3VdbeA
ca30: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f  ddOp1(v, OP_IfPo
ca40: 73 2c 20 31 29 3b 20 56 64 62 65 43 6f 76 65 72  s, 1); VdbeCover
ca50: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
ca60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ca70: 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b  Op0(v, OP_Halt);
ca80: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
ca90: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
caa0: 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20 20  , jmp2);.       
cab0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
cac0: 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 33 29 3b  mpHere(v, jmp3);
cad0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
cae0: 20 20 20 2f 2a 20 56 61 6c 69 64 61 74 65 20 69     /* Validate i
caf0: 6e 64 65 78 20 65 6e 74 72 69 65 73 20 66 6f 72  ndex entries for
cb00: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
cb10: 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28   */.        for(
cb20: 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e  j=0, pIdx=pTab->
cb30: 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
cb40: 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20  dx=pIdx->pNext, 
cb50: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
cb60: 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33 2c 20  int jmp2, jmp3, 
cb70: 6a 6d 70 34 2c 20 6a 6d 70 35 3b 0a 20 20 20 20  jmp4, jmp5;.    
cb80: 20 20 20 20 20 20 69 6e 74 20 63 6b 55 6e 69 71        int ckUniq
cb90: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61   = sqlite3VdbeMa
cba0: 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20  keLabel(v);.    
cbb0: 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70        if( pPk==p
cbc0: 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  Idx ) continue;.
cbd0: 20 20 20 20 20 20 20 20 20 20 72 31 20 3d 20 73            r1 = s
cbe0: 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e  qlite3GenerateIn
cbf0: 64 65 78 4b 65 79 28 70 50 61 72 73 65 2c 20 70  dexKey(pParse, p
cc00: 49 64 78 2c 20 69 44 61 74 61 43 75 72 2c 20 30  Idx, iDataCur, 0
cc10: 2c 20 30 2c 20 26 6a 6d 70 33 2c 0a 20 20 20 20  , 0, &jmp3,.    
cc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc40: 20 20 20 70 50 72 69 6f 72 2c 20 72 31 29 3b 0a     pPrior, r1);.
cc50: 20 20 20 20 20 20 20 20 20 20 70 50 72 69 6f 72            pPrior
cc60: 20 3d 20 70 49 64 78 3b 0a 20 20 20 20 20 20 20   = pIdx;.       
cc70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
cc80: 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
cc90: 6d 2c 20 38 2b 6a 2c 20 31 29 3b 20 20 2f 2a 20  m, 8+j, 1);  /* 
cca0: 69 6e 63 72 65 6d 65 6e 74 20 65 6e 74 72 79 20  increment entry 
ccb0: 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20  count */.       
ccc0: 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61     /* Verify tha
ccd0: 74 20 61 6e 20 69 6e 64 65 78 20 65 6e 74 72 79  t an index entry
cce0: 20 65 78 69 73 74 73 20 66 6f 72 20 74 68 65 20   exists for the 
ccf0: 63 75 72 72 65 6e 74 20 74 61 62 6c 65 20 72 6f  current table ro
cd00: 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 6a  w */.          j
cd10: 6d 70 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62  mp2 = sqlite3Vdb
cd20: 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50  eAddOp4Int(v, OP
cd30: 5f 46 6f 75 6e 64 2c 20 69 49 64 78 43 75 72 2b  _Found, iIdxCur+
cd40: 6a 2c 20 63 6b 55 6e 69 71 2c 20 72 31 2c 0a 20  j, ckUniq, r1,. 
cd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd70: 20 20 20 20 20 70 49 64 78 2d 3e 6e 43 6f 6c 75       pIdx->nColu
cd80: 6d 6e 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  mn); VdbeCoverag
cd90: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
cda0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
cdb0: 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20  2(v, OP_AddImm, 
cdc0: 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65  1, -1); /* Decre
cdd0: 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69 74  ment error limit
cde0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 73 71   */.          sq
cdf0: 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72  lite3VdbeLoadStr
ce00: 69 6e 67 28 76 2c 20 33 2c 20 22 72 6f 77 20 22  ing(v, 3, "row "
ce10: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
ce20: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
ce30: 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 37 2c 20  , OP_Concat, 7, 
ce40: 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20  3, 3);.         
ce50: 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64   sqlite3VdbeLoad
ce60: 53 74 72 69 6e 67 28 76 2c 20 34 2c 20 22 20 6d  String(v, 4, " m
ce70: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
ce80: 78 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  x ");.          
ce90: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
cea0: 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20  3(v, OP_Concat, 
ceb0: 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20  4, 3, 3);.      
cec0: 20 20 20 20 6a 6d 70 35 20 3d 20 73 71 6c 69 74      jmp5 = sqlit
ced0: 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67  e3VdbeLoadString
cee0: 28 76 2c 20 34 2c 20 70 49 64 78 2d 3e 7a 4e 61  (v, 4, pIdx->zNa
cef0: 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  me);.          s
cf00: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
cf10: 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34  (v, OP_Concat, 4
cf20: 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  , 3, 3);.       
cf30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
cf40: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
cf50: 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20 20 20  tRow, 3, 1);.   
cf60: 20 20 20 20 20 20 20 6a 6d 70 34 20 3d 20 73 71         jmp4 = sq
cf70: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
cf80: 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b  v, OP_IfPos, 1);
cf90: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
cfa0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
cfb0: 74 65 33 56 64 62 65 41 64 64 4f 70 30 28 76 2c  te3VdbeAddOp0(v,
cfc0: 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20 20 20   OP_Halt);.     
cfd0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cfe0: 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 32  JumpHere(v, jmp2
cff0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  );.          /* 
d000: 46 6f 72 20 55 4e 49 51 55 45 20 69 6e 64 65 78  For UNIQUE index
d010: 65 73 2c 20 76 65 72 69 66 79 20 74 68 61 74 20  es, verify that 
d020: 6f 6e 6c 79 20 6f 6e 65 20 65 6e 74 72 79 20 65  only one entry e
d030: 78 69 73 74 73 20 77 69 74 68 20 74 68 65 0a 20  xists with the. 
d040: 20 20 20 20 20 20 20 20 20 2a 2a 20 63 75 72 72           ** curr
d050: 65 6e 74 20 6b 65 79 2e 20 20 54 68 65 20 65 6e  ent key.  The en
d060: 74 72 79 20 69 73 20 75 6e 69 71 75 65 20 69 66  try is unique if
d070: 20 28 31 29 20 61 6e 79 20 63 6f 6c 75 6d 6e 20   (1) any column 
d080: 69 73 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20  is NULL.        
d090: 20 20 2a 2a 20 6f 72 20 28 32 29 20 74 68 65 20    ** or (2) the 
d0a0: 6e 65 78 74 20 65 6e 74 72 79 20 68 61 73 20 61  next entry has a
d0b0: 20 64 69 66 66 65 72 65 6e 74 20 6b 65 79 20 2a   different key *
d0c0: 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  /.          if( 
d0d0: 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 70 49  IsUniqueIndex(pI
d0e0: 64 78 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  dx) ){.         
d0f0: 20 20 20 69 6e 74 20 75 6e 69 71 4f 6b 20 3d 20     int uniqOk = 
d100: 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c  sqlite3VdbeMakeL
d110: 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20  abel(v);.       
d120: 20 20 20 20 20 69 6e 74 20 6a 6d 70 36 3b 0a 20       int jmp6;. 
d130: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6b             int k
d140: 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  k;.            f
d150: 6f 72 28 6b 6b 3d 30 3b 20 6b 6b 3c 70 49 64 78  or(kk=0; kk<pIdx
d160: 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 6b 6b 2b 2b 29  ->nKeyCol; kk++)
d170: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
d180: 69 6e 74 20 69 43 6f 6c 20 3d 20 70 49 64 78 2d  int iCol = pIdx-
d190: 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 6b 5d 3b 0a 20  >aiColumn[kk];. 
d1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
d1b0: 65 72 74 28 20 69 43 6f 6c 21 3d 58 4e 5f 52 4f  ert( iCol!=XN_RO
d1c0: 57 49 44 20 26 26 20 69 43 6f 6c 3c 70 54 61 62  WID && iCol<pTab
d1d0: 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20  ->nCol );.      
d1e0: 20 20 20 20 20 20 20 20 69 66 28 20 69 43 6f 6c          if( iCol
d1f0: 3e 3d 30 20 26 26 20 70 54 61 62 2d 3e 61 43 6f  >=0 && pTab->aCo
d200: 6c 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e 75 6c 6c 20  l[iCol].notNull 
d210: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
d220: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d230: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d240: 50 5f 49 73 4e 75 6c 6c 2c 20 72 31 2b 6b 6b 2c  P_IsNull, r1+kk,
d250: 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20   uniqOk);.      
d260: 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 76 65          VdbeCove
d270: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
d280: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
d290: 20 20 20 6a 6d 70 36 20 3d 20 73 71 6c 69 74 65     jmp6 = sqlite
d2a0: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
d2b0: 50 5f 4e 65 78 74 2c 20 69 49 64 78 43 75 72 2b  P_Next, iIdxCur+
d2c0: 6a 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  j); VdbeCoverage
d2d0: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (v);.           
d2e0: 20 73 71 6c 69 74 65 33 56 64 62 65 47 6f 74 6f   sqlite3VdbeGoto
d2f0: 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20  (v, uniqOk);.   
d300: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d310: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
d320: 6a 6d 70 36 29 3b 0a 20 20 20 20 20 20 20 20 20  jmp6);.         
d330: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d340: 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 49 64  dOp4Int(v, OP_Id
d350: 78 47 54 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20  xGT, iIdxCur+j, 
d360: 75 6e 69 71 4f 6b 2c 20 72 31 2c 0a 20 20 20 20  uniqOk, r1,.    
d370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d380: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 49 64               pId
d390: 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 20 56 64 62  x->nKeyCol); Vdb
d3a0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
d3b0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d3c0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d3d0: 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29  P_AddImm, 1, -1)
d3e0: 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65  ; /* Decrement e
d3f0: 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20  rror limit */.  
d400: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d410: 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28  3VdbeLoadString(
d420: 76 2c 20 33 2c 20 22 6e 6f 6e 2d 75 6e 69 71 75  v, 3, "non-uniqu
d430: 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65 78  e entry in index
d440: 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   ");.           
d450: 20 73 71 6c 69 74 65 33 56 64 62 65 47 6f 74 6f   sqlite3VdbeGoto
d460: 28 76 2c 20 6a 6d 70 35 29 3b 0a 20 20 20 20 20  (v, jmp5);.     
d470: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d480: 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76  beResolveLabel(v
d490: 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20  , uniqOk);.     
d4a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
d4b0: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
d4c0: 48 65 72 65 28 76 2c 20 6a 6d 70 34 29 3b 0a 20  Here(v, jmp4);. 
d4d0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d4e0: 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61  ResolvePartIdxLa
d4f0: 62 65 6c 28 70 50 61 72 73 65 2c 20 6a 6d 70 33  bel(pParse, jmp3
d500: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
d510: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d520: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78  AddOp2(v, OP_Nex
d530: 74 2c 20 69 44 61 74 61 43 75 72 2c 20 6c 6f 6f  t, iDataCur, loo
d540: 70 54 6f 70 29 3b 20 56 64 62 65 43 6f 76 65 72  pTop); VdbeCover
d550: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
d560: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
d570: 65 72 65 28 76 2c 20 6c 6f 6f 70 54 6f 70 2d 31  ere(v, loopTop-1
d580: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
d590: 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e  E_OMIT_BTREECOUN
d5a0: 54 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  T.        sqlite
d5b0: 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28  3VdbeLoadString(
d5c0: 76 2c 20 32 2c 20 22 77 72 6f 6e 67 20 23 20 6f  v, 2, "wrong # o
d5d0: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
d5e0: 65 78 20 22 29 3b 0a 20 20 20 20 20 20 20 20 66  ex ");.        f
d5f0: 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61  or(j=0, pIdx=pTa
d600: 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
d610: 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
d620: 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  t, j++){.       
d630: 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49 64 78     if( pPk==pIdx
d640: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
d650: 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71         addr = sq
d660: 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74  lite3VdbeCurrent
d670: 41 64 64 72 28 76 29 3b 0a 20 20 20 20 20 20 20  Addr(v);.       
d680: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d690: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp2(v, OP_IfPos
d6a0: 2c 20 31 2c 20 61 64 64 72 2b 32 29 3b 20 56 64  , 1, addr+2); Vd
d6b0: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
d6c0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d6d0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d6e0: 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20  _Halt, 0, 0);.  
d6f0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d700: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d710: 43 6f 75 6e 74 2c 20 69 49 64 78 43 75 72 2b 6a  Count, iIdxCur+j
d720: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 3);.          
d730: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d740: 33 28 76 2c 20 4f 50 5f 45 71 2c 20 38 2b 6a 2c  3(v, OP_Eq, 8+j,
d750: 20 61 64 64 72 2b 38 2c 20 33 29 3b 20 56 64 62   addr+8, 3); Vdb
d760: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
d770: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d780: 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20 53  dbeChangeP5(v, S
d790: 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 29 3b 0a  QLITE_NOTNULL);.
d7a0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d7b0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d7c0: 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29  P_AddImm, 1, -1)
d7d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d7e0: 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e  te3VdbeLoadStrin
d7f0: 67 28 76 2c 20 33 2c 20 70 49 64 78 2d 3e 7a 4e  g(v, 3, pIdx->zN
d800: 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ame);.          
d810: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d820: 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20  3(v, OP_Concat, 
d830: 33 2c 20 32 2c 20 37 29 3b 0a 20 20 20 20 20 20  3, 2, 7);.      
d840: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d850: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
d860: 6c 74 52 6f 77 2c 20 37 2c 20 31 29 3b 0a 20 20  ltRow, 7, 1);.  
d870: 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f        }.#endif /
d880: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  * SQLITE_OMIT_BT
d890: 52 45 45 43 4f 55 4e 54 20 2a 2f 0a 20 20 20 20  REECOUNT */.    
d8a0: 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20 7b    } .    }.    {
d8b0: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
d8c0: 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44  nst int iLn = VD
d8d0: 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f  BE_OFFSET_LINENO
d8e0: 28 32 29 3b 0a 20 20 20 20 20 20 73 74 61 74 69  (2);.      stati
d8f0: 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
d900: 73 74 20 65 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b  st endCode[] = {
d910: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 41 64  .        { OP_Ad
d920: 64 49 6d 6d 2c 20 20 20 20 20 20 31 2c 20 30 2c  dImm,      1, 0,
d930: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
d940: 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b  * 0 */.        {
d950: 20 4f 50 5f 49 66 2c 20 20 20 20 20 20 20 20 20   OP_If,         
d960: 20 31 2c 20 34 2c 20 20 20 20 20 20 20 20 30 7d   1, 4,        0}
d970: 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20  ,    /* 1 */.   
d980: 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67       { OP_String
d990: 38 2c 20 20 20 20 20 30 2c 20 33 2c 20 20 20 20  8,     0, 3,    
d9a0: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 32 20      0},    /* 2 
d9b0: 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  */.        { OP_
d9c0: 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20  ResultRow,   3, 
d9d0: 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20  1,        0},   
d9e0: 20 2f 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20 7d   /* 3 */.      }
d9f0: 3b 0a 20 20 20 20 20 20 56 64 62 65 4f 70 20 2a  ;.      VdbeOp *
da00: 61 4f 70 3b 0a 0a 20 20 20 20 20 20 61 4f 70 20  aOp;..      aOp 
da10: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
da20: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
da30: 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c 20 65 6e  ize(endCode), en
da40: 64 43 6f 64 65 2c 20 69 4c 6e 29 3b 0a 20 20 20  dCode, iLn);.   
da50: 20 20 20 69 66 28 20 61 4f 70 20 29 7b 0a 20 20     if( aOp ){.  
da60: 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70 32 20        aOp[0].p2 
da70: 3d 20 2d 6d 78 45 72 72 3b 0a 20 20 20 20 20 20  = -mxErr;.      
da80: 20 20 61 4f 70 5b 32 5d 2e 70 34 74 79 70 65 20    aOp[2].p4type 
da90: 3d 20 50 34 5f 53 54 41 54 49 43 3b 0a 20 20 20  = P4_STATIC;.   
daa0: 20 20 20 20 20 61 4f 70 5b 32 5d 2e 70 34 2e 7a       aOp[2].p4.z
dab0: 20 3d 20 22 6f 6b 22 3b 0a 20 20 20 20 20 20 7d   = "ok";.      }
dac0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
dad0: 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ak;.#endif /* SQ
dae0: 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
daf0: 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 23 69  ITY_CHECK */..#i
db00: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
db10: 54 5f 55 54 46 31 36 0a 20 20 2f 2a 0a 20 20 2a  T_UTF16.  /*.  *
db20: 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64  *   PRAGMA encod
db30: 69 6e 67 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ing.  **   PRAGM
db40: 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 22 75 74  A encoding = "ut
db50: 66 2d 38 22 7c 22 75 74 66 2d 31 36 22 7c 22 75  f-8"|"utf-16"|"u
db60: 74 66 2d 31 36 6c 65 22 7c 22 75 74 66 2d 31 36  tf-16le"|"utf-16
db70: 62 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e  be".  **.  ** In
db80: 20 69 74 73 20 66 69 72 73 74 20 66 6f 72 6d 2c   its first form,
db90: 20 74 68 69 73 20 70 72 61 67 6d 61 20 72 65 74   this pragma ret
dba0: 75 72 6e 73 20 74 68 65 20 65 6e 63 6f 64 69 6e  urns the encodin
dbb0: 67 20 6f 66 20 74 68 65 20 6d 61 69 6e 0a 20 20  g of the main.  
dbc0: 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 49 66 20  ** database. If 
dbd0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
dbe0: 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c  not initialized,
dbf0: 20 69 74 20 69 73 20 69 6e 69 74 69 61 6c 69 7a   it is initializ
dc00: 65 64 20 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a  ed now..  **.  *
dc10: 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  * The second for
dc20: 6d 20 6f 66 20 74 68 69 73 20 70 72 61 67 6d 61  m of this pragma
dc30: 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74   is a no-op if t
dc40: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
dc50: 20 66 69 6c 65 0a 20 20 2a 2a 20 68 61 73 20 6e   file.  ** has n
dc60: 6f 74 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  ot already been 
dc70: 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 6e 20  initialized. In 
dc80: 74 68 69 73 20 63 61 73 65 20 69 74 20 73 65 74  this case it set
dc90: 73 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20  s the default.  
dca0: 2a 2a 20 65 6e 63 6f 64 69 6e 67 20 74 68 61 74  ** encoding that
dcb0: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f   will be used fo
dcc0: 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
dcd0: 61 73 65 20 66 69 6c 65 20 69 66 20 61 20 6e 65  ase file if a ne
dce0: 77 20 66 69 6c 65 0a 20 20 2a 2a 20 69 73 20 63  w file.  ** is c
dcf0: 72 65 61 74 65 64 2e 20 49 66 20 61 6e 20 65 78  reated. If an ex
dd00: 69 73 74 69 6e 67 20 6d 61 69 6e 20 64 61 74 61  isting main data
dd10: 62 61 73 65 20 66 69 6c 65 20 69 73 20 6f 70 65  base file is ope
dd20: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 20 20  ned, then the.  
dd30: 2a 2a 20 64 65 66 61 75 6c 74 20 74 65 78 74 20  ** default text 
dd40: 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20 74 68 65  encoding for the
dd50: 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61   existing databa
dd60: 73 65 20 69 73 20 75 73 65 64 2e 0a 20 20 2a 2a  se is used..  **
dd70: 20 0a 20 20 2a 2a 20 49 6e 20 61 6c 6c 20 63 61   .  ** In all ca
dd80: 73 65 73 20 6e 65 77 20 64 61 74 61 62 61 73 65  ses new database
dd90: 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  s created using 
dda0: 74 68 65 20 41 54 54 41 43 48 20 63 6f 6d 6d 61  the ATTACH comma
ddb0: 6e 64 20 61 72 65 0a 20 20 2a 2a 20 63 72 65 61  nd are.  ** crea
ddc0: 74 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 73  ted to use the s
ddd0: 61 6d 65 20 64 65 66 61 75 6c 74 20 74 65 78 74  ame default text
dde0: 20 65 6e 63 6f 64 69 6e 67 20 61 73 20 74 68 65   encoding as the
ddf0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20   main database. 
de00: 49 66 0a 20 20 2a 2a 20 74 68 65 20 6d 61 69 6e  If.  ** the main
de10: 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f   database has no
de20: 74 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  t been initializ
de30: 65 64 20 61 6e 64 2f 6f 72 20 63 72 65 61 74 65  ed and/or create
de40: 64 20 77 68 65 6e 20 41 54 54 41 43 48 0a 20 20  d when ATTACH.  
de50: 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64 2c 20  ** is executed, 
de60: 74 68 69 73 20 69 73 20 64 6f 6e 65 20 62 65 66  this is done bef
de70: 6f 72 65 20 74 68 65 20 41 54 54 41 43 48 20 6f  ore the ATTACH o
de80: 70 65 72 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20  peration..  **. 
de90: 20 2a 2a 20 49 6e 20 74 68 65 20 73 65 63 6f 6e   ** In the secon
dea0: 64 20 66 6f 72 6d 20 74 68 69 73 20 70 72 61 67  d form this prag
deb0: 6d 61 20 73 65 74 73 20 74 68 65 20 74 65 78 74  ma sets the text
dec0: 20 65 6e 63 6f 64 69 6e 67 20 74 6f 20 62 65 20   encoding to be 
ded0: 75 73 65 64 20 69 6e 0a 20 20 2a 2a 20 6e 65 77  used in.  ** new
dee0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
def0: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68  created using th
df00: 69 73 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  is database hand
df10: 6c 65 2e 20 49 74 20 69 73 20 6f 6e 6c 79 0a 20  le. It is only. 
df20: 20 2a 2a 20 75 73 65 66 75 6c 20 69 66 20 69 6e   ** useful if in
df30: 76 6f 6b 65 64 20 69 6d 6d 65 64 69 61 74 65 6c  voked immediatel
df40: 79 20 61 66 74 65 72 20 74 68 65 20 6d 61 69 6e  y after the main
df50: 20 64 61 74 61 62 61 73 65 20 69 0a 20 20 2a 2f   database i.  */
df60: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
df70: 45 4e 43 4f 44 49 4e 47 3a 20 7b 0a 20 20 20 20  ENCODING: {.    
df80: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72  static const str
df90: 75 63 74 20 45 6e 63 4e 61 6d 65 20 7b 0a 20 20  uct EncName {.  
dfa0: 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
dfb0: 0a 20 20 20 20 20 20 75 38 20 65 6e 63 3b 0a 20  .      u8 enc;. 
dfc0: 20 20 20 7d 20 65 6e 63 6e 61 6d 65 73 5b 5d 20     } encnames[] 
dfd0: 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 55 54 46  = {.      { "UTF
dfe0: 38 22 2c 20 20 20 20 20 53 51 4c 49 54 45 5f 55  8",     SQLITE_U
dff0: 54 46 38 20 20 20 20 20 20 20 20 7d 2c 0a 20 20  TF8        },.  
e000: 20 20 20 20 7b 20 22 55 54 46 2d 38 22 2c 20 20      { "UTF-8",  
e010: 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20    SQLITE_UTF8   
e020: 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74       },  /* Must
e030: 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 31 5d 20   be element [1] 
e040: 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d  */.      { "UTF-
e050: 31 36 6c 65 22 2c 20 53 51 4c 49 54 45 5f 55 54  16le", SQLITE_UT
e060: 46 31 36 4c 45 20 20 20 20 20 7d 2c 20 20 2f 2a  F16LE     },  /*
e070: 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74   Must be element
e080: 20 5b 32 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20   [2] */.      { 
e090: 22 55 54 46 2d 31 36 62 65 22 2c 20 53 51 4c 49  "UTF-16be", SQLI
e0a0: 54 45 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d  TE_UTF16BE     }
e0b0: 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c  ,  /* Must be el
e0c0: 65 6d 65 6e 74 20 5b 33 5d 20 2a 2f 0a 20 20 20  ement [3] */.   
e0d0: 20 20 20 7b 20 22 55 54 46 31 36 6c 65 22 2c 20     { "UTF16le", 
e0e0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20   SQLITE_UTF16LE 
e0f0: 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
e100: 55 54 46 31 36 62 65 22 2c 20 20 53 51 4c 49 54  UTF16be",  SQLIT
e110: 45 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c  E_UTF16BE     },
e120: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36  .      { "UTF-16
e130: 22 2c 20 20 20 30 20 20 20 20 20 20 20 20 20 20  ",   0          
e140: 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51          }, /* SQ
e150: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
e160: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46   */.      { "UTF
e170: 31 36 22 2c 20 20 20 20 30 20 20 20 20 20 20 20  16",    0       
e180: 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a             }, /*
e190: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
e1a0: 49 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 30  IVE */.      { 0
e1b0: 2c 20 30 20 7d 0a 20 20 20 20 7d 3b 0a 20 20 20  , 0 }.    };.   
e1c0: 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e   const struct En
e1d0: 63 4e 61 6d 65 20 2a 70 45 6e 63 3b 0a 20 20 20  cName *pEnc;.   
e1e0: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 20   if( !zRight ){ 
e1f0: 20 20 20 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e     /* "PRAGMA en
e200: 63 6f 64 69 6e 67 22 20 2a 2f 0a 20 20 20 20 20  coding" */.     
e210: 20 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64   if( sqlite3Read
e220: 53 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29  Schema(pParse) )
e230: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
e240: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
e250: 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f  encnames[SQLITE_
e260: 55 54 46 38 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54  UTF8].enc==SQLIT
e270: 45 5f 55 54 46 38 20 29 3b 0a 20 20 20 20 20 20  E_UTF8 );.      
e280: 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73  assert( encnames
e290: 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 5d  [SQLITE_UTF16LE]
e2a0: 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  .enc==SQLITE_UTF
e2b0: 31 36 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73  16LE );.      as
e2c0: 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53  sert( encnames[S
e2d0: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 5d 2e 65  QLITE_UTF16BE].e
e2e0: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
e2f0: 42 45 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75  BE );.      retu
e300: 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20  rnSingleText(v, 
e310: 22 65 6e 63 6f 64 69 6e 67 22 2c 20 65 6e 63 6e  "encoding", encn
e320: 61 6d 65 73 5b 45 4e 43 28 70 50 61 72 73 65 2d  ames[ENC(pParse-
e330: 3e 64 62 29 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20  >db)].zName);.  
e340: 20 20 7d 65 6c 73 65 7b 20 20 20 20 20 20 20 20    }else{        
e350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e360: 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64  /* "PRAGMA encod
e370: 69 6e 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20  ing = XXX" */.  
e380: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e      /* Only chan
e390: 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ge the value of 
e3a0: 73 71 6c 69 74 65 2e 65 6e 63 20 69 66 20 74 68  sqlite.enc if th
e3b0: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
e3c0: 65 20 69 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a  e is not.      *
e3d0: 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49  * initialized. I
e3e0: 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  f the main datab
e3f0: 61 73 65 20 65 78 69 73 74 73 2c 20 74 68 65 20  ase exists, the 
e400: 6e 65 77 20 73 71 6c 69 74 65 2e 65 6e 63 20 76  new sqlite.enc v
e410: 61 6c 75 65 0a 20 20 20 20 20 20 2a 2a 20 77 69  alue.      ** wi
e420: 6c 6c 20 62 65 20 6f 76 65 72 77 72 69 74 74 65  ll be overwritte
e430: 6e 20 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d  n when the schem
e440: 61 20 69 73 20 6e 65 78 74 20 6c 6f 61 64 65 64  a is next loaded
e450: 2e 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74  . If it does not
e460: 0a 20 20 20 20 20 20 2a 2a 20 61 6c 72 65 61 64  .      ** alread
e470: 79 20 65 78 69 73 74 73 2c 20 69 74 20 77 69 6c  y exists, it wil
e480: 6c 20 62 65 20 63 72 65 61 74 65 64 20 74 6f 20  l be created to 
e490: 75 73 65 20 74 68 65 20 6e 65 77 20 65 6e 63 6f  use the new enco
e4a0: 64 69 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20 20  ding value..    
e4b0: 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 0a    */.      if( .
e4c0: 20 20 20 20 20 20 20 20 21 28 44 62 48 61 73 50          !(DbHasP
e4d0: 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44  roperty(db, 0, D
e4e0: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 29  B_SchemaLoaded))
e4f0: 20 7c 7c 20 0a 20 20 20 20 20 20 20 20 44 62 48   || .        DbH
e500: 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30  asProperty(db, 0
e510: 2c 20 44 42 5f 45 6d 70 74 79 29 20 0a 20 20 20  , DB_Empty) .   
e520: 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f     ){.        fo
e530: 72 28 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65 73  r(pEnc=&encnames
e540: 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65  [0]; pEnc->zName
e550: 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20 20  ; pEnc++){.     
e560: 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69       if( 0==sqli
e570: 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68  te3StrICmp(zRigh
e580: 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20  t, pEnc->zName) 
e590: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ){.            S
e5a0: 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 3d 20  CHEMA_ENC(db) = 
e5b0: 45 4e 43 28 64 62 29 20 3d 0a 20 20 20 20 20 20  ENC(db) =.      
e5c0: 20 20 20 20 20 20 20 20 20 20 70 45 6e 63 2d 3e            pEnc->
e5d0: 65 6e 63 20 3f 20 70 45 6e 63 2d 3e 65 6e 63 20  enc ? pEnc->enc 
e5e0: 3a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  : SQLITE_UTF16NA
e5f0: 54 49 56 45 3b 0a 20 20 20 20 20 20 20 20 20 20  TIVE;.          
e600: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
e610: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
e620: 20 20 20 20 20 20 20 69 66 28 20 21 70 45 6e 63         if( !pEnc
e630: 2d 3e 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20  ->zName ){.     
e640: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
e650: 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 75 6e  rMsg(pParse, "un
e660: 73 75 70 70 6f 72 74 65 64 20 65 6e 63 6f 64 69  supported encodi
e670: 6e 67 3a 20 25 73 22 2c 20 7a 52 69 67 68 74 29  ng: %s", zRight)
e680: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
e690: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
e6a0: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
e6b0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
e6c0: 31 36 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  16 */..#ifndef S
e6d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
e6e0: 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41  A_VERSION_PRAGMA
e6f0: 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  S.  /*.  **   PR
e700: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 73 63  AGMA [schema.]sc
e710: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a  hema_version.  *
e720: 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  *   PRAGMA [sche
e730: 6d 61 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69  ma.]schema_versi
e740: 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20  on = <integer>. 
e750: 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   **.  **   PRAGM
e760: 41 20 5b 73 63 68 65 6d 61 2e 5d 75 73 65 72 5f  A [schema.]user_
e770: 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50  version.  **   P
e780: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 75  RAGMA [schema.]u
e790: 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69  ser_version = <i
e7a0: 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a  nteger>.  **.  *
e7b0: 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  *   PRAGMA [sche
e7c0: 6d 61 2e 5d 66 72 65 65 6c 69 73 74 5f 63 6f 75  ma.]freelist_cou
e7d0: 6e 74 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20  nt = <integer>. 
e7e0: 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   **.  **   PRAGM
e7f0: 41 20 5b 73 63 68 65 6d 61 2e 5d 61 70 70 6c 69  A [schema.]appli
e800: 63 61 74 69 6f 6e 5f 69 64 0a 20 20 2a 2a 20 20  cation_id.  **  
e810: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
e820: 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 20  ]application_id 
e830: 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a  = <integer>.  **
e840: 0a 20 20 2a 2a 20 54 68 65 20 70 72 61 67 6d 61  .  ** The pragma
e850: 27 73 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  's schema_versio
e860: 6e 20 61 6e 64 20 75 73 65 72 5f 76 65 72 73 69  n and user_versi
e870: 6f 6e 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  on are used to s
e880: 65 74 20 6f 72 20 67 65 74 0a 20 20 2a 2a 20 74  et or get.  ** t
e890: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
e8a0: 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61  schema-version a
e8b0: 6e 64 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 2c  nd user-version,
e8c0: 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 42   respectively. B
e8d0: 6f 74 68 0a 20 20 2a 2a 20 74 68 65 20 73 63 68  oth.  ** the sch
e8e0: 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20  ema-version and 
e8f0: 74 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e  the user-version
e900: 20 61 72 65 20 33 32 2d 62 69 74 20 73 69 67 6e   are 32-bit sign
e910: 65 64 20 69 6e 74 65 67 65 72 73 0a 20 20 2a 2a  ed integers.  **
e920: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64   stored in the d
e930: 61 74 61 62 61 73 65 20 68 65 61 64 65 72 2e 0a  atabase header..
e940: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 63    **.  ** The sc
e950: 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 69 73 20 75  hema-cookie is u
e960: 73 75 61 6c 6c 79 20 6f 6e 6c 79 20 6d 61 6e 69  sually only mani
e970: 70 75 6c 61 74 65 64 20 69 6e 74 65 72 6e 61 6c  pulated internal
e980: 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74  ly by SQLite. It
e990: 0a 20 20 2a 2a 20 69 73 20 69 6e 63 72 65 6d 65  .  ** is increme
e9a0: 6e 74 65 64 20 62 79 20 53 51 4c 69 74 65 20 77  nted by SQLite w
e9b0: 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61  henever the data
e9c0: 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 6d  base schema is m
e9d0: 6f 64 69 66 69 65 64 20 28 62 79 0a 20 20 2a 2a  odified (by.  **
e9e0: 20 63 72 65 61 74 69 6e 67 20 6f 72 20 64 72 6f   creating or dro
e9f0: 70 70 69 6e 67 20 61 20 74 61 62 6c 65 20 6f 72  pping a table or
ea00: 20 69 6e 64 65 78 29 2e 20 54 68 65 20 73 63 68   index). The sch
ea10: 65 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20 75  ema version is u
ea20: 73 65 64 20 62 79 0a 20 20 2a 2a 20 53 51 4c 69  sed by.  ** SQLi
ea30: 74 65 20 65 61 63 68 20 74 69 6d 65 20 61 20 71  te each time a q
ea40: 75 65 72 79 20 69 73 20 65 78 65 63 75 74 65 64  uery is executed
ea50: 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20   to ensure that 
ea60: 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 63 61 63  the internal cac
ea70: 68 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 73  he.  ** of the s
ea80: 63 68 65 6d 61 20 75 73 65 64 20 77 68 65 6e 20  chema used when 
ea90: 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 53 51  compiling the SQ
eaa0: 4c 20 71 75 65 72 79 20 6d 61 74 63 68 65 73 20  L query matches 
eab0: 74 68 65 20 73 63 68 65 6d 61 20 6f 66 0a 20 20  the schema of.  
eac0: 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
ead0: 61 67 61 69 6e 73 74 20 77 68 69 63 68 20 74 68  against which th
eae0: 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79  e compiled query
eaf0: 20 69 73 20 61 63 74 75 61 6c 6c 79 20 65 78 65   is actually exe
eb00: 63 75 74 65 64 2e 0a 20 20 2a 2a 20 53 75 62 76  cuted..  ** Subv
eb10: 65 72 74 69 6e 67 20 74 68 69 73 20 6d 65 63 68  erting this mech
eb20: 61 6e 69 73 6d 20 62 79 20 75 73 69 6e 67 20 22  anism by using "
eb30: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
eb40: 72 73 69 6f 6e 22 20 74 6f 20 6d 6f 64 69 66 79  rsion" to modify
eb50: 0a 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61  .  ** the schema
eb60: 2d 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 74 65  -version is pote
eb70: 6e 74 69 61 6c 6c 79 20 64 61 6e 67 65 72 6f 75  ntially dangerou
eb80: 73 20 61 6e 64 20 6d 61 79 20 6c 65 61 64 20 74  s and may lead t
eb90: 6f 20 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 63  o program.  ** c
eba0: 72 61 73 68 65 73 20 6f 72 20 64 61 74 61 62 61  rashes or databa
ebb0: 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20 55  se corruption. U
ebc0: 73 65 20 77 69 74 68 20 63 61 75 74 69 6f 6e 21  se with caution!
ebd0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 75  .  **.  ** The u
ebe0: 73 65 72 2d 76 65 72 73 69 6f 6e 20 69 73 20 6e  ser-version is n
ebf0: 6f 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c  ot used internal
ec00: 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74  ly by SQLite. It
ec10: 20 6d 61 79 20 62 65 20 75 73 65 64 20 62 79 0a   may be used by.
ec20: 20 20 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f 6e    ** application
ec30: 73 20 66 6f 72 20 61 6e 79 20 70 75 72 70 6f 73  s for any purpos
ec40: 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  e..  */.  case P
ec50: 72 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41  ragTyp_HEADER_VA
ec60: 4c 55 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69  LUE: {.    int i
ec70: 43 6f 6f 6b 69 65 20 3d 20 70 50 72 61 67 6d 61  Cookie = pPragma
ec80: 2d 3e 69 41 72 67 3b 20 20 2f 2a 20 57 68 69 63  ->iArg;  /* Whic
ec90: 68 20 63 6f 6f 6b 69 65 20 74 6f 20 72 65 61 64  h cookie to read
eca0: 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 20   or write */.   
ecb0: 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73   sqlite3VdbeUses
ecc0: 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20  Btree(v, iDb);. 
ecd0: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 26 26     if( zRight &&
ece0: 20 28 70 50 72 61 67 6d 61 2d 3e 6d 50 72 61 67   (pPragma->mPrag
ecf0: 46 6c 61 67 20 26 20 50 72 61 67 46 6c 61 67 5f  Flag & PragFlag_
ed00: 52 65 61 64 4f 6e 6c 79 29 3d 3d 30 20 29 7b 0a  ReadOnly)==0 ){.
ed10: 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20 74        /* Write t
ed20: 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f  he specified coo
ed30: 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20  kie value */.   
ed40: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
ed50: 56 64 62 65 4f 70 4c 69 73 74 20 73 65 74 43 6f  VdbeOpList setCo
ed60: 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  okie[] = {.     
ed70: 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74     { OP_Transact
ed80: 69 6f 6e 2c 20 20 20 20 30 2c 20 20 31 2c 20 20  ion,    0,  1,  
ed90: 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20  0},    /* 0 */. 
eda0: 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43         { OP_SetC
edb0: 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20  ookie,      0,  
edc0: 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20  0,  0},    /* 1 
edd0: 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  */.      };.    
ede0: 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20    VdbeOp *aOp;. 
edf0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ee00: 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52 65  VerifyNoMallocRe
ee10: 71 75 69 72 65 64 28 76 2c 20 41 72 72 61 79 53  quired(v, ArrayS
ee20: 69 7a 65 28 73 65 74 43 6f 6f 6b 69 65 29 29 3b  ize(setCookie));
ee30: 0a 20 20 20 20 20 20 61 4f 70 20 3d 20 73 71 6c  .      aOp = sql
ee40: 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73  ite3VdbeAddOpLis
ee50: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73  t(v, ArraySize(s
ee60: 65 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f  etCookie), setCo
ee70: 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  okie, 0);.      
ee80: 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c  if( ONLY_IF_REAL
ee90: 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f 70 3d 3d  LOC_STRESS(aOp==
eea0: 30 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  0) ) break;.    
eeb0: 20 20 61 4f 70 5b 30 5d 2e 70 31 20 3d 20 69 44    aOp[0].p1 = iD
eec0: 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e  b;.      aOp[1].
eed0: 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20  p1 = iDb;.      
eee0: 61 4f 70 5b 31 5d 2e 70 32 20 3d 20 69 43 6f 6f  aOp[1].p2 = iCoo
eef0: 6b 69 65 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31  kie;.      aOp[1
ef00: 5d 2e 70 33 20 3d 20 73 71 6c 69 74 65 33 41 74  ].p3 = sqlite3At
ef10: 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  oi(zRight);.    
ef20: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
ef30: 52 65 61 64 20 74 68 65 20 73 70 65 63 69 66 69  Read the specifi
ef40: 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20  ed cookie value 
ef50: 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20  */.      static 
ef60: 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74  const VdbeOpList
ef70: 20 72 65 61 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20   readCookie[] = 
ef80: 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54  {.        { OP_T
ef90: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 20  ransaction,     
efa0: 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f  0,  0,  0},    /
efb0: 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b  * 0 */.        {
efc0: 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20   OP_ReadCookie, 
efd0: 20 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c       0,  1,  0},
efe0: 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20      /* 1 */.    
eff0: 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52      { OP_ResultR
f000: 6f 77 2c 20 20 20 20 20 20 20 31 2c 20 20 31 2c  ow,       1,  1,
f010: 20 20 30 7d 0a 20 20 20 20 20 20 7d 3b 0a 20 20    0}.      };.  
f020: 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b      VdbeOp *aOp;
f030: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
f040: 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63  beVerifyNoMalloc
f050: 52 65 71 75 69 72 65 64 28 76 2c 20 41 72 72 61  Required(v, Arra
f060: 79 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65  ySize(readCookie
f070: 29 29 3b 0a 20 20 20 20 20 20 61 4f 70 20 3d 20  ));.      aOp = 
f080: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
f090: 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a  List(v, ArraySiz
f0a0: 65 28 72 65 61 64 43 6f 6f 6b 69 65 29 2c 72 65  e(readCookie),re
f0b0: 61 64 43 6f 6f 6b 69 65 2c 30 29 3b 0a 20 20 20  adCookie,0);.   
f0c0: 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52     if( ONLY_IF_R
f0d0: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f  EALLOC_STRESS(aO
f0e0: 70 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a 20  p==0) ) break;. 
f0f0: 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20 3d       aOp[0].p1 =
f100: 20 69 44 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b   iDb;.      aOp[
f110: 31 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20  1].p1 = iDb;.   
f120: 20 20 20 61 4f 70 5b 31 5d 2e 70 33 20 3d 20 69     aOp[1].p3 = i
f130: 43 6f 6f 6b 69 65 3b 0a 20 20 20 20 20 20 73 71  Cookie;.      sq
f140: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
f150: 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20  ols(v, 1);.     
f160: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
f170: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
f180: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74  NAME_NAME, zLeft
f190: 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
f1a0: 4e 54 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  NT);.    }.  }. 
f1b0: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
f1c0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  * SQLITE_OMIT_SC
f1d0: 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41  HEMA_VERSION_PRA
f1e0: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
f1f0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d   SQLITE_OMIT_COM
f200: 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53  PILEOPTION_DIAGS
f210: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
f220: 47 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f 70 74 69  GMA compile_opti
f230: 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  ons.  **.  ** Re
f240: 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f  turn the names o
f250: 66 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d 74 69  f all compile-ti
f260: 6d 65 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20  me options used 
f270: 69 6e 20 74 68 69 73 20 62 75 69 6c 64 2c 0a 20  in this build,. 
f280: 20 2a 2a 20 6f 6e 65 20 6f 70 74 69 6f 6e 20 70   ** one option p
f290: 65 72 20 72 6f 77 2e 0a 20 20 2a 2f 0a 20 20 63  er row..  */.  c
f2a0: 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4d 50  ase PragTyp_COMP
f2b0: 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a 20 7b 0a 20  ILE_OPTIONS: {. 
f2c0: 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20     int i = 0;.  
f2d0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f    const char *zO
f2e0: 70 74 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  pt;.    pParse->
f2f0: 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20 20 20 73 65  nMem = 1;.    se
f300: 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76  tOneColumnName(v
f310: 2c 20 22 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f  , "compile_optio
f320: 6e 22 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  n");.    while( 
f330: 28 7a 4f 70 74 20 3d 20 73 71 6c 69 74 65 33 5f  (zOpt = sqlite3_
f340: 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
f350: 74 28 69 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20  t(i++))!=0 ){.  
f360: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c      sqlite3VdbeL
f370: 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 31 2c 20  oadString(v, 1, 
f380: 7a 4f 70 74 29 3b 0a 20 20 20 20 20 20 73 71 6c  zOpt);.      sql
f390: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
f3a0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
f3b0: 31 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  1, 1);.    }.  }
f3c0: 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
f3d0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
f3e0: 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49  COMPILEOPTION_DI
f3f0: 41 47 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  AGS */..#ifndef 
f400: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
f410: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
f420: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 77 61 6c 5f  MA [schema.]wal_
f430: 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 70 61 73  checkpoint = pas
f440: 73 69 76 65 7c 66 75 6c 6c 7c 72 65 73 74 61 72  sive|full|restar
f450: 74 7c 74 72 75 6e 63 61 74 65 0a 20 20 2a 2a 0a  t|truncate.  **.
f460: 20 20 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20    ** Checkpoint 
f470: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  the database..  
f480: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
f490: 70 5f 57 41 4c 5f 43 48 45 43 4b 50 4f 49 4e 54  p_WAL_CHECKPOINT
f4a0: 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
f4b0: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c  onst char *azCol
f4c0: 5b 5d 20 3d 20 7b 20 22 62 75 73 79 22 2c 20 22  [] = { "busy", "
f4d0: 6c 6f 67 22 2c 20 22 63 68 65 63 6b 70 6f 69 6e  log", "checkpoin
f4e0: 74 65 64 22 20 7d 3b 0a 20 20 20 20 69 6e 74 20  ted" };.    int 
f4f0: 69 42 74 20 3d 20 28 70 49 64 32 2d 3e 7a 3f 69  iBt = (pId2->z?i
f500: 44 62 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  Db:SQLITE_MAX_AT
f510: 54 41 43 48 45 44 29 3b 0a 20 20 20 20 69 6e 74  TACHED);.    int
f520: 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f   eMode = SQLITE_
f530: 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49  CHECKPOINT_PASSI
f540: 56 45 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  VE;.    if( zRig
f550: 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ht ){.      if( 
f560: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
f570: 52 69 67 68 74 2c 20 22 66 75 6c 6c 22 29 3d 3d  Right, "full")==
f580: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f  0 ){.        eMo
f590: 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43  de = SQLITE_CHEC
f5a0: 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3b 0a 20 20 20  KPOINT_FULL;.   
f5b0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c     }else if( sql
f5c0: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67  ite3StrICmp(zRig
f5d0: 68 74 2c 20 22 72 65 73 74 61 72 74 22 29 3d 3d  ht, "restart")==
f5e0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f  0 ){.        eMo
f5f0: 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43  de = SQLITE_CHEC
f600: 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 3b 0a  KPOINT_RESTART;.
f610: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
f620: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
f630: 52 69 67 68 74 2c 20 22 74 72 75 6e 63 61 74 65  Right, "truncate
f640: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
f650: 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f   eMode = SQLITE_
f660: 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43  CHECKPOINT_TRUNC
f670: 41 54 45 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ATE;.      }.   
f680: 20 7d 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c   }.    setAllCol
f690: 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 33 2c 20 61  umnNames(v, 3, a
f6a0: 7a 43 6f 6c 29 3b 20 20 61 73 73 65 72 74 28 20  zCol);  assert( 
f6b0: 33 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43  3==ArraySize(azC
f6c0: 6f 6c 29 20 29 3b 0a 20 20 20 20 70 50 61 72 73  ol) );.    pPars
f6d0: 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20  e->nMem = 3;.   
f6e0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
f6f0: 70 33 28 76 2c 20 4f 50 5f 43 68 65 63 6b 70 6f  p3(v, OP_Checkpo
f700: 69 6e 74 2c 20 69 42 74 2c 20 65 4d 6f 64 65 2c  int, iBt, eMode,
f710: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
f720: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
f730: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33  _ResultRow, 1, 3
f740: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
f750: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
f760: 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63  GMA wal_autochec
f770: 6b 70 6f 69 6e 74 0a 20 20 2a 2a 20 20 20 50 52  kpoint.  **   PR
f780: 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65  AGMA wal_autoche
f790: 63 6b 70 6f 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a  ckpoint = N.  **
f7a0: 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20  .  ** Configure 
f7b0: 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  a database conne
f7c0: 63 74 69 6f 6e 20 74 6f 20 61 75 74 6f 6d 61 74  ction to automat
f7d0: 69 63 61 6c 6c 79 20 63 68 65 63 6b 70 6f 69 6e  ically checkpoin
f7e0: 74 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a  t a database.  *
f7f0: 2a 20 61 66 74 65 72 20 61 63 63 75 6d 75 6c 61  * after accumula
f800: 74 69 6e 67 20 4e 20 66 72 61 6d 65 73 20 69 6e  ting N frames in
f810: 20 74 68 65 20 6c 6f 67 2e 20 4f 72 20 71 75 65   the log. Or que
f820: 72 79 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  ry for the curre
f830: 6e 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20 6f 66  nt value.  ** of
f840: 20 4e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20   N..  */.  case 
f850: 50 72 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f  PragTyp_WAL_AUTO
f860: 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20  CHECKPOINT: {.  
f870: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
f880: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 61        sqlite3_wa
f890: 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
f8a0: 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69  (db, sqlite3Atoi
f8b0: 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d  (zRight));.    }
f8c0: 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
f8d0: 65 49 6e 74 28 76 2c 20 22 77 61 6c 5f 61 75 74  eInt(v, "wal_aut
f8e0: 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c 20 0a 20  ocheckpoint", . 
f8f0: 20 20 20 20 20 20 64 62 2d 3e 78 57 61 6c 43 61        db->xWalCa
f900: 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69 74 65 33 57  llback==sqlite3W
f910: 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 20 3f 20  alDefaultHook ? 
f920: 0a 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49  .           SQLI
f930: 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 64 62  TE_PTR_TO_INT(db
f940: 2d 3e 70 57 61 6c 41 72 67 29 20 3a 20 30 29 3b  ->pWalArg) : 0);
f950: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
f960: 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  ndif..  /*.  ** 
f970: 20 50 52 41 47 4d 41 20 73 68 72 69 6e 6b 5f 6d   PRAGMA shrink_m
f980: 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20 20 2a 2a 20  emory.  **.  ** 
f990: 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
f9a0: 46 3a 20 52 2d 32 33 34 34 35 2d 34 36 31 30 39  F: R-23445-46109
f9b0: 20 54 68 69 73 20 70 72 61 67 6d 61 20 63 61 75   This pragma cau
f9c0: 73 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ses the database
f9d0: 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  .  ** connection
f9e0: 20 6f 6e 20 77 68 69 63 68 20 69 74 20 69 73 20   on which it is 
f9f0: 69 6e 76 6f 6b 65 64 20 74 6f 20 66 72 65 65 20  invoked to free 
fa00: 75 70 20 61 73 20 6d 75 63 68 20 6d 65 6d 6f 72  up as much memor
fa10: 79 20 61 73 20 69 74 0a 20 20 2a 2a 20 63 61 6e  y as it.  ** can
fa20: 2c 20 62 79 20 63 61 6c 6c 69 6e 67 20 73 71 6c  , by calling sql
fa30: 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f  ite3_db_release_
fa40: 6d 65 6d 6f 72 79 28 29 2e 0a 20 20 2a 2f 0a 20  memory()..  */. 
fa50: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 48   case PragTyp_SH
fa60: 52 49 4e 4b 5f 4d 45 4d 4f 52 59 3a 20 7b 0a 20  RINK_MEMORY: {. 
fa70: 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65     sqlite3_db_re
fa80: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 64 62 29  lease_memory(db)
fa90: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
faa0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
fab0: 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f 75  AGMA busy_timeou
fac0: 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  t.  **   PRAGMA 
fad0: 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 3d 20 4e  busy_timeout = N
fae0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20  .  **.  ** Call 
faf0: 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d  sqlite3_busy_tim
fb00: 65 6f 75 74 28 64 62 2c 20 4e 29 2e 20 20 52 65  eout(db, N).  Re
fb10: 74 75 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74  turn the current
fb20: 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 0a 20   timeout value. 
fb30: 20 2a 2a 20 69 66 20 6f 6e 65 20 69 73 20 73 65   ** if one is se
fb40: 74 2e 20 20 49 66 20 6e 6f 20 62 75 73 79 20 68  t.  If no busy h
fb50: 61 6e 64 6c 65 72 20 6f 72 20 61 20 64 69 66 66  andler or a diff
fb60: 65 72 65 6e 74 20 62 75 73 79 20 68 61 6e 64 6c  erent busy handl
fb70: 65 72 20 69 73 20 73 65 74 0a 20 20 2a 2a 20 74  er is set.  ** t
fb80: 68 65 6e 20 30 20 69 73 20 72 65 74 75 72 6e 65  hen 0 is returne
fb90: 64 2e 20 20 53 65 74 74 69 6e 67 20 74 68 65 20  d.  Setting the 
fba0: 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 74 6f 20  busy_timeout to 
fbb0: 30 20 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20  0 or negative.  
fbc0: 2a 2a 20 64 69 73 61 62 6c 65 73 20 74 68 65 20  ** disables the 
fbd0: 74 69 6d 65 6f 75 74 2e 0a 20 20 2a 2f 0a 20 20  timeout..  */.  
fbe0: 2f 2a 63 61 73 65 20 50 72 61 67 54 79 70 5f 42  /*case PragTyp_B
fbf0: 55 53 59 5f 54 49 4d 45 4f 55 54 2a 2f 20 64 65  USY_TIMEOUT*/ de
fc00: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 61 73 73  fault: {.    ass
fc10: 65 72 74 28 20 70 50 72 61 67 6d 61 2d 3e 65 50  ert( pPragma->eP
fc20: 72 61 67 54 79 70 3d 3d 50 72 61 67 54 79 70 5f  ragTyp==PragTyp_
fc30: 42 55 53 59 5f 54 49 4d 45 4f 55 54 20 29 3b 0a  BUSY_TIMEOUT );.
fc40: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
fc50: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
fc60: 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c  busy_timeout(db,
fc70: 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
fc80: 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ght));.    }.   
fc90: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
fca0: 28 76 2c 20 22 74 69 6d 65 6f 75 74 22 2c 20 20  (v, "timeout",  
fcb0: 64 62 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74 29  db->busyTimeout)
fcc0: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
fcd0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
fce0: 41 47 4d 41 20 73 6f 66 74 5f 68 65 61 70 5f 6c  AGMA soft_heap_l
fcf0: 69 6d 69 74 0a 20 20 2a 2a 20 20 20 50 52 41 47  imit.  **   PRAG
fd00: 4d 41 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  MA soft_heap_lim
fd10: 69 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  it = N.  **.  **
fd20: 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
fd30: 4f 46 3a 20 52 2d 32 36 33 34 33 2d 34 35 39 33  OF: R-26343-4593
fd40: 30 20 54 68 69 73 20 70 72 61 67 6d 61 20 69 6e  0 This pragma in
fd50: 76 6f 6b 65 73 20 74 68 65 0a 20 20 2a 2a 20 73  vokes the.  ** s
fd60: 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70  qlite3_soft_heap
fd70: 5f 6c 69 6d 69 74 36 34 28 29 20 69 6e 74 65 72  _limit64() inter
fd80: 66 61 63 65 20 77 69 74 68 20 74 68 65 20 61 72  face with the ar
fd90: 67 75 6d 65 6e 74 20 4e 2c 20 69 66 20 4e 20 69  gument N, if N i
fda0: 73 0a 20 20 2a 2a 20 73 70 65 63 69 66 69 65 64  s.  ** specified
fdb0: 20 61 6e 64 20 69 73 20 61 20 6e 6f 6e 2d 6e 65   and is a non-ne
fdc0: 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 2e 0a  gative integer..
fdd0: 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    ** IMPLEMENTAT
fde0: 49 4f 4e 2d 4f 46 3a 20 52 2d 36 34 34 35 31 2d  ION-OF: R-64451-
fdf0: 30 37 31 36 33 20 54 68 65 20 73 6f 66 74 5f 68  07163 The soft_h
fe00: 65 61 70 5f 6c 69 6d 69 74 20 70 72 61 67 6d 61  eap_limit pragma
fe10: 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 72 65 74   always.  ** ret
fe20: 75 72 6e 73 20 74 68 65 20 73 61 6d 65 20 69 6e  urns the same in
fe30: 74 65 67 65 72 20 74 68 61 74 20 77 6f 75 6c 64  teger that would
fe40: 20 62 65 20 72 65 74 75 72 6e 65 64 20 62 79 20   be returned by 
fe50: 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  the.  ** sqlite3
fe60: 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
fe70: 36 34 28 2d 31 29 20 43 2d 6c 61 6e 67 75 61 67  64(-1) C-languag
fe80: 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2f  e function..  */
fe90: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
fea0: 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49 54 3a  SOFT_HEAP_LIMIT:
feb0: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69   {.    sqlite3_i
fec0: 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66 28 20  nt64 N;.    if( 
fed0: 7a 52 69 67 68 74 20 26 26 20 73 71 6c 69 74 65  zRight && sqlite
fee0: 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a  3DecOrHexToI64(z
fef0: 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53 51 4c 49  Right, &N)==SQLI
ff00: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73  TE_OK ){.      s
ff10: 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70  qlite3_soft_heap
ff20: 5f 6c 69 6d 69 74 36 34 28 4e 29 3b 0a 20 20 20  _limit64(N);.   
ff30: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
ff40: 67 6c 65 49 6e 74 28 76 2c 20 22 73 6f 66 74 5f  gleInt(v, "soft_
ff50: 68 65 61 70 5f 6c 69 6d 69 74 22 2c 20 20 73 71  heap_limit",  sq
ff60: 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f  lite3_soft_heap_
ff70: 6c 69 6d 69 74 36 34 28 2d 31 29 29 3b 0a 20 20  limit64(-1));.  
ff80: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
ff90: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
ffa0: 20 74 68 72 65 61 64 73 0a 20 20 2a 2a 20 20 20   threads.  **   
ffb0: 50 52 41 47 4d 41 20 74 68 72 65 61 64 73 20 3d  PRAGMA threads =
ffc0: 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e   N.  **.  ** Con
ffd0: 66 69 67 75 72 65 20 74 68 65 20 6d 61 78 69 6d  figure the maxim
ffe0: 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 77 6f 72  um number of wor
fff0: 6b 65 72 20 74 68 72 65 61 64 73 2e 20 20 52 65  ker threads.  Re
10000 74 75 72 6e 20 74 68 65 20 6e 65 77 0a 20 20 2a  turn the new.  *
10010 2a 20 6d 61 78 69 6d 75 6d 2c 20 77 68 69 63 68  * maximum, which
10020 20 6d 69 67 68 74 20 62 65 20 6c 65 73 73 20 74   might be less t
10030 68 61 6e 20 72 65 71 75 65 73 74 65 64 2e 0a 20  han requested.. 
10040 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
10050 79 70 5f 54 48 52 45 41 44 53 3a 20 7b 0a 20 20  yp_THREADS: {.  
10060 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
10070 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  N;.    if( zRigh
10080 74 0a 20 20 20 20 20 26 26 20 73 71 6c 69 74 65  t.     && sqlite
10090 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a  3DecOrHexToI64(z
100a0 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53 51 4c 49  Right, &N)==SQLI
100b0 54 45 5f 4f 4b 0a 20 20 20 20 20 26 26 20 4e 3e  TE_OK.     && N>
100c0 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  =0.    ){.      
100d0 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 64 62  sqlite3_limit(db
100e0 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57  , SQLITE_LIMIT_W
100f0 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 28  ORKER_THREADS, (
10100 69 6e 74 29 28 4e 26 30 78 37 66 66 66 66 66 66  int)(N&0x7ffffff
10110 66 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  f));.    }.    r
10120 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76  eturnSingleInt(v
10130 2c 20 22 74 68 72 65 61 64 73 22 2c 0a 20 20 20  , "threads",.   
10140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10150 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 64   sqlite3_limit(d
10160 62 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  b, SQLITE_LIMIT_
10170 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20  WORKER_THREADS, 
10180 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  -1));.    break;
10190 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65  .  }..#if define
101a0 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
101b0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
101c0 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a 20 20 2a  E_TEST).  /*.  *
101d0 2a 20 52 65 70 6f 72 74 20 74 68 65 20 63 75 72  * Report the cur
101e0 72 65 6e 74 20 73 74 61 74 65 20 6f 66 20 66 69  rent state of fi
101f0 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61 6c 6c 20  le logs for all 
10200 64 61 74 61 62 61 73 65 73 0a 20 20 2a 2f 0a 20  databases.  */. 
10210 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f   case PragTyp_LO
10220 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a 20 20 20  CK_STATUS: {.   
10230 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
10240 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f 63 6b  ar *const azLock
10250 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Name[] = {.     
10260 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20 22 73 68   "unlocked", "sh
10270 61 72 65 64 22 2c 20 22 72 65 73 65 72 76 65 64  ared", "reserved
10280 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c 20 22 65  ", "pending", "e
10290 78 63 6c 75 73 69 76 65 22 0a 20 20 20 20 7d 3b  xclusive".    };
102a0 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
102b0 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20  t char *azCol[] 
102c0 3d 20 7b 20 22 64 61 74 61 62 61 73 65 22 2c 20  = { "database", 
102d0 22 73 74 61 74 75 73 22 20 7d 3b 0a 20 20 20 20  "status" };.    
102e0 69 6e 74 20 69 3b 0a 20 20 20 20 73 65 74 41 6c  int i;.    setAl
102f0 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20  lColumnNames(v, 
10300 32 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72  2, azCol); asser
10310 74 28 20 32 3d 3d 41 72 72 61 79 53 69 7a 65 28  t( 2==ArraySize(
10320 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 70 50  azCol) );.    pP
10330 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a  arse->nMem = 2;.
10340 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64      for(i=0; i<d
10350 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
10360 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a      Btree *pBt;.
10370 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
10380 20 2a 7a 53 74 61 74 65 20 3d 20 22 75 6e 6b 6e   *zState = "unkn
10390 6f 77 6e 22 3b 0a 20 20 20 20 20 20 69 6e 74 20  own";.      int 
103a0 6a 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  j;.      if( db-
103b0 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 3d 3d 30  >aDb[i].zName==0
103c0 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
103d0 20 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62     pBt = db->aDb
103e0 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20 20 20 69  [i].pBt;.      i
103f0 66 28 20 70 42 74 3d 3d 30 20 7c 7c 20 73 71 6c  f( pBt==0 || sql
10400 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
10410 42 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Bt)==0 ){.      
10420 20 20 7a 53 74 61 74 65 20 3d 20 22 63 6c 6f 73    zState = "clos
10430 65 64 22 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ed";.      }else
10440 20 69 66 28 20 73 71 6c 69 74 65 33 5f 66 69 6c   if( sqlite3_fil
10450 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 69 20  e_control(db, i 
10460 3f 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  ? db->aDb[i].zNa
10470 6d 65 20 3a 20 30 2c 20 0a 20 20 20 20 20 20 20  me : 0, .       
10480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
104a0 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53  LITE_FCNTL_LOCKS
104b0 54 41 54 45 2c 20 26 6a 29 3d 3d 53 51 4c 49 54  TATE, &j)==SQLIT
104c0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
104d0 20 7a 53 74 61 74 65 20 3d 20 61 7a 4c 6f 63 6b   zState = azLock
104e0 4e 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d  Name[j];.      }
104f0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
10500 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31  beMultiLoad(v, 1
10510 2c 20 22 73 73 22 2c 20 64 62 2d 3e 61 44 62 5b  , "ss", db->aDb[
10520 69 5d 2e 7a 4e 61 6d 65 2c 20 7a 53 74 61 74 65  i].zName, zState
10530 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
10540 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
10550 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32  _ResultRow, 1, 2
10560 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65  );.    }.    bre
10570 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ak;.  }.#endif..
10580 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41  #ifdef SQLITE_HA
10590 53 5f 43 4f 44 45 43 0a 20 20 63 61 73 65 20 50  S_CODEC.  case P
105a0 72 61 67 54 79 70 5f 4b 45 59 3a 20 7b 0a 20 20  ragTyp_KEY: {.  
105b0 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 20 73    if( zRight ) s
105c0 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62  qlite3_key_v2(db
105d0 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20 73  , zDb, zRight, s
105e0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
105f0 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62 72 65  Right));.    bre
10600 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20 50  ak;.  }.  case P
10610 72 61 67 54 79 70 5f 52 45 4b 45 59 3a 20 7b 0a  ragTyp_REKEY: {.
10620 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
10630 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 5f 76   sqlite3_rekey_v
10640 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68  2(db, zDb, zRigh
10650 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  t, sqlite3Strlen
10660 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  30(zRight));.   
10670 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61   break;.  }.  ca
10680 73 65 20 50 72 61 67 54 79 70 5f 48 45 58 4b 45  se PragTyp_HEXKE
10690 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  Y: {.    if( zRi
106a0 67 68 74 20 29 7b 0a 20 20 20 20 20 20 75 38 20  ght ){.      u8 
106b0 69 42 79 74 65 3b 0a 20 20 20 20 20 20 69 6e 74  iByte;.      int
106c0 20 69 3b 0a 20 20 20 20 20 20 63 68 61 72 20 7a   i;.      char z
106d0 4b 65 79 5b 34 30 5d 3b 0a 20 20 20 20 20 20 66  Key[40];.      f
106e0 6f 72 28 69 3d 30 2c 20 69 42 79 74 65 3d 30 3b  or(i=0, iByte=0;
106f0 20 69 3c 73 69 7a 65 6f 66 28 7a 4b 65 79 29 2a   i<sizeof(zKey)*
10700 32 20 26 26 20 73 71 6c 69 74 65 33 49 73 78 64  2 && sqlite3Isxd
10710 69 67 69 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b  igit(zRight[i]);
10720 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
10730 42 79 74 65 20 3d 20 28 69 42 79 74 65 3c 3c 34  Byte = (iByte<<4
10740 29 20 2b 20 73 71 6c 69 74 65 33 48 65 78 54 6f  ) + sqlite3HexTo
10750 49 6e 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b 0a  Int(zRight[i]);.
10760 20 20 20 20 20 20 20 20 69 66 28 20 28 69 26 31          if( (i&1
10770 29 21 3d 30 20 29 20 7a 4b 65 79 5b 69 2f 32 5d  )!=0 ) zKey[i/2]
10780 20 3d 20 69 42 79 74 65 3b 0a 20 20 20 20 20 20   = iByte;.      
10790 7d 0a 20 20 20 20 20 20 69 66 28 20 28 7a 4c 65  }.      if( (zLe
107a0 66 74 5b 33 5d 20 26 20 30 78 66 29 3d 3d 30 78  ft[3] & 0xf)==0x
107b0 62 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  b ){.        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 4b 65 79 2c 20 69 2f 32 29 3b  zDb, zKey, i/2);
107e0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
107f0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65        sqlite3_re
10800 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20  key_v2(db, zDb, 
10810 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20 20  zKey, i/2);.    
10820 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72    }.    }.    br
10830 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
10840 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
10850 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 20 7c 7c  TE_HAS_CODEC) ||
10860 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
10870 45 4e 41 42 4c 45 5f 43 45 52 4f 44 29 0a 20 20  ENABLE_CEROD).  
10880 63 61 73 65 20 50 72 61 67 54 79 70 5f 41 43 54  case PragTyp_ACT
10890 49 56 41 54 45 5f 45 58 54 45 4e 53 49 4f 4e 53  IVATE_EXTENSIONS
108a0 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a  : if( zRight ){.
108b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41  #ifdef SQLITE_HA
108c0 53 5f 43 4f 44 45 43 0a 20 20 20 20 69 66 28 20  S_CODEC.    if( 
108d0 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28  sqlite3StrNICmp(
108e0 7a 52 69 67 68 74 2c 20 22 73 65 65 2d 22 2c 20  zRight, "see-", 
108f0 34 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  4)==0 ){.      s
10900 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65 5f  qlite3_activate_
10910 73 65 65 28 26 7a 52 69 67 68 74 5b 34 5d 29 3b  see(&zRight[4]);
10920 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69  .    }.#endif.#i
10930 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
10940 4c 45 5f 43 45 52 4f 44 0a 20 20 20 20 69 66 28  LE_CEROD.    if(
10950 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
10960 28 7a 52 69 67 68 74 2c 20 22 63 65 72 6f 64 2d  (zRight, "cerod-
10970 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", 6)==0 ){.    
10980 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61    sqlite3_activa
10990 74 65 5f 63 65 72 6f 64 28 26 7a 52 69 67 68 74  te_cerod(&zRight
109a0 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  [6]);.    }.#end
109b0 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
109c0 23 65 6e 64 69 66 0a 0a 20 20 7d 20 2f 2a 20 45  #endif..  } /* E
109d0 6e 64 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41  nd of the PRAGMA
109e0 20 73 77 69 74 63 68 20 2a 2f 0a 0a 70 72 61 67   switch */..prag
109f0 6d 61 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74 65  ma_out:.  sqlite
10a00 33 44 62 46 72 65 65 28 64 62 2c 20 7a 4c 65 66  3DbFree(db, zLef
10a10 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  t);.  sqlite3DbF
10a20 72 65 65 28 64 62 2c 20 7a 52 69 67 68 74 29 3b  ree(db, zRight);
10a30 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  .}..#endif /* SQ
10a40 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
10a50 20 2a 2f 0a                                       */.