/ Hex Artifact Content
Login

Artifact 78f85cf6c668b084702bb305bd4980b4813afa70:


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 72 65 73 75  ../*.** Set resu
1550: 6c 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  lt column names 
1560: 66 6f 72 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f  for a pragma..*/
1570: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 65 74  .static void set
1580: 50 72 61 67 6d 61 52 65 73 75 6c 74 43 6f 6c 75  PragmaResultColu
1590: 6d 6e 4e 61 6d 65 73 28 0a 20 20 56 64 62 65 20  mnNames(.  Vdbe 
15a0: 2a 76 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  *v,             
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 63 6f 6e 73 74 20 73 74 72 75   */.  const stru
15f0: 63 74 20 73 50 72 61 67 6d 61 4e 61 6d 65 73 20  ct sPragmaNames 
1600: 2a 70 50 72 61 67 6d 61 20 20 20 20 2f 2a 20 54  *pPragma    /* T
1610: 68 65 20 70 72 61 67 6d 61 20 2a 2f 0a 29 7b 0a  he pragma */.){.
1620: 20 20 75 38 20 6e 20 3d 20 70 50 72 61 67 6d 61    u8 n = pPragma
1630: 2d 3e 6e 50 72 61 67 43 4e 61 6d 65 3b 0a 20 20  ->nPragCName;.  
1640: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
1650: 6d 43 6f 6c 73 28 76 2c 20 6e 3d 3d 30 20 3f 20  mCols(v, n==0 ? 
1660: 31 20 3a 20 6e 29 3b 0a 20 20 69 66 28 20 6e 3d  1 : n);.  if( n=
1670: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
1680: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
1690: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
16a0: 4d 45 2c 20 70 50 72 61 67 6d 61 2d 3e 7a 4e 61  ME, pPragma->zNa
16b0: 6d 65 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  me, SQLITE_STATI
16c0: 43 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  C);.  }else{.   
16d0: 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 20 20 66   int i, j;.    f
16e0: 6f 72 28 69 3d 30 2c 20 6a 3d 70 50 72 61 67 6d  or(i=0, j=pPragm
16f0: 61 2d 3e 69 50 72 61 67 43 4e 61 6d 65 3b 20 69  a->iPragCName; i
1700: 3c 6e 3b 20 69 2b 2b 2c 20 6a 2b 2b 29 7b 0a 20  <n; i++, j++){. 
1710: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
1720: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 69 2c  SetColName(v, i,
1730: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 70   COLNAME_NAME, p
1740: 72 61 67 43 4e 61 6d 65 5b 6a 5d 2c 20 53 51 4c  ragCName[j], SQL
1750: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
1760: 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   }.  }.}../*.** 
1770: 47 65 6e 65 72 61 74 65 20 63 6f 64 65 20 74 6f  Generate code to
1780: 20 72 65 74 75 72 6e 20 61 20 73 69 6e 67 6c 65   return a single
1790: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a   integer value..
17a0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72  */.static void r
17b0: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 56  eturnSingleInt(V
17c0: 64 62 65 20 2a 76 2c 20 69 36 34 20 76 61 6c 75  dbe *v, i64 valu
17d0: 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  e){.  sqlite3Vdb
17e0: 65 41 64 64 4f 70 34 44 75 70 38 28 76 2c 20 4f  eAddOp4Dup8(v, O
17f0: 50 5f 49 6e 74 36 34 2c 20 30 2c 20 31 2c 20 30  P_Int64, 0, 1, 0
1800: 2c 20 28 63 6f 6e 73 74 20 75 38 2a 29 26 76 61  , (const u8*)&va
1810: 6c 75 65 2c 20 50 34 5f 49 4e 54 36 34 29 3b 0a  lue, P4_INT64);.
1820: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
1830: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
1840: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 7d 0a 0a 2f  Row, 1, 1);.}../
1850: 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 63 6f  *.** Generate co
1860: 64 65 20 74 6f 20 72 65 74 75 72 6e 20 61 20 73  de to return a s
1870: 69 6e 67 6c 65 20 74 65 78 74 20 76 61 6c 75 65  ingle text value
1880: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
1890: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78   returnSingleTex
18a0: 74 28 0a 20 20 56 64 62 65 20 2a 76 2c 20 20 20  t(.  Vdbe *v,   
18b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18c0: 50 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  Prepared stateme
18d0: 6e 74 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75  nt under constru
18e0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74  ction */.  const
18f0: 20 63 68 61 72 20 2a 7a 56 61 6c 75 65 20 20 20   char *zValue   
1900: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 62     /* Value to b
1910: 65 20 72 65 74 75 72 6e 65 64 20 2a 2f 0a 29 7b  e returned */.){
1920: 0a 20 20 69 66 28 20 7a 56 61 6c 75 65 20 29 7b  .  if( zValue ){
1930: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
1940: 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 31 2c  LoadString(v, 1,
1950: 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a 56   (const char*)zV
1960: 61 6c 75 65 29 3b 0a 20 20 20 20 73 71 6c 69 74  alue);.    sqlit
1970: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
1980: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
1990: 20 31 29 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a   1);.  }.}.../*.
19a0: 2a 2a 20 53 65 74 20 74 68 65 20 73 61 66 65 74  ** Set the safet
19b0: 79 5f 6c 65 76 65 6c 20 61 6e 64 20 70 61 67 65  y_level and page
19c0: 72 20 66 6c 61 67 73 20 66 6f 72 20 70 61 67 65  r flags for page
19d0: 72 20 69 44 62 2e 20 20 4f 72 20 69 66 20 69 44  r iDb.  Or if iD
19e0: 62 3c 30 0a 2a 2a 20 73 65 74 20 74 68 65 73 65  b<0.** set these
19f0: 20 76 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20   values for all 
1a00: 70 61 67 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  pagers..*/.#ifnd
1a10: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
1a20: 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 73 74 61  AGER_PRAGMAS.sta
1a30: 74 69 63 20 76 6f 69 64 20 73 65 74 41 6c 6c 50  tic void setAllP
1a40: 61 67 65 72 46 6c 61 67 73 28 73 71 6c 69 74 65  agerFlags(sqlite
1a50: 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62  3 *db){.  if( db
1a60: 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
1a70: 20 20 20 20 44 62 20 2a 70 44 62 20 3d 20 64 62      Db *pDb = db
1a80: 2d 3e 61 44 62 3b 0a 20 20 20 20 69 6e 74 20 6e  ->aDb;.    int n
1a90: 20 3d 20 64 62 2d 3e 6e 44 62 3b 0a 20 20 20 20   = db->nDb;.    
1aa0: 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f 46  assert( SQLITE_F
1ab0: 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f  ullFSync==PAGER_
1ac0: 46 55 4c 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20  FULLFSYNC );.   
1ad0: 20 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f   assert( SQLITE_
1ae0: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 3d 3d 50  CkptFullFSync==P
1af0: 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53  AGER_CKPT_FULLFS
1b00: 59 4e 43 20 29 3b 0a 20 20 20 20 61 73 73 65 72  YNC );.    asser
1b10: 74 28 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  t( SQLITE_CacheS
1b20: 70 69 6c 6c 3d 3d 50 41 47 45 52 5f 43 41 43 48  pill==PAGER_CACH
1b30: 45 53 50 49 4c 4c 20 29 3b 0a 20 20 20 20 61 73  ESPILL );.    as
1b40: 73 65 72 74 28 20 28 50 41 47 45 52 5f 46 55 4c  sert( (PAGER_FUL
1b50: 4c 46 53 59 4e 43 20 7c 20 50 41 47 45 52 5f 43  LFSYNC | PAGER_C
1b60: 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20  KPT_FULLFSYNC | 
1b70: 50 41 47 45 52 5f 43 41 43 48 45 53 50 49 4c 4c  PAGER_CACHESPILL
1b80: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3d  ).             =
1b90: 3d 20 20 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d  =  PAGER_FLAGS_M
1ba0: 41 53 4b 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ASK );.    asser
1bb0: 74 28 20 28 70 44 62 2d 3e 73 61 66 65 74 79 5f  t( (pDb->safety_
1bc0: 6c 65 76 65 6c 20 26 20 50 41 47 45 52 5f 53 59  level & PAGER_SY
1bd0: 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53 4b 29 3d  NCHRONOUS_MASK)=
1be0: 3d 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76  =pDb->safety_lev
1bf0: 65 6c 20 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  el );.    while(
1c00: 20 28 6e 2d 2d 29 20 3e 20 30 20 29 7b 0a 20 20   (n--) > 0 ){.  
1c10: 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 42 74      if( pDb->pBt
1c20: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
1c30: 74 65 33 42 74 72 65 65 53 65 74 50 61 67 65 72  te3BtreeSetPager
1c40: 46 6c 61 67 73 28 70 44 62 2d 3e 70 42 74 2c 0a  Flags(pDb->pBt,.
1c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c60: 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76   pDb->safety_lev
1c70: 65 6c 20 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20  el | (db->flags 
1c80: 26 20 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41  & PAGER_FLAGS_MA
1c90: 53 4b 29 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20  SK) );.      }. 
1ca0: 20 20 20 20 20 70 44 62 2b 2b 3b 0a 20 20 20 20       pDb++;.    
1cb0: 7d 0a 20 20 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20  }.  }.}.#else.# 
1cc0: 64 65 66 69 6e 65 20 73 65 74 41 6c 6c 50 61 67  define setAllPag
1cd0: 65 72 46 6c 61 67 73 28 58 29 20 20 2f 2a 20 6e  erFlags(X)  /* n
1ce0: 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  o-op */.#endif..
1cf0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20  ./*.** Return a 
1d00: 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e  human-readable n
1d10: 61 6d 65 20 66 6f 72 20 61 20 63 6f 6e 73 74 72  ame for a constr
1d20: 61 69 6e 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  aint resolution 
1d30: 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64  action..*/.#ifnd
1d40: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
1d50: 4f 52 45 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69  OREIGN_KEY.stati
1d60: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 63  c const char *ac
1d70: 74 69 6f 6e 4e 61 6d 65 28 75 38 20 61 63 74 69  tionName(u8 acti
1d80: 6f 6e 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  on){.  const cha
1d90: 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74  r *zName;.  swit
1da0: 63 68 28 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ch( action ){.  
1db0: 20 20 63 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c    case OE_SetNul
1dc0: 6c 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54  l:  zName = "SET
1dd0: 20 4e 55 4c 4c 22 3b 20 20 20 20 20 20 20 20 62   NULL";        b
1de0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
1df0: 45 5f 53 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d  E_SetDflt:  zNam
1e00: 65 20 3d 20 22 53 45 54 20 44 45 46 41 55 4c 54  e = "SET DEFAULT
1e10: 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ";     break;.  
1e20: 20 20 63 61 73 65 20 4f 45 5f 43 61 73 63 61 64    case OE_Cascad
1e30: 65 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53  e:  zName = "CAS
1e40: 43 41 44 45 22 3b 20 20 20 20 20 20 20 20 20 62  CADE";         b
1e50: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
1e60: 45 5f 52 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d  E_Restrict: zNam
1e70: 65 20 3d 20 22 52 45 53 54 52 49 43 54 22 3b 20  e = "RESTRICT"; 
1e80: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1e90: 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20    default:      
1ea0: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20      zName = "NO 
1eb0: 41 43 54 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20  ACTION";  .     
1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed0: 20 61 73 73 65 72 74 28 20 61 63 74 69 6f 6e 3d   assert( action=
1ee0: 3d 4f 45 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61  =OE_None ); brea
1ef0: 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  k;.  }.  return 
1f00: 7a 4e 61 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a  zName;.}.#endif.
1f10: 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65  ../*.** Paramete
1f20: 72 20 65 4d 6f 64 65 20 6d 75 73 74 20 62 65 20  r eMode must be 
1f30: 6f 6e 65 20 6f 66 20 74 68 65 20 50 41 47 45 52  one of the PAGER
1f40: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58  _JOURNALMODE_XXX
1f50: 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
1f60: 66 69 6e 65 64 20 69 6e 20 70 61 67 65 72 2e 68  fined in pager.h
1f70: 2e 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  . This function 
1f80: 72 65 74 75 72 6e 73 20 74 68 65 20 61 73 73 6f  returns the asso
1f90: 63 69 61 74 65 64 20 6c 6f 77 65 72 63 61 73 65  ciated lowercase
1fa0: 0a 2a 2a 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65  .** journal-mode
1fb0: 20 6e 61 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20   name..*/.const 
1fc0: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
1fd0: 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
1fe0: 20 65 4d 6f 64 65 29 7b 0a 20 20 73 74 61 74 69   eMode){.  stati
1ff0: 63 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61  c char * const a
2000: 7a 4d 6f 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a  zModeName[] = {.
2010: 20 20 20 20 22 64 65 6c 65 74 65 22 2c 20 22 70      "delete", "p
2020: 65 72 73 69 73 74 22 2c 20 22 6f 66 66 22 2c 20  ersist", "off", 
2030: 22 74 72 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d  "truncate", "mem
2040: 6f 72 79 22 0a 23 69 66 6e 64 65 66 20 53 51 4c  ory".#ifndef SQL
2050: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20  ITE_OMIT_WAL.   
2060: 20 20 2c 20 22 77 61 6c 22 0a 23 65 6e 64 69 66    , "wal".#endif
2070: 0a 20 20 7d 3b 0a 20 20 61 73 73 65 72 74 28 20  .  };.  assert( 
2080: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2090: 45 5f 44 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20  E_DELETE==0 );. 
20a0: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
20b0: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49  OURNALMODE_PERSI
20c0: 53 54 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  ST==1 );.  asser
20d0: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
20e0: 4d 4f 44 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20  MODE_OFF==2 );. 
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 54 52 55 4e 43  OURNALMODE_TRUNC
2110: 41 54 45 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65  ATE==3 );.  asse
2120: 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  rt( PAGER_JOURNA
2130: 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20  LMODE_MEMORY==4 
2140: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  );.  assert( PAG
2150: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2160: 41 4c 3d 3d 35 20 29 3b 0a 20 20 61 73 73 65 72  AL==5 );.  asser
2170: 74 28 20 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65  t( eMode>=0 && e
2180: 4d 6f 64 65 3c 3d 41 72 72 61 79 53 69 7a 65 28  Mode<=ArraySize(
2190: 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a  azModeName) );..
21a0: 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72    if( eMode==Arr
21b0: 61 79 53 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d  aySize(azModeNam
21c0: 65 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  e) ) return 0;. 
21d0: 20 72 65 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61   return azModeNa
21e0: 6d 65 5b 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a  me[eMode];.}../*
21f0: 0a 2a 2a 20 50 72 6f 63 65 73 73 20 61 20 70 72  .** Process a pr
2200: 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20  agma statement. 
2210: 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20   .**.** Pragmas 
2220: 61 72 65 20 6f 66 20 74 68 69 73 20 66 6f 72 6d  are of this form
2230: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41  :.**.**      PRA
2240: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69 64 20  GMA [schema.]id 
2250: 5b 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20  [= value].**.** 
2260: 54 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d  The identifier m
2270: 69 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73  ight also be a s
2280: 74 72 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75  tring.  The valu
2290: 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61  e is a string, a
22a0: 6e 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72  nd.** identifier
22b0: 2c 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20  , or a number.  
22c0: 49 66 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20  If minusFlag is 
22d0: 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76  true, then the v
22e0: 61 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d  alue is.** a num
22f0: 62 65 72 20 74 68 61 74 20 77 61 73 20 70 72 65  ber that was pre
2300: 63 65 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73  ceded by a minus
2310: 20 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   sign..**.** If 
2320: 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73  the left side is
2330: 20 22 64 61 74 61 62 61 73 65 2e 69 64 22 20 74   "database.id" t
2340: 68 65 6e 20 70 49 64 31 20 69 73 20 74 68 65 20  hen pId1 is the 
2350: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a  database name.**
2360: 20 61 6e 64 20 70 49 64 32 20 69 73 20 74 68 65   and pId2 is the
2370: 20 69 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66   id.  If the lef
2380: 74 20 73 69 64 65 20 69 73 20 6a 75 73 74 20 22  t side is just "
2390: 69 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73  id" then pId1 is
23a0: 20 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70   the.** id and p
23b0: 49 64 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79  Id2 is any empty
23c0: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64   string..*/.void
23d0: 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a   sqlite3Pragma(.
23e0: 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c    Parse *pParse,
23f0: 20 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c   .  Token *pId1,
2400: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
2410: 20 70 61 72 74 20 6f 66 20 5b 73 63 68 65 6d 61   part of [schema
2420: 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20 20  .]id field */.  
2430: 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20 20  Token *pId2,    
2440: 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70 61      /* Second pa
2450: 72 74 20 6f 66 20 5b 73 63 68 65 6d 61 2e 5d 69  rt of [schema.]i
2460: 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e 55 4c 4c  d field, or NULL
2470: 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 56 61   */.  Token *pVa
2480: 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20 54 6f 6b  lue,      /* Tok
2490: 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65 3e 2c 20  en for <value>, 
24a0: 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74  or NULL */.  int
24b0: 20 6d 69 6e 75 73 46 6c 61 67 20 20 20 20 20 20   minusFlag      
24c0: 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20 27 2d   /* True if a '-
24d0: 27 20 73 69 67 6e 20 70 72 65 63 65 64 65 64 20  ' sign preceded 
24e0: 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b 0a 20 20  <value> */.){.  
24f0: 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20 30 3b  char *zLeft = 0;
2500: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65         /* Nul-te
2510: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
2520: 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f 0a 20 20  tring <id> */.  
2530: 63 68 61 72 20 2a 7a 52 69 67 68 74 20 3d 20 30  char *zRight = 0
2540: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65  ;      /* Nul-te
2550: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
2560: 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e 2c 20 6f  tring <value>, o
2570: 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f 6e 73  r NULL */.  cons
2580: 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b  t char *zDb = 0;
2590: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
25a0: 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b  se name */.  Tok
25b0: 65 6e 20 2a 70 49 64 3b 20 20 20 20 20 20 20 20  en *pId;        
25c0: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
25d0: 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20 2a 2f 0a  o <id> token */.
25e0: 20 20 63 68 61 72 20 2a 61 46 63 6e 74 6c 5b 34    char *aFcntl[4
25f0: 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75  ];       /* Argu
2600: 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54 45 5f 46  ment to SQLITE_F
2610: 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a 20  CNTL_PRAGMA */. 
2620: 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
2630: 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
2640: 61 73 65 20 69 6e 64 65 78 20 66 6f 72 20 3c 64  ase index for <d
2650: 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20 20 69 6e  atabase> */.  in
2660: 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d 69 64 20  t lwr, upr, mid 
2670: 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 42 69  = 0;       /* Bi
2680: 6e 61 72 79 20 73 65 61 72 63 68 20 62 6f 75 6e  nary search boun
2690: 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  ds */.  int rc; 
26a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b0: 20 20 20 20 20 2f 2a 20 72 65 74 75 72 6e 20 76       /* return v
26c0: 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c 49 54 45  alue form SQLITE
26d0: 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f  _FCNTL_PRAGMA */
26e0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
26f0: 20 70 50 61 72 73 65 2d 3e 64 62 3b 20 20 20 20   pParse->db;    
2700: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
2710: 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
2720: 44 62 20 2a 70 44 62 3b 20 20 20 20 20 20 20 20  Db *pDb;        
2730: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2740: 54 68 65 20 73 70 65 63 69 66 69 63 20 64 61 74  The specific dat
2750: 61 62 61 73 65 20 62 65 69 6e 67 20 70 72 61 67  abase being prag
2760: 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62 65 20 2a  maed */.  Vdbe *
2770: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
2780: 62 65 28 70 50 61 72 73 65 29 3b 20 20 2f 2a 20  be(pParse);  /* 
2790: 50 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  Prepared stateme
27a0: 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 73 74  nt */.  const st
27b0: 72 75 63 74 20 73 50 72 61 67 6d 61 4e 61 6d 65  ruct sPragmaName
27c0: 73 20 2a 70 50 72 61 67 6d 61 3b 0a 0a 20 20 69  s *pPragma;..  i
27d0: 66 28 20 76 3d 3d 30 20 29 20 72 65 74 75 72 6e  f( v==0 ) return
27e0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 52  ;.  sqlite3VdbeR
27f0: 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29 3b 0a 20  unOnlyOnce(v);. 
2800: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
2810: 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65 72 70 72  2;..  /* Interpr
2820: 65 74 20 74 68 65 20 5b 73 63 68 65 6d 61 2e 5d  et the [schema.]
2830: 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 61   part of the pra
2840: 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 69  gma statement. i
2850: 44 62 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 69  Db is the.  ** i
2860: 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
2870: 62 61 73 65 20 74 68 69 73 20 70 72 61 67 6d 61  base this pragma
2880: 20 69 73 20 62 65 69 6e 67 20 61 70 70 6c 69 65   is being applie
2890: 64 20 74 6f 20 69 6e 20 64 62 2e 61 44 62 5b 5d  d to in db.aDb[]
28a0: 2e 20 2a 2f 0a 20 20 69 44 62 20 3d 20 73 71 6c  . */.  iDb = sql
28b0: 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28  ite3TwoPartName(
28c0: 70 50 61 72 73 65 2c 20 70 49 64 31 2c 20 70 49  pParse, pId1, pI
28d0: 64 32 2c 20 26 70 49 64 29 3b 0a 20 20 69 66 28  d2, &pId);.  if(
28e0: 20 69 44 62 3c 30 20 29 20 72 65 74 75 72 6e 3b   iDb<0 ) return;
28f0: 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
2900: 62 5b 69 44 62 5d 3b 0a 0a 20 20 2f 2a 20 49 66  b[iDb];..  /* If
2910: 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   the temp databa
2920: 73 65 20 68 61 73 20 62 65 65 6e 20 65 78 70 6c  se has been expl
2930: 69 63 69 74 6c 79 20 6e 61 6d 65 64 20 61 73 20  icitly named as 
2940: 70 61 72 74 20 6f 66 20 74 68 65 20 0a 20 20 2a  part of the .  *
2950: 2a 20 70 72 61 67 6d 61 2c 20 6d 61 6b 65 20 73  * pragma, make s
2960: 75 72 65 20 69 74 20 69 73 20 6f 70 65 6e 2e 20  ure it is open. 
2970: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d  .  */.  if( iDb=
2980: 3d 31 20 26 26 20 73 71 6c 69 74 65 33 4f 70 65  =1 && sqlite3Ope
2990: 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 70 50  nTempDatabase(pP
29a0: 61 72 73 65 29 20 29 7b 0a 20 20 20 20 72 65 74  arse) ){.    ret
29b0: 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 7a 4c 65 66  urn;.  }..  zLef
29c0: 74 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46  t = sqlite3NameF
29d0: 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 49 64  romToken(db, pId
29e0: 29 3b 0a 20 20 69 66 28 20 21 7a 4c 65 66 74 20  );.  if( !zLeft 
29f0: 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20  ) return;.  if( 
2a00: 6d 69 6e 75 73 46 6c 61 67 20 29 7b 0a 20 20 20  minusFlag ){.   
2a10: 20 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65   zRight = sqlite
2a20: 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2d 25  3MPrintf(db, "-%
2a30: 54 22 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d  T", pValue);.  }
2a40: 65 6c 73 65 7b 0a 20 20 20 20 7a 52 69 67 68 74  else{.    zRight
2a50: 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72   = sqlite3NameFr
2a60: 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 56 61 6c  omToken(db, pVal
2a70: 75 65 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  ue);.  }..  asse
2a80: 72 74 28 20 70 49 64 32 20 29 3b 0a 20 20 7a 44  rt( pId2 );.  zD
2a90: 62 20 3d 20 70 49 64 32 2d 3e 6e 3e 30 20 3f 20  b = pId2->n>0 ? 
2aa0: 70 44 62 2d 3e 7a 44 62 53 4e 61 6d 65 20 3a 20  pDb->zDbSName : 
2ab0: 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  0;.  if( sqlite3
2ac0: 41 75 74 68 43 68 65 63 6b 28 70 50 61 72 73 65  AuthCheck(pParse
2ad0: 2c 20 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 2c  , SQLITE_PRAGMA,
2ae0: 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74 2c 20   zLeft, zRight, 
2af0: 7a 44 62 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  zDb) ){.    goto
2b00: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d   pragma_out;.  }
2b10: 0a 0a 20 20 2f 2a 20 53 65 6e 64 20 61 6e 20 53  ..  /* Send an S
2b20: 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47  QLITE_FCNTL_PRAG
2b30: 4d 41 20 66 69 6c 65 2d 63 6f 6e 74 72 6f 6c 20  MA file-control 
2b40: 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  to the underlyin
2b50: 67 20 56 46 53 0a 20 20 2a 2a 20 63 6f 6e 6e 65  g VFS.  ** conne
2b60: 63 74 69 6f 6e 2e 20 20 49 66 20 69 74 20 72 65  ction.  If it re
2b70: 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 2c  turns SQLITE_OK,
2b80: 20 74 68 65 6e 20 61 73 73 75 6d 65 20 74 68 61   then assume tha
2b90: 74 20 74 68 65 20 56 46 53 0a 20 20 2a 2a 20 68  t the VFS.  ** h
2ba0: 61 6e 64 6c 65 64 20 74 68 65 20 70 72 61 67 6d  andled the pragm
2bb0: 61 20 61 6e 64 20 67 65 6e 65 72 61 74 65 20 61  a and generate a
2bc0: 20 6e 6f 2d 6f 70 20 70 72 65 70 61 72 65 64 20   no-op prepared 
2bd0: 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a 2a 0a  statement..  **.
2be0: 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    ** IMPLEMENTAT
2bf0: 49 4f 4e 2d 4f 46 3a 20 52 2d 31 32 32 33 38 2d  ION-OF: R-12238-
2c00: 35 35 31 32 30 20 57 68 65 6e 65 76 65 72 20 61  55120 Whenever a
2c10: 20 50 52 41 47 4d 41 20 73 74 61 74 65 6d 65 6e   PRAGMA statemen
2c20: 74 20 69 73 20 70 61 72 73 65 64 2c 0a 20 20 2a  t is parsed,.  *
2c30: 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54  * an SQLITE_FCNT
2c40: 4c 5f 50 52 41 47 4d 41 20 66 69 6c 65 20 63 6f  L_PRAGMA file co
2c50: 6e 74 72 6f 6c 20 69 73 20 73 65 6e 74 20 74 6f  ntrol is sent to
2c60: 20 74 68 65 20 6f 70 65 6e 20 73 71 6c 69 74 65   the open sqlite
2c70: 33 5f 66 69 6c 65 0a 20 20 2a 2a 20 6f 62 6a 65  3_file.  ** obje
2c80: 63 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ct corresponding
2c90: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
2ca0: 20 66 69 6c 65 20 74 6f 20 77 68 69 63 68 20 74   file to which t
2cb0: 68 65 20 70 72 61 67 6d 61 0a 20 20 2a 2a 20 73  he pragma.  ** s
2cc0: 74 61 74 65 6d 65 6e 74 20 72 65 66 65 72 73 2e  tatement refers.
2cd0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45  .  **.  ** IMPLE
2ce0: 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
2cf0: 32 39 38 37 35 2d 33 31 36 37 38 20 54 68 65 20  29875-31678 The 
2d00: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
2d10: 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41  SQLITE_FCNTL_PRA
2d20: 47 4d 41 0a 20 20 2a 2a 20 66 69 6c 65 20 63 6f  GMA.  ** file co
2d30: 6e 74 72 6f 6c 20 69 73 20 61 6e 20 61 72 72 61  ntrol is an arra
2d40: 79 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  y of pointers to
2d50: 20 73 74 72 69 6e 67 73 20 28 63 68 61 72 2a 2a   strings (char**
2d60: 29 20 69 6e 20 77 68 69 63 68 20 74 68 65 0a 20  ) in which the. 
2d70: 20 2a 2a 20 73 65 63 6f 6e 64 20 65 6c 65 6d 65   ** second eleme
2d80: 6e 74 20 6f 66 20 74 68 65 20 61 72 72 61 79 20  nt of the array 
2d90: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
2da0: 68 65 20 70 72 61 67 6d 61 20 61 6e 64 20 74 68  he pragma and th
2db0: 65 20 74 68 69 72 64 0a 20 20 2a 2a 20 65 6c 65  e third.  ** ele
2dc0: 6d 65 6e 74 20 69 73 20 74 68 65 20 61 72 67 75  ment is the argu
2dd0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 61 67  ment to the prag
2de0: 6d 61 20 6f 72 20 4e 55 4c 4c 20 69 66 20 74 68  ma or NULL if th
2df0: 65 20 70 72 61 67 6d 61 20 68 61 73 20 6e 6f 0a  e pragma has no.
2e00: 20 20 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 20    ** argument.. 
2e10: 20 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20   */.  aFcntl[0] 
2e20: 3d 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d  = 0;.  aFcntl[1]
2e30: 20 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e   = zLeft;.  aFcn
2e40: 74 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a  tl[2] = zRight;.
2e50: 20 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b    aFcntl[3] = 0;
2e60: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
2e70: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
2e80: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c  rc = sqlite3_fil
2e90: 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44  e_control(db, zD
2ea0: 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  b, SQLITE_FCNTL_
2eb0: 50 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61  PRAGMA, (void*)a
2ec0: 46 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63  Fcntl);.  if( rc
2ed0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2ee0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
2ef0: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
2f00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
2f10: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
2f20: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 61 46  COLNAME_NAME, aF
2f30: 63 6e 74 6c 5b 30 5d 2c 20 53 51 4c 49 54 45 5f  cntl[0], SQLITE_
2f40: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20  TRANSIENT);.    
2f50: 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78 74  returnSingleText
2f60: 28 76 2c 20 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a  (v, aFcntl[0]);.
2f70: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
2f80: 28 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20  (aFcntl[0]);.   
2f90: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
2fa0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d  ;.  }.  if( rc!=
2fb0: 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20  SQLITE_NOTFOUND 
2fc0: 29 7b 0a 20 20 20 20 69 66 28 20 61 46 63 6e 74  ){.    if( aFcnt
2fd0: 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 73 71  l[0] ){.      sq
2fe0: 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50  lite3ErrorMsg(pP
2ff0: 61 72 73 65 2c 20 22 25 73 22 2c 20 61 46 63 6e  arse, "%s", aFcn
3000: 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 20 20 73 71  tl[0]);.      sq
3010: 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63 6e 74  lite3_free(aFcnt
3020: 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  l[0]);.    }.   
3030: 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b   pParse->nErr++;
3040: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63 20  .    pParse->rc 
3050: 3d 20 72 63 3b 0a 20 20 20 20 67 6f 74 6f 20 70  = rc;.    goto p
3060: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a  ragma_out;.  }..
3070: 20 20 2f 2a 20 4c 6f 63 61 74 65 20 74 68 65 20    /* Locate the 
3080: 70 72 61 67 6d 61 20 69 6e 20 74 68 65 20 6c 6f  pragma in the lo
3090: 6f 6b 75 70 20 74 61 62 6c 65 20 2a 2f 0a 20 20  okup table */.  
30a0: 6c 77 72 20 3d 20 30 3b 0a 20 20 75 70 72 20 3d  lwr = 0;.  upr =
30b0: 20 41 72 72 61 79 53 69 7a 65 28 61 50 72 61 67   ArraySize(aPrag
30c0: 6d 61 4e 61 6d 65 73 29 2d 31 3b 0a 20 20 77 68  maNames)-1;.  wh
30d0: 69 6c 65 28 20 6c 77 72 3c 3d 75 70 72 20 29 7b  ile( lwr<=upr ){
30e0: 0a 20 20 20 20 6d 69 64 20 3d 20 28 6c 77 72 2b  .    mid = (lwr+
30f0: 75 70 72 29 2f 32 3b 0a 20 20 20 20 72 63 20 3d  upr)/2;.    rc =
3100: 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70   sqlite3_stricmp
3110: 28 7a 4c 65 66 74 2c 20 61 50 72 61 67 6d 61 4e  (zLeft, aPragmaN
3120: 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e 61 6d 65 29  ames[mid].zName)
3130: 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 30 20  ;.    if( rc==0 
3140: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 69 66 28  ) break;.    if(
3150: 20 72 63 3c 30 20 29 7b 0a 20 20 20 20 20 20 75   rc<0 ){.      u
3160: 70 72 20 3d 20 6d 69 64 20 2d 20 31 3b 0a 20 20  pr = mid - 1;.  
3170: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c    }else{.      l
3180: 77 72 20 3d 20 6d 69 64 20 2b 20 31 3b 0a 20 20  wr = mid + 1;.  
3190: 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 6c 77    }.  }.  if( lw
31a0: 72 3e 75 70 72 20 29 20 67 6f 74 6f 20 70 72 61  r>upr ) goto pra
31b0: 67 6d 61 5f 6f 75 74 3b 0a 20 20 70 50 72 61 67  gma_out;.  pPrag
31c0: 6d 61 20 3d 20 26 61 50 72 61 67 6d 61 4e 61 6d  ma = &aPragmaNam
31d0: 65 73 5b 6d 69 64 5d 3b 0a 0a 20 20 2f 2a 20 4d  es[mid];..  /* M
31e0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74  ake sure the dat
31f0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
3200: 6c 6f 61 64 65 64 20 69 66 20 74 68 65 20 70 72  loaded if the pr
3210: 61 67 6d 61 20 72 65 71 75 69 72 65 73 20 74 68  agma requires th
3220: 61 74 20 2a 2f 0a 20 20 69 66 28 20 28 70 50 72  at */.  if( (pPr
3230: 61 67 6d 61 2d 3e 6d 50 72 61 67 46 6c 67 20 26  agma->mPragFlg &
3240: 20 50 72 61 67 46 6c 67 5f 4e 65 65 64 53 63 68   PragFlg_NeedSch
3250: 65 6d 61 29 21 3d 30 20 29 7b 0a 20 20 20 20 69  ema)!=0 ){.    i
3260: 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  f( sqlite3ReadSc
3270: 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67  hema(pParse) ) g
3280: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
3290: 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74    }..  /* Regist
32a0: 65 72 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  er the result co
32b0: 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 70  lumn names for p
32c0: 72 61 67 6d 61 73 20 74 68 61 74 20 72 65 74 75  ragmas that retu
32d0: 72 6e 20 72 65 73 75 6c 74 73 20 2a 2f 0a 20 20  rn results */.  
32e0: 69 66 28 20 28 70 50 72 61 67 6d 61 2d 3e 6d 50  if( (pPragma->mP
32f0: 72 61 67 46 6c 67 20 26 20 50 72 61 67 46 6c 67  ragFlg & PragFlg
3300: 5f 4e 6f 43 6f 6c 75 6d 6e 73 29 3d 3d 30 20 29  _NoColumns)==0 )
3310: 7b 0a 20 20 20 20 73 65 74 50 72 61 67 6d 61 52  {.    setPragmaR
3320: 65 73 75 6c 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  esultColumnNames
3330: 28 76 2c 20 70 50 72 61 67 6d 61 29 3b 0a 20 20  (v, pPragma);.  
3340: 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  }..  /* Jump to 
3350: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
3360: 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20 2a  pragma handler *
3370: 2f 0a 20 20 73 77 69 74 63 68 28 20 70 50 72 61  /.  switch( pPra
3380: 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 20 29 7b  gma->ePragTyp ){
3390: 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .  .#if !defined
33a0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  (SQLITE_OMIT_PAG
33b0: 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20 21  ER_PRAGMAS) && !
33c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
33d0: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29 0a  MIT_DEPRECATED).
33e0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
33f0: 41 20 5b 73 63 68 65 6d 61 2e 5d 64 65 66 61 75  A [schema.]defau
3400: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 0a 20 20  lt_cache_size.  
3410: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
3420: 6d 61 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63 68  ma.]default_cach
3430: 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20  e_size=N.  **.  
3440: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
3450: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
3460: 72 72 65 6e 74 20 70 65 72 73 69 73 74 65 6e 74  rrent persistent
3470: 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65   setting for the
3480: 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65  .  ** page cache
3490: 20 73 69 7a 65 2e 20 20 54 68 65 20 76 61 6c 75   size.  The valu
34a0: 65 20 72 65 74 75 72 6e 65 64 20 69 73 20 74 68  e returned is th
34b0: 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
34c0: 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65 73 20 69   of.  ** pages i
34d0: 6e 20 74 68 65 20 70 61 67 65 20 63 61 63 68 65  n the page cache
34e0: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
34f0: 72 6d 20 73 65 74 73 20 62 6f 74 68 20 74 68 65  rm sets both the
3500: 20 63 75 72 72 65 6e 74 0a 20 20 2a 2a 20 70 61   current.  ** pa
3510: 67 65 20 63 61 63 68 65 20 73 69 7a 65 20 76 61  ge cache size va
3520: 6c 75 65 20 61 6e 64 20 74 68 65 20 70 65 72 73  lue and the pers
3530: 69 73 74 65 6e 74 20 70 61 67 65 20 63 61 63 68  istent page cach
3540: 65 20 73 69 7a 65 20 76 61 6c 75 65 0a 20 20 2a  e size value.  *
3550: 2a 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  * stored in the 
3560: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20  database file.. 
3570: 20 2a 2a 0a 20 20 2a 2a 20 4f 6c 64 65 72 20 76   **.  ** Older v
3580: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
3590: 65 20 77 6f 75 6c 64 20 73 65 74 20 74 68 65 20  e would set the 
35a0: 64 65 66 61 75 6c 74 20 63 61 63 68 65 20 73 69  default cache si
35b0: 7a 65 20 74 6f 20 61 0a 20 20 2a 2a 20 6e 65 67  ze to a.  ** neg
35c0: 61 74 69 76 65 20 6e 75 6d 62 65 72 20 74 6f 20  ative number to 
35d0: 69 6e 64 69 63 61 74 65 20 73 79 6e 63 68 72 6f  indicate synchro
35e0: 6e 6f 75 73 3d 4f 46 46 2e 20 20 54 68 65 73 65  nous=OFF.  These
35f0: 20 64 61 79 73 2c 20 73 79 6e 63 68 72 6f 6e 6f   days, synchrono
3600: 75 73 0a 20 20 2a 2a 20 69 73 20 61 6c 77 61 79  us.  ** is alway
3610: 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 20  s on by default 
3620: 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68  regardless of th
3630: 65 20 73 69 67 6e 20 6f 66 20 74 68 65 20 64 65  e sign of the de
3640: 66 61 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a  fault cache.  **
3650: 20 73 69 7a 65 2e 20 20 42 75 74 20 63 6f 6e 74   size.  But cont
3660: 69 6e 75 65 20 74 6f 20 74 61 6b 65 20 74 68 65  inue to take the
3670: 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20   absolute value 
3680: 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 63  of the default c
3690: 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a 65 20 6f  ache.  ** size o
36a0: 66 20 68 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d  f historical com
36b0: 70 61 74 69 62 69 6c 69 74 79 2e 0a 20 20 2a 2f  patibility..  */
36c0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
36d0: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
36e0: 5a 45 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63  ZE: {.    static
36f0: 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d   const int iLn =
3700: 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e   VDBE_OFFSET_LIN
3710: 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73 74 61 74  ENO(2);.    stat
3720: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
3730: 69 73 74 20 67 65 74 43 61 63 68 65 53 69 7a 65  ist getCacheSize
3740: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f  [] = {.      { O
3750: 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 30  P_Transaction, 0
3760: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20  , 0,        0}, 
3770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3780: 20 20 20 20 20 20 20 20 2f 2a 20 30 20 2a 2f 0a          /* 0 */.
3790: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43        { OP_ReadC
37a0: 6f 6f 6b 69 65 2c 20 20 30 2c 20 31 2c 20 20 20  ookie,  0, 1,   
37b0: 20 20 20 20 20 42 54 52 45 45 5f 44 45 46 41 55       BTREE_DEFAU
37c0: 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 7d 2c 20  LT_CACHE_SIZE}, 
37d0: 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b   /* 1 */.      {
37e0: 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20   OP_IfPos,      
37f0: 20 31 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d   1, 8,        0}
3800: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74  ,.      { OP_Int
3810: 65 67 65 72 2c 20 20 20 20 20 30 2c 20 32 2c 20  eger,     0, 2, 
3820: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
3830: 20 7b 20 4f 50 5f 53 75 62 74 72 61 63 74 2c 20   { OP_Subtract, 
3840: 20 20 20 31 2c 20 32 2c 20 20 20 20 20 20 20 20     1, 2,        
3850: 31 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49  1},.      { OP_I
3860: 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c 20 38  fPos,       1, 8
3870: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
3880: 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c     { OP_Integer,
3890: 20 20 20 20 20 30 2c 20 31 2c 20 20 20 20 20 20       0, 1,      
38a0: 20 20 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20    0},           
38b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
38c0: 20 36 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50   6 */.      { OP
38d0: 5f 4e 6f 6f 70 2c 20 20 20 20 20 20 20 20 30 2c  _Noop,        0,
38e0: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   0,        0},. 
38f0: 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74       { OP_Result
3900: 52 6f 77 2c 20 20 20 31 2c 20 31 2c 20 20 20 20  Row,   1, 1,    
3910: 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20      0},.    };. 
3920: 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a     VdbeOp *aOp;.
3930: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55      sqlite3VdbeU
3940: 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62 29  sesBtree(v, iDb)
3950: 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  ;.    if( !zRigh
3960: 74 20 29 7b 0a 20 20 20 20 20 20 70 50 61 72 73  t ){.      pPars
3970: 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 32 3b 0a 20 20  e->nMem += 2;.  
3980: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 56      sqlite3VdbeV
3990: 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52 65 71  erifyNoMallocReq
39a0: 75 69 72 65 64 28 76 2c 20 41 72 72 61 79 53 69  uired(v, ArraySi
39b0: 7a 65 28 67 65 74 43 61 63 68 65 53 69 7a 65 29  ze(getCacheSize)
39c0: 29 3b 0a 20 20 20 20 20 20 61 4f 70 20 3d 20 73  );.      aOp = s
39d0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
39e0: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
39f0: 28 67 65 74 43 61 63 68 65 53 69 7a 65 29 2c 20  (getCacheSize), 
3a00: 67 65 74 43 61 63 68 65 53 69 7a 65 2c 20 69 4c  getCacheSize, iL
3a10: 6e 29 3b 0a 20 20 20 20 20 20 69 66 28 20 4f 4e  n);.      if( ON
3a20: 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54  LY_IF_REALLOC_ST
3a30: 52 45 53 53 28 61 4f 70 3d 3d 30 29 20 29 20 62  RESS(aOp==0) ) b
3a40: 72 65 61 6b 3b 0a 20 20 20 20 20 20 61 4f 70 5b  reak;.      aOp[
3a50: 30 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20  0].p1 = iDb;.   
3a60: 20 20 20 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69     aOp[1].p1 = i
3a70: 44 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 36 5d  Db;.      aOp[6]
3a80: 2e 70 31 20 3d 20 53 51 4c 49 54 45 5f 44 45 46  .p1 = SQLITE_DEF
3a90: 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 3b  AULT_CACHE_SIZE;
3aa0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
3ab0: 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c    int size = sql
3ac0: 69 74 65 33 41 62 73 49 6e 74 33 32 28 73 71 6c  ite3AbsInt32(sql
3ad0: 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
3ae0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
3af0: 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
3b00: 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 69  ion(pParse, 0, i
3b10: 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
3b20: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
3b30: 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 69 44  OP_SetCookie, iD
3b40: 62 2c 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54  b, BTREE_DEFAULT
3b50: 5f 43 41 43 48 45 5f 53 49 5a 45 2c 20 73 69 7a  _CACHE_SIZE, siz
3b60: 65 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e);.      assert
3b70: 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
3b80: 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62  utexHeld(db, iDb
3b90: 2c 20 30 29 20 29 3b 0a 20 20 20 20 20 20 70 44  , 0) );.      pD
3ba0: 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68  b->pSchema->cach
3bb0: 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20  e_size = size;. 
3bc0: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
3bd0: 65 53 65 74 43 61 63 68 65 53 69 7a 65 28 70 44  eSetCacheSize(pD
3be0: 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e 70 53 63  b->pBt, pDb->pSc
3bf0: 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65  hema->cache_size
3c00: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65  );.    }.    bre
3c10: 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f  ak;.  }.#endif /
3c20: 2a 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  * !SQLITE_OMIT_P
3c30: 41 47 45 52 5f 50 52 41 47 4d 41 53 20 26 26 20  AGER_PRAGMAS && 
3c40: 21 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50  !SQLITE_OMIT_DEP
3c50: 52 45 43 41 54 45 44 20 2a 2f 0a 0a 23 69 66 20  RECATED */..#if 
3c60: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3c70: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
3c80: 41 53 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50  AS).  /*.  **  P
3c90: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 70  RAGMA [schema.]p
3ca0: 61 67 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50  age_size.  **  P
3cb0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 70  RAGMA [schema.]p
3cc0: 61 67 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a  age_size=N.  **.
3cd0: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
3ce0: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
3cf0: 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20  current setting 
3d00: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 64 61 74  for the.  ** dat
3d10: 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65 20  abase page size 
3d20: 69 6e 20 62 79 74 65 73 2e 20 20 54 68 65 20 73  in bytes.  The s
3d30: 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73 20  econd form sets 
3d40: 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73  the.  ** databas
3d50: 65 20 70 61 67 65 20 73 69 7a 65 20 76 61 6c 75  e page size valu
3d60: 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 63 61  e.  The value ca
3d70: 6e 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66  n only be set if
3d80: 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61  .  ** the databa
3d90: 73 65 20 68 61 73 20 6e 6f 74 20 79 65 74 20 62  se has not yet b
3da0: 65 65 6e 20 63 72 65 61 74 65 64 2e 0a 20 20 2a  een created..  *
3db0: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
3dc0: 5f 50 41 47 45 5f 53 49 5a 45 3a 20 7b 0a 20 20  _PAGE_SIZE: {.  
3dd0: 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70    Btree *pBt = p
3de0: 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73 73  Db->pBt;.    ass
3df0: 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20  ert( pBt!=0 );. 
3e00: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
3e10: 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65  {.      int size
3e20: 20 3d 20 41 4c 57 41 59 53 28 70 42 74 29 20 3f   = ALWAYS(pBt) ?
3e30: 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
3e40: 50 61 67 65 53 69 7a 65 28 70 42 74 29 20 3a 20  PageSize(pBt) : 
3e50: 30 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  0;.      returnS
3e60: 69 6e 67 6c 65 49 6e 74 28 76 2c 20 73 69 7a 65  ingleInt(v, size
3e70: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
3e80: 20 20 20 20 2f 2a 20 4d 61 6c 6c 6f 63 20 6d 61      /* Malloc ma
3e90: 79 20 66 61 69 6c 20 77 68 65 6e 20 73 65 74 74  y fail when sett
3ea0: 69 6e 67 20 74 68 65 20 70 61 67 65 2d 73 69 7a  ing the page-siz
3eb0: 65 2c 20 61 73 20 74 68 65 72 65 20 69 73 20 61  e, as there is a
3ec0: 6e 20 69 6e 74 65 72 6e 61 6c 0a 20 20 20 20 20  n internal.     
3ed0: 20 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20   ** buffer that 
3ee0: 74 68 65 20 70 61 67 65 72 20 6d 6f 64 75 6c 65  the pager module
3ef0: 20 72 65 73 69 7a 65 73 20 75 73 69 6e 67 20 73   resizes using s
3f00: 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 28 29  qlite3_realloc()
3f10: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
3f20: 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73 69 7a   db->nextPagesiz
3f30: 65 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69 28  e = sqlite3Atoi(
3f40: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 69  zRight);.      i
3f50: 66 28 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3d  f( SQLITE_NOMEM=
3f60: 3d 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74  =sqlite3BtreeSet
3f70: 50 61 67 65 53 69 7a 65 28 70 42 74 2c 20 64 62  PageSize(pBt, db
3f80: 2d 3e 6e 65 78 74 50 61 67 65 73 69 7a 65 2c 2d  ->nextPagesize,-
3f90: 31 2c 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  1,0) ){.        
3fa0: 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28  sqlite3OomFault(
3fb0: 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  db);.      }.   
3fc0: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
3fd0: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  }..  /*.  **  PR
3fe0: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 73 65  AGMA [schema.]se
3ff0: 63 75 72 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a  cure_delete.  **
4000: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
4010: 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 3d  .]secure_delete=
4020: 4f 4e 2f 4f 46 46 0a 20 20 2a 2a 0a 20 20 2a 2a  ON/OFF.  **.  **
4030: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
4040: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
4050: 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20  ent setting for 
4060: 74 68 65 0a 20 20 2a 2a 20 73 65 63 75 72 65 5f  the.  ** secure_
4070: 64 65 6c 65 74 65 20 66 6c 61 67 2e 20 20 54 68  delete flag.  Th
4080: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 63 68  e second form ch
4090: 61 6e 67 65 73 20 74 68 65 20 73 65 63 75 72 65  anges the secure
40a0: 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 66 6c 61  _delete.  ** fla
40b0: 67 20 73 65 74 74 69 6e 67 20 61 6e 64 20 72 65  g setting and re
40c0: 70 6f 72 74 73 20 74 68 65 6e 65 77 20 76 61 6c  ports thenew val
40d0: 75 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ue..  */.  case 
40e0: 50 72 61 67 54 79 70 5f 53 45 43 55 52 45 5f 44  PragTyp_SECURE_D
40f0: 45 4c 45 54 45 3a 20 7b 0a 20 20 20 20 42 74 72  ELETE: {.    Btr
4100: 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70  ee *pBt = pDb->p
4110: 42 74 3b 0a 20 20 20 20 69 6e 74 20 62 20 3d 20  Bt;.    int b = 
4120: 2d 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  -1;.    assert( 
4130: 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66  pBt!=0 );.    if
4140: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
4150: 20 20 62 20 3d 20 73 71 6c 69 74 65 33 47 65 74    b = sqlite3Get
4160: 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20  Boolean(zRight, 
4170: 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  0);.    }.    if
4180: 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20  ( pId2->n==0 && 
4190: 62 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e  b>=0 ){.      in
41a0: 74 20 69 69 3b 0a 20 20 20 20 20 20 66 6f 72 28  t ii;.      for(
41b0: 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
41c0: 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
41d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 63   sqlite3BtreeSec
41e0: 75 72 65 44 65 6c 65 74 65 28 64 62 2d 3e 61 44  ureDelete(db->aD
41f0: 62 5b 69 69 5d 2e 70 42 74 2c 20 62 29 3b 0a 20  b[ii].pBt, b);. 
4200: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
4210: 20 62 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   b = sqlite3Btre
4220: 65 53 65 63 75 72 65 44 65 6c 65 74 65 28 70 42  eSecureDelete(pB
4230: 74 2c 20 62 29 3b 0a 20 20 20 20 72 65 74 75 72  t, b);.    retur
4240: 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 62 29  nSingleInt(v, b)
4250: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
4260: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
4270: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6d 61 78  GMA [schema.]max
4280: 5f 70 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a  _page_count.  **
4290: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
42a0: 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74  .]max_page_count
42b0: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
42c0: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
42d0: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
42e0: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
42f0: 20 20 2a 2a 20 6d 61 78 69 6d 75 6d 20 6e 75 6d    ** maximum num
4300: 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
4310: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
4320: 65 2e 20 20 54 68 65 20 0a 20 20 2a 2a 20 73 65  e.  The .  ** se
4330: 63 6f 6e 64 20 66 6f 72 6d 20 61 74 74 65 6d 70  cond form attemp
4340: 74 73 20 74 6f 20 63 68 61 6e 67 65 20 74 68 69  ts to change thi
4350: 73 20 73 65 74 74 69 6e 67 2e 20 20 42 6f 74 68  s setting.  Both
4360: 0a 20 20 2a 2a 20 66 6f 72 6d 73 20 72 65 74 75  .  ** forms retu
4370: 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  rn the current s
4380: 65 74 74 69 6e 67 2e 0a 20 20 2a 2a 0a 20 20 2a  etting..  **.  *
4390: 2a 20 54 68 65 20 61 62 73 6f 6c 75 74 65 20 76  * The absolute v
43a0: 61 6c 75 65 20 6f 66 20 4e 20 69 73 20 75 73 65  alue of N is use
43b0: 64 2e 20 20 54 68 69 73 20 69 73 20 75 6e 64 6f  d.  This is undo
43c0: 63 75 6d 65 6e 74 65 64 20 61 6e 64 20 6d 69 67  cumented and mig
43d0: 68 74 0a 20 20 2a 2a 20 63 68 61 6e 67 65 2e 20  ht.  ** change. 
43e0: 20 54 68 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73   The only purpos
43f0: 65 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20  e is to provide 
4400: 61 6e 20 65 61 73 79 20 77 61 79 20 74 6f 20 74  an easy way to t
4410: 65 73 74 0a 20 20 2a 2a 20 74 68 65 20 73 71 6c  est.  ** the sql
4420: 69 74 65 33 41 62 73 49 6e 74 33 32 28 29 20 66  ite3AbsInt32() f
4430: 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20  unction..  **.  
4440: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
4450: 6d 61 2e 5d 70 61 67 65 5f 63 6f 75 6e 74 0a 20  ma.]page_count. 
4460: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
4470: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
4480: 67 65 73 20 69 6e 20 74 68 65 20 73 70 65 63 69  ges in the speci
4490: 66 69 65 64 20 64 61 74 61 62 61 73 65 2e 0a 20  fied database.. 
44a0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
44b0: 79 70 5f 50 41 47 45 5f 43 4f 55 4e 54 3a 20 7b  yp_PAGE_COUNT: {
44c0: 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 0a 20  .    int iReg;. 
44d0: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
44e0: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
44f0: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 69 52 65  e, iDb);.    iRe
4500: 67 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d  g = ++pParse->nM
4510: 65 6d 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  em;.    if( sqli
4520: 74 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74  te3Tolower(zLeft
4530: 5b 30 5d 29 3d 3d 27 70 27 20 29 7b 0a 20 20 20  [0])=='p' ){.   
4540: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
4550: 64 4f 70 32 28 76 2c 20 4f 50 5f 50 61 67 65 63  dOp2(v, OP_Pagec
4560: 6f 75 6e 74 2c 20 69 44 62 2c 20 69 52 65 67 29  ount, iDb, iReg)
4570: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
4580: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
4590: 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 61 78 50 67  dOp3(v, OP_MaxPg
45a0: 63 6e 74 2c 20 69 44 62 2c 20 69 52 65 67 2c 20  cnt, iDb, iReg, 
45b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
45c0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
45d0: 41 62 73 49 6e 74 33 32 28 73 71 6c 69 74 65 33  AbsInt32(sqlite3
45e0: 41 74 6f 69 28 7a 52 69 67 68 74 29 29 29 3b 0a  Atoi(zRight)));.
45f0: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
4600: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
4610: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 69 52 65  P_ResultRow, iRe
4620: 67 2c 20 31 29 3b 0a 20 20 20 20 62 72 65 61 6b  g, 1);.    break
4630: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
4640: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
4650: 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20  .]locking_mode. 
4660: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
4670: 65 6d 61 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64  ema.]locking_mod
4680: 65 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c  e = (normal|excl
4690: 75 73 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63 61  usive).  */.  ca
46a0: 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49  se PragTyp_LOCKI
46b0: 4e 47 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 63  NG_MODE: {.    c
46c0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74 20  onst char *zRet 
46d0: 3d 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20 20  = "normal";.    
46e0: 69 6e 74 20 65 4d 6f 64 65 20 3d 20 67 65 74 4c  int eMode = getL
46f0: 6f 63 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67 68  ockingMode(zRigh
4700: 74 29 3b 0a 0a 20 20 20 20 69 66 28 20 70 49 64  t);..    if( pId
4710: 32 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64 65  2->n==0 && eMode
4720: 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  ==PAGER_LOCKINGM
4730: 4f 44 45 5f 51 55 45 52 59 20 29 7b 0a 20 20 20  ODE_QUERY ){.   
4740: 20 20 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50 52     /* Simple "PR
4750: 41 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64  AGMA locking_mod
4760: 65 3b 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54  e;" statement. T
4770: 68 69 73 20 69 73 20 61 20 71 75 65 72 79 20 66  his is a query f
4780: 6f 72 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  or.      ** the 
4790: 63 75 72 72 65 6e 74 20 64 65 66 61 75 6c 74 20  current default 
47a0: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77 68  locking mode (wh
47b0: 69 63 68 20 6d 61 79 20 62 65 20 64 69 66 66 65  ich may be diffe
47c0: 72 65 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a 2a  rent to.      **
47d0: 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64   the locking-mod
47e0: 65 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61  e of the main da
47f0: 74 61 62 61 73 65 29 2e 0a 20 20 20 20 20 20 2a  tabase)..      *
4800: 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20  /.      eMode = 
4810: 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65  db->dfltLockMode
4820: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
4830: 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72     Pager *pPager
4840: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 32  ;.      if( pId2
4850: 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ->n==0 ){.      
4860: 20 20 2f 2a 20 54 68 69 73 20 69 6e 64 69 63 61    /* This indica
4870: 74 65 73 20 74 68 61 74 20 6e 6f 20 64 61 74 61  tes that no data
4880: 62 61 73 65 20 6e 61 6d 65 20 77 61 73 20 73 70  base name was sp
4890: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 0a  ecified as part.
48a0: 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68          ** of th
48b0: 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64  e PRAGMA command
48c0: 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
48d0: 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20  he locking-mode 
48e0: 6d 75 73 74 20 62 65 0a 20 20 20 20 20 20 20 20  must be.        
48f0: 2a 2a 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61 74  ** set on all at
4900: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
4910: 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65  , as well as the
4920: 20 6d 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a 20   main db file.. 
4930: 20 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20         **.      
4940: 20 20 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20 73    ** Also, the s
4950: 71 6c 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d  qlite3.dfltLockM
4960: 6f 64 65 20 76 61 72 69 61 62 6c 65 20 69 73 20  ode variable is 
4970: 73 65 74 20 73 6f 20 74 68 61 74 0a 20 20 20 20  set so that.    
4980: 20 20 20 20 2a 2a 20 61 6e 79 20 73 75 62 73 65      ** any subse
4990: 71 75 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64  quently attached
49a0: 20 64 61 74 61 62 61 73 65 73 20 61 6c 73 6f 20   databases also 
49b0: 75 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65  use the specifie
49c0: 64 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f 63  d.        ** loc
49d0: 6b 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20 20  king mode..     
49e0: 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e     */.        in
49f0: 74 20 69 69 3b 0a 20 20 20 20 20 20 20 20 61 73  t ii;.        as
4a00: 73 65 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e 61  sert(pDb==&db->a
4a10: 44 62 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20  Db[0]);.        
4a20: 66 6f 72 28 69 69 3d 32 3b 20 69 69 3c 64 62 2d  for(ii=2; ii<db-
4a30: 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
4a40: 20 20 20 20 20 20 20 70 50 61 67 65 72 20 3d 20         pPager = 
4a50: 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
4a60: 72 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  r(db->aDb[ii].pB
4a70: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  t);.          sq
4a80: 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e  lite3PagerLockin
4a90: 67 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d  gMode(pPager, eM
4aa0: 6f 64 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ode);.        }.
4ab0: 20 20 20 20 20 20 20 20 64 62 2d 3e 64 66 6c 74          db->dflt
4ac0: 4c 6f 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29 65  LockMode = (u8)e
4ad0: 4d 6f 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Mode;.      }.  
4ae0: 20 20 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c      pPager = sql
4af0: 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
4b00: 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20  Db->pBt);.      
4b10: 65 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 50  eMode = sqlite3P
4b20: 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28  agerLockingMode(
4b30: 70 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a  pPager, eMode);.
4b40: 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72      }..    asser
4b50: 74 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  t( eMode==PAGER_
4b60: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d  LOCKINGMODE_NORM
4b70: 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c  AL.            |
4b80: 7c 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c  | eMode==PAGER_L
4b90: 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55  OCKINGMODE_EXCLU
4ba0: 53 49 56 45 20 29 3b 0a 20 20 20 20 69 66 28 20  SIVE );.    if( 
4bb0: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43  eMode==PAGER_LOC
4bc0: 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49  KINGMODE_EXCLUSI
4bd0: 56 45 20 29 7b 0a 20 20 20 20 20 20 7a 52 65 74  VE ){.      zRet
4be0: 20 3d 20 22 65 78 63 6c 75 73 69 76 65 22 3b 0a   = "exclusive";.
4bf0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
4c00: 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 7a 52  SingleText(v, zR
4c10: 65 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  et);.    break;.
4c20: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
4c30: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
4c40: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a  journal_mode.  *
4c50: 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d  *  PRAGMA [schem
4c60: 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  a.]journal_mode 
4c70: 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20  =.  **          
4c80: 20 20 20 20 20 20 20 20 20 20 20 20 28 64 65 6c              (del
4c90: 65 74 65 7c 70 65 72 73 69 73 74 7c 6f 66 66 7c  ete|persist|off|
4ca0: 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72 79 7c  truncate|memory|
4cb0: 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20 20  wal|off).  */.  
4cc0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 4a 4f 55  case PragTyp_JOU
4cd0: 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20  RNAL_MODE: {.   
4ce0: 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20 20 20   int eMode;     
4cf0: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65     /* One of the
4d00: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
4d10: 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73 20 2a  DE_XXX symbols *
4d20: 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b 20 20 20  /.    int ii;   
4d30: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
4d40: 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20 20 20  counter */..    
4d50: 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b  if( zRight==0 ){
4d60: 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
4d70: 72 65 20 69 73 20 6e 6f 20 22 3d 4d 4f 44 45 22  re is no "=MODE"
4d80: 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 61   part of the pra
4d90: 67 6d 61 2c 20 64 6f 20 61 20 71 75 65 72 79 20  gma, do a query 
4da0: 66 6f 72 20 74 68 65 0a 20 20 20 20 20 20 2a 2a  for the.      **
4db0: 20 63 75 72 72 65 6e 74 20 6d 6f 64 65 20 2a 2f   current mode */
4dc0: 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50  .      eMode = P
4dd0: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
4de0: 5f 51 55 45 52 59 3b 0a 20 20 20 20 7d 65 6c 73  _QUERY;.    }els
4df0: 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  e{.      const c
4e00: 68 61 72 20 2a 7a 4d 6f 64 65 3b 0a 20 20 20 20  har *zMode;.    
4e10: 20 20 69 6e 74 20 6e 20 3d 20 73 71 6c 69 74 65    int n = sqlite
4e20: 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74  3Strlen30(zRight
4e30: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 65 4d 6f  );.      for(eMo
4e40: 64 65 3d 30 3b 20 28 7a 4d 6f 64 65 20 3d 20 73  de=0; (zMode = s
4e50: 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64  qlite3JournalMod
4e60: 65 6e 61 6d 65 28 65 4d 6f 64 65 29 29 21 3d 30  ename(eMode))!=0
4e70: 3b 20 65 4d 6f 64 65 2b 2b 29 7b 0a 20 20 20 20  ; eMode++){.    
4e80: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
4e90: 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  trNICmp(zRight, 
4ea0: 7a 4d 6f 64 65 2c 20 6e 29 3d 3d 30 20 29 20 62  zMode, n)==0 ) b
4eb0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
4ec0: 20 20 20 20 69 66 28 20 21 7a 4d 6f 64 65 20 29      if( !zMode )
4ed0: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  {.        /* If 
4ee0: 74 68 65 20 22 3d 4d 4f 44 45 22 20 70 61 72 74  the "=MODE" part
4ef0: 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20   does not match 
4f00: 61 6e 79 20 6b 6e 6f 77 6e 20 6a 6f 75 72 6e 61  any known journa
4f10: 6c 20 6d 6f 64 65 2c 0a 20 20 20 20 20 20 20 20  l mode,.        
4f20: 2a 2a 20 74 68 65 6e 20 64 6f 20 61 20 71 75 65  ** then do a que
4f30: 72 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 65 4d  ry */.        eM
4f40: 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55 52  ode = PAGER_JOUR
4f50: 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 20  NALMODE_QUERY;. 
4f60: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
4f70: 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45   if( eMode==PAGE
4f80: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
4f90: 45 52 59 20 26 26 20 70 49 64 32 2d 3e 6e 3d 3d  ERY && pId2->n==
4fa0: 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f  0 ){.      /* Co
4fb0: 6e 76 65 72 74 20 22 50 52 41 47 4d 41 20 6a 6f  nvert "PRAGMA jo
4fc0: 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 69 6e 74 6f  urnal_mode" into
4fd0: 20 22 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f   "PRAGMA main.jo
4fe0: 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 2a 2f 0a 20  urnal_mode" */. 
4ff0: 20 20 20 20 20 69 44 62 20 3d 20 30 3b 0a 20 20       iDb = 0;.  
5000: 20 20 20 20 70 49 64 32 2d 3e 6e 20 3d 20 31 3b      pId2->n = 1;
5010: 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69  .    }.    for(i
5020: 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e  i=db->nDb-1; ii>
5030: 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20 20 20  =0; ii--){.     
5040: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d   if( db->aDb[ii]
5050: 2e 70 42 74 20 26 26 20 28 69 69 3d 3d 69 44 62  .pBt && (ii==iDb
5060: 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20   || pId2->n==0) 
5070: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
5080: 65 33 56 64 62 65 55 73 65 73 42 74 72 65 65 28  e3VdbeUsesBtree(
5090: 76 2c 20 69 69 29 3b 0a 20 20 20 20 20 20 20 20  v, ii);.        
50a0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
50b0: 33 28 76 2c 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d  3(v, OP_JournalM
50c0: 6f 64 65 2c 20 69 69 2c 20 31 2c 20 65 4d 6f 64  ode, ii, 1, eMod
50d0: 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
50e0: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
50f0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
5100: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
5110: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
5120: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
5130: 41 20 5b 73 63 68 65 6d 61 2e 5d 6a 6f 75 72 6e  A [schema.]journ
5140: 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 0a 20 20  al_size_limit.  
5150: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
5160: 6d 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65  ma.]journal_size
5170: 5f 6c 69 6d 69 74 3d 4e 0a 20 20 2a 2a 0a 20 20  _limit=N.  **.  
5180: 2a 2a 20 47 65 74 20 6f 72 20 73 65 74 20 74 68  ** Get or set th
5190: 65 20 73 69 7a 65 20 6c 69 6d 69 74 20 6f 6e 20  e size limit on 
51a0: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
51b0: 20 66 69 6c 65 73 2e 0a 20 20 2a 2f 0a 20 20 63   files..  */.  c
51c0: 61 73 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52  ase PragTyp_JOUR
51d0: 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54 3a 20  NAL_SIZE_LIMIT: 
51e0: 7b 0a 20 20 20 20 50 61 67 65 72 20 2a 70 50 61  {.    Pager *pPa
51f0: 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
5200: 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74  eePager(pDb->pBt
5210: 29 3b 0a 20 20 20 20 69 36 34 20 69 4c 69 6d 69  );.    i64 iLimi
5220: 74 20 3d 20 2d 32 3b 0a 20 20 20 20 69 66 28 20  t = -2;.    if( 
5230: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
5240: 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
5250: 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 69 4c  oI64(zRight, &iL
5260: 69 6d 69 74 29 3b 0a 20 20 20 20 20 20 69 66 28  imit);.      if(
5270: 20 69 4c 69 6d 69 74 3c 2d 31 20 29 20 69 4c 69   iLimit<-1 ) iLi
5280: 6d 69 74 20 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a  mit = -1;.    }.
5290: 20 20 20 20 69 4c 69 6d 69 74 20 3d 20 73 71 6c      iLimit = sql
52a0: 69 74 65 33 50 61 67 65 72 4a 6f 75 72 6e 61 6c  ite3PagerJournal
52b0: 53 69 7a 65 4c 69 6d 69 74 28 70 50 61 67 65 72  SizeLimit(pPager
52c0: 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 72  , iLimit);.    r
52d0: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76  eturnSingleInt(v
52e0: 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 62  , iLimit);.    b
52f0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69  reak;.  }..#endi
5300: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
5310: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a  _PAGER_PRAGMAS *
5320: 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  /..  /*.  **  PR
5330: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 75  AGMA [schema.]au
5340: 74 6f 5f 76 61 63 75 75 6d 0a 20 20 2a 2a 20 20  to_vacuum.  **  
5350: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
5360: 61 75 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20 20  auto_vacuum=N.  
5370: 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20 73  **.  ** Get or s
5380: 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  et the value of 
5390: 74 68 65 20 64 61 74 61 62 61 73 65 20 27 61 75  the database 'au
53a0: 74 6f 2d 76 61 63 75 75 6d 27 20 70 61 72 61 6d  to-vacuum' param
53b0: 65 74 65 72 2e 0a 20 20 2a 2a 20 54 68 65 20 76  eter..  ** The v
53c0: 61 6c 75 65 20 69 73 20 6f 6e 65 20 6f 66 3a 20  alue is one of: 
53d0: 20 30 20 4e 4f 4e 45 20 31 20 46 55 4c 4c 20 32   0 NONE 1 FULL 2
53e0: 20 49 4e 43 52 45 4d 45 4e 54 41 4c 0a 20 20 2a   INCREMENTAL.  *
53f0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
5400: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
5410: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
5420: 41 55 54 4f 5f 56 41 43 55 55 4d 3a 20 7b 0a 20  AUTO_VACUUM: {. 
5430: 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20     Btree *pBt = 
5440: 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73  pDb->pBt;.    as
5450: 73 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a  sert( pBt!=0 );.
5460: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
5470: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
5480: 69 6e 67 6c 65 49 6e 74 28 76 2c 20 73 71 6c 69  ingleInt(v, sqli
5490: 74 65 33 42 74 72 65 65 47 65 74 41 75 74 6f 56  te3BtreeGetAutoV
54a0: 61 63 75 75 6d 28 70 42 74 29 29 3b 0a 20 20 20  acuum(pBt));.   
54b0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e   }else{.      in
54c0: 74 20 65 41 75 74 6f 20 3d 20 67 65 74 41 75 74  t eAuto = getAut
54d0: 6f 56 61 63 75 75 6d 28 7a 52 69 67 68 74 29 3b  oVacuum(zRight);
54e0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65  .      assert( e
54f0: 41 75 74 6f 3e 3d 30 20 26 26 20 65 41 75 74 6f  Auto>=0 && eAuto
5500: 3c 3d 32 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  <=2 );.      db-
5510: 3e 6e 65 78 74 41 75 74 6f 76 61 63 20 3d 20 28  >nextAutovac = (
5520: 75 38 29 65 41 75 74 6f 3b 0a 20 20 20 20 20 20  u8)eAuto;.      
5530: 2f 2a 20 43 61 6c 6c 20 53 65 74 41 75 74 6f 56  /* Call SetAutoV
5540: 61 63 75 75 6d 28 29 20 74 6f 20 73 65 74 20 69  acuum() to set i
5550: 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69 6e  nitialize the in
5560: 74 65 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64 0a  ternal auto and.
5570: 20 20 20 20 20 20 2a 2a 20 69 6e 63 72 2d 76 61        ** incr-va
5580: 63 75 75 6d 20 66 6c 61 67 73 2e 20 54 68 69 73  cuum flags. This
5590: 20 69 73 20 72 65 71 75 69 72 65 64 20 69 6e 20   is required in 
55a0: 63 61 73 65 20 74 68 69 73 20 63 6f 6e 6e 65 63  case this connec
55b0: 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 63 72  tion.      ** cr
55c0: 65 61 74 65 73 20 74 68 65 20 64 61 74 61 62 61  eates the databa
55d0: 73 65 20 66 69 6c 65 2e 20 49 74 20 69 73 20 69  se file. It is i
55e0: 6d 70 6f 72 74 61 6e 74 20 74 68 61 74 20 69 74  mportant that it
55f0: 20 69 73 20 63 72 65 61 74 65 64 0a 20 20 20 20   is created.    
5600: 20 20 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d    ** as an auto-
5610: 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65 20 64  vacuum capable d
5620: 62 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  b..      */.    
5630: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
5640: 72 65 65 53 65 74 41 75 74 6f 56 61 63 75 75 6d  reeSetAutoVacuum
5650: 28 70 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20 20  (pBt, eAuto);.  
5660: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
5670: 54 45 5f 4f 4b 20 26 26 20 28 65 41 75 74 6f 3d  TE_OK && (eAuto=
5680: 3d 31 20 7c 7c 20 65 41 75 74 6f 3d 3d 32 29 20  =1 || eAuto==2) 
5690: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ){.        /* Wh
56a0: 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20 61  en setting the a
56b0: 75 74 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65 20  uto_vacuum mode 
56c0: 74 6f 20 65 69 74 68 65 72 20 22 66 75 6c 6c 22  to either "full"
56d0: 20 6f 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20   or .        ** 
56e0: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20 77  "incremental", w
56f0: 72 69 74 65 20 74 68 65 20 76 61 6c 75 65 20 6f  rite the value o
5700: 66 20 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68 65  f meta[6] in the
5710: 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
5720: 20 20 2a 2a 20 66 69 6c 65 2e 20 42 65 66 6f 72    ** file. Befor
5730: 65 20 77 72 69 74 69 6e 67 20 74 6f 20 6d 65 74  e writing to met
5740: 61 5b 36 5d 2c 20 63 68 65 63 6b 20 74 68 61 74  a[6], check that
5750: 20 6d 65 74 61 5b 33 5d 20 69 6e 64 69 63 61 74   meta[3] indicat
5760: 65 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  es.        ** th
5770: 61 74 20 74 68 69 73 20 72 65 61 6c 6c 79 20 69  at this really i
5780: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
5790: 20 63 61 70 61 62 6c 65 20 64 61 74 61 62 61 73   capable databas
57a0: 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  e..        */.  
57b0: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
57c0: 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42  st int iLn = VDB
57d0: 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28  E_OFFSET_LINENO(
57e0: 32 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61 74  2);.        stat
57f0: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
5800: 69 73 74 20 73 65 74 4d 65 74 61 36 5b 5d 20 3d  ist setMeta6[] =
5810: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f   {.          { O
5820: 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20  P_Transaction,  
5830: 20 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20    0,         1, 
5840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5850: 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20  0},    /* 0 */. 
5860: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65           { OP_Re
5870: 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c  adCookie,     0,
5880: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
5890: 20 20 20 20 42 54 52 45 45 5f 4c 41 52 47 45 53      BTREE_LARGES
58a0: 54 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20  T_ROOT_PAGE},.  
58b0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c          { OP_If,
58c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20               1, 
58d0: 20 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20          0,      
58e0: 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20             0},  
58f0: 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20    /* 2 */.      
5900: 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20      { OP_Halt,  
5910: 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
5920: 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20 20  OK, OE_Abort,   
5930: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
5940: 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   3 */.          
5950: 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20  { OP_SetCookie, 
5960: 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20       0,         
5970: 42 54 52 45 45 5f 49 4e 43 52 5f 56 41 43 55 55  BTREE_INCR_VACUU
5980: 4d 2c 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a  M, 0},    /* 4 *
5990: 2f 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20  /.        };.   
59a0: 20 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70       VdbeOp *aOp
59b0: 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 41  ;.        int iA
59c0: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
59d0: 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 3b  eCurrentAddr(v);
59e0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
59f0: 56 64 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c  VdbeVerifyNoMall
5a00: 6f 63 52 65 71 75 69 72 65 64 28 76 2c 20 41 72  ocRequired(v, Ar
5a10: 72 61 79 53 69 7a 65 28 73 65 74 4d 65 74 61 36  raySize(setMeta6
5a20: 29 29 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 20  ));.        aOp 
5a30: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
5a40: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
5a50: 69 7a 65 28 73 65 74 4d 65 74 61 36 29 2c 20 73  ize(setMeta6), s
5a60: 65 74 4d 65 74 61 36 2c 20 69 4c 6e 29 3b 0a 20  etMeta6, iLn);. 
5a70: 20 20 20 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f         if( ONLY_
5a80: 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  IF_REALLOC_STRES
5a90: 53 28 61 4f 70 3d 3d 30 29 20 29 20 62 72 65 61  S(aOp==0) ) brea
5aa0: 6b 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 30  k;.        aOp[0
5ab0: 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20  ].p1 = iDb;.    
5ac0: 20 20 20 20 61 4f 70 5b 31 5d 2e 70 31 20 3d 20      aOp[1].p1 = 
5ad0: 69 44 62 3b 0a 20 20 20 20 20 20 20 20 61 4f 70  iDb;.        aOp
5ae0: 5b 32 5d 2e 70 32 20 3d 20 69 41 64 64 72 2b 34  [2].p2 = iAddr+4
5af0: 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 34 5d  ;.        aOp[4]
5b00: 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20  .p1 = iDb;.     
5b10: 20 20 20 61 4f 70 5b 34 5d 2e 70 33 20 3d 20 65     aOp[4].p3 = e
5b20: 41 75 74 6f 20 2d 20 31 3b 0a 20 20 20 20 20 20  Auto - 1;.      
5b30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65    sqlite3VdbeUse
5b40: 73 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a  sBtree(v, iDb);.
5b50: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
5b60: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
5b70: 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  dif..  /*.  **  
5b80: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
5b90: 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75  incremental_vacu
5ba0: 75 6d 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20  um(N).  **.  ** 
5bb0: 44 6f 20 4e 20 73 74 65 70 73 20 6f 66 20 69 6e  Do N steps of in
5bc0: 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d  cremental vacuum
5bd0: 69 6e 67 20 6f 6e 20 61 20 64 61 74 61 62 61 73  ing on a databas
5be0: 65 2e 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20  e..  */.#ifndef 
5bf0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
5c00: 56 41 43 55 55 4d 0a 20 20 63 61 73 65 20 50 72  VACUUM.  case Pr
5c10: 61 67 54 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41  agTyp_INCREMENTA
5c20: 4c 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20  L_VACUUM: {.    
5c30: 69 6e 74 20 69 4c 69 6d 69 74 2c 20 61 64 64 72  int iLimit, addr
5c40: 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
5c50: 3d 3d 30 20 7c 7c 20 21 73 71 6c 69 74 65 33 47  ==0 || !sqlite3G
5c60: 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20  etInt32(zRight, 
5c70: 26 69 4c 69 6d 69 74 29 20 7c 7c 20 69 4c 69 6d  &iLimit) || iLim
5c80: 69 74 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  it<=0 ){.      i
5c90: 4c 69 6d 69 74 20 3d 20 30 78 37 66 66 66 66 66  Limit = 0x7fffff
5ca0: 66 66 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  ff;.    }.    sq
5cb0: 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f  lite3BeginWriteO
5cc0: 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65 2c  peration(pParse,
5cd0: 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 71   0, iDb);.    sq
5ce0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
5cf0: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69  v, OP_Integer, i
5d00: 4c 69 6d 69 74 2c 20 31 29 3b 0a 20 20 20 20 61  Limit, 1);.    a
5d10: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
5d20: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 6e  eAddOp1(v, OP_In
5d30: 63 72 56 61 63 75 75 6d 2c 20 69 44 62 29 3b 20  crVacuum, iDb); 
5d40: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
5d50: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
5d60: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 73  AddOp1(v, OP_Res
5d70: 75 6c 74 52 6f 77 2c 20 31 29 3b 0a 20 20 20 20  ultRow, 1);.    
5d80: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
5d90: 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20  2(v, OP_AddImm, 
5da0: 31 2c 20 2d 31 29 3b 0a 20 20 20 20 73 71 6c 69  1, -1);.    sqli
5db0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
5dc0: 20 4f 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64   OP_IfPos, 1, ad
5dd0: 64 72 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  dr); VdbeCoverag
5de0: 65 28 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  e(v);.    sqlite
5df0: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
5e00: 20 61 64 64 72 29 3b 0a 20 20 20 20 62 72 65 61   addr);.    brea
5e10: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23  k;.  }.#endif..#
5e20: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
5e30: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
5e40: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
5e50: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68  MA [schema.]cach
5e60: 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41  e_size.  **  PRA
5e70: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63  GMA [schema.]cac
5e80: 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20  he_size=N.  **. 
5e90: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f   ** The first fo
5ea0: 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63  rm reports the c
5eb0: 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74  urrent local set
5ec0: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a  ting for the.  *
5ed0: 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  * page cache siz
5ee0: 65 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  e. The second fo
5ef0: 72 6d 20 73 65 74 73 20 74 68 65 20 6c 6f 63 61  rm sets the loca
5f00: 6c 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68  l.  ** page cach
5f10: 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 49  e size value.  I
5f20: 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65 20  f N is positive 
5f30: 74 68 65 6e 20 74 68 61 74 20 69 73 20 74 68 65  then that is the
5f40: 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  .  ** number of 
5f50: 70 61 67 65 73 20 69 6e 20 74 68 65 20 63 61 63  pages in the cac
5f60: 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67  he.  If N is neg
5f70: 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65 0a  ative, then the.
5f80: 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70    ** number of p
5f90: 61 67 65 73 20 69 73 20 61 64 6a 75 73 74 65 64  ages is adjusted
5fa0: 20 73 6f 20 74 68 61 74 20 74 68 65 20 63 61 63   so that the cac
5fb0: 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69 62  he uses -N kibib
5fc0: 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d  ytes.  ** of mem
5fd0: 6f 72 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ory..  */.  case
5fe0: 20 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f 53   PragTyp_CACHE_S
5ff0: 49 5a 45 3a 20 7b 0a 20 20 20 20 61 73 73 65 72  IZE: {.    asser
6000: 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
6010: 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44  MutexHeld(db, iD
6020: 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28  b, 0) );.    if(
6030: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
6040: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
6050: 74 28 76 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d  t(v, pDb->pSchem
6060: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a  a->cache_size);.
6070: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6080: 20 69 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69   int size = sqli
6090: 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b  te3Atoi(zRight);
60a0: 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68  .      pDb->pSch
60b0: 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20  ema->cache_size 
60c0: 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71  = size;.      sq
60d0: 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
60e0: 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c  heSize(pDb->pBt,
60f0: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63   pDb->pSchema->c
6100: 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20  ache_size);.    
6110: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
6120: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
6130: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63  GMA [schema.]cac
6140: 68 65 5f 73 70 69 6c 6c 0a 20 20 2a 2a 20 20 50  he_spill.  **  P
6150: 52 41 47 4d 41 20 63 61 63 68 65 5f 73 70 69 6c  RAGMA cache_spil
6160: 6c 3d 42 4f 4f 4c 45 41 4e 0a 20 20 2a 2a 20 20  l=BOOLEAN.  **  
6170: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
6180: 63 61 63 68 65 5f 73 70 69 6c 6c 3d 4e 0a 20 20  cache_spill=N.  
6190: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73  **.  ** The firs
61a0: 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74  t form reports t
61b0: 68 65 20 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c  he current local
61c0: 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65   setting for the
61d0: 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65  .  ** page cache
61e0: 20 73 70 69 6c 6c 20 73 69 7a 65 2e 20 54 68 65   spill size. The
61f0: 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 74 75 72   second form tur
6200: 6e 73 20 63 61 63 68 65 20 73 70 69 6c 6c 20 6f  ns cache spill o
6210: 6e 0a 20 20 2a 2a 20 6f 72 20 6f 66 66 2e 20 20  n.  ** or off.  
6220: 57 68 65 6e 20 74 75 72 6e 6e 69 6e 67 20 63 61  When turnning ca
6230: 63 68 65 20 73 70 69 6c 6c 20 6f 6e 2c 20 74 68  che spill on, th
6240: 65 20 73 69 7a 65 20 69 73 20 73 65 74 20 74 6f  e size is set to
6250: 20 74 68 65 0a 20 20 2a 2a 20 63 75 72 72 65 6e   the.  ** curren
6260: 74 20 63 61 63 68 65 5f 73 69 7a 65 2e 20 20 54  t cache_size.  T
6270: 68 65 20 74 68 69 72 64 20 66 6f 72 6d 20 73 65  he third form se
6280: 74 73 20 61 20 73 70 69 6c 6c 20 73 69 7a 65 20  ts a spill size 
6290: 74 68 61 74 0a 20 20 2a 2a 20 6d 61 79 20 62 65  that.  ** may be
62a0: 20 64 69 66 66 65 72 65 6e 74 20 66 6f 72 6d 20   different form 
62b0: 74 68 65 20 63 61 63 68 65 20 73 69 7a 65 2e 0a  the cache size..
62c0: 20 20 2a 2a 20 49 66 20 4e 20 69 73 20 70 6f 73    ** If N is pos
62d0: 69 74 69 76 65 20 74 68 65 6e 20 74 68 61 74 20  itive then that 
62e0: 69 73 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62  is the.  ** numb
62f0: 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
6300: 68 65 20 63 61 63 68 65 2e 20 20 49 66 20 4e 20  he cache.  If N 
6310: 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65  is negative, the
6320: 6e 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65  n the.  ** numbe
6330: 72 20 6f 66 20 70 61 67 65 73 20 69 73 20 61 64  r of pages is ad
6340: 6a 75 73 74 65 64 20 73 6f 20 74 68 61 74 20 74  justed so that t
6350: 68 65 20 63 61 63 68 65 20 75 73 65 73 20 2d 4e  he cache uses -N
6360: 20 6b 69 62 69 62 79 74 65 73 0a 20 20 2a 2a 20   kibibytes.  ** 
6370: 6f 66 20 6d 65 6d 6f 72 79 2e 0a 20 20 2a 2a 0a  of memory..  **.
6380: 20 20 2a 2a 20 49 66 20 74 68 65 20 6e 75 6d 62    ** If the numb
6390: 65 72 20 6f 66 20 63 61 63 68 65 5f 73 70 69 6c  er of cache_spil
63a0: 6c 20 70 61 67 65 73 20 69 73 20 6c 65 73 73 20  l pages is less 
63b0: 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  then the number 
63c0: 6f 66 0a 20 20 2a 2a 20 63 61 63 68 65 5f 73 69  of.  ** cache_si
63d0: 7a 65 20 70 61 67 65 73 2c 20 6e 6f 20 73 70 69  ze pages, no spi
63e0: 6c 6c 69 6e 67 20 6f 63 63 75 72 73 20 75 6e 74  lling occurs unt
63f0: 69 6c 20 74 68 65 20 70 61 67 65 20 63 6f 75 6e  il the page coun
6400: 74 20 65 78 63 65 65 64 73 0a 20 20 2a 2a 20 74  t exceeds.  ** t
6410: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 61 63  he number of cac
6420: 68 65 5f 73 69 7a 65 20 70 61 67 65 73 2e 0a 20  he_size pages.. 
6430: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 63 61 63   **.  ** The cac
6440: 68 65 5f 73 70 69 6c 6c 3d 42 4f 4f 4c 45 41 4e  he_spill=BOOLEAN
6450: 20 73 65 74 74 69 6e 67 20 61 70 70 6c 69 65 73   setting applies
6460: 20 74 6f 20 61 6c 6c 20 61 74 74 61 63 68 65 64   to all attached
6470: 20 73 63 68 65 6d 61 73 2c 0a 20 20 2a 2a 20 6e   schemas,.  ** n
6480: 6f 74 20 6a 75 73 74 20 74 68 65 20 73 63 68 65  ot just the sche
6490: 6d 61 20 73 70 65 63 69 66 69 65 64 2e 0a 20 20  ma specified..  
64a0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
64b0: 70 5f 43 41 43 48 45 5f 53 50 49 4c 4c 3a 20 7b  p_CACHE_SPILL: {
64c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
64d0: 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
64e0: 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20  eld(db, iDb, 0) 
64f0: 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67  );.    if( !zRig
6500: 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  ht ){.      retu
6510: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 0a 20  rnSingleInt(v,. 
6520: 20 20 20 20 20 20 20 20 28 64 62 2d 3e 66 6c 61          (db->fla
6530: 67 73 20 26 20 53 51 4c 49 54 45 5f 43 61 63 68  gs & SQLITE_Cach
6540: 65 53 70 69 6c 6c 29 3d 3d 30 20 3f 20 30 20 3a  eSpill)==0 ? 0 :
6550: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71   .            sq
6560: 6c 69 74 65 33 42 74 72 65 65 53 65 74 53 70 69  lite3BtreeSetSpi
6570: 6c 6c 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c  llSize(pDb->pBt,
6580: 30 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0));.    }else{.
6590: 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d        int size =
65a0: 20 31 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71   1;.      if( sq
65b0: 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52  lite3GetInt32(zR
65c0: 69 67 68 74 2c 20 26 73 69 7a 65 29 20 29 7b 0a  ight, &size) ){.
65d0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42          sqlite3B
65e0: 74 72 65 65 53 65 74 53 70 69 6c 6c 53 69 7a 65  treeSetSpillSize
65f0: 28 70 44 62 2d 3e 70 42 74 2c 20 73 69 7a 65 29  (pDb->pBt, size)
6600: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
6610: 69 66 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f  if( sqlite3GetBo
6620: 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 73 69  olean(zRight, si
6630: 7a 65 21 3d 30 29 20 29 7b 0a 20 20 20 20 20 20  ze!=0) ){.      
6640: 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53    db->flags |= S
6650: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
6660: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
6670: 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73         db->flags
6680: 20 26 3d 20 7e 53 51 4c 49 54 45 5f 43 61 63 68   &= ~SQLITE_Cach
6690: 65 53 70 69 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a  eSpill;.      }.
66a0: 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65        setAllPage
66b0: 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20  rFlags(db);.    
66c0: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
66d0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
66e0: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6d 6d 61  GMA [schema.]mma
66f0: 70 5f 73 69 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20  p_size(N).  **. 
6700: 20 2a 2a 20 55 73 65 64 20 74 6f 20 73 65 74 20   ** Used to set 
6710: 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d  mapping size lim
6720: 69 74 2e 20 54 68 65 20 6d 61 70 70 69 6e 67 20  it. The mapping 
6730: 73 69 7a 65 20 6c 69 6d 69 74 20 69 73 0a 20 20  size limit is.  
6740: 2a 2a 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74  ** used to limit
6750: 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73   the aggregate s
6760: 69 7a 65 20 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72  ize of all memor
6770: 79 20 6d 61 70 70 65 64 20 72 65 67 69 6f 6e 73  y mapped regions
6780: 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 64 61 74   of the.  ** dat
6790: 61 62 61 73 65 20 66 69 6c 65 2e 20 49 66 20 74  abase file. If t
67a0: 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 69 73  his parameter is
67b0: 20 73 65 74 20 74 6f 20 7a 65 72 6f 2c 20 74 68   set to zero, th
67c0: 65 6e 20 6d 65 6d 6f 72 79 20 6d 61 70 70 69 6e  en memory mappin
67d0: 67 0a 20 20 2a 2a 20 69 73 20 6e 6f 74 20 75 73  g.  ** is not us
67e0: 65 64 20 61 74 20 61 6c 6c 2e 20 20 49 66 20 4e  ed at all.  If N
67f0: 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68   is negative, th
6800: 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d  en the default m
6810: 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 6c  emory map.  ** l
6820: 69 6d 69 74 20 64 65 74 65 72 6d 69 6e 65 64 20  imit determined 
6830: 62 79 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  by sqlite3_confi
6840: 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  g(SQLITE_CONFIG_
6850: 4d 4d 41 50 5f 53 49 5a 45 29 20 69 73 20 73 65  MMAP_SIZE) is se
6860: 74 2e 0a 20 20 2a 2a 20 54 68 65 20 70 61 72 61  t..  ** The para
6870: 6d 65 74 65 72 20 4e 20 69 73 20 6d 65 61 73 75  meter N is measu
6880: 72 65 64 20 69 6e 20 62 79 74 65 73 2e 0a 20 20  red in bytes..  
6890: 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 76 61 6c  **.  ** This val
68a0: 75 65 20 69 73 20 61 64 76 69 73 6f 72 79 2e 20  ue is advisory. 
68b0: 20 54 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   The underlying 
68c0: 56 46 53 20 69 73 20 66 72 65 65 20 74 6f 20 6d  VFS is free to m
68d0: 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 61  emory map.  ** a
68e0: 73 20 6c 69 74 74 6c 65 20 6f 72 20 61 73 20 6d  s little or as m
68f0: 75 63 68 20 61 73 20 69 74 20 77 61 6e 74 73 2e  uch as it wants.
6900: 20 20 45 78 63 65 70 74 2c 20 69 66 20 4e 20 69    Except, if N i
6910: 73 20 73 65 74 20 74 6f 20 30 20 74 68 65 6e 20  s set to 0 then 
6920: 74 68 65 0a 20 20 2a 2a 20 75 70 70 65 72 20 6c  the.  ** upper l
6930: 61 79 65 72 73 20 77 69 6c 6c 20 6e 65 76 65 72  ayers will never
6940: 20 69 6e 76 6f 6b 65 20 74 68 65 20 78 46 65 74   invoke the xFet
6950: 63 68 20 69 6e 74 65 72 66 61 63 65 73 20 74 6f  ch interfaces to
6960: 20 74 68 65 20 56 46 53 2e 0a 20 20 2a 2f 0a 20   the VFS..  */. 
6970: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4d 4d   case PragTyp_MM
6980: 41 50 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73  AP_SIZE: {.    s
6990: 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 3b  qlite3_int64 sz;
69a0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
69b0: 4d 4d 41 50 5f 53 49 5a 45 3e 30 0a 20 20 20 20  MMAP_SIZE>0.    
69c0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
69d0: 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
69e0: 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
69f0: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
6a00: 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20        int ii;.  
6a10: 20 20 20 20 73 71 6c 69 74 65 33 44 65 63 4f 72      sqlite3DecOr
6a20: 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c  HexToI64(zRight,
6a30: 20 26 73 7a 29 3b 0a 20 20 20 20 20 20 69 66 28   &sz);.      if(
6a40: 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20 73 71 6c   sz<0 ) sz = sql
6a50: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
6a60: 2e 73 7a 4d 6d 61 70 3b 0a 20 20 20 20 20 20 69  .szMmap;.      i
6a70: 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 20  f( pId2->n==0 ) 
6a80: 64 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b  db->szMmap = sz;
6a90: 0a 20 20 20 20 20 20 66 6f 72 28 69 69 3d 64 62  .      for(ii=db
6aa0: 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20  ->nDb-1; ii>=0; 
6ab0: 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 69  ii--){.        i
6ac0: 66 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  f( db->aDb[ii].p
6ad0: 42 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c  Bt && (ii==iDb |
6ae0: 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b  | pId2->n==0) ){
6af0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
6b00: 65 33 42 74 72 65 65 53 65 74 4d 6d 61 70 4c 69  e3BtreeSetMmapLi
6b10: 6d 69 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  mit(db->aDb[ii].
6b20: 70 42 74 2c 20 73 7a 29 3b 0a 20 20 20 20 20 20  pBt, sz);.      
6b30: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
6b40: 7d 0a 20 20 20 20 73 7a 20 3d 20 2d 31 3b 0a 20  }.    sz = -1;. 
6b50: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
6b60: 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
6b70: 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e   zDb, SQLITE_FCN
6b80: 54 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20 26 73  TL_MMAP_SIZE, &s
6b90: 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 73 7a  z);.#else.    sz
6ba0: 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 53   = 0;.    rc = S
6bb0: 51 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66  QLITE_OK;.#endif
6bc0: 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
6bd0: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
6be0: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
6bf0: 76 2c 20 73 7a 29 3b 0a 20 20 20 20 7d 65 6c 73  v, sz);.    }els
6c00: 65 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45  e if( rc!=SQLITE
6c10: 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20 20 20  _NOTFOUND ){.   
6c20: 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b     pParse->nErr+
6c30: 2b 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  +;.      pParse-
6c40: 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 7d 0a  >rc = rc;.    }.
6c50: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
6c60: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
6c70: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20  MA temp_store.  
6c80: 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  **   PRAGMA temp
6c90: 5f 73 74 6f 72 65 20 3d 20 22 64 65 66 61 75 6c  _store = "defaul
6ca0: 74 22 7c 22 6d 65 6d 6f 72 79 22 7c 22 66 69 6c  t"|"memory"|"fil
6cb0: 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  e".  **.  ** Ret
6cc0: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c  urn or set the l
6cd0: 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  ocal value of th
6ce0: 65 20 74 65 6d 70 5f 73 74 6f 72 65 20 66 6c 61  e temp_store fla
6cf0: 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a  g.  Changing.  *
6d00: 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75  * the local valu
6d10: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20  e does not make 
6d20: 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64  changes to the d
6d30: 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68 65  isk file and the
6d40: 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20 76 61   default.  ** va
6d50: 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73 74  lue will be rest
6d60: 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20 74 69  ored the next ti
6d70: 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  me the database 
6d80: 69 73 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2a 0a  is opened..  **.
6d90: 20 20 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 69    ** Note that i
6da0: 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 66 6f  t is possible fo
6db0: 72 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 6f  r the library co
6dc0: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
6dd0: 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f 76 65 72 72  ns to.  ** overr
6de0: 69 64 65 20 74 68 69 73 20 73 65 74 74 69 6e 67  ide this setting
6df0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
6e00: 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 3a  gTyp_TEMP_STORE:
6e10: 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67   {.    if( !zRig
6e20: 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  ht ){.      retu
6e30: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 64  rnSingleInt(v, d
6e40: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 29 3b 0a  b->temp_store);.
6e50: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6e60: 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61   changeTempStora
6e70: 67 65 28 70 50 61 72 73 65 2c 20 7a 52 69 67 68  ge(pParse, zRigh
6e80: 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72  t);.    }.    br
6e90: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
6ea0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d   **   PRAGMA tem
6eb0: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
6ec0: 79 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  y.  **   PRAGMA 
6ed0: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
6ee0: 74 6f 72 79 20 3d 20 22 22 7c 22 64 69 72 65 63  tory = ""|"direc
6ef0: 74 6f 72 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a 0a  tory_name".  **.
6f00: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
6f10: 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  et the local val
6f20: 75 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73  ue of the temp_s
6f30: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 66  tore_directory f
6f40: 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20  lag.  Changing. 
6f50: 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 73 65   ** the value se
6f60: 74 73 20 61 20 73 70 65 63 69 66 69 63 20 64 69  ts a specific di
6f70: 72 65 63 74 6f 72 79 20 74 6f 20 62 65 20 75 73  rectory to be us
6f80: 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ed for temporary
6f90: 20 66 69 6c 65 73 2e 0a 20 20 2a 2a 20 53 65 74   files..  ** Set
6fa0: 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c 20 73  ting to a null s
6fb0: 74 72 69 6e 67 20 72 65 76 65 72 74 73 20 74 6f  tring reverts to
6fc0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 6d   the default tem
6fd0: 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79  porary directory
6fe0: 20 73 65 61 72 63 68 2e 0a 20 20 2a 2a 20 49 66   search..  ** If
6ff0: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
7000: 74 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64 2c  tory is changed,
7010: 20 74 68 65 6e 20 69 6e 76 61 6c 69 64 61 74 65   then invalidate
7020: 54 65 6d 70 53 74 6f 72 61 67 65 2e 0a 20 20 2a  TempStorage..  *
7030: 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  *.  */.  case Pr
7040: 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45  agTyp_TEMP_STORE
7050: 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20  _DIRECTORY: {.  
7060: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
7070: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
7080: 67 6c 65 54 65 78 74 28 76 2c 20 73 71 6c 69 74  gleText(v, sqlit
7090: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
70a0: 79 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23  y);.    }else{.#
70b0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
70c0: 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28  IT_WSD.      if(
70d0: 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20   zRight[0] ){.  
70e0: 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20        int res;. 
70f0: 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
7100: 74 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e  te3OsAccess(db->
7110: 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51  pVfs, zRight, SQ
7120: 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44  LITE_ACCESS_READ
7130: 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20  WRITE, &res);.  
7140: 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
7150: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d  LITE_OK || res==
7160: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
7170: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
7180: 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72  Parse, "not a wr
7190: 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79  itable directory
71a0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  ");.          go
71b0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
71c0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
71d0: 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54  .      if( SQLIT
71e0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a  E_TEMP_STORE==0.
71f0: 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54         || (SQLIT
7200: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20  E_TEMP_STORE==1 
7210: 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  && db->temp_stor
7220: 65 3c 3d 31 29 0a 20 20 20 20 20 20 20 7c 7c 20  e<=1).       || 
7230: 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f  (SQLITE_TEMP_STO
7240: 52 45 3d 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d  RE==2 && db->tem
7250: 70 5f 73 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20  p_store==1).    
7260: 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 76    ){.        inv
7270: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
7280: 67 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  ge(pParse);.    
7290: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
72a0: 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 74  3_free(sqlite3_t
72b0: 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a  emp_directory);.
72c0: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
72d0: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  [0] ){.        s
72e0: 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65  qlite3_temp_dire
72f0: 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f  ctory = sqlite3_
7300: 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52  mprintf("%s", zR
7310: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ight);.      }el
7320: 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
7330: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
7340: 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ry = 0;.      }.
7350: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
7360: 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20  _OMIT_WSD */.   
7370: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
7380: 7d 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53  }..#if SQLITE_OS
7390: 5f 57 49 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  _WIN.  /*.  **  
73a0: 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f   PRAGMA data_sto
73b0: 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a  re_directory.  *
73c0: 2a 20 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f  *   PRAGMA data_
73d0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
73e0: 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f  = ""|"directory_
73f0: 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  name".  **.  ** 
7400: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
7410: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
7420: 20 74 68 65 20 64 61 74 61 5f 73 74 6f 72 65 5f   the data_store_
7430: 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20  directory flag. 
7440: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
7450: 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20  he value sets a 
7460: 73 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f  specific directo
7470: 72 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ry to be used fo
7480: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
7490: 20 74 68 61 74 0a 20 20 2a 2a 20 77 65 72 65 20   that.  ** were 
74a0: 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61  specified with a
74b0: 20 72 65 6c 61 74 69 76 65 20 70 61 74 68 6e 61   relative pathna
74c0: 6d 65 2e 20 20 53 65 74 74 69 6e 67 20 74 6f 20  me.  Setting to 
74d0: 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65  a null string re
74e0: 76 65 72 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68  verts.  ** to th
74f0: 65 20 64 65 66 61 75 6c 74 20 64 61 74 61 62 61  e default databa
7500: 73 65 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68  se directory, wh
7510: 69 63 68 20 66 6f 72 20 64 61 74 61 62 61 73 65  ich for database
7520: 20 66 69 6c 65 73 20 73 70 65 63 69 66 69 65 64   files specified
7530: 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c   with.  ** a rel
7540: 61 74 69 76 65 20 70 61 74 68 20 77 69 6c 6c 20  ative path will 
7550: 70 72 6f 62 61 62 6c 79 20 62 65 20 62 61 73 65  probably be base
7560: 64 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74  d on the current
7570: 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74   directory for t
7580: 68 65 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e  he.  ** process.
7590: 20 20 44 61 74 61 62 61 73 65 20 66 69 6c 65 20    Database file 
75a0: 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61  specified with a
75b0: 6e 20 61 62 73 6f 6c 75 74 65 20 70 61 74 68 20  n absolute path 
75c0: 61 72 65 20 6e 6f 74 20 69 6d 70 61 63 74 65 64  are not impacted
75d0: 0a 20 20 2a 2a 20 62 79 20 74 68 69 73 20 73 65  .  ** by this se
75e0: 74 74 69 6e 67 2c 20 72 65 67 61 72 64 6c 65 73  tting, regardles
75f0: 73 20 6f 66 20 69 74 73 20 76 61 6c 75 65 2e 0a  s of its value..
7600: 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65    **.  */.  case
7610: 20 50 72 61 67 54 79 70 5f 44 41 54 41 5f 53 54   PragTyp_DATA_ST
7620: 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b  ORE_DIRECTORY: {
7630: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
7640: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
7650: 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 73 71  SingleText(v, sq
7660: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
7670: 74 6f 72 79 29 3b 0a 20 20 20 20 7d 65 6c 73 65  tory);.    }else
7680: 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  {.#ifndef SQLITE
7690: 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20 20 20  _OMIT_WSD.      
76a0: 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b  if( zRight[0] ){
76b0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73  .        int res
76c0: 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
76d0: 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28 64  qlite3OsAccess(d
76e0: 62 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68 74 2c  b->pVfs, zRight,
76f0: 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 52   SQLITE_ACCESS_R
7700: 45 41 44 57 52 49 54 45 2c 20 26 72 65 73 29 3b  EADWRITE, &res);
7710: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
7720: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65  =SQLITE_OK || re
7730: 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  s==0 ){.        
7740: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
7750: 67 28 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61  g(pParse, "not a
7760: 20 77 72 69 74 61 62 6c 65 20 64 69 72 65 63 74   writable direct
7770: 6f 72 79 22 29 3b 0a 20 20 20 20 20 20 20 20 20  ory");.         
7780: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
7790: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
77a0: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
77b0: 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 64  3_free(sqlite3_d
77c0: 61 74 61 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a  ata_directory);.
77d0: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
77e0: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  [0] ){.        s
77f0: 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65  qlite3_data_dire
7800: 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f  ctory = sqlite3_
7810: 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52  mprintf("%s", zR
7820: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ight);.      }el
7830: 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
7840: 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f  te3_data_directo
7850: 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ry = 0;.      }.
7860: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
7870: 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20  _OMIT_WSD */.   
7880: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
7890: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51  }.#endif..#if SQ
78a0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b  LITE_ENABLE_LOCK
78b0: 49 4e 47 5f 53 54 59 4c 45 0a 20 20 2f 2a 0a 20  ING_STYLE.  /*. 
78c0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63   **   PRAGMA [sc
78d0: 68 65 6d 61 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79  hema.]lock_proxy
78e0: 5f 66 69 6c 65 0a 20 20 2a 2a 20 20 20 50 52 41  _file.  **   PRA
78f0: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6c 6f 63  GMA [schema.]loc
7900: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20 3d 20 22  k_proxy_file = "
7910: 3a 61 75 74 6f 3a 22 7c 22 6c 6f 63 6b 5f 66 69  :auto:"|"lock_fi
7920: 6c 65 5f 70 61 74 68 22 0a 20 20 2a 2a 0a 20 20  le_path".  **.  
7930: 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74  ** Return or set
7940: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
7950: 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  e lock_proxy_fil
7960: 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e  e flag.  Changin
7970: 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65  g.  ** the value
7980: 20 73 65 74 73 20 61 20 73 70 65 63 69 66 69 63   sets a specific
7990: 20 66 69 6c 65 20 74 6f 20 62 65 20 75 73 65 64   file to be used
79a0: 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 61 63   for database ac
79b0: 63 65 73 73 20 6c 6f 63 6b 73 2e 0a 20 20 2a 2a  cess locks..  **
79c0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
79d0: 67 54 79 70 5f 4c 4f 43 4b 5f 50 52 4f 58 59 5f  gTyp_LOCK_PROXY_
79e0: 46 49 4c 45 3a 20 7b 0a 20 20 20 20 69 66 28 20  FILE: {.    if( 
79f0: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
7a00: 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d   Pager *pPager =
7a10: 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
7a20: 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20  er(pDb->pBt);.  
7a30: 20 20 20 20 63 68 61 72 20 2a 70 72 6f 78 79 5f      char *proxy_
7a40: 66 69 6c 65 5f 70 61 74 68 20 3d 20 4e 55 4c 4c  file_path = NULL
7a50: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
7a60: 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d 20 73 71  file *pFile = sq
7a70: 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65 28 70  lite3PagerFile(p
7a80: 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 73 71  Pager);.      sq
7a90: 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72  lite3OsFileContr
7aa0: 6f 6c 48 69 6e 74 28 70 46 69 6c 65 2c 20 53 51  olHint(pFile, SQ
7ab0: 4c 49 54 45 5f 47 45 54 5f 4c 4f 43 4b 50 52 4f  LITE_GET_LOCKPRO
7ac0: 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20  XYFILE, .       
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ae0: 20 20 20 20 26 70 72 6f 78 79 5f 66 69 6c 65 5f      &proxy_file_
7af0: 70 61 74 68 29 3b 0a 20 20 20 20 20 20 72 65 74  path);.      ret
7b00: 75 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c  urnSingleText(v,
7b10: 20 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68   proxy_file_path
7b20: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
7b30: 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65      Pager *pPage
7b40: 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
7b50: 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b  Pager(pDb->pBt);
7b60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
7b70: 69 6c 65 20 2a 70 46 69 6c 65 20 3d 20 73 71 6c  ile *pFile = sql
7b80: 69 74 65 33 50 61 67 65 72 46 69 6c 65 28 70 50  ite3PagerFile(pP
7b90: 61 67 65 72 29 3b 0a 20 20 20 20 20 20 69 6e 74  ager);.      int
7ba0: 20 72 65 73 3b 0a 20 20 20 20 20 20 69 66 28 20   res;.      if( 
7bb0: 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20  zRight[0] ){.   
7bc0: 20 20 20 20 20 72 65 73 3d 73 71 6c 69 74 65 33       res=sqlite3
7bd0: 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46  OsFileControl(pF
7be0: 69 6c 65 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f  ile, SQLITE_SET_
7bf0: 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a  LOCKPROXYFILE, .
7c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c20: 20 20 20 20 20 7a 52 69 67 68 74 29 3b 0a 20 20       zRight);.  
7c30: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
7c40: 20 20 20 20 20 72 65 73 3d 73 71 6c 69 74 65 33       res=sqlite3
7c50: 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46  OsFileControl(pF
7c60: 69 6c 65 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f  ile, SQLITE_SET_
7c70: 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a  LOCKPROXYFILE, .
7c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ca0: 20 20 20 20 20 4e 55 4c 4c 29 3b 0a 20 20 20 20       NULL);.    
7cb0: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65    }.      if( re
7cc0: 73 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  s!=SQLITE_OK ){.
7cd0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
7ce0: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
7cf0: 22 66 61 69 6c 65 64 20 74 6f 20 73 65 74 20 6c  "failed to set l
7d00: 6f 63 6b 20 70 72 6f 78 79 20 66 69 6c 65 22 29  ock proxy file")
7d10: 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70  ;.        goto p
7d20: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20  ragma_out;.     
7d30: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65   }.    }.    bre
7d40: 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f  ak;.  }.#endif /
7d50: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
7d60: 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 20 2a 2f  LOCKING_STYLE */
7d70: 20 20 20 20 20 20 0a 20 20 20 20 0a 20 20 2f 2a        .    .  /*
7d80: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
7d90: 73 63 68 65 6d 61 2e 5d 73 79 6e 63 68 72 6f 6e  schema.]synchron
7da0: 6f 75 73 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ous.  **   PRAGM
7db0: 41 20 5b 73 63 68 65 6d 61 2e 5d 73 79 6e 63 68  A [schema.]synch
7dc0: 72 6f 6e 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f  ronous=OFF|ON|NO
7dd0: 52 4d 41 4c 7c 46 55 4c 4c 7c 45 58 54 52 41 0a  RMAL|FULL|EXTRA.
7de0: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
7df0: 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61   or set the loca
7e00: 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73  l value of the s
7e10: 79 6e 63 68 72 6f 6e 6f 75 73 20 66 6c 61 67 2e  ynchronous flag.
7e20: 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20    Changing.  ** 
7e30: 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20  the local value 
7e40: 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68  does not make ch
7e50: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 69 73  anges to the dis
7e60: 6b 20 66 69 6c 65 20 61 6e 64 20 74 68 65 0a 20  k file and the. 
7e70: 20 2a 2a 20 64 65 66 61 75 6c 74 20 76 61 6c 75   ** default valu
7e80: 65 20 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72  e will be restor
7e90: 65 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65  ed the next time
7ea0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
7eb0: 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 2e 0a 20 20  .  ** opened..  
7ec0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
7ed0: 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3a 20 7b  p_SYNCHRONOUS: {
7ee0: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
7ef0: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
7f00: 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 70 44 62  SingleInt(v, pDb
7f10: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 2d 31  ->safety_level-1
7f20: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
7f30: 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74      if( !db->aut
7f40: 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20  oCommit ){.     
7f50: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
7f60: 73 67 28 70 50 61 72 73 65 2c 20 0a 20 20 20 20  sg(pParse, .    
7f70: 20 20 20 20 20 20 20 20 22 53 61 66 65 74 79 20          "Safety 
7f80: 6c 65 76 65 6c 20 6d 61 79 20 6e 6f 74 20 62 65  level may not be
7f90: 20 63 68 61 6e 67 65 64 20 69 6e 73 69 64 65 20   changed inside 
7fa0: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b  a transaction");
7fb0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
7fc0: 20 20 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c        int iLevel
7fd0: 20 3d 20 28 67 65 74 53 61 66 65 74 79 4c 65 76   = (getSafetyLev
7fe0: 65 6c 28 7a 52 69 67 68 74 2c 30 2c 31 29 2b 31  el(zRight,0,1)+1
7ff0: 29 20 26 20 50 41 47 45 52 5f 53 59 4e 43 48 52  ) & PAGER_SYNCHR
8000: 4f 4e 4f 55 53 5f 4d 41 53 4b 3b 0a 20 20 20 20  ONOUS_MASK;.    
8010: 20 20 20 20 69 66 28 20 69 4c 65 76 65 6c 3d 3d      if( iLevel==
8020: 30 20 29 20 69 4c 65 76 65 6c 20 3d 20 31 3b 0a  0 ) iLevel = 1;.
8030: 20 20 20 20 20 20 20 20 70 44 62 2d 3e 73 61 66          pDb->saf
8040: 65 74 79 5f 6c 65 76 65 6c 20 3d 20 69 4c 65 76  ety_level = iLev
8050: 65 6c 3b 0a 20 20 20 20 20 20 20 20 70 44 62 2d  el;.        pDb-
8060: 3e 62 53 79 6e 63 53 65 74 20 3d 20 31 3b 0a 20  >bSyncSet = 1;. 
8070: 20 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67         setAllPag
8080: 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20  erFlags(db);.   
8090: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
80a0: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
80b0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
80c0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
80d0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
80e0: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
80f0: 41 53 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  AS.  case PragTy
8100: 70 5f 46 4c 41 47 3a 20 7b 0a 20 20 20 20 69 66  p_FLAG: {.    if
8110: 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20  ( zRight==0 ){. 
8120: 20 20 20 20 20 73 65 74 50 72 61 67 6d 61 52 65       setPragmaRe
8130: 73 75 6c 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  sultColumnNames(
8140: 76 2c 20 70 50 72 61 67 6d 61 29 3b 0a 20 20 20  v, pPragma);.   
8150: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
8160: 6e 74 28 76 2c 20 28 64 62 2d 3e 66 6c 61 67 73  nt(v, (db->flags
8170: 20 26 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67   & pPragma->iArg
8180: 29 21 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )!=0 );.    }els
8190: 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d 61 73  e{.      int mas
81a0: 6b 20 3d 20 70 50 72 61 67 6d 61 2d 3e 69 41 72  k = pPragma->iAr
81b0: 67 3b 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66  g;    /* Mask of
81c0: 20 62 69 74 73 20 74 6f 20 73 65 74 20 6f 72 20   bits to set or 
81d0: 63 6c 65 61 72 2e 20 2a 2f 0a 20 20 20 20 20 20  clear. */.      
81e0: 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  if( db->autoComm
81f0: 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  it==0 ){.       
8200: 20 2f 2a 20 46 6f 72 65 69 67 6e 20 6b 65 79 20   /* Foreign key 
8210: 73 75 70 70 6f 72 74 20 6d 61 79 20 6e 6f 74 20  support may not 
8220: 62 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69  be enabled or di
8230: 73 61 62 6c 65 64 20 77 68 69 6c 65 20 6e 6f 74  sabled while not
8240: 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 20 61  .        ** in a
8250: 75 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e  uto-commit mode.
8260: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 61 73    */.        mas
8270: 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45 5f 46 6f  k &= ~(SQLITE_Fo
8280: 72 65 69 67 6e 4b 65 79 73 29 3b 0a 20 20 20 20  reignKeys);.    
8290: 20 20 7d 0a 23 69 66 20 53 51 4c 49 54 45 5f 55    }.#if SQLITE_U
82a0: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
82b0: 4f 4e 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  ON.      if( db-
82c0: 3e 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 3d  >auth.authLevel=
82d0: 3d 55 41 55 54 48 5f 55 73 65 72 20 29 7b 0a 20  =UAUTH_User ){. 
82e0: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
82f0: 20 61 6c 6c 6f 77 20 6e 6f 6e 2d 61 64 6d 69 6e   allow non-admin
8300: 20 75 73 65 72 73 20 74 6f 20 6d 6f 64 69 66 79   users to modify
8310: 20 74 68 65 20 73 63 68 65 6d 61 20 61 72 62 69   the schema arbi
8320: 74 72 61 72 69 6c 79 20 2a 2f 0a 20 20 20 20 20  trarily */.     
8330: 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c     mask &= ~(SQL
8340: 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 29  ITE_WriteSchema)
8350: 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
8360: 0a 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ..      if( sqli
8370: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
8380: 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20  ight, 0) ){.    
8390: 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
83a0: 20 6d 61 73 6b 3b 0a 20 20 20 20 20 20 7d 65 6c   mask;.      }el
83b0: 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  se{.        db->
83c0: 66 6c 61 67 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a  flags &= ~mask;.
83d0: 20 20 20 20 20 20 20 20 69 66 28 20 6d 61 73 6b          if( mask
83e0: 3d 3d 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  ==SQLITE_DeferFK
83f0: 73 20 29 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s ) db->nDeferre
8400: 64 49 6d 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20 20  dImmCons = 0;.  
8410: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
8420: 4d 61 6e 79 20 6f 66 20 74 68 65 20 66 6c 61 67  Many of the flag
8430: 2d 70 72 61 67 6d 61 73 20 6d 6f 64 69 66 79 20  -pragmas modify 
8440: 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
8450: 65 64 20 62 79 20 74 68 65 20 53 51 4c 20 0a 20  ed by the SQL . 
8460: 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 72       ** compiler
8470: 20 28 65 67 2e 20 63 6f 75 6e 74 5f 63 68 61 6e   (eg. count_chan
8480: 67 65 73 29 2e 20 53 6f 20 61 64 64 20 61 6e 20  ges). So add an 
8490: 6f 70 63 6f 64 65 20 74 6f 20 65 78 70 69 72 65  opcode to expire
84a0: 20 61 6c 6c 0a 20 20 20 20 20 20 2a 2a 20 63 6f   all.      ** co
84b0: 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65  mpiled SQL state
84c0: 6d 65 6e 74 73 20 61 66 74 65 72 20 6d 6f 64 69  ments after modi
84d0: 66 79 69 6e 67 20 61 20 70 72 61 67 6d 61 20 76  fying a pragma v
84e0: 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  alue..      */. 
84f0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8500: 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f 45 78 70  AddOp0(v, OP_Exp
8510: 69 72 65 29 3b 0a 20 20 20 20 20 20 73 65 74 41  ire);.      setA
8520: 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 64 62 29  llPagerFlags(db)
8530: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  ;.    }.    brea
8540: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  k;.  }.#endif /*
8550: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41   SQLITE_OMIT_FLA
8560: 47 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  G_PRAGMAS */..#i
8570: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8580: 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53  T_SCHEMA_PRAGMAS
8590: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
85a0: 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 3c  GMA table_info(<
85b0: 74 61 62 6c 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a  table>).  **.  *
85c0: 2a 20 52 65 74 75 72 6e 20 61 20 73 69 6e 67 6c  * Return a singl
85d0: 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68 20 63  e row for each c
85e0: 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 61 6d  olumn of the nam
85f0: 65 64 20 74 61 62 6c 65 2e 20 54 68 65 20 63 6f  ed table. The co
8600: 6c 75 6d 6e 73 20 6f 66 0a 20 20 2a 2a 20 74 68  lumns of.  ** th
8610: 65 20 72 65 74 75 72 6e 65 64 20 64 61 74 61 20  e returned data 
8620: 73 65 74 20 61 72 65 3a 0a 20 20 2a 2a 0a 20 20  set are:.  **.  
8630: 2a 2a 20 63 69 64 3a 20 20 20 20 20 20 20 20 43  ** cid:        C
8640: 6f 6c 75 6d 6e 20 69 64 20 28 6e 75 6d 62 65 72  olumn id (number
8650: 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  ed from left to 
8660: 72 69 67 68 74 2c 20 73 74 61 72 74 69 6e 67 20  right, starting 
8670: 61 74 20 30 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a  at 0).  ** name:
8680: 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 6e 61         Column na
8690: 6d 65 0a 20 20 2a 2a 20 74 79 70 65 3a 20 20 20  me.  ** type:   
86a0: 20 20 20 20 43 6f 6c 75 6d 6e 20 64 65 63 6c 61      Column decla
86b0: 72 61 74 69 6f 6e 20 74 79 70 65 2e 0a 20 20 2a  ration type..  *
86c0: 2a 20 6e 6f 74 6e 75 6c 6c 3a 20 20 20 20 54 72  * notnull:    Tr
86d0: 75 65 20 69 66 20 27 4e 4f 54 20 4e 55 4c 4c 27  ue if 'NOT NULL'
86e0: 20 69 73 20 70 61 72 74 20 6f 66 20 63 6f 6c 75   is part of colu
86f0: 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 0a 20  mn declaration. 
8700: 20 2a 2a 20 64 66 6c 74 5f 76 61 6c 75 65 3a 20   ** dflt_value: 
8710: 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  The default valu
8720: 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  e for the column
8730: 2c 20 69 66 20 61 6e 79 2e 0a 20 20 2a 2f 0a 20  , if any..  */. 
8740: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 41   case PragTyp_TA
8750: 42 4c 45 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52  BLE_INFO: if( zR
8760: 69 67 68 74 20 29 7b 0a 20 20 20 20 54 61 62 6c  ight ){.    Tabl
8770: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61  e *pTab;.    pTa
8780: 62 20 3d 20 73 71 6c 69 74 65 33 4c 6f 63 61 74  b = sqlite3Locat
8790: 65 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 4c  eTable(pParse, L
87a0: 4f 43 41 54 45 5f 4e 4f 45 52 52 2c 20 7a 52 69  OCATE_NOERR, zRi
87b0: 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69  ght, zDb);.    i
87c0: 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20  f( pTab ){.     
87d0: 20 69 6e 74 20 69 2c 20 6b 3b 0a 20 20 20 20 20   int i, k;.     
87e0: 20 69 6e 74 20 6e 48 69 64 64 65 6e 20 3d 20 30   int nHidden = 0
87f0: 3b 0a 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 2a  ;.      Column *
8800: 70 43 6f 6c 3b 0a 20 20 20 20 20 20 49 6e 64 65  pCol;.      Inde
8810: 78 20 2a 70 50 6b 20 3d 20 73 71 6c 69 74 65 33  x *pPk = sqlite3
8820: 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
8830: 70 54 61 62 29 3b 0a 20 20 20 20 20 20 70 50 61  pTab);.      pPa
8840: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20  rse->nMem = 6;. 
8850: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65       sqlite3Code
8860: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
8870: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  rse, iDb);.     
8880: 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
8890: 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73  olumnNames(pPars
88a0: 65 2c 20 70 54 61 62 29 3b 0a 20 20 20 20 20 20  e, pTab);.      
88b0: 66 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d 70 54  for(i=0, pCol=pT
88c0: 61 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54 61 62  ab->aCol; i<pTab
88d0: 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43 6f  ->nCol; i++, pCo
88e0: 6c 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66  l++){.        if
88f0: 28 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  ( IsHiddenColumn
8900: 28 70 43 6f 6c 29 20 29 7b 0a 20 20 20 20 20 20  (pCol) ){.      
8910: 20 20 20 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a 20      nHidden++;. 
8920: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
8930: 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  e;.        }.   
8940: 20 20 20 20 20 69 66 28 20 28 70 43 6f 6c 2d 3e       if( (pCol->
8950: 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
8960: 41 47 5f 50 52 49 4d 4b 45 59 29 3d 3d 30 20 29  AG_PRIMKEY)==0 )
8970: 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20  {.          k = 
8980: 30 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  0;.        }else
8990: 20 69 66 28 20 70 50 6b 3d 3d 30 20 29 7b 0a 20   if( pPk==0 ){. 
89a0: 20 20 20 20 20 20 20 20 20 6b 20 3d 20 31 3b 0a           k = 1;.
89b0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
89c0: 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b 3d 31           for(k=1
89d0: 3b 20 6b 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c 20  ; k<=pTab->nCol 
89e0: 26 26 20 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d 6e  && pPk->aiColumn
89f0: 5b 6b 2d 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b 7d  [k-1]!=i; k++){}
8a00: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
8a10: 20 20 20 61 73 73 65 72 74 28 20 70 43 6f 6c 2d     assert( pCol-
8a20: 3e 70 44 66 6c 74 3d 3d 30 20 7c 7c 20 70 43 6f  >pDflt==0 || pCo
8a30: 6c 2d 3e 70 44 66 6c 74 2d 3e 6f 70 3d 3d 54 4b  l->pDflt->op==TK
8a40: 5f 53 50 41 4e 20 29 3b 0a 20 20 20 20 20 20 20  _SPAN );.       
8a50: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74   sqlite3VdbeMult
8a60: 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69 73 73  iLoad(v, 1, "iss
8a70: 69 73 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20  isi",.          
8a80: 20 20 20 20 20 69 2d 6e 48 69 64 64 65 6e 2c 0a       i-nHidden,.
8a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
8aa0: 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20  Col->zName,.    
8ab0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
8ac0: 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28 70 43 6f  e3ColumnType(pCo
8ad0: 6c 2c 22 22 29 2c 0a 20 20 20 20 20 20 20 20 20  l,""),.         
8ae0: 20 20 20 20 20 20 70 43 6f 6c 2d 3e 6e 6f 74 4e        pCol->notN
8af0: 75 6c 6c 20 3f 20 31 20 3a 20 30 2c 0a 20 20 20  ull ? 1 : 0,.   
8b00: 20 20 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c              pCol
8b10: 2d 3e 70 44 66 6c 74 20 3f 20 70 43 6f 6c 2d 3e  ->pDflt ? pCol->
8b20: 70 44 66 6c 74 2d 3e 75 2e 7a 54 6f 6b 65 6e 20  pDflt->u.zToken 
8b30: 3a 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20  : 0,.           
8b40: 20 20 20 20 6b 29 3b 0a 20 20 20 20 20 20 20 20      k);.        
8b50: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
8b60: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
8b70: 77 2c 20 31 2c 20 36 29 3b 0a 20 20 20 20 20 20  w, 1, 6);.      
8b80: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
8b90: 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61  eak;..  case Pra
8ba0: 67 54 79 70 5f 53 54 41 54 53 3a 20 7b 0a 20 20  gTyp_STATS: {.  
8bb0: 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20    Index *pIdx;. 
8bc0: 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 69 3b 0a     HashElem *i;.
8bd0: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
8be0: 20 3d 20 34 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 4;.    sqlite
8bf0: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
8c00: 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a  a(pParse, iDb);.
8c10: 20 20 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65      for(i=sqlite
8c20: 48 61 73 68 46 69 72 73 74 28 26 70 44 62 2d 3e  HashFirst(&pDb->
8c30: 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68  pSchema->tblHash
8c40: 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65 48 61  ); i; i=sqliteHa
8c50: 73 68 4e 65 78 74 28 69 29 29 7b 0a 20 20 20 20  shNext(i)){.    
8c60: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20    Table *pTab = 
8c70: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 69  sqliteHashData(i
8c80: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
8c90: 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c  VdbeMultiLoad(v,
8ca0: 20 31 2c 20 22 73 73 69 69 22 2c 0a 20 20 20 20   1, "ssii",.    
8cb0: 20 20 20 20 20 20 20 70 54 61 62 2d 3e 7a 4e 61         pTab->zNa
8cc0: 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 30  me,.           0
8cd0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 54 61  ,.           pTa
8ce0: 62 2d 3e 73 7a 54 61 62 52 6f 77 2c 0a 20 20 20  b->szTabRow,.   
8cf0: 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e 6e 52          pTab->nR
8d00: 6f 77 4c 6f 67 45 73 74 29 3b 0a 20 20 20 20 20  owLogEst);.     
8d10: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
8d20: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
8d30: 6f 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20 20  ow, 1, 4);.     
8d40: 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e   for(pIdx=pTab->
8d50: 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
8d60: 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b  dx=pIdx->pNext){
8d70: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
8d80: 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c  VdbeMultiLoad(v,
8d90: 20 32 2c 20 22 73 69 69 22 2c 0a 20 20 20 20 20   2, "sii",.     
8da0: 20 20 20 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d        pIdx->zNam
8db0: 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 49  e,.           pI
8dc0: 64 78 2d 3e 73 7a 49 64 78 52 6f 77 2c 0a 20 20  dx->szIdxRow,.  
8dd0: 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 61           pIdx->a
8de0: 69 52 6f 77 4c 6f 67 45 73 74 5b 30 5d 29 3b 0a  iRowLogEst[0]);.
8df0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
8e00: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
8e10: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29  ResultRow, 1, 4)
8e20: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
8e30: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
8e40: 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44  case PragTyp_IND
8e50: 45 58 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69  EX_INFO: if( zRi
8e60: 67 68 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78  ght ){.    Index
8e70: 20 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c   *pIdx;.    Tabl
8e80: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 49 64  e *pTab;.    pId
8e90: 78 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49  x = sqlite3FindI
8ea0: 6e 64 65 78 28 64 62 2c 20 7a 52 69 67 68 74 2c  ndex(db, zRight,
8eb0: 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70   zDb);.    if( p
8ec0: 49 64 78 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  Idx ){.      int
8ed0: 20 69 3b 0a 20 20 20 20 20 20 69 6e 74 20 6d 78   i;.      int mx
8ee0: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50 72 61  ;.      if( pPra
8ef0: 67 6d 61 2d 3e 69 41 72 67 20 29 7b 0a 20 20 20  gma->iArg ){.   
8f00: 20 20 20 20 20 2f 2a 20 50 52 41 47 4d 41 20 69       /* PRAGMA i
8f10: 6e 64 65 78 5f 78 69 6e 66 6f 20 28 6e 65 77 65  ndex_xinfo (newe
8f20: 72 20 76 65 72 73 69 6f 6e 20 77 69 74 68 20 6d  r version with m
8f30: 6f 72 65 20 72 6f 77 73 20 61 6e 64 20 63 6f 6c  ore rows and col
8f40: 75 6d 6e 73 29 20 2a 2f 0a 20 20 20 20 20 20 20  umns) */.       
8f50: 20 6d 78 20 3d 20 70 49 64 78 2d 3e 6e 43 6f 6c   mx = pIdx->nCol
8f60: 75 6d 6e 3b 0a 20 20 20 20 20 20 20 20 70 50 61  umn;.        pPa
8f70: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20  rse->nMem = 6;. 
8f80: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
8f90: 20 20 20 20 2f 2a 20 50 52 41 47 4d 41 20 69 6e      /* PRAGMA in
8fa0: 64 65 78 5f 69 6e 66 6f 20 28 6c 65 67 61 63 79  dex_info (legacy
8fb0: 20 76 65 72 73 69 6f 6e 29 20 2a 2f 0a 20 20 20   version) */.   
8fc0: 20 20 20 20 20 6d 78 20 3d 20 70 49 64 78 2d 3e       mx = pIdx->
8fd0: 6e 4b 65 79 43 6f 6c 3b 0a 20 20 20 20 20 20 20  nKeyCol;.       
8fe0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
8ff0: 33 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  3;.      }.     
9000: 20 70 54 61 62 20 3d 20 70 49 64 78 2d 3e 70 54   pTab = pIdx->pT
9010: 61 62 6c 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  able;.      sqli
9020: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
9030: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29  ema(pParse, iDb)
9040: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
9050: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3c 3d 70 50  pParse->nMem<=pP
9060: 72 61 67 6d 61 2d 3e 6e 50 72 61 67 43 4e 61 6d  ragma->nPragCNam
9070: 65 20 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  e );.      for(i
9080: 3d 30 3b 20 69 3c 6d 78 3b 20 69 2b 2b 29 7b 0a  =0; i<mx; i++){.
9090: 20 20 20 20 20 20 20 20 69 31 36 20 63 6e 75 6d          i16 cnum
90a0: 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d   = pIdx->aiColum
90b0: 6e 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 73 71  n[i];.        sq
90c0: 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f  lite3VdbeMultiLo
90d0: 61 64 28 76 2c 20 31 2c 20 22 69 69 73 22 2c 20  ad(v, 1, "iis", 
90e0: 69 2c 20 63 6e 75 6d 2c 0a 20 20 20 20 20 20 20  i, cnum,.       
90f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9100: 20 20 20 20 20 20 63 6e 75 6d 3c 30 20 3f 20 30        cnum<0 ? 0
9110: 20 3a 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e   : pTab->aCol[cn
9120: 75 6d 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  um].zName);.    
9130: 20 20 20 20 69 66 28 20 70 50 72 61 67 6d 61 2d      if( pPragma-
9140: 3e 69 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20  >iArg ){.       
9150: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75     sqlite3VdbeMu
9160: 6c 74 69 4c 6f 61 64 28 76 2c 20 34 2c 20 22 69  ltiLoad(v, 4, "i
9170: 73 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  si",.           
9180: 20 70 49 64 78 2d 3e 61 53 6f 72 74 4f 72 64 65   pIdx->aSortOrde
9190: 72 5b 69 5d 2c 0a 20 20 20 20 20 20 20 20 20 20  r[i],.          
91a0: 20 20 70 49 64 78 2d 3e 61 7a 43 6f 6c 6c 5b 69    pIdx->azColl[i
91b0: 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ],.            i
91c0: 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b  <pIdx->nKeyCol);
91d0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
91e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
91f0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
9200: 74 52 6f 77 2c 20 31 2c 20 70 50 61 72 73 65 2d  tRow, 1, pParse-
9210: 3e 6e 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a  >nMem);.      }.
9220: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
9230: 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54  k;..  case PragT
9240: 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54 3a 20 69  yp_INDEX_LIST: i
9250: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
9260: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20   Index *pIdx;.  
9270: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
9280: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 54     int i;.    pT
9290: 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  ab = sqlite3Find
92a0: 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74  Table(db, zRight
92b0: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20  , zDb);.    if( 
92c0: 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 70 50  pTab ){.      pP
92d0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 35 3b 0a  arse->nMem = 5;.
92e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
92f0: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
9300: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
9310: 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d    for(pIdx=pTab-
9320: 3e 70 49 6e 64 65 78 2c 20 69 3d 30 3b 20 70 49  >pIndex, i=0; pI
9330: 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
9340: 4e 65 78 74 2c 20 69 2b 2b 29 7b 0a 20 20 20 20  Next, i++){.    
9350: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
9360: 61 7a 4f 72 69 67 69 6e 5b 5d 20 3d 20 7b 20 22  azOrigin[] = { "
9370: 63 22 2c 20 22 75 22 2c 20 22 70 6b 22 20 7d 3b  c", "u", "pk" };
9380: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9390: 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c  VdbeMultiLoad(v,
93a0: 20 31 2c 20 22 69 73 69 73 69 22 2c 0a 20 20 20   1, "isisi",.   
93b0: 20 20 20 20 20 20 20 20 69 2c 0a 20 20 20 20 20          i,.     
93c0: 20 20 20 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d        pIdx->zNam
93d0: 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 49 73  e,.           Is
93e0: 55 6e 69 71 75 65 49 6e 64 65 78 28 70 49 64 78  UniqueIndex(pIdx
93f0: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 61 7a  ),.           az
9400: 4f 72 69 67 69 6e 5b 70 49 64 78 2d 3e 69 64 78  Origin[pIdx->idx
9410: 54 79 70 65 5d 2c 0a 20 20 20 20 20 20 20 20 20  Type],.         
9420: 20 20 70 49 64 78 2d 3e 70 50 61 72 74 49 64 78    pIdx->pPartIdx
9430: 57 68 65 72 65 21 3d 30 29 3b 0a 20 20 20 20 20  Where!=0);.     
9440: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9450: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
9460: 74 52 6f 77 2c 20 31 2c 20 35 29 3b 0a 20 20 20  tRow, 1, 5);.   
9470: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
9480: 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20   break;..  case 
9490: 50 72 61 67 54 79 70 5f 44 41 54 41 42 41 53 45  PragTyp_DATABASE
94a0: 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20 69 6e 74  _LIST: {.    int
94b0: 20 69 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e   i;.    pParse->
94c0: 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 66 6f  nMem = 3;.    fo
94d0: 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
94e0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66  ; i++){.      if
94f0: 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  ( db->aDb[i].pBt
9500: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
9510: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
9520: 2d 3e 61 44 62 5b 69 5d 2e 7a 44 62 53 4e 61 6d  ->aDb[i].zDbSNam
9530: 65 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 73 71  e!=0 );.      sq
9540: 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f  lite3VdbeMultiLo
9550: 61 64 28 76 2c 20 31 2c 20 22 69 73 73 22 2c 0a  ad(v, 1, "iss",.
9560: 20 20 20 20 20 20 20 20 20 69 2c 0a 20 20 20 20           i,.    
9570: 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 5d 2e       db->aDb[i].
9580: 7a 44 62 53 4e 61 6d 65 2c 0a 20 20 20 20 20 20  zDbSName,.      
9590: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47     sqlite3BtreeG
95a0: 65 74 46 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61  etFilename(db->a
95b0: 44 62 5b 69 5d 2e 70 42 74 29 29 3b 0a 20 20 20  Db[i].pBt));.   
95c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
95d0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
95e0: 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20  tRow, 1, 3);.   
95f0: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
9600: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
9610: 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54 3a 20  COLLATION_LIST: 
9620: 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b  {.    int i = 0;
9630: 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 70  .    HashElem *p
9640: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
9650: 65 6d 20 3d 20 32 3b 0a 20 20 20 20 66 6f 72 28  em = 2;.    for(
9660: 70 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  p=sqliteHashFirs
9670: 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29  t(&db->aCollSeq)
9680: 3b 20 70 3b 20 70 3d 73 71 6c 69 74 65 48 61 73  ; p; p=sqliteHas
9690: 68 4e 65 78 74 28 70 29 29 7b 0a 20 20 20 20 20  hNext(p)){.     
96a0: 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20   CollSeq *pColl 
96b0: 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c  = (CollSeq *)sql
96c0: 69 74 65 48 61 73 68 44 61 74 61 28 70 29 3b 0a  iteHashData(p);.
96d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
96e0: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c  eMultiLoad(v, 1,
96f0: 20 22 69 73 22 2c 20 69 2b 2b 2c 20 70 43 6f 6c   "is", i++, pCol
9700: 6c 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  l->zName);.     
9710: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9720: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
9730: 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d  ow, 1, 2);.    }
9740: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
9750: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
9760: 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d  MIT_SCHEMA_PRAGM
9770: 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  AS */..#ifndef S
9780: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
9790: 47 4e 5f 4b 45 59 0a 20 20 63 61 73 65 20 50 72  GN_KEY.  case Pr
97a0: 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45  agTyp_FOREIGN_KE
97b0: 59 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67  Y_LIST: if( zRig
97c0: 68 74 20 29 7b 0a 20 20 20 20 46 4b 65 79 20 2a  ht ){.    FKey *
97d0: 70 46 4b 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  pFK;.    Table *
97e0: 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d  pTab;.    pTab =
97f0: 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c   sqlite3FindTabl
9800: 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  e(db, zRight, zD
9810: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62  b);.    if( pTab
9820: 20 29 7b 0a 20 20 20 20 20 20 70 46 4b 20 3d 20   ){.      pFK = 
9830: 70 54 61 62 2d 3e 70 46 4b 65 79 3b 0a 20 20 20  pTab->pFKey;.   
9840: 20 20 20 69 66 28 20 70 46 4b 20 29 7b 0a 20 20     if( pFK ){.  
9850: 20 20 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b        int i = 0;
9860: 20 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65   .        pParse
9870: 2d 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20 20 20  ->nMem = 8;.    
9880: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
9890: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
98a0: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  se, iDb);.      
98b0: 20 20 77 68 69 6c 65 28 70 46 4b 29 7b 0a 20 20    while(pFK){.  
98c0: 20 20 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20          int j;. 
98d0: 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30           for(j=0
98e0: 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a  ; j<pFK->nCol; j
98f0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
9900: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74   sqlite3VdbeMult
9910: 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69 69 73  iLoad(v, 1, "iis
9920: 73 73 73 73 73 22 2c 0a 20 20 20 20 20 20 20 20  sssss",.        
9930: 20 20 20 20 20 20 20 20 20 20 20 69 2c 0a 20 20             i,.  
9940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9950: 20 6a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   j,.            
9960: 20 20 20 20 20 20 20 70 46 4b 2d 3e 7a 54 6f 2c         pFK->zTo,
9970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9980: 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 70      pTab->aCol[p
9990: 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f  FK->aCol[j].iFro
99a0: 6d 5d 2e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20  m].zName,.      
99b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 46 4b               pFK
99c0: 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43 6f 6c 2c 0a  ->aCol[j].zCol,.
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99e0: 20 20 20 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46     actionName(pF
99f0: 4b 2d 3e 61 41 63 74 69 6f 6e 5b 31 5d 29 2c 20  K->aAction[1]), 
9a00: 20 2f 2a 20 4f 4e 20 55 50 44 41 54 45 20 2a 2f   /* ON UPDATE */
9a10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9a20: 20 20 20 20 61 63 74 69 6f 6e 4e 61 6d 65 28 70      actionName(p
9a30: 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 30 5d 29 2c  FK->aAction[0]),
9a40: 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 2a    /* ON DELETE *
9a50: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
9a60: 20 20 20 20 20 22 4e 4f 4e 45 22 29 3b 0a 20 20       "NONE");.  
9a70: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
9a80: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
9a90: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
9aa0: 38 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  8);.          }.
9ab0: 20 20 20 20 20 20 20 20 20 20 2b 2b 69 3b 0a 20            ++i;. 
9ac0: 20 20 20 20 20 20 20 20 20 70 46 4b 20 3d 20 70           pFK = p
9ad0: 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 3b 0a 20  FK->pNextFrom;. 
9ae0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
9af0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
9b00: 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64  ak;.#endif /* !d
9b10: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
9b20: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20  IT_FOREIGN_KEY) 
9b30: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
9b40: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
9b50: 4b 45 59 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  KEY.#ifndef SQLI
9b60: 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
9b70: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46    case PragTyp_F
9b80: 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48 45 43 4b  OREIGN_KEY_CHECK
9b90: 3a 20 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70 46  : {.    FKey *pF
9ba0: 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  K;             /
9bb0: 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  * A foreign key 
9bc0: 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20  constraint */.  
9bd0: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
9be0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 69 6c           /* Chil
9bf0: 64 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 20  d table contain 
9c00: 22 52 45 46 45 52 45 4e 43 45 53 22 20 6b 65 79  "REFERENCES" key
9c10: 77 6f 72 64 20 2a 2f 0a 20 20 20 20 54 61 62 6c  word */.    Tabl
9c20: 65 20 2a 70 50 61 72 65 6e 74 3b 20 20 20 20 20  e *pParent;     
9c30: 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 74 61 62     /* Parent tab
9c40: 6c 65 20 74 68 61 74 20 63 68 69 6c 64 20 70 6f  le that child po
9c50: 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20 20 20 49  ints to */.    I
9c60: 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20 20 20  ndex *pIdx;     
9c70: 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
9c80: 6e 20 74 68 65 20 70 61 72 65 6e 74 20 74 61 62  n the parent tab
9c90: 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b  le */.    int i;
9ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9cb0: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
9cc0: 3a 20 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 6e  :  Foreign key n
9cd0: 75 6d 62 65 72 20 66 6f 72 20 70 54 61 62 20 2a  umber for pTab *
9ce0: 2f 0a 20 20 20 20 69 6e 74 20 6a 3b 20 20 20 20  /.    int j;    
9cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9d00: 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 46  Loop counter:  F
9d10: 69 65 6c 64 20 6f 66 20 74 68 65 20 66 6f 72 65  ield of the fore
9d20: 69 67 6e 20 6b 65 79 20 2a 2f 0a 20 20 20 20 48  ign key */.    H
9d30: 61 73 68 45 6c 65 6d 20 2a 6b 3b 20 20 20 20 20  ashElem *k;     
9d40: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
9d50: 75 6e 74 65 72 3a 20 20 4e 65 78 74 20 74 61 62  unter:  Next tab
9d60: 6c 65 20 69 6e 20 73 63 68 65 6d 61 20 2a 2f 0a  le in schema */.
9d70: 20 20 20 20 69 6e 74 20 78 3b 20 20 20 20 20 20      int x;      
9d80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 72 65             /* re
9d90: 73 75 6c 74 20 76 61 72 69 61 62 6c 65 20 2a 2f  sult variable */
9da0: 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75  .    int regResu
9db0: 6c 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 33  lt;         /* 3
9dc0: 20 72 65 67 69 73 74 65 72 73 20 74 6f 20 68 6f   registers to ho
9dd0: 6c 64 20 61 20 72 65 73 75 6c 74 20 72 6f 77 20  ld a result row 
9de0: 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 4b 65  */.    int regKe
9df0: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  y;            /*
9e00: 20 52 65 67 69 73 74 65 72 20 74 6f 20 68 6f 6c   Register to hol
9e10: 64 20 6b 65 79 20 66 6f 72 20 63 68 65 63 6b 69  d key for checki
9e20: 6e 67 20 74 68 65 20 46 4b 20 2a 2f 0a 20 20 20  ng the FK */.   
9e30: 20 69 6e 74 20 72 65 67 52 6f 77 3b 20 20 20 20   int regRow;    
9e40: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
9e50: 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61 20 72  ters to hold a r
9e60: 6f 77 20 66 72 6f 6d 20 70 54 61 62 20 2a 2f 0a  ow from pTab */.
9e70: 20 20 20 20 69 6e 74 20 61 64 64 72 54 6f 70 3b      int addrTop;
9e80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
9e90: 70 20 6f 66 20 61 20 6c 6f 6f 70 20 63 68 65 63  p of a loop chec
9ea0: 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b 65 79  king foreign key
9eb0: 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64  s */.    int add
9ec0: 72 4f 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  rOk;            
9ed0: 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 69 66 20  /* Jump here if 
9ee0: 74 68 65 20 6b 65 79 20 69 73 20 4f 4b 20 2a 2f  the key is OK */
9ef0: 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 73  .    int *aiCols
9f00: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63  ;           /* c
9f10: 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74 20 63  hild to parent c
9f20: 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e 67 20 2a 2f  olumn mapping */
9f30: 0a 0a 20 20 20 20 72 65 67 52 65 73 75 6c 74 20  ..    regResult 
9f40: 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2b 31  = pParse->nMem+1
9f50: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
9f60: 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20 72 65 67  em += 4;.    reg
9f70: 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  Key = ++pParse->
9f80: 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67 52 6f 77  nMem;.    regRow
9f90: 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65   = ++pParse->nMe
9fa0: 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f  m;.    sqlite3Co
9fb0: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
9fc0: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
9fd0: 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68 46   k = sqliteHashF
9fe0: 69 72 73 74 28 26 64 62 2d 3e 61 44 62 5b 69 44  irst(&db->aDb[iD
9ff0: 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48  b].pSchema->tblH
a000: 61 73 68 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  ash);.    while(
a010: 20 6b 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20   k ){.      if( 
a020: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
a030: 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33    pTab = sqlite3
a040: 4c 6f 63 61 74 65 54 61 62 6c 65 28 70 50 61 72  LocateTable(pPar
a050: 73 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c 20 7a  se, 0, zRight, z
a060: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d  Db);.        k =
a070: 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   0;.      }else{
a080: 0a 20 20 20 20 20 20 20 20 70 54 61 62 20 3d 20  .        pTab = 
a090: 28 54 61 62 6c 65 2a 29 73 71 6c 69 74 65 48 61  (Table*)sqliteHa
a0a0: 73 68 44 61 74 61 28 6b 29 3b 0a 20 20 20 20 20  shData(k);.     
a0b0: 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73     k = sqliteHas
a0c0: 68 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20 20 20  hNext(k);.      
a0d0: 7d 0a 20 20 20 20 20 20 69 66 28 20 70 54 61 62  }.      if( pTab
a0e0: 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70 46 4b  ==0 || pTab->pFK
a0f0: 65 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  ey==0 ) continue
a100: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54  ;.      sqlite3T
a110: 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c  ableLock(pParse,
a120: 20 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e 75 6d   iDb, pTab->tnum
a130: 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  , 0, pTab->zName
a140: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 54 61  );.      if( pTa
a150: 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e 70  b->nCol+regRow>p
a160: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20 70 50  Parse->nMem ) pP
a170: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54 61  arse->nMem = pTa
a180: 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52 6f 77  b->nCol + regRow
a190: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f  ;.      sqlite3O
a1a0: 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c  penTable(pParse,
a1b0: 20 30 2c 20 69 44 62 2c 20 70 54 61 62 2c 20 4f   0, iDb, pTab, O
a1c0: 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20  P_OpenRead);.   
a1d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f     sqlite3VdbeLo
a1e0: 61 64 53 74 72 69 6e 67 28 76 2c 20 72 65 67 52  adString(v, regR
a1f0: 65 73 75 6c 74 2c 20 70 54 61 62 2d 3e 7a 4e 61  esult, pTab->zNa
a200: 6d 65 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  me);.      for(i
a210: 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46  =1, pFK=pTab->pF
a220: 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70  Key; pFK; i++, p
a230: 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f  FK=pFK->pNextFro
a240: 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61 72  m){.        pPar
a250: 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  ent = sqlite3Fin
a260: 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e  dTable(db, pFK->
a270: 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20  zTo, zDb);.     
a280: 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 3d 3d     if( pParent==
a290: 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
a2a0: 20 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a        pIdx = 0;.
a2b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 54          sqlite3T
a2c0: 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c  ableLock(pParse,
a2d0: 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2d 3e 74   iDb, pParent->t
a2e0: 6e 75 6d 2c 20 30 2c 20 70 50 61 72 65 6e 74 2d  num, 0, pParent-
a2f0: 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20  >zName);.       
a300: 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f   x = sqlite3FkLo
a310: 63 61 74 65 49 6e 64 65 78 28 70 50 61 72 73 65  cateIndex(pParse
a320: 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20  , pParent, pFK, 
a330: 26 70 49 64 78 2c 20 30 29 3b 0a 20 20 20 20 20  &pIdx, 0);.     
a340: 20 20 20 69 66 28 20 78 3d 3d 30 20 29 7b 0a 20     if( x==0 ){. 
a350: 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49 64           if( pId
a360: 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  x==0 ){.        
a370: 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54      sqlite3OpenT
a380: 61 62 6c 65 28 70 50 61 72 73 65 2c 20 69 2c 20  able(pParse, i, 
a390: 69 44 62 2c 20 70 50 61 72 65 6e 74 2c 20 4f 50  iDb, pParent, OP
a3a0: 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20  _OpenRead);.    
a3b0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
a3c0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
a3d0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
a3e0: 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c 20 70 49  _OpenRead, i, pI
a3f0: 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62 29 3b 0a  dx->tnum, iDb);.
a400: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
a410: 74 65 33 56 64 62 65 53 65 74 50 34 4b 65 79 49  te3VdbeSetP4KeyI
a420: 6e 66 6f 28 70 50 61 72 73 65 2c 20 70 49 64 78  nfo(pParse, pIdx
a430: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
a440: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
a450: 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20          k = 0;. 
a460: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
a470: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
a480: 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  }.      assert( 
a490: 70 50 61 72 73 65 2d 3e 6e 45 72 72 3e 30 20 7c  pParse->nErr>0 |
a4a0: 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a 20 20 20 20  | pFK==0 );.    
a4b0: 20 20 69 66 28 20 70 46 4b 20 29 20 62 72 65 61    if( pFK ) brea
a4c0: 6b 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50 61  k;.      if( pPa
a4d0: 72 73 65 2d 3e 6e 54 61 62 3c 69 20 29 20 70 50  rse->nTab<i ) pP
a4e0: 61 72 73 65 2d 3e 6e 54 61 62 20 3d 20 69 3b 0a  arse->nTab = i;.
a4f0: 20 20 20 20 20 20 61 64 64 72 54 6f 70 20 3d 20        addrTop = 
a500: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
a510: 31 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20  1(v, OP_Rewind, 
a520: 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  0); VdbeCoverage
a530: 28 76 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  (v);.      for(i
a540: 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46  =1, pFK=pTab->pF
a550: 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70  Key; pFK; i++, p
a560: 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f  FK=pFK->pNextFro
a570: 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61 72  m){.        pPar
a580: 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  ent = sqlite3Fin
a590: 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e  dTable(db, pFK->
a5a0: 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20  zTo, zDb);.     
a5b0: 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20 20 20     pIdx = 0;.   
a5c0: 20 20 20 20 20 61 69 43 6f 6c 73 20 3d 20 30 3b       aiCols = 0;
a5d0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61  .        if( pPa
a5e0: 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20  rent ){.        
a5f0: 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c    x = sqlite3FkL
a600: 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61 72 73  ocateIndex(pPars
a610: 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c  e, pParent, pFK,
a620: 20 26 70 49 64 78 2c 20 26 61 69 43 6f 6c 73 29   &pIdx, &aiCols)
a630: 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  ;.          asse
a640: 72 74 28 20 78 3d 3d 30 20 29 3b 0a 20 20 20 20  rt( x==0 );.    
a650: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61 64      }.        ad
a660: 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56 64  drOk = sqlite3Vd
a670: 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a  beMakeLabel(v);.
a680: 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72          if( pPar
a690: 65 6e 74 20 26 26 20 70 49 64 78 3d 3d 30 20 29  ent && pIdx==0 )
a6a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  {.          int 
a6b0: 69 4b 65 79 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c  iKey = pFK->aCol
a6c0: 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20 20 20 20 20  [0].iFrom;.     
a6d0: 20 20 20 20 20 61 73 73 65 72 74 28 20 69 4b 65       assert( iKe
a6e0: 79 3e 3d 30 20 26 26 20 69 4b 65 79 3c 70 54 61  y>=0 && iKey<pTa
a6f0: 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20  b->nCol );.     
a700: 20 20 20 20 20 69 66 28 20 69 4b 65 79 21 3d 70       if( iKey!=p
a710: 54 61 62 2d 3e 69 50 4b 65 79 20 29 7b 0a 20 20  Tab->iPKey ){.  
a720: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
a730: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
a740: 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c 20 69 4b 65  P_Column, 0, iKe
a750: 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20  y, regRow);.    
a760: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 43          sqlite3C
a770: 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 76 2c 20  olumnDefault(v, 
a780: 70 54 61 62 2c 20 69 4b 65 79 2c 20 72 65 67 52  pTab, iKey, regR
a790: 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ow);.           
a7a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
a7b0: 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c  p2(v, OP_IsNull,
a7c0: 20 72 65 67 52 6f 77 2c 20 61 64 64 72 4f 6b 29   regRow, addrOk)
a7d0: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
a7e0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  );.          }el
a7f0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
a800: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
a810: 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30  2(v, OP_Rowid, 0
a820: 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20  , regRow);.     
a830: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
a840: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
a850: 70 33 28 76 2c 20 4f 50 5f 53 65 65 6b 52 6f 77  p3(v, OP_SeekRow
a860: 69 64 2c 20 69 2c 20 30 2c 20 72 65 67 52 6f 77  id, i, 0, regRow
a870: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
a880: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
a890: 6c 69 74 65 33 56 64 62 65 47 6f 74 6f 28 76 2c  lite3VdbeGoto(v,
a8a0: 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20   addrOk);.      
a8b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
a8c0: 75 6d 70 48 65 72 65 28 76 2c 20 73 71 6c 69 74  umpHere(v, sqlit
a8d0: 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64 64  e3VdbeCurrentAdd
a8e0: 72 28 76 29 2d 32 29 3b 0a 20 20 20 20 20 20 20  r(v)-2);.       
a8f0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
a900: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b    for(j=0; j<pFK
a910: 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20  ->nCol; j++){.  
a920: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
a930: 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
a940: 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70 54 61  mnOfTable(v, pTa
a950: 62 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20  b, 0,.          
a960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a970: 20 20 61 69 43 6f 6c 73 20 3f 20 61 69 43 6f 6c    aiCols ? aiCol
a980: 73 5b 6a 5d 20 3a 20 70 46 4b 2d 3e 61 43 6f 6c  s[j] : pFK->aCol
a990: 5b 6a 5d 2e 69 46 72 6f 6d 2c 20 72 65 67 52 6f  [j].iFrom, regRo
a9a0: 77 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20 20 20  w+j);.          
a9b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
a9c0: 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c  Op2(v, OP_IsNull
a9d0: 2c 20 72 65 67 52 6f 77 2b 6a 2c 20 61 64 64 72  , regRow+j, addr
a9e0: 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  Ok); VdbeCoverag
a9f0: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
aa00: 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  }.          if( 
aa10: 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20  pParent ){.     
aa20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
aa30: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 4d  beAddOp4(v, OP_M
aa40: 61 6b 65 52 65 63 6f 72 64 2c 20 72 65 67 52 6f  akeRecord, regRo
aa50: 77 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 2c 20 72 65  w, pFK->nCol, re
aa60: 67 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20  gKey,.          
aa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa80: 20 20 20 20 73 71 6c 69 74 65 33 49 6e 64 65 78      sqlite3Index
aa90: 41 66 66 69 6e 69 74 79 53 74 72 28 64 62 2c 70  AffinityStr(db,p
aaa0: 49 64 78 29 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 29  Idx), pFK->nCol)
aab0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
aac0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 49  lite3VdbeAddOp4I
aad0: 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20  nt(v, OP_Found, 
aae0: 69 2c 20 61 64 64 72 4f 6b 2c 20 72 65 67 4b 65  i, addrOk, regKe
aaf0: 79 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  y, 0);.         
ab00: 20 20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28     VdbeCoverage(
ab10: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  v);.          }.
ab20: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ab30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ab40: 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c  Op2(v, OP_Rowid,
ab50: 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2b 31 29   0, regResult+1)
ab60: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
ab70: 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76  3VdbeMultiLoad(v
ab80: 2c 20 72 65 67 52 65 73 75 6c 74 2b 32 2c 20 22  , regResult+2, "
ab90: 73 69 22 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 69  si", pFK->zTo, i
aba0: 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  -1);.        sql
abb0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
abc0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
abd0: 72 65 67 52 65 73 75 6c 74 2c 20 34 29 3b 0a 20  regResult, 4);. 
abe0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
abf0: 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76  beResolveLabel(v
ac00: 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20  , addrOk);.     
ac10: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
ac20: 28 64 62 2c 20 61 69 43 6f 6c 73 29 3b 0a 20 20  (db, aiCols);.  
ac30: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
ac40: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
ac50: 20 4f 50 5f 4e 65 78 74 2c 20 30 2c 20 61 64 64   OP_Next, 0, add
ac60: 72 54 6f 70 2b 31 29 3b 20 56 64 62 65 43 6f 76  rTop+1); VdbeCov
ac70: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
ac80: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
ac90: 65 72 65 28 76 2c 20 61 64 64 72 54 6f 70 29 3b  ere(v, addrTop);
aca0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
acb0: 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64  ak;.#endif /* !d
acc0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
acd0: 49 54 5f 54 52 49 47 47 45 52 29 20 2a 2f 0a 23  IT_TRIGGER) */.#
ace0: 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
acf0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
ad00: 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23  REIGN_KEY) */..#
ad10: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20  ifndef NDEBUG.  
ad20: 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41 52  case PragTyp_PAR
ad30: 53 45 52 5f 54 52 41 43 45 3a 20 7b 0a 20 20 20  SER_TRACE: {.   
ad40: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
ad50: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
ad60: 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68  GetBoolean(zRigh
ad70: 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20  t, 0) ){.       
ad80: 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
ad90: 61 63 65 28 73 74 64 6f 75 74 2c 20 22 70 61 72  ace(stdout, "par
ada0: 73 65 72 3a 20 22 29 3b 0a 20 20 20 20 20 20 7d  ser: ");.      }
adb0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
adc0: 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65  lite3ParserTrace
add0: 28 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a  (0, 0);.      }.
ade0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
adf0: 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20  k;.#endif..  /* 
ae00: 52 65 69 6e 73 74 61 6c 6c 20 74 68 65 20 4c 49  Reinstall the LI
ae10: 4b 45 20 61 6e 64 20 47 4c 4f 42 20 66 75 6e 63  KE and GLOB func
ae20: 74 69 6f 6e 73 2e 20 20 54 68 65 20 76 61 72 69  tions.  The vari
ae30: 61 6e 74 20 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a  ant of LIKE.  **
ae40: 20 75 73 65 64 20 77 69 6c 6c 20 62 65 20 63 61   used will be ca
ae50: 73 65 20 73 65 6e 73 69 74 69 76 65 20 6f 72 20  se sensitive or 
ae60: 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  not depending on
ae70: 20 74 68 65 20 52 48 53 2e 0a 20 20 2a 2f 0a 20   the RHS..  */. 
ae80: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 41   case PragTyp_CA
ae90: 53 45 5f 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b  SE_SENSITIVE_LIK
aea0: 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  E: {.    if( zRi
aeb0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
aec0: 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65  ite3RegisterLike
aed0: 46 75 6e 63 74 69 6f 6e 73 28 64 62 2c 20 73 71  Functions(db, sq
aee0: 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
aef0: 7a 52 69 67 68 74 2c 20 30 29 29 3b 0a 20 20 20  zRight, 0));.   
af00: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
af10: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
af20: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f  INTEGRITY_CHECK_
af30: 45 52 52 4f 52 5f 4d 41 58 0a 23 20 64 65 66 69  ERROR_MAX.# defi
af40: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52  ne SQLITE_INTEGR
af50: 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f  ITY_CHECK_ERROR_
af60: 4d 41 58 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a  MAX 100.#endif..
af70: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
af80: 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
af90: 45 43 4b 0a 20 20 2f 2a 20 50 72 61 67 6d 61 20  ECK.  /* Pragma 
afa0: 22 71 75 69 63 6b 5f 63 68 65 63 6b 22 20 69 73  "quick_check" is
afb0: 20 72 65 64 75 63 65 64 20 76 65 72 73 69 6f 6e   reduced version
afc0: 20 6f 66 20 0a 20 20 2a 2a 20 69 6e 74 65 67 72   of .  ** integr
afd0: 69 74 79 5f 63 68 65 63 6b 20 64 65 73 69 67 6e  ity_check design
afe0: 65 64 20 74 6f 20 64 65 74 65 63 74 20 6d 6f 73  ed to detect mos
aff0: 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  t database corru
b000: 70 74 69 6f 6e 0a 20 20 2a 2a 20 77 69 74 68 6f  ption.  ** witho
b010: 75 74 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 6f  ut most of the o
b020: 76 65 72 68 65 61 64 20 6f 66 20 61 20 66 75 6c  verhead of a ful
b030: 6c 20 69 6e 74 65 67 72 69 74 79 2d 63 68 65 63  l integrity-chec
b040: 6b 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  k..  */.  case P
b050: 72 61 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59  ragTyp_INTEGRITY
b060: 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 69 6e  _CHECK: {.    in
b070: 74 20 69 2c 20 6a 2c 20 61 64 64 72 2c 20 6d 78  t i, j, addr, mx
b080: 45 72 72 3b 0a 0a 20 20 20 20 69 6e 74 20 69 73  Err;..    int is
b090: 51 75 69 63 6b 20 3d 20 28 73 71 6c 69 74 65 33  Quick = (sqlite3
b0a0: 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d  Tolower(zLeft[0]
b0b0: 29 3d 3d 27 71 27 29 3b 0a 0a 20 20 20 20 2f 2a  )=='q');..    /*
b0c0: 20 49 66 20 74 68 65 20 50 52 41 47 4d 41 20 63   If the PRAGMA c
b0d0: 6f 6d 6d 61 6e 64 20 77 61 73 20 6f 66 20 74 68  ommand was of th
b0e0: 65 20 66 6f 72 6d 20 22 50 52 41 47 4d 41 20 3c  e form "PRAGMA <
b0f0: 64 62 3e 2e 69 6e 74 65 67 72 69 74 79 5f 63 68  db>.integrity_ch
b100: 65 63 6b 22 2c 0a 20 20 20 20 2a 2a 20 74 68 65  eck",.    ** the
b110: 6e 20 69 44 62 20 69 73 20 73 65 74 20 74 6f 20  n iDb is set to 
b120: 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
b130: 20 64 61 74 61 62 61 73 65 20 69 64 65 6e 74 69   database identi
b140: 66 69 65 64 20 62 79 20 3c 64 62 3e 2e 0a 20 20  fied by <db>..  
b150: 20 20 2a 2a 20 49 6e 20 74 68 69 73 20 63 61 73    ** In this cas
b160: 65 2c 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  e, the integrity
b170: 20 6f 66 20 64 61 74 61 62 61 73 65 20 69 44 62   of database iDb
b180: 20 6f 6e 6c 79 20 69 73 20 76 65 72 69 66 69 65   only is verifie
b190: 64 20 62 79 0a 20 20 20 20 2a 2a 20 74 68 65 20  d by.    ** the 
b1a0: 56 44 42 45 20 63 72 65 61 74 65 64 20 62 65 6c  VDBE created bel
b1b0: 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  ow..    **.    *
b1c0: 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  * Otherwise, if 
b1d0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20  the command was 
b1e0: 73 69 6d 70 6c 79 20 22 50 52 41 47 4d 41 20 69  simply "PRAGMA i
b1f0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 20  ntegrity_check" 
b200: 28 6f 72 0a 20 20 20 20 2a 2a 20 22 50 52 41 47  (or.    ** "PRAG
b210: 4d 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 22 29  MA quick_check")
b220: 2c 20 74 68 65 6e 20 69 44 62 20 69 73 20 73 65  , then iDb is se
b230: 74 20 74 6f 20 30 2e 20 49 6e 20 74 68 69 73 20  t to 0. In this 
b240: 63 61 73 65 2c 20 73 65 74 20 69 44 62 0a 20 20  case, set iDb.  
b250: 20 20 2a 2a 20 74 6f 20 2d 31 20 68 65 72 65 2c    ** to -1 here,
b260: 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61   to indicate tha
b270: 74 20 74 68 65 20 56 44 42 45 20 73 68 6f 75 6c  t the VDBE shoul
b280: 64 20 76 65 72 69 66 79 20 74 68 65 20 69 6e 74  d verify the int
b290: 65 67 72 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66  egrity.    ** of
b2a0: 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
b2b0: 74 61 62 61 73 65 73 2e 20 20 2a 2f 0a 20 20 20  tabases.  */.   
b2c0: 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
b2d0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
b2e0: 44 62 3d 3d 30 20 7c 7c 20 70 49 64 32 2d 3e 7a  Db==0 || pId2->z
b2f0: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 32   );.    if( pId2
b300: 2d 3e 7a 3d 3d 30 20 29 20 69 44 62 20 3d 20 2d  ->z==0 ) iDb = -
b310: 31 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69  1;..    /* Initi
b320: 61 6c 69 7a 65 20 74 68 65 20 56 44 42 45 20 70  alize the VDBE p
b330: 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 20 20 70 50  rogram */.    pP
b340: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a  arse->nMem = 6;.
b350: 0a 20 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20  .    /* Set the 
b360: 6d 61 78 69 6d 75 6d 20 65 72 72 6f 72 20 63 6f  maximum error co
b370: 75 6e 74 20 2a 2f 0a 20 20 20 20 6d 78 45 72 72  unt */.    mxErr
b380: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52   = SQLITE_INTEGR
b390: 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f  ITY_CHECK_ERROR_
b3a0: 4d 41 58 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  MAX;.    if( zRi
b3b0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
b3c0: 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69  ite3GetInt32(zRi
b3d0: 67 68 74 2c 20 26 6d 78 45 72 72 29 3b 0a 20 20  ght, &mxErr);.  
b3e0: 20 20 20 20 69 66 28 20 6d 78 45 72 72 3c 3d 30      if( mxErr<=0
b3f0: 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 78 45 72   ){.        mxEr
b400: 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47  r = SQLITE_INTEG
b410: 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52  RITY_CHECK_ERROR
b420: 5f 4d 41 58 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _MAX;.      }.  
b430: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
b440: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
b450: 49 6e 74 65 67 65 72 2c 20 6d 78 45 72 72 2c 20  Integer, mxErr, 
b460: 31 29 3b 20 20 2f 2a 20 72 65 67 5b 31 5d 20 68  1);  /* reg[1] h
b470: 6f 6c 64 73 20 65 72 72 6f 72 73 20 6c 65 66 74  olds errors left
b480: 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 61   */..    /* Do a
b490: 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  n integrity chec
b4a0: 6b 20 6f 6e 20 65 61 63 68 20 64 61 74 61 62 61  k on each databa
b4b0: 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 66  se file */.    f
b4c0: 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
b4d0: 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 48  b; i++){.      H
b4e0: 61 73 68 45 6c 65 6d 20 2a 78 3b 0a 20 20 20 20  ashElem *x;.    
b4f0: 20 20 48 61 73 68 20 2a 70 54 62 6c 73 3b 0a 20    Hash *pTbls;. 
b500: 20 20 20 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b       int *aRoot;
b510: 0a 20 20 20 20 20 20 69 6e 74 20 63 6e 74 20 3d  .      int cnt =
b520: 20 30 3b 0a 20 20 20 20 20 20 69 6e 74 20 6d 78   0;.      int mx
b530: 49 64 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 69  Idx = 0;.      i
b540: 6e 74 20 6e 49 64 78 3b 0a 0a 20 20 20 20 20 20  nt nIdx;..      
b550: 69 66 28 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  if( OMIT_TEMPDB 
b560: 26 26 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e  && i==1 ) contin
b570: 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20 69 44  ue;.      if( iD
b580: 62 3e 3d 30 20 26 26 20 69 21 3d 69 44 62 20 29  b>=0 && i!=iDb )
b590: 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20   continue;..    
b5a0: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
b5b0: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
b5c0: 2c 20 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72  , i);.      addr
b5d0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
b5e0: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp1(v, OP_IfPos
b5f0: 2c 20 31 29 3b 20 2f 2a 20 48 61 6c 74 20 69 66  , 1); /* Halt if
b600: 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a   out of errors *
b610: 2f 0a 20 20 20 20 20 20 56 64 62 65 43 6f 76 65  /.      VdbeCove
b620: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73  rage(v);.      s
b630: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
b640: 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20  (v, OP_Halt, 0, 
b650: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
b660: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
b670: 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f   addr);..      /
b680: 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74  * Do an integrit
b690: 79 20 63 68 65 63 6b 20 6f 66 20 74 68 65 20 42  y check of the B
b6a0: 2d 54 72 65 65 0a 20 20 20 20 20 20 2a 2a 0a 20  -Tree.      **. 
b6b0: 20 20 20 20 20 2a 2a 20 42 65 67 69 6e 20 62 79       ** Begin by
b6c0: 20 66 69 6e 64 69 6e 67 20 74 68 65 20 72 6f 6f   finding the roo
b6d0: 74 20 70 61 67 65 73 20 6e 75 6d 62 65 72 73 0a  t pages numbers.
b6e0: 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 61 6c 6c        ** for all
b6f0: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69   tables and indi
b700: 63 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  ces in the datab
b710: 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ase..      */.  
b720: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
b730: 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
b740: 6c 64 28 64 62 2c 20 69 2c 20 30 29 20 29 3b 0a  ld(db, i, 0) );.
b750: 20 20 20 20 20 20 70 54 62 6c 73 20 3d 20 26 64        pTbls = &d
b760: 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d  b->aDb[i].pSchem
b770: 61 2d 3e 74 62 6c 48 61 73 68 3b 0a 20 20 20 20  a->tblHash;.    
b780: 20 20 66 6f 72 28 63 6e 74 3d 30 2c 20 78 3d 73    for(cnt=0, x=s
b790: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 70  qliteHashFirst(p
b7a0: 54 62 6c 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69  Tbls); x; x=sqli
b7b0: 74 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a  teHashNext(x)){.
b7c0: 20 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70          Table *p
b7d0: 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68  Tab = sqliteHash
b7e0: 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20  Data(x);.       
b7f0: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20   Index *pIdx;.  
b800: 20 20 20 20 20 20 69 66 28 20 48 61 73 52 6f 77        if( HasRow
b810: 69 64 28 70 54 61 62 29 20 29 20 63 6e 74 2b 2b  id(pTab) ) cnt++
b820: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6e 49  ;.        for(nI
b830: 64 78 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d  dx=0, pIdx=pTab-
b840: 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70  >pIndex; pIdx; p
b850: 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c  Idx=pIdx->pNext,
b860: 20 6e 49 64 78 2b 2b 29 7b 20 63 6e 74 2b 2b 3b   nIdx++){ cnt++;
b870: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e   }.        if( n
b880: 49 64 78 3e 6d 78 49 64 78 20 29 20 6d 78 49 64  Idx>mxIdx ) mxId
b890: 78 20 3d 20 6e 49 64 78 3b 0a 20 20 20 20 20 20  x = nIdx;.      
b8a0: 7d 0a 20 20 20 20 20 20 61 52 6f 6f 74 20 3d 20  }.      aRoot = 
b8b0: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
b8c0: 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28  awNN(db, sizeof(
b8d0: 69 6e 74 29 2a 28 63 6e 74 2b 31 29 29 3b 0a 20  int)*(cnt+1));. 
b8e0: 20 20 20 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d       if( aRoot==
b8f0: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  0 ) break;.     
b900: 20 66 6f 72 28 63 6e 74 3d 30 2c 20 78 3d 73 71   for(cnt=0, x=sq
b910: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 70 54  liteHashFirst(pT
b920: 62 6c 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74  bls); x; x=sqlit
b930: 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20  eHashNext(x)){. 
b940: 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54         Table *pT
b950: 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44  ab = sqliteHashD
b960: 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20  ata(x);.        
b970: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
b980: 20 20 20 20 20 69 66 28 20 48 61 73 52 6f 77 69       if( HasRowi
b990: 64 28 70 54 61 62 29 20 29 20 61 52 6f 6f 74 5b  d(pTab) ) aRoot[
b9a0: 63 6e 74 2b 2b 5d 20 3d 20 70 54 61 62 2d 3e 74  cnt++] = pTab->t
b9b0: 6e 75 6d 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  num;.        for
b9c0: 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64  (pIdx=pTab->pInd
b9d0: 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
b9e0: 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20  Idx->pNext){.   
b9f0: 20 20 20 20 20 20 20 61 52 6f 6f 74 5b 63 6e 74         aRoot[cnt
ba00: 2b 2b 5d 20 3d 20 70 49 64 78 2d 3e 74 6e 75 6d  ++] = pIdx->tnum
ba10: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
ba20: 20 20 7d 0a 20 20 20 20 20 20 61 52 6f 6f 74 5b    }.      aRoot[
ba30: 63 6e 74 5d 20 3d 20 30 3b 0a 0a 20 20 20 20 20  cnt] = 0;..     
ba40: 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 73 75   /* Make sure su
ba50: 66 66 69 63 69 65 6e 74 20 6e 75 6d 62 65 72 20  fficient number 
ba60: 6f 66 20 72 65 67 69 73 74 65 72 73 20 68 61 76  of registers hav
ba70: 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64  e been allocated
ba80: 20 2a 2f 0a 20 20 20 20 20 20 70 50 61 72 73 65   */.      pParse
ba90: 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 20 70 50  ->nMem = MAX( pP
baa0: 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 38 2b 6d 78  arse->nMem, 8+mx
bab0: 49 64 78 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  Idx );..      /*
bac0: 20 44 6f 20 74 68 65 20 62 2d 74 72 65 65 20 69   Do the b-tree i
bad0: 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 73 20  ntegrity checks 
bae0: 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
baf0: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
bb00: 5f 49 6e 74 65 67 72 69 74 79 43 6b 2c 20 32 2c  _IntegrityCk, 2,
bb10: 20 63 6e 74 2c 20 31 2c 20 28 63 68 61 72 2a 29   cnt, 1, (char*)
bb20: 61 52 6f 6f 74 2c 50 34 5f 49 4e 54 41 52 52 41  aRoot,P4_INTARRA
bb30: 59 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  Y);.      sqlite
bb40: 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c  3VdbeChangeP5(v,
bb50: 20 28 75 38 29 69 29 3b 0a 20 20 20 20 20 20 61   (u8)i);.      a
bb60: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
bb70: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 73  eAddOp1(v, OP_Is
bb80: 4e 75 6c 6c 2c 20 32 29 3b 20 56 64 62 65 43 6f  Null, 2); VdbeCo
bb90: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
bba0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
bbb0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
bbc0: 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20  , 0, 3, 0,.     
bbd0: 20 20 20 20 73 71 6c 69 74 65 33 4d 50 72 69 6e      sqlite3MPrin
bbe0: 74 66 28 64 62 2c 20 22 2a 2a 2a 20 69 6e 20 64  tf(db, "*** in d
bbf0: 61 74 61 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e  atabase %s ***\n
bc00: 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 44  ", db->aDb[i].zD
bc10: 62 53 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20 20  bSName),.       
bc20: 20 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20    P4_DYNAMIC);. 
bc30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
bc40: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 6f 76  AddOp3(v, OP_Mov
bc50: 65 2c 20 32 2c 20 34 2c 20 31 29 3b 0a 20 20 20  e, 2, 4, 1);.   
bc60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
bc70: 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  dOp3(v, OP_Conca
bc80: 74 2c 20 34 2c 20 33 2c 20 32 29 3b 0a 20 20 20  t, 4, 3, 2);.   
bc90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
bca0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
bcb0: 74 52 6f 77 2c 20 32 2c 20 31 29 3b 0a 20 20 20  tRow, 2, 1);.   
bcc0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
bcd0: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
bce0: 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20  ..      /* Make 
bcf0: 73 75 72 65 20 61 6c 6c 20 74 68 65 20 69 6e 64  sure all the ind
bd00: 69 63 65 73 20 61 72 65 20 63 6f 6e 73 74 72 75  ices are constru
bd10: 63 74 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a  cted correctly..
bd20: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 66        */.      f
bd30: 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46  or(x=sqliteHashF
bd40: 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 20 26  irst(pTbls); x &
bd50: 26 20 21 69 73 51 75 69 63 6b 3b 20 78 3d 73 71  & !isQuick; x=sq
bd60: 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78 29 29  liteHashNext(x))
bd70: 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65 20  {.        Table 
bd80: 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61  *pTab = sqliteHa
bd90: 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20  shData(x);.     
bda0: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 2c 20     Index *pIdx, 
bdb0: 2a 70 50 6b 3b 0a 20 20 20 20 20 20 20 20 49 6e  *pPk;.        In
bdc0: 64 65 78 20 2a 70 50 72 69 6f 72 20 3d 20 30 3b  dex *pPrior = 0;
bdd0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 6f 6f  .        int loo
bde0: 70 54 6f 70 3b 0a 20 20 20 20 20 20 20 20 69 6e  pTop;.        in
bdf0: 74 20 69 44 61 74 61 43 75 72 2c 20 69 49 64 78  t iDataCur, iIdx
be00: 43 75 72 3b 0a 20 20 20 20 20 20 20 20 69 6e 74  Cur;.        int
be10: 20 72 31 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 20   r1 = -1;..     
be20: 20 20 20 69 66 28 20 70 54 61 62 2d 3e 70 49 6e     if( pTab->pIn
be30: 64 65 78 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  dex==0 ) continu
be40: 65 3b 0a 20 20 20 20 20 20 20 20 70 50 6b 20 3d  e;.        pPk =
be50: 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
be60: 3f 20 30 20 3a 20 73 71 6c 69 74 65 33 50 72 69  ? 0 : sqlite3Pri
be70: 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61  maryKeyIndex(pTa
be80: 62 29 3b 0a 20 20 20 20 20 20 20 20 61 64 64 72  b);.        addr
be90: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
bea0: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp1(v, OP_IfPos
beb0: 2c 20 31 29 3b 20 20 2f 2a 20 53 74 6f 70 20 69  , 1);  /* Stop i
bec0: 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20  f out of errors 
bed0: 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65 43  */.        VdbeC
bee0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
bef0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
bf00: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74  ddOp2(v, OP_Halt
bf10: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  , 0, 0);.       
bf20: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
bf30: 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20  Here(v, addr);. 
bf40: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
bf50: 70 72 43 61 63 68 65 43 6c 65 61 72 28 70 50 61  prCacheClear(pPa
bf60: 72 73 65 29 3b 0a 20 20 20 20 20 20 20 20 73 71  rse);.        sq
bf70: 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
bf80: 64 49 6e 64 69 63 65 73 28 70 50 61 72 73 65 2c  dIndices(pParse,
bf90: 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65   pTab, OP_OpenRe
bfa0: 61 64 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20  ad, 0,.         
bfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfc0: 20 20 20 20 20 20 20 20 20 20 31 2c 20 30 2c 20            1, 0, 
bfd0: 26 69 44 61 74 61 43 75 72 2c 20 26 69 49 64 78  &iDataCur, &iIdx
bfe0: 43 75 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71  Cur);.        sq
bff0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c000: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30  v, OP_Integer, 0
c010: 2c 20 37 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  , 7);.        fo
c020: 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62  r(j=0, pIdx=pTab
c030: 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20  ->pIndex; pIdx; 
c040: 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
c050: 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  , j++){.        
c060: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c070: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
c080: 72 2c 20 30 2c 20 38 2b 6a 29 3b 20 2f 2a 20 69  r, 0, 8+j); /* i
c090: 6e 64 65 78 20 65 6e 74 72 69 65 73 20 63 6f 75  ndex entries cou
c0a0: 6e 74 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20  nter */.        
c0b0: 7d 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  }.        assert
c0c0: 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3e 3d  ( pParse->nMem>=
c0d0: 38 2b 6a 20 29 3b 0a 20 20 20 20 20 20 20 20 61  8+j );.        a
c0e0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 4e 6f  ssert( sqlite3No
c0f0: 54 65 6d 70 73 49 6e 52 61 6e 67 65 28 70 50 61  TempsInRange(pPa
c100: 72 73 65 2c 31 2c 37 2b 6a 29 20 29 3b 0a 20 20  rse,1,7+j) );.  
c110: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c120: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
c130: 77 69 6e 64 2c 20 69 44 61 74 61 43 75 72 2c 20  wind, iDataCur, 
c140: 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  0); VdbeCoverage
c150: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 6c 6f 6f  (v);.        loo
c160: 70 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64  pTop = sqlite3Vd
c170: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
c180: 64 64 49 6d 6d 2c 20 37 2c 20 31 29 3b 0a 20 20  ddImm, 7, 1);.  
c190: 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20        /* Verify 
c1a0: 74 68 61 74 20 61 6c 6c 20 4e 4f 54 20 4e 55 4c  that all NOT NUL
c1b0: 4c 20 63 6f 6c 75 6d 6e 73 20 72 65 61 6c 6c 79  L columns really
c1c0: 20 61 72 65 20 4e 4f 54 20 4e 55 4c 4c 20 2a 2f   are NOT NULL */
c1d0: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30  .        for(j=0
c1e0: 3b 20 6a 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20  ; j<pTab->nCol; 
c1f0: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
c200: 63 68 61 72 20 2a 7a 45 72 72 3b 0a 20 20 20 20  char *zErr;.    
c210: 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20        int jmp2, 
c220: 6a 6d 70 33 3b 0a 20 20 20 20 20 20 20 20 20 20  jmp3;.          
c230: 69 66 28 20 6a 3d 3d 70 54 61 62 2d 3e 69 50 4b  if( j==pTab->iPK
c240: 65 79 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  ey ) continue;. 
c250: 20 20 20 20 20 20 20 20 20 69 66 28 20 70 54 61           if( pTa
c260: 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 6e 6f 74 4e 75  b->aCol[j].notNu
c270: 6c 6c 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  ll==0 ) continue
c280: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
c290: 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
c2a0: 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70  lumnOfTable(v, p
c2b0: 54 61 62 2c 20 69 44 61 74 61 43 75 72 2c 20 6a  Tab, iDataCur, j
c2c0: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 3);.          
c2d0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
c2e0: 65 50 35 28 76 2c 20 4f 50 46 4c 41 47 5f 54 59  eP5(v, OPFLAG_TY
c2f0: 50 45 4f 46 41 52 47 29 3b 0a 20 20 20 20 20 20  PEOFARG);.      
c300: 20 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74      jmp2 = sqlit
c310: 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
c320: 4f 50 5f 4e 6f 74 4e 75 6c 6c 2c 20 33 29 3b 20  OP_NotNull, 3); 
c330: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
c340: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
c350: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c360: 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31  OP_AddImm, 1, -1
c370: 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20  ); /* Decrement 
c380: 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20  error limit */. 
c390: 20 20 20 20 20 20 20 20 20 7a 45 72 72 20 3d 20           zErr = 
c3a0: 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
c3b0: 62 2c 20 22 4e 55 4c 4c 20 76 61 6c 75 65 20 69  b, "NULL value i
c3c0: 6e 20 25 73 2e 25 73 22 2c 20 70 54 61 62 2d 3e  n %s.%s", pTab->
c3d0: 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20  zName,.         
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3f0: 20 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b       pTab->aCol[
c400: 6a 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  j].zName);.     
c410: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c420: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
c430: 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 7a  ing8, 0, 3, 0, z
c440: 45 72 72 2c 20 50 34 5f 44 59 4e 41 4d 49 43 29  Err, P4_DYNAMIC)
c450: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
c460: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c470: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33   OP_ResultRow, 3
c480: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 1);.          
c490: 6a 6d 70 33 20 3d 20 73 71 6c 69 74 65 33 56 64  jmp3 = sqlite3Vd
c4a0: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49  beAddOp1(v, OP_I
c4b0: 66 50 6f 73 2c 20 31 29 3b 20 56 64 62 65 43 6f  fPos, 1); VdbeCo
c4c0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
c4d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c4e0: 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c  AddOp0(v, OP_Hal
c4f0: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  t);.          sq
c500: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
c510: 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20  e(v, jmp2);.    
c520: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c530: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70  eJumpHere(v, jmp
c540: 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  3);.        }.  
c550: 20 20 20 20 20 20 2f 2a 20 56 61 6c 69 64 61 74        /* Validat
c560: 65 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20  e index entries 
c570: 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
c580: 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 66  row */.        f
c590: 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61  or(j=0, pIdx=pTa
c5a0: 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
c5b0: 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
c5c0: 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  t, j++){.       
c5d0: 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70     int jmp2, jmp
c5e0: 33 2c 20 6a 6d 70 34 2c 20 6a 6d 70 35 3b 0a 20  3, jmp4, jmp5;. 
c5f0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 6b 55           int ckU
c600: 6e 69 71 20 3d 20 73 71 6c 69 74 65 33 56 64 62  niq = sqlite3Vdb
c610: 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20  eMakeLabel(v);. 
c620: 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50 6b           if( pPk
c630: 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75  ==pIdx ) continu
c640: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 72 31 20  e;.          r1 
c650: 3d 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  = sqlite3Generat
c660: 65 49 6e 64 65 78 4b 65 79 28 70 50 61 72 73 65  eIndexKey(pParse
c670: 2c 20 70 49 64 78 2c 20 69 44 61 74 61 43 75 72  , pIdx, iDataCur
c680: 2c 20 30 2c 20 30 2c 20 26 6a 6d 70 33 2c 0a 20  , 0, 0, &jmp3,. 
c690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6b0: 20 20 20 20 20 20 70 50 72 69 6f 72 2c 20 72 31        pPrior, r1
c6c0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 50 72  );.          pPr
c6d0: 69 6f 72 20 3d 20 70 49 64 78 3b 0a 20 20 20 20  ior = pIdx;.    
c6e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c6f0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
c700: 64 49 6d 6d 2c 20 38 2b 6a 2c 20 31 29 3b 20 20  dImm, 8+j, 1);  
c710: 2f 2a 20 69 6e 63 72 65 6d 65 6e 74 20 65 6e 74  /* increment ent
c720: 72 79 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20  ry count */.    
c730: 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20        /* Verify 
c740: 74 68 61 74 20 61 6e 20 69 6e 64 65 78 20 65 6e  that an index en
c750: 74 72 79 20 65 78 69 73 74 73 20 66 6f 72 20 74  try exists for t
c760: 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
c770: 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20   row */.        
c780: 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33    jmp2 = sqlite3
c790: 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c  VdbeAddOp4Int(v,
c7a0: 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 49 64 78 43   OP_Found, iIdxC
c7b0: 75 72 2b 6a 2c 20 63 6b 55 6e 69 71 2c 20 72 31  ur+j, ckUniq, r1
c7c0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
c7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7e0: 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 6e 43          pIdx->nC
c7f0: 6f 6c 75 6d 6e 29 3b 20 56 64 62 65 43 6f 76 65  olumn); VdbeCove
c800: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
c810: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c820: 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
c830: 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65  m, 1, -1); /* De
c840: 63 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69  crement error li
c850: 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  mit */.         
c860: 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64   sqlite3VdbeLoad
c870: 53 74 72 69 6e 67 28 76 2c 20 33 2c 20 22 72 6f  String(v, 3, "ro
c880: 77 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  w ");.          
c890: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c8a0: 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20  3(v, OP_Concat, 
c8b0: 37 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20  7, 3, 3);.      
c8c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c      sqlite3VdbeL
c8d0: 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 34 2c 20  oadString(v, 4, 
c8e0: 22 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  " missing from i
c8f0: 6e 64 65 78 20 22 29 3b 0a 20 20 20 20 20 20 20  ndex ");.       
c900: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c910: 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  dOp3(v, OP_Conca
c920: 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20  t, 4, 3, 3);.   
c930: 20 20 20 20 20 20 20 6a 6d 70 35 20 3d 20 73 71         jmp5 = sq
c940: 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72  lite3VdbeLoadStr
c950: 69 6e 67 28 76 2c 20 34 2c 20 70 49 64 78 2d 3e  ing(v, 4, pIdx->
c960: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20  zName);.        
c970: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c980: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74  Op3(v, OP_Concat
c990: 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20  , 4, 3, 3);.    
c9a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c9b0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
c9c0: 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a  sultRow, 3, 1);.
c9d0: 20 20 20 20 20 20 20 20 20 20 6a 6d 70 34 20 3d            jmp4 =
c9e0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c9f0: 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20  p1(v, OP_IfPos, 
ca00: 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  1); VdbeCoverage
ca10: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  (v);.          s
ca20: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 30  qlite3VdbeAddOp0
ca30: 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20  (v, OP_Halt);.  
ca40: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
ca50: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a  dbeJumpHere(v, j
ca60: 6d 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  mp2);.          
ca70: 2f 2a 20 46 6f 72 20 55 4e 49 51 55 45 20 69 6e  /* For UNIQUE in
ca80: 64 65 78 65 73 2c 20 76 65 72 69 66 79 20 74 68  dexes, verify th
ca90: 61 74 20 6f 6e 6c 79 20 6f 6e 65 20 65 6e 74 72  at only one entr
caa0: 79 20 65 78 69 73 74 73 20 77 69 74 68 20 74 68  y exists with th
cab0: 65 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 63  e.          ** c
cac0: 75 72 72 65 6e 74 20 6b 65 79 2e 20 20 54 68 65  urrent key.  The
cad0: 20 65 6e 74 72 79 20 69 73 20 75 6e 69 71 75 65   entry is unique
cae0: 20 69 66 20 28 31 29 20 61 6e 79 20 63 6f 6c 75   if (1) any colu
caf0: 6d 6e 20 69 73 20 4e 55 4c 4c 0a 20 20 20 20 20  mn is NULL.     
cb00: 20 20 20 20 20 2a 2a 20 6f 72 20 28 32 29 20 74       ** or (2) t
cb10: 68 65 20 6e 65 78 74 20 65 6e 74 72 79 20 68 61  he next entry ha
cb20: 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 6b 65  s a different ke
cb30: 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69  y */.          i
cb40: 66 28 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78  f( IsUniqueIndex
cb50: 28 70 49 64 78 29 20 29 7b 0a 20 20 20 20 20 20  (pIdx) ){.      
cb60: 20 20 20 20 20 20 69 6e 74 20 75 6e 69 71 4f 6b        int uniqOk
cb70: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61   = sqlite3VdbeMa
cb80: 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20  keLabel(v);.    
cb90: 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 36          int jmp6
cba0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ;.            in
cbb0: 74 20 6b 6b 3b 0a 20 20 20 20 20 20 20 20 20 20  t kk;.          
cbc0: 20 20 66 6f 72 28 6b 6b 3d 30 3b 20 6b 6b 3c 70    for(kk=0; kk<p
cbd0: 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 6b 6b  Idx->nKeyCol; kk
cbe0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
cbf0: 20 20 20 69 6e 74 20 69 43 6f 6c 20 3d 20 70 49     int iCol = pI
cc00: 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 6b 5d  dx->aiColumn[kk]
cc10: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
cc20: 61 73 73 65 72 74 28 20 69 43 6f 6c 21 3d 58 4e  assert( iCol!=XN
cc30: 5f 52 4f 57 49 44 20 26 26 20 69 43 6f 6c 3c 70  _ROWID && iCol<p
cc40: 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20  Tab->nCol );.   
cc50: 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69             if( i
cc60: 43 6f 6c 3e 3d 30 20 26 26 20 70 54 61 62 2d 3e  Col>=0 && pTab->
cc70: 61 43 6f 6c 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e 75  aCol[iCol].notNu
cc80: 6c 6c 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  ll ) continue;. 
cc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
cca0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
ccb0: 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 31 2b  , OP_IsNull, r1+
ccc0: 6b 6b 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20  kk, uniqOk);.   
ccd0: 20 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43             VdbeC
cce0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
ccf0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
cd00: 20 20 20 20 20 20 6a 6d 70 36 20 3d 20 73 71 6c        jmp6 = sql
cd10: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
cd20: 2c 20 4f 50 5f 4e 65 78 74 2c 20 69 49 64 78 43  , OP_Next, iIdxC
cd30: 75 72 2b 6a 29 3b 20 56 64 62 65 43 6f 76 65 72  ur+j); VdbeCover
cd40: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
cd50: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 47      sqlite3VdbeG
cd60: 6f 74 6f 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a  oto(v, uniqOk);.
cd70: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
cd80: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
cd90: 76 2c 20 6a 6d 70 36 29 3b 0a 20 20 20 20 20 20  v, jmp6);.      
cda0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cdb0: 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50  eAddOp4Int(v, OP
cdc0: 5f 49 64 78 47 54 2c 20 69 49 64 78 43 75 72 2b  _IdxGT, iIdxCur+
cdd0: 6a 2c 20 75 6e 69 71 4f 6b 2c 20 72 31 2c 0a 20  j, uniqOk, r1,. 
cde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce00: 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 20  pIdx->nKeyCol); 
ce10: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
ce20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
ce30: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
ce40: 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20  , OP_AddImm, 1, 
ce50: 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e  -1); /* Decremen
ce60: 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f  t error limit */
ce70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
ce80: 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69  ite3VdbeLoadStri
ce90: 6e 67 28 76 2c 20 33 2c 20 22 6e 6f 6e 2d 75 6e  ng(v, 3, "non-un
cea0: 69 71 75 65 20 65 6e 74 72 79 20 69 6e 20 69 6e  ique entry in in
ceb0: 64 65 78 20 22 29 3b 0a 20 20 20 20 20 20 20 20  dex ");.        
cec0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 47      sqlite3VdbeG
ced0: 6f 74 6f 28 76 2c 20 6a 6d 70 35 29 3b 0a 20 20  oto(v, jmp5);.  
cee0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
cef0: 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65  3VdbeResolveLabe
cf00: 6c 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20  l(v, uniqOk);.  
cf10: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
cf20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
cf30: 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 34 29  umpHere(v, jmp4)
cf40: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
cf50: 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64  te3ResolvePartId
cf60: 78 4c 61 62 65 6c 28 70 50 61 72 73 65 2c 20 6a  xLabel(pParse, j
cf70: 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  mp3);.        }.
cf80: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
cf90: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
cfa0: 4e 65 78 74 2c 20 69 44 61 74 61 43 75 72 2c 20  Next, iDataCur, 
cfb0: 6c 6f 6f 70 54 6f 70 29 3b 20 56 64 62 65 43 6f  loopTop); VdbeCo
cfc0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
cfd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
cfe0: 6d 70 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54 6f  mpHere(v, loopTo
cff0: 70 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  p-1);.#ifndef SQ
d000: 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43  LITE_OMIT_BTREEC
d010: 4f 55 4e 54 0a 20 20 20 20 20 20 20 20 73 71 6c  OUNT.        sql
d020: 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69  ite3VdbeLoadStri
d030: 6e 67 28 76 2c 20 32 2c 20 22 77 72 6f 6e 67 20  ng(v, 2, "wrong 
d040: 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  # of entries in 
d050: 69 6e 64 65 78 20 22 29 3b 0a 20 20 20 20 20 20  index ");.      
d060: 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d    for(j=0, pIdx=
d070: 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49  pTab->pIndex; pI
d080: 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
d090: 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20  Next, j++){.    
d0a0: 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70        if( pPk==p
d0b0: 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  Idx ) continue;.
d0c0: 20 20 20 20 20 20 20 20 20 20 61 64 64 72 20 3d            addr =
d0d0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72   sqlite3VdbeCurr
d0e0: 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20 20  entAddr(v);.    
d0f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d100: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66  eAddOp2(v, OP_If
d110: 50 6f 73 2c 20 31 2c 20 61 64 64 72 2b 32 29 3b  Pos, 1, addr+2);
d120: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
d130: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d140: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d150: 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b   OP_Halt, 0, 0);
d160: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d170: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d180: 4f 50 5f 43 6f 75 6e 74 2c 20 69 49 64 78 43 75  OP_Count, iIdxCu
d190: 72 2b 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  r+j, 3);.       
d1a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d1b0: 64 4f 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20 38  dOp3(v, OP_Eq, 8
d1c0: 2b 6a 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b 20  +j, addr+8, 3); 
d1d0: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
d1e0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d1f0: 65 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76  e3VdbeChangeP5(v
d200: 2c 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  , SQLITE_NOTNULL
d210: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d220: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d230: 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20  , OP_AddImm, 1, 
d240: 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  -1);.          s
d250: 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74  qlite3VdbeLoadSt
d260: 72 69 6e 67 28 76 2c 20 33 2c 20 70 49 64 78 2d  ring(v, 3, pIdx-
d270: 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20  >zName);.       
d280: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d290: 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  dOp3(v, OP_Conca
d2a0: 74 2c 20 33 2c 20 32 2c 20 37 29 3b 0a 20 20 20  t, 3, 2, 7);.   
d2b0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d2c0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
d2d0: 65 73 75 6c 74 52 6f 77 2c 20 37 2c 20 31 29 3b  esultRow, 7, 1);
d2e0: 0a 20 20 20 20 20 20 20 20 7d 0a 23 65 6e 64 69  .        }.#endi
d2f0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
d300: 5f 42 54 52 45 45 43 4f 55 4e 54 20 2a 2f 0a 20  _BTREECOUNT */. 
d310: 20 20 20 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20       } .    }.  
d320: 20 20 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63    {.      static
d330: 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d   const int iLn =
d340: 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e   VDBE_OFFSET_LIN
d350: 45 4e 4f 28 32 29 3b 0a 20 20 20 20 20 20 73 74  ENO(2);.      st
d360: 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f  atic const VdbeO
d370: 70 4c 69 73 74 20 65 6e 64 43 6f 64 65 5b 5d 20  pList endCode[] 
d380: 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50  = {.        { OP
d390: 5f 41 64 64 49 6d 6d 2c 20 20 20 20 20 20 31 2c  _AddImm,      1,
d3a0: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20   0,        0},  
d3b0: 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20    /* 0 */.      
d3c0: 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20 20 20    { OP_If,      
d3d0: 20 20 20 20 31 2c 20 34 2c 20 20 20 20 20 20 20      1, 4,       
d3e0: 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a   0},    /* 1 */.
d3f0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72          { OP_Str
d400: 69 6e 67 38 2c 20 20 20 20 20 30 2c 20 33 2c 20  ing8,     0, 3, 
d410: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
d420: 20 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   2 */.        { 
d430: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20  OP_ResultRow,   
d440: 33 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c  3, 1,        0},
d450: 20 20 20 20 2f 2a 20 33 20 2a 2f 0a 20 20 20 20      /* 3 */.    
d460: 20 20 7d 3b 0a 20 20 20 20 20 20 56 64 62 65 4f    };.      VdbeO
d470: 70 20 2a 61 4f 70 3b 0a 0a 20 20 20 20 20 20 61  p *aOp;..      a
d480: 4f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  Op = sqlite3Vdbe
d490: 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
d4a0: 61 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c  aySize(endCode),
d4b0: 20 65 6e 64 43 6f 64 65 2c 20 69 4c 6e 29 3b 0a   endCode, iLn);.
d4c0: 20 20 20 20 20 20 69 66 28 20 61 4f 70 20 29 7b        if( aOp ){
d4d0: 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e  .        aOp[0].
d4e0: 70 32 20 3d 20 2d 6d 78 45 72 72 3b 0a 20 20 20  p2 = -mxErr;.   
d4f0: 20 20 20 20 20 61 4f 70 5b 32 5d 2e 70 34 74 79       aOp[2].p4ty
d500: 70 65 20 3d 20 50 34 5f 53 54 41 54 49 43 3b 0a  pe = P4_STATIC;.
d510: 20 20 20 20 20 20 20 20 61 4f 70 5b 32 5d 2e 70          aOp[2].p
d520: 34 2e 7a 20 3d 20 22 6f 6b 22 3b 0a 20 20 20 20  4.z = "ok";.    
d530: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
d540: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
d550: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
d560: 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a  EGRITY_CHECK */.
d570: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d580: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a 0a  OMIT_UTF16.  /*.
d590: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e    **   PRAGMA en
d5a0: 63 6f 64 69 6e 67 0a 20 20 2a 2a 20 20 20 50 52  coding.  **   PR
d5b0: 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20  AGMA encoding = 
d5c0: 22 75 74 66 2d 38 22 7c 22 75 74 66 2d 31 36 22  "utf-8"|"utf-16"
d5d0: 7c 22 75 74 66 2d 31 36 6c 65 22 7c 22 75 74 66  |"utf-16le"|"utf
d5e0: 2d 31 36 62 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a  -16be".  **.  **
d5f0: 20 49 6e 20 69 74 73 20 66 69 72 73 74 20 66 6f   In its first fo
d600: 72 6d 2c 20 74 68 69 73 20 70 72 61 67 6d 61 20  rm, this pragma 
d610: 72 65 74 75 72 6e 73 20 74 68 65 20 65 6e 63 6f  returns the enco
d620: 64 69 6e 67 20 6f 66 20 74 68 65 20 6d 61 69 6e  ding of the main
d630: 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  .  ** database. 
d640: 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
d650: 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a  is not initializ
d660: 65 64 2c 20 69 74 20 69 73 20 69 6e 69 74 69 61  ed, it is initia
d670: 6c 69 7a 65 64 20 6e 6f 77 2e 0a 20 20 2a 2a 0a  lized now..  **.
d680: 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20    ** The second 
d690: 66 6f 72 6d 20 6f 66 20 74 68 69 73 20 70 72 61  form of this pra
d6a0: 67 6d 61 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69  gma is a no-op i
d6b0: 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  f the main datab
d6c0: 61 73 65 20 66 69 6c 65 0a 20 20 2a 2a 20 68 61  ase file.  ** ha
d6d0: 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 62 65  s not already be
d6e0: 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  en initialized. 
d6f0: 49 6e 20 74 68 69 73 20 63 61 73 65 20 69 74 20  In this case it 
d700: 73 65 74 73 20 74 68 65 20 64 65 66 61 75 6c 74  sets the default
d710: 0a 20 20 2a 2a 20 65 6e 63 6f 64 69 6e 67 20 74  .  ** encoding t
d720: 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64  hat will be used
d730: 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
d740: 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 61  tabase file if a
d750: 20 6e 65 77 20 66 69 6c 65 0a 20 20 2a 2a 20 69   new file.  ** i
d760: 73 20 63 72 65 61 74 65 64 2e 20 49 66 20 61 6e  s created. If an
d770: 20 65 78 69 73 74 69 6e 67 20 6d 61 69 6e 20 64   existing main d
d780: 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
d790: 6f 70 65 6e 65 64 2c 20 74 68 65 6e 20 74 68 65  opened, then the
d7a0: 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 74 65  .  ** default te
d7b0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20  xt encoding for 
d7c0: 74 68 65 20 65 78 69 73 74 69 6e 67 20 64 61 74  the existing dat
d7d0: 61 62 61 73 65 20 69 73 20 75 73 65 64 2e 0a 20  abase is used.. 
d7e0: 20 2a 2a 20 0a 20 20 2a 2a 20 49 6e 20 61 6c 6c   ** .  ** In all
d7f0: 20 63 61 73 65 73 20 6e 65 77 20 64 61 74 61 62   cases new datab
d800: 61 73 65 73 20 63 72 65 61 74 65 64 20 75 73 69  ases created usi
d810: 6e 67 20 74 68 65 20 41 54 54 41 43 48 20 63 6f  ng the ATTACH co
d820: 6d 6d 61 6e 64 20 61 72 65 0a 20 20 2a 2a 20 63  mmand are.  ** c
d830: 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
d840: 65 20 73 61 6d 65 20 64 65 66 61 75 6c 74 20 74  e same default t
d850: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 61 73 20  ext encoding as 
d860: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
d870: 65 2e 20 49 66 0a 20 20 2a 2a 20 74 68 65 20 6d  e. If.  ** the m
d880: 61 69 6e 20 64 61 74 61 62 61 73 65 20 68 61 73  ain database has
d890: 20 6e 6f 74 20 62 65 65 6e 20 69 6e 69 74 69 61   not been initia
d8a0: 6c 69 7a 65 64 20 61 6e 64 2f 6f 72 20 63 72 65  lized and/or cre
d8b0: 61 74 65 64 20 77 68 65 6e 20 41 54 54 41 43 48  ated when ATTACH
d8c0: 0a 20 20 2a 2a 20 69 73 20 65 78 65 63 75 74 65  .  ** is execute
d8d0: 64 2c 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20  d, this is done 
d8e0: 62 65 66 6f 72 65 20 74 68 65 20 41 54 54 41 43  before the ATTAC
d8f0: 48 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 20 20 2a  H operation..  *
d900: 2a 0a 20 20 2a 2a 20 49 6e 20 74 68 65 20 73 65  *.  ** In the se
d910: 63 6f 6e 64 20 66 6f 72 6d 20 74 68 69 73 20 70  cond form this p
d920: 72 61 67 6d 61 20 73 65 74 73 20 74 68 65 20 74  ragma sets the t
d930: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 74 6f 20  ext encoding to 
d940: 62 65 20 75 73 65 64 20 69 6e 0a 20 20 2a 2a 20  be used in.  ** 
d950: 6e 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c  new database fil
d960: 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
d970: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 68   this database h
d980: 61 6e 64 6c 65 2e 20 49 74 20 69 73 20 6f 6e 6c  andle. It is onl
d990: 79 0a 20 20 2a 2a 20 75 73 65 66 75 6c 20 69 66  y.  ** useful if
d9a0: 20 69 6e 76 6f 6b 65 64 20 69 6d 6d 65 64 69 61   invoked immedia
d9b0: 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6d  tely after the m
d9c0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 0a 20  ain database i. 
d9d0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
d9e0: 79 70 5f 45 4e 43 4f 44 49 4e 47 3a 20 7b 0a 20  yp_ENCODING: {. 
d9f0: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
da00: 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 7b  struct EncName {
da10: 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  .      char *zNa
da20: 6d 65 3b 0a 20 20 20 20 20 20 75 38 20 65 6e 63  me;.      u8 enc
da30: 3b 0a 20 20 20 20 7d 20 65 6e 63 6e 61 6d 65 73  ;.    } encnames
da40: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22  [] = {.      { "
da50: 55 54 46 38 22 2c 20 20 20 20 20 53 51 4c 49 54  UTF8",     SQLIT
da60: 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c  E_UTF8        },
da70: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 38 22  .      { "UTF-8"
da80: 2c 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38  ,    SQLITE_UTF8
da90: 20 20 20 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d          },  /* M
daa0: 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b  ust be element [
dab0: 31 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  1] */.      { "U
dac0: 54 46 2d 31 36 6c 65 22 2c 20 53 51 4c 49 54 45  TF-16le", SQLITE
dad0: 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 20  _UTF16LE     }, 
dae0: 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d   /* Must be elem
daf0: 65 6e 74 20 5b 32 5d 20 2a 2f 0a 20 20 20 20 20  ent [2] */.     
db00: 20 7b 20 22 55 54 46 2d 31 36 62 65 22 2c 20 53   { "UTF-16be", S
db10: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20 20  QLITE_UTF16BE   
db20: 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65    },  /* Must be
db30: 20 65 6c 65 6d 65 6e 74 20 5b 33 5d 20 2a 2f 0a   element [3] */.
db40: 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 6c 65        { "UTF16le
db50: 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ",  SQLITE_UTF16
db60: 4c 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20  LE     },.      
db70: 7b 20 22 55 54 46 31 36 62 65 22 2c 20 20 53 51  { "UTF16be",  SQ
db80: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20 20 20  LITE_UTF16BE    
db90: 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46   },.      { "UTF
dba0: 2d 31 36 22 2c 20 20 20 30 20 20 20 20 20 20 20  -16",   0       
dbb0: 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a             }, /*
dbc0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
dbd0: 49 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22  IVE */.      { "
dbe0: 55 54 46 31 36 22 2c 20 20 20 20 30 20 20 20 20  UTF16",    0    
dbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
dc00: 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36   /* SQLITE_UTF16
dc10: 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20 20 20 20  NATIVE */.      
dc20: 7b 20 30 2c 20 30 20 7d 0a 20 20 20 20 7d 3b 0a  { 0, 0 }.    };.
dc30: 20 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74      const struct
dc40: 20 45 6e 63 4e 61 6d 65 20 2a 70 45 6e 63 3b 0a   EncName *pEnc;.
dc50: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
dc60: 29 7b 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41  ){    /* "PRAGMA
dc70: 20 65 6e 63 6f 64 69 6e 67 22 20 2a 2f 0a 20 20   encoding" */.  
dc80: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52      if( sqlite3R
dc90: 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65  eadSchema(pParse
dca0: 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f  ) ) goto pragma_
dcb0: 6f 75 74 3b 0a 20 20 20 20 20 20 61 73 73 65 72  out;.      asser
dcc0: 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49  t( encnames[SQLI
dcd0: 54 45 5f 55 54 46 38 5d 2e 65 6e 63 3d 3d 53 51  TE_UTF8].enc==SQ
dce0: 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 20  LITE_UTF8 );.   
dcf0: 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61     assert( encna
dd00: 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 31 36  mes[SQLITE_UTF16
dd10: 4c 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  LE].enc==SQLITE_
dd20: 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 20 20 20  UTF16LE );.     
dd30: 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65   assert( encname
dd40: 73 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  s[SQLITE_UTF16BE
dd50: 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ].enc==SQLITE_UT
dd60: 46 31 36 42 45 20 29 3b 0a 20 20 20 20 20 20 72  F16BE );.      r
dd70: 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78 74 28  eturnSingleText(
dd80: 76 2c 20 65 6e 63 6e 61 6d 65 73 5b 45 4e 43 28  v, encnames[ENC(
dd90: 70 50 61 72 73 65 2d 3e 64 62 29 5d 2e 7a 4e 61  pParse->db)].zNa
dda0: 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 20  me);.    }else{ 
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddc0: 20 20 20 20 20 20 20 2f 2a 20 22 50 52 41 47 4d         /* "PRAGM
ddd0: 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 58 58 58  A encoding = XXX
dde0: 22 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 4f 6e  " */.      /* On
ddf0: 6c 79 20 63 68 61 6e 67 65 20 74 68 65 20 76 61  ly change the va
de00: 6c 75 65 20 6f 66 20 73 71 6c 69 74 65 2e 65 6e  lue of sqlite.en
de10: 63 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  c if the databas
de20: 65 20 68 61 6e 64 6c 65 20 69 73 20 6e 6f 74 0a  e handle is not.
de30: 20 20 20 20 20 20 2a 2a 20 69 6e 69 74 69 61 6c        ** initial
de40: 69 7a 65 64 2e 20 49 66 20 74 68 65 20 6d 61 69  ized. If the mai
de50: 6e 20 64 61 74 61 62 61 73 65 20 65 78 69 73 74  n database exist
de60: 73 2c 20 74 68 65 20 6e 65 77 20 73 71 6c 69 74  s, the new sqlit
de70: 65 2e 65 6e 63 20 76 61 6c 75 65 0a 20 20 20 20  e.enc value.    
de80: 20 20 2a 2a 20 77 69 6c 6c 20 62 65 20 6f 76 65    ** will be ove
de90: 72 77 72 69 74 74 65 6e 20 77 68 65 6e 20 74 68  rwritten when th
dea0: 65 20 73 63 68 65 6d 61 20 69 73 20 6e 65 78 74  e schema is next
deb0: 20 6c 6f 61 64 65 64 2e 20 49 66 20 69 74 20 64   loaded. If it d
dec0: 6f 65 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a  oes not.      **
ded0: 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c   already exists,
dee0: 20 69 74 20 77 69 6c 6c 20 62 65 20 63 72 65 61   it will be crea
def0: 74 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e  ted to use the n
df00: 65 77 20 65 6e 63 6f 64 69 6e 67 20 76 61 6c 75  ew encoding valu
df10: 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
df20: 20 20 69 66 28 20 0a 20 20 20 20 20 20 20 20 21    if( .        !
df30: 28 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64  (DbHasProperty(d
df40: 62 2c 20 30 2c 20 44 42 5f 53 63 68 65 6d 61 4c  b, 0, DB_SchemaL
df50: 6f 61 64 65 64 29 29 20 7c 7c 20 0a 20 20 20 20  oaded)) || .    
df60: 20 20 20 20 44 62 48 61 73 50 72 6f 70 65 72 74      DbHasPropert
df70: 79 28 64 62 2c 20 30 2c 20 44 42 5f 45 6d 70 74  y(db, 0, DB_Empt
df80: 79 29 20 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  y) .      ){.   
df90: 20 20 20 20 20 66 6f 72 28 70 45 6e 63 3d 26 65       for(pEnc=&e
dfa0: 6e 63 6e 61 6d 65 73 5b 30 5d 3b 20 70 45 6e 63  ncnames[0]; pEnc
dfb0: 2d 3e 7a 4e 61 6d 65 3b 20 70 45 6e 63 2b 2b 29  ->zName; pEnc++)
dfc0: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
dfd0: 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d  0==sqlite3StrICm
dfe0: 70 28 7a 52 69 67 68 74 2c 20 70 45 6e 63 2d 3e  p(zRight, pEnc->
dff0: 7a 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20 20 20  zName) ){.      
e000: 20 20 20 20 20 20 53 43 48 45 4d 41 5f 45 4e 43        SCHEMA_ENC
e010: 28 64 62 29 20 3d 20 45 4e 43 28 64 62 29 20 3d  (db) = ENC(db) =
e020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e030: 20 70 45 6e 63 2d 3e 65 6e 63 20 3f 20 70 45 6e   pEnc->enc ? pEn
e040: 63 2d 3e 65 6e 63 20 3a 20 53 51 4c 49 54 45 5f  c->enc : SQLITE_
e050: 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 20  UTF16NATIVE;.   
e060: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
e070: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
e080: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
e090: 28 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29  ( !pEnc->zName )
e0a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
e0b0: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
e0c0: 73 65 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64  se, "unsupported
e0d0: 20 65 6e 63 6f 64 69 6e 67 3a 20 25 73 22 2c 20   encoding: %s", 
e0e0: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 20  zRight);.       
e0f0: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
e100: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
e110: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
e120: 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69  MIT_UTF16 */..#i
e130: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
e140: 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  T_SCHEMA_VERSION
e150: 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20  _PRAGMAS.  /*.  
e160: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
e170: 65 6d 61 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73  ema.]schema_vers
e180: 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ion.  **   PRAGM
e190: 41 20 5b 73 63 68 65 6d 61 2e 5d 73 63 68 65 6d  A [schema.]schem
e1a0: 61 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74  a_version = <int
e1b0: 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
e1c0: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
e1d0: 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 0a 20  .]user_version. 
e1e0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63   **   PRAGMA [sc
e1f0: 68 65 6d 61 2e 5d 75 73 65 72 5f 76 65 72 73 69  hema.]user_versi
e200: 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20  on = <integer>. 
e210: 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   **.  **   PRAGM
e220: 41 20 5b 73 63 68 65 6d 61 2e 5d 66 72 65 65 6c  A [schema.]freel
e230: 69 73 74 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20  ist_count.  **. 
e240: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63   **   PRAGMA [sc
e250: 68 65 6d 61 2e 5d 64 61 74 61 5f 76 65 72 73 69  hema.]data_versi
e260: 6f 6e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50  on.  **.  **   P
e270: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61  RAGMA [schema.]a
e280: 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 0a 20 20  pplication_id.  
e290: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
e2a0: 65 6d 61 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e  ema.]application
e2b0: 5f 69 64 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a  _id = <integer>.
e2c0: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 70 72    **.  ** The pr
e2d0: 61 67 6d 61 27 73 20 73 63 68 65 6d 61 5f 76 65  agma's schema_ve
e2e0: 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 5f 76  rsion and user_v
e2f0: 65 72 73 69 6f 6e 20 61 72 65 20 75 73 65 64 20  ersion are used 
e300: 74 6f 20 73 65 74 20 6f 72 20 67 65 74 0a 20 20  to set or get.  
e310: 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
e320: 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69  the schema-versi
e330: 6f 6e 20 61 6e 64 20 75 73 65 72 2d 76 65 72 73  on and user-vers
e340: 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ion, respectivel
e350: 79 2e 20 42 6f 74 68 0a 20 20 2a 2a 20 74 68 65  y. Both.  ** the
e360: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
e370: 61 6e 64 20 74 68 65 20 75 73 65 72 2d 76 65 72  and the user-ver
e380: 73 69 6f 6e 20 61 72 65 20 33 32 2d 62 69 74 20  sion are 32-bit 
e390: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 0a  signed integers.
e3a0: 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74    ** stored in t
e3b0: 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64  he database head
e3c0: 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  er..  **.  ** Th
e3d0: 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
e3e0: 69 73 20 75 73 75 61 6c 6c 79 20 6f 6e 6c 79 20  is usually only 
e3f0: 6d 61 6e 69 70 75 6c 61 74 65 64 20 69 6e 74 65  manipulated inte
e400: 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65  rnally by SQLite
e410: 2e 20 49 74 0a 20 20 2a 2a 20 69 73 20 69 6e 63  . It.  ** is inc
e420: 72 65 6d 65 6e 74 65 64 20 62 79 20 53 51 4c 69  remented by SQLi
e430: 74 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  te whenever the 
e440: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
e450: 69 73 20 6d 6f 64 69 66 69 65 64 20 28 62 79 0a  is modified (by.
e460: 20 20 2a 2a 20 63 72 65 61 74 69 6e 67 20 6f 72    ** creating or
e470: 20 64 72 6f 70 70 69 6e 67 20 61 20 74 61 62 6c   dropping a tabl
e480: 65 20 6f 72 20 69 6e 64 65 78 29 2e 20 54 68 65  e or index). The
e490: 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
e4a0: 69 73 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20  is used by.  ** 
e4b0: 53 51 4c 69 74 65 20 65 61 63 68 20 74 69 6d 65  SQLite each time
e4c0: 20 61 20 71 75 65 72 79 20 69 73 20 65 78 65 63   a query is exec
e4d0: 75 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74  uted to ensure t
e4e0: 68 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  hat the internal
e4f0: 20 63 61 63 68 65 0a 20 20 2a 2a 20 6f 66 20 74   cache.  ** of t
e500: 68 65 20 73 63 68 65 6d 61 20 75 73 65 64 20 77  he schema used w
e510: 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68  hen compiling th
e520: 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74 63  e SQL query matc
e530: 68 65 73 20 74 68 65 20 73 63 68 65 6d 61 20 6f  hes the schema o
e540: 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62  f.  ** the datab
e550: 61 73 65 20 61 67 61 69 6e 73 74 20 77 68 69 63  ase against whic
e560: 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71  h the compiled q
e570: 75 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c 79  uery is actually
e580: 20 65 78 65 63 75 74 65 64 2e 0a 20 20 2a 2a 20   executed..  ** 
e590: 53 75 62 76 65 72 74 69 6e 67 20 74 68 69 73 20  Subverting this 
e5a0: 6d 65 63 68 61 6e 69 73 6d 20 62 79 20 75 73 69  mechanism by usi
e5b0: 6e 67 20 22 50 52 41 47 4d 41 20 73 63 68 65 6d  ng "PRAGMA schem
e5c0: 61 5f 76 65 72 73 69 6f 6e 22 20 74 6f 20 6d 6f  a_version" to mo
e5d0: 64 69 66 79 0a 20 20 2a 2a 20 74 68 65 20 73 63  dify.  ** the sc
e5e0: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69 73 20  hema-version is 
e5f0: 70 6f 74 65 6e 74 69 61 6c 6c 79 20 64 61 6e 67  potentially dang
e600: 65 72 6f 75 73 20 61 6e 64 20 6d 61 79 20 6c 65  erous and may le
e610: 61 64 20 74 6f 20 70 72 6f 67 72 61 6d 0a 20 20  ad to program.  
e620: 2a 2a 20 63 72 61 73 68 65 73 20 6f 72 20 64 61  ** crashes or da
e630: 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f  tabase corruptio
e640: 6e 2e 20 55 73 65 20 77 69 74 68 20 63 61 75 74  n. Use with caut
e650: 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ion!.  **.  ** T
e660: 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20  he user-version 
e670: 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74 65  is not used inte
e680: 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65  rnally by SQLite
e690: 2e 20 49 74 20 6d 61 79 20 62 65 20 75 73 65 64  . It may be used
e6a0: 20 62 79 0a 20 20 2a 2a 20 61 70 70 6c 69 63 61   by.  ** applica
e6b0: 74 69 6f 6e 73 20 66 6f 72 20 61 6e 79 20 70 75  tions for any pu
e6c0: 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61  rpose..  */.  ca
e6d0: 73 65 20 50 72 61 67 54 79 70 5f 48 45 41 44 45  se PragTyp_HEADE
e6e0: 52 5f 56 41 4c 55 45 3a 20 7b 0a 20 20 20 20 69  R_VALUE: {.    i
e6f0: 6e 74 20 69 43 6f 6f 6b 69 65 20 3d 20 70 50 72  nt iCookie = pPr
e700: 61 67 6d 61 2d 3e 69 41 72 67 3b 20 20 2f 2a 20  agma->iArg;  /* 
e710: 57 68 69 63 68 20 63 6f 6f 6b 69 65 20 74 6f 20  Which cookie to 
e720: 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f  read or write */
e730: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
e740: 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62  UsesBtree(v, iDb
e750: 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  );.    if( zRigh
e760: 74 20 26 26 20 28 70 50 72 61 67 6d 61 2d 3e 6d  t && (pPragma->m
e770: 50 72 61 67 46 6c 67 20 26 20 50 72 61 67 46 6c  PragFlg & PragFl
e780: 67 5f 52 65 61 64 4f 6e 6c 79 29 3d 3d 30 20 29  g_ReadOnly)==0 )
e790: 7b 0a 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65  {.      /* Write
e7a0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
e7b0: 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20  ookie value */. 
e7c0: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
e7d0: 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73 65 74  t VdbeOpList set
e7e0: 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20  Cookie[] = {.   
e7f0: 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61       { OP_Transa
e800: 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20 20 31 2c  ction,    0,  1,
e810: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f    0},    /* 0 */
e820: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65  .        { OP_Se
e830: 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c  tCookie,      0,
e840: 20 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    0,  0},    /* 
e850: 31 20 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20  1 */.      };.  
e860: 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b      VdbeOp *aOp;
e870: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
e880: 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63  beVerifyNoMalloc
e890: 52 65 71 75 69 72 65 64 28 76 2c 20 41 72 72 61  Required(v, Arra
e8a0: 79 53 69 7a 65 28 73 65 74 43 6f 6f 6b 69 65 29  ySize(setCookie)
e8b0: 29 3b 0a 20 20 20 20 20 20 61 4f 70 20 3d 20 73  );.      aOp = s
e8c0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
e8d0: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
e8e0: 28 73 65 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74  (setCookie), set
e8f0: 43 6f 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20  Cookie, 0);.    
e900: 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52 45    if( ONLY_IF_RE
e910: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f 70  ALLOC_STRESS(aOp
e920: 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a 20 20  ==0) ) break;.  
e930: 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20 3d 20      aOp[0].p1 = 
e940: 69 44 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31  iDb;.      aOp[1
e950: 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20  ].p1 = iDb;.    
e960: 20 20 61 4f 70 5b 31 5d 2e 70 32 20 3d 20 69 43    aOp[1].p2 = iC
e970: 6f 6f 6b 69 65 3b 0a 20 20 20 20 20 20 61 4f 70  ookie;.      aOp
e980: 5b 31 5d 2e 70 33 20 3d 20 73 71 6c 69 74 65 33  [1].p3 = sqlite3
e990: 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20  Atoi(zRight);.  
e9a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
e9b0: 2a 20 52 65 61 64 20 74 68 65 20 73 70 65 63 69  * Read the speci
e9c0: 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75  fied cookie valu
e9d0: 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69  e */.      stati
e9e0: 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
e9f0: 73 74 20 72 65 61 64 43 6f 6f 6b 69 65 5b 5d 20  st readCookie[] 
ea00: 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50  = {.        { OP
ea10: 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20  _Transaction,   
ea20: 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20    0,  0,  0},   
ea30: 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20   /* 0 */.       
ea40: 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65   { OP_ReadCookie
ea50: 2c 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20 30  ,      0,  1,  0
ea60: 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20  },    /* 1 */.  
ea70: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c        { OP_Resul
ea80: 74 52 6f 77 2c 20 20 20 20 20 20 20 31 2c 20 20  tRow,       1,  
ea90: 31 2c 20 20 30 7d 0a 20 20 20 20 20 20 7d 3b 0a  1,  0}.      };.
eaa0: 20 20 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f        VdbeOp *aO
eab0: 70 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  p;.      sqlite3
eac0: 56 64 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c  VdbeVerifyNoMall
ead0: 6f 63 52 65 71 75 69 72 65 64 28 76 2c 20 41 72  ocRequired(v, Ar
eae0: 72 61 79 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b  raySize(readCook
eaf0: 69 65 29 29 3b 0a 20 20 20 20 20 20 61 4f 70 20  ie));.      aOp 
eb00: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
eb10: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
eb20: 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65 29 2c  ize(readCookie),
eb30: 72 65 61 64 43 6f 6f 6b 69 65 2c 30 29 3b 0a 20  readCookie,0);. 
eb40: 20 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46       if( ONLY_IF
eb50: 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28  _REALLOC_STRESS(
eb60: 61 4f 70 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b  aOp==0) ) break;
eb70: 0a 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31  .      aOp[0].p1
eb80: 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 61 4f   = iDb;.      aO
eb90: 70 5b 31 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20  p[1].p1 = iDb;. 
eba0: 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70 33 20 3d       aOp[1].p3 =
ebb0: 20 69 43 6f 6f 6b 69 65 3b 0a 20 20 20 20 20 20   iCookie;.      
ebc0: 73 71 6c 69 74 65 33 56 64 62 65 52 65 75 73 61  sqlite3VdbeReusa
ebd0: 62 6c 65 28 76 29 3b 0a 20 20 20 20 7d 0a 20 20  ble(v);.    }.  
ebe0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
ebf0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
ec00: 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f  _SCHEMA_VERSION_
ec10: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e  PRAGMAS */..#ifn
ec20: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
ec30: 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49  COMPILEOPTION_DI
ec40: 41 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  AGS.  /*.  **   
ec50: 50 52 41 47 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f  PRAGMA compile_o
ec60: 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a 2a  ptions.  **.  **
ec70: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65   Return the name
ec80: 73 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  s of all compile
ec90: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 75 73  -time options us
eca0: 65 64 20 69 6e 20 74 68 69 73 20 62 75 69 6c 64  ed in this build
ecb0: 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70 74 69 6f  ,.  ** one optio
ecc0: 6e 20 70 65 72 20 72 6f 77 2e 0a 20 20 2a 2f 0a  n per row..  */.
ecd0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43    case PragTyp_C
ece0: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a 20  OMPILE_OPTIONS: 
ecf0: 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b  {.    int i = 0;
ed00: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
ed10: 2a 7a 4f 70 74 3b 0a 20 20 20 20 70 50 61 72 73  *zOpt;.    pPars
ed20: 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20 20  e->nMem = 1;.   
ed30: 20 77 68 69 6c 65 28 20 28 7a 4f 70 74 20 3d 20   while( (zOpt = 
ed40: 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f  sqlite3_compileo
ed50: 70 74 69 6f 6e 5f 67 65 74 28 69 2b 2b 29 29 21  ption_get(i++))!
ed60: 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
ed70: 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e  te3VdbeLoadStrin
ed80: 67 28 76 2c 20 31 2c 20 7a 4f 70 74 29 3b 0a 20  g(v, 1, zOpt);. 
ed90: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
eda0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
edb0: 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20  ultRow, 1, 1);. 
edc0: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
edd0: 56 64 62 65 52 65 75 73 61 62 6c 65 28 76 29 3b  VdbeReusable(v);
ede0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
edf0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
ee00: 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f  MIT_COMPILEOPTIO
ee10: 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a 23 69 66 6e  N_DIAGS */..#ifn
ee20: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
ee30: 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  WAL.  /*.  **   
ee40: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
ee50: 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 20 3d  wal_checkpoint =
ee60: 20 70 61 73 73 69 76 65 7c 66 75 6c 6c 7c 72 65   passive|full|re
ee70: 73 74 61 72 74 7c 74 72 75 6e 63 61 74 65 0a 20  start|truncate. 
ee80: 20 2a 2a 0a 20 20 2a 2a 20 43 68 65 63 6b 70 6f   **.  ** Checkpo
ee90: 69 6e 74 20 74 68 65 20 64 61 74 61 62 61 73 65  int the database
eea0: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
eeb0: 61 67 54 79 70 5f 57 41 4c 5f 43 48 45 43 4b 50  agTyp_WAL_CHECKP
eec0: 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20  OINT: {.    int 
eed0: 69 42 74 20 3d 20 28 70 49 64 32 2d 3e 7a 3f 69  iBt = (pId2->z?i
eee0: 44 62 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  Db:SQLITE_MAX_AT
eef0: 54 41 43 48 45 44 29 3b 0a 20 20 20 20 69 6e 74  TACHED);.    int
ef00: 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f   eMode = SQLITE_
ef10: 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49  CHECKPOINT_PASSI
ef20: 56 45 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  VE;.    if( zRig
ef30: 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ht ){.      if( 
ef40: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
ef50: 52 69 67 68 74 2c 20 22 66 75 6c 6c 22 29 3d 3d  Right, "full")==
ef60: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f  0 ){.        eMo
ef70: 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43  de = SQLITE_CHEC
ef80: 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3b 0a 20 20 20  KPOINT_FULL;.   
ef90: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c     }else if( sql
efa0: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67  ite3StrICmp(zRig
efb0: 68 74 2c 20 22 72 65 73 74 61 72 74 22 29 3d 3d  ht, "restart")==
efc0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f  0 ){.        eMo
efd0: 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43  de = SQLITE_CHEC
efe0: 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 3b 0a  KPOINT_RESTART;.
eff0: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
f000: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
f010: 52 69 67 68 74 2c 20 22 74 72 75 6e 63 61 74 65  Right, "truncate
f020: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
f030: 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f   eMode = SQLITE_
f040: 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43  CHECKPOINT_TRUNC
f050: 41 54 45 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ATE;.      }.   
f060: 20 7d 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e   }.    pParse->n
f070: 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c  Mem = 3;.    sql
f080: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
f090: 2c 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 2c  , OP_Checkpoint,
f0a0: 20 69 42 74 2c 20 65 4d 6f 64 65 2c 20 31 29 3b   iBt, eMode, 1);
f0b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
f0c0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
f0d0: 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20  ultRow, 1, 3);. 
f0e0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 2f   }.  break;..  /
f0f0: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
f100: 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69  wal_autocheckpoi
f110: 6e 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  nt.  **   PRAGMA
f120: 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f   wal_autocheckpo
f130: 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a  int = N.  **.  *
f140: 2a 20 43 6f 6e 66 69 67 75 72 65 20 61 20 64 61  * Configure a da
f150: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
f160: 6e 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c  n to automatical
f170: 6c 79 20 63 68 65 63 6b 70 6f 69 6e 74 20 61 20  ly checkpoint a 
f180: 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 61 66  database.  ** af
f190: 74 65 72 20 61 63 63 75 6d 75 6c 61 74 69 6e 67  ter accumulating
f1a0: 20 4e 20 66 72 61 6d 65 73 20 69 6e 20 74 68 65   N frames in the
f1b0: 20 6c 6f 67 2e 20 4f 72 20 71 75 65 72 79 20 66   log. Or query f
f1c0: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 76  or the current v
f1d0: 61 6c 75 65 0a 20 20 2a 2a 20 6f 66 20 4e 2e 0a  alue.  ** of N..
f1e0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
f1f0: 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43  Typ_WAL_AUTOCHEC
f200: 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69 66  KPOINT: {.    if
f210: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
f220: 20 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f 61 75    sqlite3_wal_au
f230: 74 6f 63 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c  tocheckpoint(db,
f240: 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
f250: 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ght));.    }.   
f260: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
f270: 28 76 2c 20 0a 20 20 20 20 20 20 20 64 62 2d 3e  (v, .       db->
f280: 78 57 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71  xWalCallback==sq
f290: 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48  lite3WalDefaultH
f2a0: 6f 6f 6b 20 3f 20 0a 20 20 20 20 20 20 20 20 20  ook ? .         
f2b0: 20 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f    SQLITE_PTR_TO_
f2c0: 49 4e 54 28 64 62 2d 3e 70 57 61 6c 41 72 67 29  INT(db->pWalArg)
f2d0: 20 3a 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65   : 0);.  }.  bre
f2e0: 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a  ak;.#endif..  /*
f2f0: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 73 68  .  **  PRAGMA sh
f300: 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a  rink_memory.  **
f310: 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41  .  ** IMPLEMENTA
f320: 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 33 34 34 35  TION-OF: R-23445
f330: 2d 34 36 31 30 39 20 54 68 69 73 20 70 72 61 67  -46109 This prag
f340: 6d 61 20 63 61 75 73 65 73 20 74 68 65 20 64 61  ma causes the da
f350: 74 61 62 61 73 65 0a 20 20 2a 2a 20 63 6f 6e 6e  tabase.  ** conn
f360: 65 63 74 69 6f 6e 20 6f 6e 20 77 68 69 63 68 20  ection on which 
f370: 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 74 6f  it is invoked to
f380: 20 66 72 65 65 20 75 70 20 61 73 20 6d 75 63 68   free up as much
f390: 20 6d 65 6d 6f 72 79 20 61 73 20 69 74 0a 20 20   memory as it.  
f3a0: 2a 2a 20 63 61 6e 2c 20 62 79 20 63 61 6c 6c 69  ** can, by calli
f3b0: 6e 67 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65  ng sqlite3_db_re
f3c0: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 2e 0a  lease_memory()..
f3d0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
f3e0: 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52  Typ_SHRINK_MEMOR
f3f0: 59 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  Y: {.    sqlite3
f400: 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  _db_release_memo
f410: 72 79 28 64 62 29 3b 0a 20 20 20 20 62 72 65 61  ry(db);.    brea
f420: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
f430: 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79 5f  *   PRAGMA busy_
f440: 74 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20 20 50  timeout.  **   P
f450: 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f  RAGMA busy_timeo
f460: 75 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  ut = N.  **.  **
f470: 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f 62 75   Call sqlite3_bu
f480: 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 4e  sy_timeout(db, N
f490: 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 63  ).  Return the c
f4a0: 75 72 72 65 6e 74 20 74 69 6d 65 6f 75 74 20 76  urrent timeout v
f4b0: 61 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f 6e 65  alue.  ** if one
f4c0: 20 69 73 20 73 65 74 2e 20 20 49 66 20 6e 6f 20   is set.  If no 
f4d0: 62 75 73 79 20 68 61 6e 64 6c 65 72 20 6f 72 20  busy handler or 
f4e0: 61 20 64 69 66 66 65 72 65 6e 74 20 62 75 73 79  a different busy
f4f0: 20 68 61 6e 64 6c 65 72 20 69 73 20 73 65 74 0a   handler is set.
f500: 20 20 2a 2a 20 74 68 65 6e 20 30 20 69 73 20 72    ** then 0 is r
f510: 65 74 75 72 6e 65 64 2e 20 20 53 65 74 74 69 6e  eturned.  Settin
f520: 67 20 74 68 65 20 62 75 73 79 5f 74 69 6d 65 6f  g the busy_timeo
f530: 75 74 20 74 6f 20 30 20 6f 72 20 6e 65 67 61 74  ut to 0 or negat
f540: 69 76 65 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  ive.  ** disable
f550: 73 20 74 68 65 20 74 69 6d 65 6f 75 74 2e 0a 20  s the timeout.. 
f560: 20 2a 2f 0a 20 20 2f 2a 63 61 73 65 20 50 72 61   */.  /*case Pra
f570: 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55  gTyp_BUSY_TIMEOU
f580: 54 2a 2f 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20  T*/ default: {. 
f590: 20 20 20 61 73 73 65 72 74 28 20 70 50 72 61 67     assert( pPrag
f5a0: 6d 61 2d 3e 65 50 72 61 67 54 79 70 3d 3d 50 72  ma->ePragTyp==Pr
f5b0: 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f  agTyp_BUSY_TIMEO
f5c0: 55 54 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  UT );.    if( zR
f5d0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71  ight ){.      sq
f5e0: 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f  lite3_busy_timeo
f5f0: 75 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74  ut(db, sqlite3At
f600: 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  oi(zRight));.   
f610: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
f620: 67 6c 65 49 6e 74 28 76 2c 20 64 62 2d 3e 62 75  gleInt(v, db->bu
f630: 73 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20 20 20  syTimeout);.    
f640: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
f650: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73  .  **   PRAGMA s
f660: 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 0a 20  oft_heap_limit. 
f670: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66   **   PRAGMA sof
f680: 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3d 20 4e  t_heap_limit = N
f690: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45  .  **.  ** IMPLE
f6a0: 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
f6b0: 32 36 33 34 33 2d 34 35 39 33 30 20 54 68 69 73  26343-45930 This
f6c0: 20 70 72 61 67 6d 61 20 69 6e 76 6f 6b 65 73 20   pragma invokes 
f6d0: 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  the.  ** sqlite3
f6e0: 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
f6f0: 36 34 28 29 20 69 6e 74 65 72 66 61 63 65 20 77  64() interface w
f700: 69 74 68 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ith the argument
f710: 20 4e 2c 20 69 66 20 4e 20 69 73 0a 20 20 2a 2a   N, if N is.  **
f720: 20 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 69   specified and i
f730: 73 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  s a non-negative
f740: 20 69 6e 74 65 67 65 72 2e 0a 20 20 2a 2a 20 49   integer..  ** I
f750: 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
f760: 3a 20 52 2d 36 34 34 35 31 2d 30 37 31 36 33 20  : R-64451-07163 
f770: 54 68 65 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69  The soft_heap_li
f780: 6d 69 74 20 70 72 61 67 6d 61 20 61 6c 77 61 79  mit pragma alway
f790: 73 0a 20 20 2a 2a 20 72 65 74 75 72 6e 73 20 74  s.  ** returns t
f7a0: 68 65 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20  he same integer 
f7b0: 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65  that would be re
f7c0: 74 75 72 6e 65 64 20 62 79 20 74 68 65 0a 20 20  turned by the.  
f7d0: 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f  ** sqlite3_soft_
f7e0: 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d 31 29  heap_limit64(-1)
f7f0: 20 43 2d 6c 61 6e 67 75 61 67 65 20 66 75 6e 63   C-language func
f800: 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  tion..  */.  cas
f810: 65 20 50 72 61 67 54 79 70 5f 53 4f 46 54 5f 48  e PragTyp_SOFT_H
f820: 45 41 50 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20  EAP_LIMIT: {.   
f830: 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e   sqlite3_int64 N
f840: 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
f850: 20 26 26 20 73 71 6c 69 74 65 33 44 65 63 4f 72   && sqlite3DecOr
f860: 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c  HexToI64(zRight,
f870: 20 26 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20   &N)==SQLITE_OK 
f880: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
f890: 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
f8a0: 36 34 28 4e 29 3b 0a 20 20 20 20 7d 0a 20 20 20  64(N);.    }.   
f8b0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
f8c0: 28 76 2c 20 73 71 6c 69 74 65 33 5f 73 6f 66 74  (v, sqlite3_soft
f8d0: 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d 31  _heap_limit64(-1
f8e0: 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ));.    break;. 
f8f0: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20   }..  /*.  **   
f900: 50 52 41 47 4d 41 20 74 68 72 65 61 64 73 0a 20  PRAGMA threads. 
f910: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 68 72   **   PRAGMA thr
f920: 65 61 64 73 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20  eads = N.  **.  
f930: 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65  ** Configure the
f940: 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
f950: 6f 66 20 77 6f 72 6b 65 72 20 74 68 72 65 61 64  of worker thread
f960: 73 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 6e  s.  Return the n
f970: 65 77 0a 20 20 2a 2a 20 6d 61 78 69 6d 75 6d 2c  ew.  ** maximum,
f980: 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65 20   which might be 
f990: 6c 65 73 73 20 74 68 61 6e 20 72 65 71 75 65 73  less than reques
f9a0: 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ted..  */.  case
f9b0: 20 50 72 61 67 54 79 70 5f 54 48 52 45 41 44 53   PragTyp_THREADS
f9c0: 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  : {.    sqlite3_
f9d0: 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66 28  int64 N;.    if(
f9e0: 20 7a 52 69 67 68 74 0a 20 20 20 20 20 26 26 20   zRight.     && 
f9f0: 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
fa00: 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e 29  oI64(zRight, &N)
fa10: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  ==SQLITE_OK.    
fa20: 20 26 26 20 4e 3e 3d 30 0a 20 20 20 20 29 7b 0a   && N>=0.    ){.
fa30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69        sqlite3_li
fa40: 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c  mit(db, SQLITE_L
fa50: 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  IMIT_WORKER_THRE
fa60: 41 44 53 2c 20 28 69 6e 74 29 28 4e 26 30 78 37  ADS, (int)(N&0x7
fa70: 66 66 66 66 66 66 66 29 29 3b 0a 20 20 20 20 7d  fffffff));.    }
fa80: 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
fa90: 65 49 6e 74 28 76 2c 20 73 71 6c 69 74 65 33 5f  eInt(v, sqlite3_
faa0: 6c 69 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45  limit(db, SQLITE
fab0: 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48  _LIMIT_WORKER_TH
fac0: 52 45 41 44 53 2c 20 2d 31 29 29 3b 0a 20 20 20  READS, -1));.   
fad0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66   break;.  }..#if
fae0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
faf0: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
fb00: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20  d(SQLITE_TEST). 
fb10: 20 2f 2a 0a 20 20 2a 2a 20 52 65 70 6f 72 74 20   /*.  ** Report 
fb20: 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74  the current stat
fb30: 65 20 6f 66 20 66 69 6c 65 20 6c 6f 67 73 20 66  e of file logs f
fb40: 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73  or all databases
fb50: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
fb60: 67 54 79 70 5f 4c 4f 43 4b 5f 53 54 41 54 55 53  gTyp_LOCK_STATUS
fb70: 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
fb80: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
fb90: 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20   azLockName[] = 
fba0: 7b 0a 20 20 20 20 20 20 22 75 6e 6c 6f 63 6b 65  {.      "unlocke
fbb0: 64 22 2c 20 22 73 68 61 72 65 64 22 2c 20 22 72  d", "shared", "r
fbc0: 65 73 65 72 76 65 64 22 2c 20 22 70 65 6e 64 69  eserved", "pendi
fbd0: 6e 67 22 2c 20 22 65 78 63 6c 75 73 69 76 65 22  ng", "exclusive"
fbe0: 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20  .    };.    int 
fbf0: 69 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  i;.    pParse->n
fc00: 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 66 6f 72  Mem = 2;.    for
fc10: 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
fc20: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74 72   i++){.      Btr
fc30: 65 65 20 2a 70 42 74 3b 0a 20 20 20 20 20 20 63  ee *pBt;.      c
fc40: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 74  onst char *zStat
fc50: 65 20 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20  e = "unknown";. 
fc60: 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20       int j;.    
fc70: 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d    if( db->aDb[i]
fc80: 2e 7a 44 62 53 4e 61 6d 65 3d 3d 30 20 29 20 63  .zDbSName==0 ) c
fc90: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 70  ontinue;.      p
fca0: 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  Bt = db->aDb[i].
fcb0: 70 42 74 3b 0a 20 20 20 20 20 20 69 66 28 20 70  pBt;.      if( p
fcc0: 42 74 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33  Bt==0 || sqlite3
fcd0: 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3d  BtreePager(pBt)=
fce0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 53  =0 ){.        zS
fcf0: 74 61 74 65 20 3d 20 22 63 6c 6f 73 65 64 22 3b  tate = "closed";
fd00: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
fd10: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f   sqlite3_file_co
fd20: 6e 74 72 6f 6c 28 64 62 2c 20 69 20 3f 20 64 62  ntrol(db, i ? db
fd30: 2d 3e 61 44 62 5b 69 5d 2e 7a 44 62 53 4e 61 6d  ->aDb[i].zDbSNam
fd40: 65 20 3a 20 30 2c 20 0a 20 20 20 20 20 20 20 20  e : 0, .        
fd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
fd70: 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54  ITE_FCNTL_LOCKST
fd80: 41 54 45 2c 20 26 6a 29 3d 3d 53 51 4c 49 54 45  ATE, &j)==SQLITE
fd90: 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
fda0: 7a 53 74 61 74 65 20 3d 20 61 7a 4c 6f 63 6b 4e  zState = azLockN
fdb0: 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 0a  ame[j];.      }.
fdc0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
fdd0: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c  eMultiLoad(v, 1,
fde0: 20 22 73 73 22 2c 20 64 62 2d 3e 61 44 62 5b 69   "ss", db->aDb[i
fdf0: 5d 2e 7a 44 62 53 4e 61 6d 65 2c 20 7a 53 74 61  ].zDbSName, zSta
fe00: 74 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  te);.      sqlit
fe10: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
fe20: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
fe30: 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62   2);.    }.    b
fe40: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
fe50: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
fe60: 48 41 53 5f 43 4f 44 45 43 0a 20 20 63 61 73 65  HAS_CODEC.  case
fe70: 20 50 72 61 67 54 79 70 5f 4b 45 59 3a 20 7b 0a   PragTyp_KEY: {.
fe80: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
fe90: 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28   sqlite3_key_v2(
fea0: 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c  db, zDb, zRight,
feb0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
fec0: 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62  (zRight));.    b
fed0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65  reak;.  }.  case
fee0: 20 50 72 61 67 54 79 70 5f 52 45 4b 45 59 3a 20   PragTyp_REKEY: 
fef0: 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
ff00: 20 29 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79   ) sqlite3_rekey
ff10: 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69  _v2(db, zDb, zRi
ff20: 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c  ght, sqlite3Strl
ff30: 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20  en30(zRight));. 
ff40: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
ff50: 63 61 73 65 20 50 72 61 67 54 79 70 5f 48 45 58  case PragTyp_HEX
ff60: 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  KEY: {.    if( z
ff70: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 75  Right ){.      u
ff80: 38 20 69 42 79 74 65 3b 0a 20 20 20 20 20 20 69  8 iByte;.      i
ff90: 6e 74 20 69 3b 0a 20 20 20 20 20 20 63 68 61 72  nt i;.      char
ffa0: 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20 20 20 20   zKey[40];.     
ffb0: 20 66 6f 72 28 69 3d 30 2c 20 69 42 79 74 65 3d   for(i=0, iByte=
ffc0: 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 4b 65 79  0; i<sizeof(zKey
ffd0: 29 2a 32 20 26 26 20 73 71 6c 69 74 65 33 49 73  )*2 && sqlite3Is
ffe0: 78 64 69 67 69 74 28 7a 52 69 67 68 74 5b 69 5d  xdigit(zRight[i]
fff0: 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ); i++){.       
10000 20 69 42 79 74 65 20 3d 20 28 69 42 79 74 65 3c   iByte = (iByte<
10010 3c 34 29 20 2b 20 73 71 6c 69 74 65 33 48 65 78  <4) + sqlite3Hex
10020 54 6f 49 6e 74 28 7a 52 69 67 68 74 5b 69 5d 29  ToInt(zRight[i])
10030 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 69  ;.        if( (i
10040 26 31 29 21 3d 30 20 29 20 7a 4b 65 79 5b 69 2f  &1)!=0 ) zKey[i/
10050 32 5d 20 3d 20 69 42 79 74 65 3b 0a 20 20 20 20  2] = iByte;.    
10060 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 7a    }.      if( (z
10070 4c 65 66 74 5b 33 5d 20 26 20 30 78 66 29 3d 3d  Left[3] & 0xf)==
10080 30 78 62 20 29 7b 0a 20 20 20 20 20 20 20 20 73  0xb ){.        s
10090 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62  qlite3_key_v2(db
100a0 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32  , zDb, zKey, i/2
100b0 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
100c0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
100d0 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62  rekey_v2(db, zDb
100e0 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20  , zKey, i/2);.  
100f0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
10100 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69  break;.  }.#endi
10110 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
10120 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 20  LITE_HAS_CODEC) 
10130 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
10140 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 29 0a  E_ENABLE_CEROD).
10150 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 41    case PragTyp_A
10160 43 54 49 56 41 54 45 5f 45 58 54 45 4e 53 49 4f  CTIVATE_EXTENSIO
10170 4e 53 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29  NS: if( zRight )
10180 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
10190 48 41 53 5f 43 4f 44 45 43 0a 20 20 20 20 69 66  HAS_CODEC.    if
101a0 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  ( sqlite3StrNICm
101b0 70 28 7a 52 69 67 68 74 2c 20 22 73 65 65 2d 22  p(zRight, "see-"
101c0 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  , 4)==0 ){.     
101d0 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74   sqlite3_activat
101e0 65 5f 73 65 65 28 26 7a 52 69 67 68 74 5b 34 5d  e_see(&zRight[4]
101f0 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
10200 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
10210 41 42 4c 45 5f 43 45 52 4f 44 0a 20 20 20 20 69  ABLE_CEROD.    i
10220 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  f( sqlite3StrNIC
10230 6d 70 28 7a 52 69 67 68 74 2c 20 22 63 65 72 6f  mp(zRight, "cero
10240 64 2d 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20 20  d-", 6)==0 ){.  
10250 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69      sqlite3_acti
10260 76 61 74 65 5f 63 65 72 6f 64 28 26 7a 52 69 67  vate_cerod(&zRig
10270 68 74 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a 23 65  ht[6]);.    }.#e
10280 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ndif.  }.  break
10290 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 7d 20 2f 2a  ;.#endif..  } /*
102a0 20 45 6e 64 20 6f 66 20 74 68 65 20 50 52 41 47   End of the PRAG
102b0 4d 41 20 73 77 69 74 63 68 20 2a 2f 0a 0a 70 72  MA switch */..pr
102c0 61 67 6d 61 5f 6f 75 74 3a 0a 20 20 73 71 6c 69  agma_out:.  sqli
102d0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 4c  te3DbFree(db, zL
102e0 65 66 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 44  eft);.  sqlite3D
102f0 62 46 72 65 65 28 64 62 2c 20 7a 52 69 67 68 74  bFree(db, zRight
10300 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  );.}..#endif /* 
10310 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
10320 4d 41 20 2a 2f 0a                                MA */.