/ Hex Artifact Content
Login

Artifact f9b6a7f8136a1df3830d3e91e526a43c75a2b1db24795813871fbc86dd683db7:


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 0a 23 65 6e 64 69 66 0a 20  , "wal".#endif. 
2060: 20 7d 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41   };.  assert( PA
2070: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2080: 44 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20 20 61  DELETE==0 );.  a
2090: 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55  ssert( PAGER_JOU
20a0: 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54  RNALMODE_PERSIST
20b0: 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==1 );.  assert(
20c0: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
20d0: 44 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20 20 61  DE_OFF==2 );.  a
20e0: 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55  ssert( PAGER_JOU
20f0: 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54  RNALMODE_TRUNCAT
2100: 45 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65 72 74  E==3 );.  assert
2110: 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ( PAGER_JOURNALM
2120: 4f 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20 29 3b  ODE_MEMORY==4 );
2130: 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52  .  assert( PAGER
2140: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2150: 3d 3d 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==5 );.  assert(
2160: 20 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65 4d 6f   eMode>=0 && eMo
2170: 64 65 3c 3d 41 72 72 61 79 53 69 7a 65 28 61 7a  de<=ArraySize(az
2180: 4d 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a 20 20  ModeName) );..  
2190: 69 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72 61 79  if( eMode==Array
21a0: 53 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29  Size(azModeName)
21b0: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72   ) return 0;.  r
21c0: 65 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65  eturn azModeName
21d0: 5b 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a  [eMode];.}../*.*
21e0: 2a 20 4c 6f 63 61 74 65 20 61 20 70 72 61 67 6d  * Locate a pragm
21f0: 61 20 69 6e 20 74 68 65 20 61 50 72 61 67 6d 61  a in the aPragma
2200: 4e 61 6d 65 5b 5d 20 61 72 72 61 79 2e 0a 2a 2f  Name[] array..*/
2210: 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 50 72  .static const Pr
2220: 61 67 6d 61 4e 61 6d 65 20 2a 70 72 61 67 6d 61  agmaName *pragma
2230: 4c 6f 63 61 74 65 28 63 6f 6e 73 74 20 63 68 61  Locate(const cha
2240: 72 20 2a 7a 4e 61 6d 65 29 7b 0a 20 20 69 6e 74  r *zName){.  int
2250: 20 75 70 72 2c 20 6c 77 72 2c 20 6d 69 64 20 3d   upr, lwr, mid =
2260: 20 30 2c 20 72 63 3b 0a 20 20 6c 77 72 20 3d 20   0, rc;.  lwr = 
2270: 30 3b 0a 20 20 75 70 72 20 3d 20 41 72 72 61 79  0;.  upr = Array
2280: 53 69 7a 65 28 61 50 72 61 67 6d 61 4e 61 6d 65  Size(aPragmaName
2290: 29 2d 31 3b 0a 20 20 77 68 69 6c 65 28 20 6c 77  )-1;.  while( lw
22a0: 72 3c 3d 75 70 72 20 29 7b 0a 20 20 20 20 6d 69  r<=upr ){.    mi
22b0: 64 20 3d 20 28 6c 77 72 2b 75 70 72 29 2f 32 3b  d = (lwr+upr)/2;
22c0: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
22d0: 33 5f 73 74 72 69 63 6d 70 28 7a 4e 61 6d 65 2c  3_stricmp(zName,
22e0: 20 61 50 72 61 67 6d 61 4e 61 6d 65 5b 6d 69 64   aPragmaName[mid
22f0: 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 69 66  ].zName);.    if
2300: 28 20 72 63 3d 3d 30 20 29 20 62 72 65 61 6b 3b  ( rc==0 ) break;
2310: 0a 20 20 20 20 69 66 28 20 72 63 3c 30 20 29 7b  .    if( rc<0 ){
2320: 0a 20 20 20 20 20 20 75 70 72 20 3d 20 6d 69 64  .      upr = mid
2330: 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   - 1;.    }else{
2340: 0a 20 20 20 20 20 20 6c 77 72 20 3d 20 6d 69 64  .      lwr = mid
2350: 20 2b 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   + 1;.    }.  }.
2360: 20 20 72 65 74 75 72 6e 20 6c 77 72 3e 75 70 72    return lwr>upr
2370: 20 3f 20 30 20 3a 20 26 61 50 72 61 67 6d 61 4e   ? 0 : &aPragmaN
2380: 61 6d 65 5b 6d 69 64 5d 3b 0a 7d 0a 0a 2f 2a 0a  ame[mid];.}../*.
2390: 2a 2a 20 48 65 6c 70 65 72 20 73 75 62 72 6f 75  ** Helper subrou
23a0: 74 69 6e 65 20 66 6f 72 20 50 52 41 47 4d 41 20  tine for PRAGMA 
23b0: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3a  integrity_check:
23c0: 0a 2a 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20  .**.** Generate 
23d0: 63 6f 64 65 20 74 6f 20 6f 75 74 70 75 74 20 61  code to output a
23e0: 20 73 69 6e 67 6c 65 2d 63 6f 6c 75 6d 6e 20 72   single-column r
23f0: 65 73 75 6c 74 20 72 6f 77 20 77 69 74 68 20 61  esult row with a
2400: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a   value of the.**
2410: 20 73 74 72 69 6e 67 20 68 65 6c 64 20 69 6e 20   string held in 
2420: 72 65 67 69 73 74 65 72 20 33 2e 20 20 44 65 63  register 3.  Dec
2430: 72 65 6d 65 6e 74 20 74 68 65 20 72 65 73 75 6c  rement the resul
2440: 74 20 63 6f 75 6e 74 20 69 6e 20 72 65 67 69 73  t count in regis
2450: 74 65 72 20 31 0a 2a 2a 20 61 6e 64 20 68 61 6c  ter 1.** and hal
2460: 74 20 69 66 20 74 68 65 20 6d 61 78 69 6d 75 6d  t if the maximum
2470: 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   number of resul
2480: 74 20 72 6f 77 73 20 68 61 76 65 20 62 65 65 6e  t rows have been
2490: 20 69 73 73 75 65 64 2e 0a 2a 2f 0a 73 74 61 74   issued..*/.stat
24a0: 69 63 20 69 6e 74 20 69 6e 74 65 67 72 69 74 79  ic int integrity
24b0: 43 68 65 63 6b 52 65 73 75 6c 74 52 6f 77 28 56  CheckResultRow(V
24c0: 64 62 65 20 2a 76 29 7b 0a 20 20 69 6e 74 20 61  dbe *v){.  int a
24d0: 64 64 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ddr;.  sqlite3Vd
24e0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
24f0: 65 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b  esultRow, 3, 1);
2500: 0a 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65  .  addr = sqlite
2510: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
2520: 50 5f 49 66 50 6f 73 2c 20 31 2c 20 73 71 6c 69  P_IfPos, 1, sqli
2530: 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64  te3VdbeCurrentAd
2540: 64 72 28 76 29 2b 32 2c 20 31 29 3b 0a 20 20 56  dr(v)+2, 1);.  V
2550: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
2560: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
2570: 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b  Op0(v, OP_Halt);
2580: 0a 20 20 72 65 74 75 72 6e 20 61 64 64 72 3b 0a  .  return addr;.
2590: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73  }../*.** Process
25a0: 20 61 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d   a pragma statem
25b0: 65 6e 74 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72 61  ent.  .**.** Pra
25c0: 67 6d 61 73 20 61 72 65 20 6f 66 20 74 68 69 73  gmas are of this
25d0: 20 66 6f 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20 20   form:.**.**    
25e0: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
25f0: 2e 5d 69 64 20 5b 3d 20 76 61 6c 75 65 5d 0a 2a  .]id [= value].*
2600: 2a 0a 2a 2a 20 54 68 65 20 69 64 65 6e 74 69 66  *.** The identif
2610: 69 65 72 20 6d 69 67 68 74 20 61 6c 73 6f 20 62  ier might also b
2620: 65 20 61 20 73 74 72 69 6e 67 2e 20 20 54 68 65  e a string.  The
2630: 20 76 61 6c 75 65 20 69 73 20 61 20 73 74 72 69   value is a stri
2640: 6e 67 2c 20 61 6e 64 0a 2a 2a 20 69 64 65 6e 74  ng, and.** ident
2650: 69 66 69 65 72 2c 20 6f 72 20 61 20 6e 75 6d 62  ifier, or a numb
2660: 65 72 2e 20 20 49 66 20 6d 69 6e 75 73 46 6c 61  er.  If minusFla
2670: 67 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  g is true, then 
2680: 74 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20  the value is.** 
2690: 61 20 6e 75 6d 62 65 72 20 74 68 61 74 20 77 61  a number that wa
26a0: 73 20 70 72 65 63 65 64 65 64 20 62 79 20 61 20  s preceded by a 
26b0: 6d 69 6e 75 73 20 73 69 67 6e 2e 0a 2a 2a 0a 2a  minus sign..**.*
26c0: 2a 20 49 66 20 74 68 65 20 6c 65 66 74 20 73 69  * If the left si
26d0: 64 65 20 69 73 20 22 64 61 74 61 62 61 73 65 2e  de is "database.
26e0: 69 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73  id" then pId1 is
26f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 61   the database na
2700: 6d 65 0a 2a 2a 20 61 6e 64 20 70 49 64 32 20 69  me.** and pId2 i
2710: 73 20 74 68 65 20 69 64 2e 20 20 49 66 20 74 68  s the id.  If th
2720: 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20 6a  e left side is j
2730: 75 73 74 20 22 69 64 22 20 74 68 65 6e 20 70 49  ust "id" then pI
2740: 64 31 20 69 73 20 74 68 65 0a 2a 2a 20 69 64 20  d1 is the.** id 
2750: 61 6e 64 20 70 49 64 32 20 69 73 20 61 6e 79 20  and pId2 is any 
2760: 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0a 2a 2f  empty string..*/
2770: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61  .void sqlite3Pra
2780: 67 6d 61 28 0a 20 20 50 61 72 73 65 20 2a 70 50  gma(.  Parse *pP
2790: 61 72 73 65 2c 20 0a 20 20 54 6f 6b 65 6e 20 2a  arse, .  Token *
27a0: 70 49 64 31 2c 20 20 20 20 20 20 20 20 2f 2a 20  pId1,        /* 
27b0: 46 69 72 73 74 20 70 61 72 74 20 6f 66 20 5b 73  First part of [s
27c0: 63 68 65 6d 61 2e 5d 69 64 20 66 69 65 6c 64 20  chema.]id field 
27d0: 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 32  */.  Token *pId2
27e0: 2c 20 20 20 20 20 20 20 20 2f 2a 20 53 65 63 6f  ,        /* Seco
27f0: 6e 64 20 70 61 72 74 20 6f 66 20 5b 73 63 68 65  nd part of [sche
2800: 6d 61 2e 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72  ma.]id field, or
2810: 20 4e 55 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e   NULL */.  Token
2820: 20 2a 70 56 61 6c 75 65 2c 20 20 20 20 20 20 2f   *pValue,      /
2830: 2a 20 54 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c  * Token for <val
2840: 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  ue>, or NULL */.
2850: 20 20 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20    int minusFlag 
2860: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
2870: 20 61 20 27 2d 27 20 73 69 67 6e 20 70 72 65 63   a '-' sign prec
2880: 65 64 65 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a  eded <value> */.
2890: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66 74  ){.  char *zLeft
28a0: 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e   = 0;       /* N
28b0: 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54  ul-terminated UT
28c0: 46 2d 38 20 73 74 72 69 6e 67 20 3c 69 64 3e 20  F-8 string <id> 
28d0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 52 69 67 68  */.  char *zRigh
28e0: 74 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e  t = 0;      /* N
28f0: 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54  ul-terminated UT
2900: 46 2d 38 20 73 74 72 69 6e 67 20 3c 76 61 6c 75  F-8 string <valu
2910: 65 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  e>, or NULL */. 
2920: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
2930: 20 3d 20 30 3b 20 20 20 2f 2a 20 54 68 65 20 64   = 0;   /* The d
2940: 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a  atabase name */.
2950: 20 20 54 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20    Token *pId;   
2960: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
2970: 74 65 72 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65  ter to <id> toke
2980: 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 61 46 63  n */.  char *aFc
2990: 6e 74 6c 5b 34 5d 3b 20 20 20 20 20 20 20 2f 2a  ntl[4];       /*
29a0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 53 51 4c   Argument to SQL
29b0: 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41  ITE_FCNTL_PRAGMA
29c0: 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
29e0: 44 61 74 61 62 61 73 65 20 69 6e 64 65 78 20 66  Database index f
29f0: 6f 72 20 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f  or <database> */
2a00: 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a20: 2f 2a 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20  /* return value 
2a30: 66 6f 72 6d 20 53 51 4c 49 54 45 5f 46 43 4e 54  form SQLITE_FCNT
2a40: 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a 20 20 73 71  L_PRAGMA */.  sq
2a50: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72  lite3 *db = pPar
2a60: 73 65 2d 3e 64 62 3b 20 20 20 20 2f 2a 20 54 68  se->db;    /* Th
2a70: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
2a80: 63 74 69 6f 6e 20 2a 2f 0a 20 20 44 62 20 2a 70  ction */.  Db *p
2a90: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
2aa0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73          /* The s
2ab0: 70 65 63 69 66 69 63 20 64 61 74 61 62 61 73 65  pecific database
2ac0: 20 62 65 69 6e 67 20 70 72 61 67 6d 61 65 64 20   being pragmaed 
2ad0: 2a 2f 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 73  */.  Vdbe *v = s
2ae0: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
2af0: 61 72 73 65 29 3b 20 20 2f 2a 20 50 72 65 70 61  arse);  /* Prepa
2b00: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  red statement */
2b10: 0a 20 20 63 6f 6e 73 74 20 50 72 61 67 6d 61 4e  .  const PragmaN
2b20: 61 6d 65 20 2a 70 50 72 61 67 6d 61 3b 20 20 20  ame *pPragma;   
2b30: 2f 2a 20 54 68 65 20 70 72 61 67 6d 61 20 2a 2f  /* The pragma */
2b40: 0a 0a 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72  ..  if( v==0 ) r
2b50: 65 74 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33  eturn;.  sqlite3
2b60: 56 64 62 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28  VdbeRunOnlyOnce(
2b70: 76 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d  v);.  pParse->nM
2b80: 65 6d 20 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e  em = 2;..  /* In
2b90: 74 65 72 70 72 65 74 20 74 68 65 20 5b 73 63 68  terpret the [sch
2ba0: 65 6d 61 2e 5d 20 70 61 72 74 20 6f 66 20 74 68  ema.] part of th
2bb0: 65 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65  e pragma stateme
2bc0: 6e 74 2e 20 69 44 62 20 69 73 20 74 68 65 0a 20  nt. iDb is the. 
2bd0: 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68 65   ** index of the
2be0: 20 64 61 74 61 62 61 73 65 20 74 68 69 73 20 70   database this p
2bf0: 72 61 67 6d 61 20 69 73 20 62 65 69 6e 67 20 61  ragma is being a
2c00: 70 70 6c 69 65 64 20 74 6f 20 69 6e 20 64 62 2e  pplied to in db.
2c10: 61 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62 20  aDb[]. */.  iDb 
2c20: 3d 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74  = sqlite3TwoPart
2c30: 4e 61 6d 65 28 70 50 61 72 73 65 2c 20 70 49 64  Name(pParse, pId
2c40: 31 2c 20 70 49 64 32 2c 20 26 70 49 64 29 3b 0a  1, pId2, &pId);.
2c50: 20 20 69 66 28 20 69 44 62 3c 30 20 29 20 72 65    if( iDb<0 ) re
2c60: 74 75 72 6e 3b 0a 20 20 70 44 62 20 3d 20 26 64  turn;.  pDb = &d
2c70: 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a 20 20  b->aDb[iDb];..  
2c80: 2f 2a 20 49 66 20 74 68 65 20 74 65 6d 70 20 64  /* If the temp d
2c90: 61 74 61 62 61 73 65 20 68 61 73 20 62 65 65 6e  atabase has been
2ca0: 20 65 78 70 6c 69 63 69 74 6c 79 20 6e 61 6d 65   explicitly name
2cb0: 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
2cc0: 20 0a 20 20 2a 2a 20 70 72 61 67 6d 61 2c 20 6d   .  ** pragma, m
2cd0: 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 6f  ake sure it is o
2ce0: 70 65 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69 66 28  pen. .  */.  if(
2cf0: 20 69 44 62 3d 3d 31 20 26 26 20 73 71 6c 69 74   iDb==1 && sqlit
2d00: 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
2d10: 73 65 28 70 50 61 72 73 65 29 20 29 7b 0a 20 20  se(pParse) ){.  
2d20: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20    return;.  }.. 
2d30: 20 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74 65 33   zLeft = sqlite3
2d40: 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62  NameFromToken(db
2d50: 2c 20 70 49 64 29 3b 0a 20 20 69 66 28 20 21 7a  , pId);.  if( !z
2d60: 4c 65 66 74 20 29 20 72 65 74 75 72 6e 3b 0a 20  Left ) return;. 
2d70: 20 69 66 28 20 6d 69 6e 75 73 46 6c 61 67 20 29   if( minusFlag )
2d80: 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73  {.    zRight = s
2d90: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
2da0: 2c 20 22 2d 25 54 22 2c 20 70 56 61 6c 75 65 29  , "-%T", pValue)
2db0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a  ;.  }else{.    z
2dc0: 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4e  Right = sqlite3N
2dd0: 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c  ameFromToken(db,
2de0: 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a 20   pValue);.  }.. 
2df0: 20 61 73 73 65 72 74 28 20 70 49 64 32 20 29 3b   assert( pId2 );
2e00: 0a 20 20 7a 44 62 20 3d 20 70 49 64 32 2d 3e 6e  .  zDb = pId2->n
2e10: 3e 30 20 3f 20 70 44 62 2d 3e 7a 44 62 53 4e 61  >0 ? pDb->zDbSNa
2e20: 6d 65 20 3a 20 30 3b 0a 20 20 69 66 28 20 73 71  me : 0;.  if( sq
2e30: 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 70  lite3AuthCheck(p
2e40: 50 61 72 73 65 2c 20 53 51 4c 49 54 45 5f 50 52  Parse, SQLITE_PR
2e50: 41 47 4d 41 2c 20 7a 4c 65 66 74 2c 20 7a 52 69  AGMA, zLeft, zRi
2e60: 67 68 74 2c 20 7a 44 62 29 20 29 7b 0a 20 20 20  ght, zDb) ){.   
2e70: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
2e80: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64  ;.  }..  /* Send
2e90: 20 61 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c   an SQLITE_FCNTL
2ea0: 5f 50 52 41 47 4d 41 20 66 69 6c 65 2d 63 6f 6e  _PRAGMA file-con
2eb0: 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 6e 64 65  trol to the unde
2ec0: 72 6c 79 69 6e 67 20 56 46 53 0a 20 20 2a 2a 20  rlying VFS.  ** 
2ed0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20  connection.  If 
2ee0: 69 74 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54  it returns SQLIT
2ef0: 45 5f 4f 4b 2c 20 74 68 65 6e 20 61 73 73 75 6d  E_OK, then assum
2f00: 65 20 74 68 61 74 20 74 68 65 20 56 46 53 0a 20  e that the VFS. 
2f10: 20 2a 2a 20 68 61 6e 64 6c 65 64 20 74 68 65 20   ** handled the 
2f20: 70 72 61 67 6d 61 20 61 6e 64 20 67 65 6e 65 72  pragma and gener
2f30: 61 74 65 20 61 20 6e 6f 2d 6f 70 20 70 72 65 70  ate a no-op prep
2f40: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ared statement..
2f50: 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d    **.  ** IMPLEM
2f60: 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 31  ENTATION-OF: R-1
2f70: 32 32 33 38 2d 35 35 31 32 30 20 57 68 65 6e 65  2238-55120 Whene
2f80: 76 65 72 20 61 20 50 52 41 47 4d 41 20 73 74 61  ver a PRAGMA sta
2f90: 74 65 6d 65 6e 74 20 69 73 20 70 61 72 73 65 64  tement is parsed
2fa0: 2c 0a 20 20 2a 2a 20 61 6e 20 53 51 4c 49 54 45  ,.  ** an SQLITE
2fb0: 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 66 69  _FCNTL_PRAGMA fi
2fc0: 6c 65 20 63 6f 6e 74 72 6f 6c 20 69 73 20 73 65  le control is se
2fd0: 6e 74 20 74 6f 20 74 68 65 20 6f 70 65 6e 20 73  nt to the open s
2fe0: 71 6c 69 74 65 33 5f 66 69 6c 65 0a 20 20 2a 2a  qlite3_file.  **
2ff0: 20 6f 62 6a 65 63 74 20 63 6f 72 72 65 73 70 6f   object correspo
3000: 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 64 61 74  nding to the dat
3010: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 77 68  abase file to wh
3020: 69 63 68 20 74 68 65 20 70 72 61 67 6d 61 0a 20  ich the pragma. 
3030: 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 72 65   ** statement re
3040: 66 65 72 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  fers..  **.  ** 
3050: 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
3060: 46 3a 20 52 2d 32 39 38 37 35 2d 33 31 36 37 38  F: R-29875-31678
3070: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   The argument to
3080: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 43 4e 54   the SQLITE_FCNT
3090: 4c 5f 50 52 41 47 4d 41 0a 20 20 2a 2a 20 66 69  L_PRAGMA.  ** fi
30a0: 6c 65 20 63 6f 6e 74 72 6f 6c 20 69 73 20 61 6e  le control is an
30b0: 20 61 72 72 61 79 20 6f 66 20 70 6f 69 6e 74 65   array of pointe
30c0: 72 73 20 74 6f 20 73 74 72 69 6e 67 73 20 28 63  rs to strings (c
30d0: 68 61 72 2a 2a 29 20 69 6e 20 77 68 69 63 68 20  har**) in which 
30e0: 74 68 65 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20  the.  ** second 
30f0: 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61  element of the a
3100: 72 72 61 79 20 69 73 20 74 68 65 20 6e 61 6d 65  rray is the name
3110: 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61 20 61   of the pragma a
3120: 6e 64 20 74 68 65 20 74 68 69 72 64 0a 20 20 2a  nd the third.  *
3130: 2a 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65  * element is the
3140: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
3150: 20 70 72 61 67 6d 61 20 6f 72 20 4e 55 4c 4c 20   pragma or NULL 
3160: 69 66 20 74 68 65 20 70 72 61 67 6d 61 20 68 61  if the pragma ha
3170: 73 20 6e 6f 0a 20 20 2a 2a 20 61 72 67 75 6d 65  s no.  ** argume
3180: 6e 74 2e 0a 20 20 2a 2f 0a 20 20 61 46 63 6e 74  nt..  */.  aFcnt
3190: 6c 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 46 63 6e  l[0] = 0;.  aFcn
31a0: 74 6c 5b 31 5d 20 3d 20 7a 4c 65 66 74 3b 0a 20  tl[1] = zLeft;. 
31b0: 20 61 46 63 6e 74 6c 5b 32 5d 20 3d 20 7a 52 69   aFcntl[2] = zRi
31c0: 67 68 74 3b 0a 20 20 61 46 63 6e 74 6c 5b 33 5d  ght;.  aFcntl[3]
31d0: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79   = 0;.  db->busy
31e0: 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20  Handler.nBusy = 
31f0: 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  0;.  rc = sqlite
3200: 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
3210: 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46  b, zDb, SQLITE_F
3220: 43 4e 54 4c 5f 50 52 41 47 4d 41 2c 20 28 76 6f  CNTL_PRAGMA, (vo
3230: 69 64 2a 29 61 46 63 6e 74 6c 29 3b 0a 20 20 69  id*)aFcntl);.  i
3240: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
3250: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
3260: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
3270: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
3280: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
3290: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
32a0: 45 2c 20 61 46 63 6e 74 6c 5b 30 5d 2c 20 53 51  E, aFcntl[0], SQ
32b0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
32c0: 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
32d0: 65 54 65 78 74 28 76 2c 20 61 46 63 6e 74 6c 5b  eText(v, aFcntl[
32e0: 30 5d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0]);.    sqlite3
32f0: 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29  _free(aFcntl[0])
3300: 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d  ;.    goto pragm
3310: 61 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 69 66 28  a_out;.  }.  if(
3320: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46   rc!=SQLITE_NOTF
3330: 4f 55 4e 44 20 29 7b 0a 20 20 20 20 69 66 28 20  OUND ){.    if( 
3340: 61 46 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20  aFcntl[0] ){.   
3350: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
3360: 73 67 28 70 50 61 72 73 65 2c 20 22 25 73 22 2c  sg(pParse, "%s",
3370: 20 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20   aFcntl[0]);.   
3380: 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
3390: 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20  aFcntl[0]);.    
33a0: 7d 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45  }.    pParse->nE
33b0: 72 72 2b 2b 3b 0a 20 20 20 20 70 50 61 72 73 65  rr++;.    pParse
33c0: 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 67  ->rc = rc;.    g
33d0: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
33e0: 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 63 61 74 65    }..  /* Locate
33f0: 20 74 68 65 20 70 72 61 67 6d 61 20 69 6e 20 74   the pragma in t
3400: 68 65 20 6c 6f 6f 6b 75 70 20 74 61 62 6c 65 20  he lookup table 
3410: 2a 2f 0a 20 20 70 50 72 61 67 6d 61 20 3d 20 70  */.  pPragma = p
3420: 72 61 67 6d 61 4c 6f 63 61 74 65 28 7a 4c 65 66  ragmaLocate(zLef
3430: 74 29 3b 0a 20 20 69 66 28 20 70 50 72 61 67 6d  t);.  if( pPragm
3440: 61 3d 3d 30 20 29 20 67 6f 74 6f 20 70 72 61 67  a==0 ) goto prag
3450: 6d 61 5f 6f 75 74 3b 0a 0a 20 20 2f 2a 20 4d 61  ma_out;..  /* Ma
3460: 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74 61  ke sure the data
3470: 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 6c  base schema is l
3480: 6f 61 64 65 64 20 69 66 20 74 68 65 20 70 72 61  oaded if the pra
3490: 67 6d 61 20 72 65 71 75 69 72 65 73 20 74 68 61  gma requires tha
34a0: 74 20 2a 2f 0a 20 20 69 66 28 20 28 70 50 72 61  t */.  if( (pPra
34b0: 67 6d 61 2d 3e 6d 50 72 61 67 46 6c 67 20 26 20  gma->mPragFlg & 
34c0: 50 72 61 67 46 6c 67 5f 4e 65 65 64 53 63 68 65  PragFlg_NeedSche
34d0: 6d 61 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  ma)!=0 ){.    if
34e0: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
34f0: 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
3500: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
3510: 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65   }..  /* Registe
3520: 72 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  r the result col
3530: 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 70 72  umn names for pr
3540: 61 67 6d 61 73 20 74 68 61 74 20 72 65 74 75 72  agmas that retur
3550: 6e 20 72 65 73 75 6c 74 73 20 2a 2f 0a 20 20 69  n results */.  i
3560: 66 28 20 28 70 50 72 61 67 6d 61 2d 3e 6d 50 72  f( (pPragma->mPr
3570: 61 67 46 6c 67 20 26 20 50 72 61 67 46 6c 67 5f  agFlg & PragFlg_
3580: 4e 6f 43 6f 6c 75 6d 6e 73 29 3d 3d 30 20 0a 20  NoColumns)==0 . 
3590: 20 20 26 26 20 28 28 70 50 72 61 67 6d 61 2d 3e    && ((pPragma->
35a0: 6d 50 72 61 67 46 6c 67 20 26 20 50 72 61 67 46  mPragFlg & PragF
35b0: 6c 67 5f 4e 6f 43 6f 6c 75 6d 6e 73 31 29 3d 3d  lg_NoColumns1)==
35c0: 30 20 7c 7c 20 7a 52 69 67 68 74 3d 3d 30 29 0a  0 || zRight==0).
35d0: 20 20 29 7b 0a 20 20 20 20 73 65 74 50 72 61 67    ){.    setPrag
35e0: 6d 61 52 65 73 75 6c 74 43 6f 6c 75 6d 6e 4e 61  maResultColumnNa
35f0: 6d 65 73 28 76 2c 20 70 50 72 61 67 6d 61 29 3b  mes(v, pPragma);
3600: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  .  }..  /* Jump 
3610: 74 6f 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  to the appropria
3620: 74 65 20 70 72 61 67 6d 61 20 68 61 6e 64 6c 65  te pragma handle
3630: 72 20 2a 2f 0a 20 20 73 77 69 74 63 68 28 20 70  r */.  switch( p
3640: 50 72 61 67 6d 61 2d 3e 65 50 72 61 67 54 79 70  Pragma->ePragTyp
3650: 20 29 7b 0a 20 20 0a 23 69 66 20 21 64 65 66 69   ){.  .#if !defi
3660: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
3670: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26  PAGER_PRAGMAS) &
3680: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
3690: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
36a0: 44 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  D).  /*.  **  PR
36b0: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 64 65  AGMA [schema.]de
36c0: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
36d0: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
36e0: 63 68 65 6d 61 2e 5d 64 65 66 61 75 6c 74 5f 63  chema.]default_c
36f0: 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a  ache_size=N.  **
3700: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
3710: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
3720: 20 63 75 72 72 65 6e 74 20 70 65 72 73 69 73 74   current persist
3730: 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20  ent setting for 
3740: 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20 63 61  the.  ** page ca
3750: 63 68 65 20 73 69 7a 65 2e 20 20 54 68 65 20 76  che size.  The v
3760: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 69 73  alue returned is
3770: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
3780: 62 65 72 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65  ber of.  ** page
3790: 73 20 69 6e 20 74 68 65 20 70 61 67 65 20 63 61  s in the page ca
37a0: 63 68 65 2e 20 20 54 68 65 20 73 65 63 6f 6e 64  che.  The second
37b0: 20 66 6f 72 6d 20 73 65 74 73 20 62 6f 74 68 20   form sets both 
37c0: 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20 2a 2a  the current.  **
37d0: 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65   page cache size
37e0: 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 70   value and the p
37f0: 65 72 73 69 73 74 65 6e 74 20 70 61 67 65 20 63  ersistent page c
3800: 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 0a  ache size value.
3810: 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74    ** stored in t
3820: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
3830: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6c 64 65  ..  **.  ** Olde
3840: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
3850: 4c 69 74 65 20 77 6f 75 6c 64 20 73 65 74 20 74  Lite would set t
3860: 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65  he default cache
3870: 20 73 69 7a 65 20 74 6f 20 61 0a 20 20 2a 2a 20   size to a.  ** 
3880: 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20  negative number 
3890: 74 6f 20 69 6e 64 69 63 61 74 65 20 73 79 6e 63  to indicate sync
38a0: 68 72 6f 6e 6f 75 73 3d 4f 46 46 2e 20 20 54 68  hronous=OFF.  Th
38b0: 65 73 65 20 64 61 79 73 2c 20 73 79 6e 63 68 72  ese days, synchr
38c0: 6f 6e 6f 75 73 0a 20 20 2a 2a 20 69 73 20 61 6c  onous.  ** is al
38d0: 77 61 79 73 20 6f 6e 20 62 79 20 64 65 66 61 75  ways on by defau
38e0: 6c 74 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  lt regardless of
38f0: 20 74 68 65 20 73 69 67 6e 20 6f 66 20 74 68 65   the sign of the
3900: 20 64 65 66 61 75 6c 74 20 63 61 63 68 65 0a 20   default cache. 
3910: 20 2a 2a 20 73 69 7a 65 2e 20 20 42 75 74 20 63   ** size.  But c
3920: 6f 6e 74 69 6e 75 65 20 74 6f 20 74 61 6b 65 20  ontinue to take 
3930: 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c  the absolute val
3940: 75 65 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c  ue of the defaul
3950: 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a  t cache.  ** siz
3960: 65 20 6f 66 20 68 69 73 74 6f 72 69 63 61 6c 20  e of historical 
3970: 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 0a 20  compatibility.. 
3980: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
3990: 79 70 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  yp_DEFAULT_CACHE
39a0: 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73 74 61  _SIZE: {.    sta
39b0: 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c  tic const int iL
39c0: 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f  n = VDBE_OFFSET_
39d0: 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73  LINENO(2);.    s
39e0: 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65  tatic const Vdbe
39f0: 4f 70 4c 69 73 74 20 67 65 74 43 61 63 68 65 53  OpList getCacheS
3a00: 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  ize[] = {.      
3a10: 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  { OP_Transaction
3a20: 2c 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30  , 0, 0,        0
3a30: 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  },              
3a40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20             /* 0 
3a50: 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65  */.      { OP_Re
3a60: 61 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20 31 2c  adCookie,  0, 1,
3a70: 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 44 45          BTREE_DE
3a80: 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45  FAULT_CACHE_SIZE
3a90: 7d 2c 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20  },  /* 1 */.    
3aa0: 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20    { OP_IfPos,   
3ab0: 20 20 20 20 31 2c 20 38 2c 20 20 20 20 20 20 20      1, 8,       
3ac0: 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f   0},.      { OP_
3ad0: 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c 20  Integer,     0, 
3ae0: 32 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  2,        0},.  
3af0: 20 20 20 20 7b 20 4f 50 5f 53 75 62 74 72 61 63      { OP_Subtrac
3b00: 74 2c 20 20 20 20 31 2c 20 32 2c 20 20 20 20 20  t,    1, 2,     
3b10: 20 20 20 31 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     1},.      { O
3b20: 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31  P_IfPos,       1
3b30: 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 8,        0},.
3b40: 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67        { OP_Integ
3b50: 65 72 2c 20 20 20 20 20 30 2c 20 31 2c 20 20 20  er,     0, 1,   
3b60: 20 20 20 20 20 30 7d 2c 20 20 20 20 20 20 20 20       0},        
3b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b80: 20 2f 2a 20 36 20 2a 2f 0a 20 20 20 20 20 20 7b   /* 6 */.      {
3b90: 20 4f 50 5f 4e 6f 6f 70 2c 20 20 20 20 20 20 20   OP_Noop,       
3ba0: 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   0, 0,        0}
3bb0: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73  ,.      { OP_Res
3bc0: 75 6c 74 52 6f 77 2c 20 20 20 31 2c 20 31 2c 20  ultRow,   1, 1, 
3bd0: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d         0},.    }
3be0: 3b 0a 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f  ;.    VdbeOp *aO
3bf0: 70 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  p;.    sqlite3Vd
3c00: 62 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69  beUsesBtree(v, i
3c10: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52  Db);.    if( !zR
3c20: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 70 50  ight ){.      pP
3c30: 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 32 3b  arse->nMem += 2;
3c40: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
3c50: 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63  beVerifyNoMalloc
3c60: 52 65 71 75 69 72 65 64 28 76 2c 20 41 72 72 61  Required(v, Arra
3c70: 79 53 69 7a 65 28 67 65 74 43 61 63 68 65 53 69  ySize(getCacheSi
3c80: 7a 65 29 29 3b 0a 20 20 20 20 20 20 61 4f 70 20  ze));.      aOp 
3c90: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
3ca0: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
3cb0: 69 7a 65 28 67 65 74 43 61 63 68 65 53 69 7a 65  ize(getCacheSize
3cc0: 29 2c 20 67 65 74 43 61 63 68 65 53 69 7a 65 2c  ), getCacheSize,
3cd0: 20 69 4c 6e 29 3b 0a 20 20 20 20 20 20 69 66 28   iLn);.      if(
3ce0: 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43   ONLY_IF_REALLOC
3cf0: 5f 53 54 52 45 53 53 28 61 4f 70 3d 3d 30 29 20  _STRESS(aOp==0) 
3d00: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 61  ) break;.      a
3d10: 4f 70 5b 30 5d 2e 70 31 20 3d 20 69 44 62 3b 0a  Op[0].p1 = iDb;.
3d20: 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70 31 20        aOp[1].p1 
3d30: 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 61 4f 70  = iDb;.      aOp
3d40: 5b 36 5d 2e 70 31 20 3d 20 53 51 4c 49 54 45 5f  [6].p1 = SQLITE_
3d50: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
3d60: 5a 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ZE;.    }else{. 
3d70: 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20       int size = 
3d80: 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28  sqlite3AbsInt32(
3d90: 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67  sqlite3Atoi(zRig
3da0: 68 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ht));.      sqli
3db0: 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
3dc0: 72 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30  ration(pParse, 0
3dd0: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
3de0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
3df0: 76 2c 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c  v, OP_SetCookie,
3e00: 20 69 44 62 2c 20 42 54 52 45 45 5f 44 45 46 41   iDb, BTREE_DEFA
3e10: 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 2c 20  ULT_CACHE_SIZE, 
3e20: 73 69 7a 65 29 3b 0a 20 20 20 20 20 20 61 73 73  size);.      ass
3e30: 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
3e40: 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
3e50: 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 20  iDb, 0) );.     
3e60: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63   pDb->pSchema->c
3e70: 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65  ache_size = size
3e80: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
3e90: 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65  treeSetCacheSize
3ea0: 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e  (pDb->pBt, pDb->
3eb0: 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73  pSchema->cache_s
3ec0: 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ize);.    }.    
3ed0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69  break;.  }.#endi
3ee0: 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d 49  f /* !SQLITE_OMI
3ef0: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20  T_PAGER_PRAGMAS 
3f00: 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  && !SQLITE_OMIT_
3f10: 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a 23  DEPRECATED */..#
3f20: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
3f30: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
3f40: 41 47 4d 41 53 29 0a 20 20 2f 2a 0a 20 20 2a 2a  AGMAS).  /*.  **
3f50: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
3f60: 2e 5d 70 61 67 65 5f 73 69 7a 65 0a 20 20 2a 2a  .]page_size.  **
3f70: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
3f80: 2e 5d 70 61 67 65 5f 73 69 7a 65 3d 4e 0a 20 20  .]page_size=N.  
3f90: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73  **.  ** The firs
3fa0: 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74  t form reports t
3fb0: 68 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69  he current setti
3fc0: 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ng for the.  ** 
3fd0: 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69  database page si
3fe0: 7a 65 20 69 6e 20 62 79 74 65 73 2e 20 20 54 68  ze in bytes.  Th
3ff0: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65  e second form se
4000: 74 73 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61  ts the.  ** data
4010: 62 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 76  base page size v
4020: 61 6c 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65  alue.  The value
4030: 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 73 65 74   can only be set
4040: 20 69 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74   if.  ** the dat
4050: 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 79 65  abase has not ye
4060: 74 20 62 65 65 6e 20 63 72 65 61 74 65 64 2e 0a  t been created..
4070: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
4080: 54 79 70 5f 50 41 47 45 5f 53 49 5a 45 3a 20 7b  Typ_PAGE_SIZE: {
4090: 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20  .    Btree *pBt 
40a0: 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20  = pDb->pBt;.    
40b0: 61 73 73 65 72 74 28 20 70 42 74 21 3d 30 20 29  assert( pBt!=0 )
40c0: 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  ;.    if( !zRigh
40d0: 74 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 73  t ){.      int s
40e0: 69 7a 65 20 3d 20 41 4c 57 41 59 53 28 70 42 74  ize = ALWAYS(pBt
40f0: 29 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65  ) ? sqlite3Btree
4100: 47 65 74 50 61 67 65 53 69 7a 65 28 70 42 74 29  GetPageSize(pBt)
4110: 20 3a 20 30 3b 0a 20 20 20 20 20 20 72 65 74 75   : 0;.      retu
4120: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 73  rnSingleInt(v, s
4130: 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ize);.    }else{
4140: 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6c 6c 6f 63  .      /* Malloc
4150: 20 6d 61 79 20 66 61 69 6c 20 77 68 65 6e 20 73   may fail when s
4160: 65 74 74 69 6e 67 20 74 68 65 20 70 61 67 65 2d  etting the page-
4170: 73 69 7a 65 2c 20 61 73 20 74 68 65 72 65 20 69  size, as there i
4180: 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 0a 20 20  s an internal.  
4190: 20 20 20 20 2a 2a 20 62 75 66 66 65 72 20 74 68      ** buffer th
41a0: 61 74 20 74 68 65 20 70 61 67 65 72 20 6d 6f 64  at the pager mod
41b0: 75 6c 65 20 72 65 73 69 7a 65 73 20 75 73 69 6e  ule resizes usin
41c0: 67 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f  g sqlite3_reallo
41d0: 63 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  c()..      */.  
41e0: 20 20 20 20 64 62 2d 3e 6e 65 78 74 50 61 67 65      db->nextPage
41f0: 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74  size = sqlite3At
4200: 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  oi(zRight);.    
4210: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f 4d    if( SQLITE_NOM
4220: 45 4d 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  EM==sqlite3Btree
4230: 53 65 74 50 61 67 65 53 69 7a 65 28 70 42 74 2c  SetPageSize(pBt,
4240: 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73 69 7a   db->nextPagesiz
4250: 65 2c 2d 31 2c 30 29 20 29 7b 0a 20 20 20 20 20  e,-1,0) ){.     
4260: 20 20 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75     sqlite3OomFau
4270: 6c 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a  lt(db);.      }.
4280: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
4290: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
42a0: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
42b0: 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a 20  ]secure_delete. 
42c0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
42d0: 65 6d 61 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65  ema.]secure_dele
42e0: 74 65 3d 4f 4e 2f 4f 46 46 2f 46 41 53 54 0a 20  te=ON/OFF/FAST. 
42f0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72   **.  ** The fir
4300: 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20  st form reports 
4310: 74 68 65 20 63 75 72 72 65 6e 74 20 73 65 74 74  the current sett
4320: 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ing for the.  **
4330: 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 20 66   secure_delete f
4340: 6c 61 67 2e 20 20 54 68 65 20 73 65 63 6f 6e 64  lag.  The second
4350: 20 66 6f 72 6d 20 63 68 61 6e 67 65 73 20 74 68   form changes th
4360: 65 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a  e secure_delete.
4370: 20 20 2a 2a 20 66 6c 61 67 20 73 65 74 74 69 6e    ** flag settin
4380: 67 20 61 6e 64 20 72 65 70 6f 72 74 73 20 74 68  g and reports th
4390: 65 20 6e 65 77 20 76 61 6c 75 65 2e 0a 20 20 2a  e new value..  *
43a0: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
43b0: 5f 53 45 43 55 52 45 5f 44 45 4c 45 54 45 3a 20  _SECURE_DELETE: 
43c0: 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74  {.    Btree *pBt
43d0: 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20   = pDb->pBt;.   
43e0: 20 69 6e 74 20 62 20 3d 20 2d 31 3b 0a 20 20 20   int b = -1;.   
43f0: 20 61 73 73 65 72 74 28 20 70 42 74 21 3d 30 20   assert( pBt!=0 
4400: 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  );.    if( zRigh
4410: 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73  t ){.      if( s
4420: 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a  qlite3_stricmp(z
4430: 52 69 67 68 74 2c 20 22 66 61 73 74 22 29 3d 3d  Right, "fast")==
4440: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 62 20 3d  0 ){.        b =
4450: 20 32 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   2;.      }else{
4460: 0a 20 20 20 20 20 20 20 20 62 20 3d 20 73 71 6c  .        b = sql
4470: 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a  ite3GetBoolean(z
4480: 52 69 67 68 74 2c 20 30 29 3b 0a 20 20 20 20 20  Right, 0);.     
4490: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
44a0: 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 62   pId2->n==0 && b
44b0: 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  >=0 ){.      int
44c0: 20 69 69 3b 0a 20 20 20 20 20 20 66 6f 72 28 69   ii;.      for(i
44d0: 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
44e0: 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
44f0: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 63 75  sqlite3BtreeSecu
4500: 72 65 44 65 6c 65 74 65 28 64 62 2d 3e 61 44 62  reDelete(db->aDb
4510: 5b 69 69 5d 2e 70 42 74 2c 20 62 29 3b 0a 20 20  [ii].pBt, b);.  
4520: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
4530: 62 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  b = sqlite3Btree
4540: 53 65 63 75 72 65 44 65 6c 65 74 65 28 70 42 74  SecureDelete(pBt
4550: 2c 20 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , b);.    return
4560: 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 62 29 3b  SingleInt(v, b);
4570: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
4580: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
4590: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6d 61 78 5f  MA [schema.]max_
45a0: 70 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 20  page_count.  ** 
45b0: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
45c0: 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 3d  ]max_page_count=
45d0: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  N.  **.  ** The 
45e0: 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72  first form repor
45f0: 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  ts the current s
4600: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
4610: 20 2a 2a 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62   ** maximum numb
4620: 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
4630: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
4640: 2e 20 20 54 68 65 20 0a 20 20 2a 2a 20 73 65 63  .  The .  ** sec
4650: 6f 6e 64 20 66 6f 72 6d 20 61 74 74 65 6d 70 74  ond form attempt
4660: 73 20 74 6f 20 63 68 61 6e 67 65 20 74 68 69 73  s to change this
4670: 20 73 65 74 74 69 6e 67 2e 20 20 42 6f 74 68 0a   setting.  Both.
4680: 20 20 2a 2a 20 66 6f 72 6d 73 20 72 65 74 75 72    ** forms retur
4690: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65  n the current se
46a0: 74 74 69 6e 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tting..  **.  **
46b0: 20 54 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61   The absolute va
46c0: 6c 75 65 20 6f 66 20 4e 20 69 73 20 75 73 65 64  lue of N is used
46d0: 2e 20 20 54 68 69 73 20 69 73 20 75 6e 64 6f 63  .  This is undoc
46e0: 75 6d 65 6e 74 65 64 20 61 6e 64 20 6d 69 67 68  umented and migh
46f0: 74 0a 20 20 2a 2a 20 63 68 61 6e 67 65 2e 20 20  t.  ** change.  
4700: 54 68 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  The only purpose
4710: 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61   is to provide a
4720: 6e 20 65 61 73 79 20 77 61 79 20 74 6f 20 74 65  n easy way to te
4730: 73 74 0a 20 20 2a 2a 20 74 68 65 20 73 71 6c 69  st.  ** the sqli
4740: 74 65 33 41 62 73 49 6e 74 33 32 28 29 20 66 75  te3AbsInt32() fu
4750: 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a  nction..  **.  *
4760: 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d  *  PRAGMA [schem
4770: 61 2e 5d 70 61 67 65 5f 63 6f 75 6e 74 0a 20 20  a.]page_count.  
4780: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 74  **.  ** Return t
4790: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
47a0: 65 73 20 69 6e 20 74 68 65 20 73 70 65 63 69 66  es in the specif
47b0: 69 65 64 20 64 61 74 61 62 61 73 65 2e 0a 20 20  ied database..  
47c0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
47d0: 70 5f 50 41 47 45 5f 43 4f 55 4e 54 3a 20 7b 0a  p_PAGE_COUNT: {.
47e0: 20 20 20 20 69 6e 74 20 69 52 65 67 3b 0a 20 20      int iReg;.  
47f0: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
4800: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
4810: 2c 20 69 44 62 29 3b 0a 20 20 20 20 69 52 65 67  , iDb);.    iReg
4820: 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65   = ++pParse->nMe
4830: 6d 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  m;.    if( sqlit
4840: 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b  e3Tolower(zLeft[
4850: 30 5d 29 3d 3d 27 70 27 20 29 7b 0a 20 20 20 20  0])=='p' ){.    
4860: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
4870: 4f 70 32 28 76 2c 20 4f 50 5f 50 61 67 65 63 6f  Op2(v, OP_Pageco
4880: 75 6e 74 2c 20 69 44 62 2c 20 69 52 65 67 29 3b  unt, iDb, iReg);
4890: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
48a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
48b0: 4f 70 33 28 76 2c 20 4f 50 5f 4d 61 78 50 67 63  Op3(v, OP_MaxPgc
48c0: 6e 74 2c 20 69 44 62 2c 20 69 52 65 67 2c 20 0a  nt, iDb, iReg, .
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48e0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 41          sqlite3A
48f0: 62 73 49 6e 74 33 32 28 73 71 6c 69 74 65 33 41  bsInt32(sqlite3A
4900: 74 6f 69 28 7a 52 69 67 68 74 29 29 29 3b 0a 20  toi(zRight)));. 
4910: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
4920: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
4930: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 69 52 65 67  _ResultRow, iReg
4940: 2c 20 31 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  , 1);.    break;
4950: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
4960: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
4970: 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20  ]locking_mode.  
4980: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65  **  PRAGMA [sche
4990: 6d 61 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  ma.]locking_mode
49a0: 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c 75   = (normal|exclu
49b0: 73 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63 61 73  sive).  */.  cas
49c0: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e  e PragTyp_LOCKIN
49d0: 47 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 63 6f  G_MODE: {.    co
49e0: 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74 20 3d  nst char *zRet =
49f0: 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20 20 69   "normal";.    i
4a00: 6e 74 20 65 4d 6f 64 65 20 3d 20 67 65 74 4c 6f  nt eMode = getLo
4a10: 63 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67 68 74  ckingMode(zRight
4a20: 29 3b 0a 0a 20 20 20 20 69 66 28 20 70 49 64 32  );..    if( pId2
4a30: 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64 65 3d  ->n==0 && eMode=
4a40: 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f  =PAGER_LOCKINGMO
4a50: 44 45 5f 51 55 45 52 59 20 29 7b 0a 20 20 20 20  DE_QUERY ){.    
4a60: 20 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50 52 41    /* Simple "PRA
4a70: 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  GMA locking_mode
4a80: 3b 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  ;" statement. Th
4a90: 69 73 20 69 73 20 61 20 71 75 65 72 79 20 66 6f  is is a query fo
4aa0: 72 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63  r.      ** the c
4ab0: 75 72 72 65 6e 74 20 64 65 66 61 75 6c 74 20 6c  urrent default l
4ac0: 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77 68 69  ocking mode (whi
4ad0: 63 68 20 6d 61 79 20 62 65 20 64 69 66 66 65 72  ch may be differ
4ae0: 65 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20  ent to.      ** 
4af0: 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  the locking-mode
4b00: 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74   of the main dat
4b10: 61 62 61 73 65 29 2e 0a 20 20 20 20 20 20 2a 2f  abase)..      */
4b20: 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 64  .      eMode = d
4b30: 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b  b->dfltLockMode;
4b40: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
4b50: 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b    Pager *pPager;
4b60: 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 32 2d  .      if( pId2-
4b70: 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  >n==0 ){.       
4b80: 20 2f 2a 20 54 68 69 73 20 69 6e 64 69 63 61 74   /* This indicat
4b90: 65 73 20 74 68 61 74 20 6e 6f 20 64 61 74 61 62  es that no datab
4ba0: 61 73 65 20 6e 61 6d 65 20 77 61 73 20 73 70 65  ase name was spe
4bb0: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 0a 20  cified as part. 
4bc0: 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65         ** of the
4bd0: 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 2e   PRAGMA command.
4be0: 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
4bf0: 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6d  e locking-mode m
4c00: 75 73 74 20 62 65 0a 20 20 20 20 20 20 20 20 2a  ust be.        *
4c10: 2a 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61 74 74  * set on all att
4c20: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2c  ached databases,
4c30: 20 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65 20   as well as the 
4c40: 6d 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a 20 20  main db file..  
4c50: 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 20        **.       
4c60: 20 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20 73 71   ** Also, the sq
4c70: 6c 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d 6f  lite3.dfltLockMo
4c80: 64 65 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  de variable is s
4c90: 65 74 20 73 6f 20 74 68 61 74 0a 20 20 20 20 20  et so that.     
4ca0: 20 20 20 2a 2a 20 61 6e 79 20 73 75 62 73 65 71     ** any subseq
4cb0: 75 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 20  uently attached 
4cc0: 64 61 74 61 62 61 73 65 73 20 61 6c 73 6f 20 75  databases also u
4cd0: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64  se the specified
4ce0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f 63 6b  .        ** lock
4cf0: 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20 20 20  ing mode..      
4d00: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74    */.        int
4d10: 20 69 69 3b 0a 20 20 20 20 20 20 20 20 61 73 73   ii;.        ass
4d20: 65 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e 61 44  ert(pDb==&db->aD
4d30: 62 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 66  b[0]);.        f
4d40: 6f 72 28 69 69 3d 32 3b 20 69 69 3c 64 62 2d 3e  or(ii=2; ii<db->
4d50: 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
4d60: 20 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73        pPager = s
4d70: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
4d80: 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
4d90: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
4da0: 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67  ite3PagerLocking
4db0: 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f  Mode(pPager, eMo
4dc0: 64 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  de);.        }. 
4dd0: 20 20 20 20 20 20 20 64 62 2d 3e 64 66 6c 74 4c         db->dfltL
4de0: 6f 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29 65 4d  ockMode = (u8)eM
4df0: 6f 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ode;.      }.   
4e00: 20 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69     pPager = sqli
4e10: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
4e20: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 65  b->pBt);.      e
4e30: 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 50 61  Mode = sqlite3Pa
4e40: 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70  gerLockingMode(p
4e50: 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20  Pager, eMode);. 
4e60: 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74     }..    assert
4e70: 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c  ( eMode==PAGER_L
4e80: 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41  OCKINGMODE_NORMA
4e90: 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  L.            ||
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 45 58 43 4c 55 53  CKINGMODE_EXCLUS
4ec0: 49 56 45 20 29 3b 0a 20 20 20 20 69 66 28 20 65  IVE );.    if( e
4ed0: 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b  Mode==PAGER_LOCK
4ee0: 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56  INGMODE_EXCLUSIV
4ef0: 45 20 29 7b 0a 20 20 20 20 20 20 7a 52 65 74 20  E ){.      zRet 
4f00: 3d 20 22 65 78 63 6c 75 73 69 76 65 22 3b 0a 20  = "exclusive";. 
4f10: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53     }.    returnS
4f20: 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 7a 52 65  ingleText(v, zRe
4f30: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
4f40: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
4f50: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6a  RAGMA [schema.]j
4f60: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a 2a  ournal_mode.  **
4f70: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
4f80: 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d  .]journal_mode =
4f90: 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20  .  **           
4fa0: 20 20 20 20 20 20 20 20 20 20 20 28 64 65 6c 65             (dele
4fb0: 74 65 7c 70 65 72 73 69 73 74 7c 6f 66 66 7c 74  te|persist|off|t
4fc0: 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72 79 7c 77  runcate|memory|w
4fd0: 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20 20 63  al|off).  */.  c
4fe0: 61 73 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52  ase PragTyp_JOUR
4ff0: 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20  NAL_MODE: {.    
5000: 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20 20 20 20  int eMode;      
5010: 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
5020: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
5030: 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73 20 2a 2f  E_XXX symbols */
5040: 0a 20 20 20 20 69 6e 74 20 69 69 3b 20 20 20 20  .    int ii;    
5050: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
5060: 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20 20 20 69  ounter */..    i
5070: 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a  f( zRight==0 ){.
5080: 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72        /* If ther
5090: 65 20 69 73 20 6e 6f 20 22 3d 4d 4f 44 45 22 20  e is no "=MODE" 
50a0: 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 61 67  part of the prag
50b0: 6d 61 2c 20 64 6f 20 61 20 71 75 65 72 79 20 66  ma, do a query f
50c0: 6f 72 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20  or the.      ** 
50d0: 63 75 72 72 65 6e 74 20 6d 6f 64 65 20 2a 2f 0a  current mode */.
50e0: 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50 41        eMode = PA
50f0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
5100: 51 55 45 52 59 3b 0a 20 20 20 20 7d 65 6c 73 65  QUERY;.    }else
5110: 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
5120: 61 72 20 2a 7a 4d 6f 64 65 3b 0a 20 20 20 20 20  ar *zMode;.     
5130: 20 69 6e 74 20 6e 20 3d 20 73 71 6c 69 74 65 33   int n = sqlite3
5140: 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29  Strlen30(zRight)
5150: 3b 0a 20 20 20 20 20 20 66 6f 72 28 65 4d 6f 64  ;.      for(eMod
5160: 65 3d 30 3b 20 28 7a 4d 6f 64 65 20 3d 20 73 71  e=0; (zMode = sq
5170: 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
5180: 6e 61 6d 65 28 65 4d 6f 64 65 29 29 21 3d 30 3b  name(eMode))!=0;
5190: 20 65 4d 6f 64 65 2b 2b 29 7b 0a 20 20 20 20 20   eMode++){.     
51a0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
51b0: 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 7a  rNICmp(zRight, z
51c0: 4d 6f 64 65 2c 20 6e 29 3d 3d 30 20 29 20 62 72  Mode, n)==0 ) br
51d0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
51e0: 20 20 20 69 66 28 20 21 7a 4d 6f 64 65 20 29 7b     if( !zMode ){
51f0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
5200: 68 65 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20  he "=MODE" part 
5210: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61  does not match a
5220: 6e 79 20 6b 6e 6f 77 6e 20 6a 6f 75 72 6e 61 6c  ny known journal
5230: 20 6d 6f 64 65 2c 0a 20 20 20 20 20 20 20 20 2a   mode,.        *
5240: 2a 20 74 68 65 6e 20 64 6f 20 61 20 71 75 65 72  * then do a quer
5250: 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 65 4d 6f  y */.        eMo
5260: 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e  de = PAGER_JOURN
5270: 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20  ALMODE_QUERY;.  
5280: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
5290: 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52  if( eMode==PAGER
52a0: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
52b0: 52 59 20 26 26 20 70 49 64 32 2d 3e 6e 3d 3d 30  RY && pId2->n==0
52c0: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e   ){.      /* Con
52d0: 76 65 72 74 20 22 50 52 41 47 4d 41 20 6a 6f 75  vert "PRAGMA jou
52e0: 72 6e 61 6c 5f 6d 6f 64 65 22 20 69 6e 74 6f 20  rnal_mode" into 
52f0: 22 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75  "PRAGMA main.jou
5300: 72 6e 61 6c 5f 6d 6f 64 65 22 20 2a 2f 0a 20 20  rnal_mode" */.  
5310: 20 20 20 20 69 44 62 20 3d 20 30 3b 0a 20 20 20      iDb = 0;.   
5320: 20 20 20 70 49 64 32 2d 3e 6e 20 3d 20 31 3b 0a     pId2->n = 1;.
5330: 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 69      }.    for(ii
5340: 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d  =db->nDb-1; ii>=
5350: 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20  0; ii--){.      
5360: 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  if( db->aDb[ii].
5370: 70 42 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20  pBt && (ii==iDb 
5380: 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29  || pId2->n==0) )
5390: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
53a0: 33 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76  3VdbeUsesBtree(v
53b0: 2c 20 69 69 29 3b 0a 20 20 20 20 20 20 20 20 73  , ii);.        s
53c0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
53d0: 28 76 2c 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f  (v, OP_JournalMo
53e0: 64 65 2c 20 69 69 2c 20 31 2c 20 65 4d 6f 64 65  de, ii, 1, eMode
53f0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
5400: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
5410: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
5420: 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20  ultRow, 1, 1);. 
5430: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
5440: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
5450: 20 5b 73 63 68 65 6d 61 2e 5d 6a 6f 75 72 6e 61   [schema.]journa
5460: 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 0a 20 20 2a  l_size_limit.  *
5470: 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d  *  PRAGMA [schem
5480: 61 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f  a.]journal_size_
5490: 6c 69 6d 69 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a  limit=N.  **.  *
54a0: 2a 20 47 65 74 20 6f 72 20 73 65 74 20 74 68 65  * Get or set the
54b0: 20 73 69 7a 65 20 6c 69 6d 69 74 20 6f 6e 20 72   size limit on r
54c0: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
54d0: 66 69 6c 65 73 2e 0a 20 20 2a 2f 0a 20 20 63 61  files..  */.  ca
54e0: 73 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e  se PragTyp_JOURN
54f0: 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54 3a 20 7b  AL_SIZE_LIMIT: {
5500: 0a 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67  .    Pager *pPag
5510: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
5520: 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29  ePager(pDb->pBt)
5530: 3b 0a 20 20 20 20 69 36 34 20 69 4c 69 6d 69 74  ;.    i64 iLimit
5540: 20 3d 20 2d 32 3b 0a 20 20 20 20 69 66 28 20 7a   = -2;.    if( z
5550: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
5560: 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
5570: 49 36 34 28 7a 52 69 67 68 74 2c 20 26 69 4c 69  I64(zRight, &iLi
5580: 6d 69 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  mit);.      if( 
5590: 69 4c 69 6d 69 74 3c 2d 31 20 29 20 69 4c 69 6d  iLimit<-1 ) iLim
55a0: 69 74 20 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a 20  it = -1;.    }. 
55b0: 20 20 20 69 4c 69 6d 69 74 20 3d 20 73 71 6c 69     iLimit = sqli
55c0: 74 65 33 50 61 67 65 72 4a 6f 75 72 6e 61 6c 53  te3PagerJournalS
55d0: 69 7a 65 4c 69 6d 69 74 28 70 50 61 67 65 72 2c  izeLimit(pPager,
55e0: 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 72 65   iLimit);.    re
55f0: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c  turnSingleInt(v,
5600: 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 62 72   iLimit);.    br
5610: 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66  eak;.  }..#endif
5620: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
5630: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
5640: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
5650: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 75 74  GMA [schema.]aut
5660: 6f 5f 76 61 63 75 75 6d 0a 20 20 2a 2a 20 20 50  o_vacuum.  **  P
5670: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61  RAGMA [schema.]a
5680: 75 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a  uto_vacuum=N.  *
5690: 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20 73 65  *.  ** Get or se
56a0: 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  t the value of t
56b0: 68 65 20 64 61 74 61 62 61 73 65 20 27 61 75 74  he database 'aut
56c0: 6f 2d 76 61 63 75 75 6d 27 20 70 61 72 61 6d 65  o-vacuum' parame
56d0: 74 65 72 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61  ter..  ** The va
56e0: 6c 75 65 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20  lue is one of:  
56f0: 30 20 4e 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20  0 NONE 1 FULL 2 
5700: 49 4e 43 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f  INCREMENTAL.  */
5710: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5720: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
5730: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 41    case PragTyp_A
5740: 55 54 4f 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20  UTO_VACUUM: {.  
5750: 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70    Btree *pBt = p
5760: 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73 73  Db->pBt;.    ass
5770: 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20  ert( pBt!=0 );. 
5780: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
5790: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  {.      returnSi
57a0: 6e 67 6c 65 49 6e 74 28 76 2c 20 73 71 6c 69 74  ngleInt(v, sqlit
57b0: 65 33 42 74 72 65 65 47 65 74 41 75 74 6f 56 61  e3BtreeGetAutoVa
57c0: 63 75 75 6d 28 70 42 74 29 29 3b 0a 20 20 20 20  cuum(pBt));.    
57d0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
57e0: 20 65 41 75 74 6f 20 3d 20 67 65 74 41 75 74 6f   eAuto = getAuto
57f0: 56 61 63 75 75 6d 28 7a 52 69 67 68 74 29 3b 0a  Vacuum(zRight);.
5800: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65 41        assert( eA
5810: 75 74 6f 3e 3d 30 20 26 26 20 65 41 75 74 6f 3c  uto>=0 && eAuto<
5820: 3d 32 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  =2 );.      db->
5830: 6e 65 78 74 41 75 74 6f 76 61 63 20 3d 20 28 75  nextAutovac = (u
5840: 38 29 65 41 75 74 6f 3b 0a 20 20 20 20 20 20 2f  8)eAuto;.      /
5850: 2a 20 43 61 6c 6c 20 53 65 74 41 75 74 6f 56 61  * Call SetAutoVa
5860: 63 75 75 6d 28 29 20 74 6f 20 73 65 74 20 69 6e  cuum() to set in
5870: 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69 6e 74  itialize the int
5880: 65 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64 0a 20  ernal auto and. 
5890: 20 20 20 20 20 2a 2a 20 69 6e 63 72 2d 76 61 63       ** incr-vac
58a0: 75 75 6d 20 66 6c 61 67 73 2e 20 54 68 69 73 20  uum flags. This 
58b0: 69 73 20 72 65 71 75 69 72 65 64 20 69 6e 20 63  is required in c
58c0: 61 73 65 20 74 68 69 73 20 63 6f 6e 6e 65 63 74  ase this connect
58d0: 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 63 72 65  ion.      ** cre
58e0: 61 74 65 73 20 74 68 65 20 64 61 74 61 62 61 73  ates the databas
58f0: 65 20 66 69 6c 65 2e 20 49 74 20 69 73 20 69 6d  e file. It is im
5900: 70 6f 72 74 61 6e 74 20 74 68 61 74 20 69 74 20  portant that it 
5910: 69 73 20 63 72 65 61 74 65 64 0a 20 20 20 20 20  is created.     
5920: 20 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d 76   ** as an auto-v
5930: 61 63 75 75 6d 20 63 61 70 61 62 6c 65 20 64 62  acuum capable db
5940: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
5950: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
5960: 65 65 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28  eeSetAutoVacuum(
5970: 70 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20 20 20  pBt, eAuto);.   
5980: 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
5990: 45 5f 4f 4b 20 26 26 20 28 65 41 75 74 6f 3d 3d  E_OK && (eAuto==
59a0: 31 20 7c 7c 20 65 41 75 74 6f 3d 3d 32 29 20 29  1 || eAuto==2) )
59b0: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65  {.        /* Whe
59c0: 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20 61 75  n setting the au
59d0: 74 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65 20 74  to_vacuum mode t
59e0: 6f 20 65 69 74 68 65 72 20 22 66 75 6c 6c 22 20  o either "full" 
59f0: 6f 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 22  or .        ** "
5a00: 69 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20 77 72  incremental", wr
5a10: 69 74 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ite the value of
5a20: 20 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68 65 20   meta[6] in the 
5a30: 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 20  database.       
5a40: 20 2a 2a 20 66 69 6c 65 2e 20 42 65 66 6f 72 65   ** file. Before
5a50: 20 77 72 69 74 69 6e 67 20 74 6f 20 6d 65 74 61   writing to meta
5a60: 5b 36 5d 2c 20 63 68 65 63 6b 20 74 68 61 74 20  [6], check that 
5a70: 6d 65 74 61 5b 33 5d 20 69 6e 64 69 63 61 74 65  meta[3] indicate
5a80: 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61  s.        ** tha
5a90: 74 20 74 68 69 73 20 72 65 61 6c 6c 79 20 69 73  t this really is
5aa0: 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20   an auto-vacuum 
5ab0: 63 61 70 61 62 6c 65 20 64 61 74 61 62 61 73 65  capable database
5ac0: 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20  ..        */.   
5ad0: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
5ae0: 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45  t int iLn = VDBE
5af0: 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32  _OFFSET_LINENO(2
5b00: 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61 74 69  );.        stati
5b10: 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
5b20: 73 74 20 73 65 74 4d 65 74 61 36 5b 5d 20 3d 20  st setMeta6[] = 
5b30: 7b 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50  {.          { OP
5b40: 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20  _Transaction,   
5b50: 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20   0,         1,  
5b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
5b70: 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20  },    /* 0 */.  
5b80: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61          { OP_Rea
5b90: 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c 20  dCookie,     0, 
5ba0: 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20          1,      
5bb0: 20 20 20 42 54 52 45 45 5f 4c 41 52 47 45 53 54     BTREE_LARGEST
5bc0: 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20 20  _ROOT_PAGE},.   
5bd0: 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20         { OP_If, 
5be0: 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20 20              1,  
5bf0: 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20         0,       
5c00: 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20            0},   
5c10: 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 20   /* 2 */.       
5c20: 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20     { OP_Halt,   
5c30: 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f          SQLITE_O
5c40: 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20 20 20  K, OE_Abort,    
5c50: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
5c60: 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b  3 */.          {
5c70: 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20   OP_SetCookie,  
5c80: 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 42      0,         B
5c90: 54 52 45 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d  TREE_INCR_VACUUM
5ca0: 2c 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f  , 0},    /* 4 */
5cb0: 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  .        };.    
5cc0: 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b      VdbeOp *aOp;
5cd0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 41 64  .        int iAd
5ce0: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
5cf0: 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 3b 0a  CurrentAddr(v);.
5d00: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
5d10: 64 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f  dbeVerifyNoMallo
5d20: 63 52 65 71 75 69 72 65 64 28 76 2c 20 41 72 72  cRequired(v, Arr
5d30: 61 79 53 69 7a 65 28 73 65 74 4d 65 74 61 36 29  aySize(setMeta6)
5d40: 29 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 20 3d  );.        aOp =
5d50: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5d60: 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69  pList(v, ArraySi
5d70: 7a 65 28 73 65 74 4d 65 74 61 36 29 2c 20 73 65  ze(setMeta6), se
5d80: 74 4d 65 74 61 36 2c 20 69 4c 6e 29 3b 0a 20 20  tMeta6, iLn);.  
5d90: 20 20 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49        if( ONLY_I
5da0: 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  F_REALLOC_STRESS
5db0: 28 61 4f 70 3d 3d 30 29 20 29 20 62 72 65 61 6b  (aOp==0) ) break
5dc0: 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 30 5d  ;.        aOp[0]
5dd0: 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20  .p1 = iDb;.     
5de0: 20 20 20 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69     aOp[1].p1 = i
5df0: 44 62 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b  Db;.        aOp[
5e00: 32 5d 2e 70 32 20 3d 20 69 41 64 64 72 2b 34 3b  2].p2 = iAddr+4;
5e10: 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 34 5d 2e  .        aOp[4].
5e20: 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20  p1 = iDb;.      
5e30: 20 20 61 4f 70 5b 34 5d 2e 70 33 20 3d 20 65 41    aOp[4].p3 = eA
5e40: 75 74 6f 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  uto - 1;.       
5e50: 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73   sqlite3VdbeUses
5e60: 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20  Btree(v, iDb);. 
5e70: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
5e80: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
5e90: 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50  if..  /*.  **  P
5ea0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69  RAGMA [schema.]i
5eb0: 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75  ncremental_vacuu
5ec0: 6d 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44  m(N).  **.  ** D
5ed0: 6f 20 4e 20 73 74 65 70 73 20 6f 66 20 69 6e 63  o N steps of inc
5ee0: 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 69  remental vacuumi
5ef0: 6e 67 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65  ng on a database
5f00: 2e 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ..  */.#ifndef S
5f10: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
5f20: 41 43 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61  ACUUM.  case Pra
5f30: 67 54 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c  gTyp_INCREMENTAL
5f40: 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69  _VACUUM: {.    i
5f50: 6e 74 20 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b  nt iLimit, addr;
5f60: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d  .    if( zRight=
5f70: 3d 30 20 7c 7c 20 21 73 71 6c 69 74 65 33 47 65  =0 || !sqlite3Ge
5f80: 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26  tInt32(zRight, &
5f90: 69 4c 69 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69  iLimit) || iLimi
5fa0: 74 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 4c  t<=0 ){.      iL
5fb0: 69 6d 69 74 20 3d 20 30 78 37 66 66 66 66 66 66  imit = 0x7ffffff
5fc0: 66 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  f;.    }.    sql
5fd0: 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70  ite3BeginWriteOp
5fe0: 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20  eration(pParse, 
5ff0: 30 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c  0, iDb);.    sql
6000: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
6010: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c  , OP_Integer, iL
6020: 69 6d 69 74 2c 20 31 29 3b 0a 20 20 20 20 61 64  imit, 1);.    ad
6030: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
6040: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63  AddOp1(v, OP_Inc
6050: 72 56 61 63 75 75 6d 2c 20 69 44 62 29 3b 20 56  rVacuum, iDb); V
6060: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
6070: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
6080: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp1(v, OP_Resu
6090: 6c 74 52 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73  ltRow, 1);.    s
60a0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
60b0: 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31  (v, OP_AddImm, 1
60c0: 2c 20 2d 31 29 3b 0a 20 20 20 20 73 71 6c 69 74  , -1);.    sqlit
60d0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
60e0: 4f 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64  OP_IfPos, 1, add
60f0: 72 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  r); VdbeCoverage
6100: 28 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  (v);.    sqlite3
6110: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
6120: 61 64 64 72 29 3b 0a 20 20 20 20 62 72 65 61 6b  addr);.    break
6130: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ;.  }.#endif..#i
6140: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
6150: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
6160: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
6170: 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65  A [schema.]cache
6180: 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47  _size.  **  PRAG
6190: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68  MA [schema.]cach
61a0: 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20  e_size=N.  **.  
61b0: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
61c0: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
61d0: 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74  rrent local sett
61e0: 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ing for the.  **
61f0: 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65   page cache size
6200: 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  . The second for
6210: 6d 20 73 65 74 73 20 74 68 65 20 6c 6f 63 61 6c  m sets the local
6220: 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65  .  ** page cache
6230: 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 49 66   size value.  If
6240: 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65 20 74   N is positive t
6250: 68 65 6e 20 74 68 61 74 20 69 73 20 74 68 65 0a  hen that is the.
6260: 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70    ** number of p
6270: 61 67 65 73 20 69 6e 20 74 68 65 20 63 61 63 68  ages in the cach
6280: 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61  e.  If N is nega
6290: 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65 0a 20  tive, then the. 
62a0: 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61   ** number of pa
62b0: 67 65 73 20 69 73 20 61 64 6a 75 73 74 65 64 20  ges is adjusted 
62c0: 73 6f 20 74 68 61 74 20 74 68 65 20 63 61 63 68  so that the cach
62d0: 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69 62 79  e uses -N kibiby
62e0: 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f  tes.  ** of memo
62f0: 72 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ry..  */.  case 
6300: 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f 53 49  PragTyp_CACHE_SI
6310: 5a 45 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74  ZE: {.    assert
6320: 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
6330: 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62  utexHeld(db, iDb
6340: 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20  , 0) );.    if( 
6350: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
6360: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
6370: 28 76 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  (v, pDb->pSchema
6380: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20  ->cache_size);. 
6390: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
63a0: 69 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74  int size = sqlit
63b0: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a  e3Atoi(zRight);.
63c0: 20 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65        pDb->pSche
63d0: 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d  ma->cache_size =
63e0: 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c   size;.      sql
63f0: 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
6400: 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20  eSize(pDb->pBt, 
6410: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61  pDb->pSchema->ca
6420: 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d  che_size);.    }
6430: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
6440: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
6450: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68  MA [schema.]cach
6460: 65 5f 73 70 69 6c 6c 0a 20 20 2a 2a 20 20 50 52  e_spill.  **  PR
6470: 41 47 4d 41 20 63 61 63 68 65 5f 73 70 69 6c 6c  AGMA cache_spill
6480: 3d 42 4f 4f 4c 45 41 4e 0a 20 20 2a 2a 20 20 50  =BOOLEAN.  **  P
6490: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63  RAGMA [schema.]c
64a0: 61 63 68 65 5f 73 70 69 6c 6c 3d 4e 0a 20 20 2a  ache_spill=N.  *
64b0: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
64c0: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
64d0: 65 20 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20  e current local 
64e0: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
64f0: 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20    ** page cache 
6500: 73 70 69 6c 6c 20 73 69 7a 65 2e 20 54 68 65 20  spill size. The 
6510: 73 65 63 6f 6e 64 20 66 6f 72 6d 20 74 75 72 6e  second form turn
6520: 73 20 63 61 63 68 65 20 73 70 69 6c 6c 20 6f 6e  s cache spill on
6530: 0a 20 20 2a 2a 20 6f 72 20 6f 66 66 2e 20 20 57  .  ** or off.  W
6540: 68 65 6e 20 74 75 72 6e 6e 69 6e 67 20 63 61 63  hen turnning cac
6550: 68 65 20 73 70 69 6c 6c 20 6f 6e 2c 20 74 68 65  he spill on, the
6560: 20 73 69 7a 65 20 69 73 20 73 65 74 20 74 6f 20   size is set to 
6570: 74 68 65 0a 20 20 2a 2a 20 63 75 72 72 65 6e 74  the.  ** current
6580: 20 63 61 63 68 65 5f 73 69 7a 65 2e 20 20 54 68   cache_size.  Th
6590: 65 20 74 68 69 72 64 20 66 6f 72 6d 20 73 65 74  e third form set
65a0: 73 20 61 20 73 70 69 6c 6c 20 73 69 7a 65 20 74  s a spill size t
65b0: 68 61 74 0a 20 20 2a 2a 20 6d 61 79 20 62 65 20  hat.  ** may be 
65c0: 64 69 66 66 65 72 65 6e 74 20 66 6f 72 6d 20 74  different form t
65d0: 68 65 20 63 61 63 68 65 20 73 69 7a 65 2e 0a 20  he cache size.. 
65e0: 20 2a 2a 20 49 66 20 4e 20 69 73 20 70 6f 73 69   ** If N is posi
65f0: 74 69 76 65 20 74 68 65 6e 20 74 68 61 74 20 69  tive then that i
6600: 73 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65  s the.  ** numbe
6610: 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
6620: 65 20 63 61 63 68 65 2e 20 20 49 66 20 4e 20 69  e cache.  If N i
6630: 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e  s negative, then
6640: 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72   the.  ** number
6650: 20 6f 66 20 70 61 67 65 73 20 69 73 20 61 64 6a   of pages is adj
6660: 75 73 74 65 64 20 73 6f 20 74 68 61 74 20 74 68  usted so that th
6670: 65 20 63 61 63 68 65 20 75 73 65 73 20 2d 4e 20  e cache uses -N 
6680: 6b 69 62 69 62 79 74 65 73 0a 20 20 2a 2a 20 6f  kibibytes.  ** o
6690: 66 20 6d 65 6d 6f 72 79 2e 0a 20 20 2a 2a 0a 20  f memory..  **. 
66a0: 20 2a 2a 20 49 66 20 74 68 65 20 6e 75 6d 62 65   ** If the numbe
66b0: 72 20 6f 66 20 63 61 63 68 65 5f 73 70 69 6c 6c  r of cache_spill
66c0: 20 70 61 67 65 73 20 69 73 20 6c 65 73 73 20 74   pages is less t
66d0: 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  hen the number o
66e0: 66 0a 20 20 2a 2a 20 63 61 63 68 65 5f 73 69 7a  f.  ** cache_siz
66f0: 65 20 70 61 67 65 73 2c 20 6e 6f 20 73 70 69 6c  e pages, no spil
6700: 6c 69 6e 67 20 6f 63 63 75 72 73 20 75 6e 74 69  ling occurs unti
6710: 6c 20 74 68 65 20 70 61 67 65 20 63 6f 75 6e 74  l the page count
6720: 20 65 78 63 65 65 64 73 0a 20 20 2a 2a 20 74 68   exceeds.  ** th
6730: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 61 63 68  e number of cach
6740: 65 5f 73 69 7a 65 20 70 61 67 65 73 2e 0a 20 20  e_size pages..  
6750: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 63 61 63 68  **.  ** The cach
6760: 65 5f 73 70 69 6c 6c 3d 42 4f 4f 4c 45 41 4e 20  e_spill=BOOLEAN 
6770: 73 65 74 74 69 6e 67 20 61 70 70 6c 69 65 73 20  setting applies 
6780: 74 6f 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  to all attached 
6790: 73 63 68 65 6d 61 73 2c 0a 20 20 2a 2a 20 6e 6f  schemas,.  ** no
67a0: 74 20 6a 75 73 74 20 74 68 65 20 73 63 68 65 6d  t just the schem
67b0: 61 20 73 70 65 63 69 66 69 65 64 2e 0a 20 20 2a  a specified..  *
67c0: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
67d0: 5f 43 41 43 48 45 5f 53 50 49 4c 4c 3a 20 7b 0a  _CACHE_SPILL: {.
67e0: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
67f0: 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
6800: 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29  ld(db, iDb, 0) )
6810: 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  ;.    if( !zRigh
6820: 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  t ){.      retur
6830: 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 0a 20 20  nSingleInt(v,.  
6840: 20 20 20 20 20 20 20 28 64 62 2d 3e 66 6c 61 67         (db->flag
6850: 73 20 26 20 53 51 4c 49 54 45 5f 43 61 63 68 65  s & SQLITE_Cache
6860: 53 70 69 6c 6c 29 3d 3d 30 20 3f 20 30 20 3a 20  Spill)==0 ? 0 : 
6870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
6880: 69 74 65 33 42 74 72 65 65 53 65 74 53 70 69 6c  ite3BtreeSetSpil
6890: 6c 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 30  lSize(pDb->pBt,0
68a0: 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ));.    }else{. 
68b0: 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20       int size = 
68c0: 31 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  1;.      if( sql
68d0: 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69  ite3GetInt32(zRi
68e0: 67 68 74 2c 20 26 73 69 7a 65 29 20 29 7b 0a 20  ght, &size) ){. 
68f0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
6900: 72 65 65 53 65 74 53 70 69 6c 6c 53 69 7a 65 28  reeSetSpillSize(
6910: 70 44 62 2d 3e 70 42 74 2c 20 73 69 7a 65 29 3b  pDb->pBt, size);
6920: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
6930: 66 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  f( sqlite3GetBoo
6940: 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 73 69 7a  lean(zRight, siz
6950: 65 21 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20  e!=0) ){.       
6960: 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
6970: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 3b  LITE_CacheSpill;
6980: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
6990: 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20        db->flags 
69a0: 26 3d 20 7e 53 51 4c 49 54 45 5f 43 61 63 68 65  &= ~SQLITE_Cache
69b0: 53 70 69 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20  Spill;.      }. 
69c0: 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72       setAllPager
69d0: 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20 7d  Flags(db);.    }
69e0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
69f0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
6a00: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6d 6d 61 70  MA [schema.]mmap
6a10: 5f 73 69 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20 20  _size(N).  **.  
6a20: 2a 2a 20 55 73 65 64 20 74 6f 20 73 65 74 20 6d  ** Used to set m
6a30: 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69  apping size limi
6a40: 74 2e 20 54 68 65 20 6d 61 70 70 69 6e 67 20 73  t. The mapping s
6a50: 69 7a 65 20 6c 69 6d 69 74 20 69 73 0a 20 20 2a  ize limit is.  *
6a60: 2a 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20  * used to limit 
6a70: 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73 69  the aggregate si
6a80: 7a 65 20 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72 79  ze of all memory
6a90: 20 6d 61 70 70 65 64 20 72 65 67 69 6f 6e 73 20   mapped regions 
6aa0: 6f 66 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61  of the.  ** data
6ab0: 62 61 73 65 20 66 69 6c 65 2e 20 49 66 20 74 68  base file. If th
6ac0: 69 73 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  is parameter is 
6ad0: 73 65 74 20 74 6f 20 7a 65 72 6f 2c 20 74 68 65  set to zero, the
6ae0: 6e 20 6d 65 6d 6f 72 79 20 6d 61 70 70 69 6e 67  n memory mapping
6af0: 0a 20 20 2a 2a 20 69 73 20 6e 6f 74 20 75 73 65  .  ** is not use
6b00: 64 20 61 74 20 61 6c 6c 2e 20 20 49 66 20 4e 20  d at all.  If N 
6b10: 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65  is negative, the
6b20: 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d 65  n the default me
6b30: 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 6c 69  mory map.  ** li
6b40: 6d 69 74 20 64 65 74 65 72 6d 69 6e 65 64 20 62  mit determined b
6b50: 79 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  y sqlite3_config
6b60: 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d  (SQLITE_CONFIG_M
6b70: 4d 41 50 5f 53 49 5a 45 29 20 69 73 20 73 65 74  MAP_SIZE) is set
6b80: 2e 0a 20 20 2a 2a 20 54 68 65 20 70 61 72 61 6d  ..  ** The param
6b90: 65 74 65 72 20 4e 20 69 73 20 6d 65 61 73 75 72  eter N is measur
6ba0: 65 64 20 69 6e 20 62 79 74 65 73 2e 0a 20 20 2a  ed in bytes..  *
6bb0: 2a 0a 20 20 2a 2a 20 54 68 69 73 20 76 61 6c 75  *.  ** This valu
6bc0: 65 20 69 73 20 61 64 76 69 73 6f 72 79 2e 20 20  e is advisory.  
6bd0: 54 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56  The underlying V
6be0: 46 53 20 69 73 20 66 72 65 65 20 74 6f 20 6d 65  FS is free to me
6bf0: 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 61 73  mory map.  ** as
6c00: 20 6c 69 74 74 6c 65 20 6f 72 20 61 73 20 6d 75   little or as mu
6c10: 63 68 20 61 73 20 69 74 20 77 61 6e 74 73 2e 20  ch as it wants. 
6c20: 20 45 78 63 65 70 74 2c 20 69 66 20 4e 20 69 73   Except, if N is
6c30: 20 73 65 74 20 74 6f 20 30 20 74 68 65 6e 20 74   set to 0 then t
6c40: 68 65 0a 20 20 2a 2a 20 75 70 70 65 72 20 6c 61  he.  ** upper la
6c50: 79 65 72 73 20 77 69 6c 6c 20 6e 65 76 65 72 20  yers will never 
6c60: 69 6e 76 6f 6b 65 20 74 68 65 20 78 46 65 74 63  invoke the xFetc
6c70: 68 20 69 6e 74 65 72 66 61 63 65 73 20 74 6f 20  h interfaces to 
6c80: 74 68 65 20 56 46 53 2e 0a 20 20 2a 2f 0a 20 20  the VFS..  */.  
6c90: 63 61 73 65 20 50 72 61 67 54 79 70 5f 4d 4d 41  case PragTyp_MMA
6ca0: 50 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73 71  P_SIZE: {.    sq
6cb0: 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 3b 0a  lite3_int64 sz;.
6cc0: 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  #if SQLITE_MAX_M
6cd0: 4d 41 50 5f 53 49 5a 45 3e 30 0a 20 20 20 20 61  MAP_SIZE>0.    a
6ce0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
6cf0: 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
6d00: 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
6d10: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
6d20: 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20       int ii;.   
6d30: 20 20 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48     sqlite3DecOrH
6d40: 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20  exToI64(zRight, 
6d50: 26 73 7a 29 3b 0a 20 20 20 20 20 20 69 66 28 20  &sz);.      if( 
6d60: 73 7a 3c 30 20 29 20 73 7a 20 3d 20 73 71 6c 69  sz<0 ) sz = sqli
6d70: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
6d80: 73 7a 4d 6d 61 70 3b 0a 20 20 20 20 20 20 69 66  szMmap;.      if
6d90: 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 20 64  ( pId2->n==0 ) d
6da0: 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b 0a  b->szMmap = sz;.
6db0: 20 20 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d        for(ii=db-
6dc0: 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69  >nDb-1; ii>=0; i
6dd0: 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 69 66  i--){.        if
6de0: 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  ( db->aDb[ii].pB
6df0: 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c  t && (ii==iDb ||
6e00: 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a   pId2->n==0) ){.
6e10: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
6e20: 33 42 74 72 65 65 53 65 74 4d 6d 61 70 4c 69 6d  3BtreeSetMmapLim
6e30: 69 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  it(db->aDb[ii].p
6e40: 42 74 2c 20 73 7a 29 3b 0a 20 20 20 20 20 20 20  Bt, sz);.       
6e50: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
6e60: 0a 20 20 20 20 73 7a 20 3d 20 2d 31 3b 0a 20 20  .    sz = -1;.  
6e70: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66    rc = sqlite3_f
6e80: 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20  ile_control(db, 
6e90: 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54  zDb, SQLITE_FCNT
6ea0: 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20 26 73 7a  L_MMAP_SIZE, &sz
6eb0: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 73 7a 20  );.#else.    sz 
6ec0: 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  = 0;.    rc = SQ
6ed0: 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a  LITE_OK;.#endif.
6ee0: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
6ef0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
6f00: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76  eturnSingleInt(v
6f10: 2c 20 73 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65  , sz);.    }else
6f20: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
6f30: 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20 20 20 20  NOTFOUND ){.    
6f40: 20 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b    pParse->nErr++
6f50: 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  ;.      pParse->
6f60: 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 7d 0a 20  rc = rc;.    }. 
6f70: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
6f80: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
6f90: 41 20 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 2a  A temp_store.  *
6fa0: 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f  *   PRAGMA temp_
6fb0: 73 74 6f 72 65 20 3d 20 22 64 65 66 61 75 6c 74  store = "default
6fc0: 22 7c 22 6d 65 6d 6f 72 79 22 7c 22 66 69 6c 65  "|"memory"|"file
6fd0: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
6fe0: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f  rn or set the lo
6ff0: 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65  cal value of the
7000: 20 74 65 6d 70 5f 73 74 6f 72 65 20 66 6c 61 67   temp_store flag
7010: 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a  .  Changing.  **
7020: 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65   the local value
7030: 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63   does not make c
7040: 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 69  hanges to the di
7050: 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68 65 20  sk file and the 
7060: 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20 76 61 6c  default.  ** val
7070: 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73 74 6f  ue will be resto
7080: 72 65 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d  red the next tim
7090: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  e the database i
70a0: 73 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2a 0a 20  s opened..  **. 
70b0: 20 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 69 74   ** Note that it
70c0: 20 69 73 20 70 6f 73 73 69 62 6c 65 20 66 6f 72   is possible for
70d0: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 6f 6d   the library com
70e0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
70f0: 73 20 74 6f 0a 20 20 2a 2a 20 6f 76 65 72 72 69  s to.  ** overri
7100: 64 65 20 74 68 69 73 20 73 65 74 74 69 6e 67 0a  de this setting.
7110: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
7120: 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 3a 20  Typ_TEMP_STORE: 
7130: 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  {.    if( !zRigh
7140: 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  t ){.      retur
7150: 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 64 62  nSingleInt(v, db
7160: 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 29 3b 0a 20  ->temp_store);. 
7170: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
7180: 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61 67  changeTempStorag
7190: 65 28 70 50 61 72 73 65 2c 20 7a 52 69 67 68 74  e(pParse, zRight
71a0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65  );.    }.    bre
71b0: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
71c0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  **   PRAGMA temp
71d0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
71e0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74  .  **   PRAGMA t
71f0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
7200: 6f 72 79 20 3d 20 22 22 7c 22 64 69 72 65 63 74  ory = ""|"direct
7210: 6f 72 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20  ory_name".  **. 
7220: 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65   ** Return or se
7230: 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75  t the local valu
7240: 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73 74  e of the temp_st
7250: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 66 6c  ore_directory fl
7260: 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20  ag.  Changing.  
7270: 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 73 65 74  ** the value set
7280: 73 20 61 20 73 70 65 63 69 66 69 63 20 64 69 72  s a specific dir
7290: 65 63 74 6f 72 79 20 74 6f 20 62 65 20 75 73 65  ectory to be use
72a0: 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  d for temporary 
72b0: 66 69 6c 65 73 2e 0a 20 20 2a 2a 20 53 65 74 74  files..  ** Sett
72c0: 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c 20 73 74  ing to a null st
72d0: 72 69 6e 67 20 72 65 76 65 72 74 73 20 74 6f 20  ring reverts to 
72e0: 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 6d 70  the default temp
72f0: 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20  orary directory 
7300: 73 65 61 72 63 68 2e 0a 20 20 2a 2a 20 49 66 20  search..  ** If 
7310: 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74  temporary direct
7320: 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64 2c 20  ory is changed, 
7330: 74 68 65 6e 20 69 6e 76 61 6c 69 64 61 74 65 54  then invalidateT
7340: 65 6d 70 53 74 6f 72 61 67 65 2e 0a 20 20 2a 2a  empStorage..  **
7350: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
7360: 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 5f  gTyp_TEMP_STORE_
7370: 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20  DIRECTORY: {.   
7380: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
7390: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
73a0: 6c 65 54 65 78 74 28 76 2c 20 73 71 6c 69 74 65  leText(v, sqlite
73b0: 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79  3_temp_directory
73c0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69  );.    }else{.#i
73d0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
73e0: 54 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28 20  T_WSD.      if( 
73f0: 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20  zRight[0] ){.   
7400: 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20       int res;.  
7410: 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
7420: 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e 70  e3OsAccess(db->p
7430: 56 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c  Vfs, zRight, SQL
7440: 49 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44 57  ITE_ACCESS_READW
7450: 52 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20 20  RITE, &res);.   
7460: 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
7470: 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30  ITE_OK || res==0
7480: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
7490: 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50  lite3ErrorMsg(pP
74a0: 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72 69  arse, "not a wri
74b0: 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79 22  table directory"
74c0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  );.          got
74d0: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
74e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
74f0: 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54 45        if( SQLITE
7500: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20  _TEMP_STORE==0. 
7510: 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54 45        || (SQLITE
7520: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26  _TEMP_STORE==1 &
7530: 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65  & db->temp_store
7540: 3c 3d 31 29 0a 20 20 20 20 20 20 20 7c 7c 20 28  <=1).       || (
7550: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
7560: 45 3d 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d 70  E==2 && db->temp
7570: 5f 73 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20  _store==1).     
7580: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 76 61   ){.        inva
7590: 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67  lidateTempStorag
75a0: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  e(pParse);.     
75b0: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
75c0: 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 74 65  _free(sqlite3_te
75d0: 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20  mp_directory);. 
75e0: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
75f0: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  0] ){.        sq
7600: 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63  lite3_temp_direc
7610: 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d  tory = sqlite3_m
7620: 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69  printf("%s", zRi
7630: 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ght);.      }els
7640: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
7650: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
7660: 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23  y = 0;.      }.#
7670: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
7680: 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20  OMIT_WSD */.    
7690: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
76a0: 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f  ..#if SQLITE_OS_
76b0: 57 49 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  WIN.  /*.  **   
76c0: 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72  PRAGMA data_stor
76d0: 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a  e_directory.  **
76e0: 20 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73     PRAGMA data_s
76f0: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d  tore_directory =
7700: 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e   ""|"directory_n
7710: 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  ame".  **.  ** R
7720: 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65  eturn or set the
7730: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20   local value of 
7740: 74 68 65 20 64 61 74 61 5f 73 74 6f 72 65 5f 64  the data_store_d
7750: 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20  irectory flag.  
7760: 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68  Changing.  ** th
7770: 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20 73  e value sets a s
7780: 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f 72  pecific director
7790: 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72  y to be used for
77a0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
77b0: 74 68 61 74 0a 20 20 2a 2a 20 77 65 72 65 20 73  that.  ** were s
77c0: 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61 20  pecified with a 
77d0: 72 65 6c 61 74 69 76 65 20 70 61 74 68 6e 61 6d  relative pathnam
77e0: 65 2e 20 20 53 65 74 74 69 6e 67 20 74 6f 20 61  e.  Setting to a
77f0: 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76   null string rev
7800: 65 72 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65  erts.  ** to the
7810: 20 64 65 66 61 75 6c 74 20 64 61 74 61 62 61 73   default databas
7820: 65 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68 69  e directory, whi
7830: 63 68 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  ch for database 
7840: 66 69 6c 65 73 20 73 70 65 63 69 66 69 65 64 20  files specified 
7850: 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61  with.  ** a rela
7860: 74 69 76 65 20 70 61 74 68 20 77 69 6c 6c 20 70  tive path will p
7870: 72 6f 62 61 62 6c 79 20 62 65 20 62 61 73 65 64  robably be based
7880: 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   on the current 
7890: 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68  directory for th
78a0: 65 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20  e.  ** process. 
78b0: 20 44 61 74 61 62 61 73 65 20 66 69 6c 65 20 73   Database file s
78c0: 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61 6e  pecified with an
78d0: 20 61 62 73 6f 6c 75 74 65 20 70 61 74 68 20 61   absolute path a
78e0: 72 65 20 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a  re not impacted.
78f0: 20 20 2a 2a 20 62 79 20 74 68 69 73 20 73 65 74    ** by this set
7900: 74 69 6e 67 2c 20 72 65 67 61 72 64 6c 65 73 73  ting, regardless
7910: 20 6f 66 20 69 74 73 20 76 61 6c 75 65 2e 0a 20   of its value.. 
7920: 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20   **.  */.  case 
7930: 50 72 61 67 54 79 70 5f 44 41 54 41 5f 53 54 4f  PragTyp_DATA_STO
7940: 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a  RE_DIRECTORY: {.
7950: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
7960: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
7970: 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 73 71 6c  ingleText(v, sql
7980: 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74  ite3_data_direct
7990: 6f 72 79 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ory);.    }else{
79a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
79b0: 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69  OMIT_WSD.      i
79c0: 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a  f( zRight[0] ){.
79d0: 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b          int res;
79e0: 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
79f0: 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28 64 62  lite3OsAccess(db
7a00: 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20  ->pVfs, zRight, 
7a10: 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45  SQLITE_ACCESS_RE
7a20: 41 44 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a  ADWRITE, &res);.
7a30: 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
7a40: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73  SQLITE_OK || res
7a50: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
7a60: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
7a70: 28 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20  (pParse, "not a 
7a80: 77 72 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f  writable directo
7a90: 72 79 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ry");.          
7aa0: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
7ab0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
7ac0: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
7ad0: 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 64 61  _free(sqlite3_da
7ae0: 74 61 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20  ta_directory);. 
7af0: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
7b00: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  0] ){.        sq
7b10: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
7b20: 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d  tory = sqlite3_m
7b30: 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69  printf("%s", zRi
7b40: 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ght);.      }els
7b50: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
7b60: 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72  e3_data_director
7b70: 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23  y = 0;.      }.#
7b80: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
7b90: 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20  OMIT_WSD */.    
7ba0: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
7bb0: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c  .#endif..#if SQL
7bc0: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
7bd0: 4e 47 5f 53 54 59 4c 45 0a 20 20 2f 2a 0a 20 20  NG_STYLE.  /*.  
7be0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
7bf0: 65 6d 61 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f  ema.]lock_proxy_
7c00: 66 69 6c 65 0a 20 20 2a 2a 20 20 20 50 52 41 47  file.  **   PRAG
7c10: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6c 6f 63 6b  MA [schema.]lock
7c20: 5f 70 72 6f 78 79 5f 66 69 6c 65 20 3d 20 22 3a  _proxy_file = ":
7c30: 61 75 74 6f 3a 22 7c 22 6c 6f 63 6b 5f 66 69 6c  auto:"|"lock_fil
7c40: 65 5f 70 61 74 68 22 0a 20 20 2a 2a 0a 20 20 2a  e_path".  **.  *
7c50: 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20  * Return or set 
7c60: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
7c70: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
7c80: 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67   flag.  Changing
7c90: 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  .  ** the value 
7ca0: 73 65 74 73 20 61 20 73 70 65 63 69 66 69 63 20  sets a specific 
7cb0: 66 69 6c 65 20 74 6f 20 62 65 20 75 73 65 64 20  file to be used 
7cc0: 66 6f 72 20 64 61 74 61 62 61 73 65 20 61 63 63  for database acc
7cd0: 65 73 73 20 6c 6f 63 6b 73 2e 0a 20 20 2a 2a 0a  ess locks..  **.
7ce0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
7cf0: 54 79 70 5f 4c 4f 43 4b 5f 50 52 4f 58 59 5f 46  Typ_LOCK_PROXY_F
7d00: 49 4c 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 21  ILE: {.    if( !
7d10: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
7d20: 50 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20  Pager *pPager = 
7d30: 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
7d40: 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20  r(pDb->pBt);.   
7d50: 20 20 20 63 68 61 72 20 2a 70 72 6f 78 79 5f 66     char *proxy_f
7d60: 69 6c 65 5f 70 61 74 68 20 3d 20 4e 55 4c 4c 3b  ile_path = NULL;
7d70: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
7d80: 69 6c 65 20 2a 70 46 69 6c 65 20 3d 20 73 71 6c  ile *pFile = sql
7d90: 69 74 65 33 50 61 67 65 72 46 69 6c 65 28 70 50  ite3PagerFile(pP
7da0: 61 67 65 72 29 3b 0a 20 20 20 20 20 20 73 71 6c  ager);.      sql
7db0: 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f  ite3OsFileContro
7dc0: 6c 48 69 6e 74 28 70 46 69 6c 65 2c 20 53 51 4c  lHint(pFile, SQL
7dd0: 49 54 45 5f 47 45 54 5f 4c 4f 43 4b 50 52 4f 58  ITE_GET_LOCKPROX
7de0: 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20  YFILE, .        
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e00: 20 20 20 26 70 72 6f 78 79 5f 66 69 6c 65 5f 70     &proxy_file_p
7e10: 61 74 68 29 3b 0a 20 20 20 20 20 20 72 65 74 75  ath);.      retu
7e20: 72 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20  rnSingleText(v, 
7e30: 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 29  proxy_file_path)
7e40: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
7e50: 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72     Pager *pPager
7e60: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
7e70: 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a  ager(pDb->pBt);.
7e80: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69        sqlite3_fi
7e90: 6c 65 20 2a 70 46 69 6c 65 20 3d 20 73 71 6c 69  le *pFile = sqli
7ea0: 74 65 33 50 61 67 65 72 46 69 6c 65 28 70 50 61  te3PagerFile(pPa
7eb0: 67 65 72 29 3b 0a 20 20 20 20 20 20 69 6e 74 20  ger);.      int 
7ec0: 72 65 73 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  res;.      if( z
7ed0: 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20  Right[0] ){.    
7ee0: 20 20 20 20 72 65 73 3d 73 71 6c 69 74 65 33 4f      res=sqlite3O
7ef0: 73 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46 69  sFileControl(pFi
7f00: 6c 65 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f 4c  le, SQLITE_SET_L
7f10: 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20  OCKPROXYFILE, . 
7f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f40: 20 20 20 20 7a 52 69 67 68 74 29 3b 0a 20 20 20      zRight);.   
7f50: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
7f60: 20 20 20 20 72 65 73 3d 73 71 6c 69 74 65 33 4f      res=sqlite3O
7f70: 73 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46 69  sFileControl(pFi
7f80: 6c 65 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f 4c  le, SQLITE_SET_L
7f90: 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20  OCKPROXYFILE, . 
7fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fc0: 20 20 20 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20      NULL);.     
7fd0: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73   }.      if( res
7fe0: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
7ff0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72         sqlite3Er
8000: 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22  rorMsg(pParse, "
8010: 66 61 69 6c 65 64 20 74 6f 20 73 65 74 20 6c 6f  failed to set lo
8020: 63 6b 20 70 72 6f 78 79 20 66 69 6c 65 22 29 3b  ck proxy file");
8030: 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72  .        goto pr
8040: 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20  agma_out;.      
8050: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  }.    }.    brea
8060: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  k;.  }.#endif /*
8070: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c   SQLITE_ENABLE_L
8080: 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 20 2a 2f 20  OCKING_STYLE */ 
8090: 20 20 20 20 20 0a 20 20 20 20 0a 20 20 2f 2a 0a       .    .  /*.
80a0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73    **   PRAGMA [s
80b0: 63 68 65 6d 61 2e 5d 73 79 6e 63 68 72 6f 6e 6f  chema.]synchrono
80c0: 75 73 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  us.  **   PRAGMA
80d0: 20 5b 73 63 68 65 6d 61 2e 5d 73 79 6e 63 68 72   [schema.]synchr
80e0: 6f 6e 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52  onous=OFF|ON|NOR
80f0: 4d 41 4c 7c 46 55 4c 4c 7c 45 58 54 52 41 0a 20  MAL|FULL|EXTRA. 
8100: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
8110: 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c  or set the local
8120: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73 79   value of the sy
8130: 6e 63 68 72 6f 6e 6f 75 73 20 66 6c 61 67 2e 20  nchronous flag. 
8140: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
8150: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64  he local value d
8160: 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61  oes not make cha
8170: 6e 67 65 73 20 74 6f 20 74 68 65 20 64 69 73 6b  nges to the disk
8180: 20 66 69 6c 65 20 61 6e 64 20 74 68 65 0a 20 20   file and the.  
8190: 2a 2a 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  ** default value
81a0: 20 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72 65   will be restore
81b0: 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20  d the next time 
81c0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 0a  the database is.
81d0: 20 20 2a 2a 20 6f 70 65 6e 65 64 2e 0a 20 20 2a    ** opened..  *
81e0: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
81f0: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3a 20 7b 0a  _SYNCHRONOUS: {.
8200: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
8210: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
8220: 69 6e 67 6c 65 49 6e 74 28 76 2c 20 70 44 62 2d  ingleInt(v, pDb-
8230: 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 2d 31 29  >safety_level-1)
8240: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
8250: 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f     if( !db->auto
8260: 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20  Commit ){.      
8270: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
8280: 67 28 70 50 61 72 73 65 2c 20 0a 20 20 20 20 20  g(pParse, .     
8290: 20 20 20 20 20 20 20 22 53 61 66 65 74 79 20 6c         "Safety l
82a0: 65 76 65 6c 20 6d 61 79 20 6e 6f 74 20 62 65 20  evel may not be 
82b0: 63 68 61 6e 67 65 64 20 69 6e 73 69 64 65 20 61  changed inside a
82c0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a   transaction");.
82d0: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
82e0: 69 44 62 21 3d 31 20 29 7b 0a 20 20 20 20 20 20  iDb!=1 ){.      
82f0: 20 20 69 6e 74 20 69 4c 65 76 65 6c 20 3d 20 28    int iLevel = (
8300: 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a  getSafetyLevel(z
8310: 52 69 67 68 74 2c 30 2c 31 29 2b 31 29 20 26 20  Right,0,1)+1) & 
8320: 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55  PAGER_SYNCHRONOU
8330: 53 5f 4d 41 53 4b 3b 0a 20 20 20 20 20 20 20 20  S_MASK;.        
8340: 69 66 28 20 69 4c 65 76 65 6c 3d 3d 30 20 29 20  if( iLevel==0 ) 
8350: 69 4c 65 76 65 6c 20 3d 20 31 3b 0a 20 20 20 20  iLevel = 1;.    
8360: 20 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f      pDb->safety_
8370: 6c 65 76 65 6c 20 3d 20 69 4c 65 76 65 6c 3b 0a  level = iLevel;.
8380: 20 20 20 20 20 20 20 20 70 44 62 2d 3e 62 53 79          pDb->bSy
8390: 6e 63 53 65 74 20 3d 20 31 3b 0a 20 20 20 20 20  ncSet = 1;.     
83a0: 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c     setAllPagerFl
83b0: 61 67 73 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  ags(db);.      }
83c0: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
83d0: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
83e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
83f0: 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  R_PRAGMAS */..#i
8400: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8410: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a 20  T_FLAG_PRAGMAS. 
8420: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4c   case PragTyp_FL
8430: 41 47 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  AG: {.    if( zR
8440: 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ight==0 ){.     
8450: 20 73 65 74 50 72 61 67 6d 61 52 65 73 75 6c 74   setPragmaResult
8460: 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 70  ColumnNames(v, p
8470: 50 72 61 67 6d 61 29 3b 0a 20 20 20 20 20 20 72  Pragma);.      r
8480: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76  eturnSingleInt(v
8490: 2c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 70  , (db->flags & p
84a0: 50 72 61 67 6d 61 2d 3e 69 41 72 67 29 21 3d 30  Pragma->iArg)!=0
84b0: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
84c0: 20 20 20 20 20 75 36 34 20 6d 61 73 6b 20 3d 20       u64 mask = 
84d0: 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 3b 20 20  pPragma->iArg;  
84e0: 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 62 69 74    /* Mask of bit
84f0: 73 20 74 6f 20 73 65 74 20 6f 72 20 63 6c 65 61  s to set or clea
8500: 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  r. */.      if( 
8510: 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
8520: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0 ){.        /* 
8530: 46 6f 72 65 69 67 6e 20 6b 65 79 20 73 75 70 70  Foreign key supp
8540: 6f 72 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 65  ort may not be e
8550: 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c  nabled or disabl
8560: 65 64 20 77 68 69 6c 65 20 6e 6f 74 0a 20 20 20  ed while not.   
8570: 20 20 20 20 20 2a 2a 20 69 6e 20 61 75 74 6f 2d       ** in auto-
8580: 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20 20 2a 2f  commit mode.  */
8590: 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20 26 3d  .        mask &=
85a0: 20 7e 28 53 51 4c 49 54 45 5f 46 6f 72 65 69 67   ~(SQLITE_Foreig
85b0: 6e 4b 65 79 73 29 3b 0a 20 20 20 20 20 20 7d 0a  nKeys);.      }.
85c0: 23 69 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f  #if SQLITE_USER_
85d0: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20  AUTHENTICATION. 
85e0: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74       if( db->aut
85f0: 68 2e 61 75 74 68 4c 65 76 65 6c 3d 3d 55 41 55  h.authLevel==UAU
8600: 54 48 5f 55 73 65 72 20 29 7b 0a 20 20 20 20 20  TH_User ){.     
8610: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c     /* Do not all
8620: 6f 77 20 6e 6f 6e 2d 61 64 6d 69 6e 20 75 73 65  ow non-admin use
8630: 72 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65  rs to modify the
8640: 20 73 63 68 65 6d 61 20 61 72 62 69 74 72 61 72   schema arbitrar
8650: 69 6c 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d  ily */.        m
8660: 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45 5f  ask &= ~(SQLITE_
8670: 57 72 69 74 65 53 63 68 65 6d 61 29 3b 0a 20 20  WriteSchema);.  
8680: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
8690: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
86a0: 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74  etBoolean(zRight
86b0: 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  , 0) ){.        
86c0: 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 6d 61 73  db->flags |= mas
86d0: 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  k;.      }else{.
86e0: 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67          db->flag
86f0: 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a 20 20 20 20  s &= ~mask;.    
8700: 20 20 20 20 69 66 28 20 6d 61 73 6b 3d 3d 53 51      if( mask==SQ
8710: 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 20  LITE_DeferFKs ) 
8720: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
8730: 43 6f 6e 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  Cons = 0;.      
8740: 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6e 79  }..      /* Many
8750: 20 6f 66 20 74 68 65 20 66 6c 61 67 2d 70 72 61   of the flag-pra
8760: 67 6d 61 73 20 6d 6f 64 69 66 79 20 74 68 65 20  gmas modify the 
8770: 63 6f 64 65 20 67 65 6e 65 72 61 74 65 64 20 62  code generated b
8780: 79 20 74 68 65 20 53 51 4c 20 0a 20 20 20 20 20  y the SQL .     
8790: 20 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 28 65 67   ** compiler (eg
87a0: 2e 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 29  . count_changes)
87b0: 2e 20 53 6f 20 61 64 64 20 61 6e 20 6f 70 63 6f  . So add an opco
87c0: 64 65 20 74 6f 20 65 78 70 69 72 65 20 61 6c 6c  de to expire all
87d0: 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c  .      ** compil
87e0: 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ed SQL statement
87f0: 73 20 61 66 74 65 72 20 6d 6f 64 69 66 79 69 6e  s after modifyin
8800: 67 20 61 20 70 72 61 67 6d 61 20 76 61 6c 75 65  g a pragma value
8810: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
8820: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
8830: 70 30 28 76 2c 20 4f 50 5f 45 78 70 69 72 65 29  p0(v, OP_Expire)
8840: 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61  ;.      setAllPa
8850: 67 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20  gerFlags(db);.  
8860: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
8870: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
8880: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
8890: 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65  AGMAS */..#ifnde
88a0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  f SQLITE_OMIT_SC
88b0: 48 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20 2f  HEMA_PRAGMAS.  /
88c0: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
88d0: 74 61 62 6c 65 5f 69 6e 66 6f 28 3c 74 61 62 6c  table_info(<tabl
88e0: 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  e>).  **.  ** Re
88f0: 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  turn a single ro
8900: 77 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  w for each colum
8910: 6e 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 74  n of the named t
8920: 61 62 6c 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e  able. The column
8930: 73 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 72 65  s of.  ** the re
8940: 74 75 72 6e 65 64 20 64 61 74 61 20 73 65 74 20  turned data set 
8950: 61 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63  are:.  **.  ** c
8960: 69 64 3a 20 20 20 20 20 20 20 20 43 6f 6c 75 6d  id:        Colum
8970: 6e 20 69 64 20 28 6e 75 6d 62 65 72 65 64 20 66  n id (numbered f
8980: 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
8990: 74 2c 20 73 74 61 72 74 69 6e 67 20 61 74 20 30  t, starting at 0
89a0: 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20 20 20 20  ).  ** name:    
89b0: 20 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20     Column name. 
89c0: 20 2a 2a 20 74 79 70 65 3a 20 20 20 20 20 20 20   ** type:       
89d0: 43 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69  Column declarati
89e0: 6f 6e 20 74 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f  on type..  ** no
89f0: 74 6e 75 6c 6c 3a 20 20 20 20 54 72 75 65 20 69  tnull:    True i
8a00: 66 20 27 4e 4f 54 20 4e 55 4c 4c 27 20 69 73 20  f 'NOT NULL' is 
8a10: 70 61 72 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64  part of column d
8a20: 65 63 6c 61 72 61 74 69 6f 6e 0a 20 20 2a 2a 20  eclaration.  ** 
8a30: 64 66 6c 74 5f 76 61 6c 75 65 3a 20 54 68 65 20  dflt_value: The 
8a40: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f  default value fo
8a50: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 69 66  r the column, if
8a60: 20 61 6e 79 2e 0a 20 20 2a 2a 20 70 6b 3a 20 20   any..  ** pk:  
8a70: 20 20 20 20 20 20 20 4e 6f 6e 2d 7a 65 72 6f 20         Non-zero 
8a80: 66 6f 72 20 50 4b 20 66 69 65 6c 64 73 2e 0a 20  for PK fields.. 
8a90: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
8aa0: 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 3a 20 69  yp_TABLE_INFO: i
8ab0: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
8ac0: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
8ad0: 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33    pTab = sqlite3
8ae0: 4c 6f 63 61 74 65 54 61 62 6c 65 28 70 50 61 72  LocateTable(pPar
8af0: 73 65 2c 20 4c 4f 43 41 54 45 5f 4e 4f 45 52 52  se, LOCATE_NOERR
8b00: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a  , zRight, zDb);.
8b10: 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a      if( pTab ){.
8b20: 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6b 3b 0a        int i, k;.
8b30: 20 20 20 20 20 20 69 6e 74 20 6e 48 69 64 64 65        int nHidde
8b40: 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 6e 74  n = 0;.      int
8b50: 20 69 54 61 62 44 62 20 3d 20 73 71 6c 69 74 65   iTabDb = sqlite
8b60: 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 64  3SchemaToIndex(d
8b70: 62 2c 20 70 54 61 62 2d 3e 70 53 63 68 65 6d 61  b, pTab->pSchema
8b80: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 43 6f  , zDb);.      Co
8b90: 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20 20 20 20  lumn *pCol;.    
8ba0: 20 20 49 6e 64 65 78 20 2a 70 50 6b 20 3d 20 73    Index *pPk = s
8bb0: 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
8bc0: 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20 20 20  Index(pTab);.   
8bd0: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
8be0: 3d 20 37 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  = 7;.      sqlit
8bf0: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
8c00: 6d 61 28 70 50 61 72 73 65 2c 20 69 54 61 62 44  ma(pParse, iTabD
8c10: 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
8c20: 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
8c30: 6d 65 73 28 70 50 61 72 73 65 2c 20 69 54 61 62  mes(pParse, iTab
8c40: 44 62 2c 20 70 54 61 62 29 3b 0a 20 20 20 20 20  Db, pTab);.     
8c50: 20 66 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d 70   for(i=0, pCol=p
8c60: 54 61 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54 61  Tab->aCol; i<pTa
8c70: 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43  b->nCol; i++, pC
8c80: 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69  ol++){.        i
8c90: 6e 74 20 69 73 48 69 64 64 65 6e 20 3d 20 49 73  nt isHidden = Is
8ca0: 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 70 43 6f  HiddenColumn(pCo
8cb0: 6c 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  l);.        if( 
8cc0: 69 73 48 69 64 64 65 6e 20 26 26 20 70 50 72 61  isHidden && pPra
8cd0: 67 6d 61 2d 3e 69 41 72 67 3d 3d 30 20 29 7b 0a  gma->iArg==0 ){.
8ce0: 20 20 20 20 20 20 20 20 20 20 6e 48 69 64 64 65            nHidde
8cf0: 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 63  n++;.          c
8d00: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
8d10: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 28   }.        if( (
8d20: 70 43 6f 6c 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  pCol->colFlags &
8d30: 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59   COLFLAG_PRIMKEY
8d40: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
8d50: 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20    k = 0;.       
8d60: 20 7d 65 6c 73 65 20 69 66 28 20 70 50 6b 3d 3d   }else if( pPk==
8d70: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b  0 ){.          k
8d80: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
8d90: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66  lse{.          f
8da0: 6f 72 28 6b 3d 31 3b 20 6b 3c 3d 70 54 61 62 2d  or(k=1; k<=pTab-
8db0: 3e 6e 43 6f 6c 20 26 26 20 70 50 6b 2d 3e 61 69  >nCol && pPk->ai
8dc0: 43 6f 6c 75 6d 6e 5b 6b 2d 31 5d 21 3d 69 3b 20  Column[k-1]!=i; 
8dd0: 6b 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 20 20 7d  k++){}.        }
8de0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
8df0: 20 70 43 6f 6c 2d 3e 70 44 66 6c 74 3d 3d 30 20   pCol->pDflt==0 
8e00: 7c 7c 20 70 43 6f 6c 2d 3e 70 44 66 6c 74 2d 3e  || pCol->pDflt->
8e10: 6f 70 3d 3d 54 4b 5f 53 50 41 4e 20 29 3b 0a 20  op==TK_SPAN );. 
8e20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
8e30: 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31  beMultiLoad(v, 1
8e40: 2c 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 20  , pPragma->iArg 
8e50: 3f 20 22 69 73 73 69 73 69 69 22 20 3a 20 22 69  ? "issisii" : "i
8e60: 73 73 69 73 69 22 2c 0a 20 20 20 20 20 20 20 20  ssisi",.        
8e70: 20 20 20 20 20 20 20 69 2d 6e 48 69 64 64 65 6e         i-nHidden
8e80: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
8e90: 20 70 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 0a 20 20   pCol->zName,.  
8ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
8eb0: 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28 70  ite3ColumnType(p
8ec0: 43 6f 6c 2c 22 22 29 2c 0a 20 20 20 20 20 20 20  Col,""),.       
8ed0: 20 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e 6e 6f          pCol->no
8ee0: 74 4e 75 6c 6c 20 3f 20 31 20 3a 20 30 2c 0a 20  tNull ? 1 : 0,. 
8ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 43                pC
8f00: 6f 6c 2d 3e 70 44 66 6c 74 20 3f 20 70 43 6f 6c  ol->pDflt ? pCol
8f10: 2d 3e 70 44 66 6c 74 2d 3e 75 2e 7a 54 6f 6b 65  ->pDflt->u.zToke
8f20: 6e 20 3a 20 30 2c 0a 20 20 20 20 20 20 20 20 20  n : 0,.         
8f30: 20 20 20 20 20 20 6b 2c 0a 20 20 20 20 20 20 20        k,.       
8f40: 20 20 20 20 20 20 20 20 69 73 48 69 64 64 65 6e          isHidden
8f50: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
8f60: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 23  .  }.  break;..#
8f70: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
8f80: 55 47 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  UG.  case PragTy
8f90: 70 5f 53 54 41 54 53 3a 20 7b 0a 20 20 20 20 49  p_STATS: {.    I
8fa0: 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20  ndex *pIdx;.    
8fb0: 48 61 73 68 45 6c 65 6d 20 2a 69 3b 0a 20 20 20  HashElem *i;.   
8fc0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
8fd0: 35 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f  5;.    sqlite3Co
8fe0: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
8ff0: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
9000: 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48 61 73   for(i=sqliteHas
9010: 68 46 69 72 73 74 28 26 70 44 62 2d 3e 70 53 63  hFirst(&pDb->pSc
9020: 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 20  hema->tblHash); 
9030: 69 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e  i; i=sqliteHashN
9040: 65 78 74 28 69 29 29 7b 0a 20 20 20 20 20 20 54  ext(i)){.      T
9050: 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c  able *pTab = sql
9060: 69 74 65 48 61 73 68 44 61 74 61 28 69 29 3b 0a  iteHashData(i);.
9070: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9080: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c  eMultiLoad(v, 1,
9090: 20 22 73 73 69 69 69 22 2c 0a 20 20 20 20 20 20   "ssiii",.      
90a0: 20 20 20 20 20 70 54 61 62 2d 3e 7a 4e 61 6d 65       pTab->zName
90b0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 30 2c 0a  ,.           0,.
90c0: 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d             pTab-
90d0: 3e 73 7a 54 61 62 52 6f 77 2c 0a 20 20 20 20 20  >szTabRow,.     
90e0: 20 20 20 20 20 20 70 54 61 62 2d 3e 6e 52 6f 77        pTab->nRow
90f0: 4c 6f 67 45 73 74 2c 0a 20 20 20 20 20 20 20 20  LogEst,.        
9100: 20 20 20 70 54 61 62 2d 3e 74 61 62 46 6c 61 67     pTab->tabFlag
9110: 73 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 49  s);.      for(pI
9120: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
9130: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
9140: 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20  ->pNext){.      
9150: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c    sqlite3VdbeMul
9160: 74 69 4c 6f 61 64 28 76 2c 20 32 2c 20 22 73 69  tiLoad(v, 2, "si
9170: 69 69 58 22 2c 0a 20 20 20 20 20 20 20 20 20 20  iiX",.          
9180: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 0a 20 20   pIdx->zName,.  
9190: 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 73           pIdx->s
91a0: 7a 49 64 78 52 6f 77 2c 0a 20 20 20 20 20 20 20  zIdxRow,.       
91b0: 20 20 20 20 70 49 64 78 2d 3e 61 69 52 6f 77 4c      pIdx->aiRowL
91c0: 6f 67 45 73 74 5b 30 5d 2c 0a 20 20 20 20 20 20  ogEst[0],.      
91d0: 20 20 20 20 20 70 49 64 78 2d 3e 68 61 73 53 74       pIdx->hasSt
91e0: 61 74 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71  at1);.        sq
91f0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
9200: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
9210: 20 31 2c 20 35 29 3b 0a 20 20 20 20 20 20 7d 0a   1, 5);.      }.
9220: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
9230: 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 63 61 73  k;.#endif..  cas
9240: 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f  e PragTyp_INDEX_
9250: 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74  INFO: if( zRight
9260: 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   ){.    Index *p
9270: 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  Idx;.    Table *
9280: 70 54 61 62 3b 0a 20 20 20 20 70 49 64 78 20 3d  pTab;.    pIdx =
9290: 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65   sqlite3FindInde
92a0: 78 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  x(db, zRight, zD
92b0: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78  b);.    if( pIdx
92c0: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b   ){.      int i;
92d0: 0a 20 20 20 20 20 20 69 6e 74 20 6d 78 3b 0a 20  .      int mx;. 
92e0: 20 20 20 20 20 69 66 28 20 70 50 72 61 67 6d 61       if( pPragma
92f0: 2d 3e 69 41 72 67 20 29 7b 0a 20 20 20 20 20 20  ->iArg ){.      
9300: 20 20 2f 2a 20 50 52 41 47 4d 41 20 69 6e 64 65    /* PRAGMA inde
9310: 78 5f 78 69 6e 66 6f 20 28 6e 65 77 65 72 20 76  x_xinfo (newer v
9320: 65 72 73 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65  ersion with more
9330: 20 72 6f 77 73 20 61 6e 64 20 63 6f 6c 75 6d 6e   rows and column
9340: 73 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 78  s) */.        mx
9350: 20 3d 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e   = pIdx->nColumn
9360: 3b 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65  ;.        pParse
9370: 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20  ->nMem = 6;.    
9380: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
9390: 20 2f 2a 20 50 52 41 47 4d 41 20 69 6e 64 65 78   /* PRAGMA index
93a0: 5f 69 6e 66 6f 20 28 6c 65 67 61 63 79 20 76 65  _info (legacy ve
93b0: 72 73 69 6f 6e 29 20 2a 2f 0a 20 20 20 20 20 20  rsion) */.      
93c0: 20 20 6d 78 20 3d 20 70 49 64 78 2d 3e 6e 4b 65    mx = pIdx->nKe
93d0: 79 43 6f 6c 3b 0a 20 20 20 20 20 20 20 20 70 50  yCol;.        pP
93e0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a  arse->nMem = 3;.
93f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 54        }.      pT
9400: 61 62 20 3d 20 70 49 64 78 2d 3e 70 54 61 62 6c  ab = pIdx->pTabl
9410: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
9420: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
9430: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
9440: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 50 61       assert( pPa
9450: 72 73 65 2d 3e 6e 4d 65 6d 3c 3d 70 50 72 61 67  rse->nMem<=pPrag
9460: 6d 61 2d 3e 6e 50 72 61 67 43 4e 61 6d 65 20 29  ma->nPragCName )
9470: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  ;.      for(i=0;
9480: 20 69 3c 6d 78 3b 20 69 2b 2b 29 7b 0a 20 20 20   i<mx; i++){.   
9490: 20 20 20 20 20 69 31 36 20 63 6e 75 6d 20 3d 20       i16 cnum = 
94a0: 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69  pIdx->aiColumn[i
94b0: 5d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ];.        sqlit
94c0: 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28  e3VdbeMultiLoad(
94d0: 76 2c 20 31 2c 20 22 69 69 73 58 22 2c 20 69 2c  v, 1, "iisX", i,
94e0: 20 63 6e 75 6d 2c 0a 20 20 20 20 20 20 20 20 20   cnum,.         
94f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9500: 20 20 20 20 63 6e 75 6d 3c 30 20 3f 20 30 20 3a      cnum<0 ? 0 :
9510: 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d   pTab->aCol[cnum
9520: 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ].zName);.      
9530: 20 20 69 66 28 20 70 50 72 61 67 6d 61 2d 3e 69    if( pPragma->i
9540: 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20 20 20  Arg ){.         
9550: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74   sqlite3VdbeMult
9560: 69 4c 6f 61 64 28 76 2c 20 34 2c 20 22 69 73 69  iLoad(v, 4, "isi
9570: 58 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  X",.            
9580: 70 49 64 78 2d 3e 61 53 6f 72 74 4f 72 64 65 72  pIdx->aSortOrder
9590: 5b 69 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20  [i],.           
95a0: 20 70 49 64 78 2d 3e 61 7a 43 6f 6c 6c 5b 69 5d   pIdx->azColl[i]
95b0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 3c  ,.            i<
95c0: 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 0a  pIdx->nKeyCol);.
95d0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
95e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
95f0: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
9600: 52 6f 77 2c 20 31 2c 20 70 50 61 72 73 65 2d 3e  Row, 1, pParse->
9610: 6e 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  nMem);.      }. 
9620: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
9630: 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ;..  case PragTy
9640: 70 5f 49 4e 44 45 58 5f 4c 49 53 54 3a 20 69 66  p_INDEX_LIST: if
9650: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
9660: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
9670: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
9680: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 54 61    int i;.    pTa
9690: 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  b = sqlite3FindT
96a0: 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c  able(db, zRight,
96b0: 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70   zDb);.    if( p
96c0: 54 61 62 20 29 7b 0a 20 20 20 20 20 20 70 50 61  Tab ){.      pPa
96d0: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 35 3b 0a 20  rse->nMem = 5;. 
96e0: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65       sqlite3Code
96f0: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
9700: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  rse, iDb);.     
9710: 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e   for(pIdx=pTab->
9720: 70 49 6e 64 65 78 2c 20 69 3d 30 3b 20 70 49 64  pIndex, i=0; pId
9730: 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
9740: 65 78 74 2c 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ext, i++){.     
9750: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61     const char *a
9760: 7a 4f 72 69 67 69 6e 5b 5d 20 3d 20 7b 20 22 63  zOrigin[] = { "c
9770: 22 2c 20 22 75 22 2c 20 22 70 6b 22 20 7d 3b 0a  ", "u", "pk" };.
9780: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
9790: 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20  dbeMultiLoad(v, 
97a0: 31 2c 20 22 69 73 69 73 69 22 2c 0a 20 20 20 20  1, "isisi",.    
97b0: 20 20 20 20 20 20 20 69 2c 0a 20 20 20 20 20 20         i,.      
97c0: 20 20 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d 65       pIdx->zName
97d0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 49 73 55  ,.           IsU
97e0: 6e 69 71 75 65 49 6e 64 65 78 28 70 49 64 78 29  niqueIndex(pIdx)
97f0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 61 7a 4f  ,.           azO
9800: 72 69 67 69 6e 5b 70 49 64 78 2d 3e 69 64 78 54  rigin[pIdx->idxT
9810: 79 70 65 5d 2c 0a 20 20 20 20 20 20 20 20 20 20  ype],.          
9820: 20 70 49 64 78 2d 3e 70 50 61 72 74 49 64 78 57   pIdx->pPartIdxW
9830: 68 65 72 65 21 3d 30 29 3b 0a 20 20 20 20 20 20  here!=0);.      
9840: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
9850: 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61  eak;..  case Pra
9860: 67 54 79 70 5f 44 41 54 41 42 41 53 45 5f 4c 49  gTyp_DATABASE_LI
9870: 53 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 3b  ST: {.    int i;
9880: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
9890: 6d 20 3d 20 33 3b 0a 20 20 20 20 66 6f 72 28 69  m = 3;.    for(i
98a0: 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
98b0: 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64  ++){.      if( d
98c0: 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30  b->aDb[i].pBt==0
98d0: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
98e0: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
98f0: 44 62 5b 69 5d 2e 7a 44 62 53 4e 61 6d 65 21 3d  Db[i].zDbSName!=
9900: 30 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 );.      sqlit
9910: 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28  e3VdbeMultiLoad(
9920: 76 2c 20 31 2c 20 22 69 73 73 22 2c 0a 20 20 20  v, 1, "iss",.   
9930: 20 20 20 20 20 20 69 2c 0a 20 20 20 20 20 20 20        i,.       
9940: 20 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 44 62    db->aDb[i].zDb
9950: 53 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20  SName,.         
9960: 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 46  sqlite3BtreeGetF
9970: 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44 62 5b  ilename(db->aDb[
9980: 69 5d 2e 70 42 74 29 29 3b 0a 20 20 20 20 7d 0a  i].pBt));.    }.
9990: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
99a0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4c  case PragTyp_COL
99b0: 4c 41 54 49 4f 4e 5f 4c 49 53 54 3a 20 7b 0a 20  LATION_LIST: {. 
99c0: 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20     int i = 0;.  
99d0: 20 20 48 61 73 68 45 6c 65 6d 20 2a 70 3b 0a 20    HashElem *p;. 
99e0: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
99f0: 3d 20 32 3b 0a 20 20 20 20 66 6f 72 28 70 3d 73  = 2;.    for(p=s
9a00: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26  qliteHashFirst(&
9a10: 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 70  db->aCollSeq); p
9a20: 3b 20 70 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; p=sqliteHashNe
9a30: 78 74 28 70 29 29 7b 0a 20 20 20 20 20 20 43 6f  xt(p)){.      Co
9a40: 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28  llSeq *pColl = (
9a50: 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74 65  CollSeq *)sqlite
9a60: 48 61 73 68 44 61 74 61 28 70 29 3b 0a 20 20 20  HashData(p);.   
9a70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75     sqlite3VdbeMu
9a80: 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69  ltiLoad(v, 1, "i
9a90: 73 22 2c 20 69 2b 2b 2c 20 70 43 6f 6c 6c 2d 3e  s", i++, pColl->
9aa0: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a 20 20  zName);.    }.  
9ab0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 23 69 66 64  }.  break;..#ifd
9ac0: 65 66 20 53 51 4c 49 54 45 5f 49 4e 54 52 4f 53  ef SQLITE_INTROS
9ad0: 50 45 43 54 49 4f 4e 5f 50 52 41 47 4d 41 53 0a  PECTION_PRAGMAS.
9ae0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46    case PragTyp_F
9af0: 55 4e 43 54 49 4f 4e 5f 4c 49 53 54 3a 20 7b 0a  UNCTION_LIST: {.
9b00: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 48      int i;.    H
9b10: 61 73 68 45 6c 65 6d 20 2a 6a 3b 0a 20 20 20 20  ashElem *j;.    
9b20: 46 75 6e 63 44 65 66 20 2a 70 3b 0a 20 20 20 20  FuncDef *p;.    
9b30: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32  pParse->nMem = 2
9b40: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
9b50: 3c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53  <SQLITE_FUNC_HAS
9b60: 48 5f 53 5a 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  H_SZ; i++){.    
9b70: 20 20 66 6f 72 28 70 3d 73 71 6c 69 74 65 33 42    for(p=sqlite3B
9b80: 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 2e  uiltinFunctions.
9b90: 61 5b 69 5d 3b 20 70 3b 20 70 3d 70 2d 3e 75 2e  a[i]; p; p=p->u.
9ba0: 70 48 61 73 68 20 29 7b 0a 20 20 20 20 20 20 20  pHash ){.       
9bb0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74   sqlite3VdbeMult
9bc0: 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 73 69 22  iLoad(v, 1, "si"
9bd0: 2c 20 70 2d 3e 7a 4e 61 6d 65 2c 20 31 29 3b 0a  , p->zName, 1);.
9be0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
9bf0: 20 20 66 6f 72 28 6a 3d 73 71 6c 69 74 65 48 61    for(j=sqliteHa
9c00: 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 46 75  shFirst(&db->aFu
9c10: 6e 63 29 3b 20 6a 3b 20 6a 3d 73 71 6c 69 74 65  nc); j; j=sqlite
9c20: 48 61 73 68 4e 65 78 74 28 6a 29 29 7b 0a 20 20  HashNext(j)){.  
9c30: 20 20 20 20 70 20 3d 20 28 46 75 6e 63 44 65 66      p = (FuncDef
9c40: 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  *)sqliteHashData
9c50: 28 6a 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  (j);.      sqlit
9c60: 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28  e3VdbeMultiLoad(
9c70: 76 2c 20 31 2c 20 22 73 69 22 2c 20 70 2d 3e 7a  v, 1, "si", p->z
9c80: 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  Name, 0);.    }.
9c90: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 23 69    }.  break;..#i
9ca0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
9cb0: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
9cc0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4d 4f   case PragTyp_MO
9cd0: 44 55 4c 45 5f 4c 49 53 54 3a 20 7b 0a 20 20 20  DULE_LIST: {.   
9ce0: 20 48 61 73 68 45 6c 65 6d 20 2a 6a 3b 0a 20 20   HashElem *j;.  
9cf0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
9d00: 20 31 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 73 71   1;.    for(j=sq
9d10: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64  liteHashFirst(&d
9d20: 62 2d 3e 61 4d 6f 64 75 6c 65 29 3b 20 6a 3b 20  b->aModule); j; 
9d30: 6a 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  j=sqliteHashNext
9d40: 28 6a 29 29 7b 0a 20 20 20 20 20 20 4d 6f 64 75  (j)){.      Modu
9d50: 6c 65 20 2a 70 4d 6f 64 20 3d 20 28 4d 6f 64 75  le *pMod = (Modu
9d60: 6c 65 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61  le*)sqliteHashDa
9d70: 74 61 28 6a 29 3b 0a 20 20 20 20 20 20 73 71 6c  ta(j);.      sql
9d80: 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61  ite3VdbeMultiLoa
9d90: 64 28 76 2c 20 31 2c 20 22 73 22 2c 20 70 4d 6f  d(v, 1, "s", pMo
9da0: 64 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7d  d->zName);.    }
9db0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
9dc0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
9dd0: 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
9de0: 20 2a 2f 0a 0a 20 20 63 61 73 65 20 50 72 61 67   */..  case Prag
9df0: 54 79 70 5f 50 52 41 47 4d 41 5f 4c 49 53 54 3a  Typ_PRAGMA_LIST:
9e00: 20 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20   {.    int i;.  
9e10: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72    for(i=0; i<Arr
9e20: 61 79 53 69 7a 65 28 61 50 72 61 67 6d 61 4e 61  aySize(aPragmaNa
9e30: 6d 65 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  me); i++){.     
9e40: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74   sqlite3VdbeMult
9e50: 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 73 22 2c  iLoad(v, 1, "s",
9e60: 20 61 50 72 61 67 6d 61 4e 61 6d 65 5b 69 5d 2e   aPragmaName[i].
9e70: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7d 0a 20 20  zName);.    }.  
9e80: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
9e90: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 49 4e 54 52  f /* SQLITE_INTR
9ea0: 4f 53 50 45 43 54 49 4f 4e 5f 50 52 41 47 4d 41  OSPECTION_PRAGMA
9eb0: 53 20 2a 2f 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  S */..#endif /* 
9ec0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
9ed0: 4d 41 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23  MA_PRAGMAS */..#
9ee0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9ef0: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20  IT_FOREIGN_KEY. 
9f00: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4f   case PragTyp_FO
9f10: 52 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 3a 20  REIGN_KEY_LIST: 
9f20: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
9f30: 20 20 46 4b 65 79 20 2a 70 46 4b 3b 0a 20 20 20    FKey *pFK;.   
9f40: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
9f50: 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33    pTab = sqlite3
9f60: 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52  FindTable(db, zR
9f70: 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20  ight, zDb);.    
9f80: 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20  if( pTab ){.    
9f90: 20 20 70 46 4b 20 3d 20 70 54 61 62 2d 3e 70 46    pFK = pTab->pF
9fa0: 4b 65 79 3b 0a 20 20 20 20 20 20 69 66 28 20 70  Key;.      if( p
9fb0: 46 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  FK ){.        in
9fc0: 74 20 69 20 3d 20 30 3b 20 0a 20 20 20 20 20 20  t i = 0; .      
9fd0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
9fe0: 20 38 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   8;.        sqli
9ff0: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
a000: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29  ema(pParse, iDb)
a010: 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28  ;.        while(
a020: 70 46 4b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  pFK){.          
a030: 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 20 20 20  int j;.         
a040: 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d   for(j=0; j<pFK-
a050: 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20  >nCol; j++){.   
a060: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
a070: 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c  VdbeMultiLoad(v,
a080: 20 31 2c 20 22 69 69 73 73 73 73 73 73 22 2c 0a   1, "iissssss",.
a090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0a0: 20 20 20 69 2c 0a 20 20 20 20 20 20 20 20 20 20     i,.          
a0b0: 20 20 20 20 20 20 20 20 20 6a 2c 0a 20 20 20 20           j,.    
a0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
a0d0: 46 4b 2d 3e 7a 54 6f 2c 0a 20 20 20 20 20 20 20  FK->zTo,.       
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62              pTab
a0f0: 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c  ->aCol[pFK->aCol
a100: 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65  [j].iFrom].zName
a110: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
a120: 20 20 20 20 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a       pFK->aCol[j
a130: 5d 2e 7a 43 6f 6c 2c 0a 20 20 20 20 20 20 20 20  ].zCol,.        
a140: 20 20 20 20 20 20 20 20 20 20 20 61 63 74 69 6f             actio
a150: 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69  nName(pFK->aActi
a160: 6f 6e 5b 31 5d 29 2c 20 20 2f 2a 20 4f 4e 20 55  on[1]),  /* ON U
a170: 50 44 41 54 45 20 2a 2f 0a 20 20 20 20 20 20 20  PDATE */.       
a180: 20 20 20 20 20 20 20 20 20 20 20 20 61 63 74 69              acti
a190: 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74  onName(pFK->aAct
a1a0: 69 6f 6e 5b 30 5d 29 2c 20 20 2f 2a 20 4f 4e 20  ion[0]),  /* ON 
a1b0: 44 45 4c 45 54 45 20 2a 2f 0a 20 20 20 20 20 20  DELETE */.      
a1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 4f               "NO
a1d0: 4e 45 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  NE");.          
a1e0: 7d 0a 20 20 20 20 20 20 20 20 20 20 2b 2b 69 3b  }.          ++i;
a1f0: 0a 20 20 20 20 20 20 20 20 20 20 70 46 4b 20 3d  .          pFK =
a200: 20 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 3b   pFK->pNextFrom;
a210: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
a220: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
a230: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
a240: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
a250: 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
a260: 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  ) */..#ifndef SQ
a270: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
a280: 4e 5f 4b 45 59 0a 23 69 66 6e 64 65 66 20 53 51  N_KEY.#ifndef SQ
a290: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
a2a0: 52 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  R.  case PragTyp
a2b0: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48 45  _FOREIGN_KEY_CHE
a2c0: 43 4b 3a 20 7b 0a 20 20 20 20 46 4b 65 79 20 2a  CK: {.    FKey *
a2d0: 70 46 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20  pFK;            
a2e0: 20 2f 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65   /* A foreign ke
a2f0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  y constraint */.
a300: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
a310: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68             /* Ch
a320: 69 6c 64 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  ild table contai
a330: 6e 20 22 52 45 46 45 52 45 4e 43 45 53 22 20 6b  n "REFERENCES" k
a340: 65 79 77 6f 72 64 20 2a 2f 0a 20 20 20 20 54 61  eyword */.    Ta
a350: 62 6c 65 20 2a 70 50 61 72 65 6e 74 3b 20 20 20  ble *pParent;   
a360: 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 74       /* Parent t
a370: 61 62 6c 65 20 74 68 61 74 20 63 68 69 6c 64 20  able that child 
a380: 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20 20  points to */.   
a390: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20   Index *pIdx;   
a3a0: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
a3b0: 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 74   in the parent t
a3c0: 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
a3d0: 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
a3e0: 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
a3f0: 65 72 3a 20 20 46 6f 72 65 69 67 6e 20 6b 65 79  er:  Foreign key
a400: 20 6e 75 6d 62 65 72 20 66 6f 72 20 70 54 61 62   number for pTab
a410: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6a 3b 20 20   */.    int j;  
a420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a430: 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20  * Loop counter: 
a440: 20 46 69 65 6c 64 20 6f 66 20 74 68 65 20 66 6f   Field of the fo
a450: 72 65 69 67 6e 20 6b 65 79 20 2a 2f 0a 20 20 20  reign key */.   
a460: 20 48 61 73 68 45 6c 65 6d 20 2a 6b 3b 20 20 20   HashElem *k;   
a470: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
a480: 63 6f 75 6e 74 65 72 3a 20 20 4e 65 78 74 20 74  counter:  Next t
a490: 61 62 6c 65 20 69 6e 20 73 63 68 65 6d 61 20 2a  able in schema *
a4a0: 2f 0a 20 20 20 20 69 6e 74 20 78 3b 20 20 20 20  /.    int x;    
a4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a4c0: 72 65 73 75 6c 74 20 76 61 72 69 61 62 6c 65 20  result variable 
a4d0: 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
a4e0: 73 75 6c 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  sult;         /*
a4f0: 20 33 20 72 65 67 69 73 74 65 72 73 20 74 6f 20   3 registers to 
a500: 68 6f 6c 64 20 61 20 72 65 73 75 6c 74 20 72 6f  hold a result ro
a510: 77 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  w */.    int reg
a520: 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  Key;            
a530: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 68  /* Register to h
a540: 6f 6c 64 20 6b 65 79 20 66 6f 72 20 63 68 65 63  old key for chec
a550: 6b 69 6e 67 20 74 68 65 20 46 4b 20 2a 2f 0a 20  king the FK */. 
a560: 20 20 20 69 6e 74 20 72 65 67 52 6f 77 3b 20 20     int regRow;  
a570: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
a580: 69 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61  isters to hold a
a590: 20 72 6f 77 20 66 72 6f 6d 20 70 54 61 62 20 2a   row from pTab *
a5a0: 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 54 6f  /.    int addrTo
a5b0: 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
a5c0: 54 6f 70 20 6f 66 20 61 20 6c 6f 6f 70 20 63 68  Top of a loop ch
a5d0: 65 63 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b  ecking foreign k
a5e0: 65 79 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  eys */.    int a
a5f0: 64 64 72 4f 6b 3b 20 20 20 20 20 20 20 20 20 20  ddrOk;          
a600: 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 69    /* Jump here i
a610: 66 20 74 68 65 20 6b 65 79 20 69 73 20 4f 4b 20  f the key is OK 
a620: 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f  */.    int *aiCo
a630: 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ls;           /*
a640: 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74   child to parent
a650: 20 63 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e 67 20   column mapping 
a660: 2a 2f 0a 0a 20 20 20 20 72 65 67 52 65 73 75 6c  */..    regResul
a670: 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  t = pParse->nMem
a680: 2b 31 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  +1;.    pParse->
a690: 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20 72  nMem += 4;.    r
a6a0: 65 67 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73 65  egKey = ++pParse
a6b0: 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67 52  ->nMem;.    regR
a6c0: 6f 77 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e  ow = ++pParse->n
a6d0: 4d 65 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Mem;.    sqlite3
a6e0: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
a6f0: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
a700: 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73     k = sqliteHas
a710: 68 46 69 72 73 74 28 26 64 62 2d 3e 61 44 62 5b  hFirst(&db->aDb[
a720: 69 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62  iDb].pSchema->tb
a730: 6c 48 61 73 68 29 3b 0a 20 20 20 20 77 68 69 6c  lHash);.    whil
a740: 65 28 20 6b 20 29 7b 0a 20 20 20 20 20 20 69 66  e( k ){.      if
a750: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
a760: 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74      pTab = sqlit
a770: 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 70 50  e3LocateTable(pP
a780: 61 72 73 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c  arse, 0, zRight,
a790: 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20 6b   zDb);.        k
a7a0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 0;.      }els
a7b0: 65 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62 20  e{.        pTab 
a7c0: 3d 20 28 54 61 62 6c 65 2a 29 73 71 6c 69 74 65  = (Table*)sqlite
a7d0: 48 61 73 68 44 61 74 61 28 6b 29 3b 0a 20 20 20  HashData(k);.   
a7e0: 20 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48       k = sqliteH
a7f0: 61 73 68 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20  ashNext(k);.    
a800: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 54    }.      if( pT
a810: 61 62 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70  ab==0 || pTab->p
a820: 46 4b 65 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  FKey==0 ) contin
a830: 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ue;.      sqlite
a840: 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73  3TableLock(pPars
a850: 65 2c 20 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e  e, iDb, pTab->tn
a860: 75 6d 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61  um, 0, pTab->zNa
a870: 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  me);.      if( p
a880: 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77  Tab->nCol+regRow
a890: 3e 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20  >pParse->nMem ) 
a8a0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pParse->nMem = p
a8b0: 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52  Tab->nCol + regR
a8c0: 6f 77 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ow;.      sqlite
a8d0: 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73  3OpenTable(pPars
a8e0: 65 2c 20 30 2c 20 69 44 62 2c 20 70 54 61 62 2c  e, 0, iDb, pTab,
a8f0: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20   OP_OpenRead);. 
a900: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a910: 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 72 65  LoadString(v, re
a920: 67 52 65 73 75 6c 74 2c 20 70 54 61 62 2d 3e 7a  gResult, pTab->z
a930: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 66 6f 72  Name);.      for
a940: 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e  (i=1, pFK=pTab->
a950: 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c  pFKey; pFK; i++,
a960: 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46   pFK=pFK->pNextF
a970: 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50  rom){.        pP
a980: 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46  arent = sqlite3F
a990: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b  indTable(db, pFK
a9a0: 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20  ->zTo, zDb);.   
a9b0: 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74       if( pParent
a9c0: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
a9d0: 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 30          pIdx = 0
a9e0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
a9f0: 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73  3TableLock(pPars
aa00: 65 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2d  e, iDb, pParent-
aa10: 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72 65 6e  >tnum, 0, pParen
aa20: 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  t->zName);.     
aa30: 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b     x = sqlite3Fk
aa40: 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61 72  LocateIndex(pPar
aa50: 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b  se, pParent, pFK
aa60: 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a 20 20 20  , &pIdx, 0);.   
aa70: 20 20 20 20 20 69 66 28 20 78 3d 3d 30 20 29 7b       if( x==0 ){
aa80: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
aa90: 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Idx==0 ){.      
aaa0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65        sqlite3Ope
aab0: 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 69  nTable(pParse, i
aac0: 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2c 20  , iDb, pParent, 
aad0: 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20  OP_OpenRead);.  
aae0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
aaf0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
ab00: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
ab10: 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c 20  OP_OpenRead, i, 
ab20: 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62 29  pIdx->tnum, iDb)
ab30: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
ab40: 6c 69 74 65 33 56 64 62 65 53 65 74 50 34 4b 65  lite3VdbeSetP4Ke
ab50: 79 49 6e 66 6f 28 70 50 61 72 73 65 2c 20 70 49  yInfo(pParse, pI
ab60: 64 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  dx);.          }
ab70: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
ab80: 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b            k = 0;
ab90: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
aba0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
abb0: 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
abc0: 28 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 3e 30  ( pParse->nErr>0
abd0: 20 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a 20 20   || pFK==0 );.  
abe0: 20 20 20 20 69 66 28 20 70 46 4b 20 29 20 62 72      if( pFK ) br
abf0: 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20 70  eak;.      if( p
ac00: 50 61 72 73 65 2d 3e 6e 54 61 62 3c 69 20 29 20  Parse->nTab<i ) 
ac10: 70 50 61 72 73 65 2d 3e 6e 54 61 62 20 3d 20 69  pParse->nTab = i
ac20: 3b 0a 20 20 20 20 20 20 61 64 64 72 54 6f 70 20  ;.      addrTop 
ac30: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
ac40: 4f 70 31 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64  Op1(v, OP_Rewind
ac50: 2c 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61  , 0); VdbeCovera
ac60: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 66 6f 72  ge(v);.      for
ac70: 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e  (i=1, pFK=pTab->
ac80: 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c  pFKey; pFK; i++,
ac90: 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46   pFK=pFK->pNextF
aca0: 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50  rom){.        pP
acb0: 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46  arent = sqlite3F
acc0: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b  indTable(db, pFK
acd0: 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20  ->zTo, zDb);.   
ace0: 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20       pIdx = 0;. 
acf0: 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3d 20         aiCols = 
ad00: 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  0;.        if( p
ad10: 50 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20  Parent ){.      
ad20: 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46      x = sqlite3F
ad30: 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61  kLocateIndex(pPa
ad40: 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46  rse, pParent, pF
ad50: 4b 2c 20 26 70 49 64 78 2c 20 26 61 69 43 6f 6c  K, &pIdx, &aiCol
ad60: 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73  s);.          as
ad70: 73 65 72 74 28 20 78 3d 3d 30 20 29 3b 0a 20 20  sert( x==0 );.  
ad80: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
ad90: 61 64 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65 33  addrOk = sqlite3
ada0: 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29  VdbeMakeLabel(v)
adb0: 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 47 65  ;..        /* Ge
adc0: 6e 65 72 61 74 65 20 63 6f 64 65 20 74 6f 20 72  nerate code to r
add0: 65 61 64 20 74 68 65 20 63 68 69 6c 64 20 6b 65  ead the child ke
ade0: 79 20 76 61 6c 75 65 73 20 69 6e 74 6f 20 72 65  y values into re
adf0: 67 69 73 74 65 72 73 0a 20 20 20 20 20 20 20 20  gisters.        
ae00: 2a 2a 20 72 65 67 52 6f 77 2e 2e 72 65 67 52 6f  ** regRow..regRo
ae10: 77 2b 6e 2e 20 49 66 20 61 6e 79 20 6f 66 20 74  w+n. If any of t
ae20: 68 65 20 63 68 69 6c 64 20 6b 65 79 20 76 61 6c  he child key val
ae30: 75 65 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74 68  ues are NULL, th
ae40: 69 73 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 72  is .        ** r
ae50: 6f 77 20 63 61 6e 6e 6f 74 20 63 61 75 73 65 20  ow cannot cause 
ae60: 61 6e 20 46 4b 20 76 69 6f 6c 61 74 69 6f 6e 2e  an FK violation.
ae70: 20 4a 75 6d 70 20 64 69 72 65 63 74 6c 79 20 74   Jump directly t
ae80: 6f 20 61 64 64 72 4f 6b 20 69 6e 20 0a 20 20 20  o addrOk in .   
ae90: 20 20 20 20 20 2a 2a 20 74 68 69 73 20 63 61 73       ** this cas
aea0: 65 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f  e. */.        fo
aeb0: 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43  r(j=0; j<pFK->nC
aec0: 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; j++){.      
aed0: 20 20 20 20 69 6e 74 20 69 43 6f 6c 20 3d 20 61      int iCol = a
aee0: 69 43 6f 6c 73 20 3f 20 61 69 43 6f 6c 73 5b 6a  iCols ? aiCols[j
aef0: 5d 20 3a 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d  ] : pFK->aCol[j]
af00: 2e 69 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20  .iFrom;.        
af10: 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64    sqlite3ExprCod
af20: 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
af30: 65 28 76 2c 20 70 54 61 62 2c 20 30 2c 20 69 43  e(v, pTab, 0, iC
af40: 6f 6c 2c 20 72 65 67 52 6f 77 2b 6a 29 3b 0a 20  ol, regRow+j);. 
af50: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
af60: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
af70: 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2b  _IsNull, regRow+
af80: 6a 2c 20 61 64 64 72 4f 6b 29 3b 20 56 64 62 65  j, addrOk); Vdbe
af90: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
afa0: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
afb0: 2f 2a 20 47 65 6e 65 72 61 74 65 20 63 6f 64 65  /* Generate code
afc0: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 70 61   to query the pa
afd0: 72 65 6e 74 20 69 6e 64 65 78 20 66 6f 72 20 61  rent index for a
afe0: 20 6d 61 74 63 68 69 6e 67 20 70 61 72 65 6e 74   matching parent
aff0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 6b 65 79 2e  .        ** key.
b000: 20 49 66 20 61 20 6d 61 74 63 68 20 69 73 20 66   If a match is f
b010: 6f 75 6e 64 2c 20 6a 75 6d 70 20 74 6f 20 61 64  ound, jump to ad
b020: 64 72 4f 6b 2e 20 2a 2f 0a 20 20 20 20 20 20 20  drOk. */.       
b030: 20 69 66 28 20 70 49 64 78 20 29 7b 0a 20 20 20   if( pIdx ){.   
b040: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b050: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 4d  beAddOp4(v, OP_M
b060: 61 6b 65 52 65 63 6f 72 64 2c 20 72 65 67 52 6f  akeRecord, regRo
b070: 77 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 2c 20 72 65  w, pFK->nCol, re
b080: 67 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20  gKey,.          
b090: 20 20 20 20 73 71 6c 69 74 65 33 49 6e 64 65 78      sqlite3Index
b0a0: 41 66 66 69 6e 69 74 79 53 74 72 28 64 62 2c 70  AffinityStr(db,p
b0b0: 49 64 78 29 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 29  Idx), pFK->nCol)
b0c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
b0d0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74  te3VdbeAddOp4Int
b0e0: 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 2c  (v, OP_Found, i,
b0f0: 20 61 64 64 72 4f 6b 2c 20 72 65 67 4b 65 79 2c   addrOk, regKey,
b100: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 56   0);.          V
b110: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
b120: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
b130: 28 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20  ( pParent ){.   
b140: 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 20 3d         int jmp =
b150: 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72   sqlite3VdbeCurr
b160: 65 6e 74 41 64 64 72 28 76 29 2b 32 3b 0a 20 20  entAddr(v)+2;.  
b170: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b180: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
b190: 53 65 65 6b 52 6f 77 69 64 2c 20 69 2c 20 6a 6d  SeekRowid, i, jm
b1a0: 70 2c 20 72 65 67 52 6f 77 29 3b 20 56 64 62 65  p, regRow); Vdbe
b1b0: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
b1c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b1d0: 62 65 47 6f 74 6f 28 76 2c 20 61 64 64 72 4f 6b  beGoto(v, addrOk
b1e0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  );.          ass
b1f0: 65 72 74 28 20 70 46 4b 2d 3e 6e 43 6f 6c 3d 3d  ert( pFK->nCol==
b200: 31 20 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a  1 );.        }..
b210: 20 20 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72          /* Gener
b220: 61 74 65 20 63 6f 64 65 20 74 6f 20 72 65 70 6f  ate code to repo
b230: 72 74 20 61 6e 20 46 4b 20 76 69 6f 6c 61 74 69  rt an FK violati
b240: 6f 6e 20 74 6f 20 74 68 65 20 63 61 6c 6c 65 72  on to the caller
b250: 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
b260: 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
b270: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
b280: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
b290: 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72  , OP_Rowid, 0, r
b2a0: 65 67 52 65 73 75 6c 74 2b 31 29 3b 0a 20 20 20  egResult+1);.   
b2b0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
b2c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b2d0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75  eAddOp2(v, OP_Nu
b2e0: 6c 6c 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74  ll, 0, regResult
b2f0: 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  +1);.        }. 
b300: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b310: 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 72  beMultiLoad(v, r
b320: 65 67 52 65 73 75 6c 74 2b 32 2c 20 22 73 69 58  egResult+2, "siX
b330: 22 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 69 2d 31  ", pFK->zTo, i-1
b340: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
b350: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
b360: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 72 65  OP_ResultRow, re
b370: 67 52 65 73 75 6c 74 2c 20 34 29 3b 0a 20 20 20  gResult, 4);.   
b380: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b390: 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20  ResolveLabel(v, 
b3a0: 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20  addrOk);.       
b3b0: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
b3c0: 62 2c 20 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20  b, aiCols);.    
b3d0: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
b3e0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
b3f0: 50 5f 4e 65 78 74 2c 20 30 2c 20 61 64 64 72 54  P_Next, 0, addrT
b400: 6f 70 2b 31 29 3b 20 56 64 62 65 43 6f 76 65 72  op+1); VdbeCover
b410: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71  age(v);.      sq
b420: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
b430: 65 28 76 2c 20 61 64 64 72 54 6f 70 29 3b 0a 20  e(v, addrTop);. 
b440: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
b450: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  ;.#endif /* !def
b460: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
b470: 5f 54 52 49 47 47 45 52 29 20 2a 2f 0a 23 65 6e  _TRIGGER) */.#en
b480: 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
b490: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
b4a0: 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66  IGN_KEY) */..#if
b4b0: 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 63 61  ndef NDEBUG.  ca
b4c0: 73 65 20 50 72 61 67 54 79 70 5f 50 41 52 53 45  se PragTyp_PARSE
b4d0: 52 5f 54 52 41 43 45 3a 20 7b 0a 20 20 20 20 69  R_TRACE: {.    i
b4e0: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
b4f0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 65     if( sqlite3Ge
b500: 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c  tBoolean(zRight,
b510: 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73   0) ){.        s
b520: 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
b530: 65 28 73 74 64 6f 75 74 2c 20 22 70 61 72 73 65  e(stdout, "parse
b540: 72 3a 20 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c  r: ");.      }el
b550: 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
b560: 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28 30  te3ParserTrace(0
b570: 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 0);.      }.  
b580: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
b590: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 52 65  .#endif..  /* Re
b5a0: 69 6e 73 74 61 6c 6c 20 74 68 65 20 4c 49 4b 45  install the LIKE
b5b0: 20 61 6e 64 20 47 4c 4f 42 20 66 75 6e 63 74 69   and GLOB functi
b5c0: 6f 6e 73 2e 20 20 54 68 65 20 76 61 72 69 61 6e  ons.  The varian
b5d0: 74 20 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a 20 75  t of LIKE.  ** u
b5e0: 73 65 64 20 77 69 6c 6c 20 62 65 20 63 61 73 65  sed will be case
b5f0: 20 73 65 6e 73 69 74 69 76 65 20 6f 72 20 6e 6f   sensitive or no
b600: 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74  t depending on t
b610: 68 65 20 52 48 53 2e 0a 20 20 2a 2f 0a 20 20 63  he RHS..  */.  c
b620: 61 73 65 20 50 72 61 67 54 79 70 5f 43 41 53 45  ase PragTyp_CASE
b630: 5f 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 3a  _SENSITIVE_LIKE:
b640: 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
b650: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
b660: 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75  e3RegisterLikeFu
b670: 6e 63 74 69 6f 6e 73 28 64 62 2c 20 73 71 6c 69  nctions(db, sqli
b680: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
b690: 69 67 68 74 2c 20 30 29 29 3b 0a 20 20 20 20 7d  ight, 0));.    }
b6a0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 23  .  }.  break;..#
b6b0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 49 4e  ifndef SQLITE_IN
b6c0: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52  TEGRITY_CHECK_ER
b6d0: 52 4f 52 5f 4d 41 58 0a 23 20 64 65 66 69 6e 65  ROR_MAX.# define
b6e0: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54   SQLITE_INTEGRIT
b6f0: 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41  Y_CHECK_ERROR_MA
b700: 58 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a 23 69  X 100.#endif..#i
b710: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
b720: 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
b730: 4b 0a 20 20 2f 2a 20 20 20 20 50 52 41 47 4d 41  K.  /*    PRAGMA
b740: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
b750: 0a 20 20 2a 2a 20 20 20 20 50 52 41 47 4d 41 20  .  **    PRAGMA 
b760: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 28  integrity_check(
b770: 4e 29 0a 20 20 2a 2a 20 20 20 20 50 52 41 47 4d  N).  **    PRAGM
b780: 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 0a 20 20  A quick_check.  
b790: 2a 2a 20 20 20 20 50 52 41 47 4d 41 20 71 75 69  **    PRAGMA qui
b7a0: 63 6b 5f 63 68 65 63 6b 28 4e 29 0a 20 20 2a 2a  ck_check(N).  **
b7b0: 0a 20 20 2a 2a 20 56 65 72 69 66 79 20 74 68 65  .  ** Verify the
b7c0: 20 69 6e 74 65 67 72 69 74 79 20 6f 66 20 74 68   integrity of th
b7d0: 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2a  e database..  **
b7e0: 0a 20 20 2a 2a 20 54 68 65 20 22 71 75 69 63 6b  .  ** The "quick
b7f0: 5f 63 68 65 63 6b 22 20 69 73 20 72 65 64 75 63  _check" is reduc
b800: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 0a 20  ed version of . 
b810: 20 2a 2a 20 69 6e 74 65 67 72 69 74 79 5f 63 68   ** integrity_ch
b820: 65 63 6b 20 64 65 73 69 67 6e 65 64 20 74 6f 20  eck designed to 
b830: 64 65 74 65 63 74 20 6d 6f 73 74 20 64 61 74 61  detect most data
b840: 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 0a  base corruption.
b850: 20 20 2a 2a 20 77 69 74 68 6f 75 74 20 74 68 65    ** without the
b860: 20 6f 76 65 72 68 65 61 64 20 6f 66 20 63 72 6f   overhead of cro
b870: 73 73 2d 63 68 65 63 6b 69 6e 67 20 69 6e 64 65  ss-checking inde
b880: 78 65 73 2e 20 20 51 75 69 63 6b 5f 63 68 65 63  xes.  Quick_chec
b890: 6b 0a 20 20 2a 2a 20 69 73 20 6c 69 6e 65 61 72  k.  ** is linear
b8a0: 20 74 69 6d 65 20 77 68 65 72 65 61 73 65 20 69   time wherease i
b8b0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 69  ntegrity_check i
b8c0: 73 20 4f 28 4e 6c 6f 67 4e 29 2e 0a 20 20 2a 2f  s O(NlogN)..  */
b8d0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
b8e0: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 3a  INTEGRITY_CHECK:
b8f0: 20 7b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c   {.    int i, j,
b900: 20 61 64 64 72 2c 20 6d 78 45 72 72 3b 0a 0a 20   addr, mxErr;.. 
b910: 20 20 20 69 6e 74 20 69 73 51 75 69 63 6b 20 3d     int isQuick =
b920: 20 28 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72   (sqlite3Tolower
b930: 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 71 27 29  (zLeft[0])=='q')
b940: 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ;..    /* If the
b950: 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 20   PRAGMA command 
b960: 77 61 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  was of the form 
b970: 22 50 52 41 47 4d 41 20 3c 64 62 3e 2e 69 6e 74  "PRAGMA <db>.int
b980: 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a 20  egrity_check",. 
b990: 20 20 20 2a 2a 20 74 68 65 6e 20 69 44 62 20 69     ** then iDb i
b9a0: 73 20 73 65 74 20 74 6f 20 74 68 65 20 69 6e 64  s set to the ind
b9b0: 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
b9c0: 73 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  se identified by
b9d0: 20 3c 64 62 3e 2e 0a 20 20 20 20 2a 2a 20 49 6e   <db>..    ** In
b9e0: 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20   this case, the 
b9f0: 69 6e 74 65 67 72 69 74 79 20 6f 66 20 64 61 74  integrity of dat
ba00: 61 62 61 73 65 20 69 44 62 20 6f 6e 6c 79 20 69  abase iDb only i
ba10: 73 20 76 65 72 69 66 69 65 64 20 62 79 0a 20 20  s verified by.  
ba20: 20 20 2a 2a 20 74 68 65 20 56 44 42 45 20 63 72    ** the VDBE cr
ba30: 65 61 74 65 64 20 62 65 6c 6f 77 2e 0a 20 20 20  eated below..   
ba40: 20 2a 2a 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72   **.    ** Other
ba50: 77 69 73 65 2c 20 69 66 20 74 68 65 20 63 6f 6d  wise, if the com
ba60: 6d 61 6e 64 20 77 61 73 20 73 69 6d 70 6c 79 20  mand was simply 
ba70: 22 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74  "PRAGMA integrit
ba80: 79 5f 63 68 65 63 6b 22 20 28 6f 72 0a 20 20 20  y_check" (or.   
ba90: 20 2a 2a 20 22 50 52 41 47 4d 41 20 71 75 69 63   ** "PRAGMA quic
baa0: 6b 5f 63 68 65 63 6b 22 29 2c 20 74 68 65 6e 20  k_check"), then 
bab0: 69 44 62 20 69 73 20 73 65 74 20 74 6f 20 30 2e  iDb is set to 0.
bac0: 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 73   In this case, s
bad0: 65 74 20 69 44 62 0a 20 20 20 20 2a 2a 20 74 6f  et iDb.    ** to
bae0: 20 2d 31 20 68 65 72 65 2c 20 74 6f 20 69 6e 64   -1 here, to ind
baf0: 69 63 61 74 65 20 74 68 61 74 20 74 68 65 20 56  icate that the V
bb00: 44 42 45 20 73 68 6f 75 6c 64 20 76 65 72 69 66  DBE should verif
bb10: 79 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 0a  y the integrity.
bb20: 20 20 20 20 2a 2a 20 6f 66 20 61 6c 6c 20 61 74      ** of all at
bb30: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
bb40: 2e 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74  .  */.    assert
bb50: 28 20 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20  ( iDb>=0 );.    
bb60: 61 73 73 65 72 74 28 20 69 44 62 3d 3d 30 20 7c  assert( iDb==0 |
bb70: 7c 20 70 49 64 32 2d 3e 7a 20 29 3b 0a 20 20 20  | pId2->z );.   
bb80: 20 69 66 28 20 70 49 64 32 2d 3e 7a 3d 3d 30 20   if( pId2->z==0 
bb90: 29 20 69 44 62 20 3d 20 2d 31 3b 0a 0a 20 20 20  ) iDb = -1;..   
bba0: 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74   /* Initialize t
bbb0: 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20  he VDBE program 
bbc0: 2a 2f 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  */.    pParse->n
bbd0: 4d 65 6d 20 3d 20 36 3b 0a 0a 20 20 20 20 2f 2a  Mem = 6;..    /*
bbe0: 20 53 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d   Set the maximum
bbf0: 20 65 72 72 6f 72 20 63 6f 75 6e 74 20 2a 2f 0a   error count */.
bc00: 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49      mxErr = SQLI
bc10: 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  TE_INTEGRITY_CHE
bc20: 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20  CK_ERROR_MAX;.  
bc30: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
bc40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 65 74        sqlite3Get
bc50: 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 6d  Int32(zRight, &m
bc60: 78 45 72 72 29 3b 0a 20 20 20 20 20 20 69 66 28  xErr);.      if(
bc70: 20 6d 78 45 72 72 3c 3d 30 20 29 7b 0a 20 20 20   mxErr<=0 ){.   
bc80: 20 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c       mxErr = SQL
bc90: 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  ITE_INTEGRITY_CH
bca0: 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20  ECK_ERROR_MAX;. 
bcb0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
bcc0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
bcd0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
bce0: 2c 20 6d 78 45 72 72 2d 31 2c 20 31 29 3b 20 2f  , mxErr-1, 1); /
bcf0: 2a 20 72 65 67 5b 31 5d 20 68 6f 6c 64 73 20 65  * reg[1] holds e
bd00: 72 72 6f 72 73 20 6c 65 66 74 20 2a 2f 0a 0a 20  rrors left */.. 
bd10: 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65     /* Do an inte
bd20: 67 72 69 74 79 20 63 68 65 63 6b 20 6f 6e 20 65  grity check on e
bd30: 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ach database fil
bd40: 65 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30  e */.    for(i=0
bd50: 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
bd60: 29 7b 0a 20 20 20 20 20 20 48 61 73 68 45 6c 65  ){.      HashEle
bd70: 6d 20 2a 78 3b 20 20 20 20 20 2f 2a 20 46 6f 72  m *x;     /* For
bd80: 20 6c 6f 6f 70 69 6e 67 20 6f 76 65 72 20 74 61   looping over ta
bd90: 62 6c 65 73 20 69 6e 20 74 68 65 20 73 63 68 65  bles in the sche
bda0: 6d 61 20 2a 2f 0a 20 20 20 20 20 20 48 61 73 68  ma */.      Hash
bdb0: 20 2a 70 54 62 6c 73 3b 20 20 20 20 20 2f 2a 20   *pTbls;     /* 
bdc0: 53 65 74 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65  Set of all table
bdd0: 73 20 69 6e 20 74 68 65 20 73 63 68 65 6d 61 20  s in the schema 
bde0: 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 2a 61 52  */.      int *aR
bdf0: 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 41 72 72  oot;      /* Arr
be00: 61 79 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 20  ay of root page 
be10: 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 62  numbers of all b
be20: 74 72 65 65 73 20 2a 2f 0a 20 20 20 20 20 20 69  trees */.      i
be30: 6e 74 20 63 6e 74 20 3d 20 30 3b 20 20 20 20 20  nt cnt = 0;     
be40: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
be50: 72 69 65 73 20 69 6e 20 61 52 6f 6f 74 5b 5d 20  ries in aRoot[] 
be60: 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 6d 78 49  */.      int mxI
be70: 64 78 20 3d 20 30 3b 20 20 20 2f 2a 20 4d 61 78  dx = 0;   /* Max
be80: 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 69  imum number of i
be90: 6e 64 65 78 65 73 20 66 6f 72 20 61 6e 79 20 74  ndexes for any t
bea0: 61 62 6c 65 20 2a 2f 0a 0a 20 20 20 20 20 20 69  able */..      i
beb0: 66 28 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 26  f( OMIT_TEMPDB &
bec0: 26 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75  & i==1 ) continu
bed0: 65 3b 0a 20 20 20 20 20 20 69 66 28 20 69 44 62  e;.      if( iDb
bee0: 3e 3d 30 20 26 26 20 69 21 3d 69 44 62 20 29 20  >=0 && i!=iDb ) 
bef0: 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20 20  continue;..     
bf00: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
bf10: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
bf20: 20 69 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44   i);..      /* D
bf30: 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20 63  o an integrity c
bf40: 68 65 63 6b 20 6f 66 20 74 68 65 20 42 2d 54 72  heck of the B-Tr
bf50: 65 65 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  ee.      **.    
bf60: 20 20 2a 2a 20 42 65 67 69 6e 20 62 79 20 66 69    ** Begin by fi
bf70: 6e 64 69 6e 67 20 74 68 65 20 72 6f 6f 74 20 70  nding the root p
bf80: 61 67 65 73 20 6e 75 6d 62 65 72 73 0a 20 20 20  ages numbers.   
bf90: 20 20 20 2a 2a 20 66 6f 72 20 61 6c 6c 20 74 61     ** for all ta
bfa0: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
bfb0: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
bfc0: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
bfd0: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
bfe0: 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
bff0: 64 62 2c 20 69 2c 20 30 29 20 29 3b 0a 20 20 20  db, i, 0) );.   
c000: 20 20 20 70 54 62 6c 73 20 3d 20 26 64 62 2d 3e     pTbls = &db->
c010: 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[i].pSchema->
c020: 74 62 6c 48 61 73 68 3b 0a 20 20 20 20 20 20 66  tblHash;.      f
c030: 6f 72 28 63 6e 74 3d 30 2c 20 78 3d 73 71 6c 69  or(cnt=0, x=sqli
c040: 74 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c  teHashFirst(pTbl
c050: 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48  s); x; x=sqliteH
c060: 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20  ashNext(x)){.   
c070: 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62       Table *pTab
c080: 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74   = sqliteHashDat
c090: 61 28 78 29 3b 20 20 2f 2a 20 43 75 72 72 65 6e  a(x);  /* Curren
c0a0: 74 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 20  t table */.     
c0b0: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20     Index *pIdx; 
c0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0d0: 20 20 20 20 20 2f 2a 20 41 6e 20 69 6e 64 65 78       /* An index
c0e0: 20 6f 6e 20 70 54 61 62 20 2a 2f 0a 20 20 20 20   on pTab */.    
c0f0: 20 20 20 20 69 6e 74 20 6e 49 64 78 3b 20 20 20      int nIdx;   
c100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c110: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c120: 6f 66 20 69 6e 64 65 78 65 73 20 6f 6e 20 70 54  of indexes on pT
c130: 61 62 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  ab */.        if
c140: 28 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  ( HasRowid(pTab)
c150: 20 29 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20   ) cnt++;.      
c160: 20 20 66 6f 72 28 6e 49 64 78 3d 30 2c 20 70 49    for(nIdx=0, pI
c170: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
c180: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
c190: 2d 3e 70 4e 65 78 74 2c 20 6e 49 64 78 2b 2b 29  ->pNext, nIdx++)
c1a0: 7b 20 63 6e 74 2b 2b 3b 20 7d 0a 20 20 20 20 20  { cnt++; }.     
c1b0: 20 20 20 69 66 28 20 6e 49 64 78 3e 6d 78 49 64     if( nIdx>mxId
c1c0: 78 20 29 20 6d 78 49 64 78 20 3d 20 6e 49 64 78  x ) mxIdx = nIdx
c1d0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
c1e0: 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44  aRoot = sqlite3D
c1f0: 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c  bMallocRawNN(db,
c200: 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 63 6e   sizeof(int)*(cn
c210: 74 2b 31 29 29 3b 0a 20 20 20 20 20 20 69 66 28  t+1));.      if(
c220: 20 61 52 6f 6f 74 3d 3d 30 20 29 20 62 72 65 61   aRoot==0 ) brea
c230: 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28 63 6e 74  k;.      for(cnt
c240: 3d 30 2c 20 78 3d 73 71 6c 69 74 65 48 61 73 68  =0, x=sqliteHash
c250: 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 3b  First(pTbls); x;
c260: 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   x=sqliteHashNex
c270: 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54  t(x)){.        T
c280: 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c  able *pTab = sql
c290: 69 74 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a  iteHashData(x);.
c2a0: 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70          Index *p
c2b0: 49 64 78 3b 0a 20 20 20 20 20 20 20 20 69 66 28  Idx;.        if(
c2c0: 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
c2d0: 29 20 61 52 6f 6f 74 5b 2b 2b 63 6e 74 5d 20 3d  ) aRoot[++cnt] =
c2e0: 20 70 54 61 62 2d 3e 74 6e 75 6d 3b 0a 20 20 20   pTab->tnum;.   
c2f0: 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54       for(pIdx=pT
c300: 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
c310: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
c320: 78 74 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61  xt){.          a
c330: 52 6f 6f 74 5b 2b 2b 63 6e 74 5d 20 3d 20 70 49  Root[++cnt] = pI
c340: 64 78 2d 3e 74 6e 75 6d 3b 0a 20 20 20 20 20 20  dx->tnum;.      
c350: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
c360: 20 20 61 52 6f 6f 74 5b 30 5d 20 3d 20 63 6e 74    aRoot[0] = cnt
c370: 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65  ;..      /* Make
c380: 20 73 75 72 65 20 73 75 66 66 69 63 69 65 6e 74   sure sufficient
c390: 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   number of regis
c3a0: 74 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 61  ters have been a
c3b0: 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 20 20  llocated */.    
c3c0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
c3d0: 20 4d 41 58 28 20 70 50 61 72 73 65 2d 3e 6e 4d   MAX( pParse->nM
c3e0: 65 6d 2c 20 38 2b 6d 78 49 64 78 20 29 3b 0a 20  em, 8+mxIdx );. 
c3f0: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6c 65 61       sqlite3Clea
c400: 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 70 50  rTempRegCache(pP
c410: 61 72 73 65 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  arse);..      /*
c420: 20 44 6f 20 74 68 65 20 62 2d 74 72 65 65 20 69   Do the b-tree i
c430: 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 73 20  ntegrity checks 
c440: 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
c450: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
c460: 5f 49 6e 74 65 67 72 69 74 79 43 6b 2c 20 32 2c  _IntegrityCk, 2,
c470: 20 63 6e 74 2c 20 31 2c 20 28 63 68 61 72 2a 29   cnt, 1, (char*)
c480: 61 52 6f 6f 74 2c 50 34 5f 49 4e 54 41 52 52 41  aRoot,P4_INTARRA
c490: 59 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  Y);.      sqlite
c4a0: 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c  3VdbeChangeP5(v,
c4b0: 20 28 75 38 29 69 29 3b 0a 20 20 20 20 20 20 61   (u8)i);.      a
c4c0: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
c4d0: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 73  eAddOp1(v, OP_Is
c4e0: 4e 75 6c 6c 2c 20 32 29 3b 20 56 64 62 65 43 6f  Null, 2); VdbeCo
c4f0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
c500: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c510: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
c520: 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20  , 0, 3, 0,.     
c530: 20 20 20 20 73 71 6c 69 74 65 33 4d 50 72 69 6e      sqlite3MPrin
c540: 74 66 28 64 62 2c 20 22 2a 2a 2a 20 69 6e 20 64  tf(db, "*** in d
c550: 61 74 61 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e  atabase %s ***\n
c560: 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 44  ", db->aDb[i].zD
c570: 62 53 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20 20  bSName),.       
c580: 20 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20    P4_DYNAMIC);. 
c590: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c5a0: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e  AddOp3(v, OP_Con
c5b0: 63 61 74 2c 20 32 2c 20 33 2c 20 33 29 3b 0a 20  cat, 2, 3, 3);. 
c5c0: 20 20 20 20 20 69 6e 74 65 67 72 69 74 79 43 68       integrityCh
c5d0: 65 63 6b 52 65 73 75 6c 74 52 6f 77 28 76 29 3b  eckResultRow(v);
c5e0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c5f0: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
c600: 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d  dr);..      /* M
c610: 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 74 68 65  ake sure all the
c620: 20 69 6e 64 69 63 65 73 20 61 72 65 20 63 6f 6e   indices are con
c630: 73 74 72 75 63 74 65 64 20 63 6f 72 72 65 63 74  structed correct
c640: 6c 79 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ly..      */.   
c650: 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65 48     for(x=sqliteH
c660: 61 73 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b  ashFirst(pTbls);
c670: 20 78 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68   x; x=sqliteHash
c680: 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20  Next(x)){.      
c690: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20    Table *pTab = 
c6a0: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 78  sqliteHashData(x
c6b0: 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78  );.        Index
c6c0: 20 2a 70 49 64 78 2c 20 2a 70 50 6b 3b 0a 20 20   *pIdx, *pPk;.  
c6d0: 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50 72        Index *pPr
c6e0: 69 6f 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ior = 0;.       
c6f0: 20 69 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 20 20   int loopTop;.  
c700: 20 20 20 20 20 20 69 6e 74 20 69 44 61 74 61 43        int iDataC
c710: 75 72 2c 20 69 49 64 78 43 75 72 3b 0a 20 20 20  ur, iIdxCur;.   
c720: 20 20 20 20 20 69 6e 74 20 72 31 20 3d 20 2d 31       int r1 = -1
c730: 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  ;..        if( p
c740: 54 61 62 2d 3e 74 6e 75 6d 3c 31 20 29 20 63 6f  Tab->tnum<1 ) co
c750: 6e 74 69 6e 75 65 3b 20 20 2f 2a 20 53 6b 69 70  ntinue;  /* Skip
c760: 20 56 49 45 57 73 20 6f 72 20 56 49 52 54 55 41   VIEWs or VIRTUA
c770: 4c 20 54 41 42 4c 45 73 20 2a 2f 0a 20 20 20 20  L TABLEs */.    
c780: 20 20 20 20 70 50 6b 20 3d 20 48 61 73 52 6f 77      pPk = HasRow
c790: 69 64 28 70 54 61 62 29 20 3f 20 30 20 3a 20 73  id(pTab) ? 0 : s
c7a0: 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
c7b0: 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20 20 20  Index(pTab);.   
c7c0: 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e       sqlite3Open
c7d0: 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28  TableAndIndices(
c7e0: 70 50 61 72 73 65 2c 20 69 2c 20 70 54 61 62 2c  pParse, i, pTab,
c7f0: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 30 2c   OP_OpenRead, 0,
c800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c820: 20 20 20 20 31 2c 20 30 2c 20 26 69 44 61 74 61      1, 0, &iData
c830: 43 75 72 2c 20 26 69 49 64 78 43 75 72 29 3b 0a  Cur, &iIdxCur);.
c840: 20 20 20 20 20 20 20 20 2f 2a 20 72 65 67 5b 37          /* reg[7
c850: 5d 20 63 6f 75 6e 74 73 20 74 68 65 20 6e 75 6d  ] counts the num
c860: 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
c870: 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 20 20 20  n the table..   
c880: 20 20 20 20 20 2a 2a 20 72 65 67 5b 38 2b 69 5d       ** reg[8+i]
c890: 20 63 6f 75 6e 74 73 20 74 68 65 20 6e 75 6d 62   counts the numb
c8a0: 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
c8b0: 20 74 68 65 20 69 2d 74 68 20 69 6e 64 65 78 20   the i-th index 
c8c0: 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
c8d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c8e0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
c8f0: 67 65 72 2c 20 30 2c 20 37 29 3b 0a 20 20 20 20  ger, 0, 7);.    
c900: 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64      for(j=0, pId
c910: 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20  x=pTab->pIndex; 
c920: 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d  pIdx; pIdx=pIdx-
c930: 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20  >pNext, j++){.  
c940: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c950: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c960: 49 6e 74 65 67 65 72 2c 20 30 2c 20 38 2b 6a 29  Integer, 0, 8+j)
c970: 3b 20 2f 2a 20 69 6e 64 65 78 20 65 6e 74 72 69  ; /* index entri
c980: 65 73 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  es counter */.  
c990: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
c9a0: 61 73 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e  assert( pParse->
c9b0: 6e 4d 65 6d 3e 3d 38 2b 6a 20 29 3b 0a 20 20 20  nMem>=8+j );.   
c9c0: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
c9d0: 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e  ite3NoTempsInRan
c9e0: 67 65 28 70 50 61 72 73 65 2c 31 2c 37 2b 6a 29  ge(pParse,1,7+j)
c9f0: 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   );.        sqli
ca00: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
ca10: 20 4f 50 5f 52 65 77 69 6e 64 2c 20 69 44 61 74   OP_Rewind, iDat
ca20: 61 43 75 72 2c 20 30 29 3b 20 56 64 62 65 43 6f  aCur, 0); VdbeCo
ca30: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
ca40: 20 20 20 6c 6f 6f 70 54 6f 70 20 3d 20 73 71 6c     loopTop = sql
ca50: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
ca60: 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 37 2c 20  , OP_AddImm, 7, 
ca70: 31 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  1);.        if( 
ca80: 21 69 73 51 75 69 63 6b 20 29 7b 0a 20 20 20 20  !isQuick ){.    
ca90: 20 20 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20        /* Sanity 
caa0: 63 68 65 63 6b 20 6f 6e 20 72 65 63 6f 72 64 20  check on record 
cab0: 68 65 61 64 65 72 20 64 65 63 6f 64 69 6e 67 20  header decoding 
cac0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  */.          sql
cad0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
cae0: 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 69 44 61  , OP_Column, iDa
caf0: 74 61 43 75 72 2c 20 70 54 61 62 2d 3e 6e 43 6f  taCur, pTab->nCo
cb00: 6c 2d 31 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  l-1, 3);.       
cb10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
cb20: 61 6e 67 65 50 35 28 76 2c 20 4f 50 46 4c 41 47  angeP5(v, OPFLAG
cb30: 5f 54 59 50 45 4f 46 41 52 47 29 3b 0a 20 20 20  _TYPEOFARG);.   
cb40: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f       }.        /
cb50: 2a 20 56 65 72 69 66 79 20 74 68 61 74 20 61 6c  * Verify that al
cb60: 6c 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6c 75 6d  l NOT NULL colum
cb70: 6e 73 20 72 65 61 6c 6c 79 20 61 72 65 20 4e 4f  ns really are NO
cb80: 54 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 20 20  T NULL */.      
cb90: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 54 61    for(j=0; j<pTa
cba0: 62 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20  b->nCol; j++){. 
cbb0: 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a           char *z
cbc0: 45 72 72 3b 0a 20 20 20 20 20 20 20 20 20 20 69  Err;.          i
cbd0: 6e 74 20 6a 6d 70 32 3b 0a 20 20 20 20 20 20 20  nt jmp2;.       
cbe0: 20 20 20 69 66 28 20 6a 3d 3d 70 54 61 62 2d 3e     if( j==pTab->
cbf0: 69 50 4b 65 79 20 29 20 63 6f 6e 74 69 6e 75 65  iPKey ) continue
cc00: 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
cc10: 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 6e 6f  pTab->aCol[j].no
cc20: 74 4e 75 6c 6c 3d 3d 30 20 29 20 63 6f 6e 74 69  tNull==0 ) conti
cc30: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 73  nue;.          s
cc40: 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
cc50: 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76  tColumnOfTable(v
cc60: 2c 20 70 54 61 62 2c 20 69 44 61 74 61 43 75 72  , pTab, iDataCur
cc70: 2c 20 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  , j, 3);.       
cc80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
cc90: 61 6e 67 65 50 35 28 76 2c 20 4f 50 46 4c 41 47  angeP5(v, OPFLAG
cca0: 5f 54 59 50 45 4f 46 41 52 47 29 3b 0a 20 20 20  _TYPEOFARG);.   
ccb0: 20 20 20 20 20 20 20 6a 6d 70 32 20 3d 20 73 71         jmp2 = sq
ccc0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
ccd0: 76 2c 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 2c 20 33  v, OP_NotNull, 3
cce0: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
ccf0: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 45  v);.          zE
cd00: 72 72 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  rr = sqlite3MPri
cd10: 6e 74 66 28 64 62 2c 20 22 4e 55 4c 4c 20 76 61  ntf(db, "NULL va
cd20: 6c 75 65 20 69 6e 20 25 73 2e 25 73 22 2c 20 70  lue in %s.%s", p
cd30: 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20  Tab->zName,.    
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd50: 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e            pTab->
cd60: 61 43 6f 6c 5b 6a 5d 2e 7a 4e 61 6d 65 29 3b 0a  aCol[j].zName);.
cd70: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
cd80: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
cd90: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c  P_String8, 0, 3,
cda0: 20 30 2c 20 7a 45 72 72 2c 20 50 34 5f 44 59 4e   0, zErr, P4_DYN
cdb0: 41 4d 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20  AMIC);.         
cdc0: 20 69 6e 74 65 67 72 69 74 79 43 68 65 63 6b 52   integrityCheckR
cdd0: 65 73 75 6c 74 52 6f 77 28 76 29 3b 0a 20 20 20  esultRow(v);.   
cde0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cdf0: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d  beJumpHere(v, jm
ce00: 70 32 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  p2);.        }. 
ce10: 20 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79         /* Verify
ce20: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
ce30: 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  ts */.        if
ce40: 28 20 70 54 61 62 2d 3e 70 43 68 65 63 6b 20 26  ( pTab->pCheck &
ce50: 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  & (db->flags & S
ce60: 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63  QLITE_IgnoreChec
ce70: 6b 73 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ks)==0 ){.      
ce80: 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43      ExprList *pC
ce90: 68 65 63 6b 20 3d 20 73 71 6c 69 74 65 33 45 78  heck = sqlite3Ex
cea0: 70 72 4c 69 73 74 44 75 70 28 64 62 2c 20 70 54  prListDup(db, pT
ceb0: 61 62 2d 3e 70 43 68 65 63 6b 2c 20 30 29 3b 0a  ab->pCheck, 0);.
cec0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 64 62            if( db
ced0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3d 3d  ->mallocFailed==
cee0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
cef0: 20 69 6e 74 20 61 64 64 72 43 6b 46 61 75 6c 74   int addrCkFault
cf00: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61   = sqlite3VdbeMa
cf10: 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20  keLabel(v);.    
cf20: 20 20 20 20 20 20 20 20 69 6e 74 20 61 64 64 72          int addr
cf30: 43 6b 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56 64  CkOk = sqlite3Vd
cf40: 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a  beMakeLabel(v);.
cf50: 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72              char
cf60: 20 2a 7a 45 72 72 3b 0a 20 20 20 20 20 20 20 20   *zErr;.        
cf70: 20 20 20 20 69 6e 74 20 6b 3b 0a 20 20 20 20 20      int k;.     
cf80: 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 69         pParse->i
cf90: 53 65 6c 66 54 61 62 20 3d 20 69 44 61 74 61 43  SelfTab = iDataC
cfa0: 75 72 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20  ur + 1;.        
cfb0: 20 20 20 20 66 6f 72 28 6b 3d 70 43 68 65 63 6b      for(k=pCheck
cfc0: 2d 3e 6e 45 78 70 72 2d 31 3b 20 6b 3e 30 3b 20  ->nExpr-1; k>0; 
cfd0: 6b 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 20 20  k--){.          
cfe0: 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 72 49      sqlite3ExprI
cff0: 66 46 61 6c 73 65 28 70 50 61 72 73 65 2c 20 70  fFalse(pParse, p
d000: 43 68 65 63 6b 2d 3e 61 5b 6b 5d 2e 70 45 78 70  Check->a[k].pExp
d010: 72 2c 20 61 64 64 72 43 6b 46 61 75 6c 74 2c 20  r, addrCkFault, 
d020: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
d030: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  }.            sq
d040: 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28  lite3ExprIfTrue(
d050: 70 50 61 72 73 65 2c 20 70 43 68 65 63 6b 2d 3e  pParse, pCheck->
d060: 61 5b 30 5d 2e 70 45 78 70 72 2c 20 61 64 64 72  a[0].pExpr, addr
d070: 43 6b 4f 6b 2c 20 0a 20 20 20 20 20 20 20 20 20  CkOk, .         
d080: 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4a 55         SQLITE_JU
d090: 4d 50 49 46 4e 55 4c 4c 29 3b 0a 20 20 20 20 20  MPIFNULL);.     
d0a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d0b0: 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76  beResolveLabel(v
d0c0: 2c 20 61 64 64 72 43 6b 46 61 75 6c 74 29 3b 0a  , addrCkFault);.
d0d0: 20 20 20 20 20 20 20 20 20 20 20 20 70 50 61 72              pPar
d0e0: 73 65 2d 3e 69 53 65 6c 66 54 61 62 20 3d 20 30  se->iSelfTab = 0
d0f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7a 45  ;.            zE
d100: 72 72 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  rr = sqlite3MPri
d110: 6e 74 66 28 64 62 2c 20 22 43 48 45 43 4b 20 63  ntf(db, "CHECK c
d120: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
d130: 20 69 6e 20 25 73 22 2c 0a 20 20 20 20 20 20 20   in %s",.       
d140: 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e 7a           pTab->z
d150: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20  Name);.         
d160: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d170: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
d180: 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 7a 45 72  g8, 0, 3, 0, zEr
d190: 72 2c 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a  r, P4_DYNAMIC);.
d1a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 65              inte
d1b0: 67 72 69 74 79 43 68 65 63 6b 52 65 73 75 6c 74  grityCheckResult
d1c0: 52 6f 77 28 76 29 3b 0a 20 20 20 20 20 20 20 20  Row(v);.        
d1d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52      sqlite3VdbeR
d1e0: 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20 61  esolveLabel(v, a
d1f0: 64 64 72 43 6b 4f 6b 29 3b 0a 20 20 20 20 20 20  ddrCkOk);.      
d200: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
d210: 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
d220: 65 6c 65 74 65 28 64 62 2c 20 70 43 68 65 63 6b  elete(db, pCheck
d230: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
d240: 20 20 20 20 20 69 66 28 20 21 69 73 51 75 69 63       if( !isQuic
d250: 6b 20 29 7b 20 2f 2a 20 4f 6d 69 74 20 74 68 65  k ){ /* Omit the
d260: 20 72 65 6d 61 69 6e 69 6e 67 20 74 65 73 74 73   remaining tests
d270: 20 66 6f 72 20 71 75 69 63 6b 5f 63 68 65 63 6b   for quick_check
d280: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   */.          /*
d290: 20 56 61 6c 69 64 61 74 65 20 69 6e 64 65 78 20   Validate index 
d2a0: 65 6e 74 72 69 65 73 20 66 6f 72 20 74 68 65 20  entries for the 
d2b0: 63 75 72 72 65 6e 74 20 72 6f 77 20 2a 2f 0a 20  current row */. 
d2c0: 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30           for(j=0
d2d0: 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e  , pIdx=pTab->pIn
d2e0: 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d  dex; pIdx; pIdx=
d2f0: 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b  pIdx->pNext, j++
d300: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ){.            i
d310: 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33 2c 20 6a  nt jmp2, jmp3, j
d320: 6d 70 34 2c 20 6a 6d 70 35 3b 0a 20 20 20 20 20  mp4, jmp5;.     
d330: 20 20 20 20 20 20 20 69 6e 74 20 63 6b 55 6e 69         int ckUni
d340: 71 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  q = sqlite3VdbeM
d350: 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20  akeLabel(v);.   
d360: 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50 6b           if( pPk
d370: 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75  ==pIdx ) continu
d380: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  e;.            r
d390: 31 20 3d 20 73 71 6c 69 74 65 33 47 65 6e 65 72  1 = sqlite3Gener
d3a0: 61 74 65 49 6e 64 65 78 4b 65 79 28 70 50 61 72  ateIndexKey(pPar
d3b0: 73 65 2c 20 70 49 64 78 2c 20 69 44 61 74 61 43  se, pIdx, iDataC
d3c0: 75 72 2c 20 30 2c 20 30 2c 20 26 6a 6d 70 33 2c  ur, 0, 0, &jmp3,
d3d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3f0: 20 20 20 20 20 20 20 20 20 20 70 50 72 69 6f 72            pPrior
d400: 2c 20 72 31 29 3b 0a 20 20 20 20 20 20 20 20 20  , r1);.         
d410: 20 20 20 70 50 72 69 6f 72 20 3d 20 70 49 64 78     pPrior = pIdx
d420: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
d430: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d440: 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 38 2b  v, OP_AddImm, 8+
d450: 6a 2c 20 31 29 3b 2f 2a 20 69 6e 63 72 65 6d 65  j, 1);/* increme
d460: 6e 74 20 65 6e 74 72 79 20 63 6f 75 6e 74 20 2a  nt entry count *
d470: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  /.            /*
d480: 20 56 65 72 69 66 79 20 74 68 61 74 20 61 6e 20   Verify that an 
d490: 69 6e 64 65 78 20 65 6e 74 72 79 20 65 78 69 73  index entry exis
d4a0: 74 73 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  ts for the curre
d4b0: 6e 74 20 74 61 62 6c 65 20 72 6f 77 20 2a 2f 0a  nt table row */.
d4c0: 20 20 20 20 20 20 20 20 20 20 20 20 6a 6d 70 32              jmp2
d4d0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
d4e0: 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f  dOp4Int(v, OP_Fo
d4f0: 75 6e 64 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20  und, iIdxCur+j, 
d500: 63 6b 55 6e 69 71 2c 20 72 31 2c 0a 20 20 20 20  ckUniq, r1,.    
d510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d530: 20 20 20 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d      pIdx->nColum
d540: 6e 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  n); VdbeCoverage
d550: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (v);.           
d560: 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64   sqlite3VdbeLoad
d570: 53 74 72 69 6e 67 28 76 2c 20 33 2c 20 22 72 6f  String(v, 3, "ro
d580: 77 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  w ");.          
d590: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d5a0: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74  Op3(v, OP_Concat
d5b0: 2c 20 37 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20  , 7, 3, 3);.    
d5c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d5d0: 64 62 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c  dbeLoadString(v,
d5e0: 20 34 2c 20 22 20 6d 69 73 73 69 6e 67 20 66 72   4, " missing fr
d5f0: 6f 6d 20 69 6e 64 65 78 20 22 29 3b 0a 20 20 20  om index ");.   
d600: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d610: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
d620: 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33  _Concat, 4, 3, 3
d630: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6a  );.            j
d640: 6d 70 35 20 3d 20 73 71 6c 69 74 65 33 56 64 62  mp5 = sqlite3Vdb
d650: 65 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 34  eLoadString(v, 4
d660: 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 29 3b 0a  , pIdx->zName);.
d670: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
d680: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
d690: 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33   OP_Concat, 4, 3
d6a0: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 3);.          
d6b0: 20 20 6a 6d 70 34 20 3d 20 69 6e 74 65 67 72 69    jmp4 = integri
d6c0: 74 79 43 68 65 63 6b 52 65 73 75 6c 74 52 6f 77  tyCheckResultRow
d6d0: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (v);.           
d6e0: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
d6f0: 48 65 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20  Here(v, jmp2);. 
d700: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
d710: 72 20 55 4e 49 51 55 45 20 69 6e 64 65 78 65 73  r UNIQUE indexes
d720: 2c 20 76 65 72 69 66 79 20 74 68 61 74 20 6f 6e  , verify that on
d730: 6c 79 20 6f 6e 65 20 65 6e 74 72 79 20 65 78 69  ly one entry exi
d740: 73 74 73 20 77 69 74 68 20 74 68 65 0a 20 20 20  sts with the.   
d750: 20 20 20 20 20 20 20 20 20 2a 2a 20 63 75 72 72           ** curr
d760: 65 6e 74 20 6b 65 79 2e 20 20 54 68 65 20 65 6e  ent key.  The en
d770: 74 72 79 20 69 73 20 75 6e 69 71 75 65 20 69 66  try is unique if
d780: 20 28 31 29 20 61 6e 79 20 63 6f 6c 75 6d 6e 20   (1) any column 
d790: 69 73 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20  is NULL.        
d7a0: 20 20 20 20 2a 2a 20 6f 72 20 28 32 29 20 74 68      ** or (2) th
d7b0: 65 20 6e 65 78 74 20 65 6e 74 72 79 20 68 61 73  e next entry has
d7c0: 20 61 20 64 69 66 66 65 72 65 6e 74 20 6b 65 79   a different key
d7d0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
d7e0: 69 66 28 20 49 73 55 6e 69 71 75 65 49 6e 64 65  if( IsUniqueInde
d7f0: 78 28 70 49 64 78 29 20 29 7b 0a 20 20 20 20 20  x(pIdx) ){.     
d800: 20 20 20 20 20 20 20 20 20 69 6e 74 20 75 6e 69           int uni
d810: 71 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56 64 62  qOk = sqlite3Vdb
d820: 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20  eMakeLabel(v);. 
d830: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
d840: 20 6a 6d 70 36 3b 0a 20 20 20 20 20 20 20 20 20   jmp6;.         
d850: 20 20 20 20 20 69 6e 74 20 6b 6b 3b 0a 20 20 20       int kk;.   
d860: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b             for(k
d870: 6b 3d 30 3b 20 6b 6b 3c 70 49 64 78 2d 3e 6e 4b  k=0; kk<pIdx->nK
d880: 65 79 43 6f 6c 3b 20 6b 6b 2b 2b 29 7b 0a 20 20  eyCol; kk++){.  
d890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
d8a0: 74 20 69 43 6f 6c 20 3d 20 70 49 64 78 2d 3e 61  t iCol = pIdx->a
d8b0: 69 43 6f 6c 75 6d 6e 5b 6b 6b 5d 3b 0a 20 20 20  iColumn[kk];.   
d8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
d8d0: 65 72 74 28 20 69 43 6f 6c 21 3d 58 4e 5f 52 4f  ert( iCol!=XN_RO
d8e0: 57 49 44 20 26 26 20 69 43 6f 6c 3c 70 54 61 62  WID && iCol<pTab
d8f0: 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20  ->nCol );.      
d900: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69 43            if( iC
d910: 6f 6c 3e 3d 30 20 26 26 20 70 54 61 62 2d 3e 61  ol>=0 && pTab->a
d920: 43 6f 6c 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e 75 6c  Col[iCol].notNul
d930: 6c 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  l ) continue;.  
d940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
d950: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d960: 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 31  v, OP_IsNull, r1
d970: 2b 6b 6b 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20  +kk, uniqOk);.  
d980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 64                Vd
d990: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
d9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
d9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6a 6d 70               jmp
d9c0: 36 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  6 = sqlite3VdbeA
d9d0: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 4e 65 78 74  ddOp1(v, OP_Next
d9e0: 2c 20 69 49 64 78 43 75 72 2b 6a 29 3b 20 56 64  , iIdxCur+j); Vd
d9f0: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
da00: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
da10: 69 74 65 33 56 64 62 65 47 6f 74 6f 28 76 2c 20  ite3VdbeGoto(v, 
da20: 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20  uniqOk);.       
da30: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
da40: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d  beJumpHere(v, jm
da50: 70 36 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  p6);.           
da60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
da70: 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 49 64  dOp4Int(v, OP_Id
da80: 78 47 54 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20  xGT, iIdxCur+j, 
da90: 75 6e 69 71 4f 6b 2c 20 72 31 2c 0a 20 20 20 20  uniqOk, r1,.    
daa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
dac0: 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 20 56  Idx->nKeyCol); V
dad0: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
dae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
daf0: 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72  lite3VdbeLoadStr
db00: 69 6e 67 28 76 2c 20 33 2c 20 22 6e 6f 6e 2d 75  ing(v, 3, "non-u
db10: 6e 69 71 75 65 20 65 6e 74 72 79 20 69 6e 20 69  nique entry in i
db20: 6e 64 65 78 20 22 29 3b 0a 20 20 20 20 20 20 20  ndex ");.       
db30: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
db40: 62 65 47 6f 74 6f 28 76 2c 20 6a 6d 70 35 29 3b  beGoto(v, jmp5);
db50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
db60: 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c 76  qlite3VdbeResolv
db70: 65 4c 61 62 65 6c 28 76 2c 20 75 6e 69 71 4f 6b  eLabel(v, uniqOk
db80: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  );.            }
db90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
dba0: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
dbb0: 28 76 2c 20 6a 6d 70 34 29 3b 0a 20 20 20 20 20  (v, jmp4);.     
dbc0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65         sqlite3Re
dbd0: 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65  solvePartIdxLabe
dbe0: 6c 28 70 50 61 72 73 65 2c 20 6a 6d 70 33 29 3b  l(pParse, jmp3);
dbf0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
dc00: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73       }.        s
dc10: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
dc20: 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 69 44 61  (v, OP_Next, iDa
dc30: 74 61 43 75 72 2c 20 6c 6f 6f 70 54 6f 70 29 3b  taCur, loopTop);
dc40: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
dc50: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
dc60: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
dc70: 20 6c 6f 6f 70 54 6f 70 2d 31 29 3b 0a 23 69 66   loopTop-1);.#if
dc80: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
dc90: 5f 42 54 52 45 45 43 4f 55 4e 54 0a 20 20 20 20  _BTREECOUNT.    
dca0: 20 20 20 20 69 66 28 20 21 69 73 51 75 69 63 6b      if( !isQuick
dcb0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
dcc0: 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72  lite3VdbeLoadStr
dcd0: 69 6e 67 28 76 2c 20 32 2c 20 22 77 72 6f 6e 67  ing(v, 2, "wrong
dce0: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
dcf0: 20 69 6e 64 65 78 20 22 29 3b 0a 20 20 20 20 20   index ");.     
dd00: 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49       for(j=0, pI
dd10: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
dd20: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
dd30: 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20  ->pNext, j++){. 
dd40: 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70             if( p
dd50: 50 6b 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74 69  Pk==pIdx ) conti
dd60: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20  nue;.           
dd70: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
dd80: 70 32 28 76 2c 20 4f 50 5f 43 6f 75 6e 74 2c 20  p2(v, OP_Count, 
dd90: 69 49 64 78 43 75 72 2b 6a 2c 20 33 29 3b 0a 20  iIdxCur+j, 3);. 
dda0: 20 20 20 20 20 20 20 20 20 20 20 61 64 64 72 20             addr 
ddb0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
ddc0: 4f 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20 38 2b  Op3(v, OP_Eq, 8+
ddd0: 6a 2c 20 30 2c 20 33 29 3b 20 56 64 62 65 43 6f  j, 0, 3); VdbeCo
dde0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
ddf0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
de00: 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20 53 51  beChangeP5(v, SQ
de10: 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 29 3b 0a 20  LITE_NOTNULL);. 
de20: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
de30: 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67  e3VdbeLoadString
de40: 28 76 2c 20 34 2c 20 70 49 64 78 2d 3e 7a 4e 61  (v, 4, pIdx->zNa
de50: 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  me);.           
de60: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
de70: 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
de80: 20 34 2c 20 32 2c 20 33 29 3b 0a 20 20 20 20 20   4, 2, 3);.     
de90: 20 20 20 20 20 20 20 69 6e 74 65 67 72 69 74 79         integrity
dea0: 43 68 65 63 6b 52 65 73 75 6c 74 52 6f 77 28 76  CheckResultRow(v
deb0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
dec0: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
ded0: 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 20  re(v, addr);.   
dee0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
def0: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
df00: 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f  ITE_OMIT_BTREECO
df10: 55 4e 54 20 2a 2f 0a 20 20 20 20 20 20 7d 20 0a  UNT */.      } .
df20: 20 20 20 20 7d 0a 20 20 20 20 7b 0a 20 20 20 20      }.    {.    
df30: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69    static const i
df40: 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46  nt iLn = VDBE_OF
df50: 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a  FSET_LINENO(2);.
df60: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
df70: 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 65 6e  st VdbeOpList en
df80: 64 43 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  dCode[] = {.    
df90: 20 20 20 20 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c      { OP_AddImm,
dfa0: 20 20 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20        1, 0,     
dfb0: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a     0},    /* 0 *
dfc0: 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49  /.        { OP_I
dfd0: 66 4e 6f 74 5a 65 72 6f 2c 20 20 20 31 2c 20 34  fNotZero,   1, 4
dfe0: 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20  ,        0},    
dff0: 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 1 */.        
e000: 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20  { OP_String8,   
e010: 20 20 30 2c 20 33 2c 20 20 20 20 20 20 20 20 30    0, 3,        0
e020: 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20  },    /* 2 */.  
e030: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c        { OP_Resul
e040: 74 52 6f 77 2c 20 20 20 33 2c 20 31 2c 20 20 20  tRow,   3, 1,   
e050: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33       0},    /* 3
e060: 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50   */.        { OP
e070: 5f 48 61 6c 74 2c 20 20 20 20 20 20 20 20 30 2c  _Halt,        0,
e080: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20   0,        0},  
e090: 20 20 2f 2a 20 34 20 2a 2f 0a 20 20 20 20 20 20    /* 4 */.      
e0a0: 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20    { OP_String8, 
e0b0: 20 20 20 20 30 2c 20 33 2c 20 20 20 20 20 20 20      0, 3,       
e0c0: 20 30 7d 2c 20 20 20 20 2f 2a 20 35 20 2a 2f 0a   0},    /* 5 */.
e0d0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 47 6f 74          { OP_Got
e0e0: 6f 2c 20 20 20 20 20 20 20 20 30 2c 20 33 2c 20  o,        0, 3, 
e0f0: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
e100: 20 36 20 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20   6 */.      };. 
e110: 20 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70       VdbeOp *aOp
e120: 3b 0a 0a 20 20 20 20 20 20 61 4f 70 20 3d 20 73  ;..      aOp = s
e130: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
e140: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
e150: 28 65 6e 64 43 6f 64 65 29 2c 20 65 6e 64 43 6f  (endCode), endCo
e160: 64 65 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20 20  de, iLn);.      
e170: 69 66 28 20 61 4f 70 20 29 7b 0a 20 20 20 20 20  if( aOp ){.     
e180: 20 20 20 61 4f 70 5b 30 5d 2e 70 32 20 3d 20 31     aOp[0].p2 = 1
e190: 2d 6d 78 45 72 72 3b 0a 20 20 20 20 20 20 20 20  -mxErr;.        
e1a0: 61 4f 70 5b 32 5d 2e 70 34 74 79 70 65 20 3d 20  aOp[2].p4type = 
e1b0: 50 34 5f 53 54 41 54 49 43 3b 0a 20 20 20 20 20  P4_STATIC;.     
e1c0: 20 20 20 61 4f 70 5b 32 5d 2e 70 34 2e 7a 20 3d     aOp[2].p4.z =
e1d0: 20 22 6f 6b 22 3b 0a 20 20 20 20 20 20 20 20 61   "ok";.        a
e1e0: 4f 70 5b 35 5d 2e 70 34 74 79 70 65 20 3d 20 50  Op[5].p4type = P
e1f0: 34 5f 53 54 41 54 49 43 3b 0a 20 20 20 20 20 20  4_STATIC;.      
e200: 20 20 61 4f 70 5b 35 5d 2e 70 34 2e 7a 20 3d 20    aOp[5].p4.z = 
e210: 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 45 72  (char*)sqlite3Er
e220: 72 53 74 72 28 53 51 4c 49 54 45 5f 43 4f 52 52  rStr(SQLITE_CORR
e230: 55 50 54 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  UPT);.      }.  
e240: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
e250: 68 61 6e 67 65 50 33 28 76 2c 20 30 2c 20 73 71  hangeP3(v, 0, sq
e260: 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74  lite3VdbeCurrent
e270: 41 64 64 72 28 76 29 2d 32 29 3b 0a 20 20 20 20  Addr(v)-2);.    
e280: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  }.  }.  break;.#
e290: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
e2a0: 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
e2b0: 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  HECK */..#ifndef
e2c0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
e2d0: 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  16.  /*.  **   P
e2e0: 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 0a 20  RAGMA encoding. 
e2f0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63   **   PRAGMA enc
e300: 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d 38 22 7c  oding = "utf-8"|
e310: 22 75 74 66 2d 31 36 22 7c 22 75 74 66 2d 31 36  "utf-16"|"utf-16
e320: 6c 65 22 7c 22 75 74 66 2d 31 36 62 65 22 0a 20  le"|"utf-16be". 
e330: 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69 74 73 20   **.  ** In its 
e340: 66 69 72 73 74 20 66 6f 72 6d 2c 20 74 68 69 73  first form, this
e350: 20 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73 20   pragma returns 
e360: 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  the encoding of 
e370: 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a 20 64 61  the main.  ** da
e380: 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 64  tabase. If the d
e390: 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20 69  atabase is not i
e3a0: 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69 74 20 69  nitialized, it i
e3b0: 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 6e 6f  s initialized no
e3c0: 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  w..  **.  ** The
e3d0: 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20   second form of 
e3e0: 74 68 69 73 20 70 72 61 67 6d 61 20 69 73 20 61  this pragma is a
e3f0: 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 6d 61   no-op if the ma
e400: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
e410: 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74 20 61 6c  .  ** has not al
e420: 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69  ready been initi
e430: 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68 69 73 20  alized. In this 
e440: 63 61 73 65 20 69 74 20 73 65 74 73 20 74 68 65  case it sets the
e450: 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20 65 6e   default.  ** en
e460: 63 6f 64 69 6e 67 20 74 68 61 74 20 77 69 6c 6c  coding that will
e470: 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
e480: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
e490: 69 6c 65 20 69 66 20 61 20 6e 65 77 20 66 69 6c  ile if a new fil
e4a0: 65 0a 20 20 2a 2a 20 69 73 20 63 72 65 61 74 65  e.  ** is create
e4b0: 64 2e 20 49 66 20 61 6e 20 65 78 69 73 74 69 6e  d. If an existin
e4c0: 67 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  g main database 
e4d0: 66 69 6c 65 20 69 73 20 6f 70 65 6e 65 64 2c 20  file is opened, 
e4e0: 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 64 65  then the.  ** de
e4f0: 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64  fault text encod
e500: 69 6e 67 20 66 6f 72 20 74 68 65 20 65 78 69 73  ing for the exis
e510: 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 69 73  ting database is
e520: 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a   used..  ** .  *
e530: 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73 20 6e  * In all cases n
e540: 65 77 20 64 61 74 61 62 61 73 65 73 20 63 72 65  ew databases cre
e550: 61 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 41  ated using the A
e560: 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64 20 61 72  TTACH command ar
e570: 65 0a 20 20 2a 2a 20 63 72 65 61 74 65 64 20 74  e.  ** created t
e580: 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 20 64  o use the same d
e590: 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f  efault text enco
e5a0: 64 69 6e 67 20 61 73 20 74 68 65 20 6d 61 69 6e  ding as the main
e5b0: 20 64 61 74 61 62 61 73 65 2e 20 49 66 0a 20 20   database. If.  
e5c0: 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
e5d0: 62 61 73 65 20 68 61 73 20 6e 6f 74 20 62 65 65  base has not bee
e5e0: 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 6e  n initialized an
e5f0: 64 2f 6f 72 20 63 72 65 61 74 65 64 20 77 68 65  d/or created whe
e600: 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a 20 69 73  n ATTACH.  ** is
e610: 20 65 78 65 63 75 74 65 64 2c 20 74 68 69 73 20   executed, this 
e620: 69 73 20 64 6f 6e 65 20 62 65 66 6f 72 65 20 74  is done before t
e630: 68 65 20 41 54 54 41 43 48 20 6f 70 65 72 61 74  he ATTACH operat
e640: 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  ion..  **.  ** I
e650: 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  n the second for
e660: 6d 20 74 68 69 73 20 70 72 61 67 6d 61 20 73 65  m this pragma se
e670: 74 73 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f  ts the text enco
e680: 64 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64 20  ding to be used 
e690: 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64 61 74 61  in.  ** new data
e6a0: 62 61 73 65 20 66 69 6c 65 73 20 63 72 65 61 74  base files creat
e6b0: 65 64 20 75 73 69 6e 67 20 74 68 69 73 20 64 61  ed using this da
e6c0: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 49  tabase handle. I
e6d0: 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75  t is only.  ** u
e6e0: 73 65 66 75 6c 20 69 66 20 69 6e 76 6f 6b 65 64  seful if invoked
e6f0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74   immediately aft
e700: 65 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  er the main data
e710: 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20 20 63 61  base i.  */.  ca
e720: 73 65 20 50 72 61 67 54 79 70 5f 45 4e 43 4f 44  se PragTyp_ENCOD
e730: 49 4e 47 3a 20 7b 0a 20 20 20 20 73 74 61 74 69  ING: {.    stati
e740: 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45  c const struct E
e750: 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20 63  ncName {.      c
e760: 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20  har *zName;.    
e770: 20 20 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20    u8 enc;.    } 
e780: 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20  encnames[] = {. 
e790: 20 20 20 20 20 7b 20 22 55 54 46 38 22 2c 20 20       { "UTF8",  
e7a0: 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20     SQLITE_UTF8  
e7b0: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
e7c0: 20 22 55 54 46 2d 38 22 2c 20 20 20 20 53 51 4c   "UTF-8",    SQL
e7d0: 49 54 45 5f 55 54 46 38 20 20 20 20 20 20 20 20  ITE_UTF8        
e7e0: 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65  },  /* Must be e
e7f0: 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20  lement [1] */.  
e800: 20 20 20 20 7b 20 22 55 54 46 2d 31 36 6c 65 22      { "UTF-16le"
e810: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  , SQLITE_UTF16LE
e820: 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74       },  /* Must
e830: 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 32 5d 20   be element [2] 
e840: 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d  */.      { "UTF-
e850: 31 36 62 65 22 2c 20 53 51 4c 49 54 45 5f 55 54  16be", SQLITE_UT
e860: 46 31 36 42 45 20 20 20 20 20 7d 2c 20 20 2f 2a  F16BE     },  /*
e870: 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74   Must be element
e880: 20 5b 33 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20   [3] */.      { 
e890: 22 55 54 46 31 36 6c 65 22 2c 20 20 53 51 4c 49  "UTF16le",  SQLI
e8a0: 54 45 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d  TE_UTF16LE     }
e8b0: 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36  ,.      { "UTF16
e8c0: 62 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46  be",  SQLITE_UTF
e8d0: 31 36 42 45 20 20 20 20 20 7d 2c 0a 20 20 20 20  16BE     },.    
e8e0: 20 20 7b 20 22 55 54 46 2d 31 36 22 2c 20 20 20    { "UTF-16",   
e8f0: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0               
e900: 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f     }, /* SQLITE_
e910: 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20  UTF16NATIVE */. 
e920: 20 20 20 20 20 7b 20 22 55 54 46 31 36 22 2c 20       { "UTF16", 
e930: 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20     0            
e940: 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49        }, /* SQLI
e950: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a  TE_UTF16NATIVE *
e960: 2f 0a 20 20 20 20 20 20 7b 20 30 2c 20 30 20 7d  /.      { 0, 0 }
e970: 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63 6f 6e 73  .    };.    cons
e980: 74 20 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65  t struct EncName
e990: 20 2a 70 45 6e 63 3b 0a 20 20 20 20 69 66 28 20   *pEnc;.    if( 
e9a0: 21 7a 52 69 67 68 74 20 29 7b 20 20 20 20 2f 2a  !zRight ){    /*
e9b0: 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e   "PRAGMA encodin
e9c0: 67 22 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  g" */.      if( 
e9d0: 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
e9e0: 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f  a(pParse) ) goto
e9f0: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20   pragma_out;.   
ea00: 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61     assert( encna
ea10: 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 38 5d  mes[SQLITE_UTF8]
ea20: 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  .enc==SQLITE_UTF
ea30: 38 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  8 );.      asser
ea40: 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49  t( encnames[SQLI
ea50: 54 45 5f 55 54 46 31 36 4c 45 5d 2e 65 6e 63 3d  TE_UTF16LE].enc=
ea60: 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20  =SQLITE_UTF16LE 
ea70: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
ea80: 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45   encnames[SQLITE
ea90: 5f 55 54 46 31 36 42 45 5d 2e 65 6e 63 3d 3d 53  _UTF16BE].enc==S
eaa0: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b  QLITE_UTF16BE );
eab0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
eac0: 67 6c 65 54 65 78 74 28 76 2c 20 65 6e 63 6e 61  gleText(v, encna
ead0: 6d 65 73 5b 45 4e 43 28 70 50 61 72 73 65 2d 3e  mes[ENC(pParse->
eae0: 64 62 29 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20  db)].zName);.   
eaf0: 20 7d 65 6c 73 65 7b 20 20 20 20 20 20 20 20 20   }else{         
eb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
eb10: 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69  * "PRAGMA encodi
eb20: 6e 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20  ng = XXX" */.   
eb30: 20 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67     /* Only chang
eb40: 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 73  e the value of s
eb50: 71 6c 69 74 65 2e 65 6e 63 20 69 66 20 74 68 65  qlite.enc if the
eb60: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
eb70: 20 69 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a   is not.      **
eb80: 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 66   initialized. If
eb90: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
eba0: 73 65 20 65 78 69 73 74 73 2c 20 74 68 65 20 6e  se exists, the n
ebb0: 65 77 20 73 71 6c 69 74 65 2e 65 6e 63 20 76 61  ew sqlite.enc va
ebc0: 6c 75 65 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c  lue.      ** wil
ebd0: 6c 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e  l be overwritten
ebe0: 20 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61   when the schema
ebf0: 20 69 73 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e   is next loaded.
ec00: 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a   If it does not.
ec10: 20 20 20 20 20 20 2a 2a 20 61 6c 72 65 61 64 79        ** already
ec20: 20 65 78 69 73 74 73 2c 20 69 74 20 77 69 6c 6c   exists, it will
ec30: 20 62 65 20 63 72 65 61 74 65 64 20 74 6f 20 75   be created to u
ec40: 73 65 20 74 68 65 20 6e 65 77 20 65 6e 63 6f 64  se the new encod
ec50: 69 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20 20 20  ing value..     
ec60: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 0a 20   */.      if( . 
ec70: 20 20 20 20 20 20 20 21 28 44 62 48 61 73 50 72         !(DbHasPr
ec80: 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42  operty(db, 0, DB
ec90: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 29 20  _SchemaLoaded)) 
eca0: 7c 7c 20 0a 20 20 20 20 20 20 20 20 44 62 48 61  || .        DbHa
ecb0: 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c  sProperty(db, 0,
ecc0: 20 44 42 5f 45 6d 70 74 79 29 20 0a 20 20 20 20   DB_Empty) .    
ecd0: 20 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72    ){.        for
ece0: 28 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65 73 5b  (pEnc=&encnames[
ecf0: 30 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b  0]; pEnc->zName;
ed00: 20 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20 20 20   pEnc++){.      
ed10: 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74      if( 0==sqlit
ed20: 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74  e3StrICmp(zRight
ed30: 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29  , pEnc->zName) )
ed40: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 43  {.            SC
ed50: 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 3d 20 45  HEMA_ENC(db) = E
ed60: 4e 43 28 64 62 29 20 3d 0a 20 20 20 20 20 20 20  NC(db) =.       
ed70: 20 20 20 20 20 20 20 20 20 70 45 6e 63 2d 3e 65           pEnc->e
ed80: 6e 63 20 3f 20 70 45 6e 63 2d 3e 65 6e 63 20 3a  nc ? pEnc->enc :
ed90: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
eda0: 49 56 45 3b 0a 20 20 20 20 20 20 20 20 20 20 20  IVE;.           
edb0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
edc0: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
edd0: 20 20 20 20 20 20 69 66 28 20 21 70 45 6e 63 2d        if( !pEnc-
ede0: 3e 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20 20  >zName ){.      
edf0: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
ee00: 4d 73 67 28 70 50 61 72 73 65 2c 20 22 75 6e 73  Msg(pParse, "uns
ee10: 75 70 70 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e  upported encodin
ee20: 67 3a 20 25 73 22 2c 20 7a 52 69 67 68 74 29 3b  g: %s", zRight);
ee30: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
ee40: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
ee50: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
ee60: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
ee70: 36 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  6 */..#ifndef SQ
ee80: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
ee90: 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53  _VERSION_PRAGMAS
eea0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
eeb0: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 73 63 68  GMA [schema.]sch
eec0: 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a  ema_version.  **
eed0: 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d     PRAGMA [schem
eee0: 61 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  a.]schema_versio
eef0: 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20  n = <integer>.  
ef00: 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  **.  **   PRAGMA
ef10: 20 5b 73 63 68 65 6d 61 2e 5d 75 73 65 72 5f 76   [schema.]user_v
ef20: 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52  ersion.  **   PR
ef30: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 75 73  AGMA [schema.]us
ef40: 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e  er_version = <in
ef50: 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a  teger>.  **.  **
ef60: 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d     PRAGMA [schem
ef70: 61 2e 5d 66 72 65 65 6c 69 73 74 5f 63 6f 75 6e  a.]freelist_coun
ef80: 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52  t.  **.  **   PR
ef90: 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 64 61  AGMA [schema.]da
efa0: 74 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 0a  ta_version.  **.
efb0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73    **   PRAGMA [s
efc0: 63 68 65 6d 61 2e 5d 61 70 70 6c 69 63 61 74 69  chema.]applicati
efd0: 6f 6e 5f 69 64 0a 20 20 2a 2a 20 20 20 50 52 41  on_id.  **   PRA
efe0: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 70 70  GMA [schema.]app
eff0: 6c 69 63 61 74 69 6f 6e 5f 69 64 20 3d 20 3c 69  lication_id = <i
f000: 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a  nteger>.  **.  *
f010: 2a 20 54 68 65 20 70 72 61 67 6d 61 27 73 20 73  * The pragma's s
f020: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 61 6e  chema_version an
f030: 64 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 61  d user_version a
f040: 72 65 20 75 73 65 64 20 74 6f 20 73 65 74 20 6f  re used to set o
f050: 72 20 67 65 74 0a 20 20 2a 2a 20 74 68 65 20 76  r get.  ** the v
f060: 61 6c 75 65 20 6f 66 20 74 68 65 20 73 63 68 65  alue of the sche
f070: 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 75  ma-version and u
f080: 73 65 72 2d 76 65 72 73 69 6f 6e 2c 20 72 65 73  ser-version, res
f090: 70 65 63 74 69 76 65 6c 79 2e 20 42 6f 74 68 0a  pectively. Both.
f0a0: 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d    ** the schema-
f0b0: 76 65 72 73 69 6f 6e 20 61 6e 64 20 74 68 65 20  version and the 
f0c0: 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 61 72 65  user-version are
f0d0: 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69   32-bit signed i
f0e0: 6e 74 65 67 65 72 73 0a 20 20 2a 2a 20 73 74 6f  ntegers.  ** sto
f0f0: 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  red in the datab
f100: 61 73 65 20 68 65 61 64 65 72 2e 0a 20 20 2a 2a  ase header..  **
f110: 0a 20 20 2a 2a 20 54 68 65 20 73 63 68 65 6d 61  .  ** The schema
f120: 2d 63 6f 6f 6b 69 65 20 69 73 20 75 73 75 61 6c  -cookie is usual
f130: 6c 79 20 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c 61  ly only manipula
f140: 74 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62  ted internally b
f150: 79 20 53 51 4c 69 74 65 2e 20 49 74 0a 20 20 2a  y SQLite. It.  *
f160: 2a 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  * is incremented
f170: 20 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e 65   by SQLite whene
f180: 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
f190: 20 73 63 68 65 6d 61 20 69 73 20 6d 6f 64 69 66   schema is modif
f1a0: 69 65 64 20 28 62 79 0a 20 20 2a 2a 20 63 72 65  ied (by.  ** cre
f1b0: 61 74 69 6e 67 20 6f 72 20 64 72 6f 70 70 69 6e  ating or droppin
f1c0: 67 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  g a table or ind
f1d0: 65 78 29 2e 20 54 68 65 20 73 63 68 65 6d 61 20  ex). The schema 
f1e0: 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20  version is used 
f1f0: 62 79 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 65  by.  ** SQLite e
f200: 61 63 68 20 74 69 6d 65 20 61 20 71 75 65 72 79  ach time a query
f210: 20 69 73 20 65 78 65 63 75 74 65 64 20 74 6f 20   is executed to 
f220: 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20  ensure that the 
f230: 69 6e 74 65 72 6e 61 6c 20 63 61 63 68 65 0a 20  internal cache. 
f240: 20 2a 2a 20 6f 66 20 74 68 65 20 73 63 68 65 6d   ** of the schem
f250: 61 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70  a used when comp
f260: 69 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75  iling the SQL qu
f270: 65 72 79 20 6d 61 74 63 68 65 73 20 74 68 65 20  ery matches the 
f280: 73 63 68 65 6d 61 20 6f 66 0a 20 20 2a 2a 20 74  schema of.  ** t
f290: 68 65 20 64 61 74 61 62 61 73 65 20 61 67 61 69  he database agai
f2a0: 6e 73 74 20 77 68 69 63 68 20 74 68 65 20 63 6f  nst which the co
f2b0: 6d 70 69 6c 65 64 20 71 75 65 72 79 20 69 73 20  mpiled query is 
f2c0: 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65  actually execute
f2d0: 64 2e 0a 20 20 2a 2a 20 53 75 62 76 65 72 74 69  d..  ** Subverti
f2e0: 6e 67 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73  ng this mechanis
f2f0: 6d 20 62 79 20 75 73 69 6e 67 20 22 50 52 41 47  m by using "PRAG
f300: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
f310: 6e 22 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20 2a  n" to modify.  *
f320: 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72  * the schema-ver
f330: 73 69 6f 6e 20 69 73 20 70 6f 74 65 6e 74 69 61  sion is potentia
f340: 6c 6c 79 20 64 61 6e 67 65 72 6f 75 73 20 61 6e  lly dangerous an
f350: 64 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 70 72  d may lead to pr
f360: 6f 67 72 61 6d 0a 20 20 2a 2a 20 63 72 61 73 68  ogram.  ** crash
f370: 65 73 20 6f 72 20 64 61 74 61 62 61 73 65 20 63  es or database c
f380: 6f 72 72 75 70 74 69 6f 6e 2e 20 55 73 65 20 77  orruption. Use w
f390: 69 74 68 20 63 61 75 74 69 6f 6e 21 0a 20 20 2a  ith caution!.  *
f3a0: 2a 0a 20 20 2a 2a 20 54 68 65 20 75 73 65 72 2d  *.  ** The user-
f3b0: 76 65 72 73 69 6f 6e 20 69 73 20 6e 6f 74 20 75  version is not u
f3c0: 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62  sed internally b
f3d0: 79 20 53 51 4c 69 74 65 2e 20 49 74 20 6d 61 79  y SQLite. It may
f3e0: 20 62 65 20 75 73 65 64 20 62 79 0a 20 20 2a 2a   be used by.  **
f3f0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 66 6f   applications fo
f400: 72 20 61 6e 79 20 70 75 72 70 6f 73 65 2e 0a 20  r any purpose.. 
f410: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
f420: 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 3a  yp_HEADER_VALUE:
f430: 20 7b 0a 20 20 20 20 69 6e 74 20 69 43 6f 6f 6b   {.    int iCook
f440: 69 65 20 3d 20 70 50 72 61 67 6d 61 2d 3e 69 41  ie = pPragma->iA
f450: 72 67 3b 20 20 2f 2a 20 57 68 69 63 68 20 63 6f  rg;  /* Which co
f460: 6f 6b 69 65 20 74 6f 20 72 65 61 64 20 6f 72 20  okie to read or 
f470: 77 72 69 74 65 20 2a 2f 0a 20 20 20 20 73 71 6c  write */.    sql
f480: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
f490: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 69  e(v, iDb);.    i
f4a0: 66 28 20 7a 52 69 67 68 74 20 26 26 20 28 70 50  f( zRight && (pP
f4b0: 72 61 67 6d 61 2d 3e 6d 50 72 61 67 46 6c 67 20  ragma->mPragFlg 
f4c0: 26 20 50 72 61 67 46 6c 67 5f 52 65 61 64 4f 6e  & PragFlg_ReadOn
f4d0: 6c 79 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ly)==0 ){.      
f4e0: 2f 2a 20 57 72 69 74 65 20 74 68 65 20 73 70 65  /* Write the spe
f4f0: 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61  cified cookie va
f500: 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61  lue */.      sta
f510: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
f520: 4c 69 73 74 20 73 65 74 43 6f 6f 6b 69 65 5b 5d  List setCookie[]
f530: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f   = {.        { O
f540: 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20  P_Transaction,  
f550: 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20    0,  1,  0},   
f560: 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20   /* 0 */.       
f570: 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c   { OP_SetCookie,
f580: 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d        0,  0,  0}
f590: 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20  ,    /* 1 */.   
f5a0: 20 20 20 7d 3b 0a 20 20 20 20 20 20 56 64 62 65     };.      Vdbe
f5b0: 4f 70 20 2a 61 4f 70 3b 0a 20 20 20 20 20 20 73  Op *aOp;.      s
f5c0: 71 6c 69 74 65 33 56 64 62 65 56 65 72 69 66 79  qlite3VdbeVerify
f5d0: 4e 6f 4d 61 6c 6c 6f 63 52 65 71 75 69 72 65 64  NoMallocRequired
f5e0: 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65  (v, ArraySize(se
f5f0: 74 43 6f 6f 6b 69 65 29 29 3b 0a 20 20 20 20 20  tCookie));.     
f600: 20 61 4f 70 20 3d 20 73 71 6c 69 74 65 33 56 64   aOp = sqlite3Vd
f610: 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
f620: 72 72 61 79 53 69 7a 65 28 73 65 74 43 6f 6f 6b  rraySize(setCook
f630: 69 65 29 2c 20 73 65 74 43 6f 6f 6b 69 65 2c 20  ie), setCookie, 
f640: 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 4f 4e  0);.      if( ON
f650: 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54  LY_IF_REALLOC_ST
f660: 52 45 53 53 28 61 4f 70 3d 3d 30 29 20 29 20 62  RESS(aOp==0) ) b
f670: 72 65 61 6b 3b 0a 20 20 20 20 20 20 61 4f 70 5b  reak;.      aOp[
f680: 30 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20  0].p1 = iDb;.   
f690: 20 20 20 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69     aOp[1].p1 = i
f6a0: 44 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d  Db;.      aOp[1]
f6b0: 2e 70 32 20 3d 20 69 43 6f 6f 6b 69 65 3b 0a 20  .p2 = iCookie;. 
f6c0: 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70 33 20 3d       aOp[1].p3 =
f6d0: 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
f6e0: 67 68 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ght);.    }else{
f6f0: 0a 20 20 20 20 20 20 2f 2a 20 52 65 61 64 20 74  .      /* Read t
f700: 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f  he specified coo
f710: 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20  kie value */.   
f720: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
f730: 56 64 62 65 4f 70 4c 69 73 74 20 72 65 61 64 43  VdbeOpList readC
f740: 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  ookie[] = {.    
f750: 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63      { OP_Transac
f760: 74 69 6f 6e 2c 20 20 20 20 20 30 2c 20 20 30 2c  tion,     0,  0,
f770: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f    0},    /* 0 */
f780: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65  .        { OP_Re
f790: 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30  adCookie,      0
f7a0: 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a  ,  1,  0},    /*
f7b0: 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   1 */.        { 
f7c0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20  OP_ResultRow,   
f7d0: 20 20 20 20 31 2c 20 20 31 2c 20 20 30 7d 0a 20      1,  1,  0}. 
f7e0: 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 56 64       };.      Vd
f7f0: 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20 20 20 20  beOp *aOp;.     
f800: 20 73 71 6c 69 74 65 33 56 64 62 65 56 65 72 69   sqlite3VdbeVeri
f810: 66 79 4e 6f 4d 61 6c 6c 6f 63 52 65 71 75 69 72  fyNoMallocRequir
f820: 65 64 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  ed(v, ArraySize(
f830: 72 65 61 64 43 6f 6f 6b 69 65 29 29 3b 0a 20 20  readCookie));.  
f840: 20 20 20 20 61 4f 70 20 3d 20 73 71 6c 69 74 65      aOp = sqlite
f850: 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76  3VdbeAddOpList(v
f860: 2c 20 41 72 72 61 79 53 69 7a 65 28 72 65 61 64  , ArraySize(read
f870: 43 6f 6f 6b 69 65 29 2c 72 65 61 64 43 6f 6f 6b  Cookie),readCook
f880: 69 65 2c 30 29 3b 0a 20 20 20 20 20 20 69 66 28  ie,0);.      if(
f890: 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43   ONLY_IF_REALLOC
f8a0: 5f 53 54 52 45 53 53 28 61 4f 70 3d 3d 30 29 20  _STRESS(aOp==0) 
f8b0: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 61  ) break;.      a
f8c0: 4f 70 5b 30 5d 2e 70 31 20 3d 20 69 44 62 3b 0a  Op[0].p1 = iDb;.
f8d0: 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70 31 20        aOp[1].p1 
f8e0: 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 61 4f 70  = iDb;.      aOp
f8f0: 5b 31 5d 2e 70 33 20 3d 20 69 43 6f 6f 6b 69 65  [1].p3 = iCookie
f900: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
f910: 64 62 65 52 65 75 73 61 62 6c 65 28 76 29 3b 0a  dbeReusable(v);.
f920: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
f930: 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
f940: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
f950: 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 20  VERSION_PRAGMAS 
f960: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
f970: 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f  TE_OMIT_COMPILEO
f980: 50 54 49 4f 4e 5f 44 49 41 47 53 0a 20 20 2f 2a  PTION_DIAGS.  /*
f990: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 63  .  **   PRAGMA c
f9a0: 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 0a 20  ompile_options. 
f9b0: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
f9c0: 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 61 6c 6c  the names of all
f9d0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
f9e0: 74 69 6f 6e 73 20 75 73 65 64 20 69 6e 20 74 68  tions used in th
f9f0: 69 73 20 62 75 69 6c 64 2c 0a 20 20 2a 2a 20 6f  is build,.  ** o
fa00: 6e 65 20 6f 70 74 69 6f 6e 20 70 65 72 20 72 6f  ne option per ro
fa10: 77 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  w..  */.  case P
fa20: 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45 5f 4f  ragTyp_COMPILE_O
fa30: 50 54 49 4f 4e 53 3a 20 7b 0a 20 20 20 20 69 6e  PTIONS: {.    in
fa40: 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e  t i = 0;.    con
fa50: 73 74 20 63 68 61 72 20 2a 7a 4f 70 74 3b 0a 20  st char *zOpt;. 
fa60: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
fa70: 3d 20 31 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  = 1;.    while( 
fa80: 28 7a 4f 70 74 20 3d 20 73 71 6c 69 74 65 33 5f  (zOpt = sqlite3_
fa90: 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
faa0: 74 28 69 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20  t(i++))!=0 ){.  
fab0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c      sqlite3VdbeL
fac0: 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 31 2c 20  oadString(v, 1, 
fad0: 7a 4f 70 74 29 3b 0a 20 20 20 20 20 20 73 71 6c  zOpt);.      sql
fae0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
faf0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
fb00: 31 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20  1, 1);.    }.   
fb10: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 75 73   sqlite3VdbeReus
fb20: 61 62 6c 65 28 76 29 3b 0a 20 20 7d 0a 20 20 62  able(v);.  }.  b
fb30: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
fb40: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
fb50: 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 20  ILEOPTION_DIAGS 
fb60: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
fb70: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 2f 2a  TE_OMIT_WAL.  /*
fb80: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
fb90: 73 63 68 65 6d 61 2e 5d 77 61 6c 5f 63 68 65 63  schema.]wal_chec
fba0: 6b 70 6f 69 6e 74 20 3d 20 70 61 73 73 69 76 65  kpoint = passive
fbb0: 7c 66 75 6c 6c 7c 72 65 73 74 61 72 74 7c 74 72  |full|restart|tr
fbc0: 75 6e 63 61 74 65 0a 20 20 2a 2a 0a 20 20 2a 2a  uncate.  **.  **
fbd0: 20 43 68 65 63 6b 70 6f 69 6e 74 20 74 68 65 20   Checkpoint the 
fbe0: 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20  database..  */. 
fbf0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 57 41   case PragTyp_WA
fc00: 4c 5f 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a  L_CHECKPOINT: {.
fc10: 20 20 20 20 69 6e 74 20 69 42 74 20 3d 20 28 70      int iBt = (p
fc20: 49 64 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c 49 54  Id2->z?iDb:SQLIT
fc30: 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 29 3b  E_MAX_ATTACHED);
fc40: 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d  .    int eMode =
fc50: 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
fc60: 4e 54 5f 50 41 53 53 49 56 45 3b 0a 20 20 20 20  NT_PASSIVE;.    
fc70: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
fc80: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
fc90: 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  trICmp(zRight, "
fca0: 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20  full")==0 ){.   
fcb0: 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c       eMode = SQL
fcc0: 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46  ITE_CHECKPOINT_F
fcd0: 55 4c 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ULL;.      }else
fce0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
fcf0: 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 72 65 73  Cmp(zRight, "res
fd00: 74 61 72 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20  tart")==0 ){.   
fd10: 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c       eMode = SQL
fd20: 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52  ITE_CHECKPOINT_R
fd30: 45 53 54 41 52 54 3b 0a 20 20 20 20 20 20 7d 65  ESTART;.      }e
fd40: 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53  lse if( sqlite3S
fd50: 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  trICmp(zRight, "
fd60: 74 72 75 6e 63 61 74 65 22 29 3d 3d 30 20 29 7b  truncate")==0 ){
fd70: 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  .        eMode =
fd80: 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
fd90: 4e 54 5f 54 52 55 4e 43 41 54 45 3b 0a 20 20 20  NT_TRUNCATE;.   
fda0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
fdb0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b  Parse->nMem = 3;
fdc0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
fdd0: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 68 65  AddOp3(v, OP_Che
fde0: 63 6b 70 6f 69 6e 74 2c 20 69 42 74 2c 20 65 4d  ckpoint, iBt, eM
fdf0: 6f 64 65 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  ode, 1);.    sql
fe00: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
fe10: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
fe20: 31 2c 20 33 29 3b 0a 20 20 7d 0a 20 20 62 72 65  1, 3);.  }.  bre
fe30: 61 6b 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  ak;..  /*.  **  
fe40: 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f   PRAGMA wal_auto
fe50: 63 68 65 63 6b 70 6f 69 6e 74 0a 20 20 2a 2a 20  checkpoint.  ** 
fe60: 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74    PRAGMA wal_aut
fe70: 6f 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 4e 0a  ocheckpoint = N.
fe80: 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67    **.  ** Config
fe90: 75 72 65 20 61 20 64 61 74 61 62 61 73 65 20 63  ure a database c
fea0: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 75 74  onnection to aut
feb0: 6f 6d 61 74 69 63 61 6c 6c 79 20 63 68 65 63 6b  omatically check
fec0: 70 6f 69 6e 74 20 61 20 64 61 74 61 62 61 73 65  point a database
fed0: 0a 20 20 2a 2a 20 61 66 74 65 72 20 61 63 63 75  .  ** after accu
fee0: 6d 75 6c 61 74 69 6e 67 20 4e 20 66 72 61 6d 65  mulating N frame
fef0: 73 20 69 6e 20 74 68 65 20 6c 6f 67 2e 20 4f 72  s in the log. Or
ff00: 20 71 75 65 72 79 20 66 6f 72 20 74 68 65 20 63   query for the c
ff10: 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 20 20 2a  urrent value.  *
ff20: 2a 20 6f 66 20 4e 2e 0a 20 20 2a 2f 0a 20 20 63  * of N..  */.  c
ff30: 61 73 65 20 50 72 61 67 54 79 70 5f 57 41 4c 5f  ase PragTyp_WAL_
ff40: 41 55 54 4f 43 48 45 43 4b 50 4f 49 4e 54 3a 20  AUTOCHECKPOINT: 
ff50: 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
ff60: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
ff70: 33 5f 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70  3_wal_autocheckp
ff80: 6f 69 6e 74 28 64 62 2c 20 73 71 6c 69 74 65 33  oint(db, sqlite3
ff90: 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20  Atoi(zRight));. 
ffa0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53     }.    returnS
ffb0: 69 6e 67 6c 65 49 6e 74 28 76 2c 20 0a 20 20 20  ingleInt(v, .   
ffc0: 20 20 20 20 64 62 2d 3e 78 57 61 6c 43 61 6c 6c      db->xWalCall
ffd0: 62 61 63 6b 3d 3d 73 71 6c 69 74 65 33 57 61 6c  back==sqlite3Wal
ffe0: 44 65 66 61 75 6c 74 48 6f 6f 6b 20 3f 20 0a 20  DefaultHook ? . 
fff0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
10000 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 64 62 2d 3e  _PTR_TO_INT(db->
10010 70 57 61 6c 41 72 67 29 20 3a 20 30 29 3b 0a 20  pWalArg) : 0);. 
10020 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
10030 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50  if..  /*.  **  P
10040 52 41 47 4d 41 20 73 68 72 69 6e 6b 5f 6d 65 6d  RAGMA shrink_mem
10050 6f 72 79 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d  ory.  **.  ** IM
10060 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
10070 20 52 2d 32 33 34 34 35 2d 34 36 31 30 39 20 54   R-23445-46109 T
10080 68 69 73 20 70 72 61 67 6d 61 20 63 61 75 73 65  his pragma cause
10090 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20  s the database. 
100a0 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f   ** connection o
100b0 6e 20 77 68 69 63 68 20 69 74 20 69 73 20 69 6e  n which it is in
100c0 76 6f 6b 65 64 20 74 6f 20 66 72 65 65 20 75 70  voked to free up
100d0 20 61 73 20 6d 75 63 68 20 6d 65 6d 6f 72 79 20   as much memory 
100e0 61 73 20 69 74 0a 20 20 2a 2a 20 63 61 6e 2c 20  as it.  ** can, 
100f0 62 79 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74  by calling sqlit
10100 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65  e3_db_release_me
10110 6d 6f 72 79 28 29 2e 0a 20 20 2a 2f 0a 20 20 63  mory()..  */.  c
10120 61 73 65 20 50 72 61 67 54 79 70 5f 53 48 52 49  ase PragTyp_SHRI
10130 4e 4b 5f 4d 45 4d 4f 52 59 3a 20 7b 0a 20 20 20  NK_MEMORY: {.   
10140 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65   sqlite3_db_rele
10150 61 73 65 5f 6d 65 6d 6f 72 79 28 64 62 29 3b 0a  ase_memory(db);.
10160 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
10170 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
10180 41 20 6f 70 74 69 6d 69 7a 65 0a 20 20 2a 2a 20  A optimize.  ** 
10190 20 50 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65   PRAGMA optimize
101a0 28 4d 41 53 4b 29 0a 20 20 2a 2a 20 20 50 52 41  (MASK).  **  PRA
101b0 47 4d 41 20 73 63 68 65 6d 61 2e 6f 70 74 69 6d  GMA schema.optim
101c0 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ize.  **  PRAGMA
101d0 20 73 63 68 65 6d 61 2e 6f 70 74 69 6d 69 7a 65   schema.optimize
101e0 28 4d 41 53 4b 29 0a 20 20 2a 2a 0a 20 20 2a 2a  (MASK).  **.  **
101f0 20 41 74 74 65 6d 70 74 20 74 6f 20 6f 70 74 69   Attempt to opti
10200 6d 69 7a 65 20 74 68 65 20 64 61 74 61 62 61 73  mize the databas
10210 65 2e 20 20 41 6c 6c 20 73 63 68 65 6d 61 73 20  e.  All schemas 
10220 61 72 65 20 6f 70 74 69 6d 69 7a 65 64 20 69 6e  are optimized in
10230 20 74 68 65 20 66 69 72 73 74 0a 20 20 2a 2a 20   the first.  ** 
10240 74 77 6f 20 66 6f 72 6d 73 2c 20 61 6e 64 20 6f  two forms, and o
10250 6e 6c 79 20 74 68 65 20 73 70 65 63 69 66 69 65  nly the specifie
10260 64 20 73 63 68 65 6d 61 20 69 73 20 6f 70 74 69  d schema is opti
10270 6d 69 7a 65 64 20 69 6e 20 74 68 65 20 6c 61 74  mized in the lat
10280 74 65 72 20 74 77 6f 2e 0a 20 20 2a 2a 0a 20 20  ter two..  **.  
10290 2a 2a 20 54 68 65 20 64 65 74 61 69 6c 73 20 6f  ** The details o
102a0 66 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  f optimizations 
102b0 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69  performed by thi
102c0 73 20 70 72 61 67 6d 61 20 61 72 65 20 65 78 70  s pragma are exp
102d0 65 63 74 65 64 0a 20 20 2a 2a 20 74 6f 20 63 68  ected.  ** to ch
102e0 61 6e 67 65 20 61 6e 64 20 69 6d 70 72 6f 76 65  ange and improve
102f0 20 6f 76 65 72 20 74 69 6d 65 2e 20 20 41 70 70   over time.  App
10300 6c 69 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64  lications should
10310 20 61 6e 74 69 63 69 70 61 74 65 20 74 68 61 74   anticipate that
10320 0a 20 20 2a 2a 20 74 68 69 73 20 70 72 61 67 6d  .  ** this pragm
10330 61 20 77 69 6c 6c 20 70 65 72 66 6f 72 6d 20 6e  a will perform n
10340 65 77 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ew optimizations
10350 20 69 6e 20 66 75 74 75 72 65 20 72 65 6c 65 61   in future relea
10360 73 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ses..  **.  ** T
10370 68 65 20 6f 70 74 69 6f 6e 61 6c 20 61 72 67 75  he optional argu
10380 6d 65 6e 74 20 69 73 20 61 20 62 69 74 6d 61 73  ment is a bitmas
10390 6b 20 6f 66 20 6f 70 74 69 6d 69 7a 61 74 69 6f  k of optimizatio
103a0 6e 73 20 74 6f 20 70 65 72 66 6f 72 6d 3a 0a 20  ns to perform:. 
103b0 20 2a 2a 0a 20 20 2a 2a 20 20 20 20 30 78 30 30   **.  **    0x00
103c0 30 31 20 20 20 20 44 65 62 75 67 67 69 6e 67 20  01    Debugging 
103d0 6d 6f 64 65 2e 20 20 44 6f 20 6e 6f 74 20 61 63  mode.  Do not ac
103e0 74 75 61 6c 6c 79 20 70 65 72 66 6f 72 6d 20 61  tually perform a
103f0 6e 79 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ny optimizations
10400 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20  .  **           
10410 20 20 20 62 75 74 20 69 6e 73 74 65 61 64 20 72     but instead r
10420 65 74 75 72 6e 20 6f 6e 65 20 6c 69 6e 65 20 6f  eturn one line o
10430 66 20 74 65 78 74 20 66 6f 72 20 65 61 63 68 20  f text for each 
10440 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 20 20 2a  optimization.  *
10450 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
10460 68 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62  hat would have b
10470 65 65 6e 20 64 6f 6e 65 2e 20 20 4f 66 66 20 62  een done.  Off b
10480 79 20 64 65 66 61 75 6c 74 2e 0a 20 20 2a 2a 0a  y default..  **.
10490 20 20 2a 2a 20 20 20 20 30 78 30 30 30 32 20 20    **    0x0002  
104a0 20 20 52 75 6e 20 41 4e 41 4c 59 5a 45 20 6f 6e    Run ANALYZE on
104b0 20 74 61 62 6c 65 73 20 74 68 61 74 20 6d 69 67   tables that mig
104c0 68 74 20 62 65 6e 65 66 69 74 2e 20 20 4f 6e 20  ht benefit.  On 
104d0 62 79 20 64 65 66 61 75 6c 74 2e 0a 20 20 2a 2a  by default..  **
104e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65                Se
104f0 65 20 62 65 6c 6f 77 20 66 6f 72 20 61 64 64 69  e below for addi
10500 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
10510 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  on..  **.  **   
10520 20 30 78 30 30 30 34 20 20 20 20 28 4e 6f 74 20   0x0004    (Not 
10530 79 65 74 20 69 6d 70 6c 65 6d 65 6e 74 65 64 29  yet implemented)
10540 20 52 65 63 6f 72 64 20 75 73 61 67 65 20 61 6e   Record usage an
10550 64 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 0a 20  d performance . 
10560 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20   **             
10570 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
10580 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65  m the current se
10590 73 73 69 6f 6e 20 69 6e 20 74 68 65 0a 20 20 2a  ssion in the.  *
105a0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64  *              d
105b0 61 74 61 62 61 73 65 20 66 69 6c 65 20 73 6f 20  atabase file so 
105c0 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20  that it will be 
105d0 61 76 61 69 6c 61 62 6c 65 20 74 6f 20 22 6f 70  available to "op
105e0 74 69 6d 69 7a 65 22 0a 20 20 2a 2a 20 20 20 20  timize".  **    
105f0 20 20 20 20 20 20 20 20 20 20 70 72 61 67 6d 61            pragma
10600 73 20 72 75 6e 20 62 79 20 66 75 74 75 72 65 20  s run by future 
10610 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
10620 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
10630 20 20 20 30 78 30 30 30 38 20 20 20 20 28 4e 6f     0x0008    (No
10640 74 20 79 65 74 20 69 6d 70 6c 65 6d 65 6e 74 65  t yet implemente
10650 64 29 20 43 72 65 61 74 65 20 69 6e 64 65 78 65  d) Create indexe
10660 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  s that might hav
10670 65 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20  e.  **          
10680 20 20 20 20 62 65 65 6e 20 68 65 6c 70 66 75 6c      been helpful
10690 20 74 6f 20 72 65 63 65 6e 74 20 71 75 65 72 69   to recent queri
106a0 65 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  es.  **.  ** The
106b0 20 64 65 66 61 75 6c 74 20 4d 41 53 4b 20 69 73   default MASK is
106c0 20 61 6e 64 20 61 6c 77 61 79 73 20 73 68 61 6c   and always shal
106d0 6c 20 62 65 20 30 78 66 66 66 65 2e 20 20 30 78  l be 0xfffe.  0x
106e0 66 66 66 65 20 6d 65 61 6e 73 20 70 65 72 66 6f  fffe means perfo
106f0 72 6d 20 61 6c 6c 0a 20 20 2a 2a 20 6f 66 20 74  rm all.  ** of t
10700 68 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  he optimizations
10710 20 6c 69 73 74 65 64 20 61 62 6f 76 65 20 65 78   listed above ex
10720 63 65 70 74 20 44 65 62 75 67 20 4d 6f 64 65 2c  cept Debug Mode,
10730 20 69 6e 63 6c 75 64 69 6e 67 20 6e 65 77 0a 20   including new. 
10740 20 2a 2a 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   ** optimization
10750 73 20 74 68 61 74 20 68 61 76 65 20 6e 6f 74 20  s that have not 
10760 79 65 74 20 62 65 65 6e 20 69 6e 76 65 6e 74 65  yet been invente
10770 64 2e 20 20 49 66 20 6e 65 77 20 6f 70 74 69 6d  d.  If new optim
10780 69 7a 61 74 69 6f 6e 73 20 61 72 65 0a 20 20 2a  izations are.  *
10790 2a 20 65 76 65 72 20 61 64 64 65 64 20 74 68 61  * ever added tha
107a0 74 20 73 68 6f 75 6c 64 20 62 65 20 6f 66 66 20  t should be off 
107b0 62 79 20 64 65 66 61 75 6c 74 2c 20 74 68 6f 73  by default, thos
107c0 65 20 6f 66 66 2d 62 79 2d 64 65 66 61 75 6c 74  e off-by-default
107d0 20 0a 20 20 2a 2a 20 6f 70 74 69 6d 69 7a 61 74   .  ** optimizat
107e0 69 6f 6e 73 20 77 69 6c 6c 20 68 61 76 65 20 62  ions will have b
107f0 69 74 6d 61 73 6b 73 20 6f 66 20 30 78 31 30 30  itmasks of 0x100
10800 30 30 20 6f 72 20 6c 61 72 67 65 72 2e 0a 20 20  00 or larger..  
10810 2a 2a 0a 20 20 2a 2a 20 44 45 54 45 52 4d 49 4e  **.  ** DETERMIN
10820 41 54 49 4f 4e 20 4f 46 20 57 48 45 4e 20 54 4f  ATION OF WHEN TO
10830 20 52 55 4e 20 41 4e 41 4c 59 5a 45 0a 20 20 2a   RUN ANALYZE.  *
10840 2a 0a 20 20 2a 2a 20 49 6e 20 74 68 65 20 63 75  *.  ** In the cu
10850 72 72 65 6e 74 20 69 6d 70 6c 65 6d 65 6e 74 61  rrent implementa
10860 74 69 6f 6e 2c 20 61 20 74 61 62 6c 65 20 69 73  tion, a table is
10870 20 61 6e 61 6c 79 7a 65 64 20 69 66 20 6f 6e 6c   analyzed if onl
10880 79 20 69 66 20 61 6c 6c 20 6f 66 0a 20 20 2a 2a  y if all of.  **
10890 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
108a0 72 65 20 74 72 75 65 3a 0a 20 20 2a 2a 0a 20 20  re true:.  **.  
108b0 2a 2a 20 28 31 29 20 4d 41 53 4b 20 62 69 74 20  ** (1) MASK bit 
108c0 30 78 30 32 20 69 73 20 73 65 74 2e 0a 20 20 2a  0x02 is set..  *
108d0 2a 0a 20 20 2a 2a 20 28 32 29 20 54 68 65 20 71  *.  ** (2) The q
108e0 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 75 73 65  uery planner use
108f0 64 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2d 73  d sqlite_stat1-s
10900 74 79 6c 65 20 73 74 61 74 69 73 74 69 63 73 20  tyle statistics 
10910 66 6f 72 20 6f 6e 65 20 6f 72 0a 20 20 2a 2a 20  for one or.  ** 
10920 20 20 20 20 6d 6f 72 65 20 69 6e 64 65 78 65 73      more indexes
10930 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 61 74   of the table at
10940 20 73 6f 6d 65 20 70 6f 69 6e 74 20 64 75 72 69   some point duri
10950 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20  ng the lifetime 
10960 6f 66 0a 20 20 2a 2a 20 20 20 20 20 74 68 65 20  of.  **     the 
10970 63 75 72 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69  current connecti
10980 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 28 33  on..  **.  ** (3
10990 29 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 69 6e  ) One or more in
109a0 64 65 78 65 73 20 6f 66 20 74 68 65 20 74 61 62  dexes of the tab
109b0 6c 65 20 61 72 65 20 63 75 72 72 65 6e 74 6c 79  le are currently
109c0 20 75 6e 61 6e 61 6c 79 7a 65 64 20 4f 52 0a 20   unanalyzed OR. 
109d0 20 2a 2a 20 20 20 20 20 74 68 65 20 6e 75 6d 62   **     the numb
109e0 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
109f0 65 20 74 61 62 6c 65 20 68 61 73 20 69 6e 63 72  e table has incr
10a00 65 61 73 65 64 20 62 79 20 32 35 20 74 69 6d 65  eased by 25 time
10a10 73 20 6f 72 20 6d 6f 72 65 0a 20 20 2a 2a 20 20  s or more.  **  
10a20 20 20 20 73 69 6e 63 65 20 74 68 65 20 6c 61 73     since the las
10a30 74 20 74 69 6d 65 20 41 4e 41 4c 59 5a 45 20 77  t time ANALYZE w
10a40 61 73 20 72 75 6e 2e 0a 20 20 2a 2a 0a 20 20 2a  as run..  **.  *
10a50 2a 20 54 68 65 20 72 75 6c 65 73 20 66 6f 72 20  * The rules for 
10a60 77 68 65 6e 20 74 61 62 6c 65 73 20 61 72 65 20  when tables are 
10a70 61 6e 61 6c 79 7a 65 64 20 61 72 65 20 6c 69 6b  analyzed are lik
10a80 65 6c 79 20 74 6f 20 63 68 61 6e 67 65 20 69 6e  ely to change in
10a90 0a 20 20 2a 2a 20 66 75 74 75 72 65 20 72 65 6c  .  ** future rel
10aa0 65 61 73 65 73 2e 0a 20 20 2a 2f 0a 20 20 63 61  eases..  */.  ca
10ab0 73 65 20 50 72 61 67 54 79 70 5f 4f 50 54 49 4d  se PragTyp_OPTIM
10ac0 49 5a 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69  IZE: {.    int i
10ad0 44 62 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20  DbLast;         
10ae0 20 20 2f 2a 20 4c 6f 6f 70 20 74 65 72 6d 69 6e    /* Loop termin
10af0 61 74 69 6f 6e 20 70 6f 69 6e 74 20 66 6f 72 20  ation point for 
10b00 74 68 65 20 73 63 68 65 6d 61 20 6c 6f 6f 70 20  the schema loop 
10b10 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 43  */.    int iTabC
10b20 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ur;           /*
10b30 20 43 75 72 73 6f 72 20 66 6f 72 20 61 20 74 61   Cursor for a ta
10b40 62 6c 65 20 77 68 6f 73 65 20 73 69 7a 65 20 6e  ble whose size n
10b50 65 65 64 73 20 63 68 65 63 6b 69 6e 67 20 2a 2f  eeds checking */
10b60 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 6b  .    HashElem *k
10b70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
10b80 6f 6f 70 20 6f 76 65 72 20 74 61 62 6c 65 73 20  oop over tables 
10b90 6f 66 20 61 20 73 63 68 65 6d 61 20 2a 2f 0a 20  of a schema */. 
10ba0 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65     Schema *pSche
10bb0 6d 61 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ma;       /* The
10bc0 20 63 75 72 72 65 6e 74 20 73 63 68 65 6d 61 20   current schema 
10bd0 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
10be0 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
10bf0 20 41 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20   A table in the 
10c00 73 63 68 65 6d 61 20 2a 2f 0a 20 20 20 20 49 6e  schema */.    In
10c10 64 65 78 20 2a 70 49 64 78 3b 20 20 20 20 20 20  dex *pIdx;      
10c20 20 20 20 20 20 2f 2a 20 41 6e 20 69 6e 64 65 78       /* An index
10c30 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
10c40 0a 20 20 20 20 4c 6f 67 45 73 74 20 73 7a 54 68  .    LogEst szTh
10c50 72 65 73 68 6f 6c 64 3b 20 20 20 20 2f 2a 20 53  reshold;    /* S
10c60 69 7a 65 20 74 68 72 65 73 68 6f 6c 64 20 61 62  ize threshold ab
10c70 6f 76 65 20 77 68 69 63 68 20 72 65 61 6e 61 6c  ove which reanal
10c80 79 73 69 73 20 69 73 20 6e 65 65 64 64 20 2a 2f  ysis is needd */
10c90 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 75 62 53  .    char *zSubS
10ca0 71 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  ql;         /* S
10cb0 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72  QL statement for
10cc0 20 74 68 65 20 4f 50 5f 53 71 6c 45 78 65 63 20   the OP_SqlExec 
10cd0 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 20 20 75 33  opcode */.    u3
10ce0 32 20 6f 70 4d 61 73 6b 3b 20 20 20 20 20 20 20  2 opMask;       
10cf0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
10d00 6f 70 65 72 61 74 69 6f 6e 73 20 74 6f 20 70 65  operations to pe
10d10 72 66 6f 72 6d 20 2a 2f 0a 0a 20 20 20 20 69 66  rform */..    if
10d20 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
10d30 20 20 6f 70 4d 61 73 6b 20 3d 20 28 75 33 32 29    opMask = (u32)
10d40 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67  sqlite3Atoi(zRig
10d50 68 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28  ht);.      if( (
10d60 6f 70 4d 61 73 6b 20 26 20 30 78 30 32 29 3d 3d  opMask & 0x02)==
10d70 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d  0 ) break;.    }
10d80 65 6c 73 65 7b 0a 20 20 20 20 20 20 6f 70 4d 61  else{.      opMa
10d90 73 6b 20 3d 20 30 78 66 66 66 65 3b 0a 20 20 20  sk = 0xfffe;.   
10da0 20 7d 0a 20 20 20 20 69 54 61 62 43 75 72 20 3d   }.    iTabCur =
10db0 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 2b 2b 3b   pParse->nTab++;
10dc0 0a 20 20 20 20 66 6f 72 28 69 44 62 4c 61 73 74  .    for(iDbLast
10dd0 20 3d 20 7a 44 62 3f 69 44 62 3a 64 62 2d 3e 6e   = zDb?iDb:db->n
10de0 44 62 2d 31 3b 20 69 44 62 3c 3d 69 44 62 4c 61  Db-1; iDb<=iDbLa
10df0 73 74 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20  st; iDb++){.    
10e00 20 20 69 66 28 20 69 44 62 3d 3d 31 20 29 20 63    if( iDb==1 ) c
10e10 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73  ontinue;.      s
10e20 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
10e30 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
10e40 44 62 29 3b 0a 20 20 20 20 20 20 70 53 63 68 65  Db);.      pSche
10e50 6d 61 20 3d 20 64 62 2d 3e 61 44 62 5b 69 44 62  ma = db->aDb[iDb
10e60 5d 2e 70 53 63 68 65 6d 61 3b 0a 20 20 20 20 20  ].pSchema;.     
10e70 20 66 6f 72 28 6b 3d 73 71 6c 69 74 65 48 61 73   for(k=sqliteHas
10e80 68 46 69 72 73 74 28 26 70 53 63 68 65 6d 61 2d  hFirst(&pSchema-
10e90 3e 74 62 6c 48 61 73 68 29 3b 20 6b 3b 20 6b 3d  >tblHash); k; k=
10ea0 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 6b  sqliteHashNext(k
10eb0 29 29 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62  )){.        pTab
10ec0 20 3d 20 28 54 61 62 6c 65 2a 29 73 71 6c 69 74   = (Table*)sqlit
10ed0 65 48 61 73 68 44 61 74 61 28 6b 29 3b 0a 0a 20  eHashData(k);.. 
10ee0 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 61 62         /* If tab
10ef0 6c 65 20 70 54 61 62 20 68 61 73 20 6e 6f 74 20  le pTab has not 
10f00 62 65 65 6e 20 75 73 65 64 20 69 6e 20 61 20 77  been used in a w
10f10 61 79 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65  ay that would be
10f20 6e 65 66 69 74 20 66 72 6f 6d 0a 20 20 20 20 20  nefit from.     
10f30 20 20 20 2a 2a 20 68 61 76 69 6e 67 20 61 6e 61     ** having ana
10f40 6c 79 73 69 73 20 73 74 61 74 69 73 74 69 63 73  lysis statistics
10f50 20 64 75 72 69 6e 67 20 74 68 65 20 63 75 72 72   during the curr
10f60 65 6e 74 20 73 65 73 73 69 6f 6e 2c 20 74 68 65  ent session, the
10f70 6e 20 73 6b 69 70 20 69 74 2e 0a 20 20 20 20 20  n skip it..     
10f80 20 20 20 2a 2a 20 54 68 69 73 20 61 6c 73 6f 20     ** This also 
10f90 68 61 73 20 74 68 65 20 65 66 66 65 63 74 20 6f  has the effect o
10fa0 66 20 73 6b 69 70 70 69 6e 67 20 76 69 72 74 75  f skipping virtu
10fb0 61 6c 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69  al tables and vi
10fc0 65 77 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ews */.        i
10fd0 66 28 20 28 70 54 61 62 2d 3e 74 61 62 46 6c 61  f( (pTab->tabFla
10fe0 67 73 20 26 20 54 46 5f 53 74 61 74 73 55 73 65  gs & TF_StatsUse
10ff0 64 29 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  d)==0 ) continue
11000 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;..        /* Re
11010 61 6e 61 6c 79 7a 65 20 69 66 20 74 68 65 20 74  analyze if the t
11020 61 62 6c 65 20 69 73 20 32 35 20 74 69 6d 65 73  able is 25 times
11030 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68 65   larger than the
11040 20 6c 61 73 74 20 61 6e 61 6c 79 73 69 73 20 2a   last analysis *
11050 2f 0a 20 20 20 20 20 20 20 20 73 7a 54 68 72 65  /.        szThre
11060 73 68 6f 6c 64 20 3d 20 70 54 61 62 2d 3e 6e 52  shold = pTab->nR
11070 6f 77 4c 6f 67 45 73 74 20 2b 20 34 36 3b 20 61  owLogEst + 46; a
11080 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 4c 6f  ssert( sqlite3Lo
11090 67 45 73 74 28 32 35 29 3d 3d 34 36 20 29 3b 0a  gEst(25)==46 );.
110a0 20 20 20 20 20 20 20 20 66 6f 72 28 70 49 64 78          for(pIdx
110b0 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
110c0 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
110d0 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20  pNext){.        
110e0 20 20 69 66 28 20 21 70 49 64 78 2d 3e 68 61 73    if( !pIdx->has
110f0 53 74 61 74 31 20 29 7b 0a 20 20 20 20 20 20 20  Stat1 ){.       
11100 20 20 20 20 20 73 7a 54 68 72 65 73 68 6f 6c 64       szThreshold
11110 20 3d 20 30 3b 20 2f 2a 20 41 6c 77 61 79 73 20   = 0; /* Always 
11120 61 6e 61 6c 79 7a 65 20 69 66 20 61 6e 79 20 69  analyze if any i
11130 6e 64 65 78 20 6c 61 63 6b 73 20 73 74 61 74 69  ndex lacks stati
11140 73 74 69 63 73 20 2a 2f 0a 20 20 20 20 20 20 20  stics */.       
11150 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
11160 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
11170 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 7a  }.        if( sz
11180 54 68 72 65 73 68 6f 6c 64 20 29 7b 0a 20 20 20  Threshold ){.   
11190 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70         sqlite3Op
111a0 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20  enTable(pParse, 
111b0 69 54 61 62 43 75 72 2c 20 69 44 62 2c 20 70 54  iTabCur, iDb, pT
111c0 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29  ab, OP_OpenRead)
111d0 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
111e0 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
111f0 20 4f 50 5f 49 66 53 6d 61 6c 6c 65 72 2c 20 69   OP_IfSmaller, i
11200 54 61 62 43 75 72 2c 20 0a 20 20 20 20 20 20 20  TabCur, .       
11210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11220 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72    sqlite3VdbeCur
11230 72 65 6e 74 41 64 64 72 28 76 29 2b 32 2b 28 6f  rentAddr(v)+2+(o
11240 70 4d 61 73 6b 26 31 29 2c 20 73 7a 54 68 72 65  pMask&1), szThre
11250 73 68 6f 6c 64 29 3b 0a 20 20 20 20 20 20 20 20  shold);.        
11260 20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76    VdbeCoverage(v
11270 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
11280 20 20 20 20 20 7a 53 75 62 53 71 6c 20 3d 20 73       zSubSql = s
11290 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
112a0 2c 20 22 41 4e 41 4c 59 5a 45 20 5c 22 25 77 5c  , "ANALYZE \"%w\
112b0 22 2e 5c 22 25 77 5c 22 22 2c 0a 20 20 20 20 20  ".\"%w\"",.     
112c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112d0 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e              db->
112e0 61 44 62 5b 69 44 62 5d 2e 7a 44 62 53 4e 61 6d  aDb[iDb].zDbSNam
112f0 65 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 3b  e, pTab->zName);
11300 0a 20 20 20 20 20 20 20 20 69 66 28 20 6f 70 4d  .        if( opM
11310 61 73 6b 20 26 20 30 78 30 31 20 29 7b 0a 20 20  ask & 0x01 ){.  
11320 20 20 20 20 20 20 20 20 69 6e 74 20 72 31 20 3d          int r1 =
11330 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
11340 65 67 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  eg(pParse);.    
11350 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11360 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
11370 72 69 6e 67 38 2c 20 30 2c 20 72 31 2c 20 30 2c  ring8, 0, r1, 0,
11380 20 7a 53 75 62 53 71 6c 2c 20 50 34 5f 44 59 4e   zSubSql, P4_DYN
11390 41 4d 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20  AMIC);.         
113a0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
113b0 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
113c0 6f 77 2c 20 72 31 2c 20 31 29 3b 0a 20 20 20 20  ow, r1, 1);.    
113d0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
113e0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
113f0 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 71 6c  AddOp4(v, OP_Sql
11400 45 78 65 63 2c 20 30 2c 20 30 2c 20 30 2c 20 7a  Exec, 0, 0, 0, z
11410 53 75 62 53 71 6c 2c 20 50 34 5f 44 59 4e 41 4d  SubSql, P4_DYNAM
11420 49 43 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  IC);.        }. 
11430 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
11440 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
11450 70 30 28 76 2c 20 4f 50 5f 45 78 70 69 72 65 29  p0(v, OP_Expire)
11460 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
11470 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
11480 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f 75  AGMA busy_timeou
11490 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  t.  **   PRAGMA 
114a0 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 3d 20 4e  busy_timeout = N
114b0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20  .  **.  ** Call 
114c0 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d  sqlite3_busy_tim
114d0 65 6f 75 74 28 64 62 2c 20 4e 29 2e 20 20 52 65  eout(db, N).  Re
114e0 74 75 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74  turn the current
114f0 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 0a 20   timeout value. 
11500 20 2a 2a 20 69 66 20 6f 6e 65 20 69 73 20 73 65   ** if one is se
11510 74 2e 20 20 49 66 20 6e 6f 20 62 75 73 79 20 68  t.  If no busy h
11520 61 6e 64 6c 65 72 20 6f 72 20 61 20 64 69 66 66  andler or a diff
11530 65 72 65 6e 74 20 62 75 73 79 20 68 61 6e 64 6c  erent busy handl
11540 65 72 20 69 73 20 73 65 74 0a 20 20 2a 2a 20 74  er is set.  ** t
11550 68 65 6e 20 30 20 69 73 20 72 65 74 75 72 6e 65  hen 0 is returne
11560 64 2e 20 20 53 65 74 74 69 6e 67 20 74 68 65 20  d.  Setting the 
11570 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 74 6f 20  busy_timeout to 
11580 30 20 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20  0 or negative.  
11590 2a 2a 20 64 69 73 61 62 6c 65 73 20 74 68 65 20  ** disables the 
115a0 74 69 6d 65 6f 75 74 2e 0a 20 20 2a 2f 0a 20 20  timeout..  */.  
115b0 2f 2a 63 61 73 65 20 50 72 61 67 54 79 70 5f 42  /*case PragTyp_B
115c0 55 53 59 5f 54 49 4d 45 4f 55 54 2a 2f 20 64 65  USY_TIMEOUT*/ de
115d0 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 61 73 73  fault: {.    ass
115e0 65 72 74 28 20 70 50 72 61 67 6d 61 2d 3e 65 50  ert( pPragma->eP
115f0 72 61 67 54 79 70 3d 3d 50 72 61 67 54 79 70 5f  ragTyp==PragTyp_
11600 42 55 53 59 5f 54 49 4d 45 4f 55 54 20 29 3b 0a  BUSY_TIMEOUT );.
11610 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
11620 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
11630 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c  busy_timeout(db,
11640 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
11650 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ght));.    }.   
11660 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
11670 28 76 2c 20 64 62 2d 3e 62 75 73 79 54 69 6d 65  (v, db->busyTime
11680 6f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  out);.    break;
11690 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
116a0 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68 65    PRAGMA soft_he
116b0 61 70 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 20  ap_limit.  **   
116c0 50 52 41 47 4d 41 20 73 6f 66 74 5f 68 65 61 70  PRAGMA soft_heap
116d0 5f 6c 69 6d 69 74 20 3d 20 4e 0a 20 20 2a 2a 0a  _limit = N.  **.
116e0 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    ** IMPLEMENTAT
116f0 49 4f 4e 2d 4f 46 3a 20 52 2d 32 36 33 34 33 2d  ION-OF: R-26343-
11700 34 35 39 33 30 20 54 68 69 73 20 70 72 61 67 6d  45930 This pragm
11710 61 20 69 6e 76 6f 6b 65 73 20 74 68 65 0a 20 20  a invokes the.  
11720 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f  ** sqlite3_soft_
11730 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 29 20 69  heap_limit64() i
11740 6e 74 65 72 66 61 63 65 20 77 69 74 68 20 74 68  nterface with th
11750 65 20 61 72 67 75 6d 65 6e 74 20 4e 2c 20 69 66  e argument N, if
11760 20 4e 20 69 73 0a 20 20 2a 2a 20 73 70 65 63 69   N is.  ** speci
11770 66 69 65 64 20 61 6e 64 20 69 73 20 61 20 6e 6f  fied and is a no
11780 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67  n-negative integ
11790 65 72 2e 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45  er..  ** IMPLEME
117a0 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 36 34  NTATION-OF: R-64
117b0 34 35 31 2d 30 37 31 36 33 20 54 68 65 20 73 6f  451-07163 The so
117c0 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 70 72  ft_heap_limit pr
117d0 61 67 6d 61 20 61 6c 77 61 79 73 0a 20 20 2a 2a  agma always.  **
117e0 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 61 6d   returns the sam
117f0 65 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 77  e integer that w
11800 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64  ould be returned
11810 20 62 79 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c   by the.  ** sql
11820 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c  ite3_soft_heap_l
11830 69 6d 69 74 36 34 28 2d 31 29 20 43 2d 6c 61 6e  imit64(-1) C-lan
11840 67 75 61 67 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  guage function..
11850 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
11860 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f 4c 49  Typ_SOFT_HEAP_LI
11870 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74  MIT: {.    sqlit
11880 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20  e3_int64 N;.    
11890 69 66 28 20 7a 52 69 67 68 74 20 26 26 20 73 71  if( zRight && sq
118a0 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49  lite3DecOrHexToI
118b0 36 34 28 7a 52 69 67 68 74 2c 20 26 4e 29 3d 3d  64(zRight, &N)==
118c0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
118d0 20 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f     sqlite3_soft_
118e0 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29 3b  heap_limit64(N);
118f0 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
11900 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 73 71  nSingleInt(v, sq
11910 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f  lite3_soft_heap_
11920 6c 69 6d 69 74 36 34 28 2d 31 29 29 3b 0a 20 20  limit64(-1));.  
11930 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
11940 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
11950 20 74 68 72 65 61 64 73 0a 20 20 2a 2a 20 20 20   threads.  **   
11960 50 52 41 47 4d 41 20 74 68 72 65 61 64 73 20 3d  PRAGMA threads =
11970 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e   N.  **.  ** Con
11980 66 69 67 75 72 65 20 74 68 65 20 6d 61 78 69 6d  figure the maxim
11990 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 77 6f 72  um number of wor
119a0 6b 65 72 20 74 68 72 65 61 64 73 2e 20 20 52 65  ker threads.  Re
119b0 74 75 72 6e 20 74 68 65 20 6e 65 77 0a 20 20 2a  turn the new.  *
119c0 2a 20 6d 61 78 69 6d 75 6d 2c 20 77 68 69 63 68  * maximum, which
119d0 20 6d 69 67 68 74 20 62 65 20 6c 65 73 73 20 74   might be less t
119e0 68 61 6e 20 72 65 71 75 65 73 74 65 64 2e 0a 20  han requested.. 
119f0 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
11a00 79 70 5f 54 48 52 45 41 44 53 3a 20 7b 0a 20 20  yp_THREADS: {.  
11a10 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
11a20 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  N;.    if( zRigh
11a30 74 0a 20 20 20 20 20 26 26 20 73 71 6c 69 74 65  t.     && sqlite
11a40 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a  3DecOrHexToI64(z
11a50 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53 51 4c 49  Right, &N)==SQLI
11a60 54 45 5f 4f 4b 0a 20 20 20 20 20 26 26 20 4e 3e  TE_OK.     && N>
11a70 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  =0.    ){.      
11a80 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 64 62  sqlite3_limit(db
11a90 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57  , SQLITE_LIMIT_W
11aa0 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 28  ORKER_THREADS, (
11ab0 69 6e 74 29 28 4e 26 30 78 37 66 66 66 66 66 66  int)(N&0x7ffffff
11ac0 66 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  f));.    }.    r
11ad0 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76  eturnSingleInt(v
11ae0 2c 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28  , sqlite3_limit(
11af0 64 62 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54  db, SQLITE_LIMIT
11b00 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c  _WORKER_THREADS,
11b10 20 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b   -1));.    break
11b20 3b 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66 69 6e  ;.  }..#if defin
11b30 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
11b40 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
11b50 54 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a 20 20  TE_TEST).  /*.  
11b60 2a 2a 20 52 65 70 6f 72 74 20 74 68 65 20 63 75  ** Report the cu
11b70 72 72 65 6e 74 20 73 74 61 74 65 20 6f 66 20 66  rrent state of f
11b80 69 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61 6c 6c  ile logs for all
11b90 20 64 61 74 61 62 61 73 65 73 0a 20 20 2a 2f 0a   databases.  */.
11ba0 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c    case PragTyp_L
11bb0 4f 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a 20 20  OCK_STATUS: {.  
11bc0 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
11bd0 68 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f 63  har *const azLoc
11be0 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  kName[] = {.    
11bf0 20 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20 22 73    "unlocked", "s
11c00 68 61 72 65 64 22 2c 20 22 72 65 73 65 72 76 65  hared", "reserve
11c10 64 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c 20 22  d", "pending", "
11c20 65 78 63 6c 75 73 69 76 65 22 0a 20 20 20 20 7d  exclusive".    }
11c30 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  ;.    int i;.   
11c40 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
11c50 32 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  2;.    for(i=0; 
11c60 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
11c70 0a 20 20 20 20 20 20 42 74 72 65 65 20 2a 70 42  .      Btree *pB
11c80 74 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  t;.      const c
11c90 68 61 72 20 2a 7a 53 74 61 74 65 20 3d 20 22 75  har *zState = "u
11ca0 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20 20 20 69  nknown";.      i
11cb0 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69 66 28 20  nt j;.      if( 
11cc0 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 44 62 53 4e  db->aDb[i].zDbSN
11cd0 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  ame==0 ) continu
11ce0 65 3b 0a 20 20 20 20 20 20 70 42 74 20 3d 20 64  e;.      pBt = d
11cf0 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20  b->aDb[i].pBt;. 
11d00 20 20 20 20 20 69 66 28 20 70 42 74 3d 3d 30 20       if( pBt==0 
11d10 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 50  || sqlite3BtreeP
11d20 61 67 65 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a  ager(pBt)==0 ){.
11d30 20 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d          zState =
11d40 20 22 63 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20   "closed";.     
11d50 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74   }else if( sqlit
11d60 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
11d70 64 62 2c 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b  db, i ? db->aDb[
11d80 69 5d 2e 7a 44 62 53 4e 61 6d 65 20 3a 20 30 2c  i].zDbSName : 0,
11d90 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
11da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11db0 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 46 43         SQLITE_FC
11dc0 4e 54 4c 5f 4c 4f 43 4b 53 54 41 54 45 2c 20 26  NTL_LOCKSTATE, &
11dd0 6a 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  j)==SQLITE_OK ){
11de0 0a 20 20 20 20 20 20 20 20 20 7a 53 74 61 74 65  .         zState
11df0 20 3d 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d   = azLockName[j]
11e00 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
11e10 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69  sqlite3VdbeMulti
11e20 4c 6f 61 64 28 76 2c 20 31 2c 20 22 73 73 22 2c  Load(v, 1, "ss",
11e30 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 44 62 53   db->aDb[i].zDbS
11e40 4e 61 6d 65 2c 20 7a 53 74 61 74 65 29 3b 0a 20  Name, zState);. 
11e50 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
11e60 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64    }.#endif..#ifd
11e70 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ef SQLITE_HAS_CO
11e80 44 45 43 0a 20 20 2f 2a 20 50 72 61 67 6d 61 20  DEC.  /* Pragma 
11e90 20 20 20 20 20 20 20 69 41 72 67 0a 20 20 2a 2a         iArg.  **
11ea0 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20 2d 2d   ----------   --
11eb0 2d 2d 2d 2d 0a 20 20 2a 2a 20 20 6b 65 79 20 20  ----.  **  key  
11ec0 20 20 20 20 20 20 20 20 20 30 0a 20 20 2a 2a 20           0.  ** 
11ed0 20 72 65 6b 65 79 20 20 20 20 20 20 20 20 20 31   rekey         1
11ee0 0a 20 20 2a 2a 20 20 68 65 78 6b 65 79 20 20 20  .  **  hexkey   
11ef0 20 20 20 20 20 32 0a 20 20 2a 2a 20 20 68 65 78       2.  **  hex
11f00 72 65 6b 65 79 20 20 20 20 20 20 33 0a 20 20 2a  rekey      3.  *
11f10 2a 20 20 74 65 78 74 6b 65 79 20 20 20 20 20 20  *  textkey      
11f20 20 34 0a 20 20 2a 2a 20 20 74 65 78 74 72 65 6b   4.  **  textrek
11f30 65 79 20 20 20 20 20 35 0a 20 20 2a 2f 0a 20 20  ey     5.  */.  
11f40 63 61 73 65 20 50 72 61 67 54 79 70 5f 4b 45 59  case PragTyp_KEY
11f50 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  : {.    if( zRig
11f60 68 74 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  ht ){.      int 
11f70 6e 20 3d 20 70 50 72 61 67 6d 61 2d 3e 69 41 72  n = pPragma->iAr
11f80 67 3c 34 20 3f 20 73 71 6c 69 74 65 33 53 74 72  g<4 ? sqlite3Str
11f90 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 20 3a 20  len30(zRight) : 
11fa0 2d 31 3b 0a 20 20 20 20 20 20 69 66 28 20 28 70  -1;.      if( (p
11fb0 50 72 61 67 6d 61 2d 3e 69 41 72 67 20 26 20 31  Pragma->iArg & 1
11fc0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
11fd0 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64  sqlite3_key_v2(d
11fe0 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20  b, zDb, zRight, 
11ff0 6e 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  n);.      }else{
12000 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
12010 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44  _rekey_v2(db, zD
12020 62 2c 20 7a 52 69 67 68 74 2c 20 6e 29 3b 0a 20  b, zRight, n);. 
12030 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
12040 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61   break;.  }.  ca
12050 73 65 20 50 72 61 67 54 79 70 5f 48 45 58 4b 45  se PragTyp_HEXKE
12060 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  Y: {.    if( zRi
12070 67 68 74 20 29 7b 0a 20 20 20 20 20 20 75 38 20  ght ){.      u8 
12080 69 42 79 74 65 3b 0a 20 20 20 20 20 20 69 6e 74  iByte;.      int
12090 20 69 3b 0a 20 20 20 20 20 20 63 68 61 72 20 7a   i;.      char z
120a0 4b 65 79 5b 34 30 5d 3b 0a 20 20 20 20 20 20 66  Key[40];.      f
120b0 6f 72 28 69 3d 30 2c 20 69 42 79 74 65 3d 30 3b  or(i=0, iByte=0;
120c0 20 69 3c 73 69 7a 65 6f 66 28 7a 4b 65 79 29 2a   i<sizeof(zKey)*
120d0 32 20 26 26 20 73 71 6c 69 74 65 33 49 73 78 64  2 && sqlite3Isxd
120e0 69 67 69 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b  igit(zRight[i]);
120f0 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
12100 42 79 74 65 20 3d 20 28 69 42 79 74 65 3c 3c 34  Byte = (iByte<<4
12110 29 20 2b 20 73 71 6c 69 74 65 33 48 65 78 54 6f  ) + sqlite3HexTo
12120 49 6e 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b 0a  Int(zRight[i]);.
12130 20 20 20 20 20 20 20 20 69 66 28 20 28 69 26 31          if( (i&1
12140 29 21 3d 30 20 29 20 7a 4b 65 79 5b 69 2f 32 5d  )!=0 ) zKey[i/2]
12150 20 3d 20 69 42 79 74 65 3b 0a 20 20 20 20 20 20   = iByte;.      
12160 7d 0a 20 20 20 20 20 20 69 66 28 20 28 70 50 72  }.      if( (pPr
12170 61 67 6d 61 2d 3e 69 41 72 67 20 26 20 31 29 3d  agma->iArg & 1)=
12180 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
12190 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c  lite3_key_v2(db,
121a0 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29   zDb, zKey, i/2)
121b0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
121c0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
121d0 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c  ekey_v2(db, zDb,
121e0 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20   zKey, i/2);.   
121f0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
12200 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
12210 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
12220 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 20 7c  ITE_HAS_CODEC) |
12230 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
12240 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 29 0a 20  _ENABLE_CEROD). 
12250 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 41 43   case PragTyp_AC
12260 54 49 56 41 54 45 5f 45 58 54 45 4e 53 49 4f 4e  TIVATE_EXTENSION
12270 53 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b  S: if( zRight ){
12280 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48  .#ifdef SQLITE_H
12290 41 53 5f 43 4f 44 45 43 0a 20 20 20 20 69 66 28  AS_CODEC.    if(
122a0 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
122b0 28 7a 52 69 67 68 74 2c 20 22 73 65 65 2d 22 2c  (zRight, "see-",
122c0 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20   4)==0 ){.      
122d0 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65  sqlite3_activate
122e0 5f 73 65 65 28 26 7a 52 69 67 68 74 5b 34 5d 29  _see(&zRight[4])
122f0 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23  ;.    }.#endif.#
12300 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
12310 42 4c 45 5f 43 45 52 4f 44 0a 20 20 20 20 69 66  BLE_CEROD.    if
12320 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  ( sqlite3StrNICm
12330 70 28 7a 52 69 67 68 74 2c 20 22 63 65 72 6f 64  p(zRight, "cerod
12340 2d 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20 20 20  -", 6)==0 ){.   
12350 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76     sqlite3_activ
12360 61 74 65 5f 63 65 72 6f 64 28 26 7a 52 69 67 68  ate_cerod(&zRigh
12370 74 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  t[6]);.    }.#en
12380 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
12390 0a 23 65 6e 64 69 66 0a 0a 20 20 7d 20 2f 2a 20  .#endif..  } /* 
123a0 45 6e 64 20 6f 66 20 74 68 65 20 50 52 41 47 4d  End of the PRAGM
123b0 41 20 73 77 69 74 63 68 20 2a 2f 0a 0a 20 20 2f  A switch */..  /
123c0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
123d0 62 6c 6f 63 6b 20 69 73 20 61 20 6e 6f 2d 6f 70  block is a no-op
123e0 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f 44   unless SQLITE_D
123f0 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e  EBUG is defined.
12400 20 49 74 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20 70   Its only.  ** p
12410 75 72 70 6f 73 65 20 69 73 20 74 6f 20 65 78 65  urpose is to exe
12420 63 75 74 65 20 61 73 73 65 72 74 28 29 20 73 74  cute assert() st
12430 61 74 65 6d 65 6e 74 73 20 74 6f 20 76 65 72 69  atements to veri
12440 66 79 20 74 68 61 74 20 69 66 20 74 68 65 0a 20  fy that if the. 
12450 20 2a 2a 20 50 72 61 67 46 6c 67 5f 4e 6f 43 6f   ** PragFlg_NoCo
12460 6c 75 6d 6e 73 31 20 66 6c 61 67 20 69 73 20 73  lumns1 flag is s
12470 65 74 20 61 6e 64 20 74 68 65 20 63 61 6c 6c 65  et and the calle
12480 72 20 73 70 65 63 69 66 69 65 64 20 61 6e 20 61  r specified an a
12490 72 67 75 6d 65 6e 74 0a 20 20 2a 2a 20 74 6f 20  rgument.  ** to 
124a0 74 68 65 20 50 52 41 47 4d 41 2c 20 74 68 65 20  the PRAGMA, the 
124b0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 68  implementation h
124c0 61 73 20 6e 6f 74 20 61 64 64 65 64 20 61 6e 79  as not added any
124d0 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 20 0a 20   OP_ResultRow . 
124e0 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 73   ** instructions
124f0 20 74 6f 20 74 68 65 20 56 4d 2e 20 20 2a 2f 0a   to the VM.  */.
12500 20 20 69 66 28 20 28 70 50 72 61 67 6d 61 2d 3e    if( (pPragma->
12510 6d 50 72 61 67 46 6c 67 20 26 20 50 72 61 67 46  mPragFlg & PragF
12520 6c 67 5f 4e 6f 43 6f 6c 75 6d 6e 73 31 29 20 26  lg_NoColumns1) &
12530 26 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  & zRight ){.    
12540 73 71 6c 69 74 65 33 56 64 62 65 56 65 72 69 66  sqlite3VdbeVerif
12550 79 4e 6f 52 65 73 75 6c 74 52 6f 77 28 76 29 3b  yNoResultRow(v);
12560 0a 20 20 7d 0a 0a 70 72 61 67 6d 61 5f 6f 75 74  .  }..pragma_out
12570 3a 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  :.  sqlite3DbFre
12580 65 28 64 62 2c 20 7a 4c 65 66 74 29 3b 0a 20 20  e(db, zLeft);.  
12590 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
125a0 2c 20 7a 52 69 67 68 74 29 3b 0a 7d 0a 23 69 66  , zRight);.}.#if
125b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
125c0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
125d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
125e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
125f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12600 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12610 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
12620 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  Implementation o
12630 66 20 61 6e 20 65 70 6f 6e 79 6d 6f 75 73 20 76  f an eponymous v
12640 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74 68 61  irtual table tha
12650 74 20 72 75 6e 73 20 61 20 70 72 61 67 6d 61 2e  t runs a pragma.
12660 0a 2a 2a 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .**.*/.typedef s
12670 74 72 75 63 74 20 50 72 61 67 6d 61 56 74 61 62  truct PragmaVtab
12680 20 50 72 61 67 6d 61 56 74 61 62 3b 0a 74 79 70   PragmaVtab;.typ
12690 65 64 65 66 20 73 74 72 75 63 74 20 50 72 61 67  edef struct Prag
126a0 6d 61 56 74 61 62 43 75 72 73 6f 72 20 50 72 61  maVtabCursor Pra
126b0 67 6d 61 56 74 61 62 43 75 72 73 6f 72 3b 0a 73  gmaVtabCursor;.s
126c0 74 72 75 63 74 20 50 72 61 67 6d 61 56 74 61 62  truct PragmaVtab
126d0 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
126e0 62 20 62 61 73 65 3b 20 20 20 20 20 20 20 20 2f  b base;        /
126f0 2a 20 42 61 73 65 20 63 6c 61 73 73 2e 20 20 4d  * Base class.  M
12700 75 73 74 20 62 65 20 66 69 72 73 74 20 2a 2f 0a  ust be first */.
12710 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
12720 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
12730 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
12740 65 63 74 69 6f 6e 20 74 6f 20 77 68 69 63 68 20  ection to which 
12750 69 74 20 62 65 6c 6f 6e 67 73 20 2a 2f 0a 20 20  it belongs */.  
12760 63 6f 6e 73 74 20 50 72 61 67 6d 61 4e 61 6d 65  const PragmaName
12770 20 2a 70 4e 61 6d 65 3b 20 20 2f 2a 20 4e 61 6d   *pName;  /* Nam
12780 65 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61 20  e of the pragma 
12790 2a 2f 0a 20 20 75 38 20 6e 48 69 64 64 65 6e 3b  */.  u8 nHidden;
127a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
127b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 68 69 64 64  * Number of hidd
127c0 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  en columns */.  
127d0 75 38 20 69 48 69 64 64 65 6e 3b 20 20 20 20 20  u8 iHidden;     
127e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
127f0 65 78 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  ex of the first 
12800 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 2a 2f  hidden column */
12810 0a 7d 3b 0a 73 74 72 75 63 74 20 50 72 61 67 6d  .};.struct Pragm
12820 61 56 74 61 62 43 75 72 73 6f 72 20 7b 0a 20 20  aVtabCursor {.  
12830 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
12840 73 6f 72 20 62 61 73 65 3b 20 2f 2a 20 42 61 73  sor base; /* Bas
12850 65 20 63 6c 61 73 73 2e 20 20 4d 75 73 74 20 62  e class.  Must b
12860 65 20 66 69 72 73 74 20 2a 2f 0a 20 20 73 71 6c  e first */.  sql
12870 69 74 65 33 5f 73 74 6d 74 20 2a 70 50 72 61 67  ite3_stmt *pPrag
12880 6d 61 3b 20 20 20 20 2f 2a 20 54 68 65 20 70 72  ma;    /* The pr
12890 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 20 74  agma statement t
128a0 6f 20 72 75 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  o run */.  sqlit
128b0 65 5f 69 6e 74 36 34 20 69 52 6f 77 69 64 3b 20  e_int64 iRowid; 
128c0 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
128d0 72 6f 77 69 64 20 2a 2f 0a 20 20 63 68 61 72 20  rowid */.  char 
128e0 2a 61 7a 41 72 67 5b 32 5d 3b 20 20 20 20 20 20  *azArg[2];      
128f0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
12900 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 61 6e   the argument an
12910 64 20 73 63 68 65 6d 61 20 2a 2f 0a 7d 3b 0a 0a  d schema */.};..
12920 2f 2a 20 0a 2a 2a 20 50 72 61 67 6d 61 20 76 69  /* .** Pragma vi
12930 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75  rtual table modu
12940 6c 65 20 78 43 6f 6e 6e 65 63 74 20 6d 65 74 68  le xConnect meth
12950 6f 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  od..*/.static in
12960 74 20 70 72 61 67 6d 61 56 74 61 62 43 6f 6e 6e  t pragmaVtabConn
12970 65 63 74 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ect(.  sqlite3 *
12980 64 62 2c 0a 20 20 76 6f 69 64 20 2a 70 41 75 78  db,.  void *pAux
12990 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 63 6f  ,.  int argc, co
129a0 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 2a  nst char *const*
129b0 61 72 67 76 2c 0a 20 20 73 71 6c 69 74 65 33 5f  argv,.  sqlite3_
129c0 76 74 61 62 20 2a 2a 70 70 56 74 61 62 2c 0a 20  vtab **ppVtab,. 
129d0 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 0a 29 7b   char **pzErr.){
129e0 0a 20 20 63 6f 6e 73 74 20 50 72 61 67 6d 61 4e  .  const PragmaN
129f0 61 6d 65 20 2a 70 50 72 61 67 6d 61 20 3d 20 28  ame *pPragma = (
12a00 63 6f 6e 73 74 20 50 72 61 67 6d 61 4e 61 6d 65  const PragmaName
12a10 2a 29 70 41 75 78 3b 0a 20 20 50 72 61 67 6d 61  *)pAux;.  Pragma
12a20 56 74 61 62 20 2a 70 54 61 62 20 3d 20 30 3b 0a  Vtab *pTab = 0;.
12a30 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
12a40 69 2c 20 6a 3b 0a 20 20 63 68 61 72 20 63 53 65  i, j;.  char cSe
12a50 70 20 3d 20 27 28 27 3b 0a 20 20 53 74 72 41 63  p = '(';.  StrAc
12a60 63 75 6d 20 61 63 63 3b 0a 20 20 63 68 61 72 20  cum acc;.  char 
12a70 7a 42 75 66 5b 32 30 30 5d 3b 0a 0a 20 20 55 4e  zBuf[200];..  UN
12a80 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 61  USED_PARAMETER(a
12a90 72 67 63 29 3b 0a 20 20 55 4e 55 53 45 44 5f 50  rgc);.  UNUSED_P
12aa0 41 52 41 4d 45 54 45 52 28 61 72 67 76 29 3b 0a  ARAMETER(argv);.
12ab0 20 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75    sqlite3StrAccu
12ac0 6d 49 6e 69 74 28 26 61 63 63 2c 20 30 2c 20 7a  mInit(&acc, 0, z
12ad0 42 75 66 2c 20 73 69 7a 65 6f 66 28 7a 42 75 66  Buf, sizeof(zBuf
12ae0 29 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33  ), 0);.  sqlite3
12af0 5f 73 74 72 5f 61 70 70 65 6e 64 61 6c 6c 28 26  _str_appendall(&
12b00 61 63 63 2c 20 22 43 52 45 41 54 45 20 54 41 42  acc, "CREATE TAB
12b10 4c 45 20 78 22 29 3b 0a 20 20 66 6f 72 28 69 3d  LE x");.  for(i=
12b20 30 2c 20 6a 3d 70 50 72 61 67 6d 61 2d 3e 69 50  0, j=pPragma->iP
12b30 72 61 67 43 4e 61 6d 65 3b 20 69 3c 70 50 72 61  ragCName; i<pPra
12b40 67 6d 61 2d 3e 6e 50 72 61 67 43 4e 61 6d 65 3b  gma->nPragCName;
12b50 20 69 2b 2b 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20   i++, j++){.    
12b60 73 71 6c 69 74 65 33 5f 73 74 72 5f 61 70 70 65  sqlite3_str_appe
12b70 6e 64 66 28 26 61 63 63 2c 20 22 25 63 5c 22 25  ndf(&acc, "%c\"%
12b80 73 5c 22 22 2c 20 63 53 65 70 2c 20 70 72 61 67  s\"", cSep, prag
12b90 43 4e 61 6d 65 5b 6a 5d 29 3b 0a 20 20 20 20 63  CName[j]);.    c
12ba0 53 65 70 20 3d 20 27 2c 27 3b 0a 20 20 7d 0a 20  Sep = ',';.  }. 
12bb0 20 69 66 28 20 69 3d 3d 30 20 29 7b 0a 20 20 20   if( i==0 ){.   
12bc0 20 73 71 6c 69 74 65 33 5f 73 74 72 5f 61 70 70   sqlite3_str_app
12bd0 65 6e 64 66 28 26 61 63 63 2c 20 22 28 5c 22 25  endf(&acc, "(\"%
12be0 73 5c 22 22 2c 20 70 50 72 61 67 6d 61 2d 3e 7a  s\"", pPragma->z
12bf0 4e 61 6d 65 29 3b 0a 20 20 20 20 69 2b 2b 3b 0a  Name);.    i++;.
12c00 20 20 7d 0a 20 20 6a 20 3d 20 30 3b 0a 20 20 69    }.  j = 0;.  i
12c10 66 28 20 70 50 72 61 67 6d 61 2d 3e 6d 50 72 61  f( pPragma->mPra
12c20 67 46 6c 67 20 26 20 50 72 61 67 46 6c 67 5f 52  gFlg & PragFlg_R
12c30 65 73 75 6c 74 31 20 29 7b 0a 20 20 20 20 73 71  esult1 ){.    sq
12c40 6c 69 74 65 33 5f 73 74 72 5f 61 70 70 65 6e 64  lite3_str_append
12c50 61 6c 6c 28 26 61 63 63 2c 20 22 2c 61 72 67 20  all(&acc, ",arg 
12c60 48 49 44 44 45 4e 22 29 3b 0a 20 20 20 20 6a 2b  HIDDEN");.    j+
12c70 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 50 72  +;.  }.  if( pPr
12c80 61 67 6d 61 2d 3e 6d 50 72 61 67 46 6c 67 20 26  agma->mPragFlg &
12c90 20 28 50 72 61 67 46 6c 67 5f 53 63 68 65 6d 61   (PragFlg_Schema
12ca0 4f 70 74 7c 50 72 61 67 46 6c 67 5f 53 63 68 65  Opt|PragFlg_Sche
12cb0 6d 61 52 65 71 29 20 29 7b 0a 20 20 20 20 73 71  maReq) ){.    sq
12cc0 6c 69 74 65 33 5f 73 74 72 5f 61 70 70 65 6e 64  lite3_str_append
12cd0 61 6c 6c 28 26 61 63 63 2c 20 22 2c 73 63 68 65  all(&acc, ",sche
12ce0 6d 61 20 48 49 44 44 45 4e 22 29 3b 0a 20 20 20  ma HIDDEN");.   
12cf0 20 6a 2b 2b 3b 0a 20 20 7d 0a 20 20 73 71 6c 69   j++;.  }.  sqli
12d00 74 65 33 5f 73 74 72 5f 61 70 70 65 6e 64 28 26  te3_str_append(&
12d10 61 63 63 2c 20 22 29 22 2c 20 31 29 3b 0a 20 20  acc, ")", 1);.  
12d20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46  sqlite3StrAccumF
12d30 69 6e 69 73 68 28 26 61 63 63 29 3b 0a 20 20 61  inish(&acc);.  a
12d40 73 73 65 72 74 28 20 73 74 72 6c 65 6e 28 7a 42  ssert( strlen(zB
12d50 75 66 29 20 3c 20 73 69 7a 65 6f 66 28 7a 42 75  uf) < sizeof(zBu
12d60 66 29 2d 31 20 29 3b 0a 20 20 72 63 20 3d 20 73  f)-1 );.  rc = s
12d70 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
12d80 74 61 62 28 64 62 2c 20 7a 42 75 66 29 3b 0a 20  tab(db, zBuf);. 
12d90 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
12da0 4f 4b 20 29 7b 0a 20 20 20 20 70 54 61 62 20 3d  OK ){.    pTab =
12db0 20 28 50 72 61 67 6d 61 56 74 61 62 2a 29 73 71   (PragmaVtab*)sq
12dc0 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 73 69 7a  lite3_malloc(siz
12dd0 65 6f 66 28 50 72 61 67 6d 61 56 74 61 62 29 29  eof(PragmaVtab))
12de0 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 3d 3d  ;.    if( pTab==
12df0 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
12e00 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
12e10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d    }else{.      m
12e20 65 6d 73 65 74 28 70 54 61 62 2c 20 30 2c 20 73  emset(pTab, 0, s
12e30 69 7a 65 6f 66 28 50 72 61 67 6d 61 56 74 61 62  izeof(PragmaVtab
12e40 29 29 3b 0a 20 20 20 20 20 20 70 54 61 62 2d 3e  ));.      pTab->
12e50 70 4e 61 6d 65 20 3d 20 70 50 72 61 67 6d 61 3b  pName = pPragma;
12e60 0a 20 20 20 20 20 20 70 54 61 62 2d 3e 64 62 20  .      pTab->db 
12e70 3d 20 64 62 3b 0a 20 20 20 20 20 20 70 54 61 62  = db;.      pTab
12e80 2d 3e 69 48 69 64 64 65 6e 20 3d 20 69 3b 0a 20  ->iHidden = i;. 
12e90 20 20 20 20 20 70 54 61 62 2d 3e 6e 48 69 64 64       pTab->nHidd
12ea0 65 6e 20 3d 20 6a 3b 0a 20 20 20 20 7d 0a 20 20  en = j;.    }.  
12eb0 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 70 7a 45 72  }else{.    *pzEr
12ec0 72 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  r = sqlite3_mpri
12ed0 6e 74 66 28 22 25 73 22 2c 20 73 71 6c 69 74 65  ntf("%s", sqlite
12ee0 33 5f 65 72 72 6d 73 67 28 64 62 29 29 3b 0a 20  3_errmsg(db));. 
12ef0 20 7d 0a 0a 20 20 2a 70 70 56 74 61 62 20 3d 20   }..  *ppVtab = 
12f00 28 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 70  (sqlite3_vtab*)p
12f10 54 61 62 3b 0a 20 20 72 65 74 75 72 6e 20 72 63  Tab;.  return rc
12f20 3b 0a 7d 0a 0a 2f 2a 20 0a 2a 2a 20 50 72 61 67  ;.}../* .** Prag
12f30 6d 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ma virtual table
12f40 20 6d 6f 64 75 6c 65 20 78 44 69 73 63 6f 6e 6e   module xDisconn
12f50 65 63 74 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 73  ect method..*/.s
12f60 74 61 74 69 63 20 69 6e 74 20 70 72 61 67 6d 61  tatic int pragma
12f70 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73  VtabDisconnect(s
12f80 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
12f90 61 62 29 7b 0a 20 20 50 72 61 67 6d 61 56 74 61  ab){.  PragmaVta
12fa0 62 20 2a 70 54 61 62 20 3d 20 28 50 72 61 67 6d  b *pTab = (Pragm
12fb0 61 56 74 61 62 2a 29 70 56 74 61 62 3b 0a 20 20  aVtab*)pVtab;.  
12fc0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 54 61  sqlite3_free(pTa
12fd0 62 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  b);.  return SQL
12fe0 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 20 46 69  ITE_OK;.}../* Fi
12ff0 67 75 72 65 20 6f 75 74 20 74 68 65 20 62 65 73  gure out the bes
13000 74 20 69 6e 64 65 78 20 74 6f 20 75 73 65 20 74  t index to use t
13010 6f 20 73 65 61 72 63 68 20 61 20 70 72 61 67 6d  o search a pragm
13020 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
13030 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 61 72 65  .**.** There are
13040 20 6e 6f 74 20 72 65 61 6c 6c 79 20 61 6e 79 20   not really any 
13050 69 6e 64 65 78 20 63 68 6f 69 63 65 73 2e 20 20  index choices.  
13060 42 75 74 20 77 65 20 77 61 6e 74 20 74 6f 20 65  But we want to e
13070 6e 63 6f 75 72 61 67 65 20 74 68 65 0a 2a 2a 20  ncourage the.** 
13080 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f  query planner to
13090 20 67 69 76 65 20 3d 3d 20 63 6f 6e 73 74 72 61   give == constra
130a0 69 6e 74 73 20 6f 6e 20 61 73 20 6d 61 6e 79 20  ints on as many 
130b0 68 69 64 64 65 6e 20 70 61 72 61 6d 65 74 65 72  hidden parameter
130c0 73 20 61 73 0a 2a 2a 20 70 6f 73 73 69 62 6c 65  s as.** possible
130d0 2c 20 61 6e 64 20 65 73 70 65 63 69 61 6c 6c 79  , and especially
130e0 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 68 69   on the first hi
130f0 64 64 65 6e 20 70 61 72 61 6d 65 74 65 72 2e 20  dden parameter. 
13100 20 53 6f 20 72 65 74 75 72 6e 20 61 0a 2a 2a 20   So return a.** 
13110 68 69 67 68 20 63 6f 73 74 20 69 66 20 68 69 64  high cost if hid
13120 64 65 6e 20 70 61 72 61 6d 65 74 65 72 73 20 61  den parameters a
13130 72 65 20 75 6e 63 6f 6e 73 74 72 61 69 6e 65 64  re unconstrained
13140 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
13150 70 72 61 67 6d 61 56 74 61 62 42 65 73 74 49 6e  pragmaVtabBestIn
13160 64 65 78 28 73 71 6c 69 74 65 33 5f 76 74 61 62  dex(sqlite3_vtab
13170 20 2a 74 61 62 2c 20 73 71 6c 69 74 65 33 5f 69   *tab, sqlite3_i
13180 6e 64 65 78 5f 69 6e 66 6f 20 2a 70 49 64 78 49  ndex_info *pIdxI
13190 6e 66 6f 29 7b 0a 20 20 50 72 61 67 6d 61 56 74  nfo){.  PragmaVt
131a0 61 62 20 2a 70 54 61 62 20 3d 20 28 50 72 61 67  ab *pTab = (Prag
131b0 6d 61 56 74 61 62 2a 29 74 61 62 3b 0a 20 20 63  maVtab*)tab;.  c
131c0 6f 6e 73 74 20 73 74 72 75 63 74 20 73 71 6c 69  onst struct sqli
131d0 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72  te3_index_constr
131e0 61 69 6e 74 20 2a 70 43 6f 6e 73 74 72 61 69 6e  aint *pConstrain
131f0 74 3b 0a 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20  t;.  int i, j;. 
13200 20 69 6e 74 20 73 65 65 6e 5b 32 5d 3b 0a 0a 20   int seen[2];.. 
13210 20 70 49 64 78 49 6e 66 6f 2d 3e 65 73 74 69 6d   pIdxInfo->estim
13220 61 74 65 64 43 6f 73 74 20 3d 20 28 64 6f 75 62  atedCost = (doub
13230 6c 65 29 31 3b 0a 20 20 69 66 28 20 70 54 61 62  le)1;.  if( pTab
13240 2d 3e 6e 48 69 64 64 65 6e 3d 3d 30 20 29 7b 20  ->nHidden==0 ){ 
13250 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
13260 3b 20 7d 0a 20 20 70 43 6f 6e 73 74 72 61 69 6e  ; }.  pConstrain
13270 74 20 3d 20 70 49 64 78 49 6e 66 6f 2d 3e 61 43  t = pIdxInfo->aC
13280 6f 6e 73 74 72 61 69 6e 74 3b 0a 20 20 73 65 65  onstraint;.  see
13290 6e 5b 30 5d 20 3d 20 30 3b 0a 20 20 73 65 65 6e  n[0] = 0;.  seen
132a0 5b 31 5d 20 3d 20 30 3b 0a 20 20 66 6f 72 28 69  [1] = 0;.  for(i
132b0 3d 30 3b 20 69 3c 70 49 64 78 49 6e 66 6f 2d 3e  =0; i<pIdxInfo->
132c0 6e 43 6f 6e 73 74 72 61 69 6e 74 3b 20 69 2b 2b  nConstraint; i++
132d0 2c 20 70 43 6f 6e 73 74 72 61 69 6e 74 2b 2b 29  , pConstraint++)
132e0 7b 0a 20 20 20 20 69 66 28 20 70 43 6f 6e 73 74  {.    if( pConst
132f0 72 61 69 6e 74 2d 3e 75 73 61 62 6c 65 3d 3d 30  raint->usable==0
13300 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
13310 20 69 66 28 20 70 43 6f 6e 73 74 72 61 69 6e 74   if( pConstraint
13320 2d 3e 6f 70 21 3d 53 51 4c 49 54 45 5f 49 4e 44  ->op!=SQLITE_IND
13330 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 45 51  EX_CONSTRAINT_EQ
13340 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
13350 20 69 66 28 20 70 43 6f 6e 73 74 72 61 69 6e 74   if( pConstraint
13360 2d 3e 69 43 6f 6c 75 6d 6e 20 3c 20 70 54 61 62  ->iColumn < pTab
13370 2d 3e 69 48 69 64 64 65 6e 20 29 20 63 6f 6e 74  ->iHidden ) cont
13380 69 6e 75 65 3b 0a 20 20 20 20 6a 20 3d 20 70 43  inue;.    j = pC
13390 6f 6e 73 74 72 61 69 6e 74 2d 3e 69 43 6f 6c 75  onstraint->iColu
133a0 6d 6e 20 2d 20 70 54 61 62 2d 3e 69 48 69 64 64  mn - pTab->iHidd
133b0 65 6e 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  en;.    assert( 
133c0 6a 20 3c 20 32 20 29 3b 0a 20 20 20 20 73 65 65  j < 2 );.    see
133d0 6e 5b 6a 5d 20 3d 20 69 2b 31 3b 0a 20 20 7d 0a  n[j] = i+1;.  }.
133e0 20 20 69 66 28 20 73 65 65 6e 5b 30 5d 3d 3d 30    if( seen[0]==0
133f0 20 29 7b 0a 20 20 20 20 70 49 64 78 49 6e 66 6f   ){.    pIdxInfo
13400 2d 3e 65 73 74 69 6d 61 74 65 64 43 6f 73 74 20  ->estimatedCost 
13410 3d 20 28 64 6f 75 62 6c 65 29 32 31 34 37 34 38  = (double)214748
13420 33 36 34 37 3b 0a 20 20 20 20 70 49 64 78 49 6e  3647;.    pIdxIn
13430 66 6f 2d 3e 65 73 74 69 6d 61 74 65 64 52 6f 77  fo->estimatedRow
13440 73 20 3d 20 32 31 34 37 34 38 33 36 34 37 3b 0a  s = 2147483647;.
13450 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
13460 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 6a 20 3d 20  E_OK;.  }.  j = 
13470 73 65 65 6e 5b 30 5d 2d 31 3b 0a 20 20 70 49 64  seen[0]-1;.  pId
13480 78 49 6e 66 6f 2d 3e 61 43 6f 6e 73 74 72 61 69  xInfo->aConstrai
13490 6e 74 55 73 61 67 65 5b 6a 5d 2e 61 72 67 76 49  ntUsage[j].argvI
134a0 6e 64 65 78 20 3d 20 31 3b 0a 20 20 70 49 64 78  ndex = 1;.  pIdx
134b0 49 6e 66 6f 2d 3e 61 43 6f 6e 73 74 72 61 69 6e  Info->aConstrain
134c0 74 55 73 61 67 65 5b 6a 5d 2e 6f 6d 69 74 20 3d  tUsage[j].omit =
134d0 20 31 3b 0a 20 20 69 66 28 20 73 65 65 6e 5b 31   1;.  if( seen[1
134e0 5d 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 53 51  ]==0 ) return SQ
134f0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 49 64 78 49  LITE_OK;.  pIdxI
13500 6e 66 6f 2d 3e 65 73 74 69 6d 61 74 65 64 43 6f  nfo->estimatedCo
13510 73 74 20 3d 20 28 64 6f 75 62 6c 65 29 32 30 3b  st = (double)20;
13520 0a 20 20 70 49 64 78 49 6e 66 6f 2d 3e 65 73 74  .  pIdxInfo->est
13530 69 6d 61 74 65 64 52 6f 77 73 20 3d 20 32 30 3b  imatedRows = 20;
13540 0a 20 20 6a 20 3d 20 73 65 65 6e 5b 31 5d 2d 31  .  j = seen[1]-1
13550 3b 0a 20 20 70 49 64 78 49 6e 66 6f 2d 3e 61 43  ;.  pIdxInfo->aC
13560 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 5b 6a  onstraintUsage[j
13570 5d 2e 61 72 67 76 49 6e 64 65 78 20 3d 20 32 3b  ].argvIndex = 2;
13580 0a 20 20 70 49 64 78 49 6e 66 6f 2d 3e 61 43 6f  .  pIdxInfo->aCo
13590 6e 73 74 72 61 69 6e 74 55 73 61 67 65 5b 6a 5d  nstraintUsage[j]
135a0 2e 6f 6d 69 74 20 3d 20 31 3b 0a 20 20 72 65 74  .omit = 1;.  ret
135b0 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
135c0 0a 0a 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65  ../* Create a ne
135d0 77 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65  w cursor for the
135e0 20 70 72 61 67 6d 61 20 76 69 72 74 75 61 6c 20   pragma virtual 
135f0 74 61 62 6c 65 20 2a 2f 0a 73 74 61 74 69 63 20  table */.static 
13600 69 6e 74 20 70 72 61 67 6d 61 56 74 61 62 4f 70  int pragmaVtabOp
13610 65 6e 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20  en(sqlite3_vtab 
13620 2a 70 56 74 61 62 2c 20 73 71 6c 69 74 65 33 5f  *pVtab, sqlite3_
13630 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 2a 70 70  vtab_cursor **pp
13640 43 75 72 73 6f 72 29 7b 0a 20 20 50 72 61 67 6d  Cursor){.  Pragm
13650 61 56 74 61 62 43 75 72 73 6f 72 20 2a 70 43 73  aVtabCursor *pCs
13660 72 3b 0a 20 20 70 43 73 72 20 3d 20 28 50 72 61  r;.  pCsr = (Pra
13670 67 6d 61 56 74 61 62 43 75 72 73 6f 72 2a 29 73  gmaVtabCursor*)s
13680 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 73 69  qlite3_malloc(si
13690 7a 65 6f 66 28 2a 70 43 73 72 29 29 3b 0a 20 20  zeof(*pCsr));.  
136a0 69 66 28 20 70 43 73 72 3d 3d 30 20 29 20 72 65  if( pCsr==0 ) re
136b0 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  turn SQLITE_NOME
136c0 4d 3b 0a 20 20 6d 65 6d 73 65 74 28 70 43 73 72  M;.  memset(pCsr
136d0 2c 20 30 2c 20 73 69 7a 65 6f 66 28 50 72 61 67  , 0, sizeof(Prag
136e0 6d 61 56 74 61 62 43 75 72 73 6f 72 29 29 3b 0a  maVtabCursor));.
136f0 20 20 70 43 73 72 2d 3e 62 61 73 65 2e 70 56 74    pCsr->base.pVt
13700 61 62 20 3d 20 70 56 74 61 62 3b 0a 20 20 2a 70  ab = pVtab;.  *p
13710 70 43 75 72 73 6f 72 20 3d 20 26 70 43 73 72 2d  pCursor = &pCsr-
13720 3e 62 61 73 65 3b 0a 20 20 72 65 74 75 72 6e 20  >base;.  return 
13730 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  SQLITE_OK;.}../*
13740 20 43 6c 65 61 72 20 61 6c 6c 20 63 6f 6e 74 65   Clear all conte
13750 6e 74 20 66 72 6f 6d 20 70 72 61 67 6d 61 20 76  nt from pragma v
13760 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72  irtual table cur
13770 73 6f 72 2e 20 2a 2f 0a 73 74 61 74 69 63 20 76  sor. */.static v
13780 6f 69 64 20 70 72 61 67 6d 61 56 74 61 62 43 75  oid pragmaVtabCu
13790 72 73 6f 72 43 6c 65 61 72 28 50 72 61 67 6d 61  rsorClear(Pragma
137a0 56 74 61 62 43 75 72 73 6f 72 20 2a 70 43 73 72  VtabCursor *pCsr
137b0 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71  ){.  int i;.  sq
137c0 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70  lite3_finalize(p
137d0 43 73 72 2d 3e 70 50 72 61 67 6d 61 29 3b 0a 20  Csr->pPragma);. 
137e0 20 70 43 73 72 2d 3e 70 50 72 61 67 6d 61 20 3d   pCsr->pPragma =
137f0 20 30 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   0;.  for(i=0; i
13800 3c 41 72 72 61 79 53 69 7a 65 28 70 43 73 72 2d  <ArraySize(pCsr-
13810 3e 61 7a 41 72 67 29 3b 20 69 2b 2b 29 7b 0a 20  >azArg); i++){. 
13820 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
13830 70 43 73 72 2d 3e 61 7a 41 72 67 5b 69 5d 29 3b  pCsr->azArg[i]);
13840 0a 20 20 20 20 70 43 73 72 2d 3e 61 7a 41 72 67  .    pCsr->azArg
13850 5b 69 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 0a  [i] = 0;.  }.}..
13860 2f 2a 20 43 6c 6f 73 65 20 61 20 70 72 61 67 6d  /* Close a pragm
13870 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
13880 63 75 72 73 6f 72 20 2a 2f 0a 73 74 61 74 69 63  cursor */.static
13890 20 69 6e 74 20 70 72 61 67 6d 61 56 74 61 62 43   int pragmaVtabC
138a0 6c 6f 73 65 28 73 71 6c 69 74 65 33 5f 76 74 61  lose(sqlite3_vta
138b0 62 5f 63 75 72 73 6f 72 20 2a 63 75 72 29 7b 0a  b_cursor *cur){.
138c0 20 20 50 72 61 67 6d 61 56 74 61 62 43 75 72 73    PragmaVtabCurs
138d0 6f 72 20 2a 70 43 73 72 20 3d 20 28 50 72 61 67  or *pCsr = (Prag
138e0 6d 61 56 74 61 62 43 75 72 73 6f 72 2a 29 63 75  maVtabCursor*)cu
138f0 72 3b 0a 20 20 70 72 61 67 6d 61 56 74 61 62 43  r;.  pragmaVtabC
13900 75 72 73 6f 72 43 6c 65 61 72 28 70 43 73 72 29  ursorClear(pCsr)
13910 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
13920 28 70 43 73 72 29 3b 0a 20 20 72 65 74 75 72 6e  (pCsr);.  return
13930 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f   SQLITE_OK;.}../
13940 2a 20 41 64 76 61 6e 63 65 20 74 68 65 20 70 72  * Advance the pr
13950 61 67 6d 61 20 76 69 72 74 75 61 6c 20 74 61 62  agma virtual tab
13960 6c 65 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65  le cursor to the
13970 20 6e 65 78 74 20 72 6f 77 20 2a 2f 0a 73 74 61   next row */.sta
13980 74 69 63 20 69 6e 74 20 70 72 61 67 6d 61 56 74  tic int pragmaVt
13990 61 62 4e 65 78 74 28 73 71 6c 69 74 65 33 5f 76  abNext(sqlite3_v
139a0 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61  tab_cursor *pVta
139b0 62 43 75 72 73 6f 72 29 7b 0a 20 20 50 72 61 67  bCursor){.  Prag
139c0 6d 61 56 74 61 62 43 75 72 73 6f 72 20 2a 70 43  maVtabCursor *pC
139d0 73 72 20 3d 20 28 50 72 61 67 6d 61 56 74 61 62  sr = (PragmaVtab
139e0 43 75 72 73 6f 72 2a 29 70 56 74 61 62 43 75 72  Cursor*)pVtabCur
139f0 73 6f 72 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20  sor;.  int rc = 
13a00 53 51 4c 49 54 45 5f 4f 4b 3b 0a 0a 20 20 2f 2a  SQLITE_OK;..  /*
13a10 20 49 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 78   Increment the x
13a20 52 6f 77 69 64 20 76 61 6c 75 65 20 2a 2f 0a 20  Rowid value */. 
13a30 20 70 43 73 72 2d 3e 69 52 6f 77 69 64 2b 2b 3b   pCsr->iRowid++;
13a40 0a 20 20 61 73 73 65 72 74 28 20 70 43 73 72 2d  .  assert( pCsr-
13a50 3e 70 50 72 61 67 6d 61 20 29 3b 0a 20 20 69 66  >pPragma );.  if
13a60 28 20 53 51 4c 49 54 45 5f 52 4f 57 21 3d 73 71  ( SQLITE_ROW!=sq
13a70 6c 69 74 65 33 5f 73 74 65 70 28 70 43 73 72 2d  lite3_step(pCsr-
13a80 3e 70 50 72 61 67 6d 61 29 20 29 7b 0a 20 20 20  >pPragma) ){.   
13a90 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69   rc = sqlite3_fi
13aa0 6e 61 6c 69 7a 65 28 70 43 73 72 2d 3e 70 50 72  nalize(pCsr->pPr
13ab0 61 67 6d 61 29 3b 0a 20 20 20 20 70 43 73 72 2d  agma);.    pCsr-
13ac0 3e 70 50 72 61 67 6d 61 20 3d 20 30 3b 0a 20 20  >pPragma = 0;.  
13ad0 20 20 70 72 61 67 6d 61 56 74 61 62 43 75 72 73    pragmaVtabCurs
13ae0 6f 72 43 6c 65 61 72 28 70 43 73 72 29 3b 0a 20  orClear(pCsr);. 
13af0 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
13b00 7d 0a 0a 2f 2a 20 0a 2a 2a 20 50 72 61 67 6d 61  }../* .** Pragma
13b10 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d   virtual table m
13b20 6f 64 75 6c 65 20 78 46 69 6c 74 65 72 20 6d 65  odule xFilter me
13b30 74 68 6f 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  thod..*/.static 
13b40 69 6e 74 20 70 72 61 67 6d 61 56 74 61 62 46 69  int pragmaVtabFi
13b50 6c 74 65 72 28 0a 20 20 73 71 6c 69 74 65 33 5f  lter(.  sqlite3_
13b60 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74  vtab_cursor *pVt
13b70 61 62 43 75 72 73 6f 72 2c 20 0a 20 20 69 6e 74  abCursor, .  int
13b80 20 69 64 78 4e 75 6d 2c 20 63 6f 6e 73 74 20 63   idxNum, const c
13b90 68 61 72 20 2a 69 64 78 53 74 72 2c 0a 20 20 69  har *idxStr,.  i
13ba0 6e 74 20 61 72 67 63 2c 20 73 71 6c 69 74 65 33  nt argc, sqlite3
13bb0 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b  _value **argv.){
13bc0 0a 20 20 50 72 61 67 6d 61 56 74 61 62 43 75 72  .  PragmaVtabCur
13bd0 73 6f 72 20 2a 70 43 73 72 20 3d 20 28 50 72 61  sor *pCsr = (Pra
13be0 67 6d 61 56 74 61 62 43 75 72 73 6f 72 2a 29 70  gmaVtabCursor*)p
13bf0 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 50 72  VtabCursor;.  Pr
13c00 61 67 6d 61 56 74 61 62 20 2a 70 54 61 62 20 3d  agmaVtab *pTab =
13c10 20 28 50 72 61 67 6d 61 56 74 61 62 2a 29 28 70   (PragmaVtab*)(p
13c20 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
13c30 62 29 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  b);.  int rc;.  
13c40 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 53 74 72 41  int i, j;.  StrA
13c50 63 63 75 6d 20 61 63 63 3b 0a 20 20 63 68 61 72  ccum acc;.  char
13c60 20 2a 7a 53 71 6c 3b 0a 0a 20 20 55 4e 55 53 45   *zSql;..  UNUSE
13c70 44 5f 50 41 52 41 4d 45 54 45 52 28 69 64 78 4e  D_PARAMETER(idxN
13c80 75 6d 29 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41  um);.  UNUSED_PA
13c90 52 41 4d 45 54 45 52 28 69 64 78 53 74 72 29 3b  RAMETER(idxStr);
13ca0 0a 20 20 70 72 61 67 6d 61 56 74 61 62 43 75 72  .  pragmaVtabCur
13cb0 73 6f 72 43 6c 65 61 72 28 70 43 73 72 29 3b 0a  sorClear(pCsr);.
13cc0 20 20 6a 20 3d 20 28 70 54 61 62 2d 3e 70 4e 61    j = (pTab->pNa
13cd0 6d 65 2d 3e 6d 50 72 61 67 46 6c 67 20 26 20 50  me->mPragFlg & P
13ce0 72 61 67 46 6c 67 5f 52 65 73 75 6c 74 31 29 21  ragFlg_Result1)!
13cf0 3d 30 20 3f 20 30 20 3a 20 31 3b 0a 20 20 66 6f  =0 ? 0 : 1;.  fo
13d00 72 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69  r(i=0; i<argc; i
13d10 2b 2b 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 63 6f  ++, j++){.    co
13d20 6e 73 74 20 63 68 61 72 20 2a 7a 54 65 78 74 20  nst char *zText 
13d30 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73  = (const char*)s
13d40 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
13d50 74 28 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20  t(argv[i]);.    
13d60 61 73 73 65 72 74 28 20 6a 3c 41 72 72 61 79 53  assert( j<ArrayS
13d70 69 7a 65 28 70 43 73 72 2d 3e 61 7a 41 72 67 29  ize(pCsr->azArg)
13d80 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
13d90 70 43 73 72 2d 3e 61 7a 41 72 67 5b 6a 5d 3d 3d  pCsr->azArg[j]==
13da0 30 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 54 65  0 );.    if( zTe
13db0 78 74 20 29 7b 0a 20 20 20 20 20 20 70 43 73 72  xt ){.      pCsr
13dc0 2d 3e 61 7a 41 72 67 5b 6a 5d 20 3d 20 73 71 6c  ->azArg[j] = sql
13dd0 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
13de0 22 2c 20 7a 54 65 78 74 29 3b 0a 20 20 20 20 20  ", zText);.     
13df0 20 69 66 28 20 70 43 73 72 2d 3e 61 7a 41 72 67   if( pCsr->azArg
13e00 5b 6a 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  [j]==0 ){.      
13e10 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
13e20 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20 7d 0a 20  NOMEM;.      }. 
13e30 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74     }.  }.  sqlit
13e40 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 26  e3StrAccumInit(&
13e50 61 63 63 2c 20 30 2c 20 30 2c 20 30 2c 20 70 54  acc, 0, 0, 0, pT
13e60 61 62 2d 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  ab->db->aLimit[S
13e70 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 53 51 4c 5f  QLITE_LIMIT_SQL_
13e80 4c 45 4e 47 54 48 5d 29 3b 0a 20 20 73 71 6c 69  LENGTH]);.  sqli
13e90 74 65 33 5f 73 74 72 5f 61 70 70 65 6e 64 61 6c  te3_str_appendal
13ea0 6c 28 26 61 63 63 2c 20 22 50 52 41 47 4d 41 20  l(&acc, "PRAGMA 
13eb0 22 29 3b 0a 20 20 69 66 28 20 70 43 73 72 2d 3e  ");.  if( pCsr->
13ec0 61 7a 41 72 67 5b 31 5d 20 29 7b 0a 20 20 20 20  azArg[1] ){.    
13ed0 73 71 6c 69 74 65 33 5f 73 74 72 5f 61 70 70 65  sqlite3_str_appe
13ee0 6e 64 66 28 26 61 63 63 2c 20 22 25 51 2e 22 2c  ndf(&acc, "%Q.",
13ef0 20 70 43 73 72 2d 3e 61 7a 41 72 67 5b 31 5d 29   pCsr->azArg[1])
13f00 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ;.  }.  sqlite3_
13f10 73 74 72 5f 61 70 70 65 6e 64 61 6c 6c 28 26 61  str_appendall(&a
13f20 63 63 2c 20 70 54 61 62 2d 3e 70 4e 61 6d 65 2d  cc, pTab->pName-
13f30 3e 7a 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 70  >zName);.  if( p
13f40 43 73 72 2d 3e 61 7a 41 72 67 5b 30 5d 20 29 7b  Csr->azArg[0] ){
13f50 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 72  .    sqlite3_str
13f60 5f 61 70 70 65 6e 64 66 28 26 61 63 63 2c 20 22  _appendf(&acc, "
13f70 3d 25 51 22 2c 20 70 43 73 72 2d 3e 61 7a 41 72  =%Q", pCsr->azAr
13f80 67 5b 30 5d 29 3b 0a 20 20 7d 0a 20 20 7a 53 71  g[0]);.  }.  zSq
13f90 6c 20 3d 20 73 71 6c 69 74 65 33 53 74 72 41 63  l = sqlite3StrAc
13fa0 63 75 6d 46 69 6e 69 73 68 28 26 61 63 63 29 3b  cumFinish(&acc);
13fb0 0a 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29  .  if( zSql==0 )
13fc0 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e   return SQLITE_N
13fd0 4f 4d 45 4d 3b 0a 20 20 72 63 20 3d 20 73 71 6c  OMEM;.  rc = sql
13fe0 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
13ff0 70 54 61 62 2d 3e 64 62 2c 20 7a 53 71 6c 2c 20  pTab->db, zSql, 
14000 2d 31 2c 20 26 70 43 73 72 2d 3e 70 50 72 61 67  -1, &pCsr->pPrag
14010 6d 61 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65  ma, 0);.  sqlite
14020 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20  3_free(zSql);.  
14030 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
14040 4b 20 29 7b 0a 20 20 20 20 70 54 61 62 2d 3e 62  K ){.    pTab->b
14050 61 73 65 2e 7a 45 72 72 4d 73 67 20 3d 20 73 71  ase.zErrMsg = sq
14060 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25  lite3_mprintf("%
14070 73 22 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  s", sqlite3_errm
14080 73 67 28 70 54 61 62 2d 3e 64 62 29 29 3b 0a 20  sg(pTab->db));. 
14090 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20     return rc;.  
140a0 7d 0a 20 20 72 65 74 75 72 6e 20 70 72 61 67 6d  }.  return pragm
140b0 61 56 74 61 62 4e 65 78 74 28 70 56 74 61 62 43  aVtabNext(pVtabC
140c0 75 72 73 6f 72 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ursor);.}../*.**
140d0 20 50 72 61 67 6d 61 20 76 69 72 74 75 61 6c 20   Pragma virtual 
140e0 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 78 45 6f  table module xEo
140f0 66 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 73 74 61  f method..*/.sta
14100 74 69 63 20 69 6e 74 20 70 72 61 67 6d 61 56 74  tic int pragmaVt
14110 61 62 45 6f 66 28 73 71 6c 69 74 65 33 5f 76 74  abEof(sqlite3_vt
14120 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62  ab_cursor *pVtab
14130 43 75 72 73 6f 72 29 7b 0a 20 20 50 72 61 67 6d  Cursor){.  Pragm
14140 61 56 74 61 62 43 75 72 73 6f 72 20 2a 70 43 73  aVtabCursor *pCs
14150 72 20 3d 20 28 50 72 61 67 6d 61 56 74 61 62 43  r = (PragmaVtabC
14160 75 72 73 6f 72 2a 29 70 56 74 61 62 43 75 72 73  ursor*)pVtabCurs
14170 6f 72 3b 0a 20 20 72 65 74 75 72 6e 20 28 70 43  or;.  return (pC
14180 73 72 2d 3e 70 50 72 61 67 6d 61 3d 3d 30 29 3b  sr->pPragma==0);
14190 0a 7d 0a 0a 2f 2a 20 54 68 65 20 78 43 6f 6c 75  .}../* The xColu
141a0 6d 6e 20 6d 65 74 68 6f 64 20 73 69 6d 70 6c 79  mn method simply
141b0 20 72 65 74 75 72 6e 73 20 74 68 65 20 63 6f 72   returns the cor
141c0 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d  responding colum
141d0 6e 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 50 52  n from.** the PR
141e0 41 47 4d 41 2e 20 20 0a 2a 2f 0a 73 74 61 74 69  AGMA.  .*/.stati
141f0 63 20 69 6e 74 20 70 72 61 67 6d 61 56 74 61 62  c int pragmaVtab
14200 43 6f 6c 75 6d 6e 28 0a 20 20 73 71 6c 69 74 65  Column(.  sqlite
14210 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
14220 56 74 61 62 43 75 72 73 6f 72 2c 20 0a 20 20 73  VtabCursor, .  s
14230 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
14240 63 74 78 2c 20 0a 20 20 69 6e 74 20 69 0a 29 7b  ctx, .  int i.){
14250 0a 20 20 50 72 61 67 6d 61 56 74 61 62 43 75 72  .  PragmaVtabCur
14260 73 6f 72 20 2a 70 43 73 72 20 3d 20 28 50 72 61  sor *pCsr = (Pra
14270 67 6d 61 56 74 61 62 43 75 72 73 6f 72 2a 29 70  gmaVtabCursor*)p
14280 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 50 72  VtabCursor;.  Pr
14290 61 67 6d 61 56 74 61 62 20 2a 70 54 61 62 20 3d  agmaVtab *pTab =
142a0 20 28 50 72 61 67 6d 61 56 74 61 62 2a 29 28 70   (PragmaVtab*)(p
142b0 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
142c0 62 29 3b 0a 20 20 69 66 28 20 69 3c 70 54 61 62  b);.  if( i<pTab
142d0 2d 3e 69 48 69 64 64 65 6e 20 29 7b 0a 20 20 20  ->iHidden ){.   
142e0 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
142f0 76 61 6c 75 65 28 63 74 78 2c 20 73 71 6c 69 74  value(ctx, sqlit
14300 65 33 5f 63 6f 6c 75 6d 6e 5f 76 61 6c 75 65 28  e3_column_value(
14310 70 43 73 72 2d 3e 70 50 72 61 67 6d 61 2c 20 69  pCsr->pPragma, i
14320 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ));.  }else{.   
14330 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
14340 74 65 78 74 28 63 74 78 2c 20 70 43 73 72 2d 3e  text(ctx, pCsr->
14350 61 7a 41 72 67 5b 69 2d 70 54 61 62 2d 3e 69 48  azArg[i-pTab->iH
14360 69 64 64 65 6e 5d 2c 2d 31 2c 53 51 4c 49 54 45  idden],-1,SQLITE
14370 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 7d  _TRANSIENT);.  }
14380 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
14390 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 20 0a 2a 2a 20 50  _OK;.}../* .** P
143a0 72 61 67 6d 61 20 76 69 72 74 75 61 6c 20 74 61  ragma virtual ta
143b0 62 6c 65 20 6d 6f 64 75 6c 65 20 78 52 6f 77 69  ble module xRowi
143c0 64 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 73 74 61  d method..*/.sta
143d0 74 69 63 20 69 6e 74 20 70 72 61 67 6d 61 56 74  tic int pragmaVt
143e0 61 62 52 6f 77 69 64 28 73 71 6c 69 74 65 33 5f  abRowid(sqlite3_
143f0 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74  vtab_cursor *pVt
14400 61 62 43 75 72 73 6f 72 2c 20 73 71 6c 69 74 65  abCursor, sqlite
14410 5f 69 6e 74 36 34 20 2a 70 29 7b 0a 20 20 50 72  _int64 *p){.  Pr
14420 61 67 6d 61 56 74 61 62 43 75 72 73 6f 72 20 2a  agmaVtabCursor *
14430 70 43 73 72 20 3d 20 28 50 72 61 67 6d 61 56 74  pCsr = (PragmaVt
14440 61 62 43 75 72 73 6f 72 2a 29 70 56 74 61 62 43  abCursor*)pVtabC
14450 75 72 73 6f 72 3b 0a 20 20 2a 70 20 3d 20 70 43  ursor;.  *p = pC
14460 73 72 2d 3e 69 52 6f 77 69 64 3b 0a 20 20 72 65  sr->iRowid;.  re
14470 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
14480 7d 0a 0a 2f 2a 20 54 68 65 20 70 72 61 67 6d 61  }../* The pragma
14490 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
144a0 62 6a 65 63 74 20 2a 2f 0a 73 74 61 74 69 63 20  bject */.static 
144b0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
144c0 64 75 6c 65 20 70 72 61 67 6d 61 56 74 61 62 4d  dule pragmaVtabM
144d0 6f 64 75 6c 65 20 3d 20 7b 0a 20 20 30 2c 20 20  odule = {.  0,  
144e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144f0 20 20 20 20 20 20 20 20 20 2f 2a 20 69 56 65 72           /* iVer
14500 73 69 6f 6e 20 2a 2f 0a 20 20 30 2c 20 20 20 20  sion */.  0,    
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14520 20 20 20 20 20 20 20 2f 2a 20 78 43 72 65 61 74         /* xCreat
14530 65 20 2d 20 63 72 65 61 74 65 20 61 20 74 61 62  e - create a tab
14540 6c 65 20 2a 2f 0a 20 20 70 72 61 67 6d 61 56 74  le */.  pragmaVt
14550 61 62 43 6f 6e 6e 65 63 74 2c 20 20 20 20 20 20  abConnect,      
14560 20 20 20 20 20 2f 2a 20 78 43 6f 6e 6e 65 63 74       /* xConnect
14570 20 2d 20 63 6f 6e 6e 65 63 74 20 74 6f 20 61 6e   - connect to an
14580 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 20   existing table 
14590 2a 2f 0a 20 20 70 72 61 67 6d 61 56 74 61 62 42  */.  pragmaVtabB
145a0 65 73 74 49 6e 64 65 78 2c 20 20 20 20 20 20 20  estIndex,       
145b0 20 20 2f 2a 20 78 42 65 73 74 49 6e 64 65 78 20    /* xBestIndex 
145c0 2d 20 44 65 74 65 72 6d 69 6e 65 20 73 65 61 72  - Determine sear
145d0 63 68 20 73 74 72 61 74 65 67 79 20 2a 2f 0a 20  ch strategy */. 
145e0 20 70 72 61 67 6d 61 56 74 61 62 44 69 73 63 6f   pragmaVtabDisco
145f0 6e 6e 65 63 74 2c 20 20 20 20 20 20 20 20 2f 2a  nnect,        /*
14600 20 78 44 69 73 63 6f 6e 6e 65 63 74 20 2d 20 44   xDisconnect - D
14610 69 73 63 6f 6e 6e 65 63 74 20 66 72 6f 6d 20 61  isconnect from a
14620 20 74 61 62 6c 65 20 2a 2f 0a 20 20 30 2c 20 20   table */.  0,  
14630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14640 20 20 20 20 20 20 20 20 20 2f 2a 20 78 44 65 73           /* xDes
14650 74 72 6f 79 20 2d 20 44 72 6f 70 20 61 20 74 61  troy - Drop a ta
14660 62 6c 65 20 2a 2f 0a 20 20 70 72 61 67 6d 61 56  ble */.  pragmaV
14670 74 61 62 4f 70 65 6e 2c 20 20 20 20 20 20 20 20  tabOpen,        
14680 20 20 20 20 20 20 2f 2a 20 78 4f 70 65 6e 20 2d        /* xOpen -
14690 20 6f 70 65 6e 20 61 20 63 75 72 73 6f 72 20 2a   open a cursor *
146a0 2f 0a 20 20 70 72 61 67 6d 61 56 74 61 62 43 6c  /.  pragmaVtabCl
146b0 6f 73 65 2c 20 20 20 20 20 20 20 20 20 20 20 20  ose,            
146c0 20 2f 2a 20 78 43 6c 6f 73 65 20 2d 20 63 6c 6f   /* xClose - clo
146d0 73 65 20 61 20 63 75 72 73 6f 72 20 2a 2f 0a 20  se a cursor */. 
146e0 20 70 72 61 67 6d 61 56 74 61 62 46 69 6c 74 65   pragmaVtabFilte
146f0 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r,            /*
14700 20 78 46 69 6c 74 65 72 20 2d 20 63 6f 6e 66 69   xFilter - confi
14710 67 75 72 65 20 73 63 61 6e 20 63 6f 6e 73 74 72  gure scan constr
14720 61 69 6e 74 73 20 2a 2f 0a 20 20 70 72 61 67 6d  aints */.  pragm
14730 61 56 74 61 62 4e 65 78 74 2c 20 20 20 20 20 20  aVtabNext,      
14740 20 20 20 20 20 20 20 20 2f 2a 20 78 4e 65 78 74          /* xNext
14750 20 2d 20 61 64 76 61 6e 63 65 20 61 20 63 75 72   - advance a cur
14760 73 6f 72 20 2a 2f 0a 20 20 70 72 61 67 6d 61 56  sor */.  pragmaV
14770 74 61 62 45 6f 66 2c 20 20 20 20 20 20 20 20 20  tabEof,         
14780 20 20 20 20 20 20 2f 2a 20 78 45 6f 66 20 2a 2f        /* xEof */
14790 0a 20 20 70 72 61 67 6d 61 56 74 61 62 43 6f 6c  .  pragmaVtabCol
147a0 75 6d 6e 2c 20 20 20 20 20 20 20 20 20 20 20 20  umn,            
147b0 2f 2a 20 78 43 6f 6c 75 6d 6e 20 2d 20 72 65 61  /* xColumn - rea
147c0 64 20 64 61 74 61 20 2a 2f 0a 20 20 70 72 61 67  d data */.  prag
147d0 6d 61 56 74 61 62 52 6f 77 69 64 2c 20 20 20 20  maVtabRowid,    
147e0 20 20 20 20 20 20 20 20 20 2f 2a 20 78 52 6f 77           /* xRow
147f0 69 64 20 2d 20 72 65 61 64 20 64 61 74 61 20 2a  id - read data *
14800 2f 0a 20 20 30 2c 20 20 20 20 20 20 20 20 20 20  /.  0,          
14810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14820 20 2f 2a 20 78 55 70 64 61 74 65 20 2d 20 77 72   /* xUpdate - wr
14830 69 74 65 20 64 61 74 61 20 2a 2f 0a 20 20 30 2c  ite data */.  0,
14840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14850 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 78 42             /* xB
14860 65 67 69 6e 20 2d 20 62 65 67 69 6e 20 74 72 61  egin - begin tra
14870 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 20 20 30 2c  nsaction */.  0,
14880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14890 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 78 53             /* xS
148a0 79 6e 63 20 2d 20 73 79 6e 63 20 74 72 61 6e 73  ync - sync trans
148b0 61 63 74 69 6f 6e 20 2a 2f 0a 20 20 30 2c 20 20  action */.  0,  
148c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148d0 20 20 20 20 20 20 20 20 20 2f 2a 20 78 43 6f 6d           /* xCom
148e0 6d 69 74 20 2d 20 63 6f 6d 6d 69 74 20 74 72 61  mit - commit tra
148f0 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 20 20 30 2c  nsaction */.  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 20 20 20 20 2f 2a 20 78 52             /* xR
14920 6f 6c 6c 62 61 63 6b 20 2d 20 72 6f 6c 6c 62 61  ollback - rollba
14930 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  ck transaction *
14940 2f 0a 20 20 30 2c 20 20 20 20 20 20 20 20 20 20  /.  0,          
14950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14960 20 2f 2a 20 78 46 69 6e 64 46 75 6e 63 74 69 6f   /* xFindFunctio
14970 6e 20 2d 20 66 75 6e 63 74 69 6f 6e 20 6f 76 65  n - function ove
14980 72 6c 6f 61 64 69 6e 67 20 2a 2f 0a 20 20 30 2c  rloading */.  0,
14990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 78 52             /* xR
149b0 65 6e 61 6d 65 20 2d 20 72 65 6e 61 6d 65 20 74  ename - rename t
149c0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 30 2c  he table */.  0,
149d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 78 53             /* xS
149f0 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 30 2c  avepoint */.  0,
14a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 78 52             /* xR
14a20 65 6c 65 61 73 65 20 2a 2f 0a 20 20 30 2c 20 20  elease */.  0,  
14a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a40 20 20 20 20 20 20 20 20 20 2f 2a 20 78 52 6f 6c           /* xRol
14a50 6c 62 61 63 6b 54 6f 20 2a 2f 0a 20 20 30 20 20  lbackTo */.  0  
14a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 78 53 68            /* xSh
14a80 61 64 6f 77 4e 61 6d 65 20 2a 2f 0a 7d 3b 0a 0a  adowName */.};..
14a90 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
14aa0 65 65 20 69 66 20 7a 54 61 62 4e 61 6d 65 20 69  ee if zTabName i
14ab0 73 20 72 65 61 6c 6c 79 20 74 68 65 20 6e 61 6d  s really the nam
14ac0 65 20 6f 66 20 61 20 70 72 61 67 6d 61 2e 20 20  e of a pragma.  
14ad0 49 66 20 69 74 20 69 73 2c 0a 2a 2a 20 74 68 65  If it is,.** the
14ae0 6e 20 72 65 67 69 73 74 65 72 20 61 6e 20 65 70  n register an ep
14af0 6f 6e 79 6d 6f 75 73 20 76 69 72 74 75 61 6c 20  onymous virtual 
14b00 74 61 62 6c 65 20 66 6f 72 20 74 68 61 74 20 70  table for that p
14b10 72 61 67 6d 61 20 61 6e 64 20 72 65 74 75 72 6e  ragma and return
14b20 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  .** a pointer to
14b30 20 74 68 65 20 4d 6f 64 75 6c 65 20 6f 62 6a 65   the Module obje
14b40 63 74 20 66 6f 72 20 74 68 65 20 6e 65 77 20 76  ct for the new v
14b50 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2f  irtual table..*/
14b60 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33  .Module *sqlite3
14b70 50 72 61 67 6d 61 56 74 61 62 52 65 67 69 73 74  PragmaVtabRegist
14b80 65 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  er(sqlite3 *db, 
14b90 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
14ba0 65 29 7b 0a 20 20 63 6f 6e 73 74 20 50 72 61 67  e){.  const Prag
14bb0 6d 61 4e 61 6d 65 20 2a 70 4e 61 6d 65 3b 0a 20  maName *pName;. 
14bc0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
14bd0 5f 73 74 72 6e 69 63 6d 70 28 7a 4e 61 6d 65 2c  _strnicmp(zName,
14be0 20 22 70 72 61 67 6d 61 5f 22 2c 20 37 29 3d 3d   "pragma_", 7)==
14bf0 30 20 29 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 70  0 );.  pName = p
14c00 72 61 67 6d 61 4c 6f 63 61 74 65 28 7a 4e 61 6d  ragmaLocate(zNam
14c10 65 2b 37 29 3b 0a 20 20 69 66 28 20 70 4e 61 6d  e+7);.  if( pNam
14c20 65 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  e==0 ) return 0;
14c30 0a 20 20 69 66 28 20 28 70 4e 61 6d 65 2d 3e 6d  .  if( (pName->m
14c40 50 72 61 67 46 6c 67 20 26 20 28 50 72 61 67 46  PragFlg & (PragF
14c50 6c 67 5f 52 65 73 75 6c 74 30 7c 50 72 61 67 46  lg_Result0|PragF
14c60 6c 67 5f 52 65 73 75 6c 74 31 29 29 3d 3d 30 20  lg_Result1))==0 
14c70 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 61 73  ) return 0;.  as
14c80 73 65 72 74 28 20 73 71 6c 69 74 65 33 48 61 73  sert( sqlite3Has
14c90 68 46 69 6e 64 28 26 64 62 2d 3e 61 4d 6f 64 75  hFind(&db->aModu
14ca0 6c 65 2c 20 7a 4e 61 6d 65 29 3d 3d 30 20 29 3b  le, zName)==0 );
14cb0 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
14cc0 33 56 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c  3VtabCreateModul
14cd0 65 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 26 70 72  e(db, zName, &pr
14ce0 61 67 6d 61 56 74 61 62 4d 6f 64 75 6c 65 2c 20  agmaVtabModule, 
14cf0 28 76 6f 69 64 2a 29 70 4e 61 6d 65 2c 20 30 29  (void*)pName, 0)
14d00 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ;.}..#endif /* S
14d10 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
14d20 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 65 6e 64  ALTABLE */..#end
14d30 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
14d40 54 5f 50 52 41 47 4d 41 20 2a 2f 0a              T_PRAGMA */.