/ Hex Artifact Content
Login

Artifact 1564ee0bc96aed8b39cfec2c5bb655e031b6431c:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 23 69  sqliteInt.h"..#i
01d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
01e0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
01f0: 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
0200: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
0210: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
0220: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
0230: 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
0240: 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
0250: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
0260: 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
0270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
02d0: 65 20 22 70 72 61 67 6d 61 2e 68 22 20 69 6e 63  e "pragma.h" inc
02e0: 6c 75 64 65 20 66 69 6c 65 20 69 73 20 61 6e 20  lude file is an 
02f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65  automatically ge
0300: 6e 65 72 61 74 65 64 20 66 69 6c 65 20 74 68 61  nerated file tha
0310: 74 0a 2a 2a 20 74 68 61 74 20 69 6e 63 6c 75 64  t.** that includ
0320: 65 73 20 74 68 65 20 50 72 61 67 54 79 70 65 5f  es the PragType_
0330: 58 58 58 58 20 6d 61 63 72 6f 20 64 65 66 69 6e  XXXX macro defin
0340: 69 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 61  itions and the a
0350: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 0a 2a 2a 20  PragmaName[].** 
0360: 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 65 6e  object.  This en
0370: 73 75 72 65 73 20 74 68 61 74 20 74 68 65 20 61  sures that the a
0380: 50 72 61 67 6d 61 4e 61 6d 65 5b 5d 20 74 61 62  PragmaName[] tab
0390: 6c 65 20 69 73 20 61 72 72 61 6e 67 65 64 20 69  le is arranged i
03a0: 6e 0a 2a 2a 20 6c 65 78 69 63 6f 67 72 61 70 68  n.** lexicograph
03b0: 69 63 61 6c 20 6f 72 64 65 72 20 74 6f 20 66 61  ical order to fa
03c0: 63 69 6c 69 74 79 20 61 20 62 69 6e 61 72 79 20  cility a binary 
03d0: 73 65 61 72 63 68 20 6f 66 20 74 68 65 20 70 72  search of the pr
03e0: 61 67 6d 61 20 6e 61 6d 65 2e 0a 2a 2a 20 44 6f  agma name..** Do
03f0: 20 6e 6f 74 20 65 64 69 74 20 70 72 61 67 6d 61   not edit pragma
0400: 2e 68 20 64 69 72 65 63 74 6c 79 2e 20 20 45 64  .h directly.  Ed
0410: 69 74 20 61 6e 64 20 72 65 72 75 6e 20 74 68 65  it and rerun the
0420: 20 73 63 72 69 70 74 20 69 6e 20 61 74 20 0a 2a   script in at .*
0430: 2a 20 2e 2e 2f 74 6f 6f 6c 2f 6d 6b 70 72 61 67  * ../tool/mkprag
0440: 6d 61 74 61 62 2e 74 63 6c 2e 20 2a 2f 0a 23 69  matab.tcl. */.#i
0450: 6e 63 6c 75 64 65 20 22 70 72 61 67 6d 61 2e 68  nclude "pragma.h
0460: 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  "../*.** Interpr
0470: 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  et the given str
0480: 69 6e 67 20 61 73 20 61 20 73 61 66 65 74 79 20  ing as a safety 
0490: 6c 65 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30  level.  Return 0
04a0: 20 66 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66   for OFF,.** 1 f
04b0: 6f 72 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 2c  or ON or NORMAL,
04c0: 20 32 20 66 6f 72 20 46 55 4c 4c 2c 20 61 6e 64   2 for FULL, and
04d0: 20 33 20 66 6f 72 20 45 58 54 52 41 2e 20 20 52   3 for EXTRA.  R
04e0: 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e 20 65  eturn 1 for an e
04f0: 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e 72 65  mpty or .** unre
0500: 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e 67 20  cognized string 
0510: 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65 20 46  argument.  The F
0520: 55 4c 4c 20 61 6e 64 20 45 58 54 52 41 20 6f 70  ULL and EXTRA op
0530: 74 69 6f 6e 20 69 73 20 64 69 73 61 6c 6c 6f 77  tion is disallow
0540: 65 64 0a 2a 2a 20 69 66 20 74 68 65 20 6f 6d 69  ed.** if the omi
0550: 74 46 75 6c 6c 20 70 61 72 61 6d 65 74 65 72 20  tFull parameter 
0560: 69 74 20 31 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  it 1..**.** Note
0570: 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 73   that the values
0580: 20 72 65 74 75 72 6e 65 64 20 61 72 65 20 6f 6e   returned are on
0590: 65 20 6c 65 73 73 20 74 68 61 74 20 74 68 65 20  e less that the 
05a0: 76 61 6c 75 65 73 20 74 68 61 74 0a 2a 2a 20 73  values that.** s
05b0: 68 6f 75 6c 64 20 62 65 20 70 61 73 73 65 64 20  hould be passed 
05c0: 69 6e 74 6f 20 73 71 6c 69 74 65 33 42 74 72 65  into sqlite3Btre
05d0: 65 53 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28  eSetSafetyLevel(
05e0: 29 2e 20 20 54 68 65 20 69 73 20 64 6f 6e 65 0a  ).  The is done.
05f0: 2a 2a 20 74 6f 20 73 75 70 70 6f 72 74 20 6c 65  ** to support le
0600: 67 61 63 79 20 53 51 4c 20 63 6f 64 65 2e 20 20  gacy SQL code.  
0610: 54 68 65 20 73 61 66 65 74 79 20 6c 65 76 65 6c  The safety level
0620: 20 75 73 65 64 20 74 6f 20 62 65 20 62 6f 6f 6c   used to be bool
0630: 65 61 6e 0a 2a 2a 20 61 6e 64 20 6f 6c 64 65 72  ean.** and older
0640: 20 73 63 72 69 70 74 73 20 6d 61 79 20 68 61 76   scripts may hav
0650: 65 20 75 73 65 64 20 6e 75 6d 62 65 72 73 20 30  e used numbers 0
0660: 20 66 6f 72 20 4f 46 46 20 61 6e 64 20 31 20 66   for OFF and 1 f
0670: 6f 72 20 4f 4e 2e 0a 2a 2f 0a 73 74 61 74 69 63  or ON..*/.static
0680: 20 75 38 20 67 65 74 53 61 66 65 74 79 4c 65 76   u8 getSafetyLev
0690: 65 6c 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  el(const char *z
06a0: 2c 20 69 6e 74 20 6f 6d 69 74 46 75 6c 6c 2c 20  , int omitFull, 
06b0: 75 38 20 64 66 6c 74 29 7b 0a 20 20 20 20 20 20  u8 dflt){.      
06c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
06d0: 20 20 20 20 20 20 20 2f 2a 20 31 32 33 34 35 36         /* 123456
06e0: 37 38 39 20 31 32 33 34 35 36 37 38 39 20 31 32  789 123456789 12
06f0: 33 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f  3 */.  static co
0700: 6e 73 74 20 63 68 61 72 20 7a 54 65 78 74 5b 5d  nst char zText[]
0710: 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65 79 65 73   = "onoffalseyes
0720: 74 72 75 65 78 74 72 61 66 75 6c 6c 22 3b 0a 20  truextrafull";. 
0730: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38   static const u8
0740: 20 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c   iOffset[] = {0,
0750: 20 31 2c 20 32 2c 20 20 34 2c 20 20 20 20 39 2c   1, 2,  4,    9,
0760: 20 20 31 32 2c 20 20 31 35 2c 20 20 20 32 30 7d    12,  15,   20}
0770: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
0780: 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d 20 3d 20   u8 iLength[] = 
0790: 7b 32 2c 20 32 2c 20 33 2c 20 20 35 2c 20 20 20  {2, 2, 3,  5,   
07a0: 20 33 2c 20 20 20 34 2c 20 20 20 35 2c 20 20 20   3,   4,   5,   
07b0: 20 34 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f   4};.  static co
07c0: 6e 73 74 20 75 38 20 69 56 61 6c 75 65 5b 5d 20  nst u8 iValue[] 
07d0: 3d 20 20 7b 31 2c 20 30 2c 20 30 2c 20 20 30 2c  =  {1, 0, 0,  0,
07e0: 20 20 20 20 31 2c 20 20 20 31 2c 20 20 20 33 2c      1,   1,   3,
07f0: 20 20 20 20 32 7d 3b 0a 20 20 20 20 20 20 20 20      2};.        
0800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0810: 20 20 20 20 2f 2a 20 6f 6e 20 6e 6f 20 6f 66 66      /* on no off
0820: 20 66 61 6c 73 65 20 79 65 73 20 74 72 75 65 20   false yes true 
0830: 65 78 74 72 61 20 66 75 6c 6c 20 2a 2f 0a 20 20  extra full */.  
0840: 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28 20  int i, n;.  if( 
0850: 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a  sqlite3Isdigit(*
0860: 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  z) ){.    return
0870: 20 28 75 38 29 73 71 6c 69 74 65 33 41 74 6f 69   (u8)sqlite3Atoi
0880: 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 73  (z);.  }.  n = s
0890: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
08a0: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
08b0: 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e 67 74  ArraySize(iLengt
08c0: 68 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  h); i++){.    if
08d0: 28 20 69 4c 65 6e 67 74 68 5b 69 5d 3d 3d 6e 20  ( iLength[i]==n 
08e0: 26 26 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  && sqlite3StrNIC
08f0: 6d 70 28 26 7a 54 65 78 74 5b 69 4f 66 66 73 65  mp(&zText[iOffse
0900: 74 5b 69 5d 5d 2c 7a 2c 6e 29 3d 3d 30 0a 20 20  t[i]],z,n)==0.  
0910: 20 20 20 26 26 20 28 21 6f 6d 69 74 46 75 6c 6c     && (!omitFull
0920: 20 7c 7c 20 69 56 61 6c 75 65 5b 69 5d 3c 3d 31   || iValue[i]<=1
0930: 29 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 72  ).    ){.      r
0940: 65 74 75 72 6e 20 69 56 61 6c 75 65 5b 69 5d 3b  eturn iValue[i];
0950: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
0960: 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a 2f 2a 0a  urn dflt;.}../*.
0970: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
0980: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
0990: 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
09a0: 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65 33 47  ..*/.u8 sqlite3G
09b0: 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20  etBoolean(const 
09c0: 63 68 61 72 20 2a 7a 2c 20 75 38 20 64 66 6c 74  char *z, u8 dflt
09d0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 67 65 74 53  ){.  return getS
09e0: 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c 31 2c 64  afetyLevel(z,1,d
09f0: 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 20 54  flt)!=0;.}../* T
0a00: 68 65 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  he sqlite3GetBoo
0a10: 6c 65 61 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  lean() function 
0a20: 69 73 20 75 73 65 64 20 62 79 20 6f 74 68 65 72  is used by other
0a30: 20 6d 6f 64 75 6c 65 73 20 62 75 74 20 74 68 65   modules but the
0a40: 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  .** remainder of
0a50: 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 73 70   this file is sp
0a60: 65 63 69 66 69 63 20 74 6f 20 50 52 41 47 4d 41  ecific to PRAGMA
0a70: 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 20 53 6f   processing.  So
0a80: 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20 72 65 73   omit.** the res
0a90: 74 20 6f 66 20 74 68 65 20 66 69 6c 65 20 69 66  t of the file if
0aa0: 20 50 52 41 47 4d 41 73 20 61 72 65 20 6f 6d 69   PRAGMAs are omi
0ab0: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
0ac0: 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ild..*/.#if !def
0ad0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
0ae0: 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a 2a 2a 20  _PRAGMA)../*.** 
0af0: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69  Interpret the gi
0b00: 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20  ven string as a 
0b10: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 76 61 6c  locking mode val
0b20: 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ue..*/.static in
0b30: 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65  t getLockingMode
0b40: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
0b50: 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20 20 20 20  .  if( z ){.    
0b60: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
0b70: 72 49 43 6d 70 28 7a 2c 20 22 65 78 63 6c 75 73  rICmp(z, "exclus
0b80: 69 76 65 22 29 20 29 20 72 65 74 75 72 6e 20 50  ive") ) return P
0b90: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
0ba0: 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20 20 20 20  _EXCLUSIVE;.    
0bb0: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
0bc0: 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72 6d 61 6c  rICmp(z, "normal
0bd0: 22 29 20 29 20 72 65 74 75 72 6e 20 50 41 47 45  ") ) return PAGE
0be0: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f  R_LOCKINGMODE_NO
0bf0: 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72 65 74 75  RMAL;.  }.  retu
0c00: 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  rn PAGER_LOCKING
0c10: 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d 0a 0a 23  MODE_QUERY;.}..#
0c20: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
0c30: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 2f 2a  IT_AUTOVACUUM./*
0c40: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
0c50: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
0c60: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
0c70: 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a 2a 0a   mode value..**.
0c80: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
0c90: 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f 6e 65 22   strings, "none"
0ca0: 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20 22 69 6e  , "full" and "in
0cb0: 63 72 65 6d 65 6e 74 61 6c 22 20 61 72 65 20 0a  cremental" are .
0cc0: 2a 2a 20 61 63 63 65 70 74 61 62 6c 65 2c 20 61  ** acceptable, a
0cd0: 73 20 61 72 65 20 74 68 65 69 72 20 6e 75 6d 65  s are their nume
0ce0: 72 69 63 20 65 71 75 69 76 61 6c 65 6e 74 73 3a  ric equivalents:
0cf0: 20 30 2c 20 31 20 61 6e 64 20 32 20 72 65 73 70   0, 1 and 2 resp
0d00: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 73 74 61  ectively..*/.sta
0d10: 74 69 63 20 69 6e 74 20 67 65 74 41 75 74 6f 56  tic int getAutoV
0d20: 61 63 75 75 6d 28 63 6f 6e 73 74 20 63 68 61 72  acuum(const char
0d30: 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20   *z){.  int i;. 
0d40: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
0d50: 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 6e 65 22  trICmp(z, "none"
0d60: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
0d70: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e 4f 4e 45  _AUTOVACUUM_NONE
0d80: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
0d90: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 66 75  e3StrICmp(z, "fu
0da0: 6c 6c 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ll") ) return BT
0db0: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 46  REE_AUTOVACUUM_F
0dc0: 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ULL;.  if( 0==sq
0dd0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
0de0: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 29 20 29  "incremental") )
0df0: 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41 55   return BTREE_AU
0e00: 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52 3b 0a 20  TOVACUUM_INCR;. 
0e10: 20 69 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69   i = sqlite3Atoi
0e20: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 75  (z);.  return (u
0e30: 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d 32 29 3f  8)((i>=0&&i<=2)?
0e40: 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  i:0);.}.#endif /
0e50: 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  * ifndef SQLITE_
0e60: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 20  OMIT_AUTOVACUUM 
0e70: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
0e80: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
0e90: 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  AGMAS./*.** Inte
0ea0: 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e 20  rpret the given 
0eb0: 73 74 72 69 6e 67 20 61 73 20 61 20 74 65 6d 70  string as a temp
0ec0: 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e 20 52 65   db location. Re
0ed0: 74 75 72 6e 20 31 20 66 6f 72 20 66 69 6c 65 0a  turn 1 for file.
0ee0: 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d 70 6f 72  ** backed tempor
0ef0: 61 72 79 20 64 61 74 61 62 61 73 65 73 2c 20 32  ary databases, 2
0f00: 20 66 6f 72 20 74 68 65 20 52 65 64 2d 42 6c 61   for the Red-Bla
0f10: 63 6b 20 74 72 65 65 20 69 6e 20 6d 65 6d 6f 72  ck tree in memor
0f20: 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 61 6e  y database.** an
0f30: 64 20 30 20 74 6f 20 75 73 65 20 74 68 65 20 63  d 0 to use the c
0f40: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66 61  ompile-time defa
0f50: 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ult..*/.static i
0f60: 6e 74 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28  nt getTempStore(
0f70: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a  const char *z){.
0f80: 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27 30 27 20    if( z[0]>='0' 
0f90: 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20 29 7b 0a  && z[0]<='2' ){.
0fa0: 20 20 20 20 72 65 74 75 72 6e 20 7a 5b 30 5d 20      return z[0] 
0fb0: 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69  - '0';.  }else i
0fc0: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
0fd0: 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d 3d 30 20  p(z, "file")==0 
0fe0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b  ){.    return 1;
0ff0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c  .  }else if( sql
1000: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22  ite3StrICmp(z, "
1010: 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29 7b 0a 20  memory")==0 ){. 
1020: 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d     return 2;.  }
1030: 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e  else{.    return
1040: 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66   0;.  }.}.#endif
1050: 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45 52   /* SQLITE_PAGER
1060: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
1070: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1080: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
1090: 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74 65 20  *.** Invalidate 
10a0: 74 65 6d 70 20 73 74 6f 72 61 67 65 2c 20 65 69  temp storage, ei
10b0: 74 68 65 72 20 77 68 65 6e 20 74 68 65 20 74 65  ther when the te
10c0: 6d 70 20 73 74 6f 72 61 67 65 20 69 73 20 63 68  mp storage is ch
10d0: 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d 20 64 65  anged.** from de
10e0: 66 61 75 6c 74 2c 20 6f 72 20 77 68 65 6e 20 27  fault, or when '
10f0: 66 69 6c 65 27 20 61 6e 64 20 74 68 65 20 74 65  file' and the te
1100: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
1110: 72 79 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ry has changed.*
1120: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 69 6e 76  /.static int inv
1130: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
1140: 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ge(Parse *pParse
1150: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
1160: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20   = pParse->db;. 
1170: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 31 5d 2e   if( db->aDb[1].
1180: 70 42 74 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  pBt!=0 ){.    if
1190: 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
11a0: 74 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65  t || sqlite3Btre
11b0: 65 49 73 49 6e 52 65 61 64 54 72 61 6e 73 28 64  eIsInReadTrans(d
11c0: 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 20 29  b->aDb[1].pBt) )
11d0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45  {.      sqlite3E
11e0: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
11f0: 22 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61  "temporary stora
1200: 67 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61  ge cannot be cha
1210: 6e 67 65 64 20 22 0a 20 20 20 20 20 20 20 20 22  nged ".        "
1220: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
1230: 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20  ansaction");.   
1240: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
1250: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
1260: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
1270: 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70  ose(db->aDb[1].p
1280: 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e 61 44 62  Bt);.    db->aDb
1290: 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a 20 20 20  [1].pBt = 0;.   
12a0: 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
12b0: 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
12c0: 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a 20 20 72  ion(db);.  }.  r
12d0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
12e0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
12f0: 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  ITE_PAGER_PRAGMA
1300: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
1310: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
1320: 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 66  PRAGMAS./*.** If
1330: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
1340: 73 65 20 69 73 20 6f 70 65 6e 2c 20 63 6c 6f 73  se is open, clos
1350: 65 20 69 74 20 61 6e 64 20 6d 61 72 6b 20 74 68  e it and mark th
1360: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
1370: 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69 6e 67 20  a.** as needing 
1380: 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54 68 69 73  reloading.  This
1390: 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 77 68   must be done wh
13a0: 65 6e 20 75 73 69 6e 67 20 74 68 65 20 53 51 4c  en using the SQL
13b0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 2a  ITE_TEMP_STORE.*
13c0: 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f 54 45 4d  * or DEFAULT_TEM
13d0: 50 5f 53 54 4f 52 45 20 70 72 61 67 6d 61 73 2e  P_STORE pragmas.
13e0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63  .*/.static int c
13f0: 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61 67 65  hangeTempStorage
1400: 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
1410: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 6f  const char *zSto
1420: 72 61 67 65 54 79 70 65 29 7b 0a 20 20 69 6e 74  rageType){.  int
1430: 20 74 73 20 3d 20 67 65 74 54 65 6d 70 53 74 6f   ts = getTempSto
1440: 72 65 28 7a 53 74 6f 72 61 67 65 54 79 70 65 29  re(zStorageType)
1450: 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  ;.  sqlite3 *db 
1460: 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20  = pParse->db;.  
1470: 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  if( db->temp_sto
1480: 72 65 3d 3d 74 73 20 29 20 72 65 74 75 72 6e 20  re==ts ) return 
1490: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28  SQLITE_OK;.  if(
14a0: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
14b0: 74 6f 72 61 67 65 28 20 70 50 61 72 73 65 20 29  torage( pParse )
14c0: 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
14d0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
14e0: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  TE_ERROR;.  }.  
14f0: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d  db->temp_store =
1500: 20 28 75 38 29 74 73 3b 0a 20 20 72 65 74 75 72   (u8)ts;.  retur
1510: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23  n SQLITE_OK;.}.#
1520: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
1530: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
1540: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  ../*.** Set the 
1550: 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 66 69 72  names of the fir
1560: 73 74 20 4e 20 63 6f 6c 75 6d 6e 73 20 74 6f 20  st N columns to 
1570: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 61 7a  the values in az
1580: 43 6f 6c 5b 5d 0a 2a 2f 0a 73 74 61 74 69 63 20  Col[].*/.static 
1590: 76 6f 69 64 20 73 65 74 41 6c 6c 43 6f 6c 75 6d  void setAllColum
15a0: 6e 4e 61 6d 65 73 28 0a 20 20 56 64 62 65 20 2a  nNames(.  Vdbe *
15b0: 76 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v,              
15c0: 20 2f 2a 20 54 68 65 20 71 75 65 72 79 20 75 6e   /* The query un
15d0: 64 65 72 20 63 6f 6e 73 74 72 75 63 74 69 6f 6e  der construction
15e0: 20 2a 2f 0a 20 20 69 6e 74 20 4e 2c 20 20 20 20   */.  int N,    
15f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1600: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
1610: 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  s */.  const cha
1620: 72 20 2a 2a 61 7a 43 6f 6c 20 20 20 20 20 2f 2a  r **azCol     /*
1630: 20 4e 61 6d 65 73 20 6f 66 20 63 6f 6c 75 6d 6e   Names of column
1640: 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b  s */.){.  int i;
1650: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
1660: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 4e 29 3b 0a  tNumCols(v, N);.
1670: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 4e 3b 20    for(i=0; i<N; 
1680: 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i++){.    sqlite
1690: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
16a0: 76 2c 20 69 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, i, COLNAME_NA
16b0: 4d 45 2c 20 61 7a 43 6f 6c 5b 69 5d 2c 20 53 51  ME, azCol[i], SQ
16c0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
16d0: 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  }.}.static void 
16e0: 73 65 74 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65  setOneColumnName
16f0: 28 56 64 62 65 20 2a 76 2c 20 63 6f 6e 73 74 20  (Vdbe *v, const 
1700: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 73 65 74 41  char *z){.  setA
1710: 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c  llColumnNames(v,
1720: 20 31 2c 20 26 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a   1, &z);.}../*.*
1730: 2a 20 47 65 6e 65 72 61 74 65 20 63 6f 64 65 20  * Generate code 
1740: 74 6f 20 72 65 74 75 72 6e 20 61 20 73 69 6e 67  to return a sing
1750: 6c 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  le integer value
1760: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
1770: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
1780: 28 56 64 62 65 20 2a 76 2c 20 63 6f 6e 73 74 20  (Vdbe *v, const 
1790: 63 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 69 36  char *zLabel, i6
17a0: 34 20 76 61 6c 75 65 29 7b 0a 20 20 73 71 6c 69  4 value){.  sqli
17b0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 44 75 70  te3VdbeAddOp4Dup
17c0: 38 28 76 2c 20 4f 50 5f 49 6e 74 36 34 2c 20 30  8(v, OP_Int64, 0
17d0: 2c 20 31 2c 20 30 2c 20 28 63 6f 6e 73 74 20 75  , 1, 0, (const u
17e0: 38 2a 29 26 76 61 6c 75 65 2c 20 50 34 5f 49 4e  8*)&value, P4_IN
17f0: 54 36 34 29 3b 0a 20 20 73 65 74 4f 6e 65 43 6f  T64);.  setOneCo
1800: 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 7a 4c 61 62  lumnName(v, zLab
1810: 65 6c 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  el);.  sqlite3Vd
1820: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
1830: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b  esultRow, 1, 1);
1840: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61  .}../*.** Genera
1850: 74 65 20 63 6f 64 65 20 74 6f 20 72 65 74 75 72  te code to retur
1860: 6e 20 61 20 73 69 6e 67 6c 65 20 74 65 78 74 20  n a single text 
1870: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
1880: 20 76 6f 69 64 20 72 65 74 75 72 6e 53 69 6e 67   void returnSing
1890: 6c 65 54 65 78 74 28 0a 20 20 56 64 62 65 20 2a  leText(.  Vdbe *
18a0: 76 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v,              
18b0: 20 20 2f 2a 20 50 72 65 70 61 72 65 64 20 73 74    /* Prepared st
18c0: 61 74 65 6d 65 6e 74 20 75 6e 64 65 72 20 63 6f  atement under co
18d0: 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20  nstruction */.  
18e0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 61 62  const char *zLab
18f0: 65 6c 2c 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  el,     /* Name 
1900: 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  of the result co
1910: 6c 75 6d 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  lumn */.  const 
1920: 63 68 61 72 20 2a 7a 56 61 6c 75 65 20 20 20 20  char *zValue    
1930: 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 62 65    /* Value to be
1940: 20 72 65 74 75 72 6e 65 64 20 2a 2f 0a 29 7b 0a   returned */.){.
1950: 20 20 69 66 28 20 7a 56 61 6c 75 65 20 29 7b 0a    if( zValue ){.
1960: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c      sqlite3VdbeL
1970: 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 31 2c 20  oadString(v, 1, 
1980: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 7a 56 61  (const char*)zVa
1990: 6c 75 65 29 3b 0a 20 20 20 20 73 65 74 4f 6e 65  lue);.    setOne
19a0: 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 7a 4c  ColumnName(v, zL
19b0: 61 62 65 6c 29 3b 0a 20 20 20 20 73 71 6c 69 74  abel);.    sqlit
19c0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
19d0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
19e0: 20 31 29 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a   1);.  }.}.../*.
19f0: 2a 2a 20 53 65 74 20 74 68 65 20 73 61 66 65 74  ** Set the safet
1a00: 79 5f 6c 65 76 65 6c 20 61 6e 64 20 70 61 67 65  y_level and page
1a10: 72 20 66 6c 61 67 73 20 66 6f 72 20 70 61 67 65  r flags for page
1a20: 72 20 69 44 62 2e 20 20 4f 72 20 69 66 20 69 44  r iDb.  Or if iD
1a30: 62 3c 30 0a 2a 2a 20 73 65 74 20 74 68 65 73 65  b<0.** set these
1a40: 20 76 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20   values for all 
1a50: 70 61 67 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64  pagers..*/.#ifnd
1a60: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
1a70: 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 73 74 61  AGER_PRAGMAS.sta
1a80: 74 69 63 20 76 6f 69 64 20 73 65 74 41 6c 6c 50  tic void setAllP
1a90: 61 67 65 72 46 6c 61 67 73 28 73 71 6c 69 74 65  agerFlags(sqlite
1aa0: 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62  3 *db){.  if( db
1ab0: 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
1ac0: 20 20 20 20 44 62 20 2a 70 44 62 20 3d 20 64 62      Db *pDb = db
1ad0: 2d 3e 61 44 62 3b 0a 20 20 20 20 69 6e 74 20 6e  ->aDb;.    int n
1ae0: 20 3d 20 64 62 2d 3e 6e 44 62 3b 0a 20 20 20 20   = db->nDb;.    
1af0: 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f 46  assert( SQLITE_F
1b00: 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f  ullFSync==PAGER_
1b10: 46 55 4c 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20  FULLFSYNC );.   
1b20: 20 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f   assert( SQLITE_
1b30: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 3d 3d 50  CkptFullFSync==P
1b40: 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53  AGER_CKPT_FULLFS
1b50: 59 4e 43 20 29 3b 0a 20 20 20 20 61 73 73 65 72  YNC );.    asser
1b60: 74 28 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  t( SQLITE_CacheS
1b70: 70 69 6c 6c 3d 3d 50 41 47 45 52 5f 43 41 43 48  pill==PAGER_CACH
1b80: 45 53 50 49 4c 4c 20 29 3b 0a 20 20 20 20 61 73  ESPILL );.    as
1b90: 73 65 72 74 28 20 28 50 41 47 45 52 5f 46 55 4c  sert( (PAGER_FUL
1ba0: 4c 46 53 59 4e 43 20 7c 20 50 41 47 45 52 5f 43  LFSYNC | PAGER_C
1bb0: 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20  KPT_FULLFSYNC | 
1bc0: 50 41 47 45 52 5f 43 41 43 48 45 53 50 49 4c 4c  PAGER_CACHESPILL
1bd0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3d  ).             =
1be0: 3d 20 20 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d  =  PAGER_FLAGS_M
1bf0: 41 53 4b 20 29 3b 0a 20 20 20 20 77 68 69 6c 65  ASK );.    while
1c00: 28 20 28 6e 2d 2d 29 20 3e 20 30 20 29 7b 0a 20  ( (n--) > 0 ){. 
1c10: 20 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 42       if( pDb->pB
1c20: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  t ){.        sql
1c30: 69 74 65 33 42 74 72 65 65 53 65 74 50 61 67 65  ite3BtreeSetPage
1c40: 72 46 6c 61 67 73 28 70 44 62 2d 3e 70 42 74 2c  rFlags(pDb->pBt,
1c50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c60: 20 20 28 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c    (pDb->safety_l
1c70: 65 76 65 6c 20 26 20 50 41 47 45 52 5f 53 59 4e  evel & PAGER_SYN
1c80: 43 48 52 4f 4e 4f 55 53 5f 4d 41 53 4b 29 0a 20  CHRONOUS_MASK). 
1c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca0: 20 20 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26    | (db->flags &
1cb0: 20 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53   PAGER_FLAGS_MAS
1cc0: 4b 29 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  K) );.      }.  
1cd0: 20 20 20 20 70 44 62 2b 2b 3b 0a 20 20 20 20 7d      pDb++;.    }
1ce0: 0a 20 20 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20 64  .  }.}.#else.# d
1cf0: 65 66 69 6e 65 20 73 65 74 41 6c 6c 50 61 67 65  efine setAllPage
1d00: 72 46 6c 61 67 73 28 58 29 20 20 2f 2a 20 6e 6f  rFlags(X)  /* no
1d10: 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 0a  -op */.#endif...
1d20: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 68  /*.** Return a h
1d30: 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e 61  uman-readable na
1d40: 6d 65 20 66 6f 72 20 61 20 63 6f 6e 73 74 72 61  me for a constra
1d50: 69 6e 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  int resolution a
1d60: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ction..*/.#ifnde
1d70: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
1d80: 52 45 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69 63  REIGN_KEY.static
1d90: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 63 74   const char *act
1da0: 69 6f 6e 4e 61 6d 65 28 75 38 20 61 63 74 69 6f  ionName(u8 actio
1db0: 6e 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  n){.  const char
1dc0: 20 2a 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74 63   *zName;.  switc
1dd0: 68 28 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20  h( action ){.   
1de0: 20 63 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c 6c   case OE_SetNull
1df0: 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20  :  zName = "SET 
1e00: 4e 55 4c 4c 22 3b 20 20 20 20 20 20 20 20 62 72  NULL";        br
1e10: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45  eak;.    case OE
1e20: 5f 53 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d 65  _SetDflt:  zName
1e30: 20 3d 20 22 53 45 54 20 44 45 46 41 55 4c 54 22   = "SET DEFAULT"
1e40: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
1e50: 20 63 61 73 65 20 4f 45 5f 43 61 73 63 61 64 65   case OE_Cascade
1e60: 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53 43  :  zName = "CASC
1e70: 41 44 45 22 3b 20 20 20 20 20 20 20 20 20 62 72  ADE";         br
1e80: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45  eak;.    case OE
1e90: 5f 52 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d 65  _Restrict: zName
1ea0: 20 3d 20 22 52 45 53 54 52 49 43 54 22 3b 20 20   = "RESTRICT";  
1eb0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1ec0: 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20   default:       
1ed0: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20 41     zName = "NO A
1ee0: 43 54 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20 20  CTION";  .      
1ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f00: 61 73 73 65 72 74 28 20 61 63 74 69 6f 6e 3d 3d  assert( action==
1f10: 4f 45 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61 6b  OE_None ); break
1f20: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a  ;.  }.  return z
1f30: 4e 61 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  Name;.}.#endif..
1f40: 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72  ./*.** Parameter
1f50: 20 65 4d 6f 64 65 20 6d 75 73 74 20 62 65 20 6f   eMode must be o
1f60: 6e 65 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f  ne of the PAGER_
1f70: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20  JOURNALMODE_XXX 
1f80: 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 66  constants.** def
1f90: 69 6e 65 64 20 69 6e 20 70 61 67 65 72 2e 68 2e  ined in pager.h.
1fa0: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72   This function r
1fb0: 65 74 75 72 6e 73 20 74 68 65 20 61 73 73 6f 63  eturns the assoc
1fc0: 69 61 74 65 64 20 6c 6f 77 65 72 63 61 73 65 0a  iated lowercase.
1fd0: 2a 2a 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20  ** journal-mode 
1fe0: 6e 61 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63  name..*/.const c
1ff0: 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72  har *sqlite3Jour
2000: 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 20  nalModename(int 
2010: 65 4d 6f 64 65 29 7b 0a 20 20 73 74 61 74 69 63  eMode){.  static
2020: 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a   char * const az
2030: 4d 6f 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20  ModeName[] = {. 
2040: 20 20 20 22 64 65 6c 65 74 65 22 2c 20 22 70 65     "delete", "pe
2050: 72 73 69 73 74 22 2c 20 22 6f 66 66 22 2c 20 22  rsist", "off", "
2060: 74 72 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d 6f  truncate", "memo
2070: 72 79 22 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ry".#ifndef SQLI
2080: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20 20  TE_OMIT_WAL.    
2090: 20 2c 20 22 77 61 6c 22 0a 23 65 6e 64 69 66 0a   , "wal".#endif.
20a0: 20 20 7d 3b 0a 20 20 61 73 73 65 72 74 28 20 50    };.  assert( P
20b0: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
20c0: 5f 44 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20 20  _DELETE==0 );.  
20d0: 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f  assert( PAGER_JO
20e0: 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53  URNALMODE_PERSIS
20f0: 54 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74  T==1 );.  assert
2100: 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ( PAGER_JOURNALM
2110: 4f 44 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20 20  ODE_OFF==2 );.  
2120: 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f  assert( PAGER_JO
2130: 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41  URNALMODE_TRUNCA
2140: 54 45 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65 72  TE==3 );.  asser
2150: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
2160: 4d 4f 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20 29  MODE_MEMORY==4 )
2170: 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45  ;.  assert( PAGE
2180: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2190: 4c 3d 3d 35 20 29 3b 0a 20 20 61 73 73 65 72 74  L==5 );.  assert
21a0: 28 20 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65 4d  ( eMode>=0 && eM
21b0: 6f 64 65 3c 3d 41 72 72 61 79 53 69 7a 65 28 61  ode<=ArraySize(a
21c0: 7a 4d 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a 20  zModeName) );.. 
21d0: 20 69 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72 61   if( eMode==Arra
21e0: 79 53 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65  ySize(azModeName
21f0: 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  ) ) return 0;.  
2200: 72 65 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61 6d  return azModeNam
2210: 65 5b 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a  e[eMode];.}../*.
2220: 2a 2a 20 50 72 6f 63 65 73 73 20 61 20 70 72 61  ** Process a pra
2230: 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  gma statement.  
2240: 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20 61  .**.** Pragmas a
2250: 72 65 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 3a  re of this form:
2260: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41 47  .**.**      PRAG
2270: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 69 64 20 5b  MA [schema.]id [
2280: 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54  = value].**.** T
2290: 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d 69  he identifier mi
22a0: 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73 74  ght also be a st
22b0: 72 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75 65  ring.  The value
22c0: 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61 6e   is a string, an
22d0: 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72 2c  d.** identifier,
22e0: 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20 49   or a number.  I
22f0: 66 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20 74  f minusFlag is t
2300: 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76 61  rue, then the va
2310: 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d 62  lue is.** a numb
2320: 65 72 20 74 68 61 74 20 77 61 73 20 70 72 65 63  er that was prec
2330: 65 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73 20  eded by a minus 
2340: 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sign..**.** If t
2350: 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20  he left side is 
2360: 22 64 61 74 61 62 61 73 65 2e 69 64 22 20 74 68  "database.id" th
2370: 65 6e 20 70 49 64 31 20 69 73 20 74 68 65 20 64  en pId1 is the d
2380: 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a 20  atabase name.** 
2390: 61 6e 64 20 70 49 64 32 20 69 73 20 74 68 65 20  and pId2 is the 
23a0: 69 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66 74  id.  If the left
23b0: 20 73 69 64 65 20 69 73 20 6a 75 73 74 20 22 69   side is just "i
23c0: 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73 20  d" then pId1 is 
23d0: 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70 49  the.** id and pI
23e0: 64 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79 20  d2 is any empty 
23f0: 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20  string..*/.void 
2400: 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a 20  sqlite3Pragma(. 
2410: 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20   Parse *pParse, 
2420: 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c 20  .  Token *pId1, 
2430: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
2440: 70 61 72 74 20 6f 66 20 5b 73 63 68 65 6d 61 2e  part of [schema.
2450: 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20 20 54  ]id field */.  T
2460: 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20 20 20  oken *pId2,     
2470: 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70 61 72     /* Second par
2480: 74 20 6f 66 20 5b 73 63 68 65 6d 61 2e 5d 69 64  t of [schema.]id
2490: 20 66 69 65 6c 64 2c 20 6f 72 20 4e 55 4c 4c 20   field, or NULL 
24a0: 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 56 61 6c  */.  Token *pVal
24b0: 75 65 2c 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65  ue,      /* Toke
24c0: 6e 20 66 6f 72 20 3c 76 61 6c 75 65 3e 2c 20 6f  n for <value>, o
24d0: 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20  r NULL */.  int 
24e0: 6d 69 6e 75 73 46 6c 61 67 20 20 20 20 20 20 20  minusFlag       
24f0: 2f 2a 20 54 72 75 65 20 69 66 20 61 20 27 2d 27  /* True if a '-'
2500: 20 73 69 67 6e 20 70 72 65 63 65 64 65 64 20 3c   sign preceded <
2510: 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b 0a 20 20 63  value> */.){.  c
2520: 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20 30 3b 20  har *zLeft = 0; 
2530: 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65 72        /* Nul-ter
2540: 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
2550: 72 69 6e 67 20 3c 69 64 3e 20 2a 2f 0a 20 20 63  ring <id> */.  c
2560: 68 61 72 20 2a 7a 52 69 67 68 74 20 3d 20 30 3b  har *zRight = 0;
2570: 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65 72        /* Nul-ter
2580: 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
2590: 72 69 6e 67 20 3c 76 61 6c 75 65 3e 2c 20 6f 72  ring <value>, or
25a0: 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f 6e 73 74   NULL */.  const
25b0: 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b 20   char *zDb = 0; 
25c0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
25d0: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65  e name */.  Toke
25e0: 6e 20 2a 70 49 64 3b 20 20 20 20 20 20 20 20 20  n *pId;         
25f0: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
2600: 20 3c 69 64 3e 20 74 6f 6b 65 6e 20 2a 2f 0a 20   <id> token */. 
2610: 20 63 68 61 72 20 2a 61 46 63 6e 74 6c 5b 34 5d   char *aFcntl[4]
2620: 3b 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d  ;       /* Argum
2630: 65 6e 74 20 74 6f 20 53 51 4c 49 54 45 5f 46 43  ent to SQLITE_FC
2640: 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a 20 20  NTL_PRAGMA */.  
2650: 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
2660: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
2670: 73 65 20 69 6e 64 65 78 20 66 6f 72 20 3c 64 61  se index for <da
2680: 74 61 62 61 73 65 3e 20 2a 2f 0a 20 20 69 6e 74  tabase> */.  int
2690: 20 6c 77 72 2c 20 75 70 72 2c 20 6d 69 64 20 3d   lwr, upr, mid =
26a0: 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 42 69 6e   0;       /* Bin
26b0: 61 72 79 20 73 65 61 72 63 68 20 62 6f 75 6e 64  ary search bound
26c0: 73 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  s */.  int rc;  
26d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e0: 20 20 20 20 2f 2a 20 72 65 74 75 72 6e 20 76 61      /* return va
26f0: 6c 75 65 20 66 6f 72 6d 20 53 51 4c 49 54 45 5f  lue form SQLITE_
2700: 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a  FCNTL_PRAGMA */.
2710: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
2720: 70 50 61 72 73 65 2d 3e 64 62 3b 20 20 20 20 2f  pParse->db;    /
2730: 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  * The database c
2740: 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 44  onnection */.  D
2750: 62 20 2a 70 44 62 3b 20 20 20 20 20 20 20 20 20  b *pDb;         
2760: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2770: 68 65 20 73 70 65 63 69 66 69 63 20 64 61 74 61  he specific data
2780: 62 61 73 65 20 62 65 69 6e 67 20 70 72 61 67 6d  base being pragm
2790: 61 65 64 20 2a 2f 0a 20 20 56 64 62 65 20 2a 76  aed */.  Vdbe *v
27a0: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62   = sqlite3GetVdb
27b0: 65 28 70 50 61 72 73 65 29 3b 20 20 2f 2a 20 50  e(pParse);  /* P
27c0: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
27d0: 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 73 74 72  t */.  const str
27e0: 75 63 74 20 73 50 72 61 67 6d 61 4e 61 6d 65 73  uct sPragmaNames
27f0: 20 2a 70 50 72 61 67 6d 61 3b 0a 0a 20 20 69 66   *pPragma;..  if
2800: 28 20 76 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b  ( v==0 ) return;
2810: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 75  .  sqlite3VdbeRu
2820: 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29 3b 0a 20 20  nOnlyOnce(v);.  
2830: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32  pParse->nMem = 2
2840: 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65 72 70 72 65  ;..  /* Interpre
2850: 74 20 74 68 65 20 5b 73 63 68 65 6d 61 2e 5d 20  t the [schema.] 
2860: 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 61 67  part of the prag
2870: 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 69 44  ma statement. iD
2880: 62 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 69 6e  b is the.  ** in
2890: 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
28a0: 61 73 65 20 74 68 69 73 20 70 72 61 67 6d 61 20  ase this pragma 
28b0: 69 73 20 62 65 69 6e 67 20 61 70 70 6c 69 65 64  is being applied
28c0: 20 74 6f 20 69 6e 20 64 62 2e 61 44 62 5b 5d 2e   to in db.aDb[].
28d0: 20 2a 2f 0a 20 20 69 44 62 20 3d 20 73 71 6c 69   */.  iDb = sqli
28e0: 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 70  te3TwoPartName(p
28f0: 50 61 72 73 65 2c 20 70 49 64 31 2c 20 70 49 64  Parse, pId1, pId
2900: 32 2c 20 26 70 49 64 29 3b 0a 20 20 69 66 28 20  2, &pId);.  if( 
2910: 69 44 62 3c 30 20 29 20 72 65 74 75 72 6e 3b 0a  iDb<0 ) return;.
2920: 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
2930: 5b 69 44 62 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20  [iDb];..  /* If 
2940: 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  the temp databas
2950: 65 20 68 61 73 20 62 65 65 6e 20 65 78 70 6c 69  e has been expli
2960: 63 69 74 6c 79 20 6e 61 6d 65 64 20 61 73 20 70  citly named as p
2970: 61 72 74 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a  art of the .  **
2980: 20 70 72 61 67 6d 61 2c 20 6d 61 6b 65 20 73 75   pragma, make su
2990: 72 65 20 69 74 20 69 73 20 6f 70 65 6e 2e 20 0a  re it is open. .
29a0: 20 20 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d 3d    */.  if( iDb==
29b0: 31 20 26 26 20 73 71 6c 69 74 65 33 4f 70 65 6e  1 && sqlite3Open
29c0: 54 65 6d 70 44 61 74 61 62 61 73 65 28 70 50 61  TempDatabase(pPa
29d0: 72 73 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75  rse) ){.    retu
29e0: 72 6e 3b 0a 20 20 7d 0a 0a 20 20 7a 4c 65 66 74  rn;.  }..  zLeft
29f0: 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72   = sqlite3NameFr
2a00: 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 49 64 29  omToken(db, pId)
2a10: 3b 0a 20 20 69 66 28 20 21 7a 4c 65 66 74 20 29  ;.  if( !zLeft )
2a20: 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 6d   return;.  if( m
2a30: 69 6e 75 73 46 6c 61 67 20 29 7b 0a 20 20 20 20  inusFlag ){.    
2a40: 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33  zRight = sqlite3
2a50: 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2d 25 54  MPrintf(db, "-%T
2a60: 22 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 65  ", pValue);.  }e
2a70: 6c 73 65 7b 0a 20 20 20 20 7a 52 69 67 68 74 20  lse{.    zRight 
2a80: 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f  = sqlite3NameFro
2a90: 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 56 61 6c 75  mToken(db, pValu
2aa0: 65 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  e);.  }..  asser
2ab0: 74 28 20 70 49 64 32 20 29 3b 0a 20 20 7a 44 62  t( pId2 );.  zDb
2ac0: 20 3d 20 70 49 64 32 2d 3e 6e 3e 30 20 3f 20 70   = pId2->n>0 ? p
2ad0: 44 62 2d 3e 7a 4e 61 6d 65 20 3a 20 30 3b 0a 20  Db->zName : 0;. 
2ae0: 20 69 66 28 20 73 71 6c 69 74 65 33 41 75 74 68   if( sqlite3Auth
2af0: 43 68 65 63 6b 28 70 50 61 72 73 65 2c 20 53 51  Check(pParse, SQ
2b00: 4c 49 54 45 5f 50 52 41 47 4d 41 2c 20 7a 4c 65  LITE_PRAGMA, zLe
2b10: 66 74 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  ft, zRight, zDb)
2b20: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61   ){.    goto pra
2b30: 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20  gma_out;.  }..  
2b40: 2f 2a 20 53 65 6e 64 20 61 6e 20 53 51 4c 49 54  /* Send an SQLIT
2b50: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 66  E_FCNTL_PRAGMA f
2b60: 69 6c 65 2d 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  ile-control to t
2b70: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46  he underlying VF
2b80: 53 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  S.  ** connectio
2b90: 6e 2e 20 20 49 66 20 69 74 20 72 65 74 75 72 6e  n.  If it return
2ba0: 73 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 74 68 65  s SQLITE_OK, the
2bb0: 6e 20 61 73 73 75 6d 65 20 74 68 61 74 20 74 68  n assume that th
2bc0: 65 20 56 46 53 0a 20 20 2a 2a 20 68 61 6e 64 6c  e VFS.  ** handl
2bd0: 65 64 20 74 68 65 20 70 72 61 67 6d 61 20 61 6e  ed the pragma an
2be0: 64 20 67 65 6e 65 72 61 74 65 20 61 20 6e 6f 2d  d generate a no-
2bf0: 6f 70 20 70 72 65 70 61 72 65 64 20 73 74 61 74  op prepared stat
2c00: 65 6d 65 6e 74 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ement..  **.  **
2c10: 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
2c20: 4f 46 3a 20 52 2d 31 32 32 33 38 2d 35 35 31 32  OF: R-12238-5512
2c30: 30 20 57 68 65 6e 65 76 65 72 20 61 20 50 52 41  0 Whenever a PRA
2c40: 47 4d 41 20 73 74 61 74 65 6d 65 6e 74 20 69 73  GMA statement is
2c50: 20 70 61 72 73 65 64 2c 0a 20 20 2a 2a 20 61 6e   parsed,.  ** an
2c60: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
2c70: 41 47 4d 41 20 66 69 6c 65 20 63 6f 6e 74 72 6f  AGMA file contro
2c80: 6c 20 69 73 20 73 65 6e 74 20 74 6f 20 74 68 65  l is sent to the
2c90: 20 6f 70 65 6e 20 73 71 6c 69 74 65 33 5f 66 69   open sqlite3_fi
2ca0: 6c 65 0a 20 20 2a 2a 20 6f 62 6a 65 63 74 20 63  le.  ** object c
2cb0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
2cc0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2cd0: 65 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 70  e to which the p
2ce0: 72 61 67 6d 61 0a 20 20 2a 2a 20 73 74 61 74 65  ragma.  ** state
2cf0: 6d 65 6e 74 20 72 65 66 65 72 73 2e 0a 20 20 2a  ment refers..  *
2d00: 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54  *.  ** IMPLEMENT
2d10: 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 39 38 37  ATION-OF: R-2987
2d20: 35 2d 33 31 36 37 38 20 54 68 65 20 61 72 67 75  5-31678 The argu
2d30: 6d 65 6e 74 20 74 6f 20 74 68 65 20 53 51 4c 49  ment to the SQLI
2d40: 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 0a  TE_FCNTL_PRAGMA.
2d50: 20 20 2a 2a 20 66 69 6c 65 20 63 6f 6e 74 72 6f    ** file contro
2d60: 6c 20 69 73 20 61 6e 20 61 72 72 61 79 20 6f 66  l is an array of
2d70: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 73 74 72   pointers to str
2d80: 69 6e 67 73 20 28 63 68 61 72 2a 2a 29 20 69 6e  ings (char**) in
2d90: 20 77 68 69 63 68 20 74 68 65 0a 20 20 2a 2a 20   which the.  ** 
2da0: 73 65 63 6f 6e 64 20 65 6c 65 6d 65 6e 74 20 6f  second element o
2db0: 66 20 74 68 65 20 61 72 72 61 79 20 69 73 20 74  f the array is t
2dc0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70  he name of the p
2dd0: 72 61 67 6d 61 20 61 6e 64 20 74 68 65 20 74 68  ragma and the th
2de0: 69 72 64 0a 20 20 2a 2a 20 65 6c 65 6d 65 6e 74  ird.  ** element
2df0: 20 69 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   is the argument
2e00: 20 74 6f 20 74 68 65 20 70 72 61 67 6d 61 20 6f   to the pragma o
2e10: 72 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 70 72  r NULL if the pr
2e20: 61 67 6d 61 20 68 61 73 20 6e 6f 0a 20 20 2a 2a  agma has no.  **
2e30: 20 61 72 67 75 6d 65 6e 74 2e 0a 20 20 2a 2f 0a   argument..  */.
2e40: 20 20 61 46 63 6e 74 6c 5b 30 5d 20 3d 20 30 3b    aFcntl[0] = 0;
2e50: 0a 20 20 61 46 63 6e 74 6c 5b 31 5d 20 3d 20 7a  .  aFcntl[1] = z
2e60: 4c 65 66 74 3b 0a 20 20 61 46 63 6e 74 6c 5b 32  Left;.  aFcntl[2
2e70: 5d 20 3d 20 7a 52 69 67 68 74 3b 0a 20 20 61 46  ] = zRight;.  aF
2e80: 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b 0a 20 20 64  cntl[3] = 0;.  d
2e90: 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e  b->busyHandler.n
2ea0: 42 75 73 79 20 3d 20 30 3b 0a 20 20 72 63 20 3d  Busy = 0;.  rc =
2eb0: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f   sqlite3_file_co
2ec0: 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62 2c 20 53  ntrol(db, zDb, S
2ed0: 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47  QLITE_FCNTL_PRAG
2ee0: 4d 41 2c 20 28 76 6f 69 64 2a 29 61 46 63 6e 74  MA, (void*)aFcnt
2ef0: 6c 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  l);.  if( rc==SQ
2f00: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
2f10: 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78 74 28  eturnSingleText(
2f20: 76 2c 20 22 72 65 73 75 6c 74 22 2c 20 61 46 63  v, "result", aFc
2f30: 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 73 71 6c  ntl[0]);.    sql
2f40: 69 74 65 33 5f 66 72 65 65 28 61 46 63 6e 74 6c  ite3_free(aFcntl
2f50: 5b 30 5d 29 3b 0a 20 20 20 20 67 6f 74 6f 20 70  [0]);.    goto p
2f60: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 20  ragma_out;.  }. 
2f70: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
2f80: 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20 20 20 20  NOTFOUND ){.    
2f90: 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20 29 7b  if( aFcntl[0] ){
2fa0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72  .      sqlite3Er
2fb0: 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22  rorMsg(pParse, "
2fc0: 25 73 22 2c 20 61 46 63 6e 74 6c 5b 30 5d 29 3b  %s", aFcntl[0]);
2fd0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
2fe0: 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a  ree(aFcntl[0]);.
2ff0: 20 20 20 20 7d 0a 20 20 20 20 70 50 61 72 73 65      }.    pParse
3000: 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 70 50  ->nErr++;.    pP
3010: 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20  arse->rc = rc;. 
3020: 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f     goto pragma_o
3030: 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f  ut;.  }..  /* Lo
3040: 63 61 74 65 20 74 68 65 20 70 72 61 67 6d 61 20  cate the pragma 
3050: 69 6e 20 74 68 65 20 6c 6f 6f 6b 75 70 20 74 61  in the lookup ta
3060: 62 6c 65 20 2a 2f 0a 20 20 6c 77 72 20 3d 20 30  ble */.  lwr = 0
3070: 3b 0a 20 20 75 70 72 20 3d 20 41 72 72 61 79 53  ;.  upr = ArrayS
3080: 69 7a 65 28 61 50 72 61 67 6d 61 4e 61 6d 65 73  ize(aPragmaNames
3090: 29 2d 31 3b 0a 20 20 77 68 69 6c 65 28 20 6c 77  )-1;.  while( lw
30a0: 72 3c 3d 75 70 72 20 29 7b 0a 20 20 20 20 6d 69  r<=upr ){.    mi
30b0: 64 20 3d 20 28 6c 77 72 2b 75 70 72 29 2f 32 3b  d = (lwr+upr)/2;
30c0: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
30d0: 33 5f 73 74 72 69 63 6d 70 28 7a 4c 65 66 74 2c  3_stricmp(zLeft,
30e0: 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69   aPragmaNames[mi
30f0: 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 69  d].zName);.    i
3100: 66 28 20 72 63 3d 3d 30 20 29 20 62 72 65 61 6b  f( rc==0 ) break
3110: 3b 0a 20 20 20 20 69 66 28 20 72 63 3c 30 20 29  ;.    if( rc<0 )
3120: 7b 0a 20 20 20 20 20 20 75 70 72 20 3d 20 6d 69  {.      upr = mi
3130: 64 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  d - 1;.    }else
3140: 7b 0a 20 20 20 20 20 20 6c 77 72 20 3d 20 6d 69  {.      lwr = mi
3150: 64 20 2b 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  d + 1;.    }.  }
3160: 0a 20 20 69 66 28 20 6c 77 72 3e 75 70 72 20 29  .  if( lwr>upr )
3170: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
3180: 3b 0a 20 20 70 50 72 61 67 6d 61 20 3d 20 26 61  ;.  pPragma = &a
3190: 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d  PragmaNames[mid]
31a0: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
31b0: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  e the database s
31c0: 63 68 65 6d 61 20 69 73 20 6c 6f 61 64 65 64 20  chema is loaded 
31d0: 69 66 20 74 68 65 20 70 72 61 67 6d 61 20 72 65  if the pragma re
31e0: 71 75 69 72 65 73 20 74 68 61 74 20 2a 2f 0a 20  quires that */. 
31f0: 20 69 66 28 20 28 70 50 72 61 67 6d 61 2d 3e 6d   if( (pPragma->m
3200: 50 72 61 67 46 6c 61 67 20 26 20 50 72 61 67 46  PragFlag & PragF
3210: 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 29 21  lag_NeedSchema)!
3220: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71  =0 ){.    if( sq
3230: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
3240: 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70  pParse) ) goto p
3250: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a  ragma_out;.  }..
3260: 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65    /* Jump to the
3270: 20 61 70 70 72 6f 70 72 69 61 74 65 20 70 72 61   appropriate pra
3280: 67 6d 61 20 68 61 6e 64 6c 65 72 20 2a 2f 0a 20  gma handler */. 
3290: 20 73 77 69 74 63 68 28 20 70 50 72 61 67 6d 61   switch( pPragma
32a0: 2d 3e 65 50 72 61 67 54 79 70 20 29 7b 0a 20 20  ->ePragTyp ){.  
32b0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
32c0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
32d0: 50 52 41 47 4d 41 53 29 20 26 26 20 21 64 65 66  PRAGMAS) && !def
32e0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
32f0: 5f 44 45 50 52 45 43 41 54 45 44 29 0a 20 20 2f  _DEPRECATED).  /
3300: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
3310: 73 63 68 65 6d 61 2e 5d 64 65 66 61 75 6c 74 5f  schema.]default_
3320: 63 61 63 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20  cache_size.  ** 
3330: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
3340: 5d 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73  ]default_cache_s
3350: 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ize=N.  **.  ** 
3360: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
3370: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
3380: 6e 74 20 70 65 72 73 69 73 74 65 6e 74 20 73 65  nt persistent se
3390: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
33a0: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
33b0: 7a 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 72  ze.  The value r
33c0: 65 74 75 72 6e 65 64 20 69 73 20 74 68 65 20 6d  eturned is the m
33d0: 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
33e0: 0a 20 20 2a 2a 20 70 61 67 65 73 20 69 6e 20 74  .  ** pages in t
33f0: 68 65 20 70 61 67 65 20 63 61 63 68 65 2e 20 20  he page cache.  
3400: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
3410: 73 65 74 73 20 62 6f 74 68 20 74 68 65 20 63 75  sets both the cu
3420: 72 72 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65 20  rrent.  ** page 
3430: 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65  cache size value
3440: 20 61 6e 64 20 74 68 65 20 70 65 72 73 69 73 74   and the persist
3450: 65 6e 74 20 70 61 67 65 20 63 61 63 68 65 20 73  ent page cache s
3460: 69 7a 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20 73  ize value.  ** s
3470: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74  tored in the dat
3480: 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a 2a  abase file..  **
3490: 0a 20 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73  .  ** Older vers
34a0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 77  ions of SQLite w
34b0: 6f 75 6c 64 20 73 65 74 20 74 68 65 20 64 65 66  ould set the def
34c0: 61 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65 20  ault cache size 
34d0: 74 6f 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74 69  to a.  ** negati
34e0: 76 65 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e 64  ve number to ind
34f0: 69 63 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f 75  icate synchronou
3500: 73 3d 4f 46 46 2e 20 20 54 68 65 73 65 20 64 61  s=OFF.  These da
3510: 79 73 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73 0a  ys, synchronous.
3520: 20 20 2a 2a 20 69 73 20 61 6c 77 61 79 73 20 6f    ** is always o
3530: 6e 20 62 79 20 64 65 66 61 75 6c 74 20 72 65 67  n by default reg
3540: 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 73  ardless of the s
3550: 69 67 6e 20 6f 66 20 74 68 65 20 64 65 66 61 75  ign of the defau
3560: 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69  lt cache.  ** si
3570: 7a 65 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e 75  ze.  But continu
3580: 65 20 74 6f 20 74 61 6b 65 20 74 68 65 20 61 62  e to take the ab
3590: 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20  solute value of 
35a0: 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68  the default cach
35b0: 65 0a 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20 68  e.  ** size of h
35c0: 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61 74  istorical compat
35d0: 69 62 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20 20  ibility..  */.  
35e0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 44 45 46  case PragTyp_DEF
35f0: 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 3a  AULT_CACHE_SIZE:
3600: 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f   {.    static co
3610: 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44  nst int iLn = VD
3620: 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f  BE_OFFSET_LINENO
3630: 28 32 29 3b 0a 20 20 20 20 73 74 61 74 69 63 20  (2);.    static 
3640: 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74  const VdbeOpList
3650: 20 67 65 74 43 61 63 68 65 53 69 7a 65 5b 5d 20   getCacheSize[] 
3660: 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 54  = {.      { OP_T
3670: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 30 2c 20 30  ransaction, 0, 0
3680: 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20  ,        0},    
3690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a0: 20 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20       /* 0 */.   
36b0: 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b     { OP_ReadCook
36c0: 69 65 2c 20 20 30 2c 20 31 2c 20 20 20 20 20 20  ie,  0, 1,      
36d0: 20 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f    BTREE_DEFAULT_
36e0: 43 41 43 48 45 5f 53 49 5a 45 7d 2c 20 20 2f 2a  CACHE_SIZE},  /*
36f0: 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50   1 */.      { OP
3700: 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c  _IfPos,       1,
3710: 20 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   8,        0},. 
3720: 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65       { OP_Intege
3730: 72 2c 20 20 20 20 20 30 2c 20 32 2c 20 20 20 20  r,     0, 2,    
3740: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
3750: 4f 50 5f 53 75 62 74 72 61 63 74 2c 20 20 20 20  OP_Subtract,    
3760: 31 2c 20 32 2c 20 20 20 20 20 20 20 20 31 7d 2c  1, 2,        1},
3770: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f  .      { OP_IfPo
3780: 73 2c 20 20 20 20 20 20 20 31 2c 20 38 2c 20 20  s,       1, 8,  
3790: 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20        0},.      
37a0: 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20  { OP_Integer,   
37b0: 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20 30    0, 1,        0
37c0: 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  },              
37d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 36 20             /* 6 
37e0: 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e 6f  */.      { OP_No
37f0: 6f 70 2c 20 20 20 20 20 20 20 20 30 2c 20 30 2c  op,        0, 0,
3800: 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
3810: 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77    { OP_ResultRow
3820: 2c 20 20 20 31 2c 20 31 2c 20 20 20 20 20 20 20  ,   1, 1,       
3830: 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20   0},.    };.    
3840: 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20 20  VdbeOp *aOp;.   
3850: 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73   sqlite3VdbeUses
3860: 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20  Btree(v, iDb);. 
3870: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
3880: 7b 0a 20 20 20 20 20 20 73 65 74 4f 6e 65 43 6f  {.      setOneCo
3890: 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20 22 63 61 63  lumnName(v, "cac
38a0: 68 65 5f 73 69 7a 65 22 29 3b 0a 20 20 20 20 20  he_size");.     
38b0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d   pParse->nMem +=
38c0: 20 32 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   2;.      sqlite
38d0: 33 56 64 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c  3VdbeVerifyNoMal
38e0: 6c 6f 63 52 65 71 75 69 72 65 64 28 76 2c 20 41  locRequired(v, A
38f0: 72 72 61 79 53 69 7a 65 28 67 65 74 43 61 63 68  rraySize(getCach
3900: 65 53 69 7a 65 29 29 3b 0a 20 20 20 20 20 20 61  eSize));.      a
3910: 4f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  Op = sqlite3Vdbe
3920: 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
3930: 61 79 53 69 7a 65 28 67 65 74 43 61 63 68 65 53  aySize(getCacheS
3940: 69 7a 65 29 2c 20 67 65 74 43 61 63 68 65 53 69  ize), getCacheSi
3950: 7a 65 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20 20  ze, iLn);.      
3960: 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c  if( ONLY_IF_REAL
3970: 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f 70 3d 3d  LOC_STRESS(aOp==
3980: 30 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  0) ) break;.    
3990: 20 20 61 4f 70 5b 30 5d 2e 70 31 20 3d 20 69 44    aOp[0].p1 = iD
39a0: 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d 2e  b;.      aOp[1].
39b0: 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20 20  p1 = iDb;.      
39c0: 61 4f 70 5b 36 5d 2e 70 31 20 3d 20 53 51 4c 49  aOp[6].p1 = SQLI
39d0: 54 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  TE_DEFAULT_CACHE
39e0: 5f 53 49 5a 45 3b 0a 20 20 20 20 7d 65 6c 73 65  _SIZE;.    }else
39f0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65  {.      int size
3a00: 20 3d 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74   = sqlite3AbsInt
3a10: 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  32(sqlite3Atoi(z
3a20: 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20 73  Right));.      s
3a30: 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
3a40: 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65  Operation(pParse
3a50: 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  , 0, iDb);.     
3a60: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
3a70: 70 33 28 76 2c 20 4f 50 5f 53 65 74 43 6f 6f 6b  p3(v, OP_SetCook
3a80: 69 65 2c 20 69 44 62 2c 20 42 54 52 45 45 5f 44  ie, iDb, BTREE_D
3a90: 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a  EFAULT_CACHE_SIZ
3aa0: 45 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20 20 20  E, size);.      
3ab0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
3ac0: 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
3ad0: 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
3ae0: 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
3af0: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73  ->cache_size = s
3b00: 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ize;.      sqlit
3b10: 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53  e3BtreeSetCacheS
3b20: 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44  ize(pDb->pBt, pD
3b30: 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68  b->pSchema->cach
3b40: 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20  e_size);.    }. 
3b50: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
3b60: 6e 64 69 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f  ndif /* !SQLITE_
3b70: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
3b80: 41 53 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d  AS && !SQLITE_OM
3b90: 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f  IT_DEPRECATED */
3ba0: 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
3bb0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
3bc0: 5f 50 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a 20  _PRAGMAS).  /*. 
3bd0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
3be0: 65 6d 61 2e 5d 70 61 67 65 5f 73 69 7a 65 0a 20  ema.]page_size. 
3bf0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
3c00: 65 6d 61 2e 5d 70 61 67 65 5f 73 69 7a 65 3d 4e  ema.]page_size=N
3c10: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66  .  **.  ** The f
3c20: 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74  irst form report
3c30: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65  s the current se
3c40: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
3c50: 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61 67 65  ** database page
3c60: 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 2e 20   size in bytes. 
3c70: 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
3c80: 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a 20 64   sets the.  ** d
3c90: 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a  atabase page siz
3ca0: 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20 76 61  e value.  The va
3cb0: 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  lue can only be 
3cc0: 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68 65 20  set if.  ** the 
3cd0: 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74  database has not
3ce0: 20 79 65 74 20 62 65 65 6e 20 63 72 65 61 74 65   yet been create
3cf0: 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  d..  */.  case P
3d00: 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49 5a 45  ragTyp_PAGE_SIZE
3d10: 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70  : {.    Btree *p
3d20: 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20  Bt = pDb->pBt;. 
3d30: 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21 3d     assert( pBt!=
3d40: 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52  0 );.    if( !zR
3d50: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 6e  ight ){.      in
3d60: 74 20 73 69 7a 65 20 3d 20 41 4c 57 41 59 53 28  t size = ALWAYS(
3d70: 70 42 74 29 20 3f 20 73 71 6c 69 74 65 33 42 74  pBt) ? sqlite3Bt
3d80: 72 65 65 47 65 74 50 61 67 65 53 69 7a 65 28 70  reeGetPageSize(p
3d90: 42 74 29 20 3a 20 30 3b 0a 20 20 20 20 20 20 72  Bt) : 0;.      r
3da0: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76  eturnSingleInt(v
3db0: 2c 20 22 70 61 67 65 5f 73 69 7a 65 22 2c 20 73  , "page_size", s
3dc0: 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ize);.    }else{
3dd0: 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6c 6c 6f 63  .      /* Malloc
3de0: 20 6d 61 79 20 66 61 69 6c 20 77 68 65 6e 20 73   may fail when s
3df0: 65 74 74 69 6e 67 20 74 68 65 20 70 61 67 65 2d  etting the page-
3e00: 73 69 7a 65 2c 20 61 73 20 74 68 65 72 65 20 69  size, as there i
3e10: 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 0a 20 20  s an internal.  
3e20: 20 20 20 20 2a 2a 20 62 75 66 66 65 72 20 74 68      ** buffer th
3e30: 61 74 20 74 68 65 20 70 61 67 65 72 20 6d 6f 64  at the pager mod
3e40: 75 6c 65 20 72 65 73 69 7a 65 73 20 75 73 69 6e  ule resizes usin
3e50: 67 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f  g sqlite3_reallo
3e60: 63 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  c()..      */.  
3e70: 20 20 20 20 64 62 2d 3e 6e 65 78 74 50 61 67 65      db->nextPage
3e80: 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74  size = sqlite3At
3e90: 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  oi(zRight);.    
3ea0: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f 4d    if( SQLITE_NOM
3eb0: 45 4d 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  EM==sqlite3Btree
3ec0: 53 65 74 50 61 67 65 53 69 7a 65 28 70 42 74 2c  SetPageSize(pBt,
3ed0: 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73 69 7a   db->nextPagesiz
3ee0: 65 2c 2d 31 2c 30 29 20 29 7b 0a 20 20 20 20 20  e,-1,0) ){.     
3ef0: 20 20 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75     sqlite3OomFau
3f00: 6c 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a  lt(db);.      }.
3f10: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
3f20: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
3f30: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
3f40: 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a 20  ]secure_delete. 
3f50: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63 68   **  PRAGMA [sch
3f60: 65 6d 61 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65  ema.]secure_dele
3f70: 74 65 3d 4f 4e 2f 4f 46 46 0a 20 20 2a 2a 0a 20  te=ON/OFF.  **. 
3f80: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f   ** The first fo
3f90: 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63  rm reports the c
3fa0: 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66  urrent setting f
3fb0: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73 65 63 75  or the.  ** secu
3fc0: 72 65 5f 64 65 6c 65 74 65 20 66 6c 61 67 2e 20  re_delete flag. 
3fd0: 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
3fe0: 20 63 68 61 6e 67 65 73 20 74 68 65 20 73 65 63   changes the sec
3ff0: 75 72 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20  ure_delete.  ** 
4000: 66 6c 61 67 20 73 65 74 74 69 6e 67 20 61 6e 64  flag setting and
4010: 20 72 65 70 6f 72 74 73 20 74 68 65 6e 65 77 20   reports thenew 
4020: 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20 63 61  value..  */.  ca
4030: 73 65 20 50 72 61 67 54 79 70 5f 53 45 43 55 52  se PragTyp_SECUR
4040: 45 5f 44 45 4c 45 54 45 3a 20 7b 0a 20 20 20 20  E_DELETE: {.    
4050: 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62  Btree *pBt = pDb
4060: 2d 3e 70 42 74 3b 0a 20 20 20 20 69 6e 74 20 62  ->pBt;.    int b
4070: 20 3d 20 2d 31 3b 0a 20 20 20 20 61 73 73 65 72   = -1;.    asser
4080: 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20  t( pBt!=0 );.   
4090: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
40a0: 20 20 20 20 20 62 20 3d 20 73 71 6c 69 74 65 33       b = sqlite3
40b0: 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68  GetBoolean(zRigh
40c0: 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20  t, 0);.    }.   
40d0: 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20   if( pId2->n==0 
40e0: 26 26 20 62 3e 3d 30 20 29 7b 0a 20 20 20 20 20  && b>=0 ){.     
40f0: 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 66   int ii;.      f
4100: 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e  or(ii=0; ii<db->
4110: 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
4120: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
4130: 53 65 63 75 72 65 44 65 6c 65 74 65 28 64 62 2d  SecureDelete(db-
4140: 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 62 29  >aDb[ii].pBt, b)
4150: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
4160: 20 20 20 20 62 20 3d 20 73 71 6c 69 74 65 33 42      b = sqlite3B
4170: 74 72 65 65 53 65 63 75 72 65 44 65 6c 65 74 65  treeSecureDelete
4180: 28 70 42 74 2c 20 62 29 3b 0a 20 20 20 20 72 65  (pBt, b);.    re
4190: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c  turnSingleInt(v,
41a0: 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74 65 22   "secure_delete"
41b0: 2c 20 62 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  , b);.    break;
41c0: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
41d0: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
41e0: 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 0a  ]max_page_count.
41f0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
4200: 68 65 6d 61 2e 5d 6d 61 78 5f 70 61 67 65 5f 63  hema.]max_page_c
4210: 6f 75 6e 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  ount=N.  **.  **
4220: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
4230: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
4240: 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20  ent setting for 
4250: 74 68 65 0a 20 20 2a 2a 20 6d 61 78 69 6d 75 6d  the.  ** maximum
4260: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
4270: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
4280: 20 66 69 6c 65 2e 20 20 54 68 65 20 0a 20 20 2a   file.  The .  *
4290: 2a 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 61 74  * second form at
42a0: 74 65 6d 70 74 73 20 74 6f 20 63 68 61 6e 67 65  tempts to change
42b0: 20 74 68 69 73 20 73 65 74 74 69 6e 67 2e 20 20   this setting.  
42c0: 42 6f 74 68 0a 20 20 2a 2a 20 66 6f 72 6d 73 20  Both.  ** forms 
42d0: 72 65 74 75 72 6e 20 74 68 65 20 63 75 72 72 65  return the curre
42e0: 6e 74 20 73 65 74 74 69 6e 67 2e 0a 20 20 2a 2a  nt setting..  **
42f0: 0a 20 20 2a 2a 20 54 68 65 20 61 62 73 6f 6c 75  .  ** The absolu
4300: 74 65 20 76 61 6c 75 65 20 6f 66 20 4e 20 69 73  te value of N is
4310: 20 75 73 65 64 2e 20 20 54 68 69 73 20 69 73 20   used.  This is 
4320: 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 61 6e 64  undocumented and
4330: 20 6d 69 67 68 74 0a 20 20 2a 2a 20 63 68 61 6e   might.  ** chan
4340: 67 65 2e 20 20 54 68 65 20 6f 6e 6c 79 20 70 75  ge.  The only pu
4350: 72 70 6f 73 65 20 69 73 20 74 6f 20 70 72 6f 76  rpose is to prov
4360: 69 64 65 20 61 6e 20 65 61 73 79 20 77 61 79 20  ide an easy way 
4370: 74 6f 20 74 65 73 74 0a 20 20 2a 2a 20 74 68 65  to test.  ** the
4380: 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32   sqlite3AbsInt32
4390: 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a  () function..  *
43a0: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
43b0: 73 63 68 65 6d 61 2e 5d 70 61 67 65 5f 63 6f 75  schema.]page_cou
43c0: 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  nt.  **.  ** Ret
43d0: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
43e0: 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73  f pages in the s
43f0: 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73  pecified databas
4400: 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  e..  */.  case P
4410: 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f 55 4e  ragTyp_PAGE_COUN
4420: 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 52 65  T: {.    int iRe
4430: 67 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f  g;.    sqlite3Co
4440: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
4450: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
4460: 20 69 52 65 67 20 3d 20 2b 2b 70 50 61 72 73 65   iReg = ++pParse
4470: 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 69 66 28 20  ->nMem;.    if( 
4480: 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a  sqlite3Tolower(z
4490: 4c 65 66 74 5b 30 5d 29 3d 3d 27 70 27 20 29 7b  Left[0])=='p' ){
44a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
44b0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 50  beAddOp2(v, OP_P
44c0: 61 67 65 63 6f 75 6e 74 2c 20 69 44 62 2c 20 69  agecount, iDb, i
44d0: 52 65 67 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  Reg);.    }else{
44e0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
44f0: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d  beAddOp3(v, OP_M
4500: 61 78 50 67 63 6e 74 2c 20 69 44 62 2c 20 69 52  axPgcnt, iDb, iR
4510: 65 67 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  eg, .           
4520: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
4530: 69 74 65 33 41 62 73 49 6e 74 33 32 28 73 71 6c  ite3AbsInt32(sql
4540: 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
4550: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  ));.    }.    sq
4560: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
4570: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
4580: 20 69 52 65 67 2c 20 31 29 3b 0a 20 20 20 20 73   iReg, 1);.    s
4590: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
45a0: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
45b0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
45c0: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
45d0: 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c  AME_NAME, zLeft,
45e0: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
45f0: 54 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  T);.    break;. 
4600: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
4610: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6c  RAGMA [schema.]l
4620: 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20 2a 2a  ocking_mode.  **
4630: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
4640: 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 20 3d  .]locking_mode =
4650: 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c 75 73 69   (normal|exclusi
4660: 76 65 29 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ve).  */.  case 
4670: 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e 47 5f  PragTyp_LOCKING_
4680: 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 63 6f 6e 73  MODE: {.    cons
4690: 74 20 63 68 61 72 20 2a 7a 52 65 74 20 3d 20 22  t char *zRet = "
46a0: 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20 20 69 6e 74  normal";.    int
46b0: 20 65 4d 6f 64 65 20 3d 20 67 65 74 4c 6f 63 6b   eMode = getLock
46c0: 69 6e 67 4d 6f 64 65 28 7a 52 69 67 68 74 29 3b  ingMode(zRight);
46d0: 0a 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e  ..    if( pId2->
46e0: 6e 3d 3d 30 20 26 26 20 65 4d 6f 64 65 3d 3d 50  n==0 && eMode==P
46f0: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
4700: 5f 51 55 45 52 59 20 29 7b 0a 20 20 20 20 20 20  _QUERY ){.      
4710: 2f 2a 20 53 69 6d 70 6c 65 20 22 50 52 41 47 4d  /* Simple "PRAGM
4720: 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 3b 22  A locking_mode;"
4730: 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69 73   statement. This
4740: 20 69 73 20 61 20 71 75 65 72 79 20 66 6f 72 0a   is a query for.
4750: 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 75 72        ** the cur
4760: 72 65 6e 74 20 64 65 66 61 75 6c 74 20 6c 6f 63  rent default loc
4770: 6b 69 6e 67 20 6d 6f 64 65 20 28 77 68 69 63 68  king mode (which
4780: 20 6d 61 79 20 62 65 20 64 69 66 66 65 72 65 6e   may be differen
4790: 74 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68  t to.      ** th
47a0: 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6f  e locking-mode o
47b0: 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  f the main datab
47c0: 61 73 65 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ase)..      */. 
47d0: 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 64 62 2d       eMode = db-
47e0: 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 0a 20  >dfltLockMode;. 
47f0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
4800: 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 0a 20  Pager *pPager;. 
4810: 20 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e       if( pId2->n
4820: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ==0 ){.        /
4830: 2a 20 54 68 69 73 20 69 6e 64 69 63 61 74 65 73  * This indicates
4840: 20 74 68 61 74 20 6e 6f 20 64 61 74 61 62 61 73   that no databas
4850: 65 20 6e 61 6d 65 20 77 61 73 20 73 70 65 63 69  e name was speci
4860: 66 69 65 64 20 61 73 20 70 61 72 74 0a 20 20 20  fied as part.   
4870: 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 50       ** of the P
4880: 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 2e 20 49  RAGMA command. I
4890: 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
48a0: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6d 75 73  locking-mode mus
48b0: 74 20 62 65 0a 20 20 20 20 20 20 20 20 2a 2a 20  t be.        ** 
48c0: 73 65 74 20 6f 6e 20 61 6c 6c 20 61 74 74 61 63  set on all attac
48d0: 68 65 64 20 64 61 74 61 62 61 73 65 73 2c 20 61  hed databases, a
48e0: 73 20 77 65 6c 6c 20 61 73 20 74 68 65 20 6d 61  s well as the ma
48f0: 69 6e 20 64 62 20 66 69 6c 65 2e 0a 20 20 20 20  in db file..    
4900: 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 20 20 2a      **.        *
4910: 2a 20 41 6c 73 6f 2c 20 74 68 65 20 73 71 6c 69  * Also, the sqli
4920: 74 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65  te3.dfltLockMode
4930: 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
4940: 20 73 6f 20 74 68 61 74 0a 20 20 20 20 20 20 20   so that.       
4950: 20 2a 2a 20 61 6e 79 20 73 75 62 73 65 71 75 65   ** any subseque
4960: 6e 74 6c 79 20 61 74 74 61 63 68 65 64 20 64 61  ntly attached da
4970: 74 61 62 61 73 65 73 20 61 6c 73 6f 20 75 73 65  tabases also use
4980: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 0a 20   the specified. 
4990: 20 20 20 20 20 20 20 2a 2a 20 6c 6f 63 6b 69 6e         ** lockin
49a0: 67 20 6d 6f 64 65 2e 0a 20 20 20 20 20 20 20 20  g mode..        
49b0: 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  */.        int i
49c0: 69 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  i;.        asser
49d0: 74 28 70 44 62 3d 3d 26 64 62 2d 3e 61 44 62 5b  t(pDb==&db->aDb[
49e0: 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  0]);.        for
49f0: 28 69 69 3d 32 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=2; ii<db->nD
4a00: 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
4a10: 20 20 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c      pPager = sql
4a20: 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 64  ite3BtreePager(d
4a30: 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 29 3b  b->aDb[ii].pBt);
4a40: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
4a50: 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f  e3PagerLockingMo
4a60: 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f 64 65  de(pPager, eMode
4a70: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
4a80: 20 20 20 20 20 64 62 2d 3e 64 66 6c 74 4c 6f 63       db->dfltLoc
4a90: 6b 4d 6f 64 65 20 3d 20 28 75 38 29 65 4d 6f 64  kMode = (u8)eMod
4aa0: 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  e;.      }.     
4ab0: 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65   pPager = sqlite
4ac0: 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d  3BtreePager(pDb-
4ad0: 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 65 4d 6f  >pBt);.      eMo
4ae0: 64 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  de = sqlite3Page
4af0: 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50 61  rLockingMode(pPa
4b00: 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20  ger, eMode);.   
4b10: 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20   }..    assert( 
4b20: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43  eMode==PAGER_LOC
4b30: 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 0a  KINGMODE_NORMAL.
4b40: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 65              || e
4b50: 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b  Mode==PAGER_LOCK
4b60: 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56  INGMODE_EXCLUSIV
4b70: 45 20 29 3b 0a 20 20 20 20 69 66 28 20 65 4d 6f  E );.    if( eMo
4b80: 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e  de==PAGER_LOCKIN
4b90: 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 20  GMODE_EXCLUSIVE 
4ba0: 29 7b 0a 20 20 20 20 20 20 7a 52 65 74 20 3d 20  ){.      zRet = 
4bb0: 22 65 78 63 6c 75 73 69 76 65 22 3b 0a 20 20 20  "exclusive";.   
4bc0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
4bd0: 67 6c 65 54 65 78 74 28 76 2c 20 22 6c 6f 63 6b  gleText(v, "lock
4be0: 69 6e 67 5f 6d 6f 64 65 22 2c 20 7a 52 65 74 29  ing_mode", zRet)
4bf0: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
4c00: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
4c10: 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 6a 6f 75  GMA [schema.]jou
4c20: 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a 2a 20 20  rnal_mode.  **  
4c30: 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d  PRAGMA [schema.]
4c40: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 0a 20  journal_mode =. 
4c50: 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20   **             
4c60: 20 20 20 20 20 20 20 20 20 28 64 65 6c 65 74 65           (delete
4c70: 7c 70 65 72 73 69 73 74 7c 6f 66 66 7c 74 72 75  |persist|off|tru
4c80: 6e 63 61 74 65 7c 6d 65 6d 6f 72 79 7c 77 61 6c  ncate|memory|wal
4c90: 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20 20 63 61 73  |off).  */.  cas
4ca0: 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41  e PragTyp_JOURNA
4cb0: 4c 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 69 6e  L_MODE: {.    in
4cc0: 74 20 65 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  t eMode;        
4cd0: 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 50 41  /* One of the PA
4ce0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
4cf0: 58 58 58 20 73 79 6d 62 6f 6c 73 20 2a 2f 0a 20  XXX symbols */. 
4d00: 20 20 20 69 6e 74 20 69 69 3b 20 20 20 20 20 20     int ii;      
4d10: 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
4d20: 6e 74 65 72 20 2a 2f 0a 0a 20 20 20 20 73 65 74  nter */..    set
4d30: 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c  OneColumnName(v,
4d40: 20 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 29   "journal_mode")
4d50: 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
4d60: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ==0 ){.      /* 
4d70: 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 22  If there is no "
4d80: 3d 4d 4f 44 45 22 20 70 61 72 74 20 6f 66 20 74  =MODE" part of t
4d90: 68 65 20 70 72 61 67 6d 61 2c 20 64 6f 20 61 20  he pragma, do a 
4da0: 71 75 65 72 79 20 66 6f 72 20 74 68 65 0a 20 20  query for the.  
4db0: 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 6d      ** current m
4dc0: 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20 65 4d 6f  ode */.      eMo
4dd0: 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e  de = PAGER_JOURN
4de0: 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20  ALMODE_QUERY;.  
4df0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63    }else{.      c
4e00: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 6f 64 65  onst char *zMode
4e10: 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20  ;.      int n = 
4e20: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
4e30: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 66  zRight);.      f
4e40: 6f 72 28 65 4d 6f 64 65 3d 30 3b 20 28 7a 4d 6f  or(eMode=0; (zMo
4e50: 64 65 20 3d 20 73 71 6c 69 74 65 33 4a 6f 75 72  de = sqlite3Jour
4e60: 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4d 6f 64  nalModename(eMod
4e70: 65 29 29 21 3d 30 3b 20 65 4d 6f 64 65 2b 2b 29  e))!=0; eMode++)
4e80: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71  {.        if( sq
4e90: 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52  lite3StrNICmp(zR
4ea0: 69 67 68 74 2c 20 7a 4d 6f 64 65 2c 20 6e 29 3d  ight, zMode, n)=
4eb0: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
4ec0: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 21 7a    }.      if( !z
4ed0: 4d 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 20 20  Mode ){.        
4ee0: 2f 2a 20 49 66 20 74 68 65 20 22 3d 4d 4f 44 45  /* If the "=MODE
4ef0: 22 20 70 61 72 74 20 64 6f 65 73 20 6e 6f 74 20  " part does not 
4f00: 6d 61 74 63 68 20 61 6e 79 20 6b 6e 6f 77 6e 20  match any known 
4f10: 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 0a 20 20  journal mode,.  
4f20: 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 64 6f        ** then do
4f30: 20 61 20 71 75 65 72 79 20 2a 2f 0a 20 20 20 20   a query */.    
4f40: 20 20 20 20 65 4d 6f 64 65 20 3d 20 50 41 47 45      eMode = PAGE
4f50: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
4f60: 45 52 59 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ERY;.      }.   
4f70: 20 7d 0a 20 20 20 20 69 66 28 20 65 4d 6f 64 65   }.    if( eMode
4f80: 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
4f90: 4f 44 45 5f 51 55 45 52 59 20 26 26 20 70 49 64  ODE_QUERY && pId
4fa0: 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20  2->n==0 ){.     
4fb0: 20 2f 2a 20 43 6f 6e 76 65 72 74 20 22 50 52 41   /* Convert "PRA
4fc0: 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
4fd0: 22 20 69 6e 74 6f 20 22 50 52 41 47 4d 41 20 6d  " into "PRAGMA m
4fe0: 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  ain.journal_mode
4ff0: 22 20 2a 2f 0a 20 20 20 20 20 20 69 44 62 20 3d  " */.      iDb =
5000: 20 30 3b 0a 20 20 20 20 20 20 70 49 64 32 2d 3e   0;.      pId2->
5010: 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  n = 1;.    }.   
5020: 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d   for(ii=db->nDb-
5030: 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b  1; ii>=0; ii--){
5040: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61  .      if( db->a
5050: 44 62 5b 69 69 5d 2e 70 42 74 20 26 26 20 28 69  Db[ii].pBt && (i
5060: 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e  i==iDb || pId2->
5070: 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20  n==0) ){.       
5080: 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73   sqlite3VdbeUses
5090: 42 74 72 65 65 28 76 2c 20 69 69 29 3b 0a 20 20  Btree(v, ii);.  
50a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
50b0: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4a 6f  eAddOp3(v, OP_Jo
50c0: 75 72 6e 61 6c 4d 6f 64 65 2c 20 69 69 2c 20 31  urnalMode, ii, 1
50d0: 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20  , eMode);.      
50e0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
50f0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
5100: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
5110: 2c 20 31 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  , 1);.    break;
5120: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
5130: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
5140: 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69  ]journal_size_li
5150: 6d 69 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  mit.  **  PRAGMA
5160: 20 5b 73 63 68 65 6d 61 2e 5d 6a 6f 75 72 6e 61   [schema.]journa
5170: 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d 4e 0a 20  l_size_limit=N. 
5180: 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20   **.  ** Get or 
5190: 73 65 74 20 74 68 65 20 73 69 7a 65 20 6c 69 6d  set the size lim
51a0: 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 6a  it on rollback j
51b0: 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e 0a 20 20  ournal files..  
51c0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
51d0: 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a 45 5f 4c  p_JOURNAL_SIZE_L
51e0: 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50 61 67 65  IMIT: {.    Page
51f0: 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69  r *pPager = sqli
5200: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
5210: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 69 36 34  b->pBt);.    i64
5220: 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b 0a 20 20   iLimit = -2;.  
5230: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
5240: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 65 63        sqlite3Dec
5250: 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68  OrHexToI64(zRigh
5260: 74 2c 20 26 69 4c 69 6d 69 74 29 3b 0a 20 20 20  t, &iLimit);.   
5270: 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c 2d 31     if( iLimit<-1
5280: 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b 0a   ) iLimit = -1;.
5290: 20 20 20 20 7d 0a 20 20 20 20 69 4c 69 6d 69 74      }.    iLimit
52a0: 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 4a   = sqlite3PagerJ
52b0: 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d 69 74 28  ournalSizeLimit(
52c0: 70 50 61 67 65 72 2c 20 69 4c 69 6d 69 74 29 3b  pPager, iLimit);
52d0: 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
52e0: 65 49 6e 74 28 76 2c 20 22 6a 6f 75 72 6e 61 6c  eInt(v, "journal
52f0: 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c 20 69 4c  _size_limit", iL
5300: 69 6d 69 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  imit);.    break
5310: 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a  ;.  }..#endif /*
5320: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
5330: 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 20  ER_PRAGMAS */.. 
5340: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
5350: 20 5b 73 63 68 65 6d 61 2e 5d 61 75 74 6f 5f 76   [schema.]auto_v
5360: 61 63 75 75 6d 0a 20 20 2a 2a 20 20 50 52 41 47  acuum.  **  PRAG
5370: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 75 74 6f  MA [schema.]auto
5380: 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a 2a 0a 20  _vacuum=N.  **. 
5390: 20 2a 2a 20 47 65 74 20 6f 72 20 73 65 74 20 74   ** Get or set t
53a0: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
53b0: 64 61 74 61 62 61 73 65 20 27 61 75 74 6f 2d 76  database 'auto-v
53c0: 61 63 75 75 6d 27 20 70 61 72 61 6d 65 74 65 72  acuum' parameter
53d0: 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61 6c 75 65  ..  ** The value
53e0: 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20 30 20 4e   is one of:  0 N
53f0: 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20 49 4e 43  ONE 1 FULL 2 INC
5400: 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f 0a 23 69  REMENTAL.  */.#i
5410: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
5420: 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 63  T_AUTOVACUUM.  c
5430: 61 73 65 20 50 72 61 67 54 79 70 5f 41 55 54 4f  ase PragTyp_AUTO
5440: 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 42  _VACUUM: {.    B
5450: 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d  tree *pBt = pDb-
5460: 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74  >pBt;.    assert
5470: 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20  ( pBt!=0 );.    
5480: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
5490: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
54a0: 65 49 6e 74 28 76 2c 20 22 61 75 74 6f 5f 76 61  eInt(v, "auto_va
54b0: 63 75 75 6d 22 2c 20 73 71 6c 69 74 65 33 42 74  cuum", sqlite3Bt
54c0: 72 65 65 47 65 74 41 75 74 6f 56 61 63 75 75 6d  reeGetAutoVacuum
54d0: 28 70 42 74 29 29 3b 0a 20 20 20 20 7d 65 6c 73  (pBt));.    }els
54e0: 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 65 41 75  e{.      int eAu
54f0: 74 6f 20 3d 20 67 65 74 41 75 74 6f 56 61 63 75  to = getAutoVacu
5500: 75 6d 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  um(zRight);.    
5510: 20 20 61 73 73 65 72 74 28 20 65 41 75 74 6f 3e    assert( eAuto>
5520: 3d 30 20 26 26 20 65 41 75 74 6f 3c 3d 32 20 29  =0 && eAuto<=2 )
5530: 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74  ;.      db->next
5540: 41 75 74 6f 76 61 63 20 3d 20 28 75 38 29 65 41  Autovac = (u8)eA
5550: 75 74 6f 3b 0a 20 20 20 20 20 20 2f 2a 20 43 61  uto;.      /* Ca
5560: 6c 6c 20 53 65 74 41 75 74 6f 56 61 63 75 75 6d  ll SetAutoVacuum
5570: 28 29 20 74 6f 20 73 65 74 20 69 6e 69 74 69 61  () to set initia
5580: 6c 69 7a 65 20 74 68 65 20 69 6e 74 65 72 6e 61  lize the interna
5590: 6c 20 61 75 74 6f 20 61 6e 64 0a 20 20 20 20 20  l auto and.     
55a0: 20 2a 2a 20 69 6e 63 72 2d 76 61 63 75 75 6d 20   ** incr-vacuum 
55b0: 66 6c 61 67 73 2e 20 54 68 69 73 20 69 73 20 72  flags. This is r
55c0: 65 71 75 69 72 65 64 20 69 6e 20 63 61 73 65 20  equired in case 
55d0: 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a  this connection.
55e0: 20 20 20 20 20 20 2a 2a 20 63 72 65 61 74 65 73        ** creates
55f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
5600: 6c 65 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74  le. It is import
5610: 61 6e 74 20 74 68 61 74 20 69 74 20 69 73 20 63  ant that it is c
5620: 72 65 61 74 65 64 0a 20 20 20 20 20 20 2a 2a 20  reated.      ** 
5630: 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75  as an auto-vacuu
5640: 6d 20 63 61 70 61 62 6c 65 20 64 62 2e 0a 20 20  m capable db..  
5650: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 63 20      */.      rc 
5660: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65  = sqlite3BtreeSe
5670: 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74 2c  tAutoVacuum(pBt,
5680: 20 65 41 75 74 6f 29 3b 0a 20 20 20 20 20 20 69   eAuto);.      i
5690: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
56a0: 20 26 26 20 28 65 41 75 74 6f 3d 3d 31 20 7c 7c   && (eAuto==1 ||
56b0: 20 65 41 75 74 6f 3d 3d 32 29 20 29 7b 0a 20 20   eAuto==2) ){.  
56c0: 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 73 65        /* When se
56d0: 74 74 69 6e 67 20 74 68 65 20 61 75 74 6f 5f 76  tting the auto_v
56e0: 61 63 75 75 6d 20 6d 6f 64 65 20 74 6f 20 65 69  acuum mode to ei
56f0: 74 68 65 72 20 22 66 75 6c 6c 22 20 6f 72 20 0a  ther "full" or .
5700: 20 20 20 20 20 20 20 20 2a 2a 20 22 69 6e 63 72          ** "incr
5710: 65 6d 65 6e 74 61 6c 22 2c 20 77 72 69 74 65 20  emental", write 
5720: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 6d 65 74  the value of met
5730: 61 5b 36 5d 20 69 6e 20 74 68 65 20 64 61 74 61  a[6] in the data
5740: 62 61 73 65 0a 20 20 20 20 20 20 20 20 2a 2a 20  base.        ** 
5750: 66 69 6c 65 2e 20 42 65 66 6f 72 65 20 77 72 69  file. Before wri
5760: 74 69 6e 67 20 74 6f 20 6d 65 74 61 5b 36 5d 2c  ting to meta[6],
5770: 20 63 68 65 63 6b 20 74 68 61 74 20 6d 65 74 61   check that meta
5780: 5b 33 5d 20 69 6e 64 69 63 61 74 65 73 0a 20 20  [3] indicates.  
5790: 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68        ** that th
57a0: 69 73 20 72 65 61 6c 6c 79 20 69 73 20 61 6e 20  is really is an 
57b0: 61 75 74 6f 2d 76 61 63 75 75 6d 20 63 61 70 61  auto-vacuum capa
57c0: 62 6c 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  ble database..  
57d0: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
57e0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e   static const in
57f0: 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46  t iLn = VDBE_OFF
5800: 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20  SET_LINENO(2);. 
5810: 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f         static co
5820: 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73  nst VdbeOpList s
5830: 65 74 4d 65 74 61 36 5b 5d 20 3d 20 7b 0a 20 20  etMeta6[] = {.  
5840: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61          { OP_Tra
5850: 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20  nsaction,    0, 
5860: 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20          1,      
5870: 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20             0},  
5880: 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20    /* 0 */.      
5890: 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f      { OP_ReadCoo
58a0: 6b 69 65 2c 20 20 20 20 20 30 2c 20 20 20 20 20  kie,     0,     
58b0: 20 20 20 20 31 2c 20 20 20 20 20 20 20 20 20 42      1,         B
58c0: 54 52 45 45 5f 4c 41 52 47 45 53 54 5f 52 4f 4f  TREE_LARGEST_ROO
58d0: 54 5f 50 41 47 45 7d 2c 0a 20 20 20 20 20 20 20  T_PAGE},.       
58e0: 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20 20     { OP_If,     
58f0: 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20          1,      
5900: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20     0,           
5910: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
5920: 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b  2 */.          {
5930: 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20 20 20 20   OP_Halt,       
5940: 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 4f      SQLITE_OK, O
5950: 45 5f 41 62 6f 72 74 2c 20 20 20 20 20 20 20 20  E_Abort,        
5960: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a 2f    0},    /* 3 */
5970: 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  .          { OP_
5980: 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20  SetCookie,      
5990: 30 2c 20 20 20 20 20 20 20 20 20 42 54 52 45 45  0,         BTREE
59a0: 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c 20 30 7d  _INCR_VACUUM, 0}
59b0: 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20 20  ,    /* 4 */.   
59c0: 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20 20       };.        
59d0: 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a 20 20 20  VdbeOp *aOp;.   
59e0: 20 20 20 20 20 69 6e 74 20 69 41 64 64 72 20 3d       int iAddr =
59f0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72   sqlite3VdbeCurr
5a00: 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20 20  entAddr(v);.    
5a10: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 56      sqlite3VdbeV
5a20: 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52 65 71  erifyNoMallocReq
5a30: 75 69 72 65 64 28 76 2c 20 41 72 72 61 79 53 69  uired(v, ArraySi
5a40: 7a 65 28 73 65 74 4d 65 74 61 36 29 29 3b 0a 20  ze(setMeta6));. 
5a50: 20 20 20 20 20 20 20 61 4f 70 20 3d 20 73 71 6c         aOp = sql
5a60: 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73  ite3VdbeAddOpLis
5a70: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73  t(v, ArraySize(s
5a80: 65 74 4d 65 74 61 36 29 2c 20 73 65 74 4d 65 74  etMeta6), setMet
5a90: 61 36 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20 20  a6, iLn);.      
5aa0: 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52 45    if( ONLY_IF_RE
5ab0: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f 70  ALLOC_STRESS(aOp
5ac0: 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a 20 20  ==0) ) break;.  
5ad0: 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20        aOp[0].p1 
5ae0: 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 20 20 61  = iDb;.        a
5af0: 4f 70 5b 31 5d 2e 70 31 20 3d 20 69 44 62 3b 0a  Op[1].p1 = iDb;.
5b00: 20 20 20 20 20 20 20 20 61 4f 70 5b 32 5d 2e 70          aOp[2].p
5b10: 32 20 3d 20 69 41 64 64 72 2b 34 3b 0a 20 20 20  2 = iAddr+4;.   
5b20: 20 20 20 20 20 61 4f 70 5b 34 5d 2e 70 31 20 3d       aOp[4].p1 =
5b30: 20 69 44 62 3b 0a 20 20 20 20 20 20 20 20 61 4f   iDb;.        aO
5b40: 70 5b 34 5d 2e 70 33 20 3d 20 65 41 75 74 6f 20  p[4].p3 = eAuto 
5b50: 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  - 1;.        sql
5b60: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
5b70: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  e(v, iDb);.     
5b80: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65   }.    }.    bre
5b90: 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ak;.  }.#endif..
5ba0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
5bb0: 41 20 5b 73 63 68 65 6d 61 2e 5d 69 6e 63 72 65  A [schema.]incre
5bc0: 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 28 4e 29  mental_vacuum(N)
5bd0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20 4e 20  .  **.  ** Do N 
5be0: 73 74 65 70 73 20 6f 66 20 69 6e 63 72 65 6d 65  steps of increme
5bf0: 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e 67 20 6f  ntal vacuuming o
5c00: 6e 20 61 20 64 61 74 61 62 61 73 65 2e 0a 20 20  n a database..  
5c10: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
5c20: 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
5c30: 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  M.  case PragTyp
5c40: 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43  _INCREMENTAL_VAC
5c50: 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69  UUM: {.    int i
5c60: 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a 20 20 20  Limit, addr;.   
5c70: 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 7c   if( zRight==0 |
5c80: 7c 20 21 73 71 6c 69 74 65 33 47 65 74 49 6e 74  | !sqlite3GetInt
5c90: 33 32 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d  32(zRight, &iLim
5ca0: 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74 3c 3d 30  it) || iLimit<=0
5cb0: 20 29 7b 0a 20 20 20 20 20 20 69 4c 69 6d 69 74   ){.      iLimit
5cc0: 20 3d 20 30 78 37 66 66 66 66 66 66 66 3b 0a 20   = 0x7fffffff;. 
5cd0: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
5ce0: 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
5cf0: 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 69  ion(pParse, 0, i
5d00: 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Db);.    sqlite3
5d10: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
5d20: 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69 6d 69 74  _Integer, iLimit
5d30: 2c 20 31 29 3b 0a 20 20 20 20 61 64 64 72 20 3d  , 1);.    addr =
5d40: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5d50: 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72 56 61 63  p1(v, OP_IncrVac
5d60: 75 75 6d 2c 20 69 44 62 29 3b 20 56 64 62 65 43  uum, iDb); VdbeC
5d70: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
5d80: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
5d90: 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  1(v, OP_ResultRo
5da0: 77 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74  w, 1);.    sqlit
5db0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
5dc0: 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31  OP_AddImm, 1, -1
5dd0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
5de0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
5df0: 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 29 3b 20  fPos, 1, addr); 
5e00: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
5e10: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
5e20: 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
5e30: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
5e40: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
5e50: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  f SQLITE_OMIT_PA
5e60: 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a  GER_PRAGMAS.  /*
5e70: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73  .  **  PRAGMA [s
5e80: 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73 69 7a  chema.]cache_siz
5e90: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
5ea0: 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73 69  schema.]cache_si
5eb0: 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ze=N.  **.  ** T
5ec0: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
5ed0: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
5ee0: 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67 20  t local setting 
5ef0: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67  for the.  ** pag
5f00: 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20 54 68  e cache size. Th
5f10: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65  e second form se
5f20: 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20 2a  ts the local.  *
5f30: 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  * page cache siz
5f40: 65 20 76 61 6c 75 65 2e 20 20 49 66 20 4e 20 69  e value.  If N i
5f50: 73 20 70 6f 73 69 74 69 76 65 20 74 68 65 6e 20  s positive then 
5f60: 74 68 61 74 20 69 73 20 74 68 65 0a 20 20 2a 2a  that is the.  **
5f70: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
5f80: 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e 20 20   in the cache.  
5f90: 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65  If N is negative
5fa0: 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20  , then the.  ** 
5fb0: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
5fc0: 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f 20 74  is adjusted so t
5fd0: 68 61 74 20 74 68 65 20 63 61 63 68 65 20 75 73  hat the cache us
5fe0: 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65 73 0a  es -N kibibytes.
5ff0: 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a    ** of memory..
6000: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
6010: 54 79 70 5f 43 41 43 48 45 5f 53 49 5a 45 3a 20  Typ_CACHE_SIZE: 
6020: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  {.    assert( sq
6030: 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
6040: 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29  Held(db, iDb, 0)
6050: 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69   );.    if( !zRi
6060: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
6070: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20  urnSingleInt(v, 
6080: 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 70 44  "cache_size", pD
6090: 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68  b->pSchema->cach
60a0: 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c  e_size);.    }el
60b0: 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69  se{.      int si
60c0: 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69  ze = sqlite3Atoi
60d0: 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20  (zRight);.      
60e0: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61  pDb->pSchema->ca
60f0: 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b  che_size = size;
6100: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74  .      sqlite3Bt
6110: 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65 28  reeSetCacheSize(
6120: 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e 70  pDb->pBt, pDb->p
6130: 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69  Schema->cache_si
6140: 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62  ze);.    }.    b
6150: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
6160: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
6170: 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73 70 69 6c  hema.]cache_spil
6180: 6c 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 63  l.  **  PRAGMA c
6190: 61 63 68 65 5f 73 70 69 6c 6c 3d 42 4f 4f 4c 45  ache_spill=BOOLE
61a0: 41 4e 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  AN.  **  PRAGMA 
61b0: 5b 73 63 68 65 6d 61 2e 5d 63 61 63 68 65 5f 73  [schema.]cache_s
61c0: 70 69 6c 6c 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  pill=N.  **.  **
61d0: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
61e0: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
61f0: 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e  ent local settin
6200: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70  g for the.  ** p
6210: 61 67 65 20 63 61 63 68 65 20 73 70 69 6c 6c 20  age cache spill 
6220: 73 69 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e 64  size. The second
6230: 20 66 6f 72 6d 20 74 75 72 6e 73 20 63 61 63 68   form turns cach
6240: 65 20 73 70 69 6c 6c 20 6f 6e 0a 20 20 2a 2a 20  e spill on.  ** 
6250: 6f 72 20 6f 66 66 2e 20 20 57 68 65 6e 20 74 75  or off.  When tu
6260: 72 6e 6e 69 6e 67 20 63 61 63 68 65 20 73 70 69  rnning cache spi
6270: 6c 6c 20 6f 6e 2c 20 74 68 65 20 73 69 7a 65 20  ll on, the size 
6280: 69 73 20 73 65 74 20 74 6f 20 74 68 65 0a 20 20  is set to the.  
6290: 2a 2a 20 63 75 72 72 65 6e 74 20 63 61 63 68 65  ** current cache
62a0: 5f 73 69 7a 65 2e 20 20 54 68 65 20 74 68 69 72  _size.  The thir
62b0: 64 20 66 6f 72 6d 20 73 65 74 73 20 61 20 73 70  d form sets a sp
62c0: 69 6c 6c 20 73 69 7a 65 20 74 68 61 74 0a 20 20  ill size that.  
62d0: 2a 2a 20 6d 61 79 20 62 65 20 64 69 66 66 65 72  ** may be differ
62e0: 65 6e 74 20 66 6f 72 6d 20 74 68 65 20 63 61 63  ent form the cac
62f0: 68 65 20 73 69 7a 65 2e 0a 20 20 2a 2a 20 49 66  he size..  ** If
6300: 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65 20 74   N is positive t
6310: 68 65 6e 20 74 68 61 74 20 69 73 20 74 68 65 0a  hen that is the.
6320: 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70    ** number of p
6330: 61 67 65 73 20 69 6e 20 74 68 65 20 63 61 63 68  ages in the cach
6340: 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61  e.  If N is nega
6350: 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65 0a 20  tive, then the. 
6360: 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61   ** number of pa
6370: 67 65 73 20 69 73 20 61 64 6a 75 73 74 65 64 20  ges is adjusted 
6380: 73 6f 20 74 68 61 74 20 74 68 65 20 63 61 63 68  so that the cach
6390: 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69 62 79  e uses -N kibiby
63a0: 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f  tes.  ** of memo
63b0: 72 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 66  ry..  **.  ** If
63c0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
63d0: 61 63 68 65 5f 73 70 69 6c 6c 20 70 61 67 65 73  ache_spill pages
63e0: 20 69 73 20 6c 65 73 73 20 74 68 65 6e 20 74 68   is less then th
63f0: 65 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a  e number of.  **
6400: 20 63 61 63 68 65 5f 73 69 7a 65 20 70 61 67 65   cache_size page
6410: 73 2c 20 6e 6f 20 73 70 69 6c 6c 69 6e 67 20 6f  s, no spilling o
6420: 63 63 75 72 73 20 75 6e 74 69 6c 20 74 68 65 20  ccurs until the 
6430: 70 61 67 65 20 63 6f 75 6e 74 20 65 78 63 65 65  page count excee
6440: 64 73 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62  ds.  ** the numb
6450: 65 72 20 6f 66 20 63 61 63 68 65 5f 73 69 7a 65  er of cache_size
6460: 20 70 61 67 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a   pages..  **.  *
6470: 2a 20 54 68 65 20 63 61 63 68 65 5f 73 70 69 6c  * The cache_spil
6480: 6c 3d 42 4f 4f 4c 45 41 4e 20 73 65 74 74 69 6e  l=BOOLEAN settin
6490: 67 20 61 70 70 6c 69 65 73 20 74 6f 20 61 6c 6c  g applies to all
64a0: 20 61 74 74 61 63 68 65 64 20 73 63 68 65 6d 61   attached schema
64b0: 73 2c 0a 20 20 2a 2a 20 6e 6f 74 20 6a 75 73 74  s,.  ** not just
64c0: 20 74 68 65 20 73 63 68 65 6d 61 20 73 70 65 63   the schema spec
64d0: 69 66 69 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61  ified..  */.  ca
64e0: 73 65 20 50 72 61 67 54 79 70 5f 43 41 43 48 45  se PragTyp_CACHE
64f0: 5f 53 50 49 4c 4c 3a 20 7b 0a 20 20 20 20 61 73  _SPILL: {.    as
6500: 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
6510: 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
6520: 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
6530: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
6540: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
6550: 65 49 6e 74 28 76 2c 20 22 63 61 63 68 65 5f 73  eInt(v, "cache_s
6560: 70 69 6c 6c 22 2c 20 0a 20 20 20 20 20 20 20 20  pill", .        
6570: 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
6580: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 29  LITE_CacheSpill)
6590: 3d 3d 30 20 3f 20 30 20 3a 20 0a 20 20 20 20 20  ==0 ? 0 : .     
65a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
65b0: 72 65 65 53 65 74 53 70 69 6c 6c 53 69 7a 65 28  reeSetSpillSize(
65c0: 70 44 62 2d 3e 70 42 74 2c 30 29 29 3b 0a 20 20  pDb->pBt,0));.  
65d0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
65e0: 6e 74 20 73 69 7a 65 20 3d 20 31 3b 0a 20 20 20  nt size = 1;.   
65f0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 65     if( sqlite3Ge
6600: 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26  tInt32(zRight, &
6610: 73 69 7a 65 29 20 29 7b 0a 20 20 20 20 20 20 20  size) ){.       
6620: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
6630: 53 70 69 6c 6c 53 69 7a 65 28 70 44 62 2d 3e 70  SpillSize(pDb->p
6640: 42 74 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20 20  Bt, size);.     
6650: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c   }.      if( sql
6660: 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a  ite3GetBoolean(z
6670: 52 69 67 68 74 2c 20 73 69 7a 65 21 3d 30 29 20  Right, size!=0) 
6680: 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66  ){.        db->f
6690: 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 43  lags |= SQLITE_C
66a0: 61 63 68 65 53 70 69 6c 6c 3b 0a 20 20 20 20 20  acheSpill;.     
66b0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
66c0: 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51  db->flags &= ~SQ
66d0: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 3b  LITE_CacheSpill;
66e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
66f0: 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28  etAllPagerFlags(
6700: 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62  db);.    }.    b
6710: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
6720: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 73 63    **  PRAGMA [sc
6730: 68 65 6d 61 2e 5d 6d 6d 61 70 5f 73 69 7a 65 28  hema.]mmap_size(
6740: 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 55 73 65  N).  **.  ** Use
6750: 64 20 74 6f 20 73 65 74 20 6d 61 70 70 69 6e 67  d to set mapping
6760: 20 73 69 7a 65 20 6c 69 6d 69 74 2e 20 54 68 65   size limit. The
6770: 20 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69   mapping size li
6780: 6d 69 74 20 69 73 0a 20 20 2a 2a 20 75 73 65 64  mit is.  ** used
6790: 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 61 67   to limit the ag
67a0: 67 72 65 67 61 74 65 20 73 69 7a 65 20 6f 66 20  gregate size of 
67b0: 61 6c 6c 20 6d 65 6d 6f 72 79 20 6d 61 70 70 65  all memory mappe
67c0: 64 20 72 65 67 69 6f 6e 73 20 6f 66 20 74 68 65  d regions of the
67d0: 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 66  .  ** database f
67e0: 69 6c 65 2e 20 49 66 20 74 68 69 73 20 70 61 72  ile. If this par
67f0: 61 6d 65 74 65 72 20 69 73 20 73 65 74 20 74 6f  ameter is set to
6800: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6d 65 6d 6f   zero, then memo
6810: 72 79 20 6d 61 70 70 69 6e 67 0a 20 20 2a 2a 20  ry mapping.  ** 
6820: 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61  is not used at a
6830: 6c 6c 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67  ll.  If N is neg
6840: 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65 20  ative, then the 
6850: 64 65 66 61 75 6c 74 20 6d 65 6d 6f 72 79 20 6d  default memory m
6860: 61 70 0a 20 20 2a 2a 20 6c 69 6d 69 74 20 64 65  ap.  ** limit de
6870: 74 65 72 6d 69 6e 65 64 20 62 79 20 73 71 6c 69  termined by sqli
6880: 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54  te3_config(SQLIT
6890: 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53 49  E_CONFIG_MMAP_SI
68a0: 5a 45 29 20 69 73 20 73 65 74 2e 0a 20 20 2a 2a  ZE) is set..  **
68b0: 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20 4e   The parameter N
68c0: 20 69 73 20 6d 65 61 73 75 72 65 64 20 69 6e 20   is measured in 
68d0: 62 79 74 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  bytes..  **.  **
68e0: 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20 61   This value is a
68f0: 64 76 69 73 6f 72 79 2e 20 20 54 68 65 20 75 6e  dvisory.  The un
6900: 64 65 72 6c 79 69 6e 67 20 56 46 53 20 69 73 20  derlying VFS is 
6910: 66 72 65 65 20 74 6f 20 6d 65 6d 6f 72 79 20 6d  free to memory m
6920: 61 70 0a 20 20 2a 2a 20 61 73 20 6c 69 74 74 6c  ap.  ** as littl
6930: 65 20 6f 72 20 61 73 20 6d 75 63 68 20 61 73 20  e or as much as 
6940: 69 74 20 77 61 6e 74 73 2e 20 20 45 78 63 65 70  it wants.  Excep
6950: 74 2c 20 69 66 20 4e 20 69 73 20 73 65 74 20 74  t, if N is set t
6960: 6f 20 30 20 74 68 65 6e 20 74 68 65 0a 20 20 2a  o 0 then the.  *
6970: 2a 20 75 70 70 65 72 20 6c 61 79 65 72 73 20 77  * upper layers w
6980: 69 6c 6c 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65  ill never invoke
6990: 20 74 68 65 20 78 46 65 74 63 68 20 69 6e 74 65   the xFetch inte
69a0: 72 66 61 63 65 73 20 74 6f 20 74 68 65 20 56 46  rfaces to the VF
69b0: 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  S..  */.  case P
69c0: 72 61 67 54 79 70 5f 4d 4d 41 50 5f 53 49 5a 45  ragTyp_MMAP_SIZE
69d0: 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  : {.    sqlite3_
69e0: 69 6e 74 36 34 20 73 7a 3b 0a 23 69 66 20 53 51  int64 sz;.#if SQ
69f0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
6a00: 5a 45 3e 30 0a 20 20 20 20 61 73 73 65 72 74 28  ZE>0.    assert(
6a10: 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
6a20: 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
6a30: 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 7a   0) );.    if( z
6a40: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
6a50: 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 73 71 6c  nt ii;.      sql
6a60: 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36  ite3DecOrHexToI6
6a70: 34 28 7a 52 69 67 68 74 2c 20 26 73 7a 29 3b 0a  4(zRight, &sz);.
6a80: 20 20 20 20 20 20 69 66 28 20 73 7a 3c 30 20 29        if( sz<0 )
6a90: 20 73 7a 20 3d 20 73 71 6c 69 74 65 33 47 6c 6f   sz = sqlite3Glo
6aa0: 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 4d 6d 61 70  balConfig.szMmap
6ab0: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 32  ;.      if( pId2
6ac0: 2d 3e 6e 3d 3d 30 20 29 20 64 62 2d 3e 73 7a 4d  ->n==0 ) db->szM
6ad0: 6d 61 70 20 3d 20 73 7a 3b 0a 20 20 20 20 20 20  map = sz;.      
6ae0: 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31  for(ii=db->nDb-1
6af0: 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a  ; ii>=0; ii--){.
6b00: 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e          if( db->
6b10: 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26 20 28  aDb[ii].pBt && (
6b20: 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d  ii==iDb || pId2-
6b30: 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20 20  >n==0) ){.      
6b40: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
6b50: 53 65 74 4d 6d 61 70 4c 69 6d 69 74 28 64 62 2d  SetMmapLimit(db-
6b60: 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 73 7a  >aDb[ii].pBt, sz
6b70: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
6b80: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
6b90: 7a 20 3d 20 2d 31 3b 0a 20 20 20 20 72 63 20 3d  z = -1;.    rc =
6ba0: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f   sqlite3_file_co
6bb0: 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62 2c 20 53  ntrol(db, zDb, S
6bc0: 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4d 4d 41 50  QLITE_FCNTL_MMAP
6bd0: 5f 53 49 5a 45 2c 20 26 73 7a 29 3b 0a 23 65 6c  _SIZE, &sz);.#el
6be0: 73 65 0a 20 20 20 20 73 7a 20 3d 20 30 3b 0a 20  se.    sz = 0;. 
6bf0: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
6c00: 4b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66  K;.#endif.    if
6c10: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
6c20: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
6c30: 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 6d 6d 61  ingleInt(v, "mma
6c40: 70 5f 73 69 7a 65 22 2c 20 73 7a 29 3b 0a 20 20  p_size", sz);.  
6c50: 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d    }else if( rc!=
6c60: 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20  SQLITE_NOTFOUND 
6c70: 29 7b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  ){.      pParse-
6c80: 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20 70  >nErr++;.      p
6c90: 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a  Parse->rc = rc;.
6ca0: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
6cb0: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
6cc0: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
6cd0: 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ore.  **   PRAGM
6ce0: 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 22  A temp_store = "
6cf0: 64 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72 79  default"|"memory
6d00: 22 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20 20  "|"file".  **.  
6d10: 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74  ** Return or set
6d20: 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65   the local value
6d30: 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f   of the temp_sto
6d40: 72 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69  re flag.  Changi
6d50: 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61  ng.  ** the loca
6d60: 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74  l value does not
6d70: 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f   make changes to
6d80: 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61   the disk file a
6d90: 6e 64 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20  nd the default. 
6da0: 20 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20 62   ** value will b
6db0: 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e  e restored the n
6dc0: 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61 74  ext time the dat
6dd0: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2e  abase is opened.
6de0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20  .  **.  ** Note 
6df0: 74 68 61 74 20 69 74 20 69 73 20 70 6f 73 73 69  that it is possi
6e00: 62 6c 65 20 66 6f 72 20 74 68 65 20 6c 69 62 72  ble for the libr
6e10: 61 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  ary compile-time
6e20: 20 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a   options to.  **
6e30: 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 73   override this s
6e40: 65 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 63 61  etting.  */.  ca
6e50: 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f  se PragTyp_TEMP_
6e60: 53 54 4f 52 45 3a 20 7b 0a 20 20 20 20 69 66 28  STORE: {.    if(
6e70: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
6e80: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
6e90: 74 28 76 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65  t(v, "temp_store
6ea0: 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  ", db->temp_stor
6eb0: 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  e);.    }else{. 
6ec0: 20 20 20 20 20 63 68 61 6e 67 65 54 65 6d 70 53       changeTempS
6ed0: 74 6f 72 61 67 65 28 70 50 61 72 73 65 2c 20 7a  torage(pParse, z
6ee0: 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 0a 20 20  Right);.    }.  
6ef0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
6f00: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
6f10: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
6f20: 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52 41  ctory.  **   PRA
6f30: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
6f40: 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22 64  irectory = ""|"d
6f50: 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20  irectory_name". 
6f60: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
6f70: 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c  or set the local
6f80: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74 65   value of the te
6f90: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
6fa0: 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69  ry flag.  Changi
6fb0: 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75  ng.  ** the valu
6fc0: 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66 69  e sets a specifi
6fd0: 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20 62  c directory to b
6fe0: 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
6ff0: 72 61 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a 2a  rary files..  **
7000: 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75   Setting to a nu
7010: 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72 74  ll string revert
7020: 73 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74  s to the default
7030: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
7040: 74 6f 72 79 20 73 65 61 72 63 68 2e 0a 20 20 2a  tory search..  *
7050: 2a 20 49 66 20 74 65 6d 70 6f 72 61 72 79 20 64  * If temporary d
7060: 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61 6e  irectory is chan
7070: 67 65 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c 69  ged, then invali
7080: 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 2e  dateTempStorage.
7090: 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73  .  **.  */.  cas
70a0: 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53  e PragTyp_TEMP_S
70b0: 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20  TORE_DIRECTORY: 
70c0: 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  {.    if( !zRigh
70d0: 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  t ){.      retur
70e0: 6e 53 69 6e 67 6c 65 54 65 78 74 28 76 2c 20 22  nSingleText(v, "
70f0: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
7100: 74 6f 72 79 22 2c 20 73 71 6c 69 74 65 33 5f 74  tory", sqlite3_t
7110: 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a  emp_directory);.
7120: 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64      }else{.#ifnd
7130: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
7140: 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  SD.      if( zRi
7150: 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ght[0] ){.      
7160: 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20    int res;.     
7170: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f     rc = sqlite3O
7180: 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73  sAccess(db->pVfs
7190: 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45  , zRight, SQLITE
71a0: 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52 49 54  _ACCESS_READWRIT
71b0: 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  E, &res);.      
71c0: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
71d0: 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b  _OK || res==0 ){
71e0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
71f0: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
7200: 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62  e, "not a writab
7210: 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a  le directory");.
7220: 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70            goto p
7230: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20  ragma_out;.     
7240: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
7250: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 54 45     if( SQLITE_TE
7260: 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20  MP_STORE==0.    
7270: 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45     || (SQLITE_TE
7280: 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20 64  MP_STORE==1 && d
7290: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31  b->temp_store<=1
72a0: 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c  ).       || (SQL
72b0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
72c0: 32 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74  2 && db->temp_st
72d0: 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20 20 29 7b  ore==1).      ){
72e0: 0a 20 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64  .        invalid
72f0: 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70  ateTempStorage(p
7300: 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a  Parse);.      }.
7310: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
7320: 65 65 28 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f  ee(sqlite3_temp_
7330: 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20  directory);.    
7340: 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20    if( zRight[0] 
7350: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
7360: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
7370: 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  y = sqlite3_mpri
7380: 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74  ntf("%s", zRight
7390: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
73a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
73b0: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d  temp_directory =
73c0: 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64   0;.      }.#end
73d0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
73e0: 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20  T_WSD */.    }. 
73f0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23     break;.  }..#
7400: 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  if SQLITE_OS_WIN
7410: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
7420: 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64  GMA data_store_d
7430: 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20  irectory.  **   
7440: 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72  PRAGMA data_stor
7450: 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22  e_directory = ""
7460: 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65  |"directory_name
7470: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
7480: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f  rn or set the lo
7490: 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65  cal value of the
74a0: 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
74b0: 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61  ctory flag.  Cha
74c0: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76  nging.  ** the v
74d0: 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63  alue sets a spec
74e0: 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20 74  ific directory t
74f0: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64 61  o be used for da
7500: 74 61 62 61 73 65 20 66 69 6c 65 73 20 74 68 61  tabase files tha
7510: 74 0a 20 20 2a 2a 20 77 65 72 65 20 73 70 65 63  t.  ** were spec
7520: 69 66 69 65 64 20 77 69 74 68 20 61 20 72 65 6c  ified with a rel
7530: 61 74 69 76 65 20 70 61 74 68 6e 61 6d 65 2e 20  ative pathname. 
7540: 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75   Setting to a nu
7550: 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72 74  ll string revert
7560: 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 64 65  s.  ** to the de
7570: 66 61 75 6c 74 20 64 61 74 61 62 61 73 65 20 64  fault database d
7580: 69 72 65 63 74 6f 72 79 2c 20 77 68 69 63 68 20  irectory, which 
7590: 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69 6c  for database fil
75a0: 65 73 20 73 70 65 63 69 66 69 65 64 20 77 69 74  es specified wit
75b0: 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61 74 69 76  h.  ** a relativ
75c0: 65 20 70 61 74 68 20 77 69 6c 6c 20 70 72 6f 62  e path will prob
75d0: 61 62 6c 79 20 62 65 20 62 61 73 65 64 20 6f 6e  ably be based on
75e0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 69 72   the current dir
75f0: 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 0a 20  ectory for the. 
7600: 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20 20 44 61   ** process.  Da
7610: 74 61 62 61 73 65 20 66 69 6c 65 20 73 70 65 63  tabase file spec
7620: 69 66 69 65 64 20 77 69 74 68 20 61 6e 20 61 62  ified with an ab
7630: 73 6f 6c 75 74 65 20 70 61 74 68 20 61 72 65 20  solute path are 
7640: 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a 20 20 2a  not impacted.  *
7650: 2a 20 62 79 20 74 68 69 73 20 73 65 74 74 69 6e  * by this settin
7660: 67 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  g, regardless of
7670: 20 69 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a 2a   its value..  **
7680: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
7690: 67 54 79 70 5f 44 41 54 41 5f 53 54 4f 52 45 5f  gTyp_DATA_STORE_
76a0: 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20  DIRECTORY: {.   
76b0: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
76c0: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
76d0: 6c 65 54 65 78 74 28 76 2c 20 22 64 61 74 61 5f  leText(v, "data_
76e0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22  store_directory"
76f0: 2c 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64  , sqlite3_data_d
7700: 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 7d  irectory);.    }
7710: 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20 53 51  else{.#ifndef SQ
7720: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
7730: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30      if( zRight[0
7740: 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  ] ){.        int
7750: 20 72 65 73 3b 0a 20 20 20 20 20 20 20 20 72 63   res;.        rc
7760: 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63 65   = sqlite3OsAcce
7770: 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52 69  ss(db->pVfs, zRi
7780: 67 68 74 2c 20 53 51 4c 49 54 45 5f 41 43 43 45  ght, SQLITE_ACCE
7790: 53 53 5f 52 45 41 44 57 52 49 54 45 2c 20 26 72  SS_READWRITE, &r
77a0: 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  es);.        if(
77b0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc!=SQLITE_OK |
77c0: 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  | res==0 ){.    
77d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72        sqlite3Err
77e0: 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 6e  orMsg(pParse, "n
77f0: 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64 69  ot a writable di
7800: 72 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20 20  rectory");.     
7810: 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61       goto pragma
7820: 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a  _out;.        }.
7830: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
7840: 6c 69 74 65 33 5f 66 72 65 65 28 73 71 6c 69 74  lite3_free(sqlit
7850: 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72  e3_data_director
7860: 79 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52  y);.      if( zR
7870: 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  ight[0] ){.     
7880: 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f     sqlite3_data_
7890: 64 69 72 65 63 74 6f 72 79 20 3d 20 73 71 6c 69  directory = sqli
78a0: 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22  te3_mprintf("%s"
78b0: 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  , zRight);.     
78c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
78d0: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72  sqlite3_data_dir
78e0: 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20  ectory = 0;.    
78f0: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
7900: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f  LITE_OMIT_WSD */
7910: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
7920: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ;.  }.#endif..#i
7930: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7940: 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 0a 20 20  LOCKING_STYLE.  
7950: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
7960: 20 5b 73 63 68 65 6d 61 2e 5d 6c 6f 63 6b 5f 70   [schema.]lock_p
7970: 72 6f 78 79 5f 66 69 6c 65 0a 20 20 2a 2a 20 20  roxy_file.  **  
7980: 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e   PRAGMA [schema.
7990: 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65  ]lock_proxy_file
79a0: 20 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f 63   = ":auto:"|"loc
79b0: 6b 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20 20 2a  k_file_path".  *
79c0: 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72  *.  ** Return or
79d0: 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   set the value o
79e0: 66 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78 79  f the lock_proxy
79f0: 5f 66 69 6c 65 20 66 6c 61 67 2e 20 20 43 68 61  _file flag.  Cha
7a00: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76  nging.  ** the v
7a10: 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63  alue sets a spec
7a20: 69 66 69 63 20 66 69 6c 65 20 74 6f 20 62 65 20  ific file to be 
7a30: 75 73 65 64 20 66 6f 72 20 64 61 74 61 62 61 73  used for databas
7a40: 65 20 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e 0a  e access locks..
7a50: 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65    **.  */.  case
7a60: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50 52   PragTyp_LOCK_PR
7a70: 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20 20 20  OXY_FILE: {.    
7a80: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
7a90: 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67       Pager *pPag
7aa0: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
7ab0: 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29  ePager(pDb->pBt)
7ac0: 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 70 72  ;.      char *pr
7ad0: 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d 20  oxy_file_path = 
7ae0: 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c 69  NULL;.      sqli
7af0: 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20  te3_file *pFile 
7b00: 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
7b10: 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20  le(pPager);.    
7b20: 20 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43    sqlite3OsFileC
7b30: 6f 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c 65  ontrolHint(pFile
7b40: 2c 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f 43  , SQLITE_GET_LOC
7b50: 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20  KPROXYFILE, .   
7b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b70: 20 20 20 20 20 20 20 20 26 70 72 6f 78 79 5f 66          &proxy_f
7b80: 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 20  ile_path);.     
7b90: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78   returnSingleTex
7ba0: 74 28 76 2c 20 22 6c 6f 63 6b 5f 70 72 6f 78 79  t(v, "lock_proxy
7bb0: 5f 66 69 6c 65 22 2c 20 70 72 6f 78 79 5f 66 69  _file", proxy_fi
7bc0: 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 7d 65  le_path);.    }e
7bd0: 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72  lse{.      Pager
7be0: 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74   *pPager = sqlit
7bf0: 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62  e3BtreePager(pDb
7c00: 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 73 71  ->pBt);.      sq
7c10: 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c  lite3_file *pFil
7c20: 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
7c30: 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20  File(pPager);.  
7c40: 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20      int res;.   
7c50: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
7c60: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d   ){.        res=
7c70: 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e  sqlite3OsFileCon
7c80: 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49  trol(pFile, SQLI
7c90: 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59  TE_SET_LOCKPROXY
7ca0: 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  FILE, .         
7cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cc0: 20 20 20 20 20 20 20 20 20 20 20 20 7a 52 69 67              zRig
7cd0: 68 74 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73  ht);.      } els
7ce0: 65 20 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d  e {.        res=
7cf0: 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e  sqlite3OsFileCon
7d00: 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49  trol(pFile, SQLI
7d10: 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59  TE_SET_LOCKPROXY
7d20: 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  FILE, .         
7d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d40: 20 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c              NULL
7d50: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
7d60: 20 69 66 28 20 72 65 73 21 3d 53 51 4c 49 54 45   if( res!=SQLITE
7d70: 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73  _OK ){.        s
7d80: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
7d90: 50 61 72 73 65 2c 20 22 66 61 69 6c 65 64 20 74  Parse, "failed t
7da0: 6f 20 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78 79  o set lock proxy
7db0: 20 66 69 6c 65 22 29 3b 0a 20 20 20 20 20 20 20   file");.       
7dc0: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
7dd0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
7de0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
7df0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
7e00: 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53  ENABLE_LOCKING_S
7e10: 54 59 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20 20  TYLE */      .  
7e20: 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50    .  /*.  **   P
7e30: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 73  RAGMA [schema.]s
7e40: 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20  ynchronous.  ** 
7e50: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
7e60: 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46  .]synchronous=OF
7e70: 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55 4c 4c  F|ON|NORMAL|FULL
7e80: 7c 45 58 54 52 41 0a 20 20 2a 2a 0a 20 20 2a 2a  |EXTRA.  **.  **
7e90: 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74   Return or set t
7ea0: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f  he local value o
7eb0: 66 20 74 68 65 20 73 79 6e 63 68 72 6f 6e 6f 75  f the synchronou
7ec0: 73 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e  s flag.  Changin
7ed0: 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c  g.  ** the local
7ee0: 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20   value does not 
7ef0: 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20  make changes to 
7f00: 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e  the disk file an
7f10: 64 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75  d the.  ** defau
7f20: 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  lt value will be
7f30: 20 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65   restored the ne
7f40: 78 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61  xt time the data
7f50: 62 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f 70 65  base is.  ** ope
7f60: 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ned..  */.  case
7f70: 20 50 72 61 67 54 79 70 5f 53 59 4e 43 48 52 4f   PragTyp_SYNCHRO
7f80: 4e 4f 55 53 3a 20 7b 0a 20 20 20 20 69 66 28 20  NOUS: {.    if( 
7f90: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
7fa0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
7fb0: 28 76 2c 20 22 73 79 6e 63 68 72 6f 6e 6f 75 73  (v, "synchronous
7fc0: 22 2c 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c  ", pDb->safety_l
7fd0: 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20 7d 65 6c  evel-1);.    }el
7fe0: 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21 64  se{.      if( !d
7ff0: 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
8000: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
8010: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
8020: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 53   .            "S
8030: 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79 20  afety level may 
8040: 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20 69  not be changed i
8050: 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61 63 74  nside a transact
8060: 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ion");.      }el
8070: 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  se{.        int 
8080: 69 4c 65 76 65 6c 20 3d 20 28 67 65 74 53 61 66  iLevel = (getSaf
8090: 65 74 79 4c 65 76 65 6c 28 7a 52 69 67 68 74 2c  etyLevel(zRight,
80a0: 30 2c 31 29 2b 31 29 20 26 20 50 41 47 45 52 5f  0,1)+1) & PAGER_
80b0: 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53 4b  SYNCHRONOUS_MASK
80c0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 4c  ;.        if( iL
80d0: 65 76 65 6c 3d 3d 30 20 29 20 69 4c 65 76 65 6c  evel==0 ) iLevel
80e0: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70 44   = 1;.        pD
80f0: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
8100: 3d 20 69 4c 65 76 65 6c 3b 0a 20 20 20 20 20 20  = iLevel;.      
8110: 20 20 70 44 62 2d 3e 62 53 79 6e 63 53 65 74 20    pDb->bSyncSet 
8120: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 73 65 74  = 1;.        set
8130: 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 64 62  AllPagerFlags(db
8140: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
8150: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
8160: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
8170: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
8180: 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
8190: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
81a0: 5f 50 52 41 47 4d 41 53 0a 20 20 63 61 73 65 20  _PRAGMAS.  case 
81b0: 50 72 61 67 54 79 70 5f 46 4c 41 47 3a 20 7b 0a  PragTyp_FLAG: {.
81c0: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d      if( zRight==
81d0: 30 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  0 ){.      retur
81e0: 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 70 50  nSingleInt(v, pP
81f0: 72 61 67 6d 61 2d 3e 7a 4e 61 6d 65 2c 20 28 64  ragma->zName, (d
8200: 62 2d 3e 66 6c 61 67 73 20 26 20 70 50 72 61 67  b->flags & pPrag
8210: 6d 61 2d 3e 69 41 72 67 29 21 3d 30 20 29 3b 0a  ma->iArg)!=0 );.
8220: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
8230: 20 69 6e 74 20 6d 61 73 6b 20 3d 20 70 50 72 61   int mask = pPra
8240: 67 6d 61 2d 3e 69 41 72 67 3b 20 20 20 20 2f 2a  gma->iArg;    /*
8250: 20 4d 61 73 6b 20 6f 66 20 62 69 74 73 20 74 6f   Mask of bits to
8260: 20 73 65 74 20 6f 72 20 63 6c 65 61 72 2e 20 2a   set or clear. *
8270: 2f 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  /.      if( db->
8280: 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 7b  autoCommit==0 ){
8290: 0a 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 65  .        /* Fore
82a0: 69 67 6e 20 6b 65 79 20 73 75 70 70 6f 72 74 20  ign key support 
82b0: 6d 61 79 20 6e 6f 74 20 62 65 20 65 6e 61 62 6c  may not be enabl
82c0: 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 20 77  ed or disabled w
82d0: 68 69 6c 65 20 6e 6f 74 0a 20 20 20 20 20 20 20  hile not.       
82e0: 20 2a 2a 20 69 6e 20 61 75 74 6f 2d 63 6f 6d 6d   ** in auto-comm
82f0: 69 74 20 6d 6f 64 65 2e 20 20 2a 2f 0a 20 20 20  it mode.  */.   
8300: 20 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28 53       mask &= ~(S
8310: 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79  QLITE_ForeignKey
8320: 73 29 3b 0a 20 20 20 20 20 20 7d 0a 23 69 66 20  s);.      }.#if 
8330: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
8340: 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 20 20 20  ENTICATION.     
8350: 20 69 66 28 20 64 62 2d 3e 61 75 74 68 2e 61 75   if( db->auth.au
8360: 74 68 4c 65 76 65 6c 3d 3d 55 41 55 54 48 5f 55  thLevel==UAUTH_U
8370: 73 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ser ){.        /
8380: 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 6e  * Do not allow n
8390: 6f 6e 2d 61 64 6d 69 6e 20 75 73 65 72 73 20 74  on-admin users t
83a0: 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 73 63 68  o modify the sch
83b0: 65 6d 61 20 61 72 62 69 74 72 61 72 69 6c 79 20  ema arbitrarily 
83c0: 2a 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20  */.        mask 
83d0: 26 3d 20 7e 28 53 51 4c 49 54 45 5f 57 72 69 74  &= ~(SQLITE_Writ
83e0: 65 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20 20  eSchema);.      
83f0: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  }.#endif..      
8400: 69 66 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f  if( sqlite3GetBo
8410: 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29  olean(zRight, 0)
8420: 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   ){.        db->
8430: 66 6c 61 67 73 20 7c 3d 20 6d 61 73 6b 3b 0a 20  flags |= mask;. 
8440: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
8450: 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d      db->flags &=
8460: 20 7e 6d 61 73 6b 3b 0a 20 20 20 20 20 20 20 20   ~mask;.        
8470: 69 66 28 20 6d 61 73 6b 3d 3d 53 51 4c 49 54 45  if( mask==SQLITE
8480: 5f 44 65 66 65 72 46 4b 73 20 29 20 64 62 2d 3e  _DeferFKs ) db->
8490: 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
84a0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 0a 20   = 0;.      }.. 
84b0: 20 20 20 20 20 2f 2a 20 4d 61 6e 79 20 6f 66 20       /* Many of 
84c0: 74 68 65 20 66 6c 61 67 2d 70 72 61 67 6d 61 73  the flag-pragmas
84d0: 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f 64 65   modify the code
84e0: 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68   generated by th
84f0: 65 20 53 51 4c 20 0a 20 20 20 20 20 20 2a 2a 20  e SQL .      ** 
8500: 63 6f 6d 70 69 6c 65 72 20 28 65 67 2e 20 63 6f  compiler (eg. co
8510: 75 6e 74 5f 63 68 61 6e 67 65 73 29 2e 20 53 6f  unt_changes). So
8520: 20 61 64 64 20 61 6e 20 6f 70 63 6f 64 65 20 74   add an opcode t
8530: 6f 20 65 78 70 69 72 65 20 61 6c 6c 0a 20 20 20  o expire all.   
8540: 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 53     ** compiled S
8550: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 61 66  QL statements af
8560: 74 65 72 20 6d 6f 64 69 66 79 69 6e 67 20 61 20  ter modifying a 
8570: 70 72 61 67 6d 61 20 76 61 6c 75 65 2e 0a 20 20  pragma value..  
8580: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
8590: 69 74 65 33 56 64 62 65 41 64 64 4f 70 30 28 76  ite3VdbeAddOp0(v
85a0: 2c 20 4f 50 5f 45 78 70 69 72 65 29 3b 0a 20 20  , OP_Expire);.  
85b0: 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46      setAllPagerF
85c0: 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a  lags(db);.    }.
85d0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
85e0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
85f0: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
8600: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
8610: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
8620: 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20  _PRAGMAS.  /*.  
8630: 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c  **   PRAGMA tabl
8640: 65 5f 69 6e 66 6f 28 3c 74 61 62 6c 65 3e 29 0a  e_info(<table>).
8650: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
8660: 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 66 6f   a single row fo
8670: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66  r each column of
8680: 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65   the named table
8690: 2e 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  . The columns of
86a0: 0a 20 20 2a 2a 20 74 68 65 20 72 65 74 75 72 6e  .  ** the return
86b0: 65 64 20 64 61 74 61 20 73 65 74 20 61 72 65 3a  ed data set are:
86c0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63 69 64 3a 20  .  **.  ** cid: 
86d0: 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 69 64         Column id
86e0: 20 28 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d 20   (numbered from 
86f0: 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2c 20 73  left to right, s
8700: 74 61 72 74 69 6e 67 20 61 74 20 30 29 0a 20 20  tarting at 0).  
8710: 2a 2a 20 6e 61 6d 65 3a 20 20 20 20 20 20 20 43  ** name:       C
8720: 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20 20 2a 2a 20  olumn name.  ** 
8730: 74 79 70 65 3a 20 20 20 20 20 20 20 43 6f 6c 75  type:       Colu
8740: 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74  mn declaration t
8750: 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f 74 6e 75 6c  ype..  ** notnul
8760: 6c 3a 20 20 20 20 54 72 75 65 20 69 66 20 27 4e  l:    True if 'N
8770: 4f 54 20 4e 55 4c 4c 27 20 69 73 20 70 61 72 74  OT NULL' is part
8780: 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61   of column decla
8790: 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 64 66 6c 74  ration.  ** dflt
87a0: 5f 76 61 6c 75 65 3a 20 54 68 65 20 64 65 66 61  _value: The defa
87b0: 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ult value for th
87c0: 65 20 63 6f 6c 75 6d 6e 2c 20 69 66 20 61 6e 79  e column, if any
87d0: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
87e0: 61 67 54 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f  agTyp_TABLE_INFO
87f0: 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a  : if( zRight ){.
8800: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
8810: 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69  .    pTab = sqli
8820: 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 70  te3LocateTable(p
8830: 50 61 72 73 65 2c 20 4c 4f 43 41 54 45 5f 4e 4f  Parse, LOCATE_NO
8840: 45 52 52 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  ERR, zRight, zDb
8850: 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20  );.    if( pTab 
8860: 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63 20  ){.      static 
8870: 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f  const char *azCo
8880: 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20  l[] = {.        
8890: 20 22 63 69 64 22 2c 20 22 6e 61 6d 65 22 2c 20   "cid", "name", 
88a0: 22 74 79 70 65 22 2c 20 22 6e 6f 74 6e 75 6c 6c  "type", "notnull
88b0: 22 2c 20 22 64 66 6c 74 5f 76 61 6c 75 65 22 2c  ", "dflt_value",
88c0: 20 22 70 6b 22 0a 20 20 20 20 20 20 7d 3b 0a 20   "pk".      };. 
88d0: 20 20 20 20 20 69 6e 74 20 69 2c 20 6b 3b 0a 20       int i, k;. 
88e0: 20 20 20 20 20 69 6e 74 20 6e 48 69 64 64 65 6e       int nHidden
88f0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 43 6f 6c 75   = 0;.      Colu
8900: 6d 6e 20 2a 70 43 6f 6c 3b 0a 20 20 20 20 20 20  mn *pCol;.      
8910: 49 6e 64 65 78 20 2a 70 50 6b 20 3d 20 73 71 6c  Index *pPk = sql
8920: 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e  ite3PrimaryKeyIn
8930: 64 65 78 28 70 54 61 62 29 3b 0a 20 20 20 20 20  dex(pTab);.     
8940: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
8950: 36 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  6;.      sqlite3
8960: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
8970: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
8980: 20 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d       setAllColum
8990: 6e 4e 61 6d 65 73 28 76 2c 20 36 2c 20 61 7a 43  nNames(v, 6, azC
89a0: 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 36 3d 3d  ol); assert( 6==
89b0: 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29  ArraySize(azCol)
89c0: 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
89d0: 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
89e0: 6d 65 73 28 70 50 61 72 73 65 2c 20 70 54 61 62  mes(pParse, pTab
89f0: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
8a00: 2c 20 70 43 6f 6c 3d 70 54 61 62 2d 3e 61 43 6f  , pCol=pTab->aCo
8a10: 6c 3b 20 69 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b  l; i<pTab->nCol;
8a20: 20 69 2b 2b 2c 20 70 43 6f 6c 2b 2b 29 7b 0a 20   i++, pCol++){. 
8a30: 20 20 20 20 20 20 20 69 66 28 20 49 73 48 69 64         if( IsHid
8a40: 64 65 6e 43 6f 6c 75 6d 6e 28 70 43 6f 6c 29 20  denColumn(pCol) 
8a50: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6e 48 69  ){.          nHi
8a60: 64 64 65 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20  dden++;.        
8a70: 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20    continue;.    
8a80: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
8a90: 28 20 28 70 43 6f 6c 2d 3e 63 6f 6c 46 6c 61 67  ( (pCol->colFlag
8aa0: 73 20 26 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d  s & COLFLAG_PRIM
8ab0: 4b 45 59 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  KEY)==0 ){.     
8ac0: 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20       k = 0;.    
8ad0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 50      }else if( pP
8ae0: 6b 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  k==0 ){.        
8af0: 20 20 6b 20 3d 20 31 3b 0a 20 20 20 20 20 20 20    k = 1;.       
8b00: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
8b10: 20 20 66 6f 72 28 6b 3d 31 3b 20 6b 3c 3d 70 54    for(k=1; k<=pT
8b20: 61 62 2d 3e 6e 43 6f 6c 20 26 26 20 70 50 6b 2d  ab->nCol && pPk-
8b30: 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 2d 31 5d 21 3d  >aiColumn[k-1]!=
8b40: 69 3b 20 6b 2b 2b 29 7b 7d 0a 20 20 20 20 20 20  i; k++){}.      
8b50: 20 20 7d 0a 20 20 20 20 20 20 20 20 61 73 73 65    }.        asse
8b60: 72 74 28 20 70 43 6f 6c 2d 3e 70 44 66 6c 74 3d  rt( pCol->pDflt=
8b70: 3d 30 20 7c 7c 20 70 43 6f 6c 2d 3e 70 44 66 6c  =0 || pCol->pDfl
8b80: 74 2d 3e 6f 70 3d 3d 54 4b 5f 53 50 41 4e 20 29  t->op==TK_SPAN )
8b90: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
8ba0: 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76  3VdbeMultiLoad(v
8bb0: 2c 20 31 2c 20 22 69 73 73 69 73 69 22 2c 0a 20  , 1, "issisi",. 
8bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 2d                i-
8bd0: 6e 48 69 64 64 65 6e 2c 0a 20 20 20 20 20 20 20  nHidden,.       
8be0: 20 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e 7a 4e          pCol->zN
8bf0: 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ame,.           
8c00: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d      sqlite3Colum
8c10: 6e 54 79 70 65 28 70 43 6f 6c 2c 22 22 29 2c 0a  nType(pCol,""),.
8c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
8c30: 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f 20 31  Col->notNull ? 1
8c40: 20 3a 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20   : 0,.          
8c50: 20 20 20 20 20 70 43 6f 6c 2d 3e 70 44 66 6c 74       pCol->pDflt
8c60: 20 3f 20 70 43 6f 6c 2d 3e 70 44 66 6c 74 2d 3e   ? pCol->pDflt->
8c70: 75 2e 7a 54 6f 6b 65 6e 20 3a 20 30 2c 0a 20 20  u.zToken : 0,.  
8c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 29 3b               k);
8c90: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
8ca0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
8cb0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 36  _ResultRow, 1, 6
8cc0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
8cd0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20  .  }.  break;.. 
8ce0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 54   case PragTyp_ST
8cf0: 41 54 53 3a 20 7b 0a 20 20 20 20 73 74 61 74 69  ATS: {.    stati
8d00: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a  c const char *az
8d10: 43 6f 6c 5b 5d 20 3d 20 7b 20 22 74 61 62 6c 65  Col[] = { "table
8d20: 22 2c 20 22 69 6e 64 65 78 22 2c 20 22 77 69 64  ", "index", "wid
8d30: 74 68 22 2c 20 22 68 65 69 67 68 74 22 20 7d 3b  th", "height" };
8d40: 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78  .    Index *pIdx
8d50: 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a  ;.    HashElem *
8d60: 69 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74  i;.    v = sqlit
8d70: 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65  e3GetVdbe(pParse
8d80: 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  );.    pParse->n
8d90: 4d 65 6d 20 3d 20 34 3b 0a 20 20 20 20 73 71 6c  Mem = 4;.    sql
8da0: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
8db0: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
8dc0: 29 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c  );.    setAllCol
8dd0: 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 34 2c 20 61  umnNames(v, 4, a
8de0: 7a 43 6f 6c 29 3b 20 20 61 73 73 65 72 74 28 20  zCol);  assert( 
8df0: 34 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43  4==ArraySize(azC
8e00: 6f 6c 29 20 29 3b 0a 20 20 20 20 66 6f 72 28 69  ol) );.    for(i
8e10: 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
8e20: 28 26 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  (&pDb->pSchema->
8e30: 74 62 6c 48 61 73 68 29 3b 20 69 3b 20 69 3d 73  tblHash); i; i=s
8e40: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69 29  qliteHashNext(i)
8e50: 29 7b 0a 20 20 20 20 20 20 54 61 62 6c 65 20 2a  ){.      Table *
8e60: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73  pTab = sqliteHas
8e70: 68 44 61 74 61 28 69 29 3b 0a 20 20 20 20 20 20  hData(i);.      
8e80: 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69  sqlite3VdbeMulti
8e90: 4c 6f 61 64 28 76 2c 20 31 2c 20 22 73 73 69 69  Load(v, 1, "ssii
8ea0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 54  ",.           pT
8eb0: 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20  ab->zName,.     
8ec0: 20 20 20 20 20 20 30 2c 0a 20 20 20 20 20 20 20        0,.       
8ed0: 20 20 20 20 70 54 61 62 2d 3e 73 7a 54 61 62 52      pTab->szTabR
8ee0: 6f 77 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70  ow,.           p
8ef0: 54 61 62 2d 3e 6e 52 6f 77 4c 6f 67 45 73 74 29  Tab->nRowLogEst)
8f00: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
8f10: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
8f20: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29  ResultRow, 1, 4)
8f30: 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 49 64 78  ;.      for(pIdx
8f40: 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
8f50: 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
8f60: 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20  pNext){.        
8f70: 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69  sqlite3VdbeMulti
8f80: 4c 6f 61 64 28 76 2c 20 32 2c 20 22 73 69 69 22  Load(v, 2, "sii"
8f90: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 49 64  ,.           pId
8fa0: 78 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20  x->zName,.      
8fb0: 20 20 20 20 20 70 49 64 78 2d 3e 73 7a 49 64 78       pIdx->szIdx
8fc0: 52 6f 77 2c 0a 20 20 20 20 20 20 20 20 20 20 20  Row,.           
8fd0: 70 49 64 78 2d 3e 61 69 52 6f 77 4c 6f 67 45 73  pIdx->aiRowLogEs
8fe0: 74 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 73  t[0]);.        s
8ff0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
9000: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
9010: 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20 20 20 7d  , 1, 4);.      }
9020: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
9030: 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67  ak;..  case Prag
9040: 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46 4f 3a 20  Typ_INDEX_INFO: 
9050: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
9060: 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20    Index *pIdx;. 
9070: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a     Table *pTab;.
9080: 20 20 20 20 70 49 64 78 20 3d 20 73 71 6c 69 74      pIdx = sqlit
9090: 65 33 46 69 6e 64 49 6e 64 65 78 28 64 62 2c 20  e3FindIndex(db, 
90a0: 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20  zRight, zDb);.  
90b0: 20 20 69 66 28 20 70 49 64 78 20 29 7b 0a 20 20    if( pIdx ){.  
90c0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
90d0: 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d   char *azCol[] =
90e0: 20 7b 0a 20 20 20 20 20 20 20 20 20 22 73 65 71   {.         "seq
90f0: 6e 6f 22 2c 20 22 63 69 64 22 2c 20 22 6e 61 6d  no", "cid", "nam
9100: 65 22 2c 20 22 64 65 73 63 22 2c 20 22 63 6f 6c  e", "desc", "col
9110: 6c 22 2c 20 22 6b 65 79 22 0a 20 20 20 20 20 20  l", "key".      
9120: 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a  };.      int i;.
9130: 20 20 20 20 20 20 69 6e 74 20 6d 78 3b 0a 20 20        int mx;.  
9140: 20 20 20 20 69 66 28 20 70 50 72 61 67 6d 61 2d      if( pPragma-
9150: 3e 69 41 72 67 20 29 7b 0a 20 20 20 20 20 20 20  >iArg ){.       
9160: 20 2f 2a 20 50 52 41 47 4d 41 20 69 6e 64 65 78   /* PRAGMA index
9170: 5f 78 69 6e 66 6f 20 28 6e 65 77 65 72 20 76 65  _xinfo (newer ve
9180: 72 73 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65 20  rsion with more 
9190: 72 6f 77 73 20 61 6e 64 20 63 6f 6c 75 6d 6e 73  rows and columns
91a0: 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 78 20  ) */.        mx 
91b0: 3d 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b  = pIdx->nColumn;
91c0: 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d  .        pParse-
91d0: 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20  >nMem = 6;.     
91e0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
91f0: 2f 2a 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f  /* PRAGMA index_
9200: 69 6e 66 6f 20 28 6c 65 67 61 63 79 20 76 65 72  info (legacy ver
9210: 73 69 6f 6e 29 20 2a 2f 0a 20 20 20 20 20 20 20  sion) */.       
9220: 20 6d 78 20 3d 20 70 49 64 78 2d 3e 6e 4b 65 79   mx = pIdx->nKey
9230: 43 6f 6c 3b 0a 20 20 20 20 20 20 20 20 70 50 61  Col;.        pPa
9240: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20  rse->nMem = 3;. 
9250: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 54 61       }.      pTa
9260: 62 20 3d 20 70 49 64 78 2d 3e 70 54 61 62 6c 65  b = pIdx->pTable
9270: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 43  ;.      sqlite3C
9280: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
9290: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
92a0: 20 20 20 20 61 73 73 65 72 74 28 20 70 50 61 72      assert( pPar
92b0: 73 65 2d 3e 6e 4d 65 6d 3c 3d 41 72 72 61 79 53  se->nMem<=ArrayS
92c0: 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20  ize(azCol) );.  
92d0: 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e      setAllColumn
92e0: 4e 61 6d 65 73 28 76 2c 20 70 50 61 72 73 65 2d  Names(v, pParse-
92f0: 3e 6e 4d 65 6d 2c 20 61 7a 43 6f 6c 29 3b 0a 20  >nMem, azCol);. 
9300: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
9310: 6d 78 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  mx; i++){.      
9320: 20 20 69 31 36 20 63 6e 75 6d 20 3d 20 70 49 64    i16 cnum = pId
9330: 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69 5d 3b 0a  x->aiColumn[i];.
9340: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
9350: 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28 76 2c 20  dbeMultiLoad(v, 
9360: 31 2c 20 22 69 69 73 22 2c 20 69 2c 20 63 6e 75  1, "iis", i, cnu
9370: 6d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m,.             
9380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9390: 63 6e 75 6d 3c 30 20 3f 20 30 20 3a 20 70 54 61  cnum<0 ? 0 : pTa
93a0: 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e  b->aCol[cnum].zN
93b0: 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 69 66  ame);.        if
93c0: 28 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 20  ( pPragma->iArg 
93d0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
93e0: 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61  ite3VdbeMultiLoa
93f0: 64 28 76 2c 20 34 2c 20 22 69 73 69 22 2c 0a 20  d(v, 4, "isi",. 
9400: 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d             pIdx-
9410: 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 2c 0a  >aSortOrder[i],.
9420: 20 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78              pIdx
9430: 2d 3e 61 7a 43 6f 6c 6c 5b 69 5d 2c 0a 20 20 20  ->azColl[i],.   
9440: 20 20 20 20 20 20 20 20 20 69 3c 70 49 64 78 2d           i<pIdx-
9450: 3e 6e 4b 65 79 43 6f 6c 29 3b 0a 20 20 20 20 20  >nKeyCol);.     
9460: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c     }.        sql
9470: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
9480: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
9490: 31 2c 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 29  1, pParse->nMem)
94a0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
94b0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
94c0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44  case PragTyp_IND
94d0: 45 58 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52 69  EX_LIST: if( zRi
94e0: 67 68 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78  ght ){.    Index
94f0: 20 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c   *pIdx;.    Tabl
9500: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 69 6e 74  e *pTab;.    int
9510: 20 69 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73   i;.    pTab = s
9520: 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
9530: 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  db, zRight, zDb)
9540: 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20 29  ;.    if( pTab )
9550: 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  {.      static c
9560: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 43 6f 6c  onst char *azCol
9570: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 22  [] = {.        "
9580: 73 65 71 22 2c 20 22 6e 61 6d 65 22 2c 20 22 75  seq", "name", "u
9590: 6e 69 71 75 65 22 2c 20 22 6f 72 69 67 69 6e 22  nique", "origin"
95a0: 2c 20 22 70 61 72 74 69 61 6c 22 0a 20 20 20 20  , "partial".    
95b0: 20 20 7d 3b 0a 20 20 20 20 20 20 76 20 3d 20 73    };.      v = s
95c0: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
95d0: 61 72 73 65 29 3b 0a 20 20 20 20 20 20 70 50 61  arse);.      pPa
95e0: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 35 3b 0a 20  rse->nMem = 5;. 
95f0: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65       sqlite3Code
9600: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
9610: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  rse, iDb);.     
9620: 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d   setAllColumnNam
9630: 65 73 28 76 2c 20 35 2c 20 61 7a 43 6f 6c 29 3b  es(v, 5, azCol);
9640: 20 20 61 73 73 65 72 74 28 20 35 3d 3d 41 72 72    assert( 5==Arr
9650: 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b  aySize(azCol) );
9660: 0a 20 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d  .      for(pIdx=
9670: 70 54 61 62 2d 3e 70 49 6e 64 65 78 2c 20 69 3d  pTab->pIndex, i=
9680: 30 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  0; pIdx; pIdx=pI
9690: 64 78 2d 3e 70 4e 65 78 74 2c 20 69 2b 2b 29 7b  dx->pNext, i++){
96a0: 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63  .        const c
96b0: 68 61 72 20 2a 61 7a 4f 72 69 67 69 6e 5b 5d 20  har *azOrigin[] 
96c0: 3d 20 7b 20 22 63 22 2c 20 22 75 22 2c 20 22 70  = { "c", "u", "p
96d0: 6b 22 20 7d 3b 0a 20 20 20 20 20 20 20 20 73 71  k" };.        sq
96e0: 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f  lite3VdbeMultiLo
96f0: 61 64 28 76 2c 20 31 2c 20 22 69 73 69 73 69 22  ad(v, 1, "isisi"
9700: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 69 2c 0a  ,.           i,.
9710: 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d             pIdx-
9720: 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  >zName,.        
9730: 20 20 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78     IsUniqueIndex
9740: 28 70 49 64 78 29 2c 0a 20 20 20 20 20 20 20 20  (pIdx),.        
9750: 20 20 20 61 7a 4f 72 69 67 69 6e 5b 70 49 64 78     azOrigin[pIdx
9760: 2d 3e 69 64 78 54 79 70 65 5d 2c 0a 20 20 20 20  ->idxType],.    
9770: 20 20 20 20 20 20 20 70 49 64 78 2d 3e 70 50 61         pIdx->pPa
9780: 72 74 49 64 78 57 68 65 72 65 21 3d 30 29 3b 0a  rtIdxWhere!=0);.
9790: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
97a0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
97b0: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 35 29  ResultRow, 1, 5)
97c0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
97d0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
97e0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 44 41 54  case PragTyp_DAT
97f0: 41 42 41 53 45 5f 4c 49 53 54 3a 20 7b 0a 20 20  ABASE_LIST: {.  
9800: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
9810: 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b  har *azCol[] = {
9820: 20 22 73 65 71 22 2c 20 22 6e 61 6d 65 22 2c 20   "seq", "name", 
9830: 22 66 69 6c 65 22 20 7d 3b 0a 20 20 20 20 69 6e  "file" };.    in
9840: 74 20 69 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  t i;.    pParse-
9850: 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73  >nMem = 3;.    s
9860: 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73  etAllColumnNames
9870: 28 76 2c 20 33 2c 20 61 7a 43 6f 6c 29 3b 20 61  (v, 3, azCol); a
9880: 73 73 65 72 74 28 20 33 3d 3d 41 72 72 61 79 53  ssert( 3==ArrayS
9890: 69 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20  ize(azCol) );.  
98a0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d    for(i=0; i<db-
98b0: 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nDb; i++){.    
98c0: 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d    if( db->aDb[i]
98d0: 2e 70 42 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  .pBt==0 ) contin
98e0: 75 65 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  ue;.      assert
98f0: 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  ( db->aDb[i].zNa
9900: 6d 65 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 73  me!=0 );.      s
9910: 71 6c 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c  qlite3VdbeMultiL
9920: 6f 61 64 28 76 2c 20 31 2c 20 22 69 73 73 22 2c  oad(v, 1, "iss",
9930: 0a 20 20 20 20 20 20 20 20 20 69 2c 0a 20 20 20  .         i,.   
9940: 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 5d        db->aDb[i]
9950: 2e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  .zName,.        
9960: 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
9970: 46 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44 62  Filename(db->aDb
9980: 5b 69 5d 2e 70 42 74 29 29 3b 0a 20 20 20 20 20  [i].pBt));.     
9990: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
99a0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
99b0: 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20 7d  ow, 1, 3);.    }
99c0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20  .  }.  break;.. 
99d0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f   case PragTyp_CO
99e0: 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54 3a 20 7b 0a  LLATION_LIST: {.
99f0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
9a00: 20 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d   char *azCol[] =
9a10: 20 7b 20 22 73 65 71 22 2c 20 22 6e 61 6d 65 22   { "seq", "name"
9a20: 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20   };.    int i = 
9a30: 30 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20  0;.    HashElem 
9a40: 2a 70 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  *p;.    pParse->
9a50: 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73 65  nMem = 2;.    se
9a60: 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  tAllColumnNames(
9a70: 76 2c 20 32 2c 20 61 7a 43 6f 6c 29 3b 20 61 73  v, 2, azCol); as
9a80: 73 65 72 74 28 20 32 3d 3d 41 72 72 61 79 53 69  sert( 2==ArraySi
9a90: 7a 65 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20  ze(azCol) );.   
9aa0: 20 66 6f 72 28 70 3d 73 71 6c 69 74 65 48 61 73   for(p=sqliteHas
9ab0: 68 46 69 72 73 74 28 26 64 62 2d 3e 61 43 6f 6c  hFirst(&db->aCol
9ac0: 6c 53 65 71 29 3b 20 70 3b 20 70 3d 73 71 6c 69  lSeq); p; p=sqli
9ad0: 74 65 48 61 73 68 4e 65 78 74 28 70 29 29 7b 0a  teHashNext(p)){.
9ae0: 20 20 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70        CollSeq *p
9af0: 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65 71 20  Coll = (CollSeq 
9b00: 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  *)sqliteHashData
9b10: 28 70 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  (p);.      sqlit
9b20: 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61 64 28  e3VdbeMultiLoad(
9b30: 76 2c 20 31 2c 20 22 69 73 22 2c 20 69 2b 2b 2c  v, 1, "is", i++,
9b40: 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 29 3b 0a   pColl->zName);.
9b50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9b60: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
9b70: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a  sultRow, 1, 2);.
9b80: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
9b90: 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
9ba0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
9bb0: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e  PRAGMAS */..#ifn
9bc0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
9bd0: 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 63 61  FOREIGN_KEY.  ca
9be0: 73 65 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49  se PragTyp_FOREI
9bf0: 47 4e 5f 4b 45 59 5f 4c 49 53 54 3a 20 69 66 28  GN_KEY_LIST: if(
9c00: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 46   zRight ){.    F
9c10: 4b 65 79 20 2a 70 46 4b 3b 0a 20 20 20 20 54 61  Key *pFK;.    Ta
9c20: 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70  ble *pTab;.    p
9c30: 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  Tab = sqlite3Fin
9c40: 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68  dTable(db, zRigh
9c50: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28  t, zDb);.    if(
9c60: 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76   pTab ){.      v
9c70: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62   = sqlite3GetVdb
9c80: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  e(pParse);.     
9c90: 20 70 46 4b 20 3d 20 70 54 61 62 2d 3e 70 46 4b   pFK = pTab->pFK
9ca0: 65 79 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46  ey;.      if( pF
9cb0: 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73 74 61  K ){.        sta
9cc0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
9cd0: 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 0a 20 20 20 20  azCol[] = {.    
9ce0: 20 20 20 20 20 20 20 22 69 64 22 2c 20 22 73 65         "id", "se
9cf0: 71 22 2c 20 22 74 61 62 6c 65 22 2c 20 22 66 72  q", "table", "fr
9d00: 6f 6d 22 2c 20 22 74 6f 22 2c 20 22 6f 6e 5f 75  om", "to", "on_u
9d10: 70 64 61 74 65 22 2c 20 22 6f 6e 5f 64 65 6c 65  pdate", "on_dele
9d20: 74 65 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  te",.           
9d30: 22 6d 61 74 63 68 22 0a 20 20 20 20 20 20 20 20  "match".        
9d40: 7d 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  };.        int i
9d50: 20 3d 20 30 3b 20 0a 20 20 20 20 20 20 20 20 70   = 0; .        p
9d60: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 38 3b  Parse->nMem = 8;
9d70: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9d80: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
9d90: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
9da0: 20 20 20 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c         setAllCol
9db0: 75 6d 6e 4e 61 6d 65 73 28 76 2c 20 38 2c 20 61  umnNames(v, 8, a
9dc0: 7a 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 38  zCol); assert( 8
9dd0: 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f  ==ArraySize(azCo
9de0: 6c 29 20 29 3b 0a 20 20 20 20 20 20 20 20 77 68  l) );.        wh
9df0: 69 6c 65 28 70 46 4b 29 7b 0a 20 20 20 20 20 20  ile(pFK){.      
9e00: 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20      int j;.     
9e10: 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c       for(j=0; j<
9e20: 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b  pFK->nCol; j++){
9e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
9e40: 69 74 65 33 56 64 62 65 4d 75 6c 74 69 4c 6f 61  ite3VdbeMultiLoa
9e50: 64 28 76 2c 20 31 2c 20 22 69 69 73 73 73 73 73  d(v, 1, "iisssss
9e60: 73 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  s",.            
9e70: 20 20 20 20 20 20 20 69 2c 0a 20 20 20 20 20 20         i,.      
9e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 6a 2c 0a               j,.
9e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ea0: 20 20 20 70 46 4b 2d 3e 7a 54 6f 2c 0a 20 20 20     pFK->zTo,.   
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ec0: 70 54 61 62 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e  pTab->aCol[pFK->
9ed0: 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a  aCol[j].iFrom].z
9ee0: 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
9ef0: 20 20 20 20 20 20 20 20 20 70 46 4b 2d 3e 61 43           pFK->aC
9f00: 6f 6c 5b 6a 5d 2e 7a 43 6f 6c 2c 0a 20 20 20 20  ol[j].zCol,.    
9f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
9f20: 63 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61  ctionName(pFK->a
9f30: 41 63 74 69 6f 6e 5b 31 5d 29 2c 20 20 2f 2a 20  Action[1]),  /* 
9f40: 4f 4e 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 20  ON UPDATE */.   
9f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f60: 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e  actionName(pFK->
9f70: 61 41 63 74 69 6f 6e 5b 30 5d 29 2c 20 20 2f 2a  aAction[0]),  /*
9f80: 20 4f 4e 20 44 45 4c 45 54 45 20 2a 2f 0a 20 20   ON DELETE */.  
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fa0: 20 22 4e 4f 4e 45 22 29 3b 0a 20 20 20 20 20 20   "NONE");.      
9fb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9fc0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
9fd0: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 38 29 3b 0a  sultRow, 1, 8);.
9fe0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
9ff0: 20 20 20 20 20 20 2b 2b 69 3b 0a 20 20 20 20 20        ++i;.     
a000: 20 20 20 20 20 70 46 4b 20 3d 20 70 46 4b 2d 3e       pFK = pFK->
a010: 70 4e 65 78 74 46 72 6f 6d 3b 0a 20 20 20 20 20  pNextFrom;.     
a020: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
a030: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
a040: 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
a050: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
a060: 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a  OREIGN_KEY) */..
a070: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
a080: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
a090: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
a0a0: 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 63 61  MIT_TRIGGER.  ca
a0b0: 73 65 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49  se PragTyp_FOREI
a0c0: 47 4e 5f 4b 45 59 5f 43 48 45 43 4b 3a 20 7b 0a  GN_KEY_CHECK: {.
a0d0: 20 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b 20 20      FKey *pFK;  
a0e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
a0f0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
a100: 74 72 61 69 6e 74 20 2a 2f 0a 20 20 20 20 54 61  traint */.    Ta
a110: 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
a120: 20 20 20 20 20 2f 2a 20 43 68 69 6c 64 20 74 61       /* Child ta
a130: 62 6c 65 20 63 6f 6e 74 61 69 6e 20 22 52 45 46  ble contain "REF
a140: 45 52 45 4e 43 45 53 22 20 6b 65 79 77 6f 72 64  ERENCES" keyword
a150: 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
a160: 50 61 72 65 6e 74 3b 20 20 20 20 20 20 20 20 2f  Parent;        /
a170: 2a 20 50 61 72 65 6e 74 20 74 61 62 6c 65 20 74  * Parent table t
a180: 68 61 74 20 63 68 69 6c 64 20 70 6f 69 6e 74 73  hat child points
a190: 20 74 6f 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78   to */.    Index
a1a0: 20 2a 70 49 64 78 3b 20 20 20 20 20 20 20 20 20   *pIdx;         
a1b0: 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 74 68    /* Index in th
a1c0: 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20 2a  e parent table *
a1d0: 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20  /.    int i;    
a1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a1f0: 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 46  Loop counter:  F
a200: 6f 72 65 69 67 6e 20 6b 65 79 20 6e 75 6d 62 65  oreign key numbe
a210: 72 20 66 6f 72 20 70 54 61 62 20 2a 2f 0a 20 20  r for pTab */.  
a220: 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20    int j;        
a230: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
a240: 20 63 6f 75 6e 74 65 72 3a 20 20 46 69 65 6c 64   counter:  Field
a250: 20 6f 66 20 74 68 65 20 66 6f 72 65 69 67 6e 20   of the foreign 
a260: 6b 65 79 20 2a 2f 0a 20 20 20 20 48 61 73 68 45  key */.    HashE
a270: 6c 65 6d 20 2a 6b 3b 20 20 20 20 20 20 20 20 20  lem *k;         
a280: 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
a290: 72 3a 20 20 4e 65 78 74 20 74 61 62 6c 65 20 69  r:  Next table i
a2a0: 6e 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 20 20  n schema */.    
a2b0: 69 6e 74 20 78 3b 20 20 20 20 20 20 20 20 20 20  int x;          
a2c0: 20 20 20 20 20 20 20 2f 2a 20 72 65 73 75 6c 74         /* result
a2d0: 20 76 61 72 69 61 62 6c 65 20 2a 2f 0a 20 20 20   variable */.   
a2e0: 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20   int regResult; 
a2f0: 20 20 20 20 20 20 20 20 2f 2a 20 33 20 72 65 67          /* 3 reg
a300: 69 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61  isters to hold a
a310: 20 72 65 73 75 6c 74 20 72 6f 77 20 2a 2f 0a 20   result row */. 
a320: 20 20 20 69 6e 74 20 72 65 67 4b 65 79 3b 20 20     int regKey;  
a330: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
a340: 69 73 74 65 72 20 74 6f 20 68 6f 6c 64 20 6b 65  ister to hold ke
a350: 79 20 66 6f 72 20 63 68 65 63 6b 69 6e 67 20 74  y for checking t
a360: 68 65 20 46 4b 20 2a 2f 0a 20 20 20 20 69 6e 74  he FK */.    int
a370: 20 72 65 67 52 6f 77 3b 20 20 20 20 20 20 20 20   regRow;        
a380: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73      /* Registers
a390: 20 74 6f 20 68 6f 6c 64 20 61 20 72 6f 77 20 66   to hold a row f
a3a0: 72 6f 6d 20 70 54 61 62 20 2a 2f 0a 20 20 20 20  rom pTab */.    
a3b0: 69 6e 74 20 61 64 64 72 54 6f 70 3b 20 20 20 20  int addrTop;    
a3c0: 20 20 20 20 20 20 20 2f 2a 20 54 6f 70 20 6f 66         /* Top of
a3d0: 20 61 20 6c 6f 6f 70 20 63 68 65 63 6b 69 6e 67   a loop checking
a3e0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 2a 2f   foreign keys */
a3f0: 0a 20 20 20 20 69 6e 74 20 61 64 64 72 4f 6b 3b  .    int addrOk;
a400: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a              /* J
a410: 75 6d 70 20 68 65 72 65 20 69 66 20 74 68 65 20  ump here if the 
a420: 6b 65 79 20 69 73 20 4f 4b 20 2a 2f 0a 20 20 20  key is OK */.   
a430: 20 69 6e 74 20 2a 61 69 43 6f 6c 73 3b 20 20 20   int *aiCols;   
a440: 20 20 20 20 20 20 20 20 2f 2a 20 63 68 69 6c 64          /* child
a450: 20 74 6f 20 70 61 72 65 6e 74 20 63 6f 6c 75 6d   to parent colum
a460: 6e 20 6d 61 70 70 69 6e 67 20 2a 2f 0a 20 20 20  n mapping */.   
a470: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
a480: 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20  ar *azCol[] = { 
a490: 22 74 61 62 6c 65 22 2c 20 22 72 6f 77 69 64 22  "table", "rowid"
a4a0: 2c 20 22 70 61 72 65 6e 74 22 2c 20 22 66 6b 69  , "parent", "fki
a4b0: 64 22 20 7d 3b 0a 0a 20 20 20 20 72 65 67 52 65  d" };..    regRe
a4c0: 73 75 6c 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e  sult = pParse->n
a4d0: 4d 65 6d 2b 31 3b 0a 20 20 20 20 70 50 61 72 73  Mem+1;.    pPars
a4e0: 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20  e->nMem += 4;.  
a4f0: 20 20 72 65 67 4b 65 79 20 3d 20 2b 2b 70 50 61    regKey = ++pPa
a500: 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72  rse->nMem;.    r
a510: 65 67 52 6f 77 20 3d 20 2b 2b 70 50 61 72 73 65  egRow = ++pParse
a520: 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 76 20 3d 20  ->nMem;.    v = 
a530: 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70  sqlite3GetVdbe(p
a540: 50 61 72 73 65 29 3b 0a 20 20 20 20 73 65 74 41  Parse);.    setA
a550: 6c 6c 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 76 2c  llColumnNames(v,
a560: 20 34 2c 20 61 7a 43 6f 6c 29 3b 20 61 73 73 65   4, azCol); asse
a570: 72 74 28 20 34 3d 3d 41 72 72 61 79 53 69 7a 65  rt( 4==ArraySize
a580: 28 61 7a 43 6f 6c 29 20 29 3b 0a 20 20 20 20 73  (azCol) );.    s
a590: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
a5a0: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
a5b0: 44 62 29 3b 0a 20 20 20 20 6b 20 3d 20 73 71 6c  Db);.    k = sql
a5c0: 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62  iteHashFirst(&db
a5d0: 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 53 63 68 65  ->aDb[iDb].pSche
a5e0: 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 0a 20 20  ma->tblHash);.  
a5f0: 20 20 77 68 69 6c 65 28 20 6b 20 29 7b 0a 20 20    while( k ){.  
a600: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
a610: 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62 20 3d  {.        pTab =
a620: 20 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61   sqlite3LocateTa
a630: 62 6c 65 28 70 50 61 72 73 65 2c 20 30 2c 20 7a  ble(pParse, 0, z
a640: 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20  Right, zDb);.   
a650: 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20       k = 0;.    
a660: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
a670: 20 70 54 61 62 20 3d 20 28 54 61 62 6c 65 2a 29   pTab = (Table*)
a680: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 6b  sqliteHashData(k
a690: 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 73  );.        k = s
a6a0: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 6b 29  qliteHashNext(k)
a6b0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
a6c0: 69 66 28 20 70 54 61 62 3d 3d 30 20 7c 7c 20 70  if( pTab==0 || p
a6d0: 54 61 62 2d 3e 70 46 4b 65 79 3d 3d 30 20 29 20  Tab->pFKey==0 ) 
a6e0: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
a6f0: 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
a700: 28 70 50 61 72 73 65 2c 20 69 44 62 2c 20 70 54  (pParse, iDb, pT
a710: 61 62 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 54 61  ab->tnum, 0, pTa
a720: 62 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  b->zName);.     
a730: 20 69 66 28 20 70 54 61 62 2d 3e 6e 43 6f 6c 2b   if( pTab->nCol+
a740: 72 65 67 52 6f 77 3e 70 50 61 72 73 65 2d 3e 6e  regRow>pParse->n
a750: 4d 65 6d 20 29 20 70 50 61 72 73 65 2d 3e 6e 4d  Mem ) pParse->nM
a760: 65 6d 20 3d 20 70 54 61 62 2d 3e 6e 43 6f 6c 20  em = pTab->nCol 
a770: 2b 20 72 65 67 52 6f 77 3b 0a 20 20 20 20 20 20  + regRow;.      
a780: 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
a790: 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 2c  (pParse, 0, iDb,
a7a0: 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65   pTab, OP_OpenRe
a7b0: 61 64 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ad);.      sqlit
a7c0: 65 33 56 64 62 65 4c 6f 61 64 53 74 72 69 6e 67  e3VdbeLoadString
a7d0: 28 76 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 70  (v, regResult, p
a7e0: 54 61 62 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20  Tab->zName);.   
a7f0: 20 20 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d     for(i=1, pFK=
a800: 70 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b  pTab->pFKey; pFK
a810: 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e  ; i++, pFK=pFK->
a820: 70 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20  pNextFrom){.    
a830: 20 20 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71      pParent = sq
a840: 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64  lite3FindTable(d
a850: 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62  b, pFK->zTo, zDb
a860: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
a870: 50 61 72 65 6e 74 3d 3d 30 20 29 20 63 6f 6e 74  Parent==0 ) cont
a880: 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 70 49  inue;.        pI
a890: 64 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  dx = 0;.        
a8a0: 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
a8b0: 28 70 50 61 72 73 65 2c 20 69 44 62 2c 20 70 50  (pParse, iDb, pP
a8c0: 61 72 65 6e 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20  arent->tnum, 0, 
a8d0: 70 50 61 72 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b  pParent->zName);
a8e0: 0a 20 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c  .        x = sql
a8f0: 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
a900: 78 28 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e  x(pParse, pParen
a910: 74 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 30  t, pFK, &pIdx, 0
a920: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 78  );.        if( x
a930: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
a940: 20 69 66 28 20 70 49 64 78 3d 3d 30 20 29 7b 0a   if( pIdx==0 ){.
a950: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
a960: 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61  te3OpenTable(pPa
a970: 72 73 65 2c 20 69 2c 20 69 44 62 2c 20 70 50 61  rse, i, iDb, pPa
a980: 72 65 6e 74 2c 20 4f 50 5f 4f 70 65 6e 52 65 61  rent, OP_OpenRea
a990: 64 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65  d);.          }e
a9a0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
a9b0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
a9c0: 70 33 28 76 2c 20 4f 50 5f 4f 70 65 6e 52 65 61  p3(v, OP_OpenRea
a9d0: 64 2c 20 69 2c 20 70 49 64 78 2d 3e 74 6e 75 6d  d, i, pIdx->tnum
a9e0: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20  , iDb);.        
a9f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
aa00: 65 74 50 34 4b 65 79 49 6e 66 6f 28 70 50 61 72  etP4KeyInfo(pPar
aa10: 73 65 2c 20 70 49 64 78 29 3b 0a 20 20 20 20 20  se, pIdx);.     
aa20: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
aa30: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
aa40: 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  k = 0;.         
aa50: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
aa60: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
aa70: 61 73 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e  assert( pParse->
aa80: 6e 45 72 72 3e 30 20 7c 7c 20 70 46 4b 3d 3d 30  nErr>0 || pFK==0
aa90: 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46   );.      if( pF
aaa0: 4b 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  K ) break;.     
aab0: 20 69 66 28 20 70 50 61 72 73 65 2d 3e 6e 54 61   if( pParse->nTa
aac0: 62 3c 69 20 29 20 70 50 61 72 73 65 2d 3e 6e 54  b<i ) pParse->nT
aad0: 61 62 20 3d 20 69 3b 0a 20 20 20 20 20 20 61 64  ab = i;.      ad
aae0: 64 72 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56  drTop = sqlite3V
aaf0: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
ab00: 52 65 77 69 6e 64 2c 20 30 29 3b 20 56 64 62 65  Rewind, 0); Vdbe
ab10: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
ab20: 20 20 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d     for(i=1, pFK=
ab30: 70 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b  pTab->pFKey; pFK
ab40: 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e  ; i++, pFK=pFK->
ab50: 70 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20  pNextFrom){.    
ab60: 20 20 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71      pParent = sq
ab70: 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64  lite3FindTable(d
ab80: 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62  b, pFK->zTo, zDb
ab90: 29 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20  );.        pIdx 
aba0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 61 69 43  = 0;.        aiC
abb0: 6f 6c 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ols = 0;.       
abc0: 20 69 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a   if( pParent ){.
abd0: 20 20 20 20 20 20 20 20 20 20 78 20 3d 20 73 71            x = sq
abe0: 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
abf0: 65 78 28 70 50 61 72 73 65 2c 20 70 50 61 72 65  ex(pParse, pPare
ac00: 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20  nt, pFK, &pIdx, 
ac10: 26 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20  &aiCols);.      
ac20: 20 20 20 20 61 73 73 65 72 74 28 20 78 3d 3d 30      assert( x==0
ac30: 20 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   );.        }.  
ac40: 20 20 20 20 20 20 61 64 64 72 4f 6b 20 3d 20 73        addrOk = s
ac50: 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61  qlite3VdbeMakeLa
ac60: 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20  bel(v);.        
ac70: 69 66 28 20 70 50 61 72 65 6e 74 20 26 26 20 70  if( pParent && p
ac80: 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Idx==0 ){.      
ac90: 20 20 20 20 69 6e 74 20 69 4b 65 79 20 3d 20 70      int iKey = p
aca0: 46 4b 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f  FK->aCol[0].iFro
acb0: 6d 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  m;.          ass
acc0: 65 72 74 28 20 69 4b 65 79 3e 3d 30 20 26 26 20  ert( iKey>=0 && 
acd0: 69 4b 65 79 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20  iKey<pTab->nCol 
ace0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
acf0: 20 69 4b 65 79 21 3d 70 54 61 62 2d 3e 69 50 4b   iKey!=pTab->iPK
ad00: 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ey ){.          
ad10: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ad20: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e  Op3(v, OP_Column
ad30: 2c 20 30 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f  , 0, iKey, regRo
ad40: 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  w);.            
ad50: 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66  sqlite3ColumnDef
ad60: 61 75 6c 74 28 76 2c 20 70 54 61 62 2c 20 69 4b  ault(v, pTab, iK
ad70: 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20  ey, regRow);.   
ad80: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
ad90: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
ada0: 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2c  _IsNull, regRow,
adb0: 20 61 64 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f   addrOk); VdbeCo
adc0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
add0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
ade0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
adf0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
ae00: 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 6f 77  Rowid, 0, regRow
ae10: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
ae20: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
ae30: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
ae40: 5f 53 65 65 6b 52 6f 77 69 64 2c 20 69 2c 20 30  _SeekRowid, i, 0
ae50: 2c 20 72 65 67 52 6f 77 29 3b 20 56 64 62 65 43  , regRow); VdbeC
ae60: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
ae70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ae80: 65 47 6f 74 6f 28 76 2c 20 61 64 64 72 4f 6b 29  eGoto(v, addrOk)
ae90: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
aea0: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
aeb0: 76 2c 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  v, sqlite3VdbeCu
aec0: 72 72 65 6e 74 41 64 64 72 28 76 29 2d 32 29 3b  rrentAddr(v)-2);
aed0: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
aee0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d            for(j=
aef0: 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20  0; j<pFK->nCol; 
af00: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
af10: 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64    sqlite3ExprCod
af20: 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
af30: 65 28 76 2c 20 70 54 61 62 2c 20 30 2c 0a 20 20  e(v, pTab, 0,.  
af40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af50: 20 20 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73            aiCols
af60: 20 3f 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70   ? aiCols[j] : p
af70: 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f  FK->aCol[j].iFro
af80: 6d 2c 20 72 65 67 52 6f 77 2b 6a 29 3b 0a 20 20  m, regRow+j);.  
af90: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
afa0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
afb0: 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77  P_IsNull, regRow
afc0: 2b 6a 2c 20 61 64 64 72 4f 6b 29 3b 20 56 64 62  +j, addrOk); Vdb
afd0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
afe0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
aff0: 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 20      if( pParent 
b000: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ){.            s
b010: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
b020: 28 76 2c 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  (v, OP_MakeRecor
b030: 64 2c 20 72 65 67 52 6f 77 2c 20 70 46 4b 2d 3e  d, regRow, pFK->
b040: 6e 43 6f 6c 2c 20 72 65 67 4b 65 79 2c 0a 20 20  nCol, regKey,.  
b050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b060: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
b070: 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
b080: 53 74 72 28 64 62 2c 70 49 64 78 29 2c 20 70 46  Str(db,pIdx), pF
b090: 4b 2d 3e 6e 43 6f 6c 29 3b 0a 20 20 20 20 20 20  K->nCol);.      
b0a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b0b0: 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50  eAddOp4Int(v, OP
b0c0: 5f 46 6f 75 6e 64 2c 20 69 2c 20 61 64 64 72 4f  _Found, i, addrO
b0d0: 6b 2c 20 72 65 67 4b 65 79 2c 20 30 29 3b 0a 20  k, regKey, 0);. 
b0e0: 20 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43             VdbeC
b0f0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
b100: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
b110: 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  }.        sqlite
b120: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
b130: 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52  P_Rowid, 0, regR
b140: 65 73 75 6c 74 2b 31 29 3b 0a 20 20 20 20 20 20  esult+1);.      
b150: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c    sqlite3VdbeMul
b160: 74 69 4c 6f 61 64 28 76 2c 20 72 65 67 52 65 73  tiLoad(v, regRes
b170: 75 6c 74 2b 32 2c 20 22 73 69 22 2c 20 70 46 4b  ult+2, "si", pFK
b180: 2d 3e 7a 54 6f 2c 20 69 2d 31 29 3b 0a 20 20 20  ->zTo, i-1);.   
b190: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b1a0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
b1b0: 75 6c 74 52 6f 77 2c 20 72 65 67 52 65 73 75 6c  ultRow, regResul
b1c0: 74 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20 73  t, 4);.        s
b1d0: 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c 76  qlite3VdbeResolv
b1e0: 65 4c 61 62 65 6c 28 76 2c 20 61 64 64 72 4f 6b  eLabel(v, addrOk
b1f0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
b200: 65 33 44 62 46 72 65 65 28 64 62 2c 20 61 69 43  e3DbFree(db, aiC
b210: 6f 6c 73 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ols);.      }.  
b220: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
b230: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74  ddOp2(v, OP_Next
b240: 2c 20 30 2c 20 61 64 64 72 54 6f 70 2b 31 29 3b  , 0, addrTop+1);
b250: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
b260: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
b270: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
b280: 64 64 72 54 6f 70 29 3b 0a 20 20 20 20 7d 0a 20  ddrTop);.    }. 
b290: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
b2a0: 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
b2b0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
b2c0: 45 52 29 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a  ER) */.#endif /*
b2d0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
b2e0: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
b2f0: 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 4e  Y) */..#ifndef N
b300: 44 45 42 55 47 0a 20 20 63 61 73 65 20 50 72 61  DEBUG.  case Pra
b310: 67 54 79 70 5f 50 41 52 53 45 52 5f 54 52 41 43  gTyp_PARSER_TRAC
b320: 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  E: {.    if( zRi
b330: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ght ){.      if(
b340: 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
b350: 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20 29 7b  an(zRight, 0) ){
b360: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
b370: 50 61 72 73 65 72 54 72 61 63 65 28 73 74 64 6f  ParserTrace(stdo
b380: 75 74 2c 20 22 70 61 72 73 65 72 3a 20 22 29 3b  ut, "parser: ");
b390: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
b3a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 72        sqlite3Par
b3b0: 73 65 72 54 72 61 63 65 28 30 2c 20 30 29 3b 0a  serTrace(0, 0);.
b3c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
b3d0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
b3e0: 66 0a 0a 20 20 2f 2a 20 52 65 69 6e 73 74 61 6c  f..  /* Reinstal
b3f0: 6c 20 74 68 65 20 4c 49 4b 45 20 61 6e 64 20 47  l the LIKE and G
b400: 4c 4f 42 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20  LOB functions.  
b410: 54 68 65 20 76 61 72 69 61 6e 74 20 6f 66 20 4c  The variant of L
b420: 49 4b 45 0a 20 20 2a 2a 20 75 73 65 64 20 77 69  IKE.  ** used wi
b430: 6c 6c 20 62 65 20 63 61 73 65 20 73 65 6e 73 69  ll be case sensi
b440: 74 69 76 65 20 6f 72 20 6e 6f 74 20 64 65 70 65  tive or not depe
b450: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 52 48 53  nding on the RHS
b460: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
b470: 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53 49  agTyp_CASE_SENSI
b480: 54 49 56 45 5f 4c 49 4b 45 3a 20 7b 0a 20 20 20  TIVE_LIKE: {.   
b490: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
b4a0: 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 67 69       sqlite3Regi
b4b0: 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  sterLikeFunction
b4c0: 73 28 64 62 2c 20 73 71 6c 69 74 65 33 47 65 74  s(db, sqlite3Get
b4d0: 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20  Boolean(zRight, 
b4e0: 30 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  0));.    }.  }. 
b4f0: 20 62 72 65 61 6b 3b 0a 0a 23 69 66 6e 64 65 66   break;..#ifndef
b500: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54   SQLITE_INTEGRIT
b510: 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41  Y_CHECK_ERROR_MA
b520: 58 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  X.# define SQLIT
b530: 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  E_INTEGRITY_CHEC
b540: 4b 5f 45 52 52 4f 52 5f 4d 41 58 20 31 30 30 0a  K_ERROR_MAX 100.
b550: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
b560: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
b570: 47 52 49 54 59 5f 43 48 45 43 4b 0a 20 20 2f 2a  GRITY_CHECK.  /*
b580: 20 50 72 61 67 6d 61 20 22 71 75 69 63 6b 5f 63   Pragma "quick_c
b590: 68 65 63 6b 22 20 69 73 20 72 65 64 75 63 65 64  heck" is reduced
b5a0: 20 76 65 72 73 69 6f 6e 20 6f 66 20 0a 20 20 2a   version of .  *
b5b0: 2a 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  * integrity_chec
b5c0: 6b 20 64 65 73 69 67 6e 65 64 20 74 6f 20 64 65  k designed to de
b5d0: 74 65 63 74 20 6d 6f 73 74 20 64 61 74 61 62 61  tect most databa
b5e0: 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 0a 20 20  se corruption.  
b5f0: 2a 2a 20 77 69 74 68 6f 75 74 20 6d 6f 73 74 20  ** without most 
b600: 6f 66 20 74 68 65 20 6f 76 65 72 68 65 61 64 20  of the overhead 
b610: 6f 66 20 61 20 66 75 6c 6c 20 69 6e 74 65 67 72  of a full integr
b620: 69 74 79 2d 63 68 65 63 6b 2e 0a 20 20 2a 2f 0a  ity-check..  */.
b630: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 49    case PragTyp_I
b640: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 3a 20  NTEGRITY_CHECK: 
b650: 7b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c 20  {.    int i, j, 
b660: 61 64 64 72 2c 20 6d 78 45 72 72 3b 0a 0a 20 20  addr, mxErr;..  
b670: 20 20 69 6e 74 20 69 73 51 75 69 63 6b 20 3d 20    int isQuick = 
b680: 28 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28  (sqlite3Tolower(
b690: 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 71 27 29 3b  zLeft[0])=='q');
b6a0: 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20  ..    /* If the 
b6b0: 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 20 77  PRAGMA command w
b6c0: 61 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  as of the form "
b6d0: 50 52 41 47 4d 41 20 3c 64 62 3e 2e 69 6e 74 65  PRAGMA <db>.inte
b6e0: 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a 20 20  grity_check",.  
b6f0: 20 20 2a 2a 20 74 68 65 6e 20 69 44 62 20 69 73    ** then iDb is
b700: 20 73 65 74 20 74 6f 20 74 68 65 20 69 6e 64 65   set to the inde
b710: 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
b720: 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
b730: 3c 64 62 3e 2e 0a 20 20 20 20 2a 2a 20 49 6e 20  <db>..    ** In 
b740: 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20 69  this case, the i
b750: 6e 74 65 67 72 69 74 79 20 6f 66 20 64 61 74 61  ntegrity of data
b760: 62 61 73 65 20 69 44 62 20 6f 6e 6c 79 20 69 73  base iDb only is
b770: 20 76 65 72 69 66 69 65 64 20 62 79 0a 20 20 20   verified by.   
b780: 20 2a 2a 20 74 68 65 20 56 44 42 45 20 63 72 65   ** the VDBE cre
b790: 61 74 65 64 20 62 65 6c 6f 77 2e 0a 20 20 20 20  ated below..    
b7a0: 2a 2a 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 77  **.    ** Otherw
b7b0: 69 73 65 2c 20 69 66 20 74 68 65 20 63 6f 6d 6d  ise, if the comm
b7c0: 61 6e 64 20 77 61 73 20 73 69 6d 70 6c 79 20 22  and was simply "
b7d0: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
b7e0: 5f 63 68 65 63 6b 22 20 28 6f 72 0a 20 20 20 20  _check" (or.    
b7f0: 2a 2a 20 22 50 52 41 47 4d 41 20 71 75 69 63 6b  ** "PRAGMA quick
b800: 5f 63 68 65 63 6b 22 29 2c 20 74 68 65 6e 20 69  _check"), then i
b810: 44 62 20 69 73 20 73 65 74 20 74 6f 20 30 2e 20  Db is set to 0. 
b820: 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 73 65  In this case, se
b830: 74 20 69 44 62 0a 20 20 20 20 2a 2a 20 74 6f 20  t iDb.    ** to 
b840: 2d 31 20 68 65 72 65 2c 20 74 6f 20 69 6e 64 69  -1 here, to indi
b850: 63 61 74 65 20 74 68 61 74 20 74 68 65 20 56 44  cate that the VD
b860: 42 45 20 73 68 6f 75 6c 64 20 76 65 72 69 66 79  BE should verify
b870: 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 0a 20   the integrity. 
b880: 20 20 20 2a 2a 20 6f 66 20 61 6c 6c 20 61 74 74     ** of all att
b890: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
b8a0: 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28    */.    assert(
b8b0: 20 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61   iDb>=0 );.    a
b8c0: 73 73 65 72 74 28 20 69 44 62 3d 3d 30 20 7c 7c  ssert( iDb==0 ||
b8d0: 20 70 49 64 32 2d 3e 7a 20 29 3b 0a 20 20 20 20   pId2->z );.    
b8e0: 69 66 28 20 70 49 64 32 2d 3e 7a 3d 3d 30 20 29  if( pId2->z==0 )
b8f0: 20 69 44 62 20 3d 20 2d 31 3b 0a 0a 20 20 20 20   iDb = -1;..    
b900: 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68  /* Initialize th
b910: 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 2a  e VDBE program *
b920: 2f 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  /.    pParse->nM
b930: 65 6d 20 3d 20 36 3b 0a 20 20 20 20 73 65 74 4f  em = 6;.    setO
b940: 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c 20  neColumnName(v, 
b950: 22 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b  "integrity_check
b960: 22 29 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 74 20  ");..    /* Set 
b970: 74 68 65 20 6d 61 78 69 6d 75 6d 20 65 72 72 6f  the maximum erro
b980: 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 6d  r count */.    m
b990: 78 45 72 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e  xErr = SQLITE_IN
b9a0: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52  TEGRITY_CHECK_ER
b9b0: 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 69 66 28  ROR_MAX;.    if(
b9c0: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
b9d0: 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32   sqlite3GetInt32
b9e0: 28 7a 52 69 67 68 74 2c 20 26 6d 78 45 72 72 29  (zRight, &mxErr)
b9f0: 3b 0a 20 20 20 20 20 20 69 66 28 20 6d 78 45 72  ;.      if( mxEr
ba00: 72 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  r<=0 ){.        
ba10: 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45 5f 49  mxErr = SQLITE_I
ba20: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45  NTEGRITY_CHECK_E
ba30: 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 20 20  RROR_MAX;.      
ba40: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
ba50: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
ba60: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6d 78 45   OP_Integer, mxE
ba70: 72 72 2c 20 31 29 3b 20 20 2f 2a 20 72 65 67 5b  rr, 1);  /* reg[
ba80: 31 5d 20 68 6f 6c 64 73 20 65 72 72 6f 72 73 20  1] holds errors 
ba90: 6c 65 66 74 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20  left */..    /* 
baa0: 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20  Do an integrity 
bab0: 63 68 65 63 6b 20 6f 6e 20 65 61 63 68 20 64 61  check on each da
bac0: 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20  tabase file */. 
bad0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62     for(i=0; i<db
bae0: 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nDb; i++){.   
baf0: 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 78 3b 0a     HashElem *x;.
bb00: 20 20 20 20 20 20 48 61 73 68 20 2a 70 54 62 6c        Hash *pTbl
bb10: 73 3b 0a 20 20 20 20 20 20 69 6e 74 20 2a 61 52  s;.      int *aR
bb20: 6f 6f 74 3b 0a 20 20 20 20 20 20 69 6e 74 20 63  oot;.      int c
bb30: 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 6e  nt = 0;.      in
bb40: 74 20 6d 78 49 64 78 20 3d 20 30 3b 0a 20 20 20  t mxIdx = 0;.   
bb50: 20 20 20 69 6e 74 20 6e 49 64 78 3b 0a 0a 20 20     int nIdx;..  
bb60: 20 20 20 20 69 66 28 20 4f 4d 49 54 5f 54 45 4d      if( OMIT_TEM
bb70: 50 44 42 20 26 26 20 69 3d 3d 31 20 29 20 63 6f  PDB && i==1 ) co
bb80: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69 66  ntinue;.      if
bb90: 28 20 69 44 62 3e 3d 30 20 26 26 20 69 21 3d 69  ( iDb>=0 && i!=i
bba0: 44 62 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a  Db ) continue;..
bbb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
bbc0: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
bbd0: 61 72 73 65 2c 20 69 29 3b 0a 20 20 20 20 20 20  arse, i);.      
bbe0: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
bbf0: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49  beAddOp1(v, OP_I
bc00: 66 50 6f 73 2c 20 31 29 3b 20 2f 2a 20 48 61 6c  fPos, 1); /* Hal
bc10: 74 20 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f  t if out of erro
bc20: 72 73 20 2a 2f 0a 20 20 20 20 20 20 56 64 62 65  rs */.      Vdbe
bc30: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
bc40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
bc50: 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c  dOp2(v, OP_Halt,
bc60: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71   0, 0);.      sq
bc70: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
bc80: 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20  e(v, addr);..   
bc90: 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65     /* Do an inte
bca0: 67 72 69 74 79 20 63 68 65 63 6b 20 6f 66 20 74  grity check of t
bcb0: 68 65 20 42 2d 54 72 65 65 0a 20 20 20 20 20 20  he B-Tree.      
bcc0: 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 42 65 67 69  **.      ** Begi
bcd0: 6e 20 62 79 20 66 69 6e 64 69 6e 67 20 74 68 65  n by finding the
bce0: 20 72 6f 6f 74 20 70 61 67 65 73 20 6e 75 6d 62   root pages numb
bcf0: 65 72 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72  ers.      ** for
bd00: 20 61 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64 20   all tables and 
bd10: 69 6e 64 69 63 65 73 20 69 6e 20 74 68 65 20 64  indices in the d
bd20: 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20 20 2a  atabase..      *
bd30: 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
bd40: 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
bd50: 65 78 48 65 6c 64 28 64 62 2c 20 69 2c 20 30 29  exHeld(db, i, 0)
bd60: 20 29 3b 0a 20 20 20 20 20 20 70 54 62 6c 73 20   );.      pTbls 
bd70: 3d 20 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53  = &db->aDb[i].pS
bd80: 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 3b 0a  chema->tblHash;.
bd90: 20 20 20 20 20 20 66 6f 72 28 63 6e 74 3d 30 2c        for(cnt=0,
bda0: 20 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72   x=sqliteHashFir
bdb0: 73 74 28 70 54 62 6c 73 29 3b 20 78 3b 20 78 3d  st(pTbls); x; x=
bdc0: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78  sqliteHashNext(x
bdd0: 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c  )){.        Tabl
bde0: 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65  e *pTab = sqlite
bdf0: 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20  HashData(x);.   
be00: 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78       Index *pIdx
be10: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 48 61  ;.        if( Ha
be20: 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 20 63  sRowid(pTab) ) c
be30: 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 66 6f  nt++;.        fo
be40: 72 28 6e 49 64 78 3d 30 2c 20 70 49 64 78 3d 70  r(nIdx=0, pIdx=p
be50: 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64  Tab->pIndex; pId
be60: 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
be70: 65 78 74 2c 20 6e 49 64 78 2b 2b 29 7b 20 63 6e  ext, nIdx++){ cn
be80: 74 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 69  t++; }.        i
be90: 66 28 20 6e 49 64 78 3e 6d 78 49 64 78 20 29 20  f( nIdx>mxIdx ) 
bea0: 6d 78 49 64 78 20 3d 20 6e 49 64 78 3b 0a 20 20  mxIdx = nIdx;.  
beb0: 20 20 20 20 7d 0a 20 20 20 20 20 20 61 52 6f 6f      }.      aRoo
bec0: 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  t = sqlite3DbMal
bed0: 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a  locRawNN(db, siz
bee0: 65 6f 66 28 69 6e 74 29 2a 28 63 6e 74 2b 31 29  eof(int)*(cnt+1)
bef0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 61 52 6f  );.      if( aRo
bf00: 6f 74 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  ot==0 ) break;. 
bf10: 20 20 20 20 20 66 6f 72 28 63 6e 74 3d 30 2c 20       for(cnt=0, 
bf20: 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  x=sqliteHashFirs
bf30: 74 28 70 54 62 6c 73 29 3b 20 78 3b 20 78 3d 73  t(pTbls); x; x=s
bf40: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78 29  qliteHashNext(x)
bf50: 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65  ){.        Table
bf60: 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48   *pTab = sqliteH
bf70: 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20  ashData(x);.    
bf80: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
bf90: 0a 20 20 20 20 20 20 20 20 69 66 28 20 48 61 73  .        if( Has
bfa0: 52 6f 77 69 64 28 70 54 61 62 29 20 29 20 61 52  Rowid(pTab) ) aR
bfb0: 6f 6f 74 5b 63 6e 74 2b 2b 5d 20 3d 20 70 54 61  oot[cnt++] = pTa
bfc0: 62 2d 3e 74 6e 75 6d 3b 0a 20 20 20 20 20 20 20  b->tnum;.       
bfd0: 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e   for(pIdx=pTab->
bfe0: 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
bff0: 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b  dx=pIdx->pNext){
c000: 0a 20 20 20 20 20 20 20 20 20 20 61 52 6f 6f 74  .          aRoot
c010: 5b 63 6e 74 2b 2b 5d 20 3d 20 70 49 64 78 2d 3e  [cnt++] = pIdx->
c020: 74 6e 75 6d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  tnum;.        }.
c030: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 52        }.      aR
c040: 6f 6f 74 5b 63 6e 74 5d 20 3d 20 30 3b 0a 0a 20  oot[cnt] = 0;.. 
c050: 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
c060: 65 20 73 75 66 66 69 63 69 65 6e 74 20 6e 75 6d  e sufficient num
c070: 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
c080: 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63   have been alloc
c090: 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 70 50  ated */.      pP
c0a0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58  arse->nMem = MAX
c0b0: 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20  ( pParse->nMem, 
c0c0: 38 2b 6d 78 49 64 78 20 29 3b 0a 0a 20 20 20 20  8+mxIdx );..    
c0d0: 20 20 2f 2a 20 44 6f 20 74 68 65 20 62 2d 74 72    /* Do the b-tr
c0e0: 65 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65  ee integrity che
c0f0: 63 6b 73 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c  cks */.      sql
c100: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
c110: 2c 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b  , OP_IntegrityCk
c120: 2c 20 32 2c 20 63 6e 74 2c 20 31 2c 20 28 63 68  , 2, cnt, 1, (ch
c130: 61 72 2a 29 61 52 6f 6f 74 2c 50 34 5f 49 4e 54  ar*)aRoot,P4_INT
c140: 41 52 52 41 59 29 3b 0a 20 20 20 20 20 20 73 71  ARRAY);.      sq
c150: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
c160: 35 28 76 2c 20 28 75 38 29 69 29 3b 0a 20 20 20  5(v, (u8)i);.   
c170: 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65     addr = sqlite
c180: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
c190: 50 5f 49 73 4e 75 6c 6c 2c 20 32 29 3b 20 56 64  P_IsNull, 2); Vd
c1a0: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
c1b0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c1c0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
c1d0: 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20  ing8, 0, 3, 0,. 
c1e0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4d          sqlite3M
c1f0: 50 72 69 6e 74 66 28 64 62 2c 20 22 2a 2a 2a 20  Printf(db, "*** 
c200: 69 6e 20 64 61 74 61 62 61 73 65 20 25 73 20 2a  in database %s *
c210: 2a 2a 5c 6e 22 2c 20 64 62 2d 3e 61 44 62 5b 69  **\n", db->aDb[i
c220: 5d 2e 7a 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20  ].zName),.      
c230: 20 20 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a     P4_DYNAMIC);.
c240: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c250: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 6f  eAddOp3(v, OP_Mo
c260: 76 65 2c 20 32 2c 20 34 2c 20 31 29 3b 0a 20 20  ve, 2, 4, 1);.  
c270: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c280: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63  ddOp3(v, OP_Conc
c290: 61 74 2c 20 34 2c 20 33 2c 20 32 29 3b 0a 20 20  at, 4, 3, 2);.  
c2a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c2b0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
c2c0: 6c 74 52 6f 77 2c 20 32 2c 20 31 29 3b 0a 20 20  ltRow, 2, 1);.  
c2d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
c2e0: 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29  umpHere(v, addr)
c2f0: 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65  ;..      /* Make
c300: 20 73 75 72 65 20 61 6c 6c 20 74 68 65 20 69 6e   sure all the in
c310: 64 69 63 65 73 20 61 72 65 20 63 6f 6e 73 74 72  dices are constr
c320: 75 63 74 65 64 20 63 6f 72 72 65 63 74 6c 79 2e  ucted correctly.
c330: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
c340: 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68  for(x=sqliteHash
c350: 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 20  First(pTbls); x 
c360: 26 26 20 21 69 73 51 75 69 63 6b 3b 20 78 3d 73  && !isQuick; x=s
c370: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78 29  qliteHashNext(x)
c380: 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65  ){.        Table
c390: 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48   *pTab = sqliteH
c3a0: 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20  ashData(x);.    
c3b0: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 2c      Index *pIdx,
c3c0: 20 2a 70 50 6b 3b 0a 20 20 20 20 20 20 20 20 49   *pPk;.        I
c3d0: 6e 64 65 78 20 2a 70 50 72 69 6f 72 20 3d 20 30  ndex *pPrior = 0
c3e0: 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 6f  ;.        int lo
c3f0: 6f 70 54 6f 70 3b 0a 20 20 20 20 20 20 20 20 69  opTop;.        i
c400: 6e 74 20 69 44 61 74 61 43 75 72 2c 20 69 49 64  nt iDataCur, iId
c410: 78 43 75 72 3b 0a 20 20 20 20 20 20 20 20 69 6e  xCur;.        in
c420: 74 20 72 31 20 3d 20 2d 31 3b 0a 0a 20 20 20 20  t r1 = -1;..    
c430: 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e 70 49      if( pTab->pI
c440: 6e 64 65 78 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  ndex==0 ) contin
c450: 75 65 3b 0a 20 20 20 20 20 20 20 20 70 50 6b 20  ue;.        pPk 
c460: 3d 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  = HasRowid(pTab)
c470: 20 3f 20 30 20 3a 20 73 71 6c 69 74 65 33 50 72   ? 0 : sqlite3Pr
c480: 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54  imaryKeyIndex(pT
c490: 61 62 29 3b 0a 20 20 20 20 20 20 20 20 61 64 64  ab);.        add
c4a0: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
c4b0: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f  ddOp1(v, OP_IfPo
c4c0: 73 2c 20 31 29 3b 20 20 2f 2a 20 53 74 6f 70 20  s, 1);  /* Stop 
c4d0: 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73  if out of errors
c4e0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65   */.        Vdbe
c4f0: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
c500: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c510: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c  AddOp2(v, OP_Hal
c520: 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  t, 0, 0);.      
c530: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
c540: 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a  pHere(v, addr);.
c550: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
c560: 78 70 72 43 61 63 68 65 43 6c 65 61 72 28 70 50  xprCacheClear(pP
c570: 61 72 73 65 29 3b 0a 20 20 20 20 20 20 20 20 73  arse);.        s
c580: 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41  qlite3OpenTableA
c590: 6e 64 49 6e 64 69 63 65 73 28 70 50 61 72 73 65  ndIndices(pParse
c5a0: 2c 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52  , pTab, OP_OpenR
c5b0: 65 61 64 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  ead, 0,.        
c5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5d0: 20 20 20 20 20 20 20 20 20 20 20 31 2c 20 30 2c             1, 0,
c5e0: 20 26 69 44 61 74 61 43 75 72 2c 20 26 69 49 64   &iDataCur, &iId
c5f0: 78 43 75 72 29 3b 0a 20 20 20 20 20 20 20 20 73  xCur);.        s
c600: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c610: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
c620: 30 2c 20 37 29 3b 0a 20 20 20 20 20 20 20 20 66  0, 7);.        f
c630: 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61  or(j=0, pIdx=pTa
c640: 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
c650: 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
c660: 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  t, j++){.       
c670: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c680: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
c690: 65 72 2c 20 30 2c 20 38 2b 6a 29 3b 20 2f 2a 20  er, 0, 8+j); /* 
c6a0: 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20 63 6f  index entries co
c6b0: 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 20 20 20  unter */.       
c6c0: 20 7d 0a 20 20 20 20 20 20 20 20 61 73 73 65 72   }.        asser
c6d0: 74 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3e  t( pParse->nMem>
c6e0: 3d 38 2b 6a 20 29 3b 0a 20 20 20 20 20 20 20 20  =8+j );.        
c6f0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 4e  assert( sqlite3N
c700: 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65 28 70 50  oTempsInRange(pP
c710: 61 72 73 65 2c 31 2c 37 2b 6a 29 20 29 3b 0a 20  arse,1,7+j) );. 
c720: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c730: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
c740: 65 77 69 6e 64 2c 20 69 44 61 74 61 43 75 72 2c  ewind, iDataCur,
c750: 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67   0); VdbeCoverag
c760: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 6c 6f  e(v);.        lo
c770: 6f 70 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56  opTop = sqlite3V
c780: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c790: 41 64 64 49 6d 6d 2c 20 37 2c 20 31 29 3b 0a 20  AddImm, 7, 1);. 
c7a0: 20 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79         /* Verify
c7b0: 20 74 68 61 74 20 61 6c 6c 20 4e 4f 54 20 4e 55   that all NOT NU
c7c0: 4c 4c 20 63 6f 6c 75 6d 6e 73 20 72 65 61 6c 6c  LL columns reall
c7d0: 79 20 61 72 65 20 4e 4f 54 20 4e 55 4c 4c 20 2a  y are NOT NULL *
c7e0: 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d  /.        for(j=
c7f0: 30 3b 20 6a 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b  0; j<pTab->nCol;
c800: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
c810: 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a 20 20 20   char *zErr;.   
c820: 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c         int jmp2,
c830: 20 6a 6d 70 33 3b 0a 20 20 20 20 20 20 20 20 20   jmp3;.         
c840: 20 69 66 28 20 6a 3d 3d 70 54 61 62 2d 3e 69 50   if( j==pTab->iP
c850: 4b 65 79 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  Key ) continue;.
c860: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 54            if( pT
c870: 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 6e 6f 74 4e  ab->aCol[j].notN
c880: 75 6c 6c 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  ull==0 ) continu
c890: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  e;.          sql
c8a0: 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
c8b0: 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20  olumnOfTable(v, 
c8c0: 70 54 61 62 2c 20 69 44 61 74 61 43 75 72 2c 20  pTab, iDataCur, 
c8d0: 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20  j, 3);.         
c8e0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
c8f0: 67 65 50 35 28 76 2c 20 4f 50 46 4c 41 47 5f 54  geP5(v, OPFLAG_T
c900: 59 50 45 4f 46 41 52 47 29 3b 0a 20 20 20 20 20  YPEOFARG);.     
c910: 20 20 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69       jmp2 = sqli
c920: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
c930: 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 2c 20 33 29 3b   OP_NotNull, 3);
c940: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
c950: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
c960: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c970: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
c980: 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74  1); /* Decrement
c990: 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a   error limit */.
c9a0: 20 20 20 20 20 20 20 20 20 20 7a 45 72 72 20 3d            zErr =
c9b0: 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
c9c0: 64 62 2c 20 22 4e 55 4c 4c 20 76 61 6c 75 65 20  db, "NULL value 
c9d0: 69 6e 20 25 73 2e 25 73 22 2c 20 70 54 61 62 2d  in %s.%s", pTab-
c9e0: 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  >zName,.        
c9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca00: 20 20 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c        pTab->aCol
ca10: 5b 6a 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  [j].zName);.    
ca20: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ca30: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
ca40: 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20  ring8, 0, 3, 0, 
ca50: 7a 45 72 72 2c 20 50 34 5f 44 59 4e 41 4d 49 43  zErr, P4_DYNAMIC
ca60: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
ca70: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
ca80: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
ca90: 33 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20  3, 1);.         
caa0: 20 6a 6d 70 33 20 3d 20 73 71 6c 69 74 65 33 56   jmp3 = sqlite3V
cab0: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
cac0: 49 66 50 6f 73 2c 20 31 29 3b 20 56 64 62 65 43  IfPos, 1); VdbeC
cad0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
cae0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
caf0: 65 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61  eAddOp0(v, OP_Ha
cb00: 6c 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  lt);.          s
cb10: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
cb20: 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20  re(v, jmp2);.   
cb30: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cb40: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d  beJumpHere(v, jm
cb50: 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  p3);.        }. 
cb60: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 69 64 61         /* Valida
cb70: 74 65 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73  te index entries
cb80: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
cb90: 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20   row */.        
cba0: 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54  for(j=0, pIdx=pT
cbb0: 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
cbc0: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
cbd0: 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  xt, j++){.      
cbe0: 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d      int jmp2, jm
cbf0: 70 33 2c 20 6a 6d 70 34 2c 20 6a 6d 70 35 3b 0a  p3, jmp4, jmp5;.
cc00: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 6b            int ck
cc10: 55 6e 69 71 20 3d 20 73 71 6c 69 74 65 33 56 64  Uniq = sqlite3Vd
cc20: 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a  beMakeLabel(v);.
cc30: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50            if( pP
cc40: 6b 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e  k==pIdx ) contin
cc50: 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 72 31  ue;.          r1
cc60: 20 3d 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61   = sqlite3Genera
cc70: 74 65 49 6e 64 65 78 4b 65 79 28 70 50 61 72 73  teIndexKey(pPars
cc80: 65 2c 20 70 49 64 78 2c 20 69 44 61 74 61 43 75  e, pIdx, iDataCu
cc90: 72 2c 20 30 2c 20 30 2c 20 26 6a 6d 70 33 2c 0a  r, 0, 0, &jmp3,.
cca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccc0: 20 20 20 20 20 20 20 70 50 72 69 6f 72 2c 20 72         pPrior, r
ccd0: 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 50  1);.          pP
cce0: 72 69 6f 72 20 3d 20 70 49 64 78 3b 0a 20 20 20  rior = pIdx;.   
ccf0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cd00: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
cd10: 64 64 49 6d 6d 2c 20 38 2b 6a 2c 20 31 29 3b 20  ddImm, 8+j, 1); 
cd20: 20 2f 2a 20 69 6e 63 72 65 6d 65 6e 74 20 65 6e   /* increment en
cd30: 74 72 79 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20  try count */.   
cd40: 20 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79         /* Verify
cd50: 20 74 68 61 74 20 61 6e 20 69 6e 64 65 78 20 65   that an index e
cd60: 6e 74 72 79 20 65 78 69 73 74 73 20 66 6f 72 20  ntry exists for 
cd70: 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c  the current tabl
cd80: 65 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20  e row */.       
cd90: 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65     jmp2 = sqlite
cda0: 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76  3VdbeAddOp4Int(v
cdb0: 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 49 64 78  , OP_Found, iIdx
cdc0: 43 75 72 2b 6a 2c 20 63 6b 55 6e 69 71 2c 20 72  Cur+j, ckUniq, r
cdd0: 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  1,.             
cde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdf0: 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 6e           pIdx->n
ce00: 43 6f 6c 75 6d 6e 29 3b 20 56 64 62 65 43 6f 76  Column); VdbeCov
ce10: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
ce20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ce30: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49  ddOp2(v, OP_AddI
ce40: 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44  mm, 1, -1); /* D
ce50: 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c  ecrement error l
ce60: 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  imit */.        
ce70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61    sqlite3VdbeLoa
ce80: 64 53 74 72 69 6e 67 28 76 2c 20 33 2c 20 22 72  dString(v, 3, "r
ce90: 6f 77 20 22 29 3b 0a 20 20 20 20 20 20 20 20 20  ow ");.         
cea0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ceb0: 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
cec0: 20 37 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20   7, 3, 3);.     
ced0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cee0: 4c 6f 61 64 53 74 72 69 6e 67 28 76 2c 20 34 2c  LoadString(v, 4,
cef0: 20 22 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   " missing from 
cf00: 69 6e 64 65 78 20 22 29 3b 0a 20 20 20 20 20 20  index ");.      
cf10: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
cf20: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63  ddOp3(v, OP_Conc
cf30: 61 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20  at, 4, 3, 3);.  
cf40: 20 20 20 20 20 20 20 20 6a 6d 70 35 20 3d 20 73          jmp5 = s
cf50: 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74  qlite3VdbeLoadSt
cf60: 72 69 6e 67 28 76 2c 20 34 2c 20 70 49 64 78 2d  ring(v, 4, pIdx-
cf70: 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20  >zName);.       
cf80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
cf90: 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  dOp3(v, OP_Conca
cfa0: 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20  t, 4, 3, 3);.   
cfb0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cfc0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
cfd0: 65 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b  esultRow, 3, 1);
cfe0: 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 34 20  .          jmp4 
cff0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
d000: 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c  Op1(v, OP_IfPos,
d010: 20 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67   1); VdbeCoverag
d020: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
d030: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d040: 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20  0(v, OP_Halt);. 
d050: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d060: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
d070: 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20  jmp2);.         
d080: 20 2f 2a 20 46 6f 72 20 55 4e 49 51 55 45 20 69   /* For UNIQUE i
d090: 6e 64 65 78 65 73 2c 20 76 65 72 69 66 79 20 74  ndexes, verify t
d0a0: 68 61 74 20 6f 6e 6c 79 20 6f 6e 65 20 65 6e 74  hat only one ent
d0b0: 72 79 20 65 78 69 73 74 73 20 77 69 74 68 20 74  ry exists with t
d0c0: 68 65 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  he.          ** 
d0d0: 63 75 72 72 65 6e 74 20 6b 65 79 2e 20 20 54 68  current key.  Th
d0e0: 65 20 65 6e 74 72 79 20 69 73 20 75 6e 69 71 75  e entry is uniqu
d0f0: 65 20 69 66 20 28 31 29 20 61 6e 79 20 63 6f 6c  e if (1) any col
d100: 75 6d 6e 20 69 73 20 4e 55 4c 4c 0a 20 20 20 20  umn is NULL.    
d110: 20 20 20 20 20 20 2a 2a 20 6f 72 20 28 32 29 20        ** or (2) 
d120: 74 68 65 20 6e 65 78 74 20 65 6e 74 72 79 20 68  the next entry h
d130: 61 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 6b  as a different k
d140: 65 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ey */.          
d150: 69 66 28 20 49 73 55 6e 69 71 75 65 49 6e 64 65  if( IsUniqueInde
d160: 78 28 70 49 64 78 29 20 29 7b 0a 20 20 20 20 20  x(pIdx) ){.     
d170: 20 20 20 20 20 20 20 69 6e 74 20 75 6e 69 71 4f         int uniqO
d180: 6b 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  k = sqlite3VdbeM
d190: 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20  akeLabel(v);.   
d1a0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70           int jmp
d1b0: 36 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  6;.            i
d1c0: 6e 74 20 6b 6b 3b 0a 20 20 20 20 20 20 20 20 20  nt kk;.         
d1d0: 20 20 20 66 6f 72 28 6b 6b 3d 30 3b 20 6b 6b 3c     for(kk=0; kk<
d1e0: 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 6b  pIdx->nKeyCol; k
d1f0: 6b 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  k++){.          
d200: 20 20 20 20 69 6e 74 20 69 43 6f 6c 20 3d 20 70      int iCol = p
d210: 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 6b  Idx->aiColumn[kk
d220: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ];.             
d230: 20 61 73 73 65 72 74 28 20 69 43 6f 6c 21 3d 58   assert( iCol!=X
d240: 4e 5f 52 4f 57 49 44 20 26 26 20 69 43 6f 6c 3c  N_ROWID && iCol<
d250: 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20  pTab->nCol );.  
d260: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
d270: 69 43 6f 6c 3e 3d 30 20 26 26 20 70 54 61 62 2d  iCol>=0 && pTab-
d280: 3e 61 43 6f 6c 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e  >aCol[iCol].notN
d290: 75 6c 6c 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ull ) continue;.
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
d2b0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d2c0: 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 31  v, OP_IsNull, r1
d2d0: 2b 6b 6b 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20  +kk, uniqOk);.  
d2e0: 20 20 20 20 20 20 20 20 20 20 20 20 56 64 62 65              Vdbe
d2f0: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
d300: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
d310: 20 20 20 20 20 20 20 6a 6d 70 36 20 3d 20 73 71         jmp6 = sq
d320: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
d330: 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 69 49 64 78  v, OP_Next, iIdx
d340: 43 75 72 2b 6a 29 3b 20 56 64 62 65 43 6f 76 65  Cur+j); VdbeCove
d350: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
d360: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d370: 47 6f 74 6f 28 76 2c 20 75 6e 69 71 4f 6b 29 3b  Goto(v, uniqOk);
d380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
d390: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
d3a0: 28 76 2c 20 6a 6d 70 36 29 3b 0a 20 20 20 20 20  (v, jmp6);.     
d3b0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d3c0: 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f  beAddOp4Int(v, O
d3d0: 50 5f 49 64 78 47 54 2c 20 69 49 64 78 43 75 72  P_IdxGT, iIdxCur
d3e0: 2b 6a 2c 20 75 6e 69 71 4f 6b 2c 20 72 31 2c 0a  +j, uniqOk, r1,.
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d410: 20 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b   pIdx->nKeyCol);
d420: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
d430: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
d440: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d450: 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c  v, OP_AddImm, 1,
d460: 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65   -1); /* Decreme
d470: 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a  nt error limit *
d480: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  /.            sq
d490: 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72  lite3VdbeLoadStr
d4a0: 69 6e 67 28 76 2c 20 33 2c 20 22 6e 6f 6e 2d 75  ing(v, 3, "non-u
d4b0: 6e 69 71 75 65 20 65 6e 74 72 79 20 69 6e 20 69  nique entry in i
d4c0: 6e 64 65 78 20 22 29 3b 0a 20 20 20 20 20 20 20  ndex ");.       
d4d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d4e0: 47 6f 74 6f 28 76 2c 20 6a 6d 70 35 29 3b 0a 20  Goto(v, jmp5);. 
d4f0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
d500: 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62  e3VdbeResolveLab
d510: 65 6c 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20  el(v, uniqOk);. 
d520: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
d530: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d540: 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 34  JumpHere(v, jmp4
d550: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d560: 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49  ite3ResolvePartI
d570: 64 78 4c 61 62 65 6c 28 70 50 61 72 73 65 2c 20  dxLabel(pParse, 
d580: 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d  jmp3);.        }
d590: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
d5a0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d5b0: 5f 4e 65 78 74 2c 20 69 44 61 74 61 43 75 72 2c  _Next, iDataCur,
d5c0: 20 6c 6f 6f 70 54 6f 70 29 3b 20 56 64 62 65 43   loopTop); VdbeC
d5d0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
d5e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
d5f0: 75 6d 70 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54  umpHere(v, loopT
d600: 6f 70 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20 53  op-1);.#ifndef S
d610: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
d620: 43 4f 55 4e 54 0a 20 20 20 20 20 20 20 20 73 71  COUNT.        sq
d630: 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53 74 72  lite3VdbeLoadStr
d640: 69 6e 67 28 76 2c 20 32 2c 20 22 77 72 6f 6e 67  ing(v, 2, "wrong
d650: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
d660: 20 69 6e 64 65 78 20 22 29 3b 0a 20 20 20 20 20   index ");.     
d670: 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78     for(j=0, pIdx
d680: 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
d690: 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
d6a0: 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20  pNext, j++){.   
d6b0: 20 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d         if( pPk==
d6c0: 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b  pIdx ) continue;
d6d0: 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 72 20  .          addr 
d6e0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
d6f0: 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20  rentAddr(v);.   
d700: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d710: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
d720: 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 2b 32 29  fPos, 1, addr+2)
d730: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
d740: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
d750: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d760: 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29  , OP_Halt, 0, 0)
d770: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d780: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d790: 20 4f 50 5f 43 6f 75 6e 74 2c 20 69 49 64 78 43   OP_Count, iIdxC
d7a0: 75 72 2b 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20  ur+j, 3);.      
d7b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d7c0: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20  ddOp3(v, OP_Eq, 
d7d0: 38 2b 6a 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b  8+j, addr+8, 3);
d7e0: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
d7f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
d800: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 35 28  te3VdbeChangeP5(
d810: 76 2c 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  v, SQLITE_NOTNUL
d820: 4c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  L);.          sq
d830: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d840: 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c  v, OP_AddImm, 1,
d850: 20 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20   -1);.          
d860: 73 71 6c 69 74 65 33 56 64 62 65 4c 6f 61 64 53  sqlite3VdbeLoadS
d870: 74 72 69 6e 67 28 76 2c 20 33 2c 20 70 49 64 78  tring(v, 3, pIdx
d880: 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ->zName);.      
d890: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d8a0: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63  ddOp3(v, OP_Conc
d8b0: 61 74 2c 20 33 2c 20 32 2c 20 37 29 3b 0a 20 20  at, 3, 2, 7);.  
d8c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d8d0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d8e0: 52 65 73 75 6c 74 52 6f 77 2c 20 37 2c 20 31 29  ResultRow, 7, 1)
d8f0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23 65 6e 64  ;.        }.#end
d900: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
d910: 54 5f 42 54 52 45 45 43 4f 55 4e 54 20 2a 2f 0a  T_BTREECOUNT */.
d920: 20 20 20 20 20 20 7d 20 0a 20 20 20 20 7d 0a 20        } .    }. 
d930: 20 20 20 7b 0a 20 20 20 20 20 20 73 74 61 74 69     {.      stati
d940: 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20  c const int iLn 
d950: 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49  = VDBE_OFFSET_LI
d960: 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 20 20 73  NENO(2);.      s
d970: 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65  tatic const Vdbe
d980: 4f 70 4c 69 73 74 20 65 6e 64 43 6f 64 65 5b 5d  OpList endCode[]
d990: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f   = {.        { O
d9a0: 50 5f 41 64 64 49 6d 6d 2c 20 20 20 20 20 20 31  P_AddImm,      1
d9b0: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20  , 0,        0}, 
d9c0: 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
d9d0: 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20 20     { OP_If,     
d9e0: 20 20 20 20 20 31 2c 20 34 2c 20 20 20 20 20 20       1, 4,      
d9f0: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f    0},    /* 1 */
da00: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 74  .        { OP_St
da10: 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20 33 2c  ring8,     0, 3,
da20: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
da30: 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b  * 2 */.        {
da40: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20   OP_ResultRow,  
da50: 20 33 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d   3, 1,        0}
da60: 2c 20 20 20 20 2f 2a 20 33 20 2a 2f 0a 20 20 20  ,    /* 3 */.   
da70: 20 20 20 7d 3b 0a 20 20 20 20 20 20 56 64 62 65     };.      Vdbe
da80: 4f 70 20 2a 61 4f 70 3b 0a 0a 20 20 20 20 20 20  Op *aOp;..      
da90: 61 4f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62  aOp = sqlite3Vdb
daa0: 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
dab0: 72 61 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29  raySize(endCode)
dac0: 2c 20 65 6e 64 43 6f 64 65 2c 20 69 4c 6e 29 3b  , endCode, iLn);
dad0: 0a 20 20 20 20 20 20 69 66 28 20 61 4f 70 20 29  .      if( aOp )
dae0: 7b 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 30 5d  {.        aOp[0]
daf0: 2e 70 32 20 3d 20 2d 6d 78 45 72 72 3b 0a 20 20  .p2 = -mxErr;.  
db00: 20 20 20 20 20 20 61 4f 70 5b 32 5d 2e 70 34 74        aOp[2].p4t
db10: 79 70 65 20 3d 20 50 34 5f 53 54 41 54 49 43 3b  ype = P4_STATIC;
db20: 0a 20 20 20 20 20 20 20 20 61 4f 70 5b 32 5d 2e  .        aOp[2].
db30: 70 34 2e 7a 20 3d 20 22 6f 6b 22 3b 0a 20 20 20  p4.z = "ok";.   
db40: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
db50: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
db60: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  * SQLITE_OMIT_IN
db70: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f  TEGRITY_CHECK */
db80: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
db90: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a  _OMIT_UTF16.  /*
dba0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65  .  **   PRAGMA e
dbb0: 6e 63 6f 64 69 6e 67 0a 20 20 2a 2a 20 20 20 50  ncoding.  **   P
dbc0: 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d  RAGMA encoding =
dbd0: 20 22 75 74 66 2d 38 22 7c 22 75 74 66 2d 31 36   "utf-8"|"utf-16
dbe0: 22 7c 22 75 74 66 2d 31 36 6c 65 22 7c 22 75 74  "|"utf-16le"|"ut
dbf0: 66 2d 31 36 62 65 22 0a 20 20 2a 2a 0a 20 20 2a  f-16be".  **.  *
dc00: 2a 20 49 6e 20 69 74 73 20 66 69 72 73 74 20 66  * In its first f
dc10: 6f 72 6d 2c 20 74 68 69 73 20 70 72 61 67 6d 61  orm, this pragma
dc20: 20 72 65 74 75 72 6e 73 20 74 68 65 20 65 6e 63   returns the enc
dc30: 6f 64 69 6e 67 20 6f 66 20 74 68 65 20 6d 61 69  oding of the mai
dc40: 6e 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 2e  n.  ** database.
dc50: 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
dc60: 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69   is not initiali
dc70: 7a 65 64 2c 20 69 74 20 69 73 20 69 6e 69 74 69  zed, it is initi
dc80: 61 6c 69 7a 65 64 20 6e 6f 77 2e 0a 20 20 2a 2a  alized now..  **
dc90: 0a 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64  .  ** The second
dca0: 20 66 6f 72 6d 20 6f 66 20 74 68 69 73 20 70 72   form of this pr
dcb0: 61 67 6d 61 20 69 73 20 61 20 6e 6f 2d 6f 70 20  agma is a no-op 
dcc0: 69 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  if the main data
dcd0: 62 61 73 65 20 66 69 6c 65 0a 20 20 2a 2a 20 68  base file.  ** h
dce0: 61 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 62  as not already b
dcf0: 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  een initialized.
dd00: 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 69 74   In this case it
dd10: 20 73 65 74 73 20 74 68 65 20 64 65 66 61 75 6c   sets the defaul
dd20: 74 0a 20 20 2a 2a 20 65 6e 63 6f 64 69 6e 67 20  t.  ** encoding 
dd30: 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65  that will be use
dd40: 64 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64  d for the main d
dd50: 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
dd60: 61 20 6e 65 77 20 66 69 6c 65 0a 20 20 2a 2a 20  a new file.  ** 
dd70: 69 73 20 63 72 65 61 74 65 64 2e 20 49 66 20 61  is created. If a
dd80: 6e 20 65 78 69 73 74 69 6e 67 20 6d 61 69 6e 20  n existing main 
dd90: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
dda0: 20 6f 70 65 6e 65 64 2c 20 74 68 65 6e 20 74 68   opened, then th
ddb0: 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 74  e.  ** default t
ddc0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72  ext encoding for
ddd0: 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 64 61   the existing da
dde0: 74 61 62 61 73 65 20 69 73 20 75 73 65 64 2e 0a  tabase is used..
ddf0: 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 6e 20 61 6c    ** .  ** In al
de00: 6c 20 63 61 73 65 73 20 6e 65 77 20 64 61 74 61  l cases new data
de10: 62 61 73 65 73 20 63 72 65 61 74 65 64 20 75 73  bases created us
de20: 69 6e 67 20 74 68 65 20 41 54 54 41 43 48 20 63  ing the ATTACH c
de30: 6f 6d 6d 61 6e 64 20 61 72 65 0a 20 20 2a 2a 20  ommand are.  ** 
de40: 63 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74  created to use t
de50: 68 65 20 73 61 6d 65 20 64 65 66 61 75 6c 74 20  he same default 
de60: 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 61 73  text encoding as
de70: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
de80: 73 65 2e 20 49 66 0a 20 20 2a 2a 20 74 68 65 20  se. If.  ** the 
de90: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 68 61  main database ha
dea0: 73 20 6e 6f 74 20 62 65 65 6e 20 69 6e 69 74 69  s not been initi
deb0: 61 6c 69 7a 65 64 20 61 6e 64 2f 6f 72 20 63 72  alized and/or cr
dec0: 65 61 74 65 64 20 77 68 65 6e 20 41 54 54 41 43  eated when ATTAC
ded0: 48 0a 20 20 2a 2a 20 69 73 20 65 78 65 63 75 74  H.  ** is execut
dee0: 65 64 2c 20 74 68 69 73 20 69 73 20 64 6f 6e 65  ed, this is done
def0: 20 62 65 66 6f 72 65 20 74 68 65 20 41 54 54 41   before the ATTA
df00: 43 48 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 20 20  CH operation..  
df10: 2a 2a 0a 20 20 2a 2a 20 49 6e 20 74 68 65 20 73  **.  ** In the s
df20: 65 63 6f 6e 64 20 66 6f 72 6d 20 74 68 69 73 20  econd form this 
df30: 70 72 61 67 6d 61 20 73 65 74 73 20 74 68 65 20  pragma sets the 
df40: 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 74 6f  text encoding to
df50: 20 62 65 20 75 73 65 64 20 69 6e 0a 20 20 2a 2a   be used in.  **
df60: 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 66 69   new database fi
df70: 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
df80: 67 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  g this database 
df90: 68 61 6e 64 6c 65 2e 20 49 74 20 69 73 20 6f 6e  handle. It is on
dfa0: 6c 79 0a 20 20 2a 2a 20 75 73 65 66 75 6c 20 69  ly.  ** useful i
dfb0: 66 20 69 6e 76 6f 6b 65 64 20 69 6d 6d 65 64 69  f invoked immedi
dfc0: 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20  ately after the 
dfd0: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 0a  main database i.
dfe0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
dff0: 54 79 70 5f 45 4e 43 4f 44 49 4e 47 3a 20 7b 0a  Typ_ENCODING: {.
e000: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
e010: 20 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20   struct EncName 
e020: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4e  {.      char *zN
e030: 61 6d 65 3b 0a 20 20 20 20 20 20 75 38 20 65 6e  ame;.      u8 en
e040: 63 3b 0a 20 20 20 20 7d 20 65 6e 63 6e 61 6d 65  c;.    } encname
e050: 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20  s[] = {.      { 
e060: 22 55 54 46 38 22 2c 20 20 20 20 20 53 51 4c 49  "UTF8",     SQLI
e070: 54 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d  TE_UTF8        }
e080: 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 38  ,.      { "UTF-8
e090: 22 2c 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46  ",    SQLITE_UTF
e0a0: 38 20 20 20 20 20 20 20 20 7d 2c 20 20 2f 2a 20  8        },  /* 
e0b0: 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20  Must be element 
e0c0: 5b 31 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22  [1] */.      { "
e0d0: 55 54 46 2d 31 36 6c 65 22 2c 20 53 51 4c 49 54  UTF-16le", SQLIT
e0e0: 45 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c  E_UTF16LE     },
e0f0: 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65    /* Must be ele
e100: 6d 65 6e 74 20 5b 32 5d 20 2a 2f 0a 20 20 20 20  ment [2] */.    
e110: 20 20 7b 20 22 55 54 46 2d 31 36 62 65 22 2c 20    { "UTF-16be", 
e120: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20  SQLITE_UTF16BE  
e130: 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62     },  /* Must b
e140: 65 20 65 6c 65 6d 65 6e 74 20 5b 33 5d 20 2a 2f  e element [3] */
e150: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 6c  .      { "UTF16l
e160: 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31  e",  SQLITE_UTF1
e170: 36 4c 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  6LE     },.     
e180: 20 7b 20 22 55 54 46 31 36 62 65 22 2c 20 20 53   { "UTF16be",  S
e190: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20 20  QLITE_UTF16BE   
e1a0: 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54    },.      { "UT
e1b0: 46 2d 31 36 22 2c 20 20 20 30 20 20 20 20 20 20  F-16",   0      
e1c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f              }, /
e1d0: 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  * SQLITE_UTF16NA
e1e0: 54 49 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20  TIVE */.      { 
e1f0: 22 55 54 46 31 36 22 2c 20 20 20 20 30 20 20 20  "UTF16",    0   
e200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
e210: 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 31  , /* SQLITE_UTF1
e220: 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20 20 20  6NATIVE */.     
e230: 20 7b 20 30 2c 20 30 20 7d 0a 20 20 20 20 7d 3b   { 0, 0 }.    };
e240: 0a 20 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63  .    const struc
e250: 74 20 45 6e 63 4e 61 6d 65 20 2a 70 45 6e 63 3b  t EncName *pEnc;
e260: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
e270: 20 29 7b 20 20 20 20 2f 2a 20 22 50 52 41 47 4d   ){    /* "PRAGM
e280: 41 20 65 6e 63 6f 64 69 6e 67 22 20 2a 2f 0a 20  A encoding" */. 
e290: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
e2a0: 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73  ReadSchema(pPars
e2b0: 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  e) ) goto pragma
e2c0: 5f 6f 75 74 3b 0a 20 20 20 20 20 20 61 73 73 65  _out;.      asse
e2d0: 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c  rt( encnames[SQL
e2e0: 49 54 45 5f 55 54 46 38 5d 2e 65 6e 63 3d 3d 53  ITE_UTF8].enc==S
e2f0: 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20  QLITE_UTF8 );.  
e300: 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e      assert( encn
e310: 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 31  ames[SQLITE_UTF1
e320: 36 4c 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45  6LE].enc==SQLITE
e330: 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 20 20  _UTF16LE );.    
e340: 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d    assert( encnam
e350: 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 42  es[SQLITE_UTF16B
e360: 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  E].enc==SQLITE_U
e370: 54 46 31 36 42 45 20 29 3b 0a 20 20 20 20 20 20  TF16BE );.      
e380: 72 65 74 75 72 6e 53 69 6e 67 6c 65 54 65 78 74  returnSingleText
e390: 28 76 2c 20 22 65 6e 63 6f 64 69 6e 67 22 2c 20  (v, "encoding", 
e3a0: 65 6e 63 6e 61 6d 65 73 5b 45 4e 43 28 70 50 61  encnames[ENC(pPa
e3b0: 72 73 65 2d 3e 64 62 29 5d 2e 7a 4e 61 6d 65 29  rse->db)].zName)
e3c0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 20 20 20 20  ;.    }else{    
e3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3e0: 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41 20 65      /* "PRAGMA e
e3f0: 6e 63 6f 64 69 6e 67 20 3d 20 58 58 58 22 20 2a  ncoding = XXX" *
e400: 2f 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20  /.      /* Only 
e410: 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c 75 65  change the value
e420: 20 6f 66 20 73 71 6c 69 74 65 2e 65 6e 63 20 69   of sqlite.enc i
e430: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  f the database h
e440: 61 6e 64 6c 65 20 69 73 20 6e 6f 74 0a 20 20 20  andle is not.   
e450: 20 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65     ** initialize
e460: 64 2e 20 49 66 20 74 68 65 20 6d 61 69 6e 20 64  d. If the main d
e470: 61 74 61 62 61 73 65 20 65 78 69 73 74 73 2c 20  atabase exists, 
e480: 74 68 65 20 6e 65 77 20 73 71 6c 69 74 65 2e 65  the new sqlite.e
e490: 6e 63 20 76 61 6c 75 65 0a 20 20 20 20 20 20 2a  nc value.      *
e4a0: 2a 20 77 69 6c 6c 20 62 65 20 6f 76 65 72 77 72  * will be overwr
e4b0: 69 74 74 65 6e 20 77 68 65 6e 20 74 68 65 20 73  itten when the s
e4c0: 63 68 65 6d 61 20 69 73 20 6e 65 78 74 20 6c 6f  chema is next lo
e4d0: 61 64 65 64 2e 20 49 66 20 69 74 20 64 6f 65 73  aded. If it does
e4e0: 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61 6c   not.      ** al
e4f0: 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 69 74  ready exists, it
e500: 20 77 69 6c 6c 20 62 65 20 63 72 65 61 74 65 64   will be created
e510: 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65 77 20   to use the new 
e520: 65 6e 63 6f 64 69 6e 67 20 76 61 6c 75 65 2e 0a  encoding value..
e530: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
e540: 66 28 20 0a 20 20 20 20 20 20 20 20 21 28 44 62  f( .        !(Db
e550: 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
e560: 30 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  0, DB_SchemaLoad
e570: 65 64 29 29 20 7c 7c 20 0a 20 20 20 20 20 20 20  ed)) || .       
e580: 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64   DbHasProperty(d
e590: 62 2c 20 30 2c 20 44 42 5f 45 6d 70 74 79 29 20  b, 0, DB_Empty) 
e5a0: 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20  .      ){.      
e5b0: 20 20 66 6f 72 28 70 45 6e 63 3d 26 65 6e 63 6e    for(pEnc=&encn
e5c0: 61 6d 65 73 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a  ames[0]; pEnc->z
e5d0: 4e 61 6d 65 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20  Name; pEnc++){. 
e5e0: 20 20 20 20 20 20 20 20 20 69 66 28 20 30 3d 3d           if( 0==
e5f0: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
e600: 52 69 67 68 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61  Right, pEnc->zNa
e610: 6d 65 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  me) ){.         
e620: 20 20 20 53 43 48 45 4d 41 5f 45 4e 43 28 64 62     SCHEMA_ENC(db
e630: 29 20 3d 20 45 4e 43 28 64 62 29 20 3d 0a 20 20  ) = ENC(db) =.  
e640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 45                pE
e650: 6e 63 2d 3e 65 6e 63 20 3f 20 70 45 6e 63 2d 3e  nc->enc ? pEnc->
e660: 65 6e 63 20 3a 20 53 51 4c 49 54 45 5f 55 54 46  enc : SQLITE_UTF
e670: 31 36 4e 41 54 49 56 45 3b 0a 20 20 20 20 20 20  16NATIVE;.      
e680: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
e690: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
e6a0: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 21   }.        if( !
e6b0: 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29 7b 0a 20  pEnc->zName ){. 
e6c0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e6d0: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
e6e0: 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20 65 6e   "unsupported en
e6f0: 63 6f 64 69 6e 67 3a 20 25 73 22 2c 20 7a 52 69  coding: %s", zRi
e700: 67 68 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ght);.        }.
e710: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
e720: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
e730: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
e740: 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69 66 6e 64  _UTF16 */..#ifnd
e750: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
e760: 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52  CHEMA_VERSION_PR
e770: 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20  AGMAS.  /*.  ** 
e780: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
e790: 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  .]schema_version
e7a0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
e7b0: 73 63 68 65 6d 61 2e 5d 73 63 68 65 6d 61 5f 76  schema.]schema_v
e7c0: 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65  ersion = <intege
e7d0: 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50  r>.  **.  **   P
e7e0: 52 41 47 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 75  RAGMA [schema.]u
e7f0: 73 65 72 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a  ser_version.  **
e800: 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d     PRAGMA [schem
e810: 61 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  a.]user_version 
e820: 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a  = <integer>.  **
e830: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
e840: 73 63 68 65 6d 61 2e 5d 66 72 65 65 6c 69 73 74  schema.]freelist
e850: 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a  _count.  **.  **
e860: 20 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d     PRAGMA [schem
e870: 61 2e 5d 64 61 74 61 5f 76 65 72 73 69 6f 6e 0a  a.]data_version.
e880: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    **.  **   PRAG
e890: 4d 41 20 5b 73 63 68 65 6d 61 2e 5d 61 70 70 6c  MA [schema.]appl
e8a0: 69 63 61 74 69 6f 6e 5f 69 64 0a 20 20 2a 2a 20  ication_id.  ** 
e8b0: 20 20 50 52 41 47 4d 41 20 5b 73 63 68 65 6d 61    PRAGMA [schema
e8c0: 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64  .]application_id
e8d0: 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a   = <integer>.  *
e8e0: 2a 0a 20 20 2a 2a 20 54 68 65 20 70 72 61 67 6d  *.  ** The pragm
e8f0: 61 27 73 20 73 63 68 65 6d 61 5f 76 65 72 73 69  a's schema_versi
e900: 6f 6e 20 61 6e 64 20 75 73 65 72 5f 76 65 72 73  on and user_vers
e910: 69 6f 6e 20 61 72 65 20 75 73 65 64 20 74 6f 20  ion are used to 
e920: 73 65 74 20 6f 72 20 67 65 74 0a 20 20 2a 2a 20  set or get.  ** 
e930: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
e940: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
e950: 61 6e 64 20 75 73 65 72 2d 76 65 72 73 69 6f 6e  and user-version
e960: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
e970: 42 6f 74 68 0a 20 20 2a 2a 20 74 68 65 20 73 63  Both.  ** the sc
e980: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64  hema-version and
e990: 20 74 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f   the user-versio
e9a0: 6e 20 61 72 65 20 33 32 2d 62 69 74 20 73 69 67  n are 32-bit sig
e9b0: 6e 65 64 20 69 6e 74 65 67 65 72 73 0a 20 20 2a  ned integers.  *
e9c0: 2a 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  * stored in the 
e9d0: 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72 2e  database header.
e9e0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73  .  **.  ** The s
e9f0: 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 69 73 20  chema-cookie is 
ea00: 75 73 75 61 6c 6c 79 20 6f 6e 6c 79 20 6d 61 6e  usually only man
ea10: 69 70 75 6c 61 74 65 64 20 69 6e 74 65 72 6e 61  ipulated interna
ea20: 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49  lly by SQLite. I
ea30: 74 0a 20 20 2a 2a 20 69 73 20 69 6e 63 72 65 6d  t.  ** is increm
ea40: 65 6e 74 65 64 20 62 79 20 53 51 4c 69 74 65 20  ented by SQLite 
ea50: 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
ea60: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
ea70: 6d 6f 64 69 66 69 65 64 20 28 62 79 0a 20 20 2a  modified (by.  *
ea80: 2a 20 63 72 65 61 74 69 6e 67 20 6f 72 20 64 72  * creating or dr
ea90: 6f 70 70 69 6e 67 20 61 20 74 61 62 6c 65 20 6f  opping a table o
eaa0: 72 20 69 6e 64 65 78 29 2e 20 54 68 65 20 73 63  r index). The sc
eab0: 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20  hema version is 
eac0: 75 73 65 64 20 62 79 0a 20 20 2a 2a 20 53 51 4c  used by.  ** SQL
ead0: 69 74 65 20 65 61 63 68 20 74 69 6d 65 20 61 20  ite each time a 
eae0: 71 75 65 72 79 20 69 73 20 65 78 65 63 75 74 65  query is execute
eaf0: 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74  d to ensure that
eb00: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 63 61   the internal ca
eb10: 63 68 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  che.  ** of the 
eb20: 73 63 68 65 6d 61 20 75 73 65 64 20 77 68 65 6e  schema used when
eb30: 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 53   compiling the S
eb40: 51 4c 20 71 75 65 72 79 20 6d 61 74 63 68 65 73  QL query matches
eb50: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66 0a 20   the schema of. 
eb60: 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65   ** the database
eb70: 20 61 67 61 69 6e 73 74 20 77 68 69 63 68 20 74   against which t
eb80: 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72  he compiled quer
eb90: 79 20 69 73 20 61 63 74 75 61 6c 6c 79 20 65 78  y is actually ex
eba0: 65 63 75 74 65 64 2e 0a 20 20 2a 2a 20 53 75 62  ecuted..  ** Sub
ebb0: 76 65 72 74 69 6e 67 20 74 68 69 73 20 6d 65 63  verting this mec
ebc0: 68 61 6e 69 73 6d 20 62 79 20 75 73 69 6e 67 20  hanism by using 
ebd0: 22 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76  "PRAGMA schema_v
ebe0: 65 72 73 69 6f 6e 22 20 74 6f 20 6d 6f 64 69 66  ersion" to modif
ebf0: 79 0a 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d  y.  ** the schem
ec00: 61 2d 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 74  a-version is pot
ec10: 65 6e 74 69 61 6c 6c 79 20 64 61 6e 67 65 72 6f  entially dangero
ec20: 75 73 20 61 6e 64 20 6d 61 79 20 6c 65 61 64 20  us and may lead 
ec30: 74 6f 20 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20  to program.  ** 
ec40: 63 72 61 73 68 65 73 20 6f 72 20 64 61 74 61 62  crashes or datab
ec50: 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20  ase corruption. 
ec60: 55 73 65 20 77 69 74 68 20 63 61 75 74 69 6f 6e  Use with caution
ec70: 21 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  !.  **.  ** The 
ec80: 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 69 73 20  user-version is 
ec90: 6e 6f 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61  not used interna
eca0: 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49  lly by SQLite. I
ecb0: 74 20 6d 61 79 20 62 65 20 75 73 65 64 20 62 79  t may be used by
ecc0: 0a 20 20 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f  .  ** applicatio
ecd0: 6e 73 20 66 6f 72 20 61 6e 79 20 70 75 72 70 6f  ns for any purpo
ece0: 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  se..  */.  case 
ecf0: 50 72 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56  PragTyp_HEADER_V
ed00: 41 4c 55 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20  ALUE: {.    int 
ed10: 69 43 6f 6f 6b 69 65 20 3d 20 70 50 72 61 67 6d  iCookie = pPragm
ed20: 61 2d 3e 69 41 72 67 3b 20 20 2f 2a 20 57 68 69  a->iArg;  /* Whi
ed30: 63 68 20 63 6f 6f 6b 69 65 20 74 6f 20 72 65 61  ch cookie to rea
ed40: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
ed50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65    sqlite3VdbeUse
ed60: 73 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a  sBtree(v, iDb);.
ed70: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 26      if( zRight &
ed80: 26 20 28 70 50 72 61 67 6d 61 2d 3e 6d 50 72 61  & (pPragma->mPra
ed90: 67 46 6c 61 67 20 26 20 50 72 61 67 46 6c 61 67  gFlag & PragFlag
eda0: 5f 52 65 61 64 4f 6e 6c 79 29 3d 3d 30 20 29 7b  _ReadOnly)==0 ){
edb0: 0a 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20  .      /* Write 
edc0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f  the specified co
edd0: 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20  okie value */.  
ede0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
edf0: 20 56 64 62 65 4f 70 4c 69 73 74 20 73 65 74 43   VdbeOpList setC
ee00: 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  ookie[] = {.    
ee10: 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63      { OP_Transac
ee20: 74 69 6f 6e 2c 20 20 20 20 30 2c 20 20 31 2c 20  tion,    0,  1, 
ee30: 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a   0},    /* 0 */.
ee40: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74          { OP_Set
ee50: 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20  Cookie,      0, 
ee60: 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31   0,  0},    /* 1
ee70: 20 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20   */.      };.   
ee80: 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70 3b 0a     VdbeOp *aOp;.
ee90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
eea0: 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f 63 52  eVerifyNoMallocR
eeb0: 65 71 75 69 72 65 64 28 76 2c 20 41 72 72 61 79  equired(v, Array
eec0: 53 69 7a 65 28 73 65 74 43 6f 6f 6b 69 65 29 29  Size(setCookie))
eed0: 3b 0a 20 20 20 20 20 20 61 4f 70 20 3d 20 73 71  ;.      aOp = sq
eee0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
eef0: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
ef00: 73 65 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74 43  setCookie), setC
ef10: 6f 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20 20  ookie, 0);.     
ef20: 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f 52 45 41   if( ONLY_IF_REA
ef30: 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61 4f 70 3d  LLOC_STRESS(aOp=
ef40: 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  =0) ) break;.   
ef50: 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20 3d 20 69     aOp[0].p1 = i
ef60: 44 62 3b 0a 20 20 20 20 20 20 61 4f 70 5b 31 5d  Db;.      aOp[1]
ef70: 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20 20 20 20  .p1 = iDb;.     
ef80: 20 61 4f 70 5b 31 5d 2e 70 32 20 3d 20 69 43 6f   aOp[1].p2 = iCo
ef90: 6f 6b 69 65 3b 0a 20 20 20 20 20 20 61 4f 70 5b  okie;.      aOp[
efa0: 31 5d 2e 70 33 20 3d 20 73 71 6c 69 74 65 33 41  1].p3 = sqlite3A
efb0: 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20  toi(zRight);.   
efc0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
efd0: 20 52 65 61 64 20 74 68 65 20 73 70 65 63 69 66   Read the specif
efe0: 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65  ied cookie value
eff0: 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63   */.      static
f000: 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
f010: 74 20 72 65 61 64 43 6f 6f 6b 69 65 5b 5d 20 3d  t readCookie[] =
f020: 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f   {.        { OP_
f030: 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20  Transaction,    
f040: 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20 20   0,  0,  0},    
f050: 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 0 */.        
f060: 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c  { OP_ReadCookie,
f070: 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d        0,  1,  0}
f080: 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20  ,    /* 1 */.   
f090: 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74       { OP_Result
f0a0: 52 6f 77 2c 20 20 20 20 20 20 20 31 2c 20 20 31  Row,       1,  1
f0b0: 2c 20 20 30 7d 0a 20 20 20 20 20 20 7d 3b 0a 20  ,  0}.      };. 
f0c0: 20 20 20 20 20 56 64 62 65 4f 70 20 2a 61 4f 70       VdbeOp *aOp
f0d0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
f0e0: 64 62 65 56 65 72 69 66 79 4e 6f 4d 61 6c 6c 6f  dbeVerifyNoMallo
f0f0: 63 52 65 71 75 69 72 65 64 28 76 2c 20 41 72 72  cRequired(v, Arr
f100: 61 79 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69  aySize(readCooki
f110: 65 29 29 3b 0a 20 20 20 20 20 20 61 4f 70 20 3d  e));.      aOp =
f120: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
f130: 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69  pList(v, ArraySi
f140: 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65 29 2c 72  ze(readCookie),r
f150: 65 61 64 43 6f 6f 6b 69 65 2c 30 29 3b 0a 20 20  eadCookie,0);.  
f160: 20 20 20 20 69 66 28 20 4f 4e 4c 59 5f 49 46 5f      if( ONLY_IF_
f170: 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 61  REALLOC_STRESS(a
f180: 4f 70 3d 3d 30 29 20 29 20 62 72 65 61 6b 3b 0a  Op==0) ) break;.
f190: 20 20 20 20 20 20 61 4f 70 5b 30 5d 2e 70 31 20        aOp[0].p1 
f1a0: 3d 20 69 44 62 3b 0a 20 20 20 20 20 20 61 4f 70  = iDb;.      aOp
f1b0: 5b 31 5d 2e 70 31 20 3d 20 69 44 62 3b 0a 20 20  [1].p1 = iDb;.  
f1c0: 20 20 20 20 61 4f 70 5b 31 5d 2e 70 33 20 3d 20      aOp[1].p3 = 
f1d0: 69 43 6f 6f 6b 69 65 3b 0a 20 20 20 20 20 20 73  iCookie;.      s
f1e0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
f1f0: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
f200: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
f210: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
f220: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66  LNAME_NAME, zLef
f230: 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  t, SQLITE_TRANSI
f240: 45 4e 54 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ENT);.      sqli
f250: 74 65 33 56 64 62 65 52 65 75 73 61 62 6c 65 28  te3VdbeReusable(
f260: 76 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  v);.    }.  }.  
f270: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
f280: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48   SQLITE_OMIT_SCH
f290: 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47  EMA_VERSION_PRAG
f2a0: 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
f2b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
f2c0: 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a  ILEOPTION_DIAGS.
f2d0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
f2e0: 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f  MA compile_optio
f2f0: 6e 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  ns.  **.  ** Ret
f300: 75 72 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f 66  urn the names of
f310: 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   all compile-tim
f320: 65 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 69  e options used i
f330: 6e 20 74 68 69 73 20 62 75 69 6c 64 2c 0a 20 20  n this build,.  
f340: 2a 2a 20 6f 6e 65 20 6f 70 74 69 6f 6e 20 70 65  ** one option pe
f350: 72 20 72 6f 77 2e 0a 20 20 2a 2f 0a 20 20 63 61  r row..  */.  ca
f360: 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4d 50 49  se PragTyp_COMPI
f370: 4c 45 5f 4f 50 54 49 4f 4e 53 3a 20 7b 0a 20 20  LE_OPTIONS: {.  
f380: 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20    int i = 0;.   
f390: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70   const char *zOp
f3a0: 74 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  t;.    pParse->n
f3b0: 4d 65 6d 20 3d 20 31 3b 0a 20 20 20 20 73 65 74  Mem = 1;.    set
f3c0: 4f 6e 65 43 6f 6c 75 6d 6e 4e 61 6d 65 28 76 2c  OneColumnName(v,
f3d0: 20 22 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e   "compile_option
f3e0: 22 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28  ");.    while( (
f3f0: 7a 4f 70 74 20 3d 20 73 71 6c 69 74 65 33 5f 63  zOpt = sqlite3_c
f400: 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74  ompileoption_get
f410: 28 69 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20  (i++))!=0 ){.   
f420: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 6f     sqlite3VdbeLo
f430: 61 64 53 74 72 69 6e 67 28 76 2c 20 31 2c 20 7a  adString(v, 1, z
f440: 4f 70 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  Opt);.      sqli
f450: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
f460: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
f470: 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 1);.    }.    
f480: 73 71 6c 69 74 65 33 56 64 62 65 52 65 75 73 61  sqlite3VdbeReusa
f490: 62 6c 65 28 76 29 3b 0a 20 20 7d 0a 20 20 62 72  ble(v);.  }.  br
f4a0: 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  eak;.#endif /* S
f4b0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49  QLITE_OMIT_COMPI
f4c0: 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 20 2a  LEOPTION_DIAGS *
f4d0: 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
f4e0: 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 2f 2a 0a  E_OMIT_WAL.  /*.
f4f0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 73    **   PRAGMA [s
f500: 63 68 65 6d 61 2e 5d 77 61 6c 5f 63 68 65 63 6b  chema.]wal_check
f510: 70 6f 69 6e 74 20 3d 20 70 61 73 73 69 76 65 7c  point = passive|
f520: 66 75 6c 6c 7c 72 65 73 74 61 72 74 7c 74 72 75  full|restart|tru
f530: 6e 63 61 74 65 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ncate.  **.  ** 
f540: 43 68 65 63 6b 70 6f 69 6e 74 20 74 68 65 20 64  Checkpoint the d
f550: 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20 20  atabase..  */.  
f560: 63 61 73 65 20 50 72 61 67 54 79 70 5f 57 41 4c  case PragTyp_WAL
f570: 5f 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20  _CHECKPOINT: {. 
f580: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
f590: 63 68 61 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20  char *azCol[] = 
f5a0: 7b 20 22 62 75 73 79 22 2c 20 22 6c 6f 67 22 2c  { "busy", "log",
f5b0: 20 22 63 68 65 63 6b 70 6f 69 6e 74 65 64 22 20   "checkpointed" 
f5c0: 7d 3b 0a 20 20 20 20 69 6e 74 20 69 42 74 20 3d  };.    int iBt =
f5d0: 20 28 70 49 64 32 2d 3e 7a 3f 69 44 62 3a 53 51   (pId2->z?iDb:SQ
f5e0: 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
f5f0: 44 29 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64  D);.    int eMod
f600: 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b  e = SQLITE_CHECK
f610: 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 3b 0a 20  POINT_PASSIVE;. 
f620: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
f630: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
f640: 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74  e3StrICmp(zRight
f650: 2c 20 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a  , "full")==0 ){.
f660: 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20          eMode = 
f670: 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
f680: 54 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 7d 65  T_FULL;.      }e
f690: 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53  lse if( sqlite3S
f6a0: 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  trICmp(zRight, "
f6b0: 72 65 73 74 61 72 74 22 29 3d 3d 30 20 29 7b 0a  restart")==0 ){.
f6c0: 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20          eMode = 
f6d0: 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
f6e0: 54 5f 52 45 53 54 41 52 54 3b 0a 20 20 20 20 20  T_RESTART;.     
f6f0: 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74   }else if( sqlit
f700: 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74  e3StrICmp(zRight
f710: 2c 20 22 74 72 75 6e 63 61 74 65 22 29 3d 3d 30  , "truncate")==0
f720: 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f 64   ){.        eMod
f730: 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b  e = SQLITE_CHECK
f740: 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45 3b 0a  POINT_TRUNCATE;.
f750: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
f760: 20 20 73 65 74 41 6c 6c 43 6f 6c 75 6d 6e 4e 61    setAllColumnNa
f770: 6d 65 73 28 76 2c 20 33 2c 20 61 7a 43 6f 6c 29  mes(v, 3, azCol)
f780: 3b 20 20 61 73 73 65 72 74 28 20 33 3d 3d 41 72  ;  assert( 3==Ar
f790: 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c 29 20 29  raySize(azCol) )
f7a0: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
f7b0: 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69  em = 3;.    sqli
f7c0: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
f7d0: 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 2c 20   OP_Checkpoint, 
f7e0: 69 42 74 2c 20 65 4d 6f 64 65 2c 20 31 29 3b 0a  iBt, eMode, 1);.
f7f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
f800: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
f810: 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20  ltRow, 1, 3);.  
f820: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 2f 2a  }.  break;..  /*
f830: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77  .  **   PRAGMA w
f840: 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e  al_autocheckpoin
f850: 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  t.  **   PRAGMA 
f860: 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69  wal_autocheckpoi
f870: 6e 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  nt = N.  **.  **
f880: 20 43 6f 6e 66 69 67 75 72 65 20 61 20 64 61 74   Configure a dat
f890: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
f8a0: 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   to automaticall
f8b0: 79 20 63 68 65 63 6b 70 6f 69 6e 74 20 61 20 64  y checkpoint a d
f8c0: 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 61 66 74  atabase.  ** aft
f8d0: 65 72 20 61 63 63 75 6d 75 6c 61 74 69 6e 67 20  er accumulating 
f8e0: 4e 20 66 72 61 6d 65 73 20 69 6e 20 74 68 65 20  N frames in the 
f8f0: 6c 6f 67 2e 20 4f 72 20 71 75 65 72 79 20 66 6f  log. Or query fo
f900: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61  r the current va
f910: 6c 75 65 0a 20 20 2a 2a 20 6f 66 20 4e 2e 0a 20  lue.  ** of N.. 
f920: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
f930: 79 70 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b  yp_WAL_AUTOCHECK
f940: 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69 66 28  POINT: {.    if(
f950: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
f960: 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f 61 75 74   sqlite3_wal_aut
f970: 6f 63 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20  ocheckpoint(db, 
f980: 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67  sqlite3Atoi(zRig
f990: 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ht));.    }.    
f9a0: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
f9b0: 76 2c 20 22 77 61 6c 5f 61 75 74 6f 63 68 65 63  v, "wal_autochec
f9c0: 6b 70 6f 69 6e 74 22 2c 20 0a 20 20 20 20 20 20  kpoint", .      
f9d0: 20 64 62 2d 3e 78 57 61 6c 43 61 6c 6c 62 61 63   db->xWalCallbac
f9e0: 6b 3d 3d 73 71 6c 69 74 65 33 57 61 6c 44 65 66  k==sqlite3WalDef
f9f0: 61 75 6c 74 48 6f 6f 6b 20 3f 20 0a 20 20 20 20  aultHook ? .    
fa00: 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 50 54         SQLITE_PT
fa10: 52 5f 54 4f 5f 49 4e 54 28 64 62 2d 3e 70 57 61  R_TO_INT(db->pWa
fa20: 6c 41 72 67 29 20 3a 20 30 29 3b 0a 20 20 7d 0a  lArg) : 0);.  }.
fa30: 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a    break;.#endif.
fa40: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
fa50: 4d 41 20 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79  MA shrink_memory
fa60: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45  .  **.  ** IMPLE
fa70: 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
fa80: 32 33 34 34 35 2d 34 36 31 30 39 20 54 68 69 73  23445-46109 This
fa90: 20 70 72 61 67 6d 61 20 63 61 75 73 65 73 20 74   pragma causes t
faa0: 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a  he database.  **
fab0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 6e 20 77   connection on w
fac0: 68 69 63 68 20 69 74 20 69 73 20 69 6e 76 6f 6b  hich it is invok
fad0: 65 64 20 74 6f 20 66 72 65 65 20 75 70 20 61 73  ed to free up as
fae0: 20 6d 75 63 68 20 6d 65 6d 6f 72 79 20 61 73 20   much memory as 
faf0: 69 74 0a 20 20 2a 2a 20 63 61 6e 2c 20 62 79 20  it.  ** can, by 
fb00: 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f  calling sqlite3_
fb10: 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72  db_release_memor
fb20: 79 28 29 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  y()..  */.  case
fb30: 20 50 72 61 67 54 79 70 5f 53 48 52 49 4e 4b 5f   PragTyp_SHRINK_
fb40: 4d 45 4d 4f 52 59 3a 20 7b 0a 20 20 20 20 73 71  MEMORY: {.    sq
fb50: 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73 65  lite3_db_release
fb60: 5f 6d 65 6d 6f 72 79 28 64 62 29 3b 0a 20 20 20  _memory(db);.   
fb70: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
fb80: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
fb90: 62 75 73 79 5f 74 69 6d 65 6f 75 74 0a 20 20 2a  busy_timeout.  *
fba0: 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79 5f  *   PRAGMA busy_
fbb0: 74 69 6d 65 6f 75 74 20 3d 20 4e 0a 20 20 2a 2a  timeout = N.  **
fbc0: 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74  .  ** Call sqlit
fbd0: 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28  e3_busy_timeout(
fbe0: 64 62 2c 20 4e 29 2e 20 20 52 65 74 75 72 6e 20  db, N).  Return 
fbf0: 74 68 65 20 63 75 72 72 65 6e 74 20 74 69 6d 65  the current time
fc00: 6f 75 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20 69  out value.  ** i
fc10: 66 20 6f 6e 65 20 69 73 20 73 65 74 2e 20 20 49  f one is set.  I
fc20: 66 20 6e 6f 20 62 75 73 79 20 68 61 6e 64 6c 65  f no busy handle
fc30: 72 20 6f 72 20 61 20 64 69 66 66 65 72 65 6e 74  r or a different
fc40: 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 69 73   busy handler is
fc50: 20 73 65 74 0a 20 20 2a 2a 20 74 68 65 6e 20 30   set.  ** then 0
fc60: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 53   is returned.  S
fc70: 65 74 74 69 6e 67 20 74 68 65 20 62 75 73 79 5f  etting the busy_
fc80: 74 69 6d 65 6f 75 74 20 74 6f 20 30 20 6f 72 20  timeout to 0 or 
fc90: 6e 65 67 61 74 69 76 65 0a 20 20 2a 2a 20 64 69  negative.  ** di
fca0: 73 61 62 6c 65 73 20 74 68 65 20 74 69 6d 65 6f  sables the timeo
fcb0: 75 74 2e 0a 20 20 2a 2f 0a 20 20 2f 2a 63 61 73  ut..  */.  /*cas
fcc0: 65 20 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54  e PragTyp_BUSY_T
fcd0: 49 4d 45 4f 55 54 2a 2f 20 64 65 66 61 75 6c 74  IMEOUT*/ default
fce0: 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  : {.    assert( 
fcf0: 70 50 72 61 67 6d 61 2d 3e 65 50 72 61 67 54 79  pPragma->ePragTy
fd00: 70 3d 3d 50 72 61 67 54 79 70 5f 42 55 53 59 5f  p==PragTyp_BUSY_
fd10: 54 49 4d 45 4f 55 54 20 29 3b 0a 20 20 20 20 69  TIMEOUT );.    i
fd20: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
fd30: 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f     sqlite3_busy_
fd40: 74 69 6d 65 6f 75 74 28 64 62 2c 20 73 71 6c 69  timeout(db, sqli
fd50: 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29  te3Atoi(zRight))
fd60: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
fd70: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22  rnSingleInt(v, "
fd80: 74 69 6d 65 6f 75 74 22 2c 20 20 64 62 2d 3e 62  timeout",  db->b
fd90: 75 73 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20 20  usyTimeout);.   
fda0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
fdb0: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
fdc0: 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 0a  soft_heap_limit.
fdd0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f    **   PRAGMA so
fde0: 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3d 20  ft_heap_limit = 
fdf0: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c  N.  **.  ** IMPL
fe00: 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
fe10: 2d 32 36 33 34 33 2d 34 35 39 33 30 20 54 68 69  -26343-45930 Thi
fe20: 73 20 70 72 61 67 6d 61 20 69 6e 76 6f 6b 65 73  s pragma invokes
fe30: 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65   the.  ** sqlite
fe40: 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  3_soft_heap_limi
fe50: 74 36 34 28 29 20 69 6e 74 65 72 66 61 63 65 20  t64() interface 
fe60: 77 69 74 68 20 74 68 65 20 61 72 67 75 6d 65 6e  with the argumen
fe70: 74 20 4e 2c 20 69 66 20 4e 20 69 73 0a 20 20 2a  t N, if N is.  *
fe80: 2a 20 73 70 65 63 69 66 69 65 64 20 61 6e 64 20  * specified and 
fe90: 69 73 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76  is a non-negativ
fea0: 65 20 69 6e 74 65 67 65 72 2e 0a 20 20 2a 2a 20  e integer..  ** 
feb0: 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
fec0: 46 3a 20 52 2d 36 34 34 35 31 2d 30 37 31 36 33  F: R-64451-07163
fed0: 20 54 68 65 20 73 6f 66 74 5f 68 65 61 70 5f 6c   The soft_heap_l
fee0: 69 6d 69 74 20 70 72 61 67 6d 61 20 61 6c 77 61  imit pragma alwa
fef0: 79 73 0a 20 20 2a 2a 20 72 65 74 75 72 6e 73 20  ys.  ** returns 
ff00: 74 68 65 20 73 61 6d 65 20 69 6e 74 65 67 65 72  the same integer
ff10: 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20 72   that would be r
ff20: 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 0a 20  eturned by the. 
ff30: 20 2a 2a 20 73 71 6c 69 74 65 33 5f 73 6f 66 74   ** sqlite3_soft
ff40: 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d 31  _heap_limit64(-1
ff50: 29 20 43 2d 6c 61 6e 67 75 61 67 65 20 66 75 6e  ) C-language fun
ff60: 63 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61  ction..  */.  ca
ff70: 73 65 20 50 72 61 67 54 79 70 5f 53 4f 46 54 5f  se PragTyp_SOFT_
ff80: 48 45 41 50 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20  HEAP_LIMIT: {.  
ff90: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
ffa0: 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  N;.    if( zRigh
ffb0: 74 20 26 26 20 73 71 6c 69 74 65 33 44 65 63 4f  t && sqlite3DecO
ffc0: 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74  rHexToI64(zRight
ffd0: 2c 20 26 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  , &N)==SQLITE_OK
ffe0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
fff0: 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  3_soft_heap_limi
10000 74 36 34 28 4e 29 3b 0a 20 20 20 20 7d 0a 20 20  t64(N);.    }.  
10010 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
10020 74 28 76 2c 20 22 73 6f 66 74 5f 68 65 61 70 5f  t(v, "soft_heap_
10030 6c 69 6d 69 74 22 2c 20 20 73 71 6c 69 74 65 33  limit",  sqlite3
10040 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
10050 36 34 28 2d 31 29 29 3b 0a 20 20 20 20 62 72 65  64(-1));.    bre
10060 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
10070 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 68 72 65  **   PRAGMA thre
10080 61 64 73 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ads.  **   PRAGM
10090 41 20 74 68 72 65 61 64 73 20 3d 20 4e 0a 20 20  A threads = N.  
100a0 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72  **.  ** Configur
100b0 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  e the maximum nu
100c0 6d 62 65 72 20 6f 66 20 77 6f 72 6b 65 72 20 74  mber of worker t
100d0 68 72 65 61 64 73 2e 20 20 52 65 74 75 72 6e 20  hreads.  Return 
100e0 74 68 65 20 6e 65 77 0a 20 20 2a 2a 20 6d 61 78  the new.  ** max
100f0 69 6d 75 6d 2c 20 77 68 69 63 68 20 6d 69 67 68  imum, which migh
10100 74 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 72  t be less than r
10110 65 71 75 65 73 74 65 64 2e 0a 20 20 2a 2f 0a 20  equested..  */. 
10120 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 48   case PragTyp_TH
10130 52 45 41 44 53 3a 20 7b 0a 20 20 20 20 73 71 6c  READS: {.    sql
10140 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20  ite3_int64 N;.  
10150 20 20 69 66 28 20 7a 52 69 67 68 74 0a 20 20 20    if( zRight.   
10160 20 20 26 26 20 73 71 6c 69 74 65 33 44 65 63 4f    && sqlite3DecO
10170 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74  rHexToI64(zRight
10180 2c 20 26 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  , &N)==SQLITE_OK
10190 0a 20 20 20 20 20 26 26 20 4e 3e 3d 30 0a 20 20  .     && N>=0.  
101a0 20 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74    ){.      sqlit
101b0 65 33 5f 6c 69 6d 69 74 28 64 62 2c 20 53 51 4c  e3_limit(db, SQL
101c0 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52  ITE_LIMIT_WORKER
101d0 5f 54 48 52 45 41 44 53 2c 20 28 69 6e 74 29 28  _THREADS, (int)(
101e0 4e 26 30 78 37 66 66 66 66 66 66 66 29 29 3b 0a  N&0x7fffffff));.
101f0 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
10200 53 69 6e 67 6c 65 49 6e 74 28 76 2c 20 22 74 68  SingleInt(v, "th
10210 72 65 61 64 73 22 2c 0a 20 20 20 20 20 20 20 20  reads",.        
10220 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
10230 74 65 33 5f 6c 69 6d 69 74 28 64 62 2c 20 53 51  te3_limit(db, SQ
10240 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45  LITE_LIMIT_WORKE
10250 52 5f 54 48 52 45 41 44 53 2c 20 2d 31 29 29 3b  R_THREADS, -1));
10260 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
10270 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
10280 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
10290 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
102a0 54 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 52 65 70  T).  /*.  ** Rep
102b0 6f 72 74 20 74 68 65 20 63 75 72 72 65 6e 74 20  ort the current 
102c0 73 74 61 74 65 20 6f 66 20 66 69 6c 65 20 6c 6f  state of file lo
102d0 67 73 20 66 6f 72 20 61 6c 6c 20 64 61 74 61 62  gs for all datab
102e0 61 73 65 73 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ases.  */.  case
102f0 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53 54   PragTyp_LOCK_ST
10300 41 54 55 53 3a 20 7b 0a 20 20 20 20 73 74 61 74  ATUS: {.    stat
10310 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63  ic const char *c
10320 6f 6e 73 74 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b  onst azLockName[
10330 5d 20 3d 20 7b 0a 20 20 20 20 20 20 22 75 6e 6c  ] = {.      "unl
10340 6f 63 6b 65 64 22 2c 20 22 73 68 61 72 65 64 22  ocked", "shared"
10350 2c 20 22 72 65 73 65 72 76 65 64 22 2c 20 22 70  , "reserved", "p
10360 65 6e 64 69 6e 67 22 2c 20 22 65 78 63 6c 75 73  ending", "exclus
10370 69 76 65 22 0a 20 20 20 20 7d 3b 0a 20 20 20 20  ive".    };.    
10380 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
10390 72 20 2a 61 7a 43 6f 6c 5b 5d 20 3d 20 7b 20 22  r *azCol[] = { "
103a0 64 61 74 61 62 61 73 65 22 2c 20 22 73 74 61 74  database", "stat
103b0 75 73 22 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69  us" };.    int i
103c0 3b 0a 20 20 20 20 73 65 74 41 6c 6c 43 6f 6c 75  ;.    setAllColu
103d0 6d 6e 4e 61 6d 65 73 28 76 2c 20 32 2c 20 61 7a  mnNames(v, 2, az
103e0 43 6f 6c 29 3b 20 61 73 73 65 72 74 28 20 32 3d  Col); assert( 2=
103f0 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 43 6f 6c  =ArraySize(azCol
10400 29 20 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  ) );.    pParse-
10410 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 66  >nMem = 2;.    f
10420 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
10430 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 42  b; i++){.      B
10440 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 20 20 20  tree *pBt;.     
10450 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
10460 61 74 65 20 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b  ate = "unknown";
10470 0a 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20  .      int j;.  
10480 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
10490 69 5d 2e 7a 4e 61 6d 65 3d 3d 30 20 29 20 63 6f  i].zName==0 ) co
104a0 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 70 42  ntinue;.      pB
104b0 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  t = db->aDb[i].p
104c0 42 74 3b 0a 20 20 20 20 20 20 69 66 28 20 70 42  Bt;.      if( pB
104d0 74 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 42  t==0 || sqlite3B
104e0 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3d 3d  treePager(pBt)==
104f0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 53 74  0 ){.        zSt
10500 61 74 65 20 3d 20 22 63 6c 6f 73 65 64 22 3b 0a  ate = "closed";.
10510 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
10520 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
10530 74 72 6f 6c 28 64 62 2c 20 69 20 3f 20 64 62 2d  trol(db, i ? db-
10540 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 20 3a 20  >aDb[i].zName : 
10550 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  0, .            
10560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10570 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
10580 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54 41 54 45 2c  FCNTL_LOCKSTATE,
10590 20 26 6a 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20   &j)==SQLITE_OK 
105a0 29 7b 0a 20 20 20 20 20 20 20 20 20 7a 53 74 61  ){.         zSta
105b0 74 65 20 3d 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b  te = azLockName[
105c0 6a 5d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  j];.      }.    
105d0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 75 6c    sqlite3VdbeMul
105e0 74 69 4c 6f 61 64 28 76 2c 20 31 2c 20 22 73 73  tiLoad(v, 1, "ss
105f0 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e  ", db->aDb[i].zN
10600 61 6d 65 2c 20 7a 53 74 61 74 65 29 3b 0a 20 20  ame, zState);.  
10610 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10620 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
10630 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20  ltRow, 1, 2);.  
10640 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
10650 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65   }.#endif..#ifde
10660 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44  f SQLITE_HAS_COD
10670 45 43 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  EC.  case PragTy
10680 70 5f 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28  p_KEY: {.    if(
10690 20 7a 52 69 67 68 74 20 29 20 73 71 6c 69 74 65   zRight ) sqlite
106a0 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62  3_key_v2(db, zDb
106b0 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65  , zRight, sqlite
106c0 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74  3Strlen30(zRight
106d0 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ));.    break;. 
106e0 20 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79   }.  case PragTy
106f0 70 5f 52 45 4b 45 59 3a 20 7b 0a 20 20 20 20 69  p_REKEY: {.    i
10700 66 28 20 7a 52 69 67 68 74 20 29 20 73 71 6c 69  f( zRight ) sqli
10710 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c  te3_rekey_v2(db,
10720 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20 73 71   zDb, zRight, sq
10730 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52  lite3Strlen30(zR
10740 69 67 68 74 29 29 3b 0a 20 20 20 20 62 72 65 61  ight));.    brea
10750 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20 50 72  k;.  }.  case Pr
10760 61 67 54 79 70 5f 48 45 58 4b 45 59 3a 20 7b 0a  agTyp_HEXKEY: {.
10770 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
10780 7b 0a 20 20 20 20 20 20 75 38 20 69 42 79 74 65  {.      u8 iByte
10790 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20  ;.      int i;. 
107a0 20 20 20 20 20 63 68 61 72 20 7a 4b 65 79 5b 34       char zKey[4
107b0 30 5d 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  0];.      for(i=
107c0 30 2c 20 69 42 79 74 65 3d 30 3b 20 69 3c 73 69  0, iByte=0; i<si
107d0 7a 65 6f 66 28 7a 4b 65 79 29 2a 32 20 26 26 20  zeof(zKey)*2 && 
107e0 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
107f0 7a 52 69 67 68 74 5b 69 5d 29 3b 20 69 2b 2b 29  zRight[i]); i++)
10800 7b 0a 20 20 20 20 20 20 20 20 69 42 79 74 65 20  {.        iByte 
10810 3d 20 28 69 42 79 74 65 3c 3c 34 29 20 2b 20 73  = (iByte<<4) + s
10820 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 7a  qlite3HexToInt(z
10830 52 69 67 68 74 5b 69 5d 29 3b 0a 20 20 20 20 20  Right[i]);.     
10840 20 20 20 69 66 28 20 28 69 26 31 29 21 3d 30 20     if( (i&1)!=0 
10850 29 20 7a 4b 65 79 5b 69 2f 32 5d 20 3d 20 69 42  ) zKey[i/2] = iB
10860 79 74 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  yte;.      }.   
10870 20 20 20 69 66 28 20 28 7a 4c 65 66 74 5b 33 5d     if( (zLeft[3]
10880 20 26 20 30 78 66 29 3d 3d 30 78 62 20 29 7b 0a   & 0xf)==0xb ){.
10890 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
108a0 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20  key_v2(db, zDb, 
108b0 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20 20  zKey, i/2);.    
108c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
108d0 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 5f 76   sqlite3_rekey_v
108e0 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c  2(db, zDb, zKey,
108f0 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 0a 20   i/2);.      }. 
10900 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
10910 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20 64    }.#endif.#if d
10920 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
10930 53 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65 66 69  S_CODEC) || defi
10940 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
10950 45 5f 43 45 52 4f 44 29 0a 20 20 63 61 73 65 20  E_CEROD).  case 
10960 50 72 61 67 54 79 70 5f 41 43 54 49 56 41 54 45  PragTyp_ACTIVATE
10970 5f 45 58 54 45 4e 53 49 4f 4e 53 3a 20 69 66 28  _EXTENSIONS: if(
10980 20 7a 52 69 67 68 74 20 29 7b 0a 23 69 66 64 65   zRight ){.#ifde
10990 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44  f SQLITE_HAS_COD
109a0 45 43 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  EC.    if( sqlit
109b0 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68  e3StrNICmp(zRigh
109c0 74 2c 20 22 73 65 65 2d 22 2c 20 34 29 3d 3d 30  t, "see-", 4)==0
109d0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
109e0 33 5f 61 63 74 69 76 61 74 65 5f 73 65 65 28 26  3_activate_see(&
109f0 7a 52 69 67 68 74 5b 34 5d 29 3b 0a 20 20 20 20  zRight[4]);.    
10a00 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  }.#endif.#ifdef 
10a10 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45  SQLITE_ENABLE_CE
10a20 52 4f 44 0a 20 20 20 20 69 66 28 20 73 71 6c 69  ROD.    if( sqli
10a30 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67  te3StrNICmp(zRig
10a40 68 74 2c 20 22 63 65 72 6f 64 2d 22 2c 20 36 29  ht, "cerod-", 6)
10a50 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
10a60 69 74 65 33 5f 61 63 74 69 76 61 74 65 5f 63 65  ite3_activate_ce
10a70 72 6f 64 28 26 7a 52 69 67 68 74 5b 36 5d 29 3b  rod(&zRight[6]);
10a80 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
10a90 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
10aa0 66 0a 0a 20 20 7d 20 2f 2a 20 45 6e 64 20 6f 66  f..  } /* End of
10ab0 20 74 68 65 20 50 52 41 47 4d 41 20 73 77 69 74   the PRAGMA swit
10ac0 63 68 20 2a 2f 0a 0a 70 72 61 67 6d 61 5f 6f 75  ch */..pragma_ou
10ad0 74 3a 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  t:.  sqlite3DbFr
10ae0 65 65 28 64 62 2c 20 7a 4c 65 66 74 29 3b 0a 20  ee(db, zLeft);. 
10af0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
10b00 62 2c 20 7a 52 69 67 68 74 29 3b 0a 7d 0a 0a 23  b, zRight);.}..#
10b10 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
10b20 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a     OMIT_PRAGMA */.