/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact e8b2ea66dfb1b90c53b920c08914ac26b109053a:


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 50 72 6f 63 65 73 73 20 61 20 70 72 61  ** Process a pra
23a0: 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  gma statement.  
23b0: 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20 61  .**.** Pragmas a
23c0: 72 65 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 3a  re of this form:
23d0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41 47  .**.**      PRAG
23e0: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69 64 20 5b  MA [schema.]id [
23f0: 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54  = value].**.** T
2400: 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d 69  he identifier mi
2410: 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73 74  ght also be a st
2420: 72 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75 65  ring.  The value
2430: 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61 6e   is a string, an
2440: 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72 2c  d.** identifier,
2450: 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20 49   or a number.  I
2460: 66 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20 74  f minusFlag is t
2470: 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76 61  rue, then the va
2480: 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d 62  lue is.** a numb
2490: 65 72 20 74 68 61 74 20 77 61 73 20 70 72 65 63  er that was prec
24a0: 65 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73 20  eded by a minus 
24b0: 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sign..**.** If t
24c0: 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20  he left side is 
24d0: 22 64 61 74 61 62 61 73 65 2e 69 64 22 20 74 68  "database.id" th
24e0: 65 6e 20 70 49 64 31 20 69 73 20 74 68 65 20 64  en pId1 is the d
24f0: 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a 20  atabase name.** 
2500: 61 6e 64 20 70 49 64 32 20 69 73 20 74 68 65 20  and pId2 is the 
2510: 69 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66 74  id.  If the left
2520: 20 73 69 64 65 20 69 73 20 6a 75 73 74 20 22 69   side is just "i
2530: 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73 20  d" then pId1 is 
2540: 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70 49  the.** id and pI
2550: 64 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79 20  d2 is any empty 
2560: 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20  string..*/.void 
2570: 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a 20  sqlite3Pragma(. 
2580: 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20   Parse *pParse, 
2590: 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c 20  .  Token *pId1, 
25a0: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
25b0: 70 61 72 74 20 6f 66 20 5b 73 63 68 65 6d 61 2e  part of [schema.
25c0: 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20 20 54  ]id field */.  T
25d0: 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20 20 20  oken *pId2,     
25e0: 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70 61 72     /* Second par
25f0: 74 20 6f 66 20 5b 73 63 68 65 6d 61 2e 5d 69 64  t of [schema.]id
2600: 20 66 69 65 6c 64 2c 20 6f 72 20 4e 55 4c 4c 20   field, or NULL 
2610: 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 56 61 6c  */.  Token *pVal
2620: 75 65 2c 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65  ue,      /* Toke
2630: 6e 20 66 6f 72 20 3c 76 61 6c 75 65 3e 2c 20 6f  n for <value>, o
2640: 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20  r NULL */.  int 
2650: 6d 69 6e 75 73 46 6c 61 67 20 20 20 20 20 20 20  minusFlag       
2660: 2f 2a 20 54 72 75 65 20 69 66 20 61 20 27 2d 27  /* True if a '-'
2670: 20 73 69 67 6e 20 70 72 65 63 65 64 65 64 20 3c   sign preceded <
2680: 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b 0a 20 20 63  value> */.){.  c
2690: 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20 30 3b 20  har *zLeft = 0; 
26a0: 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65 72        /* Nul-ter
26b0: 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
26c0: 72 69 6e 67 20 3c 69 64 3e 20 2a 2f 0a 20 20 63  ring <id> */.  c
26d0: 68 61 72 20 2a 7a 52 69 67 68 74 20 3d 20 30 3b  har *zRight = 0;
26e0: 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65 72        /* Nul-ter
26f0: 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
2700: 72 69 6e 67 20 3c 76 61 6c 75 65 3e 2c 20 6f 72  ring <value>, or
2710: 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f 6e 73 74   NULL */.  const
2720: 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b 20   char *zDb = 0; 
2730: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
2740: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65  e name */.  Toke
2750: 6e 20 2a 70 49 64 3b 20 20 20 20 20 20 20 20 20  n *pId;         
2760: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
2770: 20 3c 69 64 3e 20 74 6f 6b 65 6e 20 2a 2f 0a 20   <id> token */. 
2780: 20 63 68 61 72 20 2a 61 46 63 6e 74 6c 5b 34 5d   char *aFcntl[4]
2790: 3b 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d  ;       /* Argum
27a0: 65 6e 74 20 74 6f 20 53 51 4c 49 54 45 5f 46 43  ent to SQLITE_FC
27b0: 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a 20 20  NTL_PRAGMA */.  
27c0: 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
27d0: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
27e0: 73 65 20 69 6e 64 65 78 20 66 6f 72 20 3c 64 61  se index for <da
27f0: 74 61 62 61 73 65 3e 20 2a 2f 0a 20 20 69 6e 74  tabase> */.  int
2800: 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
2810: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 72 65 74            /* ret
2820: 75 72 6e 20 76 61 6c 75 65 20 66 6f 72 6d 20 53  urn value form S
2830: 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47  QLITE_FCNTL_PRAG
2840: 4d 41 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  MA */.  sqlite3 
2850: 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62  *db = pParse->db
2860: 3b 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61  ;    /* The data
2870: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
2880: 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 20 20 20  */.  Db *pDb;   
2890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a0: 20 20 2f 2a 20 54 68 65 20 73 70 65 63 69 66 69    /* The specifi
28b0: 63 20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67  c database being
28c0: 20 70 72 61 67 6d 61 65 64 20 2a 2f 0a 20 20 56   pragmaed */.  V
28d0: 64 62 65 20 2a 76 20 3d 20 73 71 6c 69 74 65 33  dbe *v = sqlite3
28e0: 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b  GetVdbe(pParse);
28f0: 20 20 2f 2a 20 50 72 65 70 61 72 65 64 20 73 74    /* Prepared st
2900: 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e  atement */.  con
2910: 73 74 20 50 72 61 67 6d 61 4e 61 6d 65 20 2a 70  st PragmaName *p
2920: 50 72 61 67 6d 61 3b 20 20 20 2f 2a 20 54 68 65  Pragma;   /* The
2930: 20 70 72 61 67 6d 61 20 2a 2f 0a 0a 20 20 69 66   pragma */..  if
2940: 28 20 76 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b  ( v==0 ) return;
2950: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 75  .  sqlite3VdbeRu
2960: 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29 3b 0a 20 20  nOnlyOnce(v);.  
2970: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32  pParse->nMem = 2
2980: 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65 72 70 72 65  ;..  /* Interpre
2990: 74 20 74 68 65 20 5b 73 63 68 65 6d 61 2e 5d 20  t the [schema.] 
29a0: 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 61 67  part of the prag
29b0: 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 69 44  ma statement. iD
29c0: 62 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 69 6e  b is the.  ** in
29d0: 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
29e0: 61 73 65 20 74 68 69 73 20 70 72 61 67 6d 61 20  ase this pragma 
29f0: 69 73 20 62 65 69 6e 67 20 61 70 70 6c 69 65 64  is being applied
2a00: 20 74 6f 20 69 6e 20 64 62 2e 61 44 62 5b 5d 2e   to in db.aDb[].
2a10: 20 2a 2f 0a 20 20 69 44 62 20 3d 20 73 71 6c 69   */.  iDb = sqli
2a20: 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 70  te3TwoPartName(p
2a30: 50 61 72 73 65 2c 20 70 49 64 31 2c 20 70 49 64  Parse, pId1, pId
2a40: 32 2c 20 26 70 49 64 29 3b 0a 20 20 69 66 28 20  2, &pId);.  if( 
2a50: 69 44 62 3c 30 20 29 20 72 65 74 75 72 6e 3b 0a  iDb<0 ) return;.
2a60: 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
2a70: 5b 69 44 62 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20  [iDb];..  /* If 
2a80: 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  the temp databas
2a90: 65 20 68 61 73 20 62 65 65 6e 20 65 78 70 6c 69  e has been expli
2aa0: 63 69 74 6c 79 20 6e 61 6d 65 64 20 61 73 20 70  citly named as p
2ab0: 61 72 74 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a  art of the .  **
2ac0: 20 70 72 61 67 6d 61 2c 20 6d 61 6b 65 20 73 75   pragma, make su
2ad0: 72 65 20 69 74 20 69 73 20 6f 70 65 6e 2e 20 0a  re it is open. .
2ae0: 20 20 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d 3d    */.  if( iDb==
2af0: 31 20 26 26 20 73 71 6c 69 74 65 33 4f 70 65 6e  1 && sqlite3Open
2b00: 54 65 6d 70 44 61 74 61 62 61 73 65 28 70 50 61  TempDatabase(pPa
2b10: 72 73 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75  rse) ){.    retu
2b20: 72 6e 3b 0a 20 20 7d 0a 0a 20 20 7a 4c 65 66 74  rn;.  }..  zLeft
2b30: 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72   = sqlite3NameFr
2b40: 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 49 64 29  omToken(db, pId)
2b50: 3b 0a 20 20 69 66 28 20 21 7a 4c 65 66 74 20 29  ;.  if( !zLeft )
2b60: 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 6d   return;.  if( m
2b70: 69 6e 75 73 46 6c 61 67 20 29 7b 0a 20 20 20 20  inusFlag ){.    
2b80: 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33  zRight = sqlite3
2b90: 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2d 25 54  MPrintf(db, "-%T
2ba0: 22 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 65  ", pValue);.  }e
2bb0: 6c 73 65 7b 0a 20 20 20 20 7a 52 69 67 68 74 20  lse{.    zRight 
2bc0: 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f  = sqlite3NameFro
2bd0: 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 56 61 6c 75  mToken(db, pValu
2be0: 65 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  e);.  }..  asser
2bf0: 74 28 20 70 49 64 32 20 29 3b 0a 20 20 7a 44 62  t( pId2 );.  zDb
2c00: 20 3d 20 70 49 64 32 2d 3e 6e 3e 30 20 3f 20 70   = pId2->n>0 ? p
2c10: 44 62 2d 3e 7a 44 62 53 4e 61 6d 65 20 3a 20 30  Db->zDbSName : 0
2c20: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 41  ;.  if( sqlite3A
2c30: 75 74 68 43 68 65 63 6b 28 70 50 61 72 73 65 2c  uthCheck(pParse,
2c40: 20 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 2c 20   SQLITE_PRAGMA, 
2c50: 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74 2c 20 7a  zLeft, zRight, z
2c60: 44 62 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  Db) ){.    goto 
2c70: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
2c80: 0a 20 20 2f 2a 20 53 65 6e 64 20 61 6e 20 53 51  .  /* Send an SQ
2c90: 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d  LITE_FCNTL_PRAGM
2ca0: 41 20 66 69 6c 65 2d 63 6f 6e 74 72 6f 6c 20 74  A file-control t
2cb0: 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  o the underlying
2cc0: 20 56 46 53 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63   VFS.  ** connec
2cd0: 74 69 6f 6e 2e 20 20 49 66 20 69 74 20 72 65 74  tion.  If it ret
2ce0: 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 2c 20  urns SQLITE_OK, 
2cf0: 74 68 65 6e 20 61 73 73 75 6d 65 20 74 68 61 74  then assume that
2d00: 20 74 68 65 20 56 46 53 0a 20 20 2a 2a 20 68 61   the VFS.  ** ha
2d10: 6e 64 6c 65 64 20 74 68 65 20 70 72 61 67 6d 61  ndled the pragma
2d20: 20 61 6e 64 20 67 65 6e 65 72 61 74 65 20 61 20   and generate a 
2d30: 6e 6f 2d 6f 70 20 70 72 65 70 61 72 65 64 20 73  no-op prepared s
2d40: 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a 2a 0a 20  tatement..  **. 
2d50: 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49   ** IMPLEMENTATI
2d60: 4f 4e 2d 4f 46 3a 20 52 2d 31 32 32 33 38 2d 35  ON-OF: R-12238-5
2d70: 35 31 32 30 20 57 68 65 6e 65 76 65 72 20 61 20  5120 Whenever a 
2d80: 50 52 41 47 4d 41 20 73 74 61 74 65 6d 65 6e 74  PRAGMA statement
2d90: 20 69 73 20 70 61 72 73 65 64 2c 0a 20 20 2a 2a   is parsed,.  **
2da0: 20 61 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c   an SQLITE_FCNTL
2db0: 5f 50 52 41 47 4d 41 20 66 69 6c 65 20 63 6f 6e  _PRAGMA file con
2dc0: 74 72 6f 6c 20 69 73 20 73 65 6e 74 20 74 6f 20  trol is sent to 
2dd0: 74 68 65 20 6f 70 65 6e 20 73 71 6c 69 74 65 33  the open sqlite3
2de0: 5f 66 69 6c 65 0a 20 20 2a 2a 20 6f 62 6a 65 63  _file.  ** objec
2df0: 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  t corresponding 
2e00: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
2e10: 66 69 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68  file to which th
2e20: 65 20 70 72 61 67 6d 61 0a 20 20 2a 2a 20 73 74  e pragma.  ** st
2e30: 61 74 65 6d 65 6e 74 20 72 65 66 65 72 73 2e 0a  atement refers..
2e40: 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d    **.  ** IMPLEM
2e50: 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32  ENTATION-OF: R-2
2e60: 39 38 37 35 2d 33 31 36 37 38 20 54 68 65 20 61  9875-31678 The a
2e70: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 53  rgument to the S
2e80: 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47  QLITE_FCNTL_PRAG
2e90: 4d 41 0a 20 20 2a 2a 20 66 69 6c 65 20 63 6f 6e  MA.  ** file con
2ea0: 74 72 6f 6c 20 69 73 20 61 6e 20 61 72 72 61 79  trol is an array
2eb0: 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
2ec0: 73 74 72 69 6e 67 73 20 28 63 68 61 72 2a 2a 29  strings (char**)
2ed0: 20 69 6e 20 77 68 69 63 68 20 74 68 65 0a 20 20   in which the.  
2ee0: 2a 2a 20 73 65 63 6f 6e 64 20 65 6c 65 6d 65 6e  ** second elemen
2ef0: 74 20 6f 66 20 74 68 65 20 61 72 72 61 79 20 69  t of the array i
2f00: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
2f10: 65 20 70 72 61 67 6d 61 20 61 6e 64 20 74 68 65  e pragma and the
2f20: 20 74 68 69 72 64 0a 20 20 2a 2a 20 65 6c 65 6d   third.  ** elem
2f30: 65 6e 74 20 69 73 20 74 68 65 20 61 72 67 75 6d  ent is the argum
2f40: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 61 67 6d  ent to the pragm
2f50: 61 20 6f 72 20 4e 55 4c 4c 20 69 66 20 74 68 65  a or NULL if the
2f60: 20 70 72 61 67 6d 61 20 68 61 73 20 6e 6f 0a 20   pragma has no. 
2f70: 20 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 20 20   ** argument..  
2f80: 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20 3d  */.  aFcntl[0] =
2f90: 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d 20   0;.  aFcntl[1] 
2fa0: 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e 74  = zLeft;.  aFcnt
2fb0: 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a 20  l[2] = zRight;. 
2fc0: 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b 0a   aFcntl[3] = 0;.
2fd0: 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65    db->busyHandle
2fe0: 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 72  r.nBusy = 0;.  r
2ff0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  c = sqlite3_file
3000: 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62  _control(db, zDb
3010: 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  , SQLITE_FCNTL_P
3020: 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61 46  RAGMA, (void*)aF
3030: 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63 3d  cntl);.  if( rc=
3040: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
3050: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
3060: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
3070: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
3080: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
3090: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 61 46 63  OLNAME_NAME, aFc
30a0: 6e 74 6c 5b 30 5d 2c 20 53 51 4c 49 54 45 5f 54  ntl[0], SQLITE_T
30b0: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 72  RANSIENT);.    r
30c0: 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78 74 28  eturnSingleText(
30d0: 76 2c 20 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20  v, aFcntl[0]);. 
30e0: 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
30f0: 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20  aFcntl[0]);.    
3100: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
3110: 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53  .  }.  if( rc!=S
3120: 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29  QLITE_NOTFOUND )
3130: 7b 0a 20 20 20 20 69 66 28 20 61 46 63 6e 74 6c  {.    if( aFcntl
3140: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  [0] ){.      sql
3150: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
3160: 72 73 65 2c 20 22 25 73 22 2c 20 61 46 63 6e 74  rse, "%s", aFcnt
3170: 6c 5b 30 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c  l[0]);.      sql
3180: 69 74 65 33 5f 66 72 65 65 28 61 46 63 6e 74 6c  ite3_free(aFcntl
3190: 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  [0]);.    }.    
31a0: 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a  pParse->nErr++;.
31b0: 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d      pParse->rc =
31c0: 20 72 63 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72   rc;.    goto pr
31d0: 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20  agma_out;.  }.. 
31e0: 20 2f 2a 20 4c 6f 63 61 74 65 20 74 68 65 20 70   /* Locate the p
31f0: 72 61 67 6d 61 20 69 6e 20 74 68 65 20 6c 6f 6f  ragma in the loo
3200: 6b 75 70 20 74 61 62 6c 65 20 2a 2f 0a 20 20 70  kup table */.  p
3210: 50 72 61 67 6d 61 20 3d 20 70 72 61 67 6d 61 4c  Pragma = pragmaL
3220: 6f 63 61 74 65 28 7a 4c 65 66 74 29 3b 0a 20 20  ocate(zLeft);.  
3230: 69 66 28 20 70 50 72 61 67 6d 61 3d 3d 30 20 29  if( pPragma==0 )
3240: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
3250: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
3260: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  e the database s
3270: 63 68 65 6d 61 20 69 73 20 6c 6f 61 64 65 64 20  chema is loaded 
3280: 69 66 20 74 68 65 20 70 72 61 67 6d 61 20 72 65  if the pragma re
3290: 71 75 69 72 65 73 20 74 68 61 74 20 2a 2f 0a 20  quires that */. 
32a0: 20 69 66 28 20 28 70 50 72 61 67 6d 61 2d 3e 6d   if( (pPragma->m
32b0: 50 72 61 67 46 6c 67 20 26 20 50 72 61 67 46 6c  PragFlg & PragFl
32c0: 67 5f 4e 65 65 64 53 63 68 65 6d 61 29 21 3d 30  g_NeedSchema)!=0
32d0: 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   ){.    if( sqli
32e0: 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 70 50  te3ReadSchema(pP
32f0: 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61  arse) ) goto pra
3300: 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20  gma_out;.  }..  
3310: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 68 65 20  /* Register the 
3320: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 6e 61  result column na
3330: 6d 65 73 20 66 6f 72 20 70 72 61 67 6d 61 73 20  mes for pragmas 
3340: 74 68 61 74 20 72 65 74 75 72 6e 20 72 65 73 75  that return resu
3350: 6c 74 73 20 2a 2f 0a 20 20 69 66 28 20 28 70 50  lts */.  if( (pP
3360: 72 61 67 6d 61 2d 3e 6d 50 72 61 67 46 6c 67 20  ragma->mPragFlg 
3370: 26 20 50 72 61 67 46 6c 67 5f 4e 6f 43 6f 6c 75  & PragFlg_NoColu
3380: 6d 6e 73 29 3d 3d 30 20 0a 20 20 20 26 26 20 28  mns)==0 .   && (
3390: 28 70 50 72 61 67 6d 61 2d 3e 6d 50 72 61 67 46  (pPragma->mPragF
33a0: 6c 67 20 26 20 50 72 61 67 46 6c 67 5f 4e 6f 43  lg & PragFlg_NoC
33b0: 6f 6c 75 6d 6e 73 31 29 3d 3d 30 20 7c 7c 20 7a  olumns1)==0 || z
33c0: 52 69 67 68 74 3d 3d 30 29 0a 20 20 29 7b 0a 20  Right==0).  ){. 
33d0: 20 20 20 73 65 74 50 72 61 67 6d 61 52 65 73 75     setPragmaResu
33e0: 6c 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c  ltColumnNames(v,
33f0: 20 70 50 72 61 67 6d 61 29 3b 0a 20 20 7d 0a 0a   pPragma);.  }..
3400: 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65    /* Jump to the
3410: 20 61 70 70 72 6f 70 72 69 61 74 65 20 70 72 61   appropriate pra
3420: 67 6d 61 20 68 61 6e 64 6c 65 72 20 2a 2f 0a 20  gma handler */. 
3430: 20 73 77 69 74 63 68 28 20 70 50 72 61 67 6d 61   switch( pPragma
3440: 2d 3e 65 50 72 61 67 54 79 70 20 29 7b 0a 20 20  ->ePragTyp ){.  
3450: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
3460: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
3470: 50 52 41 47 4d 41 53 29 20 26 26 20 21 64 65 66  PRAGMAS) && !def
3480: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
3490: 5f 44 45 50 52 45 43 41 54 45 44 29 0a 20 20 2f  _DEPRECATED).  /
34a0: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
34b0: 73 63 68 65 6d 61 2e 5d 64 65 66 61 75 6c 74 5f  schema.]default_
34c0: 63 61 63 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20  cache_size.  ** 
34d0: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
34e0: 5d 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73  ]default_cache_s
34f0: 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ize=N.  **.  ** 
3500: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
3510: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
3520: 6e 74 20 70 65 72 73 69 73 74 65 6e 74 20 73 65  nt persistent se
3530: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
3540: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
3550: 7a 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 72  ze.  The value r
3560: 65 74 75 72 6e 65 64 20 69 73 20 74 68 65 20 6d  eturned is the m
3570: 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
3580: 0a 20 20 2a 2a 20 70 61 67 65 73 20 69 6e 20 74  .  ** pages in t
3590: 68 65 20 70 61 67 65 20 63 61 63 68 65 2e 20 20  he page cache.  
35a0: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
35b0: 73 65 74 73 20 62 6f 74 68 20 74 68 65 20 63 75  sets both the cu
35c0: 72 72 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65 20  rrent.  ** page 
35d0: 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65  cache size value
35e0: 20 61 6e 64 20 74 68 65 20 70 65 72 73 69 73 74   and the persist
35f0: 65 6e 74 20 70 61 67 65 20 63 61 63 68 65 20 73  ent page cache s
3600: 69 7a 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20 73  ize value.  ** s
3610: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74  tored in the dat
3620: 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a 2a  abase file..  **
3630: 0a 20 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73  .  ** Older vers
3640: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 77  ions of SQLite w
3650: 6f 75 6c 64 20 73 65 74 20 74 68 65 20 64 65 66  ould set the def
3660: 61 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65 20  ault cache size 
3670: 74 6f 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74 69  to a.  ** negati
3680: 76 65 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e 64  ve number to ind
3690: 69 63 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f 75  icate synchronou
36a0: 73 3d 4f 46 46 2e 20 20 54 68 65 73 65 20 64 61  s=OFF.  These da
36b0: 79 73 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73 0a  ys, synchronous.
36c0: 20 20 2a 2a 20 69 73 20 61 6c 77 61 79 73 20 6f    ** is always o
36d0: 6e 20 62 79 20 64 65 66 61 75 6c 74 20 72 65 67  n by default reg
36e0: 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 73  ardless of the s
36f0: 69 67 6e 20 6f 66 20 74 68 65 20 64 65 66 61 75  ign of the defau
3700: 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69  lt cache.  ** si
3710: 7a 65 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e 75  ze.  But continu
3720: 65 20 74 6f 20 74 61 6b 65 20 74 68 65 20 61 62  e to take the ab
3730: 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20  solute value of 
3740: 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68  the default cach
3750: 65 0a 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20 68  e.  ** size of h
3760: 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61 74  istorical compat
3770: 69 62 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20 20  ibility..  */.  
3780: 63 61 73 65 20 50 72 61 67 54 79 70 5f 44 45 46  case PragTyp_DEF
3790: 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 3a  AULT_CACHE_SIZE:
37a0: 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f   {.    static co
37b0: 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44  nst int iLn = VD
37c0: 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f  BE_OFFSET_LINENO
37d0: 28 32 29 3b 0a 20 20 20 20 73 74 61 74 69 63 20  (2);.    static 
37e0: 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74  const VdbeOpList
37f0: 20 67 65 74 43 61 63 68 65 53 69 7a 65 5b 5d 20   getCacheSize[] 
3800: 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 54  = {.      { OP_T
3810: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 30 2c 20 30  ransaction, 0, 0
3820: 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20  ,        0},    
3830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3840: 20 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20       /* 0 */.   
3850: 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b     { OP_ReadCook
3860: 69 65 2c 20 20 30 2c 20 31 2c 20 20 20 20 20 20  ie,  0, 1,      
3870: 20 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f    BTREE_DEFAULT_
3880: 43 41 43 48 45 5f 53 49 5a 45 7d 2c 20 20 2f 2a  CACHE_SIZE},  /*
3890: 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50   1 */.      { OP
38a0: 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c  _IfPos,       1,
38b0: 20 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   8,        0},. 
38c0: 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65       { OP_Intege
38d0: 72 2c 20 20 20 20 20 30 2c 20 32 2c 20 20 20 20  r,     0, 2,    
38e0: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
38f0: 4f 50 5f 53 75 62 74 72 61 63 74 2c 20 20 20 20  OP_Subtract,    
3900: 31 2c 20 32 2c 20 20 20 20 20 20 20 20 31 7d 2c  1, 2,        1},
3910: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f  .      { OP_IfPo
3920: 73 2c 20 20 20 20 20 20 20 31 2c 20 38 2c 20 20  s,       1, 8,  
3930: 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20        0},.      
3940: 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20  { OP_Integer,   
3950: 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20 30    0, 1,        0
3960: 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  },              
3970: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 36 20             /* 6 
3980: 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e 6f  */.      { OP_No
3990: 6f 70 2c 20 20 20 20 20 20 20 20 30 2c 20 30 2c  op,        0, 0,
39a0: 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
39b0: 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77    { OP_ResultRow
39c0: 2c 20 20 20 31 2c 20 31 2c 20 20 20 20 20 20 20  ,   1, 1,       
39d0: 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20   0},.    };.    
39e0: 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20 20  VdbeOp *aOp;.   
39f0: 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73   sqlite3VdbeUses
3a00: 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20  Btree(v, iDb);. 
3a10: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
3a20: 7b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  {.      pParse->
3a30: 6e 4d 65 6d 20 2b 3d 20 32 3b 0a 20 20 20 20 20  nMem += 2;.     
3a40: 20 73 71 6c 69 74 65 33 56 64 62 65 56 65 72 69   sqlite3VdbeVeri
3a50: 66 79 4e 6f 4d 61 6c 6c 6f 63 52 65 71 75 69 72  fyNoMallocRequir
3a60: 65 64 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  ed(v, ArraySize(
3a70: 67 65 74 43 61 63 68 65 53 69 7a 65 29 29 3b 0a  getCacheSize));.
3a80: 20 20 20 20 20 20 61 4f 70 20 3d 20 73 71 6c 69        aOp = sqli
3a90: 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74  te3VdbeAddOpList
3aa0: 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 67 65  (v, ArraySize(ge
3ab0: 74 43 61 63 68 65 53 69 7a 65 29 2c 20 67 65 74  tCacheSize), get
3ac0: 43 61 63 68 65 53 69 7a 65 2c 20 69 4c 6e 29 3b  CacheSize, iLn);
3ad0: 0a 20 20 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f  .      if( ONLY_
3ae0: 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  IF_REALLOC_STRES
3af0: 53 28 61 4f 70 3d 3d 30 29 20 29 20 62 72 65 61  S(aOp==0) ) brea
3b00: 6b 3b 0a 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e  k;.      aOp[0].
3b10: 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20  p1 = iDb;.      
3b20: 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44 62 3b  aOp[1].p1 = iDb;
3b30: 0a 20 20 20 20 20 20 61 4f 70 5b 36 5d 2e 70 31  .      aOp[6].p1
3b40: 20 3d 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c   = SQLITE_DEFAUL
3b50: 54 5f 43 41 43 48 45 5f 53 49 5a 45 3b 0a 20 20  T_CACHE_SIZE;.  
3b60: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
3b70: 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65  nt size = sqlite
3b80: 33 41 62 73 49 6e 74 33 32 28 73 71 6c 69 74 65  3AbsInt32(sqlite
3b90: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a  3Atoi(zRight));.
3ba0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 65 67        sqlite3Beg
3bb0: 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
3bc0: 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29  (pParse, 0, iDb)
3bd0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
3be0: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
3bf0: 53 65 74 43 6f 6f 6b 69 65 2c 20 69 44 62 2c 20  SetCookie, iDb, 
3c00: 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43 41  BTREE_DEFAULT_CA
3c10: 43 48 45 5f 53 49 5a 45 2c 20 73 69 7a 65 29 3b  CHE_SIZE, size);
3c20: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
3c30: 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
3c40: 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
3c50: 29 20 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e  ) );.      pDb->
3c60: 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73  pSchema->cache_s
3c70: 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20  ize = size;.    
3c80: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
3c90: 74 43 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e  tCacheSize(pDb->
3ca0: 70 42 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d  pBt, pDb->pSchem
3cb0: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a  a->cache_size);.
3cc0: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
3cd0: 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21  .  }.#endif /* !
3ce0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
3cf0: 52 5f 50 52 41 47 4d 41 53 20 26 26 20 21 53 51  R_PRAGMAS && !SQ
3d00: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
3d10: 41 54 45 44 20 2a 2f 0a 0a 23 69 66 20 21 64 65  ATED */..#if !de
3d20: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3d30: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
3d40: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
3d50: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65  MA [schema.]page
3d60: 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47  _size.  **  PRAG
3d70: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 70 61 67 65  MA [schema.]page
3d80: 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a  _size=N.  **.  *
3d90: 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d  * The first form
3da0: 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72   reports the cur
3db0: 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72  rent setting for
3dc0: 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61   the.  ** databa
3dd0: 73 65 20 70 61 67 65 20 73 69 7a 65 20 69 6e 20  se page size in 
3de0: 62 79 74 65 73 2e 20 20 54 68 65 20 73 65 63 6f  bytes.  The seco
3df0: 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 74 68 65  nd form sets the
3e00: 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70  .  ** database p
3e10: 61 67 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20  age size value. 
3e20: 20 54 68 65 20 76 61 6c 75 65 20 63 61 6e 20 6f   The value can o
3e30: 6e 6c 79 20 62 65 20 73 65 74 20 69 66 0a 20 20  nly be set if.  
3e40: 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
3e50: 68 61 73 20 6e 6f 74 20 79 65 74 20 62 65 65 6e  has not yet been
3e60: 20 63 72 65 61 74 65 64 2e 0a 20 20 2a 2f 0a 20   created..  */. 
3e70: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41   case PragTyp_PA
3e80: 47 45 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 42  GE_SIZE: {.    B
3e90: 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d  tree *pBt = pDb-
3ea0: 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74  >pBt;.    assert
3eb0: 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20  ( pBt!=0 );.    
3ec0: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
3ed0: 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20       int size = 
3ee0: 41 4c 57 41 59 53 28 70 42 74 29 20 3f 20 73 71  ALWAYS(pBt) ? sq
3ef0: 6c 69 74 65 33 42 74 72 65 65 47 65 74 50 61 67  lite3BtreeGetPag
3f00: 65 53 69 7a 65 28 70 42 74 29 20 3a 20 30 3b 0a  eSize(pBt) : 0;.
3f10: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
3f20: 6c 65 49 6e 74 28 76 2c 20 73 69 7a 65 29 3b 0a  leInt(v, size);.
3f30: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3f40: 20 2f 2a 20 4d 61 6c 6c 6f 63 20 6d 61 79 20 66   /* Malloc may f
3f50: 61 69 6c 20 77 68 65 6e 20 73 65 74 74 69 6e 67  ail when setting
3f60: 20 74 68 65 20 70 61 67 65 2d 73 69 7a 65 2c 20   the page-size, 
3f70: 61 73 20 74 68 65 72 65 20 69 73 20 61 6e 20 69  as there is an i
3f80: 6e 74 65 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a  nternal.      **
3f90: 20 62 75 66 66 65 72 20 74 68 61 74 20 74 68 65   buffer that the
3fa0: 20 70 61 67 65 72 20 6d 6f 64 75 6c 65 20 72 65   pager module re
3fb0: 73 69 7a 65 73 20 75 73 69 6e 67 20 73 71 6c 69  sizes using sqli
3fc0: 74 65 33 5f 72 65 61 6c 6c 6f 63 28 29 2e 0a 20  te3_realloc().. 
3fd0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 64 62       */.      db
3fe0: 2d 3e 6e 65 78 74 50 61 67 65 73 69 7a 65 20 3d  ->nextPagesize =
3ff0: 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
4000: 67 68 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ght);.      if( 
4010: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71  SQLITE_NOMEM==sq
4020: 6c 69 74 65 33 42 74 72 65 65 53 65 74 50 61 67  lite3BtreeSetPag
4030: 65 53 69 7a 65 28 70 42 74 2c 20 64 62 2d 3e 6e  eSize(pBt, db->n
4040: 65 78 74 50 61 67 65 73 69 7a 65 2c 2d 31 2c 30  extPagesize,-1,0
4050: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ) ){.        sql
4060: 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28 64 62 29  ite3OomFault(db)
4070: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
4080: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
4090: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
40a0: 41 20 5b 73 63 68 65 6d 61 2e 5d 73 65 63 75 72  A [schema.]secur
40b0: 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 20 50  e_delete.  **  P
40c0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 73  RAGMA [schema.]s
40d0: 65 63 75 72 65 5f 64 65 6c 65 74 65 3d 4f 4e 2f  ecure_delete=ON/
40e0: 4f 46 46 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  OFF.  **.  ** Th
40f0: 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70  e first form rep
4100: 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
4110: 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65   setting for the
4120: 0a 20 20 2a 2a 20 73 65 63 75 72 65 5f 64 65 6c  .  ** secure_del
4130: 65 74 65 20 66 6c 61 67 2e 20 20 54 68 65 20 73  ete flag.  The s
4140: 65 63 6f 6e 64 20 66 6f 72 6d 20 63 68 61 6e 67  econd form chang
4150: 65 73 20 74 68 65 20 73 65 63 75 72 65 5f 64 65  es the secure_de
4160: 6c 65 74 65 0a 20 20 2a 2a 20 66 6c 61 67 20 73  lete.  ** flag s
4170: 65 74 74 69 6e 67 20 61 6e 64 20 72 65 70 6f 72  etting and repor
4180: 74 73 20 74 68 65 6e 65 77 20 76 61 6c 75 65 2e  ts thenew value.
4190: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
41a0: 67 54 79 70 5f 53 45 43 55 52 45 5f 44 45 4c 45  gTyp_SECURE_DELE
41b0: 54 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20  TE: {.    Btree 
41c0: 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b  *pBt = pDb->pBt;
41d0: 0a 20 20 20 20 69 6e 74 20 62 20 3d 20 2d 31 3b  .    int b = -1;
41e0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74  .    assert( pBt
41f0: 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 7a  !=0 );.    if( z
4200: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 62  Right ){.      b
4210: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f   = sqlite3GetBoo
4220: 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 3b  lean(zRight, 0);
4230: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
4240: 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 62 3e 3d  Id2->n==0 && b>=
4250: 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  0 ){.      int i
4260: 69 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 69 3d  i;.      for(ii=
4270: 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
4280: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71  i++){.        sq
4290: 6c 69 74 65 33 42 74 72 65 65 53 65 63 75 72 65  lite3BtreeSecure
42a0: 44 65 6c 65 74 65 28 64 62 2d 3e 61 44 62 5b 69  Delete(db->aDb[i
42b0: 69 5d 2e 70 42 74 2c 20 62 29 3b 0a 20 20 20 20  i].pBt, b);.    
42c0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 20    }.    }.    b 
42d0: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65  = sqlite3BtreeSe
42e0: 63 75 72 65 44 65 6c 65 74 65 28 70 42 74 2c 20  cureDelete(pBt, 
42f0: 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69  b);.    returnSi
4300: 6e 67 6c 65 49 6e 74 28 76 2c 20 62 29 3b 0a 20  ngleInt(v, b);. 
4310: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
4320: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
4330: 20 5b 73 63 68 65 6d 61 2e 5d 6d 61 78 5f 70 61   [schema.]max_pa
4340: 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 20 20 50  ge_count.  **  P
4350: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6d  RAGMA [schema.]m
4360: 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 3d 4e 0a  ax_page_count=N.
4370: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69    **.  ** The fi
4380: 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73  rst form reports
4390: 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65 74   the current set
43a0: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a  ting for the.  *
43b0: 2a 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  * maximum number
43c0: 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
43d0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
43e0: 20 54 68 65 20 0a 20 20 2a 2a 20 73 65 63 6f 6e   The .  ** secon
43f0: 64 20 66 6f 72 6d 20 61 74 74 65 6d 70 74 73 20  d form attempts 
4400: 74 6f 20 63 68 61 6e 67 65 20 74 68 69 73 20 73  to change this s
4410: 65 74 74 69 6e 67 2e 20 20 42 6f 74 68 0a 20 20  etting.  Both.  
4420: 2a 2a 20 66 6f 72 6d 73 20 72 65 74 75 72 6e 20  ** forms return 
4430: 74 68 65 20 63 75 72 72 65 6e 74 20 73 65 74 74  the current sett
4440: 69 6e 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ing..  **.  ** T
4450: 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75  he absolute valu
4460: 65 20 6f 66 20 4e 20 69 73 20 75 73 65 64 2e 20  e of N is used. 
4470: 20 54 68 69 73 20 69 73 20 75 6e 64 6f 63 75 6d   This is undocum
4480: 65 6e 74 65 64 20 61 6e 64 20 6d 69 67 68 74 0a  ented and might.
4490: 20 20 2a 2a 20 63 68 61 6e 67 65 2e 20 20 54 68    ** change.  Th
44a0: 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69  e only purpose i
44b0: 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61 6e 20  s to provide an 
44c0: 65 61 73 79 20 77 61 79 20 74 6f 20 74 65 73 74  easy way to test
44d0: 0a 20 20 2a 2a 20 74 68 65 20 73 71 6c 69 74 65  .  ** the sqlite
44e0: 33 41 62 73 49 6e 74 33 32 28 29 20 66 75 6e 63  3AbsInt32() func
44f0: 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  tion..  **.  ** 
4500: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
4510: 5d 70 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a  ]page_count.  **
4520: 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  .  ** Return the
4530: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
4540: 20 69 6e 20 74 68 65 20 73 70 65 63 69 66 69 65   in the specifie
4550: 64 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f  d database..  */
4560: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
4570: 50 41 47 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20 20  PAGE_COUNT: {.  
4580: 20 20 69 6e 74 20 69 52 65 67 3b 0a 20 20 20 20    int iReg;.    
4590: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
45a0: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
45b0: 69 44 62 29 3b 0a 20 20 20 20 69 52 65 67 20 3d  iDb);.    iReg =
45c0: 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b   ++pParse->nMem;
45d0: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
45e0: 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d  Tolower(zLeft[0]
45f0: 29 3d 3d 27 70 27 20 29 7b 0a 20 20 20 20 20 20  )=='p' ){.      
4600: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
4610: 32 28 76 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e  2(v, OP_Pagecoun
4620: 74 2c 20 69 44 62 2c 20 69 52 65 67 29 3b 0a 20  t, iDb, iReg);. 
4630: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
4640: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
4650: 33 28 76 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74  3(v, OP_MaxPgcnt
4660: 2c 20 69 44 62 2c 20 69 52 65 67 2c 20 0a 20 20  , iDb, iReg, .  
4670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4680: 20 20 20 20 20 20 73 71 6c 69 74 65 33 41 62 73        sqlite3Abs
4690: 49 6e 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f  Int32(sqlite3Ato
46a0: 69 28 7a 52 69 67 68 74 29 29 29 3b 0a 20 20 20  i(zRight)));.   
46b0: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
46c0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
46d0: 65 73 75 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20  esultRow, iReg, 
46e0: 31 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  1);.    break;. 
46f0: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
4700: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6c  RAGMA [schema.]l
4710: 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20 2a 2a  ocking_mode.  **
4720: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
4730: 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 20 3d  .]locking_mode =
4740: 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c 75 73 69   (normal|exclusi
4750: 76 65 29 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ve).  */.  case 
4760: 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e 47 5f  PragTyp_LOCKING_
4770: 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 63 6f 6e 73  MODE: {.    cons
4780: 74 20 63 68 61 72 20 2a 7a 52 65 74 20 3d 20 22  t char *zRet = "
4790: 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20 20 69 6e 74  normal";.    int
47a0: 20 65 4d 6f 64 65 20 3d 20 67 65 74 4c 6f 63 6b   eMode = getLock
47b0: 69 6e 67 4d 6f 64 65 28 7a 52 69 67 68 74 29 3b  ingMode(zRight);
47c0: 0a 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e  ..    if( pId2->
47d0: 6e 3d 3d 30 20 26 26 20 65 4d 6f 64 65 3d 3d 50  n==0 && eMode==P
47e0: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
47f0: 5f 51 55 45 52 59 20 29 7b 0a 20 20 20 20 20 20  _QUERY ){.      
4800: 2f 2a 20 53 69 6d 70 6c 65 20 22 50 52 41 47 4d  /* Simple "PRAGM
4810: 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 3b 22  A locking_mode;"
4820: 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69 73   statement. This
4830: 20 69 73 20 61 20 71 75 65 72 79 20 66 6f 72 0a   is a query for.
4840: 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 75 72        ** the cur
4850: 72 65 6e 74 20 64 65 66 61 75 6c 74 20 6c 6f 63  rent default loc
4860: 6b 69 6e 67 20 6d 6f 64 65 20 28 77 68 69 63 68  king mode (which
4870: 20 6d 61 79 20 62 65 20 64 69 66 66 65 72 65 6e   may be differen
4880: 74 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68  t to.      ** th
4890: 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6f  e locking-mode o
48a0: 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  f the main datab
48b0: 61 73 65 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ase)..      */. 
48c0: 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 64 62 2d       eMode = db-
48d0: 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 0a 20  >dfltLockMode;. 
48e0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
48f0: 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 0a 20  Pager *pPager;. 
4900: 20 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e       if( pId2->n
4910: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ==0 ){.        /
4920: 2a 20 54 68 69 73 20 69 6e 64 69 63 61 74 65 73  * This indicates
4930: 20 74 68 61 74 20 6e 6f 20 64 61 74 61 62 61 73   that no databas
4940: 65 20 6e 61 6d 65 20 77 61 73 20 73 70 65 63 69  e name was speci
4950: 66 69 65 64 20 61 73 20 70 61 72 74 0a 20 20 20  fied as part.   
4960: 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 50       ** of the P
4970: 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 2e 20 49  RAGMA command. I
4980: 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
4990: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6d 75 73  locking-mode mus
49a0: 74 20 62 65 0a 20 20 20 20 20 20 20 20 2a 2a 20  t be.        ** 
49b0: 73 65 74 20 6f 6e 20 61 6c 6c 20 61 74 74 61 63  set on all attac
49c0: 68 65 64 20 64 61 74 61 62 61 73 65 73 2c 20 61  hed databases, a
49d0: 73 20 77 65 6c 6c 20 61 73 20 74 68 65 20 6d 61  s well as the ma
49e0: 69 6e 20 64 62 20 66 69 6c 65 2e 0a 20 20 20 20  in db file..    
49f0: 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 20 20 2a      **.        *
4a00: 2a 20 41 6c 73 6f 2c 20 74 68 65 20 73 71 6c 69  * Also, the sqli
4a10: 74 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65  te3.dfltLockMode
4a20: 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
4a30: 20 73 6f 20 74 68 61 74 0a 20 20 20 20 20 20 20   so that.       
4a40: 20 2a 2a 20 61 6e 79 20 73 75 62 73 65 71 75 65   ** any subseque
4a50: 6e 74 6c 79 20 61 74 74 61 63 68 65 64 20 64 61  ntly attached da
4a60: 74 61 62 61 73 65 73 20 61 6c 73 6f 20 75 73 65  tabases also use
4a70: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 0a 20   the specified. 
4a80: 20 20 20 20 20 20 20 2a 2a 20 6c 6f 63 6b 69 6e         ** lockin
4a90: 67 20 6d 6f 64 65 2e 0a 20 20 20 20 20 20 20 20  g mode..        
4aa0: 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  */.        int i
4ab0: 69 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  i;.        asser
4ac0: 74 28 70 44 62 3d 3d 26 64 62 2d 3e 61 44 62 5b  t(pDb==&db->aDb[
4ad0: 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  0]);.        for
4ae0: 28 69 69 3d 32 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=2; ii<db->nD
4af0: 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
4b00: 20 20 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c      pPager = sql
4b10: 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 64  ite3BtreePager(d
4b20: 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 29 3b  b->aDb[ii].pBt);
4b30: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
4b40: 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f  e3PagerLockingMo
4b50: 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f 64 65  de(pPager, eMode
4b60: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
4b70: 20 20 20 20 20 64 62 2d 3e 64 66 6c 74 4c 6f 63       db->dfltLoc
4b80: 6b 4d 6f 64 65 20 3d 20 28 75 38 29 65 4d 6f 64  kMode = (u8)eMod
4b90: 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  e;.      }.     
4ba0: 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65   pPager = sqlite
4bb0: 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d  3BtreePager(pDb-
4bc0: 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 65 4d 6f  >pBt);.      eMo
4bd0: 64 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  de = sqlite3Page
4be0: 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50 61  rLockingMode(pPa
4bf0: 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20  ger, eMode);.   
4c00: 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20   }..    assert( 
4c10: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43  eMode==PAGER_LOC
4c20: 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 0a  KINGMODE_NORMAL.
4c30: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 65              || e
4c40: 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b  Mode==PAGER_LOCK
4c50: 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56  INGMODE_EXCLUSIV
4c60: 45 20 29 3b 0a 20 20 20 20 69 66 28 20 65 4d 6f  E );.    if( eMo
4c70: 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e  de==PAGER_LOCKIN
4c80: 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 20  GMODE_EXCLUSIVE 
4c90: 29 7b 0a 20 20 20 20 20 20 7a 52 65 74 20 3d 20  ){.      zRet = 
4ca0: 22 65 78 63 6c 75 73 69 76 65 22 3b 0a 20 20 20  "exclusive";.   
4cb0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
4cc0: 67 6c 65 54 65 78 74 28 76 2c 20 7a 52 65 74 29  gleText(v, zRet)
4cd0: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
4ce0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
4cf0: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6a 6f 75  GMA [schema.]jou
4d00: 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a 2a 20 20  rnal_mode.  **  
4d10: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
4d20: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 0a 20  journal_mode =. 
4d30: 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20   **             
4d40: 20 20 20 20 20 20 20 20 20 28 64 65 6c 65 74 65           (delete
4d50: 7c 70 65 72 73 69 73 74 7c 6f 66 66 7c 74 72 75  |persist|off|tru
4d60: 6e 63 61 74 65 7c 6d 65 6d 6f 72 79 7c 77 61 6c  ncate|memory|wal
4d70: 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20 20 63 61 73  |off).  */.  cas
4d80: 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41  e PragTyp_JOURNA
4d90: 4c 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 69 6e  L_MODE: {.    in
4da0: 74 20 65 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  t eMode;        
4db0: 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 50 41  /* One of the PA
4dc0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
4dd0: 58 58 58 20 73 79 6d 62 6f 6c 73 20 2a 2f 0a 20  XXX symbols */. 
4de0: 20 20 20 69 6e 74 20 69 69 3b 20 20 20 20 20 20     int ii;      
4df0: 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
4e00: 6e 74 65 72 20 2a 2f 0a 0a 20 20 20 20 69 66 28  nter */..    if(
4e10: 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20   zRight==0 ){.  
4e20: 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
4e30: 69 73 20 6e 6f 20 22 3d 4d 4f 44 45 22 20 70 61  is no "=MODE" pa
4e40: 72 74 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61  rt of the pragma
4e50: 2c 20 64 6f 20 61 20 71 75 65 72 79 20 66 6f 72  , do a query for
4e60: 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 63 75   the.      ** cu
4e70: 72 72 65 6e 74 20 6d 6f 64 65 20 2a 2f 0a 20 20  rrent mode */.  
4e80: 20 20 20 20 65 4d 6f 64 65 20 3d 20 50 41 47 45      eMode = PAGE
4e90: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
4ea0: 45 52 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ERY;.    }else{.
4eb0: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
4ec0: 20 2a 7a 4d 6f 64 65 3b 0a 20 20 20 20 20 20 69   *zMode;.      i
4ed0: 6e 74 20 6e 20 3d 20 73 71 6c 69 74 65 33 53 74  nt n = sqlite3St
4ee0: 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 3b 0a  rlen30(zRight);.
4ef0: 20 20 20 20 20 20 66 6f 72 28 65 4d 6f 64 65 3d        for(eMode=
4f00: 30 3b 20 28 7a 4d 6f 64 65 20 3d 20 73 71 6c 69  0; (zMode = sqli
4f10: 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
4f20: 6d 65 28 65 4d 6f 64 65 29 29 21 3d 30 3b 20 65  me(eMode))!=0; e
4f30: 4d 6f 64 65 2b 2b 29 7b 0a 20 20 20 20 20 20 20  Mode++){.       
4f40: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e   if( sqlite3StrN
4f50: 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 7a 4d 6f  ICmp(zRight, zMo
4f60: 64 65 2c 20 6e 29 3d 3d 30 20 29 20 62 72 65 61  de, n)==0 ) brea
4f70: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
4f80: 20 69 66 28 20 21 7a 4d 6f 64 65 20 29 7b 0a 20   if( !zMode ){. 
4f90: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
4fa0: 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 64 6f   "=MODE" part do
4fb0: 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79  es not match any
4fc0: 20 6b 6e 6f 77 6e 20 6a 6f 75 72 6e 61 6c 20 6d   known journal m
4fd0: 6f 64 65 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20  ode,.        ** 
4fe0: 74 68 65 6e 20 64 6f 20 61 20 71 75 65 72 79 20  then do a query 
4ff0: 2a 2f 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65  */.        eMode
5000: 20 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c   = PAGER_JOURNAL
5010: 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20  MODE_QUERY;.    
5020: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
5030: 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4a  ( eMode==PAGER_J
5040: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
5050: 20 26 26 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29   && pId2->n==0 )
5060: 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65  {.      /* Conve
5070: 72 74 20 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e  rt "PRAGMA journ
5080: 61 6c 5f 6d 6f 64 65 22 20 69 6e 74 6f 20 22 50  al_mode" into "P
5090: 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e  RAGMA main.journ
50a0: 61 6c 5f 6d 6f 64 65 22 20 2a 2f 0a 20 20 20 20  al_mode" */.    
50b0: 20 20 69 44 62 20 3d 20 30 3b 0a 20 20 20 20 20    iDb = 0;.     
50c0: 20 70 49 64 32 2d 3e 6e 20 3d 20 31 3b 0a 20 20   pId2->n = 1;.  
50d0: 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 69 3d 64    }.    for(ii=d
50e0: 62 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b  b->nDb-1; ii>=0;
50f0: 20 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 69 66   ii--){.      if
5100: 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  ( db->aDb[ii].pB
5110: 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c  t && (ii==iDb ||
5120: 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a   pId2->n==0) ){.
5130: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
5140: 64 62 65 55 73 65 73 42 74 72 65 65 28 76 2c 20  dbeUsesBtree(v, 
5150: 69 69 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ii);.        sql
5160: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
5170: 2c 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65  , OP_JournalMode
5180: 2c 20 69 69 2c 20 31 2c 20 65 4d 6f 64 65 29 3b  , ii, 1, eMode);
5190: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
51a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
51b0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
51c0: 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20  tRow, 1, 1);.   
51d0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
51e0: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
51f0: 73 63 68 65 6d 61 2e 5d 6a 6f 75 72 6e 61 6c 5f  schema.]journal_
5200: 73 69 7a 65 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20  size_limit.  ** 
5210: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
5220: 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69  ]journal_size_li
5230: 6d 69 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  mit=N.  **.  ** 
5240: 47 65 74 20 6f 72 20 73 65 74 20 74 68 65 20 73  Get or set the s
5250: 69 7a 65 20 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c  ize limit on rol
5260: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
5270: 6c 65 73 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  les..  */.  case
5280: 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c   PragTyp_JOURNAL
5290: 5f 53 49 5a 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20  _SIZE_LIMIT: {. 
52a0: 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72     Pager *pPager
52b0: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
52c0: 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a  ager(pDb->pBt);.
52d0: 20 20 20 20 69 36 34 20 69 4c 69 6d 69 74 20 3d      i64 iLimit =
52e0: 20 2d 32 3b 0a 20 20 20 20 69 66 28 20 7a 52 69   -2;.    if( zRi
52f0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
5300: 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36  ite3DecOrHexToI6
5310: 34 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69  4(zRight, &iLimi
5320: 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 4c  t);.      if( iL
5330: 69 6d 69 74 3c 2d 31 20 29 20 69 4c 69 6d 69 74  imit<-1 ) iLimit
5340: 20 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20   = -1;.    }.   
5350: 20 69 4c 69 6d 69 74 20 3d 20 73 71 6c 69 74 65   iLimit = sqlite
5360: 33 50 61 67 65 72 4a 6f 75 72 6e 61 6c 53 69 7a  3PagerJournalSiz
5370: 65 4c 69 6d 69 74 28 70 50 61 67 65 72 2c 20 69  eLimit(pPager, i
5380: 4c 69 6d 69 74 29 3b 0a 20 20 20 20 72 65 74 75  Limit);.    retu
5390: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 69  rnSingleInt(v, i
53a0: 4c 69 6d 69 74 29 3b 0a 20 20 20 20 62 72 65 61  Limit);.    brea
53b0: 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66 20 2f  k;.  }..#endif /
53c0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  * SQLITE_OMIT_PA
53d0: 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  GER_PRAGMAS */..
53e0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
53f0: 41 20 5b 73 63 68 65 6d 61 2e 5d 61 75 74 6f 5f  A [schema.]auto_
5400: 76 61 63 75 75 6d 0a 20 20 2a 2a 20 20 50 52 41  vacuum.  **  PRA
5410: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 75 74  GMA [schema.]aut
5420: 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a 2a 0a  o_vacuum=N.  **.
5430: 20 20 2a 2a 20 47 65 74 20 6f 72 20 73 65 74 20    ** Get or set 
5440: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
5450: 20 64 61 74 61 62 61 73 65 20 27 61 75 74 6f 2d   database 'auto-
5460: 76 61 63 75 75 6d 27 20 70 61 72 61 6d 65 74 65  vacuum' paramete
5470: 72 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61 6c 75  r..  ** The valu
5480: 65 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20 30 20  e is one of:  0 
5490: 4e 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20 49 4e  NONE 1 FULL 2 IN
54a0: 43 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f 0a 23  CREMENTAL.  */.#
54b0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
54c0: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
54d0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 41 55 54  case PragTyp_AUT
54e0: 4f 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20  O_VACUUM: {.    
54f0: 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62  Btree *pBt = pDb
5500: 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72  ->pBt;.    asser
5510: 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20  t( pBt!=0 );.   
5520: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
5530: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
5540: 6c 65 49 6e 74 28 76 2c 20 73 71 6c 69 74 65 33  leInt(v, sqlite3
5550: 42 74 72 65 65 47 65 74 41 75 74 6f 56 61 63 75  BtreeGetAutoVacu
5560: 75 6d 28 70 42 74 29 29 3b 0a 20 20 20 20 7d 65  um(pBt));.    }e
5570: 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 65  lse{.      int e
5580: 41 75 74 6f 20 3d 20 67 65 74 41 75 74 6f 56 61  Auto = getAutoVa
5590: 63 75 75 6d 28 7a 52 69 67 68 74 29 3b 0a 20 20  cuum(zRight);.  
55a0: 20 20 20 20 61 73 73 65 72 74 28 20 65 41 75 74      assert( eAut
55b0: 6f 3e 3d 30 20 26 26 20 65 41 75 74 6f 3c 3d 32  o>=0 && eAuto<=2
55c0: 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65   );.      db->ne
55d0: 78 74 41 75 74 6f 76 61 63 20 3d 20 28 75 38 29  xtAutovac = (u8)
55e0: 65 41 75 74 6f 3b 0a 20 20 20 20 20 20 2f 2a 20  eAuto;.      /* 
55f0: 43 61 6c 6c 20 53 65 74 41 75 74 6f 56 61 63 75  Call SetAutoVacu
5600: 75 6d 28 29 20 74 6f 20 73 65 74 20 69 6e 69 74  um() to set init
5610: 69 61 6c 69 7a 65 20 74 68 65 20 69 6e 74 65 72  ialize the inter
5620: 6e 61 6c 20 61 75 74 6f 20 61 6e 64 0a 20 20 20  nal auto and.   
5630: 20 20 20 2a 2a 20 69 6e 63 72 2d 76 61 63 75 75     ** incr-vacuu
5640: 6d 20 66 6c 61 67 73 2e 20 54 68 69 73 20 69 73  m flags. This is
5650: 20 72 65 71 75 69 72 65 64 20 69 6e 20 63 61 73   required in cas
5660: 65 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f  e this connectio
5670: 6e 0a 20 20 20 20 20 20 2a 2a 20 63 72 65 61 74  n.      ** creat
5680: 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  es the database 
5690: 66 69 6c 65 2e 20 49 74 20 69 73 20 69 6d 70 6f  file. It is impo
56a0: 72 74 61 6e 74 20 74 68 61 74 20 69 74 20 69 73  rtant that it is
56b0: 20 63 72 65 61 74 65 64 0a 20 20 20 20 20 20 2a   created.      *
56c0: 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63  * as an auto-vac
56d0: 75 75 6d 20 63 61 70 61 62 6c 65 20 64 62 2e 0a  uum capable db..
56e0: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72        */.      r
56f0: 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
5700: 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42  SetAutoVacuum(pB
5710: 74 2c 20 65 41 75 74 6f 29 3b 0a 20 20 20 20 20  t, eAuto);.     
5720: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
5730: 4f 4b 20 26 26 20 28 65 41 75 74 6f 3d 3d 31 20  OK && (eAuto==1 
5740: 7c 7c 20 65 41 75 74 6f 3d 3d 32 29 20 29 7b 0a  || eAuto==2) ){.
5750: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20          /* When 
5760: 73 65 74 74 69 6e 67 20 74 68 65 20 61 75 74 6f  setting the auto
5770: 5f 76 61 63 75 75 6d 20 6d 6f 64 65 20 74 6f 20  _vacuum mode to 
5780: 65 69 74 68 65 72 20 22 66 75 6c 6c 22 20 6f 72  either "full" or
5790: 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 69 6e   .        ** "in
57a0: 63 72 65 6d 65 6e 74 61 6c 22 2c 20 77 72 69 74  cremental", writ
57b0: 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 6d  e the value of m
57c0: 65 74 61 5b 36 5d 20 69 6e 20 74 68 65 20 64 61  eta[6] in the da
57d0: 74 61 62 61 73 65 0a 20 20 20 20 20 20 20 20 2a  tabase.        *
57e0: 2a 20 66 69 6c 65 2e 20 42 65 66 6f 72 65 20 77  * file. Before w
57f0: 72 69 74 69 6e 67 20 74 6f 20 6d 65 74 61 5b 36  riting to meta[6
5800: 5d 2c 20 63 68 65 63 6b 20 74 68 61 74 20 6d 65  ], check that me
5810: 74 61 5b 33 5d 20 69 6e 64 69 63 61 74 65 73 0a  ta[3] indicates.
5820: 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20          ** that 
5830: 74 68 69 73 20 72 65 61 6c 6c 79 20 69 73 20 61  this really is a
5840: 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 63 61  n auto-vacuum ca
5850: 70 61 62 6c 65 20 64 61 74 61 62 61 73 65 2e 0a  pable database..
5860: 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
5870: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
5880: 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f  int iLn = VDBE_O
5890: 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b  FFSET_LINENO(2);
58a0: 0a 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20  .        static 
58b0: 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74  const VdbeOpList
58c0: 20 73 65 74 4d 65 74 61 36 5b 5d 20 3d 20 7b 0a   setMeta6[] = {.
58d0: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54            { OP_T
58e0: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30  ransaction,    0
58f0: 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20  ,         1,    
5900: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c               0},
5910: 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20      /* 0 */.    
5920: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43        { OP_ReadC
5930: 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c 20 20 20  ookie,     0,   
5940: 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20        1,        
5950: 20 42 54 52 45 45 5f 4c 41 52 47 45 53 54 5f 52   BTREE_LARGEST_R
5960: 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20 20 20 20  OOT_PAGE},.     
5970: 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20       { OP_If,   
5980: 20 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20            1,    
5990: 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20       0,         
59a0: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
59b0: 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 2 */.         
59c0: 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20 20   { OP_Halt,     
59d0: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 2c        SQLITE_OK,
59e0: 20 4f 45 5f 41 62 6f 72 74 2c 20 20 20 20 20 20   OE_Abort,      
59f0: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20      0},    /* 3 
5a00: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f  */.          { O
5a10: 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20  P_SetCookie,    
5a20: 20 20 30 2c 20 20 20 20 20 20 20 20 20 42 54 52    0,         BTR
5a30: 45 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c 20  EE_INCR_VACUUM, 
5a40: 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20  0},    /* 4 */. 
5a50: 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20         };.      
5a60: 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20    VdbeOp *aOp;. 
5a70: 20 20 20 20 20 20 20 69 6e 74 20 69 41 64 64 72         int iAddr
5a80: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
5a90: 72 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20  rrentAddr(v);.  
5aa0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
5ab0: 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52  eVerifyNoMallocR
5ac0: 65 71 75 69 72 65 64 28 76 2c 20 41 72 72 61 79  equired(v, Array
5ad0: 53 69 7a 65 28 73 65 74 4d 65 74 61 36 29 29 3b  Size(setMeta6));
5ae0: 0a 20 20 20 20 20 20 20 20 61 4f 70 20 3d 20 73  .        aOp = s
5af0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
5b00: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
5b10: 28 73 65 74 4d 65 74 61 36 29 2c 20 73 65 74 4d  (setMeta6), setM
5b20: 65 74 61 36 2c 20 69 4c 6e 29 3b 0a 20 20 20 20  eta6, iLn);.    
5b30: 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f      if( ONLY_IF_
5b40: 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61  REALLOC_STRESS(a
5b50: 4f 70 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a  Op==0) ) break;.
5b60: 20 20 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70          aOp[0].p
5b70: 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 20  1 = iDb;.       
5b80: 20 61 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44 62   aOp[1].p1 = iDb
5b90: 3b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 32 5d  ;.        aOp[2]
5ba0: 2e 70 32 20 3d 20 69 41 64 64 72 2b 34 3b 0a 20  .p2 = iAddr+4;. 
5bb0: 20 20 20 20 20 20 20 61 4f 70 5b 34 5d 2e 70 31         aOp[4].p1
5bc0: 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 20 20   = iDb;.        
5bd0: 61 4f 70 5b 34 5d 2e 70 33 20 3d 20 65 41 75 74  aOp[4].p3 = eAut
5be0: 6f 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 73  o - 1;.        s
5bf0: 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
5c00: 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20  ree(v, iDb);.   
5c10: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
5c20: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
5c30: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
5c40: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69 6e 63  GMA [schema.]inc
5c50: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 28  remental_vacuum(
5c60: 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20  N).  **.  ** Do 
5c70: 4e 20 73 74 65 70 73 20 6f 66 20 69 6e 63 72 65  N steps of incre
5c80: 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e 67  mental vacuuming
5c90: 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2e 0a   on a database..
5ca0: 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c    */.#ifndef SQL
5cb0: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
5cc0: 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54  UUM.  case PragT
5cd0: 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56  yp_INCREMENTAL_V
5ce0: 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e 74  ACUUM: {.    int
5cf0: 20 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a 20   iLimit, addr;. 
5d00: 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30     if( zRight==0
5d10: 20 7c 7c 20 21 73 71 6c 69 74 65 33 47 65 74 49   || !sqlite3GetI
5d20: 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 69 4c  nt32(zRight, &iL
5d30: 69 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74 3c  imit) || iLimit<
5d40: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 4c 69 6d  =0 ){.      iLim
5d50: 69 74 20 3d 20 30 78 37 66 66 66 66 66 66 66 3b  it = 0x7fffffff;
5d60: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
5d70: 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
5d80: 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c  ation(pParse, 0,
5d90: 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74   iDb);.    sqlit
5da0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
5db0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69 6d  OP_Integer, iLim
5dc0: 69 74 2c 20 31 29 3b 0a 20 20 20 20 61 64 64 72  it, 1);.    addr
5dd0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
5de0: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72 56  dOp1(v, OP_IncrV
5df0: 61 63 75 75 6d 2c 20 69 44 62 29 3b 20 56 64 62  acuum, iDb); Vdb
5e00: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
5e10: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
5e20: 4f 70 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op1(v, OP_Result
5e30: 52 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  Row, 1);.    sql
5e40: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
5e50: 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20  , OP_AddImm, 1, 
5e60: 2d 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  -1);.    sqlite3
5e70: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
5e80: 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 29  _IfPos, 1, addr)
5e90: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
5ea0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
5eb0: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
5ec0: 64 72 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  dr);.    break;.
5ed0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e    }.#endif..#ifn
5ee0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
5ef0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20  PAGER_PRAGMAS.  
5f00: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
5f10: 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73  [schema.]cache_s
5f20: 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ize.  **  PRAGMA
5f30: 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f   [schema.]cache_
5f40: 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  size=N.  **.  **
5f50: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
5f60: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
5f70: 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e  ent local settin
5f80: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70  g for the.  ** p
5f90: 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20  age cache size. 
5fa0: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
5fb0: 73 65 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20  sets the local. 
5fc0: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
5fd0: 69 7a 65 20 76 61 6c 75 65 2e 20 20 49 66 20 4e  ize value.  If N
5fe0: 20 69 73 20 70 6f 73 69 74 69 76 65 20 74 68 65   is positive the
5ff0: 6e 20 74 68 61 74 20 69 73 20 74 68 65 0a 20 20  n that is the.  
6000: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  ** number of pag
6010: 65 73 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e  es in the cache.
6020: 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69    If N is negati
6030: 76 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a  ve, then the.  *
6040: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * number of page
6050: 73 20 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f  s is adjusted so
6060: 20 74 68 61 74 20 74 68 65 20 63 61 63 68 65 20   that the cache 
6070: 75 73 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65  uses -N kibibyte
6080: 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79  s.  ** of memory
6090: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
60a0: 61 67 54 79 70 5f 43 41 43 48 45 5f 53 49 5a 45  agTyp_CACHE_SIZE
60b0: 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  : {.    assert( 
60c0: 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
60d0: 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20  exHeld(db, iDb, 
60e0: 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a  0) );.    if( !z
60f0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72  Right ){.      r
6100: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76  eturnSingleInt(v
6110: 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  , pDb->pSchema->
6120: 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20  cache_size);.   
6130: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e   }else{.      in
6140: 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33  t size = sqlite3
6150: 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20  Atoi(zRight);.  
6160: 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
6170: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73  ->cache_size = s
6180: 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ize;.      sqlit
6190: 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53  e3BtreeSetCacheS
61a0: 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44  ize(pDb->pBt, pD
61b0: 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68  b->pSchema->cach
61c0: 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20  e_size);.    }. 
61d0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
61e0: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
61f0: 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f   [schema.]cache_
6200: 73 70 69 6c 6c 0a 20 20 2a 2a 20 20 50 52 41 47  spill.  **  PRAG
6210: 4d 41 20 63 61 63 68 65 5f 73 70 69 6c 6c 3d 42  MA cache_spill=B
6220: 4f 4f 4c 45 41 4e 0a 20 20 2a 2a 20 20 50 52 41  OOLEAN.  **  PRA
6230: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 63 61 63  GMA [schema.]cac
6240: 68 65 5f 73 70 69 6c 6c 3d 4e 0a 20 20 2a 2a 0a  he_spill=N.  **.
6250: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
6260: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
6270: 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65  current local se
6280: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
6290: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 70  ** page cache sp
62a0: 69 6c 6c 20 73 69 7a 65 2e 20 54 68 65 20 73 65  ill size. The se
62b0: 63 6f 6e 64 20 66 6f 72 6d 20 74 75 72 6e 73 20  cond form turns 
62c0: 63 61 63 68 65 20 73 70 69 6c 6c 20 6f 6e 0a 20  cache spill on. 
62d0: 20 2a 2a 20 6f 72 20 6f 66 66 2e 20 20 57 68 65   ** or off.  Whe
62e0: 6e 20 74 75 72 6e 6e 69 6e 67 20 63 61 63 68 65  n turnning cache
62f0: 20 73 70 69 6c 6c 20 6f 6e 2c 20 74 68 65 20 73   spill on, the s
6300: 69 7a 65 20 69 73 20 73 65 74 20 74 6f 20 74 68  ize is set to th
6310: 65 0a 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 63  e.  ** current c
6320: 61 63 68 65 5f 73 69 7a 65 2e 20 20 54 68 65 20  ache_size.  The 
6330: 74 68 69 72 64 20 66 6f 72 6d 20 73 65 74 73 20  third form sets 
6340: 61 20 73 70 69 6c 6c 20 73 69 7a 65 20 74 68 61  a spill size tha
6350: 74 0a 20 20 2a 2a 20 6d 61 79 20 62 65 20 64 69  t.  ** may be di
6360: 66 66 65 72 65 6e 74 20 66 6f 72 6d 20 74 68 65  fferent form the
6370: 20 63 61 63 68 65 20 73 69 7a 65 2e 0a 20 20 2a   cache size..  *
6380: 2a 20 49 66 20 4e 20 69 73 20 70 6f 73 69 74 69  * If N is positi
6390: 76 65 20 74 68 65 6e 20 74 68 61 74 20 69 73 20  ve then that is 
63a0: 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20  the.  ** number 
63b0: 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  of pages in the 
63c0: 63 61 63 68 65 2e 20 20 49 66 20 4e 20 69 73 20  cache.  If N is 
63d0: 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74  negative, then t
63e0: 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f  he.  ** number o
63f0: 66 20 70 61 67 65 73 20 69 73 20 61 64 6a 75 73  f pages is adjus
6400: 74 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20  ted so that the 
6410: 63 61 63 68 65 20 75 73 65 73 20 2d 4e 20 6b 69  cache uses -N ki
6420: 62 69 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20  bibytes.  ** of 
6430: 6d 65 6d 6f 72 79 2e 0a 20 20 2a 2a 0a 20 20 2a  memory..  **.  *
6440: 2a 20 49 66 20 74 68 65 20 6e 75 6d 62 65 72 20  * If the number 
6450: 6f 66 20 63 61 63 68 65 5f 73 70 69 6c 6c 20 70  of cache_spill p
6460: 61 67 65 73 20 69 73 20 6c 65 73 73 20 74 68 65  ages is less the
6470: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a  n the number of.
6480: 20 20 2a 2a 20 63 61 63 68 65 5f 73 69 7a 65 20    ** cache_size 
6490: 70 61 67 65 73 2c 20 6e 6f 20 73 70 69 6c 6c 69  pages, no spilli
64a0: 6e 67 20 6f 63 63 75 72 73 20 75 6e 74 69 6c 20  ng occurs until 
64b0: 74 68 65 20 70 61 67 65 20 63 6f 75 6e 74 20 65  the page count e
64c0: 78 63 65 65 64 73 0a 20 20 2a 2a 20 74 68 65 20  xceeds.  ** the 
64d0: 6e 75 6d 62 65 72 20 6f 66 20 63 61 63 68 65 5f  number of cache_
64e0: 73 69 7a 65 20 70 61 67 65 73 2e 0a 20 20 2a 2a  size pages..  **
64f0: 0a 20 20 2a 2a 20 54 68 65 20 63 61 63 68 65 5f  .  ** The cache_
6500: 73 70 69 6c 6c 3d 42 4f 4f 4c 45 41 4e 20 73 65  spill=BOOLEAN se
6510: 74 74 69 6e 67 20 61 70 70 6c 69 65 73 20 74 6f  tting applies to
6520: 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 73 63   all attached sc
6530: 68 65 6d 61 73 2c 0a 20 20 2a 2a 20 6e 6f 74 20  hemas,.  ** not 
6540: 6a 75 73 74 20 74 68 65 20 73 63 68 65 6d 61 20  just the schema 
6550: 73 70 65 63 69 66 69 65 64 2e 0a 20 20 2a 2f 0a  specified..  */.
6560: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43    case PragTyp_C
6570: 41 43 48 45 5f 53 50 49 4c 4c 3a 20 7b 0a 20 20  ACHE_SPILL: {.  
6580: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
6590: 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
65a0: 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a  (db, iDb, 0) );.
65b0: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
65c0: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
65d0: 69 6e 67 6c 65 49 6e 74 28 76 2c 0a 20 20 20 20  ingleInt(v,.    
65e0: 20 20 20 20 20 28 64 62 2d 3e 66 6c 61 67 73 20       (db->flags 
65f0: 26 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70  & SQLITE_CacheSp
6600: 69 6c 6c 29 3d 3d 30 20 3f 20 30 20 3a 20 0a 20  ill)==0 ? 0 : . 
6610: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
6620: 65 33 42 74 72 65 65 53 65 74 53 70 69 6c 6c 53  e3BtreeSetSpillS
6630: 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 30 29 29  ize(pDb->pBt,0))
6640: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
6650: 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 31 3b     int size = 1;
6660: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
6670: 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69 67 68  e3GetInt32(zRigh
6680: 74 2c 20 26 73 69 7a 65 29 20 29 7b 0a 20 20 20  t, &size) ){.   
6690: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
66a0: 65 53 65 74 53 70 69 6c 6c 53 69 7a 65 28 70 44  eSetSpillSize(pD
66b0: 62 2d 3e 70 42 74 2c 20 73 69 7a 65 29 3b 0a 20  b->pBt, size);. 
66c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
66d0: 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
66e0: 61 6e 28 7a 52 69 67 68 74 2c 20 73 69 7a 65 21  an(zRight, size!
66f0: 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 64  =0) ){.        d
6700: 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
6710: 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 3b 0a 20  TE_CacheSpill;. 
6720: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
6730: 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d      db->flags &=
6740: 20 7e 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70   ~SQLITE_CacheSp
6750: 69 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ill;.      }.   
6760: 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c     setAllPagerFl
6770: 61 67 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20  ags(db);.    }. 
6780: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
6790: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
67a0: 20 5b 73 63 68 65 6d 61 2e 5d 6d 6d 61 70 5f 73   [schema.]mmap_s
67b0: 69 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a  ize(N).  **.  **
67c0: 20 55 73 65 64 20 74 6f 20 73 65 74 20 6d 61 70   Used to set map
67d0: 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74 2e  ping size limit.
67e0: 20 54 68 65 20 6d 61 70 70 69 6e 67 20 73 69 7a   The mapping siz
67f0: 65 20 6c 69 6d 69 74 20 69 73 0a 20 20 2a 2a 20  e limit is.  ** 
6800: 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74 68  used to limit th
6810: 65 20 61 67 67 72 65 67 61 74 65 20 73 69 7a 65  e aggregate size
6820: 20 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72 79 20 6d   of all memory m
6830: 61 70 70 65 64 20 72 65 67 69 6f 6e 73 20 6f 66  apped regions of
6840: 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61   the.  ** databa
6850: 73 65 20 66 69 6c 65 2e 20 49 66 20 74 68 69 73  se file. If this
6860: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 73 65   parameter is se
6870: 74 20 74 6f 20 7a 65 72 6f 2c 20 74 68 65 6e 20  t to zero, then 
6880: 6d 65 6d 6f 72 79 20 6d 61 70 70 69 6e 67 0a 20  memory mapping. 
6890: 20 2a 2a 20 69 73 20 6e 6f 74 20 75 73 65 64 20   ** is not used 
68a0: 61 74 20 61 6c 6c 2e 20 20 49 66 20 4e 20 69 73  at all.  If N is
68b0: 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20   negative, then 
68c0: 74 68 65 20 64 65 66 61 75 6c 74 20 6d 65 6d 6f  the default memo
68d0: 72 79 20 6d 61 70 0a 20 20 2a 2a 20 6c 69 6d 69  ry map.  ** limi
68e0: 74 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  t determined by 
68f0: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53  sqlite3_config(S
6900: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41  QLITE_CONFIG_MMA
6910: 50 5f 53 49 5a 45 29 20 69 73 20 73 65 74 2e 0a  P_SIZE) is set..
6920: 20 20 2a 2a 20 54 68 65 20 70 61 72 61 6d 65 74    ** The paramet
6930: 65 72 20 4e 20 69 73 20 6d 65 61 73 75 72 65 64  er N is measured
6940: 20 69 6e 20 62 79 74 65 73 2e 0a 20 20 2a 2a 0a   in bytes..  **.
6950: 20 20 2a 2a 20 54 68 69 73 20 76 61 6c 75 65 20    ** This value 
6960: 69 73 20 61 64 76 69 73 6f 72 79 2e 20 20 54 68  is advisory.  Th
6970: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46 53  e underlying VFS
6980: 20 69 73 20 66 72 65 65 20 74 6f 20 6d 65 6d 6f   is free to memo
6990: 72 79 20 6d 61 70 0a 20 20 2a 2a 20 61 73 20 6c  ry map.  ** as l
69a0: 69 74 74 6c 65 20 6f 72 20 61 73 20 6d 75 63 68  ittle or as much
69b0: 20 61 73 20 69 74 20 77 61 6e 74 73 2e 20 20 45   as it wants.  E
69c0: 78 63 65 70 74 2c 20 69 66 20 4e 20 69 73 20 73  xcept, if N is s
69d0: 65 74 20 74 6f 20 30 20 74 68 65 6e 20 74 68 65  et to 0 then the
69e0: 0a 20 20 2a 2a 20 75 70 70 65 72 20 6c 61 79 65  .  ** upper laye
69f0: 72 73 20 77 69 6c 6c 20 6e 65 76 65 72 20 69 6e  rs will never in
6a00: 76 6f 6b 65 20 74 68 65 20 78 46 65 74 63 68 20  voke the xFetch 
6a10: 69 6e 74 65 72 66 61 63 65 73 20 74 6f 20 74 68  interfaces to th
6a20: 65 20 56 46 53 2e 0a 20 20 2a 2f 0a 20 20 63 61  e VFS..  */.  ca
6a30: 73 65 20 50 72 61 67 54 79 70 5f 4d 4d 41 50 5f  se PragTyp_MMAP_
6a40: 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73 71 6c 69  SIZE: {.    sqli
6a50: 74 65 33 5f 69 6e 74 36 34 20 73 7a 3b 0a 23 69  te3_int64 sz;.#i
6a60: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  f SQLITE_MAX_MMA
6a70: 50 5f 53 49 5a 45 3e 30 0a 20 20 20 20 61 73 73  P_SIZE>0.    ass
6a80: 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
6a90: 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
6aa0: 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69  iDb, 0) );.    i
6ab0: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
6ac0: 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20     int ii;.     
6ad0: 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78   sqlite3DecOrHex
6ae0: 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 73  ToI64(zRight, &s
6af0: 7a 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 7a  z);.      if( sz
6b00: 3c 30 20 29 20 73 7a 20 3d 20 73 71 6c 69 74 65  <0 ) sz = sqlite
6b10: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 7a  3GlobalConfig.sz
6b20: 4d 6d 61 70 3b 0a 20 20 20 20 20 20 69 66 28 20  Mmap;.      if( 
6b30: 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 20 64 62 2d  pId2->n==0 ) db-
6b40: 3e 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b 0a 20 20  >szMmap = sz;.  
6b50: 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e      for(ii=db->n
6b60: 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d  Db-1; ii>=0; ii-
6b70: 2d 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  -){.        if( 
6b80: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20  db->aDb[ii].pBt 
6b90: 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70  && (ii==iDb || p
6ba0: 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20  Id2->n==0) ){.  
6bb0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42          sqlite3B
6bc0: 74 72 65 65 53 65 74 4d 6d 61 70 4c 69 6d 69 74  treeSetMmapLimit
6bd0: 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
6be0: 2c 20 73 7a 29 3b 0a 20 20 20 20 20 20 20 20 7d  , sz);.        }
6bf0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
6c00: 20 20 20 73 7a 20 3d 20 2d 31 3b 0a 20 20 20 20     sz = -1;.    
6c10: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c  rc = sqlite3_fil
6c20: 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44  e_control(db, zD
6c30: 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  b, SQLITE_FCNTL_
6c40: 4d 4d 41 50 5f 53 49 5a 45 2c 20 26 73 7a 29 3b  MMAP_SIZE, &sz);
6c50: 0a 23 65 6c 73 65 0a 20 20 20 20 73 7a 20 3d 20  .#else.    sz = 
6c60: 30 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  0;.    rc = SQLI
6c70: 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 20 20  TE_OK;.#endif.  
6c80: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
6c90: 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 74  _OK ){.      ret
6ca0: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20  urnSingleInt(v, 
6cb0: 73 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  sz);.    }else i
6cc0: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f  f( rc!=SQLITE_NO
6cd0: 54 46 4f 55 4e 44 20 29 7b 0a 20 20 20 20 20 20  TFOUND ){.      
6ce0: 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a  pParse->nErr++;.
6cf0: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63        pParse->rc
6d00: 20 3d 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20 20   = rc;.    }.   
6d10: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
6d20: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
6d30: 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 2a 2a 20  temp_store.  ** 
6d40: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
6d50: 6f 72 65 20 3d 20 22 64 65 66 61 75 6c 74 22 7c  ore = "default"|
6d60: 22 6d 65 6d 6f 72 79 22 7c 22 66 69 6c 65 22 0a  "memory"|"file".
6d70: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
6d80: 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61   or set the loca
6d90: 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74  l value of the t
6da0: 65 6d 70 5f 73 74 6f 72 65 20 66 6c 61 67 2e 20  emp_store flag. 
6db0: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
6dc0: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64  he local value d
6dd0: 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61  oes not make cha
6de0: 6e 67 65 73 20 74 6f 20 74 68 65 20 64 69 73 6b  nges to the disk
6df0: 20 66 69 6c 65 20 61 6e 64 20 74 68 65 20 64 65   file and the de
6e00: 66 61 75 6c 74 0a 20 20 2a 2a 20 76 61 6c 75 65  fault.  ** value
6e10: 20 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72 65   will be restore
6e20: 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20  d the next time 
6e30: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
6e40: 6f 70 65 6e 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a  opened..  **.  *
6e50: 2a 20 4e 6f 74 65 20 74 68 61 74 20 69 74 20 69  * Note that it i
6e60: 73 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74  s possible for t
6e70: 68 65 20 6c 69 62 72 61 72 79 20 63 6f 6d 70 69  he library compi
6e80: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20  le-time options 
6e90: 74 6f 0a 20 20 2a 2a 20 6f 76 65 72 72 69 64 65  to.  ** override
6ea0: 20 74 68 69 73 20 73 65 74 74 69 6e 67 0a 20 20   this setting.  
6eb0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
6ec0: 70 5f 54 45 4d 50 5f 53 54 4f 52 45 3a 20 7b 0a  p_TEMP_STORE: {.
6ed0: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
6ee0: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
6ef0: 69 6e 67 6c 65 49 6e 74 28 76 2c 20 64 62 2d 3e  ingleInt(v, db->
6f00: 74 65 6d 70 5f 73 74 6f 72 65 29 3b 0a 20 20 20  temp_store);.   
6f10: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 68   }else{.      ch
6f20: 61 6e 67 65 54 65 6d 70 53 74 6f 72 61 67 65 28  angeTempStorage(
6f30: 70 50 61 72 73 65 2c 20 7a 52 69 67 68 74 29 3b  pParse, zRight);
6f40: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
6f50: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
6f60: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
6f70: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20  tore_directory. 
6f80: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d   **   PRAGMA tem
6f90: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
6fa0: 79 20 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72  y = ""|"director
6fb0: 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a  y_name".  **.  *
6fc0: 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20  * Return or set 
6fd0: 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20  the local value 
6fe0: 6f 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72  of the temp_stor
6ff0: 65 5f 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67  e_directory flag
7000: 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a  .  Changing.  **
7010: 20 74 68 65 20 76 61 6c 75 65 20 73 65 74 73 20   the value sets 
7020: 61 20 73 70 65 63 69 66 69 63 20 64 69 72 65 63  a specific direc
7030: 74 6f 72 79 20 74 6f 20 62 65 20 75 73 65 64 20  tory to be used 
7040: 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 66 69  for temporary fi
7050: 6c 65 73 2e 0a 20 20 2a 2a 20 53 65 74 74 69 6e  les..  ** Settin
7060: 67 20 74 6f 20 61 20 6e 75 6c 6c 20 73 74 72 69  g to a null stri
7070: 6e 67 20 72 65 76 65 72 74 73 20 74 6f 20 74 68  ng reverts to th
7080: 65 20 64 65 66 61 75 6c 74 20 74 65 6d 70 6f 72  e default tempor
7090: 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 73 65  ary directory se
70a0: 61 72 63 68 2e 0a 20 20 2a 2a 20 49 66 20 74 65  arch..  ** If te
70b0: 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72  mporary director
70c0: 79 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68  y is changed, th
70d0: 65 6e 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d  en invalidateTem
70e0: 70 53 74 6f 72 61 67 65 2e 0a 20 20 2a 2a 0a 20  pStorage..  **. 
70f0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
7100: 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 44 49  yp_TEMP_STORE_DI
7110: 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69  RECTORY: {.    i
7120: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
7130: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
7140: 54 65 78 74 28 76 2c 20 73 71 6c 69 74 65 33 5f  Text(v, sqlite3_
7150: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b  temp_directory);
7160: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e  .    }else{.#ifn
7170: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
7180: 57 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52  WSD.      if( zR
7190: 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  ight[0] ){.     
71a0: 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20     int res;.    
71b0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
71c0: 4f 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66  OsAccess(db->pVf
71d0: 73 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54  s, zRight, SQLIT
71e0: 45 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52 49  E_ACCESS_READWRI
71f0: 54 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  TE, &res);.     
7200: 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
7210: 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29  E_OK || res==0 )
7220: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
7230: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
7240: 73 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61  se, "not a writa
7250: 62 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b  ble directory");
7260: 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
7270: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
7280: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
7290: 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 54      if( SQLITE_T
72a0: 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20  EMP_STORE==0.   
72b0: 20 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54      || (SQLITE_T
72c0: 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20  EMP_STORE==1 && 
72d0: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d  db->temp_store<=
72e0: 31 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51  1).       || (SQ
72f0: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
7300: 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73  =2 && db->temp_s
7310: 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20 20 29  tore==1).      )
7320: 7b 0a 20 20 20 20 20 20 20 20 69 6e 76 61 6c 69  {.        invali
7330: 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28  dateTempStorage(
7340: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 7d  pParse);.      }
7350: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
7360: 72 65 65 28 73 71 6c 69 74 65 33 5f 74 65 6d 70  ree(sqlite3_temp
7370: 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20  _directory);.   
7380: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
7390: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
73a0: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
73b0: 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ry = sqlite3_mpr
73c0: 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68  intf("%s", zRigh
73d0: 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  t);.      }else{
73e0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
73f0: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20  _temp_directory 
7400: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  = 0;.      }.#en
7410: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
7420: 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a  IT_WSD */.    }.
7430: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
7440: 23 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49  #if SQLITE_OS_WI
7450: 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  N.  /*.  **   PR
7460: 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f  AGMA data_store_
7470: 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20  directory.  **  
7480: 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f   PRAGMA data_sto
7490: 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22  re_directory = "
74a0: 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d  "|"directory_nam
74b0: 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  e".  **.  ** Ret
74c0: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c  urn or set the l
74d0: 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  ocal value of th
74e0: 65 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72  e data_store_dir
74f0: 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68  ectory flag.  Ch
7500: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
7510: 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65  value sets a spe
7520: 63 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20  cific directory 
7530: 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64  to be used for d
7540: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 74 68  atabase files th
7550: 61 74 0a 20 20 2a 2a 20 77 65 72 65 20 73 70 65  at.  ** were spe
7560: 63 69 66 69 65 64 20 77 69 74 68 20 61 20 72 65  cified with a re
7570: 6c 61 74 69 76 65 20 70 61 74 68 6e 61 6d 65 2e  lative pathname.
7580: 20 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e    Setting to a n
7590: 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72  ull string rever
75a0: 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 64  ts.  ** to the d
75b0: 65 66 61 75 6c 74 20 64 61 74 61 62 61 73 65 20  efault database 
75c0: 64 69 72 65 63 74 6f 72 79 2c 20 77 68 69 63 68  directory, which
75d0: 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69   for database fi
75e0: 6c 65 73 20 73 70 65 63 69 66 69 65 64 20 77 69  les specified wi
75f0: 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61 74 69  th.  ** a relati
7600: 76 65 20 70 61 74 68 20 77 69 6c 6c 20 70 72 6f  ve path will pro
7610: 62 61 62 6c 79 20 62 65 20 62 61 73 65 64 20 6f  bably be based o
7620: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 69  n the current di
7630: 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 0a  rectory for the.
7640: 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20 20 44    ** process.  D
7650: 61 74 61 62 61 73 65 20 66 69 6c 65 20 73 70 65  atabase file spe
7660: 63 69 66 69 65 64 20 77 69 74 68 20 61 6e 20 61  cified with an a
7670: 62 73 6f 6c 75 74 65 20 70 61 74 68 20 61 72 65  bsolute path are
7680: 20 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a 20 20   not impacted.  
7690: 2a 2a 20 62 79 20 74 68 69 73 20 73 65 74 74 69  ** by this setti
76a0: 6e 67 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ng, regardless o
76b0: 66 20 69 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a  f its value..  *
76c0: 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  *.  */.  case Pr
76d0: 61 67 54 79 70 5f 44 41 54 41 5f 53 54 4f 52 45  agTyp_DATA_STORE
76e0: 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20  _DIRECTORY: {.  
76f0: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
7700: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
7710: 67 6c 65 54 65 78 74 28 76 2c 20 73 71 6c 69 74  gleText(v, sqlit
7720: 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72  e3_data_director
7730: 79 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23  y);.    }else{.#
7740: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
7750: 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28  IT_WSD.      if(
7760: 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20   zRight[0] ){.  
7770: 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20        int res;. 
7780: 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
7790: 74 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e  te3OsAccess(db->
77a0: 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51  pVfs, zRight, SQ
77b0: 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44  LITE_ACCESS_READ
77c0: 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20  WRITE, &res);.  
77d0: 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
77e0: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d  LITE_OK || res==
77f0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
7800: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
7810: 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72  Parse, "not a wr
7820: 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79  itable directory
7830: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  ");.          go
7840: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
7850: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
7860: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
7870: 72 65 65 28 73 71 6c 69 74 65 33 5f 64 61 74 61  ree(sqlite3_data
7880: 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20  _directory);.   
7890: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
78a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
78b0: 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f  te3_data_directo
78c0: 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ry = sqlite3_mpr
78d0: 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68  intf("%s", zRigh
78e0: 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  t);.      }else{
78f0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
7900: 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20  _data_directory 
7910: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  = 0;.      }.#en
7920: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
7930: 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a  IT_WSD */.    }.
7940: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
7950: 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54  endif..#if SQLIT
7960: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
7970: 5f 53 54 59 4c 45 0a 20 20 2f 2a 0a 20 20 2a 2a  _STYLE.  /*.  **
7980: 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d     PRAGMA [schem
7990: 61 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  a.]lock_proxy_fi
79a0: 6c 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  le.  **   PRAGMA
79b0: 20 5b 73 63 68 65 6d 61 2e 5d 6c 6f 63 6b 5f 70   [schema.]lock_p
79c0: 72 6f 78 79 5f 66 69 6c 65 20 3d 20 22 3a 61 75  roxy_file = ":au
79d0: 74 6f 3a 22 7c 22 6c 6f 63 6b 5f 66 69 6c 65 5f  to:"|"lock_file_
79e0: 70 61 74 68 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  path".  **.  ** 
79f0: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
7a00: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c  e value of the l
7a10: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20 66  ock_proxy_file f
7a20: 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20  lag.  Changing. 
7a30: 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 73 65   ** the value se
7a40: 74 73 20 61 20 73 70 65 63 69 66 69 63 20 66 69  ts a specific fi
7a50: 6c 65 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  le to be used fo
7a60: 72 20 64 61 74 61 62 61 73 65 20 61 63 63 65 73  r database acces
7a70: 73 20 6c 6f 63 6b 73 2e 0a 20 20 2a 2a 0a 20 20  s locks..  **.  
7a80: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
7a90: 70 5f 4c 4f 43 4b 5f 50 52 4f 58 59 5f 46 49 4c  p_LOCK_PROXY_FIL
7aa0: 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52  E: {.    if( !zR
7ab0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 50 61  ight ){.      Pa
7ac0: 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71  ger *pPager = sq
7ad0: 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
7ae0: 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20  pDb->pBt);.     
7af0: 20 63 68 61 72 20 2a 70 72 6f 78 79 5f 66 69 6c   char *proxy_fil
7b00: 65 5f 70 61 74 68 20 3d 20 4e 55 4c 4c 3b 0a 20  e_path = NULL;. 
7b10: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c       sqlite3_fil
7b20: 65 20 2a 70 46 69 6c 65 20 3d 20 73 71 6c 69 74  e *pFile = sqlit
7b30: 65 33 50 61 67 65 72 46 69 6c 65 28 70 50 61 67  e3PagerFile(pPag
7b40: 65 72 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  er);.      sqlit
7b50: 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c 48  e3OsFileControlH
7b60: 69 6e 74 28 70 46 69 6c 65 2c 20 53 51 4c 49 54  int(pFile, SQLIT
7b70: 45 5f 47 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46  E_GET_LOCKPROXYF
7b80: 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20  ILE, .          
7b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ba0: 20 26 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74   &proxy_file_pat
7bb0: 68 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  h);.      return
7bc0: 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 70 72  SingleText(v, pr
7bd0: 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a  oxy_file_path);.
7be0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7bf0: 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d   Pager *pPager =
7c00: 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
7c10: 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20  er(pDb->pBt);.  
7c20: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65      sqlite3_file
7c30: 20 2a 70 46 69 6c 65 20 3d 20 73 71 6c 69 74 65   *pFile = sqlite
7c40: 33 50 61 67 65 72 46 69 6c 65 28 70 50 61 67 65  3PagerFile(pPage
7c50: 72 29 3b 0a 20 20 20 20 20 20 69 6e 74 20 72 65  r);.      int re
7c60: 73 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  s;.      if( zRi
7c70: 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ght[0] ){.      
7c80: 20 20 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46    res=sqlite3OsF
7c90: 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65  ileControl(pFile
7ca0: 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43  , SQLITE_SET_LOC
7cb0: 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20  KPROXYFILE, .   
7cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ce0: 20 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20    zRight);.     
7cf0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
7d00: 20 20 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46    res=sqlite3OsF
7d10: 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65  ileControl(pFile
7d20: 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43  , SQLITE_SET_LOC
7d30: 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20  KPROXYFILE, .   
7d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d60: 20 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 7d    NULL);.      }
7d70: 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 21 3d  .      if( res!=
7d80: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
7d90: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
7da0: 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 66 61  rMsg(pParse, "fa
7db0: 69 6c 65 64 20 74 6f 20 73 65 74 20 6c 6f 63 6b  iled to set lock
7dc0: 20 70 72 6f 78 79 20 66 69 6c 65 22 29 3b 0a 20   proxy file");. 
7dd0: 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67         goto prag
7de0: 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  ma_out;.      }.
7df0: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
7e00: 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
7e10: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
7e20: 4b 49 4e 47 5f 53 54 59 4c 45 20 2a 2f 20 20 20  KING_STYLE */   
7e30: 20 20 20 0a 20 20 20 20 0a 20 20 2f 2a 0a 20 20     .    .  /*.  
7e40: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
7e50: 65 6d 61 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73  ema.]synchronous
7e60: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
7e70: 73 63 68 65 6d 61 2e 5d 73 79 6e 63 68 72 6f 6e  schema.]synchron
7e80: 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41  ous=OFF|ON|NORMA
7e90: 4c 7c 46 55 4c 4c 7c 45 58 54 52 41 0a 20 20 2a  L|FULL|EXTRA.  *
7ea0: 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72  *.  ** Return or
7eb0: 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76   set the local v
7ec0: 61 6c 75 65 20 6f 66 20 74 68 65 20 73 79 6e 63  alue of the sync
7ed0: 68 72 6f 6e 6f 75 73 20 66 6c 61 67 2e 20 20 43  hronous flag.  C
7ee0: 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65  hanging.  ** the
7ef0: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f 65   local value doe
7f00: 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67  s not make chang
7f10: 65 73 20 74 6f 20 74 68 65 20 64 69 73 6b 20 66  es to the disk f
7f20: 69 6c 65 20 61 6e 64 20 74 68 65 0a 20 20 2a 2a  ile and the.  **
7f30: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77   default value w
7f40: 69 6c 6c 20 62 65 20 72 65 73 74 6f 72 65 64 20  ill be restored 
7f50: 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20 74 68  the next time th
7f60: 65 20 64 61 74 61 62 61 73 65 20 69 73 0a 20 20  e database is.  
7f70: 2a 2a 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a  ** opened..  */.
7f80: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53    case PragTyp_S
7f90: 59 4e 43 48 52 4f 4e 4f 55 53 3a 20 7b 0a 20 20  YNCHRONOUS: {.  
7fa0: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
7fb0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
7fc0: 67 6c 65 49 6e 74 28 76 2c 20 70 44 62 2d 3e 73  gleInt(v, pDb->s
7fd0: 61 66 65 74 79 5f 6c 65 76 65 6c 2d 31 29 3b 0a  afety_level-1);.
7fe0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7ff0: 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
8000: 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20  mmit ){.        
8010: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
8020: 70 50 61 72 73 65 2c 20 0a 20 20 20 20 20 20 20  pParse, .       
8030: 20 20 20 20 20 22 53 61 66 65 74 79 20 6c 65 76       "Safety lev
8040: 65 6c 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 68  el may not be ch
8050: 61 6e 67 65 64 20 69 6e 73 69 64 65 20 61 20 74  anged inside a t
8060: 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20  ransaction");.  
8070: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
8080: 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 20 3d 20     int iLevel = 
8090: 28 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28  (getSafetyLevel(
80a0: 7a 52 69 67 68 74 2c 30 2c 31 29 2b 31 29 20 26  zRight,0,1)+1) &
80b0: 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f   PAGER_SYNCHRONO
80c0: 55 53 5f 4d 41 53 4b 3b 0a 20 20 20 20 20 20 20  US_MASK;.       
80d0: 20 69 66 28 20 69 4c 65 76 65 6c 3d 3d 30 20 29   if( iLevel==0 )
80e0: 20 69 4c 65 76 65 6c 20 3d 20 31 3b 0a 20 20 20   iLevel = 1;.   
80f0: 20 20 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79       pDb->safety
8100: 5f 6c 65 76 65 6c 20 3d 20 69 4c 65 76 65 6c 3b  _level = iLevel;
8110: 0a 20 20 20 20 20 20 20 20 70 44 62 2d 3e 62 53  .        pDb->bS
8120: 79 6e 63 53 65 74 20 3d 20 31 3b 0a 20 20 20 20  yncSet = 1;.    
8130: 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46      setAllPagerF
8140: 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20 20 20  lags(db);.      
8150: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  }.    }.    brea
8160: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  k;.  }.#endif /*
8170: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
8180: 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23  ER_PRAGMAS */..#
8190: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
81a0: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a  IT_FLAG_PRAGMAS.
81b0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46    case PragTyp_F
81c0: 4c 41 47 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  LAG: {.    if( z
81d0: 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20  Right==0 ){.    
81e0: 20 20 73 65 74 50 72 61 67 6d 61 52 65 73 75 6c    setPragmaResul
81f0: 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c 20  tColumnNames(v, 
8200: 70 50 72 61 67 6d 61 29 3b 0a 20 20 20 20 20 20  pPragma);.      
8210: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
8220: 76 2c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  v, (db->flags & 
8230: 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 29 21 3d  pPragma->iArg)!=
8240: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
8250: 20 20 20 20 20 20 69 6e 74 20 6d 61 73 6b 20 3d        int mask =
8260: 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 3b 20   pPragma->iArg; 
8270: 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 62 69     /* Mask of bi
8280: 74 73 20 74 6f 20 73 65 74 20 6f 72 20 63 6c 65  ts to set or cle
8290: 61 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  ar. */.      if(
82a0: 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
82b0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  =0 ){.        /*
82c0: 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 73 75 70   Foreign key sup
82d0: 70 6f 72 74 20 6d 61 79 20 6e 6f 74 20 62 65 20  port may not be 
82e0: 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62  enabled or disab
82f0: 6c 65 64 20 77 68 69 6c 65 20 6e 6f 74 0a 20 20  led while not.  
8300: 20 20 20 20 20 20 2a 2a 20 69 6e 20 61 75 74 6f        ** in auto
8310: 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20 20 2a  -commit mode.  *
8320: 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20 26  /.        mask &
8330: 3d 20 7e 28 53 51 4c 49 54 45 5f 46 6f 72 65 69  = ~(SQLITE_Forei
8340: 67 6e 4b 65 79 73 29 3b 0a 20 20 20 20 20 20 7d  gnKeys);.      }
8350: 0a 23 69 66 20 53 51 4c 49 54 45 5f 55 53 45 52  .#if SQLITE_USER
8360: 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a  _AUTHENTICATION.
8370: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75        if( db->au
8380: 74 68 2e 61 75 74 68 4c 65 76 65 6c 3d 3d 55 41  th.authLevel==UA
8390: 55 54 48 5f 55 73 65 72 20 29 7b 0a 20 20 20 20  UTH_User ){.    
83a0: 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c      /* Do not al
83b0: 6c 6f 77 20 6e 6f 6e 2d 61 64 6d 69 6e 20 75 73  low non-admin us
83c0: 65 72 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68  ers to modify th
83d0: 65 20 73 63 68 65 6d 61 20 61 72 62 69 74 72 61  e schema arbitra
83e0: 72 69 6c 79 20 2a 2f 0a 20 20 20 20 20 20 20 20  rily */.        
83f0: 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45  mask &= ~(SQLITE
8400: 5f 57 72 69 74 65 53 63 68 65 6d 61 29 3b 0a 20  _WriteSchema);. 
8410: 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20       }.#endif.. 
8420: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
8430: 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68  GetBoolean(zRigh
8440: 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20  t, 0) ){.       
8450: 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 6d 61   db->flags |= ma
8460: 73 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  sk;.      }else{
8470: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61  .        db->fla
8480: 67 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a 20 20 20  gs &= ~mask;.   
8490: 20 20 20 20 20 69 66 28 20 6d 61 73 6b 3d 3d 53       if( mask==S
84a0: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29  QLITE_DeferFKs )
84b0: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
84c0: 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20 20 20 20 20  mCons = 0;.     
84d0: 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6e   }..      /* Man
84e0: 79 20 6f 66 20 74 68 65 20 66 6c 61 67 2d 70 72  y of the flag-pr
84f0: 61 67 6d 61 73 20 6d 6f 64 69 66 79 20 74 68 65  agmas modify the
8500: 20 63 6f 64 65 20 67 65 6e 65 72 61 74 65 64 20   code generated 
8510: 62 79 20 74 68 65 20 53 51 4c 20 0a 20 20 20 20  by the SQL .    
8520: 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 28 65    ** compiler (e
8530: 67 2e 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73  g. count_changes
8540: 29 2e 20 53 6f 20 61 64 64 20 61 6e 20 6f 70 63  ). So add an opc
8550: 6f 64 65 20 74 6f 20 65 78 70 69 72 65 20 61 6c  ode to expire al
8560: 6c 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69  l.      ** compi
8570: 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  led SQL statemen
8580: 74 73 20 61 66 74 65 72 20 6d 6f 64 69 66 79 69  ts after modifyi
8590: 6e 67 20 61 20 70 72 61 67 6d 61 20 76 61 6c 75  ng a pragma valu
85a0: 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
85b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
85c0: 4f 70 30 28 76 2c 20 4f 50 5f 45 78 70 69 72 65  Op0(v, OP_Expire
85d0: 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 50  );.      setAllP
85e0: 61 67 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20  agerFlags(db);. 
85f0: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
8600: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
8610: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
8620: 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64  RAGMAS */..#ifnd
8630: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
8640: 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20  CHEMA_PRAGMAS.  
8650: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
8660: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 3c 74 61 62   table_info(<tab
8670: 6c 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  le>).  **.  ** R
8680: 65 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72  eturn a single r
8690: 6f 77 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ow for each colu
86a0: 6d 6e 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20  mn of the named 
86b0: 74 61 62 6c 65 2e 20 54 68 65 20 63 6f 6c 75 6d  table. The colum
86c0: 6e 73 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 72  ns of.  ** the r
86d0: 65 74 75 72 6e 65 64 20 64 61 74 61 20 73 65 74  eturned data set
86e0: 20 61 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20   are:.  **.  ** 
86f0: 63 69 64 3a 20 20 20 20 20 20 20 20 43 6f 6c 75  cid:        Colu
8700: 6d 6e 20 69 64 20 28 6e 75 6d 62 65 72 65 64 20  mn id (numbered 
8710: 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
8720: 68 74 2c 20 73 74 61 72 74 69 6e 67 20 61 74 20  ht, starting at 
8730: 30 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20 20 20  0).  ** name:   
8740: 20 20 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a      Column name.
8750: 20 20 2a 2a 20 74 79 70 65 3a 20 20 20 20 20 20    ** type:      
8760: 20 43 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74   Column declarat
8770: 69 6f 6e 20 74 79 70 65 2e 0a 20 20 2a 2a 20 6e  ion type..  ** n
8780: 6f 74 6e 75 6c 6c 3a 20 20 20 20 54 72 75 65 20  otnull:    True 
8790: 69 66 20 27 4e 4f 54 20 4e 55 4c 4c 27 20 69 73  if 'NOT NULL' is
87a0: 20 70 61 72 74 20 6f 66 20 63 6f 6c 75 6d 6e 20   part of column 
87b0: 64 65 63 6c 61 72 61 74 69 6f 6e 0a 20 20 2a 2a  declaration.  **
87c0: 20 64 66 6c 74 5f 76 61 6c 75 65 3a 20 54 68 65   dflt_value: The
87d0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66   default value f
87e0: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 69  or the column, i
87f0: 66 20 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20 63 61  f any..  */.  ca
8800: 73 65 20 50 72 61 67 54 79 70 5f 54 41 42 4c 45  se PragTyp_TABLE
8810: 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68  _INFO: if( zRigh
8820: 74 20 29 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a  t ){.    Table *
8830: 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d  pTab;.    pTab =
8840: 20 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61   sqlite3LocateTa
8850: 62 6c 65 28 70 50 61 72 73 65 2c 20 4c 4f 43 41  ble(pParse, LOCA
8860: 54 45 5f 4e 4f 45 52 52 2c 20 7a 52 69 67 68 74  TE_NOERR, zRight
8870: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20  , zDb);.    if( 
8880: 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 69 6e  pTab ){.      in
8890: 74 20 69 2c 20 6b 3b 0a 20 20 20 20 20 20 69 6e  t i, k;.      in
88a0: 74 20 6e 48 69 64 64 65 6e 20 3d 20 30 3b 0a 20  t nHidden = 0;. 
88b0: 20 20 20 20 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f       Column *pCo
88c0: 6c 3b 0a 20 20 20 20 20 20 49 6e 64 65 78 20 2a  l;.      Index *
88d0: 70 50 6b 20 3d 20 73 71 6c 69 74 65 33 50 72 69  pPk = sqlite3Pri
88e0: 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61  maryKeyIndex(pTa
88f0: 62 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65  b);.      pParse
8900: 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20  ->nMem = 6;.    
8910: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
8920: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
8930: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
8940: 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
8950: 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73 65 2c 20  mnNames(pParse, 
8960: 70 54 61 62 29 3b 0a 20 20 20 20 20 20 66 6f 72  pTab);.      for
8970: 28 69 3d 30 2c 20 70 43 6f 6c 3d 70 54 61 62 2d  (i=0, pCol=pTab-
8980: 3e 61 43 6f 6c 3b 20 69 3c 70 54 61 62 2d 3e 6e  >aCol; i<pTab->n
8990: 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c 2b 2b  Col; i++, pCol++
89a0: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 49  ){.        if( I
89b0: 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 70 43  sHiddenColumn(pC
89c0: 6f 6c 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ol) ){.         
89d0: 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a 20 20 20 20   nHidden++;.    
89e0: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a        continue;.
89f0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
8a00: 20 20 69 66 28 20 28 70 43 6f 6c 2d 3e 63 6f 6c    if( (pCol->col
8a10: 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
8a20: 50 52 49 4d 4b 45 59 29 3d 3d 30 20 29 7b 0a 20  PRIMKEY)==0 ){. 
8a30: 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a           k = 0;.
8a40: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
8a50: 28 20 70 50 6b 3d 3d 30 20 29 7b 0a 20 20 20 20  ( pPk==0 ){.    
8a60: 20 20 20 20 20 20 6b 20 3d 20 31 3b 0a 20 20 20        k = 1;.   
8a70: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
8a80: 20 20 20 20 20 20 66 6f 72 28 6b 3d 31 3b 20 6b        for(k=1; k
8a90: 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c 20 26 26 20  <=pTab->nCol && 
8aa0: 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 2d  pPk->aiColumn[k-
8ab0: 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a 20 20  1]!=i; k++){}.  
8ac0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
8ad0: 61 73 73 65 72 74 28 20 70 43 6f 6c 2d 3e 70 44  assert( pCol->pD
8ae0: 66 6c 74 3d 3d 30 20 7c 7c 20 70 43 6f 6c 2d 3e  flt==0 || pCol->
8af0: 70 44 66 6c 74 2d 3e 6f 70 3d 3d 54 4b 5f 53 50  pDflt->op==TK_SP
8b00: 41 4e 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71  AN );.        sq
8b10: 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f  lite3VdbeMultiLo
8b20: 61 64 28 76 2c 20 31 2c 20 22 69 73 73 69 73 69  ad(v, 1, "issisi
8b30: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
8b40: 20 20 69 2d 6e 48 69 64 64 65 6e 2c 0a 20 20 20    i-nHidden,.   
8b50: 20 20 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c              pCol
8b60: 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20  ->zName,.       
8b70: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 43          sqlite3C
8b80: 6f 6c 75 6d 6e 54 79 70 65 28 70 43 6f 6c 2c 22  olumnType(pCol,"
8b90: 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  "),.            
8ba0: 20 20 20 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c     pCol->notNull
8bb0: 20 3f 20 31 20 3a 20 30 2c 0a 20 20 20 20 20 20   ? 1 : 0,.      
8bc0: 20 20 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e 70           pCol->p
8bd0: 44 66 6c 74 20 3f 20 70 43 6f 6c 2d 3e 70 44 66  Dflt ? pCol->pDf
8be0: 6c 74 2d 3e 75 2e 7a 54 6f 6b 65 6e 20 3a 20 30  lt->u.zToken : 0
8bf0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
8c00: 20 6b 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   k);.        sql
8c10: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
8c20: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
8c30: 31 2c 20 36 29 3b 0a 20 20 20 20 20 20 7d 0a 20  1, 6);.      }. 
8c40: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
8c50: 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
8c60: 5f 44 45 42 55 47 0a 20 20 63 61 73 65 20 50 72  _DEBUG.  case Pr
8c70: 61 67 54 79 70 5f 53 54 41 54 53 3a 20 7b 0a 20  agTyp_STATS: {. 
8c80: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a     Index *pIdx;.
8c90: 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 69 3b      HashElem *i;
8ca0: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
8cb0: 6d 20 3d 20 35 3b 0a 20 20 20 20 73 71 6c 69 74  m = 5;.    sqlit
8cc0: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
8cd0: 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b  ma(pParse, iDb);
8ce0: 0a 20 20 20 20 66 6f 72 28 69 3d 73 71 6c 69 74  .    for(i=sqlit
8cf0: 65 48 61 73 68 46 69 72 73 74 28 26 70 44 62 2d  eHashFirst(&pDb-
8d00: 3e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73  >pSchema->tblHas
8d10: 68 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65 48  h); i; i=sqliteH
8d20: 61 73 68 4e 65 78 74 28 69 29 29 7b 0a 20 20 20  ashNext(i)){.   
8d30: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d     Table *pTab =
8d40: 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28   sqliteHashData(
8d50: 69 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  i);.      sqlite
8d60: 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76  3VdbeMultiLoad(v
8d70: 2c 20 31 2c 20 22 73 73 69 69 69 22 2c 0a 20 20  , 1, "ssiii",.  
8d80: 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e 7a           pTab->z
8d90: 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
8da0: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70   0,.           p
8db0: 54 61 62 2d 3e 73 7a 54 61 62 52 6f 77 2c 0a 20  Tab->szTabRow,. 
8dc0: 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e            pTab->
8dd0: 6e 52 6f 77 4c 6f 67 45 73 74 2c 0a 20 20 20 20  nRowLogEst,.    
8de0: 20 20 20 20 20 20 20 70 54 61 62 2d 3e 74 61 62         pTab->tab
8df0: 46 6c 61 67 73 29 3b 0a 20 20 20 20 20 20 73 71  Flags);.      sq
8e00: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
8e10: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
8e20: 20 31 2c 20 35 29 3b 0a 20 20 20 20 20 20 66 6f   1, 5);.      fo
8e30: 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e  r(pIdx=pTab->pIn
8e40: 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d  dex; pIdx; pIdx=
8e50: 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20  pIdx->pNext){.  
8e60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8e70: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 32 2c  eMultiLoad(v, 2,
8e80: 20 22 73 69 69 69 22 2c 0a 20 20 20 20 20 20 20   "siii",.       
8e90: 20 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c      pIdx->zName,
8ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78  .           pIdx
8eb0: 2d 3e 73 7a 49 64 78 52 6f 77 2c 0a 20 20 20 20  ->szIdxRow,.    
8ec0: 20 20 20 20 20 20 20 70 49 64 78 2d 3e 61 69 52         pIdx->aiR
8ed0: 6f 77 4c 6f 67 45 73 74 5b 30 5d 2c 0a 20 20 20  owLogEst[0],.   
8ee0: 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 68 61          pIdx->ha
8ef0: 73 53 74 61 74 31 29 3b 0a 20 20 20 20 20 20 20  sStat1);.       
8f00: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
8f10: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
8f20: 6f 77 2c 20 31 2c 20 35 29 3b 0a 20 20 20 20 20  ow, 1, 5);.     
8f30: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
8f40: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  reak;.#endif..  
8f50: 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44  case PragTyp_IND
8f60: 45 58 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69  EX_INFO: if( zRi
8f70: 67 68 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78  ght ){.    Index
8f80: 20 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c   *pIdx;.    Tabl
8f90: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 49 64  e *pTab;.    pId
8fa0: 78 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49  x = sqlite3FindI
8fb0: 6e 64 65 78 28 64 62 2c 20 7a 52 69 67 68 74 2c  ndex(db, zRight,
8fc0: 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70   zDb);.    if( p
8fd0: 49 64 78 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  Idx ){.      int
8fe0: 20 69 3b 0a 20 20 20 20 20 20 69 6e 74 20 6d 78   i;.      int mx
8ff0: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50 72 61  ;.      if( pPra
9000: 67 6d 61 2d 3e 69 41 72 67 20 29 7b 0a 20 20 20  gma->iArg ){.   
9010: 20 20 20 20 20 2f 2a 20 50 52 41 47 4d 41 20 69       /* PRAGMA i
9020: 6e 64 65 78 5f 78 69 6e 66 6f 20 28 6e 65 77 65  ndex_xinfo (newe
9030: 72 20 76 65 72 73 69 6f 6e 20 77 69 74 68 20 6d  r version with m
9040: 6f 72 65 20 72 6f 77 73 20 61 6e 64 20 63 6f 6c  ore rows and col
9050: 75 6d 6e 73 29 20 2a 2f 0a 20 20 20 20 20 20 20  umns) */.       
9060: 20 6d 78 20 3d 20 70 49 64 78 2d 3e 6e 43 6f 6c   mx = pIdx->nCol
9070: 75 6d 6e 3b 0a 20 20 20 20 20 20 20 20 70 50 61  umn;.        pPa
9080: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20  rse->nMem = 6;. 
9090: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
90a0: 20 20 20 20 2f 2a 20 50 52 41 47 4d 41 20 69 6e      /* PRAGMA in
90b0: 64 65 78 5f 69 6e 66 6f 20 28 6c 65 67 61 63 79  dex_info (legacy
90c0: 20 76 65 72 73 69 6f 6e 29 20 2a 2f 0a 20 20 20   version) */.   
90d0: 20 20 20 20 20 6d 78 20 3d 20 70 49 64 78 2d 3e       mx = pIdx->
90e0: 6e 4b 65 79 43 6f 6c 3b 0a 20 20 20 20 20 20 20  nKeyCol;.       
90f0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
9100: 33 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  3;.      }.     
9110: 20 70 54 61 62 20 3d 20 70 49 64 78 2d 3e 70 54   pTab = pIdx->pT
9120: 61 62 6c 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  able;.      sqli
9130: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
9140: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29  ema(pParse, iDb)
9150: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
9160: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3c 3d 70 50  pParse->nMem<=pP
9170: 72 61 67 6d 61 2d 3e 6e 50 72 61 67 43 4e 61 6d  ragma->nPragCNam
9180: 65 20 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  e );.      for(i
9190: 3d 30 3b 20 69 3c 6d 78 3b 20 69 2b 2b 29 7b 0a  =0; i<mx; i++){.
91a0: 20 20 20 20 20 20 20 20 69 31 36 20 63 6e 75 6d          i16 cnum
91b0: 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d   = pIdx->aiColum
91c0: 6e 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 73 71  n[i];.        sq
91d0: 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f  lite3VdbeMultiLo
91e0: 61 64 28 76 2c 20 31 2c 20 22 69 69 73 22 2c 20  ad(v, 1, "iis", 
91f0: 69 2c 20 63 6e 75 6d 2c 0a 20 20 20 20 20 20 20  i, cnum,.       
9200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9210: 20 20 20 20 20 20 63 6e 75 6d 3c 30 20 3f 20 30        cnum<0 ? 0
9220: 20 3a 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e   : pTab->aCol[cn
9230: 75 6d 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  um].zName);.    
9240: 20 20 20 20 69 66 28 20 70 50 72 61 67 6d 61 2d      if( pPragma-
9250: 3e 69 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20  >iArg ){.       
9260: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75     sqlite3VdbeMu
9270: 6c 74 69 4c 6f 61 64 28 76 2c 20 34 2c 20 22 69  ltiLoad(v, 4, "i
9280: 73 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  si",.           
9290: 20 70 49 64 78 2d 3e 61 53 6f 72 74 4f 72 64 65   pIdx->aSortOrde
92a0: 72 5b 69 5d 2c 0a 20 20 20 20 20 20 20 20 20 20  r[i],.          
92b0: 20 20 70 49 64 78 2d 3e 61 7a 43 6f 6c 6c 5b 69    pIdx->azColl[i
92c0: 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ],.            i
92d0: 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b  <pIdx->nKeyCol);
92e0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
92f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9300: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
9310: 74 52 6f 77 2c 20 31 2c 20 70 50 61 72 73 65 2d  tRow, 1, pParse-
9320: 3e 6e 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a  >nMem);.      }.
9330: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
9340: 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54  k;..  case PragT
9350: 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54 3a 20 69  yp_INDEX_LIST: i
9360: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
9370: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20   Index *pIdx;.  
9380: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
9390: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 54     int i;.    pT
93a0: 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  ab = sqlite3Find
93b0: 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74  Table(db, zRight
93c0: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20  , zDb);.    if( 
93d0: 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 70 50  pTab ){.      pP
93e0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 35 3b 0a  arse->nMem = 5;.
93f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
9400: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
9410: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
9420: 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d    for(pIdx=pTab-
9430: 3e 70 49 6e 64 65 78 2c 20 69 3d 30 3b 20 70 49  >pIndex, i=0; pI
9440: 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
9450: 4e 65 78 74 2c 20 69 2b 2b 29 7b 0a 20 20 20 20  Next, i++){.    
9460: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
9470: 61 7a 4f 72 69 67 69 6e 5b 5d 20 3d 20 7b 20 22  azOrigin[] = { "
9480: 63 22 2c 20 22 75 22 2c 20 22 70 6b 22 20 7d 3b  c", "u", "pk" };
9490: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
94a0: 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c  VdbeMultiLoad(v,
94b0: 20 31 2c 20 22 69 73 69 73 69 22 2c 0a 20 20 20   1, "isisi",.   
94c0: 20 20 20 20 20 20 20 20 69 2c 0a 20 20 20 20 20          i,.     
94d0: 20 20 20 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d        pIdx->zNam
94e0: 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 49 73  e,.           Is
94f0: 55 6e 69 71 75 65 49 6e 64 65 78 28 70 49 64 78  UniqueIndex(pIdx
9500: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 61 7a  ),.           az
9510: 4f 72 69 67 69 6e 5b 70 49 64 78 2d 3e 69 64 78  Origin[pIdx->idx
9520: 54 79 70 65 5d 2c 0a 20 20 20 20 20 20 20 20 20  Type],.         
9530: 20 20 70 49 64 78 2d 3e 70 50 61 72 74 49 64 78    pIdx->pPartIdx
9540: 57 68 65 72 65 21 3d 30 29 3b 0a 20 20 20 20 20  Where!=0);.     
9550: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9560: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
9570: 74 52 6f 77 2c 20 31 2c 20 35 29 3b 0a 20 20 20  tRow, 1, 5);.   
9580: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
9590: 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20   break;..  case 
95a0: 50 72 61 67 54 79 70 5f 44 41 54 41 42 41 53 45  PragTyp_DATABASE
95b0: 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20 69 6e 74  _LIST: {.    int
95c0: 20 69 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e   i;.    pParse->
95d0: 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 66 6f  nMem = 3;.    fo
95e0: 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
95f0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66  ; i++){.      if
9600: 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  ( db->aDb[i].pBt
9610: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
9620: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
9630: 2d 3e 61 44 62 5b 69 5d 2e 7a 44 62 53 4e 61 6d  ->aDb[i].zDbSNam
9640: 65 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 73 71  e!=0 );.      sq
9650: 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f  lite3VdbeMultiLo
9660: 61 64 28 76 2c 20 31 2c 20 22 69 73 73 22 2c 0a  ad(v, 1, "iss",.
9670: 20 20 20 20 20 20 20 20 20 69 2c 0a 20 20 20 20           i,.    
9680: 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 5d 2e       db->aDb[i].
9690: 7a 44 62 53 4e 61 6d 65 2c 0a 20 20 20 20 20 20  zDbSName,.      
96a0: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47     sqlite3BtreeG
96b0: 65 74 46 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61  etFilename(db->a
96c0: 44 62 5b 69 5d 2e 70 42 74 29 29 3b 0a 20 20 20  Db[i].pBt));.   
96d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
96e0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
96f0: 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20  tRow, 1, 3);.   
9700: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
9710: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
9720: 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54 3a 20  COLLATION_LIST: 
9730: 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b  {.    int i = 0;
9740: 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 70  .    HashElem *p
9750: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
9760: 65 6d 20 3d 20 32 3b 0a 20 20 20 20 66 6f 72 28  em = 2;.    for(
9770: 70 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  p=sqliteHashFirs
9780: 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29  t(&db->aCollSeq)
9790: 3b 20 70 3b 20 70 3d 73 71 6c 69 74 65 48 61 73  ; p; p=sqliteHas
97a0: 68 4e 65 78 74 28 70 29 29 7b 0a 20 20 20 20 20  hNext(p)){.     
97b0: 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20   CollSeq *pColl 
97c0: 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c  = (CollSeq *)sql
97d0: 69 74 65 48 61 73 68 44 61 74 61 28 70 29 3b 0a  iteHashData(p);.
97e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
97f0: 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20 31 2c  eMultiLoad(v, 1,
9800: 20 22 69 73 22 2c 20 69 2b 2b 2c 20 70 43 6f 6c   "is", i++, pCol
9810: 6c 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  l->zName);.     
9820: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9830: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
9840: 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d  ow, 1, 2);.    }
9850: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
9860: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
9870: 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d  MIT_SCHEMA_PRAGM
9880: 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  AS */..#ifndef S
9890: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
98a0: 47 4e 5f 4b 45 59 0a 20 20 63 61 73 65 20 50 72  GN_KEY.  case Pr
98b0: 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45  agTyp_FOREIGN_KE
98c0: 59 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67  Y_LIST: if( zRig
98d0: 68 74 20 29 7b 0a 20 20 20 20 46 4b 65 79 20 2a  ht ){.    FKey *
98e0: 70 46 4b 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  pFK;.    Table *
98f0: 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d  pTab;.    pTab =
9900: 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c   sqlite3FindTabl
9910: 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  e(db, zRight, zD
9920: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62  b);.    if( pTab
9930: 20 29 7b 0a 20 20 20 20 20 20 70 46 4b 20 3d 20   ){.      pFK = 
9940: 70 54 61 62 2d 3e 70 46 4b 65 79 3b 0a 20 20 20  pTab->pFKey;.   
9950: 20 20 20 69 66 28 20 70 46 4b 20 29 7b 0a 20 20     if( pFK ){.  
9960: 20 20 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b        int i = 0;
9970: 20 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65   .        pParse
9980: 2d 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20 20 20  ->nMem = 8;.    
9990: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
99a0: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
99b0: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  se, iDb);.      
99c0: 20 20 77 68 69 6c 65 28 70 46 4b 29 7b 0a 20 20    while(pFK){.  
99d0: 20 20 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20          int j;. 
99e0: 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30           for(j=0
99f0: 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a  ; j<pFK->nCol; j
9a00: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
9a10: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74   sqlite3VdbeMult
9a20: 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 69 69 73  iLoad(v, 1, "iis
9a30: 73 73 73 73 73 22 2c 0a 20 20 20 20 20 20 20 20  sssss",.        
9a40: 20 20 20 20 20 20 20 20 20 20 20 69 2c 0a 20 20             i,.  
9a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a60: 20 6a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   j,.            
9a70: 20 20 20 20 20 20 20 70 46 4b 2d 3e 7a 54 6f 2c         pFK->zTo,
9a80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9a90: 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 70      pTab->aCol[p
9aa0: 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f  FK->aCol[j].iFro
9ab0: 6d 5d 2e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20  m].zName,.      
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 46 4b               pFK
9ad0: 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43 6f 6c 2c 0a  ->aCol[j].zCol,.
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9af0: 20 20 20 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46     actionName(pF
9b00: 4b 2d 3e 61 41 63 74 69 6f 6e 5b 31 5d 29 2c 20  K->aAction[1]), 
9b10: 20 2f 2a 20 4f 4e 20 55 50 44 41 54 45 20 2a 2f   /* ON UPDATE */
9b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9b30: 20 20 20 20 61 63 74 69 6f 6e 4e 61 6d 65 28 70      actionName(p
9b40: 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 30 5d 29 2c  FK->aAction[0]),
9b50: 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 2a    /* ON DELETE *
9b60: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
9b70: 20 20 20 20 20 22 4e 4f 4e 45 22 29 3b 0a 20 20       "NONE");.  
9b80: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
9b90: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
9ba0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
9bb0: 38 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  8);.          }.
9bc0: 20 20 20 20 20 20 20 20 20 20 2b 2b 69 3b 0a 20            ++i;. 
9bd0: 20 20 20 20 20 20 20 20 20 70 46 4b 20 3d 20 70           pFK = p
9be0: 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 3b 0a 20  FK->pNextFrom;. 
9bf0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
9c00: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
9c10: 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64  ak;.#endif /* !d
9c20: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
9c30: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20  IT_FOREIGN_KEY) 
9c40: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
9c50: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
9c60: 4b 45 59 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  KEY.#ifndef SQLI
9c70: 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
9c80: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46    case PragTyp_F
9c90: 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48 45 43 4b  OREIGN_KEY_CHECK
9ca0: 3a 20 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70 46  : {.    FKey *pF
9cb0: 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  K;             /
9cc0: 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  * A foreign key 
9cd0: 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20  constraint */.  
9ce0: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
9cf0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 69 6c           /* Chil
9d00: 64 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 20  d table contain 
9d10: 22 52 45 46 45 52 45 4e 43 45 53 22 20 6b 65 79  "REFERENCES" key
9d20: 77 6f 72 64 20 2a 2f 0a 20 20 20 20 54 61 62 6c  word */.    Tabl
9d30: 65 20 2a 70 50 61 72 65 6e 74 3b 20 20 20 20 20  e *pParent;     
9d40: 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 74 61 62     /* Parent tab
9d50: 6c 65 20 74 68 61 74 20 63 68 69 6c 64 20 70 6f  le that child po
9d60: 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20 20 20 49  ints to */.    I
9d70: 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20 20 20  ndex *pIdx;     
9d80: 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
9d90: 6e 20 74 68 65 20 70 61 72 65 6e 74 20 74 61 62  n the parent tab
9da0: 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b  le */.    int i;
9db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9dc0: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
9dd0: 3a 20 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 6e  :  Foreign key n
9de0: 75 6d 62 65 72 20 66 6f 72 20 70 54 61 62 20 2a  umber for pTab *
9df0: 2f 0a 20 20 20 20 69 6e 74 20 6a 3b 20 20 20 20  /.    int j;    
9e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9e10: 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 46  Loop counter:  F
9e20: 69 65 6c 64 20 6f 66 20 74 68 65 20 66 6f 72 65  ield of the fore
9e30: 69 67 6e 20 6b 65 79 20 2a 2f 0a 20 20 20 20 48  ign key */.    H
9e40: 61 73 68 45 6c 65 6d 20 2a 6b 3b 20 20 20 20 20  ashElem *k;     
9e50: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
9e60: 75 6e 74 65 72 3a 20 20 4e 65 78 74 20 74 61 62  unter:  Next tab
9e70: 6c 65 20 69 6e 20 73 63 68 65 6d 61 20 2a 2f 0a  le in schema */.
9e80: 20 20 20 20 69 6e 74 20 78 3b 20 20 20 20 20 20      int x;      
9e90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 72 65             /* re
9ea0: 73 75 6c 74 20 76 61 72 69 61 62 6c 65 20 2a 2f  sult variable */
9eb0: 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75  .    int regResu
9ec0: 6c 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 33  lt;         /* 3
9ed0: 20 72 65 67 69 73 74 65 72 73 20 74 6f 20 68 6f   registers to ho
9ee0: 6c 64 20 61 20 72 65 73 75 6c 74 20 72 6f 77 20  ld a result row 
9ef0: 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 4b 65  */.    int regKe
9f00: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  y;            /*
9f10: 20 52 65 67 69 73 74 65 72 20 74 6f 20 68 6f 6c   Register to hol
9f20: 64 20 6b 65 79 20 66 6f 72 20 63 68 65 63 6b 69  d key for checki
9f30: 6e 67 20 74 68 65 20 46 4b 20 2a 2f 0a 20 20 20  ng the FK */.   
9f40: 20 69 6e 74 20 72 65 67 52 6f 77 3b 20 20 20 20   int regRow;    
9f50: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
9f60: 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61 20 72  ters to hold a r
9f70: 6f 77 20 66 72 6f 6d 20 70 54 61 62 20 2a 2f 0a  ow from pTab */.
9f80: 20 20 20 20 69 6e 74 20 61 64 64 72 54 6f 70 3b      int addrTop;
9f90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
9fa0: 70 20 6f 66 20 61 20 6c 6f 6f 70 20 63 68 65 63  p of a loop chec
9fb0: 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b 65 79  king foreign key
9fc0: 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64  s */.    int add
9fd0: 72 4f 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  rOk;            
9fe0: 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 69 66 20  /* Jump here if 
9ff0: 74 68 65 20 6b 65 79 20 69 73 20 4f 4b 20 2a 2f  the key is OK */
a000: 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 73  .    int *aiCols
a010: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63  ;           /* c
a020: 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74 20 63  hild to parent c
a030: 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e 67 20 2a 2f  olumn mapping */
a040: 0a 0a 20 20 20 20 72 65 67 52 65 73 75 6c 74 20  ..    regResult 
a050: 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2b 31  = pParse->nMem+1
a060: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
a070: 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20 72 65 67  em += 4;.    reg
a080: 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  Key = ++pParse->
a090: 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67 52 6f 77  nMem;.    regRow
a0a0: 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65   = ++pParse->nMe
a0b0: 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f  m;.    sqlite3Co
a0c0: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
a0d0: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
a0e0: 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68 46   k = sqliteHashF
a0f0: 69 72 73 74 28 26 64 62 2d 3e 61 44 62 5b 69 44  irst(&db->aDb[iD
a100: 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48  b].pSchema->tblH
a110: 61 73 68 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  ash);.    while(
a120: 20 6b 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20   k ){.      if( 
a130: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
a140: 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33    pTab = sqlite3
a150: 4c 6f 63 61 74 65 54 61 62 6c 65 28 70 50 61 72  LocateTable(pPar
a160: 73 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c 20 7a  se, 0, zRight, z
a170: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d  Db);.        k =
a180: 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   0;.      }else{
a190: 0a 20 20 20 20 20 20 20 20 70 54 61 62 20 3d 20  .        pTab = 
a1a0: 28 54 61 62 6c 65 2a 29 73 71 6c 69 74 65 48 61  (Table*)sqliteHa
a1b0: 73 68 44 61 74 61 28 6b 29 3b 0a 20 20 20 20 20  shData(k);.     
a1c0: 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73     k = sqliteHas
a1d0: 68 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20 20 20  hNext(k);.      
a1e0: 7d 0a 20 20 20 20 20 20 69 66 28 20 70 54 61 62  }.      if( pTab
a1f0: 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70 46 4b  ==0 || pTab->pFK
a200: 65 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  ey==0 ) continue
a210: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54  ;.      sqlite3T
a220: 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c  ableLock(pParse,
a230: 20 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e 75 6d   iDb, pTab->tnum
a240: 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  , 0, pTab->zName
a250: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 54 61  );.      if( pTa
a260: 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e 70  b->nCol+regRow>p
a270: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20 70 50  Parse->nMem ) pP
a280: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54 61  arse->nMem = pTa
a290: 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52 6f 77  b->nCol + regRow
a2a0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f  ;.      sqlite3O
a2b0: 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c  penTable(pParse,
a2c0: 20 30 2c 20 69 44 62 2c 20 70 54 61 62 2c 20 4f   0, iDb, pTab, O
a2d0: 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20  P_OpenRead);.   
a2e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f     sqlite3VdbeLo
a2f0: 61 64 53 74 72 69 6e 67 28 76 2c 20 72 65 67 52  adString(v, regR
a300: 65 73 75 6c 74 2c 20 70 54 61 62 2d 3e 7a 4e 61  esult, pTab->zNa
a310: 6d 65 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  me);.      for(i
a320: 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46  =1, pFK=pTab->pF
a330: 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70  Key; pFK; i++, p
a340: 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f  FK=pFK->pNextFro
a350: 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61 72  m){.        pPar
a360: 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  ent = sqlite3Fin
a370: 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e  dTable(db, pFK->
a380: 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20  zTo, zDb);.     
a390: 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 3d 3d     if( pParent==
a3a0: 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
a3b0: 20 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a        pIdx = 0;.
a3c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 54          sqlite3T
a3d0: 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c  ableLock(pParse,
a3e0: 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2d 3e 74   iDb, pParent->t
a3f0: 6e 75 6d 2c 20 30 2c 20 70 50 61 72 65 6e 74 2d  num, 0, pParent-
a400: 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20  >zName);.       
a410: 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f   x = sqlite3FkLo
a420: 63 61 74 65 49 6e 64 65 78 28 70 50 61 72 73 65  cateIndex(pParse
a430: 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20  , pParent, pFK, 
a440: 26 70 49 64 78 2c 20 30 29 3b 0a 20 20 20 20 20  &pIdx, 0);.     
a450: 20 20 20 69 66 28 20 78 3d 3d 30 20 29 7b 0a 20     if( x==0 ){. 
a460: 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49 64           if( pId
a470: 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  x==0 ){.        
a480: 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54      sqlite3OpenT
a490: 61 62 6c 65 28 70 50 61 72 73 65 2c 20 69 2c 20  able(pParse, i, 
a4a0: 69 44 62 2c 20 70 50 61 72 65 6e 74 2c 20 4f 50  iDb, pParent, OP
a4b0: 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20  _OpenRead);.    
a4c0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
a4d0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
a4e0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
a4f0: 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c 20 70 49  _OpenRead, i, pI
a500: 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62 29 3b 0a  dx->tnum, iDb);.
a510: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
a520: 74 65 33 56 64 62 65 53 65 74 50 34 4b 65 79 49  te3VdbeSetP4KeyI
a530: 6e 66 6f 28 70 50 61 72 73 65 2c 20 70 49 64 78  nfo(pParse, pIdx
a540: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
a550: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
a560: 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20          k = 0;. 
a570: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
a580: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
a590: 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  }.      assert( 
a5a0: 70 50 61 72 73 65 2d 3e 6e 45 72 72 3e 30 20 7c  pParse->nErr>0 |
a5b0: 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a 20 20 20 20  | pFK==0 );.    
a5c0: 20 20 69 66 28 20 70 46 4b 20 29 20 62 72 65 61    if( pFK ) brea
a5d0: 6b 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50 61  k;.      if( pPa
a5e0: 72 73 65 2d 3e 6e 54 61 62 3c 69 20 29 20 70 50  rse->nTab<i ) pP
a5f0: 61 72 73 65 2d 3e 6e 54 61 62 20 3d 20 69 3b 0a  arse->nTab = i;.
a600: 20 20 20 20 20 20 61 64 64 72 54 6f 70 20 3d 20        addrTop = 
a610: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
a620: 31 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20  1(v, OP_Rewind, 
a630: 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  0); VdbeCoverage
a640: 28 76 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  (v);.      for(i
a650: 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46  =1, pFK=pTab->pF
a660: 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70  Key; pFK; i++, p
a670: 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f  FK=pFK->pNextFro
a680: 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61 72  m){.        pPar
a690: 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  ent = sqlite3Fin
a6a0: 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e  dTable(db, pFK->
a6b0: 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20  zTo, zDb);.     
a6c0: 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20 20 20     pIdx = 0;.   
a6d0: 20 20 20 20 20 61 69 43 6f 6c 73 20 3d 20 30 3b       aiCols = 0;
a6e0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61  .        if( pPa
a6f0: 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20  rent ){.        
a700: 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c    x = sqlite3FkL
a710: 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61 72 73  ocateIndex(pPars
a720: 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c  e, pParent, pFK,
a730: 20 26 70 49 64 78 2c 20 26 61 69 43 6f 6c 73 29   &pIdx, &aiCols)
a740: 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  ;.          asse
a750: 72 74 28 20 78 3d 3d 30 20 29 3b 0a 20 20 20 20  rt( x==0 );.    
a760: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61 64      }.        ad
a770: 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56 64  drOk = sqlite3Vd
a780: 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a  beMakeLabel(v);.
a790: 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72          if( pPar
a7a0: 65 6e 74 20 26 26 20 70 49 64 78 3d 3d 30 20 29  ent && pIdx==0 )
a7b0: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  {.          int 
a7c0: 69 4b 65 79 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c  iKey = pFK->aCol
a7d0: 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20 20 20 20 20  [0].iFrom;.     
a7e0: 20 20 20 20 20 61 73 73 65 72 74 28 20 69 4b 65       assert( iKe
a7f0: 79 3e 3d 30 20 26 26 20 69 4b 65 79 3c 70 54 61  y>=0 && iKey<pTa
a800: 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20  b->nCol );.     
a810: 20 20 20 20 20 69 66 28 20 69 4b 65 79 21 3d 70       if( iKey!=p
a820: 54 61 62 2d 3e 69 50 4b 65 79 20 29 7b 0a 20 20  Tab->iPKey ){.  
a830: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
a840: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
a850: 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c 20 69 4b 65  P_Column, 0, iKe
a860: 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20  y, regRow);.    
a870: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 43          sqlite3C
a880: 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 76 2c 20  olumnDefault(v, 
a890: 70 54 61 62 2c 20 69 4b 65 79 2c 20 72 65 67 52  pTab, iKey, regR
a8a0: 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ow);.           
a8b0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
a8c0: 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c  p2(v, OP_IsNull,
a8d0: 20 72 65 67 52 6f 77 2c 20 61 64 64 72 4f 6b 29   regRow, addrOk)
a8e0: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
a8f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  );.          }el
a900: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
a910: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
a920: 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30  2(v, OP_Rowid, 0
a930: 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20  , regRow);.     
a940: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
a950: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
a960: 70 33 28 76 2c 20 4f 50 5f 53 65 65 6b 52 6f 77  p3(v, OP_SeekRow
a970: 69 64 2c 20 69 2c 20 30 2c 20 72 65 67 52 6f 77  id, i, 0, regRow
a980: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
a990: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
a9a0: 6c 69 74 65 33 56 64 62 65 47 6f 74 6f 28 76 2c  lite3VdbeGoto(v,
a9b0: 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20   addrOk);.      
a9c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
a9d0: 75 6d 70 48 65 72 65 28 76 2c 20 73 71 6c 69 74  umpHere(v, sqlit
a9e0: 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64 64  e3VdbeCurrentAdd
a9f0: 72 28 76 29 2d 32 29 3b 0a 20 20 20 20 20 20 20  r(v)-2);.       
aa00: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
aa10: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b    for(j=0; j<pFK
aa20: 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20  ->nCol; j++){.  
aa30: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
aa40: 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
aa50: 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70 54 61  mnOfTable(v, pTa
aa60: 62 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20  b, 0,.          
aa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa80: 20 20 61 69 43 6f 6c 73 20 3f 20 61 69 43 6f 6c    aiCols ? aiCol
aa90: 73 5b 6a 5d 20 3a 20 70 46 4b 2d 3e 61 43 6f 6c  s[j] : pFK->aCol
aaa0: 5b 6a 5d 2e 69 46 72 6f 6d 2c 20 72 65 67 52 6f  [j].iFrom, regRo
aab0: 77 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20 20 20  w+j);.          
aac0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
aad0: 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c  Op2(v, OP_IsNull
aae0: 2c 20 72 65 67 52 6f 77 2b 6a 2c 20 61 64 64 72  , regRow+j, addr
aaf0: 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  Ok); VdbeCoverag
ab00: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
ab10: 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  }.          if( 
ab20: 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20  pParent ){.     
ab30: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ab40: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 4d  beAddOp4(v, OP_M
ab50: 61 6b 65 52 65 63 6f 72 64 2c 20 72 65 67 52 6f  akeRecord, regRo
ab60: 77 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 2c 20 72 65  w, pFK->nCol, re
ab70: 67 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20  gKey,.          
ab80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab90: 20 20 20 20 73 71 6c 69 74 65 33 49 6e 64 65 78      sqlite3Index
aba0: 41 66 66 69 6e 69 74 79 53 74 72 28 64 62 2c 70  AffinityStr(db,p
abb0: 49 64 78 29 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 29  Idx), pFK->nCol)
abc0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
abd0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 49  lite3VdbeAddOp4I
abe0: 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20  nt(v, OP_Found, 
abf0: 69 2c 20 61 64 64 72 4f 6b 2c 20 72 65 67 4b 65  i, addrOk, regKe
ac00: 79 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  y, 0);.         
ac10: 20 20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28     VdbeCoverage(
ac20: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  v);.          }.
ac30: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ac40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ac50: 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c  Op2(v, OP_Rowid,
ac60: 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2b 31 29   0, regResult+1)
ac70: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
ac80: 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76  3VdbeMultiLoad(v
ac90: 2c 20 72 65 67 52 65 73 75 6c 74 2b 32 2c 20 22  , regResult+2, "
aca0: 73 69 22 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 69  si", pFK->zTo, i
acb0: 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  -1);.        sql
acc0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
acd0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
ace0: 72 65 67 52 65 73 75 6c 74 2c 20 34 29 3b 0a 20  regResult, 4);. 
acf0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ad00: 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76  beResolveLabel(v
ad10: 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20  , addrOk);.     
ad20: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
ad30: 28 64 62 2c 20 61 69 43 6f 6c 73 29 3b 0a 20 20  (db, aiCols);.  
ad40: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
ad50: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
ad60: 20 4f 50 5f 4e 65 78 74 2c 20 30 2c 20 61 64 64   OP_Next, 0, add
ad70: 72 54 6f 70 2b 31 29 3b 20 56 64 62 65 43 6f 76  rTop+1); VdbeCov
ad80: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
ad90: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
ada0: 65 72 65 28 76 2c 20 61 64 64 72 54 6f 70 29 3b  ere(v, addrTop);
adb0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
adc0: 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64  ak;.#endif /* !d
add0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
ade0: 49 54 5f 54 52 49 47 47 45 52 29 20 2a 2f 0a 23  IT_TRIGGER) */.#
adf0: 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
ae00: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
ae10: 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23  REIGN_KEY) */..#
ae20: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20  ifndef NDEBUG.  
ae30: 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41 52  case PragTyp_PAR
ae40: 53 45 52 5f 54 52 41 43 45 3a 20 7b 0a 20 20 20  SER_TRACE: {.   
ae50: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
ae60: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
ae70: 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68  GetBoolean(zRigh
ae80: 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20  t, 0) ){.       
ae90: 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
aea0: 61 63 65 28 73 74 64 6f 75 74 2c 20 22 70 61 72  ace(stdout, "par
aeb0: 73 65 72 3a 20 22 29 3b 0a 20 20 20 20 20 20 7d  ser: ");.      }
aec0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
aed0: 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65  lite3ParserTrace
aee0: 28 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a  (0, 0);.      }.
aef0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
af00: 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20  k;.#endif..  /* 
af10: 52 65 69 6e 73 74 61 6c 6c 20 74 68 65 20 4c 49  Reinstall the LI
af20: 4b 45 20 61 6e 64 20 47 4c 4f 42 20 66 75 6e 63  KE and GLOB func
af30: 74 69 6f 6e 73 2e 20 20 54 68 65 20 76 61 72 69  tions.  The vari
af40: 61 6e 74 20 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a  ant of LIKE.  **
af50: 20 75 73 65 64 20 77 69 6c 6c 20 62 65 20 63 61   used will be ca
af60: 73 65 20 73 65 6e 73 69 74 69 76 65 20 6f 72 20  se sensitive or 
af70: 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  not depending on
af80: 20 74 68 65 20 52 48 53 2e 0a 20 20 2a 2f 0a 20   the RHS..  */. 
af90: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 41   case PragTyp_CA
afa0: 53 45 5f 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b  SE_SENSITIVE_LIK
afb0: 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  E: {.    if( zRi
afc0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
afd0: 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65  ite3RegisterLike
afe0: 46 75 6e 63 74 69 6f 6e 73 28 64 62 2c 20 73 71  Functions(db, sq
aff0: 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
b000: 7a 52 69 67 68 74 2c 20 30 29 29 3b 0a 20 20 20  zRight, 0));.   
b010: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
b020: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
b030: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f  INTEGRITY_CHECK_
b040: 45 52 52 4f 52 5f 4d 41 58 0a 23 20 64 65 66 69  ERROR_MAX.# defi
b050: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52  ne SQLITE_INTEGR
b060: 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f  ITY_CHECK_ERROR_
b070: 4d 41 58 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a  MAX 100.#endif..
b080: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
b090: 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
b0a0: 45 43 4b 0a 20 20 2f 2a 20 50 72 61 67 6d 61 20  ECK.  /* Pragma 
b0b0: 22 71 75 69 63 6b 5f 63 68 65 63 6b 22 20 69 73  "quick_check" is
b0c0: 20 72 65 64 75 63 65 64 20 76 65 72 73 69 6f 6e   reduced version
b0d0: 20 6f 66 20 0a 20 20 2a 2a 20 69 6e 74 65 67 72   of .  ** integr
b0e0: 69 74 79 5f 63 68 65 63 6b 20 64 65 73 69 67 6e  ity_check design
b0f0: 65 64 20 74 6f 20 64 65 74 65 63 74 20 6d 6f 73  ed to detect mos
b100: 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  t database corru
b110: 70 74 69 6f 6e 0a 20 20 2a 2a 20 77 69 74 68 6f  ption.  ** witho
b120: 75 74 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 6f  ut most of the o
b130: 76 65 72 68 65 61 64 20 6f 66 20 61 20 66 75 6c  verhead of a ful
b140: 6c 20 69 6e 74 65 67 72 69 74 79 2d 63 68 65 63  l integrity-chec
b150: 6b 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  k..  */.  case P
b160: 72 61 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59  ragTyp_INTEGRITY
b170: 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 69 6e  _CHECK: {.    in
b180: 74 20 69 2c 20 6a 2c 20 61 64 64 72 2c 20 6d 78  t i, j, addr, mx
b190: 45 72 72 3b 0a 0a 20 20 20 20 69 6e 74 20 69 73  Err;..    int is
b1a0: 51 75 69 63 6b 20 3d 20 28 73 71 6c 69 74 65 33  Quick = (sqlite3
b1b0: 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d  Tolower(zLeft[0]
b1c0: 29 3d 3d 27 71 27 29 3b 0a 0a 20 20 20 20 2f 2a  )=='q');..    /*
b1d0: 20 49 66 20 74 68 65 20 50 52 41 47 4d 41 20 63   If the PRAGMA c
b1e0: 6f 6d 6d 61 6e 64 20 77 61 73 20 6f 66 20 74 68  ommand was of th
b1f0: 65 20 66 6f 72 6d 20 22 50 52 41 47 4d 41 20 3c  e form "PRAGMA <
b200: 64 62 3e 2e 69 6e 74 65 67 72 69 74 79 5f 63 68  db>.integrity_ch
b210: 65 63 6b 22 2c 0a 20 20 20 20 2a 2a 20 74 68 65  eck",.    ** the
b220: 6e 20 69 44 62 20 69 73 20 73 65 74 20 74 6f 20  n iDb is set to 
b230: 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
b240: 20 64 61 74 61 62 61 73 65 20 69 64 65 6e 74 69   database identi
b250: 66 69 65 64 20 62 79 20 3c 64 62 3e 2e 0a 20 20  fied by <db>..  
b260: 20 20 2a 2a 20 49 6e 20 74 68 69 73 20 63 61 73    ** In this cas
b270: 65 2c 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  e, the integrity
b280: 20 6f 66 20 64 61 74 61 62 61 73 65 20 69 44 62   of database iDb
b290: 20 6f 6e 6c 79 20 69 73 20 76 65 72 69 66 69 65   only is verifie
b2a0: 64 20 62 79 0a 20 20 20 20 2a 2a 20 74 68 65 20  d by.    ** the 
b2b0: 56 44 42 45 20 63 72 65 61 74 65 64 20 62 65 6c  VDBE created bel
b2c0: 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  ow..    **.    *
b2d0: 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  * Otherwise, if 
b2e0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20  the command was 
b2f0: 73 69 6d 70 6c 79 20 22 50 52 41 47 4d 41 20 69  simply "PRAGMA i
b300: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 20  ntegrity_check" 
b310: 28 6f 72 0a 20 20 20 20 2a 2a 20 22 50 52 41 47  (or.    ** "PRAG
b320: 4d 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 22 29  MA quick_check")
b330: 2c 20 74 68 65 6e 20 69 44 62 20 69 73 20 73 65  , then iDb is se
b340: 74 20 74 6f 20 30 2e 20 49 6e 20 74 68 69 73 20  t to 0. In this 
b350: 63 61 73 65 2c 20 73 65 74 20 69 44 62 0a 20 20  case, set iDb.  
b360: 20 20 2a 2a 20 74 6f 20 2d 31 20 68 65 72 65 2c    ** to -1 here,
b370: 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61   to indicate tha
b380: 74 20 74 68 65 20 56 44 42 45 20 73 68 6f 75 6c  t the VDBE shoul
b390: 64 20 76 65 72 69 66 79 20 74 68 65 20 69 6e 74  d verify the int
b3a0: 65 67 72 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66  egrity.    ** of
b3b0: 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
b3c0: 74 61 62 61 73 65 73 2e 20 20 2a 2f 0a 20 20 20  tabases.  */.   
b3d0: 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
b3e0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
b3f0: 44 62 3d 3d 30 20 7c 7c 20 70 49 64 32 2d 3e 7a  Db==0 || pId2->z
b400: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 32   );.    if( pId2
b410: 2d 3e 7a 3d 3d 30 20 29 20 69 44 62 20 3d 20 2d  ->z==0 ) iDb = -
b420: 31 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69  1;..    /* Initi
b430: 61 6c 69 7a 65 20 74 68 65 20 56 44 42 45 20 70  alize the VDBE p
b440: 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 20 20 70 50  rogram */.    pP
b450: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a  arse->nMem = 6;.
b460: 0a 20 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20  .    /* Set the 
b470: 6d 61 78 69 6d 75 6d 20 65 72 72 6f 72 20 63 6f  maximum error co
b480: 75 6e 74 20 2a 2f 0a 20 20 20 20 6d 78 45 72 72  unt */.    mxErr
b490: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52   = SQLITE_INTEGR
b4a0: 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f  ITY_CHECK_ERROR_
b4b0: 4d 41 58 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  MAX;.    if( zRi
b4c0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
b4d0: 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69  ite3GetInt32(zRi
b4e0: 67 68 74 2c 20 26 6d 78 45 72 72 29 3b 0a 20 20  ght, &mxErr);.  
b4f0: 20 20 20 20 69 66 28 20 6d 78 45 72 72 3c 3d 30      if( mxErr<=0
b500: 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 78 45 72   ){.        mxEr
b510: 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47  r = SQLITE_INTEG
b520: 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52  RITY_CHECK_ERROR
b530: 5f 4d 41 58 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _MAX;.      }.  
b540: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
b550: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
b560: 49 6e 74 65 67 65 72 2c 20 6d 78 45 72 72 2c 20  Integer, mxErr, 
b570: 31 29 3b 20 20 2f 2a 20 72 65 67 5b 31 5d 20 68  1);  /* reg[1] h
b580: 6f 6c 64 73 20 65 72 72 6f 72 73 20 6c 65 66 74  olds errors left
b590: 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 61   */..    /* Do a
b5a0: 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  n integrity chec
b5b0: 6b 20 6f 6e 20 65 61 63 68 20 64 61 74 61 62 61  k on each databa
b5c0: 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 66  se file */.    f
b5d0: 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
b5e0: 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 48  b; i++){.      H
b5f0: 61 73 68 45 6c 65 6d 20 2a 78 3b 0a 20 20 20 20  ashElem *x;.    
b600: 20 20 48 61 73 68 20 2a 70 54 62 6c 73 3b 0a 20    Hash *pTbls;. 
b610: 20 20 20 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b       int *aRoot;
b620: 0a 20 20 20 20 20 20 69 6e 74 20 63 6e 74 20 3d  .      int cnt =
b630: 20 30 3b 0a 20 20 20 20 20 20 69 6e 74 20 6d 78   0;.      int mx
b640: 49 64 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 69  Idx = 0;.      i
b650: 6e 74 20 6e 49 64 78 3b 0a 0a 20 20 20 20 20 20  nt nIdx;..      
b660: 69 66 28 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  if( OMIT_TEMPDB 
b670: 26 26 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e  && i==1 ) contin
b680: 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20 69 44  ue;.      if( iD
b690: 62 3e 3d 30 20 26 26 20 69 21 3d 69 44 62 20 29  b>=0 && i!=iDb )
b6a0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20   continue;..    
b6b0: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
b6c0: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
b6d0: 2c 20 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72  , i);.      addr
b6e0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
b6f0: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp1(v, OP_IfPos
b700: 2c 20 31 29 3b 20 2f 2a 20 48 61 6c 74 20 69 66  , 1); /* Halt if
b710: 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a   out of errors *
b720: 2f 0a 20 20 20 20 20 20 56 64 62 65 43 6f 76 65  /.      VdbeCove
b730: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73  rage(v);.      s
b740: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
b750: 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20  (v, OP_Halt, 0, 
b760: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
b770: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
b780: 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f   addr);..      /
b790: 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74  * Do an integrit
b7a0: 79 20 63 68 65 63 6b 20 6f 66 20 74 68 65 20 42  y check of the B
b7b0: 2d 54 72 65 65 0a 20 20 20 20 20 20 2a 2a 0a 20  -Tree.      **. 
b7c0: 20 20 20 20 20 2a 2a 20 42 65 67 69 6e 20 62 79       ** Begin by
b7d0: 20 66 69 6e 64 69 6e 67 20 74 68 65 20 72 6f 6f   finding the roo
b7e0: 74 20 70 61 67 65 73 20 6e 75 6d 62 65 72 73 0a  t pages numbers.
b7f0: 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 61 6c 6c        ** for all
b800: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69   tables and indi
b810: 63 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  ces in the datab
b820: 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ase..      */.  
b830: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
b840: 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
b850: 6c 64 28 64 62 2c 20 69 2c 20 30 29 20 29 3b 0a  ld(db, i, 0) );.
b860: 20 20 20 20 20 20 70 54 62 6c 73 20 3d 20 26 64        pTbls = &d
b870: 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d  b->aDb[i].pSchem
b880: 61 2d 3e 74 62 6c 48 61 73 68 3b 0a 20 20 20 20  a->tblHash;.    
b890: 20 20 66 6f 72 28 63 6e 74 3d 30 2c 20 78 3d 73    for(cnt=0, x=s
b8a0: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 70  qliteHashFirst(p
b8b0: 54 62 6c 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69  Tbls); x; x=sqli
b8c0: 74 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a  teHashNext(x)){.
b8d0: 20 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70          Table *p
b8e0: 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68  Tab = sqliteHash
b8f0: 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20  Data(x);.       
b900: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20   Index *pIdx;.  
b910: 20 20 20 20 20 20 69 66 28 20 48 61 73 52 6f 77        if( HasRow
b920: 69 64 28 70 54 61 62 29 20 29 20 63 6e 74 2b 2b  id(pTab) ) cnt++
b930: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6e 49  ;.        for(nI
b940: 64 78 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d  dx=0, pIdx=pTab-
b950: 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70  >pIndex; pIdx; p
b960: 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c  Idx=pIdx->pNext,
b970: 20 6e 49 64 78 2b 2b 29 7b 20 63 6e 74 2b 2b 3b   nIdx++){ cnt++;
b980: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e   }.        if( n
b990: 49 64 78 3e 6d 78 49 64 78 20 29 20 6d 78 49 64  Idx>mxIdx ) mxId
b9a0: 78 20 3d 20 6e 49 64 78 3b 0a 20 20 20 20 20 20  x = nIdx;.      
b9b0: 7d 0a 20 20 20 20 20 20 61 52 6f 6f 74 20 3d 20  }.      aRoot = 
b9c0: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
b9d0: 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28  awNN(db, sizeof(
b9e0: 69 6e 74 29 2a 28 63 6e 74 2b 31 29 29 3b 0a 20  int)*(cnt+1));. 
b9f0: 20 20 20 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d       if( aRoot==
ba00: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  0 ) break;.     
ba10: 20 66 6f 72 28 63 6e 74 3d 30 2c 20 78 3d 73 71   for(cnt=0, x=sq
ba20: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 70 54  liteHashFirst(pT
ba30: 62 6c 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74  bls); x; x=sqlit
ba40: 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20  eHashNext(x)){. 
ba50: 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54         Table *pT
ba60: 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44  ab = sqliteHashD
ba70: 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20  ata(x);.        
ba80: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
ba90: 20 20 20 20 20 69 66 28 20 48 61 73 52 6f 77 69       if( HasRowi
baa0: 64 28 70 54 61 62 29 20 29 20 61 52 6f 6f 74 5b  d(pTab) ) aRoot[
bab0: 63 6e 74 2b 2b 5d 20 3d 20 70 54 61 62 2d 3e 74  cnt++] = pTab->t
bac0: 6e 75 6d 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  num;.        for
bad0: 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64  (pIdx=pTab->pInd
bae0: 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
baf0: 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20  Idx->pNext){.   
bb00: 20 20 20 20 20 20 20 61 52 6f 6f 74 5b 63 6e 74         aRoot[cnt
bb10: 2b 2b 5d 20 3d 20 70 49 64 78 2d 3e 74 6e 75 6d  ++] = pIdx->tnum
bb20: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
bb30: 20 20 7d 0a 20 20 20 20 20 20 61 52 6f 6f 74 5b    }.      aRoot[
bb40: 63 6e 74 5d 20 3d 20 30 3b 0a 0a 20 20 20 20 20  cnt] = 0;..     
bb50: 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 73 75   /* Make sure su
bb60: 66 66 69 63 69 65 6e 74 20 6e 75 6d 62 65 72 20  fficient number 
bb70: 6f 66 20 72 65 67 69 73 74 65 72 73 20 68 61 76  of registers hav
bb80: 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64  e been allocated
bb90: 20 2a 2f 0a 20 20 20 20 20 20 70 50 61 72 73 65   */.      pParse
bba0: 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 20 70 50  ->nMem = MAX( pP
bbb0: 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 38 2b 6d 78  arse->nMem, 8+mx
bbc0: 49 64 78 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  Idx );..      /*
bbd0: 20 44 6f 20 74 68 65 20 62 2d 74 72 65 65 20 69   Do the b-tree i
bbe0: 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 73 20  ntegrity checks 
bbf0: 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
bc00: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
bc10: 5f 49 6e 74 65 67 72 69 74 79 43 6b 2c 20 32 2c  _IntegrityCk, 2,
bc20: 20 63 6e 74 2c 20 31 2c 20 28 63 68 61 72 2a 29   cnt, 1, (char*)
bc30: 61 52 6f 6f 74 2c 50 34 5f 49 4e 54 41 52 52 41  aRoot,P4_INTARRA
bc40: 59 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  Y);.      sqlite
bc50: 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c  3VdbeChangeP5(v,
bc60: 20 28 75 38 29 69 29 3b 0a 20 20 20 20 20 20 61   (u8)i);.      a
bc70: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
bc80: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 73  eAddOp1(v, OP_Is
bc90: 4e 75 6c 6c 2c 20 32 29 3b 20 56 64 62 65 43 6f  Null, 2); VdbeCo
bca0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
bcb0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
bcc0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
bcd0: 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20  , 0, 3, 0,.     
bce0: 20 20 20 20 73 71 6c 69 74 65 33 4d 50 72 69 6e      sqlite3MPrin
bcf0: 74 66 28 64 62 2c 20 22 2a 2a 2a 20 69 6e 20 64  tf(db, "*** in d
bd00: 61 74 61 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e  atabase %s ***\n
bd10: 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 44  ", db->aDb[i].zD
bd20: 62 53 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20 20  bSName),.       
bd30: 20 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20    P4_DYNAMIC);. 
bd40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
bd50: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 6f 76  AddOp3(v, OP_Mov
bd60: 65 2c 20 32 2c 20 34 2c 20 31 29 3b 0a 20 20 20  e, 2, 4, 1);.   
bd70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
bd80: 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  dOp3(v, OP_Conca
bd90: 74 2c 20 34 2c 20 33 2c 20 32 29 3b 0a 20 20 20  t, 4, 3, 2);.   
bda0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
bdb0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
bdc0: 74 52 6f 77 2c 20 32 2c 20 31 29 3b 0a 20 20 20  tRow, 2, 1);.   
bdd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
bde0: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
bdf0: 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20  ..      /* Make 
be00: 73 75 72 65 20 61 6c 6c 20 74 68 65 20 69 6e 64  sure all the ind
be10: 69 63 65 73 20 61 72 65 20 63 6f 6e 73 74 72 75  ices are constru
be20: 63 74 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a  cted correctly..
be30: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 66        */.      f
be40: 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46  or(x=sqliteHashF
be50: 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 20 26  irst(pTbls); x &
be60: 26 20 21 69 73 51 75 69 63 6b 3b 20 78 3d 73 71  & !isQuick; x=sq
be70: 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78 29 29  liteHashNext(x))
be80: 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65 20  {.        Table 
be90: 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61  *pTab = sqliteHa
bea0: 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20  shData(x);.     
beb0: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 2c 20     Index *pIdx, 
bec0: 2a 70 50 6b 3b 0a 20 20 20 20 20 20 20 20 49 6e  *pPk;.        In
bed0: 64 65 78 20 2a 70 50 72 69 6f 72 20 3d 20 30 3b  dex *pPrior = 0;
bee0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 6f 6f  .        int loo
bef0: 70 54 6f 70 3b 0a 20 20 20 20 20 20 20 20 69 6e  pTop;.        in
bf00: 74 20 69 44 61 74 61 43 75 72 2c 20 69 49 64 78  t iDataCur, iIdx
bf10: 43 75 72 3b 0a 20 20 20 20 20 20 20 20 69 6e 74  Cur;.        int
bf20: 20 72 31 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 20   r1 = -1;..     
bf30: 20 20 20 69 66 28 20 70 54 61 62 2d 3e 70 49 6e     if( pTab->pIn
bf40: 64 65 78 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  dex==0 ) continu
bf50: 65 3b 0a 20 20 20 20 20 20 20 20 70 50 6b 20 3d  e;.        pPk =
bf60: 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
bf70: 3f 20 30 20 3a 20 73 71 6c 69 74 65 33 50 72 69  ? 0 : sqlite3Pri
bf80: 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61  maryKeyIndex(pTa
bf90: 62 29 3b 0a 20 20 20 20 20 20 20 20 61 64 64 72  b);.        addr
bfa0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
bfb0: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp1(v, OP_IfPos
bfc0: 2c 20 31 29 3b 20 20 2f 2a 20 53 74 6f 70 20 69  , 1);  /* Stop i
bfd0: 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20  f out of errors 
bfe0: 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65 43  */.        VdbeC
bff0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
c000: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c010: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74  ddOp2(v, OP_Halt
c020: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  , 0, 0);.       
c030: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
c040: 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20  Here(v, addr);. 
c050: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
c060: 70 72 43 61 63 68 65 43 6c 65 61 72 28 70 50 61  prCacheClear(pPa
c070: 72 73 65 29 3b 0a 20 20 20 20 20 20 20 20 73 71  rse);.        sq
c080: 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
c090: 64 49 6e 64 69 63 65 73 28 70 50 61 72 73 65 2c  dIndices(pParse,
c0a0: 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65   pTab, OP_OpenRe
c0b0: 61 64 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20  ad, 0,.         
c0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0d0: 20 20 20 20 20 20 20 20 20 20 31 2c 20 30 2c 20            1, 0, 
c0e0: 26 69 44 61 74 61 43 75 72 2c 20 26 69 49 64 78  &iDataCur, &iIdx
c0f0: 43 75 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71  Cur);.        sq
c100: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c110: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30  v, OP_Integer, 0
c120: 2c 20 37 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  , 7);.        fo
c130: 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62  r(j=0, pIdx=pTab
c140: 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20  ->pIndex; pIdx; 
c150: 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
c160: 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  , j++){.        
c170: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c180: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
c190: 72 2c 20 30 2c 20 38 2b 6a 29 3b 20 2f 2a 20 69  r, 0, 8+j); /* i
c1a0: 6e 64 65 78 20 65 6e 74 72 69 65 73 20 63 6f 75  ndex entries cou
c1b0: 6e 74 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20  nter */.        
c1c0: 7d 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  }.        assert
c1d0: 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3e 3d  ( pParse->nMem>=
c1e0: 38 2b 6a 20 29 3b 0a 20 20 20 20 20 20 20 20 61  8+j );.        a
c1f0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 4e 6f  ssert( sqlite3No
c200: 54 65 6d 70 73 49 6e 52 61 6e 67 65 28 70 50 61  TempsInRange(pPa
c210: 72 73 65 2c 31 2c 37 2b 6a 29 20 29 3b 0a 20 20  rse,1,7+j) );.  
c220: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c230: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
c240: 77 69 6e 64 2c 20 69 44 61 74 61 43 75 72 2c 20  wind, iDataCur, 
c250: 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  0); VdbeCoverage
c260: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 6c 6f 6f  (v);.        loo
c270: 70 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64  pTop = sqlite3Vd
c280: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
c290: 64 64 49 6d 6d 2c 20 37 2c 20 31 29 3b 0a 20 20  ddImm, 7, 1);.  
c2a0: 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20        /* Verify 
c2b0: 74 68 61 74 20 61 6c 6c 20 4e 4f 54 20 4e 55 4c  that all NOT NUL
c2c0: 4c 20 63 6f 6c 75 6d 6e 73 20 72 65 61 6c 6c 79  L columns really
c2d0: 20 61 72 65 20 4e 4f 54 20 4e 55 4c 4c 20 2a 2f   are NOT NULL */
c2e0: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30  .        for(j=0
c2f0: 3b 20 6a 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20  ; j<pTab->nCol; 
c300: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
c310: 63 68 61 72 20 2a 7a 45 72 72 3b 0a 20 20 20 20  char *zErr;.    
c320: 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20        int jmp2, 
c330: 6a 6d 70 33 3b 0a 20 20 20 20 20 20 20 20 20 20  jmp3;.          
c340: 69 66 28 20 6a 3d 3d 70 54 61 62 2d 3e 69 50 4b  if( j==pTab->iPK
c350: 65 79 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  ey ) continue;. 
c360: 20 20 20 20 20 20 20 20 20 69 66 28 20 70 54 61           if( pTa
c370: 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 6e 6f 74 4e 75  b->aCol[j].notNu
c380: 6c 6c 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  ll==0 ) continue
c390: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
c3a0: 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
c3b0: 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70  lumnOfTable(v, p
c3c0: 54 61 62 2c 20 69 44 61 74 61 43 75 72 2c 20 6a  Tab, iDataCur, j
c3d0: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 3);.          
c3e0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
c3f0: 65 50 35 28 76 2c 20 4f 50 46 4c 41 47 5f 54 59  eP5(v, OPFLAG_TY
c400: 50 45 4f 46 41 52 47 29 3b 0a 20 20 20 20 20 20  PEOFARG);.      
c410: 20 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74      jmp2 = sqlit
c420: 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
c430: 4f 50 5f 4e 6f 74 4e 75 6c 6c 2c 20 33 29 3b 20  OP_NotNull, 3); 
c440: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
c450: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
c460: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c470: 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31  OP_AddImm, 1, -1
c480: 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20  ); /* Decrement 
c490: 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20  error limit */. 
c4a0: 20 20 20 20 20 20 20 20 20 7a 45 72 72 20 3d 20           zErr = 
c4b0: 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
c4c0: 62 2c 20 22 4e 55 4c 4c 20 76 61 6c 75 65 20 69  b, "NULL value i
c4d0: 6e 20 25 73 2e 25 73 22 2c 20 70 54 61 62 2d 3e  n %s.%s", pTab->
c4e0: 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20  zName,.         
c4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c500: 20 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b       pTab->aCol[
c510: 6a 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  j].zName);.     
c520: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c530: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
c540: 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 7a  ing8, 0, 3, 0, z
c550: 45 72 72 2c 20 50 34 5f 44 59 4e 41 4d 49 43 29  Err, P4_DYNAMIC)
c560: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
c570: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c580: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33   OP_ResultRow, 3
c590: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 1);.          
c5a0: 6a 6d 70 33 20 3d 20 73 71 6c 69 74 65 33 56 64  jmp3 = sqlite3Vd
c5b0: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49  beAddOp1(v, OP_I
c5c0: 66 50 6f 73 2c 20 31 29 3b 20 56 64 62 65 43 6f  fPos, 1); VdbeCo
c5d0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
c5e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c5f0: 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c  AddOp0(v, OP_Hal
c600: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  t);.          sq
c610: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
c620: 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20  e(v, jmp2);.    
c630: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c640: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70  eJumpHere(v, jmp
c650: 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  3);.        }.  
c660: 20 20 20 20 20 20 2f 2a 20 56 61 6c 69 64 61 74        /* Validat
c670: 65 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20  e index entries 
c680: 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
c690: 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 66  row */.        f
c6a0: 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61  or(j=0, pIdx=pTa
c6b0: 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
c6c0: 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
c6d0: 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  t, j++){.       
c6e0: 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70     int jmp2, jmp
c6f0: 33 2c 20 6a 6d 70 34 2c 20 6a 6d 70 35 3b 0a 20  3, jmp4, jmp5;. 
c700: 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 6b 55           int ckU
c710: 6e 69 71 20 3d 20 73 71 6c 69 74 65 33 56 64 62  niq = sqlite3Vdb
c720: 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20  eMakeLabel(v);. 
c730: 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50 6b           if( pPk
c740: 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75  ==pIdx ) continu
c750: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 72 31 20  e;.          r1 
c760: 3d 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  = sqlite3Generat
c770: 65 49 6e 64 65 78 4b 65 79 28 70 50 61 72 73 65  eIndexKey(pParse
c780: 2c 20 70 49 64 78 2c 20 69 44 61 74 61 43 75 72  , pIdx, iDataCur
c790: 2c 20 30 2c 20 30 2c 20 26 6a 6d 70 33 2c 0a 20  , 0, 0, &jmp3,. 
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7c0: 20 20 20 20 20 20 70 50 72 69 6f 72 2c 20 72 31        pPrior, r1
c7d0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 50 72  );.          pPr
c7e0: 69 6f 72 20 3d 20 70 49 64 78 3b 0a 20 20 20 20  ior = pIdx;.    
c7f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c800: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
c810: 64 49 6d 6d 2c 20 38 2b 6a 2c 20 31 29 3b 20 20  dImm, 8+j, 1);  
c820: 2f 2a 20 69 6e 63 72 65 6d 65 6e 74 20 65 6e 74  /* increment ent
c830: 72 79 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20  ry count */.    
c840: 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20        /* Verify 
c850: 74 68 61 74 20 61 6e 20 69 6e 64 65 78 20 65 6e  that an index en
c860: 74 72 79 20 65 78 69 73 74 73 20 66 6f 72 20 74  try exists for t
c870: 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
c880: 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20   row */.        
c890: 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33    jmp2 = sqlite3
c8a0: 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c  VdbeAddOp4Int(v,
c8b0: 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 49 64 78 43   OP_Found, iIdxC
c8c0: 75 72 2b 6a 2c 20 63 6b 55 6e 69 71 2c 20 72 31  ur+j, ckUniq, r1
c8d0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
c8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8f0: 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 6e 43          pIdx->nC
c900: 6f 6c 75 6d 6e 29 3b 20 56 64 62 65 43 6f 76 65  olumn); VdbeCove
c910: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
c920: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c930: 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
c940: 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65  m, 1, -1); /* De
c950: 63 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69  crement error li
c960: 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  mit */.         
c970: 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64   sqlite3VdbeLoad
c980: 53 74 72 69 6e 67 28 76 2c 20 33 2c 20 22 72 6f  String(v, 3, "ro
c990: 77 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  w ");.          
c9a0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c9b0: 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20  3(v, OP_Concat, 
c9c0: 37 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20  7, 3, 3);.      
c9d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c      sqlite3VdbeL
c9e0: 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 34 2c 20  oadString(v, 4, 
c9f0: 22 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  " missing from i
ca00: 6e 64 65 78 20 22 29 3b 0a 20 20 20 20 20 20 20  ndex ");.       
ca10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
ca20: 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  dOp3(v, OP_Conca
ca30: 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20  t, 4, 3, 3);.   
ca40: 20 20 20 20 20 20 20 6a 6d 70 35 20 3d 20 73 71         jmp5 = sq
ca50: 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72  lite3VdbeLoadStr
ca60: 69 6e 67 28 76 2c 20 34 2c 20 70 49 64 78 2d 3e  ing(v, 4, pIdx->
ca70: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20  zName);.        
ca80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ca90: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74  Op3(v, OP_Concat
caa0: 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20  , 4, 3, 3);.    
cab0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cac0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
cad0: 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a  sultRow, 3, 1);.
cae0: 20 20 20 20 20 20 20 20 20 20 6a 6d 70 34 20 3d            jmp4 =
caf0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
cb00: 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20  p1(v, OP_IfPos, 
cb10: 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  1); VdbeCoverage
cb20: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  (v);.          s
cb30: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 30  qlite3VdbeAddOp0
cb40: 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20  (v, OP_Halt);.  
cb50: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
cb60: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a  dbeJumpHere(v, j
cb70: 6d 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  mp2);.          
cb80: 2f 2a 20 46 6f 72 20 55 4e 49 51 55 45 20 69 6e  /* For UNIQUE in
cb90: 64 65 78 65 73 2c 20 76 65 72 69 66 79 20 74 68  dexes, verify th
cba0: 61 74 20 6f 6e 6c 79 20 6f 6e 65 20 65 6e 74 72  at only one entr
cbb0: 79 20 65 78 69 73 74 73 20 77 69 74 68 20 74 68  y exists with th
cbc0: 65 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 63  e.          ** c
cbd0: 75 72 72 65 6e 74 20 6b 65 79 2e 20 20 54 68 65  urrent key.  The
cbe0: 20 65 6e 74 72 79 20 69 73 20 75 6e 69 71 75 65   entry is unique
cbf0: 20 69 66 20 28 31 29 20 61 6e 79 20 63 6f 6c 75   if (1) any colu
cc00: 6d 6e 20 69 73 20 4e 55 4c 4c 0a 20 20 20 20 20  mn is NULL.     
cc10: 20 20 20 20 20 2a 2a 20 6f 72 20 28 32 29 20 74       ** or (2) t
cc20: 68 65 20 6e 65 78 74 20 65 6e 74 72 79 20 68 61  he next entry ha
cc30: 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 6b 65  s a different ke
cc40: 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69  y */.          i
cc50: 66 28 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78  f( IsUniqueIndex
cc60: 28 70 49 64 78 29 20 29 7b 0a 20 20 20 20 20 20  (pIdx) ){.      
cc70: 20 20 20 20 20 20 69 6e 74 20 75 6e 69 71 4f 6b        int uniqOk
cc80: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61   = sqlite3VdbeMa
cc90: 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20  keLabel(v);.    
cca0: 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 36          int jmp6
ccb0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ;.            in
ccc0: 74 20 6b 6b 3b 0a 20 20 20 20 20 20 20 20 20 20  t kk;.          
ccd0: 20 20 66 6f 72 28 6b 6b 3d 30 3b 20 6b 6b 3c 70    for(kk=0; kk<p
cce0: 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 6b 6b  Idx->nKeyCol; kk
ccf0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
cd00: 20 20 20 69 6e 74 20 69 43 6f 6c 20 3d 20 70 49     int iCol = pI
cd10: 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 6b 5d  dx->aiColumn[kk]
cd20: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
cd30: 61 73 73 65 72 74 28 20 69 43 6f 6c 21 3d 58 4e  assert( iCol!=XN
cd40: 5f 52 4f 57 49 44 20 26 26 20 69 43 6f 6c 3c 70  _ROWID && iCol<p
cd50: 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20  Tab->nCol );.   
cd60: 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69             if( i
cd70: 43 6f 6c 3e 3d 30 20 26 26 20 70 54 61 62 2d 3e  Col>=0 && pTab->
cd80: 61 43 6f 6c 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e 75  aCol[iCol].notNu
cd90: 6c 6c 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  ll ) continue;. 
cda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
cdb0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
cdc0: 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 31 2b  , OP_IsNull, r1+
cdd0: 6b 6b 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20  kk, uniqOk);.   
cde0: 20 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43             VdbeC
cdf0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
ce00: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ce10: 20 20 20 20 20 20 6a 6d 70 36 20 3d 20 73 71 6c        jmp6 = sql
ce20: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
ce30: 2c 20 4f 50 5f 4e 65 78 74 2c 20 69 49 64 78 43  , OP_Next, iIdxC
ce40: 75 72 2b 6a 29 3b 20 56 64 62 65 43 6f 76 65 72  ur+j); VdbeCover
ce50: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
ce60: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 47      sqlite3VdbeG
ce70: 6f 74 6f 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a  oto(v, uniqOk);.
ce80: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
ce90: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
cea0: 76 2c 20 6a 6d 70 36 29 3b 0a 20 20 20 20 20 20  v, jmp6);.      
ceb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cec0: 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50  eAddOp4Int(v, OP
ced0: 5f 49 64 78 47 54 2c 20 69 49 64 78 43 75 72 2b  _IdxGT, iIdxCur+
cee0: 6a 2c 20 75 6e 69 71 4f 6b 2c 20 72 31 2c 0a 20  j, uniqOk, r1,. 
cef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf10: 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 20  pIdx->nKeyCol); 
cf20: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
cf30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
cf40: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
cf50: 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20  , OP_AddImm, 1, 
cf60: 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e  -1); /* Decremen
cf70: 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f  t error limit */
cf80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
cf90: 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69  ite3VdbeLoadStri
cfa0: 6e 67 28 76 2c 20 33 2c 20 22 6e 6f 6e 2d 75 6e  ng(v, 3, "non-un
cfb0: 69 71 75 65 20 65 6e 74 72 79 20 69 6e 20 69 6e  ique entry in in
cfc0: 64 65 78 20 22 29 3b 0a 20 20 20 20 20 20 20 20  dex ");.        
cfd0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 47      sqlite3VdbeG
cfe0: 6f 74 6f 28 76 2c 20 6a 6d 70 35 29 3b 0a 20 20  oto(v, jmp5);.  
cff0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d000: 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65  3VdbeResolveLabe
d010: 6c 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20  l(v, uniqOk);.  
d020: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
d030: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
d040: 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 34 29  umpHere(v, jmp4)
d050: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d060: 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64  te3ResolvePartId
d070: 78 4c 61 62 65 6c 28 70 50 61 72 73 65 2c 20 6a  xLabel(pParse, j
d080: 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  mp3);.        }.
d090: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d0a0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d0b0: 4e 65 78 74 2c 20 69 44 61 74 61 43 75 72 2c 20  Next, iDataCur, 
d0c0: 6c 6f 6f 70 54 6f 70 29 3b 20 56 64 62 65 43 6f  loopTop); VdbeCo
d0d0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
d0e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
d0f0: 6d 70 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54 6f  mpHere(v, loopTo
d100: 70 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  p-1);.#ifndef SQ
d110: 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43  LITE_OMIT_BTREEC
d120: 4f 55 4e 54 0a 20 20 20 20 20 20 20 20 73 71 6c  OUNT.        sql
d130: 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69  ite3VdbeLoadStri
d140: 6e 67 28 76 2c 20 32 2c 20 22 77 72 6f 6e 67 20  ng(v, 2, "wrong 
d150: 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  # of entries in 
d160: 69 6e 64 65 78 20 22 29 3b 0a 20 20 20 20 20 20  index ");.      
d170: 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d    for(j=0, pIdx=
d180: 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49  pTab->pIndex; pI
d190: 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
d1a0: 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20  Next, j++){.    
d1b0: 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70        if( pPk==p
d1c0: 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  Idx ) continue;.
d1d0: 20 20 20 20 20 20 20 20 20 20 61 64 64 72 20 3d            addr =
d1e0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72   sqlite3VdbeCurr
d1f0: 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20 20  entAddr(v);.    
d200: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d210: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66  eAddOp2(v, OP_If
d220: 50 6f 73 2c 20 31 2c 20 61 64 64 72 2b 32 29 3b  Pos, 1, addr+2);
d230: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
d240: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d250: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d260: 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b   OP_Halt, 0, 0);
d270: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d280: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d290: 4f 50 5f 43 6f 75 6e 74 2c 20 69 49 64 78 43 75  OP_Count, iIdxCu
d2a0: 72 2b 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  r+j, 3);.       
d2b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d2c0: 64 4f 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20 38  dOp3(v, OP_Eq, 8
d2d0: 2b 6a 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b 20  +j, addr+8, 3); 
d2e0: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
d2f0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
d300: 65 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76  e3VdbeChangeP5(v
d310: 2c 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  , SQLITE_NOTNULL
d320: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d330: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d340: 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20  , OP_AddImm, 1, 
d350: 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  -1);.          s
d360: 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74  qlite3VdbeLoadSt
d370: 72 69 6e 67 28 76 2c 20 33 2c 20 70 49 64 78 2d  ring(v, 3, pIdx-
d380: 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20  >zName);.       
d390: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d3a0: 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  dOp3(v, OP_Conca
d3b0: 74 2c 20 33 2c 20 32 2c 20 37 29 3b 0a 20 20 20  t, 3, 2, 7);.   
d3c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d3d0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
d3e0: 65 73 75 6c 74 52 6f 77 2c 20 37 2c 20 31 29 3b  esultRow, 7, 1);
d3f0: 0a 20 20 20 20 20 20 20 20 7d 0a 23 65 6e 64 69  .        }.#endi
d400: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
d410: 5f 42 54 52 45 45 43 4f 55 4e 54 20 2a 2f 0a 20  _BTREECOUNT */. 
d420: 20 20 20 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20       } .    }.  
d430: 20 20 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63    {.      static
d440: 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d   const int iLn =
d450: 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e   VDBE_OFFSET_LIN
d460: 45 4e 4f 28 32 29 3b 0a 20 20 20 20 20 20 73 74  ENO(2);.      st
d470: 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f  atic const VdbeO
d480: 70 4c 69 73 74 20 65 6e 64 43 6f 64 65 5b 5d 20  pList endCode[] 
d490: 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50  = {.        { OP
d4a0: 5f 41 64 64 49 6d 6d 2c 20 20 20 20 20 20 31 2c  _AddImm,      1,
d4b0: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20   0,        0},  
d4c0: 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20    /* 0 */.      
d4d0: 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20 20 20    { OP_If,      
d4e0: 20 20 20 20 31 2c 20 34 2c 20 20 20 20 20 20 20      1, 4,       
d4f0: 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a   0},    /* 1 */.
d500: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72          { OP_Str
d510: 69 6e 67 38 2c 20 20 20 20 20 30 2c 20 33 2c 20  ing8,     0, 3, 
d520: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
d530: 20 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   2 */.        { 
d540: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20  OP_ResultRow,   
d550: 33 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c  3, 1,        0},
d560: 20 20 20 20 2f 2a 20 33 20 2a 2f 0a 20 20 20 20      /* 3 */.    
d570: 20 20 7d 3b 0a 20 20 20 20 20 20 56 64 62 65 4f    };.      VdbeO
d580: 70 20 2a 61 4f 70 3b 0a 0a 20 20 20 20 20 20 61  p *aOp;..      a
d590: 4f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  Op = sqlite3Vdbe
d5a0: 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
d5b0: 61 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c  aySize(endCode),
d5c0: 20 65 6e 64 43 6f 64 65 2c 20 69 4c 6e 29 3b 0a   endCode, iLn);.
d5d0: 20 20 20 20 20 20 69 66 28 20 61 4f 70 20 29 7b        if( aOp ){
d5e0: 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e  .        aOp[0].
d5f0: 70 32 20 3d 20 2d 6d 78 45 72 72 3b 0a 20 20 20  p2 = -mxErr;.   
d600: 20 20 20 20 20 61 4f 70 5b 32 5d 2e 70 34 74 79       aOp[2].p4ty
d610: 70 65 20 3d 20 50 34 5f 53 54 41 54 49 43 3b 0a  pe = P4_STATIC;.
d620: 20 20 20 20 20 20 20 20 61 4f 70 5b 32 5d 2e 70          aOp[2].p
d630: 34 2e 7a 20 3d 20 22 6f 6b 22 3b 0a 20 20 20 20  4.z = "ok";.    
d640: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
d650: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
d660: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
d670: 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a  EGRITY_CHECK */.
d680: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d690: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a 0a  OMIT_UTF16.  /*.
d6a0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e    **   PRAGMA en
d6b0: 63 6f 64 69 6e 67 0a 20 20 2a 2a 20 20 20 50 52  coding.  **   PR
d6c0: 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20  AGMA encoding = 
d6d0: 22 75 74 66 2d 38 22 7c 22 75 74 66 2d 31 36 22  "utf-8"|"utf-16"
d6e0: 7c 22 75 74 66 2d 31 36 6c 65 22 7c 22 75 74 66  |"utf-16le"|"utf
d6f0: 2d 31 36 62 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a  -16be".  **.  **
d700: 20 49 6e 20 69 74 73 20 66 69 72 73 74 20 66 6f   In its first fo
d710: 72 6d 2c 20 74 68 69 73 20 70 72 61 67 6d 61 20  rm, this pragma 
d720: 72 65 74 75 72 6e 73 20 74 68 65 20 65 6e 63 6f  returns the enco
d730: 64 69 6e 67 20 6f 66 20 74 68 65 20 6d 61 69 6e  ding of the main
d740: 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  .  ** database. 
d750: 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
d760: 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a  is not initializ
d770: 65 64 2c 20 69 74 20 69 73 20 69 6e 69 74 69 61  ed, it is initia
d780: 6c 69 7a 65 64 20 6e 6f 77 2e 0a 20 20 2a 2a 0a  lized now..  **.
d790: 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20    ** The second 
d7a0: 66 6f 72 6d 20 6f 66 20 74 68 69 73 20 70 72 61  form of this pra
d7b0: 67 6d 61 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69  gma is a no-op i
d7c0: 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  f the main datab
d7d0: 61 73 65 20 66 69 6c 65 0a 20 20 2a 2a 20 68 61  ase file.  ** ha
d7e0: 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 62 65  s not already be
d7f0: 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  en initialized. 
d800: 49 6e 20 74 68 69 73 20 63 61 73 65 20 69 74 20  In this case it 
d810: 73 65 74 73 20 74 68 65 20 64 65 66 61 75 6c 74  sets the default
d820: 0a 20 20 2a 2a 20 65 6e 63 6f 64 69 6e 67 20 74  .  ** encoding t
d830: 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64  hat will be used
d840: 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
d850: 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 61  tabase file if a
d860: 20 6e 65 77 20 66 69 6c 65 0a 20 20 2a 2a 20 69   new file.  ** i
d870: 73 20 63 72 65 61 74 65 64 2e 20 49 66 20 61 6e  s created. If an
d880: 20 65 78 69 73 74 69 6e 67 20 6d 61 69 6e 20 64   existing main d
d890: 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
d8a0: 6f 70 65 6e 65 64 2c 20 74 68 65 6e 20 74 68 65  opened, then the
d8b0: 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 74 65  .  ** default te
d8c0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20  xt encoding for 
d8d0: 74 68 65 20 65 78 69 73 74 69 6e 67 20 64 61 74  the existing dat
d8e0: 61 62 61 73 65 20 69 73 20 75 73 65 64 2e 0a 20  abase is used.. 
d8f0: 20 2a 2a 20 0a 20 20 2a 2a 20 49 6e 20 61 6c 6c   ** .  ** In all
d900: 20 63 61 73 65 73 20 6e 65 77 20 64 61 74 61 62   cases new datab
d910: 61 73 65 73 20 63 72 65 61 74 65 64 20 75 73 69  ases created usi
d920: 6e 67 20 74 68 65 20 41 54 54 41 43 48 20 63 6f  ng the ATTACH co
d930: 6d 6d 61 6e 64 20 61 72 65 0a 20 20 2a 2a 20 63  mmand are.  ** c
d940: 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
d950: 65 20 73 61 6d 65 20 64 65 66 61 75 6c 74 20 74  e same default t
d960: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 61 73 20  ext encoding as 
d970: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
d980: 65 2e 20 49 66 0a 20 20 2a 2a 20 74 68 65 20 6d  e. If.  ** the m
d990: 61 69 6e 20 64 61 74 61 62 61 73 65 20 68 61 73  ain database has
d9a0: 20 6e 6f 74 20 62 65 65 6e 20 69 6e 69 74 69 61   not been initia
d9b0: 6c 69 7a 65 64 20 61 6e 64 2f 6f 72 20 63 72 65  lized and/or cre
d9c0: 61 74 65 64 20 77 68 65 6e 20 41 54 54 41 43 48  ated when ATTACH
d9d0: 0a 20 20 2a 2a 20 69 73 20 65 78 65 63 75 74 65  .  ** is execute
d9e0: 64 2c 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20  d, this is done 
d9f0: 62 65 66 6f 72 65 20 74 68 65 20 41 54 54 41 43  before the ATTAC
da00: 48 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 20 20 2a  H operation..  *
da10: 2a 0a 20 20 2a 2a 20 49 6e 20 74 68 65 20 73 65  *.  ** In the se
da20: 63 6f 6e 64 20 66 6f 72 6d 20 74 68 69 73 20 70  cond form this p
da30: 72 61 67 6d 61 20 73 65 74 73 20 74 68 65 20 74  ragma sets the t
da40: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 74 6f 20  ext encoding to 
da50: 62 65 20 75 73 65 64 20 69 6e 0a 20 20 2a 2a 20  be used in.  ** 
da60: 6e 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c  new database fil
da70: 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
da80: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 68   this database h
da90: 61 6e 64 6c 65 2e 20 49 74 20 69 73 20 6f 6e 6c  andle. It is onl
daa0: 79 0a 20 20 2a 2a 20 75 73 65 66 75 6c 20 69 66  y.  ** useful if
dab0: 20 69 6e 76 6f 6b 65 64 20 69 6d 6d 65 64 69 61   invoked immedia
dac0: 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6d  tely after the m
dad0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 0a 20  ain database i. 
dae0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
daf0: 79 70 5f 45 4e 43 4f 44 49 4e 47 3a 20 7b 0a 20  yp_ENCODING: {. 
db00: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
db10: 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 7b  struct EncName {
db20: 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  .      char *zNa
db30: 6d 65 3b 0a 20 20 20 20 20 20 75 38 20 65 6e 63  me;.      u8 enc
db40: 3b 0a 20 20 20 20 7d 20 65 6e 63 6e 61 6d 65 73  ;.    } encnames
db50: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22  [] = {.      { "
db60: 55 54 46 38 22 2c 20 20 20 20 20 53 51 4c 49 54  UTF8",     SQLIT
db70: 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c  E_UTF8        },
db80: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 38 22  .      { "UTF-8"
db90: 2c 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38  ,    SQLITE_UTF8
dba0: 20 20 20 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d          },  /* M
dbb0: 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b  ust be element [
dbc0: 31 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  1] */.      { "U
dbd0: 54 46 2d 31 36 6c 65 22 2c 20 53 51 4c 49 54 45  TF-16le", SQLITE
dbe0: 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 20  _UTF16LE     }, 
dbf0: 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d   /* Must be elem
dc00: 65 6e 74 20 5b 32 5d 20 2a 2f 0a 20 20 20 20 20  ent [2] */.     
dc10: 20 7b 20 22 55 54 46 2d 31 36 62 65 22 2c 20 53   { "UTF-16be", S
dc20: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20 20  QLITE_UTF16BE   
dc30: 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65    },  /* Must be
dc40: 20 65 6c 65 6d 65 6e 74 20 5b 33 5d 20 2a 2f 0a   element [3] */.
dc50: 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 6c 65        { "UTF16le
dc60: 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ",  SQLITE_UTF16
dc70: 4c 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20  LE     },.      
dc80: 7b 20 22 55 54 46 31 36 62 65 22 2c 20 20 53 51  { "UTF16be",  SQ
dc90: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20 20 20  LITE_UTF16BE    
dca0: 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46   },.      { "UTF
dcb0: 2d 31 36 22 2c 20 20 20 30 20 20 20 20 20 20 20  -16",   0       
dcc0: 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a             }, /*
dcd0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
dce0: 49 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22  IVE */.      { "
dcf0: 55 54 46 31 36 22 2c 20 20 20 20 30 20 20 20 20  UTF16",    0    
dd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
dd10: 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36   /* SQLITE_UTF16
dd20: 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20 20 20 20  NATIVE */.      
dd30: 7b 20 30 2c 20 30 20 7d 0a 20 20 20 20 7d 3b 0a  { 0, 0 }.    };.
dd40: 20 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74      const struct
dd50: 20 45 6e 63 4e 61 6d 65 20 2a 70 45 6e 63 3b 0a   EncName *pEnc;.
dd60: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
dd70: 29 7b 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41  ){    /* "PRAGMA
dd80: 20 65 6e 63 6f 64 69 6e 67 22 20 2a 2f 0a 20 20   encoding" */.  
dd90: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52      if( sqlite3R
dda0: 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65  eadSchema(pParse
ddb0: 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f  ) ) goto pragma_
ddc0: 6f 75 74 3b 0a 20 20 20 20 20 20 61 73 73 65 72  out;.      asser
ddd0: 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49  t( encnames[SQLI
dde0: 54 45 5f 55 54 46 38 5d 2e 65 6e 63 3d 3d 53 51  TE_UTF8].enc==SQ
ddf0: 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 20  LITE_UTF8 );.   
de00: 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61     assert( encna
de10: 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 31 36  mes[SQLITE_UTF16
de20: 4c 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  LE].enc==SQLITE_
de30: 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 20 20 20  UTF16LE );.     
de40: 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65   assert( encname
de50: 73 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  s[SQLITE_UTF16BE
de60: 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ].enc==SQLITE_UT
de70: 46 31 36 42 45 20 29 3b 0a 20 20 20 20 20 20 72  F16BE );.      r
de80: 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78 74 28  eturnSingleText(
de90: 76 2c 20 65 6e 63 6e 61 6d 65 73 5b 45 4e 43 28  v, encnames[ENC(
dea0: 70 50 61 72 73 65 2d 3e 64 62 29 5d 2e 7a 4e 61  pParse->db)].zNa
deb0: 6d 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 20  me);.    }else{ 
dec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ded0: 20 20 20 20 20 20 20 2f 2a 20 22 50 52 41 47 4d         /* "PRAGM
dee0: 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 58 58 58  A encoding = XXX
def0: 22 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 4f 6e  " */.      /* On
df00: 6c 79 20 63 68 61 6e 67 65 20 74 68 65 20 76 61  ly change the va
df10: 6c 75 65 20 6f 66 20 73 71 6c 69 74 65 2e 65 6e  lue of sqlite.en
df20: 63 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  c if the databas
df30: 65 20 68 61 6e 64 6c 65 20 69 73 20 6e 6f 74 0a  e handle is not.
df40: 20 20 20 20 20 20 2a 2a 20 69 6e 69 74 69 61 6c        ** initial
df50: 69 7a 65 64 2e 20 49 66 20 74 68 65 20 6d 61 69  ized. If the mai
df60: 6e 20 64 61 74 61 62 61 73 65 20 65 78 69 73 74  n database exist
df70: 73 2c 20 74 68 65 20 6e 65 77 20 73 71 6c 69 74  s, the new sqlit
df80: 65 2e 65 6e 63 20 76 61 6c 75 65 0a 20 20 20 20  e.enc value.    
df90: 20 20 2a 2a 20 77 69 6c 6c 20 62 65 20 6f 76 65    ** will be ove
dfa0: 72 77 72 69 74 74 65 6e 20 77 68 65 6e 20 74 68  rwritten when th
dfb0: 65 20 73 63 68 65 6d 61 20 69 73 20 6e 65 78 74  e schema is next
dfc0: 20 6c 6f 61 64 65 64 2e 20 49 66 20 69 74 20 64   loaded. If it d
dfd0: 6f 65 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a  oes not.      **
dfe0: 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c   already exists,
dff0: 20 69 74 20 77 69 6c 6c 20 62 65 20 63 72 65 61   it will be crea
e000: 74 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e  ted to use the n
e010: 65 77 20 65 6e 63 6f 64 69 6e 67 20 76 61 6c 75  ew encoding valu
e020: 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
e030: 20 20 69 66 28 20 0a 20 20 20 20 20 20 20 20 21    if( .        !
e040: 28 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64  (DbHasProperty(d
e050: 62 2c 20 30 2c 20 44 42 5f 53 63 68 65 6d 61 4c  b, 0, DB_SchemaL
e060: 6f 61 64 65 64 29 29 20 7c 7c 20 0a 20 20 20 20  oaded)) || .    
e070: 20 20 20 20 44 62 48 61 73 50 72 6f 70 65 72 74      DbHasPropert
e080: 79 28 64 62 2c 20 30 2c 20 44 42 5f 45 6d 70 74  y(db, 0, DB_Empt
e090: 79 29 20 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  y) .      ){.   
e0a0: 20 20 20 20 20 66 6f 72 28 70 45 6e 63 3d 26 65       for(pEnc=&e
e0b0: 6e 63 6e 61 6d 65 73 5b 30 5d 3b 20 70 45 6e 63  ncnames[0]; pEnc
e0c0: 2d 3e 7a 4e 61 6d 65 3b 20 70 45 6e 63 2b 2b 29  ->zName; pEnc++)
e0d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
e0e0: 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d  0==sqlite3StrICm
e0f0: 70 28 7a 52 69 67 68 74 2c 20 70 45 6e 63 2d 3e  p(zRight, pEnc->
e100: 7a 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20 20 20  zName) ){.      
e110: 20 20 20 20 20 20 53 43 48 45 4d 41 5f 45 4e 43        SCHEMA_ENC
e120: 28 64 62 29 20 3d 20 45 4e 43 28 64 62 29 20 3d  (db) = ENC(db) =
e130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e140: 20 70 45 6e 63 2d 3e 65 6e 63 20 3f 20 70 45 6e   pEnc->enc ? pEn
e150: 63 2d 3e 65 6e 63 20 3a 20 53 51 4c 49 54 45 5f  c->enc : SQLITE_
e160: 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 20  UTF16NATIVE;.   
e170: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
e180: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
e190: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
e1a0: 28 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29  ( !pEnc->zName )
e1b0: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
e1c0: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
e1d0: 73 65 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64  se, "unsupported
e1e0: 20 65 6e 63 6f 64 69 6e 67 3a 20 25 73 22 2c 20   encoding: %s", 
e1f0: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 20  zRight);.       
e200: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
e210: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
e220: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
e230: 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69  MIT_UTF16 */..#i
e240: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
e250: 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  T_SCHEMA_VERSION
e260: 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20  _PRAGMAS.  /*.  
e270: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
e280: 65 6d 61 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73  ema.]schema_vers
e290: 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ion.  **   PRAGM
e2a0: 41 20 5b 73 63 68 65 6d 61 2e 5d 73 63 68 65 6d  A [schema.]schem
e2b0: 61 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74  a_version = <int
e2c0: 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
e2d0: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
e2e0: 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 0a 20  .]user_version. 
e2f0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63   **   PRAGMA [sc
e300: 68 65 6d 61 2e 5d 75 73 65 72 5f 76 65 72 73 69  hema.]user_versi
e310: 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20  on = <integer>. 
e320: 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   **.  **   PRAGM
e330: 41 20 5b 73 63 68 65 6d 61 2e 5d 66 72 65 65 6c  A [schema.]freel
e340: 69 73 74 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20  ist_count.  **. 
e350: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63   **   PRAGMA [sc
e360: 68 65 6d 61 2e 5d 64 61 74 61 5f 76 65 72 73 69  hema.]data_versi
e370: 6f 6e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50  on.  **.  **   P
e380: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61  RAGMA [schema.]a
e390: 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 0a 20 20  pplication_id.  
e3a0: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68  **   PRAGMA [sch
e3b0: 65 6d 61 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e  ema.]application
e3c0: 5f 69 64 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a  _id = <integer>.
e3d0: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 70 72    **.  ** The pr
e3e0: 61 67 6d 61 27 73 20 73 63 68 65 6d 61 5f 76 65  agma's schema_ve
e3f0: 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 5f 76  rsion and user_v
e400: 65 72 73 69 6f 6e 20 61 72 65 20 75 73 65 64 20  ersion are used 
e410: 74 6f 20 73 65 74 20 6f 72 20 67 65 74 0a 20 20  to set or get.  
e420: 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
e430: 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69  the schema-versi
e440: 6f 6e 20 61 6e 64 20 75 73 65 72 2d 76 65 72 73  on and user-vers
e450: 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ion, respectivel
e460: 79 2e 20 42 6f 74 68 0a 20 20 2a 2a 20 74 68 65  y. Both.  ** the
e470: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
e480: 61 6e 64 20 74 68 65 20 75 73 65 72 2d 76 65 72  and the user-ver
e490: 73 69 6f 6e 20 61 72 65 20 33 32 2d 62 69 74 20  sion are 32-bit 
e4a0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 0a  signed integers.
e4b0: 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74    ** stored in t
e4c0: 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64  he database head
e4d0: 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  er..  **.  ** Th
e4e0: 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
e4f0: 69 73 20 75 73 75 61 6c 6c 79 20 6f 6e 6c 79 20  is usually only 
e500: 6d 61 6e 69 70 75 6c 61 74 65 64 20 69 6e 74 65  manipulated inte
e510: 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65  rnally by SQLite
e520: 2e 20 49 74 0a 20 20 2a 2a 20 69 73 20 69 6e 63  . It.  ** is inc
e530: 72 65 6d 65 6e 74 65 64 20 62 79 20 53 51 4c 69  remented by SQLi
e540: 74 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  te whenever the 
e550: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
e560: 69 73 20 6d 6f 64 69 66 69 65 64 20 28 62 79 0a  is modified (by.
e570: 20 20 2a 2a 20 63 72 65 61 74 69 6e 67 20 6f 72    ** creating or
e580: 20 64 72 6f 70 70 69 6e 67 20 61 20 74 61 62 6c   dropping a tabl
e590: 65 20 6f 72 20 69 6e 64 65 78 29 2e 20 54 68 65  e or index). The
e5a0: 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
e5b0: 69 73 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20  is used by.  ** 
e5c0: 53 51 4c 69 74 65 20 65 61 63 68 20 74 69 6d 65  SQLite each time
e5d0: 20 61 20 71 75 65 72 79 20 69 73 20 65 78 65 63   a query is exec
e5e0: 75 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74  uted to ensure t
e5f0: 68 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  hat the internal
e600: 20 63 61 63 68 65 0a 20 20 2a 2a 20 6f 66 20 74   cache.  ** of t
e610: 68 65 20 73 63 68 65 6d 61 20 75 73 65 64 20 77  he schema used w
e620: 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68  hen compiling th
e630: 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74 63  e SQL query matc
e640: 68 65 73 20 74 68 65 20 73 63 68 65 6d 61 20 6f  hes the schema o
e650: 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62  f.  ** the datab
e660: 61 73 65 20 61 67 61 69 6e 73 74 20 77 68 69 63  ase against whic
e670: 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71  h the compiled q
e680: 75 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c 79  uery is actually
e690: 20 65 78 65 63 75 74 65 64 2e 0a 20 20 2a 2a 20   executed..  ** 
e6a0: 53 75 62 76 65 72 74 69 6e 67 20 74 68 69 73 20  Subverting this 
e6b0: 6d 65 63 68 61 6e 69 73 6d 20 62 79 20 75 73 69  mechanism by usi
e6c0: 6e 67 20 22 50 52 41 47 4d 41 20 73 63 68 65 6d  ng "PRAGMA schem
e6d0: 61 5f 76 65 72 73 69 6f 6e 22 20 74 6f 20 6d 6f  a_version" to mo
e6e0: 64 69 66 79 0a 20 20 2a 2a 20 74 68 65 20 73 63  dify.  ** the sc
e6f0: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69 73 20  hema-version is 
e700: 70 6f 74 65 6e 74 69 61 6c 6c 79 20 64 61 6e 67  potentially dang
e710: 65 72 6f 75 73 20 61 6e 64 20 6d 61 79 20 6c 65  erous and may le
e720: 61 64 20 74 6f 20 70 72 6f 67 72 61 6d 0a 20 20  ad to program.  
e730: 2a 2a 20 63 72 61 73 68 65 73 20 6f 72 20 64 61  ** crashes or da
e740: 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f  tabase corruptio
e750: 6e 2e 20 55 73 65 20 77 69 74 68 20 63 61 75 74  n. Use with caut
e760: 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ion!.  **.  ** T
e770: 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20  he user-version 
e780: 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74 65  is not used inte
e790: 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65  rnally by SQLite
e7a0: 2e 20 49 74 20 6d 61 79 20 62 65 20 75 73 65 64  . It may be used
e7b0: 20 62 79 0a 20 20 2a 2a 20 61 70 70 6c 69 63 61   by.  ** applica
e7c0: 74 69 6f 6e 73 20 66 6f 72 20 61 6e 79 20 70 75  tions for any pu
e7d0: 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61  rpose..  */.  ca
e7e0: 73 65 20 50 72 61 67 54 79 70 5f 48 45 41 44 45  se PragTyp_HEADE
e7f0: 52 5f 56 41 4c 55 45 3a 20 7b 0a 20 20 20 20 69  R_VALUE: {.    i
e800: 6e 74 20 69 43 6f 6f 6b 69 65 20 3d 20 70 50 72  nt iCookie = pPr
e810: 61 67 6d 61 2d 3e 69 41 72 67 3b 20 20 2f 2a 20  agma->iArg;  /* 
e820: 57 68 69 63 68 20 63 6f 6f 6b 69 65 20 74 6f 20  Which cookie to 
e830: 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f  read or write */
e840: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
e850: 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62  UsesBtree(v, iDb
e860: 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  );.    if( zRigh
e870: 74 20 26 26 20 28 70 50 72 61 67 6d 61 2d 3e 6d  t && (pPragma->m
e880: 50 72 61 67 46 6c 67 20 26 20 50 72 61 67 46 6c  PragFlg & PragFl
e890: 67 5f 52 65 61 64 4f 6e 6c 79 29 3d 3d 30 20 29  g_ReadOnly)==0 )
e8a0: 7b 0a 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65  {.      /* Write
e8b0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
e8c0: 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20  ookie value */. 
e8d0: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
e8e0: 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73 65 74  t VdbeOpList set
e8f0: 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20  Cookie[] = {.   
e900: 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61       { OP_Transa
e910: 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20 20 31 2c  ction,    0,  1,
e920: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f    0},    /* 0 */
e930: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65  .        { OP_Se
e940: 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c  tCookie,      0,
e950: 20 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    0,  0},    /* 
e960: 31 20 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20  1 */.      };.  
e970: 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b      VdbeOp *aOp;
e980: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
e990: 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63  beVerifyNoMalloc
e9a0: 52 65 71 75 69 72 65 64 28 76 2c 20 41 72 72 61  Required(v, Arra
e9b0: 79 53 69 7a 65 28 73 65 74 43 6f 6f 6b 69 65 29  ySize(setCookie)
e9c0: 29 3b 0a 20 20 20 20 20 20 61 4f 70 20 3d 20 73  );.      aOp = s
e9d0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
e9e0: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
e9f0: 28 73 65 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74  (setCookie), set
ea00: 43 6f 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20  Cookie, 0);.    
ea10: 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52 45    if( ONLY_IF_RE
ea20: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f 70  ALLOC_STRESS(aOp
ea30: 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a 20 20  ==0) ) break;.  
ea40: 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20 3d 20      aOp[0].p1 = 
ea50: 69 44 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31  iDb;.      aOp[1
ea60: 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20  ].p1 = iDb;.    
ea70: 20 20 61 4f 70 5b 31 5d 2e 70 32 20 3d 20 69 43    aOp[1].p2 = iC
ea80: 6f 6f 6b 69 65 3b 0a 20 20 20 20 20 20 61 4f 70  ookie;.      aOp
ea90: 5b 31 5d 2e 70 33 20 3d 20 73 71 6c 69 74 65 33  [1].p3 = sqlite3
eaa0: 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20  Atoi(zRight);.  
eab0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
eac0: 2a 20 52 65 61 64 20 74 68 65 20 73 70 65 63 69  * Read the speci
ead0: 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75  fied cookie valu
eae0: 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69  e */.      stati
eaf0: 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
eb00: 73 74 20 72 65 61 64 43 6f 6f 6b 69 65 5b 5d 20  st readCookie[] 
eb10: 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50  = {.        { OP
eb20: 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20  _Transaction,   
eb30: 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20    0,  0,  0},   
eb40: 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20   /* 0 */.       
eb50: 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65   { OP_ReadCookie
eb60: 2c 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20 30  ,      0,  1,  0
eb70: 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20  },    /* 1 */.  
eb80: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c        { OP_Resul
eb90: 74 52 6f 77 2c 20 20 20 20 20 20 20 31 2c 20 20  tRow,       1,  
eba0: 31 2c 20 20 30 7d 0a 20 20 20 20 20 20 7d 3b 0a  1,  0}.      };.
ebb0: 20 20 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f        VdbeOp *aO
ebc0: 70 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  p;.      sqlite3
ebd0: 56 64 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c  VdbeVerifyNoMall
ebe0: 6f 63 52 65 71 75 69 72 65 64 28 76 2c 20 41 72  ocRequired(v, Ar
ebf0: 72 61 79 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b  raySize(readCook
ec00: 69 65 29 29 3b 0a 20 20 20 20 20 20 61 4f 70 20  ie));.      aOp 
ec10: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
ec20: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
ec30: 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65 29 2c  ize(readCookie),
ec40: 72 65 61 64 43 6f 6f 6b 69 65 2c 30 29 3b 0a 20  readCookie,0);. 
ec50: 20 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46       if( ONLY_IF
ec60: 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28  _REALLOC_STRESS(
ec70: 61 4f 70 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b  aOp==0) ) break;
ec80: 0a 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31  .      aOp[0].p1
ec90: 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 61 4f   = iDb;.      aO
eca0: 70 5b 31 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20  p[1].p1 = iDb;. 
ecb0: 20 20 20 20 20 61 4f 70 5b 31 5d 2e 70 33 20 3d       aOp[1].p3 =
ecc0: 20 69 43 6f 6f 6b 69 65 3b 0a 20 20 20 20 20 20   iCookie;.      
ecd0: 73 71 6c 69 74 65 33 56 64 62 65 52 65 75 73 61  sqlite3VdbeReusa
ece0: 62 6c 65 28 76 29 3b 0a 20 20 20 20 7d 0a 20 20  ble(v);.    }.  
ecf0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
ed00: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
ed10: 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f  _SCHEMA_VERSION_
ed20: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e  PRAGMAS */..#ifn
ed30: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
ed40: 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49  COMPILEOPTION_DI
ed50: 41 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  AGS.  /*.  **   
ed60: 50 52 41 47 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f  PRAGMA compile_o
ed70: 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a 2a  ptions.  **.  **
ed80: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65   Return the name
ed90: 73 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  s of all compile
eda0: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 75 73  -time options us
edb0: 65 64 20 69 6e 20 74 68 69 73 20 62 75 69 6c 64  ed in this build
edc0: 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70 74 69 6f  ,.  ** one optio
edd0: 6e 20 70 65 72 20 72 6f 77 2e 0a 20 20 2a 2f 0a  n per row..  */.
ede0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43    case PragTyp_C
edf0: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a 20  OMPILE_OPTIONS: 
ee00: 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b  {.    int i = 0;
ee10: 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
ee20: 2a 7a 4f 70 74 3b 0a 20 20 20 20 70 50 61 72 73  *zOpt;.    pPars
ee30: 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20 20  e->nMem = 1;.   
ee40: 20 77 68 69 6c 65 28 20 28 7a 4f 70 74 20 3d 20   while( (zOpt = 
ee50: 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f  sqlite3_compileo
ee60: 70 74 69 6f 6e 5f 67 65 74 28 69 2b 2b 29 29 21  ption_get(i++))!
ee70: 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
ee80: 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e  te3VdbeLoadStrin
ee90: 67 28 76 2c 20 31 2c 20 7a 4f 70 74 29 3b 0a 20  g(v, 1, zOpt);. 
eea0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
eeb0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
eec0: 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20  ultRow, 1, 1);. 
eed0: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
eee0: 56 64 62 65 52 65 75 73 61 62 6c 65 28 76 29 3b  VdbeReusable(v);
eef0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
ef00: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
ef10: 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f  MIT_COMPILEOPTIO
ef20: 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a 23 69 66 6e  N_DIAGS */..#ifn
ef30: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
ef40: 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  WAL.  /*.  **   
ef50: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
ef60: 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 20 3d  wal_checkpoint =
ef70: 20 70 61 73 73 69 76 65 7c 66 75 6c 6c 7c 72 65   passive|full|re
ef80: 73 74 61 72 74 7c 74 72 75 6e 63 61 74 65 0a 20  start|truncate. 
ef90: 20 2a 2a 0a 20 20 2a 2a 20 43 68 65 63 6b 70 6f   **.  ** Checkpo
efa0: 69 6e 74 20 74 68 65 20 64 61 74 61 62 61 73 65  int the database
efb0: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
efc0: 61 67 54 79 70 5f 57 41 4c 5f 43 48 45 43 4b 50  agTyp_WAL_CHECKP
efd0: 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20  OINT: {.    int 
efe0: 69 42 74 20 3d 20 28 70 49 64 32 2d 3e 7a 3f 69  iBt = (pId2->z?i
eff0: 44 62 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  Db:SQLITE_MAX_AT
f000: 54 41 43 48 45 44 29 3b 0a 20 20 20 20 69 6e 74  TACHED);.    int
f010: 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f   eMode = SQLITE_
f020: 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49  CHECKPOINT_PASSI
f030: 56 45 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  VE;.    if( zRig
f040: 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ht ){.      if( 
f050: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
f060: 52 69 67 68 74 2c 20 22 66 75 6c 6c 22 29 3d 3d  Right, "full")==
f070: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f  0 ){.        eMo
f080: 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43  de = SQLITE_CHEC
f090: 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3b 0a 20 20 20  KPOINT_FULL;.   
f0a0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c     }else if( sql
f0b0: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67  ite3StrICmp(zRig
f0c0: 68 74 2c 20 22 72 65 73 74 61 72 74 22 29 3d 3d  ht, "restart")==
f0d0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f  0 ){.        eMo
f0e0: 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43  de = SQLITE_CHEC
f0f0: 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 3b 0a  KPOINT_RESTART;.
f100: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
f110: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
f120: 52 69 67 68 74 2c 20 22 74 72 75 6e 63 61 74 65  Right, "truncate
f130: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
f140: 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f   eMode = SQLITE_
f150: 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43  CHECKPOINT_TRUNC
f160: 41 54 45 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ATE;.      }.   
f170: 20 7d 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e   }.    pParse->n
f180: 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c  Mem = 3;.    sql
f190: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
f1a0: 2c 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 2c  , OP_Checkpoint,
f1b0: 20 69 42 74 2c 20 65 4d 6f 64 65 2c 20 31 29 3b   iBt, eMode, 1);
f1c0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
f1d0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
f1e0: 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20  ultRow, 1, 3);. 
f1f0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 2f   }.  break;..  /
f200: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
f210: 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69  wal_autocheckpoi
f220: 6e 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  nt.  **   PRAGMA
f230: 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f   wal_autocheckpo
f240: 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a  int = N.  **.  *
f250: 2a 20 43 6f 6e 66 69 67 75 72 65 20 61 20 64 61  * Configure a da
f260: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
f270: 6e 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c  n to automatical
f280: 6c 79 20 63 68 65 63 6b 70 6f 69 6e 74 20 61 20  ly checkpoint a 
f290: 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 61 66  database.  ** af
f2a0: 74 65 72 20 61 63 63 75 6d 75 6c 61 74 69 6e 67  ter accumulating
f2b0: 20 4e 20 66 72 61 6d 65 73 20 69 6e 20 74 68 65   N frames in the
f2c0: 20 6c 6f 67 2e 20 4f 72 20 71 75 65 72 79 20 66   log. Or query f
f2d0: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 76  or the current v
f2e0: 61 6c 75 65 0a 20 20 2a 2a 20 6f 66 20 4e 2e 0a  alue.  ** of N..
f2f0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
f300: 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43  Typ_WAL_AUTOCHEC
f310: 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69 66  KPOINT: {.    if
f320: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
f330: 20 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f 61 75    sqlite3_wal_au
f340: 74 6f 63 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c  tocheckpoint(db,
f350: 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
f360: 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ght));.    }.   
f370: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
f380: 28 76 2c 20 0a 20 20 20 20 20 20 20 64 62 2d 3e  (v, .       db->
f390: 78 57 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71  xWalCallback==sq
f3a0: 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48  lite3WalDefaultH
f3b0: 6f 6f 6b 20 3f 20 0a 20 20 20 20 20 20 20 20 20  ook ? .         
f3c0: 20 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f    SQLITE_PTR_TO_
f3d0: 49 4e 54 28 64 62 2d 3e 70 57 61 6c 41 72 67 29  INT(db->pWalArg)
f3e0: 20 3a 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65   : 0);.  }.  bre
f3f0: 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a  ak;.#endif..  /*
f400: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 73 68  .  **  PRAGMA sh
f410: 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a  rink_memory.  **
f420: 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41  .  ** IMPLEMENTA
f430: 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 33 34 34 35  TION-OF: R-23445
f440: 2d 34 36 31 30 39 20 54 68 69 73 20 70 72 61 67  -46109 This prag
f450: 6d 61 20 63 61 75 73 65 73 20 74 68 65 20 64 61  ma causes the da
f460: 74 61 62 61 73 65 0a 20 20 2a 2a 20 63 6f 6e 6e  tabase.  ** conn
f470: 65 63 74 69 6f 6e 20 6f 6e 20 77 68 69 63 68 20  ection on which 
f480: 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 74 6f  it is invoked to
f490: 20 66 72 65 65 20 75 70 20 61 73 20 6d 75 63 68   free up as much
f4a0: 20 6d 65 6d 6f 72 79 20 61 73 20 69 74 0a 20 20   memory as it.  
f4b0: 2a 2a 20 63 61 6e 2c 20 62 79 20 63 61 6c 6c 69  ** can, by calli
f4c0: 6e 67 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65  ng sqlite3_db_re
f4d0: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 2e 0a  lease_memory()..
f4e0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
f4f0: 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52  Typ_SHRINK_MEMOR
f500: 59 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  Y: {.    sqlite3
f510: 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  _db_release_memo
f520: 72 79 28 64 62 29 3b 0a 20 20 20 20 62 72 65 61  ry(db);.    brea
f530: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
f540: 2a 20 20 50 52 41 47 4d 41 20 61 6e 61 6c 79 7a  *  PRAGMA analyz
f550: 65 5f 61 73 5f 6e 65 65 64 65 64 0a 20 20 2a 2f  e_as_needed.  */
f560: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
f570: 41 4e 41 4c 59 5a 45 5f 41 53 5f 4e 45 45 44 45  ANALYZE_AS_NEEDE
f580: 44 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  D: {.    sqlite3
f590: 41 6e 61 6c 79 7a 65 28 70 50 61 72 73 65 2c 20  Analyze(pParse, 
f5a0: 30 2c 20 30 2c 20 31 29 3b 0a 20 20 20 20 62 72  0, 0, 1);.    br
f5b0: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
f5c0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73   **   PRAGMA bus
f5d0: 79 5f 74 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20  y_timeout.  **  
f5e0: 20 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d   PRAGMA busy_tim
f5f0: 65 6f 75 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20  eout = N.  **.  
f600: 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f  ** Call sqlite3_
f610: 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c  busy_timeout(db,
f620: 20 4e 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65   N).  Return the
f630: 20 63 75 72 72 65 6e 74 20 74 69 6d 65 6f 75 74   current timeout
f640: 20 76 61 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f   value.  ** if o
f650: 6e 65 20 69 73 20 73 65 74 2e 20 20 49 66 20 6e  ne is set.  If n
f660: 6f 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 6f  o busy handler o
f670: 72 20 61 20 64 69 66 66 65 72 65 6e 74 20 62 75  r a different bu
f680: 73 79 20 68 61 6e 64 6c 65 72 20 69 73 20 73 65  sy handler is se
f690: 74 0a 20 20 2a 2a 20 74 68 65 6e 20 30 20 69 73  t.  ** then 0 is
f6a0: 20 72 65 74 75 72 6e 65 64 2e 20 20 53 65 74 74   returned.  Sett
f6b0: 69 6e 67 20 74 68 65 20 62 75 73 79 5f 74 69 6d  ing the busy_tim
f6c0: 65 6f 75 74 20 74 6f 20 30 20 6f 72 20 6e 65 67  eout to 0 or neg
f6d0: 61 74 69 76 65 0a 20 20 2a 2a 20 64 69 73 61 62  ative.  ** disab
f6e0: 6c 65 73 20 74 68 65 20 74 69 6d 65 6f 75 74 2e  les the timeout.
f6f0: 0a 20 20 2a 2f 0a 20 20 2f 2a 63 61 73 65 20 50  .  */.  /*case P
f700: 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45  ragTyp_BUSY_TIME
f710: 4f 55 54 2a 2f 20 64 65 66 61 75 6c 74 3a 20 7b  OUT*/ default: {
f720: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72  .    assert( pPr
f730: 61 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 3d 3d  agma->ePragTyp==
f740: 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d  PragTyp_BUSY_TIM
f750: 45 4f 55 54 20 29 3b 0a 20 20 20 20 69 66 28 20  EOUT );.    if( 
f760: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
f770: 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d  sqlite3_busy_tim
f780: 65 6f 75 74 28 64 62 2c 20 73 71 6c 69 74 65 33  eout(db, sqlite3
f790: 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20  Atoi(zRight));. 
f7a0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53     }.    returnS
f7b0: 69 6e 67 6c 65 49 6e 74 28 76 2c 20 64 62 2d 3e  ingleInt(v, db->
f7c0: 62 75 73 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20  busyTimeout);.  
f7d0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
f7e0: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
f7f0: 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74   soft_heap_limit
f800: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73  .  **   PRAGMA s
f810: 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3d  oft_heap_limit =
f820: 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50   N.  **.  ** IMP
f830: 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
f840: 52 2d 32 36 33 34 33 2d 34 35 39 33 30 20 54 68  R-26343-45930 Th
f850: 69 73 20 70 72 61 67 6d 61 20 69 6e 76 6f 6b 65  is pragma invoke
f860: 73 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74  s the.  ** sqlit
f870: 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  e3_soft_heap_lim
f880: 69 74 36 34 28 29 20 69 6e 74 65 72 66 61 63 65  it64() interface
f890: 20 77 69 74 68 20 74 68 65 20 61 72 67 75 6d 65   with the argume
f8a0: 6e 74 20 4e 2c 20 69 66 20 4e 20 69 73 0a 20 20  nt N, if N is.  
f8b0: 2a 2a 20 73 70 65 63 69 66 69 65 64 20 61 6e 64  ** specified and
f8c0: 20 69 73 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69   is a non-negati
f8d0: 76 65 20 69 6e 74 65 67 65 72 2e 0a 20 20 2a 2a  ve integer..  **
f8e0: 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
f8f0: 4f 46 3a 20 52 2d 36 34 34 35 31 2d 30 37 31 36  OF: R-64451-0716
f900: 33 20 54 68 65 20 73 6f 66 74 5f 68 65 61 70 5f  3 The soft_heap_
f910: 6c 69 6d 69 74 20 70 72 61 67 6d 61 20 61 6c 77  limit pragma alw
f920: 61 79 73 0a 20 20 2a 2a 20 72 65 74 75 72 6e 73  ays.  ** returns
f930: 20 74 68 65 20 73 61 6d 65 20 69 6e 74 65 67 65   the same intege
f940: 72 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20  r that would be 
f950: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 0a  returned by the.
f960: 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6f 66    ** sqlite3_sof
f970: 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d  t_heap_limit64(-
f980: 31 29 20 43 2d 6c 61 6e 67 75 61 67 65 20 66 75  1) C-language fu
f990: 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63  nction..  */.  c
f9a0: 61 73 65 20 50 72 61 67 54 79 70 5f 53 4f 46 54  ase PragTyp_SOFT
f9b0: 5f 48 45 41 50 5f 4c 49 4d 49 54 3a 20 7b 0a 20  _HEAP_LIMIT: {. 
f9c0: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34     sqlite3_int64
f9d0: 20 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67   N;.    if( zRig
f9e0: 68 74 20 26 26 20 73 71 6c 69 74 65 33 44 65 63  ht && sqlite3Dec
f9f0: 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68  OrHexToI64(zRigh
fa00: 74 2c 20 26 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f  t, &N)==SQLITE_O
fa10: 4b 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  K ){.      sqlit
fa20: 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  e3_soft_heap_lim
fa30: 69 74 36 34 28 4e 29 3b 0a 20 20 20 20 7d 0a 20  it64(N);.    }. 
fa40: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
fa50: 6e 74 28 76 2c 20 73 71 6c 69 74 65 33 5f 73 6f  nt(v, sqlite3_so
fa60: 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28  ft_heap_limit64(
fa70: 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  -1));.    break;
fa80: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
fa90: 20 20 50 52 41 47 4d 41 20 74 68 72 65 61 64 73    PRAGMA threads
faa0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74  .  **   PRAGMA t
fab0: 68 72 65 61 64 73 20 3d 20 4e 0a 20 20 2a 2a 0a  hreads = N.  **.
fac0: 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 74    ** Configure t
fad0: 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
fae0: 72 20 6f 66 20 77 6f 72 6b 65 72 20 74 68 72 65  r of worker thre
faf0: 61 64 73 2e 20 20 52 65 74 75 72 6e 20 74 68 65  ads.  Return the
fb00: 20 6e 65 77 0a 20 20 2a 2a 20 6d 61 78 69 6d 75   new.  ** maximu
fb10: 6d 2c 20 77 68 69 63 68 20 6d 69 67 68 74 20 62  m, which might b
fb20: 65 20 6c 65 73 73 20 74 68 61 6e 20 72 65 71 75  e less than requ
fb30: 65 73 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61  ested..  */.  ca
fb40: 73 65 20 50 72 61 67 54 79 70 5f 54 48 52 45 41  se PragTyp_THREA
fb50: 44 53 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  DS: {.    sqlite
fb60: 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69  3_int64 N;.    i
fb70: 66 28 20 7a 52 69 67 68 74 0a 20 20 20 20 20 26  f( zRight.     &
fb80: 26 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65  & sqlite3DecOrHe
fb90: 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26  xToI64(zRight, &
fba0: 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  N)==SQLITE_OK.  
fbb0: 20 20 20 26 26 20 4e 3e 3d 30 0a 20 20 20 20 29     && N>=0.    )
fbc0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
fbd0: 6c 69 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45  limit(db, SQLITE
fbe0: 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48  _LIMIT_WORKER_TH
fbf0: 52 45 41 44 53 2c 20 28 69 6e 74 29 28 4e 26 30  READS, (int)(N&0
fc00: 78 37 66 66 66 66 66 66 66 29 29 3b 0a 20 20 20  x7fffffff));.   
fc10: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
fc20: 67 6c 65 49 6e 74 28 76 2c 20 73 71 6c 69 74 65  gleInt(v, sqlite
fc30: 33 5f 6c 69 6d 69 74 28 64 62 2c 20 53 51 4c 49  3_limit(db, SQLI
fc40: 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f  TE_LIMIT_WORKER_
fc50: 54 48 52 45 41 44 53 2c 20 2d 31 29 29 3b 0a 20  THREADS, -1));. 
fc60: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23     break;.  }..#
fc70: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
fc80: 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
fc90: 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
fca0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 52 65 70 6f 72  .  /*.  ** Repor
fcb0: 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  t the current st
fcc0: 61 74 65 20 6f 66 20 66 69 6c 65 20 6c 6f 67 73  ate of file logs
fcd0: 20 66 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73   for all databas
fce0: 65 73 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  es.  */.  case P
fcf0: 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53 54 41 54  ragTyp_LOCK_STAT
fd00: 55 53 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63  US: {.    static
fd10: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e   const char *con
fd20: 73 74 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20  st azLockName[] 
fd30: 3d 20 7b 0a 20 20 20 20 20 20 22 75 6e 6c 6f 63  = {.      "unloc
fd40: 6b 65 64 22 2c 20 22 73 68 61 72 65 64 22 2c 20  ked", "shared", 
fd50: 22 72 65 73 65 72 76 65 64 22 2c 20 22 70 65 6e  "reserved", "pen
fd60: 64 69 6e 67 22 2c 20 22 65 78 63 6c 75 73 69 76  ding", "exclusiv
fd70: 65 22 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e  e".    };.    in
fd80: 74 20 69 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  t i;.    pParse-
fd90: 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 66  >nMem = 2;.    f
fda0: 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
fdb0: 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 42  b; i++){.      B
fdc0: 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 20 20 20  tree *pBt;.     
fdd0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
fde0: 61 74 65 20 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b  ate = "unknown";
fdf0: 0a 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20  .      int j;.  
fe00: 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
fe10: 69 5d 2e 7a 44 62 53 4e 61 6d 65 3d 3d 30 20 29  i].zDbSName==0 )
fe20: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
fe30: 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69   pBt = db->aDb[i
fe40: 5d 2e 70 42 74 3b 0a 20 20 20 20 20 20 69 66 28  ].pBt;.      if(
fe50: 20 70 42 74 3d 3d 30 20 7c 7c 20 73 71 6c 69 74   pBt==0 || sqlit
fe60: 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74  e3BtreePager(pBt
fe70: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
fe80: 7a 53 74 61 74 65 20 3d 20 22 63 6c 6f 73 65 64  zState = "closed
fe90: 22 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  ";.      }else i
fea0: 66 28 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f  f( sqlite3_file_
feb0: 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 69 20 3f 20  control(db, i ? 
fec0: 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 44 62 53 4e  db->aDb[i].zDbSN
fed0: 61 6d 65 20 3a 20 30 2c 20 0a 20 20 20 20 20 20  ame : 0, .      
fee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
ff00: 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b  QLITE_FCNTL_LOCK
ff10: 53 54 41 54 45 2c 20 26 6a 29 3d 3d 53 51 4c 49  STATE, &j)==SQLI
ff20: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
ff30: 20 20 7a 53 74 61 74 65 20 3d 20 61 7a 4c 6f 63    zState = azLoc
ff40: 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20 20 20  kName[j];.      
ff50: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  }.      sqlite3V
ff60: 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20  dbeMultiLoad(v, 
ff70: 31 2c 20 22 73 73 22 2c 20 64 62 2d 3e 61 44 62  1, "ss", db->aDb
ff80: 5b 69 5d 2e 7a 44 62 53 4e 61 6d 65 2c 20 7a 53  [i].zDbSName, zS
ff90: 74 61 74 65 29 3b 0a 20 20 20 20 20 20 73 71 6c  tate);.      sql
ffa0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
ffb0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
ffc0: 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20  1, 2);.    }.   
ffd0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
ffe0: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
fff0: 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 63 61  E_HAS_CODEC.  ca
10000 73 65 20 50 72 61 67 54 79 70 5f 4b 45 59 3a 20  se PragTyp_KEY: 
10010 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
10020 20 29 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76   ) sqlite3_key_v
10030 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68  2(db, zDb, zRigh
10040 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  t, sqlite3Strlen
10050 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  30(zRight));.   
10060 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61   break;.  }.  ca
10070 73 65 20 50 72 61 67 54 79 70 5f 52 45 4b 45 59  se PragTyp_REKEY
10080 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  : {.    if( zRig
10090 68 74 20 29 20 73 71 6c 69 74 65 33 5f 72 65 6b  ht ) sqlite3_rek
100a0 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a  ey_v2(db, zDb, z
100b0 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74  Right, sqlite3St
100c0 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b  rlen30(zRight));
100d0 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
100e0 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 48    case PragTyp_H
100f0 45 58 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28  EXKEY: {.    if(
10100 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
10110 20 75 38 20 69 42 79 74 65 3b 0a 20 20 20 20 20   u8 iByte;.     
10120 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 63 68   int i;.      ch
10130 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20 20  ar zKey[40];.   
10140 20 20 20 66 6f 72 28 69 3d 30 2c 20 69 42 79 74     for(i=0, iByt
10150 65 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 4b  e=0; i<sizeof(zK
10160 65 79 29 2a 32 20 26 26 20 73 71 6c 69 74 65 33  ey)*2 && sqlite3
10170 49 73 78 64 69 67 69 74 28 7a 52 69 67 68 74 5b  Isxdigit(zRight[
10180 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  i]); i++){.     
10190 20 20 20 69 42 79 74 65 20 3d 20 28 69 42 79 74     iByte = (iByt
101a0 65 3c 3c 34 29 20 2b 20 73 71 6c 69 74 65 33 48  e<<4) + sqlite3H
101b0 65 78 54 6f 49 6e 74 28 7a 52 69 67 68 74 5b 69  exToInt(zRight[i
101c0 5d 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ]);.        if( 
101d0 28 69 26 31 29 21 3d 30 20 29 20 7a 4b 65 79 5b  (i&1)!=0 ) zKey[
101e0 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b 0a 20 20  i/2] = iByte;.  
101f0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
10200 28 7a 4c 65 66 74 5b 33 5d 20 26 20 30 78 66 29  (zLeft[3] & 0xf)
10210 3d 3d 30 78 62 20 29 7b 0a 20 20 20 20 20 20 20  ==0xb ){.       
10220 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28   sqlite3_key_v2(
10230 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69  db, zDb, zKey, i
10240 2f 32 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  /2);.      }else
10250 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
10260 33 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a  3_rekey_v2(db, z
10270 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a  Db, zKey, i/2);.
10280 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
10290 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
102a0 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
102b0 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
102c0 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
102d0 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44  ITE_ENABLE_CEROD
102e0 29 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ).  case PragTyp
102f0 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45 4e 53  _ACTIVATE_EXTENS
10300 49 4f 4e 53 3a 20 69 66 28 20 7a 52 69 67 68 74  IONS: if( zRight
10310 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   ){.#ifdef SQLIT
10320 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 20 20  E_HAS_CODEC.    
10330 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49  if( sqlite3StrNI
10340 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 73 65 65  Cmp(zRight, "see
10350 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20  -", 4)==0 ){.   
10360 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76     sqlite3_activ
10370 61 74 65 5f 73 65 65 28 26 7a 52 69 67 68 74 5b  ate_see(&zRight[
10380 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  4]);.    }.#endi
10390 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
103a0 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a 20 20 20  ENABLE_CEROD.   
103b0 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e   if( sqlite3StrN
103c0 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 63 65  ICmp(zRight, "ce
103d0 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20 29 7b 0a  rod-", 6)==0 ){.
103e0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63        sqlite3_ac
103f0 74 69 76 61 74 65 5f 63 65 72 6f 64 28 26 7a 52  tivate_cerod(&zR
10400 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a  ight[6]);.    }.
10410 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65  #endif.  }.  bre
10420 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 7d 20  ak;.#endif..  } 
10430 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65 20 50 52  /* End of the PR
10440 41 47 4d 41 20 73 77 69 74 63 68 20 2a 2f 0a 0a  AGMA switch */..
10450 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
10460 6e 67 20 62 6c 6f 63 6b 20 69 73 20 61 20 6e 6f  ng block is a no
10470 2d 6f 70 20 75 6e 6c 65 73 73 20 53 51 4c 49 54  -op unless SQLIT
10480 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e  E_DEBUG is defin
10490 65 64 2e 20 49 74 73 20 6f 6e 6c 79 0a 20 20 2a  ed. Its only.  *
104a0 2a 20 70 75 72 70 6f 73 65 20 69 73 20 74 6f 20  * purpose is to 
104b0 65 78 65 63 75 74 65 20 61 73 73 65 72 74 28 29  execute assert()
104c0 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 76   statements to v
104d0 65 72 69 66 79 20 74 68 61 74 20 69 66 20 74 68  erify that if th
104e0 65 0a 20 20 2a 2a 20 50 72 61 67 46 6c 67 5f 4e  e.  ** PragFlg_N
104f0 6f 43 6f 6c 75 6d 6e 73 31 20 66 6c 61 67 20 69  oColumns1 flag i
10500 73 20 73 65 74 20 61 6e 64 20 74 68 65 20 63 61  s set and the ca
10510 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61  ller specified a
10520 6e 20 61 72 67 75 6d 65 6e 74 0a 20 20 2a 2a 20  n argument.  ** 
10530 74 6f 20 74 68 65 20 50 52 41 47 4d 41 2c 20 74  to the PRAGMA, t
10540 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
10550 6e 20 68 61 73 20 6e 6f 74 20 61 64 64 65 64 20  n has not added 
10560 61 6e 79 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  any OP_ResultRow
10570 20 0a 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69   .  ** instructi
10580 6f 6e 73 20 74 6f 20 74 68 65 20 56 4d 2e 20 20  ons to the VM.  
10590 2a 2f 0a 20 20 69 66 28 20 28 70 50 72 61 67 6d  */.  if( (pPragm
105a0 61 2d 3e 6d 50 72 61 67 46 6c 67 20 26 20 50 72  a->mPragFlg & Pr
105b0 61 67 46 6c 67 5f 4e 6f 43 6f 6c 75 6d 6e 73 31  agFlg_NoColumns1
105c0 29 20 26 26 20 7a 52 69 67 68 74 20 29 7b 0a 20  ) && zRight ){. 
105d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 56 65     sqlite3VdbeVe
105e0 72 69 66 79 4e 6f 52 65 73 75 6c 74 52 6f 77 28  rifyNoResultRow(
105f0 76 29 3b 0a 20 20 7d 0a 0a 70 72 61 67 6d 61 5f  v);.  }..pragma_
10600 6f 75 74 3a 0a 20 20 73 71 6c 69 74 65 33 44 62  out:.  sqlite3Db
10610 46 72 65 65 28 64 62 2c 20 7a 4c 65 66 74 29 3b  Free(db, zLeft);
10620 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
10630 28 64 62 2c 20 7a 52 69 67 68 74 29 3b 0a 7d 0a  (db, zRight);.}.
10640 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
10650 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
10660 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
10670 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10680 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
10690 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
106a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
106b0 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** Implementatio
106c0 6e 20 6f 66 20 61 6e 20 65 70 6f 6e 79 6d 6f 75  n of an eponymou
106d0 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  s virtual table 
106e0 74 68 61 74 20 72 75 6e 73 20 61 20 70 72 61 67  that runs a prag
106f0 6d 61 2e 0a 2a 2a 0a 2a 2f 0a 74 79 70 65 64 65  ma..**.*/.typede
10700 66 20 73 74 72 75 63 74 20 50 72 61 67 6d 61 56  f struct PragmaV
10710 74 61 62 20 50 72 61 67 6d 61 56 74 61 62 3b 0a  tab PragmaVtab;.
10720 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
10730 72 61 67 6d 61 56 74 61 62 43 75 72 73 6f 72 20  ragmaVtabCursor 
10740 50 72 61 67 6d 61 56 74 61 62 43 75 72 73 6f 72  PragmaVtabCursor
10750 3b 0a 73 74 72 75 63 74 20 50 72 61 67 6d 61 56  ;.struct PragmaV
10760 74 61 62 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  tab {.  sqlite3_
10770 76 74 61 62 20 62 61 73 65 3b 20 20 20 20 20 20  vtab base;      
10780 20 20 2f 2a 20 42 61 73 65 20 63 6c 61 73 73 2e    /* Base class.
10790 20 20 4d 75 73 74 20 62 65 20 66 69 72 73 74 20    Must be first 
107a0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
107b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
107c0 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  * The database c
107d0 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 68 69  onnection to whi
107e0 63 68 20 69 74 20 62 65 6c 6f 6e 67 73 20 2a 2f  ch it belongs */
107f0 0a 20 20 63 6f 6e 73 74 20 50 72 61 67 6d 61 4e  .  const PragmaN
10800 61 6d 65 20 2a 70 4e 61 6d 65 3b 20 20 2f 2a 20  ame *pName;  /* 
10810 4e 61 6d 65 20 6f 66 20 74 68 65 20 70 72 61 67  Name of the prag
10820 6d 61 20 2a 2f 0a 20 20 75 38 20 6e 48 69 64 64  ma */.  u8 nHidd
10830 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
10840 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 68    /* Number of h
10850 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f  idden columns */
10860 0a 20 20 75 38 20 69 48 69 64 64 65 6e 3b 20 20  .  u8 iHidden;  
10870 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10880 49 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69 72  Index of the fir
10890 73 74 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  st hidden column
108a0 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 50 72   */.};.struct Pr
108b0 61 67 6d 61 56 74 61 62 43 75 72 73 6f 72 20 7b  agmaVtabCursor {
108c0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  .  sqlite3_vtab_
108d0 63 75 72 73 6f 72 20 62 61 73 65 3b 20 2f 2a 20  cursor base; /* 
108e0 42 61 73 65 20 63 6c 61 73 73 2e 20 20 4d 75 73  Base class.  Mus
108f0 74 20 62 65 20 66 69 72 73 74 20 2a 2f 0a 20 20  t be first */.  
10900 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 50  sqlite3_stmt *pP
10910 72 61 67 6d 61 3b 20 20 20 20 2f 2a 20 54 68 65  ragma;    /* The
10920 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e   pragma statemen
10930 74 20 74 6f 20 72 75 6e 20 2a 2f 0a 20 20 73 71  t to run */.  sq
10940 6c 69 74 65 5f 69 6e 74 36 34 20 69 52 6f 77 69  lite_int64 iRowi
10950 64 3b 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65  d;      /* Curre
10960 6e 74 20 72 6f 77 69 64 20 2a 2f 0a 20 20 63 68  nt rowid */.  ch
10970 61 72 20 2a 61 7a 41 72 67 5b 32 5d 3b 20 20 20  ar *azArg[2];   
10980 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
10990 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   of the argument
109a0 20 61 6e 64 20 73 63 68 65 6d 61 20 2a 2f 0a 7d   and schema */.}
109b0 3b 0a 0a 2f 2a 20 0a 2a 2a 20 50 72 61 67 6d 61  ;../* .** Pragma
109c0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d   virtual table m
109d0 6f 64 75 6c 65 20 78 43 6f 6e 6e 65 63 74 20 6d  odule xConnect m
109e0 65 74 68 6f 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  ethod..*/.static
109f0 20 69 6e 74 20 70 72 61 67 6d 61 56 74 61 62 43   int pragmaVtabC
10a00 6f 6e 6e 65 63 74 28 0a 20 20 73 71 6c 69 74 65  onnect(.  sqlite
10a10 33 20 2a 64 62 2c 0a 20 20 76 6f 69 64 20 2a 70  3 *db,.  void *p
10a20 41 75 78 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c  Aux,.  int argc,
10a30 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e   const char *con
10a40 73 74 2a 61 72 67 76 2c 0a 20 20 73 71 6c 69 74  st*argv,.  sqlit
10a50 65 33 5f 76 74 61 62 20 2a 2a 70 70 56 74 61 62  e3_vtab **ppVtab
10a60 2c 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  ,.  char **pzErr
10a70 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 50 72 61 67  .){.  const Prag
10a80 6d 61 4e 61 6d 65 20 2a 70 50 72 61 67 6d 61 20  maName *pPragma 
10a90 3d 20 28 63 6f 6e 73 74 20 50 72 61 67 6d 61 4e  = (const PragmaN
10aa0 61 6d 65 2a 29 70 41 75 78 3b 0a 20 20 50 72 61  ame*)pAux;.  Pra
10ab0 67 6d 61 56 74 61 62 20 2a 70 54 61 62 20 3d 20  gmaVtab *pTab = 
10ac0 30 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  0;.  int rc;.  i
10ad0 6e 74 20 69 2c 20 6a 3b 0a 20 20 63 68 61 72 20  nt i, j;.  char 
10ae0 63 53 65 70 20 3d 20 27 28 27 3b 0a 20 20 53 74  cSep = '(';.  St
10af0 72 41 63 63 75 6d 20 61 63 63 3b 0a 20 20 63 68  rAccum acc;.  ch
10b00 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 0a 20  ar zBuf[200];.. 
10b10 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
10b20 52 28 61 72 67 63 29 3b 0a 20 20 55 4e 55 53 45  R(argc);.  UNUSE
10b30 44 5f 50 41 52 41 4d 45 54 45 52 28 61 72 67 76  D_PARAMETER(argv
10b40 29 3b 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41  );.  sqlite3StrA
10b50 63 63 75 6d 49 6e 69 74 28 26 61 63 63 2c 20 30  ccumInit(&acc, 0
10b60 2c 20 7a 42 75 66 2c 20 73 69 7a 65 6f 66 28 7a  , zBuf, sizeof(z
10b70 42 75 66 29 2c 20 30 29 3b 0a 20 20 73 71 6c 69  Buf), 0);.  sqli
10b80 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
10b90 64 41 6c 6c 28 26 61 63 63 2c 20 22 43 52 45 41  dAll(&acc, "CREA
10ba0 54 45 20 54 41 42 4c 45 20 78 22 29 3b 0a 20 20  TE TABLE x");.  
10bb0 66 6f 72 28 69 3d 30 2c 20 6a 3d 70 50 72 61 67  for(i=0, j=pPrag
10bc0 6d 61 2d 3e 69 50 72 61 67 43 4e 61 6d 65 3b 20  ma->iPragCName; 
10bd0 69 3c 70 50 72 61 67 6d 61 2d 3e 6e 50 72 61 67  i<pPragma->nPrag
10be0 43 4e 61 6d 65 3b 20 69 2b 2b 2c 20 6a 2b 2b 29  CName; i++, j++)
10bf0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 58 50 72  {.    sqlite3XPr
10c00 69 6e 74 66 28 26 61 63 63 2c 20 22 25 63 5c 22  intf(&acc, "%c\"
10c10 25 73 5c 22 22 2c 20 63 53 65 70 2c 20 70 72 61  %s\"", cSep, pra
10c20 67 43 4e 61 6d 65 5b 6a 5d 29 3b 0a 20 20 20 20  gCName[j]);.    
10c30 63 53 65 70 20 3d 20 27 2c 27 3b 0a 20 20 7d 0a  cSep = ',';.  }.
10c40 20 20 69 66 28 20 69 3d 3d 30 20 29 7b 0a 20 20    if( i==0 ){.  
10c50 20 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66    sqlite3XPrintf
10c60 28 26 61 63 63 2c 20 22 28 5c 22 25 73 5c 22 22  (&acc, "(\"%s\""
10c70 2c 20 70 50 72 61 67 6d 61 2d 3e 7a 4e 61 6d 65  , pPragma->zName
10c80 29 3b 0a 20 20 20 20 63 53 65 70 20 3d 20 27 2c  );.    cSep = ',
10c90 27 3b 0a 20 20 20 20 69 2b 2b 3b 0a 20 20 7d 0a  ';.    i++;.  }.
10ca0 20 20 6a 20 3d 20 30 3b 0a 20 20 69 66 28 20 70    j = 0;.  if( p
10cb0 50 72 61 67 6d 61 2d 3e 6d 50 72 61 67 46 6c 67  Pragma->mPragFlg
10cc0 20 26 20 50 72 61 67 46 6c 67 5f 52 65 73 75 6c   & PragFlg_Resul
10cd0 74 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  t1 ){.    sqlite
10ce0 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41  3StrAccumAppendA
10cf0 6c 6c 28 26 61 63 63 2c 20 22 2c 61 72 67 20 48  ll(&acc, ",arg H
10d00 49 44 44 45 4e 22 29 3b 0a 20 20 20 20 6a 2b 2b  IDDEN");.    j++
10d10 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 50 72 61  ;.  }.  if( pPra
10d20 67 6d 61 2d 3e 6d 50 72 61 67 46 6c 67 20 26 20  gma->mPragFlg & 
10d30 28 50 72 61 67 46 6c 67 5f 53 63 68 65 6d 61 4f  (PragFlg_SchemaO
10d40 70 74 7c 50 72 61 67 46 6c 67 5f 53 63 68 65 6d  pt|PragFlg_Schem
10d50 61 52 65 71 29 20 29 7b 0a 20 20 20 20 73 71 6c  aReq) ){.    sql
10d60 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65  ite3StrAccumAppe
10d70 6e 64 41 6c 6c 28 26 61 63 63 2c 20 22 2c 73 63  ndAll(&acc, ",sc
10d80 68 65 6d 61 20 48 49 44 44 45 4e 22 29 3b 0a 20  hema HIDDEN");. 
10d90 20 20 20 6a 2b 2b 3b 0a 20 20 7d 0a 20 20 73 71     j++;.  }.  sq
10da0 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70  lite3StrAccumApp
10db0 65 6e 64 28 26 61 63 63 2c 20 22 29 22 2c 20 31  end(&acc, ")", 1
10dc0 29 3b 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41  );.  sqlite3StrA
10dd0 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63 63 29  ccumFinish(&acc)
10de0 3b 0a 20 20 61 73 73 65 72 74 28 20 73 74 72 6c  ;.  assert( strl
10df0 65 6e 28 7a 42 75 66 29 20 3c 20 73 69 7a 65 6f  en(zBuf) < sizeo
10e00 66 28 7a 42 75 66 29 2d 31 20 29 3b 0a 20 20 72  f(zBuf)-1 );.  r
10e10 63 20 3d 20 73 71 6c 69 74 65 33 5f 64 65 63 6c  c = sqlite3_decl
10e20 61 72 65 5f 76 74 61 62 28 64 62 2c 20 7a 42 75  are_vtab(db, zBu
10e30 66 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  f);.  if( rc==SQ
10e40 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 70  LITE_OK ){.    p
10e50 54 61 62 20 3d 20 28 50 72 61 67 6d 61 56 74 61  Tab = (PragmaVta
10e60 62 2a 29 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  b*)sqlite3_mallo
10e70 63 28 73 69 7a 65 6f 66 28 50 72 61 67 6d 61 56  c(sizeof(PragmaV
10e80 74 61 62 29 29 3b 0a 20 20 20 20 69 66 28 20 70  tab));.    if( p
10e90 54 61 62 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Tab==0 ){.      
10ea0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
10eb0 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  M;.    }else{.  
10ec0 20 20 20 20 6d 65 6d 73 65 74 28 70 54 61 62 2c      memset(pTab,
10ed0 20 30 2c 20 73 69 7a 65 6f 66 28 50 72 61 67 6d   0, sizeof(Pragm
10ee0 61 56 74 61 62 29 29 3b 0a 20 20 20 20 20 20 70  aVtab));.      p
10ef0 54 61 62 2d 3e 70 4e 61 6d 65 20 3d 20 70 50 72  Tab->pName = pPr
10f00 61 67 6d 61 3b 0a 20 20 20 20 20 20 70 54 61 62  agma;.      pTab
10f10 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 20  ->db = db;.     
10f20 20 70 54 61 62 2d 3e 69 48 69 64 64 65 6e 20 3d   pTab->iHidden =
10f30 20 69 3b 0a 20 20 20 20 20 20 70 54 61 62 2d 3e   i;.      pTab->
10f40 6e 48 69 64 64 65 6e 20 3d 20 6a 3b 0a 20 20 20  nHidden = j;.   
10f50 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
10f60 2a 70 7a 45 72 72 20 3d 20 73 71 6c 69 74 65 33  *pzErr = sqlite3
10f70 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 73  _mprintf("%s", s
10f80 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62  qlite3_errmsg(db
10f90 29 29 3b 0a 20 20 7d 0a 0a 20 20 2a 70 70 56 74  ));.  }..  *ppVt
10fa0 61 62 20 3d 20 28 73 71 6c 69 74 65 33 5f 76 74  ab = (sqlite3_vt
10fb0 61 62 2a 29 70 54 61 62 3b 0a 20 20 72 65 74 75  ab*)pTab;.  retu
10fc0 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 20 0a 2a 2a  rn rc;.}../* .**
10fd0 20 50 72 61 67 6d 61 20 76 69 72 74 75 61 6c 20   Pragma virtual 
10fe0 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 78 44 69  table module xDi
10ff0 73 63 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 2e  sconnect method.
11000 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 70  .*/.static int p
11010 72 61 67 6d 61 56 74 61 62 44 69 73 63 6f 6e 6e  ragmaVtabDisconn
11020 65 63 74 28 73 71 6c 69 74 65 33 5f 76 74 61 62  ect(sqlite3_vtab
11030 20 2a 70 56 74 61 62 29 7b 0a 20 20 50 72 61 67   *pVtab){.  Prag
11040 6d 61 56 74 61 62 20 2a 70 54 61 62 20 3d 20 28  maVtab *pTab = (
11050 50 72 61 67 6d 61 56 74 61 62 2a 29 70 56 74 61  PragmaVtab*)pVta
11060 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  b;.  sqlite3_fre
11070 65 28 70 54 61 62 29 3b 0a 20 20 72 65 74 75 72  e(pTab);.  retur
11080 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
11090 2f 2a 20 46 69 67 75 72 65 20 6f 75 74 20 74 68  /* Figure out th
110a0 65 20 62 65 73 74 20 69 6e 64 65 78 20 74 6f 20  e best index to 
110b0 75 73 65 20 74 6f 20 73 65 61 72 63 68 20 61 20  use to search a 
110c0 70 72 61 67 6d 61 20 76 69 72 74 75 61 6c 20 74  pragma virtual t
110d0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  able..**.** Ther
110e0 65 20 61 72 65 20 6e 6f 74 20 72 65 61 6c 6c 79  e are not really
110f0 20 61 6e 79 20 69 6e 64 65 78 20 63 68 6f 69 63   any index choic
11100 65 73 2e 20 20 42 75 74 20 77 65 20 77 61 6e 74  es.  But we want
11110 20 74 6f 20 65 6e 63 6f 75 72 61 67 65 20 74 68   to encourage th
11120 65 0a 2a 2a 20 71 75 65 72 79 20 70 6c 61 6e 6e  e.** query plann
11130 65 72 20 74 6f 20 67 69 76 65 20 3d 3d 20 63 6f  er to give == co
11140 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20 61 73 20  nstraints on as 
11150 6d 61 6e 79 20 68 69 64 64 65 6e 20 70 61 72 61  many hidden para
11160 6d 65 74 65 72 73 20 61 73 0a 2a 2a 20 70 6f 73  meters as.** pos
11170 73 69 62 6c 65 2c 20 61 6e 64 20 65 73 70 65 63  sible, and espec
11180 69 61 6c 6c 79 20 6f 6e 20 74 68 65 20 66 69 72  ially on the fir
11190 73 74 20 68 69 64 64 65 6e 20 70 61 72 61 6d 65  st hidden parame
111a0 74 65 72 2e 20 20 53 6f 20 72 65 74 75 72 6e 20  ter.  So return 
111b0 61 0a 2a 2a 20 68 69 67 68 20 63 6f 73 74 20 69  a.** high cost i
111c0 66 20 68 69 64 64 65 6e 20 70 61 72 61 6d 65 74  f hidden paramet
111d0 65 72 73 20 61 72 65 20 75 6e 63 6f 6e 73 74 72  ers are unconstr
111e0 61 69 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  ained..*/.static
111f0 20 69 6e 74 20 70 72 61 67 6d 61 56 74 61 62 42   int pragmaVtabB
11200 65 73 74 49 6e 64 65 78 28 73 71 6c 69 74 65 33  estIndex(sqlite3
11210 5f 76 74 61 62 20 2a 74 61 62 2c 20 73 71 6c 69  _vtab *tab, sqli
11220 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 2a  te3_index_info *
11230 70 49 64 78 49 6e 66 6f 29 7b 0a 20 20 50 72 61  pIdxInfo){.  Pra
11240 67 6d 61 56 74 61 62 20 2a 70 54 61 62 20 3d 20  gmaVtab *pTab = 
11250 28 50 72 61 67 6d 61 56 74 61 62 2a 29 74 61 62  (PragmaVtab*)tab
11260 3b 0a 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74  ;.  const struct
11270 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63   sqlite3_index_c
11280 6f 6e 73 74 72 61 69 6e 74 20 2a 70 43 6f 6e 73  onstraint *pCons
11290 74 72 61 69 6e 74 3b 0a 20 20 69 6e 74 20 69 2c  traint;.  int i,
112a0 20 6a 3b 0a 20 20 69 6e 74 20 73 65 65 6e 5b 32   j;.  int seen[2
112b0 5d 3b 0a 0a 20 20 70 49 64 78 49 6e 66 6f 2d 3e  ];..  pIdxInfo->
112c0 65 73 74 69 6d 61 74 65 64 43 6f 73 74 20 3d 20  estimatedCost = 
112d0 28 64 6f 75 62 6c 65 29 31 3b 0a 20 20 69 66 28  (double)1;.  if(
112e0 20 70 54 61 62 2d 3e 6e 48 69 64 64 65 6e 3d 3d   pTab->nHidden==
112f0 30 20 29 7b 20 72 65 74 75 72 6e 20 53 51 4c 49  0 ){ return SQLI
11300 54 45 5f 4f 4b 3b 20 7d 0a 20 20 70 43 6f 6e 73  TE_OK; }.  pCons
11310 74 72 61 69 6e 74 20 3d 20 70 49 64 78 49 6e 66  traint = pIdxInf
11320 6f 2d 3e 61 43 6f 6e 73 74 72 61 69 6e 74 3b 0a  o->aConstraint;.
11330 20 20 73 65 65 6e 5b 30 5d 20 3d 20 30 3b 0a 20    seen[0] = 0;. 
11340 20 73 65 65 6e 5b 31 5d 20 3d 20 30 3b 0a 20 20   seen[1] = 0;.  
11350 66 6f 72 28 69 3d 30 3b 20 69 3c 70 49 64 78 49  for(i=0; i<pIdxI
11360 6e 66 6f 2d 3e 6e 43 6f 6e 73 74 72 61 69 6e 74  nfo->nConstraint
11370 3b 20 69 2b 2b 2c 20 70 43 6f 6e 73 74 72 61 69  ; i++, pConstrai
11380 6e 74 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 70  nt++){.    if( p
11390 43 6f 6e 73 74 72 61 69 6e 74 2d 3e 75 73 61 62  Constraint->usab
113a0 6c 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  le==0 ) continue
113b0 3b 0a 20 20 20 20 69 66 28 20 70 43 6f 6e 73 74  ;.    if( pConst
113c0 72 61 69 6e 74 2d 3e 6f 70 21 3d 53 51 4c 49 54  raint->op!=SQLIT
113d0 45 5f 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49  E_INDEX_CONSTRAI
113e0 4e 54 5f 45 51 20 29 20 63 6f 6e 74 69 6e 75 65  NT_EQ ) continue
113f0 3b 0a 20 20 20 20 69 66 28 20 70 43 6f 6e 73 74  ;.    if( pConst
11400 72 61 69 6e 74 2d 3e 69 43 6f 6c 75 6d 6e 20 3c  raint->iColumn <
11410 20 70 54 61 62 2d 3e 69 48 69 64 64 65 6e 20 29   pTab->iHidden )
11420 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 6a   continue;.    j
11430 20 3d 20 70 43 6f 6e 73 74 72 61 69 6e 74 2d 3e   = pConstraint->
11440 69 43 6f 6c 75 6d 6e 20 2d 20 70 54 61 62 2d 3e  iColumn - pTab->
11450 69 48 69 64 64 65 6e 3b 0a 20 20 20 20 61 73 73  iHidden;.    ass
11460 65 72 74 28 20 6a 20 3c 20 32 20 29 3b 0a 20 20  ert( j < 2 );.  
11470 20 20 73 65 65 6e 5b 6a 5d 20 3d 20 69 2b 31 3b    seen[j] = i+1;
11480 0a 20 20 7d 0a 20 20 69 66 28 20 73 65 65 6e 5b  .  }.  if( seen[
11490 30 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 70 49 64  0]==0 ){.    pId
114a0 78 49 6e 66 6f 2d 3e 65 73 74 69 6d 61 74 65 64  xInfo->estimated
114b0 43 6f 73 74 20 3d 20 28 64 6f 75 62 6c 65 29 32  Cost = (double)2
114c0 31 34 37 34 38 33 36 34 37 3b 0a 20 20 20 20 70  147483647;.    p
114d0 49 64 78 49 6e 66 6f 2d 3e 65 73 74 69 6d 61 74  IdxInfo->estimat
114e0 65 64 52 6f 77 73 20 3d 20 32 31 34 37 34 38 33  edRows = 2147483
114f0 36 34 37 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  647;.    return 
11500 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20  SQLITE_OK;.  }. 
11510 20 6a 20 3d 20 73 65 65 6e 5b 30 5d 2d 31 3b 0a   j = seen[0]-1;.
11520 20 20 70 49 64 78 49 6e 66 6f 2d 3e 61 43 6f 6e    pIdxInfo->aCon
11530 73 74 72 61 69 6e 74 55 73 61 67 65 5b 6a 5d 2e  straintUsage[j].
11540 61 72 67 76 49 6e 64 65 78 20 3d 20 31 3b 0a 20  argvIndex = 1;. 
11550 20 70 49 64 78 49 6e 66 6f 2d 3e 61 43 6f 6e 73   pIdxInfo->aCons
11560 74 72 61 69 6e 74 55 73 61 67 65 5b 6a 5d 2e 6f  traintUsage[j].o
11570 6d 69 74 20 3d 20 31 3b 0a 20 20 69 66 28 20 73  mit = 1;.  if( s
11580 65 65 6e 5b 31 5d 3d 3d 30 20 29 20 72 65 74 75  een[1]==0 ) retu
11590 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20  rn SQLITE_OK;.  
115a0 70 49 64 78 49 6e 66 6f 2d 3e 65 73 74 69 6d 61  pIdxInfo->estima
115b0 74 65 64 43 6f 73 74 20 3d 20 28 64 6f 75 62 6c  tedCost = (doubl
115c0 65 29 32 30 3b 0a 20 20 70 49 64 78 49 6e 66 6f  e)20;.  pIdxInfo
115d0 2d 3e 65 73 74 69 6d 61 74 65 64 52 6f 77 73 20  ->estimatedRows 
115e0 3d 20 32 30 3b 0a 20 20 6a 20 3d 20 73 65 65 6e  = 20;.  j = seen
115f0 5b 31 5d 2d 31 3b 0a 20 20 70 49 64 78 49 6e 66  [1]-1;.  pIdxInf
11600 6f 2d 3e 61 43 6f 6e 73 74 72 61 69 6e 74 55 73  o->aConstraintUs
11610 61 67 65 5b 6a 5d 2e 61 72 67 76 49 6e 64 65 78  age[j].argvIndex
11620 20 3d 20 32 3b 0a 20 20 70 49 64 78 49 6e 66 6f   = 2;.  pIdxInfo
11630 2d 3e 61 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  ->aConstraintUsa
11640 67 65 5b 6a 5d 2e 6f 6d 69 74 20 3d 20 31 3b 0a  ge[j].omit = 1;.
11650 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
11660 4f 4b 3b 0a 7d 0a 0a 2f 2a 20 43 72 65 61 74 65  OK;.}../* Create
11670 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 66 6f   a new cursor fo
11680 72 20 74 68 65 20 70 72 61 67 6d 61 20 76 69 72  r the pragma vir
11690 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 73 74  tual table */.st
116a0 61 74 69 63 20 69 6e 74 20 70 72 61 67 6d 61 56  atic int pragmaV
116b0 74 61 62 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  tabOpen(sqlite3_
116c0 76 74 61 62 20 2a 70 56 74 61 62 2c 20 73 71 6c  vtab *pVtab, sql
116d0 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
116e0 20 2a 2a 70 70 43 75 72 73 6f 72 29 7b 0a 20 20   **ppCursor){.  
116f0 50 72 61 67 6d 61 56 74 61 62 43 75 72 73 6f 72  PragmaVtabCursor
11700 20 2a 70 43 73 72 3b 0a 20 20 70 43 73 72 20 3d   *pCsr;.  pCsr =
11710 20 28 50 72 61 67 6d 61 56 74 61 62 43 75 72 73   (PragmaVtabCurs
11720 6f 72 2a 29 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  or*)sqlite3_mall
11730 6f 63 28 73 69 7a 65 6f 66 28 2a 70 43 73 72 29  oc(sizeof(*pCsr)
11740 29 3b 0a 20 20 69 66 28 20 70 43 73 72 3d 3d 30  );.  if( pCsr==0
11750 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45   ) return SQLITE
11760 5f 4e 4f 4d 45 4d 3b 0a 20 20 6d 65 6d 73 65 74  _NOMEM;.  memset
11770 28 70 43 73 72 2c 20 30 2c 20 73 69 7a 65 6f 66  (pCsr, 0, sizeof
11780 28 50 72 61 67 6d 61 56 74 61 62 43 75 72 73 6f  (PragmaVtabCurso
11790 72 29 29 3b 0a 20 20 70 43 73 72 2d 3e 62 61 73  r));.  pCsr->bas
117a0 65 2e 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b  e.pVtab = pVtab;
117b0 0a 20 20 2a 70 70 43 75 72 73 6f 72 20 3d 20 26  .  *ppCursor = &
117c0 70 43 73 72 2d 3e 62 61 73 65 3b 0a 20 20 72 65  pCsr->base;.  re
117d0 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
117e0 7d 0a 0a 2f 2a 20 43 6c 65 61 72 20 61 6c 6c 20  }../* Clear all 
117f0 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 70 72 61  content from pra
11800 67 6d 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  gma virtual tabl
11810 65 20 63 75 72 73 6f 72 2e 20 2a 2f 0a 73 74 61  e cursor. */.sta
11820 74 69 63 20 76 6f 69 64 20 70 72 61 67 6d 61 56  tic void pragmaV
11830 74 61 62 43 75 72 73 6f 72 43 6c 65 61 72 28 50  tabCursorClear(P
11840 72 61 67 6d 61 56 74 61 62 43 75 72 73 6f 72 20  ragmaVtabCursor 
11850 2a 70 43 73 72 29 7b 0a 20 20 69 6e 74 20 69 3b  *pCsr){.  int i;
11860 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
11870 69 7a 65 28 70 43 73 72 2d 3e 70 50 72 61 67 6d  ize(pCsr->pPragm
11880 61 29 3b 0a 20 20 70 43 73 72 2d 3e 70 50 72 61  a);.  pCsr->pPra
11890 67 6d 61 20 3d 20 30 3b 0a 20 20 66 6f 72 28 69  gma = 0;.  for(i
118a0 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28  =0; i<ArraySize(
118b0 70 43 73 72 2d 3e 61 7a 41 72 67 29 3b 20 69 2b  pCsr->azArg); i+
118c0 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  +){.    sqlite3_
118d0 66 72 65 65 28 70 43 73 72 2d 3e 61 7a 41 72 67  free(pCsr->azArg
118e0 5b 69 5d 29 3b 0a 20 20 20 20 70 43 73 72 2d 3e  [i]);.    pCsr->
118f0 61 7a 41 72 67 5b 69 5d 20 3d 20 30 3b 0a 20 20  azArg[i] = 0;.  
11900 7d 0a 7d 0a 0a 2f 2a 20 43 6c 6f 73 65 20 61 20  }.}../* Close a 
11910 70 72 61 67 6d 61 20 76 69 72 74 75 61 6c 20 74  pragma virtual t
11920 61 62 6c 65 20 63 75 72 73 6f 72 20 2a 2f 0a 73  able cursor */.s
11930 74 61 74 69 63 20 69 6e 74 20 70 72 61 67 6d 61  tatic int pragma
11940 56 74 61 62 43 6c 6f 73 65 28 73 71 6c 69 74 65  VtabClose(sqlite
11950 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 63  3_vtab_cursor *c
11960 75 72 29 7b 0a 20 20 50 72 61 67 6d 61 56 74 61  ur){.  PragmaVta
11970 62 43 75 72 73 6f 72 20 2a 70 43 73 72 20 3d 20  bCursor *pCsr = 
11980 28 50 72 61 67 6d 61 56 74 61 62 43 75 72 73 6f  (PragmaVtabCurso
11990 72 2a 29 63 75 72 3b 0a 20 20 70 72 61 67 6d 61  r*)cur;.  pragma
119a0 56 74 61 62 43 75 72 73 6f 72 43 6c 65 61 72 28  VtabCursorClear(
119b0 70 43 73 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  pCsr);.  sqlite3
119c0 5f 66 72 65 65 28 70 43 73 72 29 3b 0a 20 20 72  _free(pCsr);.  r
119d0 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
119e0 0a 7d 0a 0a 2f 2a 20 41 64 76 61 6e 63 65 20 74  .}../* Advance t
119f0 68 65 20 70 72 61 67 6d 61 20 76 69 72 74 75 61  he pragma virtua
11a00 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74  l table cursor t
11a10 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 2a  o the next row *
11a20 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 70 72 61  /.static int pra
11a30 67 6d 61 56 74 61 62 4e 65 78 74 28 73 71 6c 69  gmaVtabNext(sqli
11a40 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
11a50 2a 70 56 74 61 62 43 75 72 73 6f 72 29 7b 0a 20  *pVtabCursor){. 
11a60 20 50 72 61 67 6d 61 56 74 61 62 43 75 72 73 6f   PragmaVtabCurso
11a70 72 20 2a 70 43 73 72 20 3d 20 28 50 72 61 67 6d  r *pCsr = (Pragm
11a80 61 56 74 61 62 43 75 72 73 6f 72 2a 29 70 56 74  aVtabCursor*)pVt
11a90 61 62 43 75 72 73 6f 72 3b 0a 20 20 69 6e 74 20  abCursor;.  int 
11aa0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
11ab0 0a 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 20  .  /* Increment 
11ac0 74 68 65 20 78 52 6f 77 69 64 20 76 61 6c 75 65  the xRowid value
11ad0 20 2a 2f 0a 20 20 70 43 73 72 2d 3e 69 52 6f 77   */.  pCsr->iRow
11ae0 69 64 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20  id++;.  assert( 
11af0 70 43 73 72 2d 3e 70 50 72 61 67 6d 61 20 29 3b  pCsr->pPragma );
11b00 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 52 4f  .  if( SQLITE_RO
11b10 57 21 3d 73 71 6c 69 74 65 33 5f 73 74 65 70 28  W!=sqlite3_step(
11b20 70 43 73 72 2d 3e 70 50 72 61 67 6d 61 29 20 29  pCsr->pPragma) )
11b30 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
11b40 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 43 73 72  e3_finalize(pCsr
11b50 2d 3e 70 50 72 61 67 6d 61 29 3b 0a 20 20 20 20  ->pPragma);.    
11b60 70 43 73 72 2d 3e 70 50 72 61 67 6d 61 20 3d 20  pCsr->pPragma = 
11b70 30 3b 0a 20 20 20 20 70 72 61 67 6d 61 56 74 61  0;.    pragmaVta
11b80 62 43 75 72 73 6f 72 43 6c 65 61 72 28 70 43 73  bCursorClear(pCs
11b90 72 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  r);.  }.  return
11ba0 20 72 63 3b 0a 7d 0a 0a 2f 2a 20 0a 2a 2a 20 50   rc;.}../* .** P
11bb0 72 61 67 6d 61 20 76 69 72 74 75 61 6c 20 74 61  ragma virtual ta
11bc0 62 6c 65 20 6d 6f 64 75 6c 65 20 78 46 69 6c 74  ble module xFilt
11bd0 65 72 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 73 74  er method..*/.st
11be0 61 74 69 63 20 69 6e 74 20 70 72 61 67 6d 61 56  atic int pragmaV
11bf0 74 61 62 46 69 6c 74 65 72 28 0a 20 20 73 71 6c  tabFilter(.  sql
11c00 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
11c10 20 2a 70 56 74 61 62 43 75 72 73 6f 72 2c 20 0a   *pVtabCursor, .
11c20 20 20 69 6e 74 20 69 64 78 4e 75 6d 2c 20 63 6f    int idxNum, co
11c30 6e 73 74 20 63 68 61 72 20 2a 69 64 78 53 74 72  nst char *idxStr
11c40 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 73 71  ,.  int argc, sq
11c50 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72  lite3_value **ar
11c60 67 76 0a 29 7b 0a 20 20 50 72 61 67 6d 61 56 74  gv.){.  PragmaVt
11c70 61 62 43 75 72 73 6f 72 20 2a 70 43 73 72 20 3d  abCursor *pCsr =
11c80 20 28 50 72 61 67 6d 61 56 74 61 62 43 75 72 73   (PragmaVtabCurs
11c90 6f 72 2a 29 70 56 74 61 62 43 75 72 73 6f 72 3b  or*)pVtabCursor;
11ca0 0a 20 20 50 72 61 67 6d 61 56 74 61 62 20 2a 70  .  PragmaVtab *p
11cb0 54 61 62 20 3d 20 28 50 72 61 67 6d 61 56 74 61  Tab = (PragmaVta
11cc0 62 2a 29 28 70 56 74 61 62 43 75 72 73 6f 72 2d  b*)(pVtabCursor-
11cd0 3e 70 56 74 61 62 29 3b 0a 20 20 69 6e 74 20 72  >pVtab);.  int r
11ce0 63 3b 0a 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20  c;.  int i, j;. 
11cf0 20 53 74 72 41 63 63 75 6d 20 61 63 63 3b 0a 20   StrAccum acc;. 
11d00 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 0a 20 20   char *zSql;..  
11d10 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
11d20 28 69 64 78 4e 75 6d 29 3b 0a 20 20 55 4e 55 53  (idxNum);.  UNUS
11d30 45 44 5f 50 41 52 41 4d 45 54 45 52 28 69 64 78  ED_PARAMETER(idx
11d40 53 74 72 29 3b 0a 20 20 70 72 61 67 6d 61 56 74  Str);.  pragmaVt
11d50 61 62 43 75 72 73 6f 72 43 6c 65 61 72 28 70 43  abCursorClear(pC
11d60 73 72 29 3b 0a 20 20 6a 20 3d 20 28 70 54 61 62  sr);.  j = (pTab
11d70 2d 3e 70 4e 61 6d 65 2d 3e 6d 50 72 61 67 46 6c  ->pName->mPragFl
11d80 67 20 26 20 50 72 61 67 46 6c 67 5f 52 65 73 75  g & PragFlg_Resu
11d90 6c 74 31 29 21 3d 30 20 3f 20 30 20 3a 20 31 3b  lt1)!=0 ? 0 : 1;
11da0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72  .  for(i=0; i<ar
11db0 67 63 3b 20 69 2b 2b 2c 20 6a 2b 2b 29 7b 0a 20  gc; i++, j++){. 
11dc0 20 20 20 61 73 73 65 72 74 28 20 6a 3c 41 72 72     assert( j<Arr
11dd0 61 79 53 69 7a 65 28 70 43 73 72 2d 3e 61 7a 41  aySize(pCsr->azA
11de0 72 67 29 20 29 3b 0a 20 20 20 20 70 43 73 72 2d  rg) );.    pCsr-
11df0 3e 61 7a 41 72 67 5b 6a 5d 20 3d 20 73 71 6c 69  >azArg[j] = sqli
11e00 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22  te3_mprintf("%s"
11e10 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
11e20 74 65 78 74 28 61 72 67 76 5b 69 5d 29 29 3b 0a  text(argv[i]));.
11e30 20 20 20 20 69 66 28 20 70 43 73 72 2d 3e 61 7a      if( pCsr->az
11e40 41 72 67 5b 6a 5d 3d 3d 30 20 29 7b 0a 20 20 20  Arg[j]==0 ){.   
11e50 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
11e60 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 0a 20 20  _NOMEM;.    }.  
11e70 7d 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41 63  }.  sqlite3StrAc
11e80 63 75 6d 49 6e 69 74 28 26 61 63 63 2c 20 30 2c  cumInit(&acc, 0,
11e90 20 30 2c 20 30 2c 20 70 54 61 62 2d 3e 64 62 2d   0, 0, pTab->db-
11ea0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
11eb0 49 4d 49 54 5f 53 51 4c 5f 4c 45 4e 47 54 48 5d  IMIT_SQL_LENGTH]
11ec0 29 3b 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41  );.  sqlite3StrA
11ed0 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 26 61  ccumAppendAll(&a
11ee0 63 63 2c 20 22 50 52 41 47 4d 41 20 22 29 3b 0a  cc, "PRAGMA ");.
11ef0 20 20 69 66 28 20 70 43 73 72 2d 3e 61 7a 41 72    if( pCsr->azAr
11f00 67 5b 31 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69  g[1] ){.    sqli
11f10 74 65 33 58 50 72 69 6e 74 66 28 26 61 63 63 2c  te3XPrintf(&acc,
11f20 20 22 25 51 2e 22 2c 20 70 43 73 72 2d 3e 61 7a   "%Q.", pCsr->az
11f30 41 72 67 5b 31 5d 29 3b 0a 20 20 7d 0a 20 20 73  Arg[1]);.  }.  s
11f40 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
11f50 70 65 6e 64 41 6c 6c 28 26 61 63 63 2c 20 70 54  pendAll(&acc, pT
11f60 61 62 2d 3e 70 4e 61 6d 65 2d 3e 7a 4e 61 6d 65  ab->pName->zName
11f70 29 3b 0a 20 20 69 66 28 20 70 43 73 72 2d 3e 61  );.  if( pCsr->a
11f80 7a 41 72 67 5b 30 5d 20 29 7b 0a 20 20 20 20 73  zArg[0] ){.    s
11f90 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 26 61  qlite3XPrintf(&a
11fa0 63 63 2c 20 22 3d 25 51 22 2c 20 70 43 73 72 2d  cc, "=%Q", pCsr-
11fb0 3e 61 7a 41 72 67 5b 30 5d 29 3b 0a 20 20 7d 0a  >azArg[0]);.  }.
11fc0 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
11fd0 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26  StrAccumFinish(&
11fe0 61 63 63 29 3b 0a 20 20 69 66 28 20 7a 53 71 6c  acc);.  if( zSql
11ff0 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 53 51 4c  ==0 ) return SQL
12000 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 72 63 20  ITE_NOMEM;.  rc 
12010 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
12020 65 5f 76 32 28 70 54 61 62 2d 3e 64 62 2c 20 7a  e_v2(pTab->db, z
12030 53 71 6c 2c 20 2d 31 2c 20 26 70 43 73 72 2d 3e  Sql, -1, &pCsr->
12040 70 50 72 61 67 6d 61 2c 20 30 29 3b 0a 20 20 73  pPragma, 0);.  s
12050 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
12060 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
12070 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 54  ITE_OK ){.    pT
12080 61 62 2d 3e 62 61 73 65 2e 7a 45 72 72 4d 73 67  ab->base.zErrMsg
12090 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
120a0 74 66 28 22 25 73 22 2c 20 73 71 6c 69 74 65 33  tf("%s", sqlite3
120b0 5f 65 72 72 6d 73 67 28 70 54 61 62 2d 3e 64 62  _errmsg(pTab->db
120c0 29 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72  ));.    return r
120d0 63 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  c;.  }.  return 
120e0 70 72 61 67 6d 61 56 74 61 62 4e 65 78 74 28 70  pragmaVtabNext(p
120f0 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 7d 0a 0a  VtabCursor);.}..
12100 2f 2a 0a 2a 2a 20 50 72 61 67 6d 61 20 76 69 72  /*.** Pragma vir
12110 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c  tual table modul
12120 65 20 78 45 6f 66 20 6d 65 74 68 6f 64 2e 0a 2a  e xEof method..*
12130 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 70 72 61  /.static int pra
12140 67 6d 61 56 74 61 62 45 6f 66 28 73 71 6c 69 74  gmaVtabEof(sqlit
12150 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a  e3_vtab_cursor *
12160 70 56 74 61 62 43 75 72 73 6f 72 29 7b 0a 20 20  pVtabCursor){.  
12170 50 72 61 67 6d 61 56 74 61 62 43 75 72 73 6f 72  PragmaVtabCursor
12180 20 2a 70 43 73 72 20 3d 20 28 50 72 61 67 6d 61   *pCsr = (Pragma
12190 56 74 61 62 43 75 72 73 6f 72 2a 29 70 56 74 61  VtabCursor*)pVta
121a0 62 43 75 72 73 6f 72 3b 0a 20 20 72 65 74 75 72  bCursor;.  retur
121b0 6e 20 28 70 43 73 72 2d 3e 70 50 72 61 67 6d 61  n (pCsr->pPragma
121c0 3d 3d 30 29 3b 0a 7d 0a 0a 2f 2a 20 54 68 65 20  ==0);.}../* The 
121d0 78 43 6f 6c 75 6d 6e 20 6d 65 74 68 6f 64 20 73  xColumn method s
121e0 69 6d 70 6c 79 20 72 65 74 75 72 6e 73 20 74 68  imply returns th
121f0 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
12200 63 6f 6c 75 6d 6e 20 66 72 6f 6d 0a 2a 2a 20 74  column from.** t
12210 68 65 20 50 52 41 47 4d 41 2e 20 20 0a 2a 2f 0a  he PRAGMA.  .*/.
12220 73 74 61 74 69 63 20 69 6e 74 20 70 72 61 67 6d  static int pragm
12230 61 56 74 61 62 43 6f 6c 75 6d 6e 28 0a 20 20 73  aVtabColumn(.  s
12240 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
12250 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 2c  or *pVtabCursor,
12260 20 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74   .  sqlite3_cont
12270 65 78 74 20 2a 63 74 78 2c 20 0a 20 20 69 6e 74  ext *ctx, .  int
12280 20 69 0a 29 7b 0a 20 20 50 72 61 67 6d 61 56 74   i.){.  PragmaVt
12290 61 62 43 75 72 73 6f 72 20 2a 70 43 73 72 20 3d  abCursor *pCsr =
122a0 20 28 50 72 61 67 6d 61 56 74 61 62 43 75 72 73   (PragmaVtabCurs
122b0 6f 72 2a 29 70 56 74 61 62 43 75 72 73 6f 72 3b  or*)pVtabCursor;
122c0 0a 20 20 50 72 61 67 6d 61 56 74 61 62 20 2a 70  .  PragmaVtab *p
122d0 54 61 62 20 3d 20 28 50 72 61 67 6d 61 56 74 61  Tab = (PragmaVta
122e0 62 2a 29 28 70 56 74 61 62 43 75 72 73 6f 72 2d  b*)(pVtabCursor-
122f0 3e 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 69  >pVtab);.  if( i
12300 3c 70 54 61 62 2d 3e 69 48 69 64 64 65 6e 20 29  <pTab->iHidden )
12310 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65  {.    sqlite3_re
12320 73 75 6c 74 5f 76 61 6c 75 65 28 63 74 78 2c 20  sult_value(ctx, 
12330 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 76  sqlite3_column_v
12340 61 6c 75 65 28 70 43 73 72 2d 3e 70 50 72 61 67  alue(pCsr->pPrag
12350 6d 61 2c 20 69 29 29 3b 0a 20 20 7d 65 6c 73 65  ma, i));.  }else
12360 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65  {.    sqlite3_re
12370 73 75 6c 74 5f 74 65 78 74 28 63 74 78 2c 20 70  sult_text(ctx, p
12380 43 73 72 2d 3e 61 7a 41 72 67 5b 69 2d 70 54 61  Csr->azArg[i-pTa
12390 62 2d 3e 69 48 69 64 64 65 6e 5d 2c 2d 31 2c 53  b->iHidden],-1,S
123a0 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
123b0 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53  ;.  }.  return S
123c0 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 20  QLITE_OK;.}../* 
123d0 0a 2a 2a 20 50 72 61 67 6d 61 20 76 69 72 74 75  .** Pragma virtu
123e0 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20  al table module 
123f0 78 52 6f 77 69 64 20 6d 65 74 68 6f 64 2e 0a 2a  xRowid method..*
12400 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 70 72 61  /.static int pra
12410 67 6d 61 56 74 61 62 52 6f 77 69 64 28 73 71 6c  gmaVtabRowid(sql
12420 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
12430 20 2a 70 56 74 61 62 43 75 72 73 6f 72 2c 20 73   *pVtabCursor, s
12440 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a 70 29 7b  qlite_int64 *p){
12450 0a 20 20 50 72 61 67 6d 61 56 74 61 62 43 75 72  .  PragmaVtabCur
12460 73 6f 72 20 2a 70 43 73 72 20 3d 20 28 50 72 61  sor *pCsr = (Pra
12470 67 6d 61 56 74 61 62 43 75 72 73 6f 72 2a 29 70  gmaVtabCursor*)p
12480 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 2a 70  VtabCursor;.  *p
12490 20 3d 20 70 43 73 72 2d 3e 69 52 6f 77 69 64 3b   = pCsr->iRowid;
124a0 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
124b0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 20 54 68 65 20 70  _OK;.}../* The p
124c0 72 61 67 6d 61 20 76 69 72 74 75 61 6c 20 74 61  ragma virtual ta
124d0 62 6c 65 20 6f 62 6a 65 63 74 20 2a 2f 0a 73 74  ble object */.st
124e0 61 74 69 63 20 63 6f 6e 73 74 20 73 71 6c 69 74  atic const sqlit
124f0 65 33 5f 6d 6f 64 75 6c 65 20 70 72 61 67 6d 61  e3_module pragma
12500 56 74 61 62 4d 6f 64 75 6c 65 20 3d 20 7b 0a 20  VtabModule = {. 
12510 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 20 20   0,             
12520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12530 20 69 56 65 72 73 69 6f 6e 20 2a 2f 0a 20 20 30   iVersion */.  0
12540 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
12550 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 78              /* x
12560 43 72 65 61 74 65 20 2d 20 63 72 65 61 74 65 20  Create - create 
12570 61 20 74 61 62 6c 65 20 2a 2f 0a 20 20 70 72 61  a table */.  pra
12580 67 6d 61 56 74 61 62 43 6f 6e 6e 65 63 74 2c 20  gmaVtabConnect, 
12590 20 20 20 20 20 20 20 20 20 20 2f 2a 20 78 43 6f            /* xCo
125a0 6e 6e 65 63 74 20 2d 20 63 6f 6e 6e 65 63 74 20  nnect - connect 
125b0 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74  to an existing t
125c0 61 62 6c 65 20 2a 2f 0a 20 20 70 72 61 67 6d 61  able */.  pragma
125d0 56 74 61 62 42 65 73 74 49 6e 64 65 78 2c 20 20  VtabBestIndex,  
125e0 20 20 20 20 20 20 20 2f 2a 20 78 42 65 73 74 49         /* xBestI
125f0 6e 64 65 78 20 2d 20 44 65 74 65 72 6d 69 6e 65  ndex - Determine
12600 20 73 65 61 72 63 68 20 73 74 72 61 74 65 67 79   search strategy
12610 20 2a 2f 0a 20 20 70 72 61 67 6d 61 56 74 61 62   */.  pragmaVtab
12620 44 69 73 63 6f 6e 6e 65 63 74 2c 20 20 20 20 20  Disconnect,     
12630 20 20 20 2f 2a 20 78 44 69 73 63 6f 6e 6e 65 63     /* xDisconnec
12640 74 20 2d 20 44 69 73 63 6f 6e 6e 65 63 74 20 66  t - Disconnect f
12650 72 6f 6d 20 61 20 74 61 62 6c 65 20 2a 2f 0a 20  rom a table */. 
12660 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 20 20   0,             
12670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12680 20 78 44 65 73 74 72 6f 79 20 2d 20 44 72 6f 70   xDestroy - Drop
12690 20 61 20 74 61 62 6c 65 20 2a 2f 0a 20 20 70 72   a table */.  pr
126a0 61 67 6d 61 56 74 61 62 4f 70 65 6e 2c 20 20 20  agmaVtabOpen,   
126b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 78 4f             /* xO
126c0 70 65 6e 20 2d 20 6f 70 65 6e 20 61 20 63 75 72  pen - open a cur
126d0 73 6f 72 20 2a 2f 0a 20 20 70 72 61 67 6d 61 56  sor */.  pragmaV
126e0 74 61 62 43 6c 6f 73 65 2c 20 20 20 20 20 20 20  tabClose,       
126f0 20 20 20 20 20 20 2f 2a 20 78 43 6c 6f 73 65 20        /* xClose 
12700 2d 20 63 6c 6f 73 65 20 61 20 63 75 72 73 6f 72  - close a cursor
12710 20 2a 2f 0a 20 20 70 72 61 67 6d 61 56 74 61 62   */.  pragmaVtab
12720 46 69 6c 74 65 72 2c 20 20 20 20 20 20 20 20 20  Filter,         
12730 20 20 20 2f 2a 20 78 46 69 6c 74 65 72 20 2d 20     /* xFilter - 
12740 63 6f 6e 66 69 67 75 72 65 20 73 63 61 6e 20 63  configure scan c
12750 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20  onstraints */.  
12760 70 72 61 67 6d 61 56 74 61 62 4e 65 78 74 2c 20  pragmaVtabNext, 
12770 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12780 78 4e 65 78 74 20 2d 20 61 64 76 61 6e 63 65 20  xNext - advance 
12790 61 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 70 72  a cursor */.  pr
127a0 61 67 6d 61 56 74 61 62 45 6f 66 2c 20 20 20 20  agmaVtabEof,    
127b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 78 45             /* xE
127c0 6f 66 20 2a 2f 0a 20 20 70 72 61 67 6d 61 56 74  of */.  pragmaVt
127d0 61 62 43 6f 6c 75 6d 6e 2c 20 20 20 20 20 20 20  abColumn,       
127e0 20 20 20 20 20 2f 2a 20 78 43 6f 6c 75 6d 6e 20       /* xColumn 
127f0 2d 20 72 65 61 64 20 64 61 74 61 20 2a 2f 0a 20  - read data */. 
12800 20 70 72 61 67 6d 61 56 74 61 62 52 6f 77 69 64   pragmaVtabRowid
12810 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ,             /*
12820 20 78 52 6f 77 69 64 20 2d 20 72 65 61 64 20 64   xRowid - read d
12830 61 74 61 20 2a 2f 0a 20 20 30 2c 20 20 20 20 20  ata */.  0,     
12840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12850 20 20 20 20 20 20 2f 2a 20 78 55 70 64 61 74 65        /* xUpdate
12860 20 2d 20 77 72 69 74 65 20 64 61 74 61 20 2a 2f   - write data */
12870 0a 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20  .  0,           
12880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12890 2f 2a 20 78 42 65 67 69 6e 20 2d 20 62 65 67 69  /* xBegin - begi
128a0 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  n transaction */
128b0 0a 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20  .  0,           
128c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128d0 2f 2a 20 78 53 79 6e 63 20 2d 20 73 79 6e 63 20  /* xSync - sync 
128e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 20  transaction */. 
128f0 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 20 20   0,             
12900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12910 20 78 43 6f 6d 6d 69 74 20 2d 20 63 6f 6d 6d 69   xCommit - commi
12920 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  t transaction */
12930 0a 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20  .  0,           
12940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12950 2f 2a 20 78 52 6f 6c 6c 62 61 63 6b 20 2d 20 72  /* xRollback - r
12960 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
12970 69 6f 6e 20 2a 2f 0a 20 20 30 2c 20 20 20 20 20  ion */.  0,     
12980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12990 20 20 20 20 20 20 2f 2a 20 78 46 69 6e 64 46 75        /* xFindFu
129a0 6e 63 74 69 6f 6e 20 2d 20 66 75 6e 63 74 69 6f  nction - functio
129b0 6e 20 6f 76 65 72 6c 6f 61 64 69 6e 67 20 2a 2f  n overloading */
129c0 0a 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20  .  0,           
129d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129e0 2f 2a 20 78 52 65 6e 61 6d 65 20 2d 20 72 65 6e  /* xRename - ren
129f0 61 6d 65 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ame the table */
12a00 0a 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20  .  0,           
12a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a20 2f 2a 20 78 53 61 76 65 70 6f 69 6e 74 20 2a 2f  /* xSavepoint */
12a30 0a 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20  .  0,           
12a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a50 2f 2a 20 78 52 65 6c 65 61 73 65 20 2a 2f 0a 20  /* xRelease */. 
12a60 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
12a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12a80 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 20 2a 2f 0a   xRollbackTo */.
12a90 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20  };../*.** Check 
12aa0 74 6f 20 73 65 65 20 69 66 20 7a 54 61 62 4e 61  to see if zTabNa
12ab0 6d 65 20 69 73 20 72 65 61 6c 6c 79 20 74 68 65  me is really the
12ac0 20 6e 61 6d 65 20 6f 66 20 61 20 70 72 61 67 6d   name of a pragm
12ad0 61 2e 20 20 49 66 20 69 74 20 69 73 2c 0a 2a 2a  a.  If it is,.**
12ae0 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 61   then register a
12af0 6e 20 65 70 6f 6e 79 6d 6f 75 73 20 76 69 72 74  n eponymous virt
12b00 75 61 6c 20 74 61 62 6c 65 20 66 6f 72 20 74 68  ual table for th
12b10 61 74 20 70 72 61 67 6d 61 20 61 6e 64 20 72 65  at pragma and re
12b20 74 75 72 6e 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  turn.** a pointe
12b30 72 20 74 6f 20 74 68 65 20 4d 6f 64 75 6c 65 20  r to the Module 
12b40 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 6e  object for the n
12b50 65 77 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ew virtual table
12b60 2e 0a 2a 2f 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c  ..*/.Module *sql
12b70 69 74 65 33 50 72 61 67 6d 61 56 74 61 62 52 65  ite3PragmaVtabRe
12b80 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 20 2a  gister(sqlite3 *
12b90 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  db, const char *
12ba0 7a 4e 61 6d 65 29 7b 0a 20 20 63 6f 6e 73 74 20  zName){.  const 
12bb0 50 72 61 67 6d 61 4e 61 6d 65 20 2a 70 4e 61 6d  PragmaName *pNam
12bc0 65 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  e;.  assert( sql
12bd0 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 28 7a 4e  ite3_strnicmp(zN
12be0 61 6d 65 2c 20 22 70 72 61 67 6d 61 5f 22 2c 20  ame, "pragma_", 
12bf0 37 29 3d 3d 30 20 29 3b 0a 20 20 70 4e 61 6d 65  7)==0 );.  pName
12c00 20 3d 20 70 72 61 67 6d 61 4c 6f 63 61 74 65 28   = pragmaLocate(
12c10 7a 4e 61 6d 65 2b 37 29 3b 0a 20 20 69 66 28 20  zName+7);.  if( 
12c20 70 4e 61 6d 65 3d 3d 30 20 29 20 72 65 74 75 72  pName==0 ) retur
12c30 6e 20 30 3b 0a 20 20 69 66 28 20 28 70 4e 61 6d  n 0;.  if( (pNam
12c40 65 2d 3e 6d 50 72 61 67 46 6c 67 20 26 20 28 50  e->mPragFlg & (P
12c50 72 61 67 46 6c 67 5f 52 65 73 75 6c 74 30 7c 50  ragFlg_Result0|P
12c60 72 61 67 46 6c 67 5f 52 65 73 75 6c 74 31 29 29  ragFlg_Result1))
12c70 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
12c80 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
12c90 33 48 61 73 68 46 69 6e 64 28 26 64 62 2d 3e 61  3HashFind(&db->a
12ca0 4d 6f 64 75 6c 65 2c 20 7a 4e 61 6d 65 29 3d 3d  Module, zName)==
12cb0 30 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 73 71  0 );.  return sq
12cc0 6c 69 74 65 33 56 74 61 62 43 72 65 61 74 65 4d  lite3VtabCreateM
12cd0 6f 64 75 6c 65 28 64 62 2c 20 7a 4e 61 6d 65 2c  odule(db, zName,
12ce0 20 26 70 72 61 67 6d 61 56 74 61 62 4d 6f 64 75   &pragmaVtabModu
12cf0 6c 65 2c 20 28 76 6f 69 64 2a 29 70 4e 61 6d 65  le, (void*)pName
12d00 2c 20 30 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20  , 0);.}..#endif 
12d10 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
12d20 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
12d30 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
12d40 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a  _OMIT_PRAGMA */.