/ Hex Artifact Content
Login

Artifact 35619c4e9f79049cce964ef8ed9710ae3e5b9ca1:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 23 69  sqliteInt.h"..#i
01d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
01e0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
01f0: 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
0200: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
0210: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
0220: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
0230: 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
0240: 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
0250: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
0260: 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
0270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
02d0: 65 20 22 70 72 61 67 6d 61 2e 68 22 20 69 6e 63  e "pragma.h" inc
02e0: 6c 75 64 65 20 66 69 6c 65 20 69 73 20 61 6e 20  lude file is an 
02f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65  automatically ge
0300: 6e 65 72 61 74 65 64 20 66 69 6c 65 20 74 68 61  nerated file tha
0310: 74 0a 2a 2a 20 74 68 61 74 20 69 6e 63 6c 75 64  t.** that includ
0320: 65 73 20 74 68 65 20 50 72 61 67 54 79 70 65 5f  es the PragType_
0330: 58 58 58 58 20 6d 61 63 72 6f 20 64 65 66 69 6e  XXXX macro defin
0340: 69 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 61  itions and the a
0350: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 0a 2a 2a 20  PragmaName[].** 
0360: 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 65 6e  object.  This en
0370: 73 75 72 65 73 20 74 68 61 74 20 74 68 65 20 61  sures that the a
0380: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 20 74 61 62  PragmaName[] tab
0390: 6c 65 20 69 73 20 61 72 72 61 6e 67 65 64 20 69  le is arranged i
03a0: 6e 0a 2a 2a 20 6c 65 78 69 63 6f 67 72 61 70 68  n.** lexicograph
03b0: 69 63 61 6c 20 6f 72 64 65 72 20 74 6f 20 66 61  ical order to fa
03c0: 63 69 6c 69 74 79 20 61 20 62 69 6e 61 72 79 20  cility a binary 
03d0: 73 65 61 72 63 68 20 6f 66 20 74 68 65 20 70 72  search of the pr
03e0: 61 67 6d 61 20 6e 61 6d 65 2e 0a 2a 2a 20 44 6f  agma name..** Do
03f0: 20 6e 6f 74 20 65 64 69 74 20 70 72 61 67 6d 61   not edit pragma
0400: 2e 68 20 64 69 72 65 63 74 6c 79 2e 20 20 45 64  .h directly.  Ed
0410: 69 74 20 61 6e 64 20 72 65 72 75 6e 20 74 68 65  it and rerun the
0420: 20 73 63 72 69 70 74 20 69 6e 20 61 74 20 0a 2a   script in at .*
0430: 2a 20 2e 2e 2f 74 6f 6f 6c 2f 6d 6b 70 72 61 67  * ../tool/mkprag
0440: 6d 61 74 61 62 2e 74 63 6c 2e 20 2a 2f 0a 23 69  matab.tcl. */.#i
0450: 6e 63 6c 75 64 65 20 22 70 72 61 67 6d 61 2e 68  nclude "pragma.h
0460: 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  "../*.** Interpr
0470: 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  et the given str
0480: 69 6e 67 20 61 73 20 61 20 73 61 66 65 74 79 20  ing as a safety 
0490: 6c 65 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30  level.  Return 0
04a0: 20 66 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66   for OFF,.** 1 f
04b0: 6f 72 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 2c  or ON or NORMAL,
04c0: 20 32 20 66 6f 72 20 46 55 4c 4c 2c 20 61 6e 64   2 for FULL, and
04d0: 20 33 20 66 6f 72 20 45 58 54 52 41 2e 20 20 52   3 for EXTRA.  R
04e0: 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e 20 65  eturn 1 for an e
04f0: 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e 72 65  mpty or .** unre
0500: 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e 67 20  cognized string 
0510: 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65 20 46  argument.  The F
0520: 55 4c 4c 20 61 6e 64 20 45 58 54 52 41 20 6f 70  ULL and EXTRA op
0530: 74 69 6f 6e 20 69 73 20 64 69 73 61 6c 6c 6f 77  tion is disallow
0540: 65 64 0a 2a 2a 20 69 66 20 74 68 65 20 6f 6d 69  ed.** if the omi
0550: 74 46 75 6c 6c 20 70 61 72 61 6d 65 74 65 72 20  tFull parameter 
0560: 69 74 20 31 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  it 1..**.** Note
0570: 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 73   that the values
0580: 20 72 65 74 75 72 6e 65 64 20 61 72 65 20 6f 6e   returned are on
0590: 65 20 6c 65 73 73 20 74 68 61 74 20 74 68 65 20  e less that the 
05a0: 76 61 6c 75 65 73 20 74 68 61 74 0a 2a 2a 20 73  values that.** s
05b0: 68 6f 75 6c 64 20 62 65 20 70 61 73 73 65 64 20  hould be passed 
05c0: 69 6e 74 6f 20 73 71 6c 69 74 65 33 42 74 72 65  into sqlite3Btre
05d0: 65 53 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28  eSetSafetyLevel(
05e0: 29 2e 20 20 54 68 65 20 69 73 20 64 6f 6e 65 0a  ).  The is done.
05f0: 2a 2a 20 74 6f 20 73 75 70 70 6f 72 74 20 6c 65  ** to support le
0600: 67 61 63 79 20 53 51 4c 20 63 6f 64 65 2e 20 20  gacy SQL code.  
0610: 54 68 65 20 73 61 66 65 74 79 20 6c 65 76 65 6c  The safety level
0620: 20 75 73 65 64 20 74 6f 20 62 65 20 62 6f 6f 6c   used to be bool
0630: 65 61 6e 0a 2a 2a 20 61 6e 64 20 6f 6c 64 65 72  ean.** and older
0640: 20 73 63 72 69 70 74 73 20 6d 61 79 20 68 61 76   scripts may hav
0650: 65 20 75 73 65 64 20 6e 75 6d 62 65 72 73 20 30  e used numbers 0
0660: 20 66 6f 72 20 4f 46 46 20 61 6e 64 20 31 20 66   for OFF and 1 f
0670: 6f 72 20 4f 4e 2e 0a 2a 2f 0a 73 74 61 74 69 63  or ON..*/.static
0680: 20 75 38 20 67 65 74 53 61 66 65 74 79 4c 65 76   u8 getSafetyLev
0690: 65 6c 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  el(const char *z
06a0: 2c 20 69 6e 74 20 6f 6d 69 74 46 75 6c 6c 2c 20  , int omitFull, 
06b0: 75 38 20 64 66 6c 74 29 7b 0a 20 20 20 20 20 20  u8 dflt){.      
06c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
06d0: 20 20 20 20 20 20 20 2f 2a 20 31 32 33 34 35 36         /* 123456
06e0: 37 38 39 20 31 32 33 34 35 36 37 38 39 20 31 32  789 123456789 12
06f0: 33 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f  3 */.  static co
0700: 6e 73 74 20 63 68 61 72 20 7a 54 65 78 74 5b 5d  nst char zText[]
0710: 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65 79 65 73   = "onoffalseyes
0720: 74 72 75 65 78 74 72 61 66 75 6c 6c 22 3b 0a 20  truextrafull";. 
0730: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38   static const u8
0740: 20 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c   iOffset[] = {0,
0750: 20 31 2c 20 32 2c 20 20 34 2c 20 20 20 20 39 2c   1, 2,  4,    9,
0760: 20 20 31 32 2c 20 20 31 35 2c 20 20 20 32 30 7d    12,  15,   20}
0770: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
0780: 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d 20 3d 20   u8 iLength[] = 
0790: 7b 32 2c 20 32 2c 20 33 2c 20 20 35 2c 20 20 20  {2, 2, 3,  5,   
07a0: 20 33 2c 20 20 20 34 2c 20 20 20 35 2c 20 20 20   3,   4,   5,   
07b0: 20 34 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f   4};.  static co
07c0: 6e 73 74 20 75 38 20 69 56 61 6c 75 65 5b 5d 20  nst u8 iValue[] 
07d0: 3d 20 20 7b 31 2c 20 30 2c 20 30 2c 20 20 30 2c  =  {1, 0, 0,  0,
07e0: 20 20 20 20 31 2c 20 20 20 31 2c 20 20 20 33 2c      1,   1,   3,
07f0: 20 20 20 20 32 7d 3b 0a 20 20 20 20 20 20 20 20      2};.        
0800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0810: 20 20 20 20 2f 2a 20 6f 6e 20 6e 6f 20 6f 66 66      /* on no off
0820: 20 66 61 6c 73 65 20 79 65 73 20 74 72 75 65 20   false yes true 
0830: 65 78 74 72 61 20 66 75 6c 6c 20 2a 2f 0a 20 20  extra full */.  
0840: 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28 20  int i, n;.  if( 
0850: 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a  sqlite3Isdigit(*
0860: 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  z) ){.    return
0870: 20 28 75 38 29 73 71 6c 69 74 65 33 41 74 6f 69   (u8)sqlite3Atoi
0880: 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 73  (z);.  }.  n = s
0890: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
08a0: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
08b0: 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e 67 74  ArraySize(iLengt
08c0: 68 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  h); i++){.    if
08d0: 28 20 69 4c 65 6e 67 74 68 5b 69 5d 3d 3d 6e 20  ( iLength[i]==n 
08e0: 26 26 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  && sqlite3StrNIC
08f0: 6d 70 28 26 7a 54 65 78 74 5b 69 4f 66 66 73 65  mp(&zText[iOffse
0900: 74 5b 69 5d 5d 2c 7a 2c 6e 29 3d 3d 30 0a 20 20  t[i]],z,n)==0.  
0910: 20 20 20 26 26 20 28 21 6f 6d 69 74 46 75 6c 6c     && (!omitFull
0920: 20 7c 7c 20 69 56 61 6c 75 65 5b 69 5d 3c 3d 31   || iValue[i]<=1
0930: 29 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 72  ).    ){.      r
0940: 65 74 75 72 6e 20 69 56 61 6c 75 65 5b 69 5d 3b  eturn iValue[i];
0950: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
0960: 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a 2f 2a 0a  urn dflt;.}../*.
0970: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
0980: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
0990: 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
09a0: 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65 33 47  ..*/.u8 sqlite3G
09b0: 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20  etBoolean(const 
09c0: 63 68 61 72 20 2a 7a 2c 20 75 38 20 64 66 6c 74  char *z, u8 dflt
09d0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 67 65 74 53  ){.  return getS
09e0: 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c 31 2c 64  afetyLevel(z,1,d
09f0: 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 20 54  flt)!=0;.}../* T
0a00: 68 65 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  he sqlite3GetBoo
0a10: 6c 65 61 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  lean() function 
0a20: 69 73 20 75 73 65 64 20 62 79 20 6f 74 68 65 72  is used by other
0a30: 20 6d 6f 64 75 6c 65 73 20 62 75 74 20 74 68 65   modules but the
0a40: 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  .** remainder of
0a50: 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 73 70   this file is sp
0a60: 65 63 69 66 69 63 20 74 6f 20 50 52 41 47 4d 41  ecific to PRAGMA
0a70: 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 20 53 6f   processing.  So
0a80: 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20 72 65 73   omit.** the res
0a90: 74 20 6f 66 20 74 68 65 20 66 69 6c 65 20 69 66  t of the file if
0aa0: 20 50 52 41 47 4d 41 73 20 61 72 65 20 6f 6d 69   PRAGMAs are omi
0ab0: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
0ac0: 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ild..*/.#if !def
0ad0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
0ae0: 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a 2a 2a 20  _PRAGMA)../*.** 
0af0: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69  Interpret the gi
0b00: 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20  ven string as a 
0b10: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 76 61 6c  locking mode val
0b20: 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ue..*/.static in
0b30: 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65  t getLockingMode
0b40: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
0b50: 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20 20 20 20  .  if( z ){.    
0b60: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
0b70: 72 49 43 6d 70 28 7a 2c 20 22 65 78 63 6c 75 73  rICmp(z, "exclus
0b80: 69 76 65 22 29 20 29 20 72 65 74 75 72 6e 20 50  ive") ) return P
0b90: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
0ba0: 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20 20 20 20  _EXCLUSIVE;.    
0bb0: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
0bc0: 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72 6d 61 6c  rICmp(z, "normal
0bd0: 22 29 20 29 20 72 65 74 75 72 6e 20 50 41 47 45  ") ) return PAGE
0be0: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f  R_LOCKINGMODE_NO
0bf0: 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72 65 74 75  RMAL;.  }.  retu
0c00: 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  rn PAGER_LOCKING
0c10: 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d 0a 0a 23  MODE_QUERY;.}..#
0c20: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
0c30: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 2f 2a  IT_AUTOVACUUM./*
0c40: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
0c50: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
0c60: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
0c70: 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a 2a 0a   mode value..**.
0c80: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
0c90: 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f 6e 65 22   strings, "none"
0ca0: 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20 22 69 6e  , "full" and "in
0cb0: 63 72 65 6d 65 6e 74 61 6c 22 20 61 72 65 20 0a  cremental" are .
0cc0: 2a 2a 20 61 63 63 65 70 74 61 62 6c 65 2c 20 61  ** acceptable, a
0cd0: 73 20 61 72 65 20 74 68 65 69 72 20 6e 75 6d 65  s are their nume
0ce0: 72 69 63 20 65 71 75 69 76 61 6c 65 6e 74 73 3a  ric equivalents:
0cf0: 20 30 2c 20 31 20 61 6e 64 20 32 20 72 65 73 70   0, 1 and 2 resp
0d00: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 73 74 61  ectively..*/.sta
0d10: 74 69 63 20 69 6e 74 20 67 65 74 41 75 74 6f 56  tic int getAutoV
0d20: 61 63 75 75 6d 28 63 6f 6e 73 74 20 63 68 61 72  acuum(const char
0d30: 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20   *z){.  int i;. 
0d40: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
0d50: 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 6e 65 22  trICmp(z, "none"
0d60: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
0d70: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e 4f 4e 45  _AUTOVACUUM_NONE
0d80: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
0d90: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 66 75  e3StrICmp(z, "fu
0da0: 6c 6c 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ll") ) return BT
0db0: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 46  REE_AUTOVACUUM_F
0dc0: 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ULL;.  if( 0==sq
0dd0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
0de0: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 29 20 29  "incremental") )
0df0: 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41 55   return BTREE_AU
0e00: 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52 3b 0a 20  TOVACUUM_INCR;. 
0e10: 20 69 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69   i = sqlite3Atoi
0e20: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 75  (z);.  return (u
0e30: 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d 32 29 3f  8)((i>=0&&i<=2)?
0e40: 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  i:0);.}.#endif /
0e50: 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  * ifndef SQLITE_
0e60: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 20  OMIT_AUTOVACUUM 
0e70: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
0e80: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
0e90: 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  AGMAS./*.** Inte
0ea0: 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e 20  rpret the given 
0eb0: 73 74 72 69 6e 67 20 61 73 20 61 20 74 65 6d 70  string as a temp
0ec0: 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e 20 52 65   db location. Re
0ed0: 74 75 72 6e 20 31 20 66 6f 72 20 66 69 6c 65 0a  turn 1 for file.
0ee0: 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d 70 6f 72  ** backed tempor
0ef0: 61 72 79 20 64 61 74 61 62 61 73 65 73 2c 20 32  ary databases, 2
0f00: 20 66 6f 72 20 74 68 65 20 52 65 64 2d 42 6c 61   for the Red-Bla
0f10: 63 6b 20 74 72 65 65 20 69 6e 20 6d 65 6d 6f 72  ck tree in memor
0f20: 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 61 6e  y database.** an
0f30: 64 20 30 20 74 6f 20 75 73 65 20 74 68 65 20 63  d 0 to use the c
0f40: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66 61  ompile-time defa
0f50: 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ult..*/.static i
0f60: 6e 74 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28  nt getTempStore(
0f70: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a  const char *z){.
0f80: 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27 30 27 20    if( z[0]>='0' 
0f90: 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20 29 7b 0a  && z[0]<='2' ){.
0fa0: 20 20 20 20 72 65 74 75 72 6e 20 7a 5b 30 5d 20      return z[0] 
0fb0: 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69  - '0';.  }else i
0fc0: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
0fd0: 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d 3d 30 20  p(z, "file")==0 
0fe0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b  ){.    return 1;
0ff0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c  .  }else if( sql
1000: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22  ite3StrICmp(z, "
1010: 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29 7b 0a 20  memory")==0 ){. 
1020: 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d     return 2;.  }
1030: 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e  else{.    return
1040: 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66   0;.  }.}.#endif
1050: 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45 52   /* SQLITE_PAGER
1060: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
1070: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1080: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
1090: 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74 65 20  *.** Invalidate 
10a0: 74 65 6d 70 20 73 74 6f 72 61 67 65 2c 20 65 69  temp storage, ei
10b0: 74 68 65 72 20 77 68 65 6e 20 74 68 65 20 74 65  ther when the te
10c0: 6d 70 20 73 74 6f 72 61 67 65 20 69 73 20 63 68  mp storage is ch
10d0: 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d 20 64 65  anged.** from de
10e0: 66 61 75 6c 74 2c 20 6f 72 20 77 68 65 6e 20 27  fault, or when '
10f0: 66 69 6c 65 27 20 61 6e 64 20 74 68 65 20 74 65  file' and the te
1100: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
1110: 72 79 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ry has changed.*
1120: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 69 6e 76  /.static int inv
1130: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
1140: 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ge(Parse *pParse
1150: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
1160: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20   = pParse->db;. 
1170: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 31 5d 2e   if( db->aDb[1].
1180: 70 42 74 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  pBt!=0 ){.    if
1190: 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
11a0: 74 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65  t || sqlite3Btre
11b0: 65 49 73 49 6e 52 65 61 64 54 72 61 6e 73 28 64  eIsInReadTrans(d
11c0: 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 20 29  b->aDb[1].pBt) )
11d0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45  {.      sqlite3E
11e0: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
11f0: 22 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61  "temporary stora
1200: 67 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61  ge cannot be cha
1210: 6e 67 65 64 20 22 0a 20 20 20 20 20 20 20 20 22  nged ".        "
1220: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
1230: 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20  ansaction");.   
1240: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
1250: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
1260: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
1270: 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70  ose(db->aDb[1].p
1280: 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e 61 44 62  Bt);.    db->aDb
1290: 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a 20 20 20  [1].pBt = 0;.   
12a0: 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
12b0: 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
12c0: 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a 20 20 72  ion(db);.  }.  r
12d0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
12e0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
12f0: 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  ITE_PAGER_PRAGMA
1300: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
1310: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
1320: 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 66  PRAGMAS./*.** If
1330: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
1340: 73 65 20 69 73 20 6f 70 65 6e 2c 20 63 6c 6f 73  se is open, clos
1350: 65 20 69 74 20 61 6e 64 20 6d 61 72 6b 20 74 68  e it and mark th
1360: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
1370: 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69 6e 67 20  a.** as needing 
1380: 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54 68 69 73  reloading.  This
1390: 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 77 68   must be done wh
13a0: 65 6e 20 75 73 69 6e 67 20 74 68 65 20 53 51 4c  en using the SQL
13b0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 2a  ITE_TEMP_STORE.*
13c0: 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f 54 45 4d  * or DEFAULT_TEM
13d0: 50 5f 53 54 4f 52 45 20 70 72 61 67 6d 61 73 2e  P_STORE pragmas.
13e0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63  .*/.static int c
13f0: 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61 67 65  hangeTempStorage
1400: 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
1410: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 6f  const char *zSto
1420: 72 61 67 65 54 79 70 65 29 7b 0a 20 20 69 6e 74  rageType){.  int
1430: 20 74 73 20 3d 20 67 65 74 54 65 6d 70 53 74 6f   ts = getTempSto
1440: 72 65 28 7a 53 74 6f 72 61 67 65 54 79 70 65 29  re(zStorageType)
1450: 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  ;.  sqlite3 *db 
1460: 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20  = pParse->db;.  
1470: 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  if( db->temp_sto
1480: 72 65 3d 3d 74 73 20 29 20 72 65 74 75 72 6e 20  re==ts ) return 
1490: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28  SQLITE_OK;.  if(
14a0: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
14b0: 74 6f 72 61 67 65 28 20 70 50 61 72 73 65 20 29  torage( pParse )
14c0: 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
14d0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
14e0: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  TE_ERROR;.  }.  
14f0: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d  db->temp_store =
1500: 20 28 75 38 29 74 73 3b 0a 20 20 72 65 74 75 72   (u8)ts;.  retur
1510: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23  n SQLITE_OK;.}.#
1520: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
1530: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
1540: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  ../*.** Set the 
1550: 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 66 69 72  names of the fir
1560: 73 74 20 4e 20 63 6f 6c 75 6d 6e 73 20 74 6f 20  st N columns to 
1570: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 61 7a  the values in az
1580: 43 6f 6c 5b 5d 0a 2a 2f 0a 73 74 61 74 69 63 20  Col[].*/.static 
1590: 76 6f 69 64 20 73 65 74 41 6c 6c 43 6f 6c 75 6d  void setAllColum
15a0: 6e 4e 61 6d 65 73 28 0a 20 20 56 64 62 65 20 2a  nNames(.  Vdbe *
15b0: 76 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v,              
15c0: 20 2f 2a 20 54 68 65 20 71 75 65 72 79 20 75 6e   /* The query un
15d0: 64 65 72 20 63 6f 6e 73 74 72 75 63 74 69 6f 6e  der construction
15e0: 20 2a 2f 0a 20 20 69 6e 74 20 4e 2c 20 20 20 20   */.  int N,    
15f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1600: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
1610: 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  s */.  const cha
1620: 72 20 2a 2a 61 7a 43 6f 6c 20 20 20 20 20 2f 2a  r **azCol     /*
1630: 20 4e 61 6d 65 73 20 6f 66 20 63 6f 6c 75 6d 6e   Names of column
1640: 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b  s */.){.  int i;
1650: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
1660: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 4e 29 3b 0a  tNumCols(v, N);.
1670: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 3b 20    for(i=0; i<N; 
1680: 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i++){.    sqlite
1690: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
16a0: 76 2c 20 69 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, i, COLNAME_NA
16b0: 4d 45 2c 20 61 7a 43 6f 6c 5b 69 5d 2c 20 53 51  ME, azCol[i], SQ
16c0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
16d0: 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  }.}.static void 
16e0: 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65  setOneColumnName
16f0: 28 56 64 62 65 20 2a 76 2c 20 63 6f 6e 73 74 20  (Vdbe *v, const 
1700: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 73 65 74 41  char *z){.  setA
1710: 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c  llColumnNames(v,
1720: 20 31 2c 20 26 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a   1, &z);.}../*.*
1730: 2a 20 47 65 6e 65 72 61 74 65 20 63 6f 64 65 20  * Generate code 
1740: 74 6f 20 72 65 74 75 72 6e 20 61 20 73 69 6e 67  to return a sing
1750: 6c 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  le integer value
1760: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
1770: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
1780: 28 56 64 62 65 20 2a 76 2c 20 63 6f 6e 73 74 20  (Vdbe *v, const 
1790: 63 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 69 36  char *zLabel, i6
17a0: 34 20 76 61 6c 75 65 29 7b 0a 20 20 73 71 6c 69  4 value){.  sqli
17b0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 44 75 70  te3VdbeAddOp4Dup
17c0: 38 28 76 2c 20 4f 50 5f 49 6e 74 36 34 2c 20 30  8(v, OP_Int64, 0
17d0: 2c 20 31 2c 20 30 2c 20 28 63 6f 6e 73 74 20 75  , 1, 0, (const u
17e0: 38 2a 29 26 76 61 6c 75 65 2c 20 50 34 5f 49 4e  8*)&value, P4_IN
17f0: 54 36 34 29 3b 0a 20 20 73 65 74 4f 6e 65 43 6f  T64);.  setOneCo
1800: 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 7a 4c 61 62  lumnName(v, zLab
1810: 65 6c 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  el);.  sqlite3Vd
1820: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
1830: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b  esultRow, 1, 1);
1840: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61  .}../*.** Genera
1850: 74 65 20 63 6f 64 65 20 74 6f 20 72 65 74 75 72  te code to retur
1860: 6e 20 61 20 73 69 6e 67 6c 65 20 74 65 78 74 20  n a single text 
1870: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
1880: 20 76 6f 69 64 20 72 65 74 75 72 6e 53 69 6e 67   void returnSing
1890: 6c 65 54 65 78 74 28 0a 20 20 56 64 62 65 20 2a  leText(.  Vdbe *
18a0: 76 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v,              
18b0: 20 20 2f 2a 20 50 72 65 70 61 72 65 64 20 73 74    /* Prepared st
18c0: 61 74 65 6d 65 6e 74 20 75 6e 64 65 72 20 63 6f  atement under co
18d0: 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20  nstruction */.  
18e0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 61 62  const char *zLab
18f0: 65 6c 2c 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  el,     /* Name 
1900: 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
1910: 6c 75 6d 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  lumn */.  const 
1920: 63 68 61 72 20 2a 7a 56 61 6c 75 65 20 20 20 20  char *zValue    
1930: 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 62 65    /* Value to be
1940: 20 72 65 74 75 72 6e 65 64 20 2a 2f 0a 29 7b 0a   returned */.){.
1950: 20 20 69 66 28 20 7a 56 61 6c 75 65 20 29 7b 0a    if( zValue ){.
1960: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c      sqlite3VdbeL
1970: 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 31 2c 20  oadString(v, 1, 
1980: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a 56 61  (const char*)zVa
1990: 6c 75 65 29 3b 0a 20 20 20 20 73 65 74 4f 6e 65  lue);.    setOne
19a0: 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 7a 4c  ColumnName(v, zL
19b0: 61 62 65 6c 29 3b 0a 20 20 20 20 73 71 6c 69 74  abel);.    sqlit
19c0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
19d0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
19e0: 20 31 29 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a   1);.  }.}.../*.
19f0: 2a 2a 20 53 65 74 20 74 68 65 20 73 61 66 65 74  ** Set the safet
1a00: 79 5f 6c 65 76 65 6c 20 61 6e 64 20 70 61 67 65  y_level and page
1a10: 72 20 66 6c 61 67 73 20 66 6f 72 20 70 61 67 65  r flags for page
1a20: 72 20 69 44 62 2e 20 20 4f 72 20 69 66 20 69 44  r iDb.  Or if iD
1a30: 62 3c 30 0a 2a 2a 20 73 65 74 20 74 68 65 73 65  b<0.** set these
1a40: 20 76 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20   values for all 
1a50: 70 61 67 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  pagers..*/.#ifnd
1a60: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
1a70: 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 73 74 61  AGER_PRAGMAS.sta
1a80: 74 69 63 20 76 6f 69 64 20 73 65 74 41 6c 6c 50  tic void setAllP
1a90: 61 67 65 72 46 6c 61 67 73 28 73 71 6c 69 74 65  agerFlags(sqlite
1aa0: 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62  3 *db){.  if( db
1ab0: 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
1ac0: 20 20 20 20 44 62 20 2a 70 44 62 20 3d 20 64 62      Db *pDb = db
1ad0: 2d 3e 61 44 62 3b 0a 20 20 20 20 69 6e 74 20 6e  ->aDb;.    int n
1ae0: 20 3d 20 64 62 2d 3e 6e 44 62 3b 0a 20 20 20 20   = db->nDb;.    
1af0: 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f 46  assert( SQLITE_F
1b00: 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f  ullFSync==PAGER_
1b10: 46 55 4c 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20  FULLFSYNC );.   
1b20: 20 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f   assert( SQLITE_
1b30: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 3d 3d 50  CkptFullFSync==P
1b40: 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53  AGER_CKPT_FULLFS
1b50: 59 4e 43 20 29 3b 0a 20 20 20 20 61 73 73 65 72  YNC );.    asser
1b60: 74 28 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  t( SQLITE_CacheS
1b70: 70 69 6c 6c 3d 3d 50 41 47 45 52 5f 43 41 43 48  pill==PAGER_CACH
1b80: 45 53 50 49 4c 4c 20 29 3b 0a 20 20 20 20 61 73  ESPILL );.    as
1b90: 73 65 72 74 28 20 28 50 41 47 45 52 5f 46 55 4c  sert( (PAGER_FUL
1ba0: 4c 46 53 59 4e 43 20 7c 20 50 41 47 45 52 5f 43  LFSYNC | PAGER_C
1bb0: 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20  KPT_FULLFSYNC | 
1bc0: 50 41 47 45 52 5f 43 41 43 48 45 53 50 49 4c 4c  PAGER_CACHESPILL
1bd0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3d  ).             =
1be0: 3d 20 20 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d  =  PAGER_FLAGS_M
1bf0: 41 53 4b 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ASK );.    asser
1c00: 74 28 20 28 70 44 62 2d 3e 73 61 66 65 74 79 5f  t( (pDb->safety_
1c10: 6c 65 76 65 6c 20 26 20 50 41 47 45 52 5f 53 59  level & PAGER_SY
1c20: 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53 4b 29 3d  NCHRONOUS_MASK)=
1c30: 3d 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76  =pDb->safety_lev
1c40: 65 6c 20 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  el );.    while(
1c50: 20 28 6e 2d 2d 29 20 3e 20 30 20 29 7b 0a 20 20   (n--) > 0 ){.  
1c60: 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 42 74      if( pDb->pBt
1c70: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
1c80: 74 65 33 42 74 72 65 65 53 65 74 50 61 67 65 72  te3BtreeSetPager
1c90: 46 6c 61 67 73 28 70 44 62 2d 3e 70 42 74 2c 0a  Flags(pDb->pBt,.
1ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb0: 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76   pDb->safety_lev
1cc0: 65 6c 20 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20  el | (db->flags 
1cd0: 26 20 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41  & PAGER_FLAGS_MA
1ce0: 53 4b 29 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20  SK) );.      }. 
1cf0: 20 20 20 20 20 70 44 62 2b 2b 3b 0a 20 20 20 20       pDb++;.    
1d00: 7d 0a 20 20 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20  }.  }.}.#else.# 
1d10: 64 65 66 69 6e 65 20 73 65 74 41 6c 6c 50 61 67  define setAllPag
1d20: 65 72 46 6c 61 67 73 28 58 29 20 20 2f 2a 20 6e  erFlags(X)  /* n
1d30: 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  o-op */.#endif..
1d40: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20  ./*.** Return a 
1d50: 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e  human-readable n
1d60: 61 6d 65 20 66 6f 72 20 61 20 63 6f 6e 73 74 72  ame for a constr
1d70: 61 69 6e 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  aint resolution 
1d80: 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64  action..*/.#ifnd
1d90: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
1da0: 4f 52 45 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69  OREIGN_KEY.stati
1db0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 63  c const char *ac
1dc0: 74 69 6f 6e 4e 61 6d 65 28 75 38 20 61 63 74 69  tionName(u8 acti
1dd0: 6f 6e 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  on){.  const cha
1de0: 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74  r *zName;.  swit
1df0: 63 68 28 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ch( action ){.  
1e00: 20 20 63 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c    case OE_SetNul
1e10: 6c 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54  l:  zName = "SET
1e20: 20 4e 55 4c 4c 22 3b 20 20 20 20 20 20 20 20 62   NULL";        b
1e30: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
1e40: 45 5f 53 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d  E_SetDflt:  zNam
1e50: 65 20 3d 20 22 53 45 54 20 44 45 46 41 55 4c 54  e = "SET DEFAULT
1e60: 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ";     break;.  
1e70: 20 20 63 61 73 65 20 4f 45 5f 43 61 73 63 61 64    case OE_Cascad
1e80: 65 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53  e:  zName = "CAS
1e90: 43 41 44 45 22 3b 20 20 20 20 20 20 20 20 20 62  CADE";         b
1ea0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
1eb0: 45 5f 52 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d  E_Restrict: zNam
1ec0: 65 20 3d 20 22 52 45 53 54 52 49 43 54 22 3b 20  e = "RESTRICT"; 
1ed0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1ee0: 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20    default:      
1ef0: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20      zName = "NO 
1f00: 41 43 54 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20  ACTION";  .     
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f20: 20 61 73 73 65 72 74 28 20 61 63 74 69 6f 6e 3d   assert( action=
1f30: 3d 4f 45 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61  =OE_None ); brea
1f40: 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  k;.  }.  return 
1f50: 7a 4e 61 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a  zName;.}.#endif.
1f60: 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65  ../*.** Paramete
1f70: 72 20 65 4d 6f 64 65 20 6d 75 73 74 20 62 65 20  r eMode must be 
1f80: 6f 6e 65 20 6f 66 20 74 68 65 20 50 41 47 45 52  one of the PAGER
1f90: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58  _JOURNALMODE_XXX
1fa0: 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
1fb0: 66 69 6e 65 64 20 69 6e 20 70 61 67 65 72 2e 68  fined in pager.h
1fc0: 2e 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  . This function 
1fd0: 72 65 74 75 72 6e 73 20 74 68 65 20 61 73 73 6f  returns the asso
1fe0: 63 69 61 74 65 64 20 6c 6f 77 65 72 63 61 73 65  ciated lowercase
1ff0: 0a 2a 2a 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65  .** journal-mode
2000: 20 6e 61 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20   name..*/.const 
2010: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
2020: 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
2030: 20 65 4d 6f 64 65 29 7b 0a 20 20 73 74 61 74 69   eMode){.  stati
2040: 63 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61  c char * const a
2050: 7a 4d 6f 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a  zModeName[] = {.
2060: 20 20 20 20 22 64 65 6c 65 74 65 22 2c 20 22 70      "delete", "p
2070: 65 72 73 69 73 74 22 2c 20 22 6f 66 66 22 2c 20  ersist", "off", 
2080: 22 74 72 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d  "truncate", "mem
2090: 6f 72 79 22 0a 23 69 66 6e 64 65 66 20 53 51 4c  ory".#ifndef SQL
20a0: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20  ITE_OMIT_WAL.   
20b0: 20 20 2c 20 22 77 61 6c 22 0a 23 65 6e 64 69 66    , "wal".#endif
20c0: 0a 20 20 7d 3b 0a 20 20 61 73 73 65 72 74 28 20  .  };.  assert( 
20d0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
20e0: 45 5f 44 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20  E_DELETE==0 );. 
20f0: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
2100: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49  OURNALMODE_PERSI
2110: 53 54 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  ST==1 );.  asser
2120: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
2130: 4d 4f 44 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20  MODE_OFF==2 );. 
2140: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
2150: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43  OURNALMODE_TRUNC
2160: 41 54 45 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65  ATE==3 );.  asse
2170: 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  rt( PAGER_JOURNA
2180: 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20  LMODE_MEMORY==4 
2190: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  );.  assert( PAG
21a0: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
21b0: 41 4c 3d 3d 35 20 29 3b 0a 20 20 61 73 73 65 72  AL==5 );.  asser
21c0: 74 28 20 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65  t( eMode>=0 && e
21d0: 4d 6f 64 65 3c 3d 41 72 72 61 79 53 69 7a 65 28  Mode<=ArraySize(
21e0: 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a  azModeName) );..
21f0: 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72    if( eMode==Arr
2200: 61 79 53 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d  aySize(azModeNam
2210: 65 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  e) ) return 0;. 
2220: 20 72 65 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61   return azModeNa
2230: 6d 65 5b 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a  me[eMode];.}../*
2240: 0a 2a 2a 20 50 72 6f 63 65 73 73 20 61 20 70 72  .** Process a pr
2250: 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20  agma statement. 
2260: 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20   .**.** Pragmas 
2270: 61 72 65 20 6f 66 20 74 68 69 73 20 66 6f 72 6d  are of this form
2280: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41  :.**.**      PRA
2290: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69 64 20  GMA [schema.]id 
22a0: 5b 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20  [= value].**.** 
22b0: 54 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d  The identifier m
22c0: 69 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73  ight also be a s
22d0: 74 72 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75  tring.  The valu
22e0: 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61  e is a string, a
22f0: 6e 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72  nd.** identifier
2300: 2c 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20  , or a number.  
2310: 49 66 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20  If minusFlag is 
2320: 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76  true, then the v
2330: 61 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d  alue is.** a num
2340: 62 65 72 20 74 68 61 74 20 77 61 73 20 70 72 65  ber that was pre
2350: 63 65 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73  ceded by a minus
2360: 20 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   sign..**.** If 
2370: 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73  the left side is
2380: 20 22 64 61 74 61 62 61 73 65 2e 69 64 22 20 74   "database.id" t
2390: 68 65 6e 20 70 49 64 31 20 69 73 20 74 68 65 20  hen pId1 is the 
23a0: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a  database name.**
23b0: 20 61 6e 64 20 70 49 64 32 20 69 73 20 74 68 65   and pId2 is the
23c0: 20 69 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66   id.  If the lef
23d0: 74 20 73 69 64 65 20 69 73 20 6a 75 73 74 20 22  t side is just "
23e0: 69 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73  id" then pId1 is
23f0: 20 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70   the.** id and p
2400: 49 64 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79  Id2 is any empty
2410: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64   string..*/.void
2420: 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a   sqlite3Pragma(.
2430: 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c    Parse *pParse,
2440: 20 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c   .  Token *pId1,
2450: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
2460: 20 70 61 72 74 20 6f 66 20 5b 73 63 68 65 6d 61   part of [schema
2470: 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20 20  .]id field */.  
2480: 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20 20  Token *pId2,    
2490: 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70 61      /* Second pa
24a0: 72 74 20 6f 66 20 5b 73 63 68 65 6d 61 2e 5d 69  rt of [schema.]i
24b0: 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e 55 4c 4c  d field, or NULL
24c0: 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 56 61   */.  Token *pVa
24d0: 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20 54 6f 6b  lue,      /* Tok
24e0: 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65 3e 2c 20  en for <value>, 
24f0: 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74  or NULL */.  int
2500: 20 6d 69 6e 75 73 46 6c 61 67 20 20 20 20 20 20   minusFlag      
2510: 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20 27 2d   /* True if a '-
2520: 27 20 73 69 67 6e 20 70 72 65 63 65 64 65 64 20  ' sign preceded 
2530: 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b 0a 20 20  <value> */.){.  
2540: 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20 30 3b  char *zLeft = 0;
2550: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65         /* Nul-te
2560: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
2570: 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f 0a 20 20  tring <id> */.  
2580: 63 68 61 72 20 2a 7a 52 69 67 68 74 20 3d 20 30  char *zRight = 0
2590: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65  ;      /* Nul-te
25a0: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
25b0: 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e 2c 20 6f  tring <value>, o
25c0: 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f 6e 73  r NULL */.  cons
25d0: 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b  t char *zDb = 0;
25e0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
25f0: 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b  se name */.  Tok
2600: 65 6e 20 2a 70 49 64 3b 20 20 20 20 20 20 20 20  en *pId;        
2610: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
2620: 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20 2a 2f 0a  o <id> token */.
2630: 20 20 63 68 61 72 20 2a 61 46 63 6e 74 6c 5b 34    char *aFcntl[4
2640: 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75  ];       /* Argu
2650: 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54 45 5f 46  ment to SQLITE_F
2660: 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a 20  CNTL_PRAGMA */. 
2670: 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
2680: 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
2690: 61 73 65 20 69 6e 64 65 78 20 66 6f 72 20 3c 64  ase index for <d
26a0: 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20 20 69 6e  atabase> */.  in
26b0: 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d 69 64 20  t lwr, upr, mid 
26c0: 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 42 69  = 0;       /* Bi
26d0: 6e 61 72 79 20 73 65 61 72 63 68 20 62 6f 75 6e  nary search boun
26e0: 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  ds */.  int rc; 
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2700: 20 20 20 20 20 2f 2a 20 72 65 74 75 72 6e 20 76       /* return v
2710: 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c 49 54 45  alue form SQLITE
2720: 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f  _FCNTL_PRAGMA */
2730: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
2740: 20 70 50 61 72 73 65 2d 3e 64 62 3b 20 20 20 20   pParse->db;    
2750: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
2760: 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
2770: 44 62 20 2a 70 44 62 3b 20 20 20 20 20 20 20 20  Db *pDb;        
2780: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2790: 54 68 65 20 73 70 65 63 69 66 69 63 20 64 61 74  The specific dat
27a0: 61 62 61 73 65 20 62 65 69 6e 67 20 70 72 61 67  abase being prag
27b0: 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62 65 20 2a  maed */.  Vdbe *
27c0: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
27d0: 62 65 28 70 50 61 72 73 65 29 3b 20 20 2f 2a 20  be(pParse);  /* 
27e0: 50 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  Prepared stateme
27f0: 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 73 74  nt */.  const st
2800: 72 75 63 74 20 73 50 72 61 67 6d 61 4e 61 6d 65  ruct sPragmaName
2810: 73 20 2a 70 50 72 61 67 6d 61 3b 0a 0a 20 20 69  s *pPragma;..  i
2820: 66 28 20 76 3d 3d 30 20 29 20 72 65 74 75 72 6e  f( v==0 ) return
2830: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 52  ;.  sqlite3VdbeR
2840: 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29 3b 0a 20  unOnlyOnce(v);. 
2850: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
2860: 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65 72 70 72  2;..  /* Interpr
2870: 65 74 20 74 68 65 20 5b 73 63 68 65 6d 61 2e 5d  et the [schema.]
2880: 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 61   part of the pra
2890: 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 69  gma statement. i
28a0: 44 62 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 69  Db is the.  ** i
28b0: 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
28c0: 62 61 73 65 20 74 68 69 73 20 70 72 61 67 6d 61  base this pragma
28d0: 20 69 73 20 62 65 69 6e 67 20 61 70 70 6c 69 65   is being applie
28e0: 64 20 74 6f 20 69 6e 20 64 62 2e 61 44 62 5b 5d  d to in db.aDb[]
28f0: 2e 20 2a 2f 0a 20 20 69 44 62 20 3d 20 73 71 6c  . */.  iDb = sql
2900: 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28  ite3TwoPartName(
2910: 70 50 61 72 73 65 2c 20 70 49 64 31 2c 20 70 49  pParse, pId1, pI
2920: 64 32 2c 20 26 70 49 64 29 3b 0a 20 20 69 66 28  d2, &pId);.  if(
2930: 20 69 44 62 3c 30 20 29 20 72 65 74 75 72 6e 3b   iDb<0 ) return;
2940: 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
2950: 62 5b 69 44 62 5d 3b 0a 0a 20 20 2f 2a 20 49 66  b[iDb];..  /* If
2960: 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   the temp databa
2970: 73 65 20 68 61 73 20 62 65 65 6e 20 65 78 70 6c  se has been expl
2980: 69 63 69 74 6c 79 20 6e 61 6d 65 64 20 61 73 20  icitly named as 
2990: 70 61 72 74 20 6f 66 20 74 68 65 20 0a 20 20 2a  part of the .  *
29a0: 2a 20 70 72 61 67 6d 61 2c 20 6d 61 6b 65 20 73  * pragma, make s
29b0: 75 72 65 20 69 74 20 69 73 20 6f 70 65 6e 2e 20  ure it is open. 
29c0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d  .  */.  if( iDb=
29d0: 3d 31 20 26 26 20 73 71 6c 69 74 65 33 4f 70 65  =1 && sqlite3Ope
29e0: 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 70 50  nTempDatabase(pP
29f0: 61 72 73 65 29 20 29 7b 0a 20 20 20 20 72 65 74  arse) ){.    ret
2a00: 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 7a 4c 65 66  urn;.  }..  zLef
2a10: 74 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46  t = sqlite3NameF
2a20: 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 49 64  romToken(db, pId
2a30: 29 3b 0a 20 20 69 66 28 20 21 7a 4c 65 66 74 20  );.  if( !zLeft 
2a40: 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20  ) return;.  if( 
2a50: 6d 69 6e 75 73 46 6c 61 67 20 29 7b 0a 20 20 20  minusFlag ){.   
2a60: 20 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65   zRight = sqlite
2a70: 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2d 25  3MPrintf(db, "-%
2a80: 54 22 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d  T", pValue);.  }
2a90: 65 6c 73 65 7b 0a 20 20 20 20 7a 52 69 67 68 74  else{.    zRight
2aa0: 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72   = sqlite3NameFr
2ab0: 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 56 61 6c  omToken(db, pVal
2ac0: 75 65 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  ue);.  }..  asse
2ad0: 72 74 28 20 70 49 64 32 20 29 3b 0a 20 20 7a 44  rt( pId2 );.  zD
2ae0: 62 20 3d 20 70 49 64 32 2d 3e 6e 3e 30 20 3f 20  b = pId2->n>0 ? 
2af0: 70 44 62 2d 3e 7a 4e 61 6d 65 20 3a 20 30 3b 0a  pDb->zName : 0;.
2b00: 20 20 69 66 28 20 73 71 6c 69 74 65 33 41 75 74    if( sqlite3Aut
2b10: 68 43 68 65 63 6b 28 70 50 61 72 73 65 2c 20 53  hCheck(pParse, S
2b20: 51 4c 49 54 45 5f 50 52 41 47 4d 41 2c 20 7a 4c  QLITE_PRAGMA, zL
2b30: 65 66 74 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  eft, zRight, zDb
2b40: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 70 72  ) ){.    goto pr
2b50: 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20  agma_out;.  }.. 
2b60: 20 2f 2a 20 53 65 6e 64 20 61 6e 20 53 51 4c 49   /* Send an SQLI
2b70: 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20  TE_FCNTL_PRAGMA 
2b80: 66 69 6c 65 2d 63 6f 6e 74 72 6f 6c 20 74 6f 20  file-control to 
2b90: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56  the underlying V
2ba0: 46 53 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63 74 69  FS.  ** connecti
2bb0: 6f 6e 2e 20 20 49 66 20 69 74 20 72 65 74 75 72  on.  If it retur
2bc0: 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 74 68  ns SQLITE_OK, th
2bd0: 65 6e 20 61 73 73 75 6d 65 20 74 68 61 74 20 74  en assume that t
2be0: 68 65 20 56 46 53 0a 20 20 2a 2a 20 68 61 6e 64  he VFS.  ** hand
2bf0: 6c 65 64 20 74 68 65 20 70 72 61 67 6d 61 20 61  led the pragma a
2c00: 6e 64 20 67 65 6e 65 72 61 74 65 20 61 20 6e 6f  nd generate a no
2c10: 2d 6f 70 20 70 72 65 70 61 72 65 64 20 73 74 61  -op prepared sta
2c20: 74 65 6d 65 6e 74 2e 0a 20 20 2a 2a 0a 20 20 2a  tement..  **.  *
2c30: 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e  * IMPLEMENTATION
2c40: 2d 4f 46 3a 20 52 2d 31 32 32 33 38 2d 35 35 31  -OF: R-12238-551
2c50: 32 30 20 57 68 65 6e 65 76 65 72 20 61 20 50 52  20 Whenever a PR
2c60: 41 47 4d 41 20 73 74 61 74 65 6d 65 6e 74 20 69  AGMA statement i
2c70: 73 20 70 61 72 73 65 64 2c 0a 20 20 2a 2a 20 61  s parsed,.  ** a
2c80: 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  n SQLITE_FCNTL_P
2c90: 52 41 47 4d 41 20 66 69 6c 65 20 63 6f 6e 74 72  RAGMA file contr
2ca0: 6f 6c 20 69 73 20 73 65 6e 74 20 74 6f 20 74 68  ol is sent to th
2cb0: 65 20 6f 70 65 6e 20 73 71 6c 69 74 65 33 5f 66  e open sqlite3_f
2cc0: 69 6c 65 0a 20 20 2a 2a 20 6f 62 6a 65 63 74 20  ile.  ** object 
2cd0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
2ce0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2cf0: 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  le to which the 
2d00: 70 72 61 67 6d 61 0a 20 20 2a 2a 20 73 74 61 74  pragma.  ** stat
2d10: 65 6d 65 6e 74 20 72 65 66 65 72 73 2e 0a 20 20  ement refers..  
2d20: 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e  **.  ** IMPLEMEN
2d30: 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 39 38  TATION-OF: R-298
2d40: 37 35 2d 33 31 36 37 38 20 54 68 65 20 61 72 67  75-31678 The arg
2d50: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 53 51 4c  ument to the SQL
2d60: 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41  ITE_FCNTL_PRAGMA
2d70: 0a 20 20 2a 2a 20 66 69 6c 65 20 63 6f 6e 74 72  .  ** file contr
2d80: 6f 6c 20 69 73 20 61 6e 20 61 72 72 61 79 20 6f  ol is an array o
2d90: 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 73 74  f pointers to st
2da0: 72 69 6e 67 73 20 28 63 68 61 72 2a 2a 29 20 69  rings (char**) i
2db0: 6e 20 77 68 69 63 68 20 74 68 65 0a 20 20 2a 2a  n which the.  **
2dc0: 20 73 65 63 6f 6e 64 20 65 6c 65 6d 65 6e 74 20   second element 
2dd0: 6f 66 20 74 68 65 20 61 72 72 61 79 20 69 73 20  of the array is 
2de0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
2df0: 70 72 61 67 6d 61 20 61 6e 64 20 74 68 65 20 74  pragma and the t
2e00: 68 69 72 64 0a 20 20 2a 2a 20 65 6c 65 6d 65 6e  hird.  ** elemen
2e10: 74 20 69 73 20 74 68 65 20 61 72 67 75 6d 65 6e  t is the argumen
2e20: 74 20 74 6f 20 74 68 65 20 70 72 61 67 6d 61 20  t to the pragma 
2e30: 6f 72 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 70  or NULL if the p
2e40: 72 61 67 6d 61 20 68 61 73 20 6e 6f 0a 20 20 2a  ragma has no.  *
2e50: 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 20 20 2a 2f  * argument..  */
2e60: 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20 3d 20 30  .  aFcntl[0] = 0
2e70: 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d 20 3d 20  ;.  aFcntl[1] = 
2e80: 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e 74 6c 5b  zLeft;.  aFcntl[
2e90: 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a 20 20 61  2] = zRight;.  a
2ea0: 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b 0a 20 20  Fcntl[3] = 0;.  
2eb0: 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e  db->busyHandler.
2ec0: 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 72 63 20  nBusy = 0;.  rc 
2ed0: 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63  = sqlite3_file_c
2ee0: 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62 2c 20  ontrol(db, zDb, 
2ef0: 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41  SQLITE_FCNTL_PRA
2f00: 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61 46 63 6e  GMA, (void*)aFcn
2f10: 74 6c 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  tl);.  if( rc==S
2f20: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2f30: 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78 74  returnSingleText
2f40: 28 76 2c 20 22 72 65 73 75 6c 74 22 2c 20 61 46  (v, "result", aF
2f50: 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 73 71  cntl[0]);.    sq
2f60: 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63 6e 74  lite3_free(aFcnt
2f70: 6c 5b 30 5d 29 3b 0a 20 20 20 20 67 6f 74 6f 20  l[0]);.    goto 
2f80: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
2f90: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
2fa0: 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20 20 20  _NOTFOUND ){.   
2fb0: 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20 29   if( aFcntl[0] )
2fc0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45  {.      sqlite3E
2fd0: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
2fe0: 22 25 73 22 2c 20 61 46 63 6e 74 6c 5b 30 5d 29  "%s", aFcntl[0])
2ff0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
3000: 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29 3b  free(aFcntl[0]);
3010: 0a 20 20 20 20 7d 0a 20 20 20 20 70 50 61 72 73  .    }.    pPars
3020: 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 70  e->nErr++;.    p
3030: 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a  Parse->rc = rc;.
3040: 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f      goto pragma_
3050: 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c  out;.  }..  /* L
3060: 6f 63 61 74 65 20 74 68 65 20 70 72 61 67 6d 61  ocate the pragma
3070: 20 69 6e 20 74 68 65 20 6c 6f 6f 6b 75 70 20 74   in the lookup t
3080: 61 62 6c 65 20 2a 2f 0a 20 20 6c 77 72 20 3d 20  able */.  lwr = 
3090: 30 3b 0a 20 20 75 70 72 20 3d 20 41 72 72 61 79  0;.  upr = Array
30a0: 53 69 7a 65 28 61 50 72 61 67 6d 61 4e 61 6d 65  Size(aPragmaName
30b0: 73 29 2d 31 3b 0a 20 20 77 68 69 6c 65 28 20 6c  s)-1;.  while( l
30c0: 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20 20 20 6d  wr<=upr ){.    m
30d0: 69 64 20 3d 20 28 6c 77 72 2b 75 70 72 29 2f 32  id = (lwr+upr)/2
30e0: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
30f0: 65 33 5f 73 74 72 69 63 6d 70 28 7a 4c 65 66 74  e3_stricmp(zLeft
3100: 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d  , aPragmaNames[m
3110: 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  id].zName);.    
3120: 69 66 28 20 72 63 3d 3d 30 20 29 20 62 72 65 61  if( rc==0 ) brea
3130: 6b 3b 0a 20 20 20 20 69 66 28 20 72 63 3c 30 20  k;.    if( rc<0 
3140: 29 7b 0a 20 20 20 20 20 20 75 70 72 20 3d 20 6d  ){.      upr = m
3150: 69 64 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  id - 1;.    }els
3160: 65 7b 0a 20 20 20 20 20 20 6c 77 72 20 3d 20 6d  e{.      lwr = m
3170: 69 64 20 2b 20 31 3b 0a 20 20 20 20 7d 0a 20 20  id + 1;.    }.  
3180: 7d 0a 20 20 69 66 28 20 6c 77 72 3e 75 70 72 20  }.  if( lwr>upr 
3190: 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75  ) goto pragma_ou
31a0: 74 3b 0a 20 20 70 50 72 61 67 6d 61 20 3d 20 26  t;.  pPragma = &
31b0: 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64  aPragmaNames[mid
31c0: 5d 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75  ];..  /* Make su
31d0: 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  re the database 
31e0: 73 63 68 65 6d 61 20 69 73 20 6c 6f 61 64 65 64  schema is loaded
31f0: 20 69 66 20 74 68 65 20 70 72 61 67 6d 61 20 72   if the pragma r
3200: 65 71 75 69 72 65 73 20 74 68 61 74 20 2a 2f 0a  equires that */.
3210: 20 20 69 66 28 20 28 70 50 72 61 67 6d 61 2d 3e    if( (pPragma->
3220: 6d 50 72 61 67 46 6c 61 67 20 26 20 50 72 61 67  mPragFlag & Prag
3230: 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 29  Flag_NeedSchema)
3240: 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73  !=0 ){.    if( s
3250: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
3260: 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20  (pParse) ) goto 
3270: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
3280: 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 74 68  .  /* Jump to th
3290: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 70 72  e appropriate pr
32a0: 61 67 6d 61 20 68 61 6e 64 6c 65 72 20 2a 2f 0a  agma handler */.
32b0: 20 20 73 77 69 74 63 68 28 20 70 50 72 61 67 6d    switch( pPragm
32c0: 61 2d 3e 65 50 72 61 67 54 79 70 20 29 7b 0a 20  a->ePragTyp ){. 
32d0: 20 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53   .#if !defined(S
32e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
32f0: 5f 50 52 41 47 4d 41 53 29 20 26 26 20 21 64 65  _PRAGMAS) && !de
3300: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3310: 54 5f 44 45 50 52 45 43 41 54 45 44 29 0a 20 20  T_DEPRECATED).  
3320: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
3330: 5b 73 63 68 65 6d 61 2e 5d 64 65 66 61 75 6c 74  [schema.]default
3340: 5f 63 61 63 68 65 5f 73 69 7a 65 0a 20 20 2a 2a  _cache_size.  **
3350: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
3360: 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  .]default_cache_
3370: 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  size=N.  **.  **
3380: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
3390: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
33a0: 65 6e 74 20 70 65 72 73 69 73 74 65 6e 74 20 73  ent persistent s
33b0: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
33c0: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
33d0: 69 7a 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  ize.  The value 
33e0: 72 65 74 75 72 6e 65 64 20 69 73 20 74 68 65 20  returned is the 
33f0: 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
3400: 66 0a 20 20 2a 2a 20 70 61 67 65 73 20 69 6e 20  f.  ** pages in 
3410: 74 68 65 20 70 61 67 65 20 63 61 63 68 65 2e 20  the page cache. 
3420: 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
3430: 20 73 65 74 73 20 62 6f 74 68 20 74 68 65 20 63   sets both the c
3440: 75 72 72 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65  urrent.  ** page
3450: 20 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75   cache size valu
3460: 65 20 61 6e 64 20 74 68 65 20 70 65 72 73 69 73  e and the persis
3470: 74 65 6e 74 20 70 61 67 65 20 63 61 63 68 65 20  tent page cache 
3480: 73 69 7a 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20  size value.  ** 
3490: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61  stored in the da
34a0: 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a  tabase file..  *
34b0: 2a 0a 20 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72  *.  ** Older ver
34c0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
34d0: 77 6f 75 6c 64 20 73 65 74 20 74 68 65 20 64 65  would set the de
34e0: 66 61 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65  fault cache size
34f0: 20 74 6f 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74   to a.  ** negat
3500: 69 76 65 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e  ive number to in
3510: 64 69 63 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f  dicate synchrono
3520: 75 73 3d 4f 46 46 2e 20 20 54 68 65 73 65 20 64  us=OFF.  These d
3530: 61 79 73 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73  ays, synchronous
3540: 0a 20 20 2a 2a 20 69 73 20 61 6c 77 61 79 73 20  .  ** is always 
3550: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 20 72 65  on by default re
3560: 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
3570: 73 69 67 6e 20 6f 66 20 74 68 65 20 64 65 66 61  sign of the defa
3580: 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73  ult cache.  ** s
3590: 69 7a 65 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e  ize.  But contin
35a0: 75 65 20 74 6f 20 74 61 6b 65 20 74 68 65 20 61  ue to take the a
35b0: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
35c0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63   the default cac
35d0: 68 65 0a 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20  he.  ** size of 
35e0: 68 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61  historical compa
35f0: 74 69 62 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20  tibility..  */. 
3600: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 44 45   case PragTyp_DE
3610: 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45  FAULT_CACHE_SIZE
3620: 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
3630: 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56  onst int iLn = V
3640: 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e  DBE_OFFSET_LINEN
3650: 4f 28 32 29 3b 0a 20 20 20 20 73 74 61 74 69 63  O(2);.    static
3660: 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
3670: 74 20 67 65 74 43 61 63 68 65 53 69 7a 65 5b 5d  t getCacheSize[]
3680: 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f   = {.      { OP_
3690: 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 30 2c 20  Transaction, 0, 
36a0: 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20  0,        0},   
36b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c0: 20 20 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20        /* 0 */.  
36d0: 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f      { OP_ReadCoo
36e0: 6b 69 65 2c 20 20 30 2c 20 31 2c 20 20 20 20 20  kie,  0, 1,     
36f0: 20 20 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54     BTREE_DEFAULT
3700: 5f 43 41 43 48 45 5f 53 49 5a 45 7d 2c 20 20 2f  _CACHE_SIZE},  /
3710: 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f  * 1 */.      { O
3720: 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31  P_IfPos,       1
3730: 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 8,        0},.
3740: 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67        { OP_Integ
3750: 65 72 2c 20 20 20 20 20 30 2c 20 32 2c 20 20 20  er,     0, 2,   
3760: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
3770: 20 4f 50 5f 53 75 62 74 72 61 63 74 2c 20 20 20   OP_Subtract,   
3780: 20 31 2c 20 32 2c 20 20 20 20 20 20 20 20 31 7d   1, 2,        1}
3790: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50  ,.      { OP_IfP
37a0: 6f 73 2c 20 20 20 20 20 20 20 31 2c 20 38 2c 20  os,       1, 8, 
37b0: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
37c0: 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20   { OP_Integer,  
37d0: 20 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20     0, 1,        
37e0: 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  0},             
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 36              /* 6
3800: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e   */.      { OP_N
3810: 6f 6f 70 2c 20 20 20 20 20 20 20 20 30 2c 20 30  oop,        0, 0
3820: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
3830: 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f     { OP_ResultRo
3840: 77 2c 20 20 20 31 2c 20 31 2c 20 20 20 20 20 20  w,   1, 1,      
3850: 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20    0},.    };.   
3860: 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20   VdbeOp *aOp;.  
3870: 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65    sqlite3VdbeUse
3880: 73 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a  sBtree(v, iDb);.
3890: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
38a0: 29 7b 0a 20 20 20 20 20 20 73 65 74 4f 6e 65 43  ){.      setOneC
38b0: 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 22 63 61  olumnName(v, "ca
38c0: 63 68 65 5f 73 69 7a 65 22 29 3b 0a 20 20 20 20  che_size");.    
38d0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b    pParse->nMem +
38e0: 3d 20 32 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  = 2;.      sqlit
38f0: 65 33 56 64 62 65 56 65 72 69 66 79 4e 6f 4d 61  e3VdbeVerifyNoMa
3900: 6c 6c 6f 63 52 65 71 75 69 72 65 64 28 76 2c 20  llocRequired(v, 
3910: 41 72 72 61 79 53 69 7a 65 28 67 65 74 43 61 63  ArraySize(getCac
3920: 68 65 53 69 7a 65 29 29 3b 0a 20 20 20 20 20 20  heSize));.      
3930: 61 4f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62  aOp = sqlite3Vdb
3940: 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
3950: 72 61 79 53 69 7a 65 28 67 65 74 43 61 63 68 65  raySize(getCache
3960: 53 69 7a 65 29 2c 20 67 65 74 43 61 63 68 65 53  Size), getCacheS
3970: 69 7a 65 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20  ize, iLn);.     
3980: 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52 45 41   if( ONLY_IF_REA
3990: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f 70 3d  LLOC_STRESS(aOp=
39a0: 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  =0) ) break;.   
39b0: 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20 3d 20 69     aOp[0].p1 = i
39c0: 44 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d  Db;.      aOp[1]
39d0: 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20  .p1 = iDb;.     
39e0: 20 61 4f 70 5b 36 5d 2e 70 31 20 3d 20 53 51 4c   aOp[6].p1 = SQL
39f0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48  ITE_DEFAULT_CACH
3a00: 45 5f 53 49 5a 45 3b 0a 20 20 20 20 7d 65 6c 73  E_SIZE;.    }els
3a10: 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a  e{.      int siz
3a20: 65 20 3d 20 73 71 6c 69 74 65 33 41 62 73 49 6e  e = sqlite3AbsIn
3a30: 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28  t32(sqlite3Atoi(
3a40: 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20  zRight));.      
3a50: 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74  sqlite3BeginWrit
3a60: 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73  eOperation(pPars
3a70: 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20  e, 0, iDb);.    
3a80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
3a90: 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74 43 6f 6f  Op3(v, OP_SetCoo
3aa0: 6b 69 65 2c 20 69 44 62 2c 20 42 54 52 45 45 5f  kie, iDb, BTREE_
3ab0: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
3ac0: 5a 45 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20 20  ZE, size);.     
3ad0: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
3ae0: 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
3af0: 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
3b00: 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d       pDb->pSchem
3b10: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  a->cache_size = 
3b20: 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  size;.      sqli
3b30: 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
3b40: 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70  Size(pDb->pBt, p
3b50: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
3b60: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a  he_size);.    }.
3b70: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
3b80: 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c 49 54 45  endif /* !SQLITE
3b90: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
3ba0: 4d 41 53 20 26 26 20 21 53 51 4c 49 54 45 5f 4f  MAS && !SQLITE_O
3bb0: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a  MIT_DEPRECATED *
3bc0: 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  /..#if !defined(
3bd0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
3be0: 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a  R_PRAGMAS).  /*.
3bf0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
3c00: 68 65 6d 61 2e 5d 70 61 67 65 5f 73 69 7a 65 0a  hema.]page_size.
3c10: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
3c20: 68 65 6d 61 2e 5d 70 61 67 65 5f 73 69 7a 65 3d  hema.]page_size=
3c30: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  N.  **.  ** The 
3c40: 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72  first form repor
3c50: 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  ts the current s
3c60: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
3c70: 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61 67   ** database pag
3c80: 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 2e  e size in bytes.
3c90: 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72    The second for
3ca0: 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a 20  m sets the.  ** 
3cb0: 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69  database page si
3cc0: 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20 76  ze value.  The v
3cd0: 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  alue can only be
3ce0: 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68 65   set if.  ** the
3cf0: 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f   database has no
3d00: 74 20 79 65 74 20 62 65 65 6e 20 63 72 65 61 74  t yet been creat
3d10: 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ed..  */.  case 
3d20: 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49 5a  PragTyp_PAGE_SIZ
3d30: 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a  E: {.    Btree *
3d40: 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a  pBt = pDb->pBt;.
3d50: 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21      assert( pBt!
3d60: 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a  =0 );.    if( !z
3d70: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
3d80: 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57 41 59 53  nt size = ALWAYS
3d90: 28 70 42 74 29 20 3f 20 73 71 6c 69 74 65 33 42  (pBt) ? sqlite3B
3da0: 74 72 65 65 47 65 74 50 61 67 65 53 69 7a 65 28  treeGetPageSize(
3db0: 70 42 74 29 20 3a 20 30 3b 0a 20 20 20 20 20 20  pBt) : 0;.      
3dc0: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
3dd0: 76 2c 20 22 70 61 67 65 5f 73 69 7a 65 22 2c 20  v, "page_size", 
3de0: 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  size);.    }else
3df0: 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6c 6c 6f  {.      /* Mallo
3e00: 63 20 6d 61 79 20 66 61 69 6c 20 77 68 65 6e 20  c may fail when 
3e10: 73 65 74 74 69 6e 67 20 74 68 65 20 70 61 67 65  setting the page
3e20: 2d 73 69 7a 65 2c 20 61 73 20 74 68 65 72 65 20  -size, as there 
3e30: 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 0a 20  is an internal. 
3e40: 20 20 20 20 20 2a 2a 20 62 75 66 66 65 72 20 74       ** buffer t
3e50: 68 61 74 20 74 68 65 20 70 61 67 65 72 20 6d 6f  hat the pager mo
3e60: 64 75 6c 65 20 72 65 73 69 7a 65 73 20 75 73 69  dule resizes usi
3e70: 6e 67 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c  ng sqlite3_reall
3e80: 6f 63 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  oc()..      */. 
3e90: 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 50 61 67       db->nextPag
3ea0: 65 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41  esize = sqlite3A
3eb0: 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20  toi(zRight);.   
3ec0: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f     if( SQLITE_NO
3ed0: 4d 45 4d 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  MEM==sqlite3Btre
3ee0: 65 53 65 74 50 61 67 65 53 69 7a 65 28 70 42 74  eSetPageSize(pBt
3ef0: 2c 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73 69  , db->nextPagesi
3f00: 7a 65 2c 2d 31 2c 30 29 20 29 7b 0a 20 20 20 20  ze,-1,0) ){.    
3f10: 20 20 20 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61      sqlite3OomFa
3f20: 75 6c 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  ult(db);.      }
3f30: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
3f40: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
3f50: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
3f60: 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a  .]secure_delete.
3f70: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
3f80: 68 65 6d 61 2e 5d 73 65 63 75 72 65 5f 64 65 6c  hema.]secure_del
3f90: 65 74 65 3d 4f 4e 2f 4f 46 46 0a 20 20 2a 2a 0a  ete=ON/OFF.  **.
3fa0: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
3fb0: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
3fc0: 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20  current setting 
3fd0: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73 65 63  for the.  ** sec
3fe0: 75 72 65 5f 64 65 6c 65 74 65 20 66 6c 61 67 2e  ure_delete flag.
3ff0: 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72    The second for
4000: 6d 20 63 68 61 6e 67 65 73 20 74 68 65 20 73 65  m changes the se
4010: 63 75 72 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a  cure_delete.  **
4020: 20 66 6c 61 67 20 73 65 74 74 69 6e 67 20 61 6e   flag setting an
4030: 64 20 72 65 70 6f 72 74 73 20 74 68 65 6e 65 77  d reports thenew
4040: 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20 63   value..  */.  c
4050: 61 73 65 20 50 72 61 67 54 79 70 5f 53 45 43 55  ase PragTyp_SECU
4060: 52 45 5f 44 45 4c 45 54 45 3a 20 7b 0a 20 20 20  RE_DELETE: {.   
4070: 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44   Btree *pBt = pD
4080: 62 2d 3e 70 42 74 3b 0a 20 20 20 20 69 6e 74 20  b->pBt;.    int 
4090: 62 20 3d 20 2d 31 3b 0a 20 20 20 20 61 73 73 65  b = -1;.    asse
40a0: 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20  rt( pBt!=0 );.  
40b0: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
40c0: 20 20 20 20 20 20 62 20 3d 20 73 71 6c 69 74 65        b = sqlite
40d0: 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67  3GetBoolean(zRig
40e0: 68 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20  ht, 0);.    }.  
40f0: 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30    if( pId2->n==0
4100: 20 26 26 20 62 3e 3d 30 20 29 7b 0a 20 20 20 20   && b>=0 ){.    
4110: 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20    int ii;.      
4120: 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d  for(ii=0; ii<db-
4130: 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
4140: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
4150: 65 53 65 63 75 72 65 44 65 6c 65 74 65 28 64 62  eSecureDelete(db
4160: 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 62  ->aDb[ii].pBt, b
4170: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
4180: 0a 20 20 20 20 62 20 3d 20 73 71 6c 69 74 65 33  .    b = sqlite3
4190: 42 74 72 65 65 53 65 63 75 72 65 44 65 6c 65 74  BtreeSecureDelet
41a0: 65 28 70 42 74 2c 20 62 29 3b 0a 20 20 20 20 72  e(pBt, b);.    r
41b0: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76  eturnSingleInt(v
41c0: 2c 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74 65  , "secure_delete
41d0: 22 2c 20 62 29 3b 0a 20 20 20 20 62 72 65 61 6b  ", b);.    break
41e0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
41f0: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
4200: 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74  .]max_page_count
4210: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
4220: 63 68 65 6d 61 2e 5d 6d 61 78 5f 70 61 67 65 5f  chema.]max_page_
4230: 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a  count=N.  **.  *
4240: 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d  * The first form
4250: 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72   reports the cur
4260: 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72  rent setting for
4270: 20 74 68 65 0a 20 20 2a 2a 20 6d 61 78 69 6d 75   the.  ** maximu
4280: 6d 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  m number of page
4290: 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
42a0: 65 20 66 69 6c 65 2e 20 20 54 68 65 20 0a 20 20  e file.  The .  
42b0: 2a 2a 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 61  ** second form a
42c0: 74 74 65 6d 70 74 73 20 74 6f 20 63 68 61 6e 67  ttempts to chang
42d0: 65 20 74 68 69 73 20 73 65 74 74 69 6e 67 2e 20  e this setting. 
42e0: 20 42 6f 74 68 0a 20 20 2a 2a 20 66 6f 72 6d 73   Both.  ** forms
42f0: 20 72 65 74 75 72 6e 20 74 68 65 20 63 75 72 72   return the curr
4300: 65 6e 74 20 73 65 74 74 69 6e 67 2e 0a 20 20 2a  ent setting..  *
4310: 2a 0a 20 20 2a 2a 20 54 68 65 20 61 62 73 6f 6c  *.  ** The absol
4320: 75 74 65 20 76 61 6c 75 65 20 6f 66 20 4e 20 69  ute value of N i
4330: 73 20 75 73 65 64 2e 20 20 54 68 69 73 20 69 73  s used.  This is
4340: 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 61 6e   undocumented an
4350: 64 20 6d 69 67 68 74 0a 20 20 2a 2a 20 63 68 61  d might.  ** cha
4360: 6e 67 65 2e 20 20 54 68 65 20 6f 6e 6c 79 20 70  nge.  The only p
4370: 75 72 70 6f 73 65 20 69 73 20 74 6f 20 70 72 6f  urpose is to pro
4380: 76 69 64 65 20 61 6e 20 65 61 73 79 20 77 61 79  vide an easy way
4390: 20 74 6f 20 74 65 73 74 0a 20 20 2a 2a 20 74 68   to test.  ** th
43a0: 65 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33  e sqlite3AbsInt3
43b0: 32 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20  2() function..  
43c0: 2a 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  **.  **  PRAGMA 
43d0: 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f 63 6f  [schema.]page_co
43e0: 75 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  unt.  **.  ** Re
43f0: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
4400: 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  of pages in the 
4410: 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61  specified databa
4420: 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  se..  */.  case 
4430: 50 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f 55  PragTyp_PAGE_COU
4440: 4e 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 52  NT: {.    int iR
4450: 65 67 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43  eg;.    sqlite3C
4460: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
4470: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
4480: 20 20 69 52 65 67 20 3d 20 2b 2b 70 50 61 72 73    iReg = ++pPars
4490: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 69 66 28  e->nMem;.    if(
44a0: 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28   sqlite3Tolower(
44b0: 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 70 27 20 29  zLeft[0])=='p' )
44c0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
44d0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
44e0: 50 61 67 65 63 6f 75 6e 74 2c 20 69 44 62 2c 20  Pagecount, iDb, 
44f0: 69 52 65 67 29 3b 0a 20 20 20 20 7d 65 6c 73 65  iReg);.    }else
4500: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
4510: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
4520: 4d 61 78 50 67 63 6e 74 2c 20 69 44 62 2c 20 69  MaxPgcnt, iDb, i
4530: 52 65 67 2c 20 0a 20 20 20 20 20 20 20 20 20 20  Reg, .          
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
4550: 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 73 71  lite3AbsInt32(sq
4560: 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
4570: 29 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  )));.    }.    s
4580: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
4590: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
45a0: 2c 20 69 52 65 67 2c 20 31 29 3b 0a 20 20 20 20  , iReg, 1);.    
45b0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
45c0: 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
45d0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
45e0: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
45f0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74  NAME_NAME, zLeft
4600: 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
4610: 4e 54 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  NT);.    break;.
4620: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
4630: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
4640: 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20 2a  locking_mode.  *
4650: 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d  *  PRAGMA [schem
4660: 61 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 20  a.]locking_mode 
4670: 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c 75 73  = (normal|exclus
4680: 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ive).  */.  case
4690: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e 47   PragTyp_LOCKING
46a0: 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 63 6f 6e  _MODE: {.    con
46b0: 73 74 20 63 68 61 72 20 2a 7a 52 65 74 20 3d 20  st char *zRet = 
46c0: 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20 20 69 6e  "normal";.    in
46d0: 74 20 65 4d 6f 64 65 20 3d 20 67 65 74 4c 6f 63  t eMode = getLoc
46e0: 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67 68 74 29  kingMode(zRight)
46f0: 3b 0a 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d  ;..    if( pId2-
4700: 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64 65 3d 3d  >n==0 && eMode==
4710: 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44  PAGER_LOCKINGMOD
4720: 45 5f 51 55 45 52 59 20 29 7b 0a 20 20 20 20 20  E_QUERY ){.     
4730: 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50 52 41 47   /* Simple "PRAG
4740: 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 3b  MA locking_mode;
4750: 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69  " statement. Thi
4760: 73 20 69 73 20 61 20 71 75 65 72 79 20 66 6f 72  s is a query for
4770: 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 75  .      ** the cu
4780: 72 72 65 6e 74 20 64 65 66 61 75 6c 74 20 6c 6f  rrent default lo
4790: 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77 68 69 63  cking mode (whic
47a0: 68 20 6d 61 79 20 62 65 20 64 69 66 66 65 72 65  h may be differe
47b0: 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 74  nt to.      ** t
47c0: 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20  he locking-mode 
47d0: 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  of the main data
47e0: 62 61 73 65 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  base)..      */.
47f0: 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 64 62        eMode = db
4800: 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 0a  ->dfltLockMode;.
4810: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4820: 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 0a   Pager *pPager;.
4830: 20 20 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e        if( pId2->
4840: 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  n==0 ){.        
4850: 2f 2a 20 54 68 69 73 20 69 6e 64 69 63 61 74 65  /* This indicate
4860: 73 20 74 68 61 74 20 6e 6f 20 64 61 74 61 62 61  s that no databa
4870: 73 65 20 6e 61 6d 65 20 77 61 73 20 73 70 65 63  se name was spec
4880: 69 66 69 65 64 20 61 73 20 70 61 72 74 0a 20 20  ified as part.  
4890: 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20        ** of the 
48a0: 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 2e 20  PRAGMA command. 
48b0: 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
48c0: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6d 75   locking-mode mu
48d0: 73 74 20 62 65 0a 20 20 20 20 20 20 20 20 2a 2a  st be.        **
48e0: 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61 74 74 61   set on all atta
48f0: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2c 20  ched databases, 
4900: 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65 20 6d  as well as the m
4910: 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a 20 20 20  ain db file..   
4920: 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 20 20       **.        
4930: 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20 73 71 6c  ** Also, the sql
4940: 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d 6f 64  ite3.dfltLockMod
4950: 65 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  e variable is se
4960: 74 20 73 6f 20 74 68 61 74 0a 20 20 20 20 20 20  t so that.      
4970: 20 20 2a 2a 20 61 6e 79 20 73 75 62 73 65 71 75    ** any subsequ
4980: 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 20 64  ently attached d
4990: 61 74 61 62 61 73 65 73 20 61 6c 73 6f 20 75 73  atabases also us
49a0: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 0a  e the specified.
49b0: 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f 63 6b 69          ** locki
49c0: 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20 20 20 20  ng mode..       
49d0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74 20   */.        int 
49e0: 69 69 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  ii;.        asse
49f0: 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e 61 44 62  rt(pDb==&db->aDb
4a00: 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  [0]);.        fo
4a10: 72 28 69 69 3d 32 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=2; ii<db->n
4a20: 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
4a30: 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73 71       pPager = sq
4a40: 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
4a50: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 29  db->aDb[ii].pBt)
4a60: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
4a70: 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d  te3PagerLockingM
4a80: 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f 64  ode(pPager, eMod
4a90: 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  e);.        }.  
4aa0: 20 20 20 20 20 20 64 62 2d 3e 64 66 6c 74 4c 6f        db->dfltLo
4ab0: 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29 65 4d 6f  ckMode = (u8)eMo
4ac0: 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  de;.      }.    
4ad0: 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74    pPager = sqlit
4ae0: 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62  e3BtreePager(pDb
4af0: 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 65 4d  ->pBt);.      eM
4b00: 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67  ode = sqlite3Pag
4b10: 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50  erLockingMode(pP
4b20: 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20  ager, eMode);.  
4b30: 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28    }..    assert(
4b40: 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f   eMode==PAGER_LO
4b50: 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41 4c  CKINGMODE_NORMAL
4b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20  .            || 
4b70: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43  eMode==PAGER_LOC
4b80: 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49  KINGMODE_EXCLUSI
4b90: 56 45 20 29 3b 0a 20 20 20 20 69 66 28 20 65 4d  VE );.    if( eM
4ba0: 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49  ode==PAGER_LOCKI
4bb0: 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56 45  NGMODE_EXCLUSIVE
4bc0: 20 29 7b 0a 20 20 20 20 20 20 7a 52 65 74 20 3d   ){.      zRet =
4bd0: 20 22 65 78 63 6c 75 73 69 76 65 22 3b 0a 20 20   "exclusive";.  
4be0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69    }.    returnSi
4bf0: 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 6c 6f 63  ngleText(v, "loc
4c00: 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 7a 52 65 74  king_mode", zRet
4c10: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
4c20: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  }..  /*.  **  PR
4c30: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6a 6f  AGMA [schema.]jo
4c40: 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a 2a 20  urnal_mode.  ** 
4c50: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
4c60: 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 0a  ]journal_mode =.
4c70: 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20    **            
4c80: 20 20 20 20 20 20 20 20 20 20 28 64 65 6c 65 74            (delet
4c90: 65 7c 70 65 72 73 69 73 74 7c 6f 66 66 7c 74 72  e|persist|off|tr
4ca0: 75 6e 63 61 74 65 7c 6d 65 6d 6f 72 79 7c 77 61  uncate|memory|wa
4cb0: 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20 20 63 61  l|off).  */.  ca
4cc0: 73 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e  se PragTyp_JOURN
4cd0: 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 69  AL_MODE: {.    i
4ce0: 6e 74 20 65 4d 6f 64 65 3b 20 20 20 20 20 20 20  nt eMode;       
4cf0: 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 50   /* One of the P
4d00: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
4d10: 5f 58 58 58 20 73 79 6d 62 6f 6c 73 20 2a 2f 0a  _XXX symbols */.
4d20: 20 20 20 20 69 6e 74 20 69 69 3b 20 20 20 20 20      int ii;     
4d30: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
4d40: 75 6e 74 65 72 20 2a 2f 0a 0a 20 20 20 20 73 65  unter */..    se
4d50: 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76  tOneColumnName(v
4d60: 2c 20 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22  , "journal_mode"
4d70: 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  );.    if( zRigh
4d80: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  t==0 ){.      /*
4d90: 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
4da0: 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 6f 66 20  "=MODE" part of 
4db0: 74 68 65 20 70 72 61 67 6d 61 2c 20 64 6f 20 61  the pragma, do a
4dc0: 20 71 75 65 72 79 20 66 6f 72 20 74 68 65 0a 20   query for the. 
4dd0: 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 20       ** current 
4de0: 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20 65 4d  mode */.      eM
4df0: 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55 52  ode = PAGER_JOUR
4e00: 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 20  NALMODE_QUERY;. 
4e10: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
4e20: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 6f 64  const char *zMod
4e30: 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d  e;.      int n =
4e40: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
4e50: 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20  (zRight);.      
4e60: 66 6f 72 28 65 4d 6f 64 65 3d 30 3b 20 28 7a 4d  for(eMode=0; (zM
4e70: 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 4a 6f 75  ode = sqlite3Jou
4e80: 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4d 6f  rnalModename(eMo
4e90: 64 65 29 29 21 3d 30 3b 20 65 4d 6f 64 65 2b 2b  de))!=0; eMode++
4ea0: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  ){.        if( s
4eb0: 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a  qlite3StrNICmp(z
4ec0: 52 69 67 68 74 2c 20 7a 4d 6f 64 65 2c 20 6e 29  Right, zMode, n)
4ed0: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
4ee0: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 21     }.      if( !
4ef0: 7a 4d 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 20  zMode ){.       
4f00: 20 2f 2a 20 49 66 20 74 68 65 20 22 3d 4d 4f 44   /* If the "=MOD
4f10: 45 22 20 70 61 72 74 20 64 6f 65 73 20 6e 6f 74  E" part does not
4f20: 20 6d 61 74 63 68 20 61 6e 79 20 6b 6e 6f 77 6e   match any known
4f30: 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 0a 20   journal mode,. 
4f40: 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 64         ** then d
4f50: 6f 20 61 20 71 75 65 72 79 20 2a 2f 0a 20 20 20  o a query */.   
4f60: 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50 41 47       eMode = PAG
4f70: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
4f80: 55 45 52 59 3b 0a 20 20 20 20 20 20 7d 0a 20 20  UERY;.      }.  
4f90: 20 20 7d 0a 20 20 20 20 69 66 28 20 65 4d 6f 64    }.    if( eMod
4fa0: 65 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  e==PAGER_JOURNAL
4fb0: 4d 4f 44 45 5f 51 55 45 52 59 20 26 26 20 70 49  MODE_QUERY && pI
4fc0: 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20  d2->n==0 ){.    
4fd0: 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 22 50 52    /* Convert "PR
4fe0: 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  AGMA journal_mod
4ff0: 65 22 20 69 6e 74 6f 20 22 50 52 41 47 4d 41 20  e" into "PRAGMA 
5000: 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  main.journal_mod
5010: 65 22 20 2a 2f 0a 20 20 20 20 20 20 69 44 62 20  e" */.      iDb 
5020: 3d 20 30 3b 0a 20 20 20 20 20 20 70 49 64 32 2d  = 0;.      pId2-
5030: 3e 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  >n = 1;.    }.  
5040: 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62    for(ii=db->nDb
5050: 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29  -1; ii>=0; ii--)
5060: 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  {.      if( db->
5070: 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26 20 28  aDb[ii].pBt && (
5080: 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d  ii==iDb || pId2-
5090: 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20 20  >n==0) ){.      
50a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65    sqlite3VdbeUse
50b0: 73 42 74 72 65 65 28 76 2c 20 69 69 29 3b 0a 20  sBtree(v, ii);. 
50c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
50d0: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4a  beAddOp3(v, OP_J
50e0: 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20 69 69 2c 20  ournalMode, ii, 
50f0: 31 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20  1, eMode);.     
5100: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c   }.    }.    sql
5110: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
5120: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
5130: 31 2c 20 31 29 3b 0a 20 20 20 20 62 72 65 61 6b  1, 1);.    break
5140: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
5150: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
5160: 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c  .]journal_size_l
5170: 69 6d 69 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d  imit.  **  PRAGM
5180: 41 20 5b 73 63 68 65 6d 61 2e 5d 6a 6f 75 72 6e  A [schema.]journ
5190: 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d 4e 0a  al_size_limit=N.
51a0: 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72    **.  ** Get or
51b0: 20 73 65 74 20 74 68 65 20 73 69 7a 65 20 6c 69   set the size li
51c0: 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20  mit on rollback 
51d0: 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e 0a 20  journal files.. 
51e0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
51f0: 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a 45 5f  yp_JOURNAL_SIZE_
5200: 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50 61 67  LIMIT: {.    Pag
5210: 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c  er *pPager = sql
5220: 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
5230: 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 69 36  Db->pBt);.    i6
5240: 34 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b 0a 20  4 iLimit = -2;. 
5250: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
5260: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 65  .      sqlite3De
5270: 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67  cOrHexToI64(zRig
5280: 68 74 2c 20 26 69 4c 69 6d 69 74 29 3b 0a 20 20  ht, &iLimit);.  
5290: 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c 2d      if( iLimit<-
52a0: 31 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b  1 ) iLimit = -1;
52b0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 4c 69 6d 69  .    }.    iLimi
52c0: 74 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  t = sqlite3Pager
52d0: 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d 69 74  JournalSizeLimit
52e0: 28 70 50 61 67 65 72 2c 20 69 4c 69 6d 69 74 29  (pPager, iLimit)
52f0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  ;.    returnSing
5300: 6c 65 49 6e 74 28 76 2c 20 22 6a 6f 75 72 6e 61  leInt(v, "journa
5310: 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c 20 69  l_size_limit", i
5320: 4c 69 6d 69 74 29 3b 0a 20 20 20 20 62 72 65 61  Limit);.    brea
5330: 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66 20 2f  k;.  }..#endif /
5340: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  * SQLITE_OMIT_PA
5350: 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  GER_PRAGMAS */..
5360: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
5370: 41 20 5b 73 63 68 65 6d 61 2e 5d 61 75 74 6f 5f  A [schema.]auto_
5380: 76 61 63 75 75 6d 0a 20 20 2a 2a 20 20 50 52 41  vacuum.  **  PRA
5390: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 75 74  GMA [schema.]aut
53a0: 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a 2a 0a  o_vacuum=N.  **.
53b0: 20 20 2a 2a 20 47 65 74 20 6f 72 20 73 65 74 20    ** Get or set 
53c0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
53d0: 20 64 61 74 61 62 61 73 65 20 27 61 75 74 6f 2d   database 'auto-
53e0: 76 61 63 75 75 6d 27 20 70 61 72 61 6d 65 74 65  vacuum' paramete
53f0: 72 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61 6c 75  r..  ** The valu
5400: 65 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20 30 20  e is one of:  0 
5410: 4e 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20 49 4e  NONE 1 FULL 2 IN
5420: 43 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f 0a 23  CREMENTAL.  */.#
5430: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
5440: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
5450: 63 61 73 65 20 50 72 61 67 54 79 70 5f 41 55 54  case PragTyp_AUT
5460: 4f 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20  O_VACUUM: {.    
5470: 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62  Btree *pBt = pDb
5480: 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72  ->pBt;.    asser
5490: 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20  t( pBt!=0 );.   
54a0: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
54b0: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
54c0: 6c 65 49 6e 74 28 76 2c 20 22 61 75 74 6f 5f 76  leInt(v, "auto_v
54d0: 61 63 75 75 6d 22 2c 20 73 71 6c 69 74 65 33 42  acuum", sqlite3B
54e0: 74 72 65 65 47 65 74 41 75 74 6f 56 61 63 75 75  treeGetAutoVacuu
54f0: 6d 28 70 42 74 29 29 3b 0a 20 20 20 20 7d 65 6c  m(pBt));.    }el
5500: 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 65 41  se{.      int eA
5510: 75 74 6f 20 3d 20 67 65 74 41 75 74 6f 56 61 63  uto = getAutoVac
5520: 75 75 6d 28 7a 52 69 67 68 74 29 3b 0a 20 20 20  uum(zRight);.   
5530: 20 20 20 61 73 73 65 72 74 28 20 65 41 75 74 6f     assert( eAuto
5540: 3e 3d 30 20 26 26 20 65 41 75 74 6f 3c 3d 32 20  >=0 && eAuto<=2 
5550: 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78  );.      db->nex
5560: 74 41 75 74 6f 76 61 63 20 3d 20 28 75 38 29 65  tAutovac = (u8)e
5570: 41 75 74 6f 3b 0a 20 20 20 20 20 20 2f 2a 20 43  Auto;.      /* C
5580: 61 6c 6c 20 53 65 74 41 75 74 6f 56 61 63 75 75  all SetAutoVacuu
5590: 6d 28 29 20 74 6f 20 73 65 74 20 69 6e 69 74 69  m() to set initi
55a0: 61 6c 69 7a 65 20 74 68 65 20 69 6e 74 65 72 6e  alize the intern
55b0: 61 6c 20 61 75 74 6f 20 61 6e 64 0a 20 20 20 20  al auto and.    
55c0: 20 20 2a 2a 20 69 6e 63 72 2d 76 61 63 75 75 6d    ** incr-vacuum
55d0: 20 66 6c 61 67 73 2e 20 54 68 69 73 20 69 73 20   flags. This is 
55e0: 72 65 71 75 69 72 65 64 20 69 6e 20 63 61 73 65  required in case
55f0: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
5600: 0a 20 20 20 20 20 20 2a 2a 20 63 72 65 61 74 65  .      ** create
5610: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
5620: 69 6c 65 2e 20 49 74 20 69 73 20 69 6d 70 6f 72  ile. It is impor
5630: 74 61 6e 74 20 74 68 61 74 20 69 74 20 69 73 20  tant that it is 
5640: 63 72 65 61 74 65 64 0a 20 20 20 20 20 20 2a 2a  created.      **
5650: 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75   as an auto-vacu
5660: 75 6d 20 63 61 70 61 62 6c 65 20 64 62 2e 0a 20  um capable db.. 
5670: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 63       */.      rc
5680: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
5690: 65 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74  etAutoVacuum(pBt
56a0: 2c 20 65 41 75 74 6f 29 3b 0a 20 20 20 20 20 20  , eAuto);.      
56b0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
56c0: 4b 20 26 26 20 28 65 41 75 74 6f 3d 3d 31 20 7c  K && (eAuto==1 |
56d0: 7c 20 65 41 75 74 6f 3d 3d 32 29 20 29 7b 0a 20  | eAuto==2) ){. 
56e0: 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 73         /* When s
56f0: 65 74 74 69 6e 67 20 74 68 65 20 61 75 74 6f 5f  etting the auto_
5700: 76 61 63 75 75 6d 20 6d 6f 64 65 20 74 6f 20 65  vacuum mode to e
5710: 69 74 68 65 72 20 22 66 75 6c 6c 22 20 6f 72 20  ither "full" or 
5720: 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 69 6e 63  .        ** "inc
5730: 72 65 6d 65 6e 74 61 6c 22 2c 20 77 72 69 74 65  remental", write
5740: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 6d 65   the value of me
5750: 74 61 5b 36 5d 20 69 6e 20 74 68 65 20 64 61 74  ta[6] in the dat
5760: 61 62 61 73 65 0a 20 20 20 20 20 20 20 20 2a 2a  abase.        **
5770: 20 66 69 6c 65 2e 20 42 65 66 6f 72 65 20 77 72   file. Before wr
5780: 69 74 69 6e 67 20 74 6f 20 6d 65 74 61 5b 36 5d  iting to meta[6]
5790: 2c 20 63 68 65 63 6b 20 74 68 61 74 20 6d 65 74  , check that met
57a0: 61 5b 33 5d 20 69 6e 64 69 63 61 74 65 73 0a 20  a[3] indicates. 
57b0: 20 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74         ** that t
57c0: 68 69 73 20 72 65 61 6c 6c 79 20 69 73 20 61 6e  his really is an
57d0: 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 63 61 70   auto-vacuum cap
57e0: 61 62 6c 65 20 64 61 74 61 62 61 73 65 2e 0a 20  able database.. 
57f0: 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
5800: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69    static const i
5810: 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46  nt iLn = VDBE_OF
5820: 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a  FSET_LINENO(2);.
5830: 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63          static c
5840: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
5850: 73 65 74 4d 65 74 61 36 5b 5d 20 3d 20 7b 0a 20  setMeta6[] = {. 
5860: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72           { OP_Tr
5870: 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c  ansaction,    0,
5880: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
5890: 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20              0}, 
58a0: 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
58b0: 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f       { OP_ReadCo
58c0: 6f 6b 69 65 2c 20 20 20 20 20 30 2c 20 20 20 20  okie,     0,    
58d0: 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20 20       1,         
58e0: 42 54 52 45 45 5f 4c 41 52 47 45 53 54 5f 52 4f  BTREE_LARGEST_RO
58f0: 4f 54 5f 50 41 47 45 7d 2c 0a 20 20 20 20 20 20  OT_PAGE},.      
5900: 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20      { OP_If,    
5910: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
5920: 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 20      0,          
5930: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
5940: 20 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   2 */.          
5950: 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20 20 20  { OP_Halt,      
5960: 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 2c 20       SQLITE_OK, 
5970: 4f 45 5f 41 62 6f 72 74 2c 20 20 20 20 20 20 20  OE_Abort,       
5980: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a     0},    /* 3 *
5990: 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50  /.          { OP
59a0: 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20  _SetCookie,     
59b0: 20 30 2c 20 20 20 20 20 20 20 20 20 42 54 52 45   0,         BTRE
59c0: 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c 20 30  E_INCR_VACUUM, 0
59d0: 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20  },    /* 4 */.  
59e0: 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20        };.       
59f0: 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20   VdbeOp *aOp;.  
5a00: 20 20 20 20 20 20 69 6e 74 20 69 41 64 64 72 20        int iAddr 
5a10: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
5a20: 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20  rentAddr(v);.   
5a30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5a40: 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52 65  VerifyNoMallocRe
5a50: 71 75 69 72 65 64 28 76 2c 20 41 72 72 61 79 53  quired(v, ArrayS
5a60: 69 7a 65 28 73 65 74 4d 65 74 61 36 29 29 3b 0a  ize(setMeta6));.
5a70: 20 20 20 20 20 20 20 20 61 4f 70 20 3d 20 73 71          aOp = sq
5a80: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
5a90: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
5aa0: 73 65 74 4d 65 74 61 36 29 2c 20 73 65 74 4d 65  setMeta6), setMe
5ab0: 74 61 36 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20  ta6, iLn);.     
5ac0: 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52     if( ONLY_IF_R
5ad0: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f  EALLOC_STRESS(aO
5ae0: 70 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a 20  p==0) ) break;. 
5af0: 20 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31         aOp[0].p1
5b00: 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 20 20   = iDb;.        
5b10: 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44 62 3b  aOp[1].p1 = iDb;
5b20: 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 32 5d 2e  .        aOp[2].
5b30: 70 32 20 3d 20 69 41 64 64 72 2b 34 3b 0a 20 20  p2 = iAddr+4;.  
5b40: 20 20 20 20 20 20 61 4f 70 5b 34 5d 2e 70 31 20        aOp[4].p1 
5b50: 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 20 20 61  = iDb;.        a
5b60: 4f 70 5b 34 5d 2e 70 33 20 3d 20 65 41 75 74 6f  Op[4].p3 = eAuto
5b70: 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 73 71   - 1;.        sq
5b80: 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72  lite3VdbeUsesBtr
5b90: 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20  ee(v, iDb);.    
5ba0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72    }.    }.    br
5bb0: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
5bc0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
5bd0: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69 6e 63 72  MA [schema.]incr
5be0: 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 28 4e  emental_vacuum(N
5bf0: 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20 4e  ).  **.  ** Do N
5c00: 20 73 74 65 70 73 20 6f 66 20 69 6e 63 72 65 6d   steps of increm
5c10: 65 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e 67 20  ental vacuuming 
5c20: 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2e 0a 20  on a database.. 
5c30: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
5c40: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
5c50: 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  UM.  case PragTy
5c60: 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41  p_INCREMENTAL_VA
5c70: 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e 74 20  CUUM: {.    int 
5c80: 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a 20 20  iLimit, addr;.  
5c90: 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20    if( zRight==0 
5ca0: 7c 7c 20 21 73 71 6c 69 74 65 33 47 65 74 49 6e  || !sqlite3GetIn
5cb0: 74 33 32 28 7a 52 69 67 68 74 2c 20 26 69 4c 69  t32(zRight, &iLi
5cc0: 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74 3c 3d  mit) || iLimit<=
5cd0: 30 20 29 7b 0a 20 20 20 20 20 20 69 4c 69 6d 69  0 ){.      iLimi
5ce0: 74 20 3d 20 30 78 37 66 66 66 66 66 66 66 3b 0a  t = 0x7fffffff;.
5cf0: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
5d00: 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61  3BeginWriteOpera
5d10: 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c 20  tion(pParse, 0, 
5d20: 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  iDb);.    sqlite
5d30: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
5d40: 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69 6d 69  P_Integer, iLimi
5d50: 74 2c 20 31 29 3b 0a 20 20 20 20 61 64 64 72 20  t, 1);.    addr 
5d60: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
5d70: 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72 56 61  Op1(v, OP_IncrVa
5d80: 63 75 75 6d 2c 20 69 44 62 29 3b 20 56 64 62 65  cuum, iDb); Vdbe
5d90: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
5da0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5db0: 70 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p1(v, OP_ResultR
5dc0: 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69  ow, 1);.    sqli
5dd0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
5de0: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
5df0: 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  1);.    sqlite3V
5e00: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
5e10: 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 29 3b  IfPos, 1, addr);
5e20: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
5e30: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
5e40: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64  eJumpHere(v, add
5e50: 72 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  r);.    break;. 
5e60: 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64   }.#endif..#ifnd
5e70: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
5e80: 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20 2f  AGER_PRAGMAS.  /
5e90: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
5ea0: 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73 69  schema.]cache_si
5eb0: 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  ze.  **  PRAGMA 
5ec0: 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73  [schema.]cache_s
5ed0: 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ize=N.  **.  ** 
5ee0: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
5ef0: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
5f00: 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67  nt local setting
5f10: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61   for the.  ** pa
5f20: 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20 54  ge cache size. T
5f30: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73  he second form s
5f40: 65 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20  ets the local.  
5f50: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
5f60: 7a 65 20 76 61 6c 75 65 2e 20 20 49 66 20 4e 20  ze value.  If N 
5f70: 69 73 20 70 6f 73 69 74 69 76 65 20 74 68 65 6e  is positive then
5f80: 20 74 68 61 74 20 69 73 20 74 68 65 0a 20 20 2a   that is the.  *
5f90: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * number of page
5fa0: 73 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e 20  s in the cache. 
5fb0: 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76   If N is negativ
5fc0: 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a  e, then the.  **
5fd0: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5fe0: 20 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f 20   is adjusted so 
5ff0: 74 68 61 74 20 74 68 65 20 63 61 63 68 65 20 75  that the cache u
6000: 73 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65 73  ses -N kibibytes
6010: 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79 2e  .  ** of memory.
6020: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
6030: 67 54 79 70 5f 43 41 43 48 45 5f 53 49 5a 45 3a  gTyp_CACHE_SIZE:
6040: 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73   {.    assert( s
6050: 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
6060: 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
6070: 29 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52  ) );.    if( !zR
6080: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65  ight ){.      re
6090: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c  turnSingleInt(v,
60a0: 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 70   "cache_size", p
60b0: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
60c0: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65  he_size);.    }e
60d0: 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73  lse{.      int s
60e0: 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74 6f  ize = sqlite3Ato
60f0: 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  i(zRight);.     
6100: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63   pDb->pSchema->c
6110: 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65  ache_size = size
6120: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
6130: 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65  treeSetCacheSize
6140: 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e  (pDb->pBt, pDb->
6150: 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73  pSchema->cache_s
6160: 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ize);.    }.    
6170: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
6180: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
6190: 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73 70 69  chema.]cache_spi
61a0: 6c 6c 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  ll.  **  PRAGMA 
61b0: 63 61 63 68 65 5f 73 70 69 6c 6c 3d 42 4f 4f 4c  cache_spill=BOOL
61c0: 45 41 4e 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  EAN.  **  PRAGMA
61d0: 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f   [schema.]cache_
61e0: 73 70 69 6c 6c 3d 4e 0a 20 20 2a 2a 0a 20 20 2a  spill=N.  **.  *
61f0: 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d  * The first form
6200: 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72   reports the cur
6210: 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69  rent local setti
6220: 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ng for the.  ** 
6230: 70 61 67 65 20 63 61 63 68 65 20 73 70 69 6c 6c  page cache spill
6240: 20 73 69 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e   size. The secon
6250: 64 20 66 6f 72 6d 20 74 75 72 6e 73 20 63 61 63  d form turns cac
6260: 68 65 20 73 70 69 6c 6c 20 6f 6e 0a 20 20 2a 2a  he spill on.  **
6270: 20 6f 72 20 6f 66 66 2e 20 20 57 68 65 6e 20 74   or off.  When t
6280: 75 72 6e 6e 69 6e 67 20 63 61 63 68 65 20 73 70  urnning cache sp
6290: 69 6c 6c 20 6f 6e 2c 20 74 68 65 20 73 69 7a 65  ill on, the size
62a0: 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 0a 20   is set to the. 
62b0: 20 2a 2a 20 63 75 72 72 65 6e 74 20 63 61 63 68   ** current cach
62c0: 65 5f 73 69 7a 65 2e 20 20 54 68 65 20 74 68 69  e_size.  The thi
62d0: 72 64 20 66 6f 72 6d 20 73 65 74 73 20 61 20 73  rd form sets a s
62e0: 70 69 6c 6c 20 73 69 7a 65 20 74 68 61 74 0a 20  pill size that. 
62f0: 20 2a 2a 20 6d 61 79 20 62 65 20 64 69 66 66 65   ** may be diffe
6300: 72 65 6e 74 20 66 6f 72 6d 20 74 68 65 20 63 61  rent form the ca
6310: 63 68 65 20 73 69 7a 65 2e 0a 20 20 2a 2a 20 49  che size..  ** I
6320: 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65 20  f N is positive 
6330: 74 68 65 6e 20 74 68 61 74 20 69 73 20 74 68 65  then that is the
6340: 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  .  ** number of 
6350: 70 61 67 65 73 20 69 6e 20 74 68 65 20 63 61 63  pages in the cac
6360: 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67  he.  If N is neg
6370: 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65 0a  ative, then the.
6380: 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70    ** number of p
6390: 61 67 65 73 20 69 73 20 61 64 6a 75 73 74 65 64  ages is adjusted
63a0: 20 73 6f 20 74 68 61 74 20 74 68 65 20 63 61 63   so that the cac
63b0: 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69 62  he uses -N kibib
63c0: 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d  ytes.  ** of mem
63d0: 6f 72 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  ory..  **.  ** I
63e0: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  f the number of 
63f0: 63 61 63 68 65 5f 73 70 69 6c 6c 20 70 61 67 65  cache_spill page
6400: 73 20 69 73 20 6c 65 73 73 20 74 68 65 6e 20 74  s is less then t
6410: 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a  he number of.  *
6420: 2a 20 63 61 63 68 65 5f 73 69 7a 65 20 70 61 67  * cache_size pag
6430: 65 73 2c 20 6e 6f 20 73 70 69 6c 6c 69 6e 67 20  es, no spilling 
6440: 6f 63 63 75 72 73 20 75 6e 74 69 6c 20 74 68 65  occurs until the
6450: 20 70 61 67 65 20 63 6f 75 6e 74 20 65 78 63 65   page count exce
6460: 65 64 73 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d  eds.  ** the num
6470: 62 65 72 20 6f 66 20 63 61 63 68 65 5f 73 69 7a  ber of cache_siz
6480: 65 20 70 61 67 65 73 2e 0a 20 20 2a 2a 0a 20 20  e pages..  **.  
6490: 2a 2a 20 54 68 65 20 63 61 63 68 65 5f 73 70 69  ** The cache_spi
64a0: 6c 6c 3d 42 4f 4f 4c 45 41 4e 20 73 65 74 74 69  ll=BOOLEAN setti
64b0: 6e 67 20 61 70 70 6c 69 65 73 20 74 6f 20 61 6c  ng applies to al
64c0: 6c 20 61 74 74 61 63 68 65 64 20 73 63 68 65 6d  l attached schem
64d0: 61 73 2c 0a 20 20 2a 2a 20 6e 6f 74 20 6a 75 73  as,.  ** not jus
64e0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 73 70 65  t the schema spe
64f0: 63 69 66 69 65 64 2e 0a 20 20 2a 2f 0a 20 20 63  cified..  */.  c
6500: 61 73 65 20 50 72 61 67 54 79 70 5f 43 41 43 48  ase PragTyp_CACH
6510: 45 5f 53 50 49 4c 4c 3a 20 7b 0a 20 20 20 20 61  E_SPILL: {.    a
6520: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
6530: 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
6540: 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
6550: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
6560: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
6570: 6c 65 49 6e 74 28 76 2c 20 22 63 61 63 68 65 5f  leInt(v, "cache_
6580: 73 70 69 6c 6c 22 2c 20 0a 20 20 20 20 20 20 20  spill", .       
6590: 20 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53    (db->flags & S
65a0: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
65b0: 29 3d 3d 30 20 3f 20 30 20 3a 20 0a 20 20 20 20  )==0 ? 0 : .    
65c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42          sqlite3B
65d0: 74 72 65 65 53 65 74 53 70 69 6c 6c 53 69 7a 65  treeSetSpillSize
65e0: 28 70 44 62 2d 3e 70 42 74 2c 30 29 29 3b 0a 20  (pDb->pBt,0));. 
65f0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
6600: 69 6e 74 20 73 69 7a 65 20 3d 20 31 3b 0a 20 20  int size = 1;.  
6610: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
6620: 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20  etInt32(zRight, 
6630: 26 73 69 7a 65 29 20 29 7b 0a 20 20 20 20 20 20  &size) ){.      
6640: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
6650: 74 53 70 69 6c 6c 53 69 7a 65 28 70 44 62 2d 3e  tSpillSize(pDb->
6660: 70 42 74 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20  pBt, size);.    
6670: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 73 71    }.      if( sq
6680: 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
6690: 7a 52 69 67 68 74 2c 20 73 69 7a 65 21 3d 30 29  zRight, size!=0)
66a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   ){.        db->
66b0: 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
66c0: 43 61 63 68 65 53 70 69 6c 6c 3b 0a 20 20 20 20  CacheSpill;.    
66d0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
66e0: 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53   db->flags &= ~S
66f0: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
6700: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
6710: 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73  setAllPagerFlags
6720: 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  (db);.    }.    
6730: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
6740: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
6750: 63 68 65 6d 61 2e 5d 6d 6d 61 70 5f 73 69 7a 65  chema.]mmap_size
6760: 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 55 73  (N).  **.  ** Us
6770: 65 64 20 74 6f 20 73 65 74 20 6d 61 70 70 69 6e  ed to set mappin
6780: 67 20 73 69 7a 65 20 6c 69 6d 69 74 2e 20 54 68  g size limit. Th
6790: 65 20 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c  e mapping size l
67a0: 69 6d 69 74 20 69 73 0a 20 20 2a 2a 20 75 73 65  imit is.  ** use
67b0: 64 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 61  d to limit the a
67c0: 67 67 72 65 67 61 74 65 20 73 69 7a 65 20 6f 66  ggregate size of
67d0: 20 61 6c 6c 20 6d 65 6d 6f 72 79 20 6d 61 70 70   all memory mapp
67e0: 65 64 20 72 65 67 69 6f 6e 73 20 6f 66 20 74 68  ed regions of th
67f0: 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20  e.  ** database 
6800: 66 69 6c 65 2e 20 49 66 20 74 68 69 73 20 70 61  file. If this pa
6810: 72 61 6d 65 74 65 72 20 69 73 20 73 65 74 20 74  rameter is set t
6820: 6f 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6d 65 6d  o zero, then mem
6830: 6f 72 79 20 6d 61 70 70 69 6e 67 0a 20 20 2a 2a  ory mapping.  **
6840: 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20   is not used at 
6850: 61 6c 6c 2e 20 20 49 66 20 4e 20 69 73 20 6e 65  all.  If N is ne
6860: 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65  gative, then the
6870: 20 64 65 66 61 75 6c 74 20 6d 65 6d 6f 72 79 20   default memory 
6880: 6d 61 70 0a 20 20 2a 2a 20 6c 69 6d 69 74 20 64  map.  ** limit d
6890: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 73 71 6c  etermined by sql
68a0: 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49  ite3_config(SQLI
68b0: 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53  TE_CONFIG_MMAP_S
68c0: 49 5a 45 29 20 69 73 20 73 65 74 2e 0a 20 20 2a  IZE) is set..  *
68d0: 2a 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20  * The parameter 
68e0: 4e 20 69 73 20 6d 65 61 73 75 72 65 64 20 69 6e  N is measured in
68f0: 20 62 79 74 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a   bytes..  **.  *
6900: 2a 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20  * This value is 
6910: 61 64 76 69 73 6f 72 79 2e 20 20 54 68 65 20 75  advisory.  The u
6920: 6e 64 65 72 6c 79 69 6e 67 20 56 46 53 20 69 73  nderlying VFS is
6930: 20 66 72 65 65 20 74 6f 20 6d 65 6d 6f 72 79 20   free to memory 
6940: 6d 61 70 0a 20 20 2a 2a 20 61 73 20 6c 69 74 74  map.  ** as litt
6950: 6c 65 20 6f 72 20 61 73 20 6d 75 63 68 20 61 73  le or as much as
6960: 20 69 74 20 77 61 6e 74 73 2e 20 20 45 78 63 65   it wants.  Exce
6970: 70 74 2c 20 69 66 20 4e 20 69 73 20 73 65 74 20  pt, if N is set 
6980: 74 6f 20 30 20 74 68 65 6e 20 74 68 65 0a 20 20  to 0 then the.  
6990: 2a 2a 20 75 70 70 65 72 20 6c 61 79 65 72 73 20  ** upper layers 
69a0: 77 69 6c 6c 20 6e 65 76 65 72 20 69 6e 76 6f 6b  will never invok
69b0: 65 20 74 68 65 20 78 46 65 74 63 68 20 69 6e 74  e the xFetch int
69c0: 65 72 66 61 63 65 73 20 74 6f 20 74 68 65 20 56  erfaces to the V
69d0: 46 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  FS..  */.  case 
69e0: 50 72 61 67 54 79 70 5f 4d 4d 41 50 5f 53 49 5a  PragTyp_MMAP_SIZ
69f0: 45 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  E: {.    sqlite3
6a00: 5f 69 6e 74 36 34 20 73 7a 3b 0a 23 69 66 20 53  _int64 sz;.#if S
6a10: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
6a20: 49 5a 45 3e 30 0a 20 20 20 20 61 73 73 65 72 74  IZE>0.    assert
6a30: 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
6a40: 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62  utexHeld(db, iDb
6a50: 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20  , 0) );.    if( 
6a60: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
6a70: 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 73 71  int ii;.      sq
6a80: 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49  lite3DecOrHexToI
6a90: 36 34 28 7a 52 69 67 68 74 2c 20 26 73 7a 29 3b  64(zRight, &sz);
6aa0: 0a 20 20 20 20 20 20 69 66 28 20 73 7a 3c 30 20  .      if( sz<0 
6ab0: 29 20 73 7a 20 3d 20 73 71 6c 69 74 65 33 47 6c  ) sz = sqlite3Gl
6ac0: 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 4d 6d 61  obalConfig.szMma
6ad0: 70 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64  p;.      if( pId
6ae0: 32 2d 3e 6e 3d 3d 30 20 29 20 64 62 2d 3e 73 7a  2->n==0 ) db->sz
6af0: 4d 6d 61 70 20 3d 20 73 7a 3b 0a 20 20 20 20 20  Mmap = sz;.     
6b00: 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d   for(ii=db->nDb-
6b10: 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b  1; ii>=0; ii--){
6b20: 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d  .        if( db-
6b30: 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26 20  >aDb[ii].pBt && 
6b40: 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32  (ii==iDb || pId2
6b50: 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20  ->n==0) ){.     
6b60: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
6b70: 65 53 65 74 4d 6d 61 70 4c 69 6d 69 74 28 64 62  eSetMmapLimit(db
6b80: 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 73  ->aDb[ii].pBt, s
6b90: 7a 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  z);.        }.  
6ba0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
6bb0: 73 7a 20 3d 20 2d 31 3b 0a 20 20 20 20 72 63 20  sz = -1;.    rc 
6bc0: 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63  = sqlite3_file_c
6bd0: 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62 2c 20  ontrol(db, zDb, 
6be0: 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4d 4d 41  SQLITE_FCNTL_MMA
6bf0: 50 5f 53 49 5a 45 2c 20 26 73 7a 29 3b 0a 23 65  P_SIZE, &sz);.#e
6c00: 6c 73 65 0a 20 20 20 20 73 7a 20 3d 20 30 3b 0a  lse.    sz = 0;.
6c10: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
6c20: 4f 4b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69  OK;.#endif.    i
6c30: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
6c40: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
6c50: 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 6d 6d  SingleInt(v, "mm
6c60: 61 70 5f 73 69 7a 65 22 2c 20 73 7a 29 3b 0a 20  ap_size", sz);. 
6c70: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 21     }else if( rc!
6c80: 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44  =SQLITE_NOTFOUND
6c90: 20 29 7b 0a 20 20 20 20 20 20 70 50 61 72 73 65   ){.      pParse
6ca0: 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20  ->nErr++;.      
6cb0: 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b  pParse->rc = rc;
6cc0: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
6cd0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
6ce0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
6cf0: 74 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52 41 47  tore.  **   PRAG
6d00: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  MA temp_store = 
6d10: 22 64 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72  "default"|"memor
6d20: 79 22 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20  y"|"file".  **. 
6d30: 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65   ** Return or se
6d40: 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75  t the local valu
6d50: 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73 74  e of the temp_st
6d60: 6f 72 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ore flag.  Chang
6d70: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63  ing.  ** the loc
6d80: 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f  al value does no
6d90: 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74  t make changes t
6da0: 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20  o the disk file 
6db0: 61 6e 64 20 74 68 65 20 64 65 66 61 75 6c 74 0a  and the default.
6dc0: 20 20 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20    ** value will 
6dd0: 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20  be restored the 
6de0: 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61  next time the da
6df0: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65 64  tabase is opened
6e00: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65  ..  **.  ** Note
6e10: 20 74 68 61 74 20 69 74 20 69 73 20 70 6f 73 73   that it is poss
6e20: 69 62 6c 65 20 66 6f 72 20 74 68 65 20 6c 69 62  ible for the lib
6e30: 72 61 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  rary compile-tim
6e40: 65 20 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a  e options to.  *
6e50: 2a 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20  * override this 
6e60: 73 65 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 63  setting.  */.  c
6e70: 61 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50  ase PragTyp_TEMP
6e80: 5f 53 54 4f 52 45 3a 20 7b 0a 20 20 20 20 69 66  _STORE: {.    if
6e90: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
6ea0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
6eb0: 6e 74 28 76 2c 20 22 74 65 6d 70 5f 73 74 6f 72  nt(v, "temp_stor
6ec0: 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  e", db->temp_sto
6ed0: 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  re);.    }else{.
6ee0: 20 20 20 20 20 20 63 68 61 6e 67 65 54 65 6d 70        changeTemp
6ef0: 53 74 6f 72 61 67 65 28 70 50 61 72 73 65 2c 20  Storage(pParse, 
6f00: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 0a 20  zRight);.    }. 
6f10: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
6f20: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
6f30: 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  A temp_store_dir
6f40: 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52  ectory.  **   PR
6f50: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
6f60: 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22  directory = ""|"
6f70: 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a  directory_name".
6f80: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
6f90: 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61   or set the loca
6fa0: 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74  l value of the t
6fb0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
6fc0: 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ory flag.  Chang
6fd0: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  ing.  ** the val
6fe0: 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66  ue sets a specif
6ff0: 69 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20  ic directory to 
7000: 62 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70  be used for temp
7010: 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a  orary files..  *
7020: 2a 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e  * Setting to a n
7030: 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72  ull string rever
7040: 74 73 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c  ts to the defaul
7050: 74 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  t temporary dire
7060: 63 74 6f 72 79 20 73 65 61 72 63 68 2e 0a 20 20  ctory search..  
7070: 2a 2a 20 49 66 20 74 65 6d 70 6f 72 61 72 79 20  ** If temporary 
7080: 64 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61  directory is cha
7090: 6e 67 65 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c  nged, then inval
70a0: 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65  idateTempStorage
70b0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61  ..  **.  */.  ca
70c0: 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f  se PragTyp_TEMP_
70d0: 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a  STORE_DIRECTORY:
70e0: 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67   {.    if( !zRig
70f0: 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  ht ){.      retu
7100: 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20  rnSingleText(v, 
7110: 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65  "temp_store_dire
7120: 63 74 6f 72 79 22 2c 20 73 71 6c 69 74 65 33 5f  ctory", sqlite3_
7130: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b  temp_directory);
7140: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e  .    }else{.#ifn
7150: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
7160: 57 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52  WSD.      if( zR
7170: 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  ight[0] ){.     
7180: 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20     int res;.    
7190: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
71a0: 4f 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66  OsAccess(db->pVf
71b0: 73 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54  s, zRight, SQLIT
71c0: 45 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52 49  E_ACCESS_READWRI
71d0: 54 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  TE, &res);.     
71e0: 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
71f0: 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29  E_OK || res==0 )
7200: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
7210: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
7220: 73 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61  se, "not a writa
7230: 62 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b  ble directory");
7240: 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
7250: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
7260: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
7270: 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 54      if( SQLITE_T
7280: 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20  EMP_STORE==0.   
7290: 20 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54      || (SQLITE_T
72a0: 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20  EMP_STORE==1 && 
72b0: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d  db->temp_store<=
72c0: 31 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51  1).       || (SQ
72d0: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
72e0: 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73  =2 && db->temp_s
72f0: 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20 20 29  tore==1).      )
7300: 7b 0a 20 20 20 20 20 20 20 20 69 6e 76 61 6c 69  {.        invali
7310: 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28  dateTempStorage(
7320: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 7d  pParse);.      }
7330: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
7340: 72 65 65 28 73 71 6c 69 74 65 33 5f 74 65 6d 70  ree(sqlite3_temp
7350: 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20  _directory);.   
7360: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
7370: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
7380: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
7390: 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ry = sqlite3_mpr
73a0: 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68  intf("%s", zRigh
73b0: 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  t);.      }else{
73c0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
73d0: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20  _temp_directory 
73e0: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  = 0;.      }.#en
73f0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
7400: 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a  IT_WSD */.    }.
7410: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
7420: 23 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49  #if SQLITE_OS_WI
7430: 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  N.  /*.  **   PR
7440: 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f  AGMA data_store_
7450: 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20  directory.  **  
7460: 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f   PRAGMA data_sto
7470: 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22  re_directory = "
7480: 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d  "|"directory_nam
7490: 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  e".  **.  ** Ret
74a0: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c  urn or set the l
74b0: 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  ocal value of th
74c0: 65 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72  e data_store_dir
74d0: 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68  ectory flag.  Ch
74e0: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
74f0: 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65  value sets a spe
7500: 63 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20  cific directory 
7510: 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64  to be used for d
7520: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 74 68  atabase files th
7530: 61 74 0a 20 20 2a 2a 20 77 65 72 65 20 73 70 65  at.  ** were spe
7540: 63 69 66 69 65 64 20 77 69 74 68 20 61 20 72 65  cified with a re
7550: 6c 61 74 69 76 65 20 70 61 74 68 6e 61 6d 65 2e  lative pathname.
7560: 20 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e    Setting to a n
7570: 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72  ull string rever
7580: 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 64  ts.  ** to the d
7590: 65 66 61 75 6c 74 20 64 61 74 61 62 61 73 65 20  efault database 
75a0: 64 69 72 65 63 74 6f 72 79 2c 20 77 68 69 63 68  directory, which
75b0: 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69   for database fi
75c0: 6c 65 73 20 73 70 65 63 69 66 69 65 64 20 77 69  les specified wi
75d0: 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61 74 69  th.  ** a relati
75e0: 76 65 20 70 61 74 68 20 77 69 6c 6c 20 70 72 6f  ve path will pro
75f0: 62 61 62 6c 79 20 62 65 20 62 61 73 65 64 20 6f  bably be based o
7600: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 69  n the current di
7610: 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 0a  rectory for the.
7620: 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20 20 44    ** process.  D
7630: 61 74 61 62 61 73 65 20 66 69 6c 65 20 73 70 65  atabase file spe
7640: 63 69 66 69 65 64 20 77 69 74 68 20 61 6e 20 61  cified with an a
7650: 62 73 6f 6c 75 74 65 20 70 61 74 68 20 61 72 65  bsolute path are
7660: 20 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a 20 20   not impacted.  
7670: 2a 2a 20 62 79 20 74 68 69 73 20 73 65 74 74 69  ** by this setti
7680: 6e 67 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ng, regardless o
7690: 66 20 69 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a  f its value..  *
76a0: 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  *.  */.  case Pr
76b0: 61 67 54 79 70 5f 44 41 54 41 5f 53 54 4f 52 45  agTyp_DATA_STORE
76c0: 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20  _DIRECTORY: {.  
76d0: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
76e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
76f0: 67 6c 65 54 65 78 74 28 76 2c 20 22 64 61 74 61  gleText(v, "data
7700: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
7710: 22 2c 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f  ", sqlite3_data_
7720: 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20  directory);.    
7730: 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20 53  }else{.#ifndef S
7740: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
7750: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
7760: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  0] ){.        in
7770: 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20 20 72  t res;.        r
7780: 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63  c = sqlite3OsAcc
7790: 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52  ess(db->pVfs, zR
77a0: 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41 43 43  ight, SQLITE_ACC
77b0: 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c 20 26  ESS_READWRITE, &
77c0: 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
77d0: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
77e0: 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  || res==0 ){.   
77f0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72         sqlite3Er
7800: 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22  rorMsg(pParse, "
7810: 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64  not a writable d
7820: 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20  irectory");.    
7830: 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d        goto pragm
7840: 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d  a_out;.        }
7850: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
7860: 71 6c 69 74 65 33 5f 66 72 65 65 28 73 71 6c 69  qlite3_free(sqli
7870: 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f  te3_data_directo
7880: 72 79 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  ry);.      if( z
7890: 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20  Right[0] ){.    
78a0: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61      sqlite3_data
78b0: 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 73 71 6c  _directory = sql
78c0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
78d0: 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  ", zRight);.    
78e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
78f0: 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69   sqlite3_data_di
7900: 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20  rectory = 0;.   
7910: 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53     }.#endif /* S
7920: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a  QLITE_OMIT_WSD *
7930: 2f 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  /.    }.    brea
7940: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23  k;.  }.#endif..#
7950: 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  if SQLITE_ENABLE
7960: 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 0a 20  _LOCKING_STYLE. 
7970: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
7980: 41 20 5b 73 63 68 65 6d 61 2e 5d 6c 6f 63 6b 5f  A [schema.]lock_
7990: 70 72 6f 78 79 5f 66 69 6c 65 0a 20 20 2a 2a 20  proxy_file.  ** 
79a0: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
79b0: 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  .]lock_proxy_fil
79c0: 65 20 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f  e = ":auto:"|"lo
79d0: 63 6b 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20 20  ck_file_path".  
79e0: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f  **.  ** Return o
79f0: 72 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20  r set the value 
7a00: 6f 66 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78  of the lock_prox
7a10: 79 5f 66 69 6c 65 20 66 6c 61 67 2e 20 20 43 68  y_file flag.  Ch
7a20: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
7a30: 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65  value sets a spe
7a40: 63 69 66 69 63 20 66 69 6c 65 20 74 6f 20 62 65  cific file to be
7a50: 20 75 73 65 64 20 66 6f 72 20 64 61 74 61 62 61   used for databa
7a60: 73 65 20 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e  se access locks.
7a70: 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73  .  **.  */.  cas
7a80: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50  e PragTyp_LOCK_P
7a90: 52 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20 20  ROXY_FILE: {.   
7aa0: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
7ab0: 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61        Pager *pPa
7ac0: 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
7ad0: 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74  eePager(pDb->pBt
7ae0: 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 70  );.      char *p
7af0: 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d  roxy_file_path =
7b00: 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c   NULL;.      sql
7b10: 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65  ite3_file *pFile
7b20: 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46   = sqlite3PagerF
7b30: 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20  ile(pPager);.   
7b40: 20 20 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65     sqlite3OsFile
7b50: 43 6f 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c  ControlHint(pFil
7b60: 65 2c 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f  e, SQLITE_GET_LO
7b70: 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20  CKPROXYFILE, .  
7b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b90: 20 20 20 20 20 20 20 20 20 26 70 72 6f 78 79 5f           &proxy_
7ba0: 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20  file_path);.    
7bb0: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65    returnSingleTe
7bc0: 78 74 28 76 2c 20 22 6c 6f 63 6b 5f 70 72 6f 78  xt(v, "lock_prox
7bd0: 79 5f 66 69 6c 65 22 2c 20 70 72 6f 78 79 5f 66  y_file", proxy_f
7be0: 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 7d  ile_path);.    }
7bf0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65  else{.      Page
7c00: 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69  r *pPager = sqli
7c10: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
7c20: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 73  b->pBt);.      s
7c30: 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69  qlite3_file *pFi
7c40: 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  le = sqlite3Page
7c50: 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20  rFile(pPager);. 
7c60: 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20       int res;.  
7c70: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30      if( zRight[0
7c80: 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73  ] ){.        res
7c90: 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f  =sqlite3OsFileCo
7ca0: 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c  ntrol(pFile, SQL
7cb0: 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58  ITE_SET_LOCKPROX
7cc0: 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20  YFILE, .        
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 52 69               zRi
7cf0: 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c  ght);.      } el
7d00: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 72 65 73  se {.        res
7d10: 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f  =sqlite3OsFileCo
7d20: 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c  ntrol(pFile, SQL
7d30: 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58  ITE_SET_LOCKPROX
7d40: 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20  YFILE, .        
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c               NUL
7d70: 4c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  L);.      }.    
7d80: 20 20 69 66 28 20 72 65 73 21 3d 53 51 4c 49 54    if( res!=SQLIT
7d90: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
7da0: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
7db0: 70 50 61 72 73 65 2c 20 22 66 61 69 6c 65 64 20  pParse, "failed 
7dc0: 74 6f 20 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78  to set lock prox
7dd0: 79 20 66 69 6c 65 22 29 3b 0a 20 20 20 20 20 20  y file");.      
7de0: 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75    goto pragma_ou
7df0: 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
7e00: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
7e10: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
7e20: 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f  _ENABLE_LOCKING_
7e30: 53 54 59 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20  STYLE */      . 
7e40: 20 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20     .  /*.  **   
7e50: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
7e60: 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a  synchronous.  **
7e70: 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d     PRAGMA [schem
7e80: 61 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f  a.]synchronous=O
7e90: 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55 4c  FF|ON|NORMAL|FUL
7ea0: 4c 7c 45 58 54 52 41 0a 20 20 2a 2a 0a 20 20 2a  L|EXTRA.  **.  *
7eb0: 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20  * Return or set 
7ec0: 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20  the local value 
7ed0: 6f 66 20 74 68 65 20 73 79 6e 63 68 72 6f 6e 6f  of the synchrono
7ee0: 75 73 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69  us flag.  Changi
7ef0: 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61  ng.  ** the loca
7f00: 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74  l value does not
7f10: 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f   make changes to
7f20: 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61   the disk file a
7f30: 6e 64 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61  nd the.  ** defa
7f40: 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62  ult value will b
7f50: 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e  e restored the n
7f60: 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61 74  ext time the dat
7f70: 61 62 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f 70  abase is.  ** op
7f80: 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  ened..  */.  cas
7f90: 65 20 50 72 61 67 54 79 70 5f 53 59 4e 43 48 52  e PragTyp_SYNCHR
7fa0: 4f 4e 4f 55 53 3a 20 7b 0a 20 20 20 20 69 66 28  ONOUS: {.    if(
7fb0: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
7fc0: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
7fd0: 74 28 76 2c 20 22 73 79 6e 63 68 72 6f 6e 6f 75  t(v, "synchronou
7fe0: 73 22 2c 20 70 44 62 2d 3e 73 61 66 65 74 79 5f  s", pDb->safety_
7ff0: 6c 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20 7d 65  level-1);.    }e
8000: 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21  lse{.      if( !
8010: 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
8020: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
8030: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
8040: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  , .            "
8050: 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79  Safety level may
8060: 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20   not be changed 
8070: 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61 63  inside a transac
8080: 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65  tion");.      }e
8090: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  lse{.        int
80a0: 20 69 4c 65 76 65 6c 20 3d 20 28 67 65 74 53 61   iLevel = (getSa
80b0: 66 65 74 79 4c 65 76 65 6c 28 7a 52 69 67 68 74  fetyLevel(zRight
80c0: 2c 30 2c 31 29 2b 31 29 20 26 20 50 41 47 45 52  ,0,1)+1) & PAGER
80d0: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53  _SYNCHRONOUS_MAS
80e0: 4b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  K;.        if( i
80f0: 4c 65 76 65 6c 3d 3d 30 20 29 20 69 4c 65 76 65  Level==0 ) iLeve
8100: 6c 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70  l = 1;.        p
8110: 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c  Db->safety_level
8120: 20 3d 20 69 4c 65 76 65 6c 3b 0a 20 20 20 20 20   = iLevel;.     
8130: 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c     setAllPagerFl
8140: 61 67 73 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  ags(db);.      }
8150: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
8160: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
8170: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
8180: 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  R_PRAGMAS */..#i
8190: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
81a0: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a 20  T_FLAG_PRAGMAS. 
81b0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4c   case PragTyp_FL
81c0: 41 47 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  AG: {.    if( zR
81d0: 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ight==0 ){.     
81e0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
81f0: 28 76 2c 20 70 50 72 61 67 6d 61 2d 3e 7a 4e 61  (v, pPragma->zNa
8200: 6d 65 2c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  me, (db->flags &
8210: 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 29 21   pPragma->iArg)!
8220: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
8230: 0a 20 20 20 20 20 20 69 6e 74 20 6d 61 73 6b 20  .      int mask 
8240: 3d 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 3b  = pPragma->iArg;
8250: 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 62      /* Mask of b
8260: 69 74 73 20 74 6f 20 73 65 74 20 6f 72 20 63 6c  its to set or cl
8270: 65 61 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66  ear. */.      if
8280: 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
8290: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ==0 ){.        /
82a0: 2a 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 73 75  * Foreign key su
82b0: 70 70 6f 72 74 20 6d 61 79 20 6e 6f 74 20 62 65  pport may not be
82c0: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
82d0: 62 6c 65 64 20 77 68 69 6c 65 20 6e 6f 74 0a 20  bled while not. 
82e0: 20 20 20 20 20 20 20 2a 2a 20 69 6e 20 61 75 74         ** in aut
82f0: 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20 20  o-commit mode.  
8300: 2a 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20  */.        mask 
8310: 26 3d 20 7e 28 53 51 4c 49 54 45 5f 46 6f 72 65  &= ~(SQLITE_Fore
8320: 69 67 6e 4b 65 79 73 29 3b 0a 20 20 20 20 20 20  ignKeys);.      
8330: 7d 0a 23 69 66 20 53 51 4c 49 54 45 5f 55 53 45  }.#if SQLITE_USE
8340: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
8350: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61  .      if( db->a
8360: 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 3d 3d 55  uth.authLevel==U
8370: 41 55 54 48 5f 55 73 65 72 20 29 7b 0a 20 20 20  AUTH_User ){.   
8380: 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61       /* Do not a
8390: 6c 6c 6f 77 20 6e 6f 6e 2d 61 64 6d 69 6e 20 75  llow non-admin u
83a0: 73 65 72 73 20 74 6f 20 6d 6f 64 69 66 79 20 74  sers to modify t
83b0: 68 65 20 73 63 68 65 6d 61 20 61 72 62 69 74 72  he schema arbitr
83c0: 61 72 69 6c 79 20 2a 2f 0a 20 20 20 20 20 20 20  arily */.       
83d0: 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54   mask &= ~(SQLIT
83e0: 45 5f 57 72 69 74 65 53 63 68 65 6d 61 29 3b 0a  E_WriteSchema);.
83f0: 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a        }.#endif..
8400: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
8410: 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67  3GetBoolean(zRig
8420: 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20  ht, 0) ){.      
8430: 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 6d    db->flags |= m
8440: 61 73 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ask;.      }else
8450: 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c  {.        db->fl
8460: 61 67 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a 20 20  ags &= ~mask;.  
8470: 20 20 20 20 20 20 69 66 28 20 6d 61 73 6b 3d 3d        if( mask==
8480: 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20  SQLITE_DeferFKs 
8490: 29 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  ) db->nDeferredI
84a0: 6d 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20 20 20 20  mmCons = 0;.    
84b0: 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61    }..      /* Ma
84c0: 6e 79 20 6f 66 20 74 68 65 20 66 6c 61 67 2d 70  ny of the flag-p
84d0: 72 61 67 6d 61 73 20 6d 6f 64 69 66 79 20 74 68  ragmas modify th
84e0: 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 65 64  e code generated
84f0: 20 62 79 20 74 68 65 20 53 51 4c 20 0a 20 20 20   by the SQL .   
8500: 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 28     ** compiler (
8510: 65 67 2e 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65  eg. count_change
8520: 73 29 2e 20 53 6f 20 61 64 64 20 61 6e 20 6f 70  s). So add an op
8530: 63 6f 64 65 20 74 6f 20 65 78 70 69 72 65 20 61  code to expire a
8540: 6c 6c 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70  ll.      ** comp
8550: 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65  iled SQL stateme
8560: 6e 74 73 20 61 66 74 65 72 20 6d 6f 64 69 66 79  nts after modify
8570: 69 6e 67 20 61 20 70 72 61 67 6d 61 20 76 61 6c  ing a pragma val
8580: 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ue..      */.   
8590: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
85a0: 64 4f 70 32 28 76 2c 20 4f 50 5f 45 78 70 69 72  dOp2(v, OP_Expir
85b0: 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  e, 0, 0);.      
85c0: 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73  setAllPagerFlags
85d0: 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  (db);.    }.    
85e0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69  break;.  }.#endi
85f0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
8600: 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 20 2a 2f  _FLAG_PRAGMAS */
8610: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
8620: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
8630: 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  GMAS.  /*.  **  
8640: 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e   PRAGMA table_in
8650: 66 6f 28 3c 74 61 62 6c 65 3e 29 0a 20 20 2a 2a  fo(<table>).  **
8660: 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 61 20 73  .  ** Return a s
8670: 69 6e 67 6c 65 20 72 6f 77 20 66 6f 72 20 65 61  ingle row for ea
8680: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ch column of the
8690: 20 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 54 68   named table. Th
86a0: 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 20 20 2a  e columns of.  *
86b0: 2a 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 64  * the returned d
86c0: 61 74 61 20 73 65 74 20 61 72 65 3a 0a 20 20 2a  ata set are:.  *
86d0: 2a 0a 20 20 2a 2a 20 63 69 64 3a 20 20 20 20 20  *.  ** cid:     
86e0: 20 20 20 43 6f 6c 75 6d 6e 20 69 64 20 28 6e 75     Column id (nu
86f0: 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74  mbered from left
8700: 20 74 6f 20 72 69 67 68 74 2c 20 73 74 61 72 74   to right, start
8710: 69 6e 67 20 61 74 20 30 29 0a 20 20 2a 2a 20 6e  ing at 0).  ** n
8720: 61 6d 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d  ame:       Colum
8730: 6e 20 6e 61 6d 65 0a 20 20 2a 2a 20 74 79 70 65  n name.  ** type
8740: 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 64  :       Column d
8750: 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 2e  eclaration type.
8760: 0a 20 20 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a 20 20  .  ** notnull:  
8770: 20 20 54 72 75 65 20 69 66 20 27 4e 4f 54 20 4e    True if 'NOT N
8780: 55 4c 4c 27 20 69 73 20 70 61 72 74 20 6f 66 20  ULL' is part of 
8790: 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69  column declarati
87a0: 6f 6e 0a 20 20 2a 2a 20 64 66 6c 74 5f 76 61 6c  on.  ** dflt_val
87b0: 75 65 3a 20 54 68 65 20 64 65 66 61 75 6c 74 20  ue: The default 
87c0: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 63 6f  value for the co
87d0: 6c 75 6d 6e 2c 20 69 66 20 61 6e 79 2e 0a 20 20  lumn, if any..  
87e0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
87f0: 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 3a 20 69 66  p_TABLE_INFO: if
8800: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
8810: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20  Table *pTab;.   
8820: 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46   pTab = sqlite3F
8830: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69  indTable(db, zRi
8840: 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69  ght, zDb);.    i
8850: 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20  f( pTab ){.     
8860: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
8870: 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a  ar *azCol[] = {.
8880: 20 20 20 20 20 20 20 20 20 22 63 69 64 22 2c 20           "cid", 
8890: 22 6e 61 6d 65 22 2c 20 22 74 79 70 65 22 2c 20  "name", "type", 
88a0: 22 6e 6f 74 6e 75 6c 6c 22 2c 20 22 64 66 6c 74  "notnull", "dflt
88b0: 5f 76 61 6c 75 65 22 2c 20 22 70 6b 22 0a 20 20  _value", "pk".  
88c0: 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74      };.      int
88d0: 20 69 2c 20 6b 3b 0a 20 20 20 20 20 20 69 6e 74   i, k;.      int
88e0: 20 6e 48 69 64 64 65 6e 20 3d 20 30 3b 0a 20 20   nHidden = 0;.  
88f0: 20 20 20 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c      Column *pCol
8900: 3b 0a 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70  ;.      Index *p
8910: 50 6b 20 3d 20 73 71 6c 69 74 65 33 50 72 69 6d  Pk = sqlite3Prim
8920: 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61 62  aryKeyIndex(pTab
8930: 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  );.      pParse-
8940: 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20  >nMem = 6;.     
8950: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
8960: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
8970: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 65 74   iDb);.      set
8980: 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76  AllColumnNames(v
8990: 2c 20 36 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73  , 6, azCol); ass
89a0: 65 72 74 28 20 36 3d 3d 41 72 72 61 79 53 69 7a  ert( 6==ArraySiz
89b0: 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20  e(azCol) );.    
89c0: 20 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74    sqlite3ViewGet
89d0: 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72  ColumnNames(pPar
89e0: 73 65 2c 20 70 54 61 62 29 3b 0a 20 20 20 20 20  se, pTab);.     
89f0: 20 66 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d 70   for(i=0, pCol=p
8a00: 54 61 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54 61  Tab->aCol; i<pTa
8a10: 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43  b->nCol; i++, pC
8a20: 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69  ol++){.        i
8a30: 66 28 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  f( IsHiddenColum
8a40: 6e 28 70 43 6f 6c 29 20 29 7b 0a 20 20 20 20 20  n(pCol) ){.     
8a50: 20 20 20 20 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a       nHidden++;.
8a60: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
8a70: 75 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ue;.        }.  
8a80: 20 20 20 20 20 20 69 66 28 20 28 70 43 6f 6c 2d        if( (pCol-
8a90: 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
8aa0: 4c 41 47 5f 50 52 49 4d 4b 45 59 29 3d 3d 30 20  LAG_PRIMKEY)==0 
8ab0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d  ){.          k =
8ac0: 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   0;.        }els
8ad0: 65 20 69 66 28 20 70 50 6b 3d 3d 30 20 29 7b 0a  e if( pPk==0 ){.
8ae0: 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 31 3b            k = 1;
8af0: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
8b00: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b 3d            for(k=
8b10: 31 3b 20 6b 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c  1; k<=pTab->nCol
8b20: 20 26 26 20 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d   && pPk->aiColum
8b30: 6e 5b 6b 2d 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b  n[k-1]!=i; k++){
8b40: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
8b50: 20 20 20 20 61 73 73 65 72 74 28 20 70 43 6f 6c      assert( pCol
8b60: 2d 3e 70 44 66 6c 74 3d 3d 30 20 7c 7c 20 70 43  ->pDflt==0 || pC
8b70: 6f 6c 2d 3e 70 44 66 6c 74 2d 3e 6f 70 3d 3d 54  ol->pDflt->op==T
8b80: 4b 5f 53 50 41 4e 20 29 3b 0a 20 20 20 20 20 20  K_SPAN );.      
8b90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c    sqlite3VdbeMul
8ba0: 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69 73  tiLoad(v, 1, "is
8bb0: 73 69 73 69 22 2c 0a 20 20 20 20 20 20 20 20 20  sisi",.         
8bc0: 20 20 20 20 20 20 69 2d 6e 48 69 64 64 65 6e 2c        i-nHidden,
8bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8be0: 70 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20  pCol->zName,.   
8bf0: 20 20 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c              pCol
8c00: 2d 3e 7a 54 79 70 65 20 3f 20 70 43 6f 6c 2d 3e  ->zType ? pCol->
8c10: 7a 54 79 70 65 20 3a 20 22 22 2c 0a 20 20 20 20  zType : "",.    
8c20: 20 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c 2d             pCol-
8c30: 3e 6e 6f 74 4e 75 6c 6c 20 3f 20 31 20 3a 20 30  >notNull ? 1 : 0
8c40: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
8c50: 20 70 43 6f 6c 2d 3e 70 44 66 6c 74 20 3f 20 70   pCol->pDflt ? p
8c60: 43 6f 6c 2d 3e 70 44 66 6c 74 2d 3e 75 2e 7a 54  Col->pDflt->u.zT
8c70: 6f 6b 65 6e 20 3a 20 30 2c 0a 20 20 20 20 20 20  oken : 0,.      
8c80: 20 20 20 20 20 20 20 20 20 6b 29 3b 0a 20 20 20           k);.   
8c90: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8ca0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
8cb0: 75 6c 74 52 6f 77 2c 20 31 2c 20 36 29 3b 0a 20  ultRow, 1, 6);. 
8cc0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
8cd0: 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73  .  break;..  cas
8ce0: 65 20 50 72 61 67 54 79 70 5f 53 54 41 54 53 3a  e PragTyp_STATS:
8cf0: 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f   {.    static co
8d00: 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b  nst char *azCol[
8d10: 5d 20 3d 20 7b 20 22 74 61 62 6c 65 22 2c 20 22  ] = { "table", "
8d20: 69 6e 64 65 78 22 2c 20 22 77 69 64 74 68 22 2c  index", "width",
8d30: 20 22 68 65 69 67 68 74 22 20 7d 3b 0a 20 20 20   "height" };.   
8d40: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20   Index *pIdx;.  
8d50: 20 20 48 61 73 68 45 6c 65 6d 20 2a 69 3b 0a 20    HashElem *i;. 
8d60: 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65     v = sqlite3Ge
8d70: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20  tVdbe(pParse);. 
8d80: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
8d90: 3d 20 34 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 4;.    sqlite3
8da0: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
8db0: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
8dc0: 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e     setAllColumnN
8dd0: 61 6d 65 73 28 76 2c 20 34 2c 20 61 7a 43 6f 6c  ames(v, 4, azCol
8de0: 29 3b 20 20 61 73 73 65 72 74 28 20 34 3d 3d 41  );  assert( 4==A
8df0: 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20  rraySize(azCol) 
8e00: 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 73 71 6c  );.    for(i=sql
8e10: 69 74 65 48 61 73 68 46 69 72 73 74 28 26 70 44  iteHashFirst(&pD
8e20: 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48  b->pSchema->tblH
8e30: 61 73 68 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74  ash); i; i=sqlit
8e40: 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b 0a 20  eHashNext(i)){. 
8e50: 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62       Table *pTab
8e60: 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74   = sqliteHashDat
8e70: 61 28 69 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  a(i);.      sqli
8e80: 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64  te3VdbeMultiLoad
8e90: 28 76 2c 20 31 2c 20 22 73 73 69 69 22 2c 0a 20  (v, 1, "ssii",. 
8ea0: 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e            pTab->
8eb0: 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20  zName,.         
8ec0: 20 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20    0,.           
8ed0: 70 54 61 62 2d 3e 73 7a 54 61 62 52 6f 77 2c 0a  pTab->szTabRow,.
8ee0: 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d             pTab-
8ef0: 3e 6e 52 6f 77 4c 6f 67 45 73 74 29 3b 0a 20 20  >nRowLogEst);.  
8f00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
8f10: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
8f20: 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20 20  ltRow, 1, 4);.  
8f30: 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61      for(pIdx=pTa
8f40: 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
8f50: 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
8f60: 74 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  t){.        sqli
8f70: 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64  te3VdbeMultiLoad
8f80: 28 76 2c 20 32 2c 20 22 73 69 69 22 2c 0a 20 20  (v, 2, "sii",.  
8f90: 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 7a           pIdx->z
8fa0: 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
8fb0: 20 70 49 64 78 2d 3e 73 7a 49 64 78 52 6f 77 2c   pIdx->szIdxRow,
8fc0: 0a 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78  .           pIdx
8fd0: 2d 3e 61 69 52 6f 77 4c 6f 67 45 73 74 5b 30 5d  ->aiRowLogEst[0]
8fe0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
8ff0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
9000: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
9010: 20 34 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   4);.      }.   
9020: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
9030: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
9040: 49 4e 44 45 58 5f 49 4e 46 4f 3a 20 69 66 28 20  INDEX_INFO: if( 
9050: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 49 6e  zRight ){.    In
9060: 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 54  dex *pIdx;.    T
9070: 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20  able *pTab;.    
9080: 70 49 64 78 20 3d 20 73 71 6c 69 74 65 33 46 69  pIdx = sqlite3Fi
9090: 6e 64 49 6e 64 65 78 28 64 62 2c 20 7a 52 69 67  ndIndex(db, zRig
90a0: 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66  ht, zDb);.    if
90b0: 28 20 70 49 64 78 20 29 7b 0a 20 20 20 20 20 20  ( pIdx ){.      
90c0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
90d0: 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20  r *azCol[] = {. 
90e0: 20 20 20 20 20 20 20 20 22 73 65 71 6e 6f 22 2c          "seqno",
90f0: 20 22 63 69 64 22 2c 20 22 6e 61 6d 65 22 2c 20   "cid", "name", 
9100: 22 64 65 73 63 22 2c 20 22 63 6f 6c 6c 22 2c 20  "desc", "coll", 
9110: 22 6b 65 79 22 0a 20 20 20 20 20 20 7d 3b 0a 20  "key".      };. 
9120: 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20       int i;.    
9130: 20 20 69 6e 74 20 6d 78 3b 0a 20 20 20 20 20 20    int mx;.      
9140: 69 66 28 20 70 50 72 61 67 6d 61 2d 3e 69 41 72  if( pPragma->iAr
9150: 67 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  g ){.        /* 
9160: 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e  PRAGMA index_xin
9170: 66 6f 20 28 6e 65 77 65 72 20 76 65 72 73 69 6f  fo (newer versio
9180: 6e 20 77 69 74 68 20 6d 6f 72 65 20 72 6f 77 73  n with more rows
9190: 20 61 6e 64 20 63 6f 6c 75 6d 6e 73 29 20 2a 2f   and columns) */
91a0: 0a 20 20 20 20 20 20 20 20 6d 78 20 3d 20 70 49  .        mx = pI
91b0: 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 0a 20 20 20  dx->nColumn;.   
91c0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
91d0: 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20 7d 65 6c  m = 6;.      }el
91e0: 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 50  se{.        /* P
91f0: 52 41 47 4d 41 20 69 6e 64 65 78 5f 69 6e 66 6f  RAGMA index_info
9200: 20 28 6c 65 67 61 63 79 20 76 65 72 73 69 6f 6e   (legacy version
9210: 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 78 20  ) */.        mx 
9220: 3d 20 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b  = pIdx->nKeyCol;
9230: 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d  .        pParse-
9240: 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 20  >nMem = 3;.     
9250: 20 7d 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20   }.      pTab = 
9260: 70 49 64 78 2d 3e 70 54 61 62 6c 65 3b 0a 20 20  pIdx->pTable;.  
9270: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
9280: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
9290: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  se, iDb);.      
92a0: 61 73 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e  assert( pParse->
92b0: 6e 4d 65 6d 3c 3d 41 72 72 61 79 53 69 7a 65 28  nMem<=ArraySize(
92c0: 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 20 20  azCol) );.      
92d0: 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65  setAllColumnName
92e0: 73 28 76 2c 20 70 50 61 72 73 65 2d 3e 6e 4d 65  s(v, pParse->nMe
92f0: 6d 2c 20 61 7a 43 6f 6c 29 3b 0a 20 20 20 20 20  m, azCol);.     
9300: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6d 78 3b 20   for(i=0; i<mx; 
9310: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 31  i++){.        i1
9320: 36 20 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61  6 cnum = pIdx->a
9330: 69 43 6f 6c 75 6d 6e 5b 69 5d 3b 0a 20 20 20 20  iColumn[i];.    
9340: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
9350: 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22  ultiLoad(v, 1, "
9360: 69 69 73 22 2c 20 69 2c 20 63 6e 75 6d 2c 0a 20  iis", i, cnum,. 
9370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9380: 20 20 20 20 20 20 20 20 20 20 20 20 63 6e 75 6d              cnum
9390: 3c 30 20 3f 20 30 20 3a 20 70 54 61 62 2d 3e 61  <0 ? 0 : pTab->a
93a0: 43 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61 6d 65 29  Col[cnum].zName)
93b0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50  ;.        if( pP
93c0: 72 61 67 6d 61 2d 3e 69 41 72 67 20 29 7b 0a 20  ragma->iArg ){. 
93d0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
93e0: 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c  VdbeMultiLoad(v,
93f0: 20 34 2c 20 22 69 73 69 22 2c 0a 20 20 20 20 20   4, "isi",.     
9400: 20 20 20 20 20 20 20 70 49 64 78 2d 3e 61 53 6f         pIdx->aSo
9410: 72 74 4f 72 64 65 72 5b 69 5d 2c 0a 20 20 20 20  rtOrder[i],.    
9420: 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 61 7a          pIdx->az
9430: 43 6f 6c 6c 5b 69 5d 2c 0a 20 20 20 20 20 20 20  Coll[i],.       
9440: 20 20 20 20 20 69 3c 70 49 64 78 2d 3e 6e 4b 65       i<pIdx->nKe
9450: 79 43 6f 6c 29 3b 0a 20 20 20 20 20 20 20 20 7d  yCol);.        }
9460: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9470: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
9480: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 70  _ResultRow, 1, p
9490: 50 61 72 73 65 2d 3e 6e 4d 65 6d 29 3b 0a 20 20  Parse->nMem);.  
94a0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
94b0: 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65    break;..  case
94c0: 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c   PragTyp_INDEX_L
94d0: 49 53 54 3a 20 69 66 28 20 7a 52 69 67 68 74 20  IST: if( zRight 
94e0: 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  ){.    Index *pI
94f0: 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70  dx;.    Table *p
9500: 54 61 62 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  Tab;.    int i;.
9510: 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74      pTab = sqlit
9520: 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20  e3FindTable(db, 
9530: 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20  zRight, zDb);.  
9540: 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20    if( pTab ){.  
9550: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
9560: 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d   char *azCol[] =
9570: 20 7b 0a 20 20 20 20 20 20 20 20 22 73 65 71 22   {.        "seq"
9580: 2c 20 22 6e 61 6d 65 22 2c 20 22 75 6e 69 71 75  , "name", "uniqu
9590: 65 22 2c 20 22 6f 72 69 67 69 6e 22 2c 20 22 70  e", "origin", "p
95a0: 61 72 74 69 61 6c 22 0a 20 20 20 20 20 20 7d 3b  artial".      };
95b0: 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74  .      v = sqlit
95c0: 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65  e3GetVdbe(pParse
95d0: 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  );.      pParse-
95e0: 3e 6e 4d 65 6d 20 3d 20 35 3b 0a 20 20 20 20 20  >nMem = 5;.     
95f0: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
9600: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
9610: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 65 74   iDb);.      set
9620: 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76  AllColumnNames(v
9630: 2c 20 35 2c 20 61 7a 43 6f 6c 29 3b 20 20 61 73  , 5, azCol);  as
9640: 73 65 72 74 28 20 35 3d 3d 41 72 72 61 79 53 69  sert( 5==ArraySi
9650: 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20  ze(azCol) );.   
9660: 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62     for(pIdx=pTab
9670: 2d 3e 70 49 6e 64 65 78 2c 20 69 3d 30 3b 20 70  ->pIndex, i=0; p
9680: 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
9690: 70 4e 65 78 74 2c 20 69 2b 2b 29 7b 0a 20 20 20  pNext, i++){.   
96a0: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
96b0: 2a 61 7a 4f 72 69 67 69 6e 5b 5d 20 3d 20 7b 20  *azOrigin[] = { 
96c0: 22 63 22 2c 20 22 75 22 2c 20 22 70 6b 22 20 7d  "c", "u", "pk" }
96d0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
96e0: 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76  3VdbeMultiLoad(v
96f0: 2c 20 31 2c 20 22 69 73 69 73 69 22 2c 0a 20 20  , 1, "isisi",.  
9700: 20 20 20 20 20 20 20 20 20 69 2c 0a 20 20 20 20           i,.    
9710: 20 20 20 20 20 20 20 70 49 64 78 2d 3e 7a 4e 61         pIdx->zNa
9720: 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 49  me,.           I
9730: 73 55 6e 69 71 75 65 49 6e 64 65 78 28 70 49 64  sUniqueIndex(pId
9740: 78 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 61  x),.           a
9750: 7a 4f 72 69 67 69 6e 5b 70 49 64 78 2d 3e 69 64  zOrigin[pIdx->id
9760: 78 54 79 70 65 5d 2c 0a 20 20 20 20 20 20 20 20  xType],.        
9770: 20 20 20 70 49 64 78 2d 3e 70 50 61 72 74 49 64     pIdx->pPartId
9780: 78 57 68 65 72 65 21 3d 30 29 3b 0a 20 20 20 20  xWhere!=0);.    
9790: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
97a0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
97b0: 6c 74 52 6f 77 2c 20 31 2c 20 35 29 3b 0a 20 20  ltRow, 1, 5);.  
97c0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
97d0: 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65    break;..  case
97e0: 20 50 72 61 67 54 79 70 5f 44 41 54 41 42 41 53   PragTyp_DATABAS
97f0: 45 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20 73 74  E_LIST: {.    st
9800: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
9810: 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 73 65  *azCol[] = { "se
9820: 71 22 2c 20 22 6e 61 6d 65 22 2c 20 22 66 69 6c  q", "name", "fil
9830: 65 22 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b  e" };.    int i;
9840: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
9850: 6d 20 3d 20 33 3b 0a 20 20 20 20 73 65 74 41 6c  m = 3;.    setAl
9860: 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20  lColumnNames(v, 
9870: 33 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72  3, azCol); asser
9880: 74 28 20 33 3d 3d 41 72 72 61 79 53 69 7a 65 28  t( 3==ArraySize(
9890: 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 66 6f  azCol) );.    fo
98a0: 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
98b0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66  ; i++){.      if
98c0: 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  ( db->aDb[i].pBt
98d0: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
98e0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
98f0: 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 21 3d  ->aDb[i].zName!=
9900: 30 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 );.      sqlit
9910: 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28  e3VdbeMultiLoad(
9920: 76 2c 20 31 2c 20 22 69 73 73 22 2c 0a 20 20 20  v, 1, "iss",.   
9930: 20 20 20 20 20 20 69 2c 0a 20 20 20 20 20 20 20        i,.       
9940: 20 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61    db->aDb[i].zNa
9950: 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 73 71 6c  me,.         sql
9960: 69 74 65 33 42 74 72 65 65 47 65 74 46 69 6c 65  ite3BtreeGetFile
9970: 6e 61 6d 65 28 64 62 2d 3e 61 44 62 5b 69 5d 2e  name(db->aDb[i].
9980: 70 42 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c  pBt));.      sql
9990: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
99a0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
99b0: 31 2c 20 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  1, 3);.    }.  }
99c0: 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73  .  break;..  cas
99d0: 65 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c 41 54  e PragTyp_COLLAT
99e0: 49 4f 4e 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20  ION_LIST: {.    
99f0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
9a00: 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22  r *azCol[] = { "
9a10: 73 65 71 22 2c 20 22 6e 61 6d 65 22 20 7d 3b 0a  seq", "name" };.
9a20: 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20      int i = 0;. 
9a30: 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 70 3b 0a     HashElem *p;.
9a40: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
9a50: 20 3d 20 32 3b 0a 20 20 20 20 73 65 74 41 6c 6c   = 2;.    setAll
9a60: 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 32  ColumnNames(v, 2
9a70: 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74  , azCol); assert
9a80: 28 20 32 3d 3d 41 72 72 61 79 53 69 7a 65 28 61  ( 2==ArraySize(a
9a90: 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 66 6f 72  zCol) );.    for
9aa0: 28 70 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72  (p=sqliteHashFir
9ab0: 73 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71  st(&db->aCollSeq
9ac0: 29 3b 20 70 3b 20 70 3d 73 71 6c 69 74 65 48 61  ); p; p=sqliteHa
9ad0: 73 68 4e 65 78 74 28 70 29 29 7b 0a 20 20 20 20  shNext(p)){.    
9ae0: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
9af0: 20 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71   = (CollSeq *)sq
9b00: 6c 69 74 65 48 61 73 68 44 61 74 61 28 70 29 3b  liteHashData(p);
9b10: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
9b20: 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31  beMultiLoad(v, 1
9b30: 2c 20 22 69 73 22 2c 20 69 2b 2b 2c 20 70 43 6f  , "is", i++, pCo
9b40: 6c 6c 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  ll->zName);.    
9b50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9b60: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
9b70: 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20  Row, 1, 2);.    
9b80: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  }.  }.  break;.#
9b90: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
9ba0: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47  OMIT_SCHEMA_PRAG
9bb0: 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
9bc0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
9bd0: 49 47 4e 5f 4b 45 59 0a 20 20 63 61 73 65 20 50  IGN_KEY.  case P
9be0: 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b  ragTyp_FOREIGN_K
9bf0: 45 59 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52 69  EY_LIST: if( zRi
9c00: 67 68 74 20 29 7b 0a 20 20 20 20 46 4b 65 79 20  ght ){.    FKey 
9c10: 2a 70 46 4b 3b 0a 20 20 20 20 54 61 62 6c 65 20  *pFK;.    Table 
9c20: 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20  *pTab;.    pTab 
9c30: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62  = sqlite3FindTab
9c40: 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a  le(db, zRight, z
9c50: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61  Db);.    if( pTa
9c60: 62 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73  b ){.      v = s
9c70: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
9c80: 61 72 73 65 29 3b 0a 20 20 20 20 20 20 70 46 4b  arse);.      pFK
9c90: 20 3d 20 70 54 61 62 2d 3e 70 46 4b 65 79 3b 0a   = pTab->pFKey;.
9ca0: 20 20 20 20 20 20 69 66 28 20 70 46 4b 20 29 7b        if( pFK ){
9cb0: 0a 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20  .        static 
9cc0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f  const char *azCo
9cd0: 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20  l[] = {.        
9ce0: 20 20 20 22 69 64 22 2c 20 22 73 65 71 22 2c 20     "id", "seq", 
9cf0: 22 74 61 62 6c 65 22 2c 20 22 66 72 6f 6d 22 2c  "table", "from",
9d00: 20 22 74 6f 22 2c 20 22 6f 6e 5f 75 70 64 61 74   "to", "on_updat
9d10: 65 22 2c 20 22 6f 6e 5f 64 65 6c 65 74 65 22 2c  e", "on_delete",
9d20: 0a 20 20 20 20 20 20 20 20 20 20 20 22 6d 61 74  .           "mat
9d30: 63 68 22 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20  ch".        };. 
9d40: 20 20 20 20 20 20 20 69 6e 74 20 69 20 3d 20 30         int i = 0
9d50: 3b 20 0a 20 20 20 20 20 20 20 20 70 50 61 72 73  ; .        pPars
9d60: 65 2d 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20 20  e->nMem = 8;.   
9d70: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65       sqlite3Code
9d80: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
9d90: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  rse, iDb);.     
9da0: 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e     setAllColumnN
9db0: 61 6d 65 73 28 76 2c 20 38 2c 20 61 7a 43 6f 6c  ames(v, 8, azCol
9dc0: 29 3b 20 61 73 73 65 72 74 28 20 38 3d 3d 41 72  ); assert( 8==Ar
9dd0: 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29  raySize(azCol) )
9de0: 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28  ;.        while(
9df0: 70 46 4b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  pFK){.          
9e00: 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 20 20 20  int j;.         
9e10: 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d   for(j=0; j<pFK-
9e20: 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20  >nCol; j++){.   
9e30: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
9e40: 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c  VdbeMultiLoad(v,
9e50: 20 31 2c 20 22 69 69 73 73 73 73 73 73 22 2c 0a   1, "iissssss",.
9e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e70: 20 20 20 69 2c 0a 20 20 20 20 20 20 20 20 20 20     i,.          
9e80: 20 20 20 20 20 20 20 20 20 6a 2c 0a 20 20 20 20           j,.    
9e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
9ea0: 46 4b 2d 3e 7a 54 6f 2c 0a 20 20 20 20 20 20 20  FK->zTo,.       
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62              pTab
9ec0: 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c  ->aCol[pFK->aCol
9ed0: 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65  [j].iFrom].zName
9ee0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
9ef0: 20 20 20 20 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a       pFK->aCol[j
9f00: 5d 2e 7a 43 6f 6c 2c 0a 20 20 20 20 20 20 20 20  ].zCol,.        
9f10: 20 20 20 20 20 20 20 20 20 20 20 61 63 74 69 6f             actio
9f20: 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69  nName(pFK->aActi
9f30: 6f 6e 5b 31 5d 29 2c 20 20 2f 2a 20 4f 4e 20 55  on[1]),  /* ON U
9f40: 50 44 41 54 45 20 2a 2f 0a 20 20 20 20 20 20 20  PDATE */.       
9f50: 20 20 20 20 20 20 20 20 20 20 20 20 61 63 74 69              acti
9f60: 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74  onName(pFK->aAct
9f70: 69 6f 6e 5b 30 5d 29 2c 20 20 2f 2a 20 4f 4e 20  ion[0]),  /* ON 
9f80: 44 45 4c 45 54 45 20 2a 2f 0a 20 20 20 20 20 20  DELETE */.      
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 4f               "NO
9fa0: 4e 45 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  NE");.          
9fb0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9fc0: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
9fd0: 52 6f 77 2c 20 31 2c 20 38 29 3b 0a 20 20 20 20  Row, 1, 8);.    
9fe0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
9ff0: 20 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20 20    ++i;.         
a000: 20 70 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65 78   pFK = pFK->pNex
a010: 74 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20 7d  tFrom;.        }
a020: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
a030: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
a040: 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
a050: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
a060: 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e  GN_KEY) */..#ifn
a070: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
a080: 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 23 69 66 6e  FOREIGN_KEY.#ifn
a090: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
a0a0: 54 52 49 47 47 45 52 0a 20 20 63 61 73 65 20 50  TRIGGER.  case P
a0b0: 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b  ragTyp_FOREIGN_K
a0c0: 45 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20  EY_CHECK: {.    
a0d0: 46 4b 65 79 20 2a 70 46 4b 3b 20 20 20 20 20 20  FKey *pFK;      
a0e0: 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6f 72 65         /* A fore
a0f0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
a100: 6e 74 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  nt */.    Table 
a110: 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
a120: 20 2f 2a 20 43 68 69 6c 64 20 74 61 62 6c 65 20   /* Child table 
a130: 63 6f 6e 74 61 69 6e 20 22 52 45 46 45 52 45 4e  contain "REFEREN
a140: 43 45 53 22 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  CES" keyword */.
a150: 20 20 20 20 54 61 62 6c 65 20 2a 70 50 61 72 65      Table *pPare
a160: 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 61  nt;        /* Pa
a170: 72 65 6e 74 20 74 61 62 6c 65 20 74 68 61 74 20  rent table that 
a180: 63 68 69 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20  child points to 
a190: 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  */.    Index *pI
a1a0: 64 78 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  dx;           /*
a1b0: 20 49 6e 64 65 78 20 69 6e 20 74 68 65 20 70 61   Index in the pa
a1c0: 72 65 6e 74 20 74 61 62 6c 65 20 2a 2f 0a 20 20  rent table */.  
a1d0: 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
a1e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
a1f0: 20 63 6f 75 6e 74 65 72 3a 20 20 46 6f 72 65 69   counter:  Forei
a200: 67 6e 20 6b 65 79 20 6e 75 6d 62 65 72 20 66 6f  gn key number fo
a210: 72 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e  r pTab */.    in
a220: 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20  t j;            
a230: 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
a240: 6e 74 65 72 3a 20 20 46 69 65 6c 64 20 6f 66 20  nter:  Field of 
a250: 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
a260: 2a 2f 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20  */.    HashElem 
a270: 2a 6b 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  *k;           /*
a280: 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20   Loop counter:  
a290: 4e 65 78 74 20 74 61 62 6c 65 20 69 6e 20 73 63  Next table in sc
a2a0: 68 65 6d 61 20 2a 2f 0a 20 20 20 20 69 6e 74 20  hema */.    int 
a2b0: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
a2c0: 20 20 20 2f 2a 20 72 65 73 75 6c 74 20 76 61 72     /* result var
a2d0: 69 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  iable */.    int
a2e0: 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 20   regResult;     
a2f0: 20 20 20 20 2f 2a 20 33 20 72 65 67 69 73 74 65      /* 3 registe
a300: 72 73 20 74 6f 20 68 6f 6c 64 20 61 20 72 65 73  rs to hold a res
a310: 75 6c 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20 69  ult row */.    i
a320: 6e 74 20 72 65 67 4b 65 79 3b 20 20 20 20 20 20  nt regKey;      
a330: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
a340: 72 20 74 6f 20 68 6f 6c 64 20 6b 65 79 20 66 6f  r to hold key fo
a350: 72 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 46  r checking the F
a360: 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  K */.    int reg
a370: 52 6f 77 3b 20 20 20 20 20 20 20 20 20 20 20 20  Row;            
a380: 2f 2a 20 52 65 67 69 73 74 65 72 73 20 74 6f 20  /* Registers to 
a390: 68 6f 6c 64 20 61 20 72 6f 77 20 66 72 6f 6d 20  hold a row from 
a3a0: 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20  pTab */.    int 
a3b0: 61 64 64 72 54 6f 70 3b 20 20 20 20 20 20 20 20  addrTop;        
a3c0: 20 20 20 2f 2a 20 54 6f 70 20 6f 66 20 61 20 6c     /* Top of a l
a3d0: 6f 6f 70 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  oop checking for
a3e0: 65 69 67 6e 20 6b 65 79 73 20 2a 2f 0a 20 20 20  eign keys */.   
a3f0: 20 69 6e 74 20 61 64 64 72 4f 6b 3b 20 20 20 20   int addrOk;    
a400: 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20          /* Jump 
a410: 68 65 72 65 20 69 66 20 74 68 65 20 6b 65 79 20  here if the key 
a420: 69 73 20 4f 4b 20 2a 2f 0a 20 20 20 20 69 6e 74  is OK */.    int
a430: 20 2a 61 69 43 6f 6c 73 3b 20 20 20 20 20 20 20   *aiCols;       
a440: 20 20 20 20 2f 2a 20 63 68 69 6c 64 20 74 6f 20      /* child to 
a450: 70 61 72 65 6e 74 20 63 6f 6c 75 6d 6e 20 6d 61  parent column ma
a460: 70 70 69 6e 67 20 2a 2f 0a 20 20 20 20 73 74 61  pping */.    sta
a470: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
a480: 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 74 61 62  azCol[] = { "tab
a490: 6c 65 22 2c 20 22 72 6f 77 69 64 22 2c 20 22 70  le", "rowid", "p
a4a0: 61 72 65 6e 74 22 2c 20 22 66 6b 69 64 22 20 7d  arent", "fkid" }
a4b0: 3b 0a 0a 20 20 20 20 72 65 67 52 65 73 75 6c 74  ;..    regResult
a4c0: 20 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2b   = pParse->nMem+
a4d0: 31 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  1;.    pParse->n
a4e0: 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20 72 65  Mem += 4;.    re
a4f0: 67 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73 65 2d  gKey = ++pParse-
a500: 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67 52 6f  >nMem;.    regRo
a510: 77 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d  w = ++pParse->nM
a520: 65 6d 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69  em;.    v = sqli
a530: 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73  te3GetVdbe(pPars
a540: 65 29 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f  e);.    setAllCo
a550: 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 34 2c 20  lumnNames(v, 4, 
a560: 61 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20  azCol); assert( 
a570: 34 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43  4==ArraySize(azC
a580: 6f 6c 29 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ol) );.    sqlit
a590: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
a5a0: 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b  ma(pParse, iDb);
a5b0: 0a 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48  .    k = sqliteH
a5c0: 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 44  ashFirst(&db->aD
a5d0: 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e  b[iDb].pSchema->
a5e0: 74 62 6c 48 61 73 68 29 3b 0a 20 20 20 20 77 68  tblHash);.    wh
a5f0: 69 6c 65 28 20 6b 20 29 7b 0a 20 20 20 20 20 20  ile( k ){.      
a600: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
a610: 20 20 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c        pTab = sql
a620: 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28  ite3LocateTable(
a630: 70 50 61 72 73 65 2c 20 30 2c 20 7a 52 69 67 68  pParse, 0, zRigh
a640: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20  t, zDb);.       
a650: 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65   k = 0;.      }e
a660: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 54 61  lse{.        pTa
a670: 62 20 3d 20 28 54 61 62 6c 65 2a 29 73 71 6c 69  b = (Table*)sqli
a680: 74 65 48 61 73 68 44 61 74 61 28 6b 29 3b 0a 20  teHashData(k);. 
a690: 20 20 20 20 20 20 20 6b 20 3d 20 73 71 6c 69 74         k = sqlit
a6a0: 65 48 61 73 68 4e 65 78 74 28 6b 29 3b 0a 20 20  eHashNext(k);.  
a6b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
a6c0: 70 54 61 62 3d 3d 30 20 7c 7c 20 70 54 61 62 2d  pTab==0 || pTab-
a6d0: 3e 70 46 4b 65 79 3d 3d 30 20 29 20 63 6f 6e 74  >pFKey==0 ) cont
a6e0: 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  inue;.      sqli
a6f0: 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61  te3TableLock(pPa
a700: 72 73 65 2c 20 69 44 62 2c 20 70 54 61 62 2d 3e  rse, iDb, pTab->
a710: 74 6e 75 6d 2c 20 30 2c 20 70 54 61 62 2d 3e 7a  tnum, 0, pTab->z
a720: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28  Name);.      if(
a730: 20 70 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52   pTab->nCol+regR
a740: 6f 77 3e 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20  ow>pParse->nMem 
a750: 29 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d  ) pParse->nMem =
a760: 20 70 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65   pTab->nCol + re
a770: 67 52 6f 77 3b 0a 20 20 20 20 20 20 73 71 6c 69  gRow;.      sqli
a780: 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61  te3OpenTable(pPa
a790: 72 73 65 2c 20 30 2c 20 69 44 62 2c 20 70 54 61  rse, 0, iDb, pTa
a7a0: 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b  b, OP_OpenRead);
a7b0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
a7c0: 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20  beLoadString(v, 
a7d0: 72 65 67 52 65 73 75 6c 74 2c 20 70 54 61 62 2d  regResult, pTab-
a7e0: 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 66  >zName);.      f
a7f0: 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62  or(i=1, pFK=pTab
a800: 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b  ->pFKey; pFK; i+
a810: 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78  +, pFK=pFK->pNex
a820: 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20  tFrom){.        
a830: 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65  pParent = sqlite
a840: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70  3FindTable(db, p
a850: 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20  FK->zTo, zDb);. 
a860: 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65         if( pPare
a870: 6e 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  nt==0 ) continue
a880: 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20 3d  ;.        pIdx =
a890: 20 30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   0;.        sqli
a8a0: 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61  te3TableLock(pPa
a8b0: 72 73 65 2c 20 69 44 62 2c 20 70 50 61 72 65 6e  rse, iDb, pParen
a8c0: 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72  t->tnum, 0, pPar
a8d0: 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20  ent->zName);.   
a8e0: 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33       x = sqlite3
a8f0: 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50  FkLocateIndex(pP
a900: 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70  arse, pParent, p
a910: 46 4b 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a 20  FK, &pIdx, 0);. 
a920: 20 20 20 20 20 20 20 69 66 28 20 78 3d 3d 30 20         if( x==0 
a930: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
a940: 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20   pIdx==0 ){.    
a950: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f          sqlite3O
a960: 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c  penTable(pParse,
a970: 20 69 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74   i, iDb, pParent
a980: 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a  , OP_OpenRead);.
a990: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
a9a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
a9b0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
a9c0: 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69  , OP_OpenRead, i
a9d0: 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44  , pIdx->tnum, iD
a9e0: 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  b);.            
a9f0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 50 34  sqlite3VdbeSetP4
aa00: 4b 65 79 49 6e 66 6f 28 70 50 61 72 73 65 2c 20  KeyInfo(pParse, 
aa10: 70 49 64 78 29 3b 0a 20 20 20 20 20 20 20 20 20  pIdx);.         
aa20: 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65   }.        }else
aa30: 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20  {.          k = 
aa40: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  0;.          bre
aa50: 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ak;.        }.  
aa60: 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
aa70: 72 74 28 20 70 50 61 72 73 65 2d 3e 6e 45 72 72  rt( pParse->nErr
aa80: 3e 30 20 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a  >0 || pFK==0 );.
aa90: 20 20 20 20 20 20 69 66 28 20 70 46 4b 20 29 20        if( pFK ) 
aaa0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28  break;.      if(
aab0: 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 3c 69 20   pParse->nTab<i 
aac0: 29 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 20 3d  ) pParse->nTab =
aad0: 20 69 3b 0a 20 20 20 20 20 20 61 64 64 72 54 6f   i;.      addrTo
aae0: 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  p = sqlite3VdbeA
aaf0: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 77 69  ddOp1(v, OP_Rewi
ab00: 6e 64 2c 20 30 29 3b 20 56 64 62 65 43 6f 76 65  nd, 0); VdbeCove
ab10: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 66  rage(v);.      f
ab20: 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62  or(i=1, pFK=pTab
ab30: 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b  ->pFKey; pFK; i+
ab40: 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78  +, pFK=pFK->pNex
ab50: 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20  tFrom){.        
ab60: 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65  pParent = sqlite
ab70: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70  3FindTable(db, p
ab80: 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20  FK->zTo, zDb);. 
ab90: 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b         pIdx = 0;
aba0: 0a 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20  .        aiCols 
abb0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 0;.        if(
abc0: 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20 20   pParent ){.    
abd0: 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65        x = sqlite
abe0: 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70  3FkLocateIndex(p
abf0: 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20  Parse, pParent, 
ac00: 70 46 4b 2c 20 26 70 49 64 78 2c 20 26 61 69 43  pFK, &pIdx, &aiC
ac10: 6f 6c 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ols);.          
ac20: 61 73 73 65 72 74 28 20 78 3d 3d 30 20 29 3b 0a  assert( x==0 );.
ac30: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ac40: 20 20 61 64 64 72 4f 6b 20 3d 20 73 71 6c 69 74    addrOk = sqlit
ac50: 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28  e3VdbeMakeLabel(
ac60: 76 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  v);.        if( 
ac70: 70 50 61 72 65 6e 74 20 26 26 20 70 49 64 78 3d  pParent && pIdx=
ac80: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
ac90: 69 6e 74 20 69 4b 65 79 20 3d 20 70 46 4b 2d 3e  int iKey = pFK->
aca0: 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20  aCol[0].iFrom;. 
acb0: 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
acc0: 20 69 4b 65 79 3e 3d 30 20 26 26 20 69 4b 65 79   iKey>=0 && iKey
acd0: 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20  <pTab->nCol );. 
ace0: 20 20 20 20 20 20 20 20 20 69 66 28 20 69 4b 65           if( iKe
acf0: 79 21 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29  y!=pTab->iPKey )
ad00: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
ad10: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
ad20: 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c  v, OP_Column, 0,
ad30: 20 69 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a   iKey, regRow);.
ad40: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
ad50: 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74  te3ColumnDefault
ad60: 28 76 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c 20  (v, pTab, iKey, 
ad70: 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20  regRow);.       
ad80: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ad90: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e  AddOp2(v, OP_IsN
ada0: 75 6c 6c 2c 20 72 65 67 52 6f 77 2c 20 61 64 64  ull, regRow, add
adb0: 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65 72 61  rOk); VdbeCovera
adc0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
add0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
ade0: 64 4f 70 32 28 76 2c 20 4f 50 5f 4d 75 73 74 42  dOp2(v, OP_MustB
adf0: 65 49 6e 74 2c 20 72 65 67 52 6f 77 2c 20 0a 20  eInt, regRow, . 
ae00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
ae10: 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74  lite3VdbeCurrent
ae20: 41 64 64 72 28 76 29 2b 33 29 3b 20 56 64 62 65  Addr(v)+3); Vdbe
ae30: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
ae40: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
ae50: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
ae60: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
ae70: 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52  P_Rowid, 0, regR
ae80: 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ow);.          }
ae90: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
aea0: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
aeb0: 4f 50 5f 4e 6f 74 45 78 69 73 74 73 2c 20 69 2c  OP_NotExists, i,
aec0: 20 30 2c 20 72 65 67 52 6f 77 29 3b 20 56 64 62   0, regRow); Vdb
aed0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
aee0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
aef0: 64 62 65 47 6f 74 6f 28 76 2c 20 61 64 64 72 4f  dbeGoto(v, addrO
af00: 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  k);.          sq
af10: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
af20: 65 28 76 2c 20 73 71 6c 69 74 65 33 56 64 62 65  e(v, sqlite3Vdbe
af30: 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 2d 32  CurrentAddr(v)-2
af40: 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
af50: 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  {.          for(
af60: 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c  j=0; j<pFK->nCol
af70: 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; j++){.        
af80: 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 72 43      sqlite3ExprC
af90: 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61  odeGetColumnOfTa
afa0: 62 6c 65 28 76 2c 20 70 54 61 62 2c 20 30 2c 0a  ble(v, pTab, 0,.
afb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afc0: 20 20 20 20 20 20 20 20 20 20 20 20 61 69 43 6f              aiCo
afd0: 6c 73 20 3f 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a  ls ? aiCols[j] :
afe0: 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46   pFK->aCol[j].iF
aff0: 72 6f 6d 2c 20 72 65 67 52 6f 77 2b 6a 29 3b 0a  rom, regRow+j);.
b000: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
b010: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
b020: 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52   OP_IsNull, regR
b030: 6f 77 2b 6a 2c 20 61 64 64 72 4f 6b 29 3b 20 56  ow+j, addrOk); V
b040: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
b050: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
b060: 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e        if( pParen
b070: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  t ){.           
b080: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
b090: 70 34 28 76 2c 20 4f 50 5f 4d 61 6b 65 52 65 63  p4(v, OP_MakeRec
b0a0: 6f 72 64 2c 20 72 65 67 52 6f 77 2c 20 70 46 4b  ord, regRow, pFK
b0b0: 2d 3e 6e 43 6f 6c 2c 20 72 65 67 4b 65 79 2c 0a  ->nCol, regKey,.
b0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
b0e0: 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
b0f0: 74 79 53 74 72 28 64 62 2c 70 49 64 78 29 2c 20  tyStr(db,pIdx), 
b100: 70 46 4b 2d 3e 6e 43 6f 6c 29 3b 0a 20 20 20 20  pFK->nCol);.    
b110: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b120: 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20  dbeAddOp4Int(v, 
b130: 4f 50 5f 46 6f 75 6e 64 2c 20 69 2c 20 61 64 64  OP_Found, i, add
b140: 72 4f 6b 2c 20 72 65 67 4b 65 79 2c 20 30 29 3b  rOk, regKey, 0);
b150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 64 62  .            Vdb
b160: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
b170: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
b180: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69    }.        sqli
b190: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
b1a0: 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65   OP_Rowid, 0, re
b1b0: 67 52 65 73 75 6c 74 2b 31 29 3b 0a 20 20 20 20  gResult+1);.    
b1c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
b1d0: 75 6c 74 69 4c 6f 61 64 28 76 2c 20 72 65 67 52  ultiLoad(v, regR
b1e0: 65 73 75 6c 74 2b 32 2c 20 22 73 69 22 2c 20 70  esult+2, "si", p
b1f0: 46 4b 2d 3e 7a 54 6f 2c 20 69 2d 31 29 3b 0a 20  FK->zTo, i-1);. 
b200: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b210: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
b220: 65 73 75 6c 74 52 6f 77 2c 20 72 65 67 52 65 73  esultRow, regRes
b230: 75 6c 74 2c 20 34 29 3b 0a 20 20 20 20 20 20 20  ult, 4);.       
b240: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f   sqlite3VdbeReso
b250: 6c 76 65 4c 61 62 65 6c 28 76 2c 20 61 64 64 72  lveLabel(v, addr
b260: 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Ok);.        sql
b270: 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 61  ite3DbFree(db, a
b280: 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20 7d 0a  iCols);.      }.
b290: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b2a0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65  eAddOp2(v, OP_Ne
b2b0: 78 74 2c 20 30 2c 20 61 64 64 72 54 6f 70 2b 31  xt, 0, addrTop+1
b2c0: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
b2d0: 76 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  v);.      sqlite
b2e0: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
b2f0: 20 61 64 64 72 54 6f 70 29 3b 0a 20 20 20 20 7d   addrTop);.    }
b300: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
b310: 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
b320: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
b330: 47 47 45 52 29 20 2a 2f 0a 23 65 6e 64 69 66 20  GGER) */.#endif 
b340: 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
b350: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
b360: 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  KEY) */..#ifndef
b370: 20 4e 44 45 42 55 47 0a 20 20 63 61 73 65 20 50   NDEBUG.  case P
b380: 72 61 67 54 79 70 5f 50 41 52 53 45 52 5f 54 52  ragTyp_PARSER_TR
b390: 41 43 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  ACE: {.    if( z
b3a0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
b3b0: 66 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  f( sqlite3GetBoo
b3c0: 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20  lean(zRight, 0) 
b3d0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
b3e0: 65 33 50 61 72 73 65 72 54 72 61 63 65 28 73 74  e3ParserTrace(st
b3f0: 64 6f 75 74 2c 20 22 70 61 72 73 65 72 3a 20 22  dout, "parser: "
b400: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
b410: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
b420: 61 72 73 65 72 54 72 61 63 65 28 30 2c 20 30 29  arserTrace(0, 0)
b430: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
b440: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
b450: 64 69 66 0a 0a 20 20 2f 2a 20 52 65 69 6e 73 74  dif..  /* Reinst
b460: 61 6c 6c 20 74 68 65 20 4c 49 4b 45 20 61 6e 64  all the LIKE and
b470: 20 47 4c 4f 42 20 66 75 6e 63 74 69 6f 6e 73 2e   GLOB functions.
b480: 20 20 54 68 65 20 76 61 72 69 61 6e 74 20 6f 66    The variant of
b490: 20 4c 49 4b 45 0a 20 20 2a 2a 20 75 73 65 64 20   LIKE.  ** used 
b4a0: 77 69 6c 6c 20 62 65 20 63 61 73 65 20 73 65 6e  will be case sen
b4b0: 73 69 74 69 76 65 20 6f 72 20 6e 6f 74 20 64 65  sitive or not de
b4c0: 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 52  pending on the R
b4d0: 48 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  HS..  */.  case 
b4e0: 50 72 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e  PragTyp_CASE_SEN
b4f0: 53 49 54 49 56 45 5f 4c 49 4b 45 3a 20 7b 0a 20  SITIVE_LIKE: {. 
b500: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
b510: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65  .      sqlite3Re
b520: 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69  gisterLikeFuncti
b530: 6f 6e 73 28 64 62 2c 20 73 71 6c 69 74 65 33 47  ons(db, sqlite3G
b540: 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74  etBoolean(zRight
b550: 2c 20 30 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  , 0));.    }.  }
b560: 0a 20 20 62 72 65 61 6b 3b 0a 0a 23 69 66 6e 64  .  break;..#ifnd
b570: 65 66 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52  ef SQLITE_INTEGR
b580: 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f  ITY_CHECK_ERROR_
b590: 4d 41 58 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MAX.# define SQL
b5a0: 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  ITE_INTEGRITY_CH
b5b0: 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 20 31 30  ECK_ERROR_MAX 10
b5c0: 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  0.#endif..#ifnde
b5d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  f SQLITE_OMIT_IN
b5e0: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 20 20  TEGRITY_CHECK.  
b5f0: 2f 2a 20 50 72 61 67 6d 61 20 22 71 75 69 63 6b  /* Pragma "quick
b600: 5f 63 68 65 63 6b 22 20 69 73 20 72 65 64 75 63  _check" is reduc
b610: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 0a 20  ed version of . 
b620: 20 2a 2a 20 69 6e 74 65 67 72 69 74 79 5f 63 68   ** integrity_ch
b630: 65 63 6b 20 64 65 73 69 67 6e 65 64 20 74 6f 20  eck designed to 
b640: 64 65 74 65 63 74 20 6d 6f 73 74 20 64 61 74 61  detect most data
b650: 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 0a  base corruption.
b660: 20 20 2a 2a 20 77 69 74 68 6f 75 74 20 6d 6f 73    ** without mos
b670: 74 20 6f 66 20 74 68 65 20 6f 76 65 72 68 65 61  t of the overhea
b680: 64 20 6f 66 20 61 20 66 75 6c 6c 20 69 6e 74 65  d of a full inte
b690: 67 72 69 74 79 2d 63 68 65 63 6b 2e 0a 20 20 2a  grity-check..  *
b6a0: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
b6b0: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
b6c0: 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a  : {.    int i, j
b6d0: 2c 20 61 64 64 72 2c 20 6d 78 45 72 72 3b 0a 0a  , addr, mxErr;..
b6e0: 20 20 20 20 69 6e 74 20 69 73 51 75 69 63 6b 20      int isQuick 
b6f0: 3d 20 28 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  = (sqlite3Tolowe
b700: 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 71 27  r(zLeft[0])=='q'
b710: 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  );..    /* If th
b720: 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64  e PRAGMA command
b730: 20 77 61 73 20 6f 66 20 74 68 65 20 66 6f 72 6d   was of the form
b740: 20 22 50 52 41 47 4d 41 20 3c 64 62 3e 2e 69 6e   "PRAGMA <db>.in
b750: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a  tegrity_check",.
b760: 20 20 20 20 2a 2a 20 74 68 65 6e 20 69 44 62 20      ** then iDb 
b770: 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 69 6e  is set to the in
b780: 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
b790: 61 73 65 20 69 64 65 6e 74 69 66 69 65 64 20 62  ase identified b
b7a0: 79 20 3c 64 62 3e 2e 0a 20 20 20 20 2a 2a 20 49  y <db>..    ** I
b7b0: 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65  n this case, the
b7c0: 20 69 6e 74 65 67 72 69 74 79 20 6f 66 20 64 61   integrity of da
b7d0: 74 61 62 61 73 65 20 69 44 62 20 6f 6e 6c 79 20  tabase iDb only 
b7e0: 69 73 20 76 65 72 69 66 69 65 64 20 62 79 0a 20  is verified by. 
b7f0: 20 20 20 2a 2a 20 74 68 65 20 56 44 42 45 20 63     ** the VDBE c
b800: 72 65 61 74 65 64 20 62 65 6c 6f 77 2e 0a 20 20  reated below..  
b810: 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4f 74 68 65    **.    ** Othe
b820: 72 77 69 73 65 2c 20 69 66 20 74 68 65 20 63 6f  rwise, if the co
b830: 6d 6d 61 6e 64 20 77 61 73 20 73 69 6d 70 6c 79  mmand was simply
b840: 20 22 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69   "PRAGMA integri
b850: 74 79 5f 63 68 65 63 6b 22 20 28 6f 72 0a 20 20  ty_check" (or.  
b860: 20 20 2a 2a 20 22 50 52 41 47 4d 41 20 71 75 69    ** "PRAGMA qui
b870: 63 6b 5f 63 68 65 63 6b 22 29 2c 20 74 68 65 6e  ck_check"), then
b880: 20 69 44 62 20 69 73 20 73 65 74 20 74 6f 20 30   iDb is set to 0
b890: 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20  . In this case, 
b8a0: 73 65 74 20 69 44 62 0a 20 20 20 20 2a 2a 20 74  set iDb.    ** t
b8b0: 6f 20 2d 31 20 68 65 72 65 2c 20 74 6f 20 69 6e  o -1 here, to in
b8c0: 64 69 63 61 74 65 20 74 68 61 74 20 74 68 65 20  dicate that the 
b8d0: 56 44 42 45 20 73 68 6f 75 6c 64 20 76 65 72 69  VDBE should veri
b8e0: 66 79 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  fy the integrity
b8f0: 0a 20 20 20 20 2a 2a 20 6f 66 20 61 6c 6c 20 61  .    ** of all a
b900: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
b910: 73 2e 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  s.  */.    asser
b920: 74 28 20 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  t( iDb>=0 );.   
b930: 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 30 20   assert( iDb==0 
b940: 7c 7c 20 70 49 64 32 2d 3e 7a 20 29 3b 0a 20 20  || pId2->z );.  
b950: 20 20 69 66 28 20 70 49 64 32 2d 3e 7a 3d 3d 30    if( pId2->z==0
b960: 20 29 20 69 44 62 20 3d 20 2d 31 3b 0a 0a 20 20   ) iDb = -1;..  
b970: 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
b980: 74 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d  the VDBE program
b990: 20 2a 2f 0a 20 20 20 20 70 50 61 72 73 65 2d 3e   */.    pParse->
b9a0: 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 73 65  nMem = 6;.    se
b9b0: 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76  tOneColumnName(v
b9c0: 2c 20 22 69 6e 74 65 67 72 69 74 79 5f 63 68 65  , "integrity_che
b9d0: 63 6b 22 29 3b 0a 0a 20 20 20 20 2f 2a 20 53 65  ck");..    /* Se
b9e0: 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 65 72  t the maximum er
b9f0: 72 6f 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20  ror count */.   
ba00: 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45 5f   mxErr = SQLITE_
ba10: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f  INTEGRITY_CHECK_
ba20: 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 69  ERROR_MAX;.    i
ba30: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
ba40: 20 20 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74     sqlite3GetInt
ba50: 33 32 28 7a 52 69 67 68 74 2c 20 26 6d 78 45 72  32(zRight, &mxEr
ba60: 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6d 78  r);.      if( mx
ba70: 45 72 72 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20  Err<=0 ){.      
ba80: 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45    mxErr = SQLITE
ba90: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
baa0: 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20  _ERROR_MAX;.    
bab0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
bac0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
bad0: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6d  v, OP_Integer, m
bae0: 78 45 72 72 2c 20 31 29 3b 20 20 2f 2a 20 72 65  xErr, 1);  /* re
baf0: 67 5b 31 5d 20 68 6f 6c 64 73 20 65 72 72 6f 72  g[1] holds error
bb00: 73 20 6c 65 66 74 20 2a 2f 0a 0a 20 20 20 20 2f  s left */..    /
bb10: 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74  * Do an integrit
bb20: 79 20 63 68 65 63 6b 20 6f 6e 20 65 61 63 68 20  y check on each 
bb30: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
bb40: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
bb50: 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
bb60: 20 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 78       HashElem *x
bb70: 3b 0a 20 20 20 20 20 20 48 61 73 68 20 2a 70 54  ;.      Hash *pT
bb80: 62 6c 73 3b 0a 20 20 20 20 20 20 69 6e 74 20 63  bls;.      int c
bb90: 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 69  nt = 0;..      i
bba0: 66 28 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 26  f( OMIT_TEMPDB &
bbb0: 26 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75  & i==1 ) continu
bbc0: 65 3b 0a 20 20 20 20 20 20 69 66 28 20 69 44 62  e;.      if( iDb
bbd0: 3e 3d 30 20 26 26 20 69 21 3d 69 44 62 20 29 20  >=0 && i!=iDb ) 
bbe0: 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20 20  continue;..     
bbf0: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
bc00: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
bc10: 20 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20   i);.      addr 
bc20: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
bc30: 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c  Op1(v, OP_IfPos,
bc40: 20 31 29 3b 20 2f 2a 20 48 61 6c 74 20 69 66 20   1); /* Halt if 
bc50: 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f  out of errors */
bc60: 0a 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72  .      VdbeCover
bc70: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71  age(v);.      sq
bc80: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
bc90: 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30  v, OP_Halt, 0, 0
bca0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
bcb0: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
bcc0: 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  addr);..      /*
bcd0: 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79   Do an integrity
bce0: 20 63 68 65 63 6b 20 6f 66 20 74 68 65 20 42 2d   check of the B-
bcf0: 54 72 65 65 0a 20 20 20 20 20 20 2a 2a 0a 20 20  Tree.      **.  
bd00: 20 20 20 20 2a 2a 20 42 65 67 69 6e 20 62 79 20      ** Begin by 
bd10: 66 69 6c 6c 69 6e 67 20 72 65 67 69 73 74 65 72  filling register
bd20: 73 20 32 2c 20 33 2c 20 2e 2e 2e 20 77 69 74 68  s 2, 3, ... with
bd30: 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 73 20   the root pages 
bd40: 6e 75 6d 62 65 72 73 0a 20 20 20 20 20 20 2a 2a  numbers.      **
bd50: 20 66 6f 72 20 61 6c 6c 20 74 61 62 6c 65 73 20   for all tables 
bd60: 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e 20 74  and indices in t
bd70: 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20  he database..   
bd80: 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
bd90: 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
bda0: 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
bdb0: 2c 20 30 29 20 29 3b 0a 20 20 20 20 20 20 70 54  , 0) );.      pT
bdc0: 62 6c 73 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69  bls = &db->aDb[i
bdd0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61  ].pSchema->tblHa
bde0: 73 68 3b 0a 20 20 20 20 20 20 66 6f 72 28 78 3d  sh;.      for(x=
bdf0: 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
be00: 70 54 62 6c 73 29 3b 20 78 3b 20 78 3d 73 71 6c  pTbls); x; x=sql
be10: 69 74 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b  iteHashNext(x)){
be20: 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a  .        Table *
be30: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73  pTab = sqliteHas
be40: 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20  hData(x);.      
be50: 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20    Index *pIdx;. 
be60: 20 20 20 20 20 20 20 69 66 28 20 48 61 73 52 6f         if( HasRo
be70: 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20 20  wid(pTab) ){.   
be80: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
be90: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
bea0: 6e 74 65 67 65 72 2c 20 70 54 61 62 2d 3e 74 6e  nteger, pTab->tn
beb0: 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20 20  um, 2+cnt);.    
bec0: 20 20 20 20 20 20 56 64 62 65 43 6f 6d 6d 65 6e        VdbeCommen
bed0: 74 28 28 76 2c 20 22 25 73 22 2c 20 70 54 61 62  t((v, "%s", pTab
bee0: 2d 3e 7a 4e 61 6d 65 29 29 3b 0a 20 20 20 20 20  ->zName));.     
bef0: 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20       cnt++;.    
bf00: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f      }.        fo
bf10: 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e  r(pIdx=pTab->pIn
bf20: 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d  dex; pIdx; pIdx=
bf30: 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20  pIdx->pNext){.  
bf40: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
bf50: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
bf60: 49 6e 74 65 67 65 72 2c 20 70 49 64 78 2d 3e 74  Integer, pIdx->t
bf70: 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20  num, 2+cnt);.   
bf80: 20 20 20 20 20 20 20 56 64 62 65 43 6f 6d 6d 65         VdbeComme
bf90: 6e 74 28 28 76 2c 20 22 25 73 22 2c 20 70 49 64  nt((v, "%s", pId
bfa0: 78 2d 3e 7a 4e 61 6d 65 29 29 3b 0a 20 20 20 20  x->zName));.    
bfb0: 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20        cnt++;.   
bfc0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a       }.      }..
bfd0: 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
bfe0: 72 65 20 73 75 66 66 69 63 69 65 6e 74 20 6e 75  re sufficient nu
bff0: 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
c000: 73 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  s have been allo
c010: 63 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 70  cated */.      p
c020: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41  Parse->nMem = MA
c030: 58 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c  X( pParse->nMem,
c040: 20 63 6e 74 2b 38 20 29 3b 0a 0a 20 20 20 20 20   cnt+8 );..     
c050: 20 2f 2a 20 44 6f 20 74 68 65 20 62 2d 74 72 65   /* Do the b-tre
c060: 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  e integrity chec
c070: 6b 73 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  ks */.      sqli
c080: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
c090: 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 2c   OP_IntegrityCk,
c0a0: 20 32 2c 20 63 6e 74 2c 20 31 29 3b 0a 20 20 20   2, cnt, 1);.   
c0b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
c0c0: 61 6e 67 65 50 35 28 76 2c 20 28 75 38 29 69 29  angeP5(v, (u8)i)
c0d0: 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73  ;.      addr = s
c0e0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
c0f0: 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 32  (v, OP_IsNull, 2
c100: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
c110: 76 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  v);.      sqlite
c120: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
c130: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c  P_String8, 0, 3,
c140: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 73 71 6c   0,.         sql
c150: 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20  ite3MPrintf(db, 
c160: 22 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65  "*** in database
c170: 20 25 73 20 2a 2a 2a 5c 6e 22 2c 20 64 62 2d 3e   %s ***\n", db->
c180: 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 29 2c 0a 20  aDb[i].zName),. 
c190: 20 20 20 20 20 20 20 20 50 34 5f 44 59 4e 41 4d          P4_DYNAM
c1a0: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
c1b0: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
c1c0: 4f 50 5f 4d 6f 76 65 2c 20 32 2c 20 34 2c 20 31  OP_Move, 2, 4, 1
c1d0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c1e0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
c1f0: 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 32  _Concat, 4, 3, 2
c200: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c210: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c220: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 32 2c 20 31  _ResultRow, 2, 1
c230: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c240: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
c250: 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  addr);..      /*
c260: 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 74   Make sure all t
c270: 68 65 20 69 6e 64 69 63 65 73 20 61 72 65 20 63  he indices are c
c280: 6f 6e 73 74 72 75 63 74 65 64 20 63 6f 72 72 65  onstructed corre
c290: 63 74 6c 79 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ctly..      */. 
c2a0: 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74       for(x=sqlit
c2b0: 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c 73  eHashFirst(pTbls
c2c0: 29 3b 20 78 20 26 26 20 21 69 73 51 75 69 63 6b  ); x && !isQuick
c2d0: 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; x=sqliteHashNe
c2e0: 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20  xt(x)){.        
c2f0: 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71  Table *pTab = sq
c300: 6c 69 74 65 48 61 73 68 44 61 74 61 28 78 29 3b  liteHashData(x);
c310: 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a  .        Index *
c320: 70 49 64 78 2c 20 2a 70 50 6b 3b 0a 20 20 20 20  pIdx, *pPk;.    
c330: 20 20 20 20 49 6e 64 65 78 20 2a 70 50 72 69 6f      Index *pPrio
c340: 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69  r = 0;.        i
c350: 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 20 20 20 20  nt loopTop;.    
c360: 20 20 20 20 69 6e 74 20 69 44 61 74 61 43 75 72      int iDataCur
c370: 2c 20 69 49 64 78 43 75 72 3b 0a 20 20 20 20 20  , iIdxCur;.     
c380: 20 20 20 69 6e 74 20 72 31 20 3d 20 2d 31 3b 0a     int r1 = -1;.
c390: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 54 61  .        if( pTa
c3a0: 62 2d 3e 70 49 6e 64 65 78 3d 3d 30 20 29 20 63  b->pIndex==0 ) c
c3b0: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
c3c0: 20 70 50 6b 20 3d 20 48 61 73 52 6f 77 69 64 28   pPk = HasRowid(
c3d0: 70 54 61 62 29 20 3f 20 30 20 3a 20 73 71 6c 69  pTab) ? 0 : sqli
c3e0: 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64  te3PrimaryKeyInd
c3f0: 65 78 28 70 54 61 62 29 3b 0a 20 20 20 20 20 20  ex(pTab);.      
c400: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
c410: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
c420: 5f 49 66 50 6f 73 2c 20 31 29 3b 20 20 2f 2a 20  _IfPos, 1);  /* 
c430: 53 74 6f 70 20 69 66 20 6f 75 74 20 6f 66 20 65  Stop if out of e
c440: 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20 20  rrors */.       
c450: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
c460: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
c470: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c480: 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20  P_Halt, 0, 0);. 
c490: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c4a0: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
c4b0: 64 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  dr);.        sql
c4c0: 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65  ite3ExprCacheCle
c4d0: 61 72 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  ar(pParse);.    
c4e0: 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54      sqlite3OpenT
c4f0: 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 70  ableAndIndices(p
c500: 50 61 72 73 65 2c 20 70 54 61 62 2c 20 4f 50 5f  Parse, pTab, OP_
c510: 4f 70 65 6e 52 65 61 64 2c 20 30 2c 0a 20 20 20  OpenRead, 0,.   
c520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c540: 31 2c 20 30 2c 20 26 69 44 61 74 61 43 75 72 2c  1, 0, &iDataCur,
c550: 20 26 69 49 64 78 43 75 72 29 3b 0a 20 20 20 20   &iIdxCur);.    
c560: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c570: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
c580: 67 65 72 2c 20 30 2c 20 37 29 3b 0a 20 20 20 20  ger, 0, 7);.    
c590: 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64      for(j=0, pId
c5a0: 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20  x=pTab->pIndex; 
c5b0: 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d  pIdx; pIdx=pIdx-
c5c0: 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20  >pNext, j++){.  
c5d0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c5e0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c5f0: 49 6e 74 65 67 65 72 2c 20 30 2c 20 38 2b 6a 29  Integer, 0, 8+j)
c600: 3b 20 2f 2a 20 69 6e 64 65 78 20 65 6e 74 72 69  ; /* index entri
c610: 65 73 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  es counter */.  
c620: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
c630: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d  pParse->nMem = M
c640: 41 58 28 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c  AX(pParse->nMem,
c650: 20 38 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20 73   8+j);.        s
c660: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c670: 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20 69  (v, OP_Rewind, i
c680: 44 61 74 61 43 75 72 2c 20 30 29 3b 20 56 64 62  DataCur, 0); Vdb
c690: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
c6a0: 20 20 20 20 20 20 6c 6f 6f 70 54 6f 70 20 3d 20        loopTop = 
c6b0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c6c0: 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20  2(v, OP_AddImm, 
c6d0: 37 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 2f  7, 1);.        /
c6e0: 2a 20 56 65 72 69 66 79 20 74 68 61 74 20 61 6c  * Verify that al
c6f0: 6c 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6c 75 6d  l NOT NULL colum
c700: 6e 73 20 72 65 61 6c 6c 79 20 61 72 65 20 4e 4f  ns really are NO
c710: 54 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 20 20  T NULL */.      
c720: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 54 61    for(j=0; j<pTa
c730: 62 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20  b->nCol; j++){. 
c740: 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a           char *z
c750: 45 72 72 3b 0a 20 20 20 20 20 20 20 20 20 20 69  Err;.          i
c760: 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33 3b 0a 20  nt jmp2, jmp3;. 
c770: 20 20 20 20 20 20 20 20 20 69 66 28 20 6a 3d 3d           if( j==
c780: 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 20 63 6f  pTab->iPKey ) co
c790: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
c7a0: 20 20 69 66 28 20 70 54 61 62 2d 3e 61 43 6f 6c    if( pTab->aCol
c7b0: 5b 6a 5d 2e 6e 6f 74 4e 75 6c 6c 3d 3d 30 20 29  [j].notNull==0 )
c7c0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
c7d0: 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 72       sqlite3Expr
c7e0: 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54  CodeGetColumnOfT
c7f0: 61 62 6c 65 28 76 2c 20 70 54 61 62 2c 20 69 44  able(v, pTab, iD
c800: 61 74 61 43 75 72 2c 20 6a 2c 20 33 29 3b 0a 20  ataCur, j, 3);. 
c810: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
c820: 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20  VdbeChangeP5(v, 
c830: 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
c840: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70  );.          jmp
c850: 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  2 = sqlite3VdbeA
c860: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 4e 6f 74 4e  ddOp1(v, OP_NotN
c870: 75 6c 6c 2c 20 33 29 3b 20 56 64 62 65 43 6f 76  ull, 3); VdbeCov
c880: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
c890: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c8a0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49  ddOp2(v, OP_AddI
c8b0: 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44  mm, 1, -1); /* D
c8c0: 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c  ecrement error l
c8d0: 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  imit */.        
c8e0: 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65 33    zErr = sqlite3
c8f0: 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 4e 55 4c  MPrintf(db, "NUL
c900: 4c 20 76 61 6c 75 65 20 69 6e 20 25 73 2e 25 73  L value in %s.%s
c910: 22 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a  ", pTab->zName,.
c920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 54                pT
c940: 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 4e 61 6d  ab->aCol[j].zNam
c950: 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  e);.          sq
c960: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
c970: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
c980: 2c 20 33 2c 20 30 2c 20 7a 45 72 72 2c 20 50 34  , 3, 0, zErr, P4
c990: 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20  _DYNAMIC);.     
c9a0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c9b0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
c9c0: 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20  ultRow, 3, 1);. 
c9d0: 20 20 20 20 20 20 20 20 20 6a 6d 70 33 20 3d 20           jmp3 = 
c9e0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c9f0: 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31  1(v, OP_IfPos, 1
ca00: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
ca10: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
ca20: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 30 28  lite3VdbeAddOp0(
ca30: 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20  v, OP_Halt);.   
ca40: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ca50: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d  beJumpHere(v, jm
ca60: 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  p2);.          s
ca70: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
ca80: 72 65 28 76 2c 20 6a 6d 70 33 29 3b 0a 20 20 20  re(v, jmp3);.   
ca90: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f       }.        /
caa0: 2a 20 56 61 6c 69 64 61 74 65 20 69 6e 64 65 78  * Validate index
cab0: 20 65 6e 74 72 69 65 73 20 66 6f 72 20 74 68 65   entries for the
cac0: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 2a 2f 0a   current row */.
cad0: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c          for(j=0,
cae0: 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64   pIdx=pTab->pInd
caf0: 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
cb00: 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29  Idx->pNext, j++)
cb10: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  {.          int 
cb20: 6a 6d 70 32 2c 20 6a 6d 70 33 2c 20 6a 6d 70 34  jmp2, jmp3, jmp4
cb30: 2c 20 6a 6d 70 35 3b 0a 20 20 20 20 20 20 20 20  , jmp5;.        
cb40: 20 20 69 6e 74 20 63 6b 55 6e 69 71 20 3d 20 73    int ckUniq = s
cb50: 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61  qlite3VdbeMakeLa
cb60: 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20  bel(v);.        
cb70: 20 20 69 66 28 20 70 50 6b 3d 3d 70 49 64 78 20    if( pPk==pIdx 
cb80: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
cb90: 20 20 20 20 20 20 72 31 20 3d 20 73 71 6c 69 74        r1 = sqlit
cba0: 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b  e3GenerateIndexK
cbb0: 65 79 28 70 50 61 72 73 65 2c 20 70 49 64 78 2c  ey(pParse, pIdx,
cbc0: 20 69 44 61 74 61 43 75 72 2c 20 30 2c 20 30 2c   iDataCur, 0, 0,
cbd0: 20 26 6a 6d 70 33 2c 0a 20 20 20 20 20 20 20 20   &jmp3,.        
cbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
cc00: 50 72 69 6f 72 2c 20 72 31 29 3b 0a 20 20 20 20  Prior, r1);.    
cc10: 20 20 20 20 20 20 70 50 72 69 6f 72 20 3d 20 70        pPrior = p
cc20: 49 64 78 3b 0a 20 20 20 20 20 20 20 20 20 20 73  Idx;.          s
cc30: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
cc40: 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 38  (v, OP_AddImm, 8
cc50: 2b 6a 2c 20 31 29 3b 20 20 2f 2a 20 69 6e 63 72  +j, 1);  /* incr
cc60: 65 6d 65 6e 74 20 65 6e 74 72 79 20 63 6f 75 6e  ement entry coun
cc70: 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 2f  t */.          /
cc80: 2a 20 56 65 72 69 66 79 20 74 68 61 74 20 61 6e  * Verify that an
cc90: 20 69 6e 64 65 78 20 65 6e 74 72 79 20 65 78 69   index entry exi
cca0: 73 74 73 20 66 6f 72 20 74 68 65 20 63 75 72 72  sts for the curr
ccb0: 65 6e 74 20 74 61 62 6c 65 20 72 6f 77 20 2a 2f  ent table row */
ccc0: 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 32 20  .          jmp2 
ccd0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
cce0: 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75  Op4Int(v, OP_Fou
ccf0: 6e 64 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 63  nd, iIdxCur+j, c
cd00: 6b 55 6e 69 71 2c 20 72 31 2c 0a 20 20 20 20 20  kUniq, r1,.     
cd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd30: 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 29 3b   pIdx->nColumn);
cd40: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
cd50: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
cd60: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
cd70: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
cd80: 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74  1); /* Decrement
cd90: 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a   error limit */.
cda0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
cdb0: 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28  3VdbeLoadString(
cdc0: 76 2c 20 33 2c 20 22 72 6f 77 20 22 29 3b 0a 20  v, 3, "row ");. 
cdd0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
cde0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
cdf0: 5f 43 6f 6e 63 61 74 2c 20 37 2c 20 33 2c 20 33  _Concat, 7, 3, 3
ce00: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
ce10: 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69  ite3VdbeLoadStri
ce20: 6e 67 28 76 2c 20 34 2c 20 22 20 6d 69 73 73 69  ng(v, 4, " missi
ce30: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 22 29  ng from index ")
ce40: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
ce50: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
ce60: 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33   OP_Concat, 4, 3
ce70: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 3);.          
ce80: 6a 6d 70 35 20 3d 20 73 71 6c 69 74 65 33 56 64  jmp5 = sqlite3Vd
ce90: 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20  beLoadString(v, 
cea0: 34 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 29 3b  4, pIdx->zName);
ceb0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
cec0: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
ced0: 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c  OP_Concat, 4, 3,
cee0: 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   3);.          s
cef0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
cf00: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
cf10: 2c 20 33 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  , 3, 1);.       
cf20: 20 20 20 6a 6d 70 34 20 3d 20 73 71 6c 69 74 65     jmp4 = sqlite
cf30: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
cf40: 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 56 64 62  P_IfPos, 1); Vdb
cf50: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
cf60: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
cf70: 64 62 65 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f  dbeAddOp0(v, OP_
cf80: 48 61 6c 74 29 3b 0a 20 20 20 20 20 20 20 20 20  Halt);.         
cf90: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
cfa0: 48 65 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20  Here(v, jmp2);. 
cfb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20           /* For 
cfc0: 55 4e 49 51 55 45 20 69 6e 64 65 78 65 73 2c 20  UNIQUE indexes, 
cfd0: 76 65 72 69 66 79 20 74 68 61 74 20 6f 6e 6c 79  verify that only
cfe0: 20 6f 6e 65 20 65 6e 74 72 79 20 65 78 69 73 74   one entry exist
cff0: 73 20 77 69 74 68 20 74 68 65 0a 20 20 20 20 20  s with the.     
d000: 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 20       ** current 
d010: 6b 65 79 2e 20 20 54 68 65 20 65 6e 74 72 79 20  key.  The entry 
d020: 69 73 20 75 6e 69 71 75 65 20 69 66 20 28 31 29  is unique if (1)
d030: 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 69 73 20 4e   any column is N
d040: 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 2a 2a  ULL.          **
d050: 20 6f 72 20 28 32 29 20 74 68 65 20 6e 65 78 74   or (2) the next
d060: 20 65 6e 74 72 79 20 68 61 73 20 61 20 64 69 66   entry has a dif
d070: 66 65 72 65 6e 74 20 6b 65 79 20 2a 2f 0a 20 20  ferent key */.  
d080: 20 20 20 20 20 20 20 20 69 66 28 20 49 73 55 6e          if( IsUn
d090: 69 71 75 65 49 6e 64 65 78 28 70 49 64 78 29 20  iqueIndex(pIdx) 
d0a0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ){.            i
d0b0: 6e 74 20 75 6e 69 71 4f 6b 20 3d 20 73 71 6c 69  nt uniqOk = sqli
d0c0: 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c  te3VdbeMakeLabel
d0d0: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (v);.           
d0e0: 20 69 6e 74 20 6a 6d 70 36 3b 0a 20 20 20 20 20   int jmp6;.     
d0f0: 20 20 20 20 20 20 20 69 6e 74 20 6b 6b 3b 0a 20         int kk;. 
d100: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b             for(k
d110: 6b 3d 30 3b 20 6b 6b 3c 70 49 64 78 2d 3e 6e 4b  k=0; kk<pIdx->nK
d120: 65 79 43 6f 6c 3b 20 6b 6b 2b 2b 29 7b 0a 20 20  eyCol; kk++){.  
d130: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
d140: 69 43 6f 6c 20 3d 20 70 49 64 78 2d 3e 61 69 43  iCol = pIdx->aiC
d150: 6f 6c 75 6d 6e 5b 6b 6b 5d 3b 0a 20 20 20 20 20  olumn[kk];.     
d160: 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
d170: 20 69 43 6f 6c 21 3d 58 4e 5f 52 4f 57 49 44 20   iCol!=XN_ROWID 
d180: 26 26 20 69 43 6f 6c 3c 70 54 61 62 2d 3e 6e 43  && iCol<pTab->nC
d190: 6f 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ol );.          
d1a0: 20 20 20 20 69 66 28 20 69 43 6f 6c 3e 3d 30 20      if( iCol>=0 
d1b0: 26 26 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 43  && pTab->aCol[iC
d1c0: 6f 6c 5d 2e 6e 6f 74 4e 75 6c 6c 20 29 20 63 6f  ol].notNull ) co
d1d0: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
d1e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d1f0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73  eAddOp2(v, OP_Is
d200: 4e 75 6c 6c 2c 20 72 31 2b 6b 6b 2c 20 75 6e 69  Null, r1+kk, uni
d210: 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20  qOk);.          
d220: 20 20 20 20 56 64 62 65 43 6f 76 65 72 61 67 65      VdbeCoverage
d230: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (v);.           
d240: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6a   }.            j
d250: 6d 70 36 20 3d 20 73 71 6c 69 74 65 33 56 64 62  mp6 = sqlite3Vdb
d260: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 4e 65  eAddOp1(v, OP_Ne
d270: 78 74 2c 20 69 49 64 78 43 75 72 2b 6a 29 3b 20  xt, iIdxCur+j); 
d280: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
d290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
d2a0: 69 74 65 33 56 64 62 65 47 6f 74 6f 28 76 2c 20  ite3VdbeGoto(v, 
d2b0: 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20  uniqOk);.       
d2c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d2d0: 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 36  JumpHere(v, jmp6
d2e0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
d2f0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
d300: 49 6e 74 28 76 2c 20 4f 50 5f 49 64 78 47 54 2c  Int(v, OP_IdxGT,
d310: 20 69 49 64 78 43 75 72 2b 6a 2c 20 75 6e 69 71   iIdxCur+j, uniq
d320: 4f 6b 2c 20 72 31 2c 0a 20 20 20 20 20 20 20 20  Ok, r1,.        
d330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d340: 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 6e           pIdx->n
d350: 4b 65 79 43 6f 6c 29 3b 20 56 64 62 65 43 6f 76  KeyCol); VdbeCov
d360: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
d370: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d380: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
d390: 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a  dImm, 1, -1); /*
d3a0: 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72   Decrement error
d3b0: 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20   limit */.      
d3c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d3d0: 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 33  eLoadString(v, 3
d3e0: 2c 20 22 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e  , "non-unique en
d3f0: 74 72 79 20 69 6e 20 69 6e 64 65 78 20 22 29 3b  try in index ");
d400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
d410: 69 74 65 33 56 64 62 65 47 6f 74 6f 28 76 2c 20  ite3VdbeGoto(v, 
d420: 6a 6d 70 35 29 3b 0a 20 20 20 20 20 20 20 20 20  jmp5);.         
d430: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65     sqlite3VdbeRe
d440: 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20 75 6e  solveLabel(v, un
d450: 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20  iqOk);.         
d460: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c   }.          sql
d470: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
d480: 28 76 2c 20 6a 6d 70 34 29 3b 0a 20 20 20 20 20  (v, jmp4);.     
d490: 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 6f       sqlite3Reso
d4a0: 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28  lvePartIdxLabel(
d4b0: 70 50 61 72 73 65 2c 20 6a 6d 70 33 29 3b 0a 20  pParse, jmp3);. 
d4c0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
d4d0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d4e0: 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 69  p2(v, OP_Next, i
d4f0: 44 61 74 61 43 75 72 2c 20 6c 6f 6f 70 54 6f 70  DataCur, loopTop
d500: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
d510: 76 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  v);.        sqli
d520: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
d530: 76 2c 20 6c 6f 6f 70 54 6f 70 2d 31 29 3b 0a 23  v, loopTop-1);.#
d540: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
d550: 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 20 20  IT_BTREECOUNT.  
d560: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d570: 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 32  eLoadString(v, 2
d580: 2c 20 22 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e  , "wrong # of en
d590: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 22  tries in index "
d5a0: 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a  );.        for(j
d5b0: 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70  =0, pIdx=pTab->p
d5c0: 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64  Index; pIdx; pId
d5d0: 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a  x=pIdx->pNext, j
d5e0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ++){.          i
d5f0: 66 28 20 70 50 6b 3d 3d 70 49 64 78 20 29 20 63  f( pPk==pIdx ) c
d600: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
d610: 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65     addr = sqlite
d620: 33 56 64 62 65 43 75 72 72 65 6e 74 41 64 64 72  3VdbeCurrentAddr
d630: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  (v);.          s
d640: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
d650: 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 2c  (v, OP_IfPos, 1,
d660: 20 61 64 64 72 2b 32 29 3b 20 56 64 62 65 43 6f   addr+2); VdbeCo
d670: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
d680: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d690: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c  AddOp2(v, OP_Hal
d6a0: 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  t, 0, 0);.      
d6b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d6c0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 43 6f 75 6e  ddOp2(v, OP_Coun
d6d0: 74 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 33 29  t, iIdxCur+j, 3)
d6e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d6f0: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
d700: 20 4f 50 5f 45 71 2c 20 38 2b 6a 2c 20 61 64 64   OP_Eq, 8+j, add
d710: 72 2b 38 2c 20 33 29 3b 20 56 64 62 65 43 6f 76  r+8, 3); VdbeCov
d720: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
d730: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
d740: 68 61 6e 67 65 50 35 28 76 2c 20 53 51 4c 49 54  hangeP5(v, SQLIT
d750: 45 5f 4e 4f 54 4e 55 4c 4c 29 3b 0a 20 20 20 20  E_NOTNULL);.    
d760: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d770: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
d780: 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20 20  dImm, 1, -1);.  
d790: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d7a0: 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c  dbeLoadString(v,
d7b0: 20 33 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 29   3, pIdx->zName)
d7c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d7d0: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
d7e0: 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 33 2c 20 32   OP_Concat, 3, 2
d7f0: 2c 20 37 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 7);.          
d800: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d810: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
d820: 77 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20 20 20  w, 7, 1);.      
d830: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
d840: 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43  LITE_OMIT_BTREEC
d850: 4f 55 4e 54 20 2a 2f 0a 20 20 20 20 20 20 7d 20  OUNT */.      } 
d860: 0a 20 20 20 20 7d 0a 20 20 20 20 7b 0a 20 20 20  .    }.    {.   
d870: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
d880: 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f  int iLn = VDBE_O
d890: 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b  FFSET_LINENO(2);
d8a0: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
d8b0: 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 65  nst VdbeOpList e
d8c0: 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20 20  ndCode[] = {.   
d8d0: 20 20 20 20 20 7b 20 4f 50 5f 41 64 64 49 6d 6d       { OP_AddImm
d8e0: 2c 20 20 20 20 20 20 31 2c 20 30 2c 20 20 20 20  ,      1, 0,    
d8f0: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20      0},    /* 0 
d900: 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  */.        { OP_
d910: 49 66 2c 20 20 20 20 20 20 20 20 20 20 31 2c 20  If,          1, 
d920: 34 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20  4,        0},   
d930: 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20   /* 1 */.       
d940: 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20   { OP_String8,  
d950: 20 20 20 30 2c 20 33 2c 20 20 20 20 20 20 20 20     0, 3,        
d960: 30 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20  0},    /* 2 */. 
d970: 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75         { OP_Resu
d980: 6c 74 52 6f 77 2c 20 20 20 33 2c 20 31 2c 20 20  ltRow,   3, 1,  
d990: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
d9a0: 33 20 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20  3 */.      };.  
d9b0: 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b      VdbeOp *aOp;
d9c0: 0a 0a 20 20 20 20 20 20 61 4f 70 20 3d 20 73 71  ..      aOp = sq
d9d0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
d9e0: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
d9f0: 65 6e 64 43 6f 64 65 29 2c 20 65 6e 64 43 6f 64  endCode), endCod
da00: 65 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20 20 69  e, iLn);.      i
da10: 66 28 20 61 4f 70 20 29 7b 0a 20 20 20 20 20 20  f( aOp ){.      
da20: 20 20 61 4f 70 5b 30 5d 2e 70 32 20 3d 20 2d 6d    aOp[0].p2 = -m
da30: 78 45 72 72 3b 0a 20 20 20 20 20 20 20 20 61 4f  xErr;.        aO
da40: 70 5b 32 5d 2e 70 34 74 79 70 65 20 3d 20 50 34  p[2].p4type = P4
da50: 5f 53 54 41 54 49 43 3b 0a 20 20 20 20 20 20 20  _STATIC;.       
da60: 20 61 4f 70 5b 32 5d 2e 70 34 2e 7a 20 3d 20 22   aOp[2].p4.z = "
da70: 6f 6b 22 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ok";.      }.   
da80: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
da90: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
daa0: 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
dab0: 43 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65  CHECK */..#ifnde
dac0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
dad0: 46 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  F16.  /*.  **   
dae0: 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 0a  PRAGMA encoding.
daf0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e    **   PRAGMA en
db00: 63 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d 38 22  coding = "utf-8"
db10: 7c 22 75 74 66 2d 31 36 22 7c 22 75 74 66 2d 31  |"utf-16"|"utf-1
db20: 36 6c 65 22 7c 22 75 74 66 2d 31 36 62 65 22 0a  6le"|"utf-16be".
db30: 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69 74 73    **.  ** In its
db40: 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 74 68 69   first form, thi
db50: 73 20 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73  s pragma returns
db60: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
db70: 20 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a 20 64   the main.  ** d
db80: 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20  atabase. If the 
db90: 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20  database is not 
dba0: 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69 74 20  initialized, it 
dbb0: 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 6e  is initialized n
dbc0: 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  ow..  **.  ** Th
dbd0: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66  e second form of
dbe0: 20 74 68 69 73 20 70 72 61 67 6d 61 20 69 73 20   this pragma is 
dbf0: 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 6d  a no-op if the m
dc00: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
dc10: 65 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74 20 61  e.  ** has not a
dc20: 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74  lready been init
dc30: 69 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68 69 73  ialized. In this
dc40: 20 63 61 73 65 20 69 74 20 73 65 74 73 20 74 68   case it sets th
dc50: 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20 65  e default.  ** e
dc60: 6e 63 6f 64 69 6e 67 20 74 68 61 74 20 77 69 6c  ncoding that wil
dc70: 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  l be used for th
dc80: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
dc90: 66 69 6c 65 20 69 66 20 61 20 6e 65 77 20 66 69  file if a new fi
dca0: 6c 65 0a 20 20 2a 2a 20 69 73 20 63 72 65 61 74  le.  ** is creat
dcb0: 65 64 2e 20 49 66 20 61 6e 20 65 78 69 73 74 69  ed. If an existi
dcc0: 6e 67 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  ng main database
dcd0: 20 66 69 6c 65 20 69 73 20 6f 70 65 6e 65 64 2c   file is opened,
dce0: 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 64   then the.  ** d
dcf0: 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f  efault text enco
dd00: 64 69 6e 67 20 66 6f 72 20 74 68 65 20 65 78 69  ding for the exi
dd10: 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 69  sting database i
dd20: 73 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a 20 20  s used..  ** .  
dd30: 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73 20  ** In all cases 
dd40: 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 63 72  new databases cr
dd50: 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 65 20  eated using the 
dd60: 41 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64 20 61  ATTACH command a
dd70: 72 65 0a 20 20 2a 2a 20 63 72 65 61 74 65 64 20  re.  ** created 
dd80: 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 20  to use the same 
dd90: 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63  default text enc
dda0: 6f 64 69 6e 67 20 61 73 20 74 68 65 20 6d 61 69  oding as the mai
ddb0: 6e 20 64 61 74 61 62 61 73 65 2e 20 49 66 0a 20  n database. If. 
ddc0: 20 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74   ** the main dat
ddd0: 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 62 65  abase has not be
dde0: 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61  en initialized a
ddf0: 6e 64 2f 6f 72 20 63 72 65 61 74 65 64 20 77 68  nd/or created wh
de00: 65 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a 20 69  en ATTACH.  ** i
de10: 73 20 65 78 65 63 75 74 65 64 2c 20 74 68 69 73  s executed, this
de20: 20 69 73 20 64 6f 6e 65 20 62 65 66 6f 72 65 20   is done before 
de30: 74 68 65 20 41 54 54 41 43 48 20 6f 70 65 72 61  the ATTACH opera
de40: 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  tion..  **.  ** 
de50: 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f  In the second fo
de60: 72 6d 20 74 68 69 73 20 70 72 61 67 6d 61 20 73  rm this pragma s
de70: 65 74 73 20 74 68 65 20 74 65 78 74 20 65 6e 63  ets the text enc
de80: 6f 64 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64  oding to be used
de90: 20 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64 61 74   in.  ** new dat
dea0: 61 62 61 73 65 20 66 69 6c 65 73 20 63 72 65 61  abase files crea
deb0: 74 65 64 20 75 73 69 6e 67 20 74 68 69 73 20 64  ted using this d
dec0: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20  atabase handle. 
ded0: 49 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20  It is only.  ** 
dee0: 75 73 65 66 75 6c 20 69 66 20 69 6e 76 6f 6b 65  useful if invoke
def0: 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66  d immediately af
df00: 74 65 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  ter the main dat
df10: 61 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20 20 63  abase i.  */.  c
df20: 61 73 65 20 50 72 61 67 54 79 70 5f 45 4e 43 4f  ase PragTyp_ENCO
df30: 44 49 4e 47 3a 20 7b 0a 20 20 20 20 73 74 61 74  DING: {.    stat
df40: 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20  ic const struct 
df50: 45 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20  EncName {.      
df60: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20  char *zName;.   
df70: 20 20 20 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d     u8 enc;.    }
df80: 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a   encnames[] = {.
df90: 20 20 20 20 20 20 7b 20 22 55 54 46 38 22 2c 20        { "UTF8", 
dfa0: 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20      SQLITE_UTF8 
dfb0: 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
dfc0: 7b 20 22 55 54 46 2d 38 22 2c 20 20 20 20 53 51  { "UTF-8",    SQ
dfd0: 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20 20 20  LITE_UTF8       
dfe0: 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20   },  /* Must be 
dff0: 65 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20  element [1] */. 
e000: 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 6c 65       { "UTF-16le
e010: 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  ", SQLITE_UTF16L
e020: 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73  E     },  /* Mus
e030: 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 32 5d  t be element [2]
e040: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46   */.      { "UTF
e050: 2d 31 36 62 65 22 2c 20 53 51 4c 49 54 45 5f 55  -16be", SQLITE_U
e060: 54 46 31 36 42 45 20 20 20 20 20 7d 2c 20 20 2f  TF16BE     },  /
e070: 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e  * Must be elemen
e080: 74 20 5b 33 5d 20 2a 2f 0a 20 20 20 20 20 20 7b  t [3] */.      {
e090: 20 22 55 54 46 31 36 6c 65 22 2c 20 20 53 51 4c   "UTF16le",  SQL
e0a0: 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20 20 20  ITE_UTF16LE     
e0b0: 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31  },.      { "UTF1
e0c0: 36 62 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54  6be",  SQLITE_UT
e0d0: 46 31 36 42 45 20 20 20 20 20 7d 2c 0a 20 20 20  F16BE     },.   
e0e0: 20 20 20 7b 20 22 55 54 46 2d 31 36 22 2c 20 20     { "UTF-16",  
e0f0: 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
e100: 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45      }, /* SQLITE
e110: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a  _UTF16NATIVE */.
e120: 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 22 2c        { "UTF16",
e130: 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20      0           
e140: 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c         }, /* SQL
e150: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
e160: 2a 2f 0a 20 20 20 20 20 20 7b 20 30 2c 20 30 20  */.      { 0, 0 
e170: 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63 6f 6e  }.    };.    con
e180: 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e 61 6d  st struct EncNam
e190: 65 20 2a 70 45 6e 63 3b 0a 20 20 20 20 69 66 28  e *pEnc;.    if(
e1a0: 20 21 7a 52 69 67 68 74 20 29 7b 20 20 20 20 2f   !zRight ){    /
e1b0: 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69  * "PRAGMA encodi
e1c0: 6e 67 22 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  ng" */.      if(
e1d0: 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
e1e0: 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74  ma(pParse) ) got
e1f0: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
e200: 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e      assert( encn
e210: 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 38  ames[SQLITE_UTF8
e220: 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ].enc==SQLITE_UT
e230: 46 38 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  F8 );.      asse
e240: 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c  rt( encnames[SQL
e250: 49 54 45 5f 55 54 46 31 36 4c 45 5d 2e 65 6e 63  ITE_UTF16LE].enc
e260: 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  ==SQLITE_UTF16LE
e270: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
e280: 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54  ( encnames[SQLIT
e290: 45 5f 55 54 46 31 36 42 45 5d 2e 65 6e 63 3d 3d  E_UTF16BE].enc==
e2a0: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29  SQLITE_UTF16BE )
e2b0: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  ;.      returnSi
e2c0: 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 65 6e 63  ngleText(v, "enc
e2d0: 6f 64 69 6e 67 22 2c 20 65 6e 63 6e 61 6d 65 73  oding", encnames
e2e0: 5b 45 4e 43 28 70 50 61 72 73 65 2d 3e 64 62 29  [ENC(pParse->db)
e2f0: 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 65  ].zName);.    }e
e300: 6c 73 65 7b 20 20 20 20 20 20 20 20 20 20 20 20  lse{            
e310: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 22              /* "
e320: 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20  PRAGMA encoding 
e330: 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20 20 20 20  = XXX" */.      
e340: 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65 20 74  /* Only change t
e350: 68 65 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69  he value of sqli
e360: 74 65 2e 65 6e 63 20 69 66 20 74 68 65 20 64 61  te.enc if the da
e370: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 69 73  tabase handle is
e380: 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e   not.      ** in
e390: 69 74 69 61 6c 69 7a 65 64 2e 20 49 66 20 74 68  itialized. If th
e3a0: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
e3b0: 65 78 69 73 74 73 2c 20 74 68 65 20 6e 65 77 20  exists, the new 
e3c0: 73 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c 75 65  sqlite.enc value
e3d0: 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 62  .      ** will b
e3e0: 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77 68  e overwritten wh
e3f0: 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 69 73  en the schema is
e400: 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20 49 66   next loaded. If
e410: 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20 20 20   it does not.   
e420: 20 20 20 2a 2a 20 61 6c 72 65 61 64 79 20 65 78     ** already ex
e430: 69 73 74 73 2c 20 69 74 20 77 69 6c 6c 20 62 65  ists, it will be
e440: 20 63 72 65 61 74 65 64 20 74 6f 20 75 73 65 20   created to use 
e450: 74 68 65 20 6e 65 77 20 65 6e 63 6f 64 69 6e 67  the new encoding
e460: 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f   value..      */
e470: 0a 20 20 20 20 20 20 69 66 28 20 0a 20 20 20 20  .      if( .    
e480: 20 20 20 20 21 28 44 62 48 61 73 50 72 6f 70 65      !(DbHasPrope
e490: 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f 53 63  rty(db, 0, DB_Sc
e4a0: 68 65 6d 61 4c 6f 61 64 65 64 29 29 20 7c 7c 20  hemaLoaded)) || 
e4b0: 0a 20 20 20 20 20 20 20 20 44 62 48 61 73 50 72  .        DbHasPr
e4c0: 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42  operty(db, 0, DB
e4d0: 5f 45 6d 70 74 79 29 20 0a 20 20 20 20 20 20 29  _Empty) .      )
e4e0: 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 45  {.        for(pE
e4f0: 6e 63 3d 26 65 6e 63 6e 61 6d 65 73 5b 30 5d 3b  nc=&encnames[0];
e500: 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20 70 45   pEnc->zName; pE
e510: 6e 63 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  nc++){.         
e520: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
e530: 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 70  trICmp(zRight, p
e540: 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b 0a 20  Enc->zName) ){. 
e550: 20 20 20 20 20 20 20 20 20 20 20 53 43 48 45 4d             SCHEM
e560: 41 5f 45 4e 43 28 64 62 29 20 3d 20 45 4e 43 28  A_ENC(db) = ENC(
e570: 64 62 29 20 3d 0a 20 20 20 20 20 20 20 20 20 20  db) =.          
e580: 20 20 20 20 20 20 70 45 6e 63 2d 3e 65 6e 63 20        pEnc->enc 
e590: 3f 20 70 45 6e 63 2d 3e 65 6e 63 20 3a 20 53 51  ? pEnc->enc : SQ
e5a0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
e5b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;.            br
e5c0: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  eak;.          }
e5d0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
e5e0: 20 20 20 69 66 28 20 21 70 45 6e 63 2d 3e 7a 4e     if( !pEnc->zN
e5f0: 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ame ){.         
e600: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
e610: 28 70 50 61 72 73 65 2c 20 22 75 6e 73 75 70 70  (pParse, "unsupp
e620: 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20  orted encoding: 
e630: 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20  %s", zRight);.  
e640: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
e650: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
e660: 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
e670: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
e680: 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
e690: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45  E_OMIT_SCHEMA_VE
e6a0: 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20 20  RSION_PRAGMAS.  
e6b0: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
e6c0: 20 5b 73 63 68 65 6d 61 2e 5d 73 63 68 65 6d 61   [schema.]schema
e6d0: 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20  _version.  **   
e6e0: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
e6f0: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d  schema_version =
e700: 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a   <integer>.  **.
e710: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73    **   PRAGMA [s
e720: 63 68 65 6d 61 2e 5d 75 73 65 72 5f 76 65 72 73  chema.]user_vers
e730: 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ion.  **   PRAGM
e740: 41 20 5b 73 63 68 65 6d 61 2e 5d 75 73 65 72 5f  A [schema.]user_
e750: 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67  version = <integ
e760: 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  er>.  **.  **   
e770: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
e780: 66 72 65 65 6c 69 73 74 5f 63 6f 75 6e 74 20 3d  freelist_count =
e790: 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a   <integer>.  **.
e7a0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73    **   PRAGMA [s
e7b0: 63 68 65 6d 61 2e 5d 61 70 70 6c 69 63 61 74 69  chema.]applicati
e7c0: 6f 6e 5f 69 64 0a 20 20 2a 2a 20 20 20 50 52 41  on_id.  **   PRA
e7d0: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 70 70  GMA [schema.]app
e7e0: 6c 69 63 61 74 69 6f 6e 5f 69 64 20 3d 20 3c 69  lication_id = <i
e7f0: 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a  nteger>.  **.  *
e800: 2a 20 54 68 65 20 70 72 61 67 6d 61 27 73 20 73  * The pragma's s
e810: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 61 6e  chema_version an
e820: 64 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 61  d user_version a
e830: 72 65 20 75 73 65 64 20 74 6f 20 73 65 74 20 6f  re used to set o
e840: 72 20 67 65 74 0a 20 20 2a 2a 20 74 68 65 20 76  r get.  ** the v
e850: 61 6c 75 65 20 6f 66 20 74 68 65 20 73 63 68 65  alue of the sche
e860: 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 75  ma-version and u
e870: 73 65 72 2d 76 65 72 73 69 6f 6e 2c 20 72 65 73  ser-version, res
e880: 70 65 63 74 69 76 65 6c 79 2e 20 42 6f 74 68 0a  pectively. Both.
e890: 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d    ** the schema-
e8a0: 76 65 72 73 69 6f 6e 20 61 6e 64 20 74 68 65 20  version and the 
e8b0: 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 61 72 65  user-version are
e8c0: 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69   32-bit signed i
e8d0: 6e 74 65 67 65 72 73 0a 20 20 2a 2a 20 73 74 6f  ntegers.  ** sto
e8e0: 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  red in the datab
e8f0: 61 73 65 20 68 65 61 64 65 72 2e 0a 20 20 2a 2a  ase header..  **
e900: 0a 20 20 2a 2a 20 54 68 65 20 73 63 68 65 6d 61  .  ** The schema
e910: 2d 63 6f 6f 6b 69 65 20 69 73 20 75 73 75 61 6c  -cookie is usual
e920: 6c 79 20 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c 61  ly only manipula
e930: 74 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62  ted internally b
e940: 79 20 53 51 4c 69 74 65 2e 20 49 74 0a 20 20 2a  y SQLite. It.  *
e950: 2a 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  * is incremented
e960: 20 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e 65   by SQLite whene
e970: 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
e980: 20 73 63 68 65 6d 61 20 69 73 20 6d 6f 64 69 66   schema is modif
e990: 69 65 64 20 28 62 79 0a 20 20 2a 2a 20 63 72 65  ied (by.  ** cre
e9a0: 61 74 69 6e 67 20 6f 72 20 64 72 6f 70 70 69 6e  ating or droppin
e9b0: 67 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  g a table or ind
e9c0: 65 78 29 2e 20 54 68 65 20 73 63 68 65 6d 61 20  ex). The schema 
e9d0: 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20  version is used 
e9e0: 62 79 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 65  by.  ** SQLite e
e9f0: 61 63 68 20 74 69 6d 65 20 61 20 71 75 65 72 79  ach time a query
ea00: 20 69 73 20 65 78 65 63 75 74 65 64 20 74 6f 20   is executed to 
ea10: 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20  ensure that the 
ea20: 69 6e 74 65 72 6e 61 6c 20 63 61 63 68 65 0a 20  internal cache. 
ea30: 20 2a 2a 20 6f 66 20 74 68 65 20 73 63 68 65 6d   ** of the schem
ea40: 61 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70  a used when comp
ea50: 69 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75  iling the SQL qu
ea60: 65 72 79 20 6d 61 74 63 68 65 73 20 74 68 65 20  ery matches the 
ea70: 73 63 68 65 6d 61 20 6f 66 0a 20 20 2a 2a 20 74  schema of.  ** t
ea80: 68 65 20 64 61 74 61 62 61 73 65 20 61 67 61 69  he database agai
ea90: 6e 73 74 20 77 68 69 63 68 20 74 68 65 20 63 6f  nst which the co
eaa0: 6d 70 69 6c 65 64 20 71 75 65 72 79 20 69 73 20  mpiled query is 
eab0: 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65  actually execute
eac0: 64 2e 0a 20 20 2a 2a 20 53 75 62 76 65 72 74 69  d..  ** Subverti
ead0: 6e 67 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73  ng this mechanis
eae0: 6d 20 62 79 20 75 73 69 6e 67 20 22 50 52 41 47  m by using "PRAG
eaf0: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
eb00: 6e 22 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20 2a  n" to modify.  *
eb10: 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72  * the schema-ver
eb20: 73 69 6f 6e 20 69 73 20 70 6f 74 65 6e 74 69 61  sion is potentia
eb30: 6c 6c 79 20 64 61 6e 67 65 72 6f 75 73 20 61 6e  lly dangerous an
eb40: 64 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 70 72  d may lead to pr
eb50: 6f 67 72 61 6d 0a 20 20 2a 2a 20 63 72 61 73 68  ogram.  ** crash
eb60: 65 73 20 6f 72 20 64 61 74 61 62 61 73 65 20 63  es or database c
eb70: 6f 72 72 75 70 74 69 6f 6e 2e 20 55 73 65 20 77  orruption. Use w
eb80: 69 74 68 20 63 61 75 74 69 6f 6e 21 0a 20 20 2a  ith caution!.  *
eb90: 2a 0a 20 20 2a 2a 20 54 68 65 20 75 73 65 72 2d  *.  ** The user-
eba0: 76 65 72 73 69 6f 6e 20 69 73 20 6e 6f 74 20 75  version is not u
ebb0: 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62  sed internally b
ebc0: 79 20 53 51 4c 69 74 65 2e 20 49 74 20 6d 61 79  y SQLite. It may
ebd0: 20 62 65 20 75 73 65 64 20 62 79 0a 20 20 2a 2a   be used by.  **
ebe0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 66 6f   applications fo
ebf0: 72 20 61 6e 79 20 70 75 72 70 6f 73 65 2e 0a 20  r any purpose.. 
ec00: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
ec10: 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 3a  yp_HEADER_VALUE:
ec20: 20 7b 0a 20 20 20 20 69 6e 74 20 69 43 6f 6f 6b   {.    int iCook
ec30: 69 65 20 3d 20 70 50 72 61 67 6d 61 2d 3e 69 41  ie = pPragma->iA
ec40: 72 67 3b 20 20 2f 2a 20 57 68 69 63 68 20 63 6f  rg;  /* Which co
ec50: 6f 6b 69 65 20 74 6f 20 72 65 61 64 20 6f 72 20  okie to read or 
ec60: 77 72 69 74 65 20 2a 2f 0a 20 20 20 20 73 71 6c  write */.    sql
ec70: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
ec80: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 69  e(v, iDb);.    i
ec90: 66 28 20 7a 52 69 67 68 74 20 26 26 20 28 70 50  f( zRight && (pP
eca0: 72 61 67 6d 61 2d 3e 6d 50 72 61 67 46 6c 61 67  ragma->mPragFlag
ecb0: 20 26 20 50 72 61 67 46 6c 61 67 5f 52 65 61 64   & PragFlag_Read
ecc0: 4f 6e 6c 79 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Only)==0 ){.    
ecd0: 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 73    /* Write the s
ece0: 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20  pecified cookie 
ecf0: 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73  value */.      s
ed00: 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65  tatic const Vdbe
ed10: 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f 6b 69 65  OpList setCookie
ed20: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b  [] = {.        {
ed30: 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c   OP_Transaction,
ed40: 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20      0,  1,  0}, 
ed50: 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
ed60: 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69     { OP_SetCooki
ed70: 65 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20  e,      0,  0,  
ed80: 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20  0},    /* 1 */. 
ed90: 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 56 64       };.      Vd
eda0: 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20 20 20 20  beOp *aOp;.     
edb0: 20 73 71 6c 69 74 65 33 56 64 62 65 56 65 72 69   sqlite3VdbeVeri
edc0: 66 79 4e 6f 4d 61 6c 6c 6f 63 52 65 71 75 69 72  fyNoMallocRequir
edd0: 65 64 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  ed(v, ArraySize(
ede0: 73 65 74 43 6f 6f 6b 69 65 29 29 3b 0a 20 20 20  setCookie));.   
edf0: 20 20 20 61 4f 70 20 3d 20 73 71 6c 69 74 65 33     aOp = sqlite3
ee00: 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
ee10: 20 41 72 72 61 79 53 69 7a 65 28 73 65 74 43 6f   ArraySize(setCo
ee20: 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b 69 65  okie), setCookie
ee30: 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
ee40: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
ee50: 53 54 52 45 53 53 28 61 4f 70 3d 3d 30 29 20 29  STRESS(aOp==0) )
ee60: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 61 4f   break;.      aO
ee70: 70 5b 30 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20  p[0].p1 = iDb;. 
ee80: 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70 31 20 3d       aOp[1].p1 =
ee90: 20 69 44 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b   iDb;.      aOp[
eea0: 31 5d 2e 70 32 20 3d 20 69 43 6f 6f 6b 69 65 3b  1].p2 = iCookie;
eeb0: 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70 33  .      aOp[1].p3
eec0: 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a   = sqlite3Atoi(z
eed0: 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 65 6c 73  Right);.    }els
eee0: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52 65 61 64  e{.      /* Read
eef0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
ef00: 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20  ookie value */. 
ef10: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
ef20: 74 20 56 64 62 65 4f 70 4c 69 73 74 20 72 65 61  t VdbeOpList rea
ef30: 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20  dCookie[] = {.  
ef40: 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73        { OP_Trans
ef50: 61 63 74 69 6f 6e 2c 20 20 20 20 20 30 2c 20 20  action,     0,  
ef60: 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20  0,  0},    /* 0 
ef70: 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  */.        { OP_
ef80: 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20  ReadCookie,     
ef90: 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20   0,  1,  0},    
efa0: 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 1 */.        
efb0: 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  { OP_ResultRow, 
efc0: 20 20 20 20 20 20 31 2c 20 20 31 2c 20 20 30 7d        1,  1,  0}
efd0: 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20  .      };.      
efe0: 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20 20  VdbeOp *aOp;.   
eff0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 56 65     sqlite3VdbeVe
f000: 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52 65 71 75  rifyNoMallocRequ
f010: 69 72 65 64 28 76 2c 20 41 72 72 61 79 53 69 7a  ired(v, ArraySiz
f020: 65 28 72 65 61 64 43 6f 6f 6b 69 65 29 29 3b 0a  e(readCookie));.
f030: 20 20 20 20 20 20 61 4f 70 20 3d 20 73 71 6c 69        aOp = sqli
f040: 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74  te3VdbeAddOpList
f050: 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 72 65  (v, ArraySize(re
f060: 61 64 43 6f 6f 6b 69 65 29 2c 72 65 61 64 43 6f  adCookie),readCo
f070: 6f 6b 69 65 2c 30 29 3b 0a 20 20 20 20 20 20 69  okie,0);.      i
f080: 66 28 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c  f( ONLY_IF_REALL
f090: 4f 43 5f 53 54 52 45 53 53 28 61 4f 70 3d 3d 30  OC_STRESS(aOp==0
f0a0: 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  ) ) break;.     
f0b0: 20 61 4f 70 5b 30 5d 2e 70 31 20 3d 20 69 44 62   aOp[0].p1 = iDb
f0c0: 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70  ;.      aOp[1].p
f0d0: 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 61  1 = iDb;.      a
f0e0: 4f 70 5b 31 5d 2e 70 33 20 3d 20 69 43 6f 6f 6b  Op[1].p3 = iCook
f0f0: 69 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ie;.      sqlite
f100: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
f110: 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  v, 1);.      sql
f120: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
f130: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
f140: 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20 53 51  _NAME, zLeft, SQ
f150: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
f160: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
f170: 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ak;.#endif /* SQ
f180: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
f190: 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53  _VERSION_PRAGMAS
f1a0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
f1b0: 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
f1c0: 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 20 20 2f  OPTION_DIAGS.  /
f1d0: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
f1e0: 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 0a  compile_options.
f1f0: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
f200: 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 61 6c   the names of al
f210: 6c 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  l compile-time o
f220: 70 74 69 6f 6e 73 20 75 73 65 64 20 69 6e 20 74  ptions used in t
f230: 68 69 73 20 62 75 69 6c 64 2c 0a 20 20 2a 2a 20  his build,.  ** 
f240: 6f 6e 65 20 6f 70 74 69 6f 6e 20 70 65 72 20 72  one option per r
f250: 6f 77 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ow..  */.  case 
f260: 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45 5f  PragTyp_COMPILE_
f270: 4f 50 54 49 4f 4e 53 3a 20 7b 0a 20 20 20 20 69  OPTIONS: {.    i
f280: 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 63 6f  nt i = 0;.    co
f290: 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 74 3b 0a  nst char *zOpt;.
f2a0: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
f2b0: 20 3d 20 31 3b 0a 20 20 20 20 73 65 74 4f 6e 65   = 1;.    setOne
f2c0: 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 22 63  ColumnName(v, "c
f2d0: 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 22 29 3b  ompile_option");
f2e0: 0a 20 20 20 20 77 68 69 6c 65 28 20 28 7a 4f 70  .    while( (zOp
f2f0: 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70  t = sqlite3_comp
f300: 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 2b  ileoption_get(i+
f310: 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  +))!=0 ){.      
f320: 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53  sqlite3VdbeLoadS
f330: 74 72 69 6e 67 28 76 2c 20 31 2c 20 7a 4f 70 74  tring(v, 1, zOpt
f340: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
f350: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
f360: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
f370: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
f380: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
f390: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
f3a0: 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 20  ILEOPTION_DIAGS 
f3b0: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
f3c0: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 2f 2a  TE_OMIT_WAL.  /*
f3d0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
f3e0: 73 63 68 65 6d 61 2e 5d 77 61 6c 5f 63 68 65 63  schema.]wal_chec
f3f0: 6b 70 6f 69 6e 74 20 3d 20 70 61 73 73 69 76 65  kpoint = passive
f400: 7c 66 75 6c 6c 7c 72 65 73 74 61 72 74 7c 74 72  |full|restart|tr
f410: 75 6e 63 61 74 65 0a 20 20 2a 2a 0a 20 20 2a 2a  uncate.  **.  **
f420: 20 43 68 65 63 6b 70 6f 69 6e 74 20 74 68 65 20   Checkpoint the 
f430: 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20  database..  */. 
f440: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 57 41   case PragTyp_WA
f450: 4c 5f 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a  L_CHECKPOINT: {.
f460: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
f470: 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d   char *azCol[] =
f480: 20 7b 20 22 62 75 73 79 22 2c 20 22 6c 6f 67 22   { "busy", "log"
f490: 2c 20 22 63 68 65 63 6b 70 6f 69 6e 74 65 64 22  , "checkpointed"
f4a0: 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 42 74 20   };.    int iBt 
f4b0: 3d 20 28 70 49 64 32 2d 3e 7a 3f 69 44 62 3a 53  = (pId2->z?iDb:S
f4c0: 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
f4d0: 45 44 29 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f  ED);.    int eMo
f4e0: 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43  de = SQLITE_CHEC
f4f0: 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 3b 0a  KPOINT_PASSIVE;.
f500: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
f510: 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
f520: 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68  te3StrICmp(zRigh
f530: 74 2c 20 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b  t, "full")==0 ){
f540: 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  .        eMode =
f550: 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
f560: 4e 54 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 7d  NT_FULL;.      }
f570: 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33  else if( sqlite3
f580: 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  StrICmp(zRight, 
f590: 22 72 65 73 74 61 72 74 22 29 3d 3d 30 20 29 7b  "restart")==0 ){
f5a0: 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  .        eMode =
f5b0: 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
f5c0: 4e 54 5f 52 45 53 54 41 52 54 3b 0a 20 20 20 20  NT_RESTART;.    
f5d0: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69    }else if( sqli
f5e0: 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68  te3StrICmp(zRigh
f5f0: 74 2c 20 22 74 72 75 6e 63 61 74 65 22 29 3d 3d  t, "truncate")==
f600: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f  0 ){.        eMo
f610: 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43  de = SQLITE_CHEC
f620: 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45 3b  KPOINT_TRUNCATE;
f630: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
f640: 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e     setAllColumnN
f650: 61 6d 65 73 28 76 2c 20 33 2c 20 61 7a 43 6f 6c  ames(v, 3, azCol
f660: 29 3b 20 20 61 73 73 65 72 74 28 20 33 3d 3d 41  );  assert( 3==A
f670: 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20  rraySize(azCol) 
f680: 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  );.    pParse->n
f690: 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c  Mem = 3;.    sql
f6a0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
f6b0: 2c 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 2c  , OP_Checkpoint,
f6c0: 20 69 42 74 2c 20 65 4d 6f 64 65 2c 20 31 29 3b   iBt, eMode, 1);
f6d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
f6e0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
f6f0: 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20  ultRow, 1, 3);. 
f700: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 2f   }.  break;..  /
f710: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
f720: 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69  wal_autocheckpoi
f730: 6e 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  nt.  **   PRAGMA
f740: 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f   wal_autocheckpo
f750: 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a  int = N.  **.  *
f760: 2a 20 43 6f 6e 66 69 67 75 72 65 20 61 20 64 61  * Configure a da
f770: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
f780: 6e 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c  n to automatical
f790: 6c 79 20 63 68 65 63 6b 70 6f 69 6e 74 20 61 20  ly checkpoint a 
f7a0: 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 61 66  database.  ** af
f7b0: 74 65 72 20 61 63 63 75 6d 75 6c 61 74 69 6e 67  ter accumulating
f7c0: 20 4e 20 66 72 61 6d 65 73 20 69 6e 20 74 68 65   N frames in the
f7d0: 20 6c 6f 67 2e 20 4f 72 20 71 75 65 72 79 20 66   log. Or query f
f7e0: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 76  or the current v
f7f0: 61 6c 75 65 0a 20 20 2a 2a 20 6f 66 20 4e 2e 0a  alue.  ** of N..
f800: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
f810: 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43  Typ_WAL_AUTOCHEC
f820: 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69 66  KPOINT: {.    if
f830: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
f840: 20 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f 61 75    sqlite3_wal_au
f850: 74 6f 63 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c  tocheckpoint(db,
f860: 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
f870: 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ght));.    }.   
f880: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
f890: 28 76 2c 20 22 77 61 6c 5f 61 75 74 6f 63 68 65  (v, "wal_autoche
f8a0: 63 6b 70 6f 69 6e 74 22 2c 20 0a 20 20 20 20 20  ckpoint", .     
f8b0: 20 20 64 62 2d 3e 78 57 61 6c 43 61 6c 6c 62 61    db->xWalCallba
f8c0: 63 6b 3d 3d 73 71 6c 69 74 65 33 57 61 6c 44 65  ck==sqlite3WalDe
f8d0: 66 61 75 6c 74 48 6f 6f 6b 20 3f 20 0a 20 20 20  faultHook ? .   
f8e0: 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 50          SQLITE_P
f8f0: 54 52 5f 54 4f 5f 49 4e 54 28 64 62 2d 3e 70 57  TR_TO_INT(db->pW
f900: 61 6c 41 72 67 29 20 3a 20 30 29 3b 0a 20 20 7d  alArg) : 0);.  }
f910: 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
f920: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
f930: 47 4d 41 20 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72  GMA shrink_memor
f940: 79 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c  y.  **.  ** IMPL
f950: 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
f960: 2d 32 33 34 34 35 2d 34 36 31 30 39 20 54 68 69  -23445-46109 Thi
f970: 73 20 70 72 61 67 6d 61 20 63 61 75 73 65 73 20  s pragma causes 
f980: 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 2a  the database.  *
f990: 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 6e 20  * connection on 
f9a0: 77 68 69 63 68 20 69 74 20 69 73 20 69 6e 76 6f  which it is invo
f9b0: 6b 65 64 20 74 6f 20 66 72 65 65 20 75 70 20 61  ked to free up a
f9c0: 73 20 6d 75 63 68 20 6d 65 6d 6f 72 79 20 61 73  s much memory as
f9d0: 20 69 74 0a 20 20 2a 2a 20 63 61 6e 2c 20 62 79   it.  ** can, by
f9e0: 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33   calling sqlite3
f9f0: 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  _db_release_memo
fa00: 72 79 28 29 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  ry()..  */.  cas
fa10: 65 20 50 72 61 67 54 79 70 5f 53 48 52 49 4e 4b  e PragTyp_SHRINK
fa20: 5f 4d 45 4d 4f 52 59 3a 20 7b 0a 20 20 20 20 73  _MEMORY: {.    s
fa30: 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73  qlite3_db_releas
fa40: 65 5f 6d 65 6d 6f 72 79 28 64 62 29 3b 0a 20 20  e_memory(db);.  
fa50: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
fa60: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
fa70: 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 0a 20 20   busy_timeout.  
fa80: 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79  **   PRAGMA busy
fa90: 5f 74 69 6d 65 6f 75 74 20 3d 20 4e 0a 20 20 2a  _timeout = N.  *
faa0: 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71 6c 69  *.  ** Call sqli
fab0: 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74  te3_busy_timeout
fac0: 28 64 62 2c 20 4e 29 2e 20 20 52 65 74 75 72 6e  (db, N).  Return
fad0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 69 6d   the current tim
fae0: 65 6f 75 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20  eout value.  ** 
faf0: 69 66 20 6f 6e 65 20 69 73 20 73 65 74 2e 20 20  if one is set.  
fb00: 49 66 20 6e 6f 20 62 75 73 79 20 68 61 6e 64 6c  If no busy handl
fb10: 65 72 20 6f 72 20 61 20 64 69 66 66 65 72 65 6e  er or a differen
fb20: 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 69  t busy handler i
fb30: 73 20 73 65 74 0a 20 20 2a 2a 20 74 68 65 6e 20  s set.  ** then 
fb40: 30 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  0 is returned.  
fb50: 53 65 74 74 69 6e 67 20 74 68 65 20 62 75 73 79  Setting the busy
fb60: 5f 74 69 6d 65 6f 75 74 20 74 6f 20 30 20 6f 72  _timeout to 0 or
fb70: 20 6e 65 67 61 74 69 76 65 0a 20 20 2a 2a 20 64   negative.  ** d
fb80: 69 73 61 62 6c 65 73 20 74 68 65 20 74 69 6d 65  isables the time
fb90: 6f 75 74 2e 0a 20 20 2a 2f 0a 20 20 2f 2a 63 61  out..  */.  /*ca
fba0: 73 65 20 50 72 61 67 54 79 70 5f 42 55 53 59 5f  se PragTyp_BUSY_
fbb0: 54 49 4d 45 4f 55 54 2a 2f 20 64 65 66 61 75 6c  TIMEOUT*/ defaul
fbc0: 74 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28  t: {.    assert(
fbd0: 20 70 50 72 61 67 6d 61 2d 3e 65 50 72 61 67 54   pPragma->ePragT
fbe0: 79 70 3d 3d 50 72 61 67 54 79 70 5f 42 55 53 59  yp==PragTyp_BUSY
fbf0: 5f 54 49 4d 45 4f 55 54 20 29 3b 0a 20 20 20 20  _TIMEOUT );.    
fc00: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
fc10: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79      sqlite3_busy
fc20: 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 73 71 6c  _timeout(db, sql
fc30: 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
fc40: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  );.    }.    ret
fc50: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20  urnSingleInt(v, 
fc60: 22 74 69 6d 65 6f 75 74 22 2c 20 20 64 62 2d 3e  "timeout",  db->
fc70: 62 75 73 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20  busyTimeout);.  
fc80: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
fc90: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
fca0: 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74   soft_heap_limit
fcb0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73  .  **   PRAGMA s
fcc0: 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3d  oft_heap_limit =
fcd0: 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50   N.  **.  ** IMP
fce0: 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
fcf0: 52 2d 32 36 33 34 33 2d 34 35 39 33 30 20 54 68  R-26343-45930 Th
fd00: 69 73 20 70 72 61 67 6d 61 20 69 6e 76 6f 6b 65  is pragma invoke
fd10: 73 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74  s the.  ** sqlit
fd20: 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  e3_soft_heap_lim
fd30: 69 74 36 34 28 29 20 69 6e 74 65 72 66 61 63 65  it64() interface
fd40: 20 77 69 74 68 20 74 68 65 20 61 72 67 75 6d 65   with the argume
fd50: 6e 74 20 4e 2c 20 69 66 20 4e 20 69 73 0a 20 20  nt N, if N is.  
fd60: 2a 2a 20 73 70 65 63 69 66 69 65 64 20 61 6e 64  ** specified and
fd70: 20 69 73 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69   is a non-negati
fd80: 76 65 20 69 6e 74 65 67 65 72 2e 0a 20 20 2a 2a  ve integer..  **
fd90: 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
fda0: 4f 46 3a 20 52 2d 36 34 34 35 31 2d 30 37 31 36  OF: R-64451-0716
fdb0: 33 20 54 68 65 20 73 6f 66 74 5f 68 65 61 70 5f  3 The soft_heap_
fdc0: 6c 69 6d 69 74 20 70 72 61 67 6d 61 20 61 6c 77  limit pragma alw
fdd0: 61 79 73 0a 20 20 2a 2a 20 72 65 74 75 72 6e 73  ays.  ** returns
fde0: 20 74 68 65 20 73 61 6d 65 20 69 6e 74 65 67 65   the same intege
fdf0: 72 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20  r that would be 
fe00: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 0a  returned by the.
fe10: 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6f 66    ** sqlite3_sof
fe20: 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d  t_heap_limit64(-
fe30: 31 29 20 43 2d 6c 61 6e 67 75 61 67 65 20 66 75  1) C-language fu
fe40: 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63  nction..  */.  c
fe50: 61 73 65 20 50 72 61 67 54 79 70 5f 53 4f 46 54  ase PragTyp_SOFT
fe60: 5f 48 45 41 50 5f 4c 49 4d 49 54 3a 20 7b 0a 20  _HEAP_LIMIT: {. 
fe70: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34     sqlite3_int64
fe80: 20 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67   N;.    if( zRig
fe90: 68 74 20 26 26 20 73 71 6c 69 74 65 33 44 65 63  ht && sqlite3Dec
fea0: 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68  OrHexToI64(zRigh
feb0: 74 2c 20 26 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f  t, &N)==SQLITE_O
fec0: 4b 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  K ){.      sqlit
fed0: 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  e3_soft_heap_lim
fee0: 69 74 36 34 28 4e 29 3b 0a 20 20 20 20 7d 0a 20  it64(N);.    }. 
fef0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
ff00: 6e 74 28 76 2c 20 22 73 6f 66 74 5f 68 65 61 70  nt(v, "soft_heap
ff10: 5f 6c 69 6d 69 74 22 2c 20 20 73 71 6c 69 74 65  _limit",  sqlite
ff20: 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  3_soft_heap_limi
ff30: 74 36 34 28 2d 31 29 29 3b 0a 20 20 20 20 62 72  t64(-1));.    br
ff40: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
ff50: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 68 72   **   PRAGMA thr
ff60: 65 61 64 73 0a 20 20 2a 2a 20 20 20 50 52 41 47  eads.  **   PRAG
ff70: 4d 41 20 74 68 72 65 61 64 73 20 3d 20 4e 0a 20  MA threads = N. 
ff80: 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75   **.  ** Configu
ff90: 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  re the maximum n
ffa0: 75 6d 62 65 72 20 6f 66 20 77 6f 72 6b 65 72 20  umber of worker 
ffb0: 74 68 72 65 61 64 73 2e 20 20 52 65 74 75 72 6e  threads.  Return
ffc0: 20 74 68 65 20 6e 65 77 0a 20 20 2a 2a 20 6d 61   the new.  ** ma
ffd0: 78 69 6d 75 6d 2c 20 77 68 69 63 68 20 6d 69 67  ximum, which mig
ffe0: 68 74 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20  ht be less than 
fff0: 72 65 71 75 65 73 74 65 64 2e 0a 20 20 2a 2f 0a  requested..  */.
10000 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 54    case PragTyp_T
10010 48 52 45 41 44 53 3a 20 7b 0a 20 20 20 20 73 71  HREADS: {.    sq
10020 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20  lite3_int64 N;. 
10030 20 20 20 69 66 28 20 7a 52 69 67 68 74 0a 20 20     if( zRight.  
10040 20 20 20 26 26 20 73 71 6c 69 74 65 33 44 65 63     && sqlite3Dec
10050 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68  OrHexToI64(zRigh
10060 74 2c 20 26 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f  t, &N)==SQLITE_O
10070 4b 0a 20 20 20 20 20 26 26 20 4e 3e 3d 30 0a 20  K.     && N>=0. 
10080 20 20 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69     ){.      sqli
10090 74 65 33 5f 6c 69 6d 69 74 28 64 62 2c 20 53 51  te3_limit(db, SQ
100a0 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45  LITE_LIMIT_WORKE
100b0 52 5f 54 48 52 45 41 44 53 2c 20 28 69 6e 74 29  R_THREADS, (int)
100c0 28 4e 26 30 78 37 66 66 66 66 66 66 66 29 29 3b  (N&0x7fffffff));
100d0 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
100e0 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 74  nSingleInt(v, "t
100f0 68 72 65 61 64 73 22 2c 0a 20 20 20 20 20 20 20  hreads",.       
10100 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
10110 69 74 65 33 5f 6c 69 6d 69 74 28 64 62 2c 20 53  ite3_limit(db, S
10120 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b  QLITE_LIMIT_WORK
10130 45 52 5f 54 48 52 45 41 44 53 2c 20 2d 31 29 29  ER_THREADS, -1))
10140 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
10150 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
10160 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
10170 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
10180 53 54 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 52 65  ST).  /*.  ** Re
10190 70 6f 72 74 20 74 68 65 20 63 75 72 72 65 6e 74  port the current
101a0 20 73 74 61 74 65 20 6f 66 20 66 69 6c 65 20 6c   state of file l
101b0 6f 67 73 20 66 6f 72 20 61 6c 6c 20 64 61 74 61  ogs for all data
101c0 62 61 73 65 73 0a 20 20 2a 2f 0a 20 20 63 61 73  bases.  */.  cas
101d0 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53  e PragTyp_LOCK_S
101e0 54 41 54 55 53 3a 20 7b 0a 20 20 20 20 73 74 61  TATUS: {.    sta
101f0 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
10200 63 6f 6e 73 74 20 61 7a 4c 6f 63 6b 4e 61 6d 65  const azLockName
10210 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 22 75 6e  [] = {.      "un
10220 6c 6f 63 6b 65 64 22 2c 20 22 73 68 61 72 65 64  locked", "shared
10230 22 2c 20 22 72 65 73 65 72 76 65 64 22 2c 20 22  ", "reserved", "
10240 70 65 6e 64 69 6e 67 22 2c 20 22 65 78 63 6c 75  pending", "exclu
10250 73 69 76 65 22 0a 20 20 20 20 7d 3b 0a 20 20 20  sive".    };.   
10260 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
10270 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20  ar *azCol[] = { 
10280 22 64 61 74 61 62 61 73 65 22 2c 20 22 73 74 61  "database", "sta
10290 74 75 73 22 20 7d 3b 0a 20 20 20 20 69 6e 74 20  tus" };.    int 
102a0 69 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c  i;.    setAllCol
102b0 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 32 2c 20 61  umnNames(v, 2, a
102c0 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 32  zCol); assert( 2
102d0 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f  ==ArraySize(azCo
102e0 6c 29 20 29 3b 0a 20 20 20 20 70 50 61 72 73 65  l) );.    pParse
102f0 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20  ->nMem = 2;.    
10300 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e  for(i=0; i<db->n
10310 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Db; i++){.      
10320 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 20 20  Btree *pBt;.    
10330 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53    const char *zS
10340 74 61 74 65 20 3d 20 22 75 6e 6b 6e 6f 77 6e 22  tate = "unknown"
10350 3b 0a 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20  ;.      int j;. 
10360 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62       if( db->aDb
10370 5b 69 5d 2e 7a 4e 61 6d 65 3d 3d 30 20 29 20 63  [i].zName==0 ) c
10380 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 70  ontinue;.      p
10390 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  Bt = db->aDb[i].
103a0 70 42 74 3b 0a 20 20 20 20 20 20 69 66 28 20 70  pBt;.      if( p
103b0 42 74 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33  Bt==0 || sqlite3
103c0 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3d  BtreePager(pBt)=
103d0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 53  =0 ){.        zS
103e0 74 61 74 65 20 3d 20 22 63 6c 6f 73 65 64 22 3b  tate = "closed";
103f0 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
10400 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f   sqlite3_file_co
10410 6e 74 72 6f 6c 28 64 62 2c 20 69 20 3f 20 64 62  ntrol(db, i ? db
10420 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 20 3a  ->aDb[i].zName :
10430 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20   0, .           
10440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10450 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
10460 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54 41 54 45  _FCNTL_LOCKSTATE
10470 2c 20 26 6a 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  , &j)==SQLITE_OK
10480 20 29 7b 0a 20 20 20 20 20 20 20 20 20 7a 53 74   ){.         zSt
10490 61 74 65 20 3d 20 61 7a 4c 6f 63 6b 4e 61 6d 65  ate = azLockName
104a0 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  [j];.      }.   
104b0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75     sqlite3VdbeMu
104c0 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 73  ltiLoad(v, 1, "s
104d0 73 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  s", db->aDb[i].z
104e0 4e 61 6d 65 2c 20 7a 53 74 61 74 65 29 3b 0a 20  Name, zState);. 
104f0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10500 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
10510 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20  ultRow, 1, 2);. 
10520 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
10530 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64    }.#endif..#ifd
10540 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ef SQLITE_HAS_CO
10550 44 45 43 0a 20 20 63 61 73 65 20 50 72 61 67 54  DEC.  case PragT
10560 79 70 5f 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66  yp_KEY: {.    if
10570 28 20 7a 52 69 67 68 74 20 29 20 73 71 6c 69 74  ( zRight ) sqlit
10580 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44  e3_key_v2(db, zD
10590 62 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74  b, zRight, sqlit
105a0 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68  e3Strlen30(zRigh
105b0 74 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  t));.    break;.
105c0 20 20 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54    }.  case PragT
105d0 79 70 5f 52 45 4b 45 59 3a 20 7b 0a 20 20 20 20  yp_REKEY: {.    
105e0 69 66 28 20 7a 52 69 67 68 74 20 29 20 73 71 6c  if( zRight ) sql
105f0 69 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62  ite3_rekey_v2(db
10600 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20 73  , zDb, zRight, s
10610 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
10620 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62 72 65  Right));.    bre
10630 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20 50  ak;.  }.  case P
10640 72 61 67 54 79 70 5f 48 45 58 4b 45 59 3a 20 7b  ragTyp_HEXKEY: {
10650 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
10660 29 7b 0a 20 20 20 20 20 20 75 38 20 69 42 79 74  ){.      u8 iByt
10670 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a  e;.      int i;.
10680 20 20 20 20 20 20 63 68 61 72 20 7a 4b 65 79 5b        char zKey[
10690 34 30 5d 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  40];.      for(i
106a0 3d 30 2c 20 69 42 79 74 65 3d 30 3b 20 69 3c 73  =0, iByte=0; i<s
106b0 69 7a 65 6f 66 28 7a 4b 65 79 29 2a 32 20 26 26  izeof(zKey)*2 &&
106c0 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
106d0 28 7a 52 69 67 68 74 5b 69 5d 29 3b 20 69 2b 2b  (zRight[i]); i++
106e0 29 7b 0a 20 20 20 20 20 20 20 20 69 42 79 74 65  ){.        iByte
106f0 20 3d 20 28 69 42 79 74 65 3c 3c 34 29 20 2b 20   = (iByte<<4) + 
10700 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28  sqlite3HexToInt(
10710 7a 52 69 67 68 74 5b 69 5d 29 3b 0a 20 20 20 20  zRight[i]);.    
10720 20 20 20 20 69 66 28 20 28 69 26 31 29 21 3d 30      if( (i&1)!=0
10730 20 29 20 7a 4b 65 79 5b 69 2f 32 5d 20 3d 20 69   ) zKey[i/2] = i
10740 42 79 74 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Byte;.      }.  
10750 20 20 20 20 69 66 28 20 28 7a 4c 65 66 74 5b 33      if( (zLeft[3
10760 5d 20 26 20 30 78 66 29 3d 3d 30 78 62 20 29 7b  ] & 0xf)==0xb ){
10770 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
10780 5f 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c  _key_v2(db, zDb,
10790 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20   zKey, i/2);.   
107a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
107b0 20 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 5f    sqlite3_rekey_
107c0 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79  v2(db, zDb, zKey
107d0 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 0a  , i/2);.      }.
107e0 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
107f0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20  .  }.#endif.#if 
10800 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
10810 41 53 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65 66  AS_CODEC) || def
10820 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
10830 4c 45 5f 43 45 52 4f 44 29 0a 20 20 63 61 73 65  LE_CEROD).  case
10840 20 50 72 61 67 54 79 70 5f 41 43 54 49 56 41 54   PragTyp_ACTIVAT
10850 45 5f 45 58 54 45 4e 53 49 4f 4e 53 3a 20 69 66  E_EXTENSIONS: if
10860 28 20 7a 52 69 67 68 74 20 29 7b 0a 23 69 66 64  ( zRight ){.#ifd
10870 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ef SQLITE_HAS_CO
10880 44 45 43 0a 20 20 20 20 69 66 28 20 73 71 6c 69  DEC.    if( sqli
10890 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67  te3StrNICmp(zRig
108a0 68 74 2c 20 22 73 65 65 2d 22 2c 20 34 29 3d 3d  ht, "see-", 4)==
108b0 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
108c0 65 33 5f 61 63 74 69 76 61 74 65 5f 73 65 65 28  e3_activate_see(
108d0 26 7a 52 69 67 68 74 5b 34 5d 29 3b 0a 20 20 20  &zRight[4]);.   
108e0 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66   }.#endif.#ifdef
108f0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
10900 45 52 4f 44 0a 20 20 20 20 69 66 28 20 73 71 6c  EROD.    if( sql
10910 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69  ite3StrNICmp(zRi
10920 67 68 74 2c 20 22 63 65 72 6f 64 2d 22 2c 20 36  ght, "cerod-", 6
10930 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  )==0 ){.      sq
10940 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65 5f 63  lite3_activate_c
10950 65 72 6f 64 28 26 7a 52 69 67 68 74 5b 36 5d 29  erod(&zRight[6])
10960 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
10970 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
10980 69 66 0a 0a 20 20 7d 20 2f 2a 20 45 6e 64 20 6f  if..  } /* End o
10990 66 20 74 68 65 20 50 52 41 47 4d 41 20 73 77 69  f the PRAGMA swi
109a0 74 63 68 20 2a 2f 0a 0a 70 72 61 67 6d 61 5f 6f  tch */..pragma_o
109b0 75 74 3a 0a 20 20 73 71 6c 69 74 65 33 44 62 46  ut:.  sqlite3DbF
109c0 72 65 65 28 64 62 2c 20 7a 4c 65 66 74 29 3b 0a  ree(db, zLeft);.
109d0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
109e0 64 62 2c 20 7a 52 69 67 68 74 29 3b 0a 7d 0a 0a  db, zRight);.}..
109f0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
10a00 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a  _OMIT_PRAGMA */.