/ Hex Artifact Content
Login

Artifact 49a04b2ec3199b7967c19b3239182d9c4e860726909ed80b7a3e21fe5bb9e6c4:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 23 69  sqliteInt.h"..#i
01d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
01e0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
01f0: 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
0200: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
0210: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
0220: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
0230: 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
0240: 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
0250: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
0260: 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
0270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
02d0: 65 20 22 70 72 61 67 6d 61 2e 68 22 20 69 6e 63  e "pragma.h" inc
02e0: 6c 75 64 65 20 66 69 6c 65 20 69 73 20 61 6e 20  lude file is an 
02f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65  automatically ge
0300: 6e 65 72 61 74 65 64 20 66 69 6c 65 20 74 68 61  nerated file tha
0310: 74 0a 2a 2a 20 74 68 61 74 20 69 6e 63 6c 75 64  t.** that includ
0320: 65 73 20 74 68 65 20 50 72 61 67 54 79 70 65 5f  es the PragType_
0330: 58 58 58 58 20 6d 61 63 72 6f 20 64 65 66 69 6e  XXXX macro defin
0340: 69 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 61  itions and the a
0350: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 0a 2a 2a 20  PragmaName[].** 
0360: 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 65 6e  object.  This en
0370: 73 75 72 65 73 20 74 68 61 74 20 74 68 65 20 61  sures that the a
0380: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 20 74 61 62  PragmaName[] tab
0390: 6c 65 20 69 73 20 61 72 72 61 6e 67 65 64 20 69  le is arranged i
03a0: 6e 0a 2a 2a 20 6c 65 78 69 63 6f 67 72 61 70 68  n.** lexicograph
03b0: 69 63 61 6c 20 6f 72 64 65 72 20 74 6f 20 66 61  ical order to fa
03c0: 63 69 6c 69 74 79 20 61 20 62 69 6e 61 72 79 20  cility a binary 
03d0: 73 65 61 72 63 68 20 6f 66 20 74 68 65 20 70 72  search of the pr
03e0: 61 67 6d 61 20 6e 61 6d 65 2e 0a 2a 2a 20 44 6f  agma name..** Do
03f0: 20 6e 6f 74 20 65 64 69 74 20 70 72 61 67 6d 61   not edit pragma
0400: 2e 68 20 64 69 72 65 63 74 6c 79 2e 20 20 45 64  .h directly.  Ed
0410: 69 74 20 61 6e 64 20 72 65 72 75 6e 20 74 68 65  it and rerun the
0420: 20 73 63 72 69 70 74 20 69 6e 20 61 74 20 0a 2a   script in at .*
0430: 2a 20 2e 2e 2f 74 6f 6f 6c 2f 6d 6b 70 72 61 67  * ../tool/mkprag
0440: 6d 61 74 61 62 2e 74 63 6c 2e 20 2a 2f 0a 23 69  matab.tcl. */.#i
0450: 6e 63 6c 75 64 65 20 22 70 72 61 67 6d 61 2e 68  nclude "pragma.h
0460: 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  "../*.** Interpr
0470: 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  et the given str
0480: 69 6e 67 20 61 73 20 61 20 73 61 66 65 74 79 20  ing as a safety 
0490: 6c 65 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30  level.  Return 0
04a0: 20 66 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66   for OFF,.** 1 f
04b0: 6f 72 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 2c  or ON or NORMAL,
04c0: 20 32 20 66 6f 72 20 46 55 4c 4c 2c 20 61 6e 64   2 for FULL, and
04d0: 20 33 20 66 6f 72 20 45 58 54 52 41 2e 20 20 52   3 for EXTRA.  R
04e0: 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e 20 65  eturn 1 for an e
04f0: 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e 72 65  mpty or .** unre
0500: 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e 67 20  cognized string 
0510: 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65 20 46  argument.  The F
0520: 55 4c 4c 20 61 6e 64 20 45 58 54 52 41 20 6f 70  ULL and EXTRA op
0530: 74 69 6f 6e 20 69 73 20 64 69 73 61 6c 6c 6f 77  tion is disallow
0540: 65 64 0a 2a 2a 20 69 66 20 74 68 65 20 6f 6d 69  ed.** if the omi
0550: 74 46 75 6c 6c 20 70 61 72 61 6d 65 74 65 72 20  tFull parameter 
0560: 69 74 20 31 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  it 1..**.** Note
0570: 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 73   that the values
0580: 20 72 65 74 75 72 6e 65 64 20 61 72 65 20 6f 6e   returned are on
0590: 65 20 6c 65 73 73 20 74 68 61 74 20 74 68 65 20  e less that the 
05a0: 76 61 6c 75 65 73 20 74 68 61 74 0a 2a 2a 20 73  values that.** s
05b0: 68 6f 75 6c 64 20 62 65 20 70 61 73 73 65 64 20  hould be passed 
05c0: 69 6e 74 6f 20 73 71 6c 69 74 65 33 42 74 72 65  into sqlite3Btre
05d0: 65 53 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28  eSetSafetyLevel(
05e0: 29 2e 20 20 54 68 65 20 69 73 20 64 6f 6e 65 0a  ).  The is done.
05f0: 2a 2a 20 74 6f 20 73 75 70 70 6f 72 74 20 6c 65  ** to support le
0600: 67 61 63 79 20 53 51 4c 20 63 6f 64 65 2e 20 20  gacy SQL code.  
0610: 54 68 65 20 73 61 66 65 74 79 20 6c 65 76 65 6c  The safety level
0620: 20 75 73 65 64 20 74 6f 20 62 65 20 62 6f 6f 6c   used to be bool
0630: 65 61 6e 0a 2a 2a 20 61 6e 64 20 6f 6c 64 65 72  ean.** and older
0640: 20 73 63 72 69 70 74 73 20 6d 61 79 20 68 61 76   scripts may hav
0650: 65 20 75 73 65 64 20 6e 75 6d 62 65 72 73 20 30  e used numbers 0
0660: 20 66 6f 72 20 4f 46 46 20 61 6e 64 20 31 20 66   for OFF and 1 f
0670: 6f 72 20 4f 4e 2e 0a 2a 2f 0a 73 74 61 74 69 63  or ON..*/.static
0680: 20 75 38 20 67 65 74 53 61 66 65 74 79 4c 65 76   u8 getSafetyLev
0690: 65 6c 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  el(const char *z
06a0: 2c 20 69 6e 74 20 6f 6d 69 74 46 75 6c 6c 2c 20  , int omitFull, 
06b0: 75 38 20 64 66 6c 74 29 7b 0a 20 20 20 20 20 20  u8 dflt){.      
06c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
06d0: 20 20 20 20 20 20 20 2f 2a 20 31 32 33 34 35 36         /* 123456
06e0: 37 38 39 20 31 32 33 34 35 36 37 38 39 20 31 32  789 123456789 12
06f0: 33 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f  3 */.  static co
0700: 6e 73 74 20 63 68 61 72 20 7a 54 65 78 74 5b 5d  nst char zText[]
0710: 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65 79 65 73   = "onoffalseyes
0720: 74 72 75 65 78 74 72 61 66 75 6c 6c 22 3b 0a 20  truextrafull";. 
0730: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38   static const u8
0740: 20 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c   iOffset[] = {0,
0750: 20 31 2c 20 32 2c 20 20 34 2c 20 20 20 20 39 2c   1, 2,  4,    9,
0760: 20 20 31 32 2c 20 20 31 35 2c 20 20 20 32 30 7d    12,  15,   20}
0770: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
0780: 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d 20 3d 20   u8 iLength[] = 
0790: 7b 32 2c 20 32 2c 20 33 2c 20 20 35 2c 20 20 20  {2, 2, 3,  5,   
07a0: 20 33 2c 20 20 20 34 2c 20 20 20 35 2c 20 20 20   3,   4,   5,   
07b0: 20 34 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f   4};.  static co
07c0: 6e 73 74 20 75 38 20 69 56 61 6c 75 65 5b 5d 20  nst u8 iValue[] 
07d0: 3d 20 20 7b 31 2c 20 30 2c 20 30 2c 20 20 30 2c  =  {1, 0, 0,  0,
07e0: 20 20 20 20 31 2c 20 20 20 31 2c 20 20 20 33 2c      1,   1,   3,
07f0: 20 20 20 20 32 7d 3b 0a 20 20 20 20 20 20 20 20      2};.        
0800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0810: 20 20 20 20 2f 2a 20 6f 6e 20 6e 6f 20 6f 66 66      /* on no off
0820: 20 66 61 6c 73 65 20 79 65 73 20 74 72 75 65 20   false yes true 
0830: 65 78 74 72 61 20 66 75 6c 6c 20 2a 2f 0a 20 20  extra full */.  
0840: 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28 20  int i, n;.  if( 
0850: 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a  sqlite3Isdigit(*
0860: 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  z) ){.    return
0870: 20 28 75 38 29 73 71 6c 69 74 65 33 41 74 6f 69   (u8)sqlite3Atoi
0880: 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 73  (z);.  }.  n = s
0890: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
08a0: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
08b0: 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e 67 74  ArraySize(iLengt
08c0: 68 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  h); i++){.    if
08d0: 28 20 69 4c 65 6e 67 74 68 5b 69 5d 3d 3d 6e 20  ( iLength[i]==n 
08e0: 26 26 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  && sqlite3StrNIC
08f0: 6d 70 28 26 7a 54 65 78 74 5b 69 4f 66 66 73 65  mp(&zText[iOffse
0900: 74 5b 69 5d 5d 2c 7a 2c 6e 29 3d 3d 30 0a 20 20  t[i]],z,n)==0.  
0910: 20 20 20 26 26 20 28 21 6f 6d 69 74 46 75 6c 6c     && (!omitFull
0920: 20 7c 7c 20 69 56 61 6c 75 65 5b 69 5d 3c 3d 31   || iValue[i]<=1
0930: 29 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 72  ).    ){.      r
0940: 65 74 75 72 6e 20 69 56 61 6c 75 65 5b 69 5d 3b  eturn iValue[i];
0950: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
0960: 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a 2f 2a 0a  urn dflt;.}../*.
0970: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
0980: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
0990: 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
09a0: 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65 33 47  ..*/.u8 sqlite3G
09b0: 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20  etBoolean(const 
09c0: 63 68 61 72 20 2a 7a 2c 20 75 38 20 64 66 6c 74  char *z, u8 dflt
09d0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 67 65 74 53  ){.  return getS
09e0: 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c 31 2c 64  afetyLevel(z,1,d
09f0: 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 20 54  flt)!=0;.}../* T
0a00: 68 65 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  he sqlite3GetBoo
0a10: 6c 65 61 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  lean() function 
0a20: 69 73 20 75 73 65 64 20 62 79 20 6f 74 68 65 72  is used by other
0a30: 20 6d 6f 64 75 6c 65 73 20 62 75 74 20 74 68 65   modules but the
0a40: 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  .** remainder of
0a50: 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 73 70   this file is sp
0a60: 65 63 69 66 69 63 20 74 6f 20 50 52 41 47 4d 41  ecific to PRAGMA
0a70: 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 20 53 6f   processing.  So
0a80: 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20 72 65 73   omit.** the res
0a90: 74 20 6f 66 20 74 68 65 20 66 69 6c 65 20 69 66  t of the file if
0aa0: 20 50 52 41 47 4d 41 73 20 61 72 65 20 6f 6d 69   PRAGMAs are omi
0ab0: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
0ac0: 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ild..*/.#if !def
0ad0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
0ae0: 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a 2a 2a 20  _PRAGMA)../*.** 
0af0: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69  Interpret the gi
0b00: 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20  ven string as a 
0b10: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 76 61 6c  locking mode val
0b20: 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ue..*/.static in
0b30: 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65  t getLockingMode
0b40: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
0b50: 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20 20 20 20  .  if( z ){.    
0b60: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
0b70: 72 49 43 6d 70 28 7a 2c 20 22 65 78 63 6c 75 73  rICmp(z, "exclus
0b80: 69 76 65 22 29 20 29 20 72 65 74 75 72 6e 20 50  ive") ) return P
0b90: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
0ba0: 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20 20 20 20  _EXCLUSIVE;.    
0bb0: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
0bc0: 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72 6d 61 6c  rICmp(z, "normal
0bd0: 22 29 20 29 20 72 65 74 75 72 6e 20 50 41 47 45  ") ) return PAGE
0be0: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f  R_LOCKINGMODE_NO
0bf0: 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72 65 74 75  RMAL;.  }.  retu
0c00: 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  rn PAGER_LOCKING
0c10: 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d 0a 0a 23  MODE_QUERY;.}..#
0c20: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
0c30: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 2f 2a  IT_AUTOVACUUM./*
0c40: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
0c50: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
0c60: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
0c70: 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a 2a 0a   mode value..**.
0c80: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
0c90: 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f 6e 65 22   strings, "none"
0ca0: 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20 22 69 6e  , "full" and "in
0cb0: 63 72 65 6d 65 6e 74 61 6c 22 20 61 72 65 20 0a  cremental" are .
0cc0: 2a 2a 20 61 63 63 65 70 74 61 62 6c 65 2c 20 61  ** acceptable, a
0cd0: 73 20 61 72 65 20 74 68 65 69 72 20 6e 75 6d 65  s are their nume
0ce0: 72 69 63 20 65 71 75 69 76 61 6c 65 6e 74 73 3a  ric equivalents:
0cf0: 20 30 2c 20 31 20 61 6e 64 20 32 20 72 65 73 70   0, 1 and 2 resp
0d00: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 73 74 61  ectively..*/.sta
0d10: 74 69 63 20 69 6e 74 20 67 65 74 41 75 74 6f 56  tic int getAutoV
0d20: 61 63 75 75 6d 28 63 6f 6e 73 74 20 63 68 61 72  acuum(const char
0d30: 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20   *z){.  int i;. 
0d40: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
0d50: 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 6e 65 22  trICmp(z, "none"
0d60: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
0d70: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e 4f 4e 45  _AUTOVACUUM_NONE
0d80: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
0d90: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 66 75  e3StrICmp(z, "fu
0da0: 6c 6c 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ll") ) return BT
0db0: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 46  REE_AUTOVACUUM_F
0dc0: 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ULL;.  if( 0==sq
0dd0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
0de0: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 29 20 29  "incremental") )
0df0: 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41 55   return BTREE_AU
0e00: 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52 3b 0a 20  TOVACUUM_INCR;. 
0e10: 20 69 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69   i = sqlite3Atoi
0e20: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 75  (z);.  return (u
0e30: 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d 32 29 3f  8)((i>=0&&i<=2)?
0e40: 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  i:0);.}.#endif /
0e50: 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  * ifndef SQLITE_
0e60: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 20  OMIT_AUTOVACUUM 
0e70: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
0e80: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
0e90: 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  AGMAS./*.** Inte
0ea0: 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e 20  rpret the given 
0eb0: 73 74 72 69 6e 67 20 61 73 20 61 20 74 65 6d 70  string as a temp
0ec0: 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e 20 52 65   db location. Re
0ed0: 74 75 72 6e 20 31 20 66 6f 72 20 66 69 6c 65 0a  turn 1 for file.
0ee0: 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d 70 6f 72  ** backed tempor
0ef0: 61 72 79 20 64 61 74 61 62 61 73 65 73 2c 20 32  ary databases, 2
0f00: 20 66 6f 72 20 74 68 65 20 52 65 64 2d 42 6c 61   for the Red-Bla
0f10: 63 6b 20 74 72 65 65 20 69 6e 20 6d 65 6d 6f 72  ck tree in memor
0f20: 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 61 6e  y database.** an
0f30: 64 20 30 20 74 6f 20 75 73 65 20 74 68 65 20 63  d 0 to use the c
0f40: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66 61  ompile-time defa
0f50: 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ult..*/.static i
0f60: 6e 74 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28  nt getTempStore(
0f70: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a  const char *z){.
0f80: 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27 30 27 20    if( z[0]>='0' 
0f90: 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20 29 7b 0a  && z[0]<='2' ){.
0fa0: 20 20 20 20 72 65 74 75 72 6e 20 7a 5b 30 5d 20      return z[0] 
0fb0: 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69  - '0';.  }else i
0fc0: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
0fd0: 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d 3d 30 20  p(z, "file")==0 
0fe0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b  ){.    return 1;
0ff0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c  .  }else if( sql
1000: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22  ite3StrICmp(z, "
1010: 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29 7b 0a 20  memory")==0 ){. 
1020: 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d     return 2;.  }
1030: 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e  else{.    return
1040: 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66   0;.  }.}.#endif
1050: 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45 52   /* SQLITE_PAGER
1060: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
1070: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1080: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
1090: 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74 65 20  *.** Invalidate 
10a0: 74 65 6d 70 20 73 74 6f 72 61 67 65 2c 20 65 69  temp storage, ei
10b0: 74 68 65 72 20 77 68 65 6e 20 74 68 65 20 74 65  ther when the te
10c0: 6d 70 20 73 74 6f 72 61 67 65 20 69 73 20 63 68  mp storage is ch
10d0: 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d 20 64 65  anged.** from de
10e0: 66 61 75 6c 74 2c 20 6f 72 20 77 68 65 6e 20 27  fault, or when '
10f0: 66 69 6c 65 27 20 61 6e 64 20 74 68 65 20 74 65  file' and the te
1100: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
1110: 72 79 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ry has changed.*
1120: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 69 6e 76  /.static int inv
1130: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
1140: 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ge(Parse *pParse
1150: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
1160: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20   = pParse->db;. 
1170: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 31 5d 2e   if( db->aDb[1].
1180: 70 42 74 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  pBt!=0 ){.    if
1190: 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
11a0: 74 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65  t || sqlite3Btre
11b0: 65 49 73 49 6e 52 65 61 64 54 72 61 6e 73 28 64  eIsInReadTrans(d
11c0: 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 20 29  b->aDb[1].pBt) )
11d0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45  {.      sqlite3E
11e0: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
11f0: 22 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61  "temporary stora
1200: 67 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61  ge cannot be cha
1210: 6e 67 65 64 20 22 0a 20 20 20 20 20 20 20 20 22  nged ".        "
1220: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
1230: 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20  ansaction");.   
1240: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
1250: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
1260: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
1270: 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70  ose(db->aDb[1].p
1280: 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e 61 44 62  Bt);.    db->aDb
1290: 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a 20 20 20  [1].pBt = 0;.   
12a0: 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
12b0: 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
12c0: 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a 20 20 72  ion(db);.  }.  r
12d0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
12e0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
12f0: 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  ITE_PAGER_PRAGMA
1300: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
1310: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
1320: 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 66  PRAGMAS./*.** If
1330: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
1340: 73 65 20 69 73 20 6f 70 65 6e 2c 20 63 6c 6f 73  se is open, clos
1350: 65 20 69 74 20 61 6e 64 20 6d 61 72 6b 20 74 68  e it and mark th
1360: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
1370: 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69 6e 67 20  a.** as needing 
1380: 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54 68 69 73  reloading.  This
1390: 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 77 68   must be done wh
13a0: 65 6e 20 75 73 69 6e 67 20 74 68 65 20 53 51 4c  en using the SQL
13b0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 2a  ITE_TEMP_STORE.*
13c0: 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f 54 45 4d  * or DEFAULT_TEM
13d0: 50 5f 53 54 4f 52 45 20 70 72 61 67 6d 61 73 2e  P_STORE pragmas.
13e0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63  .*/.static int c
13f0: 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61 67 65  hangeTempStorage
1400: 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
1410: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 6f  const char *zSto
1420: 72 61 67 65 54 79 70 65 29 7b 0a 20 20 69 6e 74  rageType){.  int
1430: 20 74 73 20 3d 20 67 65 74 54 65 6d 70 53 74 6f   ts = getTempSto
1440: 72 65 28 7a 53 74 6f 72 61 67 65 54 79 70 65 29  re(zStorageType)
1450: 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  ;.  sqlite3 *db 
1460: 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20  = pParse->db;.  
1470: 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  if( db->temp_sto
1480: 72 65 3d 3d 74 73 20 29 20 72 65 74 75 72 6e 20  re==ts ) return 
1490: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28  SQLITE_OK;.  if(
14a0: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
14b0: 74 6f 72 61 67 65 28 20 70 50 61 72 73 65 20 29  torage( pParse )
14c0: 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
14d0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
14e0: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  TE_ERROR;.  }.  
14f0: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d  db->temp_store =
1500: 20 28 75 38 29 74 73 3b 0a 20 20 72 65 74 75 72   (u8)ts;.  retur
1510: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23  n SQLITE_OK;.}.#
1520: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
1530: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
1540: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 72 65 73 75  ../*.** Set resu
1550: 6c 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  lt column names 
1560: 66 6f 72 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f  for a pragma..*/
1570: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 65 74  .static void set
1580: 50 72 61 67 6d 61 52 65 73 75 6c 74 43 6f 6c 75  PragmaResultColu
1590: 6d 6e 4e 61 6d 65 73 28 0a 20 20 56 64 62 65 20  mnNames(.  Vdbe 
15a0: 2a 76 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  *v,             
15b0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 71          /* The q
15c0: 75 65 72 79 20 75 6e 64 65 72 20 63 6f 6e 73 74  uery under const
15d0: 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 63 6f 6e  ruction */.  con
15e0: 73 74 20 50 72 61 67 6d 61 4e 61 6d 65 20 2a 70  st PragmaName *p
15f0: 50 72 61 67 6d 61 20 20 20 20 2f 2a 20 54 68 65  Pragma    /* The
1600: 20 70 72 61 67 6d 61 20 2a 2f 0a 29 7b 0a 20 20   pragma */.){.  
1610: 75 38 20 6e 20 3d 20 70 50 72 61 67 6d 61 2d 3e  u8 n = pPragma->
1620: 6e 50 72 61 67 43 4e 61 6d 65 3b 0a 20 20 73 71  nPragCName;.  sq
1630: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
1640: 6f 6c 73 28 76 2c 20 6e 3d 3d 30 20 3f 20 31 20  ols(v, n==0 ? 1 
1650: 3a 20 6e 29 3b 0a 20 20 69 66 28 20 6e 3d 3d 30  : n);.  if( n==0
1660: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
1670: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
1680: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
1690: 2c 20 70 50 72 61 67 6d 61 2d 3e 7a 4e 61 6d 65  , pPragma->zName
16a0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
16b0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
16c0: 6e 74 20 69 2c 20 6a 3b 0a 20 20 20 20 66 6f 72  nt i, j;.    for
16d0: 28 69 3d 30 2c 20 6a 3d 70 50 72 61 67 6d 61 2d  (i=0, j=pPragma-
16e0: 3e 69 50 72 61 67 43 4e 61 6d 65 3b 20 69 3c 6e  >iPragCName; i<n
16f0: 3b 20 69 2b 2b 2c 20 6a 2b 2b 29 7b 0a 20 20 20  ; i++, j++){.   
1700: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
1710: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 69 2c 20 43  tColName(v, i, C
1720: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 70 72 61  OLNAME_NAME, pra
1730: 67 43 4e 61 6d 65 5b 6a 5d 2c 20 53 51 4c 49 54  gCName[j], SQLIT
1740: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 7d  E_STATIC);.    }
1750: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65  .  }.}../*.** Ge
1760: 6e 65 72 61 74 65 20 63 6f 64 65 20 74 6f 20 72  nerate code to r
1770: 65 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 69  eturn a single i
1780: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f  nteger value..*/
1790: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 74  .static void ret
17a0: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 56 64 62  urnSingleInt(Vdb
17b0: 65 20 2a 76 2c 20 69 36 34 20 76 61 6c 75 65 29  e *v, i64 value)
17c0: 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 41  {.  sqlite3VdbeA
17d0: 64 64 4f 70 34 44 75 70 38 28 76 2c 20 4f 50 5f  ddOp4Dup8(v, OP_
17e0: 49 6e 74 36 34 2c 20 30 2c 20 31 2c 20 30 2c 20  Int64, 0, 1, 0, 
17f0: 28 63 6f 6e 73 74 20 75 38 2a 29 26 76 61 6c 75  (const u8*)&valu
1800: 65 2c 20 50 34 5f 49 4e 54 36 34 29 3b 0a 20 20  e, P4_INT64);.  
1810: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
1820: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
1830: 77 2c 20 31 2c 20 31 29 3b 0a 7d 0a 0a 2f 2a 0a  w, 1, 1);.}../*.
1840: 2a 2a 20 47 65 6e 65 72 61 74 65 20 63 6f 64 65  ** Generate code
1850: 20 74 6f 20 72 65 74 75 72 6e 20 61 20 73 69 6e   to return a sin
1860: 67 6c 65 20 74 65 78 74 20 76 61 6c 75 65 2e 0a  gle text value..
1870: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72  */.static void r
1880: 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78 74 28  eturnSingleText(
1890: 0a 20 20 56 64 62 65 20 2a 76 2c 20 20 20 20 20  .  Vdbe *v,     
18a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72             /* Pr
18b0: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
18c0: 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74   under construct
18d0: 69 6f 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ion */.  const c
18e0: 68 61 72 20 2a 7a 56 61 6c 75 65 20 20 20 20 20  har *zValue     
18f0: 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 62 65 20   /* Value to be 
1900: 72 65 74 75 72 6e 65 64 20 2a 2f 0a 29 7b 0a 20  returned */.){. 
1910: 20 69 66 28 20 7a 56 61 6c 75 65 20 29 7b 0a 20   if( zValue ){. 
1920: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f     sqlite3VdbeLo
1930: 61 64 53 74 72 69 6e 67 28 76 2c 20 31 2c 20 28  adString(v, 1, (
1940: 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a 56 61 6c  const char*)zVal
1950: 75 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ue);.    sqlite3
1960: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
1970: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
1980: 29 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  );.  }.}.../*.**
1990: 20 53 65 74 20 74 68 65 20 73 61 66 65 74 79 5f   Set the safety_
19a0: 6c 65 76 65 6c 20 61 6e 64 20 70 61 67 65 72 20  level and pager 
19b0: 66 6c 61 67 73 20 66 6f 72 20 70 61 67 65 72 20  flags for pager 
19c0: 69 44 62 2e 20 20 4f 72 20 69 66 20 69 44 62 3c  iDb.  Or if iDb<
19d0: 30 0a 2a 2a 20 73 65 74 20 74 68 65 73 65 20 76  0.** set these v
19e0: 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 70 61  alues for all pa
19f0: 67 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  gers..*/.#ifndef
1a00: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
1a10: 45 52 5f 50 52 41 47 4d 41 53 0a 73 74 61 74 69  ER_PRAGMAS.stati
1a20: 63 20 76 6f 69 64 20 73 65 74 41 6c 6c 50 61 67  c void setAllPag
1a30: 65 72 46 6c 61 67 73 28 73 71 6c 69 74 65 33 20  erFlags(sqlite3 
1a40: 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e  *db){.  if( db->
1a50: 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
1a60: 20 20 44 62 20 2a 70 44 62 20 3d 20 64 62 2d 3e    Db *pDb = db->
1a70: 61 44 62 3b 0a 20 20 20 20 69 6e 74 20 6e 20 3d  aDb;.    int n =
1a80: 20 64 62 2d 3e 6e 44 62 3b 0a 20 20 20 20 61 73   db->nDb;.    as
1a90: 73 65 72 74 28 20 53 51 4c 49 54 45 5f 46 75 6c  sert( SQLITE_Ful
1aa0: 6c 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f 46 55  lFSync==PAGER_FU
1ab0: 4c 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20 61  LLFSYNC );.    a
1ac0: 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 6b  ssert( SQLITE_Ck
1ad0: 70 74 46 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47  ptFullFSync==PAG
1ae0: 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e  ER_CKPT_FULLFSYN
1af0: 43 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  C );.    assert(
1b00: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
1b10: 6c 6c 3d 3d 50 41 47 45 52 5f 43 41 43 48 45 53  ll==PAGER_CACHES
1b20: 50 49 4c 4c 20 29 3b 0a 20 20 20 20 61 73 73 65  PILL );.    asse
1b30: 72 74 28 20 28 50 41 47 45 52 5f 46 55 4c 4c 46  rt( (PAGER_FULLF
1b40: 53 59 4e 43 20 7c 20 50 41 47 45 52 5f 43 4b 50  SYNC | PAGER_CKP
1b50: 54 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41  T_FULLFSYNC | PA
1b60: 47 45 52 5f 43 41 43 48 45 53 50 49 4c 4c 29 0a  GER_CACHESPILL).
1b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 3d 3d 20               == 
1b80: 20 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53   PAGER_FLAGS_MAS
1b90: 4b 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  K );.    assert(
1ba0: 20 28 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65   (pDb->safety_le
1bb0: 76 65 6c 20 26 20 50 41 47 45 52 5f 53 59 4e 43  vel & PAGER_SYNC
1bc0: 48 52 4f 4e 4f 55 53 5f 4d 41 53 4b 29 3d 3d 70  HRONOUS_MASK)==p
1bd0: 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c  Db->safety_level
1be0: 20 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28   );.    while( (
1bf0: 6e 2d 2d 29 20 3e 20 30 20 29 7b 0a 20 20 20 20  n--) > 0 ){.    
1c00: 20 20 69 66 28 20 70 44 62 2d 3e 70 42 74 20 29    if( pDb->pBt )
1c10: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
1c20: 33 42 74 72 65 65 53 65 74 50 61 67 65 72 46 6c  3BtreeSetPagerFl
1c30: 61 67 73 28 70 44 62 2d 3e 70 42 74 2c 0a 20 20  ags(pDb->pBt,.  
1c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
1c50: 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c  Db->safety_level
1c60: 20 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20   | (db->flags & 
1c70: 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b  PAGER_FLAGS_MASK
1c80: 29 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ) );.      }.   
1c90: 20 20 20 70 44 62 2b 2b 3b 0a 20 20 20 20 7d 0a     pDb++;.    }.
1ca0: 20 20 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65    }.}.#else.# de
1cb0: 66 69 6e 65 20 73 65 74 41 6c 6c 50 61 67 65 72  fine setAllPager
1cc0: 46 6c 61 67 73 28 58 29 20 20 2f 2a 20 6e 6f 2d  Flags(X)  /* no-
1cd0: 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f  op */.#endif.../
1ce0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 68 75  *.** Return a hu
1cf0: 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e 61 6d  man-readable nam
1d00: 65 20 66 6f 72 20 61 20 63 6f 6e 73 74 72 61 69  e for a constrai
1d10: 6e 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 63  nt resolution ac
1d20: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  tion..*/.#ifndef
1d30: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
1d40: 45 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69 63 20  EIGN_KEY.static 
1d50: 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 63 74 69  const char *acti
1d60: 6f 6e 4e 61 6d 65 28 75 38 20 61 63 74 69 6f 6e  onName(u8 action
1d70: 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ){.  const char 
1d80: 2a 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74 63 68  *zName;.  switch
1d90: 28 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20  ( action ){.    
1da0: 63 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 3a  case OE_SetNull:
1db0: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20 4e    zName = "SET N
1dc0: 55 4c 4c 22 3b 20 20 20 20 20 20 20 20 62 72 65  ULL";        bre
1dd0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f  ak;.    case OE_
1de0: 53 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d 65 20  SetDflt:  zName 
1df0: 3d 20 22 53 45 54 20 44 45 46 41 55 4c 54 22 3b  = "SET DEFAULT";
1e00: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1e10: 63 61 73 65 20 4f 45 5f 43 61 73 63 61 64 65 3a  case OE_Cascade:
1e20: 20 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53 43 41    zName = "CASCA
1e30: 44 45 22 3b 20 20 20 20 20 20 20 20 20 62 72 65  DE";         bre
1e40: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f  ak;.    case OE_
1e50: 52 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d 65 20  Restrict: zName 
1e60: 3d 20 22 52 45 53 54 52 49 43 54 22 3b 20 20 20  = "RESTRICT";   
1e70: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1e80: 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20  default:        
1e90: 20 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20 41 43    zName = "NO AC
1ea0: 54 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20 20 20  TION";  .       
1eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1ec0: 73 73 65 72 74 28 20 61 63 74 69 6f 6e 3d 3d 4f  ssert( action==O
1ed0: 45 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61 6b 3b  E_None ); break;
1ee0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e  .  }.  return zN
1ef0: 61 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  ame;.}.#endif...
1f00: 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20  /*.** Parameter 
1f10: 65 4d 6f 64 65 20 6d 75 73 74 20 62 65 20 6f 6e  eMode must be on
1f20: 65 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f 4a  e of the PAGER_J
1f30: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 63  OURNALMODE_XXX c
1f40: 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 66 69  onstants.** defi
1f50: 6e 65 64 20 69 6e 20 70 61 67 65 72 2e 68 2e 20  ned in pager.h. 
1f60: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65  This function re
1f70: 74 75 72 6e 73 20 74 68 65 20 61 73 73 6f 63 69  turns the associ
1f80: 61 74 65 64 20 6c 6f 77 65 72 63 61 73 65 0a 2a  ated lowercase.*
1f90: 2a 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 6e  * journal-mode n
1fa0: 61 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68  ame..*/.const ch
1fb0: 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ar *sqlite3Journ
1fc0: 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 20 65  alModename(int e
1fd0: 4d 6f 64 65 29 7b 0a 20 20 73 74 61 74 69 63 20  Mode){.  static 
1fe0: 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 4d  char * const azM
1ff0: 6f 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20  odeName[] = {.  
2000: 20 20 22 64 65 6c 65 74 65 22 2c 20 22 70 65 72    "delete", "per
2010: 73 69 73 74 22 2c 20 22 6f 66 66 22 2c 20 22 74  sist", "off", "t
2020: 72 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d 6f 72  runcate", "memor
2030: 79 22 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  y".#ifndef SQLIT
2040: 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20 20 20  E_OMIT_WAL.     
2050: 2c 20 22 77 61 6c 22 2c 20 22 77 61 6c 32 22 0a  , "wal", "wal2".
2060: 23 65 6e 64 69 66 0a 20 20 7d 3b 0a 20 20 61 73  #endif.  };.  as
2070: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
2080: 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 3d 3d  NALMODE_DELETE==
2090: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50  0 );.  assert( P
20a0: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
20b0: 5f 50 45 52 53 49 53 54 3d 3d 31 20 29 3b 0a 20  _PERSIST==1 );. 
20c0: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
20d0: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 3d 3d  OURNALMODE_OFF==
20e0: 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50  2 );.  assert( P
20f0: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2100: 5f 54 52 55 4e 43 41 54 45 3d 3d 33 20 29 3b 0a  _TRUNCATE==3 );.
2110: 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f    assert( PAGER_
2120: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f  JOURNALMODE_MEMO
2130: 52 59 3d 3d 34 20 29 3b 0a 20 20 61 73 73 65 72  RY==4 );.  asser
2140: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
2150: 4d 4f 44 45 5f 57 41 4c 3d 3d 35 20 29 3b 0a 20  MODE_WAL==5 );. 
2160: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
2170: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 32 3d  OURNALMODE_WAL2=
2180: 3d 36 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =6 );.  assert( 
2190: 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65 4d 6f 64  eMode>=0 && eMod
21a0: 65 3c 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 4d  e<=ArraySize(azM
21b0: 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a 20 20 69  odeName) );..  i
21c0: 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72 61 79 53  f( eMode==ArrayS
21d0: 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20  ize(azModeName) 
21e0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65  ) return 0;.  re
21f0: 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b  turn azModeName[
2200: 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  eMode];.}../*.**
2210: 20 4c 6f 63 61 74 65 20 61 20 70 72 61 67 6d 61   Locate a pragma
2220: 20 69 6e 20 74 68 65 20 61 50 72 61 67 6d 61 4e   in the aPragmaN
2230: 61 6d 65 5b 5d 20 61 72 72 61 79 2e 0a 2a 2f 0a  ame[] array..*/.
2240: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 50 72 61  static const Pra
2250: 67 6d 61 4e 61 6d 65 20 2a 70 72 61 67 6d 61 4c  gmaName *pragmaL
2260: 6f 63 61 74 65 28 63 6f 6e 73 74 20 63 68 61 72  ocate(const char
2270: 20 2a 7a 4e 61 6d 65 29 7b 0a 20 20 69 6e 74 20   *zName){.  int 
2280: 75 70 72 2c 20 6c 77 72 2c 20 6d 69 64 20 3d 20  upr, lwr, mid = 
2290: 30 2c 20 72 63 3b 0a 20 20 6c 77 72 20 3d 20 30  0, rc;.  lwr = 0
22a0: 3b 0a 20 20 75 70 72 20 3d 20 41 72 72 61 79 53  ;.  upr = ArrayS
22b0: 69 7a 65 28 61 50 72 61 67 6d 61 4e 61 6d 65 29  ize(aPragmaName)
22c0: 2d 31 3b 0a 20 20 77 68 69 6c 65 28 20 6c 77 72  -1;.  while( lwr
22d0: 3c 3d 75 70 72 20 29 7b 0a 20 20 20 20 6d 69 64  <=upr ){.    mid
22e0: 20 3d 20 28 6c 77 72 2b 75 70 72 29 2f 32 3b 0a   = (lwr+upr)/2;.
22f0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2300: 5f 73 74 72 69 63 6d 70 28 7a 4e 61 6d 65 2c 20  _stricmp(zName, 
2310: 61 50 72 61 67 6d 61 4e 61 6d 65 5b 6d 69 64 5d  aPragmaName[mid]
2320: 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 69 66 28  .zName);.    if(
2330: 20 72 63 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a   rc==0 ) break;.
2340: 20 20 20 20 69 66 28 20 72 63 3c 30 20 29 7b 0a      if( rc<0 ){.
2350: 20 20 20 20 20 20 75 70 72 20 3d 20 6d 69 64 20        upr = mid 
2360: 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  - 1;.    }else{.
2370: 20 20 20 20 20 20 6c 77 72 20 3d 20 6d 69 64 20        lwr = mid 
2380: 2b 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  + 1;.    }.  }. 
2390: 20 72 65 74 75 72 6e 20 6c 77 72 3e 75 70 72 20   return lwr>upr 
23a0: 3f 20 30 20 3a 20 26 61 50 72 61 67 6d 61 4e 61  ? 0 : &aPragmaNa
23b0: 6d 65 5b 6d 69 64 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a  me[mid];.}../*.*
23c0: 2a 20 48 65 6c 70 65 72 20 73 75 62 72 6f 75 74  * Helper subrout
23d0: 69 6e 65 20 66 6f 72 20 50 52 41 47 4d 41 20 69  ine for PRAGMA i
23e0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3a 0a  ntegrity_check:.
23f0: 2a 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 63  **.** Generate c
2400: 6f 64 65 20 74 6f 20 6f 75 74 70 75 74 20 61 20  ode to output a 
2410: 73 69 6e 67 6c 65 2d 63 6f 6c 75 6d 6e 20 72 65  single-column re
2420: 73 75 6c 74 20 72 6f 77 20 77 69 74 68 20 61 20  sult row with a 
2430: 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20  value of the.** 
2440: 73 74 72 69 6e 67 20 68 65 6c 64 20 69 6e 20 72  string held in r
2450: 65 67 69 73 74 65 72 20 33 2e 20 20 44 65 63 72  egister 3.  Decr
2460: 65 6d 65 6e 74 20 74 68 65 20 72 65 73 75 6c 74  ement the result
2470: 20 63 6f 75 6e 74 20 69 6e 20 72 65 67 69 73 74   count in regist
2480: 65 72 20 31 0a 2a 2a 20 61 6e 64 20 68 61 6c 74  er 1.** and halt
2490: 20 69 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   if the maximum 
24a0: 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74  number of result
24b0: 20 72 6f 77 73 20 68 61 76 65 20 62 65 65 6e 20   rows have been 
24c0: 69 73 73 75 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  issued..*/.stati
24d0: 63 20 69 6e 74 20 69 6e 74 65 67 72 69 74 79 43  c int integrityC
24e0: 68 65 63 6b 52 65 73 75 6c 74 52 6f 77 28 56 64  heckResultRow(Vd
24f0: 62 65 20 2a 76 29 7b 0a 20 20 69 6e 74 20 61 64  be *v){.  int ad
2500: 64 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  dr;.  sqlite3Vdb
2510: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
2520: 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a  sultRow, 3, 1);.
2530: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
2540: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
2550: 5f 49 66 50 6f 73 2c 20 31 2c 20 73 71 6c 69 74  _IfPos, 1, sqlit
2560: 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64 64  e3VdbeCurrentAdd
2570: 72 28 76 29 2b 32 2c 20 31 29 3b 0a 20 20 56 64  r(v)+2, 1);.  Vd
2580: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
2590: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
25a0: 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a  p0(v, OP_Halt);.
25b0: 20 20 72 65 74 75 72 6e 20 61 64 64 72 3b 0a 7d    return addr;.}
25c0: 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 20  ../*.** Process 
25d0: 61 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65  a pragma stateme
25e0: 6e 74 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67  nt.  .**.** Prag
25f0: 6d 61 73 20 61 72 65 20 6f 66 20 74 68 69 73 20  mas are of this 
2600: 66 6f 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  form:.**.**     
2610: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
2620: 5d 69 64 20 5b 3d 20 76 61 6c 75 65 5d 0a 2a 2a  ]id [= value].**
2630: 0a 2a 2a 20 54 68 65 20 69 64 65 6e 74 69 66 69  .** The identifi
2640: 65 72 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65  er might also be
2650: 20 61 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20   a string.  The 
2660: 76 61 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e  value is a strin
2670: 67 2c 20 61 6e 64 0a 2a 2a 20 69 64 65 6e 74 69  g, and.** identi
2680: 66 69 65 72 2c 20 6f 72 20 61 20 6e 75 6d 62 65  fier, or a numbe
2690: 72 2e 20 20 49 66 20 6d 69 6e 75 73 46 6c 61 67  r.  If minusFlag
26a0: 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74   is true, then t
26b0: 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 61  he value is.** a
26c0: 20 6e 75 6d 62 65 72 20 74 68 61 74 20 77 61 73   number that was
26d0: 20 70 72 65 63 65 64 65 64 20 62 79 20 61 20 6d   preceded by a m
26e0: 69 6e 75 73 20 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a  inus sign..**.**
26f0: 20 49 66 20 74 68 65 20 6c 65 66 74 20 73 69 64   If the left sid
2700: 65 20 69 73 20 22 64 61 74 61 62 61 73 65 2e 69  e is "database.i
2710: 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73 20  d" then pId1 is 
2720: 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d  the database nam
2730: 65 0a 2a 2a 20 61 6e 64 20 70 49 64 32 20 69 73  e.** and pId2 is
2740: 20 74 68 65 20 69 64 2e 20 20 49 66 20 74 68 65   the id.  If the
2750: 20 6c 65 66 74 20 73 69 64 65 20 69 73 20 6a 75   left side is ju
2760: 73 74 20 22 69 64 22 20 74 68 65 6e 20 70 49 64  st "id" then pId
2770: 31 20 69 73 20 74 68 65 0a 2a 2a 20 69 64 20 61  1 is the.** id a
2780: 6e 64 20 70 49 64 32 20 69 73 20 61 6e 79 20 65  nd pId2 is any e
2790: 6d 70 74 79 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a  mpty string..*/.
27a0: 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67  void sqlite3Prag
27b0: 6d 61 28 0a 20 20 50 61 72 73 65 20 2a 70 50 61  ma(.  Parse *pPa
27c0: 72 73 65 2c 20 0a 20 20 54 6f 6b 65 6e 20 2a 70  rse, .  Token *p
27d0: 49 64 31 2c 20 20 20 20 20 20 20 20 2f 2a 20 46  Id1,        /* F
27e0: 69 72 73 74 20 70 61 72 74 20 6f 66 20 5b 73 63  irst part of [sc
27f0: 68 65 6d 61 2e 5d 69 64 20 66 69 65 6c 64 20 2a  hema.]id field *
2800: 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 32 2c  /.  Token *pId2,
2810: 20 20 20 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e          /* Secon
2820: 64 20 70 61 72 74 20 6f 66 20 5b 73 63 68 65 6d  d part of [schem
2830: 61 2e 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72 20  a.]id field, or 
2840: 4e 55 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  NULL */.  Token 
2850: 2a 70 56 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a  *pValue,      /*
2860: 20 54 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75   Token for <valu
2870: 65 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  e>, or NULL */. 
2880: 20 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20 20   int minusFlag  
2890: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
28a0: 61 20 27 2d 27 20 73 69 67 6e 20 70 72 65 63 65  a '-' sign prece
28b0: 64 65 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29  ded <value> */.)
28c0: 7b 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20  {.  char *zLeft 
28d0: 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  = 0;       /* Nu
28e0: 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  l-terminated UTF
28f0: 2d 38 20 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a  -8 string <id> *
2900: 2f 0a 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74  /.  char *zRight
2910: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75   = 0;      /* Nu
2920: 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  l-terminated UTF
2930: 2d 38 20 73 74 72 69 6e 67 20 3c 76 61 6c 75 65  -8 string <value
2940: 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  >, or NULL */.  
2950: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20  const char *zDb 
2960: 3d 20 30 3b 20 20 20 2f 2a 20 54 68 65 20 64 61  = 0;   /* The da
2970: 74 61 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20  tabase name */. 
2980: 20 54 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20   Token *pId;    
2990: 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
29a0: 65 72 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e  er to <id> token
29b0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 61 46 63 6e   */.  char *aFcn
29c0: 74 6c 5b 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20  tl[4];       /* 
29d0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49  Argument to SQLI
29e0: 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20  TE_FCNTL_PRAGMA 
29f0: 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
2a00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
2a10: 61 74 61 62 61 73 65 20 69 6e 64 65 78 20 66 6f  atabase index fo
2a20: 72 20 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f 0a  r <database> */.
2a30: 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
2a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2a50: 2a 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 66  * return value f
2a60: 6f 72 6d 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  orm SQLITE_FCNTL
2a70: 5f 50 52 41 47 4d 41 20 2a 2f 0a 20 20 73 71 6c  _PRAGMA */.  sql
2a80: 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73  ite3 *db = pPars
2a90: 65 2d 3e 64 62 3b 20 20 20 20 2f 2a 20 54 68 65  e->db;    /* The
2aa0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
2ab0: 74 69 6f 6e 20 2a 2f 0a 20 20 44 62 20 2a 70 44  tion */.  Db *pD
2ac0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
2ad0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 70         /* The sp
2ae0: 65 63 69 66 69 63 20 64 61 74 61 62 61 73 65 20  ecific database 
2af0: 62 65 69 6e 67 20 70 72 61 67 6d 61 65 64 20 2a  being pragmaed *
2b00: 2f 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 73 71  /.  Vdbe *v = sq
2b10: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
2b20: 72 73 65 29 3b 20 20 2f 2a 20 50 72 65 70 61 72  rse);  /* Prepar
2b30: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ed statement */.
2b40: 20 20 63 6f 6e 73 74 20 50 72 61 67 6d 61 4e 61    const PragmaNa
2b50: 6d 65 20 2a 70 50 72 61 67 6d 61 3b 20 20 20 2f  me *pPragma;   /
2b60: 2a 20 54 68 65 20 70 72 61 67 6d 61 20 2a 2f 0a  * The pragma */.
2b70: 0a 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65  .  if( v==0 ) re
2b80: 74 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33 56  turn;.  sqlite3V
2b90: 64 62 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76  dbeRunOnlyOnce(v
2ba0: 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  );.  pParse->nMe
2bb0: 6d 20 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74  m = 2;..  /* Int
2bc0: 65 72 70 72 65 74 20 74 68 65 20 5b 73 63 68 65  erpret the [sche
2bd0: 6d 61 2e 5d 20 70 61 72 74 20 6f 66 20 74 68 65  ma.] part of the
2be0: 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e   pragma statemen
2bf0: 74 2e 20 69 44 62 20 69 73 20 74 68 65 0a 20 20  t. iDb is the.  
2c00: 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  ** index of the 
2c10: 64 61 74 61 62 61 73 65 20 74 68 69 73 20 70 72  database this pr
2c20: 61 67 6d 61 20 69 73 20 62 65 69 6e 67 20 61 70  agma is being ap
2c30: 70 6c 69 65 64 20 74 6f 20 69 6e 20 64 62 2e 61  plied to in db.a
2c40: 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62 20 3d  Db[]. */.  iDb =
2c50: 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e   sqlite3TwoPartN
2c60: 61 6d 65 28 70 50 61 72 73 65 2c 20 70 49 64 31  ame(pParse, pId1
2c70: 2c 20 70 49 64 32 2c 20 26 70 49 64 29 3b 0a 20  , pId2, &pId);. 
2c80: 20 69 66 28 20 69 44 62 3c 30 20 29 20 72 65 74   if( iDb<0 ) ret
2c90: 75 72 6e 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  urn;.  pDb = &db
2ca0: 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a 20 20 2f  ->aDb[iDb];..  /
2cb0: 2a 20 49 66 20 74 68 65 20 74 65 6d 70 20 64 61  * If the temp da
2cc0: 74 61 62 61 73 65 20 68 61 73 20 62 65 65 6e 20  tabase has been 
2cd0: 65 78 70 6c 69 63 69 74 6c 79 20 6e 61 6d 65 64  explicitly named
2ce0: 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
2cf0: 0a 20 20 2a 2a 20 70 72 61 67 6d 61 2c 20 6d 61  .  ** pragma, ma
2d00: 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 6f 70  ke sure it is op
2d10: 65 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20  en. .  */.  if( 
2d20: 69 44 62 3d 3d 31 20 26 26 20 73 71 6c 69 74 65  iDb==1 && sqlite
2d30: 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73  3OpenTempDatabas
2d40: 65 28 70 50 61 72 73 65 29 20 29 7b 0a 20 20 20  e(pParse) ){.   
2d50: 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20   return;.  }..  
2d60: 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74 65 33 4e  zLeft = sqlite3N
2d70: 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c  ameFromToken(db,
2d80: 20 70 49 64 29 3b 0a 20 20 69 66 28 20 21 7a 4c   pId);.  if( !zL
2d90: 65 66 74 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  eft ) return;.  
2da0: 69 66 28 20 6d 69 6e 75 73 46 6c 61 67 20 29 7b  if( minusFlag ){
2db0: 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73 71  .    zRight = sq
2dc0: 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
2dd0: 20 22 2d 25 54 22 2c 20 70 56 61 6c 75 65 29 3b   "-%T", pValue);
2de0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 52  .  }else{.    zR
2df0: 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4e 61  ight = sqlite3Na
2e00: 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20  meFromToken(db, 
2e10: 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a 20 20  pValue);.  }..  
2e20: 61 73 73 65 72 74 28 20 70 49 64 32 20 29 3b 0a  assert( pId2 );.
2e30: 20 20 7a 44 62 20 3d 20 70 49 64 32 2d 3e 6e 3e    zDb = pId2->n>
2e40: 30 20 3f 20 70 44 62 2d 3e 7a 44 62 53 4e 61 6d  0 ? pDb->zDbSNam
2e50: 65 20 3a 20 30 3b 0a 20 20 69 66 28 20 73 71 6c  e : 0;.  if( sql
2e60: 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 70 50  ite3AuthCheck(pP
2e70: 61 72 73 65 2c 20 53 51 4c 49 54 45 5f 50 52 41  arse, SQLITE_PRA
2e80: 47 4d 41 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67  GMA, zLeft, zRig
2e90: 68 74 2c 20 7a 44 62 29 20 29 7b 0a 20 20 20 20  ht, zDb) ){.    
2ea0: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
2eb0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64 20  .  }..  /* Send 
2ec0: 61 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  an SQLITE_FCNTL_
2ed0: 50 52 41 47 4d 41 20 66 69 6c 65 2d 63 6f 6e 74  PRAGMA file-cont
2ee0: 72 6f 6c 20 74 6f 20 74 68 65 20 75 6e 64 65 72  rol to the under
2ef0: 6c 79 69 6e 67 20 56 46 53 0a 20 20 2a 2a 20 63  lying VFS.  ** c
2f00: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 69  onnection.  If i
2f10: 74 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45  t returns SQLITE
2f20: 5f 4f 4b 2c 20 74 68 65 6e 20 61 73 73 75 6d 65  _OK, then assume
2f30: 20 74 68 61 74 20 74 68 65 20 56 46 53 0a 20 20   that the VFS.  
2f40: 2a 2a 20 68 61 6e 64 6c 65 64 20 74 68 65 20 70  ** handled the p
2f50: 72 61 67 6d 61 20 61 6e 64 20 67 65 6e 65 72 61  ragma and genera
2f60: 74 65 20 61 20 6e 6f 2d 6f 70 20 70 72 65 70 61  te a no-op prepa
2f70: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20  red statement.. 
2f80: 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45   **.  ** IMPLEME
2f90: 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 31 32  NTATION-OF: R-12
2fa0: 32 33 38 2d 35 35 31 32 30 20 57 68 65 6e 65 76  238-55120 Whenev
2fb0: 65 72 20 61 20 50 52 41 47 4d 41 20 73 74 61 74  er a PRAGMA stat
2fc0: 65 6d 65 6e 74 20 69 73 20 70 61 72 73 65 64 2c  ement is parsed,
2fd0: 0a 20 20 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f  .  ** an SQLITE_
2fe0: 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 66 69 6c  FCNTL_PRAGMA fil
2ff0: 65 20 63 6f 6e 74 72 6f 6c 20 69 73 20 73 65 6e  e control is sen
3000: 74 20 74 6f 20 74 68 65 20 6f 70 65 6e 20 73 71  t to the open sq
3010: 6c 69 74 65 33 5f 66 69 6c 65 0a 20 20 2a 2a 20  lite3_file.  ** 
3020: 6f 62 6a 65 63 74 20 63 6f 72 72 65 73 70 6f 6e  object correspon
3030: 64 69 6e 67 20 74 6f 20 74 68 65 20 64 61 74 61  ding to the data
3040: 62 61 73 65 20 66 69 6c 65 20 74 6f 20 77 68 69  base file to whi
3050: 63 68 20 74 68 65 20 70 72 61 67 6d 61 0a 20 20  ch the pragma.  
3060: 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 72 65 66  ** statement ref
3070: 65 72 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  ers..  **.  ** I
3080: 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
3090: 3a 20 52 2d 32 39 38 37 35 2d 33 31 36 37 38 20  : R-29875-31678 
30a0: 54 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  The argument to 
30b0: 74 68 65 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  the SQLITE_FCNTL
30c0: 5f 50 52 41 47 4d 41 0a 20 20 2a 2a 20 66 69 6c  _PRAGMA.  ** fil
30d0: 65 20 63 6f 6e 74 72 6f 6c 20 69 73 20 61 6e 20  e control is an 
30e0: 61 72 72 61 79 20 6f 66 20 70 6f 69 6e 74 65 72  array of pointer
30f0: 73 20 74 6f 20 73 74 72 69 6e 67 73 20 28 63 68  s to strings (ch
3100: 61 72 2a 2a 29 20 69 6e 20 77 68 69 63 68 20 74  ar**) in which t
3110: 68 65 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 65  he.  ** second e
3120: 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72  lement of the ar
3130: 72 61 79 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ray is the name 
3140: 6f 66 20 74 68 65 20 70 72 61 67 6d 61 20 61 6e  of the pragma an
3150: 64 20 74 68 65 20 74 68 69 72 64 0a 20 20 2a 2a  d the third.  **
3160: 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20   element is the 
3170: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
3180: 70 72 61 67 6d 61 20 6f 72 20 4e 55 4c 4c 20 69  pragma or NULL i
3190: 66 20 74 68 65 20 70 72 61 67 6d 61 20 68 61 73  f the pragma has
31a0: 20 6e 6f 0a 20 20 2a 2a 20 61 72 67 75 6d 65 6e   no.  ** argumen
31b0: 74 2e 0a 20 20 2a 2f 0a 20 20 61 46 63 6e 74 6c  t..  */.  aFcntl
31c0: 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 46 63 6e 74  [0] = 0;.  aFcnt
31d0: 6c 5b 31 5d 20 3d 20 7a 4c 65 66 74 3b 0a 20 20  l[1] = zLeft;.  
31e0: 61 46 63 6e 74 6c 5b 32 5d 20 3d 20 7a 52 69 67  aFcntl[2] = zRig
31f0: 68 74 3b 0a 20 20 61 46 63 6e 74 6c 5b 33 5d 20  ht;.  aFcntl[3] 
3200: 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48  = 0;.  db->busyH
3210: 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30  andler.nBusy = 0
3220: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
3230: 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62  _file_control(db
3240: 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43  , zDb, SQLITE_FC
3250: 4e 54 4c 5f 50 52 41 47 4d 41 2c 20 28 76 6f 69  NTL_PRAGMA, (voi
3260: 64 2a 29 61 46 63 6e 74 6c 29 3b 0a 20 20 69 66  d*)aFcntl);.  if
3270: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
3280: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
3290: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
32a0: 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  1);.    sqlite3V
32b0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
32c0: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
32d0: 2c 20 61 46 63 6e 74 6c 5b 30 5d 2c 20 53 51 4c  , aFcntl[0], SQL
32e0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
32f0: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
3300: 54 65 78 74 28 76 2c 20 61 46 63 6e 74 6c 5b 30  Text(v, aFcntl[0
3310: 5d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  ]);.    sqlite3_
3320: 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29 3b  free(aFcntl[0]);
3330: 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61  .    goto pragma
3340: 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20  _out;.  }.  if( 
3350: 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f  rc!=SQLITE_NOTFO
3360: 55 4e 44 20 29 7b 0a 20 20 20 20 69 66 28 20 61  UND ){.    if( a
3370: 46 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20  Fcntl[0] ){.    
3380: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
3390: 67 28 70 50 61 72 73 65 2c 20 22 25 73 22 2c 20  g(pParse, "%s", 
33a0: 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20  aFcntl[0]);.    
33b0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
33c0: 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d  Fcntl[0]);.    }
33d0: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72  .    pParse->nEr
33e0: 72 2b 2b 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  r++;.    pParse-
33f0: 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 67 6f  >rc = rc;.    go
3400: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
3410: 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 63 61 74 65 20   }..  /* Locate 
3420: 74 68 65 20 70 72 61 67 6d 61 20 69 6e 20 74 68  the pragma in th
3430: 65 20 6c 6f 6f 6b 75 70 20 74 61 62 6c 65 20 2a  e lookup table *
3440: 2f 0a 20 20 70 50 72 61 67 6d 61 20 3d 20 70 72  /.  pPragma = pr
3450: 61 67 6d 61 4c 6f 63 61 74 65 28 7a 4c 65 66 74  agmaLocate(zLeft
3460: 29 3b 0a 20 20 69 66 28 20 70 50 72 61 67 6d 61  );.  if( pPragma
3470: 3d 3d 30 20 29 20 67 6f 74 6f 20 70 72 61 67 6d  ==0 ) goto pragm
3480: 61 5f 6f 75 74 3b 0a 0a 20 20 2f 2a 20 4d 61 6b  a_out;..  /* Mak
3490: 65 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62  e sure the datab
34a0: 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 6c 6f  ase schema is lo
34b0: 61 64 65 64 20 69 66 20 74 68 65 20 70 72 61 67  aded if the prag
34c0: 6d 61 20 72 65 71 75 69 72 65 73 20 74 68 61 74  ma requires that
34d0: 20 2a 2f 0a 20 20 69 66 28 20 28 70 50 72 61 67   */.  if( (pPrag
34e0: 6d 61 2d 3e 6d 50 72 61 67 46 6c 67 20 26 20 50  ma->mPragFlg & P
34f0: 72 61 67 46 6c 67 5f 4e 65 65 64 53 63 68 65 6d  ragFlg_NeedSchem
3500: 61 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  a)!=0 ){.    if(
3510: 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
3520: 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74  ma(pParse) ) got
3530: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
3540: 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72  }..  /* Register
3550: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
3560: 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 70 72 61  mn names for pra
3570: 67 6d 61 73 20 74 68 61 74 20 72 65 74 75 72 6e  gmas that return
3580: 20 72 65 73 75 6c 74 73 20 2a 2f 0a 20 20 69 66   results */.  if
3590: 28 20 28 70 50 72 61 67 6d 61 2d 3e 6d 50 72 61  ( (pPragma->mPra
35a0: 67 46 6c 67 20 26 20 50 72 61 67 46 6c 67 5f 4e  gFlg & PragFlg_N
35b0: 6f 43 6f 6c 75 6d 6e 73 29 3d 3d 30 20 0a 20 20  oColumns)==0 .  
35c0: 20 26 26 20 28 28 70 50 72 61 67 6d 61 2d 3e 6d   && ((pPragma->m
35d0: 50 72 61 67 46 6c 67 20 26 20 50 72 61 67 46 6c  PragFlg & PragFl
35e0: 67 5f 4e 6f 43 6f 6c 75 6d 6e 73 31 29 3d 3d 30  g_NoColumns1)==0
35f0: 20 7c 7c 20 7a 52 69 67 68 74 3d 3d 30 29 0a 20   || zRight==0). 
3600: 20 29 7b 0a 20 20 20 20 73 65 74 50 72 61 67 6d   ){.    setPragm
3610: 61 52 65 73 75 6c 74 43 6f 6c 75 6d 6e 4e 61 6d  aResultColumnNam
3620: 65 73 28 76 2c 20 70 50 72 61 67 6d 61 29 3b 0a  es(v, pPragma);.
3630: 20 20 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74    }..  /* Jump t
3640: 6f 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  o the appropriat
3650: 65 20 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72  e pragma handler
3660: 20 2a 2f 0a 20 20 73 77 69 74 63 68 28 20 70 50   */.  switch( pP
3670: 72 61 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 20  ragma->ePragTyp 
3680: 29 7b 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e  ){.  .#if !defin
3690: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ed(SQLITE_OMIT_P
36a0: 41 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26  AGER_PRAGMAS) &&
36b0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
36c0: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
36d0: 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ).  /*.  **  PRA
36e0: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 64 65 66  GMA [schema.]def
36f0: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 0a  ault_cache_size.
3700: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
3710: 68 65 6d 61 2e 5d 64 65 66 61 75 6c 74 5f 63 61  hema.]default_ca
3720: 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a  che_size=N.  **.
3730: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
3740: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
3750: 63 75 72 72 65 6e 74 20 70 65 72 73 69 73 74 65  current persiste
3760: 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74  nt setting for t
3770: 68 65 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63  he.  ** page cac
3780: 68 65 20 73 69 7a 65 2e 20 20 54 68 65 20 76 61  he size.  The va
3790: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 69 73 20  lue returned is 
37a0: 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
37b0: 65 72 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65 73  er of.  ** pages
37c0: 20 69 6e 20 74 68 65 20 70 61 67 65 20 63 61 63   in the page cac
37d0: 68 65 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20  he.  The second 
37e0: 66 6f 72 6d 20 73 65 74 73 20 62 6f 74 68 20 74  form sets both t
37f0: 68 65 20 63 75 72 72 65 6e 74 0a 20 20 2a 2a 20  he current.  ** 
3800: 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 20  page cache size 
3810: 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 70 65  value and the pe
3820: 72 73 69 73 74 65 6e 74 20 70 61 67 65 20 63 61  rsistent page ca
3830: 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 0a 20  che size value. 
3840: 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74 68   ** stored in th
3850: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
3860: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6c 64 65 72  .  **.  ** Older
3870: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
3880: 69 74 65 20 77 6f 75 6c 64 20 73 65 74 20 74 68  ite would set th
3890: 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65 20  e default cache 
38a0: 73 69 7a 65 20 74 6f 20 61 0a 20 20 2a 2a 20 6e  size to a.  ** n
38b0: 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 74  egative number t
38c0: 6f 20 69 6e 64 69 63 61 74 65 20 73 79 6e 63 68  o indicate synch
38d0: 72 6f 6e 6f 75 73 3d 4f 46 46 2e 20 20 54 68 65  ronous=OFF.  The
38e0: 73 65 20 64 61 79 73 2c 20 73 79 6e 63 68 72 6f  se days, synchro
38f0: 6e 6f 75 73 0a 20 20 2a 2a 20 69 73 20 61 6c 77  nous.  ** is alw
3900: 61 79 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c  ays on by defaul
3910: 74 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  t regardless of 
3920: 74 68 65 20 73 69 67 6e 20 6f 66 20 74 68 65 20  the sign of the 
3930: 64 65 66 61 75 6c 74 20 63 61 63 68 65 0a 20 20  default cache.  
3940: 2a 2a 20 73 69 7a 65 2e 20 20 42 75 74 20 63 6f  ** size.  But co
3950: 6e 74 69 6e 75 65 20 74 6f 20 74 61 6b 65 20 74  ntinue to take t
3960: 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75  he absolute valu
3970: 65 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74  e of the default
3980: 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a 65   cache.  ** size
3990: 20 6f 66 20 68 69 73 74 6f 72 69 63 61 6c 20 63   of historical c
39a0: 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 0a 20 20  ompatibility..  
39b0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
39c0: 70 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  p_DEFAULT_CACHE_
39d0: 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73 74 61 74  SIZE: {.    stat
39e0: 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e  ic const int iLn
39f0: 20 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c   = VDBE_OFFSET_L
3a00: 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73 74  INENO(2);.    st
3a10: 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f  atic const VdbeO
3a20: 70 4c 69 73 74 20 67 65 74 43 61 63 68 65 53 69  pList getCacheSi
3a30: 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b  ze[] = {.      {
3a40: 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c   OP_Transaction,
3a50: 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   0, 0,        0}
3a60: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
3a70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 2a            /* 0 *
3a80: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61  /.      { OP_Rea
3a90: 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20 31 2c 20  dCookie,  0, 1, 
3aa0: 20 20 20 20 20 20 20 42 54 52 45 45 5f 44 45 46         BTREE_DEF
3ab0: 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 7d  AULT_CACHE_SIZE}
3ac0: 2c 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20  ,  /* 1 */.     
3ad0: 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20   { OP_IfPos,    
3ae0: 20 20 20 31 2c 20 38 2c 20 20 20 20 20 20 20 20     1, 8,        
3af0: 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49  0},.      { OP_I
3b00: 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c 20 32  nteger,     0, 2
3b10: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
3b20: 20 20 20 7b 20 4f 50 5f 53 75 62 74 72 61 63 74     { OP_Subtract
3b30: 2c 20 20 20 20 31 2c 20 32 2c 20 20 20 20 20 20  ,    1, 2,      
3b40: 20 20 31 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    1},.      { OP
3b50: 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c  _IfPos,       1,
3b60: 20 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   8,        0},. 
3b70: 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65       { OP_Intege
3b80: 72 2c 20 20 20 20 20 30 2c 20 31 2c 20 20 20 20  r,     0, 1,    
3b90: 20 20 20 20 30 7d 2c 20 20 20 20 20 20 20 20 20      0},         
3ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bb0: 2f 2a 20 36 20 2a 2f 0a 20 20 20 20 20 20 7b 20  /* 6 */.      { 
3bc0: 4f 50 5f 4e 6f 6f 70 2c 20 20 20 20 20 20 20 20  OP_Noop,        
3bd0: 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 0,        0},
3be0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75  .      { OP_Resu
3bf0: 6c 74 52 6f 77 2c 20 20 20 31 2c 20 31 2c 20 20  ltRow,   1, 1,  
3c00: 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b        0},.    };
3c10: 0a 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70  .    VdbeOp *aOp
3c20: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
3c30: 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44  eUsesBtree(v, iD
3c40: 62 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  b);.    if( !zRi
3c50: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 70 50 61  ght ){.      pPa
3c60: 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 32 3b 0a  rse->nMem += 2;.
3c70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
3c80: 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52  eVerifyNoMallocR
3c90: 65 71 75 69 72 65 64 28 76 2c 20 41 72 72 61 79  equired(v, Array
3ca0: 53 69 7a 65 28 67 65 74 43 61 63 68 65 53 69 7a  Size(getCacheSiz
3cb0: 65 29 29 3b 0a 20 20 20 20 20 20 61 4f 70 20 3d  e));.      aOp =
3cc0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
3cd0: 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69  pList(v, ArraySi
3ce0: 7a 65 28 67 65 74 43 61 63 68 65 53 69 7a 65 29  ze(getCacheSize)
3cf0: 2c 20 67 65 74 43 61 63 68 65 53 69 7a 65 2c 20  , getCacheSize, 
3d00: 69 4c 6e 29 3b 0a 20 20 20 20 20 20 69 66 28 20  iLn);.      if( 
3d10: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
3d20: 53 54 52 45 53 53 28 61 4f 70 3d 3d 30 29 20 29  STRESS(aOp==0) )
3d30: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 61 4f   break;.      aO
3d40: 70 5b 30 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20  p[0].p1 = iDb;. 
3d50: 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70 31 20 3d       aOp[1].p1 =
3d60: 20 69 44 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b   iDb;.      aOp[
3d70: 36 5d 2e 70 31 20 3d 20 53 51 4c 49 54 45 5f 44  6].p1 = SQLITE_D
3d80: 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a  EFAULT_CACHE_SIZ
3d90: 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  E;.    }else{.  
3da0: 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 73      int size = s
3db0: 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 73  qlite3AbsInt32(s
3dc0: 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68  qlite3Atoi(zRigh
3dd0: 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  t));.      sqlit
3de0: 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
3df0: 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c  ation(pParse, 0,
3e00: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c   iDb);.      sql
3e10: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
3e20: 2c 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20  , OP_SetCookie, 
3e30: 69 44 62 2c 20 42 54 52 45 45 5f 44 45 46 41 55  iDb, BTREE_DEFAU
3e40: 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 2c 20 73  LT_CACHE_SIZE, s
3e50: 69 7a 65 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ize);.      asse
3e60: 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
3e70: 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
3e80: 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 20 20  Db, 0) );.      
3e90: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61  pDb->pSchema->ca
3ea0: 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b  che_size = size;
3eb0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74  .      sqlite3Bt
3ec0: 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65 28  reeSetCacheSize(
3ed0: 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e 70  pDb->pBt, pDb->p
3ee0: 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69  Schema->cache_si
3ef0: 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62  ze);.    }.    b
3f00: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
3f10: 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54   /* !SQLITE_OMIT
3f20: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 26  _PAGER_PRAGMAS &
3f30: 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  & !SQLITE_OMIT_D
3f40: 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a 23 69  EPRECATED */..#i
3f50: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
3f60: 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
3f70: 47 4d 41 53 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20  GMAS).  /*.  ** 
3f80: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
3f90: 5d 70 61 67 65 5f 73 69 7a 65 0a 20 20 2a 2a 20  ]page_size.  ** 
3fa0: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
3fb0: 5d 70 61 67 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a  ]page_size=N.  *
3fc0: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
3fd0: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
3fe0: 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e  e current settin
3ff0: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 64  g for the.  ** d
4000: 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a  atabase page siz
4010: 65 20 69 6e 20 62 79 74 65 73 2e 20 20 54 68 65  e in bytes.  The
4020: 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74   second form set
4030: 73 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62  s the.  ** datab
4040: 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 76 61  ase page size va
4050: 6c 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  lue.  The value 
4060: 63 61 6e 20 6f 6e 6c 79 20 62 65 20 73 65 74 20  can only be set 
4070: 69 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61  if.  ** the data
4080: 62 61 73 65 20 68 61 73 20 6e 6f 74 20 79 65 74  base has not yet
4090: 20 62 65 65 6e 20 63 72 65 61 74 65 64 2e 0a 20   been created.. 
40a0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
40b0: 79 70 5f 50 41 47 45 5f 53 49 5a 45 3a 20 7b 0a  yp_PAGE_SIZE: {.
40c0: 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d      Btree *pBt =
40d0: 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61   pDb->pBt;.    a
40e0: 73 73 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b  ssert( pBt!=0 );
40f0: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
4100: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69   ){.      int si
4110: 7a 65 20 3d 20 41 4c 57 41 59 53 28 70 42 74 29  ze = ALWAYS(pBt)
4120: 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65 47   ? sqlite3BtreeG
4130: 65 74 50 61 67 65 53 69 7a 65 28 70 42 74 29 20  etPageSize(pBt) 
4140: 3a 20 30 3b 0a 20 20 20 20 20 20 72 65 74 75 72  : 0;.      retur
4150: 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 73 69  nSingleInt(v, si
4160: 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ze);.    }else{.
4170: 20 20 20 20 20 20 2f 2a 20 4d 61 6c 6c 6f 63 20        /* Malloc 
4180: 6d 61 79 20 66 61 69 6c 20 77 68 65 6e 20 73 65  may fail when se
4190: 74 74 69 6e 67 20 74 68 65 20 70 61 67 65 2d 73  tting the page-s
41a0: 69 7a 65 2c 20 61 73 20 74 68 65 72 65 20 69 73  ize, as there is
41b0: 20 61 6e 20 69 6e 74 65 72 6e 61 6c 0a 20 20 20   an internal.   
41c0: 20 20 20 2a 2a 20 62 75 66 66 65 72 20 74 68 61     ** buffer tha
41d0: 74 20 74 68 65 20 70 61 67 65 72 20 6d 6f 64 75  t the pager modu
41e0: 6c 65 20 72 65 73 69 7a 65 73 20 75 73 69 6e 67  le resizes using
41f0: 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63   sqlite3_realloc
4200: 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ()..      */.   
4210: 20 20 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73     db->nextPages
4220: 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74 6f  ize = sqlite3Ato
4230: 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  i(zRight);.     
4240: 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f 4d 45   if( SQLITE_NOME
4250: 4d 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 53  M==sqlite3BtreeS
4260: 65 74 50 61 67 65 53 69 7a 65 28 70 42 74 2c 20  etPageSize(pBt, 
4270: 64 62 2d 3e 6e 65 78 74 50 61 67 65 73 69 7a 65  db->nextPagesize
4280: 2c 2d 31 2c 30 29 20 29 7b 0a 20 20 20 20 20 20  ,-1,0) ){.      
4290: 20 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c    sqlite3OomFaul
42a0: 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20  t(db);.      }. 
42b0: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
42c0: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
42d0: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
42e0: 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a 20 20  secure_delete.  
42f0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
4300: 6d 61 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74  ma.]secure_delet
4310: 65 3d 4f 4e 2f 4f 46 46 2f 46 41 53 54 0a 20 20  e=ON/OFF/FAST.  
4320: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73  **.  ** The firs
4330: 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74  t form reports t
4340: 68 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69  he current setti
4350: 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ng for the.  ** 
4360: 73 65 63 75 72 65 5f 64 65 6c 65 74 65 20 66 6c  secure_delete fl
4370: 61 67 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20  ag.  The second 
4380: 66 6f 72 6d 20 63 68 61 6e 67 65 73 20 74 68 65  form changes the
4390: 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a 20   secure_delete. 
43a0: 20 2a 2a 20 66 6c 61 67 20 73 65 74 74 69 6e 67   ** flag setting
43b0: 20 61 6e 64 20 72 65 70 6f 72 74 73 20 74 68 65   and reports the
43c0: 20 6e 65 77 20 76 61 6c 75 65 2e 0a 20 20 2a 2f   new value..  */
43d0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
43e0: 53 45 43 55 52 45 5f 44 45 4c 45 54 45 3a 20 7b  SECURE_DELETE: {
43f0: 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20  .    Btree *pBt 
4400: 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20  = pDb->pBt;.    
4410: 69 6e 74 20 62 20 3d 20 2d 31 3b 0a 20 20 20 20  int b = -1;.    
4420: 61 73 73 65 72 74 28 20 70 42 74 21 3d 30 20 29  assert( pBt!=0 )
4430: 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
4440: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71   ){.      if( sq
4450: 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 52  lite3_stricmp(zR
4460: 69 67 68 74 2c 20 22 66 61 73 74 22 29 3d 3d 30  ight, "fast")==0
4470: 20 29 7b 0a 20 20 20 20 20 20 20 20 62 20 3d 20   ){.        b = 
4480: 32 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  2;.      }else{.
4490: 20 20 20 20 20 20 20 20 62 20 3d 20 73 71 6c 69          b = sqli
44a0: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
44b0: 69 67 68 74 2c 20 30 29 3b 0a 20 20 20 20 20 20  ight, 0);.      
44c0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
44d0: 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 62 3e  pId2->n==0 && b>
44e0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
44f0: 69 69 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 69  ii;.      for(ii
4500: 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
4510: 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73  ii++){.        s
4520: 71 6c 69 74 65 33 42 74 72 65 65 53 65 63 75 72  qlite3BtreeSecur
4530: 65 44 65 6c 65 74 65 28 64 62 2d 3e 61 44 62 5b  eDelete(db->aDb[
4540: 69 69 5d 2e 70 42 74 2c 20 62 29 3b 0a 20 20 20  ii].pBt, b);.   
4550: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
4560: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
4570: 65 63 75 72 65 44 65 6c 65 74 65 28 70 42 74 2c  ecureDelete(pBt,
4580: 20 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 53   b);.    returnS
4590: 69 6e 67 6c 65 49 6e 74 28 76 2c 20 62 29 3b 0a  ingleInt(v, b);.
45a0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
45b0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
45c0: 41 20 5b 73 63 68 65 6d 61 2e 5d 6d 61 78 5f 70  A [schema.]max_p
45d0: 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 20 20  age_count.  **  
45e0: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
45f0: 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 3d 4e  max_page_count=N
4600: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66  .  **.  ** The f
4610: 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74  irst form report
4620: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65  s the current se
4630: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
4640: 2a 2a 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  ** maximum numbe
4650: 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
4660: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
4670: 20 20 54 68 65 20 0a 20 20 2a 2a 20 73 65 63 6f    The .  ** seco
4680: 6e 64 20 66 6f 72 6d 20 61 74 74 65 6d 70 74 73  nd form attempts
4690: 20 74 6f 20 63 68 61 6e 67 65 20 74 68 69 73 20   to change this 
46a0: 73 65 74 74 69 6e 67 2e 20 20 42 6f 74 68 0a 20  setting.  Both. 
46b0: 20 2a 2a 20 66 6f 72 6d 73 20 72 65 74 75 72 6e   ** forms return
46c0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65 74   the current set
46d0: 74 69 6e 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ting..  **.  ** 
46e0: 54 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c  The absolute val
46f0: 75 65 20 6f 66 20 4e 20 69 73 20 75 73 65 64 2e  ue of N is used.
4700: 20 20 54 68 69 73 20 69 73 20 75 6e 64 6f 63 75    This is undocu
4710: 6d 65 6e 74 65 64 20 61 6e 64 20 6d 69 67 68 74  mented and might
4720: 0a 20 20 2a 2a 20 63 68 61 6e 67 65 2e 20 20 54  .  ** change.  T
4730: 68 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20  he only purpose 
4740: 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61 6e  is to provide an
4750: 20 65 61 73 79 20 77 61 79 20 74 6f 20 74 65 73   easy way to tes
4760: 74 0a 20 20 2a 2a 20 74 68 65 20 73 71 6c 69 74  t.  ** the sqlit
4770: 65 33 41 62 73 49 6e 74 33 32 28 29 20 66 75 6e  e3AbsInt32() fun
4780: 63 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ction..  **.  **
4790: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
47a0: 2e 5d 70 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a  .]page_count.  *
47b0: 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 74 68  *.  ** Return th
47c0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
47d0: 73 20 69 6e 20 74 68 65 20 73 70 65 63 69 66 69  s in the specifi
47e0: 65 64 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a  ed database..  *
47f0: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
4800: 5f 50 41 47 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20  _PAGE_COUNT: {. 
4810: 20 20 20 69 6e 74 20 69 52 65 67 3b 0a 20 20 20     int iReg;.   
4820: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
4830: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
4840: 20 69 44 62 29 3b 0a 20 20 20 20 69 52 65 67 20   iDb);.    iReg 
4850: 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  = ++pParse->nMem
4860: 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
4870: 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30  3Tolower(zLeft[0
4880: 5d 29 3d 3d 27 70 27 20 29 7b 0a 20 20 20 20 20  ])=='p' ){.     
4890: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
48a0: 70 32 28 76 2c 20 4f 50 5f 50 61 67 65 63 6f 75  p2(v, OP_Pagecou
48b0: 6e 74 2c 20 69 44 62 2c 20 69 52 65 67 29 3b 0a  nt, iDb, iReg);.
48c0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
48d0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
48e0: 70 33 28 76 2c 20 4f 50 5f 4d 61 78 50 67 63 6e  p3(v, OP_MaxPgcn
48f0: 74 2c 20 69 44 62 2c 20 69 52 65 67 2c 20 0a 20  t, iDb, iReg, . 
4900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4910: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 41 62         sqlite3Ab
4920: 73 49 6e 74 33 32 28 73 71 6c 69 74 65 33 41 74  sInt32(sqlite3At
4930: 6f 69 28 7a 52 69 67 68 74 29 29 29 3b 0a 20 20  oi(zRight)));.  
4940: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
4950: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
4960: 52 65 73 75 6c 74 52 6f 77 2c 20 69 52 65 67 2c  ResultRow, iReg,
4970: 20 31 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a   1);.    break;.
4980: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
4990: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
49a0: 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20 2a  locking_mode.  *
49b0: 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d  *  PRAGMA [schem
49c0: 61 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 20  a.]locking_mode 
49d0: 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c 75 73  = (normal|exclus
49e0: 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ive).  */.  case
49f0: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e 47   PragTyp_LOCKING
4a00: 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 63 6f 6e  _MODE: {.    con
4a10: 73 74 20 63 68 61 72 20 2a 7a 52 65 74 20 3d 20  st char *zRet = 
4a20: 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20 20 69 6e  "normal";.    in
4a30: 74 20 65 4d 6f 64 65 20 3d 20 67 65 74 4c 6f 63  t eMode = getLoc
4a40: 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67 68 74 29  kingMode(zRight)
4a50: 3b 0a 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d  ;..    if( pId2-
4a60: 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64 65 3d 3d  >n==0 && eMode==
4a70: 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44  PAGER_LOCKINGMOD
4a80: 45 5f 51 55 45 52 59 20 29 7b 0a 20 20 20 20 20  E_QUERY ){.     
4a90: 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50 52 41 47   /* Simple "PRAG
4aa0: 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 3b  MA locking_mode;
4ab0: 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69  " statement. Thi
4ac0: 73 20 69 73 20 61 20 71 75 65 72 79 20 66 6f 72  s is a query for
4ad0: 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 75  .      ** the cu
4ae0: 72 72 65 6e 74 20 64 65 66 61 75 6c 74 20 6c 6f  rrent default lo
4af0: 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77 68 69 63  cking mode (whic
4b00: 68 20 6d 61 79 20 62 65 20 64 69 66 66 65 72 65  h may be differe
4b10: 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 74  nt to.      ** t
4b20: 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20  he locking-mode 
4b30: 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  of the main data
4b40: 62 61 73 65 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  base)..      */.
4b50: 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 64 62        eMode = db
4b60: 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 0a  ->dfltLockMode;.
4b70: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4b80: 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 0a   Pager *pPager;.
4b90: 20 20 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e        if( pId2->
4ba0: 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  n==0 ){.        
4bb0: 2f 2a 20 54 68 69 73 20 69 6e 64 69 63 61 74 65  /* This indicate
4bc0: 73 20 74 68 61 74 20 6e 6f 20 64 61 74 61 62 61  s that no databa
4bd0: 73 65 20 6e 61 6d 65 20 77 61 73 20 73 70 65 63  se name was spec
4be0: 69 66 69 65 64 20 61 73 20 70 61 72 74 0a 20 20  ified as part.  
4bf0: 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20        ** of the 
4c00: 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 2e 20  PRAGMA command. 
4c10: 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
4c20: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6d 75   locking-mode mu
4c30: 73 74 20 62 65 0a 20 20 20 20 20 20 20 20 2a 2a  st be.        **
4c40: 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61 74 74 61   set on all atta
4c50: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2c 20  ched databases, 
4c60: 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65 20 6d  as well as the m
4c70: 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a 20 20 20  ain db file..   
4c80: 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 20 20       **.        
4c90: 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20 73 71 6c  ** Also, the sql
4ca0: 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d 6f 64  ite3.dfltLockMod
4cb0: 65 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  e variable is se
4cc0: 74 20 73 6f 20 74 68 61 74 0a 20 20 20 20 20 20  t so that.      
4cd0: 20 20 2a 2a 20 61 6e 79 20 73 75 62 73 65 71 75    ** any subsequ
4ce0: 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 20 64  ently attached d
4cf0: 61 74 61 62 61 73 65 73 20 61 6c 73 6f 20 75 73  atabases also us
4d00: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 0a  e the specified.
4d10: 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f 63 6b 69          ** locki
4d20: 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20 20 20 20  ng mode..       
4d30: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74 20   */.        int 
4d40: 69 69 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  ii;.        asse
4d50: 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e 61 44 62  rt(pDb==&db->aDb
4d60: 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  [0]);.        fo
4d70: 72 28 69 69 3d 32 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=2; ii<db->n
4d80: 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
4d90: 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73 71       pPager = sq
4da0: 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
4db0: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 29  db->aDb[ii].pBt)
4dc0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
4dd0: 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d  te3PagerLockingM
4de0: 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f 64  ode(pPager, eMod
4df0: 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  e);.        }.  
4e00: 20 20 20 20 20 20 64 62 2d 3e 64 66 6c 74 4c 6f        db->dfltLo
4e10: 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29 65 4d 6f  ckMode = (u8)eMo
4e20: 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  de;.      }.    
4e30: 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74    pPager = sqlit
4e40: 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62  e3BtreePager(pDb
4e50: 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 65 4d  ->pBt);.      eM
4e60: 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67  ode = sqlite3Pag
4e70: 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50  erLockingMode(pP
4e80: 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20  ager, eMode);.  
4e90: 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28    }..    assert(
4ea0: 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f   eMode==PAGER_LO
4eb0: 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41 4c  CKINGMODE_NORMAL
4ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20  .            || 
4ed0: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43  eMode==PAGER_LOC
4ee0: 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49  KINGMODE_EXCLUSI
4ef0: 56 45 20 29 3b 0a 20 20 20 20 69 66 28 20 65 4d  VE );.    if( eM
4f00: 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49  ode==PAGER_LOCKI
4f10: 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56 45  NGMODE_EXCLUSIVE
4f20: 20 29 7b 0a 20 20 20 20 20 20 7a 52 65 74 20 3d   ){.      zRet =
4f30: 20 22 65 78 63 6c 75 73 69 76 65 22 3b 0a 20 20   "exclusive";.  
4f40: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69    }.    returnSi
4f50: 6e 67 6c 65 54 65 78 74 28 76 2c 20 7a 52 65 74  ngleText(v, zRet
4f60: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
4f70: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  }..  /*.  **  PR
4f80: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6a 6f  AGMA [schema.]jo
4f90: 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a 2a 20  urnal_mode.  ** 
4fa0: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
4fb0: 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 0a  ]journal_mode =.
4fc0: 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20    **            
4fd0: 20 20 20 20 20 20 20 20 20 20 28 64 65 6c 65 74            (delet
4fe0: 65 7c 70 65 72 73 69 73 74 7c 6f 66 66 7c 74 72  e|persist|off|tr
4ff0: 75 6e 63 61 74 65 7c 6d 65 6d 6f 72 79 7c 77 61  uncate|memory|wa
5000: 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20 20 63 61  l|off).  */.  ca
5010: 73 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e  se PragTyp_JOURN
5020: 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 69  AL_MODE: {.    i
5030: 6e 74 20 65 4d 6f 64 65 3b 20 20 20 20 20 20 20  nt eMode;       
5040: 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 50   /* One of the P
5050: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
5060: 5f 58 58 58 20 73 79 6d 62 6f 6c 73 20 2a 2f 0a  _XXX symbols */.
5070: 20 20 20 20 69 6e 74 20 69 69 3b 20 20 20 20 20      int ii;     
5080: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
5090: 75 6e 74 65 72 20 2a 2f 0a 0a 20 20 20 20 69 66  unter */..    if
50a0: 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20  ( zRight==0 ){. 
50b0: 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65       /* If there
50c0: 20 69 73 20 6e 6f 20 22 3d 4d 4f 44 45 22 20 70   is no "=MODE" p
50d0: 61 72 74 20 6f 66 20 74 68 65 20 70 72 61 67 6d  art of the pragm
50e0: 61 2c 20 64 6f 20 61 20 71 75 65 72 79 20 66 6f  a, do a query fo
50f0: 72 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 63  r the.      ** c
5100: 75 72 72 65 6e 74 20 6d 6f 64 65 20 2a 2f 0a 20  urrent mode */. 
5110: 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50 41 47       eMode = PAG
5120: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
5130: 55 45 52 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  UERY;.    }else{
5140: 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
5150: 72 20 2a 7a 4d 6f 64 65 3b 0a 20 20 20 20 20 20  r *zMode;.      
5160: 69 6e 74 20 6e 20 3d 20 73 71 6c 69 74 65 33 53  int n = sqlite3S
5170: 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 3b  trlen30(zRight);
5180: 0a 20 20 20 20 20 20 66 6f 72 28 65 4d 6f 64 65  .      for(eMode
5190: 3d 30 3b 20 28 7a 4d 6f 64 65 20 3d 20 73 71 6c  =0; (zMode = sql
51a0: 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e  ite3JournalModen
51b0: 61 6d 65 28 65 4d 6f 64 65 29 29 21 3d 30 3b 20  ame(eMode))!=0; 
51c0: 65 4d 6f 64 65 2b 2b 29 7b 0a 20 20 20 20 20 20  eMode++){.      
51d0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
51e0: 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 7a 4d  NICmp(zRight, zM
51f0: 6f 64 65 2c 20 6e 29 3d 3d 30 20 29 20 62 72 65  ode, n)==0 ) bre
5200: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
5210: 20 20 69 66 28 20 21 7a 4d 6f 64 65 20 29 7b 0a    if( !zMode ){.
5220: 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
5230: 65 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 64  e "=MODE" part d
5240: 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e  oes not match an
5250: 79 20 6b 6e 6f 77 6e 20 6a 6f 75 72 6e 61 6c 20  y known journal 
5260: 6d 6f 64 65 2c 0a 20 20 20 20 20 20 20 20 2a 2a  mode,.        **
5270: 20 74 68 65 6e 20 64 6f 20 61 20 71 75 65 72 79   then do a query
5280: 20 2a 2f 0a 20 20 20 20 20 20 20 20 65 4d 6f 64   */.        eMod
5290: 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  e = PAGER_JOURNA
52a0: 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20 20  LMODE_QUERY;.   
52b0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
52c0: 66 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  f( eMode==PAGER_
52d0: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
52e0: 59 20 26 26 20 70 49 64 32 2d 3e 6e 3d 3d 30 20  Y && pId2->n==0 
52f0: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76  ){.      /* Conv
5300: 65 72 74 20 22 50 52 41 47 4d 41 20 6a 6f 75 72  ert "PRAGMA jour
5310: 6e 61 6c 5f 6d 6f 64 65 22 20 69 6e 74 6f 20 22  nal_mode" into "
5320: 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72  PRAGMA main.jour
5330: 6e 61 6c 5f 6d 6f 64 65 22 20 2a 2f 0a 20 20 20  nal_mode" */.   
5340: 20 20 20 69 44 62 20 3d 20 30 3b 0a 20 20 20 20     iDb = 0;.    
5350: 20 20 70 49 64 32 2d 3e 6e 20 3d 20 31 3b 0a 20    pId2->n = 1;. 
5360: 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 69 3d     }.    for(ii=
5370: 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30  db->nDb-1; ii>=0
5380: 3b 20 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 69  ; ii--){.      i
5390: 66 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  f( db->aDb[ii].p
53a0: 42 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c  Bt && (ii==iDb |
53b0: 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b  | pId2->n==0) ){
53c0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
53d0: 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76 2c  VdbeUsesBtree(v,
53e0: 20 69 69 29 3b 0a 20 20 20 20 20 20 20 20 73 71   ii);.        sq
53f0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
5400: 76 2c 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64  v, OP_JournalMod
5410: 65 2c 20 69 69 2c 20 31 2c 20 65 4d 6f 64 65 29  e, ii, 1, eMode)
5420: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
5430: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
5440: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
5450: 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20  ltRow, 1, 1);.  
5460: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
5470: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
5480: 5b 73 63 68 65 6d 61 2e 5d 6a 6f 75 72 6e 61 6c  [schema.]journal
5490: 5f 73 69 7a 65 5f 6c 69 6d 69 74 0a 20 20 2a 2a  _size_limit.  **
54a0: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
54b0: 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c  .]journal_size_l
54c0: 69 6d 69 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  imit=N.  **.  **
54d0: 20 47 65 74 20 6f 72 20 73 65 74 20 74 68 65 20   Get or set the 
54e0: 73 69 7a 65 20 6c 69 6d 69 74 20 6f 6e 20 72 6f  size limit on ro
54f0: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66  llback journal f
5500: 69 6c 65 73 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  iles..  */.  cas
5510: 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41  e PragTyp_JOURNA
5520: 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54 3a 20 7b 0a  L_SIZE_LIMIT: {.
5530: 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65      Pager *pPage
5540: 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
5550: 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b  Pager(pDb->pBt);
5560: 0a 20 20 20 20 69 36 34 20 69 4c 69 6d 69 74 20  .    i64 iLimit 
5570: 3d 20 2d 32 3b 0a 20 20 20 20 69 66 28 20 7a 52  = -2;.    if( zR
5580: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71  ight ){.      sq
5590: 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49  lite3DecOrHexToI
55a0: 36 34 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d  64(zRight, &iLim
55b0: 69 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69  it);.      if( i
55c0: 4c 69 6d 69 74 3c 2d 31 20 29 20 69 4c 69 6d 69  Limit<-1 ) iLimi
55d0: 74 20 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20  t = -1;.    }.  
55e0: 20 20 69 4c 69 6d 69 74 20 3d 20 73 71 6c 69 74    iLimit = sqlit
55f0: 65 33 50 61 67 65 72 4a 6f 75 72 6e 61 6c 53 69  e3PagerJournalSi
5600: 7a 65 4c 69 6d 69 74 28 70 50 61 67 65 72 2c 20  zeLimit(pPager, 
5610: 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 72 65 74  iLimit);.    ret
5620: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20  urnSingleInt(v, 
5630: 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 62 72 65  iLimit);.    bre
5640: 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66 20  ak;.  }..#endif 
5650: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  /* SQLITE_OMIT_P
5660: 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  AGER_PRAGMAS */.
5670: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
5680: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 75 74 6f  MA [schema.]auto
5690: 5f 76 61 63 75 75 6d 0a 20 20 2a 2a 20 20 50 52  _vacuum.  **  PR
56a0: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 75  AGMA [schema.]au
56b0: 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a 2a  to_vacuum=N.  **
56c0: 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20 73 65 74  .  ** Get or set
56d0: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
56e0: 65 20 64 61 74 61 62 61 73 65 20 27 61 75 74 6f  e database 'auto
56f0: 2d 76 61 63 75 75 6d 27 20 70 61 72 61 6d 65 74  -vacuum' paramet
5700: 65 72 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61 6c  er..  ** The val
5710: 75 65 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20 30  ue is one of:  0
5720: 20 4e 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20 49   NONE 1 FULL 2 I
5730: 4e 43 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f 0a  NCREMENTAL.  */.
5740: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
5750: 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20  MIT_AUTOVACUUM. 
5760: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 41 55   case PragTyp_AU
5770: 54 4f 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20  TO_VACUUM: {.   
5780: 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44   Btree *pBt = pD
5790: 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65  b->pBt;.    asse
57a0: 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20  rt( pBt!=0 );.  
57b0: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
57c0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
57d0: 67 6c 65 49 6e 74 28 76 2c 20 73 71 6c 69 74 65  gleInt(v, sqlite
57e0: 33 42 74 72 65 65 47 65 74 41 75 74 6f 56 61 63  3BtreeGetAutoVac
57f0: 75 75 6d 28 70 42 74 29 29 3b 0a 20 20 20 20 7d  uum(pBt));.    }
5800: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20  else{.      int 
5810: 65 41 75 74 6f 20 3d 20 67 65 74 41 75 74 6f 56  eAuto = getAutoV
5820: 61 63 75 75 6d 28 7a 52 69 67 68 74 29 3b 0a 20  acuum(zRight);. 
5830: 20 20 20 20 20 61 73 73 65 72 74 28 20 65 41 75       assert( eAu
5840: 74 6f 3e 3d 30 20 26 26 20 65 41 75 74 6f 3c 3d  to>=0 && eAuto<=
5850: 32 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e  2 );.      db->n
5860: 65 78 74 41 75 74 6f 76 61 63 20 3d 20 28 75 38  extAutovac = (u8
5870: 29 65 41 75 74 6f 3b 0a 20 20 20 20 20 20 2f 2a  )eAuto;.      /*
5880: 20 43 61 6c 6c 20 53 65 74 41 75 74 6f 56 61 63   Call SetAutoVac
5890: 75 75 6d 28 29 20 74 6f 20 73 65 74 20 69 6e 69  uum() to set ini
58a0: 74 69 61 6c 69 7a 65 20 74 68 65 20 69 6e 74 65  tialize the inte
58b0: 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64 0a 20 20  rnal auto and.  
58c0: 20 20 20 20 2a 2a 20 69 6e 63 72 2d 76 61 63 75      ** incr-vacu
58d0: 75 6d 20 66 6c 61 67 73 2e 20 54 68 69 73 20 69  um flags. This i
58e0: 73 20 72 65 71 75 69 72 65 64 20 69 6e 20 63 61  s required in ca
58f0: 73 65 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69  se this connecti
5900: 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 63 72 65 61  on.      ** crea
5910: 74 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  tes the database
5920: 20 66 69 6c 65 2e 20 49 74 20 69 73 20 69 6d 70   file. It is imp
5930: 6f 72 74 61 6e 74 20 74 68 61 74 20 69 74 20 69  ortant that it i
5940: 73 20 63 72 65 61 74 65 64 0a 20 20 20 20 20 20  s created.      
5950: 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61  ** as an auto-va
5960: 63 75 75 6d 20 63 61 70 61 62 6c 65 20 64 62 2e  cuum capable db.
5970: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
5980: 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
5990: 65 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28 70  eSetAutoVacuum(p
59a0: 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20 20 20 20  Bt, eAuto);.    
59b0: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
59c0: 5f 4f 4b 20 26 26 20 28 65 41 75 74 6f 3d 3d 31  _OK && (eAuto==1
59d0: 20 7c 7c 20 65 41 75 74 6f 3d 3d 32 29 20 29 7b   || eAuto==2) ){
59e0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e  .        /* When
59f0: 20 73 65 74 74 69 6e 67 20 74 68 65 20 61 75 74   setting the aut
5a00: 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65 20 74 6f  o_vacuum mode to
5a10: 20 65 69 74 68 65 72 20 22 66 75 6c 6c 22 20 6f   either "full" o
5a20: 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 69  r .        ** "i
5a30: 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20 77 72 69  ncremental", wri
5a40: 74 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  te the value of 
5a50: 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68 65 20 64  meta[6] in the d
5a60: 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 20 20  atabase.        
5a70: 2a 2a 20 66 69 6c 65 2e 20 42 65 66 6f 72 65 20  ** file. Before 
5a80: 77 72 69 74 69 6e 67 20 74 6f 20 6d 65 74 61 5b  writing to meta[
5a90: 36 5d 2c 20 63 68 65 63 6b 20 74 68 61 74 20 6d  6], check that m
5aa0: 65 74 61 5b 33 5d 20 69 6e 64 69 63 61 74 65 73  eta[3] indicates
5ab0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 74  .        ** that
5ac0: 20 74 68 69 73 20 72 65 61 6c 6c 79 20 69 73 20   this really is 
5ad0: 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 63  an auto-vacuum c
5ae0: 61 70 61 62 6c 65 20 64 61 74 61 62 61 73 65 2e  apable database.
5af0: 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
5b00: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
5b10: 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f   int iLn = VDBE_
5b20: 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29  OFFSET_LINENO(2)
5b30: 3b 0a 20 20 20 20 20 20 20 20 73 74 61 74 69 63  ;.        static
5b40: 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
5b50: 74 20 73 65 74 4d 65 74 61 36 5b 5d 20 3d 20 7b  t setMeta6[] = {
5b60: 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  .          { OP_
5b70: 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20  Transaction,    
5b80: 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20  0,         1,   
5b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 7d                0}
5ba0: 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  ,    /* 0 */.   
5bb0: 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64         { OP_Read
5bc0: 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c 20 20  Cookie,     0,  
5bd0: 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20         1,       
5be0: 20 20 42 54 52 45 45 5f 4c 41 52 47 45 53 54 5f    BTREE_LARGEST_
5bf0: 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20 20 20  ROOT_PAGE},.    
5c00: 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20        { OP_If,  
5c10: 20 20 20 20 20 20 20 20 20 20 20 31 2c 20 20 20             1,   
5c20: 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20        0,        
5c30: 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20           0},    
5c40: 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 2 */.        
5c50: 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20    { OP_Halt,    
5c60: 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b         SQLITE_OK
5c70: 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20 20 20 20  , OE_Abort,     
5c80: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33       0},    /* 3
5c90: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20   */.          { 
5ca0: 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20  OP_SetCookie,   
5cb0: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 42 54     0,         BT
5cc0: 52 45 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c  REE_INCR_VACUUM,
5cd0: 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a   0},    /* 4 */.
5ce0: 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20          };.     
5cf0: 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a     VdbeOp *aOp;.
5d00: 20 20 20 20 20 20 20 20 69 6e 74 20 69 41 64 64          int iAdd
5d10: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  r = sqlite3VdbeC
5d20: 75 72 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20  urrentAddr(v);. 
5d30: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
5d40: 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63  beVerifyNoMalloc
5d50: 52 65 71 75 69 72 65 64 28 76 2c 20 41 72 72 61  Required(v, Arra
5d60: 79 53 69 7a 65 28 73 65 74 4d 65 74 61 36 29 29  ySize(setMeta6))
5d70: 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 20 3d 20  ;.        aOp = 
5d80: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
5d90: 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a  List(v, ArraySiz
5da0: 65 28 73 65 74 4d 65 74 61 36 29 2c 20 73 65 74  e(setMeta6), set
5db0: 4d 65 74 61 36 2c 20 69 4c 6e 29 3b 0a 20 20 20  Meta6, iLn);.   
5dc0: 20 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46       if( ONLY_IF
5dd0: 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28  _REALLOC_STRESS(
5de0: 61 4f 70 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b  aOp==0) ) break;
5df0: 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e  .        aOp[0].
5e00: 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20  p1 = iDb;.      
5e10: 20 20 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44    aOp[1].p1 = iD
5e20: 62 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 32  b;.        aOp[2
5e30: 5d 2e 70 32 20 3d 20 69 41 64 64 72 2b 34 3b 0a  ].p2 = iAddr+4;.
5e40: 20 20 20 20 20 20 20 20 61 4f 70 5b 34 5d 2e 70          aOp[4].p
5e50: 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 20  1 = iDb;.       
5e60: 20 61 4f 70 5b 34 5d 2e 70 33 20 3d 20 65 41 75   aOp[4].p3 = eAu
5e70: 74 6f 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  to - 1;.        
5e80: 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42  sqlite3VdbeUsesB
5e90: 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20  tree(v, iDb);.  
5ea0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
5eb0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69  break;.  }.#endi
5ec0: 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  f..  /*.  **  PR
5ed0: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69 6e  AGMA [schema.]in
5ee0: 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d  cremental_vacuum
5ef0: 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f  (N).  **.  ** Do
5f00: 20 4e 20 73 74 65 70 73 20 6f 66 20 69 6e 63 72   N steps of incr
5f10: 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e  emental vacuumin
5f20: 67 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2e  g on a database.
5f30: 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  .  */.#ifndef SQ
5f40: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
5f50: 43 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67  CUUM.  case Prag
5f60: 54 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f  Typ_INCREMENTAL_
5f70: 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e  VACUUM: {.    in
5f80: 74 20 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a  t iLimit, addr;.
5f90: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d      if( zRight==
5fa0: 30 20 7c 7c 20 21 73 71 6c 69 74 65 33 47 65 74  0 || !sqlite3Get
5fb0: 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 69  Int32(zRight, &i
5fc0: 4c 69 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74  Limit) || iLimit
5fd0: 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 4c 69  <=0 ){.      iLi
5fe0: 6d 69 74 20 3d 20 30 78 37 66 66 66 66 66 66 66  mit = 0x7fffffff
5ff0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
6000: 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
6010: 72 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30  ration(pParse, 0
6020: 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69  , iDb);.    sqli
6030: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
6040: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69   OP_Integer, iLi
6050: 6d 69 74 2c 20 31 29 3b 0a 20 20 20 20 61 64 64  mit, 1);.    add
6060: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
6070: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72  ddOp1(v, OP_Incr
6080: 56 61 63 75 75 6d 2c 20 69 44 62 29 3b 20 56 64  Vacuum, iDb); Vd
6090: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
60a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
60b0: 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp1(v, OP_Resul
60c0: 74 52 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73 71  tRow, 1);.    sq
60d0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
60e0: 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c  v, OP_AddImm, 1,
60f0: 20 2d 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65   -1);.    sqlite
6100: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
6110: 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72  P_IfPos, 1, addr
6120: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
6130: 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  v);.    sqlite3V
6140: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
6150: 64 64 72 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  ddr);.    break;
6160: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .  }.#endif..#if
6170: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
6180: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20  _PAGER_PRAGMAS. 
6190: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
61a0: 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f   [schema.]cache_
61b0: 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d  size.  **  PRAGM
61c0: 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65  A [schema.]cache
61d0: 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a  _size=N.  **.  *
61e0: 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d  * The first form
61f0: 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72   reports the cur
6200: 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69  rent local setti
6210: 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ng for the.  ** 
6220: 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e  page cache size.
6230: 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
6240: 20 73 65 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a   sets the local.
6250: 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20    ** page cache 
6260: 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 49 66 20  size value.  If 
6270: 4e 20 69 73 20 70 6f 73 69 74 69 76 65 20 74 68  N is positive th
6280: 65 6e 20 74 68 61 74 20 69 73 20 74 68 65 0a 20  en that is the. 
6290: 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61   ** number of pa
62a0: 67 65 73 20 69 6e 20 74 68 65 20 63 61 63 68 65  ges in the cache
62b0: 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74  .  If N is negat
62c0: 69 76 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20  ive, then the.  
62d0: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  ** number of pag
62e0: 65 73 20 69 73 20 61 64 6a 75 73 74 65 64 20 73  es is adjusted s
62f0: 6f 20 74 68 61 74 20 74 68 65 20 63 61 63 68 65  o that the cache
6300: 20 75 73 65 73 20 2d 4e 20 6b 69 62 69 62 79 74   uses -N kibibyt
6310: 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72  es.  ** of memor
6320: 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  y..  */.  case P
6330: 72 61 67 54 79 70 5f 43 41 43 48 45 5f 53 49 5a  ragTyp_CACHE_SIZ
6340: 45 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28  E: {.    assert(
6350: 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
6360: 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
6370: 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 21   0) );.    if( !
6380: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
6390: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
63a0: 76 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  v, pDb->pSchema-
63b0: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
63c0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
63d0: 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65  nt size = sqlite
63e0: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20  3Atoi(zRight);. 
63f0: 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d       pDb->pSchem
6400: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  a->cache_size = 
6410: 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  size;.      sqli
6420: 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
6430: 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70  Size(pDb->pBt, p
6440: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
6450: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a  he_size);.    }.
6460: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
6470: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
6480: 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65  A [schema.]cache
6490: 5f 73 70 69 6c 6c 0a 20 20 2a 2a 20 20 50 52 41  _spill.  **  PRA
64a0: 47 4d 41 20 63 61 63 68 65 5f 73 70 69 6c 6c 3d  GMA cache_spill=
64b0: 42 4f 4f 4c 45 41 4e 0a 20 20 2a 2a 20 20 50 52  BOOLEAN.  **  PR
64c0: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61  AGMA [schema.]ca
64d0: 63 68 65 5f 73 70 69 6c 6c 3d 4e 0a 20 20 2a 2a  che_spill=N.  **
64e0: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
64f0: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
6500: 20 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73   current local s
6510: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
6520: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
6530: 70 69 6c 6c 20 73 69 7a 65 2e 20 54 68 65 20 73  pill size. The s
6540: 65 63 6f 6e 64 20 66 6f 72 6d 20 74 75 72 6e 73  econd form turns
6550: 20 63 61 63 68 65 20 73 70 69 6c 6c 20 6f 6e 0a   cache spill on.
6560: 20 20 2a 2a 20 6f 72 20 6f 66 66 2e 20 20 57 68    ** or off.  Wh
6570: 65 6e 20 74 75 72 6e 6e 69 6e 67 20 63 61 63 68  en turnning cach
6580: 65 20 73 70 69 6c 6c 20 6f 6e 2c 20 74 68 65 20  e spill on, the 
6590: 73 69 7a 65 20 69 73 20 73 65 74 20 74 6f 20 74  size is set to t
65a0: 68 65 0a 20 20 2a 2a 20 63 75 72 72 65 6e 74 20  he.  ** current 
65b0: 63 61 63 68 65 5f 73 69 7a 65 2e 20 20 54 68 65  cache_size.  The
65c0: 20 74 68 69 72 64 20 66 6f 72 6d 20 73 65 74 73   third form sets
65d0: 20 61 20 73 70 69 6c 6c 20 73 69 7a 65 20 74 68   a spill size th
65e0: 61 74 0a 20 20 2a 2a 20 6d 61 79 20 62 65 20 64  at.  ** may be d
65f0: 69 66 66 65 72 65 6e 74 20 66 6f 72 6d 20 74 68  ifferent form th
6600: 65 20 63 61 63 68 65 20 73 69 7a 65 2e 0a 20 20  e cache size..  
6610: 2a 2a 20 49 66 20 4e 20 69 73 20 70 6f 73 69 74  ** If N is posit
6620: 69 76 65 20 74 68 65 6e 20 74 68 61 74 20 69 73  ive then that is
6630: 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72   the.  ** number
6640: 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
6650: 20 63 61 63 68 65 2e 20 20 49 66 20 4e 20 69 73   cache.  If N is
6660: 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20   negative, then 
6670: 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20  the.  ** number 
6680: 6f 66 20 70 61 67 65 73 20 69 73 20 61 64 6a 75  of pages is adju
6690: 73 74 65 64 20 73 6f 20 74 68 61 74 20 74 68 65  sted so that the
66a0: 20 63 61 63 68 65 20 75 73 65 73 20 2d 4e 20 6b   cache uses -N k
66b0: 69 62 69 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66  ibibytes.  ** of
66c0: 20 6d 65 6d 6f 72 79 2e 0a 20 20 2a 2a 0a 20 20   memory..  **.  
66d0: 2a 2a 20 49 66 20 74 68 65 20 6e 75 6d 62 65 72  ** If the number
66e0: 20 6f 66 20 63 61 63 68 65 5f 73 70 69 6c 6c 20   of cache_spill 
66f0: 70 61 67 65 73 20 69 73 20 6c 65 73 73 20 74 68  pages is less th
6700: 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  en the number of
6710: 0a 20 20 2a 2a 20 63 61 63 68 65 5f 73 69 7a 65  .  ** cache_size
6720: 20 70 61 67 65 73 2c 20 6e 6f 20 73 70 69 6c 6c   pages, no spill
6730: 69 6e 67 20 6f 63 63 75 72 73 20 75 6e 74 69 6c  ing occurs until
6740: 20 74 68 65 20 70 61 67 65 20 63 6f 75 6e 74 20   the page count 
6750: 65 78 63 65 65 64 73 0a 20 20 2a 2a 20 74 68 65  exceeds.  ** the
6760: 20 6e 75 6d 62 65 72 20 6f 66 20 63 61 63 68 65   number of cache
6770: 5f 73 69 7a 65 20 70 61 67 65 73 2e 0a 20 20 2a  _size pages..  *
6780: 2a 0a 20 20 2a 2a 20 54 68 65 20 63 61 63 68 65  *.  ** The cache
6790: 5f 73 70 69 6c 6c 3d 42 4f 4f 4c 45 41 4e 20 73  _spill=BOOLEAN s
67a0: 65 74 74 69 6e 67 20 61 70 70 6c 69 65 73 20 74  etting applies t
67b0: 6f 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 73  o all attached s
67c0: 63 68 65 6d 61 73 2c 0a 20 20 2a 2a 20 6e 6f 74  chemas,.  ** not
67d0: 20 6a 75 73 74 20 74 68 65 20 73 63 68 65 6d 61   just the schema
67e0: 20 73 70 65 63 69 66 69 65 64 2e 0a 20 20 2a 2f   specified..  */
67f0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
6800: 43 41 43 48 45 5f 53 50 49 4c 4c 3a 20 7b 0a 20  CACHE_SPILL: {. 
6810: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
6820: 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
6830: 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b  d(db, iDb, 0) );
6840: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
6850: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
6860: 53 69 6e 67 6c 65 49 6e 74 28 76 2c 0a 20 20 20  SingleInt(v,.   
6870: 20 20 20 20 20 20 28 64 62 2d 3e 66 6c 61 67 73        (db->flags
6880: 20 26 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53   & SQLITE_CacheS
6890: 70 69 6c 6c 29 3d 3d 30 20 3f 20 30 20 3a 20 0a  pill)==0 ? 0 : .
68a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
68b0: 74 65 33 42 74 72 65 65 53 65 74 53 70 69 6c 6c  te3BtreeSetSpill
68c0: 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 30 29  Size(pDb->pBt,0)
68d0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
68e0: 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 31      int size = 1
68f0: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
6900: 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69 67  te3GetInt32(zRig
6910: 68 74 2c 20 26 73 69 7a 65 29 20 29 7b 0a 20 20  ht, &size) ){.  
6920: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
6930: 65 65 53 65 74 53 70 69 6c 6c 53 69 7a 65 28 70  eeSetSpillSize(p
6940: 44 62 2d 3e 70 42 74 2c 20 73 69 7a 65 29 3b 0a  Db->pBt, size);.
6950: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
6960: 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  ( sqlite3GetBool
6970: 65 61 6e 28 7a 52 69 67 68 74 2c 20 73 69 7a 65  ean(zRight, size
6980: 21 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  !=0) ){.        
6990: 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
69a0: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 3b 0a  ITE_CacheSpill;.
69b0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
69c0: 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26       db->flags &
69d0: 3d 20 7e 53 51 4c 49 54 45 5f 43 61 63 68 65 53  = ~SQLITE_CacheS
69e0: 70 69 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20  pill;.      }.  
69f0: 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46      setAllPagerF
6a00: 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a  lags(db);.    }.
6a10: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
6a20: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
6a30: 41 20 5b 73 63 68 65 6d 61 2e 5d 6d 6d 61 70 5f  A [schema.]mmap_
6a40: 73 69 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a  size(N).  **.  *
6a50: 2a 20 55 73 65 64 20 74 6f 20 73 65 74 20 6d 61  * Used to set ma
6a60: 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74  pping size limit
6a70: 2e 20 54 68 65 20 6d 61 70 70 69 6e 67 20 73 69  . The mapping si
6a80: 7a 65 20 6c 69 6d 69 74 20 69 73 0a 20 20 2a 2a  ze limit is.  **
6a90: 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74   used to limit t
6aa0: 68 65 20 61 67 67 72 65 67 61 74 65 20 73 69 7a  he aggregate siz
6ab0: 65 20 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72 79 20  e of all memory 
6ac0: 6d 61 70 70 65 64 20 72 65 67 69 6f 6e 73 20 6f  mapped regions o
6ad0: 66 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62  f the.  ** datab
6ae0: 61 73 65 20 66 69 6c 65 2e 20 49 66 20 74 68 69  ase file. If thi
6af0: 73 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 73  s parameter is s
6b00: 65 74 20 74 6f 20 7a 65 72 6f 2c 20 74 68 65 6e  et to zero, then
6b10: 20 6d 65 6d 6f 72 79 20 6d 61 70 70 69 6e 67 0a   memory mapping.
6b20: 20 20 2a 2a 20 69 73 20 6e 6f 74 20 75 73 65 64    ** is not used
6b30: 20 61 74 20 61 6c 6c 2e 20 20 49 66 20 4e 20 69   at all.  If N i
6b40: 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e  s negative, then
6b50: 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d 65 6d   the default mem
6b60: 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 6c 69 6d  ory map.  ** lim
6b70: 69 74 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  it determined by
6b80: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
6b90: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d  SQLITE_CONFIG_MM
6ba0: 41 50 5f 53 49 5a 45 29 20 69 73 20 73 65 74 2e  AP_SIZE) is set.
6bb0: 0a 20 20 2a 2a 20 54 68 65 20 70 61 72 61 6d 65  .  ** The parame
6bc0: 74 65 72 20 4e 20 69 73 20 6d 65 61 73 75 72 65  ter N is measure
6bd0: 64 20 69 6e 20 62 79 74 65 73 2e 0a 20 20 2a 2a  d in bytes..  **
6be0: 0a 20 20 2a 2a 20 54 68 69 73 20 76 61 6c 75 65  .  ** This value
6bf0: 20 69 73 20 61 64 76 69 73 6f 72 79 2e 20 20 54   is advisory.  T
6c00: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46  he underlying VF
6c10: 53 20 69 73 20 66 72 65 65 20 74 6f 20 6d 65 6d  S is free to mem
6c20: 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 61 73 20  ory map.  ** as 
6c30: 6c 69 74 74 6c 65 20 6f 72 20 61 73 20 6d 75 63  little or as muc
6c40: 68 20 61 73 20 69 74 20 77 61 6e 74 73 2e 20 20  h as it wants.  
6c50: 45 78 63 65 70 74 2c 20 69 66 20 4e 20 69 73 20  Except, if N is 
6c60: 73 65 74 20 74 6f 20 30 20 74 68 65 6e 20 74 68  set to 0 then th
6c70: 65 0a 20 20 2a 2a 20 75 70 70 65 72 20 6c 61 79  e.  ** upper lay
6c80: 65 72 73 20 77 69 6c 6c 20 6e 65 76 65 72 20 69  ers will never i
6c90: 6e 76 6f 6b 65 20 74 68 65 20 78 46 65 74 63 68  nvoke the xFetch
6ca0: 20 69 6e 74 65 72 66 61 63 65 73 20 74 6f 20 74   interfaces to t
6cb0: 68 65 20 56 46 53 2e 0a 20 20 2a 2f 0a 20 20 63  he VFS..  */.  c
6cc0: 61 73 65 20 50 72 61 67 54 79 70 5f 4d 4d 41 50  ase PragTyp_MMAP
6cd0: 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73 71 6c  _SIZE: {.    sql
6ce0: 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 3b 0a 23  ite3_int64 sz;.#
6cf0: 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  if SQLITE_MAX_MM
6d00: 41 50 5f 53 49 5a 45 3e 30 0a 20 20 20 20 61 73  AP_SIZE>0.    as
6d10: 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
6d20: 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
6d30: 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
6d40: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
6d50: 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20      int ii;.    
6d60: 20 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65    sqlite3DecOrHe
6d70: 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26  xToI64(zRight, &
6d80: 73 7a 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73  sz);.      if( s
6d90: 7a 3c 30 20 29 20 73 7a 20 3d 20 73 71 6c 69 74  z<0 ) sz = sqlit
6da0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73  e3GlobalConfig.s
6db0: 7a 4d 6d 61 70 3b 0a 20 20 20 20 20 20 69 66 28  zMmap;.      if(
6dc0: 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 20 64 62   pId2->n==0 ) db
6dd0: 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b 0a 20  ->szMmap = sz;. 
6de0: 20 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e       for(ii=db->
6df0: 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69  nDb-1; ii>=0; ii
6e00: 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  --){.        if(
6e10: 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74   db->aDb[ii].pBt
6e20: 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20   && (ii==iDb || 
6e30: 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20  pId2->n==0) ){. 
6e40: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
6e50: 42 74 72 65 65 53 65 74 4d 6d 61 70 4c 69 6d 69  BtreeSetMmapLimi
6e60: 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  t(db->aDb[ii].pB
6e70: 74 2c 20 73 7a 29 3b 0a 20 20 20 20 20 20 20 20  t, sz);.        
6e80: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
6e90: 20 20 20 20 73 7a 20 3d 20 2d 31 3b 0a 20 20 20      sz = -1;.   
6ea0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69   rc = sqlite3_fi
6eb0: 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a  le_control(db, z
6ec0: 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  Db, SQLITE_FCNTL
6ed0: 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20 26 73 7a 29  _MMAP_SIZE, &sz)
6ee0: 3b 0a 23 65 6c 73 65 0a 20 20 20 20 73 7a 20 3d  ;.#else.    sz =
6ef0: 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   0;.    rc = SQL
6f00: 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 20  ITE_OK;.#endif. 
6f10: 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
6f20: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65  E_OK ){.      re
6f30: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c  turnSingleInt(v,
6f40: 20 73 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20   sz);.    }else 
6f50: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4e  if( rc!=SQLITE_N
6f60: 4f 54 46 4f 55 4e 44 20 29 7b 0a 20 20 20 20 20  OTFOUND ){.     
6f70: 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b   pParse->nErr++;
6f80: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 72  .      pParse->r
6f90: 63 20 3d 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20  c = rc;.    }.  
6fa0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
6fb0: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
6fc0: 20 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 2a 2a   temp_store.  **
6fd0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
6fe0: 74 6f 72 65 20 3d 20 22 64 65 66 61 75 6c 74 22  tore = "default"
6ff0: 7c 22 6d 65 6d 6f 72 79 22 7c 22 66 69 6c 65 22  |"memory"|"file"
7000: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
7010: 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63  n or set the loc
7020: 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  al value of the 
7030: 74 65 6d 70 5f 73 74 6f 72 65 20 66 6c 61 67 2e  temp_store flag.
7040: 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20    Changing.  ** 
7050: 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20  the local value 
7060: 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68  does not make ch
7070: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 69 73  anges to the dis
7080: 6b 20 66 69 6c 65 20 61 6e 64 20 74 68 65 20 64  k file and the d
7090: 65 66 61 75 6c 74 0a 20 20 2a 2a 20 76 61 6c 75  efault.  ** valu
70a0: 65 20 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72  e will be restor
70b0: 65 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65  ed the next time
70c0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
70d0: 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2a 0a 20 20   opened..  **.  
70e0: 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 69 74 20  ** Note that it 
70f0: 69 73 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20  is possible for 
7100: 74 68 65 20 6c 69 62 72 61 72 79 20 63 6f 6d 70  the library comp
7110: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
7120: 20 74 6f 0a 20 20 2a 2a 20 6f 76 65 72 72 69 64   to.  ** overrid
7130: 65 20 74 68 69 73 20 73 65 74 74 69 6e 67 0a 20  e this setting. 
7140: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
7150: 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 3a 20 7b  yp_TEMP_STORE: {
7160: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
7170: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
7180: 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 64 62 2d  SingleInt(v, db-
7190: 3e 74 65 6d 70 5f 73 74 6f 72 65 29 3b 0a 20 20  >temp_store);.  
71a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63    }else{.      c
71b0: 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61 67 65  hangeTempStorage
71c0: 28 70 50 61 72 73 65 2c 20 7a 52 69 67 68 74 29  (pParse, zRight)
71d0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  ;.    }.    brea
71e0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
71f0: 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f  *   PRAGMA temp_
7200: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 0a  store_directory.
7210: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65    **   PRAGMA te
7220: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
7230: 72 79 20 3d 20 22 22 7c 22 64 69 72 65 63 74 6f  ry = ""|"directo
7240: 72 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20  ry_name".  **.  
7250: 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74  ** Return or set
7260: 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65   the local value
7270: 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f   of the temp_sto
7280: 72 65 5f 64 69 72 65 63 74 6f 72 79 20 66 6c 61  re_directory fla
7290: 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a  g.  Changing.  *
72a0: 2a 20 74 68 65 20 76 61 6c 75 65 20 73 65 74 73  * the value sets
72b0: 20 61 20 73 70 65 63 69 66 69 63 20 64 69 72 65   a specific dire
72c0: 63 74 6f 72 79 20 74 6f 20 62 65 20 75 73 65 64  ctory to be used
72d0: 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 66   for temporary f
72e0: 69 6c 65 73 2e 0a 20 20 2a 2a 20 53 65 74 74 69  iles..  ** Setti
72f0: 6e 67 20 74 6f 20 61 20 6e 75 6c 6c 20 73 74 72  ng to a null str
7300: 69 6e 67 20 72 65 76 65 72 74 73 20 74 6f 20 74  ing reverts to t
7310: 68 65 20 64 65 66 61 75 6c 74 20 74 65 6d 70 6f  he default tempo
7320: 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 73  rary directory s
7330: 65 61 72 63 68 2e 0a 20 20 2a 2a 20 49 66 20 74  earch..  ** If t
7340: 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f  emporary directo
7350: 72 79 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74  ry is changed, t
7360: 68 65 6e 20 69 6e 76 61 6c 69 64 61 74 65 54 65  hen invalidateTe
7370: 6d 70 53 74 6f 72 61 67 65 2e 0a 20 20 2a 2a 0a  mpStorage..  **.
7380: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
7390: 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 44  Typ_TEMP_STORE_D
73a0: 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20  IRECTORY: {.    
73b0: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
73c0: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
73d0: 65 54 65 78 74 28 76 2c 20 73 71 6c 69 74 65 33  eText(v, sqlite3
73e0: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29  _temp_directory)
73f0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66  ;.    }else{.#if
7400: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
7410: 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a  _WSD.      if( z
7420: 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20  Right[0] ){.    
7430: 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20      int res;.   
7440: 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
7450: 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56  3OsAccess(db->pV
7460: 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49  fs, zRight, SQLI
7470: 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52  TE_ACCESS_READWR
7480: 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  ITE, &res);.    
7490: 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
74a0: 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20  TE_OK || res==0 
74b0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
74c0: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
74d0: 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74  rse, "not a writ
74e0: 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29  able directory")
74f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
7500: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20   pragma_out;.   
7510: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
7520: 20 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f       if( SQLITE_
7530: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20  TEMP_STORE==0.  
7540: 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f       || (SQLITE_
7550: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26  TEMP_STORE==1 &&
7560: 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c   db->temp_store<
7570: 3d 31 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 53  =1).       || (S
7580: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
7590: 3d 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f  ==2 && db->temp_
75a0: 73 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20 20  store==1).      
75b0: 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 76 61 6c  ){.        inval
75c0: 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65  idateTempStorage
75d0: 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20  (pParse);.      
75e0: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  }.      sqlite3_
75f0: 66 72 65 65 28 73 71 6c 69 74 65 33 5f 74 65 6d  free(sqlite3_tem
7600: 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20  p_directory);.  
7610: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30      if( zRight[0
7620: 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ] ){.        sql
7630: 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74  ite3_temp_direct
7640: 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ory = sqlite3_mp
7650: 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67  rintf("%s", zRig
7660: 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ht);.      }else
7670: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
7680: 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79  3_temp_directory
7690: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65   = 0;.      }.#e
76a0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
76b0: 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d  MIT_WSD */.    }
76c0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
76d0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57  .#if SQLITE_OS_W
76e0: 49 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  IN.  /*.  **   P
76f0: 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65  RAGMA data_store
7700: 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20  _directory.  ** 
7710: 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74    PRAGMA data_st
7720: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  ore_directory = 
7730: 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61  ""|"directory_na
7740: 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  me".  **.  ** Re
7750: 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20  turn or set the 
7760: 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74  local value of t
7770: 68 65 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69  he data_store_di
7780: 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43  rectory flag.  C
7790: 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65  hanging.  ** the
77a0: 20 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70   value sets a sp
77b0: 65 63 69 66 69 63 20 64 69 72 65 63 74 6f 72 79  ecific directory
77c0: 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20   to be used for 
77d0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 74  database files t
77e0: 68 61 74 0a 20 20 2a 2a 20 77 65 72 65 20 73 70  hat.  ** were sp
77f0: 65 63 69 66 69 65 64 20 77 69 74 68 20 61 20 72  ecified with a r
7800: 65 6c 61 74 69 76 65 20 70 61 74 68 6e 61 6d 65  elative pathname
7810: 2e 20 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20  .  Setting to a 
7820: 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65  null string reve
7830: 72 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20  rts.  ** to the 
7840: 64 65 66 61 75 6c 74 20 64 61 74 61 62 61 73 65  default database
7850: 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68 69 63   directory, whic
7860: 68 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 66  h for database f
7870: 69 6c 65 73 20 73 70 65 63 69 66 69 65 64 20 77  iles specified w
7880: 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61 74  ith.  ** a relat
7890: 69 76 65 20 70 61 74 68 20 77 69 6c 6c 20 70 72  ive path will pr
78a0: 6f 62 61 62 6c 79 20 62 65 20 62 61 73 65 64 20  obably be based 
78b0: 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 64  on the current d
78c0: 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65  irectory for the
78d0: 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20 20  .  ** process.  
78e0: 44 61 74 61 62 61 73 65 20 66 69 6c 65 20 73 70  Database file sp
78f0: 65 63 69 66 69 65 64 20 77 69 74 68 20 61 6e 20  ecified with an 
7900: 61 62 73 6f 6c 75 74 65 20 70 61 74 68 20 61 72  absolute path ar
7910: 65 20 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a 20  e not impacted. 
7920: 20 2a 2a 20 62 79 20 74 68 69 73 20 73 65 74 74   ** by this sett
7930: 69 6e 67 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ing, regardless 
7940: 6f 66 20 69 74 73 20 76 61 6c 75 65 2e 0a 20 20  of its value..  
7950: 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  **.  */.  case P
7960: 72 61 67 54 79 70 5f 44 41 54 41 5f 53 54 4f 52  ragTyp_DATA_STOR
7970: 45 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20  E_DIRECTORY: {. 
7980: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
7990: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  {.      returnSi
79a0: 6e 67 6c 65 54 65 78 74 28 76 2c 20 73 71 6c 69  ngleText(v, sqli
79b0: 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f  te3_data_directo
79c0: 72 79 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ry);.    }else{.
79d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
79e0: 4d 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69 66  MIT_WSD.      if
79f0: 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20  ( zRight[0] ){. 
7a00: 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a         int res;.
7a10: 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
7a20: 69 74 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d  ite3OsAccess(db-
7a30: 3e 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20 53  >pVfs, zRight, S
7a40: 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45 41  QLITE_ACCESS_REA
7a50: 44 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a 20  DWRITE, &res);. 
7a60: 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
7a70: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d  QLITE_OK || res=
7a80: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
7a90: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
7aa0: 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77  pParse, "not a w
7ab0: 72 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72  ritable director
7ac0: 79 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67  y");.          g
7ad0: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
7ae0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
7af0: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  }.      sqlite3_
7b00: 66 72 65 65 28 73 71 6c 69 74 65 33 5f 64 61 74  free(sqlite3_dat
7b10: 61 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20  a_directory);.  
7b20: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30      if( zRight[0
7b30: 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ] ){.        sql
7b40: 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74  ite3_data_direct
7b50: 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ory = sqlite3_mp
7b60: 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67  rintf("%s", zRig
7b70: 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ht);.      }else
7b80: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
7b90: 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79  3_data_directory
7ba0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65   = 0;.      }.#e
7bb0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
7bc0: 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d  MIT_WSD */.    }
7bd0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
7be0: 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49  #endif..#if SQLI
7bf0: 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e  TE_ENABLE_LOCKIN
7c00: 47 5f 53 54 59 4c 45 0a 20 20 2f 2a 0a 20 20 2a  G_STYLE.  /*.  *
7c10: 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  *   PRAGMA [sche
7c20: 6d 61 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  ma.]lock_proxy_f
7c30: 69 6c 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ile.  **   PRAGM
7c40: 41 20 5b 73 63 68 65 6d 61 2e 5d 6c 6f 63 6b 5f  A [schema.]lock_
7c50: 70 72 6f 78 79 5f 66 69 6c 65 20 3d 20 22 3a 61  proxy_file = ":a
7c60: 75 74 6f 3a 22 7c 22 6c 6f 63 6b 5f 66 69 6c 65  uto:"|"lock_file
7c70: 5f 70 61 74 68 22 0a 20 20 2a 2a 0a 20 20 2a 2a  _path".  **.  **
7c80: 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74   Return or set t
7c90: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
7ca0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20  lock_proxy_file 
7cb0: 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a  flag.  Changing.
7cc0: 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 73    ** the value s
7cd0: 65 74 73 20 61 20 73 70 65 63 69 66 69 63 20 66  ets a specific f
7ce0: 69 6c 65 20 74 6f 20 62 65 20 75 73 65 64 20 66  ile to be used f
7cf0: 6f 72 20 64 61 74 61 62 61 73 65 20 61 63 63 65  or database acce
7d00: 73 73 20 6c 6f 63 6b 73 2e 0a 20 20 2a 2a 0a 20  ss locks..  **. 
7d10: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
7d20: 79 70 5f 4c 4f 43 4b 5f 50 52 4f 58 59 5f 46 49  yp_LOCK_PROXY_FI
7d30: 4c 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a  LE: {.    if( !z
7d40: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 50  Right ){.      P
7d50: 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73  ager *pPager = s
7d60: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
7d70: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
7d80: 20 20 63 68 61 72 20 2a 70 72 6f 78 79 5f 66 69    char *proxy_fi
7d90: 6c 65 5f 70 61 74 68 20 3d 20 4e 55 4c 4c 3b 0a  le_path = NULL;.
7da0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69        sqlite3_fi
7db0: 6c 65 20 2a 70 46 69 6c 65 20 3d 20 73 71 6c 69  le *pFile = sqli
7dc0: 74 65 33 50 61 67 65 72 46 69 6c 65 28 70 50 61  te3PagerFile(pPa
7dd0: 67 65 72 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ger);.      sqli
7de0: 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c  te3OsFileControl
7df0: 48 69 6e 74 28 70 46 69 6c 65 2c 20 53 51 4c 49  Hint(pFile, SQLI
7e00: 54 45 5f 47 45 54 5f 4c 4f 43 4b 50 52 4f 58 59  TE_GET_LOCKPROXY
7e10: 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  FILE, .         
7e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e30: 20 20 26 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61    &proxy_file_pa
7e40: 74 68 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  th);.      retur
7e50: 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 70  nSingleText(v, p
7e60: 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b  roxy_file_path);
7e70: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
7e80: 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20    Pager *pPager 
7e90: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
7ea0: 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20  ger(pDb->pBt);. 
7eb0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c       sqlite3_fil
7ec0: 65 20 2a 70 46 69 6c 65 20 3d 20 73 71 6c 69 74  e *pFile = sqlit
7ed0: 65 33 50 61 67 65 72 46 69 6c 65 28 70 50 61 67  e3PagerFile(pPag
7ee0: 65 72 29 3b 0a 20 20 20 20 20 20 69 6e 74 20 72  er);.      int r
7ef0: 65 73 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52  es;.      if( zR
7f00: 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  ight[0] ){.     
7f10: 20 20 20 72 65 73 3d 73 71 6c 69 74 65 33 4f 73     res=sqlite3Os
7f20: 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c  FileControl(pFil
7f30: 65 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f  e, SQLITE_SET_LO
7f40: 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20  CKPROXYFILE, .  
7f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f70: 20 20 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20     zRight);.    
7f80: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
7f90: 20 20 20 72 65 73 3d 73 71 6c 69 74 65 33 4f 73     res=sqlite3Os
7fa0: 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c  FileControl(pFil
7fb0: 65 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f  e, SQLITE_SET_LO
7fc0: 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20  CKPROXYFILE, .  
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ff0: 20 20 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20     NULL);.      
8000: 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 21  }.      if( res!
8010: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
8020: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72        sqlite3Err
8030: 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 66  orMsg(pParse, "f
8040: 61 69 6c 65 64 20 74 6f 20 73 65 74 20 6c 6f 63  ailed to set loc
8050: 6b 20 70 72 6f 78 79 20 66 69 6c 65 22 29 3b 0a  k proxy file");.
8060: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61          goto pra
8070: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d  gma_out;.      }
8080: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
8090: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
80a0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f  SQLITE_ENABLE_LO
80b0: 43 4b 49 4e 47 5f 53 54 59 4c 45 20 2a 2f 20 20  CKING_STYLE */  
80c0: 20 20 20 20 0a 20 20 20 20 0a 20 20 2f 2a 0a 20      .    .  /*. 
80d0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63   **   PRAGMA [sc
80e0: 68 65 6d 61 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75  hema.]synchronou
80f0: 73 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  s.  **   PRAGMA 
8100: 5b 73 63 68 65 6d 61 2e 5d 73 79 6e 63 68 72 6f  [schema.]synchro
8110: 6e 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d  nous=OFF|ON|NORM
8120: 41 4c 7c 46 55 4c 4c 7c 45 58 54 52 41 0a 20 20  AL|FULL|EXTRA.  
8130: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f  **.  ** Return o
8140: 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20  r set the local 
8150: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73 79 6e  value of the syn
8160: 63 68 72 6f 6e 6f 75 73 20 66 6c 61 67 2e 20 20  chronous flag.  
8170: 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68  Changing.  ** th
8180: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f  e local value do
8190: 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e  es not make chan
81a0: 67 65 73 20 74 6f 20 74 68 65 20 64 69 73 6b 20  ges to the disk 
81b0: 66 69 6c 65 20 61 6e 64 20 74 68 65 0a 20 20 2a  file and the.  *
81c0: 2a 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  * default value 
81d0: 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72 65 64  will be restored
81e0: 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20 74   the next time t
81f0: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 0a 20  he database is. 
8200: 20 2a 2a 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2f   ** opened..  */
8210: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
8220: 53 59 4e 43 48 52 4f 4e 4f 55 53 3a 20 7b 0a 20  SYNCHRONOUS: {. 
8230: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
8240: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  {.      returnSi
8250: 6e 67 6c 65 49 6e 74 28 76 2c 20 70 44 62 2d 3e  ngleInt(v, pDb->
8260: 73 61 66 65 74 79 5f 6c 65 76 65 6c 2d 31 29 3b  safety_level-1);
8270: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
8280: 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43    if( !db->autoC
8290: 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20  ommit ){.       
82a0: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
82b0: 28 70 50 61 72 73 65 2c 20 0a 20 20 20 20 20 20  (pParse, .      
82c0: 20 20 20 20 20 20 22 53 61 66 65 74 79 20 6c 65        "Safety le
82d0: 76 65 6c 20 6d 61 79 20 6e 6f 74 20 62 65 20 63  vel may not be c
82e0: 68 61 6e 67 65 64 20 69 6e 73 69 64 65 20 61 20  hanged inside a 
82f0: 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20  transaction");. 
8300: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 69       }else if( i
8310: 44 62 21 3d 31 20 29 7b 0a 20 20 20 20 20 20 20  Db!=1 ){.       
8320: 20 69 6e 74 20 69 4c 65 76 65 6c 20 3d 20 28 67   int iLevel = (g
8330: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 52  etSafetyLevel(zR
8340: 69 67 68 74 2c 30 2c 31 29 2b 31 29 20 26 20 50  ight,0,1)+1) & P
8350: 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AGER_SYNCHRONOUS
8360: 5f 4d 41 53 4b 3b 0a 20 20 20 20 20 20 20 20 69  _MASK;.        i
8370: 66 28 20 69 4c 65 76 65 6c 3d 3d 30 20 29 20 69  f( iLevel==0 ) i
8380: 4c 65 76 65 6c 20 3d 20 31 3b 0a 20 20 20 20 20  Level = 1;.     
8390: 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c     pDb->safety_l
83a0: 65 76 65 6c 20 3d 20 69 4c 65 76 65 6c 3b 0a 20  evel = iLevel;. 
83b0: 20 20 20 20 20 20 20 70 44 62 2d 3e 62 53 79 6e         pDb->bSyn
83c0: 63 53 65 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  cSet = 1;.      
83d0: 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61    setAllPagerFla
83e0: 67 73 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a  gs(db);.      }.
83f0: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
8400: 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
8410: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
8420: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
8430: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
8440: 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a 20 20  _FLAG_PRAGMAS.  
8450: 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4c 41  case PragTyp_FLA
8460: 47 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  G: {.    if( zRi
8470: 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ght==0 ){.      
8480: 73 65 74 50 72 61 67 6d 61 52 65 73 75 6c 74 43  setPragmaResultC
8490: 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 70 50  olumnNames(v, pP
84a0: 72 61 67 6d 61 29 3b 0a 20 20 20 20 20 20 72 65  ragma);.      re
84b0: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c  turnSingleInt(v,
84c0: 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 70 50   (db->flags & pP
84d0: 72 61 67 6d 61 2d 3e 69 41 72 67 29 21 3d 30 20  ragma->iArg)!=0 
84e0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
84f0: 20 20 20 20 69 6e 74 20 6d 61 73 6b 20 3d 20 70      int mask = p
8500: 50 72 61 67 6d 61 2d 3e 69 41 72 67 3b 20 20 20  Pragma->iArg;   
8510: 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 62 69 74 73   /* Mask of bits
8520: 20 74 6f 20 73 65 74 20 6f 72 20 63 6c 65 61 72   to set or clear
8530: 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 64  . */.      if( d
8540: 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
8550: 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 46   ){.        /* F
8560: 6f 72 65 69 67 6e 20 6b 65 79 20 73 75 70 70 6f  oreign key suppo
8570: 72 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 65 6e  rt may not be en
8580: 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65  abled or disable
8590: 64 20 77 68 69 6c 65 20 6e 6f 74 0a 20 20 20 20  d while not.    
85a0: 20 20 20 20 2a 2a 20 69 6e 20 61 75 74 6f 2d 63      ** in auto-c
85b0: 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20 20 2a 2f 0a  ommit mode.  */.
85c0: 20 20 20 20 20 20 20 20 6d 61 73 6b 20 26 3d 20          mask &= 
85d0: 7e 28 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e  ~(SQLITE_Foreign
85e0: 4b 65 79 73 29 3b 0a 20 20 20 20 20 20 7d 0a 23  Keys);.      }.#
85f0: 69 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  if SQLITE_USER_A
8600: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
8610: 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 68      if( db->auth
8620: 2e 61 75 74 68 4c 65 76 65 6c 3d 3d 55 41 55 54  .authLevel==UAUT
8630: 48 5f 55 73 65 72 20 29 7b 0a 20 20 20 20 20 20  H_User ){.      
8640: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f    /* Do not allo
8650: 77 20 6e 6f 6e 2d 61 64 6d 69 6e 20 75 73 65 72  w non-admin user
8660: 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20  s to modify the 
8670: 73 63 68 65 6d 61 20 61 72 62 69 74 72 61 72 69  schema arbitrari
8680: 6c 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 61  ly */.        ma
8690: 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45 5f 57  sk &= ~(SQLITE_W
86a0: 72 69 74 65 53 63 68 65 6d 61 29 3b 0a 20 20 20  riteSchema);.   
86b0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
86c0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 65     if( sqlite3Ge
86d0: 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c  tBoolean(zRight,
86e0: 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 64   0) ){.        d
86f0: 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 6d 61 73 6b  b->flags |= mask
8700: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
8710: 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73         db->flags
8720: 20 26 3d 20 7e 6d 61 73 6b 3b 0a 20 20 20 20 20   &= ~mask;.     
8730: 20 20 20 69 66 28 20 6d 61 73 6b 3d 3d 53 51 4c     if( mask==SQL
8740: 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 20 64  ITE_DeferFKs ) d
8750: 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
8760: 6f 6e 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  ons = 0;.      }
8770: 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6e 79 20  ..      /* Many 
8780: 6f 66 20 74 68 65 20 66 6c 61 67 2d 70 72 61 67  of the flag-prag
8790: 6d 61 73 20 6d 6f 64 69 66 79 20 74 68 65 20 63  mas modify the c
87a0: 6f 64 65 20 67 65 6e 65 72 61 74 65 64 20 62 79  ode generated by
87b0: 20 74 68 65 20 53 51 4c 20 0a 20 20 20 20 20 20   the SQL .      
87c0: 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 28 65 67 2e  ** compiler (eg.
87d0: 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 29 2e   count_changes).
87e0: 20 53 6f 20 61 64 64 20 61 6e 20 6f 70 63 6f 64   So add an opcod
87f0: 65 20 74 6f 20 65 78 70 69 72 65 20 61 6c 6c 0a  e to expire all.
8800: 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65        ** compile
8810: 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  d SQL statements
8820: 20 61 66 74 65 72 20 6d 6f 64 69 66 79 69 6e 67   after modifying
8830: 20 61 20 70 72 61 67 6d 61 20 76 61 6c 75 65 2e   a pragma value.
8840: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
8850: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
8860: 30 28 76 2c 20 4f 50 5f 45 78 70 69 72 65 29 3b  0(v, OP_Expire);
8870: 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67  .      setAllPag
8880: 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20  erFlags(db);.   
8890: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
88a0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
88b0: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
88c0: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
88d0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48   SQLITE_OMIT_SCH
88e0: 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a  EMA_PRAGMAS.  /*
88f0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74  .  **   PRAGMA t
8900: 61 62 6c 65 5f 69 6e 66 6f 28 3c 74 61 62 6c 65  able_info(<table
8910: 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  >).  **.  ** Ret
8920: 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  urn a single row
8930: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
8940: 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61   of the named ta
8950: 62 6c 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e 73  ble. The columns
8960: 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 72 65 74   of.  ** the ret
8970: 75 72 6e 65 64 20 64 61 74 61 20 73 65 74 20 61  urned data set a
8980: 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63 69  re:.  **.  ** ci
8990: 64 3a 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e  d:        Column
89a0: 20 69 64 20 28 6e 75 6d 62 65 72 65 64 20 66 72   id (numbered fr
89b0: 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
89c0: 2c 20 73 74 61 72 74 69 6e 67 20 61 74 20 30 29  , starting at 0)
89d0: 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20 20 20 20 20  .  ** name:     
89e0: 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20 20    Column name.  
89f0: 2a 2a 20 74 79 70 65 3a 20 20 20 20 20 20 20 43  ** type:       C
8a00: 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f  olumn declaratio
8a10: 6e 20 74 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f 74  n type..  ** not
8a20: 6e 75 6c 6c 3a 20 20 20 20 54 72 75 65 20 69 66  null:    True if
8a30: 20 27 4e 4f 54 20 4e 55 4c 4c 27 20 69 73 20 70   'NOT NULL' is p
8a40: 61 72 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65  art of column de
8a50: 63 6c 61 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 64  claration.  ** d
8a60: 66 6c 74 5f 76 61 6c 75 65 3a 20 54 68 65 20 64  flt_value: The d
8a70: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
8a80: 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 69 66 20   the column, if 
8a90: 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  any..  */.  case
8aa0: 20 50 72 61 67 54 79 70 5f 54 41 42 4c 45 5f 49   PragTyp_TABLE_I
8ab0: 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74 20  NFO: if( zRight 
8ac0: 29 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  ){.    Table *pT
8ad0: 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73  ab;.    pTab = s
8ae0: 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
8af0: 65 28 70 50 61 72 73 65 2c 20 4c 4f 43 41 54 45  e(pParse, LOCATE
8b00: 5f 4e 4f 45 52 52 2c 20 7a 52 69 67 68 74 2c 20  _NOERR, zRight, 
8b10: 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54  zDb);.    if( pT
8b20: 61 62 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  ab ){.      int 
8b30: 69 2c 20 6b 3b 0a 20 20 20 20 20 20 69 6e 74 20  i, k;.      int 
8b40: 6e 48 69 64 64 65 6e 20 3d 20 30 3b 0a 20 20 20  nHidden = 0;.   
8b50: 20 20 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b     Column *pCol;
8b60: 0a 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50  .      Index *pP
8b70: 6b 20 3d 20 73 71 6c 69 74 65 33 50 72 69 6d 61  k = sqlite3Prima
8b80: 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61 62 29  ryKeyIndex(pTab)
8b90: 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  ;.      pParse->
8ba0: 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20  nMem = 6;.      
8bb0: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
8bc0: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
8bd0: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
8be0: 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
8bf0: 4e 61 6d 65 73 28 70 50 61 72 73 65 2c 20 70 54  Names(pParse, pT
8c00: 61 62 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  ab);.      for(i
8c10: 3d 30 2c 20 70 43 6f 6c 3d 70 54 61 62 2d 3e 61  =0, pCol=pTab->a
8c20: 43 6f 6c 3b 20 69 3c 70 54 61 62 2d 3e 6e 43 6f  Col; i<pTab->nCo
8c30: 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c 2b 2b 29 7b  l; i++, pCol++){
8c40: 0a 20 20 20 20 20 20 20 20 69 66 28 20 49 73 48  .        if( IsH
8c50: 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 70 43 6f 6c  iddenColumn(pCol
8c60: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6e  ) ){.          n
8c70: 48 69 64 64 65 6e 2b 2b 3b 0a 20 20 20 20 20 20  Hidden++;.      
8c80: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20      continue;.  
8c90: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
8ca0: 69 66 28 20 28 70 43 6f 6c 2d 3e 63 6f 6c 46 6c  if( (pCol->colFl
8cb0: 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 50 52  ags & COLFLAG_PR
8cc0: 49 4d 4b 45 59 29 3d 3d 30 20 29 7b 0a 20 20 20  IMKEY)==0 ){.   
8cd0: 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20         k = 0;.  
8ce0: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
8cf0: 70 50 6b 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  pPk==0 ){.      
8d00: 20 20 20 20 6b 20 3d 20 31 3b 0a 20 20 20 20 20      k = 1;.     
8d10: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
8d20: 20 20 20 20 66 6f 72 28 6b 3d 31 3b 20 6b 3c 3d      for(k=1; k<=
8d30: 70 54 61 62 2d 3e 6e 43 6f 6c 20 26 26 20 70 50  pTab->nCol && pP
8d40: 6b 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 2d 31 5d  k->aiColumn[k-1]
8d50: 21 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a 20 20 20 20  !=i; k++){}.    
8d60: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61 73      }.        as
8d70: 73 65 72 74 28 20 70 43 6f 6c 2d 3e 70 44 66 6c  sert( pCol->pDfl
8d80: 74 3d 3d 30 20 7c 7c 20 70 43 6f 6c 2d 3e 70 44  t==0 || pCol->pD
8d90: 66 6c 74 2d 3e 6f 70 3d 3d 54 4b 5f 53 50 41 4e  flt->op==TK_SPAN
8da0: 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   );.        sqli
8db0: 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64  te3VdbeMultiLoad
8dc0: 28 76 2c 20 31 2c 20 22 69 73 73 69 73 69 22 2c  (v, 1, "issisi",
8dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8de0: 69 2d 6e 48 69 64 64 65 6e 2c 0a 20 20 20 20 20  i-nHidden,.     
8df0: 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e            pCol->
8e00: 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20  zName,.         
8e10: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 6c        sqlite3Col
8e20: 75 6d 6e 54 79 70 65 28 70 43 6f 6c 2c 22 22 29  umnType(pCol,"")
8e30: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
8e40: 20 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f   pCol->notNull ?
8e50: 20 31 20 3a 20 30 2c 0a 20 20 20 20 20 20 20 20   1 : 0,.        
8e60: 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e 70 44 66         pCol->pDf
8e70: 6c 74 20 3f 20 70 43 6f 6c 2d 3e 70 44 66 6c 74  lt ? pCol->pDflt
8e80: 2d 3e 75 2e 7a 54 6f 6b 65 6e 20 3a 20 30 2c 0a  ->u.zToken : 0,.
8e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
8ea0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
8eb0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 23  .  }.  break;..#
8ec0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
8ed0: 55 47 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  UG.  case PragTy
8ee0: 70 5f 53 54 41 54 53 3a 20 7b 0a 20 20 20 20 49  p_STATS: {.    I
8ef0: 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20  ndex *pIdx;.    
8f00: 48 61 73 68 45 6c 65 6d 20 2a 69 3b 0a 20 20 20  HashElem *i;.   
8f10: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
8f20: 35 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f  5;.    sqlite3Co
8f30: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
8f40: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
8f50: 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48 61 73   for(i=sqliteHas
8f60: 68 46 69 72 73 74 28 26 70 44 62 2d 3e 70 53 63  hFirst(&pDb->pSc
8f70: 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 20  hema->tblHash); 
8f80: 69 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e  i; i=sqliteHashN
8f90: 65 78 74 28 69 29 29 7b 0a 20 20 20 20 20 20 54  ext(i)){.      T
8fa0: 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c  able *pTab = sql
8fb0: 69 74 65 48 61 73 68 44 61 74 61 28 69 29 3b 0a  iteHashData(i);.
8fc0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8fd0: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c  eMultiLoad(v, 1,
8fe0: 20 22 73 73 69 69 69 22 2c 0a 20 20 20 20 20 20   "ssiii",.      
8ff0: 20 20 20 20 20 70 54 61 62 2d 3e 7a 4e 61 6d 65       pTab->zName
9000: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 30 2c 0a  ,.           0,.
9010: 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d             pTab-
9020: 3e 73 7a 54 61 62 52 6f 77 2c 0a 20 20 20 20 20  >szTabRow,.     
9030: 20 20 20 20 20 20 70 54 61 62 2d 3e 6e 52 6f 77        pTab->nRow
9040: 4c 6f 67 45 73 74 2c 0a 20 20 20 20 20 20 20 20  LogEst,.        
9050: 20 20 20 70 54 61 62 2d 3e 74 61 62 46 6c 61 67     pTab->tabFlag
9060: 73 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 49  s);.      for(pI
9070: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
9080: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
9090: 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20  ->pNext){.      
90a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c    sqlite3VdbeMul
90b0: 74 69 4c 6f 61 64 28 76 2c 20 32 2c 20 22 73 69  tiLoad(v, 2, "si
90c0: 69 69 58 22 2c 0a 20 20 20 20 20 20 20 20 20 20  iiX",.          
90d0: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 0a 20 20   pIdx->zName,.  
90e0: 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 73           pIdx->s
90f0: 7a 49 64 78 52 6f 77 2c 0a 20 20 20 20 20 20 20  zIdxRow,.       
9100: 20 20 20 20 70 49 64 78 2d 3e 61 69 52 6f 77 4c      pIdx->aiRowL
9110: 6f 67 45 73 74 5b 30 5d 2c 0a 20 20 20 20 20 20  ogEst[0],.      
9120: 20 20 20 20 20 70 49 64 78 2d 3e 68 61 73 53 74       pIdx->hasSt
9130: 61 74 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71  at1);.        sq
9140: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
9150: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
9160: 20 31 2c 20 35 29 3b 0a 20 20 20 20 20 20 7d 0a   1, 5);.      }.
9170: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
9180: 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 63 61 73  k;.#endif..  cas
9190: 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f  e PragTyp_INDEX_
91a0: 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74  INFO: if( zRight
91b0: 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   ){.    Index *p
91c0: 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  Idx;.    Table *
91d0: 70 54 61 62 3b 0a 20 20 20 20 70 49 64 78 20 3d  pTab;.    pIdx =
91e0: 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65   sqlite3FindInde
91f0: 78 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  x(db, zRight, zD
9200: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78  b);.    if( pIdx
9210: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b   ){.      int i;
9220: 0a 20 20 20 20 20 20 69 6e 74 20 6d 78 3b 0a 20  .      int mx;. 
9230: 20 20 20 20 20 69 66 28 20 70 50 72 61 67 6d 61       if( pPragma
9240: 2d 3e 69 41 72 67 20 29 7b 0a 20 20 20 20 20 20  ->iArg ){.      
9250: 20 20 2f 2a 20 50 52 41 47 4d 41 20 69 6e 64 65    /* PRAGMA inde
9260: 78 5f 78 69 6e 66 6f 20 28 6e 65 77 65 72 20 76  x_xinfo (newer v
9270: 65 72 73 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65  ersion with more
9280: 20 72 6f 77 73 20 61 6e 64 20 63 6f 6c 75 6d 6e   rows and column
9290: 73 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 78  s) */.        mx
92a0: 20 3d 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e   = pIdx->nColumn
92b0: 3b 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65  ;.        pParse
92c0: 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20  ->nMem = 6;.    
92d0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
92e0: 20 2f 2a 20 50 52 41 47 4d 41 20 69 6e 64 65 78   /* PRAGMA index
92f0: 5f 69 6e 66 6f 20 28 6c 65 67 61 63 79 20 76 65  _info (legacy ve
9300: 72 73 69 6f 6e 29 20 2a 2f 0a 20 20 20 20 20 20  rsion) */.      
9310: 20 20 6d 78 20 3d 20 70 49 64 78 2d 3e 6e 4b 65    mx = pIdx->nKe
9320: 79 43 6f 6c 3b 0a 20 20 20 20 20 20 20 20 70 50  yCol;.        pP
9330: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a  arse->nMem = 3;.
9340: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 54        }.      pT
9350: 61 62 20 3d 20 70 49 64 78 2d 3e 70 54 61 62 6c  ab = pIdx->pTabl
9360: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
9370: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
9380: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
9390: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 50 61       assert( pPa
93a0: 72 73 65 2d 3e 6e 4d 65 6d 3c 3d 70 50 72 61 67  rse->nMem<=pPrag
93b0: 6d 61 2d 3e 6e 50 72 61 67 43 4e 61 6d 65 20 29  ma->nPragCName )
93c0: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  ;.      for(i=0;
93d0: 20 69 3c 6d 78 3b 20 69 2b 2b 29 7b 0a 20 20 20   i<mx; i++){.   
93e0: 20 20 20 20 20 69 31 36 20 63 6e 75 6d 20 3d 20       i16 cnum = 
93f0: 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69  pIdx->aiColumn[i
9400: 5d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ];.        sqlit
9410: 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28  e3VdbeMultiLoad(
9420: 76 2c 20 31 2c 20 22 69 69 73 58 22 2c 20 69 2c  v, 1, "iisX", i,
9430: 20 63 6e 75 6d 2c 0a 20 20 20 20 20 20 20 20 20   cnum,.         
9440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9450: 20 20 20 20 63 6e 75 6d 3c 30 20 3f 20 30 20 3a      cnum<0 ? 0 :
9460: 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d   pTab->aCol[cnum
9470: 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ].zName);.      
9480: 20 20 69 66 28 20 70 50 72 61 67 6d 61 2d 3e 69    if( pPragma->i
9490: 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20 20 20  Arg ){.         
94a0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74   sqlite3VdbeMult
94b0: 69 4c 6f 61 64 28 76 2c 20 34 2c 20 22 69 73 69  iLoad(v, 4, "isi
94c0: 58 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  X",.            
94d0: 70 49 64 78 2d 3e 61 53 6f 72 74 4f 72 64 65 72  pIdx->aSortOrder
94e0: 5b 69 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20  [i],.           
94f0: 20 70 49 64 78 2d 3e 61 7a 43 6f 6c 6c 5b 69 5d   pIdx->azColl[i]
9500: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 3c  ,.            i<
9510: 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 0a  pIdx->nKeyCol);.
9520: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
9530: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9540: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
9550: 52 6f 77 2c 20 31 2c 20 70 50 61 72 73 65 2d 3e  Row, 1, pParse->
9560: 6e 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  nMem);.      }. 
9570: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
9580: 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ;..  case PragTy
9590: 70 5f 49 4e 44 45 58 5f 4c 49 53 54 3a 20 69 66  p_INDEX_LIST: if
95a0: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
95b0: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
95c0: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
95d0: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 54 61    int i;.    pTa
95e0: 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  b = sqlite3FindT
95f0: 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c  able(db, zRight,
9600: 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70   zDb);.    if( p
9610: 54 61 62 20 29 7b 0a 20 20 20 20 20 20 70 50 61  Tab ){.      pPa
9620: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 35 3b 0a 20  rse->nMem = 5;. 
9630: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65       sqlite3Code
9640: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
9650: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  rse, iDb);.     
9660: 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e   for(pIdx=pTab->
9670: 70 49 6e 64 65 78 2c 20 69 3d 30 3b 20 70 49 64  pIndex, i=0; pId
9680: 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
9690: 65 78 74 2c 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ext, i++){.     
96a0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61     const char *a
96b0: 7a 4f 72 69 67 69 6e 5b 5d 20 3d 20 7b 20 22 63  zOrigin[] = { "c
96c0: 22 2c 20 22 75 22 2c 20 22 70 6b 22 20 7d 3b 0a  ", "u", "pk" };.
96d0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
96e0: 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20  dbeMultiLoad(v, 
96f0: 31 2c 20 22 69 73 69 73 69 22 2c 0a 20 20 20 20  1, "isisi",.    
9700: 20 20 20 20 20 20 20 69 2c 0a 20 20 20 20 20 20         i,.      
9710: 20 20 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d 65       pIdx->zName
9720: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 49 73 55  ,.           IsU
9730: 6e 69 71 75 65 49 6e 64 65 78 28 70 49 64 78 29  niqueIndex(pIdx)
9740: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 61 7a 4f  ,.           azO
9750: 72 69 67 69 6e 5b 70 49 64 78 2d 3e 69 64 78 54  rigin[pIdx->idxT
9760: 79 70 65 5d 2c 0a 20 20 20 20 20 20 20 20 20 20  ype],.          
9770: 20 70 49 64 78 2d 3e 70 50 61 72 74 49 64 78 57   pIdx->pPartIdxW
9780: 68 65 72 65 21 3d 30 29 3b 0a 20 20 20 20 20 20  here!=0);.      
9790: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
97a0: 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61  eak;..  case Pra
97b0: 67 54 79 70 5f 44 41 54 41 42 41 53 45 5f 4c 49  gTyp_DATABASE_LI
97c0: 53 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 3b  ST: {.    int i;
97d0: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
97e0: 6d 20 3d 20 33 3b 0a 20 20 20 20 66 6f 72 28 69  m = 3;.    for(i
97f0: 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
9800: 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64  ++){.      if( d
9810: 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30  b->aDb[i].pBt==0
9820: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
9830: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
9840: 44 62 5b 69 5d 2e 7a 44 62 53 4e 61 6d 65 21 3d  Db[i].zDbSName!=
9850: 30 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 );.      sqlit
9860: 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28  e3VdbeMultiLoad(
9870: 76 2c 20 31 2c 20 22 69 73 73 22 2c 0a 20 20 20  v, 1, "iss",.   
9880: 20 20 20 20 20 20 69 2c 0a 20 20 20 20 20 20 20        i,.       
9890: 20 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 44 62    db->aDb[i].zDb
98a0: 53 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20  SName,.         
98b0: 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 46  sqlite3BtreeGetF
98c0: 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44 62 5b  ilename(db->aDb[
98d0: 69 5d 2e 70 42 74 29 29 3b 0a 20 20 20 20 7d 0a  i].pBt));.    }.
98e0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
98f0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4c  case PragTyp_COL
9900: 4c 41 54 49 4f 4e 5f 4c 49 53 54 3a 20 7b 0a 20  LATION_LIST: {. 
9910: 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20     int i = 0;.  
9920: 20 20 48 61 73 68 45 6c 65 6d 20 2a 70 3b 0a 20    HashElem *p;. 
9930: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
9940: 3d 20 32 3b 0a 20 20 20 20 66 6f 72 28 70 3d 73  = 2;.    for(p=s
9950: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26  qliteHashFirst(&
9960: 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 70  db->aCollSeq); p
9970: 3b 20 70 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; p=sqliteHashNe
9980: 78 74 28 70 29 29 7b 0a 20 20 20 20 20 20 43 6f  xt(p)){.      Co
9990: 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28  llSeq *pColl = (
99a0: 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74 65  CollSeq *)sqlite
99b0: 48 61 73 68 44 61 74 61 28 70 29 3b 0a 20 20 20  HashData(p);.   
99c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75     sqlite3VdbeMu
99d0: 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69  ltiLoad(v, 1, "i
99e0: 73 22 2c 20 69 2b 2b 2c 20 70 43 6f 6c 6c 2d 3e  s", i++, pColl->
99f0: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a 20 20  zName);.    }.  
9a00: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 23 69 66 64  }.  break;..#ifd
9a10: 65 66 20 53 51 4c 49 54 45 5f 49 4e 54 52 4f 53  ef SQLITE_INTROS
9a20: 50 45 43 54 49 4f 4e 5f 50 52 41 47 4d 41 53 0a  PECTION_PRAGMAS.
9a30: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46    case PragTyp_F
9a40: 55 4e 43 54 49 4f 4e 5f 4c 49 53 54 3a 20 7b 0a  UNCTION_LIST: {.
9a50: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 48      int i;.    H
9a60: 61 73 68 45 6c 65 6d 20 2a 6a 3b 0a 20 20 20 20  ashElem *j;.    
9a70: 46 75 6e 63 44 65 66 20 2a 70 3b 0a 20 20 20 20  FuncDef *p;.    
9a80: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32  pParse->nMem = 2
9a90: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
9aa0: 3c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53  <SQLITE_FUNC_HAS
9ab0: 48 5f 53 5a 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  H_SZ; i++){.    
9ac0: 20 20 66 6f 72 28 70 3d 73 71 6c 69 74 65 33 42    for(p=sqlite3B
9ad0: 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 2e  uiltinFunctions.
9ae0: 61 5b 69 5d 3b 20 70 3b 20 70 3d 70 2d 3e 75 2e  a[i]; p; p=p->u.
9af0: 70 48 61 73 68 20 29 7b 0a 20 20 20 20 20 20 20  pHash ){.       
9b00: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74   sqlite3VdbeMult
9b10: 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 73 69 22  iLoad(v, 1, "si"
9b20: 2c 20 70 2d 3e 7a 4e 61 6d 65 2c 20 31 29 3b 0a  , p->zName, 1);.
9b30: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
9b40: 20 20 66 6f 72 28 6a 3d 73 71 6c 69 74 65 48 61    for(j=sqliteHa
9b50: 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 46 75  shFirst(&db->aFu
9b60: 6e 63 29 3b 20 6a 3b 20 6a 3d 73 71 6c 69 74 65  nc); j; j=sqlite
9b70: 48 61 73 68 4e 65 78 74 28 6a 29 29 7b 0a 20 20  HashNext(j)){.  
9b80: 20 20 20 20 70 20 3d 20 28 46 75 6e 63 44 65 66      p = (FuncDef
9b90: 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  *)sqliteHashData
9ba0: 28 6a 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  (j);.      sqlit
9bb0: 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28  e3VdbeMultiLoad(
9bc0: 76 2c 20 31 2c 20 22 73 69 22 2c 20 70 2d 3e 7a  v, 1, "si", p->z
9bd0: 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  Name, 0);.    }.
9be0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 23 69    }.  break;..#i
9bf0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
9c00: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
9c10: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4d 4f   case PragTyp_MO
9c20: 44 55 4c 45 5f 4c 49 53 54 3a 20 7b 0a 20 20 20  DULE_LIST: {.   
9c30: 20 48 61 73 68 45 6c 65 6d 20 2a 6a 3b 0a 20 20   HashElem *j;.  
9c40: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
9c50: 20 31 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 73 71   1;.    for(j=sq
9c60: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64  liteHashFirst(&d
9c70: 62 2d 3e 61 4d 6f 64 75 6c 65 29 3b 20 6a 3b 20  b->aModule); j; 
9c80: 6a 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  j=sqliteHashNext
9c90: 28 6a 29 29 7b 0a 20 20 20 20 20 20 4d 6f 64 75  (j)){.      Modu
9ca0: 6c 65 20 2a 70 4d 6f 64 20 3d 20 28 4d 6f 64 75  le *pMod = (Modu
9cb0: 6c 65 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61  le*)sqliteHashDa
9cc0: 74 61 28 6a 29 3b 0a 20 20 20 20 20 20 73 71 6c  ta(j);.      sql
9cd0: 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61  ite3VdbeMultiLoa
9ce0: 64 28 76 2c 20 31 2c 20 22 73 22 2c 20 70 4d 6f  d(v, 1, "s", pMo
9cf0: 64 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7d  d->zName);.    }
9d00: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
9d10: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
9d20: 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
9d30: 20 2a 2f 0a 0a 20 20 63 61 73 65 20 50 72 61 67   */..  case Prag
9d40: 54 79 70 5f 50 52 41 47 4d 41 5f 4c 49 53 54 3a  Typ_PRAGMA_LIST:
9d50: 20 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20   {.    int i;.  
9d60: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72    for(i=0; i<Arr
9d70: 61 79 53 69 7a 65 28 61 50 72 61 67 6d 61 4e 61  aySize(aPragmaNa
9d80: 6d 65 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  me); i++){.     
9d90: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74   sqlite3VdbeMult
9da0: 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 73 22 2c  iLoad(v, 1, "s",
9db0: 20 61 50 72 61 67 6d 61 4e 61 6d 65 5b 69 5d 2e   aPragmaName[i].
9dc0: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a 20 20  zName);.    }.  
9dd0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
9de0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 49 4e 54 52  f /* SQLITE_INTR
9df0: 4f 53 50 45 43 54 49 4f 4e 5f 50 52 41 47 4d 41  OSPECTION_PRAGMA
9e00: 53 20 2a 2f 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  S */..#endif /* 
9e10: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
9e20: 4d 41 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23  MA_PRAGMAS */..#
9e30: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9e40: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20  IT_FOREIGN_KEY. 
9e50: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4f   case PragTyp_FO
9e60: 52 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 3a 20  REIGN_KEY_LIST: 
9e70: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
9e80: 20 20 46 4b 65 79 20 2a 70 46 4b 3b 0a 20 20 20    FKey *pFK;.   
9e90: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
9ea0: 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33    pTab = sqlite3
9eb0: 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52  FindTable(db, zR
9ec0: 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20  ight, zDb);.    
9ed0: 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20  if( pTab ){.    
9ee0: 20 20 70 46 4b 20 3d 20 70 54 61 62 2d 3e 70 46    pFK = pTab->pF
9ef0: 4b 65 79 3b 0a 20 20 20 20 20 20 69 66 28 20 70  Key;.      if( p
9f00: 46 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  FK ){.        in
9f10: 74 20 69 20 3d 20 30 3b 20 0a 20 20 20 20 20 20  t i = 0; .      
9f20: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
9f30: 20 38 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   8;.        sqli
9f40: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
9f50: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29  ema(pParse, iDb)
9f60: 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28  ;.        while(
9f70: 70 46 4b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  pFK){.          
9f80: 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 20 20 20  int j;.         
9f90: 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d   for(j=0; j<pFK-
9fa0: 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20  >nCol; j++){.   
9fb0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
9fc0: 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c  VdbeMultiLoad(v,
9fd0: 20 31 2c 20 22 69 69 73 73 73 73 73 73 22 2c 0a   1, "iissssss",.
9fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ff0: 20 20 20 69 2c 0a 20 20 20 20 20 20 20 20 20 20     i,.          
a000: 20 20 20 20 20 20 20 20 20 6a 2c 0a 20 20 20 20           j,.    
a010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
a020: 46 4b 2d 3e 7a 54 6f 2c 0a 20 20 20 20 20 20 20  FK->zTo,.       
a030: 20 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62              pTab
a040: 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c  ->aCol[pFK->aCol
a050: 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65  [j].iFrom].zName
a060: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
a070: 20 20 20 20 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a       pFK->aCol[j
a080: 5d 2e 7a 43 6f 6c 2c 0a 20 20 20 20 20 20 20 20  ].zCol,.        
a090: 20 20 20 20 20 20 20 20 20 20 20 61 63 74 69 6f             actio
a0a0: 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69  nName(pFK->aActi
a0b0: 6f 6e 5b 31 5d 29 2c 20 20 2f 2a 20 4f 4e 20 55  on[1]),  /* ON U
a0c0: 50 44 41 54 45 20 2a 2f 0a 20 20 20 20 20 20 20  PDATE */.       
a0d0: 20 20 20 20 20 20 20 20 20 20 20 20 61 63 74 69              acti
a0e0: 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74  onName(pFK->aAct
a0f0: 69 6f 6e 5b 30 5d 29 2c 20 20 2f 2a 20 4f 4e 20  ion[0]),  /* ON 
a100: 44 45 4c 45 54 45 20 2a 2f 0a 20 20 20 20 20 20  DELETE */.      
a110: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 4f               "NO
a120: 4e 45 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  NE");.          
a130: 7d 0a 20 20 20 20 20 20 20 20 20 20 2b 2b 69 3b  }.          ++i;
a140: 0a 20 20 20 20 20 20 20 20 20 20 70 46 4b 20 3d  .          pFK =
a150: 20 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 3b   pFK->pNextFrom;
a160: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
a170: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
a180: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
a190: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
a1a0: 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
a1b0: 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  ) */..#ifndef SQ
a1c0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
a1d0: 4e 5f 4b 45 59 0a 23 69 66 6e 64 65 66 20 53 51  N_KEY.#ifndef SQ
a1e0: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
a1f0: 52 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  R.  case PragTyp
a200: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48 45  _FOREIGN_KEY_CHE
a210: 43 4b 3a 20 7b 0a 20 20 20 20 46 4b 65 79 20 2a  CK: {.    FKey *
a220: 70 46 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20  pFK;            
a230: 20 2f 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65   /* A foreign ke
a240: 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  y constraint */.
a250: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
a260: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68             /* Ch
a270: 69 6c 64 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  ild table contai
a280: 6e 20 22 52 45 46 45 52 45 4e 43 45 53 22 20 6b  n "REFERENCES" k
a290: 65 79 77 6f 72 64 20 2a 2f 0a 20 20 20 20 54 61  eyword */.    Ta
a2a0: 62 6c 65 20 2a 70 50 61 72 65 6e 74 3b 20 20 20  ble *pParent;   
a2b0: 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 74       /* Parent t
a2c0: 61 62 6c 65 20 74 68 61 74 20 63 68 69 6c 64 20  able that child 
a2d0: 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20 20  points to */.   
a2e0: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20   Index *pIdx;   
a2f0: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
a300: 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 74   in the parent t
a310: 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
a320: 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
a330: 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
a340: 65 72 3a 20 20 46 6f 72 65 69 67 6e 20 6b 65 79  er:  Foreign key
a350: 20 6e 75 6d 62 65 72 20 66 6f 72 20 70 54 61 62   number for pTab
a360: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6a 3b 20 20   */.    int j;  
a370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a380: 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20  * Loop counter: 
a390: 20 46 69 65 6c 64 20 6f 66 20 74 68 65 20 66 6f   Field of the fo
a3a0: 72 65 69 67 6e 20 6b 65 79 20 2a 2f 0a 20 20 20  reign key */.   
a3b0: 20 48 61 73 68 45 6c 65 6d 20 2a 6b 3b 20 20 20   HashElem *k;   
a3c0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
a3d0: 63 6f 75 6e 74 65 72 3a 20 20 4e 65 78 74 20 74  counter:  Next t
a3e0: 61 62 6c 65 20 69 6e 20 73 63 68 65 6d 61 20 2a  able in schema *
a3f0: 2f 0a 20 20 20 20 69 6e 74 20 78 3b 20 20 20 20  /.    int x;    
a400: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a410: 72 65 73 75 6c 74 20 76 61 72 69 61 62 6c 65 20  result variable 
a420: 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
a430: 73 75 6c 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  sult;         /*
a440: 20 33 20 72 65 67 69 73 74 65 72 73 20 74 6f 20   3 registers to 
a450: 68 6f 6c 64 20 61 20 72 65 73 75 6c 74 20 72 6f  hold a result ro
a460: 77 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  w */.    int reg
a470: 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  Key;            
a480: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 68  /* Register to h
a490: 6f 6c 64 20 6b 65 79 20 66 6f 72 20 63 68 65 63  old key for chec
a4a0: 6b 69 6e 67 20 74 68 65 20 46 4b 20 2a 2f 0a 20  king the FK */. 
a4b0: 20 20 20 69 6e 74 20 72 65 67 52 6f 77 3b 20 20     int regRow;  
a4c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
a4d0: 69 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61  isters to hold a
a4e0: 20 72 6f 77 20 66 72 6f 6d 20 70 54 61 62 20 2a   row from pTab *
a4f0: 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 54 6f  /.    int addrTo
a500: 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
a510: 54 6f 70 20 6f 66 20 61 20 6c 6f 6f 70 20 63 68  Top of a loop ch
a520: 65 63 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b  ecking foreign k
a530: 65 79 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  eys */.    int a
a540: 64 64 72 4f 6b 3b 20 20 20 20 20 20 20 20 20 20  ddrOk;          
a550: 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 69    /* Jump here i
a560: 66 20 74 68 65 20 6b 65 79 20 69 73 20 4f 4b 20  f the key is OK 
a570: 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f  */.    int *aiCo
a580: 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ls;           /*
a590: 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74   child to parent
a5a0: 20 63 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e 67 20   column mapping 
a5b0: 2a 2f 0a 0a 20 20 20 20 72 65 67 52 65 73 75 6c  */..    regResul
a5c0: 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  t = pParse->nMem
a5d0: 2b 31 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  +1;.    pParse->
a5e0: 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20 72  nMem += 4;.    r
a5f0: 65 67 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73 65  egKey = ++pParse
a600: 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67 52  ->nMem;.    regR
a610: 6f 77 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e  ow = ++pParse->n
a620: 4d 65 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Mem;.    sqlite3
a630: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
a640: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
a650: 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73     k = sqliteHas
a660: 68 46 69 72 73 74 28 26 64 62 2d 3e 61 44 62 5b  hFirst(&db->aDb[
a670: 69 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62  iDb].pSchema->tb
a680: 6c 48 61 73 68 29 3b 0a 20 20 20 20 77 68 69 6c  lHash);.    whil
a690: 65 28 20 6b 20 29 7b 0a 20 20 20 20 20 20 69 66  e( k ){.      if
a6a0: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
a6b0: 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74      pTab = sqlit
a6c0: 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 70 50  e3LocateTable(pP
a6d0: 61 72 73 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c  arse, 0, zRight,
a6e0: 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20 6b   zDb);.        k
a6f0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 0;.      }els
a700: 65 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62 20  e{.        pTab 
a710: 3d 20 28 54 61 62 6c 65 2a 29 73 71 6c 69 74 65  = (Table*)sqlite
a720: 48 61 73 68 44 61 74 61 28 6b 29 3b 0a 20 20 20  HashData(k);.   
a730: 20 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48       k = sqliteH
a740: 61 73 68 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20  ashNext(k);.    
a750: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 54    }.      if( pT
a760: 61 62 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70  ab==0 || pTab->p
a770: 46 4b 65 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  FKey==0 ) contin
a780: 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ue;.      sqlite
a790: 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73  3TableLock(pPars
a7a0: 65 2c 20 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e  e, iDb, pTab->tn
a7b0: 75 6d 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61  um, 0, pTab->zNa
a7c0: 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  me);.      if( p
a7d0: 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77  Tab->nCol+regRow
a7e0: 3e 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20  >pParse->nMem ) 
a7f0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pParse->nMem = p
a800: 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52  Tab->nCol + regR
a810: 6f 77 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ow;.      sqlite
a820: 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73  3OpenTable(pPars
a830: 65 2c 20 30 2c 20 69 44 62 2c 20 70 54 61 62 2c  e, 0, iDb, pTab,
a840: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20   OP_OpenRead);. 
a850: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a860: 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 72 65  LoadString(v, re
a870: 67 52 65 73 75 6c 74 2c 20 70 54 61 62 2d 3e 7a  gResult, pTab->z
a880: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 66 6f 72  Name);.      for
a890: 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e  (i=1, pFK=pTab->
a8a0: 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c  pFKey; pFK; i++,
a8b0: 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46   pFK=pFK->pNextF
a8c0: 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50  rom){.        pP
a8d0: 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46  arent = sqlite3F
a8e0: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b  indTable(db, pFK
a8f0: 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20  ->zTo, zDb);.   
a900: 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74       if( pParent
a910: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
a920: 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 30          pIdx = 0
a930: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
a940: 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73  3TableLock(pPars
a950: 65 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2d  e, iDb, pParent-
a960: 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72 65 6e  >tnum, 0, pParen
a970: 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  t->zName);.     
a980: 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b     x = sqlite3Fk
a990: 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61 72  LocateIndex(pPar
a9a0: 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b  se, pParent, pFK
a9b0: 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a 20 20 20  , &pIdx, 0);.   
a9c0: 20 20 20 20 20 69 66 28 20 78 3d 3d 30 20 29 7b       if( x==0 ){
a9d0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
a9e0: 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Idx==0 ){.      
a9f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65        sqlite3Ope
aa00: 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 69  nTable(pParse, i
aa10: 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2c 20  , iDb, pParent, 
aa20: 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20  OP_OpenRead);.  
aa30: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
aa40: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
aa50: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
aa60: 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c 20  OP_OpenRead, i, 
aa70: 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62 29  pIdx->tnum, iDb)
aa80: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
aa90: 6c 69 74 65 33 56 64 62 65 53 65 74 50 34 4b 65  lite3VdbeSetP4Ke
aaa0: 79 49 6e 66 6f 28 70 50 61 72 73 65 2c 20 70 49  yInfo(pParse, pI
aab0: 64 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  dx);.          }
aac0: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
aad0: 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b            k = 0;
aae0: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
aaf0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
ab00: 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
ab10: 28 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 3e 30  ( pParse->nErr>0
ab20: 20 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a 20 20   || pFK==0 );.  
ab30: 20 20 20 20 69 66 28 20 70 46 4b 20 29 20 62 72      if( pFK ) br
ab40: 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20 70  eak;.      if( p
ab50: 50 61 72 73 65 2d 3e 6e 54 61 62 3c 69 20 29 20  Parse->nTab<i ) 
ab60: 70 50 61 72 73 65 2d 3e 6e 54 61 62 20 3d 20 69  pParse->nTab = i
ab70: 3b 0a 20 20 20 20 20 20 61 64 64 72 54 6f 70 20  ;.      addrTop 
ab80: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
ab90: 4f 70 31 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64  Op1(v, OP_Rewind
aba0: 2c 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61  , 0); VdbeCovera
abb0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 66 6f 72  ge(v);.      for
abc0: 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e  (i=1, pFK=pTab->
abd0: 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c  pFKey; pFK; i++,
abe0: 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46   pFK=pFK->pNextF
abf0: 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50  rom){.        pP
ac00: 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46  arent = sqlite3F
ac10: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b  indTable(db, pFK
ac20: 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20  ->zTo, zDb);.   
ac30: 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20       pIdx = 0;. 
ac40: 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3d 20         aiCols = 
ac50: 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  0;.        if( p
ac60: 50 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20  Parent ){.      
ac70: 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46      x = sqlite3F
ac80: 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61  kLocateIndex(pPa
ac90: 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46  rse, pParent, pF
aca0: 4b 2c 20 26 70 49 64 78 2c 20 26 61 69 43 6f 6c  K, &pIdx, &aiCol
acb0: 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73  s);.          as
acc0: 73 65 72 74 28 20 78 3d 3d 30 20 29 3b 0a 20 20  sert( x==0 );.  
acd0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
ace0: 61 64 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65 33  addrOk = sqlite3
acf0: 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29  VdbeMakeLabel(v)
ad00: 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 47 65  ;..        /* Ge
ad10: 6e 65 72 61 74 65 20 63 6f 64 65 20 74 6f 20 72  nerate code to r
ad20: 65 61 64 20 74 68 65 20 63 68 69 6c 64 20 6b 65  ead the child ke
ad30: 79 20 76 61 6c 75 65 73 20 69 6e 74 6f 20 72 65  y values into re
ad40: 67 69 73 74 65 72 73 0a 20 20 20 20 20 20 20 20  gisters.        
ad50: 2a 2a 20 72 65 67 52 6f 77 2e 2e 72 65 67 52 6f  ** regRow..regRo
ad60: 77 2b 6e 2e 20 49 66 20 61 6e 79 20 6f 66 20 74  w+n. If any of t
ad70: 68 65 20 63 68 69 6c 64 20 6b 65 79 20 76 61 6c  he child key val
ad80: 75 65 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74 68  ues are NULL, th
ad90: 69 73 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 72  is .        ** r
ada0: 6f 77 20 63 61 6e 6e 6f 74 20 63 61 75 73 65 20  ow cannot cause 
adb0: 61 6e 20 46 4b 20 76 69 6f 6c 61 74 69 6f 6e 2e  an FK violation.
adc0: 20 4a 75 6d 70 20 64 69 72 65 63 74 6c 79 20 74   Jump directly t
add0: 6f 20 61 64 64 72 4f 6b 20 69 6e 20 0a 20 20 20  o addrOk in .   
ade0: 20 20 20 20 20 2a 2a 20 74 68 69 73 20 63 61 73       ** this cas
adf0: 65 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f  e. */.        fo
ae00: 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43  r(j=0; j<pFK->nC
ae10: 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; j++){.      
ae20: 20 20 20 20 69 6e 74 20 69 43 6f 6c 20 3d 20 61      int iCol = a
ae30: 69 43 6f 6c 73 20 3f 20 61 69 43 6f 6c 73 5b 6a  iCols ? aiCols[j
ae40: 5d 20 3a 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d  ] : pFK->aCol[j]
ae50: 2e 69 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20  .iFrom;.        
ae60: 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64    sqlite3ExprCod
ae70: 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
ae80: 65 28 76 2c 20 70 54 61 62 2c 20 30 2c 20 69 43  e(v, pTab, 0, iC
ae90: 6f 6c 2c 20 72 65 67 52 6f 77 2b 6a 29 3b 0a 20  ol, regRow+j);. 
aea0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
aeb0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
aec0: 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2b  _IsNull, regRow+
aed0: 6a 2c 20 61 64 64 72 4f 6b 29 3b 20 56 64 62 65  j, addrOk); Vdbe
aee0: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
aef0: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
af00: 2f 2a 20 47 65 6e 65 72 61 74 65 20 63 6f 64 65  /* Generate code
af10: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 70 61   to query the pa
af20: 72 65 6e 74 20 69 6e 64 65 78 20 66 6f 72 20 61  rent index for a
af30: 20 6d 61 74 63 68 69 6e 67 20 70 61 72 65 6e 74   matching parent
af40: 0a 20 20 20 20 20 20 20 20 2a 2a 20 6b 65 79 2e  .        ** key.
af50: 20 49 66 20 61 20 6d 61 74 63 68 20 69 73 20 66   If a match is f
af60: 6f 75 6e 64 2c 20 6a 75 6d 70 20 74 6f 20 61 64  ound, jump to ad
af70: 64 72 4f 6b 2e 20 2a 2f 0a 20 20 20 20 20 20 20  drOk. */.       
af80: 20 69 66 28 20 70 49 64 78 20 29 7b 0a 20 20 20   if( pIdx ){.   
af90: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
afa0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 4d  beAddOp4(v, OP_M
afb0: 61 6b 65 52 65 63 6f 72 64 2c 20 72 65 67 52 6f  akeRecord, regRo
afc0: 77 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 2c 20 72 65  w, pFK->nCol, re
afd0: 67 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20  gKey,.          
afe0: 20 20 20 20 73 71 6c 69 74 65 33 49 6e 64 65 78      sqlite3Index
aff0: 41 66 66 69 6e 69 74 79 53 74 72 28 64 62 2c 70  AffinityStr(db,p
b000: 49 64 78 29 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 29  Idx), pFK->nCol)
b010: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
b020: 74 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74  te3VdbeAddOp4Int
b030: 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 2c  (v, OP_Found, i,
b040: 20 61 64 64 72 4f 6b 2c 20 72 65 67 4b 65 79 2c   addrOk, regKey,
b050: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 56   0);.          V
b060: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
b070: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
b080: 28 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20  ( pParent ){.   
b090: 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 20 3d         int jmp =
b0a0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72   sqlite3VdbeCurr
b0b0: 65 6e 74 41 64 64 72 28 76 29 2b 32 3b 0a 20 20  entAddr(v)+2;.  
b0c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b0d0: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
b0e0: 53 65 65 6b 52 6f 77 69 64 2c 20 69 2c 20 6a 6d  SeekRowid, i, jm
b0f0: 70 2c 20 72 65 67 52 6f 77 29 3b 20 56 64 62 65  p, regRow); Vdbe
b100: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
b110: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b120: 62 65 47 6f 74 6f 28 76 2c 20 61 64 64 72 4f 6b  beGoto(v, addrOk
b130: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  );.          ass
b140: 65 72 74 28 20 70 46 4b 2d 3e 6e 43 6f 6c 3d 3d  ert( pFK->nCol==
b150: 31 20 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a  1 );.        }..
b160: 20 20 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72          /* Gener
b170: 61 74 65 20 63 6f 64 65 20 74 6f 20 72 65 70 6f  ate code to repo
b180: 72 74 20 61 6e 20 46 4b 20 76 69 6f 6c 61 74 69  rt an FK violati
b190: 6f 6e 20 74 6f 20 74 68 65 20 63 61 6c 6c 65 72  on to the caller
b1a0: 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
b1b0: 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
b1c0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
b1d0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
b1e0: 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72  , OP_Rowid, 0, r
b1f0: 65 67 52 65 73 75 6c 74 2b 31 29 3b 0a 20 20 20  egResult+1);.   
b200: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
b210: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b220: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75  eAddOp2(v, OP_Nu
b230: 6c 6c 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74  ll, 0, regResult
b240: 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  +1);.        }. 
b250: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b260: 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 72  beMultiLoad(v, r
b270: 65 67 52 65 73 75 6c 74 2b 32 2c 20 22 73 69 58  egResult+2, "siX
b280: 22 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 69 2d 31  ", pFK->zTo, i-1
b290: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
b2a0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
b2b0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 72 65  OP_ResultRow, re
b2c0: 67 52 65 73 75 6c 74 2c 20 34 29 3b 0a 20 20 20  gResult, 4);.   
b2d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b2e0: 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20  ResolveLabel(v, 
b2f0: 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20  addrOk);.       
b300: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
b310: 62 2c 20 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20  b, aiCols);.    
b320: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
b330: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
b340: 50 5f 4e 65 78 74 2c 20 30 2c 20 61 64 64 72 54  P_Next, 0, addrT
b350: 6f 70 2b 31 29 3b 20 56 64 62 65 43 6f 76 65 72  op+1); VdbeCover
b360: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71  age(v);.      sq
b370: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
b380: 65 28 76 2c 20 61 64 64 72 54 6f 70 29 3b 0a 20  e(v, addrTop);. 
b390: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
b3a0: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  ;.#endif /* !def
b3b0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
b3c0: 5f 54 52 49 47 47 45 52 29 20 2a 2f 0a 23 65 6e  _TRIGGER) */.#en
b3d0: 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
b3e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
b3f0: 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66  IGN_KEY) */..#if
b400: 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 63 61  ndef NDEBUG.  ca
b410: 73 65 20 50 72 61 67 54 79 70 5f 50 41 52 53 45  se PragTyp_PARSE
b420: 52 5f 54 52 41 43 45 3a 20 7b 0a 20 20 20 20 69  R_TRACE: {.    i
b430: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
b440: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 65     if( sqlite3Ge
b450: 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c  tBoolean(zRight,
b460: 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73   0) ){.        s
b470: 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
b480: 65 28 73 74 64 6f 75 74 2c 20 22 70 61 72 73 65  e(stdout, "parse
b490: 72 3a 20 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c  r: ");.      }el
b4a0: 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
b4b0: 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28 30  te3ParserTrace(0
b4c0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 0);.      }.  
b4d0: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
b4e0: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 52 65  .#endif..  /* Re
b4f0: 69 6e 73 74 61 6c 6c 20 74 68 65 20 4c 49 4b 45  install the LIKE
b500: 20 61 6e 64 20 47 4c 4f 42 20 66 75 6e 63 74 69   and GLOB functi
b510: 6f 6e 73 2e 20 20 54 68 65 20 76 61 72 69 61 6e  ons.  The varian
b520: 74 20 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a 20 75  t of LIKE.  ** u
b530: 73 65 64 20 77 69 6c 6c 20 62 65 20 63 61 73 65  sed will be case
b540: 20 73 65 6e 73 69 74 69 76 65 20 6f 72 20 6e 6f   sensitive or no
b550: 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74  t depending on t
b560: 68 65 20 52 48 53 2e 0a 20 20 2a 2f 0a 20 20 63  he RHS..  */.  c
b570: 61 73 65 20 50 72 61 67 54 79 70 5f 43 41 53 45  ase PragTyp_CASE
b580: 5f 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 3a  _SENSITIVE_LIKE:
b590: 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
b5a0: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
b5b0: 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75  e3RegisterLikeFu
b5c0: 6e 63 74 69 6f 6e 73 28 64 62 2c 20 73 71 6c 69  nctions(db, sqli
b5d0: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
b5e0: 69 67 68 74 2c 20 30 29 29 3b 0a 20 20 20 20 7d  ight, 0));.    }
b5f0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 23  .  }.  break;..#
b600: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 49 4e  ifndef SQLITE_IN
b610: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52  TEGRITY_CHECK_ER
b620: 52 4f 52 5f 4d 41 58 0a 23 20 64 65 66 69 6e 65  ROR_MAX.# define
b630: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54   SQLITE_INTEGRIT
b640: 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41  Y_CHECK_ERROR_MA
b650: 58 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a 23 69  X 100.#endif..#i
b660: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
b670: 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
b680: 4b 0a 20 20 2f 2a 20 20 20 20 50 52 41 47 4d 41  K.  /*    PRAGMA
b690: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
b6a0: 0a 20 20 2a 2a 20 20 20 20 50 52 41 47 4d 41 20  .  **    PRAGMA 
b6b0: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 28  integrity_check(
b6c0: 4e 29 0a 20 20 2a 2a 20 20 20 20 50 52 41 47 4d  N).  **    PRAGM
b6d0: 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 0a 20 20  A quick_check.  
b6e0: 2a 2a 20 20 20 20 50 52 41 47 4d 41 20 71 75 69  **    PRAGMA qui
b6f0: 63 6b 5f 63 68 65 63 6b 28 4e 29 0a 20 20 2a 2a  ck_check(N).  **
b700: 0a 20 20 2a 2a 20 56 65 72 69 66 79 20 74 68 65  .  ** Verify the
b710: 20 69 6e 74 65 67 72 69 74 79 20 6f 66 20 74 68   integrity of th
b720: 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2a  e database..  **
b730: 0a 20 20 2a 2a 20 54 68 65 20 22 71 75 69 63 6b  .  ** The "quick
b740: 5f 63 68 65 63 6b 22 20 69 73 20 72 65 64 75 63  _check" is reduc
b750: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 0a 20  ed version of . 
b760: 20 2a 2a 20 69 6e 74 65 67 72 69 74 79 5f 63 68   ** integrity_ch
b770: 65 63 6b 20 64 65 73 69 67 6e 65 64 20 74 6f 20  eck designed to 
b780: 64 65 74 65 63 74 20 6d 6f 73 74 20 64 61 74 61  detect most data
b790: 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 0a  base corruption.
b7a0: 20 20 2a 2a 20 77 69 74 68 6f 75 74 20 74 68 65    ** without the
b7b0: 20 6f 76 65 72 68 65 61 64 20 6f 66 20 63 72 6f   overhead of cro
b7c0: 73 73 2d 63 68 65 63 6b 69 6e 67 20 69 6e 64 65  ss-checking inde
b7d0: 78 65 73 2e 20 20 51 75 69 63 6b 5f 63 68 65 63  xes.  Quick_chec
b7e0: 6b 0a 20 20 2a 2a 20 69 73 20 6c 69 6e 65 61 72  k.  ** is linear
b7f0: 20 74 69 6d 65 20 77 68 65 72 65 61 73 65 20 69   time wherease i
b800: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 69  ntegrity_check i
b810: 73 20 4f 28 4e 6c 6f 67 4e 29 2e 0a 20 20 2a 2f  s O(NlogN)..  */
b820: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
b830: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 3a  INTEGRITY_CHECK:
b840: 20 7b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c   {.    int i, j,
b850: 20 61 64 64 72 2c 20 6d 78 45 72 72 3b 0a 0a 20   addr, mxErr;.. 
b860: 20 20 20 69 6e 74 20 69 73 51 75 69 63 6b 20 3d     int isQuick =
b870: 20 28 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72   (sqlite3Tolower
b880: 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 71 27 29  (zLeft[0])=='q')
b890: 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ;..    /* If the
b8a0: 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 20   PRAGMA command 
b8b0: 77 61 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  was of the form 
b8c0: 22 50 52 41 47 4d 41 20 3c 64 62 3e 2e 69 6e 74  "PRAGMA <db>.int
b8d0: 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a 20  egrity_check",. 
b8e0: 20 20 20 2a 2a 20 74 68 65 6e 20 69 44 62 20 69     ** then iDb i
b8f0: 73 20 73 65 74 20 74 6f 20 74 68 65 20 69 6e 64  s set to the ind
b900: 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
b910: 73 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  se identified by
b920: 20 3c 64 62 3e 2e 0a 20 20 20 20 2a 2a 20 49 6e   <db>..    ** In
b930: 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20   this case, the 
b940: 69 6e 74 65 67 72 69 74 79 20 6f 66 20 64 61 74  integrity of dat
b950: 61 62 61 73 65 20 69 44 62 20 6f 6e 6c 79 20 69  abase iDb only i
b960: 73 20 76 65 72 69 66 69 65 64 20 62 79 0a 20 20  s verified by.  
b970: 20 20 2a 2a 20 74 68 65 20 56 44 42 45 20 63 72    ** the VDBE cr
b980: 65 61 74 65 64 20 62 65 6c 6f 77 2e 0a 20 20 20  eated below..   
b990: 20 2a 2a 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72   **.    ** Other
b9a0: 77 69 73 65 2c 20 69 66 20 74 68 65 20 63 6f 6d  wise, if the com
b9b0: 6d 61 6e 64 20 77 61 73 20 73 69 6d 70 6c 79 20  mand was simply 
b9c0: 22 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74  "PRAGMA integrit
b9d0: 79 5f 63 68 65 63 6b 22 20 28 6f 72 0a 20 20 20  y_check" (or.   
b9e0: 20 2a 2a 20 22 50 52 41 47 4d 41 20 71 75 69 63   ** "PRAGMA quic
b9f0: 6b 5f 63 68 65 63 6b 22 29 2c 20 74 68 65 6e 20  k_check"), then 
ba00: 69 44 62 20 69 73 20 73 65 74 20 74 6f 20 30 2e  iDb is set to 0.
ba10: 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 73   In this case, s
ba20: 65 74 20 69 44 62 0a 20 20 20 20 2a 2a 20 74 6f  et iDb.    ** to
ba30: 20 2d 31 20 68 65 72 65 2c 20 74 6f 20 69 6e 64   -1 here, to ind
ba40: 69 63 61 74 65 20 74 68 61 74 20 74 68 65 20 56  icate that the V
ba50: 44 42 45 20 73 68 6f 75 6c 64 20 76 65 72 69 66  DBE should verif
ba60: 79 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 0a  y the integrity.
ba70: 20 20 20 20 2a 2a 20 6f 66 20 61 6c 6c 20 61 74      ** of all at
ba80: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
ba90: 2e 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74  .  */.    assert
baa0: 28 20 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20  ( iDb>=0 );.    
bab0: 61 73 73 65 72 74 28 20 69 44 62 3d 3d 30 20 7c  assert( iDb==0 |
bac0: 7c 20 70 49 64 32 2d 3e 7a 20 29 3b 0a 20 20 20  | pId2->z );.   
bad0: 20 69 66 28 20 70 49 64 32 2d 3e 7a 3d 3d 30 20   if( pId2->z==0 
bae0: 29 20 69 44 62 20 3d 20 2d 31 3b 0a 0a 20 20 20  ) iDb = -1;..   
baf0: 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74   /* Initialize t
bb00: 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20  he VDBE program 
bb10: 2a 2f 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  */.    pParse->n
bb20: 4d 65 6d 20 3d 20 36 3b 0a 0a 20 20 20 20 2f 2a  Mem = 6;..    /*
bb30: 20 53 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d   Set the maximum
bb40: 20 65 72 72 6f 72 20 63 6f 75 6e 74 20 2a 2f 0a   error count */.
bb50: 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49      mxErr = SQLI
bb60: 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  TE_INTEGRITY_CHE
bb70: 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20  CK_ERROR_MAX;.  
bb80: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
bb90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 65 74        sqlite3Get
bba0: 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 6d  Int32(zRight, &m
bbb0: 78 45 72 72 29 3b 0a 20 20 20 20 20 20 69 66 28  xErr);.      if(
bbc0: 20 6d 78 45 72 72 3c 3d 30 20 29 7b 0a 20 20 20   mxErr<=0 ){.   
bbd0: 20 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c       mxErr = SQL
bbe0: 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  ITE_INTEGRITY_CH
bbf0: 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20  ECK_ERROR_MAX;. 
bc00: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
bc10: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
bc20: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
bc30: 2c 20 6d 78 45 72 72 2d 31 2c 20 31 29 3b 20 2f  , mxErr-1, 1); /
bc40: 2a 20 72 65 67 5b 31 5d 20 68 6f 6c 64 73 20 65  * reg[1] holds e
bc50: 72 72 6f 72 73 20 6c 65 66 74 20 2a 2f 0a 0a 20  rrors left */.. 
bc60: 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65     /* Do an inte
bc70: 67 72 69 74 79 20 63 68 65 63 6b 20 6f 6e 20 65  grity check on e
bc80: 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ach database fil
bc90: 65 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30  e */.    for(i=0
bca0: 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
bcb0: 29 7b 0a 20 20 20 20 20 20 48 61 73 68 45 6c 65  ){.      HashEle
bcc0: 6d 20 2a 78 3b 20 20 20 20 20 2f 2a 20 46 6f 72  m *x;     /* For
bcd0: 20 6c 6f 6f 70 69 6e 67 20 6f 76 65 72 20 74 61   looping over ta
bce0: 62 6c 65 73 20 69 6e 20 74 68 65 20 73 63 68 65  bles in the sche
bcf0: 6d 61 20 2a 2f 0a 20 20 20 20 20 20 48 61 73 68  ma */.      Hash
bd00: 20 2a 70 54 62 6c 73 3b 20 20 20 20 20 2f 2a 20   *pTbls;     /* 
bd10: 53 65 74 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65  Set of all table
bd20: 73 20 69 6e 20 74 68 65 20 73 63 68 65 6d 61 20  s in the schema 
bd30: 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 2a 61 52  */.      int *aR
bd40: 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 41 72 72  oot;      /* Arr
bd50: 61 79 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 20  ay of root page 
bd60: 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 62  numbers of all b
bd70: 74 72 65 65 73 20 2a 2f 0a 20 20 20 20 20 20 69  trees */.      i
bd80: 6e 74 20 63 6e 74 20 3d 20 30 3b 20 20 20 20 20  nt cnt = 0;     
bd90: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
bda0: 72 69 65 73 20 69 6e 20 61 52 6f 6f 74 5b 5d 20  ries in aRoot[] 
bdb0: 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 6d 78 49  */.      int mxI
bdc0: 64 78 20 3d 20 30 3b 20 20 20 2f 2a 20 4d 61 78  dx = 0;   /* Max
bdd0: 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 69  imum number of i
bde0: 6e 64 65 78 65 73 20 66 6f 72 20 61 6e 79 20 74  ndexes for any t
bdf0: 61 62 6c 65 20 2a 2f 0a 0a 20 20 20 20 20 20 69  able */..      i
be00: 66 28 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 26  f( OMIT_TEMPDB &
be10: 26 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75  & i==1 ) continu
be20: 65 3b 0a 20 20 20 20 20 20 69 66 28 20 69 44 62  e;.      if( iDb
be30: 3e 3d 30 20 26 26 20 69 21 3d 69 44 62 20 29 20  >=0 && i!=iDb ) 
be40: 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20 20  continue;..     
be50: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
be60: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
be70: 20 69 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44   i);..      /* D
be80: 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20 63  o an integrity c
be90: 68 65 63 6b 20 6f 66 20 74 68 65 20 42 2d 54 72  heck of the B-Tr
bea0: 65 65 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  ee.      **.    
beb0: 20 20 2a 2a 20 42 65 67 69 6e 20 62 79 20 66 69    ** Begin by fi
bec0: 6e 64 69 6e 67 20 74 68 65 20 72 6f 6f 74 20 70  nding the root p
bed0: 61 67 65 73 20 6e 75 6d 62 65 72 73 0a 20 20 20  ages numbers.   
bee0: 20 20 20 2a 2a 20 66 6f 72 20 61 6c 6c 20 74 61     ** for all ta
bef0: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
bf00: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
bf10: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
bf20: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
bf30: 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
bf40: 64 62 2c 20 69 2c 20 30 29 20 29 3b 0a 20 20 20  db, i, 0) );.   
bf50: 20 20 20 70 54 62 6c 73 20 3d 20 26 64 62 2d 3e     pTbls = &db->
bf60: 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[i].pSchema->
bf70: 74 62 6c 48 61 73 68 3b 0a 20 20 20 20 20 20 66  tblHash;.      f
bf80: 6f 72 28 63 6e 74 3d 30 2c 20 78 3d 73 71 6c 69  or(cnt=0, x=sqli
bf90: 74 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c  teHashFirst(pTbl
bfa0: 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48  s); x; x=sqliteH
bfb0: 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20  ashNext(x)){.   
bfc0: 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62       Table *pTab
bfd0: 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74   = sqliteHashDat
bfe0: 61 28 78 29 3b 20 20 2f 2a 20 43 75 72 72 65 6e  a(x);  /* Curren
bff0: 74 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 20  t table */.     
c000: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20     Index *pIdx; 
c010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c020: 20 20 20 20 20 2f 2a 20 41 6e 20 69 6e 64 65 78       /* An index
c030: 20 6f 6e 20 70 54 61 62 20 2a 2f 0a 20 20 20 20   on pTab */.    
c040: 20 20 20 20 69 6e 74 20 6e 49 64 78 3b 20 20 20      int nIdx;   
c050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c060: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c070: 6f 66 20 69 6e 64 65 78 65 73 20 6f 6e 20 70 54  of indexes on pT
c080: 61 62 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  ab */.        if
c090: 28 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  ( HasRowid(pTab)
c0a0: 20 29 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20   ) cnt++;.      
c0b0: 20 20 66 6f 72 28 6e 49 64 78 3d 30 2c 20 70 49    for(nIdx=0, pI
c0c0: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
c0d0: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
c0e0: 2d 3e 70 4e 65 78 74 2c 20 6e 49 64 78 2b 2b 29  ->pNext, nIdx++)
c0f0: 7b 20 63 6e 74 2b 2b 3b 20 7d 0a 20 20 20 20 20  { cnt++; }.     
c100: 20 20 20 69 66 28 20 6e 49 64 78 3e 6d 78 49 64     if( nIdx>mxId
c110: 78 20 29 20 6d 78 49 64 78 20 3d 20 6e 49 64 78  x ) mxIdx = nIdx
c120: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
c130: 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44  aRoot = sqlite3D
c140: 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c  bMallocRawNN(db,
c150: 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 63 6e   sizeof(int)*(cn
c160: 74 2b 31 29 29 3b 0a 20 20 20 20 20 20 69 66 28  t+1));.      if(
c170: 20 61 52 6f 6f 74 3d 3d 30 20 29 20 62 72 65 61   aRoot==0 ) brea
c180: 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 63 6e 74  k;.      for(cnt
c190: 3d 30 2c 20 78 3d 73 71 6c 69 74 65 48 61 73 68  =0, x=sqliteHash
c1a0: 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 3b  First(pTbls); x;
c1b0: 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   x=sqliteHashNex
c1c0: 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54  t(x)){.        T
c1d0: 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c  able *pTab = sql
c1e0: 69 74 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a  iteHashData(x);.
c1f0: 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70          Index *p
c200: 49 64 78 3b 0a 20 20 20 20 20 20 20 20 69 66 28  Idx;.        if(
c210: 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
c220: 29 20 61 52 6f 6f 74 5b 2b 2b 63 6e 74 5d 20 3d  ) aRoot[++cnt] =
c230: 20 70 54 61 62 2d 3e 74 6e 75 6d 3b 0a 20 20 20   pTab->tnum;.   
c240: 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54       for(pIdx=pT
c250: 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
c260: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
c270: 78 74 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61  xt){.          a
c280: 52 6f 6f 74 5b 2b 2b 63 6e 74 5d 20 3d 20 70 49  Root[++cnt] = pI
c290: 64 78 2d 3e 74 6e 75 6d 3b 0a 20 20 20 20 20 20  dx->tnum;.      
c2a0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
c2b0: 20 20 61 52 6f 6f 74 5b 30 5d 20 3d 20 63 6e 74    aRoot[0] = cnt
c2c0: 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65  ;..      /* Make
c2d0: 20 73 75 72 65 20 73 75 66 66 69 63 69 65 6e 74   sure sufficient
c2e0: 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   number of regis
c2f0: 74 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 61  ters have been a
c300: 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 20 20  llocated */.    
c310: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
c320: 20 4d 41 58 28 20 70 50 61 72 73 65 2d 3e 6e 4d   MAX( pParse->nM
c330: 65 6d 2c 20 38 2b 6d 78 49 64 78 20 29 3b 0a 20  em, 8+mxIdx );. 
c340: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6c 65 61       sqlite3Clea
c350: 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 70 50  rTempRegCache(pP
c360: 61 72 73 65 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  arse);..      /*
c370: 20 44 6f 20 74 68 65 20 62 2d 74 72 65 65 20 69   Do the b-tree i
c380: 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 73 20  ntegrity checks 
c390: 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
c3a0: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
c3b0: 5f 49 6e 74 65 67 72 69 74 79 43 6b 2c 20 32 2c  _IntegrityCk, 2,
c3c0: 20 63 6e 74 2c 20 31 2c 20 28 63 68 61 72 2a 29   cnt, 1, (char*)
c3d0: 61 52 6f 6f 74 2c 50 34 5f 49 4e 54 41 52 52 41  aRoot,P4_INTARRA
c3e0: 59 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  Y);.      sqlite
c3f0: 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c  3VdbeChangeP5(v,
c400: 20 28 75 38 29 69 29 3b 0a 20 20 20 20 20 20 61   (u8)i);.      a
c410: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
c420: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 73  eAddOp1(v, OP_Is
c430: 4e 75 6c 6c 2c 20 32 29 3b 20 56 64 62 65 43 6f  Null, 2); VdbeCo
c440: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
c450: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c460: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
c470: 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20  , 0, 3, 0,.     
c480: 20 20 20 20 73 71 6c 69 74 65 33 4d 50 72 69 6e      sqlite3MPrin
c490: 74 66 28 64 62 2c 20 22 2a 2a 2a 20 69 6e 20 64  tf(db, "*** in d
c4a0: 61 74 61 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e  atabase %s ***\n
c4b0: 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 44  ", db->aDb[i].zD
c4c0: 62 53 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20 20  bSName),.       
c4d0: 20 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20    P4_DYNAMIC);. 
c4e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c4f0: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e  AddOp3(v, OP_Con
c500: 63 61 74 2c 20 32 2c 20 33 2c 20 33 29 3b 0a 20  cat, 2, 3, 3);. 
c510: 20 20 20 20 20 69 6e 74 65 67 72 69 74 79 43 68       integrityCh
c520: 65 63 6b 52 65 73 75 6c 74 52 6f 77 28 76 29 3b  eckResultRow(v);
c530: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c540: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
c550: 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d  dr);..      /* M
c560: 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 74 68 65  ake sure all the
c570: 20 69 6e 64 69 63 65 73 20 61 72 65 20 63 6f 6e   indices are con
c580: 73 74 72 75 63 74 65 64 20 63 6f 72 72 65 63 74  structed correct
c590: 6c 79 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ly..      */.   
c5a0: 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65 48     for(x=sqliteH
c5b0: 61 73 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b  ashFirst(pTbls);
c5c0: 20 78 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68   x; x=sqliteHash
c5d0: 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20  Next(x)){.      
c5e0: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20    Table *pTab = 
c5f0: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 78  sqliteHashData(x
c600: 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78  );.        Index
c610: 20 2a 70 49 64 78 2c 20 2a 70 50 6b 3b 0a 20 20   *pIdx, *pPk;.  
c620: 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50 72        Index *pPr
c630: 69 6f 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ior = 0;.       
c640: 20 69 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 20 20   int loopTop;.  
c650: 20 20 20 20 20 20 69 6e 74 20 69 44 61 74 61 43        int iDataC
c660: 75 72 2c 20 69 49 64 78 43 75 72 3b 0a 20 20 20  ur, iIdxCur;.   
c670: 20 20 20 20 20 69 6e 74 20 72 31 20 3d 20 2d 31       int r1 = -1
c680: 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  ;..        if( p
c690: 54 61 62 2d 3e 74 6e 75 6d 3c 31 20 29 20 63 6f  Tab->tnum<1 ) co
c6a0: 6e 74 69 6e 75 65 3b 20 20 2f 2a 20 53 6b 69 70  ntinue;  /* Skip
c6b0: 20 56 49 45 57 73 20 6f 72 20 56 49 52 54 55 41   VIEWs or VIRTUA
c6c0: 4c 20 54 41 42 4c 45 73 20 2a 2f 0a 20 20 20 20  L TABLEs */.    
c6d0: 20 20 20 20 70 50 6b 20 3d 20 48 61 73 52 6f 77      pPk = HasRow
c6e0: 69 64 28 70 54 61 62 29 20 3f 20 30 20 3a 20 73  id(pTab) ? 0 : s
c6f0: 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
c700: 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20 20 20  Index(pTab);.   
c710: 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 72       sqlite3Expr
c720: 43 61 63 68 65 43 6c 65 61 72 28 70 50 61 72 73  CacheClear(pPars
c730: 65 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  e);.        sqli
c740: 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
c750: 6e 64 69 63 65 73 28 70 50 61 72 73 65 2c 20 70  ndices(pParse, p
c760: 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64  Tab, OP_OpenRead
c770: 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20  , 0,.           
c780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c790: 20 20 20 20 20 20 20 20 31 2c 20 30 2c 20 26 69          1, 0, &i
c7a0: 44 61 74 61 43 75 72 2c 20 26 69 49 64 78 43 75  DataCur, &iIdxCu
c7b0: 72 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 72  r);.        /* r
c7c0: 65 67 5b 37 5d 20 63 6f 75 6e 74 73 20 74 68 65  eg[7] counts the
c7d0: 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   number of entri
c7e0: 65 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  es in the table.
c7f0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 72 65 67 5b  .        ** reg[
c800: 38 2b 69 5d 20 63 6f 75 6e 74 73 20 74 68 65 20  8+i] counts the 
c810: 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  number of entrie
c820: 73 20 69 6e 20 74 68 65 20 69 2d 74 68 20 69 6e  s in the i-th in
c830: 64 65 78 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a  dex .        */.
c840: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c850: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c860: 49 6e 74 65 67 65 72 2c 20 30 2c 20 37 29 3b 0a  Integer, 0, 7);.
c870: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c          for(j=0,
c880: 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64   pIdx=pTab->pInd
c890: 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
c8a0: 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29  Idx->pNext, j++)
c8b0: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
c8c0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c8d0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20   OP_Integer, 0, 
c8e0: 38 2b 6a 29 3b 20 2f 2a 20 69 6e 64 65 78 20 65  8+j); /* index e
c8f0: 6e 74 72 69 65 73 20 63 6f 75 6e 74 65 72 20 2a  ntries counter *
c900: 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  /.        }.    
c910: 20 20 20 20 61 73 73 65 72 74 28 20 70 50 61 72      assert( pPar
c920: 73 65 2d 3e 6e 4d 65 6d 3e 3d 38 2b 6a 20 29 3b  se->nMem>=8+j );
c930: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
c940: 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49   sqlite3NoTempsI
c950: 6e 52 61 6e 67 65 28 70 50 61 72 73 65 2c 31 2c  nRange(pParse,1,
c960: 37 2b 6a 29 20 29 3b 0a 20 20 20 20 20 20 20 20  7+j) );.        
c970: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c980: 32 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20  2(v, OP_Rewind, 
c990: 69 44 61 74 61 43 75 72 2c 20 30 29 3b 20 56 64  iDataCur, 0); Vd
c9a0: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
c9b0: 20 20 20 20 20 20 20 6c 6f 6f 70 54 6f 70 20 3d         loopTop =
c9c0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c9d0: 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  p2(v, OP_AddImm,
c9e0: 20 37 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20   7, 1);.        
c9f0: 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74 20 61  /* Verify that a
ca00: 6c 6c 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6c 75  ll NOT NULL colu
ca10: 6d 6e 73 20 72 65 61 6c 6c 79 20 61 72 65 20 4e  mns really are N
ca20: 4f 54 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 20  OT NULL */.     
ca30: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 54     for(j=0; j<pT
ca40: 61 62 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a  ab->nCol; j++){.
ca50: 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a            char *
ca60: 7a 45 72 72 3b 0a 20 20 20 20 20 20 20 20 20 20  zErr;.          
ca70: 69 6e 74 20 6a 6d 70 32 3b 0a 20 20 20 20 20 20  int jmp2;.      
ca80: 20 20 20 20 69 66 28 20 6a 3d 3d 70 54 61 62 2d      if( j==pTab-
ca90: 3e 69 50 4b 65 79 20 29 20 63 6f 6e 74 69 6e 75  >iPKey ) continu
caa0: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  e;.          if(
cab0: 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 6e   pTab->aCol[j].n
cac0: 6f 74 4e 75 6c 6c 3d 3d 30 20 29 20 63 6f 6e 74  otNull==0 ) cont
cad0: 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  inue;.          
cae0: 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
caf0: 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
cb00: 76 2c 20 70 54 61 62 2c 20 69 44 61 74 61 43 75  v, pTab, iDataCu
cb10: 72 2c 20 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20  r, j, 3);.      
cb20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
cb30: 68 61 6e 67 65 50 35 28 76 2c 20 4f 50 46 4c 41  hangeP5(v, OPFLA
cb40: 47 5f 54 59 50 45 4f 46 41 52 47 29 3b 0a 20 20  G_TYPEOFARG);.  
cb50: 20 20 20 20 20 20 20 20 6a 6d 70 32 20 3d 20 73          jmp2 = s
cb60: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
cb70: 28 76 2c 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 2c 20  (v, OP_NotNull, 
cb80: 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  3); VdbeCoverage
cb90: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7a  (v);.          z
cba0: 45 72 72 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Err = sqlite3MPr
cbb0: 69 6e 74 66 28 64 62 2c 20 22 4e 55 4c 4c 20 76  intf(db, "NULL v
cbc0: 61 6c 75 65 20 69 6e 20 25 73 2e 25 73 22 2c 20  alue in %s.%s", 
cbd0: 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20  pTab->zName,.   
cbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbf0: 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d             pTab-
cc00: 3e 61 43 6f 6c 5b 6a 5d 2e 7a 4e 61 6d 65 29 3b  >aCol[j].zName);
cc10: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
cc20: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
cc30: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
cc40: 2c 20 30 2c 20 7a 45 72 72 2c 20 50 34 5f 44 59  , 0, zErr, P4_DY
cc50: 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20 20 20 20  NAMIC);.        
cc60: 20 20 69 6e 74 65 67 72 69 74 79 43 68 65 63 6b    integrityCheck
cc70: 52 65 73 75 6c 74 52 6f 77 28 76 29 3b 0a 20 20  ResultRow(v);.  
cc80: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
cc90: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a  dbeJumpHere(v, j
cca0: 6d 70 32 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  mp2);.        }.
ccb0: 20 20 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66          /* Verif
ccc0: 79 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  y CHECK constrai
ccd0: 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  nts */.        i
cce0: 66 28 20 70 54 61 62 2d 3e 70 43 68 65 63 6b 20  f( pTab->pCheck 
ccf0: 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  && (db->flags & 
cd00: 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65  SQLITE_IgnoreChe
cd10: 63 6b 73 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  cks)==0 ){.     
cd20: 20 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70       ExprList *p
cd30: 43 68 65 63 6b 20 3d 20 73 71 6c 69 74 65 33 45  Check = sqlite3E
cd40: 78 70 72 4c 69 73 74 44 75 70 28 64 62 2c 20 70  xprListDup(db, p
cd50: 54 61 62 2d 3e 70 43 68 65 63 6b 2c 20 30 29 3b  Tab->pCheck, 0);
cd60: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 64  .          if( d
cd70: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3d  b->mallocFailed=
cd80: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
cd90: 20 20 69 6e 74 20 61 64 64 72 43 6b 46 61 75 6c    int addrCkFaul
cda0: 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  t = sqlite3VdbeM
cdb0: 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20  akeLabel(v);.   
cdc0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 64 64           int add
cdd0: 72 43 6b 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56  rCkOk = sqlite3V
cde0: 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b  dbeMakeLabel(v);
cdf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61  .            cha
ce00: 72 20 2a 7a 45 72 72 3b 0a 20 20 20 20 20 20 20  r *zErr;.       
ce10: 20 20 20 20 20 69 6e 74 20 6b 3b 0a 20 20 20 20       int k;.    
ce20: 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e          pParse->
ce30: 69 53 65 6c 66 54 61 62 20 3d 20 69 44 61 74 61  iSelfTab = iData
ce40: 43 75 72 20 2b 20 31 3b 0a 20 20 20 20 20 20 20  Cur + 1;.       
ce50: 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 72       sqlite3Expr
ce60: 43 61 63 68 65 50 75 73 68 28 70 50 61 72 73 65  CachePush(pParse
ce70: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  );.            f
ce80: 6f 72 28 6b 3d 70 43 68 65 63 6b 2d 3e 6e 45 78  or(k=pCheck->nEx
ce90: 70 72 2d 31 3b 20 6b 3e 30 3b 20 6b 2d 2d 29 7b  pr-1; k>0; k--){
cea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
ceb0: 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
cec0: 65 28 70 50 61 72 73 65 2c 20 70 43 68 65 63 6b  e(pParse, pCheck
ced0: 2d 3e 61 5b 6b 5d 2e 70 45 78 70 72 2c 20 61 64  ->a[k].pExpr, ad
cee0: 64 72 43 6b 46 61 75 6c 74 2c 20 30 29 3b 0a 20  drCkFault, 0);. 
cef0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
cf00: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
cf10: 45 78 70 72 49 66 54 72 75 65 28 70 50 61 72 73  ExprIfTrue(pPars
cf20: 65 2c 20 70 43 68 65 63 6b 2d 3e 61 5b 30 5d 2e  e, pCheck->a[0].
cf30: 70 45 78 70 72 2c 20 61 64 64 72 43 6b 4f 6b 2c  pExpr, addrCkOk,
cf40: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
cf50: 20 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e    SQLITE_JUMPIFN
cf60: 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ULL);.          
cf70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 73    sqlite3VdbeRes
cf80: 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20 61 64 64  olveLabel(v, add
cf90: 72 43 6b 46 61 75 6c 74 29 3b 0a 20 20 20 20 20  rCkFault);.     
cfa0: 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 69         pParse->i
cfb0: 53 65 6c 66 54 61 62 20 3d 20 30 3b 0a 20 20 20  SelfTab = 0;.   
cfc0: 20 20 20 20 20 20 20 20 20 7a 45 72 72 20 3d 20           zErr = 
cfd0: 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
cfe0: 62 2c 20 22 43 48 45 43 4b 20 63 6f 6e 73 74 72  b, "CHECK constr
cff0: 61 69 6e 74 20 66 61 69 6c 65 64 20 69 6e 20 25  aint failed in %
d000: 73 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  s",.            
d010: 20 20 20 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29      pTab->zName)
d020: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
d030: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
d040: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
d050: 2c 20 33 2c 20 30 2c 20 7a 45 72 72 2c 20 50 34  , 3, 0, zErr, P4
d060: 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20  _DYNAMIC);.     
d070: 20 20 20 20 20 20 20 69 6e 74 65 67 72 69 74 79         integrity
d080: 43 68 65 63 6b 52 65 73 75 6c 74 52 6f 77 28 76  CheckResultRow(v
d090: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
d0a0: 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c 76  qlite3VdbeResolv
d0b0: 65 4c 61 62 65 6c 28 76 2c 20 61 64 64 72 43 6b  eLabel(v, addrCk
d0c0: 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  Ok);.           
d0d0: 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
d0e0: 65 50 6f 70 28 70 50 61 72 73 65 29 3b 0a 20 20  ePop(pParse);.  
d0f0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
d100: 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 72 4c      sqlite3ExprL
d110: 69 73 74 44 65 6c 65 74 65 28 64 62 2c 20 70 43  istDelete(db, pC
d120: 68 65 63 6b 29 3b 0a 20 20 20 20 20 20 20 20 7d  heck);.        }
d130: 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73  .        if( !is
d140: 51 75 69 63 6b 20 29 7b 20 2f 2a 20 4f 6d 69 74  Quick ){ /* Omit
d150: 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 74   the remaining t
d160: 65 73 74 73 20 66 6f 72 20 71 75 69 63 6b 5f 63  ests for quick_c
d170: 68 65 63 6b 20 2a 2f 0a 20 20 20 20 20 20 20 20  heck */.        
d180: 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63    /* Sanity chec
d190: 6b 20 6f 6e 20 72 65 63 6f 72 64 20 68 65 61 64  k on record head
d1a0: 65 72 20 64 65 63 6f 64 69 6e 67 20 2a 2f 0a 20  er decoding */. 
d1b0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d1c0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
d1d0: 5f 43 6f 6c 75 6d 6e 2c 20 69 44 61 74 61 43 75  _Column, iDataCu
d1e0: 72 2c 20 70 54 61 62 2d 3e 6e 43 6f 6c 2d 31 2c  r, pTab->nCol-1,
d1f0: 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   3);.          s
d200: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
d210: 50 35 28 76 2c 20 4f 50 46 4c 41 47 5f 54 59 50  P5(v, OPFLAG_TYP
d220: 45 4f 46 41 52 47 29 3b 0a 20 20 20 20 20 20 20  EOFARG);.       
d230: 20 20 20 2f 2a 20 56 61 6c 69 64 61 74 65 20 69     /* Validate i
d240: 6e 64 65 78 20 65 6e 74 72 69 65 73 20 66 6f 72  ndex entries for
d250: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
d260: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 66 6f   */.          fo
d270: 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62  r(j=0, pIdx=pTab
d280: 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20  ->pIndex; pIdx; 
d290: 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
d2a0: 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  , j++){.        
d2b0: 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d      int jmp2, jm
d2c0: 70 33 2c 20 6a 6d 70 34 2c 20 6a 6d 70 35 3b 0a  p3, jmp4, jmp5;.
d2d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
d2e0: 63 6b 55 6e 69 71 20 3d 20 73 71 6c 69 74 65 33  ckUniq = sqlite3
d2f0: 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29  VdbeMakeLabel(v)
d300: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ;.            if
d310: 28 20 70 50 6b 3d 3d 70 49 64 78 20 29 20 63 6f  ( pPk==pIdx ) co
d320: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
d330: 20 20 20 20 72 31 20 3d 20 73 71 6c 69 74 65 33      r1 = sqlite3
d340: 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79  GenerateIndexKey
d350: 28 70 50 61 72 73 65 2c 20 70 49 64 78 2c 20 69  (pParse, pIdx, i
d360: 44 61 74 61 43 75 72 2c 20 30 2c 20 30 2c 20 26  DataCur, 0, 0, &
d370: 6a 6d 70 33 2c 0a 20 20 20 20 20 20 20 20 20 20  jmp3,.          
d380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
d3a0: 50 72 69 6f 72 2c 20 72 31 29 3b 0a 20 20 20 20  Prior, r1);.    
d3b0: 20 20 20 20 20 20 20 20 70 50 72 69 6f 72 20 3d          pPrior =
d3c0: 20 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20 20   pIdx;.         
d3d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d3e0: 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
d3f0: 6d 2c 20 38 2b 6a 2c 20 31 29 3b 2f 2a 20 69 6e  m, 8+j, 1);/* in
d400: 63 72 65 6d 65 6e 74 20 65 6e 74 72 79 20 63 6f  crement entry co
d410: 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  unt */.         
d420: 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61     /* Verify tha
d430: 74 20 61 6e 20 69 6e 64 65 78 20 65 6e 74 72 79  t an index entry
d440: 20 65 78 69 73 74 73 20 66 6f 72 20 74 68 65 20   exists for the 
d450: 63 75 72 72 65 6e 74 20 74 61 62 6c 65 20 72 6f  current table ro
d460: 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  w */.           
d470: 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33 56   jmp2 = sqlite3V
d480: 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20  dbeAddOp4Int(v, 
d490: 4f 50 5f 46 6f 75 6e 64 2c 20 69 49 64 78 43 75  OP_Found, iIdxCu
d4a0: 72 2b 6a 2c 20 63 6b 55 6e 69 71 2c 20 72 31 2c  r+j, ckUniq, r1,
d4b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4d0: 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 6e           pIdx->n
d4e0: 43 6f 6c 75 6d 6e 29 3b 20 56 64 62 65 43 6f 76  Column); VdbeCov
d4f0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
d500: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d510: 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 33  eLoadString(v, 3
d520: 2c 20 22 72 6f 77 20 22 29 3b 0a 20 20 20 20 20  , "row ");.     
d530: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d540: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43  beAddOp3(v, OP_C
d550: 6f 6e 63 61 74 2c 20 37 2c 20 33 2c 20 33 29 3b  oncat, 7, 3, 3);
d560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
d570: 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69  ite3VdbeLoadStri
d580: 6e 67 28 76 2c 20 34 2c 20 22 20 6d 69 73 73 69  ng(v, 4, " missi
d590: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 22 29  ng from index ")
d5a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
d5b0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
d5c0: 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c  v, OP_Concat, 4,
d5d0: 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20   3, 3);.        
d5e0: 20 20 20 20 6a 6d 70 35 20 3d 20 73 71 6c 69 74      jmp5 = sqlit
d5f0: 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67  e3VdbeLoadString
d600: 28 76 2c 20 34 2c 20 70 49 64 78 2d 3e 7a 4e 61  (v, 4, pIdx->zNa
d610: 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  me);.           
d620: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d630: 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
d640: 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20   4, 3, 3);.     
d650: 20 20 20 20 20 20 20 6a 6d 70 34 20 3d 20 69 6e         jmp4 = in
d660: 74 65 67 72 69 74 79 43 68 65 63 6b 52 65 73 75  tegrityCheckResu
d670: 6c 74 52 6f 77 28 76 29 3b 0a 20 20 20 20 20 20  ltRow(v);.      
d680: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d690: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70  eJumpHere(v, jmp
d6a0: 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  2);.            
d6b0: 2f 2a 20 46 6f 72 20 55 4e 49 51 55 45 20 69 6e  /* For UNIQUE in
d6c0: 64 65 78 65 73 2c 20 76 65 72 69 66 79 20 74 68  dexes, verify th
d6d0: 61 74 20 6f 6e 6c 79 20 6f 6e 65 20 65 6e 74 72  at only one entr
d6e0: 79 20 65 78 69 73 74 73 20 77 69 74 68 20 74 68  y exists with th
d6f0: 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a  e.            **
d700: 20 63 75 72 72 65 6e 74 20 6b 65 79 2e 20 20 54   current key.  T
d710: 68 65 20 65 6e 74 72 79 20 69 73 20 75 6e 69 71  he entry is uniq
d720: 75 65 20 69 66 20 28 31 29 20 61 6e 79 20 63 6f  ue if (1) any co
d730: 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 0a 20 20 20  lumn is NULL.   
d740: 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 72 20 28           ** or (
d750: 32 29 20 74 68 65 20 6e 65 78 74 20 65 6e 74 72  2) the next entr
d760: 79 20 68 61 73 20 61 20 64 69 66 66 65 72 65 6e  y has a differen
d770: 74 20 6b 65 79 20 2a 2f 0a 20 20 20 20 20 20 20  t key */.       
d780: 20 20 20 20 20 69 66 28 20 49 73 55 6e 69 71 75       if( IsUniqu
d790: 65 49 6e 64 65 78 28 70 49 64 78 29 20 29 7b 0a  eIndex(pIdx) ){.
d7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
d7b0: 74 20 75 6e 69 71 4f 6b 20 3d 20 73 71 6c 69 74  t uniqOk = sqlit
d7c0: 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28  e3VdbeMakeLabel(
d7d0: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v);.            
d7e0: 20 20 69 6e 74 20 6a 6d 70 36 3b 0a 20 20 20 20    int jmp6;.    
d7f0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6b 6b            int kk
d800: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
d810: 66 6f 72 28 6b 6b 3d 30 3b 20 6b 6b 3c 70 49 64  for(kk=0; kk<pId
d820: 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 6b 6b 2b 2b  x->nKeyCol; kk++
d830: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ){.             
d840: 20 20 20 69 6e 74 20 69 43 6f 6c 20 3d 20 70 49     int iCol = pI
d850: 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 6b 5d  dx->aiColumn[kk]
d860: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
d870: 20 20 61 73 73 65 72 74 28 20 69 43 6f 6c 21 3d    assert( iCol!=
d880: 58 4e 5f 52 4f 57 49 44 20 26 26 20 69 43 6f 6c  XN_ROWID && iCol
d890: 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20  <pTab->nCol );. 
d8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
d8b0: 66 28 20 69 43 6f 6c 3e 3d 30 20 26 26 20 70 54  f( iCol>=0 && pT
d8c0: 61 62 2d 3e 61 43 6f 6c 5b 69 43 6f 6c 5d 2e 6e  ab->aCol[iCol].n
d8d0: 6f 74 4e 75 6c 6c 20 29 20 63 6f 6e 74 69 6e 75  otNull ) continu
d8e0: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e;.             
d8f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d900: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c  dOp2(v, OP_IsNul
d910: 6c 2c 20 72 31 2b 6b 6b 2c 20 75 6e 69 71 4f 6b  l, r1+kk, uniqOk
d920: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
d930: 20 20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28     VdbeCoverage(
d940: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v);.            
d950: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
d960: 20 20 6a 6d 70 36 20 3d 20 73 71 6c 69 74 65 33    jmp6 = sqlite3
d970: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
d980: 5f 4e 65 78 74 2c 20 69 49 64 78 43 75 72 2b 6a  _Next, iIdxCur+j
d990: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
d9a0: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v);.            
d9b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 47 6f 74    sqlite3VdbeGot
d9c0: 6f 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20  o(v, uniqOk);.  
d9d0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
d9e0: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
d9f0: 76 2c 20 6a 6d 70 36 29 3b 0a 20 20 20 20 20 20  v, jmp6);.      
da00: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
da10: 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20  dbeAddOp4Int(v, 
da20: 4f 50 5f 49 64 78 47 54 2c 20 69 49 64 78 43 75  OP_IdxGT, iIdxCu
da30: 72 2b 6a 2c 20 75 6e 69 71 4f 6b 2c 20 72 31 2c  r+j, uniqOk, r1,
da40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
da50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da60: 20 20 20 20 70 49 64 78 2d 3e 6e 4b 65 79 43 6f      pIdx->nKeyCo
da70: 6c 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  l); VdbeCoverage
da80: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (v);.           
da90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f     sqlite3VdbeLo
daa0: 61 64 53 74 72 69 6e 67 28 76 2c 20 33 2c 20 22  adString(v, 3, "
dab0: 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72 79  non-unique entry
dac0: 20 69 6e 20 69 6e 64 65 78 20 22 29 3b 0a 20 20   in index ");.  
dad0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
dae0: 74 65 33 56 64 62 65 47 6f 74 6f 28 76 2c 20 6a  te3VdbeGoto(v, j
daf0: 6d 70 35 29 3b 0a 20 20 20 20 20 20 20 20 20 20  mp5);.          
db00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52      sqlite3VdbeR
db10: 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20 75  esolveLabel(v, u
db20: 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20  niqOk);.        
db30: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
db40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
db50: 70 48 65 72 65 28 76 2c 20 6a 6d 70 34 29 3b 0a  pHere(v, jmp4);.
db60: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
db70: 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64  te3ResolvePartId
db80: 78 4c 61 62 65 6c 28 70 50 61 72 73 65 2c 20 6a  xLabel(pParse, j
db90: 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  mp3);.          
dba0: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
dbb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
dbc0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74  ddOp2(v, OP_Next
dbd0: 2c 20 69 44 61 74 61 43 75 72 2c 20 6c 6f 6f 70  , iDataCur, loop
dbe0: 54 6f 70 29 3b 20 56 64 62 65 43 6f 76 65 72 61  Top); VdbeCovera
dbf0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 73  ge(v);.        s
dc00: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
dc10: 72 65 28 76 2c 20 6c 6f 6f 70 54 6f 70 2d 31 29  re(v, loopTop-1)
dc20: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
dc30: 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54  _OMIT_BTREECOUNT
dc40: 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73  .        if( !is
dc50: 51 75 69 63 6b 20 29 7b 0a 20 20 20 20 20 20 20  Quick ){.       
dc60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f     sqlite3VdbeLo
dc70: 61 64 53 74 72 69 6e 67 28 76 2c 20 32 2c 20 22  adString(v, 2, "
dc80: 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
dc90: 65 73 20 69 6e 20 69 6e 64 65 78 20 22 29 3b 0a  es in index ");.
dca0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d            for(j=
dcb0: 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  0, pIdx=pTab->pI
dcc0: 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78  ndex; pIdx; pIdx
dcd0: 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b  =pIdx->pNext, j+
dce0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
dcf0: 69 66 28 20 70 50 6b 3d 3d 70 49 64 78 20 29 20  if( pPk==pIdx ) 
dd00: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
dd10: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
dd20: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 43 6f  eAddOp2(v, OP_Co
dd30: 75 6e 74 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20  unt, iIdxCur+j, 
dd40: 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  3);.            
dd50: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
dd60: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 45  beAddOp3(v, OP_E
dd70: 71 2c 20 38 2b 6a 2c 20 30 2c 20 33 29 3b 20 56  q, 8+j, 0, 3); V
dd80: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
dda0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 35 28  te3VdbeChangeP5(
ddb0: 76 2c 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  v, SQLITE_NOTNUL
ddc0: 4c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  L);.            
ddd0: 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53  sqlite3VdbeLoadS
dde0: 74 72 69 6e 67 28 76 2c 20 34 2c 20 70 49 64 78  tring(v, 4, pIdx
ddf0: 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ->zName);.      
de00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
de10: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f  eAddOp3(v, OP_Co
de20: 6e 63 61 74 2c 20 34 2c 20 32 2c 20 33 29 3b 0a  ncat, 4, 2, 3);.
de30: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 65              inte
de40: 67 72 69 74 79 43 68 65 63 6b 52 65 73 75 6c 74  grityCheckResult
de50: 52 6f 77 28 76 29 3b 0a 20 20 20 20 20 20 20 20  Row(v);.        
de60: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
de70: 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29  umpHere(v, addr)
de80: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
de90: 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f        }.#endif /
dea0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  * SQLITE_OMIT_BT
deb0: 52 45 45 43 4f 55 4e 54 20 2a 2f 0a 20 20 20 20  REECOUNT */.    
dec0: 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20 7b    } .    }.    {
ded0: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
dee0: 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44  nst int iLn = VD
def0: 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f  BE_OFFSET_LINENO
df00: 28 32 29 3b 0a 20 20 20 20 20 20 73 74 61 74 69  (2);.      stati
df10: 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
df20: 73 74 20 65 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b  st endCode[] = {
df30: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 41 64  .        { OP_Ad
df40: 64 49 6d 6d 2c 20 20 20 20 20 20 31 2c 20 30 2c  dImm,      1, 0,
df50: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
df60: 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b  * 0 */.        {
df70: 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 2c 20 20   OP_IfNotZero,  
df80: 20 31 2c 20 34 2c 20 20 20 20 20 20 20 20 30 7d   1, 4,        0}
df90: 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20  ,    /* 1 */.   
dfa0: 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67       { OP_String
dfb0: 38 2c 20 20 20 20 20 30 2c 20 33 2c 20 20 20 20  8,     0, 3,    
dfc0: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 32 20      0},    /* 2 
dfd0: 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  */.        { OP_
dfe0: 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20  ResultRow,   3, 
dff0: 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20  1,        0},   
e000: 20 2f 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20 20   /* 3 */.       
e010: 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20 20   { OP_Halt,     
e020: 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20     0, 0,        
e030: 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20  0},    /* 4 */. 
e040: 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69         { OP_Stri
e050: 6e 67 38 2c 20 20 20 20 20 30 2c 20 33 2c 20 20  ng8,     0, 3,  
e060: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
e070: 35 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f  5 */.        { O
e080: 50 5f 47 6f 74 6f 2c 20 20 20 20 20 20 20 20 30  P_Goto,        0
e090: 2c 20 33 2c 20 20 20 20 20 20 20 20 30 7d 2c 20  , 3,        0}, 
e0a0: 20 20 20 2f 2a 20 36 20 2a 2f 0a 20 20 20 20 20     /* 6 */.     
e0b0: 20 7d 3b 0a 20 20 20 20 20 20 56 64 62 65 4f 70   };.      VdbeOp
e0c0: 20 2a 61 4f 70 3b 0a 0a 20 20 20 20 20 20 61 4f   *aOp;..      aO
e0d0: 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  p = sqlite3VdbeA
e0e0: 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
e0f0: 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c 20  ySize(endCode), 
e100: 65 6e 64 43 6f 64 65 2c 20 69 4c 6e 29 3b 0a 20  endCode, iLn);. 
e110: 20 20 20 20 20 69 66 28 20 61 4f 70 20 29 7b 0a       if( aOp ){.
e120: 20 20 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70          aOp[0].p
e130: 32 20 3d 20 31 2d 6d 78 45 72 72 3b 0a 20 20 20  2 = 1-mxErr;.   
e140: 20 20 20 20 20 61 4f 70 5b 32 5d 2e 70 34 74 79       aOp[2].p4ty
e150: 70 65 20 3d 20 50 34 5f 53 54 41 54 49 43 3b 0a  pe = P4_STATIC;.
e160: 20 20 20 20 20 20 20 20 61 4f 70 5b 32 5d 2e 70          aOp[2].p
e170: 34 2e 7a 20 3d 20 22 6f 6b 22 3b 0a 20 20 20 20  4.z = "ok";.    
e180: 20 20 20 20 61 4f 70 5b 35 5d 2e 70 34 74 79 70      aOp[5].p4typ
e190: 65 20 3d 20 50 34 5f 53 54 41 54 49 43 3b 0a 20  e = P4_STATIC;. 
e1a0: 20 20 20 20 20 20 20 61 4f 70 5b 35 5d 2e 70 34         aOp[5].p4
e1b0: 2e 7a 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69  .z = (char*)sqli
e1c0: 74 65 33 45 72 72 53 74 72 28 53 51 4c 49 54 45  te3ErrStr(SQLITE
e1d0: 5f 43 4f 52 52 55 50 54 29 3b 0a 20 20 20 20 20  _CORRUPT);.     
e1e0: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
e1f0: 56 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20  VdbeChangeP3(v, 
e200: 30 2c 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  0, sqlite3VdbeCu
e210: 72 72 65 6e 74 41 64 64 72 28 76 29 2d 32 29 3b  rrentAddr(v)-2);
e220: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
e230: 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ak;.#endif /* SQ
e240: 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
e250: 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 23 69  ITY_CHECK */..#i
e260: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
e270: 54 5f 55 54 46 31 36 0a 20 20 2f 2a 0a 20 20 2a  T_UTF16.  /*.  *
e280: 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64  *   PRAGMA encod
e290: 69 6e 67 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ing.  **   PRAGM
e2a0: 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 22 75 74  A encoding = "ut
e2b0: 66 2d 38 22 7c 22 75 74 66 2d 31 36 22 7c 22 75  f-8"|"utf-16"|"u
e2c0: 74 66 2d 31 36 6c 65 22 7c 22 75 74 66 2d 31 36  tf-16le"|"utf-16
e2d0: 62 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e  be".  **.  ** In
e2e0: 20 69 74 73 20 66 69 72 73 74 20 66 6f 72 6d 2c   its first form,
e2f0: 20 74 68 69 73 20 70 72 61 67 6d 61 20 72 65 74   this pragma ret
e300: 75 72 6e 73 20 74 68 65 20 65 6e 63 6f 64 69 6e  urns the encodin
e310: 67 20 6f 66 20 74 68 65 20 6d 61 69 6e 0a 20 20  g of the main.  
e320: 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 49 66 20  ** database. If 
e330: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
e340: 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c  not initialized,
e350: 20 69 74 20 69 73 20 69 6e 69 74 69 61 6c 69 7a   it is initializ
e360: 65 64 20 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a  ed now..  **.  *
e370: 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  * The second for
e380: 6d 20 6f 66 20 74 68 69 73 20 70 72 61 67 6d 61  m of this pragma
e390: 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74   is a no-op if t
e3a0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
e3b0: 20 66 69 6c 65 0a 20 20 2a 2a 20 68 61 73 20 6e   file.  ** has n
e3c0: 6f 74 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  ot already been 
e3d0: 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 6e 20  initialized. In 
e3e0: 74 68 69 73 20 63 61 73 65 20 69 74 20 73 65 74  this case it set
e3f0: 73 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20  s the default.  
e400: 2a 2a 20 65 6e 63 6f 64 69 6e 67 20 74 68 61 74  ** encoding that
e410: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f   will be used fo
e420: 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
e430: 61 73 65 20 66 69 6c 65 20 69 66 20 61 20 6e 65  ase file if a ne
e440: 77 20 66 69 6c 65 0a 20 20 2a 2a 20 69 73 20 63  w file.  ** is c
e450: 72 65 61 74 65 64 2e 20 49 66 20 61 6e 20 65 78  reated. If an ex
e460: 69 73 74 69 6e 67 20 6d 61 69 6e 20 64 61 74 61  isting main data
e470: 62 61 73 65 20 66 69 6c 65 20 69 73 20 6f 70 65  base file is ope
e480: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 20 20  ned, then the.  
e490: 2a 2a 20 64 65 66 61 75 6c 74 20 74 65 78 74 20  ** default text 
e4a0: 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20 74 68 65  encoding for the
e4b0: 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61   existing databa
e4c0: 73 65 20 69 73 20 75 73 65 64 2e 0a 20 20 2a 2a  se is used..  **
e4d0: 20 0a 20 20 2a 2a 20 49 6e 20 61 6c 6c 20 63 61   .  ** In all ca
e4e0: 73 65 73 20 6e 65 77 20 64 61 74 61 62 61 73 65  ses new database
e4f0: 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  s created using 
e500: 74 68 65 20 41 54 54 41 43 48 20 63 6f 6d 6d 61  the ATTACH comma
e510: 6e 64 20 61 72 65 0a 20 20 2a 2a 20 63 72 65 61  nd are.  ** crea
e520: 74 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 73  ted to use the s
e530: 61 6d 65 20 64 65 66 61 75 6c 74 20 74 65 78 74  ame default text
e540: 20 65 6e 63 6f 64 69 6e 67 20 61 73 20 74 68 65   encoding as the
e550: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20   main database. 
e560: 49 66 0a 20 20 2a 2a 20 74 68 65 20 6d 61 69 6e  If.  ** the main
e570: 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f   database has no
e580: 74 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  t been initializ
e590: 65 64 20 61 6e 64 2f 6f 72 20 63 72 65 61 74 65  ed and/or create
e5a0: 64 20 77 68 65 6e 20 41 54 54 41 43 48 0a 20 20  d when ATTACH.  
e5b0: 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64 2c 20  ** is executed, 
e5c0: 74 68 69 73 20 69 73 20 64 6f 6e 65 20 62 65 66  this is done bef
e5d0: 6f 72 65 20 74 68 65 20 41 54 54 41 43 48 20 6f  ore the ATTACH o
e5e0: 70 65 72 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20  peration..  **. 
e5f0: 20 2a 2a 20 49 6e 20 74 68 65 20 73 65 63 6f 6e   ** In the secon
e600: 64 20 66 6f 72 6d 20 74 68 69 73 20 70 72 61 67  d form this prag
e610: 6d 61 20 73 65 74 73 20 74 68 65 20 74 65 78 74  ma sets the text
e620: 20 65 6e 63 6f 64 69 6e 67 20 74 6f 20 62 65 20   encoding to be 
e630: 75 73 65 64 20 69 6e 0a 20 20 2a 2a 20 6e 65 77  used in.  ** new
e640: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
e650: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68  created using th
e660: 69 73 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  is database hand
e670: 6c 65 2e 20 49 74 20 69 73 20 6f 6e 6c 79 0a 20  le. It is only. 
e680: 20 2a 2a 20 75 73 65 66 75 6c 20 69 66 20 69 6e   ** useful if in
e690: 76 6f 6b 65 64 20 69 6d 6d 65 64 69 61 74 65 6c  voked immediatel
e6a0: 79 20 61 66 74 65 72 20 74 68 65 20 6d 61 69 6e  y after the main
e6b0: 20 64 61 74 61 62 61 73 65 20 69 0a 20 20 2a 2f   database i.  */
e6c0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
e6d0: 45 4e 43 4f 44 49 4e 47 3a 20 7b 0a 20 20 20 20  ENCODING: {.    
e6e0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72  static const str
e6f0: 75 63 74 20 45 6e 63 4e 61 6d 65 20 7b 0a 20 20  uct EncName {.  
e700: 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
e710: 0a 20 20 20 20 20 20 75 38 20 65 6e 63 3b 0a 20  .      u8 enc;. 
e720: 20 20 20 7d 20 65 6e 63 6e 61 6d 65 73 5b 5d 20     } encnames[] 
e730: 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 55 54 46  = {.      { "UTF
e740: 38 22 2c 20 20 20 20 20 53 51 4c 49 54 45 5f 55  8",     SQLITE_U
e750: 54 46 38 20 20 20 20 20 20 20 20 7d 2c 0a 20 20  TF8        },.  
e760: 20 20 20 20 7b 20 22 55 54 46 2d 38 22 2c 20 20      { "UTF-8",  
e770: 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20    SQLITE_UTF8   
e780: 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74       },  /* Must
e790: 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 31 5d 20   be element [1] 
e7a0: 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d  */.      { "UTF-
e7b0: 31 36 6c 65 22 2c 20 53 51 4c 49 54 45 5f 55 54  16le", SQLITE_UT
e7c0: 46 31 36 4c 45 20 20 20 20 20 7d 2c 20 20 2f 2a  F16LE     },  /*
e7d0: 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74   Must be element
e7e0: 20 5b 32 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20   [2] */.      { 
e7f0: 22 55 54 46 2d 31 36 62 65 22 2c 20 53 51 4c 49  "UTF-16be", SQLI
e800: 54 45 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d  TE_UTF16BE     }
e810: 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c  ,  /* Must be el
e820: 65 6d 65 6e 74 20 5b 33 5d 20 2a 2f 0a 20 20 20  ement [3] */.   
e830: 20 20 20 7b 20 22 55 54 46 31 36 6c 65 22 2c 20     { "UTF16le", 
e840: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20   SQLITE_UTF16LE 
e850: 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
e860: 55 54 46 31 36 62 65 22 2c 20 20 53 51 4c 49 54  UTF16be",  SQLIT
e870: 45 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c  E_UTF16BE     },
e880: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36  .      { "UTF-16
e890: 22 2c 20 20 20 30 20 20 20 20 20 20 20 20 20 20  ",   0          
e8a0: 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51          }, /* SQ
e8b0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
e8c0: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46   */.      { "UTF
e8d0: 31 36 22 2c 20 20 20 20 30 20 20 20 20 20 20 20  16",    0       
e8e0: 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a             }, /*
e8f0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
e900: 49 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 30  IVE */.      { 0
e910: 2c 20 30 20 7d 0a 20 20 20 20 7d 3b 0a 20 20 20  , 0 }.    };.   
e920: 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e   const struct En
e930: 63 4e 61 6d 65 20 2a 70 45 6e 63 3b 0a 20 20 20  cName *pEnc;.   
e940: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 20   if( !zRight ){ 
e950: 20 20 20 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e     /* "PRAGMA en
e960: 63 6f 64 69 6e 67 22 20 2a 2f 0a 20 20 20 20 20  coding" */.     
e970: 20 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64   if( sqlite3Read
e980: 53 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29  Schema(pParse) )
e990: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
e9a0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
e9b0: 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f  encnames[SQLITE_
e9c0: 55 54 46 38 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54  UTF8].enc==SQLIT
e9d0: 45 5f 55 54 46 38 20 29 3b 0a 20 20 20 20 20 20  E_UTF8 );.      
e9e0: 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73  assert( encnames
e9f0: 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 5d  [SQLITE_UTF16LE]
ea00: 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  .enc==SQLITE_UTF
ea10: 31 36 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73  16LE );.      as
ea20: 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53  sert( encnames[S
ea30: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 5d 2e 65  QLITE_UTF16BE].e
ea40: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
ea50: 42 45 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75  BE );.      retu
ea60: 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20  rnSingleText(v, 
ea70: 65 6e 63 6e 61 6d 65 73 5b 45 4e 43 28 70 50 61  encnames[ENC(pPa
ea80: 72 73 65 2d 3e 64 62 29 5d 2e 7a 4e 61 6d 65 29  rse->db)].zName)
ea90: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 20 20 20 20  ;.    }else{    
eaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eab0: 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41 20 65      /* "PRAGMA e
eac0: 6e 63 6f 64 69 6e 67 20 3d 20 58 58 58 22 20 2a  ncoding = XXX" *
ead0: 2f 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20  /.      /* Only 
eae0: 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c 75 65  change the value
eaf0: 20 6f 66 20 73 71 6c 69 74 65 2e 65 6e 63 20 69   of sqlite.enc i
eb00: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  f the database h
eb10: 61 6e 64 6c 65 20 69 73 20 6e 6f 74 0a 20 20 20  andle is not.   
eb20: 20 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65     ** initialize
eb30: 64 2e 20 49 66 20 74 68 65 20 6d 61 69 6e 20 64  d. If the main d
eb40: 61 74 61 62 61 73 65 20 65 78 69 73 74 73 2c 20  atabase exists, 
eb50: 74 68 65 20 6e 65 77 20 73 71 6c 69 74 65 2e 65  the new sqlite.e
eb60: 6e 63 20 76 61 6c 75 65 0a 20 20 20 20 20 20 2a  nc value.      *
eb70: 2a 20 77 69 6c 6c 20 62 65 20 6f 76 65 72 77 72  * will be overwr
eb80: 69 74 74 65 6e 20 77 68 65 6e 20 74 68 65 20 73  itten when the s
eb90: 63 68 65 6d 61 20 69 73 20 6e 65 78 74 20 6c 6f  chema is next lo
eba0: 61 64 65 64 2e 20 49 66 20 69 74 20 64 6f 65 73  aded. If it does
ebb0: 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61 6c   not.      ** al
ebc0: 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 69 74  ready exists, it
ebd0: 20 77 69 6c 6c 20 62 65 20 63 72 65 61 74 65 64   will be created
ebe0: 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65 77 20   to use the new 
ebf0: 65 6e 63 6f 64 69 6e 67 20 76 61 6c 75 65 2e 0a  encoding value..
ec00: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
ec10: 66 28 20 0a 20 20 20 20 20 20 20 20 21 28 44 62  f( .        !(Db
ec20: 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
ec30: 30 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  0, DB_SchemaLoad
ec40: 65 64 29 29 20 7c 7c 20 0a 20 20 20 20 20 20 20  ed)) || .       
ec50: 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64   DbHasProperty(d
ec60: 62 2c 20 30 2c 20 44 42 5f 45 6d 70 74 79 29 20  b, 0, DB_Empty) 
ec70: 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20  .      ){.      
ec80: 20 20 66 6f 72 28 70 45 6e 63 3d 26 65 6e 63 6e    for(pEnc=&encn
ec90: 61 6d 65 73 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a  ames[0]; pEnc->z
eca0: 4e 61 6d 65 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20  Name; pEnc++){. 
ecb0: 20 20 20 20 20 20 20 20 20 69 66 28 20 30 3d 3d           if( 0==
ecc0: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
ecd0: 52 69 67 68 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61  Right, pEnc->zNa
ece0: 6d 65 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  me) ){.         
ecf0: 20 20 20 53 43 48 45 4d 41 5f 45 4e 43 28 64 62     SCHEMA_ENC(db
ed00: 29 20 3d 20 45 4e 43 28 64 62 29 20 3d 0a 20 20  ) = ENC(db) =.  
ed10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45                pE
ed20: 6e 63 2d 3e 65 6e 63 20 3f 20 70 45 6e 63 2d 3e  nc->enc ? pEnc->
ed30: 65 6e 63 20 3a 20 53 51 4c 49 54 45 5f 55 54 46  enc : SQLITE_UTF
ed40: 31 36 4e 41 54 49 56 45 3b 0a 20 20 20 20 20 20  16NATIVE;.      
ed50: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
ed60: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
ed70: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 21   }.        if( !
ed80: 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29 7b 0a 20  pEnc->zName ){. 
ed90: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
eda0: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
edb0: 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20 65 6e   "unsupported en
edc0: 63 6f 64 69 6e 67 3a 20 25 73 22 2c 20 7a 52 69  coding: %s", zRi
edd0: 67 68 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ght);.        }.
ede0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
edf0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
ee00: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
ee10: 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69 66 6e 64  _UTF16 */..#ifnd
ee20: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
ee30: 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52  CHEMA_VERSION_PR
ee40: 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20  AGMAS.  /*.  ** 
ee50: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
ee60: 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  .]schema_version
ee70: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
ee80: 73 63 68 65 6d 61 2e 5d 73 63 68 65 6d 61 5f 76  schema.]schema_v
ee90: 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65  ersion = <intege
eea0: 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50  r>.  **.  **   P
eeb0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 75  RAGMA [schema.]u
eec0: 73 65 72 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a  ser_version.  **
eed0: 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d     PRAGMA [schem
eee0: 61 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  a.]user_version 
eef0: 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a  = <integer>.  **
ef00: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
ef10: 73 63 68 65 6d 61 2e 5d 66 72 65 65 6c 69 73 74  schema.]freelist
ef20: 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a  _count.  **.  **
ef30: 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d     PRAGMA [schem
ef40: 61 2e 5d 64 61 74 61 5f 76 65 72 73 69 6f 6e 0a  a.]data_version.
ef50: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    **.  **   PRAG
ef60: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 70 70 6c  MA [schema.]appl
ef70: 69 63 61 74 69 6f 6e 5f 69 64 0a 20 20 2a 2a 20  ication_id.  ** 
ef80: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
ef90: 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64  .]application_id
efa0: 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a   = <integer>.  *
efb0: 2a 0a 20 20 2a 2a 20 54 68 65 20 70 72 61 67 6d  *.  ** The pragm
efc0: 61 27 73 20 73 63 68 65 6d 61 5f 76 65 72 73 69  a's schema_versi
efd0: 6f 6e 20 61 6e 64 20 75 73 65 72 5f 76 65 72 73  on and user_vers
efe0: 69 6f 6e 20 61 72 65 20 75 73 65 64 20 74 6f 20  ion are used to 
eff0: 73 65 74 20 6f 72 20 67 65 74 0a 20 20 2a 2a 20  set or get.  ** 
f000: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
f010: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
f020: 61 6e 64 20 75 73 65 72 2d 76 65 72 73 69 6f 6e  and user-version
f030: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
f040: 42 6f 74 68 0a 20 20 2a 2a 20 74 68 65 20 73 63  Both.  ** the sc
f050: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64  hema-version and
f060: 20 74 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f   the user-versio
f070: 6e 20 61 72 65 20 33 32 2d 62 69 74 20 73 69 67  n are 32-bit sig
f080: 6e 65 64 20 69 6e 74 65 67 65 72 73 0a 20 20 2a  ned integers.  *
f090: 2a 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  * stored in the 
f0a0: 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72 2e  database header.
f0b0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73  .  **.  ** The s
f0c0: 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 69 73 20  chema-cookie is 
f0d0: 75 73 75 61 6c 6c 79 20 6f 6e 6c 79 20 6d 61 6e  usually only man
f0e0: 69 70 75 6c 61 74 65 64 20 69 6e 74 65 72 6e 61  ipulated interna
f0f0: 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49  lly by SQLite. I
f100: 74 0a 20 20 2a 2a 20 69 73 20 69 6e 63 72 65 6d  t.  ** is increm
f110: 65 6e 74 65 64 20 62 79 20 53 51 4c 69 74 65 20  ented by SQLite 
f120: 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
f130: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
f140: 6d 6f 64 69 66 69 65 64 20 28 62 79 0a 20 20 2a  modified (by.  *
f150: 2a 20 63 72 65 61 74 69 6e 67 20 6f 72 20 64 72  * creating or dr
f160: 6f 70 70 69 6e 67 20 61 20 74 61 62 6c 65 20 6f  opping a table o
f170: 72 20 69 6e 64 65 78 29 2e 20 54 68 65 20 73 63  r index). The sc
f180: 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20  hema version is 
f190: 75 73 65 64 20 62 79 0a 20 20 2a 2a 20 53 51 4c  used by.  ** SQL
f1a0: 69 74 65 20 65 61 63 68 20 74 69 6d 65 20 61 20  ite each time a 
f1b0: 71 75 65 72 79 20 69 73 20 65 78 65 63 75 74 65  query is execute
f1c0: 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74  d to ensure that
f1d0: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 63 61   the internal ca
f1e0: 63 68 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  che.  ** of the 
f1f0: 73 63 68 65 6d 61 20 75 73 65 64 20 77 68 65 6e  schema used when
f200: 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 53   compiling the S
f210: 51 4c 20 71 75 65 72 79 20 6d 61 74 63 68 65 73  QL query matches
f220: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66 0a 20   the schema of. 
f230: 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65   ** the database
f240: 20 61 67 61 69 6e 73 74 20 77 68 69 63 68 20 74   against which t
f250: 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72  he compiled quer
f260: 79 20 69 73 20 61 63 74 75 61 6c 6c 79 20 65 78  y is actually ex
f270: 65 63 75 74 65 64 2e 0a 20 20 2a 2a 20 53 75 62  ecuted..  ** Sub
f280: 76 65 72 74 69 6e 67 20 74 68 69 73 20 6d 65 63  verting this mec
f290: 68 61 6e 69 73 6d 20 62 79 20 75 73 69 6e 67 20  hanism by using 
f2a0: 22 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76  "PRAGMA schema_v
f2b0: 65 72 73 69 6f 6e 22 20 74 6f 20 6d 6f 64 69 66  ersion" to modif
f2c0: 79 0a 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d  y.  ** the schem
f2d0: 61 2d 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 74  a-version is pot
f2e0: 65 6e 74 69 61 6c 6c 79 20 64 61 6e 67 65 72 6f  entially dangero
f2f0: 75 73 20 61 6e 64 20 6d 61 79 20 6c 65 61 64 20  us and may lead 
f300: 74 6f 20 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20  to program.  ** 
f310: 63 72 61 73 68 65 73 20 6f 72 20 64 61 74 61 62  crashes or datab
f320: 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20  ase corruption. 
f330: 55 73 65 20 77 69 74 68 20 63 61 75 74 69 6f 6e  Use with caution
f340: 21 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  !.  **.  ** The 
f350: 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 69 73 20  user-version is 
f360: 6e 6f 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61  not used interna
f370: 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49  lly by SQLite. I
f380: 74 20 6d 61 79 20 62 65 20 75 73 65 64 20 62 79  t may be used by
f390: 0a 20 20 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f  .  ** applicatio
f3a0: 6e 73 20 66 6f 72 20 61 6e 79 20 70 75 72 70 6f  ns for any purpo
f3b0: 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  se..  */.  case 
f3c0: 50 72 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56  PragTyp_HEADER_V
f3d0: 41 4c 55 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20  ALUE: {.    int 
f3e0: 69 43 6f 6f 6b 69 65 20 3d 20 70 50 72 61 67 6d  iCookie = pPragm
f3f0: 61 2d 3e 69 41 72 67 3b 20 20 2f 2a 20 57 68 69  a->iArg;  /* Whi
f400: 63 68 20 63 6f 6f 6b 69 65 20 74 6f 20 72 65 61  ch cookie to rea
f410: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
f420: 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65    sqlite3VdbeUse
f430: 73 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a  sBtree(v, iDb);.
f440: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 26      if( zRight &
f450: 26 20 28 70 50 72 61 67 6d 61 2d 3e 6d 50 72 61  & (pPragma->mPra
f460: 67 46 6c 67 20 26 20 50 72 61 67 46 6c 67 5f 52  gFlg & PragFlg_R
f470: 65 61 64 4f 6e 6c 79 29 3d 3d 30 20 29 7b 0a 20  eadOnly)==0 ){. 
f480: 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20 74 68       /* Write th
f490: 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b  e specified cook
f4a0: 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  ie value */.    
f4b0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56    static const V
f4c0: 64 62 65 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f  dbeOpList setCoo
f4d0: 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  kie[] = {.      
f4e0: 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69    { OP_Transacti
f4f0: 6f 6e 2c 20 20 20 20 30 2c 20 20 31 2c 20 20 30  on,    0,  1,  0
f500: 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20  },    /* 0 */.  
f510: 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f        { OP_SetCo
f520: 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 30  okie,      0,  0
f530: 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a  ,  0},    /* 1 *
f540: 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20  /.      };.     
f550: 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20   VdbeOp *aOp;.  
f560: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 56      sqlite3VdbeV
f570: 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52 65 71  erifyNoMallocReq
f580: 75 69 72 65 64 28 76 2c 20 41 72 72 61 79 53 69  uired(v, ArraySi
f590: 7a 65 28 73 65 74 43 6f 6f 6b 69 65 29 29 3b 0a  ze(setCookie));.
f5a0: 20 20 20 20 20 20 61 4f 70 20 3d 20 73 71 6c 69        aOp = sqli
f5b0: 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74  te3VdbeAddOpList
f5c0: 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65  (v, ArraySize(se
f5d0: 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f  tCookie), setCoo
f5e0: 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 69  kie, 0);.      i
f5f0: 66 28 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c  f( ONLY_IF_REALL
f600: 4f 43 5f 53 54 52 45 53 53 28 61 4f 70 3d 3d 30  OC_STRESS(aOp==0
f610: 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  ) ) break;.     
f620: 20 61 4f 70 5b 30 5d 2e 70 31 20 3d 20 69 44 62   aOp[0].p1 = iDb
f630: 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70  ;.      aOp[1].p
f640: 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 61  1 = iDb;.      a
f650: 4f 70 5b 31 5d 2e 70 32 20 3d 20 69 43 6f 6f 6b  Op[1].p2 = iCook
f660: 69 65 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d  ie;.      aOp[1]
f670: 2e 70 33 20 3d 20 73 71 6c 69 74 65 33 41 74 6f  .p3 = sqlite3Ato
f680: 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d  i(zRight);.    }
f690: 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52  else{.      /* R
f6a0: 65 61 64 20 74 68 65 20 73 70 65 63 69 66 69 65  ead the specifie
f6b0: 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a  d cookie value *
f6c0: 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  /.      static c
f6d0: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
f6e0: 72 65 61 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b  readCookie[] = {
f6f0: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72  .        { OP_Tr
f700: 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 20 30  ansaction,     0
f710: 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a  ,  0,  0},    /*
f720: 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   0 */.        { 
f730: 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20  OP_ReadCookie,  
f740: 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20      0,  1,  0}, 
f750: 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20     /* 1 */.     
f760: 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f     { OP_ResultRo
f770: 77 2c 20 20 20 20 20 20 20 31 2c 20 20 31 2c 20  w,       1,  1, 
f780: 20 30 7d 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20   0}.      };.   
f790: 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a     VdbeOp *aOp;.
f7a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f7b0: 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52  eVerifyNoMallocR
f7c0: 65 71 75 69 72 65 64 28 76 2c 20 41 72 72 61 79  equired(v, Array
f7d0: 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65 29  Size(readCookie)
f7e0: 29 3b 0a 20 20 20 20 20 20 61 4f 70 20 3d 20 73  );.      aOp = s
f7f0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
f800: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
f810: 28 72 65 61 64 43 6f 6f 6b 69 65 29 2c 72 65 61  (readCookie),rea
f820: 64 43 6f 6f 6b 69 65 2c 30 29 3b 0a 20 20 20 20  dCookie,0);.    
f830: 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52 45    if( ONLY_IF_RE
f840: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f 70  ALLOC_STRESS(aOp
f850: 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a 20 20  ==0) ) break;.  
f860: 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20 3d 20      aOp[0].p1 = 
f870: 69 44 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31  iDb;.      aOp[1
f880: 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20  ].p1 = iDb;.    
f890: 20 20 61 4f 70 5b 31 5d 2e 70 33 20 3d 20 69 43    aOp[1].p3 = iC
f8a0: 6f 6f 6b 69 65 3b 0a 20 20 20 20 20 20 73 71 6c  ookie;.      sql
f8b0: 69 74 65 33 56 64 62 65 52 65 75 73 61 62 6c 65  ite3VdbeReusable
f8c0: 28 76 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  (v);.    }.  }. 
f8d0: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
f8e0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  * SQLITE_OMIT_SC
f8f0: 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41  HEMA_VERSION_PRA
f900: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
f910: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d   SQLITE_OMIT_COM
f920: 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53  PILEOPTION_DIAGS
f930: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
f940: 47 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f 70 74 69  GMA compile_opti
f950: 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  ons.  **.  ** Re
f960: 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f  turn the names o
f970: 66 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d 74 69  f all compile-ti
f980: 6d 65 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20  me options used 
f990: 69 6e 20 74 68 69 73 20 62 75 69 6c 64 2c 0a 20  in this build,. 
f9a0: 20 2a 2a 20 6f 6e 65 20 6f 70 74 69 6f 6e 20 70   ** one option p
f9b0: 65 72 20 72 6f 77 2e 0a 20 20 2a 2f 0a 20 20 63  er row..  */.  c
f9c0: 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4d 50  ase PragTyp_COMP
f9d0: 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a 20 7b 0a 20  ILE_OPTIONS: {. 
f9e0: 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20     int i = 0;.  
f9f0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f    const char *zO
fa00: 70 74 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  pt;.    pParse->
fa10: 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20 20 20 77 68  nMem = 1;.    wh
fa20: 69 6c 65 28 20 28 7a 4f 70 74 20 3d 20 73 71 6c  ile( (zOpt = sql
fa30: 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  ite3_compileopti
fa40: 6f 6e 5f 67 65 74 28 69 2b 2b 29 29 21 3d 30 20  on_get(i++))!=0 
fa50: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
fa60: 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76  VdbeLoadString(v
fa70: 2c 20 31 2c 20 7a 4f 70 74 29 3b 0a 20 20 20 20  , 1, zOpt);.    
fa80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
fa90: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
faa0: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
fab0: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
fac0: 65 52 65 75 73 61 62 6c 65 28 76 29 3b 0a 20 20  eReusable(v);.  
fad0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
fae0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
faf0: 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44  _COMPILEOPTION_D
fb00: 49 41 47 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  IAGS */..#ifndef
fb10: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
fb20: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
fb30: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 77 61 6c  GMA [schema.]wal
fb40: 5f 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 70 61  _checkpoint = pa
fb50: 73 73 69 76 65 7c 66 75 6c 6c 7c 72 65 73 74 61  ssive|full|resta
fb60: 72 74 7c 74 72 75 6e 63 61 74 65 0a 20 20 2a 2a  rt|truncate.  **
fb70: 0a 20 20 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74  .  ** Checkpoint
fb80: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20   the database.. 
fb90: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
fba0: 79 70 5f 57 41 4c 5f 43 48 45 43 4b 50 4f 49 4e  yp_WAL_CHECKPOIN
fbb0: 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 42 74  T: {.    int iBt
fbc0: 20 3d 20 28 70 49 64 32 2d 3e 7a 3f 69 44 62 3a   = (pId2->z?iDb:
fbd0: 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
fbe0: 48 45 44 29 3b 0a 20 20 20 20 69 6e 74 20 65 4d  HED);.    int eM
fbf0: 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45  ode = SQLITE_CHE
fc00: 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 3b  CKPOINT_PASSIVE;
fc10: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
fc20: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  ){.      if( sql
fc30: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67  ite3StrICmp(zRig
fc40: 68 74 2c 20 22 66 75 6c 6c 22 29 3d 3d 30 20 29  ht, "full")==0 )
fc50: 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20  {.        eMode 
fc60: 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  = SQLITE_CHECKPO
fc70: 49 4e 54 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20  INT_FULL;.      
fc80: 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
fc90: 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c  3StrICmp(zRight,
fca0: 20 22 72 65 73 74 61 72 74 22 29 3d 3d 30 20 29   "restart")==0 )
fcb0: 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20  {.        eMode 
fcc0: 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  = SQLITE_CHECKPO
fcd0: 49 4e 54 5f 52 45 53 54 41 52 54 3b 0a 20 20 20  INT_RESTART;.   
fce0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c     }else if( sql
fcf0: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67  ite3StrICmp(zRig
fd00: 68 74 2c 20 22 74 72 75 6e 63 61 74 65 22 29 3d  ht, "truncate")=
fd10: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d  =0 ){.        eM
fd20: 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45  ode = SQLITE_CHE
fd30: 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45  CKPOINT_TRUNCATE
fd40: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
fd50: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
fd60: 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 3;.    sqlite
fd70: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
fd80: 50 5f 43 68 65 63 6b 70 6f 69 6e 74 2c 20 69 42  P_Checkpoint, iB
fd90: 74 2c 20 65 4d 6f 64 65 2c 20 31 29 3b 0a 20 20  t, eMode, 1);.  
fda0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
fdb0: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
fdc0: 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 7d 0a  Row, 1, 3);.  }.
fdd0: 20 20 62 72 65 61 6b 3b 0a 0a 20 20 2f 2a 0a 20    break;..  /*. 
fde0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61 6c   **   PRAGMA wal
fdf0: 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 0a  _autocheckpoint.
fe00: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61    **   PRAGMA wa
fe10: 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
fe20: 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43   = N.  **.  ** C
fe30: 6f 6e 66 69 67 75 72 65 20 61 20 64 61 74 61 62  onfigure a datab
fe40: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  ase connection t
fe50: 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  o automatically 
fe60: 63 68 65 63 6b 70 6f 69 6e 74 20 61 20 64 61 74  checkpoint a dat
fe70: 61 62 61 73 65 0a 20 20 2a 2a 20 61 66 74 65 72  abase.  ** after
fe80: 20 61 63 63 75 6d 75 6c 61 74 69 6e 67 20 4e 20   accumulating N 
fe90: 66 72 61 6d 65 73 20 69 6e 20 74 68 65 20 6c 6f  frames in the lo
fea0: 67 2e 20 4f 72 20 71 75 65 72 79 20 66 6f 72 20  g. Or query for 
feb0: 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
fec0: 65 0a 20 20 2a 2a 20 6f 66 20 4e 2e 0a 20 20 2a  e.  ** of N..  *
fed0: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
fee0: 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f  _WAL_AUTOCHECKPO
fef0: 49 4e 54 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  INT: {.    if( z
ff00: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
ff10: 71 6c 69 74 65 33 5f 77 61 6c 5f 61 75 74 6f 63  qlite3_wal_autoc
ff20: 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 73 71  heckpoint(db, sq
ff30: 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
ff40: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ));.    }.    re
ff50: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c  turnSingleInt(v,
ff60: 20 0a 20 20 20 20 20 20 20 64 62 2d 3e 78 57 61   .       db->xWa
ff70: 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69 74  lCallback==sqlit
ff80: 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
ff90: 20 3f 20 0a 20 20 20 20 20 20 20 20 20 20 20 53   ? .           S
ffa0: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
ffb0: 28 64 62 2d 3e 70 57 61 6c 41 72 67 29 20 3a 20  (db->pWalArg) : 
ffc0: 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  0);.  }.  break;
ffd0: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20  .#endif..  /*.  
ffe0: 2a 2a 20 20 50 52 41 47 4d 41 20 73 68 72 69 6e  **  PRAGMA shrin
fff0: 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20 20  k_memory.  **.  
10000 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f  ** IMPLEMENTATIO
10010 4e 2d 4f 46 3a 20 52 2d 32 33 34 34 35 2d 34 36  N-OF: R-23445-46
10020 31 30 39 20 54 68 69 73 20 70 72 61 67 6d 61 20  109 This pragma 
10030 63 61 75 73 65 73 20 74 68 65 20 64 61 74 61 62  causes the datab
10040 61 73 65 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63 74  ase.  ** connect
10050 69 6f 6e 20 6f 6e 20 77 68 69 63 68 20 69 74 20  ion on which it 
10060 69 73 20 69 6e 76 6f 6b 65 64 20 74 6f 20 66 72  is invoked to fr
10070 65 65 20 75 70 20 61 73 20 6d 75 63 68 20 6d 65  ee up as much me
10080 6d 6f 72 79 20 61 73 20 69 74 0a 20 20 2a 2a 20  mory as it.  ** 
10090 63 61 6e 2c 20 62 79 20 63 61 6c 6c 69 6e 67 20  can, by calling 
100a0 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61  sqlite3_db_relea
100b0 73 65 5f 6d 65 6d 6f 72 79 28 29 2e 0a 20 20 2a  se_memory()..  *
100c0 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
100d0 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 3a 20  _SHRINK_MEMORY: 
100e0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62  {.    sqlite3_db
100f0 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28  _release_memory(
10100 64 62 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  db);.    break;.
10110 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
10120 50 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65 0a  PRAGMA optimize.
10130 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 6f 70 74    **  PRAGMA opt
10140 69 6d 69 7a 65 28 4d 41 53 4b 29 0a 20 20 2a 2a  imize(MASK).  **
10150 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 2e    PRAGMA schema.
10160 6f 70 74 69 6d 69 7a 65 0a 20 20 2a 2a 20 20 50  optimize.  **  P
10170 52 41 47 4d 41 20 73 63 68 65 6d 61 2e 6f 70 74  RAGMA schema.opt
10180 69 6d 69 7a 65 28 4d 41 53 4b 29 0a 20 20 2a 2a  imize(MASK).  **
10190 0a 20 20 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f  .  ** Attempt to
101a0 20 6f 70 74 69 6d 69 7a 65 20 74 68 65 20 64 61   optimize the da
101b0 74 61 62 61 73 65 2e 20 20 41 6c 6c 20 73 63 68  tabase.  All sch
101c0 65 6d 61 73 20 61 72 65 20 6f 70 74 69 6d 69 7a  emas are optimiz
101d0 65 64 20 69 6e 20 74 68 65 20 66 69 72 73 74 0a  ed in the first.
101e0 20 20 2a 2a 20 74 77 6f 20 66 6f 72 6d 73 2c 20    ** two forms, 
101f0 61 6e 64 20 6f 6e 6c 79 20 74 68 65 20 73 70 65  and only the spe
10200 63 69 66 69 65 64 20 73 63 68 65 6d 61 20 69 73  cified schema is
10210 20 6f 70 74 69 6d 69 7a 65 64 20 69 6e 20 74 68   optimized in th
10220 65 20 6c 61 74 74 65 72 20 74 77 6f 2e 0a 20 20  e latter two..  
10230 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 64 65 74 61  **.  ** The deta
10240 69 6c 73 20 6f 66 20 6f 70 74 69 6d 69 7a 61 74  ils of optimizat
10250 69 6f 6e 73 20 70 65 72 66 6f 72 6d 65 64 20 62  ions performed b
10260 79 20 74 68 69 73 20 70 72 61 67 6d 61 20 61 72  y this pragma ar
10270 65 20 65 78 70 65 63 74 65 64 0a 20 20 2a 2a 20  e expected.  ** 
10280 74 6f 20 63 68 61 6e 67 65 20 61 6e 64 20 69 6d  to change and im
10290 70 72 6f 76 65 20 6f 76 65 72 20 74 69 6d 65 2e  prove over time.
102a0 20 20 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 73    Applications s
102b0 68 6f 75 6c 64 20 61 6e 74 69 63 69 70 61 74 65  hould anticipate
102c0 20 74 68 61 74 0a 20 20 2a 2a 20 74 68 69 73 20   that.  ** this 
102d0 70 72 61 67 6d 61 20 77 69 6c 6c 20 70 65 72 66  pragma will perf
102e0 6f 72 6d 20 6e 65 77 20 6f 70 74 69 6d 69 7a 61  orm new optimiza
102f0 74 69 6f 6e 73 20 69 6e 20 66 75 74 75 72 65 20  tions in future 
10300 72 65 6c 65 61 73 65 73 2e 0a 20 20 2a 2a 0a 20  releases..  **. 
10310 20 2a 2a 20 54 68 65 20 6f 70 74 69 6f 6e 61 6c   ** The optional
10320 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 62   argument is a b
10330 69 74 6d 61 73 6b 20 6f 66 20 6f 70 74 69 6d 69  itmask of optimi
10340 7a 61 74 69 6f 6e 73 20 74 6f 20 70 65 72 66 6f  zations to perfo
10350 72 6d 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  rm:.  **.  **   
10360 20 30 78 30 30 30 31 20 20 20 20 44 65 62 75 67   0x0001    Debug
10370 67 69 6e 67 20 6d 6f 64 65 2e 20 20 44 6f 20 6e  ging mode.  Do n
10380 6f 74 20 61 63 74 75 61 6c 6c 79 20 70 65 72 66  ot actually perf
10390 6f 72 6d 20 61 6e 79 20 6f 70 74 69 6d 69 7a 61  orm any optimiza
103a0 74 69 6f 6e 73 0a 20 20 2a 2a 20 20 20 20 20 20  tions.  **      
103b0 20 20 20 20 20 20 20 20 62 75 74 20 69 6e 73 74          but inst
103c0 65 61 64 20 72 65 74 75 72 6e 20 6f 6e 65 20 6c  ead return one l
103d0 69 6e 65 20 6f 66 20 74 65 78 74 20 66 6f 72 20  ine of text for 
103e0 65 61 63 68 20 6f 70 74 69 6d 69 7a 61 74 69 6f  each optimizatio
103f0 6e 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20  n.  **          
10400 20 20 20 20 74 68 61 74 20 77 6f 75 6c 64 20 68      that would h
10410 61 76 65 20 62 65 65 6e 20 64 6f 6e 65 2e 20 20  ave been done.  
10420 4f 66 66 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  Off by default..
10430 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 30 78 30    **.  **    0x0
10440 30 30 32 20 20 20 20 52 75 6e 20 41 4e 41 4c 59  002    Run ANALY
10450 5a 45 20 6f 6e 20 74 61 62 6c 65 73 20 74 68 61  ZE on tables tha
10460 74 20 6d 69 67 68 74 20 62 65 6e 65 66 69 74 2e  t might benefit.
10470 20 20 4f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e    On by default.
10480 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20  .  **           
10490 20 20 20 53 65 65 20 62 65 6c 6f 77 20 66 6f 72     See below for
104a0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
104b0 72 6d 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20  rmation..  **.  
104c0 2a 2a 20 20 20 20 30 78 30 30 30 34 20 20 20 20  **    0x0004    
104d0 28 4e 6f 74 20 79 65 74 20 69 6d 70 6c 65 6d 65  (Not yet impleme
104e0 6e 74 65 64 29 20 52 65 63 6f 72 64 20 75 73 61  nted) Record usa
104f0 67 65 20 61 6e 64 20 70 65 72 66 6f 72 6d 61 6e  ge and performan
10500 63 65 20 0a 20 20 2a 2a 20 20 20 20 20 20 20 20  ce .  **        
10510 20 20 20 20 20 20 69 6e 66 6f 72 6d 61 74 69 6f        informatio
10520 6e 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65  n from the curre
10530 6e 74 20 73 65 73 73 69 6f 6e 20 69 6e 20 74 68  nt session in th
10540 65 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20  e.  **          
10550 20 20 20 20 64 61 74 61 62 61 73 65 20 66 69 6c      database fil
10560 65 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c  e so that it wil
10570 6c 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 74  l be available t
10580 6f 20 22 6f 70 74 69 6d 69 7a 65 22 0a 20 20 2a  o "optimize".  *
10590 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70  *              p
105a0 72 61 67 6d 61 73 20 72 75 6e 20 62 79 20 66 75  ragmas run by fu
105b0 74 75 72 65 20 64 61 74 61 62 61 73 65 20 63 6f  ture database co
105c0 6e 6e 65 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a  nnections..  **.
105d0 20 20 2a 2a 20 20 20 20 30 78 30 30 30 38 20 20    **    0x0008  
105e0 20 20 28 4e 6f 74 20 79 65 74 20 69 6d 70 6c 65    (Not yet imple
105f0 6d 65 6e 74 65 64 29 20 43 72 65 61 74 65 20 69  mented) Create i
10600 6e 64 65 78 65 73 20 74 68 61 74 20 6d 69 67 68  ndexes that migh
10610 74 20 68 61 76 65 0a 20 20 2a 2a 20 20 20 20 20  t have.  **     
10620 20 20 20 20 20 20 20 20 20 62 65 65 6e 20 68 65           been he
10630 6c 70 66 75 6c 20 74 6f 20 72 65 63 65 6e 74 20  lpful to recent 
10640 71 75 65 72 69 65 73 0a 20 20 2a 2a 0a 20 20 2a  queries.  **.  *
10650 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 4d 41  * The default MA
10660 53 4b 20 69 73 20 61 6e 64 20 61 6c 77 61 79 73  SK is and always
10670 20 73 68 61 6c 6c 20 62 65 20 30 78 66 66 66 65   shall be 0xfffe
10680 2e 20 20 30 78 66 66 66 65 20 6d 65 61 6e 73 20  .  0xfffe means 
10690 70 65 72 66 6f 72 6d 20 61 6c 6c 0a 20 20 2a 2a  perform all.  **
106a0 20 6f 66 20 74 68 65 20 6f 70 74 69 6d 69 7a 61   of the optimiza
106b0 74 69 6f 6e 73 20 6c 69 73 74 65 64 20 61 62 6f  tions listed abo
106c0 76 65 20 65 78 63 65 70 74 20 44 65 62 75 67 20  ve except Debug 
106d0 4d 6f 64 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20  Mode, including 
106e0 6e 65 77 0a 20 20 2a 2a 20 6f 70 74 69 6d 69 7a  new.  ** optimiz
106f0 61 74 69 6f 6e 73 20 74 68 61 74 20 68 61 76 65  ations that have
10700 20 6e 6f 74 20 79 65 74 20 62 65 65 6e 20 69 6e   not yet been in
10710 76 65 6e 74 65 64 2e 20 20 49 66 20 6e 65 77 20  vented.  If new 
10720 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72  optimizations ar
10730 65 0a 20 20 2a 2a 20 65 76 65 72 20 61 64 64 65  e.  ** ever adde
10740 64 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  d that should be
10750 20 6f 66 66 20 62 79 20 64 65 66 61 75 6c 74 2c   off by default,
10760 20 74 68 6f 73 65 20 6f 66 66 2d 62 79 2d 64 65   those off-by-de
10770 66 61 75 6c 74 20 0a 20 20 2a 2a 20 6f 70 74 69  fault .  ** opti
10780 6d 69 7a 61 74 69 6f 6e 73 20 77 69 6c 6c 20 68  mizations will h
10790 61 76 65 20 62 69 74 6d 61 73 6b 73 20 6f 66 20  ave bitmasks of 
107a0 30 78 31 30 30 30 30 20 6f 72 20 6c 61 72 67 65  0x10000 or large
107b0 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 45 54  r..  **.  ** DET
107c0 45 52 4d 49 4e 41 54 49 4f 4e 20 4f 46 20 57 48  ERMINATION OF WH
107d0 45 4e 20 54 4f 20 52 55 4e 20 41 4e 41 4c 59 5a  EN TO RUN ANALYZ
107e0 45 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 74  E.  **.  ** In t
107f0 68 65 20 63 75 72 72 65 6e 74 20 69 6d 70 6c 65  he current imple
10800 6d 65 6e 74 61 74 69 6f 6e 2c 20 61 20 74 61 62  mentation, a tab
10810 6c 65 20 69 73 20 61 6e 61 6c 79 7a 65 64 20 69  le is analyzed i
10820 66 20 6f 6e 6c 79 20 69 66 20 61 6c 6c 20 6f 66  f only if all of
10830 0a 20 20 2a 2a 20 74 68 65 20 66 6f 6c 6c 6f 77  .  ** the follow
10840 69 6e 67 20 61 72 65 20 74 72 75 65 3a 0a 20 20  ing are true:.  
10850 2a 2a 0a 20 20 2a 2a 20 28 31 29 20 4d 41 53 4b  **.  ** (1) MASK
10860 20 62 69 74 20 30 78 30 32 20 69 73 20 73 65 74   bit 0x02 is set
10870 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 28 32 29 20  ..  **.  ** (2) 
10880 54 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65  The query planne
10890 72 20 75 73 65 64 20 73 71 6c 69 74 65 5f 73 74  r used sqlite_st
108a0 61 74 31 2d 73 74 79 6c 65 20 73 74 61 74 69 73  at1-style statis
108b0 74 69 63 73 20 66 6f 72 20 6f 6e 65 20 6f 72 0a  tics for one or.
108c0 20 20 2a 2a 20 20 20 20 20 6d 6f 72 65 20 69 6e    **     more in
108d0 64 65 78 65 73 20 6f 66 20 74 68 65 20 74 61 62  dexes of the tab
108e0 6c 65 20 61 74 20 73 6f 6d 65 20 70 6f 69 6e 74  le at some point
108f0 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65   during the life
10900 74 69 6d 65 20 6f 66 0a 20 20 2a 2a 20 20 20 20  time of.  **    
10910 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e   the current con
10920 6e 65 63 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20  nection..  **.  
10930 2a 2a 20 28 33 29 20 4f 6e 65 20 6f 72 20 6d 6f  ** (3) One or mo
10940 72 65 20 69 6e 64 65 78 65 73 20 6f 66 20 74 68  re indexes of th
10950 65 20 74 61 62 6c 65 20 61 72 65 20 63 75 72 72  e table are curr
10960 65 6e 74 6c 79 20 75 6e 61 6e 61 6c 79 7a 65 64  ently unanalyzed
10970 20 4f 52 0a 20 20 2a 2a 20 20 20 20 20 74 68 65   OR.  **     the
10980 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
10990 69 6e 20 74 68 65 20 74 61 62 6c 65 20 68 61 73  in the table has
109a0 20 69 6e 63 72 65 61 73 65 64 20 62 79 20 32 35   increased by 25
109b0 20 74 69 6d 65 73 20 6f 72 20 6d 6f 72 65 0a 20   times or more. 
109c0 20 2a 2a 20 20 20 20 20 73 69 6e 63 65 20 74 68   **     since th
109d0 65 20 6c 61 73 74 20 74 69 6d 65 20 41 4e 41 4c  e last time ANAL
109e0 59 5a 45 20 77 61 73 20 72 75 6e 2e 0a 20 20 2a  YZE was run..  *
109f0 2a 0a 20 20 2a 2a 20 54 68 65 20 72 75 6c 65 73  *.  ** The rules
10a00 20 66 6f 72 20 77 68 65 6e 20 74 61 62 6c 65 73   for when tables
10a10 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 20 61 72   are analyzed ar
10a20 65 20 6c 69 6b 65 6c 79 20 74 6f 20 63 68 61 6e  e likely to chan
10a30 67 65 20 69 6e 0a 20 20 2a 2a 20 66 75 74 75 72  ge in.  ** futur
10a40 65 20 72 65 6c 65 61 73 65 73 2e 0a 20 20 2a 2f  e releases..  */
10a50 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
10a60 4f 50 54 49 4d 49 5a 45 3a 20 7b 0a 20 20 20 20  OPTIMIZE: {.    
10a70 69 6e 74 20 69 44 62 4c 61 73 74 3b 20 20 20 20  int iDbLast;    
10a80 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 74         /* Loop t
10a90 65 72 6d 69 6e 61 74 69 6f 6e 20 70 6f 69 6e 74  ermination point
10aa0 20 66 6f 72 20 74 68 65 20 73 63 68 65 6d 61 20   for the schema 
10ab0 6c 6f 6f 70 20 2a 2f 0a 20 20 20 20 69 6e 74 20  loop */.    int 
10ac0 69 54 61 62 43 75 72 3b 20 20 20 20 20 20 20 20  iTabCur;        
10ad0 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 66 6f 72     /* Cursor for
10ae0 20 61 20 74 61 62 6c 65 20 77 68 6f 73 65 20 73   a table whose s
10af0 69 7a 65 20 6e 65 65 64 73 20 63 68 65 63 6b 69  ize needs checki
10b00 6e 67 20 2a 2f 0a 20 20 20 20 48 61 73 68 45 6c  ng */.    HashEl
10b10 65 6d 20 2a 6b 3b 20 20 20 20 20 20 20 20 20 20  em *k;          
10b20 20 2f 2a 20 4c 6f 6f 70 20 6f 76 65 72 20 74 61   /* Loop over ta
10b30 62 6c 65 73 20 6f 66 20 61 20 73 63 68 65 6d 61  bles of a schema
10b40 20 2a 2f 0a 20 20 20 20 53 63 68 65 6d 61 20 2a   */.    Schema *
10b50 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 2f  pSchema;       /
10b60 2a 20 54 68 65 20 63 75 72 72 65 6e 74 20 73 63  * The current sc
10b70 68 65 6d 61 20 2a 2f 0a 20 20 20 20 54 61 62 6c  hema */.    Tabl
10b80 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
10b90 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 69 6e     /* A table in
10ba0 20 74 68 65 20 73 63 68 65 6d 61 20 2a 2f 0a 20   the schema */. 
10bb0 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20     Index *pIdx; 
10bc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20            /* An 
10bd0 69 6e 64 65 78 20 6f 66 20 74 68 65 20 74 61 62  index of the tab
10be0 6c 65 20 2a 2f 0a 20 20 20 20 4c 6f 67 45 73 74  le */.    LogEst
10bf0 20 73 7a 54 68 72 65 73 68 6f 6c 64 3b 20 20 20   szThreshold;   
10c00 20 2f 2a 20 53 69 7a 65 20 74 68 72 65 73 68 6f   /* Size thresho
10c10 6c 64 20 61 62 6f 76 65 20 77 68 69 63 68 20 72  ld above which r
10c20 65 61 6e 61 6c 79 73 69 73 20 69 73 20 6e 65 65  eanalysis is nee
10c30 64 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  dd */.    char *
10c40 7a 53 75 62 53 71 6c 3b 20 20 20 20 20 20 20 20  zSubSql;        
10c50 20 2f 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   /* SQL statemen
10c60 74 20 66 6f 72 20 74 68 65 20 4f 50 5f 53 71 6c  t for the OP_Sql
10c70 45 78 65 63 20 6f 70 63 6f 64 65 20 2a 2f 0a 20  Exec opcode */. 
10c80 20 20 20 75 33 32 20 6f 70 4d 61 73 6b 3b 20 20     u32 opMask;  
10c90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73            /* Mas
10ca0 6b 20 6f 66 20 6f 70 65 72 61 74 69 6f 6e 73 20  k of operations 
10cb0 74 6f 20 70 65 72 66 6f 72 6d 20 2a 2f 0a 0a 20  to perform */.. 
10cc0 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
10cd0 0a 20 20 20 20 20 20 6f 70 4d 61 73 6b 20 3d 20  .      opMask = 
10ce0 28 75 33 32 29 73 71 6c 69 74 65 33 41 74 6f 69  (u32)sqlite3Atoi
10cf0 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20  (zRight);.      
10d00 69 66 28 20 28 6f 70 4d 61 73 6b 20 26 20 30 78  if( (opMask & 0x
10d10 30 32 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  02)==0 ) break;.
10d20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
10d30 20 6f 70 4d 61 73 6b 20 3d 20 30 78 66 66 66 65   opMask = 0xfffe
10d40 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 54 61 62  ;.    }.    iTab
10d50 43 75 72 20 3d 20 70 50 61 72 73 65 2d 3e 6e 54  Cur = pParse->nT
10d60 61 62 2b 2b 3b 0a 20 20 20 20 66 6f 72 28 69 44  ab++;.    for(iD
10d70 62 4c 61 73 74 20 3d 20 7a 44 62 3f 69 44 62 3a  bLast = zDb?iDb:
10d80 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 44 62 3c 3d  db->nDb-1; iDb<=
10d90 69 44 62 4c 61 73 74 3b 20 69 44 62 2b 2b 29 7b  iDbLast; iDb++){
10da0 0a 20 20 20 20 20 20 69 66 28 20 69 44 62 3d 3d  .      if( iDb==
10db0 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  1 ) continue;.  
10dc0 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
10dd0 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
10de0 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  se, iDb);.      
10df0 70 53 63 68 65 6d 61 20 3d 20 64 62 2d 3e 61 44  pSchema = db->aD
10e00 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61 3b 0a  b[iDb].pSchema;.
10e10 20 20 20 20 20 20 66 6f 72 28 6b 3d 73 71 6c 69        for(k=sqli
10e20 74 65 48 61 73 68 46 69 72 73 74 28 26 70 53 63  teHashFirst(&pSc
10e30 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 20  hema->tblHash); 
10e40 6b 3b 20 6b 3d 73 71 6c 69 74 65 48 61 73 68 4e  k; k=sqliteHashN
10e50 65 78 74 28 6b 29 29 7b 0a 20 20 20 20 20 20 20  ext(k)){.       
10e60 20 70 54 61 62 20 3d 20 28 54 61 62 6c 65 2a 29   pTab = (Table*)
10e70 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 6b  sqliteHashData(k
10e80 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 49  );..        /* I
10e90 66 20 74 61 62 6c 65 20 70 54 61 62 20 68 61 73  f table pTab has
10ea0 20 6e 6f 74 20 62 65 65 6e 20 75 73 65 64 20 69   not been used i
10eb0 6e 20 61 20 77 61 79 20 74 68 61 74 20 77 6f 75  n a way that wou
10ec0 6c 64 20 62 65 6e 65 66 69 74 20 66 72 6f 6d 0a  ld benefit from.
10ed0 20 20 20 20 20 20 20 20 2a 2a 20 68 61 76 69 6e          ** havin
10ee0 67 20 61 6e 61 6c 79 73 69 73 20 73 74 61 74 69  g analysis stati
10ef0 73 74 69 63 73 20 64 75 72 69 6e 67 20 74 68 65  stics during the
10f00 20 63 75 72 72 65 6e 74 20 73 65 73 73 69 6f 6e   current session
10f10 2c 20 74 68 65 6e 20 73 6b 69 70 20 69 74 2e 0a  , then skip it..
10f20 20 20 20 20 20 20 20 20 2a 2a 20 54 68 69 73 20          ** This 
10f30 61 6c 73 6f 20 68 61 73 20 74 68 65 20 65 66 66  also has the eff
10f40 65 63 74 20 6f 66 20 73 6b 69 70 70 69 6e 67 20  ect of skipping 
10f50 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 61  virtual tables a
10f60 6e 64 20 76 69 65 77 73 20 2a 2f 0a 20 20 20 20  nd views */.    
10f70 20 20 20 20 69 66 28 20 28 70 54 61 62 2d 3e 74      if( (pTab->t
10f80 61 62 46 6c 61 67 73 20 26 20 54 46 5f 53 74 61  abFlags & TF_Sta
10f90 74 73 55 73 65 64 29 3d 3d 30 20 29 20 63 6f 6e  tsUsed)==0 ) con
10fa0 74 69 6e 75 65 3b 0a 0a 20 20 20 20 20 20 20 20  tinue;..        
10fb0 2f 2a 20 52 65 61 6e 61 6c 79 7a 65 20 69 66 20  /* Reanalyze if 
10fc0 74 68 65 20 74 61 62 6c 65 20 69 73 20 32 35 20  the table is 25 
10fd0 74 69 6d 65 73 20 6c 61 72 67 65 72 20 74 68 61  times larger tha
10fe0 6e 20 74 68 65 20 6c 61 73 74 20 61 6e 61 6c 79  n the last analy
10ff0 73 69 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 73  sis */.        s
11000 7a 54 68 72 65 73 68 6f 6c 64 20 3d 20 70 54 61  zThreshold = pTa
11010 62 2d 3e 6e 52 6f 77 4c 6f 67 45 73 74 20 2b 20  b->nRowLogEst + 
11020 34 36 3b 20 61 73 73 65 72 74 28 20 73 71 6c 69  46; assert( sqli
11030 74 65 33 4c 6f 67 45 73 74 28 32 35 29 3d 3d 34  te3LogEst(25)==4
11040 36 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  6 );.        for
11050 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64  (pIdx=pTab->pInd
11060 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
11070 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20  Idx->pNext){.   
11080 20 20 20 20 20 20 20 69 66 28 20 21 70 49 64 78         if( !pIdx
11090 2d 3e 68 61 73 53 74 61 74 31 20 29 7b 0a 20 20  ->hasStat1 ){.  
110a0 20 20 20 20 20 20 20 20 20 20 73 7a 54 68 72 65            szThre
110b0 73 68 6f 6c 64 20 3d 20 30 3b 20 2f 2a 20 41 6c  shold = 0; /* Al
110c0 77 61 79 73 20 61 6e 61 6c 79 7a 65 20 69 66 20  ways analyze if 
110d0 61 6e 79 20 69 6e 64 65 78 20 6c 61 63 6b 73 20  any index lacks 
110e0 73 74 61 74 69 73 74 69 63 73 20 2a 2f 0a 20 20  statistics */.  
110f0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
11100 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
11110 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
11120 66 28 20 73 7a 54 68 72 65 73 68 6f 6c 64 20 29  f( szThreshold )
11130 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
11140 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61  te3OpenTable(pPa
11150 72 73 65 2c 20 69 54 61 62 43 75 72 2c 20 69 44  rse, iTabCur, iD
11160 62 2c 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e  b, pTab, OP_Open
11170 52 65 61 64 29 3b 0a 20 20 20 20 20 20 20 20 20  Read);.         
11180 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
11190 70 33 28 76 2c 20 4f 50 5f 49 66 53 6d 61 6c 6c  p3(v, OP_IfSmall
111a0 65 72 2c 20 69 54 61 62 43 75 72 2c 20 0a 20 20  er, iTabCur, .  
111b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111c0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
111d0 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29  beCurrentAddr(v)
111e0 2b 32 2b 28 6f 70 4d 61 73 6b 26 31 29 2c 20 73  +2+(opMask&1), s
111f0 7a 54 68 72 65 73 68 6f 6c 64 29 3b 0a 20 20 20  zThreshold);.   
11200 20 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72         VdbeCover
11210 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
11220 7d 0a 20 20 20 20 20 20 20 20 7a 53 75 62 53 71  }.        zSubSq
11230 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e  l = sqlite3MPrin
11240 74 66 28 64 62 2c 20 22 41 4e 41 4c 59 5a 45 20  tf(db, "ANALYZE 
11250 5c 22 25 77 5c 22 2e 5c 22 25 77 5c 22 22 2c 0a  \"%w\".\"%w\"",.
11260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11280 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 44   db->aDb[iDb].zD
11290 62 53 4e 61 6d 65 2c 20 70 54 61 62 2d 3e 7a 4e  bSName, pTab->zN
112a0 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 69 66  ame);.        if
112b0 28 20 6f 70 4d 61 73 6b 20 26 20 30 78 30 31 20  ( opMask & 0x01 
112c0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  ){.          int
112d0 20 72 31 20 3d 20 73 71 6c 69 74 65 33 47 65 74   r1 = sqlite3Get
112e0 54 65 6d 70 52 65 67 28 70 50 61 72 73 65 29 3b  TempReg(pParse);
112f0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
11300 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
11310 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 72  OP_String8, 0, r
11320 31 2c 20 30 2c 20 7a 53 75 62 53 71 6c 2c 20 50  1, 0, zSubSql, P
11330 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20  4_DYNAMIC);.    
11340 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11350 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
11360 73 75 6c 74 52 6f 77 2c 20 72 31 2c 20 31 29 3b  sultRow, r1, 1);
11370 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
11380 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
11390 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
113a0 50 5f 53 71 6c 45 78 65 63 2c 20 30 2c 20 30 2c  P_SqlExec, 0, 0,
113b0 20 30 2c 20 7a 53 75 62 53 71 6c 2c 20 50 34 5f   0, zSubSql, P4_
113c0 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20 20  DYNAMIC);.      
113d0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
113e0 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
113f0 65 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f 45 78  eAddOp0(v, OP_Ex
11400 70 69 72 65 29 3b 0a 20 20 20 20 62 72 65 61 6b  pire);.    break
11410 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
11420 20 20 20 50 52 41 47 4d 41 20 62 75 73 79 5f 74     PRAGMA busy_t
11430 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20 20 50 52  imeout.  **   PR
11440 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f 75  AGMA busy_timeou
11450 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  t = N.  **.  ** 
11460 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f 62 75 73  Call sqlite3_bus
11470 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 4e 29  y_timeout(db, N)
11480 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 63 75  .  Return the cu
11490 72 72 65 6e 74 20 74 69 6d 65 6f 75 74 20 76 61  rrent timeout va
114a0 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f 6e 65 20  lue.  ** if one 
114b0 69 73 20 73 65 74 2e 20 20 49 66 20 6e 6f 20 62  is set.  If no b
114c0 75 73 79 20 68 61 6e 64 6c 65 72 20 6f 72 20 61  usy handler or a
114d0 20 64 69 66 66 65 72 65 6e 74 20 62 75 73 79 20   different busy 
114e0 68 61 6e 64 6c 65 72 20 69 73 20 73 65 74 0a 20  handler is set. 
114f0 20 2a 2a 20 74 68 65 6e 20 30 20 69 73 20 72 65   ** then 0 is re
11500 74 75 72 6e 65 64 2e 20 20 53 65 74 74 69 6e 67  turned.  Setting
11510 20 74 68 65 20 62 75 73 79 5f 74 69 6d 65 6f 75   the busy_timeou
11520 74 20 74 6f 20 30 20 6f 72 20 6e 65 67 61 74 69  t to 0 or negati
11530 76 65 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 73  ve.  ** disables
11540 20 74 68 65 20 74 69 6d 65 6f 75 74 2e 0a 20 20   the timeout..  
11550 2a 2f 0a 20 20 2f 2a 63 61 73 65 20 50 72 61 67  */.  /*case Prag
11560 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54  Typ_BUSY_TIMEOUT
11570 2a 2f 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20  */ default: {.  
11580 20 20 61 73 73 65 72 74 28 20 70 50 72 61 67 6d    assert( pPragm
11590 61 2d 3e 65 50 72 61 67 54 79 70 3d 3d 50 72 61  a->ePragTyp==Pra
115a0 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55  gTyp_BUSY_TIMEOU
115b0 54 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  T );.    if( zRi
115c0 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
115d0 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
115e0 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f  t(db, sqlite3Ato
115f0 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  i(zRight));.    
11600 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  }.    returnSing
11610 6c 65 49 6e 74 28 76 2c 20 64 62 2d 3e 62 75 73  leInt(v, db->bus
11620 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20 20 20 62  yTimeout);.    b
11630 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
11640 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f    **   PRAGMA so
11650 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 0a 20 20  ft_heap_limit.  
11660 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74  **   PRAGMA soft
11670 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3d 20 4e 0a  _heap_limit = N.
11680 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d    **.  ** IMPLEM
11690 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32  ENTATION-OF: R-2
116a0 36 33 34 33 2d 34 35 39 33 30 20 54 68 69 73 20  6343-45930 This 
116b0 70 72 61 67 6d 61 20 69 6e 76 6f 6b 65 73 20 74  pragma invokes t
116c0 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  he.  ** sqlite3_
116d0 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36  soft_heap_limit6
116e0 34 28 29 20 69 6e 74 65 72 66 61 63 65 20 77 69  4() interface wi
116f0 74 68 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  th the argument 
11700 4e 2c 20 69 66 20 4e 20 69 73 0a 20 20 2a 2a 20  N, if N is.  ** 
11710 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 69 73  specified and is
11720 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20   a non-negative 
11730 69 6e 74 65 67 65 72 2e 0a 20 20 2a 2a 20 49 4d  integer..  ** IM
11740 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
11750 20 52 2d 36 34 34 35 31 2d 30 37 31 36 33 20 54   R-64451-07163 T
11760 68 65 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  he soft_heap_lim
11770 69 74 20 70 72 61 67 6d 61 20 61 6c 77 61 79 73  it pragma always
11780 0a 20 20 2a 2a 20 72 65 74 75 72 6e 73 20 74 68  .  ** returns th
11790 65 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 74  e same integer t
117a0 68 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74  hat would be ret
117b0 75 72 6e 65 64 20 62 79 20 74 68 65 0a 20 20 2a  urned by the.  *
117c0 2a 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68  * sqlite3_soft_h
117d0 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d 31 29 20  eap_limit64(-1) 
117e0 43 2d 6c 61 6e 67 75 61 67 65 20 66 75 6e 63 74  C-language funct
117f0 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ion..  */.  case
11800 20 50 72 61 67 54 79 70 5f 53 4f 46 54 5f 48 45   PragTyp_SOFT_HE
11810 41 50 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20  AP_LIMIT: {.    
11820 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b  sqlite3_int64 N;
11830 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
11840 26 26 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48  && sqlite3DecOrH
11850 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20  exToI64(zRight, 
11860 26 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  &N)==SQLITE_OK )
11870 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
11880 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36  soft_heap_limit6
11890 34 28 4e 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  4(N);.    }.    
118a0 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
118b0 76 2c 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f  v, sqlite3_soft_
118c0 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d 31 29  heap_limit64(-1)
118d0 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
118e0 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  }..  /*.  **   P
118f0 52 41 47 4d 41 20 74 68 72 65 61 64 73 0a 20 20  RAGMA threads.  
11900 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 68 72 65  **   PRAGMA thre
11910 61 64 73 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a  ads = N.  **.  *
11920 2a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65 20  * Configure the 
11930 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
11940 66 20 77 6f 72 6b 65 72 20 74 68 72 65 61 64 73  f worker threads
11950 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 6e 65  .  Return the ne
11960 77 0a 20 20 2a 2a 20 6d 61 78 69 6d 75 6d 2c 20  w.  ** maximum, 
11970 77 68 69 63 68 20 6d 69 67 68 74 20 62 65 20 6c  which might be l
11980 65 73 73 20 74 68 61 6e 20 72 65 71 75 65 73 74  ess than request
11990 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ed..  */.  case 
119a0 50 72 61 67 54 79 70 5f 54 48 52 45 41 44 53 3a  PragTyp_THREADS:
119b0 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69   {.    sqlite3_i
119c0 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66 28 20  nt64 N;.    if( 
119d0 7a 52 69 67 68 74 0a 20 20 20 20 20 26 26 20 73  zRight.     && s
119e0 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
119f0 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e 29 3d  I64(zRight, &N)=
11a00 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20  =SQLITE_OK.     
11a10 26 26 20 4e 3e 3d 30 0a 20 20 20 20 29 7b 0a 20  && N>=0.    ){. 
11a20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d       sqlite3_lim
11a30 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c 49  it(db, SQLITE_LI
11a40 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MIT_WORKER_THREA
11a50 44 53 2c 20 28 69 6e 74 29 28 4e 26 30 78 37 66  DS, (int)(N&0x7f
11a60 66 66 66 66 66 66 29 29 3b 0a 20 20 20 20 7d 0a  ffffff));.    }.
11a70 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
11a80 49 6e 74 28 76 2c 20 73 71 6c 69 74 65 33 5f 6c  Int(v, sqlite3_l
11a90 69 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f  imit(db, SQLITE_
11aa0 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
11ab0 45 41 44 53 2c 20 2d 31 29 29 3b 0a 20 20 20 20  EADS, -1));.    
11ac0 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20  break;.  }..#if 
11ad0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
11ae0 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
11af0 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20  (SQLITE_TEST).  
11b00 2f 2a 0a 20 20 2a 2a 20 52 65 70 6f 72 74 20 74  /*.  ** Report t
11b10 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65  he current state
11b20 20 6f 66 20 66 69 6c 65 20 6c 6f 67 73 20 66 6f   of file logs fo
11b30 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 0a  r all databases.
11b40 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
11b50 54 79 70 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 3a  Typ_LOCK_STATUS:
11b60 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f   {.    static co
11b70 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20  nst char *const 
11b80 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b  azLockName[] = {
11b90 0a 20 20 20 20 20 20 22 75 6e 6c 6f 63 6b 65 64  .      "unlocked
11ba0 22 2c 20 22 73 68 61 72 65 64 22 2c 20 22 72 65  ", "shared", "re
11bb0 73 65 72 76 65 64 22 2c 20 22 70 65 6e 64 69 6e  served", "pendin
11bc0 67 22 2c 20 22 65 78 63 6c 75 73 69 76 65 22 0a  g", "exclusive".
11bd0 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69      };.    int i
11be0 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
11bf0 65 6d 20 3d 20 32 3b 0a 20 20 20 20 66 6f 72 28  em = 2;.    for(
11c00 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
11c10 69 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65  i++){.      Btre
11c20 65 20 2a 70 42 74 3b 0a 20 20 20 20 20 20 63 6f  e *pBt;.      co
11c30 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 74 65  nst char *zState
11c40 20 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20   = "unknown";.  
11c50 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20      int j;.     
11c60 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e   if( db->aDb[i].
11c70 7a 44 62 53 4e 61 6d 65 3d 3d 30 20 29 20 63 6f  zDbSName==0 ) co
11c80 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 70 42  ntinue;.      pB
11c90 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  t = db->aDb[i].p
11ca0 42 74 3b 0a 20 20 20 20 20 20 69 66 28 20 70 42  Bt;.      if( pB
11cb0 74 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 42  t==0 || sqlite3B
11cc0 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3d 3d  treePager(pBt)==
11cd0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 53 74  0 ){.        zSt
11ce0 61 74 65 20 3d 20 22 63 6c 6f 73 65 64 22 3b 0a  ate = "closed";.
11cf0 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
11d00 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
11d10 74 72 6f 6c 28 64 62 2c 20 69 20 3f 20 64 62 2d  trol(db, i ? db-
11d20 3e 61 44 62 5b 69 5d 2e 7a 44 62 53 4e 61 6d 65  >aDb[i].zDbSName
11d30 20 3a 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20   : 0, .         
11d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d50 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
11d60 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54 41  TE_FCNTL_LOCKSTA
11d70 54 45 2c 20 26 6a 29 3d 3d 53 51 4c 49 54 45 5f  TE, &j)==SQLITE_
11d80 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 7a  OK ){.         z
11d90 53 74 61 74 65 20 3d 20 61 7a 4c 6f 63 6b 4e 61  State = azLockNa
11da0 6d 65 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 0a 20  me[j];.      }. 
11db0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11dc0 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20  MultiLoad(v, 1, 
11dd0 22 73 73 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d  "ss", db->aDb[i]
11de0 2e 7a 44 62 53 4e 61 6d 65 2c 20 7a 53 74 61 74  .zDbSName, zStat
11df0 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72  e);.    }.    br
11e00 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
11e10 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48  .#ifdef SQLITE_H
11e20 41 53 5f 43 4f 44 45 43 0a 20 20 63 61 73 65 20  AS_CODEC.  case 
11e30 50 72 61 67 54 79 70 5f 4b 45 59 3a 20 7b 0a 20  PragTyp_KEY: {. 
11e40 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 20     if( zRight ) 
11e50 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64  sqlite3_key_v2(d
11e60 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20  b, zDb, zRight, 
11e70 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
11e80 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62 72  zRight));.    br
11e90 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20  eak;.  }.  case 
11ea0 50 72 61 67 54 79 70 5f 52 45 4b 45 59 3a 20 7b  PragTyp_REKEY: {
11eb0 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
11ec0 29 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 5f  ) sqlite3_rekey_
11ed0 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67  v2(db, zDb, zRig
11ee0 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65  ht, sqlite3Strle
11ef0 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  n30(zRight));.  
11f00 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63    break;.  }.  c
11f10 61 73 65 20 50 72 61 67 54 79 70 5f 48 45 58 4b  ase PragTyp_HEXK
11f20 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  EY: {.    if( zR
11f30 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 75 38  ight ){.      u8
11f40 20 69 42 79 74 65 3b 0a 20 20 20 20 20 20 69 6e   iByte;.      in
11f50 74 20 69 3b 0a 20 20 20 20 20 20 63 68 61 72 20  t i;.      char 
11f60 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20 20 20 20 20  zKey[40];.      
11f70 66 6f 72 28 69 3d 30 2c 20 69 42 79 74 65 3d 30  for(i=0, iByte=0
11f80 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 4b 65 79 29  ; i<sizeof(zKey)
11f90 2a 32 20 26 26 20 73 71 6c 69 74 65 33 49 73 78  *2 && sqlite3Isx
11fa0 64 69 67 69 74 28 7a 52 69 67 68 74 5b 69 5d 29  digit(zRight[i])
11fb0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
11fc0 69 42 79 74 65 20 3d 20 28 69 42 79 74 65 3c 3c  iByte = (iByte<<
11fd0 34 29 20 2b 20 73 71 6c 69 74 65 33 48 65 78 54  4) + sqlite3HexT
11fe0 6f 49 6e 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b  oInt(zRight[i]);
11ff0 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 69 26  .        if( (i&
12000 31 29 21 3d 30 20 29 20 7a 4b 65 79 5b 69 2f 32  1)!=0 ) zKey[i/2
12010 5d 20 3d 20 69 42 79 74 65 3b 0a 20 20 20 20 20  ] = iByte;.     
12020 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 7a 4c   }.      if( (zL
12030 65 66 74 5b 33 5d 20 26 20 30 78 66 29 3d 3d 30  eft[3] & 0xf)==0
12040 78 62 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  xb ){.        sq
12050 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c  lite3_key_v2(db,
12060 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29   zDb, zKey, i/2)
12070 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
12080 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
12090 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c  ekey_v2(db, zDb,
120a0 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20   zKey, i/2);.   
120b0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
120c0 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
120d0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
120e0 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 20 7c  ITE_HAS_CODEC) |
120f0 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
12100 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 29 0a 20  _ENABLE_CEROD). 
12110 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 41 43   case PragTyp_AC
12120 54 49 56 41 54 45 5f 45 58 54 45 4e 53 49 4f 4e  TIVATE_EXTENSION
12130 53 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b  S: if( zRight ){
12140 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48  .#ifdef SQLITE_H
12150 41 53 5f 43 4f 44 45 43 0a 20 20 20 20 69 66 28  AS_CODEC.    if(
12160 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
12170 28 7a 52 69 67 68 74 2c 20 22 73 65 65 2d 22 2c  (zRight, "see-",
12180 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20   4)==0 ){.      
12190 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65  sqlite3_activate
121a0 5f 73 65 65 28 26 7a 52 69 67 68 74 5b 34 5d 29  _see(&zRight[4])
121b0 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23  ;.    }.#endif.#
121c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
121d0 42 4c 45 5f 43 45 52 4f 44 0a 20 20 20 20 69 66  BLE_CEROD.    if
121e0 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  ( sqlite3StrNICm
121f0 70 28 7a 52 69 67 68 74 2c 20 22 63 65 72 6f 64  p(zRight, "cerod
12200 2d 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20 20 20  -", 6)==0 ){.   
12210 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76     sqlite3_activ
12220 61 74 65 5f 63 65 72 6f 64 28 26 7a 52 69 67 68  ate_cerod(&zRigh
12230 74 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  t[6]);.    }.#en
12240 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
12250 0a 23 65 6e 64 69 66 0a 0a 20 20 7d 20 2f 2a 20  .#endif..  } /* 
12260 45 6e 64 20 6f 66 20 74 68 65 20 50 52 41 47 4d  End of the PRAGM
12270 41 20 73 77 69 74 63 68 20 2a 2f 0a 0a 20 20 2f  A switch */..  /
12280 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
12290 62 6c 6f 63 6b 20 69 73 20 61 20 6e 6f 2d 6f 70  block is a no-op
122a0 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f 44   unless SQLITE_D
122b0 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e  EBUG is defined.
122c0 20 49 74 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20 70   Its only.  ** p
122d0 75 72 70 6f 73 65 20 69 73 20 74 6f 20 65 78 65  urpose is to exe
122e0 63 75 74 65 20 61 73 73 65 72 74 28 29 20 73 74  cute assert() st
122f0 61 74 65 6d 65 6e 74 73 20 74 6f 20 76 65 72 69  atements to veri
12300 66 79 20 74 68 61 74 20 69 66 20 74 68 65 0a 20  fy that if the. 
12310 20 2a 2a 20 50 72 61 67 46 6c 67 5f 4e 6f 43 6f   ** PragFlg_NoCo
12320 6c 75 6d 6e 73 31 20 66 6c 61 67 20 69 73 20 73  lumns1 flag is s
12330 65 74 20 61 6e 64 20 74 68 65 20 63 61 6c 6c 65  et and the calle
12340 72 20 73 70 65 63 69 66 69 65 64 20 61 6e 20 61  r specified an a
12350 72 67 75 6d 65 6e 74 0a 20 20 2a 2a 20 74 6f 20  rgument.  ** to 
12360 74 68 65 20 50 52 41 47 4d 41 2c 20 74 68 65 20  the PRAGMA, the 
12370 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 68  implementation h
12380 61 73 20 6e 6f 74 20 61 64 64 65 64 20 61 6e 79  as not added any
12390 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 20 0a 20   OP_ResultRow . 
123a0 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 73   ** instructions
123b0 20 74 6f 20 74 68 65 20 56 4d 2e 20 20 2a 2f 0a   to the VM.  */.
123c0 20 20 69 66 28 20 28 70 50 72 61 67 6d 61 2d 3e    if( (pPragma->
123d0 6d 50 72 61 67 46 6c 67 20 26 20 50 72 61 67 46  mPragFlg & PragF
123e0 6c 67 5f 4e 6f 43 6f 6c 75 6d 6e 73 31 29 20 26  lg_NoColumns1) &
123f0 26 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  & zRight ){.    
12400 73 71 6c 69 74 65 33 56 64 62 65 56 65 72 69 66  sqlite3VdbeVerif
12410 79 4e 6f 52 65 73 75 6c 74 52 6f 77 28 76 29 3b  yNoResultRow(v);
12420 0a 20 20 7d 0a 0a 70 72 61 67 6d 61 5f 6f 75 74  .  }..pragma_out
12430 3a 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  :.  sqlite3DbFre
12440 65 28 64 62 2c 20 7a 4c 65 66 74 29 3b 0a 20 20  e(db, zLeft);.  
12450 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
12460 2c 20 7a 52 69 67 68 74 29 3b 0a 7d 0a 23 69 66  , zRight);.}.#if
12470 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
12480 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
12490 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
124a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
124b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
124c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
124d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
124e0 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  Implementation o
124f0 66 20 61 6e 20 65 70 6f 6e 79 6d 6f 75 73 20 76  f an eponymous v
12500 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74 68 61  irtual table tha
12510 74 20 72 75 6e 73 20 61 20 70 72 61 67 6d 61 2e  t runs a pragma.
12520 0a 2a 2a 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .**.*/.typedef s
12530 74 72 75 63 74 20 50 72 61 67 6d 61 56 74 61 62  truct PragmaVtab
12540 20 50 72 61 67 6d 61 56 74 61 62 3b 0a 74 79 70   PragmaVtab;.typ
12550 65 64 65 66 20 73 74 72 75 63 74 20 50 72 61 67  edef struct Prag
12560 6d 61 56 74 61 62 43 75 72 73 6f 72 20 50 72 61  maVtabCursor Pra
12570 67 6d 61 56 74 61 62 43 75 72 73 6f 72 3b 0a 73  gmaVtabCursor;.s
12580 74 72 75 63 74 20 50 72 61 67 6d 61 56 74 61 62  truct PragmaVtab
12590 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
125a0 62 20 62 61 73 65 3b 20 20 20 20 20 20 20 20 2f  b base;        /
125b0 2a 20 42 61 73 65 20 63 6c 61 73 73 2e 20 20 4d  * Base class.  M
125c0 75 73 74 20 62 65 20 66 69 72 73 74 20 2a 2f 0a  ust be first */.
125d0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
125e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
125f0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
12600 65 63 74 69 6f 6e 20 74 6f 20 77 68 69 63 68 20  ection to which 
12610 69 74 20 62 65 6c 6f 6e 67 73 20 2a 2f 0a 20 20  it belongs */.  
12620 63 6f 6e 73 74 20 50 72 61 67 6d 61 4e 61 6d 65  const PragmaName
12630 20 2a 70 4e 61 6d 65 3b 20 20 2f 2a 20 4e 61 6d   *pName;  /* Nam
12640 65 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61 20  e of the pragma 
12650 2a 2f 0a 20 20 75 38 20 6e 48 69 64 64 65 6e 3b  */.  u8 nHidden;
12660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12670 2a 20 4e 75 6d 62 65 72 20 6f 66 20 68 69 64 64  * Number of hidd
12680 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  en columns */.  
12690 75 38 20 69 48 69 64 64 65 6e 3b 20 20 20 20 20  u8 iHidden;     
126a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
126b0 65 78 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  ex of the first 
126c0 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 2a 2f  hidden column */
126d0 0a 7d 3b 0a 73 74 72 75 63 74 20 50 72 61 67 6d  .};.struct Pragm
126e0 61 56 74 61 62 43 75 72 73 6f 72 20 7b 0a 20 20  aVtabCursor {.  
126f0 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
12700 73 6f 72 20 62 61 73 65 3b 20 2f 2a 20 42 61 73  sor base; /* Bas
12710 65 20 63 6c 61 73 73 2e 20 20 4d 75 73 74 20 62  e class.  Must b
12720 65 20 66 69 72 73 74 20 2a 2f 0a 20 20 73 71 6c  e first */.  sql
12730 69 74 65 33 5f 73 74 6d 74 20 2a 70 50 72 61 67  ite3_stmt *pPrag
12740 6d 61 3b 20 20 20 20 2f 2a 20 54 68 65 20 70 72  ma;    /* The pr
12750 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 20 74  agma statement t
12760 6f 20 72 75 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  o run */.  sqlit
12770 65 5f 69 6e 74 36 34 20 69 52 6f 77 69 64 3b 20  e_int64 iRowid; 
12780 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
12790 72 6f 77 69 64 20 2a 2f 0a 20 20 63 68 61 72 20  rowid */.  char 
127a0 2a 61 7a 41 72 67 5b 32 5d 3b 20 20 20 20 20 20  *azArg[2];      
127b0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
127c0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 61 6e   the argument an
127d0 64 20 73 63 68 65 6d 61 20 2a 2f 0a 7d 3b 0a 0a  d schema */.};..
127e0 2f 2a 20 0a 2a 2a 20 50 72 61 67 6d 61 20 76 69  /* .** Pragma vi
127f0 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75  rtual table modu
12800 6c 65 20 78 43 6f 6e 6e 65 63 74 20 6d 65 74 68  le xConnect meth
12810 6f 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  od..*/.static in
12820 74 20 70 72 61 67 6d 61 56 74 61 62 43 6f 6e 6e  t pragmaVtabConn
12830 65 63 74 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ect(.  sqlite3 *
12840 64 62 2c 0a 20 20 76 6f 69 64 20 2a 70 41 75 78  db,.  void *pAux
12850 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 63 6f  ,.  int argc, co
12860 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 2a  nst char *const*
12870 61 72 67 76 2c 0a 20 20 73 71 6c 69 74 65 33 5f  argv,.  sqlite3_
12880 76 74 61 62 20 2a 2a 70 70 56 74 61 62 2c 0a 20  vtab **ppVtab,. 
12890 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 0a 29 7b   char **pzErr.){
128a0 0a 20 20 63 6f 6e 73 74 20 50 72 61 67 6d 61 4e  .  const PragmaN
128b0 61 6d 65 20 2a 70 50 72 61 67 6d 61 20 3d 20 28  ame *pPragma = (
128c0 63 6f 6e 73 74 20 50 72 61 67 6d 61 4e 61 6d 65  const PragmaName
128d0 2a 29 70 41 75 78 3b 0a 20 20 50 72 61 67 6d 61  *)pAux;.  Pragma
128e0 56 74 61 62 20 2a 70 54 61 62 20 3d 20 30 3b 0a  Vtab *pTab = 0;.
128f0 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
12900 69 2c 20 6a 3b 0a 20 20 63 68 61 72 20 63 53 65  i, j;.  char cSe
12910 70 20 3d 20 27 28 27 3b 0a 20 20 53 74 72 41 63  p = '(';.  StrAc
12920 63 75 6d 20 61 63 63 3b 0a 20 20 63 68 61 72 20  cum acc;.  char 
12930 7a 42 75 66 5b 32 30 30 5d 3b 0a 0a 20 20 55 4e  zBuf[200];..  UN
12940 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 61  USED_PARAMETER(a
12950 72 67 63 29 3b 0a 20 20 55 4e 55 53 45 44 5f 50  rgc);.  UNUSED_P
12960 41 52 41 4d 45 54 45 52 28 61 72 67 76 29 3b 0a  ARAMETER(argv);.
12970 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75    sqlite3StrAccu
12980 6d 49 6e 69 74 28 26 61 63 63 2c 20 30 2c 20 7a  mInit(&acc, 0, z
12990 42 75 66 2c 20 73 69 7a 65 6f 66 28 7a 42 75 66  Buf, sizeof(zBuf
129a0 29 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33  ), 0);.  sqlite3
129b0 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c  StrAccumAppendAl
129c0 6c 28 26 61 63 63 2c 20 22 43 52 45 41 54 45 20  l(&acc, "CREATE 
129d0 54 41 42 4c 45 20 78 22 29 3b 0a 20 20 66 6f 72  TABLE x");.  for
129e0 28 69 3d 30 2c 20 6a 3d 70 50 72 61 67 6d 61 2d  (i=0, j=pPragma-
129f0 3e 69 50 72 61 67 43 4e 61 6d 65 3b 20 69 3c 70  >iPragCName; i<p
12a00 50 72 61 67 6d 61 2d 3e 6e 50 72 61 67 43 4e 61  Pragma->nPragCNa
12a10 6d 65 3b 20 69 2b 2b 2c 20 6a 2b 2b 29 7b 0a 20  me; i++, j++){. 
12a20 20 20 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74     sqlite3XPrint
12a30 66 28 26 61 63 63 2c 20 22 25 63 5c 22 25 73 5c  f(&acc, "%c\"%s\
12a40 22 22 2c 20 63 53 65 70 2c 20 70 72 61 67 43 4e  "", cSep, pragCN
12a50 61 6d 65 5b 6a 5d 29 3b 0a 20 20 20 20 63 53 65  ame[j]);.    cSe
12a60 70 20 3d 20 27 2c 27 3b 0a 20 20 7d 0a 20 20 69  p = ',';.  }.  i
12a70 66 28 20 69 3d 3d 30 20 29 7b 0a 20 20 20 20 73  f( i==0 ){.    s
12a80 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 26 61  qlite3XPrintf(&a
12a90 63 63 2c 20 22 28 5c 22 25 73 5c 22 22 2c 20 70  cc, "(\"%s\"", p
12aa0 50 72 61 67 6d 61 2d 3e 7a 4e 61 6d 65 29 3b 0a  Pragma->zName);.
12ab0 20 20 20 20 63 53 65 70 20 3d 20 27 2c 27 3b 0a      cSep = ',';.
12ac0 20 20 20 20 69 2b 2b 3b 0a 20 20 7d 0a 20 20 6a      i++;.  }.  j
12ad0 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 50 72 61   = 0;.  if( pPra
12ae0 67 6d 61 2d 3e 6d 50 72 61 67 46 6c 67 20 26 20  gma->mPragFlg & 
12af0 50 72 61 67 46 6c 67 5f 52 65 73 75 6c 74 31 20  PragFlg_Result1 
12b00 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 74  ){.    sqlite3St
12b10 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28  rAccumAppendAll(
12b20 26 61 63 63 2c 20 22 2c 61 72 67 20 48 49 44 44  &acc, ",arg HIDD
12b30 45 4e 22 29 3b 0a 20 20 20 20 6a 2b 2b 3b 0a 20  EN");.    j++;. 
12b40 20 7d 0a 20 20 69 66 28 20 70 50 72 61 67 6d 61   }.  if( pPragma
12b50 2d 3e 6d 50 72 61 67 46 6c 67 20 26 20 28 50 72  ->mPragFlg & (Pr
12b60 61 67 46 6c 67 5f 53 63 68 65 6d 61 4f 70 74 7c  agFlg_SchemaOpt|
12b70 50 72 61 67 46 6c 67 5f 53 63 68 65 6d 61 52 65  PragFlg_SchemaRe
12b80 71 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  q) ){.    sqlite
12b90 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41  3StrAccumAppendA
12ba0 6c 6c 28 26 61 63 63 2c 20 22 2c 73 63 68 65 6d  ll(&acc, ",schem
12bb0 61 20 48 49 44 44 45 4e 22 29 3b 0a 20 20 20 20  a HIDDEN");.    
12bc0 6a 2b 2b 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  j++;.  }.  sqlit
12bd0 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
12be0 28 26 61 63 63 2c 20 22 29 22 2c 20 31 29 3b 0a  (&acc, ")", 1);.
12bf0 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75    sqlite3StrAccu
12c00 6d 46 69 6e 69 73 68 28 26 61 63 63 29 3b 0a 20  mFinish(&acc);. 
12c10 20 61 73 73 65 72 74 28 20 73 74 72 6c 65 6e 28   assert( strlen(
12c20 7a 42 75 66 29 20 3c 20 73 69 7a 65 6f 66 28 7a  zBuf) < sizeof(z
12c30 42 75 66 29 2d 31 20 29 3b 0a 20 20 72 63 20 3d  Buf)-1 );.  rc =
12c40 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
12c50 5f 76 74 61 62 28 64 62 2c 20 7a 42 75 66 29 3b  _vtab(db, zBuf);
12c60 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
12c70 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 54 61 62  E_OK ){.    pTab
12c80 20 3d 20 28 50 72 61 67 6d 61 56 74 61 62 2a 29   = (PragmaVtab*)
12c90 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 73  sqlite3_malloc(s
12ca0 69 7a 65 6f 66 28 50 72 61 67 6d 61 56 74 61 62  izeof(PragmaVtab
12cb0 29 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62  ));.    if( pTab
12cc0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
12cd0 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
12ce0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12cf0 20 6d 65 6d 73 65 74 28 70 54 61 62 2c 20 30 2c   memset(pTab, 0,
12d00 20 73 69 7a 65 6f 66 28 50 72 61 67 6d 61 56 74   sizeof(PragmaVt
12d10 61 62 29 29 3b 0a 20 20 20 20 20 20 70 54 61 62  ab));.      pTab
12d20 2d 3e 70 4e 61 6d 65 20 3d 20 70 50 72 61 67 6d  ->pName = pPragm
12d30 61 3b 0a 20 20 20 20 20 20 70 54 61 62 2d 3e 64  a;.      pTab->d
12d40 62 20 3d 20 64 62 3b 0a 20 20 20 20 20 20 70 54  b = db;.      pT
12d50 61 62 2d 3e 69 48 69 64 64 65 6e 20 3d 20 69 3b  ab->iHidden = i;
12d60 0a 20 20 20 20 20 20 70 54 61 62 2d 3e 6e 48 69  .      pTab->nHi
12d70 64 64 65 6e 20 3d 20 6a 3b 0a 20 20 20 20 7d 0a  dden = j;.    }.
12d80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 70 7a    }else{.    *pz
12d90 45 72 72 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  Err = sqlite3_mp
12da0 72 69 6e 74 66 28 22 25 73 22 2c 20 73 71 6c 69  rintf("%s", sqli
12db0 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 29 3b  te3_errmsg(db));
12dc0 0a 20 20 7d 0a 0a 20 20 2a 70 70 56 74 61 62 20  .  }..  *ppVtab 
12dd0 3d 20 28 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  = (sqlite3_vtab*
12de0 29 70 54 61 62 3b 0a 20 20 72 65 74 75 72 6e 20  )pTab;.  return 
12df0 72 63 3b 0a 7d 0a 0a 2f 2a 20 0a 2a 2a 20 50 72  rc;.}../* .** Pr
12e00 61 67 6d 61 20 76 69 72 74 75 61 6c 20 74 61 62  agma virtual tab
12e10 6c 65 20 6d 6f 64 75 6c 65 20 78 44 69 73 63 6f  le module xDisco
12e20 6e 6e 65 63 74 20 6d 65 74 68 6f 64 2e 0a 2a 2f  nnect method..*/
12e30 0a 73 74 61 74 69 63 20 69 6e 74 20 70 72 61 67  .static int prag
12e40 6d 61 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74  maVtabDisconnect
12e50 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70  (sqlite3_vtab *p
12e60 56 74 61 62 29 7b 0a 20 20 50 72 61 67 6d 61 56  Vtab){.  PragmaV
12e70 74 61 62 20 2a 70 54 61 62 20 3d 20 28 50 72 61  tab *pTab = (Pra
12e80 67 6d 61 56 74 61 62 2a 29 70 56 74 61 62 3b 0a  gmaVtab*)pVtab;.
12e90 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70    sqlite3_free(p
12ea0 54 61 62 29 3b 0a 20 20 72 65 74 75 72 6e 20 53  Tab);.  return S
12eb0 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 20  QLITE_OK;.}../* 
12ec0 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 62  Figure out the b
12ed0 65 73 74 20 69 6e 64 65 78 20 74 6f 20 75 73 65  est index to use
12ee0 20 74 6f 20 73 65 61 72 63 68 20 61 20 70 72 61   to search a pra
12ef0 67 6d 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  gma virtual tabl
12f00 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 61  e..**.** There a
12f10 72 65 20 6e 6f 74 20 72 65 61 6c 6c 79 20 61 6e  re not really an
12f20 79 20 69 6e 64 65 78 20 63 68 6f 69 63 65 73 2e  y index choices.
12f30 20 20 42 75 74 20 77 65 20 77 61 6e 74 20 74 6f    But we want to
12f40 20 65 6e 63 6f 75 72 61 67 65 20 74 68 65 0a 2a   encourage the.*
12f50 2a 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  * query planner 
12f60 74 6f 20 67 69 76 65 20 3d 3d 20 63 6f 6e 73 74  to give == const
12f70 72 61 69 6e 74 73 20 6f 6e 20 61 73 20 6d 61 6e  raints on as man
12f80 79 20 68 69 64 64 65 6e 20 70 61 72 61 6d 65 74  y hidden paramet
12f90 65 72 73 20 61 73 0a 2a 2a 20 70 6f 73 73 69 62  ers as.** possib
12fa0 6c 65 2c 20 61 6e 64 20 65 73 70 65 63 69 61 6c  le, and especial
12fb0 6c 79 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20  ly on the first 
12fc0 68 69 64 64 65 6e 20 70 61 72 61 6d 65 74 65 72  hidden parameter
12fd0 2e 20 20 53 6f 20 72 65 74 75 72 6e 20 61 0a 2a  .  So return a.*
12fe0 2a 20 68 69 67 68 20 63 6f 73 74 20 69 66 20 68  * high cost if h
12ff0 69 64 64 65 6e 20 70 61 72 61 6d 65 74 65 72 73  idden parameters
13000 20 61 72 65 20 75 6e 63 6f 6e 73 74 72 61 69 6e   are unconstrain
13010 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ed..*/.static in
13020 74 20 70 72 61 67 6d 61 56 74 61 62 42 65 73 74  t pragmaVtabBest
13030 49 6e 64 65 78 28 73 71 6c 69 74 65 33 5f 76 74  Index(sqlite3_vt
13040 61 62 20 2a 74 61 62 2c 20 73 71 6c 69 74 65 33  ab *tab, sqlite3
13050 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 2a 70 49 64  _index_info *pId
13060 78 49 6e 66 6f 29 7b 0a 20 20 50 72 61 67 6d 61  xInfo){.  Pragma
13070 56 74 61 62 20 2a 70 54 61 62 20 3d 20 28 50 72  Vtab *pTab = (Pr
13080 61 67 6d 61 56 74 61 62 2a 29 74 61 62 3b 0a 20  agmaVtab*)tab;. 
13090 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73 71   const struct sq
130a0 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73  lite3_index_cons
130b0 74 72 61 69 6e 74 20 2a 70 43 6f 6e 73 74 72 61  traint *pConstra
130c0 69 6e 74 3b 0a 20 20 69 6e 74 20 69 2c 20 6a 3b  int;.  int i, j;
130d0 0a 20 20 69 6e 74 20 73 65 65 6e 5b 32 5d 3b 0a  .  int seen[2];.
130e0 0a 20 20 70 49 64 78 49 6e 66 6f 2d 3e 65 73 74  .  pIdxInfo->est
130f0 69 6d 61 74 65 64 43 6f 73 74 20 3d 20 28 64 6f  imatedCost = (do
13100 75 62 6c 65 29 31 3b 0a 20 20 69 66 28 20 70 54  uble)1;.  if( pT
13110 61 62 2d 3e 6e 48 69 64 64 65 6e 3d 3d 30 20 29  ab->nHidden==0 )
13120 7b 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  { return SQLITE_
13130 4f 4b 3b 20 7d 0a 20 20 70 43 6f 6e 73 74 72 61  OK; }.  pConstra
13140 69 6e 74 20 3d 20 70 49 64 78 49 6e 66 6f 2d 3e  int = pIdxInfo->
13150 61 43 6f 6e 73 74 72 61 69 6e 74 3b 0a 20 20 73  aConstraint;.  s
13160 65 65 6e 5b 30 5d 20 3d 20 30 3b 0a 20 20 73 65  een[0] = 0;.  se
13170 65 6e 5b 31 5d 20 3d 20 30 3b 0a 20 20 66 6f 72  en[1] = 0;.  for
13180 28 69 3d 30 3b 20 69 3c 70 49 64 78 49 6e 66 6f  (i=0; i<pIdxInfo
13190 2d 3e 6e 43 6f 6e 73 74 72 61 69 6e 74 3b 20 69  ->nConstraint; i
131a0 2b 2b 2c 20 70 43 6f 6e 73 74 72 61 69 6e 74 2b  ++, pConstraint+
131b0 2b 29 7b 0a 20 20 20 20 69 66 28 20 70 43 6f 6e  +){.    if( pCon
131c0 73 74 72 61 69 6e 74 2d 3e 75 73 61 62 6c 65 3d  straint->usable=
131d0 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
131e0 20 20 20 69 66 28 20 70 43 6f 6e 73 74 72 61 69     if( pConstrai
131f0 6e 74 2d 3e 6f 70 21 3d 53 51 4c 49 54 45 5f 49  nt->op!=SQLITE_I
13200 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f  NDEX_CONSTRAINT_
13210 45 51 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  EQ ) continue;. 
13220 20 20 20 69 66 28 20 70 43 6f 6e 73 74 72 61 69     if( pConstrai
13230 6e 74 2d 3e 69 43 6f 6c 75 6d 6e 20 3c 20 70 54  nt->iColumn < pT
13240 61 62 2d 3e 69 48 69 64 64 65 6e 20 29 20 63 6f  ab->iHidden ) co
13250 6e 74 69 6e 75 65 3b 0a 20 20 20 20 6a 20 3d 20  ntinue;.    j = 
13260 70 43 6f 6e 73 74 72 61 69 6e 74 2d 3e 69 43 6f  pConstraint->iCo
13270 6c 75 6d 6e 20 2d 20 70 54 61 62 2d 3e 69 48 69  lumn - pTab->iHi
13280 64 64 65 6e 3b 0a 20 20 20 20 61 73 73 65 72 74  dden;.    assert
13290 28 20 6a 20 3c 20 32 20 29 3b 0a 20 20 20 20 73  ( j < 2 );.    s
132a0 65 65 6e 5b 6a 5d 20 3d 20 69 2b 31 3b 0a 20 20  een[j] = i+1;.  
132b0 7d 0a 20 20 69 66 28 20 73 65 65 6e 5b 30 5d 3d  }.  if( seen[0]=
132c0 3d 30 20 29 7b 0a 20 20 20 20 70 49 64 78 49 6e  =0 ){.    pIdxIn
132d0 66 6f 2d 3e 65 73 74 69 6d 61 74 65 64 43 6f 73  fo->estimatedCos
132e0 74 20 3d 20 28 64 6f 75 62 6c 65 29 32 31 34 37  t = (double)2147
132f0 34 38 33 36 34 37 3b 0a 20 20 20 20 70 49 64 78  483647;.    pIdx
13300 49 6e 66 6f 2d 3e 65 73 74 69 6d 61 74 65 64 52  Info->estimatedR
13310 6f 77 73 20 3d 20 32 31 34 37 34 38 33 36 34 37  ows = 2147483647
13320 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  ;.    return SQL
13330 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 6a 20  ITE_OK;.  }.  j 
13340 3d 20 73 65 65 6e 5b 30 5d 2d 31 3b 0a 20 20 70  = seen[0]-1;.  p
13350 49 64 78 49 6e 66 6f 2d 3e 61 43 6f 6e 73 74 72  IdxInfo->aConstr
13360 61 69 6e 74 55 73 61 67 65 5b 6a 5d 2e 61 72 67  aintUsage[j].arg
13370 76 49 6e 64 65 78 20 3d 20 31 3b 0a 20 20 70 49  vIndex = 1;.  pI
13380 64 78 49 6e 66 6f 2d 3e 61 43 6f 6e 73 74 72 61  dxInfo->aConstra
13390 69 6e 74 55 73 61 67 65 5b 6a 5d 2e 6f 6d 69 74  intUsage[j].omit
133a0 20 3d 20 31 3b 0a 20 20 69 66 28 20 73 65 65 6e   = 1;.  if( seen
133b0 5b 31 5d 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  [1]==0 ) return 
133c0 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 49 64  SQLITE_OK;.  pId
133d0 78 49 6e 66 6f 2d 3e 65 73 74 69 6d 61 74 65 64  xInfo->estimated
133e0 43 6f 73 74 20 3d 20 28 64 6f 75 62 6c 65 29 32  Cost = (double)2
133f0 30 3b 0a 20 20 70 49 64 78 49 6e 66 6f 2d 3e 65  0;.  pIdxInfo->e
13400 73 74 69 6d 61 74 65 64 52 6f 77 73 20 3d 20 32  stimatedRows = 2
13410 30 3b 0a 20 20 6a 20 3d 20 73 65 65 6e 5b 31 5d  0;.  j = seen[1]
13420 2d 31 3b 0a 20 20 70 49 64 78 49 6e 66 6f 2d 3e  -1;.  pIdxInfo->
13430 61 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  aConstraintUsage
13440 5b 6a 5d 2e 61 72 67 76 49 6e 64 65 78 20 3d 20  [j].argvIndex = 
13450 32 3b 0a 20 20 70 49 64 78 49 6e 66 6f 2d 3e 61  2;.  pIdxInfo->a
13460 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 5b  ConstraintUsage[
13470 6a 5d 2e 6f 6d 69 74 20 3d 20 31 3b 0a 20 20 72  j].omit = 1;.  r
13480 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
13490 0a 7d 0a 0a 2f 2a 20 43 72 65 61 74 65 20 61 20  .}../* Create a 
134a0 6e 65 77 20 63 75 72 73 6f 72 20 66 6f 72 20 74  new cursor for t
134b0 68 65 20 70 72 61 67 6d 61 20 76 69 72 74 75 61  he pragma virtua
134c0 6c 20 74 61 62 6c 65 20 2a 2f 0a 73 74 61 74 69  l table */.stati
134d0 63 20 69 6e 74 20 70 72 61 67 6d 61 56 74 61 62  c int pragmaVtab
134e0 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 74 61  Open(sqlite3_vta
134f0 62 20 2a 70 56 74 61 62 2c 20 73 71 6c 69 74 65  b *pVtab, sqlite
13500 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 2a  3_vtab_cursor **
13510 70 70 43 75 72 73 6f 72 29 7b 0a 20 20 50 72 61  ppCursor){.  Pra
13520 67 6d 61 56 74 61 62 43 75 72 73 6f 72 20 2a 70  gmaVtabCursor *p
13530 43 73 72 3b 0a 20 20 70 43 73 72 20 3d 20 28 50  Csr;.  pCsr = (P
13540 72 61 67 6d 61 56 74 61 62 43 75 72 73 6f 72 2a  ragmaVtabCursor*
13550 29 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28  )sqlite3_malloc(
13560 73 69 7a 65 6f 66 28 2a 70 43 73 72 29 29 3b 0a  sizeof(*pCsr));.
13570 20 20 69 66 28 20 70 43 73 72 3d 3d 30 20 29 20    if( pCsr==0 ) 
13580 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f  return SQLITE_NO
13590 4d 45 4d 3b 0a 20 20 6d 65 6d 73 65 74 28 70 43  MEM;.  memset(pC
135a0 73 72 2c 20 30 2c 20 73 69 7a 65 6f 66 28 50 72  sr, 0, sizeof(Pr
135b0 61 67 6d 61 56 74 61 62 43 75 72 73 6f 72 29 29  agmaVtabCursor))
135c0 3b 0a 20 20 70 43 73 72 2d 3e 62 61 73 65 2e 70  ;.  pCsr->base.p
135d0 56 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 20 20  Vtab = pVtab;.  
135e0 2a 70 70 43 75 72 73 6f 72 20 3d 20 26 70 43 73  *ppCursor = &pCs
135f0 72 2d 3e 62 61 73 65 3b 0a 20 20 72 65 74 75 72  r->base;.  retur
13600 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
13610 2f 2a 20 43 6c 65 61 72 20 61 6c 6c 20 63 6f 6e  /* Clear all con
13620 74 65 6e 74 20 66 72 6f 6d 20 70 72 61 67 6d 61  tent from pragma
13630 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63   virtual table c
13640 75 72 73 6f 72 2e 20 2a 2f 0a 73 74 61 74 69 63  ursor. */.static
13650 20 76 6f 69 64 20 70 72 61 67 6d 61 56 74 61 62   void pragmaVtab
13660 43 75 72 73 6f 72 43 6c 65 61 72 28 50 72 61 67  CursorClear(Prag
13670 6d 61 56 74 61 62 43 75 72 73 6f 72 20 2a 70 43  maVtabCursor *pC
13680 73 72 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  sr){.  int i;.  
13690 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
136a0 28 70 43 73 72 2d 3e 70 50 72 61 67 6d 61 29 3b  (pCsr->pPragma);
136b0 0a 20 20 70 43 73 72 2d 3e 70 50 72 61 67 6d 61  .  pCsr->pPragma
136c0 20 3d 20 30 3b 0a 20 20 66 6f 72 28 69 3d 30 3b   = 0;.  for(i=0;
136d0 20 69 3c 41 72 72 61 79 53 69 7a 65 28 70 43 73   i<ArraySize(pCs
136e0 72 2d 3e 61 7a 41 72 67 29 3b 20 69 2b 2b 29 7b  r->azArg); i++){
136f0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
13700 65 28 70 43 73 72 2d 3e 61 7a 41 72 67 5b 69 5d  e(pCsr->azArg[i]
13710 29 3b 0a 20 20 20 20 70 43 73 72 2d 3e 61 7a 41  );.    pCsr->azA
13720 72 67 5b 69 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d  rg[i] = 0;.  }.}
13730 0a 0a 2f 2a 20 43 6c 6f 73 65 20 61 20 70 72 61  ../* Close a pra
13740 67 6d 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  gma virtual tabl
13750 65 20 63 75 72 73 6f 72 20 2a 2f 0a 73 74 61 74  e cursor */.stat
13760 69 63 20 69 6e 74 20 70 72 61 67 6d 61 56 74 61  ic int pragmaVta
13770 62 43 6c 6f 73 65 28 73 71 6c 69 74 65 33 5f 76  bClose(sqlite3_v
13780 74 61 62 5f 63 75 72 73 6f 72 20 2a 63 75 72 29  tab_cursor *cur)
13790 7b 0a 20 20 50 72 61 67 6d 61 56 74 61 62 43 75  {.  PragmaVtabCu
137a0 72 73 6f 72 20 2a 70 43 73 72 20 3d 20 28 50 72  rsor *pCsr = (Pr
137b0 61 67 6d 61 56 74 61 62 43 75 72 73 6f 72 2a 29  agmaVtabCursor*)
137c0 63 75 72 3b 0a 20 20 70 72 61 67 6d 61 56 74 61  cur;.  pragmaVta
137d0 62 43 75 72 73 6f 72 43 6c 65 61 72 28 70 43 73  bCursorClear(pCs
137e0 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  r);.  sqlite3_fr
137f0 65 65 28 70 43 73 72 29 3b 0a 20 20 72 65 74 75  ee(pCsr);.  retu
13800 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
13810 0a 2f 2a 20 41 64 76 61 6e 63 65 20 74 68 65 20  ./* Advance the 
13820 70 72 61 67 6d 61 20 76 69 72 74 75 61 6c 20 74  pragma virtual t
13830 61 62 6c 65 20 63 75 72 73 6f 72 20 74 6f 20 74  able cursor to t
13840 68 65 20 6e 65 78 74 20 72 6f 77 20 2a 2f 0a 73  he next row */.s
13850 74 61 74 69 63 20 69 6e 74 20 70 72 61 67 6d 61  tatic int pragma
13860 56 74 61 62 4e 65 78 74 28 73 71 6c 69 74 65 33  VtabNext(sqlite3
13870 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
13880 74 61 62 43 75 72 73 6f 72 29 7b 0a 20 20 50 72  tabCursor){.  Pr
13890 61 67 6d 61 56 74 61 62 43 75 72 73 6f 72 20 2a  agmaVtabCursor *
138a0 70 43 73 72 20 3d 20 28 50 72 61 67 6d 61 56 74  pCsr = (PragmaVt
138b0 61 62 43 75 72 73 6f 72 2a 29 70 56 74 61 62 43  abCursor*)pVtabC
138c0 75 72 73 6f 72 3b 0a 20 20 69 6e 74 20 72 63 20  ursor;.  int rc 
138d0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 0a 20 20  = SQLITE_OK;..  
138e0 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 20 74 68 65  /* Increment the
138f0 20 78 52 6f 77 69 64 20 76 61 6c 75 65 20 2a 2f   xRowid value */
13900 0a 20 20 70 43 73 72 2d 3e 69 52 6f 77 69 64 2b  .  pCsr->iRowid+
13910 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 73  +;.  assert( pCs
13920 72 2d 3e 70 50 72 61 67 6d 61 20 29 3b 0a 20 20  r->pPragma );.  
13930 69 66 28 20 53 51 4c 49 54 45 5f 52 4f 57 21 3d  if( SQLITE_ROW!=
13940 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 43 73  sqlite3_step(pCs
13950 72 2d 3e 70 50 72 61 67 6d 61 29 20 29 7b 0a 20  r->pPragma) ){. 
13960 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
13970 66 69 6e 61 6c 69 7a 65 28 70 43 73 72 2d 3e 70  finalize(pCsr->p
13980 50 72 61 67 6d 61 29 3b 0a 20 20 20 20 70 43 73  Pragma);.    pCs
13990 72 2d 3e 70 50 72 61 67 6d 61 20 3d 20 30 3b 0a  r->pPragma = 0;.
139a0 20 20 20 20 70 72 61 67 6d 61 56 74 61 62 43 75      pragmaVtabCu
139b0 72 73 6f 72 43 6c 65 61 72 28 70 43 73 72 29 3b  rsorClear(pCsr);
139c0 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
139d0 3b 0a 7d 0a 0a 2f 2a 20 0a 2a 2a 20 50 72 61 67  ;.}../* .** Prag
139e0 6d 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ma virtual table
139f0 20 6d 6f 64 75 6c 65 20 78 46 69 6c 74 65 72 20   module xFilter 
13a00 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 73 74 61 74 69  method..*/.stati
13a10 63 20 69 6e 74 20 70 72 61 67 6d 61 56 74 61 62  c int pragmaVtab
13a20 46 69 6c 74 65 72 28 0a 20 20 73 71 6c 69 74 65  Filter(.  sqlite
13a30 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
13a40 56 74 61 62 43 75 72 73 6f 72 2c 20 0a 20 20 69  VtabCursor, .  i
13a50 6e 74 20 69 64 78 4e 75 6d 2c 20 63 6f 6e 73 74  nt idxNum, const
13a60 20 63 68 61 72 20 2a 69 64 78 53 74 72 2c 0a 20   char *idxStr,. 
13a70 20 69 6e 74 20 61 72 67 63 2c 20 73 71 6c 69 74   int argc, sqlit
13a80 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a  e3_value **argv.
13a90 29 7b 0a 20 20 50 72 61 67 6d 61 56 74 61 62 43  ){.  PragmaVtabC
13aa0 75 72 73 6f 72 20 2a 70 43 73 72 20 3d 20 28 50  ursor *pCsr = (P
13ab0 72 61 67 6d 61 56 74 61 62 43 75 72 73 6f 72 2a  ragmaVtabCursor*
13ac0 29 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20  )pVtabCursor;.  
13ad0 50 72 61 67 6d 61 56 74 61 62 20 2a 70 54 61 62  PragmaVtab *pTab
13ae0 20 3d 20 28 50 72 61 67 6d 61 56 74 61 62 2a 29   = (PragmaVtab*)
13af0 28 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56  (pVtabCursor->pV
13b00 74 61 62 29 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  tab);.  int rc;.
13b10 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 53 74    int i, j;.  St
13b20 72 41 63 63 75 6d 20 61 63 63 3b 0a 20 20 63 68  rAccum acc;.  ch
13b30 61 72 20 2a 7a 53 71 6c 3b 0a 0a 20 20 55 4e 55  ar *zSql;..  UNU
13b40 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 69 64  SED_PARAMETER(id
13b50 78 4e 75 6d 29 3b 0a 20 20 55 4e 55 53 45 44 5f  xNum);.  UNUSED_
13b60 50 41 52 41 4d 45 54 45 52 28 69 64 78 53 74 72  PARAMETER(idxStr
13b70 29 3b 0a 20 20 70 72 61 67 6d 61 56 74 61 62 43  );.  pragmaVtabC
13b80 75 72 73 6f 72 43 6c 65 61 72 28 70 43 73 72 29  ursorClear(pCsr)
13b90 3b 0a 20 20 6a 20 3d 20 28 70 54 61 62 2d 3e 70  ;.  j = (pTab->p
13ba0 4e 61 6d 65 2d 3e 6d 50 72 61 67 46 6c 67 20 26  Name->mPragFlg &
13bb0 20 50 72 61 67 46 6c 67 5f 52 65 73 75 6c 74 31   PragFlg_Result1
13bc0 29 21 3d 30 20 3f 20 30 20 3a 20 31 3b 0a 20 20  )!=0 ? 0 : 1;.  
13bd0 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b  for(i=0; i<argc;
13be0 20 69 2b 2b 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20   i++, j++){.    
13bf0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 65 78  const char *zTex
13c00 74 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  t = (const char*
13c10 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
13c20 65 78 74 28 61 72 67 76 5b 69 5d 29 3b 0a 20 20  ext(argv[i]);.  
13c30 20 20 61 73 73 65 72 74 28 20 6a 3c 41 72 72 61    assert( j<Arra
13c40 79 53 69 7a 65 28 70 43 73 72 2d 3e 61 7a 41 72  ySize(pCsr->azAr
13c50 67 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  g) );.    assert
13c60 28 20 70 43 73 72 2d 3e 61 7a 41 72 67 5b 6a 5d  ( pCsr->azArg[j]
13c70 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 7a  ==0 );.    if( z
13c80 54 65 78 74 20 29 7b 0a 20 20 20 20 20 20 70 43  Text ){.      pC
13c90 73 72 2d 3e 61 7a 41 72 67 5b 6a 5d 20 3d 20 73  sr->azArg[j] = s
13ca0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
13cb0 25 73 22 2c 20 7a 54 65 78 74 29 3b 0a 20 20 20  %s", zText);.   
13cc0 20 20 20 69 66 28 20 70 43 73 72 2d 3e 61 7a 41     if( pCsr->azA
13cd0 72 67 5b 6a 5d 3d 3d 30 20 29 7b 0a 20 20 20 20  rg[j]==0 ){.    
13ce0 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
13cf0 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20 7d  E_NOMEM;.      }
13d00 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c  .    }.  }.  sql
13d10 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74  ite3StrAccumInit
13d20 28 26 61 63 63 2c 20 30 2c 20 30 2c 20 30 2c 20  (&acc, 0, 0, 0, 
13d30 70 54 61 62 2d 3e 64 62 2d 3e 61 4c 69 6d 69 74  pTab->db->aLimit
13d40 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 53 51  [SQLITE_LIMIT_SQ
13d50 4c 5f 4c 45 4e 47 54 48 5d 29 3b 0a 20 20 73 71  L_LENGTH]);.  sq
13d60 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70  lite3StrAccumApp
13d70 65 6e 64 41 6c 6c 28 26 61 63 63 2c 20 22 50 52  endAll(&acc, "PR
13d80 41 47 4d 41 20 22 29 3b 0a 20 20 69 66 28 20 70  AGMA ");.  if( p
13d90 43 73 72 2d 3e 61 7a 41 72 67 5b 31 5d 20 29 7b  Csr->azArg[1] ){
13da0 0a 20 20 20 20 73 71 6c 69 74 65 33 58 50 72 69  .    sqlite3XPri
13db0 6e 74 66 28 26 61 63 63 2c 20 22 25 51 2e 22 2c  ntf(&acc, "%Q.",
13dc0 20 70 43 73 72 2d 3e 61 7a 41 72 67 5b 31 5d 29   pCsr->azArg[1])
13dd0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 53  ;.  }.  sqlite3S
13de0 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c  trAccumAppendAll
13df0 28 26 61 63 63 2c 20 70 54 61 62 2d 3e 70 4e 61  (&acc, pTab->pNa
13e00 6d 65 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 69 66  me->zName);.  if
13e10 28 20 70 43 73 72 2d 3e 61 7a 41 72 67 5b 30 5d  ( pCsr->azArg[0]
13e20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 58   ){.    sqlite3X
13e30 50 72 69 6e 74 66 28 26 61 63 63 2c 20 22 3d 25  Printf(&acc, "=%
13e40 51 22 2c 20 70 43 73 72 2d 3e 61 7a 41 72 67 5b  Q", pCsr->azArg[
13e50 30 5d 29 3b 0a 20 20 7d 0a 20 20 7a 53 71 6c 20  0]);.  }.  zSql 
13e60 3d 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  = sqlite3StrAccu
13e70 6d 46 69 6e 69 73 68 28 26 61 63 63 29 3b 0a 20  mFinish(&acc);. 
13e80 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 20 72   if( zSql==0 ) r
13e90 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d  eturn SQLITE_NOM
13ea0 45 4d 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  EM;.  rc = sqlit
13eb0 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 70 54  e3_prepare_v2(pT
13ec0 61 62 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20 2d 31  ab->db, zSql, -1
13ed0 2c 20 26 70 43 73 72 2d 3e 70 50 72 61 67 6d 61  , &pCsr->pPragma
13ee0 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  , 0);.  sqlite3_
13ef0 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 69 66  free(zSql);.  if
13f00 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
13f10 29 7b 0a 20 20 20 20 70 54 61 62 2d 3e 62 61 73  ){.    pTab->bas
13f20 65 2e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  e.zErrMsg = sqli
13f30 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22  te3_mprintf("%s"
13f40 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
13f50 28 70 54 61 62 2d 3e 64 62 29 29 3b 0a 20 20 20  (pTab->db));.   
13f60 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 7d 0a   return rc;.  }.
13f70 20 20 72 65 74 75 72 6e 20 70 72 61 67 6d 61 56    return pragmaV
13f80 74 61 62 4e 65 78 74 28 70 56 74 61 62 43 75 72  tabNext(pVtabCur
13f90 73 6f 72 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  sor);.}../*.** P
13fa0 72 61 67 6d 61 20 76 69 72 74 75 61 6c 20 74 61  ragma virtual ta
13fb0 62 6c 65 20 6d 6f 64 75 6c 65 20 78 45 6f 66 20  ble module xEof 
13fc0 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 73 74 61 74 69  method..*/.stati
13fd0 63 20 69 6e 74 20 70 72 61 67 6d 61 56 74 61 62  c int pragmaVtab
13fe0 45 6f 66 28 73 71 6c 69 74 65 33 5f 76 74 61 62  Eof(sqlite3_vtab
13ff0 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75  _cursor *pVtabCu
14000 72 73 6f 72 29 7b 0a 20 20 50 72 61 67 6d 61 56  rsor){.  PragmaV
14010 74 61 62 43 75 72 73 6f 72 20 2a 70 43 73 72 20  tabCursor *pCsr 
14020 3d 20 28 50 72 61 67 6d 61 56 74 61 62 43 75 72  = (PragmaVtabCur
14030 73 6f 72 2a 29 70 56 74 61 62 43 75 72 73 6f 72  sor*)pVtabCursor
14040 3b 0a 20 20 72 65 74 75 72 6e 20 28 70 43 73 72  ;.  return (pCsr
14050 2d 3e 70 50 72 61 67 6d 61 3d 3d 30 29 3b 0a 7d  ->pPragma==0);.}
14060 0a 0a 2f 2a 20 54 68 65 20 78 43 6f 6c 75 6d 6e  ../* The xColumn
14070 20 6d 65 74 68 6f 64 20 73 69 6d 70 6c 79 20 72   method simply r
14080 65 74 75 72 6e 73 20 74 68 65 20 63 6f 72 72 65  eturns the corre
14090 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e 20  sponding column 
140a0 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 50 52 41 47  from.** the PRAG
140b0 4d 41 2e 20 20 0a 2a 2f 0a 73 74 61 74 69 63 20  MA.  .*/.static 
140c0 69 6e 74 20 70 72 61 67 6d 61 56 74 61 62 43 6f  int pragmaVtabCo
140d0 6c 75 6d 6e 28 0a 20 20 73 71 6c 69 74 65 33 5f  lumn(.  sqlite3_
140e0 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74  vtab_cursor *pVt
140f0 61 62 43 75 72 73 6f 72 2c 20 0a 20 20 73 71 6c  abCursor, .  sql
14100 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 74  ite3_context *ct
14110 78 2c 20 0a 20 20 69 6e 74 20 69 0a 29 7b 0a 20  x, .  int i.){. 
14120 20 50 72 61 67 6d 61 56 74 61 62 43 75 72 73 6f   PragmaVtabCurso
14130 72 20 2a 70 43 73 72 20 3d 20 28 50 72 61 67 6d  r *pCsr = (Pragm
14140 61 56 74 61 62 43 75 72 73 6f 72 2a 29 70 56 74  aVtabCursor*)pVt
14150 61 62 43 75 72 73 6f 72 3b 0a 20 20 50 72 61 67  abCursor;.  Prag
14160 6d 61 56 74 61 62 20 2a 70 54 61 62 20 3d 20 28  maVtab *pTab = (
14170 50 72 61 67 6d 61 56 74 61 62 2a 29 28 70 56 74  PragmaVtab*)(pVt
14180 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 29  abCursor->pVtab)
14190 3b 0a 20 20 69 66 28 20 69 3c 70 54 61 62 2d 3e  ;.  if( i<pTab->
141a0 69 48 69 64 64 65 6e 20 29 7b 0a 20 20 20 20 73  iHidden ){.    s
141b0 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 76 61  qlite3_result_va
141c0 6c 75 65 28 63 74 78 2c 20 73 71 6c 69 74 65 33  lue(ctx, sqlite3
141d0 5f 63 6f 6c 75 6d 6e 5f 76 61 6c 75 65 28 70 43  _column_value(pC
141e0 73 72 2d 3e 70 50 72 61 67 6d 61 2c 20 69 29 29  sr->pPragma, i))
141f0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
14200 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
14210 78 74 28 63 74 78 2c 20 70 43 73 72 2d 3e 61 7a  xt(ctx, pCsr->az
14220 41 72 67 5b 69 2d 70 54 61 62 2d 3e 69 48 69 64  Arg[i-pTab->iHid
14230 64 65 6e 5d 2c 2d 31 2c 53 51 4c 49 54 45 5f 54  den],-1,SQLITE_T
14240 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 7d 0a 20  RANSIENT);.  }. 
14250 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
14260 4b 3b 0a 7d 0a 0a 2f 2a 20 0a 2a 2a 20 50 72 61  K;.}../* .** Pra
14270 67 6d 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  gma virtual tabl
14280 65 20 6d 6f 64 75 6c 65 20 78 52 6f 77 69 64 20  e module xRowid 
14290 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 73 74 61 74 69  method..*/.stati
142a0 63 20 69 6e 74 20 70 72 61 67 6d 61 56 74 61 62  c int pragmaVtab
142b0 52 6f 77 69 64 28 73 71 6c 69 74 65 33 5f 76 74  Rowid(sqlite3_vt
142c0 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62  ab_cursor *pVtab
142d0 43 75 72 73 6f 72 2c 20 73 71 6c 69 74 65 5f 69  Cursor, sqlite_i
142e0 6e 74 36 34 20 2a 70 29 7b 0a 20 20 50 72 61 67  nt64 *p){.  Prag
142f0 6d 61 56 74 61 62 43 75 72 73 6f 72 20 2a 70 43  maVtabCursor *pC
14300 73 72 20 3d 20 28 50 72 61 67 6d 61 56 74 61 62  sr = (PragmaVtab
14310 43 75 72 73 6f 72 2a 29 70 56 74 61 62 43 75 72  Cursor*)pVtabCur
14320 73 6f 72 3b 0a 20 20 2a 70 20 3d 20 70 43 73 72  sor;.  *p = pCsr
14330 2d 3e 69 52 6f 77 69 64 3b 0a 20 20 72 65 74 75  ->iRowid;.  retu
14340 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
14350 0a 2f 2a 20 54 68 65 20 70 72 61 67 6d 61 20 76  ./* The pragma v
14360 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
14370 65 63 74 20 2a 2f 0a 73 74 61 74 69 63 20 63 6f  ect */.static co
14380 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
14390 6c 65 20 70 72 61 67 6d 61 56 74 61 62 4d 6f 64  le pragmaVtabMod
143a0 75 6c 65 20 3d 20 7b 0a 20 20 30 2c 20 20 20 20  ule = {.  0,    
143b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143c0 20 20 20 20 20 20 20 2f 2a 20 69 56 65 72 73 69         /* iVersi
143d0 6f 6e 20 2a 2f 0a 20 20 30 2c 20 20 20 20 20 20  on */.  0,      
143e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143f0 20 20 20 20 20 2f 2a 20 78 43 72 65 61 74 65 20       /* xCreate 
14400 2d 20 63 72 65 61 74 65 20 61 20 74 61 62 6c 65  - create a table
14410 20 2a 2f 0a 20 20 70 72 61 67 6d 61 56 74 61 62   */.  pragmaVtab
14420 43 6f 6e 6e 65 63 74 2c 20 20 20 20 20 20 20 20  Connect,        
14430 20 20 20 2f 2a 20 78 43 6f 6e 6e 65 63 74 20 2d     /* xConnect -
14440 20 63 6f 6e 6e 65 63 74 20 74 6f 20 61 6e 20 65   connect to an e
14450 78 69 73 74 69 6e 67 20 74 61 62 6c 65 20 2a 2f  xisting table */
14460 0a 20 20 70 72 61 67 6d 61 56 74 61 62 42 65 73  .  pragmaVtabBes
14470 74 49 6e 64 65 78 2c 20 20 20 20 20 20 20 20 20  tIndex,         
14480 2f 2a 20 78 42 65 73 74 49 6e 64 65 78 20 2d 20  /* xBestIndex - 
14490 44 65 74 65 72 6d 69 6e 65 20 73 65 61 72 63 68  Determine search
144a0 20 73 74 72 61 74 65 67 79 20 2a 2f 0a 20 20 70   strategy */.  p
144b0 72 61 67 6d 61 56 74 61 62 44 69 73 63 6f 6e 6e  ragmaVtabDisconn
144c0 65 63 74 2c 20 20 20 20 20 20 20 20 2f 2a 20 78  ect,        /* x
144d0 44 69 73 63 6f 6e 6e 65 63 74 20 2d 20 44 69 73  Disconnect - Dis
144e0 63 6f 6e 6e 65 63 74 20 66 72 6f 6d 20 61 20 74  connect from a t
144f0 61 62 6c 65 20 2a 2f 0a 20 20 30 2c 20 20 20 20  able */.  0,    
14500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14510 20 20 20 20 20 20 20 2f 2a 20 78 44 65 73 74 72         /* xDestr
14520 6f 79 20 2d 20 44 72 6f 70 20 61 20 74 61 62 6c  oy - Drop a tabl
14530 65 20 2a 2f 0a 20 20 70 72 61 67 6d 61 56 74 61  e */.  pragmaVta
14540 62 4f 70 65 6e 2c 20 20 20 20 20 20 20 20 20 20  bOpen,          
14550 20 20 20 20 2f 2a 20 78 4f 70 65 6e 20 2d 20 6f      /* xOpen - o
14560 70 65 6e 20 61 20 63 75 72 73 6f 72 20 2a 2f 0a  pen a cursor */.
14570 20 20 70 72 61 67 6d 61 56 74 61 62 43 6c 6f 73    pragmaVtabClos
14580 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e,             /
14590 2a 20 78 43 6c 6f 73 65 20 2d 20 63 6c 6f 73 65  * xClose - close
145a0 20 61 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 70   a cursor */.  p
145b0 72 61 67 6d 61 56 74 61 62 46 69 6c 74 65 72 2c  ragmaVtabFilter,
145c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 78              /* x
145d0 46 69 6c 74 65 72 20 2d 20 63 6f 6e 66 69 67 75  Filter - configu
145e0 72 65 20 73 63 61 6e 20 63 6f 6e 73 74 72 61 69  re scan constrai
145f0 6e 74 73 20 2a 2f 0a 20 20 70 72 61 67 6d 61 56  nts */.  pragmaV
14600 74 61 62 4e 65 78 74 2c 20 20 20 20 20 20 20 20  tabNext,        
14610 20 20 20 20 20 20 2f 2a 20 78 4e 65 78 74 20 2d        /* xNext -
14620 20 61 64 76 61 6e 63 65 20 61 20 63 75 72 73 6f   advance a curso
14630 72 20 2a 2f 0a 20 20 70 72 61 67 6d 61 56 74 61  r */.  pragmaVta
14640 62 45 6f 66 2c 20 20 20 20 20 20 20 20 20 20 20  bEof,           
14650 20 20 20 20 2f 2a 20 78 45 6f 66 20 2a 2f 0a 20      /* xEof */. 
14660 20 70 72 61 67 6d 61 56 74 61 62 43 6f 6c 75 6d   pragmaVtabColum
14670 6e 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n,            /*
14680 20 78 43 6f 6c 75 6d 6e 20 2d 20 72 65 61 64 20   xColumn - read 
14690 64 61 74 61 20 2a 2f 0a 20 20 70 72 61 67 6d 61  data */.  pragma
146a0 56 74 61 62 52 6f 77 69 64 2c 20 20 20 20 20 20  VtabRowid,      
146b0 20 20 20 20 20 20 20 2f 2a 20 78 52 6f 77 69 64         /* xRowid
146c0 20 2d 20 72 65 61 64 20 64 61 74 61 20 2a 2f 0a   - read data */.
146d0 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 20    0,            
146e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
146f0 2a 20 78 55 70 64 61 74 65 20 2d 20 77 72 69 74  * xUpdate - writ
14700 65 20 64 61 74 61 20 2a 2f 0a 20 20 30 2c 20 20  e data */.  0,  
14710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14720 20 20 20 20 20 20 20 20 20 2f 2a 20 78 42 65 67           /* xBeg
14730 69 6e 20 2d 20 62 65 67 69 6e 20 74 72 61 6e 73  in - begin trans
14740 61 63 74 69 6f 6e 20 2a 2f 0a 20 20 30 2c 20 20  action */.  0,  
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14760 20 20 20 20 20 20 20 20 20 2f 2a 20 78 53 79 6e           /* xSyn
14770 63 20 2d 20 73 79 6e 63 20 74 72 61 6e 73 61 63  c - sync transac
14780 74 69 6f 6e 20 2a 2f 0a 20 20 30 2c 20 20 20 20  tion */.  0,    
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147a0 20 20 20 20 20 20 20 2f 2a 20 78 43 6f 6d 6d 69         /* xCommi
147b0 74 20 2d 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73  t - commit trans
147c0 61 63 74 69 6f 6e 20 2a 2f 0a 20 20 30 2c 20 20  action */.  0,  
147d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147e0 20 20 20 20 20 20 20 20 20 2f 2a 20 78 52 6f 6c           /* xRol
147f0 6c 62 61 63 6b 20 2d 20 72 6f 6c 6c 62 61 63 6b  lback - rollback
14800 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
14810 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 20    0,            
14820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14830 2a 20 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 20  * xFindFunction 
14840 2d 20 66 75 6e 63 74 69 6f 6e 20 6f 76 65 72 6c  - function overl
14850 6f 61 64 69 6e 67 20 2a 2f 0a 20 20 30 2c 20 20  oading */.  0,  
14860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14870 20 20 20 20 20 20 20 20 20 2f 2a 20 78 52 65 6e           /* xRen
14880 61 6d 65 20 2d 20 72 65 6e 61 6d 65 20 74 68 65  ame - rename the
14890 20 74 61 62 6c 65 20 2a 2f 0a 20 20 30 2c 20 20   table */.  0,  
148a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148b0 20 20 20 20 20 20 20 20 20 2f 2a 20 78 53 61 76           /* xSav
148c0 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 30 2c 20 20  epoint */.  0,  
148d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148e0 20 20 20 20 20 20 20 20 20 2f 2a 20 78 52 65 6c           /* xRel
148f0 65 61 73 65 20 2a 2f 0a 20 20 30 20 20 20 20 20  ease */.  0     
14900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14910 20 20 20 20 20 20 20 2f 2a 20 78 52 6f 6c 6c 62         /* xRollb
14920 61 63 6b 54 6f 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ackTo */.};../*.
14930 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  ** Check to see 
14940 69 66 20 7a 54 61 62 4e 61 6d 65 20 69 73 20 72  if zTabName is r
14950 65 61 6c 6c 79 20 74 68 65 20 6e 61 6d 65 20 6f  eally the name o
14960 66 20 61 20 70 72 61 67 6d 61 2e 20 20 49 66 20  f a pragma.  If 
14970 69 74 20 69 73 2c 0a 2a 2a 20 74 68 65 6e 20 72  it is,.** then r
14980 65 67 69 73 74 65 72 20 61 6e 20 65 70 6f 6e 79  egister an epony
14990 6d 6f 75 73 20 76 69 72 74 75 61 6c 20 74 61 62  mous virtual tab
149a0 6c 65 20 66 6f 72 20 74 68 61 74 20 70 72 61 67  le for that prag
149b0 6d 61 20 61 6e 64 20 72 65 74 75 72 6e 0a 2a 2a  ma and return.**
149c0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
149d0 65 20 4d 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20  e Module object 
149e0 66 6f 72 20 74 68 65 20 6e 65 77 20 76 69 72 74  for the new virt
149f0 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2f 0a 4d 6f  ual table..*/.Mo
14a00 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 50 72 61  dule *sqlite3Pra
14a10 67 6d 61 56 74 61 62 52 65 67 69 73 74 65 72 28  gmaVtabRegister(
14a20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e  sqlite3 *db, con
14a30 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 7b  st char *zName){
14a40 0a 20 20 63 6f 6e 73 74 20 50 72 61 67 6d 61 4e  .  const PragmaN
14a50 61 6d 65 20 2a 70 4e 61 6d 65 3b 0a 20 20 61 73  ame *pName;.  as
14a60 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 73 74  sert( sqlite3_st
14a70 72 6e 69 63 6d 70 28 7a 4e 61 6d 65 2c 20 22 70  rnicmp(zName, "p
14a80 72 61 67 6d 61 5f 22 2c 20 37 29 3d 3d 30 20 29  ragma_", 7)==0 )
14a90 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 70 72 61 67  ;.  pName = prag
14aa0 6d 61 4c 6f 63 61 74 65 28 7a 4e 61 6d 65 2b 37  maLocate(zName+7
14ab0 29 3b 0a 20 20 69 66 28 20 70 4e 61 6d 65 3d 3d  );.  if( pName==
14ac0 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
14ad0 69 66 28 20 28 70 4e 61 6d 65 2d 3e 6d 50 72 61  if( (pName->mPra
14ae0 67 46 6c 67 20 26 20 28 50 72 61 67 46 6c 67 5f  gFlg & (PragFlg_
14af0 52 65 73 75 6c 74 30 7c 50 72 61 67 46 6c 67 5f  Result0|PragFlg_
14b00 52 65 73 75 6c 74 31 29 29 3d 3d 30 20 29 20 72  Result1))==0 ) r
14b10 65 74 75 72 6e 20 30 3b 0a 20 20 61 73 73 65 72  eturn 0;.  asser
14b20 74 28 20 73 71 6c 69 74 65 33 48 61 73 68 46 69  t( sqlite3HashFi
14b30 6e 64 28 26 64 62 2d 3e 61 4d 6f 64 75 6c 65 2c  nd(&db->aModule,
14b40 20 7a 4e 61 6d 65 29 3d 3d 30 20 29 3b 0a 20 20   zName)==0 );.  
14b50 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56 74  return sqlite3Vt
14b60 61 62 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 64  abCreateModule(d
14b70 62 2c 20 7a 4e 61 6d 65 2c 20 26 70 72 61 67 6d  b, zName, &pragm
14b80 61 56 74 61 62 4d 6f 64 75 6c 65 2c 20 28 76 6f  aVtabModule, (vo
14b90 69 64 2a 29 70 4e 61 6d 65 2c 20 30 29 3b 0a 7d  id*)pName, 0);.}
14ba0 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ..#endif /* SQLI
14bb0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
14bc0 41 42 4c 45 20 2a 2f 0a 0a 23 65 6e 64 69 66 20  ABLE */..#endif 
14bd0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  /* SQLITE_OMIT_P
14be0 52 41 47 4d 41 20 2a 2f 0a                       RAGMA */.