/ Hex Artifact Content
Login

Artifact 3c4f3fadf05893e289f2adf3a20c671a842cadec:


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 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61      db->mallocFa
3f20: 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  iled = 1;.      
3f30: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  }.    }.    brea
3f40: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
3f50: 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d  *  PRAGMA [schem
3f60: 61 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65  a.]secure_delete
3f70: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
3f80: 63 68 65 6d 61 2e 5d 73 65 63 75 72 65 5f 64 65  chema.]secure_de
3f90: 6c 65 74 65 3d 4f 4e 2f 4f 46 46 0a 20 20 2a 2a  lete=ON/OFF.  **
3fa0: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
3fb0: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
3fc0: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
3fd0: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73 65   for the.  ** se
3fe0: 63 75 72 65 5f 64 65 6c 65 74 65 20 66 6c 61 67  cure_delete flag
3ff0: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
4000: 72 6d 20 63 68 61 6e 67 65 73 20 74 68 65 20 73  rm changes the s
4010: 65 63 75 72 65 5f 64 65 6c 65 74 65 0a 20 20 2a  ecure_delete.  *
4020: 2a 20 66 6c 61 67 20 73 65 74 74 69 6e 67 20 61  * flag setting a
4030: 6e 64 20 72 65 70 6f 72 74 73 20 74 68 65 6e 65  nd reports thene
4040: 77 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20  w value..  */.  
4050: 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 45 43  case PragTyp_SEC
4060: 55 52 45 5f 44 45 4c 45 54 45 3a 20 7b 0a 20 20  URE_DELETE: {.  
4070: 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70    Btree *pBt = p
4080: 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 69 6e 74  Db->pBt;.    int
4090: 20 62 20 3d 20 2d 31 3b 0a 20 20 20 20 61 73 73   b = -1;.    ass
40a0: 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20  ert( pBt!=0 );. 
40b0: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
40c0: 0a 20 20 20 20 20 20 62 20 3d 20 73 71 6c 69 74  .      b = sqlit
40d0: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69  e3GetBoolean(zRi
40e0: 67 68 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  ght, 0);.    }. 
40f0: 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d     if( pId2->n==
4100: 30 20 26 26 20 62 3e 3d 30 20 29 7b 0a 20 20 20  0 && b>=0 ){.   
4110: 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20     int ii;.     
4120: 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
4130: 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
4140: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
4150: 65 65 53 65 63 75 72 65 44 65 6c 65 74 65 28 64  eeSecureDelete(d
4160: 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20  b->aDb[ii].pBt, 
4170: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
4180: 7d 0a 20 20 20 20 62 20 3d 20 73 71 6c 69 74 65  }.    b = sqlite
4190: 33 42 74 72 65 65 53 65 63 75 72 65 44 65 6c 65  3BtreeSecureDele
41a0: 74 65 28 70 42 74 2c 20 62 29 3b 0a 20 20 20 20  te(pBt, b);.    
41b0: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
41c0: 76 2c 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74  v, "secure_delet
41d0: 65 22 2c 20 62 29 3b 0a 20 20 20 20 62 72 65 61  e", b);.    brea
41e0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
41f0: 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d  *  PRAGMA [schem
4200: 61 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e  a.]max_page_coun
4210: 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  t.  **  PRAGMA [
4220: 73 63 68 65 6d 61 2e 5d 6d 61 78 5f 70 61 67 65  schema.]max_page
4230: 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a 0a 20 20  _count=N.  **.  
4240: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
4250: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
4260: 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f  rrent setting fo
4270: 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61 78 69 6d  r the.  ** maxim
4280: 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  um number of pag
4290: 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
42a0: 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 0a 20  se file.  The . 
42b0: 20 2a 2a 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20   ** second form 
42c0: 61 74 74 65 6d 70 74 73 20 74 6f 20 63 68 61 6e  attempts to chan
42d0: 67 65 20 74 68 69 73 20 73 65 74 74 69 6e 67 2e  ge this setting.
42e0: 20 20 42 6f 74 68 0a 20 20 2a 2a 20 66 6f 72 6d    Both.  ** form
42f0: 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 75 72  s return the cur
4300: 72 65 6e 74 20 73 65 74 74 69 6e 67 2e 0a 20 20  rent setting..  
4310: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 61 62 73 6f  **.  ** The abso
4320: 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 4e 20  lute value of N 
4330: 69 73 20 75 73 65 64 2e 20 20 54 68 69 73 20 69  is used.  This i
4340: 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 61  s undocumented a
4350: 6e 64 20 6d 69 67 68 74 0a 20 20 2a 2a 20 63 68  nd might.  ** ch
4360: 61 6e 67 65 2e 20 20 54 68 65 20 6f 6e 6c 79 20  ange.  The only 
4370: 70 75 72 70 6f 73 65 20 69 73 20 74 6f 20 70 72  purpose is to pr
4380: 6f 76 69 64 65 20 61 6e 20 65 61 73 79 20 77 61  ovide an easy wa
4390: 79 20 74 6f 20 74 65 73 74 0a 20 20 2a 2a 20 74  y to test.  ** t
43a0: 68 65 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74  he sqlite3AbsInt
43b0: 33 32 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 20  32() function.. 
43c0: 20 2a 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   **.  **  PRAGMA
43d0: 20 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f 63   [schema.]page_c
43e0: 6f 75 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  ount.  **.  ** R
43f0: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
4400: 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
4410: 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62   specified datab
4420: 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ase..  */.  case
4430: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f   PragTyp_PAGE_CO
4440: 55 4e 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69  UNT: {.    int i
4450: 52 65 67 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Reg;.    sqlite3
4460: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
4470: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
4480: 20 20 20 69 52 65 67 20 3d 20 2b 2b 70 50 61 72     iReg = ++pPar
4490: 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 69 66  se->nMem;.    if
44a0: 28 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  ( sqlite3Tolower
44b0: 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 70 27 20  (zLeft[0])=='p' 
44c0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
44d0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
44e0: 5f 50 61 67 65 63 6f 75 6e 74 2c 20 69 44 62 2c  _Pagecount, iDb,
44f0: 20 69 52 65 67 29 3b 0a 20 20 20 20 7d 65 6c 73   iReg);.    }els
4500: 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e{.      sqlite3
4510: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
4520: 5f 4d 61 78 50 67 63 6e 74 2c 20 69 44 62 2c 20  _MaxPgcnt, iDb, 
4530: 69 52 65 67 2c 20 0a 20 20 20 20 20 20 20 20 20  iReg, .         
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
4550: 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 73  qlite3AbsInt32(s
4560: 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68  qlite3Atoi(zRigh
4570: 74 29 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  t)));.    }.    
4580: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
4590: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
45a0: 77 2c 20 69 52 65 67 2c 20 31 29 3b 0a 20 20 20  w, iReg, 1);.   
45b0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
45c0: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
45d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
45e0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
45f0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66  LNAME_NAME, zLef
4600: 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  t, SQLITE_TRANSI
4610: 45 4e 54 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  ENT);.    break;
4620: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
4630: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
4640: 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20  ]locking_mode.  
4650: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
4660: 6d 61 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  ma.]locking_mode
4670: 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c 75   = (normal|exclu
4680: 73 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63 61 73  sive).  */.  cas
4690: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e  e PragTyp_LOCKIN
46a0: 47 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 63 6f  G_MODE: {.    co
46b0: 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74 20 3d  nst char *zRet =
46c0: 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20 20 69   "normal";.    i
46d0: 6e 74 20 65 4d 6f 64 65 20 3d 20 67 65 74 4c 6f  nt eMode = getLo
46e0: 63 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67 68 74  ckingMode(zRight
46f0: 29 3b 0a 0a 20 20 20 20 69 66 28 20 70 49 64 32  );..    if( pId2
4700: 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64 65 3d  ->n==0 && eMode=
4710: 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f  =PAGER_LOCKINGMO
4720: 44 45 5f 51 55 45 52 59 20 29 7b 0a 20 20 20 20  DE_QUERY ){.    
4730: 20 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50 52 41    /* Simple "PRA
4740: 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  GMA locking_mode
4750: 3b 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  ;" statement. Th
4760: 69 73 20 69 73 20 61 20 71 75 65 72 79 20 66 6f  is is a query fo
4770: 72 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63  r.      ** the c
4780: 75 72 72 65 6e 74 20 64 65 66 61 75 6c 74 20 6c  urrent default l
4790: 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77 68 69  ocking mode (whi
47a0: 63 68 20 6d 61 79 20 62 65 20 64 69 66 66 65 72  ch may be differ
47b0: 65 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20  ent to.      ** 
47c0: 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  the locking-mode
47d0: 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74   of the main dat
47e0: 61 62 61 73 65 29 2e 0a 20 20 20 20 20 20 2a 2f  abase)..      */
47f0: 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 64  .      eMode = d
4800: 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b  b->dfltLockMode;
4810: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
4820: 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b    Pager *pPager;
4830: 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 32 2d  .      if( pId2-
4840: 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  >n==0 ){.       
4850: 20 2f 2a 20 54 68 69 73 20 69 6e 64 69 63 61 74   /* This indicat
4860: 65 73 20 74 68 61 74 20 6e 6f 20 64 61 74 61 62  es that no datab
4870: 61 73 65 20 6e 61 6d 65 20 77 61 73 20 73 70 65  ase name was spe
4880: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 0a 20  cified as part. 
4890: 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65         ** of the
48a0: 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 2e   PRAGMA command.
48b0: 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
48c0: 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6d  e locking-mode m
48d0: 75 73 74 20 62 65 0a 20 20 20 20 20 20 20 20 2a  ust be.        *
48e0: 2a 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61 74 74  * set on all att
48f0: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2c  ached databases,
4900: 20 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65 20   as well as the 
4910: 6d 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a 20 20  main db file..  
4920: 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 20        **.       
4930: 20 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20 73 71   ** Also, the sq
4940: 6c 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d 6f  lite3.dfltLockMo
4950: 64 65 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  de variable is s
4960: 65 74 20 73 6f 20 74 68 61 74 0a 20 20 20 20 20  et so that.     
4970: 20 20 20 2a 2a 20 61 6e 79 20 73 75 62 73 65 71     ** any subseq
4980: 75 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 20  uently attached 
4990: 64 61 74 61 62 61 73 65 73 20 61 6c 73 6f 20 75  databases also u
49a0: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64  se the specified
49b0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f 63 6b  .        ** lock
49c0: 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20 20 20  ing mode..      
49d0: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74    */.        int
49e0: 20 69 69 3b 0a 20 20 20 20 20 20 20 20 61 73 73   ii;.        ass
49f0: 65 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e 61 44  ert(pDb==&db->aD
4a00: 62 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 66  b[0]);.        f
4a10: 6f 72 28 69 69 3d 32 3b 20 69 69 3c 64 62 2d 3e  or(ii=2; ii<db->
4a20: 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
4a30: 20 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73        pPager = s
4a40: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
4a50: 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
4a60: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
4a70: 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67  ite3PagerLocking
4a80: 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f  Mode(pPager, eMo
4a90: 64 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  de);.        }. 
4aa0: 20 20 20 20 20 20 20 64 62 2d 3e 64 66 6c 74 4c         db->dfltL
4ab0: 6f 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29 65 4d  ockMode = (u8)eM
4ac0: 6f 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ode;.      }.   
4ad0: 20 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69     pPager = sqli
4ae0: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
4af0: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 65  b->pBt);.      e
4b00: 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 50 61  Mode = sqlite3Pa
4b10: 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70  gerLockingMode(p
4b20: 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20  Pager, eMode);. 
4b30: 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74     }..    assert
4b40: 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c  ( eMode==PAGER_L
4b50: 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41  OCKINGMODE_NORMA
4b60: 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  L.            ||
4b70: 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f   eMode==PAGER_LO
4b80: 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53  CKINGMODE_EXCLUS
4b90: 49 56 45 20 29 3b 0a 20 20 20 20 69 66 28 20 65  IVE );.    if( e
4ba0: 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b  Mode==PAGER_LOCK
4bb0: 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56  INGMODE_EXCLUSIV
4bc0: 45 20 29 7b 0a 20 20 20 20 20 20 7a 52 65 74 20  E ){.      zRet 
4bd0: 3d 20 22 65 78 63 6c 75 73 69 76 65 22 3b 0a 20  = "exclusive";. 
4be0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53     }.    returnS
4bf0: 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 6c 6f  ingleText(v, "lo
4c00: 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 7a 52 65  cking_mode", zRe
4c10: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
4c20: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
4c30: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6a  RAGMA [schema.]j
4c40: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a 2a  ournal_mode.  **
4c50: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
4c60: 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d  .]journal_mode =
4c70: 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20  .  **           
4c80: 20 20 20 20 20 20 20 20 20 20 20 28 64 65 6c 65             (dele
4c90: 74 65 7c 70 65 72 73 69 73 74 7c 6f 66 66 7c 74  te|persist|off|t
4ca0: 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72 79 7c 77  runcate|memory|w
4cb0: 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20 20 63  al|off).  */.  c
4cc0: 61 73 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52  ase PragTyp_JOUR
4cd0: 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20  NAL_MODE: {.    
4ce0: 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20 20 20 20  int eMode;      
4cf0: 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
4d00: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
4d10: 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73 20 2a 2f  E_XXX symbols */
4d20: 0a 20 20 20 20 69 6e 74 20 69 69 3b 20 20 20 20  .    int ii;    
4d30: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
4d40: 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20 20 20 73  ounter */..    s
4d50: 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28  etOneColumnName(
4d60: 76 2c 20 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  v, "journal_mode
4d70: 22 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  ");.    if( zRig
4d80: 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f  ht==0 ){.      /
4d90: 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  * If there is no
4da0: 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 6f 66   "=MODE" part of
4db0: 20 74 68 65 20 70 72 61 67 6d 61 2c 20 64 6f 20   the pragma, do 
4dc0: 61 20 71 75 65 72 79 20 66 6f 72 20 74 68 65 0a  a query for the.
4dd0: 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74        ** current
4de0: 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20 65   mode */.      e
4df0: 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55  Mode = PAGER_JOU
4e00: 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a  RNALMODE_QUERY;.
4e10: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4e20: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 6f   const char *zMo
4e30: 64 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 20  de;.      int n 
4e40: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
4e50: 30 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  0(zRight);.     
4e60: 20 66 6f 72 28 65 4d 6f 64 65 3d 30 3b 20 28 7a   for(eMode=0; (z
4e70: 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 4a 6f  Mode = sqlite3Jo
4e80: 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4d  urnalModename(eM
4e90: 6f 64 65 29 29 21 3d 30 3b 20 65 4d 6f 64 65 2b  ode))!=0; eMode+
4ea0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  +){.        if( 
4eb0: 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28  sqlite3StrNICmp(
4ec0: 7a 52 69 67 68 74 2c 20 7a 4d 6f 64 65 2c 20 6e  zRight, zMode, n
4ed0: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
4ee0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
4ef0: 21 7a 4d 6f 64 65 20 29 7b 0a 20 20 20 20 20 20  !zMode ){.      
4f00: 20 20 2f 2a 20 49 66 20 74 68 65 20 22 3d 4d 4f    /* If the "=MO
4f10: 44 45 22 20 70 61 72 74 20 64 6f 65 73 20 6e 6f  DE" part does no
4f20: 74 20 6d 61 74 63 68 20 61 6e 79 20 6b 6e 6f 77  t match any know
4f30: 6e 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 0a  n journal mode,.
4f40: 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20          ** then 
4f50: 64 6f 20 61 20 71 75 65 72 79 20 2a 2f 0a 20 20  do a query */.  
4f60: 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50 41        eMode = PA
4f70: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
4f80: 51 55 45 52 59 3b 0a 20 20 20 20 20 20 7d 0a 20  QUERY;.      }. 
4f90: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65 4d 6f     }.    if( eMo
4fa0: 64 65 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  de==PAGER_JOURNA
4fb0: 4c 4d 4f 44 45 5f 51 55 45 52 59 20 26 26 20 70  LMODE_QUERY && p
4fc0: 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20  Id2->n==0 ){.   
4fd0: 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 22 50     /* Convert "P
4fe0: 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  RAGMA journal_mo
4ff0: 64 65 22 20 69 6e 74 6f 20 22 50 52 41 47 4d 41  de" into "PRAGMA
5000: 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f   main.journal_mo
5010: 64 65 22 20 2a 2f 0a 20 20 20 20 20 20 69 44 62  de" */.      iDb
5020: 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 49 64 32   = 0;.      pId2
5030: 2d 3e 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20  ->n = 1;.    }. 
5040: 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44     for(ii=db->nD
5050: 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d  b-1; ii>=0; ii--
5060: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  ){.      if( db-
5070: 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26 20  >aDb[ii].pBt && 
5080: 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32  (ii==iDb || pId2
5090: 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20  ->n==0) ){.     
50a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73     sqlite3VdbeUs
50b0: 65 73 42 74 72 65 65 28 76 2c 20 69 69 29 3b 0a  esBtree(v, ii);.
50c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
50d0: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
50e0: 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20 69 69 2c  JournalMode, ii,
50f0: 20 31 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20   1, eMode);.    
5100: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
5110: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
5120: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
5130: 20 31 2c 20 31 29 3b 0a 20 20 20 20 62 72 65 61   1, 1);.    brea
5140: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
5150: 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d  *  PRAGMA [schem
5160: 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f  a.]journal_size_
5170: 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 50 52 41 47  limit.  **  PRAG
5180: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6a 6f 75 72  MA [schema.]jour
5190: 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d 4e  nal_size_limit=N
51a0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f  .  **.  ** Get o
51b0: 72 20 73 65 74 20 74 68 65 20 73 69 7a 65 20 6c  r set the size l
51c0: 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63 6b  imit on rollback
51d0: 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e 0a   journal files..
51e0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
51f0: 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a 45  Typ_JOURNAL_SIZE
5200: 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50 61  _LIMIT: {.    Pa
5210: 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71  ger *pPager = sq
5220: 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
5230: 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 69  pDb->pBt);.    i
5240: 36 34 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b 0a  64 iLimit = -2;.
5250: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
5260: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  {.      sqlite3D
5270: 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69  ecOrHexToI64(zRi
5280: 67 68 74 2c 20 26 69 4c 69 6d 69 74 29 3b 0a 20  ght, &iLimit);. 
5290: 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c       if( iLimit<
52a0: 2d 31 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d 31  -1 ) iLimit = -1
52b0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4c 69 6d  ;.    }.    iLim
52c0: 69 74 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  it = sqlite3Page
52d0: 72 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d 69  rJournalSizeLimi
52e0: 74 28 70 50 61 67 65 72 2c 20 69 4c 69 6d 69 74  t(pPager, iLimit
52f0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e  );.    returnSin
5300: 67 6c 65 49 6e 74 28 76 2c 20 22 6a 6f 75 72 6e  gleInt(v, "journ
5310: 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c 20  al_size_limit", 
5320: 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 62 72 65  iLimit);.    bre
5330: 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66 20  ak;.  }..#endif 
5340: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  /* SQLITE_OMIT_P
5350: 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  AGER_PRAGMAS */.
5360: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
5370: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 75 74 6f  MA [schema.]auto
5380: 5f 76 61 63 75 75 6d 0a 20 20 2a 2a 20 20 50 52  _vacuum.  **  PR
5390: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 75  AGMA [schema.]au
53a0: 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a 2a  to_vacuum=N.  **
53b0: 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20 73 65 74  .  ** Get or set
53c0: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
53d0: 65 20 64 61 74 61 62 61 73 65 20 27 61 75 74 6f  e database 'auto
53e0: 2d 76 61 63 75 75 6d 27 20 70 61 72 61 6d 65 74  -vacuum' paramet
53f0: 65 72 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61 6c  er..  ** The val
5400: 75 65 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20 30  ue is one of:  0
5410: 20 4e 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20 49   NONE 1 FULL 2 I
5420: 4e 43 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f 0a  NCREMENTAL.  */.
5430: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
5440: 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20  MIT_AUTOVACUUM. 
5450: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 41 55   case PragTyp_AU
5460: 54 4f 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20  TO_VACUUM: {.   
5470: 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44   Btree *pBt = pD
5480: 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65  b->pBt;.    asse
5490: 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20  rt( pBt!=0 );.  
54a0: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
54b0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
54c0: 67 6c 65 49 6e 74 28 76 2c 20 22 61 75 74 6f 5f  gleInt(v, "auto_
54d0: 76 61 63 75 75 6d 22 2c 20 73 71 6c 69 74 65 33  vacuum", sqlite3
54e0: 42 74 72 65 65 47 65 74 41 75 74 6f 56 61 63 75  BtreeGetAutoVacu
54f0: 75 6d 28 70 42 74 29 29 3b 0a 20 20 20 20 7d 65  um(pBt));.    }e
5500: 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 65  lse{.      int e
5510: 41 75 74 6f 20 3d 20 67 65 74 41 75 74 6f 56 61  Auto = getAutoVa
5520: 63 75 75 6d 28 7a 52 69 67 68 74 29 3b 0a 20 20  cuum(zRight);.  
5530: 20 20 20 20 61 73 73 65 72 74 28 20 65 41 75 74      assert( eAut
5540: 6f 3e 3d 30 20 26 26 20 65 41 75 74 6f 3c 3d 32  o>=0 && eAuto<=2
5550: 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65   );.      db->ne
5560: 78 74 41 75 74 6f 76 61 63 20 3d 20 28 75 38 29  xtAutovac = (u8)
5570: 65 41 75 74 6f 3b 0a 20 20 20 20 20 20 2f 2a 20  eAuto;.      /* 
5580: 43 61 6c 6c 20 53 65 74 41 75 74 6f 56 61 63 75  Call SetAutoVacu
5590: 75 6d 28 29 20 74 6f 20 73 65 74 20 69 6e 69 74  um() to set init
55a0: 69 61 6c 69 7a 65 20 74 68 65 20 69 6e 74 65 72  ialize the inter
55b0: 6e 61 6c 20 61 75 74 6f 20 61 6e 64 0a 20 20 20  nal auto and.   
55c0: 20 20 20 2a 2a 20 69 6e 63 72 2d 76 61 63 75 75     ** incr-vacuu
55d0: 6d 20 66 6c 61 67 73 2e 20 54 68 69 73 20 69 73  m flags. This is
55e0: 20 72 65 71 75 69 72 65 64 20 69 6e 20 63 61 73   required in cas
55f0: 65 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f  e this connectio
5600: 6e 0a 20 20 20 20 20 20 2a 2a 20 63 72 65 61 74  n.      ** creat
5610: 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  es the database 
5620: 66 69 6c 65 2e 20 49 74 20 69 73 20 69 6d 70 6f  file. It is impo
5630: 72 74 61 6e 74 20 74 68 61 74 20 69 74 20 69 73  rtant that it is
5640: 20 63 72 65 61 74 65 64 0a 20 20 20 20 20 20 2a   created.      *
5650: 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63  * as an auto-vac
5660: 75 75 6d 20 63 61 70 61 62 6c 65 20 64 62 2e 0a  uum capable db..
5670: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72        */.      r
5680: 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
5690: 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42  SetAutoVacuum(pB
56a0: 74 2c 20 65 41 75 74 6f 29 3b 0a 20 20 20 20 20  t, eAuto);.     
56b0: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
56c0: 4f 4b 20 26 26 20 28 65 41 75 74 6f 3d 3d 31 20  OK && (eAuto==1 
56d0: 7c 7c 20 65 41 75 74 6f 3d 3d 32 29 20 29 7b 0a  || eAuto==2) ){.
56e0: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20          /* When 
56f0: 73 65 74 74 69 6e 67 20 74 68 65 20 61 75 74 6f  setting the auto
5700: 5f 76 61 63 75 75 6d 20 6d 6f 64 65 20 74 6f 20  _vacuum mode to 
5710: 65 69 74 68 65 72 20 22 66 75 6c 6c 22 20 6f 72  either "full" or
5720: 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 69 6e   .        ** "in
5730: 63 72 65 6d 65 6e 74 61 6c 22 2c 20 77 72 69 74  cremental", writ
5740: 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 6d  e the value of m
5750: 65 74 61 5b 36 5d 20 69 6e 20 74 68 65 20 64 61  eta[6] in the da
5760: 74 61 62 61 73 65 0a 20 20 20 20 20 20 20 20 2a  tabase.        *
5770: 2a 20 66 69 6c 65 2e 20 42 65 66 6f 72 65 20 77  * file. Before w
5780: 72 69 74 69 6e 67 20 74 6f 20 6d 65 74 61 5b 36  riting to meta[6
5790: 5d 2c 20 63 68 65 63 6b 20 74 68 61 74 20 6d 65  ], check that me
57a0: 74 61 5b 33 5d 20 69 6e 64 69 63 61 74 65 73 0a  ta[3] indicates.
57b0: 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20          ** that 
57c0: 74 68 69 73 20 72 65 61 6c 6c 79 20 69 73 20 61  this really is a
57d0: 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 63 61  n auto-vacuum ca
57e0: 70 61 62 6c 65 20 64 61 74 61 62 61 73 65 2e 0a  pable database..
57f0: 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
5800: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
5810: 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f  int iLn = VDBE_O
5820: 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b  FFSET_LINENO(2);
5830: 0a 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20  .        static 
5840: 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74  const VdbeOpList
5850: 20 73 65 74 4d 65 74 61 36 5b 5d 20 3d 20 7b 0a   setMeta6[] = {.
5860: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54            { OP_T
5870: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30  ransaction,    0
5880: 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20  ,         1,    
5890: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c               0},
58a0: 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20      /* 0 */.    
58b0: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43        { OP_ReadC
58c0: 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c 20 20 20  ookie,     0,   
58d0: 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20        1,        
58e0: 20 42 54 52 45 45 5f 4c 41 52 47 45 53 54 5f 52   BTREE_LARGEST_R
58f0: 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20 20 20 20  OOT_PAGE},.     
5900: 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20       { OP_If,   
5910: 20 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20            1,    
5920: 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20       0,         
5930: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
5940: 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 2 */.         
5950: 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20 20   { OP_Halt,     
5960: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 2c        SQLITE_OK,
5970: 20 4f 45 5f 41 62 6f 72 74 2c 20 20 20 20 20 20   OE_Abort,      
5980: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20      0},    /* 3 
5990: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f  */.          { O
59a0: 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20  P_SetCookie,    
59b0: 20 20 30 2c 20 20 20 20 20 20 20 20 20 42 54 52    0,         BTR
59c0: 45 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c 20  EE_INCR_VACUUM, 
59d0: 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20  0},    /* 4 */. 
59e0: 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20         };.      
59f0: 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20    VdbeOp *aOp;. 
5a00: 20 20 20 20 20 20 20 69 6e 74 20 69 41 64 64 72         int iAddr
5a10: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
5a20: 72 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20  rrentAddr(v);.  
5a30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
5a40: 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52  eVerifyNoMallocR
5a50: 65 71 75 69 72 65 64 28 76 2c 20 41 72 72 61 79  equired(v, Array
5a60: 53 69 7a 65 28 73 65 74 4d 65 74 61 36 29 29 3b  Size(setMeta6));
5a70: 0a 20 20 20 20 20 20 20 20 61 4f 70 20 3d 20 73  .        aOp = s
5a80: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
5a90: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
5aa0: 28 73 65 74 4d 65 74 61 36 29 2c 20 73 65 74 4d  (setMeta6), setM
5ab0: 65 74 61 36 2c 20 69 4c 6e 29 3b 0a 20 20 20 20  eta6, iLn);.    
5ac0: 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f      if( ONLY_IF_
5ad0: 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61  REALLOC_STRESS(a
5ae0: 4f 70 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a  Op==0) ) break;.
5af0: 20 20 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70          aOp[0].p
5b00: 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 20  1 = iDb;.       
5b10: 20 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44 62   aOp[1].p1 = iDb
5b20: 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 32 5d  ;.        aOp[2]
5b30: 2e 70 32 20 3d 20 69 41 64 64 72 2b 34 3b 0a 20  .p2 = iAddr+4;. 
5b40: 20 20 20 20 20 20 20 61 4f 70 5b 34 5d 2e 70 31         aOp[4].p1
5b50: 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 20 20   = iDb;.        
5b60: 61 4f 70 5b 34 5d 2e 70 33 20 3d 20 65 41 75 74  aOp[4].p3 = eAut
5b70: 6f 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 73  o - 1;.        s
5b80: 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
5b90: 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20  ree(v, iDb);.   
5ba0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
5bb0: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
5bc0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
5bd0: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69 6e 63  GMA [schema.]inc
5be0: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 28  remental_vacuum(
5bf0: 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20  N).  **.  ** Do 
5c00: 4e 20 73 74 65 70 73 20 6f 66 20 69 6e 63 72 65  N steps of incre
5c10: 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e 67  mental vacuuming
5c20: 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2e 0a   on a database..
5c30: 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c    */.#ifndef SQL
5c40: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
5c50: 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54  UUM.  case PragT
5c60: 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56  yp_INCREMENTAL_V
5c70: 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e 74  ACUUM: {.    int
5c80: 20 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a 20   iLimit, addr;. 
5c90: 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30     if( zRight==0
5ca0: 20 7c 7c 20 21 73 71 6c 69 74 65 33 47 65 74 49   || !sqlite3GetI
5cb0: 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 69 4c  nt32(zRight, &iL
5cc0: 69 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74 3c  imit) || iLimit<
5cd0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 4c 69 6d  =0 ){.      iLim
5ce0: 69 74 20 3d 20 30 78 37 66 66 66 66 66 66 66 3b  it = 0x7fffffff;
5cf0: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
5d00: 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
5d10: 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c  ation(pParse, 0,
5d20: 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74   iDb);.    sqlit
5d30: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
5d40: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69 6d  OP_Integer, iLim
5d50: 69 74 2c 20 31 29 3b 0a 20 20 20 20 61 64 64 72  it, 1);.    addr
5d60: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
5d70: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72 56  dOp1(v, OP_IncrV
5d80: 61 63 75 75 6d 2c 20 69 44 62 29 3b 20 56 64 62  acuum, iDb); Vdb
5d90: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
5da0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
5db0: 4f 70 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op1(v, OP_Result
5dc0: 52 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  Row, 1);.    sql
5dd0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
5de0: 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20  , OP_AddImm, 1, 
5df0: 2d 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  -1);.    sqlite3
5e00: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
5e10: 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 29  _IfPos, 1, addr)
5e20: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
5e30: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
5e40: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
5e50: 64 72 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  dr);.    break;.
5e60: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e    }.#endif..#ifn
5e70: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
5e80: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20  PAGER_PRAGMAS.  
5e90: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
5ea0: 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73  [schema.]cache_s
5eb0: 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ize.  **  PRAGMA
5ec0: 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f   [schema.]cache_
5ed0: 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  size=N.  **.  **
5ee0: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
5ef0: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
5f00: 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e  ent local settin
5f10: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70  g for the.  ** p
5f20: 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20  age cache size. 
5f30: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
5f40: 73 65 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20  sets the local. 
5f50: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
5f60: 69 7a 65 20 76 61 6c 75 65 2e 20 20 49 66 20 4e  ize value.  If N
5f70: 20 69 73 20 70 6f 73 69 74 69 76 65 20 74 68 65   is positive the
5f80: 6e 20 74 68 61 74 20 69 73 20 74 68 65 0a 20 20  n that is the.  
5f90: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  ** number of pag
5fa0: 65 73 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e  es in the cache.
5fb0: 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69    If N is negati
5fc0: 76 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a  ve, then the.  *
5fd0: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * number of page
5fe0: 73 20 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f  s is adjusted so
5ff0: 20 74 68 61 74 20 74 68 65 20 63 61 63 68 65 20   that the cache 
6000: 75 73 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65  uses -N kibibyte
6010: 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79  s.  ** of memory
6020: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
6030: 61 67 54 79 70 5f 43 41 43 48 45 5f 53 49 5a 45  agTyp_CACHE_SIZE
6040: 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  : {.    assert( 
6050: 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
6060: 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20  exHeld(db, iDb, 
6070: 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a  0) );.    if( !z
6080: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72  Right ){.      r
6090: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76  eturnSingleInt(v
60a0: 2c 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20  , "cache_size", 
60b0: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61  pDb->pSchema->ca
60c0: 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d  che_size);.    }
60d0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20  else{.      int 
60e0: 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74  size = sqlite3At
60f0: 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  oi(zRight);.    
6100: 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
6110: 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a  cache_size = siz
6120: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
6130: 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a  BtreeSetCacheSiz
6140: 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d  e(pDb->pBt, pDb-
6150: 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f  >pSchema->cache_
6160: 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20  size);.    }.   
6170: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
6180: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
6190: 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73 70  schema.]cache_sp
61a0: 69 6c 6c 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ill.  **  PRAGMA
61b0: 20 63 61 63 68 65 5f 73 70 69 6c 6c 3d 42 4f 4f   cache_spill=BOO
61c0: 4c 45 41 4e 0a 20 20 2a 2a 20 20 50 52 41 47 4d  LEAN.  **  PRAGM
61d0: 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65  A [schema.]cache
61e0: 5f 73 70 69 6c 6c 3d 4e 0a 20 20 2a 2a 0a 20 20  _spill=N.  **.  
61f0: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
6200: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
6210: 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74  rrent local sett
6220: 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ing for the.  **
6230: 20 70 61 67 65 20 63 61 63 68 65 20 73 70 69 6c   page cache spil
6240: 6c 20 73 69 7a 65 2e 20 54 68 65 20 73 65 63 6f  l size. The seco
6250: 6e 64 20 66 6f 72 6d 20 74 75 72 6e 73 20 63 61  nd form turns ca
6260: 63 68 65 20 73 70 69 6c 6c 20 6f 6e 0a 20 20 2a  che spill on.  *
6270: 2a 20 6f 72 20 6f 66 66 2e 20 20 57 68 65 6e 20  * or off.  When 
6280: 74 75 72 6e 6e 69 6e 67 20 63 61 63 68 65 20 73  turnning cache s
6290: 70 69 6c 6c 20 6f 6e 2c 20 74 68 65 20 73 69 7a  pill on, the siz
62a0: 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 0a  e is set to the.
62b0: 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 63 61 63    ** current cac
62c0: 68 65 5f 73 69 7a 65 2e 20 20 54 68 65 20 74 68  he_size.  The th
62d0: 69 72 64 20 66 6f 72 6d 20 73 65 74 73 20 61 20  ird form sets a 
62e0: 73 70 69 6c 6c 20 73 69 7a 65 20 74 68 61 74 0a  spill size that.
62f0: 20 20 2a 2a 20 6d 61 79 20 62 65 20 64 69 66 66    ** may be diff
6300: 65 72 65 6e 74 20 66 6f 72 6d 20 74 68 65 20 63  erent form the c
6310: 61 63 68 65 20 73 69 7a 65 2e 0a 20 20 2a 2a 20  ache size..  ** 
6320: 49 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65  If N is positive
6330: 20 74 68 65 6e 20 74 68 61 74 20 69 73 20 74 68   then that is th
6340: 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  e.  ** number of
6350: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 63 61   pages in the ca
6360: 63 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65  che.  If N is ne
6370: 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65  gative, then the
6380: 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  .  ** number of 
6390: 70 61 67 65 73 20 69 73 20 61 64 6a 75 73 74 65  pages is adjuste
63a0: 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 63 61  d so that the ca
63b0: 63 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69  che uses -N kibi
63c0: 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65  bytes.  ** of me
63d0: 6d 6f 72 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  mory..  **.  ** 
63e0: 49 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  If the number of
63f0: 20 63 61 63 68 65 5f 73 70 69 6c 6c 20 70 61 67   cache_spill pag
6400: 65 73 20 69 73 20 6c 65 73 73 20 74 68 65 6e 20  es is less then 
6410: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20  the number of.  
6420: 2a 2a 20 63 61 63 68 65 5f 73 69 7a 65 20 70 61  ** cache_size pa
6430: 67 65 73 2c 20 6e 6f 20 73 70 69 6c 6c 69 6e 67  ges, no spilling
6440: 20 6f 63 63 75 72 73 20 75 6e 74 69 6c 20 74 68   occurs until th
6450: 65 20 70 61 67 65 20 63 6f 75 6e 74 20 65 78 63  e page count exc
6460: 65 65 64 73 0a 20 20 2a 2a 20 74 68 65 20 6e 75  eeds.  ** the nu
6470: 6d 62 65 72 20 6f 66 20 63 61 63 68 65 5f 73 69  mber of cache_si
6480: 7a 65 20 70 61 67 65 73 2e 0a 20 20 2a 2a 0a 20  ze pages..  **. 
6490: 20 2a 2a 20 54 68 65 20 63 61 63 68 65 5f 73 70   ** The cache_sp
64a0: 69 6c 6c 3d 42 4f 4f 4c 45 41 4e 20 73 65 74 74  ill=BOOLEAN sett
64b0: 69 6e 67 20 61 70 70 6c 69 65 73 20 74 6f 20 61  ing applies to a
64c0: 6c 6c 20 61 74 74 61 63 68 65 64 20 73 63 68 65  ll attached sche
64d0: 6d 61 73 2c 0a 20 20 2a 2a 20 6e 6f 74 20 6a 75  mas,.  ** not ju
64e0: 73 74 20 74 68 65 20 73 63 68 65 6d 61 20 73 70  st the schema sp
64f0: 65 63 69 66 69 65 64 2e 0a 20 20 2a 2f 0a 20 20  ecified..  */.  
6500: 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 41 43  case PragTyp_CAC
6510: 48 45 5f 53 50 49 4c 4c 3a 20 7b 0a 20 20 20 20  HE_SPILL: {.    
6520: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
6530: 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
6540: 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
6550: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
6560: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
6570: 67 6c 65 49 6e 74 28 76 2c 20 22 63 61 63 68 65  gleInt(v, "cache
6580: 5f 73 70 69 6c 6c 22 2c 20 0a 20 20 20 20 20 20  _spill", .      
6590: 20 20 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20     (db->flags & 
65a0: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
65b0: 6c 29 3d 3d 30 20 3f 20 30 20 3a 20 0a 20 20 20  l)==0 ? 0 : .   
65c0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
65d0: 42 74 72 65 65 53 65 74 53 70 69 6c 6c 53 69 7a  BtreeSetSpillSiz
65e0: 65 28 70 44 62 2d 3e 70 42 74 2c 30 29 29 3b 0a  e(pDb->pBt,0));.
65f0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6600: 20 69 6e 74 20 73 69 7a 65 20 3d 20 31 3b 0a 20   int size = 1;. 
6610: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
6620: 47 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c  GetInt32(zRight,
6630: 20 26 73 69 7a 65 29 20 29 7b 0a 20 20 20 20 20   &size) ){.     
6640: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53     sqlite3BtreeS
6650: 65 74 53 70 69 6c 6c 53 69 7a 65 28 70 44 62 2d  etSpillSize(pDb-
6660: 3e 70 42 74 2c 20 73 69 7a 65 29 3b 0a 20 20 20  >pBt, size);.   
6670: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 73     }.      if( s
6680: 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
6690: 28 7a 52 69 67 68 74 2c 20 73 69 7a 65 21 3d 30  (zRight, size!=0
66a0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d  ) ){.        db-
66b0: 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45  >flags |= SQLITE
66c0: 5f 43 61 63 68 65 53 70 69 6c 6c 3b 0a 20 20 20  _CacheSpill;.   
66d0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
66e0: 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e    db->flags &= ~
66f0: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
6700: 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  l;.      }.     
6710: 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67   setAllPagerFlag
6720: 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20  s(db);.    }.   
6730: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
6740: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
6750: 73 63 68 65 6d 61 2e 5d 6d 6d 61 70 5f 73 69 7a  schema.]mmap_siz
6760: 65 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 55  e(N).  **.  ** U
6770: 73 65 64 20 74 6f 20 73 65 74 20 6d 61 70 70 69  sed to set mappi
6780: 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74 2e 20 54  ng size limit. T
6790: 68 65 20 6d 61 70 70 69 6e 67 20 73 69 7a 65 20  he mapping size 
67a0: 6c 69 6d 69 74 20 69 73 0a 20 20 2a 2a 20 75 73  limit is.  ** us
67b0: 65 64 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20  ed to limit the 
67c0: 61 67 67 72 65 67 61 74 65 20 73 69 7a 65 20 6f  aggregate size o
67d0: 66 20 61 6c 6c 20 6d 65 6d 6f 72 79 20 6d 61 70  f all memory map
67e0: 70 65 64 20 72 65 67 69 6f 6e 73 20 6f 66 20 74  ped regions of t
67f0: 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65  he.  ** database
6800: 20 66 69 6c 65 2e 20 49 66 20 74 68 69 73 20 70   file. If this p
6810: 61 72 61 6d 65 74 65 72 20 69 73 20 73 65 74 20  arameter is set 
6820: 74 6f 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6d 65  to zero, then me
6830: 6d 6f 72 79 20 6d 61 70 70 69 6e 67 0a 20 20 2a  mory mapping.  *
6840: 2a 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74  * is not used at
6850: 20 61 6c 6c 2e 20 20 49 66 20 4e 20 69 73 20 6e   all.  If N is n
6860: 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68  egative, then th
6870: 65 20 64 65 66 61 75 6c 74 20 6d 65 6d 6f 72 79  e default memory
6880: 20 6d 61 70 0a 20 20 2a 2a 20 6c 69 6d 69 74 20   map.  ** limit 
6890: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 73 71  determined by sq
68a0: 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c  lite3_config(SQL
68b0: 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f  ITE_CONFIG_MMAP_
68c0: 53 49 5a 45 29 20 69 73 20 73 65 74 2e 0a 20 20  SIZE) is set..  
68d0: 2a 2a 20 54 68 65 20 70 61 72 61 6d 65 74 65 72  ** The parameter
68e0: 20 4e 20 69 73 20 6d 65 61 73 75 72 65 64 20 69   N is measured i
68f0: 6e 20 62 79 74 65 73 2e 0a 20 20 2a 2a 0a 20 20  n bytes..  **.  
6900: 2a 2a 20 54 68 69 73 20 76 61 6c 75 65 20 69 73  ** This value is
6910: 20 61 64 76 69 73 6f 72 79 2e 20 20 54 68 65 20   advisory.  The 
6920: 75 6e 64 65 72 6c 79 69 6e 67 20 56 46 53 20 69  underlying VFS i
6930: 73 20 66 72 65 65 20 74 6f 20 6d 65 6d 6f 72 79  s free to memory
6940: 20 6d 61 70 0a 20 20 2a 2a 20 61 73 20 6c 69 74   map.  ** as lit
6950: 74 6c 65 20 6f 72 20 61 73 20 6d 75 63 68 20 61  tle or as much a
6960: 73 20 69 74 20 77 61 6e 74 73 2e 20 20 45 78 63  s it wants.  Exc
6970: 65 70 74 2c 20 69 66 20 4e 20 69 73 20 73 65 74  ept, if N is set
6980: 20 74 6f 20 30 20 74 68 65 6e 20 74 68 65 0a 20   to 0 then the. 
6990: 20 2a 2a 20 75 70 70 65 72 20 6c 61 79 65 72 73   ** upper layers
69a0: 20 77 69 6c 6c 20 6e 65 76 65 72 20 69 6e 76 6f   will never invo
69b0: 6b 65 20 74 68 65 20 78 46 65 74 63 68 20 69 6e  ke the xFetch in
69c0: 74 65 72 66 61 63 65 73 20 74 6f 20 74 68 65 20  terfaces to the 
69d0: 56 46 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  VFS..  */.  case
69e0: 20 50 72 61 67 54 79 70 5f 4d 4d 41 50 5f 53 49   PragTyp_MMAP_SI
69f0: 5a 45 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  ZE: {.    sqlite
6a00: 33 5f 69 6e 74 36 34 20 73 7a 3b 0a 23 69 66 20  3_int64 sz;.#if 
6a10: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6a20: 53 49 5a 45 3e 30 0a 20 20 20 20 61 73 73 65 72  SIZE>0.    asser
6a30: 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
6a40: 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44  MutexHeld(db, iD
6a50: 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28  b, 0) );.    if(
6a60: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
6a70: 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 73   int ii;.      s
6a80: 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
6a90: 49 36 34 28 7a 52 69 67 68 74 2c 20 26 73 7a 29  I64(zRight, &sz)
6aa0: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 7a 3c 30  ;.      if( sz<0
6ab0: 20 29 20 73 7a 20 3d 20 73 71 6c 69 74 65 33 47   ) sz = sqlite3G
6ac0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 4d 6d  lobalConfig.szMm
6ad0: 61 70 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49  ap;.      if( pI
6ae0: 64 32 2d 3e 6e 3d 3d 30 20 29 20 64 62 2d 3e 73  d2->n==0 ) db->s
6af0: 7a 4d 6d 61 70 20 3d 20 73 7a 3b 0a 20 20 20 20  zMmap = sz;.    
6b00: 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62    for(ii=db->nDb
6b10: 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29  -1; ii>=0; ii--)
6b20: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62  {.        if( db
6b30: 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26  ->aDb[ii].pBt &&
6b40: 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64   (ii==iDb || pId
6b50: 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20  2->n==0) ){.    
6b60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
6b70: 65 65 53 65 74 4d 6d 61 70 4c 69 6d 69 74 28 64  eeSetMmapLimit(d
6b80: 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20  b->aDb[ii].pBt, 
6b90: 73 7a 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  sz);.        }. 
6ba0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
6bb0: 20 73 7a 20 3d 20 2d 31 3b 0a 20 20 20 20 72 63   sz = -1;.    rc
6bc0: 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f   = sqlite3_file_
6bd0: 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62 2c  control(db, zDb,
6be0: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4d 4d   SQLITE_FCNTL_MM
6bf0: 41 50 5f 53 49 5a 45 2c 20 26 73 7a 29 3b 0a 23  AP_SIZE, &sz);.#
6c00: 65 6c 73 65 0a 20 20 20 20 73 7a 20 3d 20 30 3b  else.    sz = 0;
6c10: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
6c20: 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  _OK;.#endif.    
6c30: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
6c40: 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  K ){.      retur
6c50: 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 6d  nSingleInt(v, "m
6c60: 6d 61 70 5f 73 69 7a 65 22 2c 20 73 7a 29 3b 0a  map_size", sz);.
6c70: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63      }else if( rc
6c80: 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e  !=SQLITE_NOTFOUN
6c90: 44 20 29 7b 0a 20 20 20 20 20 20 70 50 61 72 73  D ){.      pPars
6ca0: 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20  e->nErr++;.     
6cb0: 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63   pParse->rc = rc
6cc0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  ;.    }.    brea
6cd0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
6ce0: 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f  *   PRAGMA temp_
6cf0: 73 74 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52 41  store.  **   PRA
6d00: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d  GMA temp_store =
6d10: 20 22 64 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f   "default"|"memo
6d20: 72 79 22 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a  ry"|"file".  **.
6d30: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
6d40: 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  et the local val
6d50: 75 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73  ue of the temp_s
6d60: 74 6f 72 65 20 66 6c 61 67 2e 20 20 43 68 61 6e  tore flag.  Chan
6d70: 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f  ging.  ** the lo
6d80: 63 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e  cal value does n
6d90: 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20  ot make changes 
6da0: 74 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65  to the disk file
6db0: 20 61 6e 64 20 74 68 65 20 64 65 66 61 75 6c 74   and the default
6dc0: 0a 20 20 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c  .  ** value will
6dd0: 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65   be restored the
6de0: 20 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64   next time the d
6df0: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65  atabase is opene
6e00: 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74  d..  **.  ** Not
6e10: 65 20 74 68 61 74 20 69 74 20 69 73 20 70 6f 73  e that it is pos
6e20: 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 6c 69  sible for the li
6e30: 62 72 61 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69  brary compile-ti
6e40: 6d 65 20 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20  me options to.  
6e50: 2a 2a 20 6f 76 65 72 72 69 64 65 20 74 68 69 73  ** override this
6e60: 20 73 65 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20   setting.  */.  
6e70: 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d  case PragTyp_TEM
6e80: 50 5f 53 54 4f 52 45 3a 20 7b 0a 20 20 20 20 69  P_STORE: {.    i
6e90: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
6ea0: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
6eb0: 49 6e 74 28 76 2c 20 22 74 65 6d 70 5f 73 74 6f  Int(v, "temp_sto
6ec0: 72 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73 74  re", db->temp_st
6ed0: 6f 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ore);.    }else{
6ee0: 0a 20 20 20 20 20 20 63 68 61 6e 67 65 54 65 6d  .      changeTem
6ef0: 70 53 74 6f 72 61 67 65 28 70 50 61 72 73 65 2c  pStorage(pParse,
6f00: 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 0a   zRight);.    }.
6f10: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
6f20: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
6f30: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  MA temp_store_di
6f40: 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50  rectory.  **   P
6f50: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
6f60: 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c  _directory = ""|
6f70: 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22  "directory_name"
6f80: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
6f90: 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63  n or set the loc
6fa0: 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  al value of the 
6fb0: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
6fc0: 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e  tory flag.  Chan
6fd0: 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61  ging.  ** the va
6fe0: 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69  lue sets a speci
6ff0: 66 69 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f  fic directory to
7000: 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d   be used for tem
7010: 70 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a 20 20  porary files..  
7020: 2a 2a 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20  ** Setting to a 
7030: 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65  null string reve
7040: 72 74 73 20 74 6f 20 74 68 65 20 64 65 66 61 75  rts to the defau
7050: 6c 74 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72  lt temporary dir
7060: 65 63 74 6f 72 79 20 73 65 61 72 63 68 2e 0a 20  ectory search.. 
7070: 20 2a 2a 20 49 66 20 74 65 6d 70 6f 72 61 72 79   ** If temporary
7080: 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 63 68   directory is ch
7090: 61 6e 67 65 64 2c 20 74 68 65 6e 20 69 6e 76 61  anged, then inva
70a0: 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67  lidateTempStorag
70b0: 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63  e..  **.  */.  c
70c0: 61 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50  ase PragTyp_TEMP
70d0: 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59  _STORE_DIRECTORY
70e0: 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  : {.    if( !zRi
70f0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
7100: 75 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c  urnSingleText(v,
7110: 20 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72   "temp_store_dir
7120: 65 63 74 6f 72 79 22 2c 20 73 71 6c 69 74 65 33  ectory", sqlite3
7130: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29  _temp_directory)
7140: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66  ;.    }else{.#if
7150: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
7160: 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a  _WSD.      if( z
7170: 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20  Right[0] ){.    
7180: 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20      int res;.   
7190: 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
71a0: 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56  3OsAccess(db->pV
71b0: 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49  fs, zRight, SQLI
71c0: 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52  TE_ACCESS_READWR
71d0: 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  ITE, &res);.    
71e0: 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
71f0: 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20  TE_OK || res==0 
7200: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
7210: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
7220: 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74  rse, "not a writ
7230: 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29  able directory")
7240: 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
7250: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20   pragma_out;.   
7260: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
7270: 20 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f       if( SQLITE_
7280: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20  TEMP_STORE==0.  
7290: 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f       || (SQLITE_
72a0: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26  TEMP_STORE==1 &&
72b0: 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c   db->temp_store<
72c0: 3d 31 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 53  =1).       || (S
72d0: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
72e0: 3d 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f  ==2 && db->temp_
72f0: 73 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20 20  store==1).      
7300: 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 76 61 6c  ){.        inval
7310: 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65  idateTempStorage
7320: 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20  (pParse);.      
7330: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  }.      sqlite3_
7340: 66 72 65 65 28 73 71 6c 69 74 65 33 5f 74 65 6d  free(sqlite3_tem
7350: 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20  p_directory);.  
7360: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30      if( zRight[0
7370: 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ] ){.        sql
7380: 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74  ite3_temp_direct
7390: 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ory = sqlite3_mp
73a0: 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67  rintf("%s", zRig
73b0: 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ht);.      }else
73c0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
73d0: 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79  3_temp_directory
73e0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65   = 0;.      }.#e
73f0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
7400: 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d  MIT_WSD */.    }
7410: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
7420: 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57  .#if SQLITE_OS_W
7430: 49 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  IN.  /*.  **   P
7440: 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65  RAGMA data_store
7450: 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20  _directory.  ** 
7460: 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74    PRAGMA data_st
7470: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  ore_directory = 
7480: 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61  ""|"directory_na
7490: 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  me".  **.  ** Re
74a0: 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20  turn or set the 
74b0: 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74  local value of t
74c0: 68 65 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69  he data_store_di
74d0: 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43  rectory flag.  C
74e0: 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65  hanging.  ** the
74f0: 20 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70   value sets a sp
7500: 65 63 69 66 69 63 20 64 69 72 65 63 74 6f 72 79  ecific directory
7510: 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20   to be used for 
7520: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 74  database files t
7530: 68 61 74 0a 20 20 2a 2a 20 77 65 72 65 20 73 70  hat.  ** were sp
7540: 65 63 69 66 69 65 64 20 77 69 74 68 20 61 20 72  ecified with a r
7550: 65 6c 61 74 69 76 65 20 70 61 74 68 6e 61 6d 65  elative pathname
7560: 2e 20 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20  .  Setting to a 
7570: 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65  null string reve
7580: 72 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20  rts.  ** to the 
7590: 64 65 66 61 75 6c 74 20 64 61 74 61 62 61 73 65  default database
75a0: 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68 69 63   directory, whic
75b0: 68 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 66  h for database f
75c0: 69 6c 65 73 20 73 70 65 63 69 66 69 65 64 20 77  iles specified w
75d0: 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61 74  ith.  ** a relat
75e0: 69 76 65 20 70 61 74 68 20 77 69 6c 6c 20 70 72  ive path will pr
75f0: 6f 62 61 62 6c 79 20 62 65 20 62 61 73 65 64 20  obably be based 
7600: 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 64  on the current d
7610: 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65  irectory for the
7620: 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20 20  .  ** process.  
7630: 44 61 74 61 62 61 73 65 20 66 69 6c 65 20 73 70  Database file sp
7640: 65 63 69 66 69 65 64 20 77 69 74 68 20 61 6e 20  ecified with an 
7650: 61 62 73 6f 6c 75 74 65 20 70 61 74 68 20 61 72  absolute path ar
7660: 65 20 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a 20  e not impacted. 
7670: 20 2a 2a 20 62 79 20 74 68 69 73 20 73 65 74 74   ** by this sett
7680: 69 6e 67 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ing, regardless 
7690: 6f 66 20 69 74 73 20 76 61 6c 75 65 2e 0a 20 20  of its value..  
76a0: 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  **.  */.  case P
76b0: 72 61 67 54 79 70 5f 44 41 54 41 5f 53 54 4f 52  ragTyp_DATA_STOR
76c0: 45 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20  E_DIRECTORY: {. 
76d0: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
76e0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  {.      returnSi
76f0: 6e 67 6c 65 54 65 78 74 28 76 2c 20 22 64 61 74  ngleText(v, "dat
7700: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
7710: 79 22 2c 20 73 71 6c 69 74 65 33 5f 64 61 74 61  y", sqlite3_data
7720: 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20  _directory);.   
7730: 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20   }else{.#ifndef 
7740: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
7750: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
7760: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 69  [0] ){.        i
7770: 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20 20  nt res;.        
7780: 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63  rc = sqlite3OsAc
7790: 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a  cess(db->pVfs, z
77a0: 52 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41 43  Right, SQLITE_AC
77b0: 43 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c 20  CESS_READWRITE, 
77c0: 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69  &res);.        i
77d0: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
77e0: 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20   || res==0 ){.  
77f0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
7800: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
7810: 22 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20  "not a writable 
7820: 64 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20 20  directory");.   
7830: 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67         goto prag
7840: 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20  ma_out;.        
7850: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
7860: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73 71 6c  sqlite3_free(sql
7870: 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74  ite3_data_direct
7880: 6f 72 79 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ory);.      if( 
7890: 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20  zRight[0] ){.   
78a0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74       sqlite3_dat
78b0: 61 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 73 71  a_directory = sq
78c0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25  lite3_mprintf("%
78d0: 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20  s", zRight);.   
78e0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
78f0: 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64    sqlite3_data_d
7900: 69 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20  irectory = 0;.  
7910: 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20      }.#endif /* 
7920: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20  SQLITE_OMIT_WSD 
7930: 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65  */.    }.    bre
7940: 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ak;.  }.#endif..
7950: 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  #if SQLITE_ENABL
7960: 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 0a  E_LOCKING_STYLE.
7970: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
7980: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6c 6f 63 6b  MA [schema.]lock
7990: 5f 70 72 6f 78 79 5f 66 69 6c 65 0a 20 20 2a 2a  _proxy_file.  **
79a0: 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d     PRAGMA [schem
79b0: 61 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  a.]lock_proxy_fi
79c0: 6c 65 20 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c  le = ":auto:"|"l
79d0: 6f 63 6b 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20  ock_file_path". 
79e0: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
79f0: 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c 75 65  or set the value
7a00: 20 6f 66 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f   of the lock_pro
7a10: 78 79 5f 66 69 6c 65 20 66 6c 61 67 2e 20 20 43  xy_file flag.  C
7a20: 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65  hanging.  ** the
7a30: 20 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70   value sets a sp
7a40: 65 63 69 66 69 63 20 66 69 6c 65 20 74 6f 20 62  ecific file to b
7a50: 65 20 75 73 65 64 20 66 6f 72 20 64 61 74 61 62  e used for datab
7a60: 61 73 65 20 61 63 63 65 73 73 20 6c 6f 63 6b 73  ase access locks
7a70: 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61  ..  **.  */.  ca
7a80: 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f  se PragTyp_LOCK_
7a90: 50 52 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20  PROXY_FILE: {.  
7aa0: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
7ab0: 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50  .      Pager *pP
7ac0: 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74  ager = sqlite3Bt
7ad0: 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42  reePager(pDb->pB
7ae0: 74 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  t);.      char *
7af0: 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 20  proxy_file_path 
7b00: 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71  = NULL;.      sq
7b10: 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c  lite3_file *pFil
7b20: 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
7b30: 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20  File(pPager);.  
7b40: 20 20 20 20 73 71 6c 69 74 65 33 4f 73 46 69 6c      sqlite3OsFil
7b50: 65 43 6f 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69  eControlHint(pFi
7b60: 6c 65 2c 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c  le, SQLITE_GET_L
7b70: 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20  OCKPROXYFILE, . 
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 20 26 70 72 6f 78 79            &proxy
7ba0: 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20  _file_path);.   
7bb0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54     returnSingleT
7bc0: 65 78 74 28 76 2c 20 22 6c 6f 63 6b 5f 70 72 6f  ext(v, "lock_pro
7bd0: 78 79 5f 66 69 6c 65 22 2c 20 70 72 6f 78 79 5f  xy_file", proxy_
7be0: 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20  file_path);.    
7bf0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67  }else{.      Pag
7c00: 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c  er *pPager = sql
7c10: 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
7c20: 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20  Db->pBt);.      
7c30: 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46  sqlite3_file *pF
7c40: 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67  ile = sqlite3Pag
7c50: 65 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a  erFile(pPager);.
7c60: 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20        int res;. 
7c70: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
7c80: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  0] ){.        re
7c90: 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43  s=sqlite3OsFileC
7ca0: 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51  ontrol(pFile, SQ
7cb0: 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f  LITE_SET_LOCKPRO
7cc0: 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20  XYFILE, .       
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 20 7a 52                zR
7cf0: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 20 65  ight);.      } e
7d00: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 72 65  lse {.        re
7d10: 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43  s=sqlite3OsFileC
7d20: 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51  ontrol(pFile, SQ
7d30: 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f  LITE_SET_LOCKPRO
7d40: 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20  XYFILE, .       
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 20 4e 55                NU
7d70: 4c 4c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  LL);.      }.   
7d80: 20 20 20 69 66 28 20 72 65 73 21 3d 53 51 4c 49     if( res!=SQLI
7d90: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
7da0: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
7db0: 28 70 50 61 72 73 65 2c 20 22 66 61 69 6c 65 64  (pParse, "failed
7dc0: 20 74 6f 20 73 65 74 20 6c 6f 63 6b 20 70 72 6f   to set lock pro
7dd0: 78 79 20 66 69 6c 65 22 29 3b 0a 20 20 20 20 20  xy file");.     
7de0: 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f     goto pragma_o
7df0: 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ut;.      }.    
7e00: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
7e10: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
7e20: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
7e30: 5f 53 54 59 4c 45 20 2a 2f 20 20 20 20 20 20 0a  _STYLE */      .
7e40: 20 20 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20      .  /*.  **  
7e50: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
7e60: 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a  ]synchronous.  *
7e70: 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  *   PRAGMA [sche
7e80: 6d 61 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  ma.]synchronous=
7e90: 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55  OFF|ON|NORMAL|FU
7ea0: 4c 4c 7c 45 58 54 52 41 0a 20 20 2a 2a 0a 20 20  LL|EXTRA.  **.  
7eb0: 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74  ** Return or set
7ec0: 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65   the local value
7ed0: 20 6f 66 20 74 68 65 20 73 79 6e 63 68 72 6f 6e   of the synchron
7ee0: 6f 75 73 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ous flag.  Chang
7ef0: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63  ing.  ** the loc
7f00: 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f  al value does no
7f10: 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74  t make changes t
7f20: 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20  o the disk file 
7f30: 61 6e 64 20 74 68 65 0a 20 20 2a 2a 20 64 65 66  and the.  ** def
7f40: 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20  ault value will 
7f50: 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20  be restored the 
7f60: 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61  next time the da
7f70: 74 61 62 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f  tabase is.  ** o
7f80: 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61  pened..  */.  ca
7f90: 73 65 20 50 72 61 67 54 79 70 5f 53 59 4e 43 48  se PragTyp_SYNCH
7fa0: 52 4f 4e 4f 55 53 3a 20 7b 0a 20 20 20 20 69 66  RONOUS: {.    if
7fb0: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
7fc0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
7fd0: 6e 74 28 76 2c 20 22 73 79 6e 63 68 72 6f 6e 6f  nt(v, "synchrono
7fe0: 75 73 22 2c 20 70 44 62 2d 3e 73 61 66 65 74 79  us", pDb->safety
7ff0: 5f 6c 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20 7d  _level-1);.    }
8000: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20  else{.      if( 
8010: 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  !db->autoCommit 
8020: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
8030: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
8040: 65 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  e, .            
8050: 22 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61  "Safety level ma
8060: 79 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64  y not be changed
8070: 20 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61   inside a transa
8080: 63 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d  ction");.      }
8090: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e  else{.        in
80a0: 74 20 69 4c 65 76 65 6c 20 3d 20 28 67 65 74 53  t iLevel = (getS
80b0: 61 66 65 74 79 4c 65 76 65 6c 28 7a 52 69 67 68  afetyLevel(zRigh
80c0: 74 2c 30 2c 31 29 2b 31 29 20 26 20 50 41 47 45  t,0,1)+1) & PAGE
80d0: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41  R_SYNCHRONOUS_MA
80e0: 53 4b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  SK;.        if( 
80f0: 69 4c 65 76 65 6c 3d 3d 30 20 29 20 69 4c 65 76  iLevel==0 ) iLev
8100: 65 6c 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  el = 1;.        
8110: 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65  pDb->safety_leve
8120: 6c 20 3d 20 69 4c 65 76 65 6c 3b 0a 20 20 20 20  l = iLevel;.    
8130: 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46      setAllPagerF
8140: 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20 20 20  lags(db);.      
8150: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  }.    }.    brea
8160: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  k;.  }.#endif /*
8170: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
8180: 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23  ER_PRAGMAS */..#
8190: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
81a0: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a  IT_FLAG_PRAGMAS.
81b0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46    case PragTyp_F
81c0: 4c 41 47 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  LAG: {.    if( z
81d0: 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20  Right==0 ){.    
81e0: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
81f0: 74 28 76 2c 20 70 50 72 61 67 6d 61 2d 3e 7a 4e  t(v, pPragma->zN
8200: 61 6d 65 2c 20 28 64 62 2d 3e 66 6c 61 67 73 20  ame, (db->flags 
8210: 26 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 29  & pPragma->iArg)
8220: 21 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  !=0 );.    }else
8230: 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d 61 73 6b  {.      int mask
8240: 20 3d 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67   = pPragma->iArg
8250: 3b 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20  ;    /* Mask of 
8260: 62 69 74 73 20 74 6f 20 73 65 74 20 6f 72 20 63  bits to set or c
8270: 6c 65 61 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69  lear. */.      i
8280: 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  f( db->autoCommi
8290: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  t==0 ){.        
82a0: 2f 2a 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 73  /* Foreign key s
82b0: 75 70 70 6f 72 74 20 6d 61 79 20 6e 6f 74 20 62  upport may not b
82c0: 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73  e enabled or dis
82d0: 61 62 6c 65 64 20 77 68 69 6c 65 20 6e 6f 74 0a  abled while not.
82e0: 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 20 61 75          ** in au
82f0: 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20  to-commit mode. 
8300: 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b   */.        mask
8310: 20 26 3d 20 7e 28 53 51 4c 49 54 45 5f 46 6f 72   &= ~(SQLITE_For
8320: 65 69 67 6e 4b 65 79 73 29 3b 0a 20 20 20 20 20  eignKeys);.     
8330: 20 7d 0a 23 69 66 20 53 51 4c 49 54 45 5f 55 53   }.#if SQLITE_US
8340: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
8350: 4e 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  N.      if( db->
8360: 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 3d 3d  auth.authLevel==
8370: 55 41 55 54 48 5f 55 73 65 72 20 29 7b 0a 20 20  UAUTH_User ){.  
8380: 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20        /* Do not 
8390: 61 6c 6c 6f 77 20 6e 6f 6e 2d 61 64 6d 69 6e 20  allow non-admin 
83a0: 75 73 65 72 73 20 74 6f 20 6d 6f 64 69 66 79 20  users to modify 
83b0: 74 68 65 20 73 63 68 65 6d 61 20 61 72 62 69 74  the schema arbit
83c0: 72 61 72 69 6c 79 20 2a 2f 0a 20 20 20 20 20 20  rarily */.      
83d0: 20 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49    mask &= ~(SQLI
83e0: 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 29 3b  TE_WriteSchema);
83f0: 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  .      }.#endif.
8400: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
8410: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69  e3GetBoolean(zRi
8420: 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20  ght, 0) ){.     
8430: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20     db->flags |= 
8440: 6d 61 73 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73  mask;.      }els
8450: 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66  e{.        db->f
8460: 6c 61 67 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a 20  lags &= ~mask;. 
8470: 20 20 20 20 20 20 20 69 66 28 20 6d 61 73 6b 3d         if( mask=
8480: 3d 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73  =SQLITE_DeferFKs
8490: 20 29 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   ) db->nDeferred
84a0: 49 6d 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20 20 20  ImmCons = 0;.   
84b0: 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d     }..      /* M
84c0: 61 6e 79 20 6f 66 20 74 68 65 20 66 6c 61 67 2d  any of the flag-
84d0: 70 72 61 67 6d 61 73 20 6d 6f 64 69 66 79 20 74  pragmas modify t
84e0: 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 65  he code generate
84f0: 64 20 62 79 20 74 68 65 20 53 51 4c 20 0a 20 20  d by the SQL .  
8500: 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 72 20      ** compiler 
8510: 28 65 67 2e 20 63 6f 75 6e 74 5f 63 68 61 6e 67  (eg. count_chang
8520: 65 73 29 2e 20 53 6f 20 61 64 64 20 61 6e 20 6f  es). So add an o
8530: 70 63 6f 64 65 20 74 6f 20 65 78 70 69 72 65 20  pcode to expire 
8540: 61 6c 6c 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d  all.      ** com
8550: 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d  piled SQL statem
8560: 65 6e 74 73 20 61 66 74 65 72 20 6d 6f 64 69 66  ents after modif
8570: 79 69 6e 67 20 61 20 70 72 61 67 6d 61 20 76 61  ying a pragma va
8580: 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  lue..      */.  
8590: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
85a0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 45 78 70 69  ddOp2(v, OP_Expi
85b0: 72 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20  re, 0, 0);.     
85c0: 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67   setAllPagerFlag
85d0: 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20  s(db);.    }.   
85e0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
85f0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
8600: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 20 2a  T_FLAG_PRAGMAS *
8610: 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
8620: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
8630: 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20  AGMAS.  /*.  ** 
8640: 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69    PRAGMA table_i
8650: 6e 66 6f 28 3c 74 61 62 6c 65 3e 29 0a 20 20 2a  nfo(<table>).  *
8660: 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 61 20  *.  ** Return a 
8670: 73 69 6e 67 6c 65 20 72 6f 77 20 66 6f 72 20 65  single row for e
8680: 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  ach column of th
8690: 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 54  e named table. T
86a0: 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 20 20  he columns of.  
86b0: 2a 2a 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  ** the returned 
86c0: 64 61 74 61 20 73 65 74 20 61 72 65 3a 0a 20 20  data set are:.  
86d0: 2a 2a 0a 20 20 2a 2a 20 63 69 64 3a 20 20 20 20  **.  ** cid:    
86e0: 20 20 20 20 43 6f 6c 75 6d 6e 20 69 64 20 28 6e      Column id (n
86f0: 75 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c 65 66  umbered from lef
8700: 74 20 74 6f 20 72 69 67 68 74 2c 20 73 74 61 72  t to right, star
8710: 74 69 6e 67 20 61 74 20 30 29 0a 20 20 2a 2a 20  ting at 0).  ** 
8720: 6e 61 6d 65 3a 20 20 20 20 20 20 20 43 6f 6c 75  name:       Colu
8730: 6d 6e 20 6e 61 6d 65 0a 20 20 2a 2a 20 74 79 70  mn name.  ** typ
8740: 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20  e:       Column 
8750: 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65  declaration type
8760: 2e 0a 20 20 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a 20  ..  ** notnull: 
8770: 20 20 20 54 72 75 65 20 69 66 20 27 4e 4f 54 20     True if 'NOT 
8780: 4e 55 4c 4c 27 20 69 73 20 70 61 72 74 20 6f 66  NULL' is part of
8790: 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74   column declarat
87a0: 69 6f 6e 0a 20 20 2a 2a 20 64 66 6c 74 5f 76 61  ion.  ** dflt_va
87b0: 6c 75 65 3a 20 54 68 65 20 64 65 66 61 75 6c 74  lue: The default
87c0: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 63   value for the c
87d0: 6f 6c 75 6d 6e 2c 20 69 66 20 61 6e 79 2e 0a 20  olumn, if any.. 
87e0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
87f0: 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 3a 20 69  yp_TABLE_INFO: i
8800: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
8810: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
8820: 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33    pTab = sqlite3
8830: 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52  FindTable(db, zR
8840: 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20  ight, zDb);.    
8850: 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20  if( pTab ){.    
8860: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
8870: 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b  har *azCol[] = {
8880: 0a 20 20 20 20 20 20 20 20 20 22 63 69 64 22 2c  .         "cid",
8890: 20 22 6e 61 6d 65 22 2c 20 22 74 79 70 65 22 2c   "name", "type",
88a0: 20 22 6e 6f 74 6e 75 6c 6c 22 2c 20 22 64 66 6c   "notnull", "dfl
88b0: 74 5f 76 61 6c 75 65 22 2c 20 22 70 6b 22 0a 20  t_value", "pk". 
88c0: 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e       };.      in
88d0: 74 20 69 2c 20 6b 3b 0a 20 20 20 20 20 20 69 6e  t i, k;.      in
88e0: 74 20 6e 48 69 64 64 65 6e 20 3d 20 30 3b 0a 20  t nHidden = 0;. 
88f0: 20 20 20 20 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f       Column *pCo
8900: 6c 3b 0a 20 20 20 20 20 20 49 6e 64 65 78 20 2a  l;.      Index *
8910: 70 50 6b 20 3d 20 73 71 6c 69 74 65 33 50 72 69  pPk = sqlite3Pri
8920: 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61  maryKeyIndex(pTa
8930: 62 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65  b);.      pParse
8940: 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20  ->nMem = 6;.    
8950: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
8960: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
8970: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 65  , iDb);.      se
8980: 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  tAllColumnNames(
8990: 76 2c 20 36 2c 20 61 7a 43 6f 6c 29 3b 20 61 73  v, 6, azCol); as
89a0: 73 65 72 74 28 20 36 3d 3d 41 72 72 61 79 53 69  sert( 6==ArraySi
89b0: 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20  ze(azCol) );.   
89c0: 20 20 20 73 71 6c 69 74 65 33 56 69 65 77 47 65     sqlite3ViewGe
89d0: 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61  tColumnNames(pPa
89e0: 72 73 65 2c 20 70 54 61 62 29 3b 0a 20 20 20 20  rse, pTab);.    
89f0: 20 20 66 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d    for(i=0, pCol=
8a00: 70 54 61 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54  pTab->aCol; i<pT
8a10: 61 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70  ab->nCol; i++, p
8a20: 43 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  Col++){.        
8a30: 69 66 28 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  if( IsHiddenColu
8a40: 6d 6e 28 70 43 6f 6c 29 20 29 7b 0a 20 20 20 20  mn(pCol) ){.    
8a50: 20 20 20 20 20 20 6e 48 69 64 64 65 6e 2b 2b 3b        nHidden++;
8a60: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69  .          conti
8a70: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  nue;.        }. 
8a80: 20 20 20 20 20 20 20 69 66 28 20 28 70 43 6f 6c         if( (pCol
8a90: 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
8aa0: 46 4c 41 47 5f 50 52 49 4d 4b 45 59 29 3d 3d 30  FLAG_PRIMKEY)==0
8ab0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20   ){.          k 
8ac0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 0;.        }el
8ad0: 73 65 20 69 66 28 20 70 50 6b 3d 3d 30 20 29 7b  se if( pPk==0 ){
8ae0: 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 31  .          k = 1
8af0: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
8b00: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b  .          for(k
8b10: 3d 31 3b 20 6b 3c 3d 70 54 61 62 2d 3e 6e 43 6f  =1; k<=pTab->nCo
8b20: 6c 20 26 26 20 70 50 6b 2d 3e 61 69 43 6f 6c 75  l && pPk->aiColu
8b30: 6d 6e 5b 6b 2d 31 5d 21 3d 69 3b 20 6b 2b 2b 29  mn[k-1]!=i; k++)
8b40: 7b 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  {}.        }.   
8b50: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8b60: 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20  MultiLoad(v, 1, 
8b70: 22 69 73 73 69 73 69 22 2c 0a 20 20 20 20 20 20  "issisi",.      
8b80: 20 20 20 20 20 20 20 20 20 69 2d 6e 48 69 64 64           i-nHidd
8b90: 65 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  en,.            
8ba0: 20 20 20 70 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 0a     pCol->zName,.
8bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
8bc0: 43 6f 6c 2d 3e 7a 54 79 70 65 20 3f 20 70 43 6f  Col->zType ? pCo
8bd0: 6c 2d 3e 7a 54 79 70 65 20 3a 20 22 22 2c 0a 20  l->zType : "",. 
8be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43                pC
8bf0: 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f 20 31 20  ol->notNull ? 1 
8c00: 3a 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20  : 0,.           
8c10: 20 20 20 20 70 43 6f 6c 2d 3e 7a 44 66 6c 74 2c      pCol->zDflt,
8c20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8c30: 6b 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  k);.        sqli
8c40: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
8c50: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
8c60: 2c 20 36 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 6);.      }.  
8c70: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
8c80: 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ..  case PragTyp
8c90: 5f 53 54 41 54 53 3a 20 7b 0a 20 20 20 20 73 74  _STATS: {.    st
8ca0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
8cb0: 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 74 61  *azCol[] = { "ta
8cc0: 62 6c 65 22 2c 20 22 69 6e 64 65 78 22 2c 20 22  ble", "index", "
8cd0: 77 69 64 74 68 22 2c 20 22 68 65 69 67 68 74 22  width", "height"
8ce0: 20 7d 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   };.    Index *p
8cf0: 49 64 78 3b 0a 20 20 20 20 48 61 73 68 45 6c 65  Idx;.    HashEle
8d00: 6d 20 2a 69 3b 0a 20 20 20 20 76 20 3d 20 73 71  m *i;.    v = sq
8d10: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
8d20: 72 73 65 29 3b 0a 20 20 20 20 70 50 61 72 73 65  rse);.    pParse
8d30: 2d 3e 6e 4d 65 6d 20 3d 20 34 3b 0a 20 20 20 20  ->nMem = 4;.    
8d40: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
8d50: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
8d60: 69 44 62 29 3b 0a 20 20 20 20 73 65 74 41 6c 6c  iDb);.    setAll
8d70: 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 34  ColumnNames(v, 4
8d80: 2c 20 61 7a 43 6f 6c 29 3b 20 20 61 73 73 65 72  , azCol);  asser
8d90: 74 28 20 34 3d 3d 41 72 72 61 79 53 69 7a 65 28  t( 4==ArraySize(
8da0: 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 66 6f  azCol) );.    fo
8db0: 72 28 69 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(i=sqliteHashFi
8dc0: 72 73 74 28 26 70 44 62 2d 3e 70 53 63 68 65 6d  rst(&pDb->pSchem
8dd0: 61 2d 3e 74 62 6c 48 61 73 68 29 3b 20 69 3b 20  a->tblHash); i; 
8de0: 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  i=sqliteHashNext
8df0: 28 69 29 29 7b 0a 20 20 20 20 20 20 54 61 62 6c  (i)){.      Tabl
8e00: 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65  e *pTab = sqlite
8e10: 48 61 73 68 44 61 74 61 28 69 29 3b 0a 20 20 20  HashData(i);.   
8e20: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75     sqlite3VdbeMu
8e30: 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 73  ltiLoad(v, 1, "s
8e40: 73 69 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20  sii",.          
8e50: 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20   pTab->zName,.  
8e60: 20 20 20 20 20 20 20 20 20 30 2c 0a 20 20 20 20           0,.    
8e70: 20 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69         (int)sqli
8e80: 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70  te3LogEstToInt(p
8e90: 54 61 62 2d 3e 73 7a 54 61 62 52 6f 77 29 2c 0a  Tab->szTabRow),.
8ea0: 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
8eb0: 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
8ec0: 6e 74 28 70 54 61 62 2d 3e 6e 52 6f 77 4c 6f 67  nt(pTab->nRowLog
8ed0: 45 73 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c  Est));.      sql
8ee0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
8ef0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
8f00: 31 2c 20 34 29 3b 0a 20 20 20 20 20 20 66 6f 72  1, 4);.      for
8f10: 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64  (pIdx=pTab->pInd
8f20: 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
8f30: 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20  Idx->pNext){.   
8f40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8f50: 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 32 2c 20  MultiLoad(v, 2, 
8f60: 22 73 69 69 22 2c 0a 20 20 20 20 20 20 20 20 20  "sii",.         
8f70: 20 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 0a 20    pIdx->zName,. 
8f80: 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73            (int)s
8f90: 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
8fa0: 74 28 70 49 64 78 2d 3e 73 7a 49 64 78 52 6f 77  t(pIdx->szIdxRow
8fb0: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 28 69  ),.           (i
8fc0: 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  nt)sqlite3LogEst
8fd0: 54 6f 49 6e 74 28 70 49 64 78 2d 3e 61 69 52 6f  ToInt(pIdx->aiRo
8fe0: 77 4c 6f 67 45 73 74 5b 30 5d 29 29 3b 0a 20 20  wLogEst[0]));.  
8ff0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9000: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
9010: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a  sultRow, 1, 4);.
9020: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
9030: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61  }.  break;..  ca
9040: 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58  se PragTyp_INDEX
9050: 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68  _INFO: if( zRigh
9060: 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a  t ){.    Index *
9070: 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20  pIdx;.    Table 
9080: 2a 70 54 61 62 3b 0a 20 20 20 20 70 49 64 78 20  *pTab;.    pIdx 
9090: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64  = sqlite3FindInd
90a0: 65 78 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a  ex(db, zRight, z
90b0: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64  Db);.    if( pId
90c0: 78 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69  x ){.      stati
90d0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a  c const char *az
90e0: 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  Col[] = {.      
90f0: 20 20 20 22 73 65 71 6e 6f 22 2c 20 22 63 69 64     "seqno", "cid
9100: 22 2c 20 22 6e 61 6d 65 22 2c 20 22 64 65 73 63  ", "name", "desc
9110: 22 2c 20 22 63 6f 6c 6c 22 2c 20 22 6b 65 79 22  ", "coll", "key"
9120: 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20  .      };.      
9130: 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 69 6e 74  int i;.      int
9140: 20 6d 78 3b 0a 20 20 20 20 20 20 69 66 28 20 70   mx;.      if( p
9150: 50 72 61 67 6d 61 2d 3e 69 41 72 67 20 29 7b 0a  Pragma->iArg ){.
9160: 20 20 20 20 20 20 20 20 2f 2a 20 50 52 41 47 4d          /* PRAGM
9170: 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f 20 28 6e  A index_xinfo (n
9180: 65 77 65 72 20 76 65 72 73 69 6f 6e 20 77 69 74  ewer version wit
9190: 68 20 6d 6f 72 65 20 72 6f 77 73 20 61 6e 64 20  h more rows and 
91a0: 63 6f 6c 75 6d 6e 73 29 20 2a 2f 0a 20 20 20 20  columns) */.    
91b0: 20 20 20 20 6d 78 20 3d 20 70 49 64 78 2d 3e 6e      mx = pIdx->n
91c0: 43 6f 6c 75 6d 6e 3b 0a 20 20 20 20 20 20 20 20  Column;.        
91d0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36  pParse->nMem = 6
91e0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
91f0: 20 20 20 20 20 20 20 2f 2a 20 50 52 41 47 4d 41         /* PRAGMA
9200: 20 69 6e 64 65 78 5f 69 6e 66 6f 20 28 6c 65 67   index_info (leg
9210: 61 63 79 20 76 65 72 73 69 6f 6e 29 20 2a 2f 0a  acy version) */.
9220: 20 20 20 20 20 20 20 20 6d 78 20 3d 20 70 49 64          mx = pId
9230: 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 0a 20 20 20 20  x->nKeyCol;.    
9240: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
9250: 20 3d 20 33 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 3;.      }.  
9260: 20 20 20 20 70 54 61 62 20 3d 20 70 49 64 78 2d      pTab = pIdx-
9270: 3e 70 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 73  >pTable;.      s
9280: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
9290: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
92a0: 44 62 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  Db);.      asser
92b0: 74 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3c  t( pParse->nMem<
92c0: 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c  =ArraySize(azCol
92d0: 29 20 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c  ) );.      setAl
92e0: 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20  lColumnNames(v, 
92f0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 61 7a  pParse->nMem, az
9300: 43 6f 6c 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  Col);.      for(
9310: 69 3d 30 3b 20 69 3c 6d 78 3b 20 69 2b 2b 29 7b  i=0; i<mx; i++){
9320: 0a 20 20 20 20 20 20 20 20 69 31 36 20 63 6e 75  .        i16 cnu
9330: 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75  m = pIdx->aiColu
9340: 6d 6e 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 73  mn[i];.        s
9350: 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c  qlite3VdbeMultiL
9360: 6f 61 64 28 76 2c 20 31 2c 20 22 69 69 73 22 2c  oad(v, 1, "iis",
9370: 20 69 2c 20 63 6e 75 6d 2c 0a 20 20 20 20 20 20   i, cnum,.      
9380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9390: 20 20 20 20 20 20 20 63 6e 75 6d 3c 30 20 3f 20         cnum<0 ? 
93a0: 30 20 3a 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63  0 : pTab->aCol[c
93b0: 6e 75 6d 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20  num].zName);.   
93c0: 20 20 20 20 20 69 66 28 20 70 50 72 61 67 6d 61       if( pPragma
93d0: 2d 3e 69 41 72 67 20 29 7b 0a 20 20 20 20 20 20  ->iArg ){.      
93e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
93f0: 75 6c 74 69 4c 6f 61 64 28 76 2c 20 34 2c 20 22  ultiLoad(v, 4, "
9400: 69 73 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20  isi",.          
9410: 20 20 70 49 64 78 2d 3e 61 53 6f 72 74 4f 72 64    pIdx->aSortOrd
9420: 65 72 5b 69 5d 2c 0a 20 20 20 20 20 20 20 20 20  er[i],.         
9430: 20 20 20 70 49 64 78 2d 3e 61 7a 43 6f 6c 6c 5b     pIdx->azColl[
9440: 69 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  i],.            
9450: 69 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29  i<pIdx->nKeyCol)
9460: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
9470: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9480: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
9490: 6c 74 52 6f 77 2c 20 31 2c 20 70 50 61 72 73 65  ltRow, 1, pParse
94a0: 2d 3e 6e 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d  ->nMem);.      }
94b0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
94c0: 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67  ak;..  case Prag
94d0: 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54 3a 20  Typ_INDEX_LIST: 
94e0: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
94f0: 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20    Index *pIdx;. 
9500: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a     Table *pTab;.
9510: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70      int i;.    p
9520: 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  Tab = sqlite3Fin
9530: 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68  dTable(db, zRigh
9540: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28  t, zDb);.    if(
9550: 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 73   pTab ){.      s
9560: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
9570: 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20   *azCol[] = {.  
9580: 20 20 20 20 20 20 22 73 65 71 22 2c 20 22 6e 61        "seq", "na
9590: 6d 65 22 2c 20 22 75 6e 69 71 75 65 22 2c 20 22  me", "unique", "
95a0: 6f 72 69 67 69 6e 22 2c 20 22 70 61 72 74 69 61  origin", "partia
95b0: 6c 22 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  l".      };.    
95c0: 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74    v = sqlite3Get
95d0: 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20  Vdbe(pParse);.  
95e0: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
95f0: 20 3d 20 35 3b 0a 20 20 20 20 20 20 73 71 6c 69   = 5;.      sqli
9600: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
9610: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29  ema(pParse, iDb)
9620: 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 43 6f  ;.      setAllCo
9630: 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 35 2c 20  lumnNames(v, 5, 
9640: 61 7a 43 6f 6c 29 3b 20 20 61 73 73 65 72 74 28  azCol);  assert(
9650: 20 35 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a   5==ArraySize(az
9660: 43 6f 6c 29 20 29 3b 0a 20 20 20 20 20 20 66 6f  Col) );.      fo
9670: 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e  r(pIdx=pTab->pIn
9680: 64 65 78 2c 20 69 3d 30 3b 20 70 49 64 78 3b 20  dex, i=0; pIdx; 
9690: 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
96a0: 2c 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  , i++){.        
96b0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 4f 72  const char *azOr
96c0: 69 67 69 6e 5b 5d 20 3d 20 7b 20 22 63 22 2c 20  igin[] = { "c", 
96d0: 22 75 22 2c 20 22 70 6b 22 20 7d 3b 0a 20 20 20  "u", "pk" };.   
96e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
96f0: 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20  MultiLoad(v, 1, 
9700: 22 69 73 69 73 69 22 2c 0a 20 20 20 20 20 20 20  "isisi",.       
9710: 20 20 20 20 69 2c 0a 20 20 20 20 20 20 20 20 20      i,.         
9720: 20 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 0a 20    pIdx->zName,. 
9730: 20 20 20 20 20 20 20 20 20 20 49 73 55 6e 69 71            IsUniq
9740: 75 65 49 6e 64 65 78 28 70 49 64 78 29 2c 0a 20  ueIndex(pIdx),. 
9750: 20 20 20 20 20 20 20 20 20 20 61 7a 4f 72 69 67            azOrig
9760: 69 6e 5b 70 49 64 78 2d 3e 69 64 78 54 79 70 65  in[pIdx->idxType
9770: 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 49  ],.           pI
9780: 64 78 2d 3e 70 50 61 72 74 49 64 78 57 68 65 72  dx->pPartIdxWher
9790: 65 21 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 73  e!=0);.        s
97a0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
97b0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
97c0: 2c 20 31 2c 20 35 29 3b 0a 20 20 20 20 20 20 7d  , 1, 5);.      }
97d0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
97e0: 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67  ak;..  case Prag
97f0: 54 79 70 5f 44 41 54 41 42 41 53 45 5f 4c 49 53  Typ_DATABASE_LIS
9800: 54 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20  T: {.    static 
9810: 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f  const char *azCo
9820: 6c 5b 5d 20 3d 20 7b 20 22 73 65 71 22 2c 20 22  l[] = { "seq", "
9830: 6e 61 6d 65 22 2c 20 22 66 69 6c 65 22 20 7d 3b  name", "file" };
9840: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
9850: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33  pParse->nMem = 3
9860: 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75  ;.    setAllColu
9870: 6d 6e 4e 61 6d 65 73 28 76 2c 20 33 2c 20 61 7a  mnNames(v, 3, az
9880: 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 33 3d  Col); assert( 3=
9890: 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c  =ArraySize(azCol
98a0: 29 20 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  ) );.    for(i=0
98b0: 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
98c0: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  ){.      if( db-
98d0: 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30 20 29  >aDb[i].pBt==0 )
98e0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
98f0: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62   assert( db->aDb
9900: 5b 69 5d 2e 7a 4e 61 6d 65 21 3d 30 20 29 3b 0a  [i].zName!=0 );.
9910: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9920: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c  eMultiLoad(v, 1,
9930: 20 22 69 73 73 22 2c 0a 20 20 20 20 20 20 20 20   "iss",.        
9940: 20 69 2c 0a 20 20 20 20 20 20 20 20 20 64 62 2d   i,.         db-
9950: 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 0a 20  >aDb[i].zName,. 
9960: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42          sqlite3B
9970: 74 72 65 65 47 65 74 46 69 6c 65 6e 61 6d 65 28  treeGetFilename(
9980: 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 29 29  db->aDb[i].pBt))
9990: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
99a0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
99b0: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29  ResultRow, 1, 3)
99c0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
99d0: 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61  eak;..  case Pra
99e0: 67 54 79 70 5f 43 4f 4c 4c 41 54 49 4f 4e 5f 4c  gTyp_COLLATION_L
99f0: 49 53 54 3a 20 7b 0a 20 20 20 20 73 74 61 74 69  IST: {.    stati
9a00: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a  c const char *az
9a10: 43 6f 6c 5b 5d 20 3d 20 7b 20 22 73 65 71 22 2c  Col[] = { "seq",
9a20: 20 22 6e 61 6d 65 22 20 7d 3b 0a 20 20 20 20 69   "name" };.    i
9a30: 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 48 61  nt i = 0;.    Ha
9a40: 73 68 45 6c 65 6d 20 2a 70 3b 0a 20 20 20 20 70  shElem *p;.    p
9a50: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b  Parse->nMem = 2;
9a60: 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d  .    setAllColum
9a70: 6e 4e 61 6d 65 73 28 76 2c 20 32 2c 20 61 7a 43  nNames(v, 2, azC
9a80: 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 32 3d 3d  ol); assert( 2==
9a90: 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29  ArraySize(azCol)
9aa0: 20 29 3b 0a 20 20 20 20 66 6f 72 28 70 3d 73 71   );.    for(p=sq
9ab0: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64  liteHashFirst(&d
9ac0: 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 70 3b  b->aCollSeq); p;
9ad0: 20 70 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   p=sqliteHashNex
9ae0: 74 28 70 29 29 7b 0a 20 20 20 20 20 20 43 6f 6c  t(p)){.      Col
9af0: 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28 43  lSeq *pColl = (C
9b00: 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74 65 48  ollSeq *)sqliteH
9b10: 61 73 68 44 61 74 61 28 70 29 3b 0a 20 20 20 20  ashData(p);.    
9b20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c    sqlite3VdbeMul
9b30: 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69 73  tiLoad(v, 1, "is
9b40: 22 2c 20 69 2b 2b 2c 20 70 43 6f 6c 6c 2d 3e 7a  ", i++, pColl->z
9b50: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 73 71 6c  Name);.      sql
9b60: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
9b70: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
9b80: 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  1, 2);.    }.  }
9b90: 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
9ba0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
9bb0: 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 20 2a  SCHEMA_PRAGMAS *
9bc0: 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
9bd0: 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
9be0: 45 59 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  EY.  case PragTy
9bf0: 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 4c 49  p_FOREIGN_KEY_LI
9c00: 53 54 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29  ST: if( zRight )
9c10: 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b  {.    FKey *pFK;
9c20: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
9c30: 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c  ;.    pTab = sql
9c40: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
9c50: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a  , zRight, zDb);.
9c60: 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a      if( pTab ){.
9c70: 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65        v = sqlite
9c80: 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29  3GetVdbe(pParse)
9c90: 3b 0a 20 20 20 20 20 20 70 46 4b 20 3d 20 70 54  ;.      pFK = pT
9ca0: 61 62 2d 3e 70 46 4b 65 79 3b 0a 20 20 20 20 20  ab->pFKey;.     
9cb0: 20 69 66 28 20 70 46 4b 20 29 7b 0a 20 20 20 20   if( pFK ){.    
9cc0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
9cd0: 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d   char *azCol[] =
9ce0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 22 69   {.           "i
9cf0: 64 22 2c 20 22 73 65 71 22 2c 20 22 74 61 62 6c  d", "seq", "tabl
9d00: 65 22 2c 20 22 66 72 6f 6d 22 2c 20 22 74 6f 22  e", "from", "to"
9d10: 2c 20 22 6f 6e 5f 75 70 64 61 74 65 22 2c 20 22  , "on_update", "
9d20: 6f 6e 5f 64 65 6c 65 74 65 22 2c 0a 20 20 20 20  on_delete",.    
9d30: 20 20 20 20 20 20 20 22 6d 61 74 63 68 22 0a 20         "match". 
9d40: 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20         };.      
9d50: 20 20 69 6e 74 20 69 20 3d 20 30 3b 20 0a 20 20    int i = 0; .  
9d60: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
9d70: 65 6d 20 3d 20 38 3b 0a 20 20 20 20 20 20 20 20  em = 8;.        
9d80: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
9d90: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
9da0: 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 65  iDb);.        se
9db0: 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  tAllColumnNames(
9dc0: 76 2c 20 38 2c 20 61 7a 43 6f 6c 29 3b 20 61 73  v, 8, azCol); as
9dd0: 73 65 72 74 28 20 38 3d 3d 41 72 72 61 79 53 69  sert( 8==ArraySi
9de0: 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20  ze(azCol) );.   
9df0: 20 20 20 20 20 77 68 69 6c 65 28 70 46 4b 29 7b       while(pFK){
9e00: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a  .          int j
9e10: 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  ;.          for(
9e20: 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c  j=0; j<pFK->nCol
9e30: 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; j++){.        
9e40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
9e50: 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22  ultiLoad(v, 1, "
9e60: 69 69 73 73 73 73 73 73 22 2c 0a 20 20 20 20 20  iissssss",.     
9e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 2c                i,
9e80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9e90: 20 20 20 20 6a 2c 0a 20 20 20 20 20 20 20 20 20      j,.         
9ea0: 20 20 20 20 20 20 20 20 20 20 70 46 4b 2d 3e 7a            pFK->z
9eb0: 54 6f 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  To,.            
9ec0: 20 20 20 20 20 20 20 70 54 61 62 2d 3e 61 43 6f         pTab->aCo
9ed0: 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69  l[pFK->aCol[j].i
9ee0: 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 0a 20 20 20  From].zName,.   
9ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f00: 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43 6f  pFK->aCol[j].zCo
9f10: 6c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  l,.             
9f20: 20 20 20 20 20 20 61 63 74 69 6f 6e 4e 61 6d 65        actionName
9f30: 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 31 5d  (pFK->aAction[1]
9f40: 29 2c 20 20 2f 2a 20 4f 4e 20 55 50 44 41 54 45  ),  /* ON UPDATE
9f50: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
9f60: 20 20 20 20 20 20 20 61 63 74 69 6f 6e 4e 61 6d         actionNam
9f70: 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 30  e(pFK->aAction[0
9f80: 5d 29 2c 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54  ]),  /* ON DELET
9f90: 45 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  E */.           
9fa0: 20 20 20 20 20 20 20 20 22 4e 4f 4e 45 22 29 3b          "NONE");
9fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
9fc0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
9fd0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
9fe0: 31 2c 20 38 29 3b 0a 20 20 20 20 20 20 20 20 20  1, 8);.         
9ff0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 2b 2b 69   }.          ++i
a000: 3b 0a 20 20 20 20 20 20 20 20 20 20 70 46 4b 20  ;.          pFK 
a010: 3d 20 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d  = pFK->pNextFrom
a020: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
a030: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
a040: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
a050: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
a060: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
a070: 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  Y) */..#ifndef S
a080: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
a090: 47 4e 5f 4b 45 59 0a 23 69 66 6e 64 65 66 20 53  GN_KEY.#ifndef S
a0a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
a0b0: 45 52 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ER.  case PragTy
a0c0: 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48  p_FOREIGN_KEY_CH
a0d0: 45 43 4b 3a 20 7b 0a 20 20 20 20 46 4b 65 79 20  ECK: {.    FKey 
a0e0: 2a 70 46 4b 3b 20 20 20 20 20 20 20 20 20 20 20  *pFK;           
a0f0: 20 20 2f 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b    /* A foreign k
a100: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  ey constraint */
a110: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
a120: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
a130: 68 69 6c 64 20 74 61 62 6c 65 20 63 6f 6e 74 61  hild table conta
a140: 69 6e 20 22 52 45 46 45 52 45 4e 43 45 53 22 20  in "REFERENCES" 
a150: 6b 65 79 77 6f 72 64 20 2a 2f 0a 20 20 20 20 54  keyword */.    T
a160: 61 62 6c 65 20 2a 70 50 61 72 65 6e 74 3b 20 20  able *pParent;  
a170: 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20        /* Parent 
a180: 74 61 62 6c 65 20 74 68 61 74 20 63 68 69 6c 64  table that child
a190: 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20   points to */.  
a1a0: 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20    Index *pIdx;  
a1b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
a1c0: 78 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  x in the parent 
a1d0: 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
a1e0: 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
a1f0: 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
a200: 74 65 72 3a 20 20 46 6f 72 65 69 67 6e 20 6b 65  ter:  Foreign ke
a210: 79 20 6e 75 6d 62 65 72 20 66 6f 72 20 70 54 61  y number for pTa
a220: 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6a 3b 20  b */.    int j; 
a230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a240: 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a  /* Loop counter:
a250: 20 20 46 69 65 6c 64 20 6f 66 20 74 68 65 20 66    Field of the f
a260: 6f 72 65 69 67 6e 20 6b 65 79 20 2a 2f 0a 20 20  oreign key */.  
a270: 20 20 48 61 73 68 45 6c 65 6d 20 2a 6b 3b 20 20    HashElem *k;  
a280: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
a290: 20 63 6f 75 6e 74 65 72 3a 20 20 4e 65 78 74 20   counter:  Next 
a2a0: 74 61 62 6c 65 20 69 6e 20 73 63 68 65 6d 61 20  table in schema 
a2b0: 2a 2f 0a 20 20 20 20 69 6e 74 20 78 3b 20 20 20  */.    int x;   
a2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a2d0: 20 72 65 73 75 6c 74 20 76 61 72 69 61 62 6c 65   result variable
a2e0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
a2f0: 65 73 75 6c 74 3b 20 20 20 20 20 20 20 20 20 2f  esult;         /
a300: 2a 20 33 20 72 65 67 69 73 74 65 72 73 20 74 6f  * 3 registers to
a310: 20 68 6f 6c 64 20 61 20 72 65 73 75 6c 74 20 72   hold a result r
a320: 6f 77 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ow */.    int re
a330: 67 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20  gKey;           
a340: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
a350: 68 6f 6c 64 20 6b 65 79 20 66 6f 72 20 63 68 65  hold key for che
a360: 63 6b 69 6e 67 20 74 68 65 20 46 4b 20 2a 2f 0a  cking the FK */.
a370: 20 20 20 20 69 6e 74 20 72 65 67 52 6f 77 3b 20      int regRow; 
a380: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
a390: 67 69 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20  gisters to hold 
a3a0: 61 20 72 6f 77 20 66 72 6f 6d 20 70 54 61 62 20  a row from pTab 
a3b0: 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 54  */.    int addrT
a3c0: 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  op;           /*
a3d0: 20 54 6f 70 20 6f 66 20 61 20 6c 6f 6f 70 20 63   Top of a loop c
a3e0: 68 65 63 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20  hecking foreign 
a3f0: 6b 65 79 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20  keys */.    int 
a400: 61 64 64 72 4f 6b 3b 20 20 20 20 20 20 20 20 20  addrOk;         
a410: 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20     /* Jump here 
a420: 69 66 20 74 68 65 20 6b 65 79 20 69 73 20 4f 4b  if the key is OK
a430: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43   */.    int *aiC
a440: 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ols;           /
a450: 2a 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65 6e  * child to paren
a460: 74 20 63 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e 67  t column mapping
a470: 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63   */.    static c
a480: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c  onst char *azCol
a490: 5b 5d 20 3d 20 7b 20 22 74 61 62 6c 65 22 2c 20  [] = { "table", 
a4a0: 22 72 6f 77 69 64 22 2c 20 22 70 61 72 65 6e 74  "rowid", "parent
a4b0: 22 2c 20 22 66 6b 69 64 22 20 7d 3b 0a 0a 20 20  ", "fkid" };..  
a4c0: 20 20 72 65 67 52 65 73 75 6c 74 20 3d 20 70 50    regResult = pP
a4d0: 61 72 73 65 2d 3e 6e 4d 65 6d 2b 31 3b 0a 20 20  arse->nMem+1;.  
a4e0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b    pParse->nMem +
a4f0: 3d 20 34 3b 0a 20 20 20 20 72 65 67 4b 65 79 20  = 4;.    regKey 
a500: 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  = ++pParse->nMem
a510: 3b 0a 20 20 20 20 72 65 67 52 6f 77 20 3d 20 2b  ;.    regRow = +
a520: 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20  +pParse->nMem;. 
a530: 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65     v = sqlite3Ge
a540: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20  tVdbe(pParse);. 
a550: 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e     setAllColumnN
a560: 61 6d 65 73 28 76 2c 20 34 2c 20 61 7a 43 6f 6c  ames(v, 4, azCol
a570: 29 3b 20 61 73 73 65 72 74 28 20 34 3d 3d 41 72  ); assert( 4==Ar
a580: 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29  raySize(azCol) )
a590: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64  ;.    sqlite3Cod
a5a0: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
a5b0: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
a5c0: 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68 46 69  k = sqliteHashFi
a5d0: 72 73 74 28 26 64 62 2d 3e 61 44 62 5b 69 44 62  rst(&db->aDb[iDb
a5e0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61  ].pSchema->tblHa
a5f0: 73 68 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  sh);.    while( 
a600: 6b 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a  k ){.      if( z
a610: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 20  Right ){.       
a620: 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 4c   pTab = sqlite3L
a630: 6f 63 61 74 65 54 61 62 6c 65 28 70 50 61 72 73  ocateTable(pPars
a640: 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c 20 7a 44  e, 0, zRight, zD
a650: 62 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20  b);.        k = 
a660: 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
a670: 20 20 20 20 20 20 20 20 70 54 61 62 20 3d 20 28          pTab = (
a680: 54 61 62 6c 65 2a 29 73 71 6c 69 74 65 48 61 73  Table*)sqliteHas
a690: 68 44 61 74 61 28 6b 29 3b 0a 20 20 20 20 20 20  hData(k);.      
a6a0: 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68    k = sqliteHash
a6b0: 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20 20 20 7d  Next(k);.      }
a6c0: 0a 20 20 20 20 20 20 69 66 28 20 70 54 61 62 3d  .      if( pTab=
a6d0: 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70 46 4b 65  =0 || pTab->pFKe
a6e0: 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  y==0 ) continue;
a6f0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 61  .      sqlite3Ta
a700: 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20  bleLock(pParse, 
a710: 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c  iDb, pTab->tnum,
a720: 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29   0, pTab->zName)
a730: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 54 61 62  ;.      if( pTab
a740: 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e 70 50  ->nCol+regRow>pP
a750: 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20 70 50 61  arse->nMem ) pPa
a760: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54 61 62  rse->nMem = pTab
a770: 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52 6f 77 3b  ->nCol + regRow;
a780: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70  .      sqlite3Op
a790: 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20  enTable(pParse, 
a7a0: 30 2c 20 69 44 62 2c 20 70 54 61 62 2c 20 4f 50  0, iDb, pTab, OP
a7b0: 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20  _OpenRead);.    
a7c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61    sqlite3VdbeLoa
a7d0: 64 53 74 72 69 6e 67 28 76 2c 20 72 65 67 52 65  dString(v, regRe
a7e0: 73 75 6c 74 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d  sult, pTab->zNam
a7f0: 65 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  e);.      for(i=
a800: 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b  1, pFK=pTab->pFK
a810: 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46  ey; pFK; i++, pF
a820: 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d  K=pFK->pNextFrom
a830: 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61 72 65  ){.        pPare
a840: 6e 74 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  nt = sqlite3Find
a850: 54 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e 7a  Table(db, pFK->z
a860: 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20  To, zDb);.      
a870: 20 20 69 66 28 20 70 50 61 72 65 6e 74 3d 3d 30    if( pParent==0
a880: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
a890: 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20       pIdx = 0;. 
a8a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 61         sqlite3Ta
a8b0: 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20  bleLock(pParse, 
a8c0: 69 44 62 2c 20 70 50 61 72 65 6e 74 2d 3e 74 6e  iDb, pParent->tn
a8d0: 75 6d 2c 20 30 2c 20 70 50 61 72 65 6e 74 2d 3e  um, 0, pParent->
a8e0: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20  zName);.        
a8f0: 78 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  x = sqlite3FkLoc
a900: 61 74 65 49 6e 64 65 78 28 70 50 61 72 73 65 2c  ateIndex(pParse,
a910: 20 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26   pParent, pFK, &
a920: 70 49 64 78 2c 20 30 29 3b 0a 20 20 20 20 20 20  pIdx, 0);.      
a930: 20 20 69 66 28 20 78 3d 3d 30 20 29 7b 0a 20 20    if( x==0 ){.  
a940: 20 20 20 20 20 20 20 20 69 66 28 20 70 49 64 78          if( pIdx
a950: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
a960: 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61     sqlite3OpenTa
a970: 62 6c 65 28 70 50 61 72 73 65 2c 20 69 2c 20 69  ble(pParse, i, i
a980: 44 62 2c 20 70 50 61 72 65 6e 74 2c 20 4f 50 5f  Db, pParent, OP_
a990: 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20 20  OpenRead);.     
a9a0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
a9b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
a9c0: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
a9d0: 4f 70 65 6e 52 65 61 64 2c 20 69 2c 20 70 49 64  OpenRead, i, pId
a9e0: 78 2d 3e 74 6e 75 6d 2c 20 69 44 62 29 3b 0a 20  x->tnum, iDb);. 
a9f0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
aa00: 65 33 56 64 62 65 53 65 74 50 34 4b 65 79 49 6e  e3VdbeSetP4KeyIn
aa10: 66 6f 28 70 50 61 72 73 65 2c 20 70 49 64 78 29  fo(pParse, pIdx)
aa20: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
aa30: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
aa40: 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20         k = 0;.  
aa50: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
aa60: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
aa70: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
aa80: 50 61 72 73 65 2d 3e 6e 45 72 72 3e 30 20 7c 7c  Parse->nErr>0 ||
aa90: 20 70 46 4b 3d 3d 30 20 29 3b 0a 20 20 20 20 20   pFK==0 );.     
aaa0: 20 69 66 28 20 70 46 4b 20 29 20 62 72 65 61 6b   if( pFK ) break
aab0: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50 61 72  ;.      if( pPar
aac0: 73 65 2d 3e 6e 54 61 62 3c 69 20 29 20 70 50 61  se->nTab<i ) pPa
aad0: 72 73 65 2d 3e 6e 54 61 62 20 3d 20 69 3b 0a 20  rse->nTab = i;. 
aae0: 20 20 20 20 20 61 64 64 72 54 6f 70 20 3d 20 73       addrTop = s
aaf0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
ab00: 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20 30  (v, OP_Rewind, 0
ab10: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
ab20: 76 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  v);.      for(i=
ab30: 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b  1, pFK=pTab->pFK
ab40: 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46  ey; pFK; i++, pF
ab50: 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d  K=pFK->pNextFrom
ab60: 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61 72 65  ){.        pPare
ab70: 6e 74 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  nt = sqlite3Find
ab80: 54 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e 7a  Table(db, pFK->z
ab90: 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20  To, zDb);.      
aba0: 20 20 70 49 64 78 20 3d 20 30 3b 0a 20 20 20 20    pIdx = 0;.    
abb0: 20 20 20 20 61 69 43 6f 6c 73 20 3d 20 30 3b 0a      aiCols = 0;.
abc0: 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72          if( pPar
abd0: 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ent ){.         
abe0: 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f   x = sqlite3FkLo
abf0: 63 61 74 65 49 6e 64 65 78 28 70 50 61 72 73 65  cateIndex(pParse
ac00: 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20  , pParent, pFK, 
ac10: 26 70 49 64 78 2c 20 26 61 69 43 6f 6c 73 29 3b  &pIdx, &aiCols);
ac20: 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
ac30: 74 28 20 78 3d 3d 30 20 29 3b 0a 20 20 20 20 20  t( x==0 );.     
ac40: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61 64 64     }.        add
ac50: 72 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56 64 62  rOk = sqlite3Vdb
ac60: 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20  eMakeLabel(v);. 
ac70: 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65         if( pPare
ac80: 6e 74 20 26 26 20 70 49 64 78 3d 3d 30 20 29 7b  nt && pIdx==0 ){
ac90: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69  .          int i
aca0: 4b 65 79 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c 5b  Key = pFK->aCol[
acb0: 30 5d 2e 69 46 72 6f 6d 3b 0a 20 20 20 20 20 20  0].iFrom;.      
acc0: 20 20 20 20 61 73 73 65 72 74 28 20 69 4b 65 79      assert( iKey
acd0: 3e 3d 30 20 26 26 20 69 4b 65 79 3c 70 54 61 62  >=0 && iKey<pTab
ace0: 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20  ->nCol );.      
acf0: 20 20 20 20 69 66 28 20 69 4b 65 79 21 3d 70 54      if( iKey!=pT
ad00: 61 62 2d 3e 69 50 4b 65 79 20 29 7b 0a 20 20 20  ab->iPKey ){.   
ad10: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
ad20: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
ad30: 5f 43 6f 6c 75 6d 6e 2c 20 30 2c 20 69 4b 65 79  _Column, 0, iKey
ad40: 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20  , regRow);.     
ad50: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f         sqlite3Co
ad60: 6c 75 6d 6e 44 65 66 61 75 6c 74 28 76 2c 20 70  lumnDefault(v, p
ad70: 54 61 62 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f  Tab, iKey, regRo
ad80: 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  w);.            
ad90: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
ada0: 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20  2(v, OP_IsNull, 
adb0: 72 65 67 52 6f 77 2c 20 61 64 64 72 4f 6b 29 3b  regRow, addrOk);
adc0: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
add0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
ade0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
adf0: 76 2c 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 2c  v, OP_MustBeInt,
ae00: 20 72 65 67 52 6f 77 2c 20 0a 20 20 20 20 20 20   regRow, .      
ae10: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
ae20: 56 64 62 65 43 75 72 72 65 6e 74 41 64 64 72 28  VdbeCurrentAddr(
ae30: 76 29 2b 33 29 3b 20 56 64 62 65 43 6f 76 65 72  v)+3); VdbeCover
ae40: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
ae50: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
ae60: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ae70: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77  AddOp2(v, OP_Row
ae80: 69 64 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 0a  id, 0, regRow);.
ae90: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
aea0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
aeb0: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4e 6f  eAddOp3(v, OP_No
aec0: 74 45 78 69 73 74 73 2c 20 69 2c 20 30 2c 20 72  tExists, i, 0, r
aed0: 65 67 52 6f 77 29 3b 20 56 64 62 65 43 6f 76 65  egRow); VdbeCove
aee0: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
aef0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 47 6f     sqlite3VdbeGo
af00: 74 6f 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20  to(v, addrOk);. 
af10: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
af20: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
af30: 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65  sqlite3VdbeCurre
af40: 6e 74 41 64 64 72 28 76 29 2d 32 29 3b 0a 20 20  ntAddr(v)-2);.  
af50: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
af60: 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20         for(j=0; 
af70: 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b  j<pFK->nCol; j++
af80: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ){.            s
af90: 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
afa0: 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76  tColumnOfTable(v
afb0: 2c 20 70 54 61 62 2c 20 30 2c 0a 20 20 20 20 20  , pTab, 0,.     
afc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afd0: 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3f 20         aiCols ? 
afe0: 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70 46 4b 2d  aiCols[j] : pFK-
aff0: 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 2c 20  >aCol[j].iFrom, 
b000: 72 65 67 52 6f 77 2b 6a 29 3b 0a 20 20 20 20 20  regRow+j);.     
b010: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b020: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
b030: 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2b 6a 2c  sNull, regRow+j,
b040: 20 61 64 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f   addrOk); VdbeCo
b050: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
b060: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
b070: 20 69 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a   if( pParent ){.
b080: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
b090: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
b0a0: 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 2c 20   OP_MakeRecord, 
b0b0: 72 65 67 52 6f 77 2c 20 70 46 4b 2d 3e 6e 43 6f  regRow, pFK->nCo
b0c0: 6c 2c 20 72 65 67 4b 65 79 2c 0a 20 20 20 20 20  l, regKey,.     
b0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0e0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
b0f0: 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72  IndexAffinityStr
b100: 28 64 62 2c 70 49 64 78 29 2c 20 70 46 4b 2d 3e  (db,pIdx), pFK->
b110: 6e 43 6f 6c 29 3b 0a 20 20 20 20 20 20 20 20 20  nCol);.         
b120: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
b130: 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f  dOp4Int(v, OP_Fo
b140: 75 6e 64 2c 20 69 2c 20 61 64 64 72 4f 6b 2c 20  und, i, addrOk, 
b150: 72 65 67 4b 65 79 2c 20 30 29 3b 0a 20 20 20 20  regKey, 0);.    
b160: 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 76 65          VdbeCove
b170: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
b180: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
b190: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b1a0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
b1b0: 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 65 73 75  owid, 0, regResu
b1c0: 6c 74 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 73  lt+1);.        s
b1d0: 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c  qlite3VdbeMultiL
b1e0: 6f 61 64 28 76 2c 20 72 65 67 52 65 73 75 6c 74  oad(v, regResult
b1f0: 2b 32 2c 20 22 73 69 22 2c 20 70 46 4b 2d 3e 7a  +2, "si", pFK->z
b200: 54 6f 2c 20 69 2d 31 29 3b 0a 20 20 20 20 20 20  To, i-1);.      
b210: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
b220: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
b230: 52 6f 77 2c 20 72 65 67 52 65 73 75 6c 74 2c 20  Row, regResult, 
b240: 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  4);.        sqli
b250: 74 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61  te3VdbeResolveLa
b260: 62 65 6c 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a  bel(v, addrOk);.
b270: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44          sqlite3D
b280: 62 46 72 65 65 28 64 62 2c 20 61 69 43 6f 6c 73  bFree(db, aiCols
b290: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
b2a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
b2b0: 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 30  p2(v, OP_Next, 0
b2c0: 2c 20 61 64 64 72 54 6f 70 2b 31 29 3b 20 56 64  , addrTop+1); Vd
b2d0: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
b2e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b2f0: 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
b300: 54 6f 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  Top);.    }.  }.
b310: 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20    break;.#endif 
b320: 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
b330: 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
b340: 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64   */.#endif /* !d
b350: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
b360: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20  IT_FOREIGN_KEY) 
b370: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  */..#ifndef NDEB
b380: 55 47 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  UG.  case PragTy
b390: 70 5f 50 41 52 53 45 52 5f 54 52 41 43 45 3a 20  p_PARSER_TRACE: 
b3a0: 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
b3b0: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71   ){.      if( sq
b3c0: 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
b3d0: 7a 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20  zRight, 0) ){.  
b3e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 72        sqlite3Par
b3f0: 73 65 72 54 72 61 63 65 28 73 74 64 6f 75 74 2c  serTrace(stdout,
b400: 20 22 70 61 72 73 65 72 3a 20 22 29 3b 0a 20 20   "parser: ");.  
b410: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
b420: 20 20 20 73 71 6c 69 74 65 33 50 61 72 73 65 72     sqlite3Parser
b430: 54 72 61 63 65 28 30 2c 20 30 29 3b 0a 20 20 20  Trace(0, 0);.   
b440: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
b450: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a   break;.#endif..
b460: 20 20 2f 2a 20 52 65 69 6e 73 74 61 6c 6c 20 74    /* Reinstall t
b470: 68 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42  he LIKE and GLOB
b480: 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65   functions.  The
b490: 20 76 61 72 69 61 6e 74 20 6f 66 20 4c 49 4b 45   variant of LIKE
b4a0: 0a 20 20 2a 2a 20 75 73 65 64 20 77 69 6c 6c 20  .  ** used will 
b4b0: 62 65 20 63 61 73 65 20 73 65 6e 73 69 74 69 76  be case sensitiv
b4c0: 65 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69  e or not dependi
b4d0: 6e 67 20 6f 6e 20 74 68 65 20 52 48 53 2e 0a 20  ng on the RHS.. 
b4e0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
b4f0: 79 70 5f 43 41 53 45 5f 53 45 4e 53 49 54 49 56  yp_CASE_SENSITIV
b500: 45 5f 4c 49 4b 45 3a 20 7b 0a 20 20 20 20 69 66  E_LIKE: {.    if
b510: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
b520: 20 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65    sqlite3Registe
b530: 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 64  rLikeFunctions(d
b540: 62 2c 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  b, sqlite3GetBoo
b550: 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 29  lean(zRight, 0))
b560: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
b570: 65 61 6b 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  eak;..#ifndef SQ
b580: 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43  LITE_INTEGRITY_C
b590: 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 0a 23  HECK_ERROR_MAX.#
b5a0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
b5b0: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45  NTEGRITY_CHECK_E
b5c0: 52 52 4f 52 5f 4d 41 58 20 31 30 30 0a 23 65 6e  RROR_MAX 100.#en
b5d0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
b5e0: 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
b5f0: 54 59 5f 43 48 45 43 4b 0a 20 20 2f 2a 20 50 72  TY_CHECK.  /* Pr
b600: 61 67 6d 61 20 22 71 75 69 63 6b 5f 63 68 65 63  agma "quick_chec
b610: 6b 22 20 69 73 20 72 65 64 75 63 65 64 20 76 65  k" is reduced ve
b620: 72 73 69 6f 6e 20 6f 66 20 0a 20 20 2a 2a 20 69  rsion of .  ** i
b630: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 64  ntegrity_check d
b640: 65 73 69 67 6e 65 64 20 74 6f 20 64 65 74 65 63  esigned to detec
b650: 74 20 6d 6f 73 74 20 64 61 74 61 62 61 73 65 20  t most database 
b660: 63 6f 72 72 75 70 74 69 6f 6e 0a 20 20 2a 2a 20  corruption.  ** 
b670: 77 69 74 68 6f 75 74 20 6d 6f 73 74 20 6f 66 20  without most of 
b680: 74 68 65 20 6f 76 65 72 68 65 61 64 20 6f 66 20  the overhead of 
b690: 61 20 66 75 6c 6c 20 69 6e 74 65 67 72 69 74 79  a full integrity
b6a0: 2d 63 68 65 63 6b 2e 0a 20 20 2a 2f 0a 20 20 63  -check..  */.  c
b6b0: 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 54 45  ase PragTyp_INTE
b6c0: 47 52 49 54 59 5f 43 48 45 43 4b 3a 20 7b 0a 20  GRITY_CHECK: {. 
b6d0: 20 20 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64 64     int i, j, add
b6e0: 72 2c 20 6d 78 45 72 72 3b 0a 0a 20 20 20 20 69  r, mxErr;..    i
b6f0: 6e 74 20 69 73 51 75 69 63 6b 20 3d 20 28 73 71  nt isQuick = (sq
b700: 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65  lite3Tolower(zLe
b710: 66 74 5b 30 5d 29 3d 3d 27 71 27 29 3b 0a 0a 20  ft[0])=='q');.. 
b720: 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 52 41     /* If the PRA
b730: 47 4d 41 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20  GMA command was 
b740: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 50 52 41  of the form "PRA
b750: 47 4d 41 20 3c 64 62 3e 2e 69 6e 74 65 67 72 69  GMA <db>.integri
b760: 74 79 5f 63 68 65 63 6b 22 2c 0a 20 20 20 20 2a  ty_check",.    *
b770: 2a 20 74 68 65 6e 20 69 44 62 20 69 73 20 73 65  * then iDb is se
b780: 74 20 74 6f 20 74 68 65 20 69 6e 64 65 78 20 6f  t to the index o
b790: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
b7a0: 64 65 6e 74 69 66 69 65 64 20 62 79 20 3c 64 62  dentified by <db
b7b0: 3e 2e 0a 20 20 20 20 2a 2a 20 49 6e 20 74 68 69  >..    ** In thi
b7c0: 73 20 63 61 73 65 2c 20 74 68 65 20 69 6e 74 65  s case, the inte
b7d0: 67 72 69 74 79 20 6f 66 20 64 61 74 61 62 61 73  grity of databas
b7e0: 65 20 69 44 62 20 6f 6e 6c 79 20 69 73 20 76 65  e iDb only is ve
b7f0: 72 69 66 69 65 64 20 62 79 0a 20 20 20 20 2a 2a  rified by.    **
b800: 20 74 68 65 20 56 44 42 45 20 63 72 65 61 74 65   the VDBE create
b810: 64 20 62 65 6c 6f 77 2e 0a 20 20 20 20 2a 2a 0a  d below..    **.
b820: 20 20 20 20 2a 2a 20 4f 74 68 65 72 77 69 73 65      ** Otherwise
b830: 2c 20 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64  , if the command
b840: 20 77 61 73 20 73 69 6d 70 6c 79 20 22 50 52 41   was simply "PRA
b850: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
b860: 65 63 6b 22 20 28 6f 72 0a 20 20 20 20 2a 2a 20  eck" (or.    ** 
b870: 22 50 52 41 47 4d 41 20 71 75 69 63 6b 5f 63 68  "PRAGMA quick_ch
b880: 65 63 6b 22 29 2c 20 74 68 65 6e 20 69 44 62 20  eck"), then iDb 
b890: 69 73 20 73 65 74 20 74 6f 20 30 2e 20 49 6e 20  is set to 0. In 
b8a0: 74 68 69 73 20 63 61 73 65 2c 20 73 65 74 20 69  this case, set i
b8b0: 44 62 0a 20 20 20 20 2a 2a 20 74 6f 20 2d 31 20  Db.    ** to -1 
b8c0: 68 65 72 65 2c 20 74 6f 20 69 6e 64 69 63 61 74  here, to indicat
b8d0: 65 20 74 68 61 74 20 74 68 65 20 56 44 42 45 20  e that the VDBE 
b8e0: 73 68 6f 75 6c 64 20 76 65 72 69 66 79 20 74 68  should verify th
b8f0: 65 20 69 6e 74 65 67 72 69 74 79 0a 20 20 20 20  e integrity.    
b900: 2a 2a 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68  ** of all attach
b910: 65 64 20 64 61 74 61 62 61 73 65 73 2e 20 20 2a  ed databases.  *
b920: 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  /.    assert( iD
b930: 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  b>=0 );.    asse
b940: 72 74 28 20 69 44 62 3d 3d 30 20 7c 7c 20 70 49  rt( iDb==0 || pI
b950: 64 32 2d 3e 7a 20 29 3b 0a 20 20 20 20 69 66 28  d2->z );.    if(
b960: 20 70 49 64 32 2d 3e 7a 3d 3d 30 20 29 20 69 44   pId2->z==0 ) iD
b970: 62 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20  b = -1;..    /* 
b980: 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 56  Initialize the V
b990: 44 42 45 20 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  DBE program */. 
b9a0: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
b9b0: 3d 20 36 3b 0a 20 20 20 20 73 65 74 4f 6e 65 43  = 6;.    setOneC
b9c0: 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 22 69 6e  olumnName(v, "in
b9d0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 29 3b  tegrity_check");
b9e0: 0a 0a 20 20 20 20 2f 2a 20 53 65 74 20 74 68 65  ..    /* Set the
b9f0: 20 6d 61 78 69 6d 75 6d 20 65 72 72 6f 72 20 63   maximum error c
ba00: 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 6d 78 45 72  ount */.    mxEr
ba10: 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47  r = SQLITE_INTEG
ba20: 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52  RITY_CHECK_ERROR
ba30: 5f 4d 41 58 3b 0a 20 20 20 20 69 66 28 20 7a 52  _MAX;.    if( zR
ba40: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71  ight ){.      sq
ba50: 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52  lite3GetInt32(zR
ba60: 69 67 68 74 2c 20 26 6d 78 45 72 72 29 3b 0a 20  ight, &mxErr);. 
ba70: 20 20 20 20 20 69 66 28 20 6d 78 45 72 72 3c 3d       if( mxErr<=
ba80: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 78 45  0 ){.        mxE
ba90: 72 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rr = SQLITE_INTE
baa0: 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f  GRITY_CHECK_ERRO
bab0: 52 5f 4d 41 58 3b 0a 20 20 20 20 20 20 7d 0a 20  R_MAX;.      }. 
bac0: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
bad0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
bae0: 5f 49 6e 74 65 67 65 72 2c 20 6d 78 45 72 72 2c  _Integer, mxErr,
baf0: 20 31 29 3b 20 20 2f 2a 20 72 65 67 5b 31 5d 20   1);  /* reg[1] 
bb00: 68 6f 6c 64 73 20 65 72 72 6f 72 73 20 6c 65 66  holds errors lef
bb10: 74 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 44 6f 20  t */..    /* Do 
bb20: 61 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68 65  an integrity che
bb30: 63 6b 20 6f 6e 20 65 61 63 68 20 64 61 74 61 62  ck on each datab
bb40: 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20  ase file */.    
bb50: 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e  for(i=0; i<db->n
bb60: 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Db; i++){.      
bb70: 48 61 73 68 45 6c 65 6d 20 2a 78 3b 0a 20 20 20  HashElem *x;.   
bb80: 20 20 20 48 61 73 68 20 2a 70 54 62 6c 73 3b 0a     Hash *pTbls;.
bb90: 20 20 20 20 20 20 69 6e 74 20 63 6e 74 20 3d 20        int cnt = 
bba0: 30 3b 0a 0a 20 20 20 20 20 20 69 66 28 20 4f 4d  0;..      if( OM
bbb0: 49 54 5f 54 45 4d 50 44 42 20 26 26 20 69 3d 3d  IT_TEMPDB && i==
bbc0: 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  1 ) continue;.  
bbd0: 20 20 20 20 69 66 28 20 69 44 62 3e 3d 30 20 26      if( iDb>=0 &
bbe0: 26 20 69 21 3d 69 44 62 20 29 20 63 6f 6e 74 69  & i!=iDb ) conti
bbf0: 6e 75 65 3b 0a 0a 20 20 20 20 20 20 73 71 6c 69  nue;..      sqli
bc00: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
bc10: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 29 3b 0a  ema(pParse, i);.
bc20: 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c        addr = sql
bc30: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
bc40: 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20  , OP_IfPos, 1); 
bc50: 2f 2a 20 48 61 6c 74 20 69 66 20 6f 75 74 20 6f  /* Halt if out o
bc60: 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20  f errors */.    
bc70: 20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76    VdbeCoverage(v
bc80: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
bc90: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
bca0: 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20  _Halt, 0, 0);.  
bcb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
bcc0: 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29  umpHere(v, addr)
bcd0: 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 61  ;..      /* Do a
bce0: 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  n integrity chec
bcf0: 6b 20 6f 66 20 74 68 65 20 42 2d 54 72 65 65 0a  k of the B-Tree.
bd00: 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a        **.      *
bd10: 2a 20 42 65 67 69 6e 20 62 79 20 66 69 6c 6c 69  * Begin by filli
bd20: 6e 67 20 72 65 67 69 73 74 65 72 73 20 32 2c 20  ng registers 2, 
bd30: 33 2c 20 2e 2e 2e 20 77 69 74 68 20 74 68 65 20  3, ... with the 
bd40: 72 6f 6f 74 20 70 61 67 65 73 20 6e 75 6d 62 65  root pages numbe
bd50: 72 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72 20  rs.      ** for 
bd60: 61 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64 20 69  all tables and i
bd70: 6e 64 69 63 65 73 20 69 6e 20 74 68 65 20 64 61  ndices in the da
bd80: 74 61 62 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f  tabase..      */
bd90: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
bda0: 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
bdb0: 78 48 65 6c 64 28 64 62 2c 20 69 2c 20 30 29 20  xHeld(db, i, 0) 
bdc0: 29 3b 0a 20 20 20 20 20 20 70 54 62 6c 73 20 3d  );.      pTbls =
bdd0: 20 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63   &db->aDb[i].pSc
bde0: 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 3b 0a 20  hema->tblHash;. 
bdf0: 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74       for(x=sqlit
be00: 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c 73  eHashFirst(pTbls
be10: 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48 61  ); x; x=sqliteHa
be20: 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20  shNext(x)){.    
be30: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20      Table *pTab 
be40: 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  = sqliteHashData
be50: 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64  (x);.        Ind
be60: 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 20 20  ex *pIdx;.      
be70: 20 20 69 66 28 20 48 61 73 52 6f 77 69 64 28 70    if( HasRowid(p
be80: 54 61 62 29 20 29 7b 0a 20 20 20 20 20 20 20 20  Tab) ){.        
be90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
bea0: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
beb0: 72 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 32  r, pTab->tnum, 2
bec0: 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20  +cnt);.         
bed0: 20 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76 2c   VdbeComment((v,
bee0: 20 22 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61   "%s", pTab->zNa
bef0: 6d 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20  me));.          
bf00: 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  cnt++;.        }
bf10: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 49 64  .        for(pId
bf20: 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20  x=pTab->pIndex; 
bf30: 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d  pIdx; pIdx=pIdx-
bf40: 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20  >pNext){.       
bf50: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
bf60: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
bf70: 65 72 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20  er, pIdx->tnum, 
bf80: 32 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  2+cnt);.        
bf90: 20 20 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76    VdbeComment((v
bfa0: 2c 20 22 25 73 22 2c 20 70 49 64 78 2d 3e 7a 4e  , "%s", pIdx->zN
bfb0: 61 6d 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20  ame));.         
bfc0: 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20   cnt++;.        
bfd0: 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  }.      }..     
bfe0: 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 73 75   /* Make sure su
bff0: 66 66 69 63 69 65 6e 74 20 6e 75 6d 62 65 72 20  fficient number 
c000: 6f 66 20 72 65 67 69 73 74 65 72 73 20 68 61 76  of registers hav
c010: 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64  e been allocated
c020: 20 2a 2f 0a 20 20 20 20 20 20 70 50 61 72 73 65   */.      pParse
c030: 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 20 70 50  ->nMem = MAX( pP
c040: 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 63 6e 74 2b  arse->nMem, cnt+
c050: 38 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  8 );..      /* D
c060: 6f 20 74 68 65 20 62 2d 74 72 65 65 20 69 6e 74  o the b-tree int
c070: 65 67 72 69 74 79 20 63 68 65 63 6b 73 20 2a 2f  egrity checks */
c080: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c090: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 49  beAddOp3(v, OP_I
c0a0: 6e 74 65 67 72 69 74 79 43 6b 2c 20 32 2c 20 63  ntegrityCk, 2, c
c0b0: 6e 74 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71  nt, 1);.      sq
c0c0: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
c0d0: 35 28 76 2c 20 28 75 38 29 69 29 3b 0a 20 20 20  5(v, (u8)i);.   
c0e0: 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65     addr = sqlite
c0f0: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
c100: 50 5f 49 73 4e 75 6c 6c 2c 20 32 29 3b 20 56 64  P_IsNull, 2); Vd
c110: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
c120: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c130: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
c140: 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20  ing8, 0, 3, 0,. 
c150: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4d          sqlite3M
c160: 50 72 69 6e 74 66 28 64 62 2c 20 22 2a 2a 2a 20  Printf(db, "*** 
c170: 69 6e 20 64 61 74 61 62 61 73 65 20 25 73 20 2a  in database %s *
c180: 2a 2a 5c 6e 22 2c 20 64 62 2d 3e 61 44 62 5b 69  **\n", db->aDb[i
c190: 5d 2e 7a 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20  ].zName),.      
c1a0: 20 20 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a     P4_DYNAMIC);.
c1b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c1c0: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 6f  eAddOp3(v, OP_Mo
c1d0: 76 65 2c 20 32 2c 20 34 2c 20 31 29 3b 0a 20 20  ve, 2, 4, 1);.  
c1e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c1f0: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63  ddOp3(v, OP_Conc
c200: 61 74 2c 20 34 2c 20 33 2c 20 32 29 3b 0a 20 20  at, 4, 3, 2);.  
c210: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c220: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
c230: 6c 74 52 6f 77 2c 20 32 2c 20 31 29 3b 0a 20 20  ltRow, 2, 1);.  
c240: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
c250: 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29  umpHere(v, addr)
c260: 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65  ;..      /* Make
c270: 20 73 75 72 65 20 61 6c 6c 20 74 68 65 20 69 6e   sure all the in
c280: 64 69 63 65 73 20 61 72 65 20 63 6f 6e 73 74 72  dices are constr
c290: 75 63 74 65 64 20 63 6f 72 72 65 63 74 6c 79 2e  ucted correctly.
c2a0: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
c2b0: 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68  for(x=sqliteHash
c2c0: 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 20  First(pTbls); x 
c2d0: 26 26 20 21 69 73 51 75 69 63 6b 3b 20 78 3d 73  && !isQuick; x=s
c2e0: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78 29  qliteHashNext(x)
c2f0: 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65  ){.        Table
c300: 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48   *pTab = sqliteH
c310: 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20  ashData(x);.    
c320: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 2c      Index *pIdx,
c330: 20 2a 70 50 6b 3b 0a 20 20 20 20 20 20 20 20 49   *pPk;.        I
c340: 6e 64 65 78 20 2a 70 50 72 69 6f 72 20 3d 20 30  ndex *pPrior = 0
c350: 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 6f  ;.        int lo
c360: 6f 70 54 6f 70 3b 0a 20 20 20 20 20 20 20 20 69  opTop;.        i
c370: 6e 74 20 69 44 61 74 61 43 75 72 2c 20 69 49 64  nt iDataCur, iId
c380: 78 43 75 72 3b 0a 20 20 20 20 20 20 20 20 69 6e  xCur;.        in
c390: 74 20 72 31 20 3d 20 2d 31 3b 0a 0a 20 20 20 20  t r1 = -1;..    
c3a0: 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e 70 49      if( pTab->pI
c3b0: 6e 64 65 78 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  ndex==0 ) contin
c3c0: 75 65 3b 0a 20 20 20 20 20 20 20 20 70 50 6b 20  ue;.        pPk 
c3d0: 3d 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  = HasRowid(pTab)
c3e0: 20 3f 20 30 20 3a 20 73 71 6c 69 74 65 33 50 72   ? 0 : sqlite3Pr
c3f0: 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54  imaryKeyIndex(pT
c400: 61 62 29 3b 0a 20 20 20 20 20 20 20 20 61 64 64  ab);.        add
c410: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
c420: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f  ddOp1(v, OP_IfPo
c430: 73 2c 20 31 29 3b 20 20 2f 2a 20 53 74 6f 70 20  s, 1);  /* Stop 
c440: 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73  if out of errors
c450: 20 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65   */.        Vdbe
c460: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
c470: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c480: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c  AddOp2(v, OP_Hal
c490: 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  t, 0, 0);.      
c4a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
c4b0: 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a  pHere(v, addr);.
c4c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
c4d0: 78 70 72 43 61 63 68 65 43 6c 65 61 72 28 70 50  xprCacheClear(pP
c4e0: 61 72 73 65 29 3b 0a 20 20 20 20 20 20 20 20 73  arse);.        s
c4f0: 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41  qlite3OpenTableA
c500: 6e 64 49 6e 64 69 63 65 73 28 70 50 61 72 73 65  ndIndices(pParse
c510: 2c 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52  , pTab, OP_OpenR
c520: 65 61 64 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  ead, 0,.        
c530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c540: 20 20 20 20 20 20 20 20 20 20 20 31 2c 20 30 2c             1, 0,
c550: 20 26 69 44 61 74 61 43 75 72 2c 20 26 69 49 64   &iDataCur, &iId
c560: 78 43 75 72 29 3b 0a 20 20 20 20 20 20 20 20 73  xCur);.        s
c570: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c580: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
c590: 30 2c 20 37 29 3b 0a 20 20 20 20 20 20 20 20 66  0, 7);.        f
c5a0: 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61  or(j=0, pIdx=pTa
c5b0: 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
c5c0: 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
c5d0: 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  t, j++){.       
c5e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c5f0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
c600: 65 72 2c 20 30 2c 20 38 2b 6a 29 3b 20 2f 2a 20  er, 0, 8+j); /* 
c610: 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20 63 6f  index entries co
c620: 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 20 20 20  unter */.       
c630: 20 7d 0a 20 20 20 20 20 20 20 20 70 50 61 72 73   }.        pPars
c640: 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 70 50  e->nMem = MAX(pP
c650: 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 38 2b 6a 29  arse->nMem, 8+j)
c660: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
c670: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c680: 50 5f 52 65 77 69 6e 64 2c 20 69 44 61 74 61 43  P_Rewind, iDataC
c690: 75 72 2c 20 30 29 3b 20 56 64 62 65 43 6f 76 65  ur, 0); VdbeCove
c6a0: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
c6b0: 20 6c 6f 6f 70 54 6f 70 20 3d 20 73 71 6c 69 74   loopTop = sqlit
c6c0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c6d0: 4f 50 5f 41 64 64 49 6d 6d 2c 20 37 2c 20 31 29  OP_AddImm, 7, 1)
c6e0: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 56 65 72  ;.        /* Ver
c6f0: 69 66 79 20 74 68 61 74 20 61 6c 6c 20 4e 4f 54  ify that all NOT
c700: 20 4e 55 4c 4c 20 63 6f 6c 75 6d 6e 73 20 72 65   NULL columns re
c710: 61 6c 6c 79 20 61 72 65 20 4e 4f 54 20 4e 55 4c  ally are NOT NUL
c720: 4c 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72  L */.        for
c730: 28 6a 3d 30 3b 20 6a 3c 70 54 61 62 2d 3e 6e 43  (j=0; j<pTab->nC
c740: 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; j++){.      
c750: 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a      char *zErr;.
c760: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d            int jm
c770: 70 32 2c 20 6a 6d 70 33 3b 0a 20 20 20 20 20 20  p2, jmp3;.      
c780: 20 20 20 20 69 66 28 20 6a 3d 3d 70 54 61 62 2d      if( j==pTab-
c790: 3e 69 50 4b 65 79 20 29 20 63 6f 6e 74 69 6e 75  >iPKey ) continu
c7a0: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  e;.          if(
c7b0: 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 6e   pTab->aCol[j].n
c7c0: 6f 74 4e 75 6c 6c 3d 3d 30 20 29 20 63 6f 6e 74  otNull==0 ) cont
c7d0: 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  inue;.          
c7e0: 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
c7f0: 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
c800: 76 2c 20 70 54 61 62 2c 20 69 44 61 74 61 43 75  v, pTab, iDataCu
c810: 72 2c 20 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20  r, j, 3);.      
c820: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
c830: 68 61 6e 67 65 50 35 28 76 2c 20 4f 50 46 4c 41  hangeP5(v, OPFLA
c840: 47 5f 54 59 50 45 4f 46 41 52 47 29 3b 0a 20 20  G_TYPEOFARG);.  
c850: 20 20 20 20 20 20 20 20 6a 6d 70 32 20 3d 20 73          jmp2 = s
c860: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
c870: 28 76 2c 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 2c 20  (v, OP_NotNull, 
c880: 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  3); VdbeCoverage
c890: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  (v);.          s
c8a0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c8b0: 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31  (v, OP_AddImm, 1
c8c0: 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d  , -1); /* Decrem
c8d0: 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20  ent error limit 
c8e0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 45 72  */.          zEr
c8f0: 72 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e  r = sqlite3MPrin
c900: 74 66 28 64 62 2c 20 22 4e 55 4c 4c 20 76 61 6c  tf(db, "NULL val
c910: 75 65 20 69 6e 20 25 73 2e 25 73 22 2c 20 70 54  ue in %s.%s", pT
c920: 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20  ab->zName,.     
c930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c940: 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e 61           pTab->a
c950: 43 6f 6c 5b 6a 5d 2e 7a 4e 61 6d 65 29 3b 0a 20  Col[j].zName);. 
c960: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
c970: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
c980: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20  _String8, 0, 3, 
c990: 30 2c 20 7a 45 72 72 2c 20 50 34 5f 44 59 4e 41  0, zErr, P4_DYNA
c9a0: 4d 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20  MIC);.          
c9b0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c9c0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
c9d0: 77 2c 20 33 2c 20 31 29 3b 0a 20 20 20 20 20 20  w, 3, 1);.      
c9e0: 20 20 20 20 6a 6d 70 33 20 3d 20 73 71 6c 69 74      jmp3 = sqlit
c9f0: 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
ca00: 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 56 64  OP_IfPos, 1); Vd
ca10: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
ca20: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
ca30: 56 64 62 65 41 64 64 4f 70 30 28 76 2c 20 4f 50  VdbeAddOp0(v, OP
ca40: 5f 48 61 6c 74 29 3b 0a 20 20 20 20 20 20 20 20  _Halt);.        
ca50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
ca60: 70 48 65 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a  pHere(v, jmp2);.
ca70: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
ca80: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
ca90: 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20   jmp3);.        
caa0: 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c  }.        /* Val
cab0: 69 64 61 74 65 20 69 6e 64 65 78 20 65 6e 74 72  idate index entr
cac0: 69 65 73 20 66 6f 72 20 74 68 65 20 63 75 72 72  ies for the curr
cad0: 65 6e 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20  ent row */.     
cae0: 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78     for(j=0, pIdx
caf0: 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
cb00: 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
cb10: 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20  pNext, j++){.   
cb20: 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c         int jmp2,
cb30: 20 6a 6d 70 33 2c 20 6a 6d 70 34 2c 20 6a 6d 70   jmp3, jmp4, jmp
cb40: 35 3b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  5;.          int
cb50: 20 63 6b 55 6e 69 71 20 3d 20 73 71 6c 69 74 65   ckUniq = sqlite
cb60: 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76  3VdbeMakeLabel(v
cb70: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
cb80: 20 70 50 6b 3d 3d 70 49 64 78 20 29 20 63 6f 6e   pPk==pIdx ) con
cb90: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20  tinue;.         
cba0: 20 72 31 20 3d 20 73 71 6c 69 74 65 33 47 65 6e   r1 = sqlite3Gen
cbb0: 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 70 50  erateIndexKey(pP
cbc0: 61 72 73 65 2c 20 70 49 64 78 2c 20 69 44 61 74  arse, pIdx, iDat
cbd0: 61 43 75 72 2c 20 30 2c 20 30 2c 20 26 6a 6d 70  aCur, 0, 0, &jmp
cbe0: 33 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  3,.             
cbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc00: 20 20 20 20 20 20 20 20 20 20 70 50 72 69 6f 72            pPrior
cc10: 2c 20 72 31 29 3b 0a 20 20 20 20 20 20 20 20 20  , r1);.         
cc20: 20 70 50 72 69 6f 72 20 3d 20 70 49 64 78 3b 0a   pPrior = pIdx;.
cc30: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
cc40: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
cc50: 50 5f 41 64 64 49 6d 6d 2c 20 38 2b 6a 2c 20 31  P_AddImm, 8+j, 1
cc60: 29 3b 20 20 2f 2a 20 69 6e 63 72 65 6d 65 6e 74  );  /* increment
cc70: 20 65 6e 74 72 79 20 63 6f 75 6e 74 20 2a 2f 0a   entry count */.
cc80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 65 72            /* Ver
cc90: 69 66 79 20 74 68 61 74 20 61 6e 20 69 6e 64 65  ify that an inde
cca0: 78 20 65 6e 74 72 79 20 65 78 69 73 74 73 20 66  x entry exists f
ccb0: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
ccc0: 61 62 6c 65 20 72 6f 77 20 2a 2f 0a 20 20 20 20  able row */.    
ccd0: 20 20 20 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c        jmp2 = sql
cce0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e  ite3VdbeAddOp4In
ccf0: 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69  t(v, OP_Found, i
cd00: 49 64 78 43 75 72 2b 6a 2c 20 63 6b 55 6e 69 71  IdxCur+j, ckUniq
cd10: 2c 20 72 31 2c 0a 20 20 20 20 20 20 20 20 20 20  , r1,.          
cd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd30: 20 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78              pIdx
cd40: 2d 3e 6e 43 6f 6c 75 6d 6e 29 3b 20 56 64 62 65  ->nColumn); Vdbe
cd50: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
cd60: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cd70: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
cd80: 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f  ddImm, 1, -1); /
cd90: 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f  * Decrement erro
cda0: 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20  r limit */.     
cdb0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cdc0: 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 33 2c  LoadString(v, 3,
cdd0: 20 22 72 6f 77 20 22 29 3b 0a 20 20 20 20 20 20   "row ");.      
cde0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
cdf0: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63  ddOp3(v, OP_Conc
ce00: 61 74 2c 20 37 2c 20 33 2c 20 33 29 3b 0a 20 20  at, 7, 3, 3);.  
ce10: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
ce20: 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c  dbeLoadString(v,
ce30: 20 34 2c 20 22 20 6d 69 73 73 69 6e 67 20 66 72   4, " missing fr
ce40: 6f 6d 20 69 6e 64 65 78 20 22 29 3b 0a 20 20 20  om index ");.   
ce50: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ce60: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43  beAddOp3(v, OP_C
ce70: 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33 29 3b  oncat, 4, 3, 3);
ce80: 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 35 20  .          jmp5 
ce90: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61  = sqlite3VdbeLoa
cea0: 64 53 74 72 69 6e 67 28 76 2c 20 34 2c 20 70 49  dString(v, 4, pI
ceb0: 64 78 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  dx->zName);.    
cec0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ced0: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f  eAddOp3(v, OP_Co
cee0: 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a  ncat, 4, 3, 3);.
cef0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
cf00: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
cf10: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33 2c 20  P_ResultRow, 3, 
cf20: 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d  1);.          jm
cf30: 70 34 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  p4 = sqlite3Vdbe
cf40: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50  AddOp1(v, OP_IfP
cf50: 6f 73 2c 20 31 29 3b 20 56 64 62 65 43 6f 76 65  os, 1); VdbeCove
cf60: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
cf70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
cf80: 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29  dOp0(v, OP_Halt)
cf90: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
cfa0: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
cfb0: 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20  v, jmp2);.      
cfc0: 20 20 20 20 2f 2a 20 46 6f 72 20 55 4e 49 51 55      /* For UNIQU
cfd0: 45 20 69 6e 64 65 78 65 73 2c 20 76 65 72 69 66  E indexes, verif
cfe0: 79 20 74 68 61 74 20 6f 6e 6c 79 20 6f 6e 65 20  y that only one 
cff0: 65 6e 74 72 79 20 65 78 69 73 74 73 20 77 69 74  entry exists wit
d000: 68 20 74 68 65 0a 20 20 20 20 20 20 20 20 20 20  h the.          
d010: 2a 2a 20 63 75 72 72 65 6e 74 20 6b 65 79 2e 20  ** current key. 
d020: 20 54 68 65 20 65 6e 74 72 79 20 69 73 20 75 6e   The entry is un
d030: 69 71 75 65 20 69 66 20 28 31 29 20 61 6e 79 20  ique if (1) any 
d040: 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 0a 20  column is NULL. 
d050: 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 72 20 28           ** or (
d060: 32 29 20 74 68 65 20 6e 65 78 74 20 65 6e 74 72  2) the next entr
d070: 79 20 68 61 73 20 61 20 64 69 66 66 65 72 65 6e  y has a differen
d080: 74 20 6b 65 79 20 2a 2f 0a 20 20 20 20 20 20 20  t key */.       
d090: 20 20 20 69 66 28 20 49 73 55 6e 69 71 75 65 49     if( IsUniqueI
d0a0: 6e 64 65 78 28 70 49 64 78 29 20 29 7b 0a 20 20  ndex(pIdx) ){.  
d0b0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 75 6e            int un
d0c0: 69 71 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56 64  iqOk = sqlite3Vd
d0d0: 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a  beMakeLabel(v);.
d0e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
d0f0: 6a 6d 70 36 3b 0a 20 20 20 20 20 20 20 20 20 20  jmp6;.          
d100: 20 20 69 6e 74 20 6b 6b 3b 0a 20 20 20 20 20 20    int kk;.      
d110: 20 20 20 20 20 20 66 6f 72 28 6b 6b 3d 30 3b 20        for(kk=0; 
d120: 6b 6b 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c  kk<pIdx->nKeyCol
d130: 3b 20 6b 6b 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; kk++){.       
d140: 20 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6c 20         int iCol 
d150: 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e  = pIdx->aiColumn
d160: 5b 6b 6b 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  [kk];.          
d170: 20 20 20 20 61 73 73 65 72 74 28 20 69 43 6f 6c      assert( iCol
d180: 21 3d 58 4e 5f 52 4f 57 49 44 20 26 26 20 69 43  !=XN_ROWID && iC
d190: 6f 6c 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b  ol<pTab->nCol );
d1a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
d1b0: 66 28 20 69 43 6f 6c 3e 3d 30 20 26 26 20 70 54  f( iCol>=0 && pT
d1c0: 61 62 2d 3e 61 43 6f 6c 5b 69 43 6f 6c 5d 2e 6e  ab->aCol[iCol].n
d1d0: 6f 74 4e 75 6c 6c 20 29 20 63 6f 6e 74 69 6e 75  otNull ) continu
d1e0: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e;.             
d1f0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d200: 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c  p2(v, OP_IsNull,
d210: 20 72 31 2b 6b 6b 2c 20 75 6e 69 71 4f 6b 29 3b   r1+kk, uniqOk);
d220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56  .              V
d230: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
d240: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
d250: 20 20 20 20 20 20 20 20 20 20 6a 6d 70 36 20 3d            jmp6 =
d260: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d270: 70 31 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 69  p1(v, OP_Next, i
d280: 49 64 78 43 75 72 2b 6a 29 3b 20 56 64 62 65 43  IdxCur+j); VdbeC
d290: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
d2a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d2b0: 64 62 65 47 6f 74 6f 28 76 2c 20 75 6e 69 71 4f  dbeGoto(v, uniqO
d2c0: 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  k);.            
d2d0: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
d2e0: 65 72 65 28 76 2c 20 6a 6d 70 36 29 3b 0a 20 20  ere(v, jmp6);.  
d2f0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d300: 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76  3VdbeAddOp4Int(v
d310: 2c 20 4f 50 5f 49 64 78 47 54 2c 20 69 49 64 78  , OP_IdxGT, iIdx
d320: 43 75 72 2b 6a 2c 20 75 6e 69 71 4f 6b 2c 20 72  Cur+j, uniqOk, r
d330: 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  1,.             
d340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d350: 20 20 20 20 70 49 64 78 2d 3e 6e 4b 65 79 43 6f      pIdx->nKeyCo
d360: 6c 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  l); VdbeCoverage
d370: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (v);.           
d380: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d390: 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  p2(v, OP_AddImm,
d3a0: 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72   1, -1); /* Decr
d3b0: 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69  ement error limi
d3c0: 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  t */.           
d3d0: 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64   sqlite3VdbeLoad
d3e0: 53 74 72 69 6e 67 28 76 2c 20 33 2c 20 22 6e 6f  String(v, 3, "no
d3f0: 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72 79 20 69  n-unique entry i
d400: 6e 20 69 6e 64 65 78 20 22 29 3b 0a 20 20 20 20  n index ");.    
d410: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d420: 64 62 65 47 6f 74 6f 28 76 2c 20 6a 6d 70 35 29  dbeGoto(v, jmp5)
d430: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
d440: 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c 76 65  lite3VdbeResolve
d450: 4c 61 62 65 6c 28 76 2c 20 75 6e 69 71 4f 6b 29  Label(v, uniqOk)
d460: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
d470: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d480: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a  dbeJumpHere(v, j
d490: 6d 70 34 29 3b 0a 20 20 20 20 20 20 20 20 20 20  mp4);.          
d4a0: 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61  sqlite3ResolvePa
d4b0: 72 74 49 64 78 4c 61 62 65 6c 28 70 50 61 72 73  rtIdxLabel(pPars
d4c0: 65 2c 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20  e, jmp3);.      
d4d0: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69    }.        sqli
d4e0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d4f0: 20 4f 50 5f 4e 65 78 74 2c 20 69 44 61 74 61 43   OP_Next, iDataC
d500: 75 72 2c 20 6c 6f 6f 70 54 6f 70 29 3b 20 56 64  ur, loopTop); Vd
d510: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
d520: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d530: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6c 6f  beJumpHere(v, lo
d540: 6f 70 54 6f 70 2d 31 29 3b 0a 23 69 66 6e 64 65  opTop-1);.#ifnde
d550: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  f SQLITE_OMIT_BT
d560: 52 45 45 43 4f 55 4e 54 0a 20 20 20 20 20 20 20  REECOUNT.       
d570: 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64   sqlite3VdbeLoad
d580: 53 74 72 69 6e 67 28 76 2c 20 32 2c 20 22 77 72  String(v, 2, "wr
d590: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
d5a0: 20 69 6e 20 69 6e 64 65 78 20 22 29 3b 0a 20 20   in index ");.  
d5b0: 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70        for(j=0, p
d5c0: 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
d5d0: 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64  ; pIdx; pIdx=pId
d5e0: 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a  x->pNext, j++){.
d5f0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50            if( pP
d600: 6b 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e  k==pIdx ) contin
d610: 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 61 64  ue;.          ad
d620: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
d630: 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 3b 0a  CurrentAddr(v);.
d640: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d650: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d660: 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72  P_IfPos, 1, addr
d670: 2b 32 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  +2); VdbeCoverag
d680: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
d690: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d6a0: 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c  2(v, OP_Halt, 0,
d6b0: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   0);.          s
d6c0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
d6d0: 28 76 2c 20 4f 50 5f 43 6f 75 6e 74 2c 20 69 49  (v, OP_Count, iI
d6e0: 64 78 43 75 72 2b 6a 2c 20 33 29 3b 0a 20 20 20  dxCur+j, 3);.   
d6f0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d700: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 45  beAddOp3(v, OP_E
d710: 71 2c 20 38 2b 6a 2c 20 61 64 64 72 2b 38 2c 20  q, 8+j, addr+8, 
d720: 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  3); VdbeCoverage
d730: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  (v);.          s
d740: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
d750: 50 35 28 76 2c 20 53 51 4c 49 54 45 5f 4e 4f 54  P5(v, SQLITE_NOT
d760: 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20 20  NULL);.         
d770: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d780: 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  p2(v, OP_AddImm,
d790: 20 31 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20 20   1, -1);.       
d7a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f     sqlite3VdbeLo
d7b0: 61 64 53 74 72 69 6e 67 28 76 2c 20 33 2c 20 70  adString(v, 3, p
d7c0: 49 64 78 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20  Idx->zName);.   
d7d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d7e0: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43  beAddOp3(v, OP_C
d7f0: 6f 6e 63 61 74 2c 20 33 2c 20 32 2c 20 37 29 3b  oncat, 3, 2, 7);
d800: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d810: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d820: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 37 2c  OP_ResultRow, 7,
d830: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23   1);.        }.#
d840: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
d850: 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 20  OMIT_BTREECOUNT 
d860: 2a 2f 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20  */.      } .    
d870: 7d 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 73 74  }.    {.      st
d880: 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 69  atic const int i
d890: 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45 54  Ln = VDBE_OFFSET
d8a0: 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20  _LINENO(2);.    
d8b0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56    static const V
d8c0: 64 62 65 4f 70 4c 69 73 74 20 65 6e 64 43 6f 64  dbeOpList endCod
d8d0: 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20  e[] = {.        
d8e0: 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 20 20 20  { OP_AddImm,    
d8f0: 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30    1, 0,        0
d900: 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20  },    /* 0 */.  
d910: 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20        { OP_If,  
d920: 20 20 20 20 20 20 20 20 31 2c 20 34 2c 20 20 20          1, 4,   
d930: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31       0},    /* 1
d940: 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50   */.        { OP
d950: 5f 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c  _String8,     0,
d960: 20 33 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20   3,        0},  
d970: 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20    /* 2 */.      
d980: 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77    { OP_ResultRow
d990: 2c 20 20 20 33 2c 20 31 2c 20 20 20 20 20 20 20  ,   3, 1,       
d9a0: 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a 2f 0a   0},    /* 3 */.
d9b0: 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 56        };.      V
d9c0: 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 0a 20 20 20  dbeOp *aOp;..   
d9d0: 20 20 20 61 4f 70 20 3d 20 73 71 6c 69 74 65 33     aOp = sqlite3
d9e0: 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
d9f0: 20 41 72 72 61 79 53 69 7a 65 28 65 6e 64 43 6f   ArraySize(endCo
da00: 64 65 29 2c 20 65 6e 64 43 6f 64 65 2c 20 69 4c  de), endCode, iL
da10: 6e 29 3b 0a 20 20 20 20 20 20 69 66 28 20 61 4f  n);.      if( aO
da20: 70 20 29 7b 0a 20 20 20 20 20 20 20 20 61 4f 70  p ){.        aOp
da30: 5b 30 5d 2e 70 32 20 3d 20 2d 6d 78 45 72 72 3b  [0].p2 = -mxErr;
da40: 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 32 5d 2e  .        aOp[2].
da50: 70 34 74 79 70 65 20 3d 20 50 34 5f 53 54 41 54  p4type = P4_STAT
da60: 49 43 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b  IC;.        aOp[
da70: 32 5d 2e 70 34 2e 7a 20 3d 20 22 6f 6b 22 3b 0a  2].p4.z = "ok";.
da80: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
da90: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
daa0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
dab0: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
dac0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
dad0: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
dae0: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
daf0: 41 20 65 6e 63 6f 64 69 6e 67 0a 20 20 2a 2a 20  A encoding.  ** 
db00: 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e    PRAGMA encodin
db10: 67 20 3d 20 22 75 74 66 2d 38 22 7c 22 75 74 66  g = "utf-8"|"utf
db20: 2d 31 36 22 7c 22 75 74 66 2d 31 36 6c 65 22 7c  -16"|"utf-16le"|
db30: 22 75 74 66 2d 31 36 62 65 22 0a 20 20 2a 2a 0a  "utf-16be".  **.
db40: 20 20 2a 2a 20 49 6e 20 69 74 73 20 66 69 72 73    ** In its firs
db50: 74 20 66 6f 72 6d 2c 20 74 68 69 73 20 70 72 61  t form, this pra
db60: 67 6d 61 20 72 65 74 75 72 6e 73 20 74 68 65 20  gma returns the 
db70: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65 20  encoding of the 
db80: 6d 61 69 6e 0a 20 20 2a 2a 20 64 61 74 61 62 61  main.  ** databa
db90: 73 65 2e 20 49 66 20 74 68 65 20 64 61 74 61 62  se. If the datab
dba0: 61 73 65 20 69 73 20 6e 6f 74 20 69 6e 69 74 69  ase is not initi
dbb0: 61 6c 69 7a 65 64 2c 20 69 74 20 69 73 20 69 6e  alized, it is in
dbc0: 69 74 69 61 6c 69 7a 65 64 20 6e 6f 77 2e 0a 20  itialized now.. 
dbd0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 65 63   **.  ** The sec
dbe0: 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 69 73  ond form of this
dbf0: 20 70 72 61 67 6d 61 20 69 73 20 61 20 6e 6f 2d   pragma is a no-
dc00: 6f 70 20 69 66 20 74 68 65 20 6d 61 69 6e 20 64  op if the main d
dc10: 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20 20 2a  atabase file.  *
dc20: 2a 20 68 61 73 20 6e 6f 74 20 61 6c 72 65 61 64  * has not alread
dc30: 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  y been initializ
dc40: 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
dc50: 20 69 74 20 73 65 74 73 20 74 68 65 20 64 65 66   it sets the def
dc60: 61 75 6c 74 0a 20 20 2a 2a 20 65 6e 63 6f 64 69  ault.  ** encodi
dc70: 6e 67 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  ng that will be 
dc80: 75 73 65 64 20 66 6f 72 20 74 68 65 20 6d 61 69  used for the mai
dc90: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
dca0: 69 66 20 61 20 6e 65 77 20 66 69 6c 65 0a 20 20  if a new file.  
dcb0: 2a 2a 20 69 73 20 63 72 65 61 74 65 64 2e 20 49  ** is created. I
dcc0: 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6d 61  f an existing ma
dcd0: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
dce0: 20 69 73 20 6f 70 65 6e 65 64 2c 20 74 68 65 6e   is opened, then
dcf0: 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c   the.  ** defaul
dd00: 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  t text encoding 
dd10: 66 6f 72 20 74 68 65 20 65 78 69 73 74 69 6e 67  for the existing
dd20: 20 64 61 74 61 62 61 73 65 20 69 73 20 75 73 65   database is use
dd30: 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 6e  d..  ** .  ** In
dd40: 20 61 6c 6c 20 63 61 73 65 73 20 6e 65 77 20 64   all cases new d
dd50: 61 74 61 62 61 73 65 73 20 63 72 65 61 74 65 64  atabases created
dd60: 20 75 73 69 6e 67 20 74 68 65 20 41 54 54 41 43   using the ATTAC
dd70: 48 20 63 6f 6d 6d 61 6e 64 20 61 72 65 0a 20 20  H command are.  
dd80: 2a 2a 20 63 72 65 61 74 65 64 20 74 6f 20 75 73  ** created to us
dd90: 65 20 74 68 65 20 73 61 6d 65 20 64 65 66 61 75  e the same defau
dda0: 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  lt text encoding
ddb0: 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   as the main dat
ddc0: 61 62 61 73 65 2e 20 49 66 0a 20 20 2a 2a 20 74  abase. If.  ** t
ddd0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
dde0: 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 69 6e   has not been in
ddf0: 69 74 69 61 6c 69 7a 65 64 20 61 6e 64 2f 6f 72  itialized and/or
de00: 20 63 72 65 61 74 65 64 20 77 68 65 6e 20 41 54   created when AT
de10: 54 41 43 48 0a 20 20 2a 2a 20 69 73 20 65 78 65  TACH.  ** is exe
de20: 63 75 74 65 64 2c 20 74 68 69 73 20 69 73 20 64  cuted, this is d
de30: 6f 6e 65 20 62 65 66 6f 72 65 20 74 68 65 20 41  one before the A
de40: 54 54 41 43 48 20 6f 70 65 72 61 74 69 6f 6e 2e  TTACH operation.
de50: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 74 68  .  **.  ** In th
de60: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 74 68  e second form th
de70: 69 73 20 70 72 61 67 6d 61 20 73 65 74 73 20 74  is pragma sets t
de80: 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  he text encoding
de90: 20 74 6f 20 62 65 20 75 73 65 64 20 69 6e 0a 20   to be used in. 
dea0: 20 2a 2a 20 6e 65 77 20 64 61 74 61 62 61 73 65   ** new database
deb0: 20 66 69 6c 65 73 20 63 72 65 61 74 65 64 20 75   files created u
dec0: 73 69 6e 67 20 74 68 69 73 20 64 61 74 61 62 61  sing this databa
ded0: 73 65 20 68 61 6e 64 6c 65 2e 20 49 74 20 69 73  se handle. It is
dee0: 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75 73 65 66 75   only.  ** usefu
def0: 6c 20 69 66 20 69 6e 76 6f 6b 65 64 20 69 6d 6d  l if invoked imm
df00: 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20 74  ediately after t
df10: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
df20: 20 69 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50   i.  */.  case P
df30: 72 61 67 54 79 70 5f 45 4e 43 4f 44 49 4e 47 3a  ragTyp_ENCODING:
df40: 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f   {.    static co
df50: 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e 61  nst struct EncNa
df60: 6d 65 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20  me {.      char 
df70: 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 20 75 38  *zName;.      u8
df80: 20 65 6e 63 3b 0a 20 20 20 20 7d 20 65 6e 63 6e   enc;.    } encn
df90: 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  ames[] = {.     
dfa0: 20 7b 20 22 55 54 46 38 22 2c 20 20 20 20 20 53   { "UTF8",     S
dfb0: 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20 20  QLITE_UTF8      
dfc0: 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54    },.      { "UT
dfd0: 46 2d 38 22 2c 20 20 20 20 53 51 4c 49 54 45 5f  F-8",    SQLITE_
dfe0: 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c 20 20  UTF8        },  
dff0: 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65  /* Must be eleme
e000: 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20 20 20 20 20  nt [1] */.      
e010: 7b 20 22 55 54 46 2d 31 36 6c 65 22 2c 20 53 51  { "UTF-16le", SQ
e020: 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20 20  LITE_UTF16LE    
e030: 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20   },  /* Must be 
e040: 65 6c 65 6d 65 6e 74 20 5b 32 5d 20 2a 2f 0a 20  element [2] */. 
e050: 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 62 65       { "UTF-16be
e060: 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  ", SQLITE_UTF16B
e070: 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73  E     },  /* Mus
e080: 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 33 5d  t be element [3]
e090: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46   */.      { "UTF
e0a0: 31 36 6c 65 22 2c 20 20 53 51 4c 49 54 45 5f 55  16le",  SQLITE_U
e0b0: 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 0a 20 20  TF16LE     },.  
e0c0: 20 20 20 20 7b 20 22 55 54 46 31 36 62 65 22 2c      { "UTF16be",
e0d0: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45    SQLITE_UTF16BE
e0e0: 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
e0f0: 22 55 54 46 2d 31 36 22 2c 20 20 20 30 20 20 20  "UTF-16",   0   
e100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
e110: 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 31  , /* SQLITE_UTF1
e120: 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20 20 20  6NATIVE */.     
e130: 20 7b 20 22 55 54 46 31 36 22 2c 20 20 20 20 30   { "UTF16",    0
e140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e150: 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55    }, /* SQLITE_U
e160: 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20  TF16NATIVE */.  
e170: 20 20 20 20 7b 20 30 2c 20 30 20 7d 0a 20 20 20      { 0, 0 }.   
e180: 20 7d 3b 0a 20 20 20 20 63 6f 6e 73 74 20 73 74   };.    const st
e190: 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 2a 70 45  ruct EncName *pE
e1a0: 6e 63 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  nc;.    if( !zRi
e1b0: 67 68 74 20 29 7b 20 20 20 20 2f 2a 20 22 50 52  ght ){    /* "PR
e1c0: 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 22 20 2a  AGMA encoding" *
e1d0: 2f 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  /.      if( sqli
e1e0: 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 70 50  te3ReadSchema(pP
e1f0: 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61  arse) ) goto pra
e200: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 61  gma_out;.      a
e210: 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b  ssert( encnames[
e220: 53 51 4c 49 54 45 5f 55 54 46 38 5d 2e 65 6e 63  SQLITE_UTF8].enc
e230: 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b  ==SQLITE_UTF8 );
e240: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65  .      assert( e
e250: 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55  ncnames[SQLITE_U
e260: 54 46 31 36 4c 45 5d 2e 65 6e 63 3d 3d 53 51 4c  TF16LE].enc==SQL
e270: 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20  ITE_UTF16LE );. 
e280: 20 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63       assert( enc
e290: 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46  names[SQLITE_UTF
e2a0: 31 36 42 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54  16BE].enc==SQLIT
e2b0: 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20 20  E_UTF16BE );.   
e2c0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54     returnSingleT
e2d0: 65 78 74 28 76 2c 20 22 65 6e 63 6f 64 69 6e 67  ext(v, "encoding
e2e0: 22 2c 20 65 6e 63 6e 61 6d 65 73 5b 45 4e 43 28  ", encnames[ENC(
e2f0: 70 50 61 72 73 65 2d 3e 64 62 29 5d 2e 7a 4e 61  pParse->db)].zNa
e300: 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 20  me);.    }else{ 
e310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e320: 20 20 20 20 20 20 20 2f 2a 20 22 50 52 41 47 4d         /* "PRAGM
e330: 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 58 58 58  A encoding = XXX
e340: 22 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 4f 6e  " */.      /* On
e350: 6c 79 20 63 68 61 6e 67 65 20 74 68 65 20 76 61  ly change the va
e360: 6c 75 65 20 6f 66 20 73 71 6c 69 74 65 2e 65 6e  lue of sqlite.en
e370: 63 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  c if the databas
e380: 65 20 68 61 6e 64 6c 65 20 69 73 20 6e 6f 74 0a  e handle is not.
e390: 20 20 20 20 20 20 2a 2a 20 69 6e 69 74 69 61 6c        ** initial
e3a0: 69 7a 65 64 2e 20 49 66 20 74 68 65 20 6d 61 69  ized. If the mai
e3b0: 6e 20 64 61 74 61 62 61 73 65 20 65 78 69 73 74  n database exist
e3c0: 73 2c 20 74 68 65 20 6e 65 77 20 73 71 6c 69 74  s, the new sqlit
e3d0: 65 2e 65 6e 63 20 76 61 6c 75 65 0a 20 20 20 20  e.enc value.    
e3e0: 20 20 2a 2a 20 77 69 6c 6c 20 62 65 20 6f 76 65    ** will be ove
e3f0: 72 77 72 69 74 74 65 6e 20 77 68 65 6e 20 74 68  rwritten when th
e400: 65 20 73 63 68 65 6d 61 20 69 73 20 6e 65 78 74  e schema is next
e410: 20 6c 6f 61 64 65 64 2e 20 49 66 20 69 74 20 64   loaded. If it d
e420: 6f 65 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a  oes not.      **
e430: 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c   already exists,
e440: 20 69 74 20 77 69 6c 6c 20 62 65 20 63 72 65 61   it will be crea
e450: 74 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e  ted to use the n
e460: 65 77 20 65 6e 63 6f 64 69 6e 67 20 76 61 6c 75  ew encoding valu
e470: 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
e480: 20 20 69 66 28 20 0a 20 20 20 20 20 20 20 20 21    if( .        !
e490: 28 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64  (DbHasProperty(d
e4a0: 62 2c 20 30 2c 20 44 42 5f 53 63 68 65 6d 61 4c  b, 0, DB_SchemaL
e4b0: 6f 61 64 65 64 29 29 20 7c 7c 20 0a 20 20 20 20  oaded)) || .    
e4c0: 20 20 20 20 44 62 48 61 73 50 72 6f 70 65 72 74      DbHasPropert
e4d0: 79 28 64 62 2c 20 30 2c 20 44 42 5f 45 6d 70 74  y(db, 0, DB_Empt
e4e0: 79 29 20 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  y) .      ){.   
e4f0: 20 20 20 20 20 66 6f 72 28 70 45 6e 63 3d 26 65       for(pEnc=&e
e500: 6e 63 6e 61 6d 65 73 5b 30 5d 3b 20 70 45 6e 63  ncnames[0]; pEnc
e510: 2d 3e 7a 4e 61 6d 65 3b 20 70 45 6e 63 2b 2b 29  ->zName; pEnc++)
e520: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
e530: 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d  0==sqlite3StrICm
e540: 70 28 7a 52 69 67 68 74 2c 20 70 45 6e 63 2d 3e  p(zRight, pEnc->
e550: 7a 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20 20 20  zName) ){.      
e560: 20 20 20 20 20 20 53 43 48 45 4d 41 5f 45 4e 43        SCHEMA_ENC
e570: 28 64 62 29 20 3d 20 45 4e 43 28 64 62 29 20 3d  (db) = ENC(db) =
e580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e590: 20 70 45 6e 63 2d 3e 65 6e 63 20 3f 20 70 45 6e   pEnc->enc ? pEn
e5a0: 63 2d 3e 65 6e 63 20 3a 20 53 51 4c 49 54 45 5f  c->enc : SQLITE_
e5b0: 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 20  UTF16NATIVE;.   
e5c0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
e5d0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
e5e0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
e5f0: 28 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29  ( !pEnc->zName )
e600: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
e610: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
e620: 73 65 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64  se, "unsupported
e630: 20 65 6e 63 6f 64 69 6e 67 3a 20 25 73 22 2c 20   encoding: %s", 
e640: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 20  zRight);.       
e650: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
e660: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
e670: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
e680: 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69  MIT_UTF16 */..#i
e690: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
e6a0: 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  T_SCHEMA_VERSION
e6b0: 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20  _PRAGMAS.  /*.  
e6c0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
e6d0: 65 6d 61 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73  ema.]schema_vers
e6e0: 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ion.  **   PRAGM
e6f0: 41 20 5b 73 63 68 65 6d 61 2e 5d 73 63 68 65 6d  A [schema.]schem
e700: 61 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74  a_version = <int
e710: 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
e720: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
e730: 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 0a 20  .]user_version. 
e740: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63   **   PRAGMA [sc
e750: 68 65 6d 61 2e 5d 75 73 65 72 5f 76 65 72 73 69  hema.]user_versi
e760: 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20  on = <integer>. 
e770: 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   **.  **   PRAGM
e780: 41 20 5b 73 63 68 65 6d 61 2e 5d 66 72 65 65 6c  A [schema.]freel
e790: 69 73 74 5f 63 6f 75 6e 74 20 3d 20 3c 69 6e 74  ist_count = <int
e7a0: 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
e7b0: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
e7c0: 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64  .]application_id
e7d0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
e7e0: 73 63 68 65 6d 61 2e 5d 61 70 70 6c 69 63 61 74  schema.]applicat
e7f0: 69 6f 6e 5f 69 64 20 3d 20 3c 69 6e 74 65 67 65  ion_id = <intege
e800: 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  r>.  **.  ** The
e810: 20 70 72 61 67 6d 61 27 73 20 73 63 68 65 6d 61   pragma's schema
e820: 5f 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65  _version and use
e830: 72 5f 76 65 72 73 69 6f 6e 20 61 72 65 20 75 73  r_version are us
e840: 65 64 20 74 6f 20 73 65 74 20 6f 72 20 67 65 74  ed to set or get
e850: 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  .  ** the value 
e860: 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65  of the schema-ve
e870: 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 2d 76  rsion and user-v
e880: 65 72 73 69 6f 6e 2c 20 72 65 73 70 65 63 74 69  ersion, respecti
e890: 76 65 6c 79 2e 20 42 6f 74 68 0a 20 20 2a 2a 20  vely. Both.  ** 
e8a0: 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69  the schema-versi
e8b0: 6f 6e 20 61 6e 64 20 74 68 65 20 75 73 65 72 2d  on and the user-
e8c0: 76 65 72 73 69 6f 6e 20 61 72 65 20 33 32 2d 62  version are 32-b
e8d0: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
e8e0: 72 73 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69  rs.  ** stored i
e8f0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  n the database h
e900: 65 61 64 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  eader..  **.  **
e910: 20 54 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b   The schema-cook
e920: 69 65 20 69 73 20 75 73 75 61 6c 6c 79 20 6f 6e  ie is usually on
e930: 6c 79 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 69  ly manipulated i
e940: 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c  nternally by SQL
e950: 69 74 65 2e 20 49 74 0a 20 20 2a 2a 20 69 73 20  ite. It.  ** is 
e960: 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 53  incremented by S
e970: 51 4c 69 74 65 20 77 68 65 6e 65 76 65 72 20 74  QLite whenever t
e980: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
e990: 6d 61 20 69 73 20 6d 6f 64 69 66 69 65 64 20 28  ma is modified (
e9a0: 62 79 0a 20 20 2a 2a 20 63 72 65 61 74 69 6e 67  by.  ** creating
e9b0: 20 6f 72 20 64 72 6f 70 70 69 6e 67 20 61 20 74   or dropping a t
e9c0: 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 29 2e 20  able or index). 
e9d0: 54 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  The schema versi
e9e0: 6f 6e 20 69 73 20 75 73 65 64 20 62 79 0a 20 20  on is used by.  
e9f0: 2a 2a 20 53 51 4c 69 74 65 20 65 61 63 68 20 74  ** SQLite each t
ea00: 69 6d 65 20 61 20 71 75 65 72 79 20 69 73 20 65  ime a query is e
ea10: 78 65 63 75 74 65 64 20 74 6f 20 65 6e 73 75 72  xecuted to ensur
ea20: 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 72  e that the inter
ea30: 6e 61 6c 20 63 61 63 68 65 0a 20 20 2a 2a 20 6f  nal cache.  ** o
ea40: 66 20 74 68 65 20 73 63 68 65 6d 61 20 75 73 65  f the schema use
ea50: 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67  d when compiling
ea60: 20 74 68 65 20 53 51 4c 20 71 75 65 72 79 20 6d   the SQL query m
ea70: 61 74 63 68 65 73 20 74 68 65 20 73 63 68 65 6d  atches the schem
ea80: 61 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 64 61  a of.  ** the da
ea90: 74 61 62 61 73 65 20 61 67 61 69 6e 73 74 20 77  tabase against w
eaa0: 68 69 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65  hich the compile
eab0: 64 20 71 75 65 72 79 20 69 73 20 61 63 74 75 61  d query is actua
eac0: 6c 6c 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20  lly executed..  
ead0: 2a 2a 20 53 75 62 76 65 72 74 69 6e 67 20 74 68  ** Subverting th
eae0: 69 73 20 6d 65 63 68 61 6e 69 73 6d 20 62 79 20  is mechanism by 
eaf0: 75 73 69 6e 67 20 22 50 52 41 47 4d 41 20 73 63  using "PRAGMA sc
eb00: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 20 74 6f  hema_version" to
eb10: 20 6d 6f 64 69 66 79 0a 20 20 2a 2a 20 74 68 65   modify.  ** the
eb20: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
eb30: 69 73 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 64  is potentially d
eb40: 61 6e 67 65 72 6f 75 73 20 61 6e 64 20 6d 61 79  angerous and may
eb50: 20 6c 65 61 64 20 74 6f 20 70 72 6f 67 72 61 6d   lead to program
eb60: 0a 20 20 2a 2a 20 63 72 61 73 68 65 73 20 6f 72  .  ** crashes or
eb70: 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70   database corrup
eb80: 74 69 6f 6e 2e 20 55 73 65 20 77 69 74 68 20 63  tion. Use with c
eb90: 61 75 74 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20 2a  aution!.  **.  *
eba0: 2a 20 54 68 65 20 75 73 65 72 2d 76 65 72 73 69  * The user-versi
ebb0: 6f 6e 20 69 73 20 6e 6f 74 20 75 73 65 64 20 69  on is not used i
ebc0: 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c  nternally by SQL
ebd0: 69 74 65 2e 20 49 74 20 6d 61 79 20 62 65 20 75  ite. It may be u
ebe0: 73 65 64 20 62 79 0a 20 20 2a 2a 20 61 70 70 6c  sed by.  ** appl
ebf0: 69 63 61 74 69 6f 6e 73 20 66 6f 72 20 61 6e 79  ications for any
ec00: 20 70 75 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a 20   purpose..  */. 
ec10: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 48 45   case PragTyp_HE
ec20: 41 44 45 52 5f 56 41 4c 55 45 3a 20 7b 0a 20 20  ADER_VALUE: {.  
ec30: 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 20 3d 20    int iCookie = 
ec40: 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 3b 20 20  pPragma->iArg;  
ec50: 2f 2a 20 57 68 69 63 68 20 63 6f 6f 6b 69 65 20  /* Which cookie 
ec60: 74 6f 20 72 65 61 64 20 6f 72 20 77 72 69 74 65  to read or write
ec70: 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
ec80: 64 62 65 55 73 65 73 42 74 72 65 65 28 76 2c 20  dbeUsesBtree(v, 
ec90: 69 44 62 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  iDb);.    if( zR
eca0: 69 67 68 74 20 26 26 20 28 70 50 72 61 67 6d 61  ight && (pPragma
ecb0: 2d 3e 6d 50 72 61 67 46 6c 61 67 20 26 20 50 72  ->mPragFlag & Pr
ecc0: 61 67 46 6c 61 67 5f 52 65 61 64 4f 6e 6c 79 29  agFlag_ReadOnly)
ecd0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ==0 ){.      /* 
ece0: 57 72 69 74 65 20 74 68 65 20 73 70 65 63 69 66  Write the specif
ecf0: 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65  ied cookie value
ed00: 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63   */.      static
ed10: 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
ed20: 74 20 73 65 74 43 6f 6f 6b 69 65 5b 5d 20 3d 20  t setCookie[] = 
ed30: 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54  {.        { OP_T
ed40: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30  ransaction,    0
ed50: 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a  ,  1,  0},    /*
ed60: 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   0 */.        { 
ed70: 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20  OP_SetCookie,   
ed80: 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20     0,  0,  0},  
ed90: 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20    /* 1 */.      
eda0: 7d 3b 0a 20 20 20 20 20 20 56 64 62 65 4f 70 20  };.      VdbeOp 
edb0: 2a 61 4f 70 3b 0a 20 20 20 20 20 20 73 71 6c 69  *aOp;.      sqli
edc0: 74 65 33 56 64 62 65 56 65 72 69 66 79 4e 6f 4d  te3VdbeVerifyNoM
edd0: 61 6c 6c 6f 63 52 65 71 75 69 72 65 64 28 76 2c  allocRequired(v,
ede0: 20 41 72 72 61 79 53 69 7a 65 28 73 65 74 43 6f   ArraySize(setCo
edf0: 6f 6b 69 65 29 29 3b 0a 20 20 20 20 20 20 61 4f  okie));.      aO
ee00: 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  p = sqlite3VdbeA
ee10: 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
ee20: 79 53 69 7a 65 28 73 65 74 43 6f 6f 6b 69 65 29  ySize(setCookie)
ee30: 2c 20 73 65 74 43 6f 6f 6b 69 65 2c 20 30 29 3b  , setCookie, 0);
ee40: 0a 20 20 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f  .      if( ONLY_
ee50: 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  IF_REALLOC_STRES
ee60: 53 28 61 4f 70 3d 3d 30 29 20 29 20 62 72 65 61  S(aOp==0) ) brea
ee70: 6b 3b 0a 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e  k;.      aOp[0].
ee80: 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20  p1 = iDb;.      
ee90: 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44 62 3b  aOp[1].p1 = iDb;
eea0: 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70 32  .      aOp[1].p2
eeb0: 20 3d 20 69 43 6f 6f 6b 69 65 3b 0a 20 20 20 20   = iCookie;.    
eec0: 20 20 61 4f 70 5b 31 5d 2e 70 33 20 3d 20 73 71    aOp[1].p3 = sq
eed0: 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
eee0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
eef0: 20 20 20 20 2f 2a 20 52 65 61 64 20 74 68 65 20      /* Read the 
ef00: 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65  specified cookie
ef10: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20   value */.      
ef20: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
ef30: 65 4f 70 4c 69 73 74 20 72 65 61 64 43 6f 6f 6b  eOpList readCook
ef40: 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20  ie[] = {.       
ef50: 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f   { OP_Transactio
ef60: 6e 2c 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30  n,     0,  0,  0
ef70: 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20  },    /* 0 */.  
ef80: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43        { OP_ReadC
ef90: 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20  ookie,      0,  
efa0: 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20  1,  0},    /* 1 
efb0: 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  */.        { OP_
efc0: 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 20 20 20  ResultRow,      
efd0: 20 31 2c 20 20 31 2c 20 20 30 7d 0a 20 20 20 20   1,  1,  0}.    
efe0: 20 20 7d 3b 0a 20 20 20 20 20 20 56 64 62 65 4f    };.      VdbeO
eff0: 70 20 2a 61 4f 70 3b 0a 20 20 20 20 20 20 73 71  p *aOp;.      sq
f000: 6c 69 74 65 33 56 64 62 65 56 65 72 69 66 79 4e  lite3VdbeVerifyN
f010: 6f 4d 61 6c 6c 6f 63 52 65 71 75 69 72 65 64 28  oMallocRequired(
f020: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 72 65 61  v, ArraySize(rea
f030: 64 43 6f 6f 6b 69 65 29 29 3b 0a 20 20 20 20 20  dCookie));.     
f040: 20 61 4f 70 20 3d 20 73 71 6c 69 74 65 33 56 64   aOp = sqlite3Vd
f050: 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
f060: 72 72 61 79 53 69 7a 65 28 72 65 61 64 43 6f 6f  rraySize(readCoo
f070: 6b 69 65 29 2c 72 65 61 64 43 6f 6f 6b 69 65 2c  kie),readCookie,
f080: 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 4f 4e  0);.      if( ON
f090: 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54  LY_IF_REALLOC_ST
f0a0: 52 45 53 53 28 61 4f 70 3d 3d 30 29 20 29 20 62  RESS(aOp==0) ) b
f0b0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 61 4f 70 5b  reak;.      aOp[
f0c0: 30 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20  0].p1 = iDb;.   
f0d0: 20 20 20 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69     aOp[1].p1 = i
f0e0: 44 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d  Db;.      aOp[1]
f0f0: 2e 70 33 20 3d 20 69 43 6f 6f 6b 69 65 3b 0a 20  .p3 = iCookie;. 
f100: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f110: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
f120: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
f130: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
f140: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
f150: 2c 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f  , zLeft, SQLITE_
f160: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20  TRANSIENT);.    
f170: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  }.  }.  break;.#
f180: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
f190: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
f1a0: 49 4f 4e 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  ION_PRAGMAS */..
f1b0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
f1c0: 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f  MIT_COMPILEOPTIO
f1d0: 4e 5f 44 49 41 47 53 0a 20 20 2f 2a 0a 20 20 2a  N_DIAGS.  /*.  *
f1e0: 2a 20 20 20 50 52 41 47 4d 41 20 63 6f 6d 70 69  *   PRAGMA compi
f1f0: 6c 65 5f 6f 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a  le_options.  **.
f200: 20 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20    ** Return the 
f210: 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d  names of all com
f220: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
f230: 73 20 75 73 65 64 20 69 6e 20 74 68 69 73 20 62  s used in this b
f240: 75 69 6c 64 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f  uild,.  ** one o
f250: 70 74 69 6f 6e 20 70 65 72 20 72 6f 77 2e 0a 20  ption per row.. 
f260: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
f270: 79 70 5f 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  yp_COMPILE_OPTIO
f280: 4e 53 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 20  NS: {.    int i 
f290: 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  = 0;.    const c
f2a0: 68 61 72 20 2a 7a 4f 70 74 3b 0a 20 20 20 20 70  har *zOpt;.    p
f2b0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b  Parse->nMem = 1;
f2c0: 0a 20 20 20 20 73 65 74 4f 6e 65 43 6f 6c 75 6d  .    setOneColum
f2d0: 6e 4e 61 6d 65 28 76 2c 20 22 63 6f 6d 70 69 6c  nName(v, "compil
f2e0: 65 5f 6f 70 74 69 6f 6e 22 29 3b 0a 20 20 20 20  e_option");.    
f2f0: 77 68 69 6c 65 28 20 28 7a 4f 70 74 20 3d 20 73  while( (zOpt = s
f300: 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70  qlite3_compileop
f310: 74 69 6f 6e 5f 67 65 74 28 69 2b 2b 29 29 21 3d  tion_get(i++))!=
f320: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
f330: 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67  e3VdbeLoadString
f340: 28 76 2c 20 31 2c 20 7a 4f 70 74 29 3b 0a 20 20  (v, 1, zOpt);.  
f350: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
f360: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
f370: 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20  ltRow, 1, 1);.  
f380: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
f390: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
f3a0: 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
f3b0: 54 49 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a 23  TION_DIAGS */..#
f3c0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
f3d0: 49 54 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a  IT_WAL.  /*.  **
f3e0: 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d     PRAGMA [schem
f3f0: 61 2e 5d 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e  a.]wal_checkpoin
f400: 74 20 3d 20 70 61 73 73 69 76 65 7c 66 75 6c 6c  t = passive|full
f410: 7c 72 65 73 74 61 72 74 7c 74 72 75 6e 63 61 74  |restart|truncat
f420: 65 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 68 65 63  e.  **.  ** Chec
f430: 6b 70 6f 69 6e 74 20 74 68 65 20 64 61 74 61 62  kpoint the datab
f440: 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ase..  */.  case
f450: 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45   PragTyp_WAL_CHE
f460: 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 73  CKPOINT: {.    s
f470: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
f480: 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 62   *azCol[] = { "b
f490: 75 73 79 22 2c 20 22 6c 6f 67 22 2c 20 22 63 68  usy", "log", "ch
f4a0: 65 63 6b 70 6f 69 6e 74 65 64 22 20 7d 3b 0a 20  eckpointed" };. 
f4b0: 20 20 20 69 6e 74 20 69 42 74 20 3d 20 28 70 49     int iBt = (pI
f4c0: 64 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c 49 54 45  d2->z?iDb:SQLITE
f4d0: 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 29 3b 0a  _MAX_ATTACHED);.
f4e0: 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20      int eMode = 
f4f0: 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
f500: 54 5f 50 41 53 53 49 56 45 3b 0a 20 20 20 20 69  T_PASSIVE;.    i
f510: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
f520: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
f530: 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 66  rICmp(zRight, "f
f540: 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ull")==0 ){.    
f550: 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49      eMode = SQLI
f560: 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55  TE_CHECKPOINT_FU
f570: 4c 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  LL;.      }else 
f580: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
f590: 6d 70 28 7a 52 69 67 68 74 2c 20 22 72 65 73 74  mp(zRight, "rest
f5a0: 61 72 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  art")==0 ){.    
f5b0: 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49      eMode = SQLI
f5c0: 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45  TE_CHECKPOINT_RE
f5d0: 53 54 41 52 54 3b 0a 20 20 20 20 20 20 7d 65 6c  START;.      }el
f5e0: 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
f5f0: 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 74  rICmp(zRight, "t
f600: 72 75 6e 63 61 74 65 22 29 3d 3d 30 20 29 7b 0a  runcate")==0 ){.
f610: 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20          eMode = 
f620: 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
f630: 54 5f 54 52 55 4e 43 41 54 45 3b 0a 20 20 20 20  T_TRUNCATE;.    
f640: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65    }.    }.    se
f650: 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  tAllColumnNames(
f660: 76 2c 20 33 2c 20 61 7a 43 6f 6c 29 3b 20 20 61  v, 3, azCol);  a
f670: 73 73 65 72 74 28 20 33 3d 3d 41 72 72 61 79 53  ssert( 3==ArrayS
f680: 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20  ize(azCol) );.  
f690: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
f6a0: 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   3;.    sqlite3V
f6b0: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
f6c0: 43 68 65 63 6b 70 6f 69 6e 74 2c 20 69 42 74 2c  Checkpoint, iBt,
f6d0: 20 65 4d 6f 64 65 2c 20 31 29 3b 0a 20 20 20 20   eMode, 1);.    
f6e0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
f6f0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
f700: 77 2c 20 31 2c 20 33 29 3b 0a 20 20 7d 0a 20 20  w, 1, 3);.  }.  
f710: 62 72 65 61 6b 3b 0a 0a 20 20 2f 2a 0a 20 20 2a  break;..  /*.  *
f720: 2a 20 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61  *   PRAGMA wal_a
f730: 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 0a 20 20  utocheckpoint.  
f740: 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61 6c 5f  **   PRAGMA wal_
f750: 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 20 3d  autocheckpoint =
f760: 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e   N.  **.  ** Con
f770: 66 69 67 75 72 65 20 61 20 64 61 74 61 62 61 73  figure a databas
f780: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  e connection to 
f790: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 68  automatically ch
f7a0: 65 63 6b 70 6f 69 6e 74 20 61 20 64 61 74 61 62  eckpoint a datab
f7b0: 61 73 65 0a 20 20 2a 2a 20 61 66 74 65 72 20 61  ase.  ** after a
f7c0: 63 63 75 6d 75 6c 61 74 69 6e 67 20 4e 20 66 72  ccumulating N fr
f7d0: 61 6d 65 73 20 69 6e 20 74 68 65 20 6c 6f 67 2e  ames in the log.
f7e0: 20 4f 72 20 71 75 65 72 79 20 66 6f 72 20 74 68   Or query for th
f7f0: 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 0a  e current value.
f800: 20 20 2a 2a 20 6f 66 20 4e 2e 0a 20 20 2a 2f 0a    ** of N..  */.
f810: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 57    case PragTyp_W
f820: 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f 49 4e  AL_AUTOCHECKPOIN
f830: 54 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  T: {.    if( zRi
f840: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
f850: 69 74 65 33 5f 77 61 6c 5f 61 75 74 6f 63 68 65  ite3_wal_autoche
f860: 63 6b 70 6f 69 6e 74 28 64 62 2c 20 73 71 6c 69  ckpoint(db, sqli
f870: 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29  te3Atoi(zRight))
f880: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
f890: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22  rnSingleInt(v, "
f8a0: 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69  wal_autocheckpoi
f8b0: 6e 74 22 2c 20 0a 20 20 20 20 20 20 20 64 62 2d  nt", .       db-
f8c0: 3e 78 57 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73  >xWalCallback==s
f8d0: 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74  qlite3WalDefault
f8e0: 48 6f 6f 6b 20 3f 20 0a 20 20 20 20 20 20 20 20  Hook ? .        
f8f0: 20 20 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f     SQLITE_PTR_TO
f900: 5f 49 4e 54 28 64 62 2d 3e 70 57 61 6c 41 72 67  _INT(db->pWalArg
f910: 29 20 3a 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72  ) : 0);.  }.  br
f920: 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  eak;.#endif..  /
f930: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 73  *.  **  PRAGMA s
f940: 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a  hrink_memory.  *
f950: 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54  *.  ** IMPLEMENT
f960: 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 33 34 34  ATION-OF: R-2344
f970: 35 2d 34 36 31 30 39 20 54 68 69 73 20 70 72 61  5-46109 This pra
f980: 67 6d 61 20 63 61 75 73 65 73 20 74 68 65 20 64  gma causes the d
f990: 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 63 6f 6e  atabase.  ** con
f9a0: 6e 65 63 74 69 6f 6e 20 6f 6e 20 77 68 69 63 68  nection on which
f9b0: 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 74   it is invoked t
f9c0: 6f 20 66 72 65 65 20 75 70 20 61 73 20 6d 75 63  o free up as muc
f9d0: 68 20 6d 65 6d 6f 72 79 20 61 73 20 69 74 0a 20  h memory as it. 
f9e0: 20 2a 2a 20 63 61 6e 2c 20 62 79 20 63 61 6c 6c   ** can, by call
f9f0: 69 6e 67 20 73 71 6c 69 74 65 33 5f 64 62 5f 72  ing sqlite3_db_r
fa00: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 2e  elease_memory().
fa10: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
fa20: 67 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f  gTyp_SHRINK_MEMO
fa30: 52 59 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  RY: {.    sqlite
fa40: 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d  3_db_release_mem
fa50: 6f 72 79 28 64 62 29 3b 0a 20 20 20 20 62 72 65  ory(db);.    bre
fa60: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
fa70: 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79  **   PRAGMA busy
fa80: 5f 74 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20 20  _timeout.  **   
fa90: 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65  PRAGMA busy_time
faa0: 6f 75 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a  out = N.  **.  *
fab0: 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f 62  * Call sqlite3_b
fac0: 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20  usy_timeout(db, 
fad0: 4e 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20  N).  Return the 
fae0: 63 75 72 72 65 6e 74 20 74 69 6d 65 6f 75 74 20  current timeout 
faf0: 76 61 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f 6e  value.  ** if on
fb00: 65 20 69 73 20 73 65 74 2e 20 20 49 66 20 6e 6f  e is set.  If no
fb10: 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 6f 72   busy handler or
fb20: 20 61 20 64 69 66 66 65 72 65 6e 74 20 62 75 73   a different bus
fb30: 79 20 68 61 6e 64 6c 65 72 20 69 73 20 73 65 74  y handler is set
fb40: 0a 20 20 2a 2a 20 74 68 65 6e 20 30 20 69 73 20  .  ** then 0 is 
fb50: 72 65 74 75 72 6e 65 64 2e 20 20 53 65 74 74 69  returned.  Setti
fb60: 6e 67 20 74 68 65 20 62 75 73 79 5f 74 69 6d 65  ng the busy_time
fb70: 6f 75 74 20 74 6f 20 30 20 6f 72 20 6e 65 67 61  out to 0 or nega
fb80: 74 69 76 65 0a 20 20 2a 2a 20 64 69 73 61 62 6c  tive.  ** disabl
fb90: 65 73 20 74 68 65 20 74 69 6d 65 6f 75 74 2e 0a  es the timeout..
fba0: 20 20 2a 2f 0a 20 20 2f 2a 63 61 73 65 20 50 72    */.  /*case Pr
fbb0: 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f  agTyp_BUSY_TIMEO
fbc0: 55 54 2a 2f 20 64 65 66 61 75 6c 74 3a 20 7b 0a  UT*/ default: {.
fbd0: 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 61      assert( pPra
fbe0: 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 3d 3d 50  gma->ePragTyp==P
fbf0: 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45  ragTyp_BUSY_TIME
fc00: 4f 55 54 20 29 3b 0a 20 20 20 20 69 66 28 20 7a  OUT );.    if( z
fc10: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
fc20: 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65  qlite3_busy_time
fc30: 6f 75 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41  out(db, sqlite3A
fc40: 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  toi(zRight));.  
fc50: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69    }.    returnSi
fc60: 6e 67 6c 65 49 6e 74 28 76 2c 20 22 74 69 6d 65  ngleInt(v, "time
fc70: 6f 75 74 22 2c 20 20 64 62 2d 3e 62 75 73 79 54  out",  db->busyT
fc80: 69 6d 65 6f 75 74 29 3b 0a 20 20 20 20 62 72 65  imeout);.    bre
fc90: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
fca0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74  **   PRAGMA soft
fcb0: 5f 68 65 61 70 5f 6c 69 6d 69 74 0a 20 20 2a 2a  _heap_limit.  **
fcc0: 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68     PRAGMA soft_h
fcd0: 65 61 70 5f 6c 69 6d 69 74 20 3d 20 4e 0a 20 20  eap_limit = N.  
fce0: 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e  **.  ** IMPLEMEN
fcf0: 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 36 33  TATION-OF: R-263
fd00: 34 33 2d 34 35 39 33 30 20 54 68 69 73 20 70 72  43-45930 This pr
fd10: 61 67 6d 61 20 69 6e 76 6f 6b 65 73 20 74 68 65  agma invokes the
fd20: 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6f  .  ** sqlite3_so
fd30: 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28  ft_heap_limit64(
fd40: 29 20 69 6e 74 65 72 66 61 63 65 20 77 69 74 68  ) interface with
fd50: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 4e 2c   the argument N,
fd60: 20 69 66 20 4e 20 69 73 0a 20 20 2a 2a 20 73 70   if N is.  ** sp
fd70: 65 63 69 66 69 65 64 20 61 6e 64 20 69 73 20 61  ecified and is a
fd80: 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   non-negative in
fd90: 74 65 67 65 72 2e 0a 20 20 2a 2a 20 49 4d 50 4c  teger..  ** IMPL
fda0: 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
fdb0: 2d 36 34 34 35 31 2d 30 37 31 36 33 20 54 68 65  -64451-07163 The
fdc0: 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74   soft_heap_limit
fdd0: 20 70 72 61 67 6d 61 20 61 6c 77 61 79 73 0a 20   pragma always. 
fde0: 20 2a 2a 20 72 65 74 75 72 6e 73 20 74 68 65 20   ** returns the 
fdf0: 73 61 6d 65 20 69 6e 74 65 67 65 72 20 74 68 61  same integer tha
fe00: 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75 72  t would be retur
fe10: 6e 65 64 20 62 79 20 74 68 65 0a 20 20 2a 2a 20  ned by the.  ** 
fe20: 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61  sqlite3_soft_hea
fe30: 70 5f 6c 69 6d 69 74 36 34 28 2d 31 29 20 43 2d  p_limit64(-1) C-
fe40: 6c 61 6e 67 75 61 67 65 20 66 75 6e 63 74 69 6f  language functio
fe50: 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  n..  */.  case P
fe60: 72 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50  ragTyp_SOFT_HEAP
fe70: 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71  _LIMIT: {.    sq
fe80: 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20  lite3_int64 N;. 
fe90: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 26 26     if( zRight &&
fea0: 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78   sqlite3DecOrHex
feb0: 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e  ToI64(zRight, &N
fec0: 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )==SQLITE_OK ){.
fed0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6f        sqlite3_so
fee0: 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28  ft_heap_limit64(
fef0: 4e 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  N);.    }.    re
ff00: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c  turnSingleInt(v,
ff10: 20 22 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69   "soft_heap_limi
ff20: 74 22 2c 20 20 73 71 6c 69 74 65 33 5f 73 6f 66  t",  sqlite3_sof
ff30: 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d  t_heap_limit64(-
ff40: 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  1));.    break;.
ff50: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
ff60: 20 50 52 41 47 4d 41 20 74 68 72 65 61 64 73 0a   PRAGMA threads.
ff70: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 68    **   PRAGMA th
ff80: 72 65 61 64 73 20 3d 20 4e 0a 20 20 2a 2a 0a 20  reads = N.  **. 
ff90: 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 74 68   ** Configure th
ffa0: 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
ffb0: 20 6f 66 20 77 6f 72 6b 65 72 20 74 68 72 65 61   of worker threa
ffc0: 64 73 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20  ds.  Return the 
ffd0: 6e 65 77 0a 20 20 2a 2a 20 6d 61 78 69 6d 75 6d  new.  ** maximum
ffe0: 2c 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65  , which might be
fff0: 20 6c 65 73 73 20 74 68 61 6e 20 72 65 71 75 65   less than reque
10000 73 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  sted..  */.  cas
10010 65 20 50 72 61 67 54 79 70 5f 54 48 52 45 41 44  e PragTyp_THREAD
10020 53 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  S: {.    sqlite3
10030 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66  _int64 N;.    if
10040 28 20 7a 52 69 67 68 74 0a 20 20 20 20 20 26 26  ( zRight.     &&
10050 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78   sqlite3DecOrHex
10060 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e  ToI64(zRight, &N
10070 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  )==SQLITE_OK.   
10080 20 20 26 26 20 4e 3e 3d 30 0a 20 20 20 20 29 7b    && N>=0.    ){
10090 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c  .      sqlite3_l
100a0 69 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f  imit(db, SQLITE_
100b0 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
100c0 45 41 44 53 2c 20 28 69 6e 74 29 28 4e 26 30 78  EADS, (int)(N&0x
100d0 37 66 66 66 66 66 66 66 29 29 3b 0a 20 20 20 20  7fffffff));.    
100e0 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  }.    returnSing
100f0 6c 65 49 6e 74 28 76 2c 20 22 74 68 72 65 61 64  leInt(v, "thread
10100 73 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  s",.            
10110 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
10120 6c 69 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45  limit(db, SQLITE
10130 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48  _LIMIT_WORKER_TH
10140 52 45 41 44 53 2c 20 2d 31 29 29 3b 0a 20 20 20  READS, -1));.   
10150 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66   break;.  }..#if
10160 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
10170 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
10180 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20  d(SQLITE_TEST). 
10190 20 2f 2a 0a 20 20 2a 2a 20 52 65 70 6f 72 74 20   /*.  ** Report 
101a0 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74  the current stat
101b0 65 20 6f 66 20 66 69 6c 65 20 6c 6f 67 73 20 66  e of file logs f
101c0 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73  or all databases
101d0 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
101e0 67 54 79 70 5f 4c 4f 43 4b 5f 53 54 41 54 55 53  gTyp_LOCK_STATUS
101f0 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
10200 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
10210 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20   azLockName[] = 
10220 7b 0a 20 20 20 20 20 20 22 75 6e 6c 6f 63 6b 65  {.      "unlocke
10230 64 22 2c 20 22 73 68 61 72 65 64 22 2c 20 22 72  d", "shared", "r
10240 65 73 65 72 76 65 64 22 2c 20 22 70 65 6e 64 69  eserved", "pendi
10250 6e 67 22 2c 20 22 65 78 63 6c 75 73 69 76 65 22  ng", "exclusive"
10260 0a 20 20 20 20 7d 3b 0a 20 20 20 20 73 74 61 74  .    };.    stat
10270 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61  ic const char *a
10280 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22 64 61 74 61  zCol[] = { "data
10290 62 61 73 65 22 2c 20 22 73 74 61 74 75 73 22 20  base", "status" 
102a0 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  };.    int i;.  
102b0 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61    setAllColumnNa
102c0 6d 65 73 28 76 2c 20 32 2c 20 61 7a 43 6f 6c 29  mes(v, 2, azCol)
102d0 3b 20 61 73 73 65 72 74 28 20 32 3d 3d 41 72 72  ; assert( 2==Arr
102e0 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b  aySize(azCol) );
102f0 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
10300 6d 20 3d 20 32 3b 0a 20 20 20 20 66 6f 72 28 69  m = 2;.    for(i
10310 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
10320 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65 65  ++){.      Btree
10330 20 2a 70 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e   *pBt;.      con
10340 73 74 20 63 68 61 72 20 2a 7a 53 74 61 74 65 20  st char *zState 
10350 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20  = "unknown";.   
10360 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20     int j;.      
10370 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  if( db->aDb[i].z
10380 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  Name==0 ) contin
10390 75 65 3b 0a 20 20 20 20 20 20 70 42 74 20 3d 20  ue;.      pBt = 
103a0 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a  db->aDb[i].pBt;.
103b0 20 20 20 20 20 20 69 66 28 20 70 42 74 3d 3d 30        if( pBt==0
103c0 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65   || sqlite3Btree
103d0 50 61 67 65 72 28 70 42 74 29 3d 3d 30 20 29 7b  Pager(pBt)==0 ){
103e0 0a 20 20 20 20 20 20 20 20 7a 53 74 61 74 65 20  .        zState 
103f0 3d 20 22 63 6c 6f 73 65 64 22 3b 0a 20 20 20 20  = "closed";.    
10400 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69    }else if( sqli
10410 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  te3_file_control
10420 28 64 62 2c 20 69 20 3f 20 64 62 2d 3e 61 44 62  (db, i ? db->aDb
10430 5b 69 5d 2e 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a  [i].zName : 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 20 20 20 20 20 20                  
10460 20 20 20 20 20 53 51 4c 49 54 45 5f 46 43 4e 54       SQLITE_FCNT
10470 4c 5f 4c 4f 43 4b 53 54 41 54 45 2c 20 26 6a 29  L_LOCKSTATE, &j)
10480 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
10490 20 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d          zState =
104a0 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a   azLockName[j];.
104b0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
104c0 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f  lite3VdbeMultiLo
104d0 61 64 28 76 2c 20 31 2c 20 22 73 73 22 2c 20 64  ad(v, 1, "ss", d
104e0 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c  b->aDb[i].zName,
104f0 20 7a 53 74 61 74 65 29 3b 0a 20 20 20 20 20 20   zState);.      
10500 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10510 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
10520 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a  w, 1, 2);.    }.
10530 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
10540 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
10550 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20  LITE_HAS_CODEC. 
10560 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4b 45   case PragTyp_KE
10570 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  Y: {.    if( zRi
10580 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f 6b 65  ght ) sqlite3_ke
10590 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52  y_v2(db, zDb, zR
105a0 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72  ight, sqlite3Str
105b0 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a  len30(zRight));.
105c0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
105d0 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 52 45   case PragTyp_RE
105e0 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  KEY: {.    if( z
105f0 52 69 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f  Right ) sqlite3_
10600 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62  rekey_v2(db, zDb
10610 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65  , zRight, sqlite
10620 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74  3Strlen30(zRight
10630 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ));.    break;. 
10640 20 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79   }.  case PragTy
10650 70 5f 48 45 58 4b 45 59 3a 20 7b 0a 20 20 20 20  p_HEXKEY: {.    
10660 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
10670 20 20 20 20 75 38 20 69 42 79 74 65 3b 0a 20 20      u8 iByte;.  
10680 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20      int i;.     
10690 20 63 68 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a   char zKey[40];.
106a0 20 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 69        for(i=0, i
106b0 42 79 74 65 3d 30 3b 20 69 3c 73 69 7a 65 6f 66  Byte=0; i<sizeof
106c0 28 7a 4b 65 79 29 2a 32 20 26 26 20 73 71 6c 69  (zKey)*2 && sqli
106d0 74 65 33 49 73 78 64 69 67 69 74 28 7a 52 69 67  te3Isxdigit(zRig
106e0 68 74 5b 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20  ht[i]); i++){.  
106f0 20 20 20 20 20 20 69 42 79 74 65 20 3d 20 28 69        iByte = (i
10700 42 79 74 65 3c 3c 34 29 20 2b 20 73 71 6c 69 74  Byte<<4) + sqlit
10710 65 33 48 65 78 54 6f 49 6e 74 28 7a 52 69 67 68  e3HexToInt(zRigh
10720 74 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 69  t[i]);.        i
10730 66 28 20 28 69 26 31 29 21 3d 30 20 29 20 7a 4b  f( (i&1)!=0 ) zK
10740 65 79 5b 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b  ey[i/2] = iByte;
10750 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
10760 66 28 20 28 7a 4c 65 66 74 5b 33 5d 20 26 20 30  f( (zLeft[3] & 0
10770 78 66 29 3d 3d 30 78 62 20 29 7b 0a 20 20 20 20  xf)==0xb ){.    
10780 20 20 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f      sqlite3_key_
10790 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79  v2(db, zDb, zKey
107a0 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 65  , i/2);.      }e
107b0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
107c0 69 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62  ite3_rekey_v2(db
107d0 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32  , zDb, zKey, i/2
107e0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
107f0 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
10800 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
10810 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ed(SQLITE_HAS_CO
10820 44 45 43 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  DEC) || defined(
10830 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45  SQLITE_ENABLE_CE
10840 52 4f 44 29 0a 20 20 63 61 73 65 20 50 72 61 67  ROD).  case Prag
10850 54 79 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54  Typ_ACTIVATE_EXT
10860 45 4e 53 49 4f 4e 53 3a 20 69 66 28 20 7a 52 69  ENSIONS: if( zRi
10870 67 68 74 20 29 7b 0a 23 69 66 64 65 66 20 53 51  ght ){.#ifdef SQ
10880 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20  LITE_HAS_CODEC. 
10890 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
108a0 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  rNICmp(zRight, "
108b0 73 65 65 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a  see-", 4)==0 ){.
108c0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63        sqlite3_ac
108d0 74 69 76 61 74 65 5f 73 65 65 28 26 7a 52 69 67  tivate_see(&zRig
108e0 68 74 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65  ht[4]);.    }.#e
108f0 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
10900 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a  TE_ENABLE_CEROD.
10910 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
10920 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  trNICmp(zRight, 
10930 22 63 65 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20  "cerod-", 6)==0 
10940 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
10950 5f 61 63 74 69 76 61 74 65 5f 63 65 72 6f 64 28  _activate_cerod(
10960 26 7a 52 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20  &zRight[6]);.   
10970 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
10980 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20  break;.#endif.. 
10990 20 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65   } /* End of the
109a0 20 50 52 41 47 4d 41 20 73 77 69 74 63 68 20 2a   PRAGMA switch *
109b0 2f 0a 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a 20  /..pragma_out:. 
109c0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
109d0 62 2c 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c  b, zLeft);.  sql
109e0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
109f0 52 69 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69  Right);.}..#endi
10a00 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
10a10 5f 50 52 41 47 4d 41 20 2a 2f 0a                 _PRAGMA */.